/*
 * ══ PHONG INTER — TU CHUA, KHONG GOI RA NGOAI ══════════════════════════════
 *
 * Template dung Inter. Lay Google Fonts thi mot lan hong mang la ca giao dien
 * doi phong — phan mem nay chay trong luc dang phat song nen khong duoc phep
 * phu thuoc vao do. Ba tap ky tu (viet, latin-ext, latin) nam trong `phong/`,
 * tong 144 KB. `font-display: swap` de chu hien ngay bang phong du phong roi
 * doi, khong bao gio de trang trong chu.
 */
@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(/phong/inter-vi.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(/phong/inter-latext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(/phong/inter-lat.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/*
 * ══ TOKEN — CHEP NGUYEN TU TEMPLATE shadcn ══════════════════════════════════
 *
 * Nguon: shadcnstore/shadcn-dashboard-landing-template (MIT),
 * `nextjs-version/src/app/globals.css`. Moi gia tri oklch duoi day la gia tri
 * THAT trong tep do, khong phai phong theo.
 *
 * Vi sao oklch chu khong phai hex: `oklch(.97 0 0)` va `oklch(.922 0 0)` cach
 * nhau dung mot buoc do sang mat nguoi cam nhan duoc. Voi hex thi phai do tay
 * tung cap. Ca thang xam cua template dat tren truc do sang nay.
 *
 * ── MAC DINH LA SANG ──────────────────────────────────────────────────────
 * Template lay sang lam mac dinh (`:root` sang, `.dark` toi). Truoc day ben
 * minh nguoc lai. Da doi cho giong template.
 */
:root {
  --radius: .625rem;                    /* 10px */
  --radius-sm: calc(var(--radius) - 4px);   /*  6px */
  --radius-md: calc(var(--radius) - 2px);   /*  8px */
  --radius-lg: var(--radius);               /* 10px */
  --radius-xl: calc(var(--radius) + 4px);   /* 14px */

  --background: oklch(1 0 0);
  --foreground: oklch(.145 0 0);
  --card: oklch(1 0 0);
  --card-foreground: oklch(.145 0 0);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(.145 0 0);
  --primary: oklch(.205 0 0);
  --primary-foreground: oklch(.985 0 0);
  --secondary: oklch(.97 0 0);
  --secondary-foreground: oklch(.205 0 0);
  --muted-bg: oklch(.97 0 0);
  /*
   * ── MOT BAC TOI HON TEMPLATE, VA DAY LA LY DO ──────────────────────────
   *
   * Template dat `oklch(.556 0 0)`. Do that: tren nen TRANG no dat 4,74:1 —
   * qua chuan. Nhung chu mo phan lon nam tren nen MO (`--muted-bg`,
   * `oklch(.97 0 0)`): dau bang, thanh tab, nhan phu. O do no chi con
   * **4,35:1**, duoi chuan AA 4,5.
   *
   * Do la loi cua chinh bang mau shadcn, khong phai cua minh — nhung chu shop
   * doc bang so ca ngay, nen khong the giu nguyen mot con so duoi chuan tren
   * MOI man hinh.
   *
   * `.535` la buoc toi thieu du de qua: 5,17 tren trang, 4,75 tren nen mo.
   * Lech template ba don vi RGB (115 -> 109) — mat khong phan biet duoc.
   * Ban TOI cua template do duoc 5,86-7,66, dat san, nen giu nguyen.
   */
  --muted-foreground: oklch(.535 0 0);
  --accent-bg: oklch(.97 0 0);
  --accent-foreground: oklch(.205 0 0);
  --destructive: oklch(.577 .245 27.325);
  --border: oklch(.922 0 0);
  --input: oklch(.922 0 0);
  --ring: oklch(.708 0 0);

  --chart-1: oklch(.646 .222 41.116);
  --chart-2: oklch(.6 .118 184.704);
  --chart-3: oklch(.398 .07 227.392);
  --chart-4: oklch(.828 .189 84.429);
  --chart-5: oklch(.769 .188 70.08);

  --sidebar: oklch(.985 0 0);
  --sidebar-foreground: oklch(.145 0 0);
  --sidebar-primary: oklch(.205 0 0);
  --sidebar-primary-foreground: oklch(.985 0 0);
  --sidebar-accent: oklch(.97 0 0);
  --sidebar-accent-foreground: oklch(.205 0 0);
  --sidebar-border: oklch(.922 0 0);
  --sidebar-ring: oklch(.708 0 0);

  /* Bong do — dung dung thang cua template. */
  --bong-xs: 0 1px 2px 0 rgb(0 0 0 / .05);
  --bong-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);
  --bong-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);
  --bong-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);

  /*
   * THANG CHU — tam bac, khong hon.
   * Truoc do co 286 khai bao font-size voi hon 12 gia tri le. Bat ky co chu
   * nao khong nam trong bang nay deu la loi; `test/thang-giao-dien.test.js` chan.
   */
  --chu-xs:   .75rem;   --dong-xs:   1rem;      /* 12/16 */
  --chu-sm:   .875rem;  --dong-sm:   1.25rem;   /* 14/20 */
  --chu-base: 1rem;     --dong-base: 1.5rem;    /* 16/24 */
  --chu-lg:   1.125rem; --dong-lg:   1.75rem;   /* 18/28 */
  --chu-xl:   1.25rem;  --dong-xl:   1.75rem;   /* 20/28 */
  --chu-2xl:  1.5rem;   --dong-2xl:  2rem;      /* 24/32 */
  --chu-3xl:  1.875rem; --dong-3xl:  2.25rem;   /* 30/36 */

  /* THANG KHOANG CACH — luoi 4pt. */
  --k-1: 4px;  --k-2: 8px;  --k-3: 12px; --k-4: 16px;
  --k-5: 20px; --k-6: 24px; --k-8: 32px; --k-12: 48px; --k-16: 64px;

  /*
   * ── BI DANH CHO MA CU ─────────────────────────────────────────────────
   * 3.674 dong CSS va 10.706 dong JS dang goi ten cu. Anh xa sang ten moi thay
   * vi doi hang loat: doi hang loat la cach chac chan de sot mot cho roi khong
   * ai thay cho tao nao bi hong.
   */
  --bg: var(--background);
  --panel: var(--card);
  --panel-2: var(--secondary);
  --panel-3: oklch(.94 0 0);
  --line: var(--border);
  --text: var(--foreground);
  --muted: var(--muted-foreground);
  --accent: var(--primary);
  --on-accent: var(--primary-foreground);
  --accent-text: var(--primary);
  --accent-dim: var(--accent-bg);
  --bad: var(--destructive);
  --bad-nut: var(--destructive);
  --on-bad: #fff;
  --r: var(--radius-lg);
  --shadow: var(--bong-sm);

  /*
   * Mau trang thai — template khong dinh nghia "dat/canh bao" nen phan nay giu
   * cua minh. Gia tri lay tu ban Sang cu, deu da do dat AA tren nen trang.
   */
  --ok: #12734a;      --ok-text: #12734a;
  --warn: #8a5a00;    --warn-text: #8a5a00;
  --tin: #1a5fa8;     --tin-text: #1a5fa8;
  --bad-text: #b3261e;
  --chip-tin: #1e5fa8; --chip-do: #b3261e;
  --chip-vang: #8a5a00; --chip-tim: #5b3fc4;

  /*
   * ── SAC THAI NEN/VIEN CUA MAU TRANG THAI ───────────────────────────────
   *
   * Truoc day moi cho tu go `var(--warn-nen)`. Hai hau qua:
   *  1. Che do toi KHONG lat duoc — mot nen vang nhat go cung van sang choi
   *     tren nen den.
   *  2. Cung mot y ("nen canh bao") co bon sac khac nhau (.10 .12 .14 .16)
   *     tuy cho, vi moi lan viet la mot lan go lai tu dau.
   *
   * `color-mix` dan xuat tu chinh token mau, nen doi che do la ca bo doi theo.
   */
  --ok-nen:   color-mix(in oklch, var(--ok) 14%, transparent);
  --ok-vien:  color-mix(in oklch, var(--ok) 40%, transparent);
  --warn-nen: color-mix(in oklch, var(--warn) 14%, transparent);
  --warn-vien:color-mix(in oklch, var(--warn) 40%, transparent);
  --bad-nen:  color-mix(in oklch, var(--bad) 14%, transparent);
  --bad-vien: color-mix(in oklch, var(--bad) 40%, transparent);
  --tin-nen:  color-mix(in oklch, var(--tin) 14%, transparent);
  --tin-vien: color-mix(in oklch, var(--tin) 40%, transparent);
}

/*
 * BAN TOI — chep tu khoi `.dark` cua template.
 *
 * Cho dang chu y: vien dung DO TRONG (`oklch(1 0 0 / 10%)`) chu khong phai mau
 * dac. Vien mau dac tren nen den luon trong nhu mot duong ke bi ve len; vien
 * trong thi hoa vao nen dung nhu template.
 */
:root[data-giao-dien="toi"] {
  --background: oklch(.145 0 0);
  --foreground: oklch(.985 0 0);
  --card: oklch(.205 0 0);
  --card-foreground: oklch(.985 0 0);
  --popover: oklch(.205 0 0);
  --popover-foreground: oklch(.985 0 0);
  --primary: oklch(.922 0 0);
  --primary-foreground: oklch(.205 0 0);
  --secondary: oklch(.269 0 0);
  --secondary-foreground: oklch(.985 0 0);
  --muted-bg: oklch(.269 0 0);
  --muted-foreground: oklch(.708 0 0);
  --accent-bg: oklch(.269 0 0);
  --accent-foreground: oklch(.985 0 0);
  --destructive: oklch(.704 .191 22.216);
  --border: oklch(1 0 0 / 10%);
  --input: oklch(1 0 0 / 15%);
  --ring: oklch(.556 0 0);

  --chart-1: oklch(.488 .243 264.376);
  --chart-2: oklch(.696 .17 162.48);
  --chart-3: oklch(.769 .188 70.08);
  --chart-4: oklch(.627 .265 303.9);
  --chart-5: oklch(.645 .246 16.439);

  --sidebar: oklch(.205 0 0);
  --sidebar-foreground: oklch(.985 0 0);
  --sidebar-primary: oklch(.488 .243 264.376);
  --sidebar-primary-foreground: oklch(.985 0 0);
  --sidebar-accent: oklch(.269 0 0);
  --sidebar-accent-foreground: oklch(.985 0 0);
  --sidebar-border: oklch(1 0 0 / 10%);
  --sidebar-ring: oklch(.556 0 0);

  --panel-3: oklch(.269 0 0);
  --on-bad: #fff;

  /* Do lai cho nen toi — gia tri ban Toi cu, deu dat AA tren oklch(.145 0 0). */
  --ok: #35c07a;      --ok-text: #35c07a;
  --warn: #e8b930;    --warn-text: #e8b930;
  --tin: var(--tin-text);     --tin-text: var(--tin-text);
  --bad-text: #f0555a;
  --chip-tin: #8ec5ff; --chip-do: #ff9d9d;
  --chip-vang: #ffd28a; --chip-tim: #b8a6ff;
}

/*
 * ══ TIEU DE: NEO THEO VAI TRO, KHONG THEO THE ═══════════════════════════════
 *
 * ── DO THAT ───────────────────────────────────────────────────────────────
 * Dot doi cap the tieu de (cho dung ngu nghia: mot h1 moi man, khong bo cap)
 * lam CHIN quy tac CSS im lang mat tac dung — chung neo vao `h3`/`h4` cu.
 * Bo kiem xanh, phep do ngu nghia sach, chi co anh chup moi lo ra mot cai
 * (ten the phien), va tam cai con lai phai quet CSS moi thay.
 *
 * Nay moi quy tac tieu de trong tep nay dung `:is(h1, h2, h3, h4)`: no neo vao
 * VAI TRO "tieu de cua khoi nay", khong vao mot con so co the doi.
 */
* { box-sizing: border-box; }

/*
 * BAT BUOC. Thuoc tinh hidden cua HTML chi la 'display: none' o bang kieu mac dinh
 * cua trinh duyet, nen BAT KY quy tac display nao cua minh cung de lam no vo hieu
 * (vi du '#login { display: grid }'). Khi do man hinh dang nhap khong bao gio an di
 * ma cung khong bao loi gi — chi thay giao dien bi day xuong duoi man hinh.
 */
[hidden] { display: none !important; }

/*
 * ── LOP NEN — chep tu `@layer base` cua template ──────────────────────────
 *
 * Template dat co chu goc 16px/1.5 (mac dinh cua Tailwind), khong phai 15px.
 * Mot pixel nghe nho nhung no keo lech CA thang chu: moi bac rem deu tinh tu
 * day. Sai goc thi khong the "giong het" duoc.
 */
* { border-color: var(--border); }

:focus-visible { outline: 2px solid color-mix(in oklch, var(--ring) 50%, transparent); outline-offset: 1px; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-size: var(--chu-base);
  line-height: 1.5;
  background: var(--background);
  color: var(--foreground);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Template co dung quy tac nay — man net cao doi sang khu rang phu diem anh. */
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
  body { -webkit-font-smoothing: subpixel-antialiased; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}

h1, h2, h3 { margin: 0; font-weight: 600; letter-spacing: -.01em; }
h2 { font-size: var(--chu-base); }
h3 { font-size: var(--chu-base); }
.muted { color: var(--muted); font-size: var(--chu-sm); }
.hint { color: var(--muted); font-size: var(--chu-sm); margin: var(--k-1) 0 var(--k-3); line-height: 1.5; }
.error { color: var(--bad-text); font-size: var(--chu-sm); }

/* ---------- dang nhap ---------- */
.screen { min-height: 100vh; }
#login { display: grid; place-items: center; padding: var(--k-4); }
.login-card { width: min(390px, 100%); box-shadow: var(--shadow); }
.card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r); padding: var(--k-6); }

label { display: block; margin: var(--k-3) 0; font-size: var(--chu-sm); color: var(--muted); font-weight: 500; }

input, select, textarea {
  display: block; width: 100%; margin-top: var(--k-1); padding: var(--k-2) var(--k-3);
  background: var(--panel-2); color: var(--text);
  border: 1px solid var(--line); border-radius: var(--radius-md); font: inherit; transition: border-color .12s;
}
input:hover, select:hover { border-color: var(--panel-3); }
input:focus, select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-dim); }

button, .file-btn {
  font: inherit; font-weight: 500; cursor: pointer; white-space: nowrap;
  padding: var(--k-2) var(--k-4); border-radius: var(--radius-md); border: 1px solid transparent;
  transition: filter .12s, background .12s;
}
button:hover:not(:disabled), .file-btn:hover { filter: brightness(1.12); }
button.primary, .file-btn { background: var(--accent); color: var(--on-accent); }
button.ghost { background: var(--panel-2); color: var(--text); border-color: var(--line); }
button.danger { background: var(--bad-nut); color: var(--on-bad); }
button.big { padding: var(--k-3) var(--k-5); font-size: var(--chu-base); }
button.sm { padding: var(--k-1) var(--k-2); font-size: var(--chu-sm); }
/*
 * Nut mo: DOI MAU chu khong lam nhat di.
 *
 * `opacity: .45` tren nut cam nen trang cho ra chu trang tren cam nhat — do
 * duoc 1,6:1, gan nhu khong doc noi. Nguoi dung bam hoai roi tuong may treo.
 * Nay nut mo trong nhu mot nut khac han: nen xam, chu xam dam, van doc duoc.
 */
button:disabled, .file-btn:disabled {
  cursor: not-allowed; opacity: 1;
  background: var(--muted-bg); color: var(--muted-foreground);
  border-color: var(--line); box-shadow: none;
}
.file-btn { display: inline-block; }

/* ---------- khung: thanh ben + vung noi dung ----------
 *
 * Truoc day bay tab xep NGANG tren mot hang. Ba cai gia phai tra:
 *   1. Hang tab an het chieu ngang nen dai trang thai luong bi day xuong hang
 *      thu hai — tren cua so hep no bien mat han.
 *   2. Khong nhom duoc theo viec: "Bang thong" nam canh "Cai dat" nhu the
 *      chung cung loai.
 *   3. Them mot man hinh la mot lan chen chuc.
 *
 * Thanh ben luon nhin thay, nhom duoc theo viec, va tra lai ca chieu cao cho
 * noi dung — dung cai dang bi thieu.
 */
:root { --rail: 15rem; --dau: 3.25rem; }

#app { display: grid; grid-template-columns: var(--rail) minmax(0, 1fr); min-height: 100vh; }
.khung { min-width: 0; display: flex; flex-direction: column; }

.rail { position: sticky; top: 0; height: 100vh; z-index: 20;
  display: flex; flex-direction: column; gap: var(--k-1);
  padding: var(--k-3) var(--k-3) var(--k-3); background: var(--panel);
  border-right: 1px solid var(--line); overflow-y: auto; }

.brand { display: flex; align-items: center; gap: var(--k-2); font-weight: 700;
  letter-spacing: -.02em; padding: 0 var(--k-2) var(--k-4); color: var(--text); }
.brand svg { color: var(--accent); flex: none; }

.rail nav { display: flex; flex-direction: column; gap: 0; }
.rail-nhom { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted);
  padding: var(--k-4) var(--k-2) var(--k-1); }
.rail-nhom:first-child { padding-top: 0; }

/*
 * Muc dang mo va muc dang re chuot phai KHAC NHAU nhin thay ngay.
 * Truoc day ca hai deu la mot vien pill co nen — nhin anh chup tinh khong doan
 * duoc dang o dau. Nay: dang mo = nen dam + vach cam ben trai; re chuot = doi
 * nen, giu mau chu. Hai tin hieu khac loai, khong nham duoc.
 */
.rail .tab { display: flex; align-items: center; gap: var(--k-2); width: 100%;
  text-align: left; background: transparent; color: var(--muted);
  padding: var(--k-2) var(--k-2); border-radius: var(--radius-md); border: 0;
  font-weight: 500; }
.rail .tab svg { flex: none; opacity: .8; }
.rail .tab > span:first-of-type { flex: 1; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.rail .tab:hover:not(.active) { background: var(--panel-2); color: var(--text); }
/* Vach doc DA GO — mot luat o cuoi tep tung dat `box-shadow: none` de tat no,
 * nhung de lai khai bao o day la de lai mot dong ma NOI NGUOC voi cai chay
 * that. Nguoi doc sau se tin no. Xoa han. */
.rail .tab.active { background: var(--accent-dim); color: var(--accent-text);
  font-weight: 600; }
.rail .tab.active svg { opacity: 1; }

.rail-chan { margin-top: auto; padding-top: var(--k-3); display: grid; gap: var(--k-2);
  border-top: 1px solid var(--line); }
.rail-chan select { width: 100%; margin: 0; padding-block: var(--k-1); padding-left: var(--k-2); font-size: var(--chu-sm); }
.rail-ai { display: flex; align-items: center; gap: var(--k-2); min-width: 0; }
.rail-ai .muted { flex: 1; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; font-size: var(--chu-xs); }

header {
  display: flex; align-items: center; gap: var(--k-4); min-height: var(--dau);
  padding: var(--k-2) var(--k-6); background: var(--panel);
  border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 20;
}
header .right { margin-left: auto; display: flex; align-items: center; gap: var(--k-2); }
/* Dau trang trong khi KHONG co phien nao chay: dung de mot dai rong cao 52px.
 * `:has` de chinh no bien mat, khong phai them mot co trong ma JS. */
/* Bo `min-height: 0`: de dau trang LUON cao dung `--dau` o ca hai trang thai.
 * Chi khi do `--dau` moi la chieu cao THAT, va cac thanh dinh neo theo no moi
 * khop — mot ben tu co lai theo noi dung thi con so kia thanh mot loi doan. */
header:not(:has(.nav-live:not([hidden]))) { padding: var(--k-1) var(--k-6); }
/*
 * `--dau` PHAI THEO trang thai that cua dau trang.
 *
 * Khong phien nao chay thi dau trang thu lai con ~2rem. Cac thanh dinh khac
 * (`.ct-dau`) neo theo `--dau`, nen giu no o 3,25rem se de mot khe ho hai chuc
 * pixel cho noi dung chay qua ben duoi.
 */
/* `:has` KHONG long duoc trong `:has` — ban dau viet
 * `:root:has(header:not(:has(.nav-live:not([hidden]))))` va ca quy tac im lang
 * khong khop gi, de lai mot khe ho 13px. Bam thang vao co `hidden` cua dai. */
:root:has(#nav-live[hidden]) { --dau: 2.4rem; }

@media (max-width: 900px) {
  #app { grid-template-columns: minmax(0, 1fr); }
  .rail { position: static; height: auto; flex-direction: row; flex-wrap: wrap;
    align-items: center; border-right: 0; border-bottom: 1px solid var(--line); }
  .rail .brand { padding: 0 var(--k-2) 0 var(--k-1); }
  .rail nav { flex-direction: row; flex-wrap: wrap; flex: 1; }
  .rail-nhom { display: none; }
  .rail-chan { margin: 0 0 0 auto; padding: 0; border: 0;
    grid-auto-flow: column; align-items: center; }
  .rail-chan select { width: auto; }
}

/*
 * Tab dang mo va tab dang re chuot phai KHAC NHAU nhin thay ngay.
 *
 * Truoc day ca hai deu la mot vien pill co nen — nhin anh chup tinh khong doan
 * duoc dang o tab nao. Nay: dang mo = chu cam + gach chan; re chuot = doi nen,
 * giu mau chu. Hai tin hieu khac loai, khong nham duoc.
 */
.tab { background: transparent; color: var(--muted); padding: var(--k-2) var(--k-3);
  border-radius: 9px 9px 0 0; border-bottom: 2px solid transparent; }
.tab:hover:not(.active) { background: var(--panel-2); color: var(--text); }
.tab.active { background: var(--accent-dim); color: var(--accent-text);
  border-bottom-color: var(--accent); font-weight: 600; }

/* ---------- dai trang thai luong tren thanh nav ----------
 * Buoi live 2-3 tieng thi phan lon thoi gian chu shop o tab khac. Truoc day
 * sau tren bay tab khong co cho nao cho biet luong con song, va muon dung gap
 * thi phai bam ve tab Phien phat roi mo phien ra.
 */
.nav-live { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap;
  padding: var(--k-1) var(--k-1) var(--k-1) var(--k-2); border-radius: 999px;
  background: var(--panel-2); border: 1px solid var(--line); }
.nav-live .nl-ten { background: none; border: 0; padding: 0 var(--k-1);
  color: var(--text); font: inherit; font-weight: 600; cursor: pointer;
  max-width: 15rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nav-live .nl-ten:hover { text-decoration: underline; }
.nav-live .nl-so { font-size: var(--chu-xs); color: var(--muted);
  font-variant-numeric: tabular-nums; white-space: nowrap; }
/* Duoi 1,0x nghia la ffmpeg khong theo kip thoi gian that — luong tut dan roi
 * Shopee ngat. Day la thu duy nhat o dai nay duoc phep doi mau. */
.nav-live .nl-so.cham-qua { color: var(--bad-text); font-weight: 600; }
@media (max-width: 1240px) { .nav-live .nl-so { display: none; } }

/* Cua so 1920 ma noi dung khoa o 1400 la bo phi 520px — dung cai nguoi dung
 * keu "trong". Rong ra, nhung van co tran de dong chu khong dai qua muc doc. */
/*
 * `main` LA MOT FLEX ITEM (cha `.khung` la flex row).
 *
 * Nen `max-width` + `margin: 0 auto` KHONG keo gian no — flex item mac dinh co
 * lai vua noi dung roi tu can giua. Hau qua do duoc tren cua so 1920: tab co
 * bang rong thi `main` = 1665px va noi dung bat dau o x=218; tab noi dung hep
 * thi `main` co con 871px va troi vao giua, bat dau o x=637.
 *
 * Tuc moi tab le mot kieu, va nua man hinh bo trong — dung cai nguoi dung keu
 * "card trong chiem cho bat hop ly". Do la LOI BO CUC, khong phai loi tung the.
 *
 * `flex: 1` de no chiem het phan con lai; `min-width: 0` de bang rong khong day
 * ca khung phinh ra (mac dinh flex item khong co nho hon noi dung).
 */
main { flex: 1; min-width: 0; padding: var(--k-6) var(--k-6); max-width: 1760px; }
/*
 * TIEU DE TRAI, NUT GOM BEN PHAI.
 *
 * `space-between` chia deu KHOANG TRONG giua moi con, nen mot thanh co bon con
 * ("San pham" + ba nut) bay ra bon vat the roi rac giua man hinh — mat khong
 * gom duoc chung thanh mot nhom hanh dong. Voi hai con thi ket qua y het cai
 * cu, nen doi nay khong dong gi den cac thanh khac.
 */
.toolbar { display: flex; align-items: center; margin-bottom: var(--k-4); gap: var(--k-2); }
.toolbar > :first-child { margin-right: auto; }
/*
 * O CHON/O NHAP TRONG THANH CONG CU: RONG THEO NOI DUNG, khong nuot het cho.
 *
 * DO THAT 25/08/2026, chu shop: "cai dropdown list chon shop no dai ngoang
 * qua xau". Do duoc: `#new-stream-shop` co DUNG HAI lua chon ma rong 1002px.
 *
 * Nguyen nhan: luat chung `input, select, textarea { width: 100% }` (cho o
 * nhap trong bieu mau, dung cho ngu canh do) gap `.toolbar` la flex container
 * — `width: 100%` thanh "an het phan con lai cua hang". Khong ai viet ra y do
 * nay ca, no la tac dung phu cua hai luat dung chung.
 *
 * `width: auto` + `max-width` de o co lai vua noi dung, va van co tran phong
 * khi ten shop rat dai.
 */
/*
 * MOI o chon/o nhap dung trong MOT HANG NGANG deu phai OM NOI DUNG.
 *
 * Ban va dau chi neo vao `.toolbar`, nen nam man khac van nguyen loi: do
 * duoc `#sp-sapxep` 802px, `#ma-ten`/`#ma-shop` 723px, o loc `/cau-tra-loi`
 * 736px, `#sp-tim`/`#tv-tim` 544px — deu la o vai chu ma keo gan het hang.
 * Nguyen nhan chung: luat `input, select, textarea { width: 100% }` (viet cho
 * o nhap trong BIEU MAU, xep doc duoi nhan) gap container flex.
 *
 * Liet ke cac container hang ngang thay vi doi luat chung — doi luat chung se
 * lam moi o trong bieu mau co lai, mot thay doi rong hon nhieu so voi cho
 * dang sua.
 */
.toolbar select, .toolbar input:not([type="checkbox"]):not([type="radio"]),
.add-row select, .add-row input:not([type="checkbox"]):not([type="radio"]),
.vh-loc select, .vh-loc input:not([type="checkbox"]):not([type="radio"]),
.vh-gv-chon select, .vh-gv-chon input:not([type="checkbox"]):not([type="radio"]),
.ctc-dong select, .ctc-dong input:not([type="checkbox"]):not([type="radio"]),
.hang-nut select, .hang-nut input:not([type="checkbox"]):not([type="radio"]) {
  width: fit-content; max-width: 16rem; margin-top: 0; }

/* ---------- hang so lieu tong quan ---------- */
/* `dense`: hai o "lon" chiem 2 cot lam vai luot chan mot khoang trong o hang
   sau (5 o, chia khong deu theo be rong man hinh) — dense lap day khoang do
   bang o ke tiep vua vao, thay vi de trong hang khuyet mot cach kho coi. */
/*
 * Ban CU cua `.tiles` DA GO. Khuon hang the nam o MOT cho duy nhat — cuoi tep
 * (`.tiles, .dem-luoi, .cvd-dem, .tt-grid`). Giu lai ban nay thi no danh voi
 * luat chung ve so cot va khoang cach, va nguoi doc se sua nham o day roi
 * khong thay gi doi (CLAUDE.md §3).
 */
/*
 * MARGIN DOC CUA O LUOI PHAI BANG 0 — neu khong, "cung hang cao bang nhau"
 * IM LANG HONG.
 *
 * ── DO THAT 25/08/2026, chu shop dem lai lan thu ba: "3 cai card tren cung
 *    van chieu cao khac nhau la sao" ────────────────────────────────────────
 * Do duoc: hang luoi cao 54px, nhung o dau chi cao 42px. Ca hai o co noi dung
 * Y HET nhau (`.tile-dau` 24px + padding 16px). Khac biet duy nhat:
 *
 *     .tile.live  ->  margin-bottom: 12px
 *     .tile       ->  margin-bottom: 0
 *
 * Nguon cua 12px do KHONG phai luat nao cua `.tile`: no den tu lop CHUNG TEN
 * `.live` (dong 926 — khoi "dang phat" o buong lai, mot thu hoan toan khac),
 * va o "phien dang phat" vo tinh mang ca hai lop (`class="tile live"`).
 *
 * Grid `stretch` keo o ra bang chieu cao HANG, roi margin AN vao trong phan
 * do — nen o co margin thap hon dung bang margin. Do chieu cao thi thay lech,
 * ma doc CSS cua `.tile` thi khong thay gi sai ca: day la ly do loi nay sua
 * ba lan khong het.
 *
 * Chan tai goc, cho MOI o luoi, khong chi cho `.live`: lop chung nao khac
 * mang margin toi day sau nay cung khong lam lech duoc nua.
 */
/*
 * `.tiles > .tile` chu KHONG `.tiles > *`: ban dau viet `> *` (do dam dac
 * 0,1,0) — NGANG BANG voi `.live` (cung 0,1,0), va `.live` nam SAU trong tep
 * (dong ~926) nen `.live` thang. Do lai tren production sau khi trien khai:
 * margin van 12px, o van lech 58/70. Hai lop cung do dam dac thi thu tu quyet
 * dinh, va thu tu la thu de vo tinh doi khi ai do chen them luat.
 *
 * `> .tile` la 0,2,0 — thang chac chan, khong phu thuoc vi tri trong tep.
 */
.tiles > .tile { margin-block: 0; }
.tile { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r);
  padding: var(--k-3) var(--k-4); display: flex; flex-direction: column; gap: 0; }
/* Dong phu duoi nhan: canh bao ve do day du cua con so, khong phai mot nhan
   thu hai. Nho hon va mo hon de mat doc nhan truoc. */
/*
 * THE "DANG PHAT" O BANG DIEU HANH — CHI CON DUNG MOT DONG.
 *
 * Chu shop 25/08/2026 noi thang hai lan: "bo dong thu 3 di, bo di chu khong
 * phai ghep". Cac ban truoc (ep 1 dong roi cat "…" ten phien; tach 2 dong
 * rieng cho phan "dang chieu") deu bi bac vi VAN con dong thu hai — du la
 * ghep hay tach, chu shop khong can no nua. `.dp-chieu`/`.dp-video-*` (dong
 * "dang chieu video gi") da bi XOA HAN khoi app.js, khong con dung o day.
 */
.dp-dau { flex-wrap: wrap; row-gap: 2px; }
/* O "Can chu y" la mot cai NUT, nen chu trong no phai canh trai nhu the khac. */
button.tile { text-align: left; font: inherit; cursor: pointer; }
button.tile:disabled { cursor: default; }
.tile b { font-size: var(--chu-2xl); font-weight: 600; letter-spacing: -.02em; line-height: 1.25;
  font-variant-numeric: tabular-nums; }
/*
 * NHAN CUA O KPI: 14px (`--chu-sm`), khong phai 12px.
 *
 * Doi chieu ma nguon template shadcn 25/08/2026: `CardHeader` cua the thong
 * ke co nhan **14px / weight 400 / mau mo**, va so lon 24px/600. Ban minh
 * dung 12px cho nhan — nho hon mot bac.
 *
 * DEM TREN CA TEP: `--chu-xs` (12px) dang duoc dung 136 lan, `--chu-sm`
 * (14px) 118 lan — tuc 12px moi la co chu CHU DAO cua ban minh. Template thi
 * nguoc lai: "14px chiem ~90% giao dien, phan cap bang DAM NHAT va MAU chu
 * KHONG bang co chu". Do la ly do giao dien minh trong vun va li ti hon han
 * template, dung nhu chu shop noi.
 *
 * 12px chi con dung cho thu template cung de 12px: badge/chip, va nhan nhom
 * viet hoa o thanh ben.
 */
.tile span { font-size: var(--chu-sm); color: var(--muted); }
.tile.live b { color: var(--ok-text); }
.tile.alert b { color: var(--bad-text); }

/* ---------- hang phien ----------
 *
 * Truoc day day la the doc cao 290px, hai cai mot hang: anh bia 116px + ten +
 * so lieu + nut. Ba phien la day mot man hinh, va "Can chu y" — cho noi viec
 * dang phai lam — bi day xuong duoi nep gap.
 *
 * Cung tung ay thong tin, xep NGANG thanh mot hang cao 60px: anh bia thu nho,
 * ten + trang thai, tien do, so lieu, nut. Muoi phien van nam gon trong mot man.
 */
/*
 * `.ds-phien`, KHONG phai `.grid`.
 *
 * Loi da mac trong chinh lan sua nay: doi nghia cua lop chung `.grid` thanh
 * mot cot. `#kb-list` cung dung `.grid`, nen 14 the kich ban tu bon cot roi
 * xuong MOT cot — trang Ban hang cao 7.369px, hon tam man cuon. Lop chung thi
 * dung chung; muon doi bo cuc thi dat lop rieng.
 */
.grid { display: grid; gap: var(--k-4);
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
/*
 * THE PHIEN XEP THEO LUOI, khong phai moi cai mot dai tran man hinh.
 *
 * Ban cu la MOT cot: mot phien "san sang" chi co ten, ten shop, "1 video · 59s"
 * va hai nut — chung do chu nghia nam tren mot the rong 1.330px, nen giua the
 * la ~700px trong. Ba phien la ba dai trong nhu the xep chong.
 *
 * Nay the tu xep theo be rong: man rong thi ba the mot hang, man hep thi mot.
 *
 * NGOAI TRU phien DANG PHAT — the do mang theo dai tien do (dang chieu video
 * nao, den phut nao, con bao lau, tiep theo la gi) va con so ky thuat. Cai do
 * can ca chieu ngang, va no cung la cai duy nhat dang duoc nhin lau.
 */
/*
 * `auto-fit` + TRAN TREN, khong phai `auto-fill` + `1fr`.
 *
 * `auto-fill` giu lai ca nhung cot RONG: bon the trong mot luoi nam cot thi cot
 * thu nam van chiem cho, va dai the dung ngan o 4/5 be ngang — trong dung cai
 * cho nguoi dung dang che.
 *
 * `auto-fit` thu cac cot rong lai va cho the con lai gian ra cho vua. Nhung
 * gian KHONG GIOI HAN thi mot the don lai keo dai 1.300px — dung cai benh cu.
 * Nen tran tren nam o CHINH CAI THE (`max-width`), khong o mo ta cot.
 *
 * Vi sao khong `minmax(24rem, 34rem)`: so cot cua `auto-fit` duoc tinh bang ve
 * TREN khi ve do la mot do dai xac dinh. Dat 34rem thi mot khung 1.023px chi
 * ra HAI cot thay vi ba — it the hon tren mot hang, tuc nguoc dung dieu dang
 * muon. `1fr` khong xac dinh nen so cot tinh theo ve DUOI.
 */
/*
 * FLEX-WRAP, KHONG PHAI GRID auto-fit.
 *
 * Do that tren man 1920px cua chu shop: luoi `auto-fit` voi hai the thi hai cot
 * rong deu bi thu lai, hai cot con lai moi cot ~660px, ma the bi tran
 * `max-width` chan o 416px — nen giua hai the la mot LO 244px. Voi `auto-fill`
 * thi nguoc lai: cac cot rong o lai va dai the dung ngan o mot phan ba man.
 *
 * Flex giai duoc ca hai: `flex: 1 1 <co co ban>` cho the gian ra lap kin hang
 * khi it, `max-width` chan khong cho no dai qua muc, va phan du don HET ve ben
 * PHAI — khong bao gio thanh mot lo o giua.
 *
 * ── DO THAT 24/08/2026, CHU SHOP TU BAO ────────────────────────────────────
 * `max-width: 42rem` (672px) tung dat de "the don khong keo dai het man" —
 * nhung noi dung ben trong the (anh nho + ten + nut) la BO CUC CO DINH,
 * khong co gi de gian them khi rong ra. The don ("test", phien nhap) gian
 * toi 672px trong khi ba the cung hang chi 407px — rong hon 65%, va phan du
 * la khoang TRANG bên trong chinh cai the, khong phai ben ngoai no. Chu shop
 * ta dung: "de 1 dong rieng nhung no tu dung lai dai han ra ... rong han
 * luon". Ha tran xuong gan bang co the tu nhien (~26rem ≈ 407px do duoc) —
 * the don van gian nhe de khong lech han voi hang tren, nhung khong con
 * phong to roi rong o giua.
 *
 * SUA LAI 24/08/2026: 26rem (416px) VAN con rong hon ca the tu nhien khi du
 * hang (~407px do duoc) — the don van la the RONG NHAT man, dung dieu chu
 * shop chui ("dai han ra"). Ha xuong duoi muc tu nhien: the don gio DUNG o
 * tran 25rem (400px) — hep hon ca the day hang mot chut, thay vi rong hon.
 * Mat nguoi de bo qua the cuoi hep hon vai px hon nhieu so voi the cuoi phinh
 * to ro ret.
 */
/*
 * `align-items: stretch` (mac dinh flex) — CHU SHOP YEU CAU RO 25/08/2026:
 * "cac the cung loai tren cung mot man hinh bat buoc chieu cao va chieu rong
 * phai bang nhau, neu khong nhin cuc ky kho chiu". Tung doi sang `flex-start`
 * de tranh khoang trang duoi the ngan (xem `.sc-foot` — do la cach sua dung:
 * neo nut xuong day bang `margin-top: auto`, KHONG PHAI bo stretch).
 */
/* gap 16px — luoi the cua template dung 16px, khong phai 8px. */
.ds-phien { display: flex; flex-wrap: wrap; gap: var(--k-4); align-items: stretch; }
/*
 * DO THAT 25/08/2026, THIET KE LAI THEO YEU CAU CHU SHOP — the cu (grid ba
 * hang/hai cot, anh `grid-row: 1/span 3` roi `align-self:center`) lam anh TROI
 * xuong giua the thay vi thang hang voi ten phien, va "toc do/duong truyen/da
 * phat" choan mot hang rieng cao rong. Chu shop: "anh no dung rieng 1 hang ma
 * thua rat nhieu hai ben tren duoi ... nhin no qua xau".
 *
 * Bo cuc moi la MOT COT FLEX don gian, khong con grid/row-span:
 *   [anh · ten · chip · trang thai]   <- .sc-top, anh thang hang voi DONG DAU
 *   [so video · canh bao]             <- .sc-phu, rong het the
 *   [da phat NN:NN ............ nut]  <- .sc-foot, mot dong, hai dau
 *
 * The gon lai (17rem thay vi 24rem) nen bon the vua mot hang thay vi ba —
 * chu shop cung yeu cau dieu nay rieng.
 *
 * DO THAT 25/08/2026: tung co them dong "[tien do video dang phat]" giua
 * `.sc-phu` va `.sc-foot`. Chu shop noi thang hai lan "bo dong thu 3 di, bo
 * di chu khong phai ghep" — `tienDoPhatHtml()` trong app.js gio tra ve rong,
 * `[data-tiendo]` van con trong DOM (de vong lam moi khong nem loi) nhung
 * khong hien gi. The chi con DUNG BA dong nhu tren.
 */
/* 19/21rem thay 17/19rem: hang chan cua the DANG PHAT co "đã phát 3:24:42" +
   ba nut, 17rem khong du nen nut cuoi tung tran ra ngoai vien (chu shop chup
   man hinh 25/08/2026). Ty le max/basis 1,105 — van duoi tran 1,15 cua bai
   kiem "the dung mot minh khong duoc phong to". */
.ds-phien > .stream-card { flex: 1 1 19rem; max-width: 21rem; }
.ds-phien > .nhom-cu { flex: 1 1 100%; }
/* Phien da dung nam trong mot the gap — luoi nam o `div` ben trong, khong dat
   tren chinh `details` (xem chu thich cho `.nhom-cu` trong app.js). */

/* Radius 14 + bong nhe + padding 16 — dong bo voi `.tile`/`.dp-the`, xem
   chu thich o `.dp-the`. */
.stream-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs);
  cursor: pointer; transition: border-color .14s, background .14s;
  display: flex; flex-direction: column; gap: var(--k-2); padding: var(--k-4);
  /* Luoi an toan: du tinh sai o dau, khong gi duoc ve ra ngoai vien the —
     xem chu thich o `.sc-foot` (nut "Dừng" da tung tran ra ngoai). */
  overflow: hidden; }
.stream-card:hover { border-color: var(--accent); background: var(--panel-2); }
.stream-card.on { border-color: var(--ok-vien); }

/*
 * `align-items: center` — CHU SHOP QUYET DINH 25/08/2026:
 *
 *   "cai anh thumbnail no lech so voi title va ten shop, cho no can vertical
 *    vao giua 2 thang di, hien tai anh no tit o tren ma thua khoang trong o
 *    duoi"
 *
 * Chu thich cu o day ghi nguoc lai ("doi thanh `center` la quay lai dung loi
 * cu") — nhung do la ket luan cua TOI hoi truoc, khong phai cua chu shop. Anh
 * cao ~27px con `.sc-dau` cao hai dong (ten rieng mot dong + chip shop/trang
 * thai), nen `flex-start` de anh dinh sat dinh va bo trong han phia duoi.
 * Chu shop nhin thay va goi dung ten no. Lam theo.
 */
/*
 * ── ANH BIA LA MOT O VUONG, VA NO CAO BANG DUNG KHOI CHU BEN CANH ─────────
 *
 * Chu shop 26/08/2026: "phần sc-poster phải để thành hình vuông, không để chữ
 * nhật như hiện tại được, phần trên bằng với phần trên title, phần dưới bằng
 * với tên shop".
 *
 * Do that truoc khi sua: 44 x 27,5 px (`aspect-ratio: 16/10`), dat giua theo
 * chieu doc canh mot khoi `.sc-dau` cao hai dong (~44px) — nen no thua mot
 * khoang tren va mot khoang duoi, va hai canh khong thang voi cai gi ca.
 *
 * Cach lam KHONG phai dat `width`/`height` bang mot con so doan truoc: hai
 * dong chu do co the la 40px hay 48px tuy co chu va tuy ngon ngu. Neo vao
 * CHINH khoi chu:
 *
 *   `.sc-top { align-items: stretch }`  — o anh cao bang hang, tuc bang
 *                                         `.sc-dau` (khoi cao nhat)
 *   `.sc-poster { align-self: stretch; aspect-ratio: 1; width: auto }`
 *                                       — cao theo hang, rong bang cao
 *
 * Ket qua: canh tren cua anh = canh tren dong ten, canh duoi = canh duoi dong
 * chip ten shop, va vi `aspect-ratio: 1` nen no vuong dung theo dinh nghia.
 * Hai dong chu ~44px, tuc o vuong ~44px — gan y het be rong cu, khong the nao
 * pha vo bo cuc.
 *
 * `min-width: 0` de khi ten qua dai, o anh khong bi grid bop meo thanh chu
 * nhat: `flex: none` giu no, nhung `aspect-ratio` can mot trong hai chieu la
 * co dinh that.
 */
.sc-top { display: flex; align-items: stretch; gap: var(--k-2); min-width: 0; }
.sc-poster { align-self: stretch; aspect-ratio: 1; width: auto; min-width: 40px;
  border-radius: var(--radius-sm);
  background: var(--panel-2) center/cover no-repeat;
  position: relative; display: grid; place-items: center; flex: none; }
.sc-poster .ph { color: var(--muted); font-size: var(--chu-base); opacity: .35; }

/*
 * TEN CHIEM TRON DONG DAU, chip/trang thai xuong dong duoi.
 *
 * The gio hep hon truoc (17rem thay vi 24rem) nen cang khong du cho ten + chip
 * + trang thai chung mot hang — `flex: 1 0 100%` bat ten xuong dong rieng,
 * cat bang dau ba cham thay vi bop chip trang thai thanh "Sẵn / sàng".
 */
.sc-dau { display: flex; align-items: center; gap: var(--k-1) var(--k-2); min-width: 0;
  flex-wrap: wrap; flex: 1 1 auto; }
.sc-dau > :is(h1, h2, h3) { flex: 1 0 100%; font-size: var(--chu-sm);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-phu { display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap;
  font-size: var(--chu-xs); min-width: 0; }
/* 14px theo template (nhan/chu phu tren the van la `text-sm`), khong 12px —
   xem chu thich o `.tile span`. */
.sc-phu .muted { font-size: var(--chu-sm); }

/*
 * MOT DONG, HAI DAU — "da phat" ben trai, nut ben phai.
 *
 * Truoc day day la HAI khoi rieng (`.sc-metrics` ba o + `.sc-foot` nut), tong
 * cong hai hang rieng biet. Chu shop yeu cau bo toc do/duong truyen (con lai o
 * buong lai, xem `metricsHtml`) va gop "da phat" chung dong voi nut cho gon.
 */
/* `margin-top: auto` — the "test"/"sẵn sàng" (khong co `.sc-tiendo`) bi
   `.ds-phien` keo cao bang the dang phat cung hang; day nut Bat dau/Mo xuong
   DAY the thay vi de no dinh ngay sau ten phien roi bo trong ca khoang duoi —
   khoang trong (neu co) nam GIUA noi dung va nut, khong con "trong hoac". */
/*
 * DO THAT 25/08/2026 (chu shop chup man hinh): NUT "Dừng" TRAN HAN RA NGOAI
 * VIEN THE. Hang chan cua the dang phat co "đã phát 3:24:42" + ba nut
 * (Xem/Bỏ qua/Dừng); the rong 17rem (272px) khong du, ma `.sc-thoigian` co
 * `white-space: nowrap` con `.sc-nut` co `flex: none` — KHONG CAI NAO chiu co
 * lai, nen phan thua day thang nut cuoi ra ngoai khung.
 *
 * Ba lop chan, tu nhe den nang:
 *   1. `.sc-thoigian` duoc co/cat truoc (no la chu, mat vai ky tu con doc duoc;
 *      nut ma tran ra ngoai thi khong bam duoc).
 *   2. `.sc-foot` cho xuong dong khi that su khong du cho.
 *   3. `.stream-card { overflow: hidden }` — luoi an toan cuoi: du tinh sai o
 *      dau, khong gi duoc phep ve ra ngoai vien the nua.
 */
.sc-foot { display: flex; align-items: center; justify-content: space-between; gap: var(--k-2);
  margin-top: auto; flex-wrap: wrap; row-gap: var(--k-1); }
.sc-thoigian { font-size: var(--chu-xs); color: var(--muted); white-space: nowrap;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.sc-thoigian b { font-variant-numeric: tabular-nums; color: var(--text); font-weight: 600; }
.sc-nut { display: flex; gap: var(--k-1); align-items: center; flex: none; }

.badge { display: inline-flex; align-items: center; gap: var(--k-1);
  padding: var(--k-1) var(--k-2); border-radius: 999px; white-space: nowrap; flex: none;
  font-size: var(--chu-xs); font-weight: 600; background: var(--muted-bg); color: var(--muted-foreground); }
.badge.running { background: var(--ok-nen); color: var(--ok-text); }
.badge.reconnecting, .badge.starting { background: var(--warn-nen); color: var(--warn-text); }
.badge.failed { background: var(--bad-nen); color: var(--bad-text); }
.badge::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.badge.running::before { animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .25; } }

.warn-line { color: var(--warn-text); font-size: var(--chu-sm); }
.bad-line { color: var(--bad-text); font-size: var(--chu-sm); }

/* ---------- thu vien video ----------
 * Cac quy tac `.vcard` / `.vgrid` (the doc 190x300px) da go: thu vien gio la
 * BANG, xem `.v-bang` o cuoi file. Giu lai chung thi nguoi doc sau tuong bo cuc
 * the con hoat dong — va dung theo kieu do ma dau hieu bam-de-xem tren anh thu
 * nho da bi mat mot luot.
 */

/* ---------- bang ---------- */
table { width: 100%; border-collapse: collapse; background: var(--panel);
  border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; }
/* Dem o bang: .65rem tren duoi cho ra hang cao 75px voi mot dong chu — nhan
 * len 14 hang la mot man hinh chi de dung dem. .42rem van du thoang de doc va
 * lay lai ~15% chieu cao moi bang tren ca ung dung. */
/*
 * Ban CU cua `th, td` DA GO — khuon `table.tsx` o cuoi tep ghi de HOAN TOAN
 * ca ba thuoc tinh no dat (`text-align`, `padding`, `border-bottom`), cung do
 * dam dac (0,0,1) va nam sau nen thang. Giu lai chi lam nguoi doc tuong day
 * la noi dat khuon bang, roi sua o day va khong thay gi doi (CLAUDE.md §3).
 */
tbody tr:hover { background: var(--panel-2); }
/*
 * LUAT `th` O DAY DA BI XOA — no la MA CHET, va toi vua sua nham vao no.
 *
 * DO THAT 25/08/2026: doi chieu ma nguon template shadcn thay tieu de cot
 * phai 14px, toi sua luat `th` o day tu `--chu-xs` sang `--chu-sm`, chay
 * kiem dot bien — va bai kiem KHONG DO. Truy ra: co MOT luat `th {` THU HAI
 * o duoi (khoi "BANG — table.tsx", ~dong 4300) khai lai DU CA NAM thuoc tinh
 * cua luat nay (font-weight/font-size/color/background/...), nam SAU nen
 * thang tuyet doi.
 *
 * Tuc la bang DA dung 14px san tu truoc; cho toi sua khong phai cho dang
 * chay. Dung benh CLAUDE.md muc 3 — hai duong cho mot viec, va duong THANG
 * lai khong phai duong toi dang sua. Xoa han thay vi de lai, de nguoi sau
 * (ke ca toi) khong sua nham lan nua.
 */
/* `td.right/th.right` cung da co ban day du hon o khuon `table.tsx` (kem
 * `font-variant-numeric: tabular-nums`) — ban o day go di. */

.bar { height: 7px; background: var(--panel-3); border-radius: var(--radius-sm); overflow: hidden; margin: var(--k-2) 0; }
.bar > div { height: 100%; width: 0; background: var(--accent); transition: width .25s; }

/* ---------- trang thai rong ---------- */
.empty { color: var(--muted); text-align: center; padding: var(--k-12) var(--k-6);
  background: var(--panel); border: 1px dashed var(--line); border-radius: var(--r); }
.empty .big-icon { font-size: var(--chu-3xl); display: block; margin-bottom: var(--k-2); opacity: .5; }
.empty b { display: block; color: var(--text); margin-bottom: var(--k-1); font-size: var(--chu-base); }

/* ---------- ngan chi tiet ---------- */
/* ---------- ban dieu khien phien ----------
 * Truoc day day la mot NGAN HEP ben phai (540px) trong cua so 1568px: bo phi
 * 2/3 man hinh, va chin khoi gap chong nhau cao 2.258px trong mot cua so 851px.
 * Moi thao tac deu phai cuon roi mo gap. Nay la mot LUOI TOAN MAN HINH — cai
 * nao hay dung thi luon mo va nam tren, cai nao la cau hinh thi gap va nam duoi.
 */
/*
 * BA TANG, khong phai mot luoi tha noi.
 *
 * Truoc day ca ngan la MOT luoi auto-fill: moi khoi tu tim cho. Do duoc tren
 * anh chup: mo mot khoi ra thi ba khoi cung hang dung nguyen, de lai mot vung
 * trang rong het chieu ngang cao ~150px — cang dung cang thung lo. Va "Xoa
 * phien" thi troi giua vung trang do, canh cac nut hay bam.
 *
 * Nay chia theo VIEC:
 *   tang 1 — dai so lieu + dang phat  : het chieu ngang, luon nhin thay
 *   tang 2 — ba viec lam trong luc phat: luoi 12 cot, ti le co dinh
 *   tang 3 — cau hinh va so sach       : XEP DOC, nen khong bao gio thung lo
 */
/*
 * Ngan dieu khien KHONG che thanh dieu huong.
 *
 * Truoc day no phu kin man hinh: dang live ma muon liec Tinh trang hay sua gia
 * o Ban hang la hai lan bam di, hai lan bam ve — va mat luon khung xem truoc
 * trong luc do. Doi thu giu nguyen thanh ben trong suot buoi. Nay chua tu dinh
 * thanh nav (~60px) tro xuong.
 */
.drawer { position: fixed; inset: var(--dau) 0 0 var(--rail); background: var(--bg);
  z-index: 30; display: flex; flex-direction: column; }
@media (max-width: 900px) { .drawer { inset: 0; } }
.drawer-inner { flex: 1; overflow-y: auto; padding: 0 var(--k-6) 40px;
  display: flex; flex-direction: column; gap: var(--k-4); }

/* `stretch` chu khong `start`: ba khoi cao khac nhau thi khoi thap de lai mot
 * vung trang bang chieu cao chenh lech — do duoc ~300px o goc duoi trai. Keo
 * nen khoi xuong het hang thi khong con lo, va danh sach binh luan cung co san
 * cho de dai ra khi nguoi xem bat dau hoi. */
/*
 * `align-items: start`, KHONG phai `stretch`.
 *
 * Quy tac cu keo gian ba khoi cho bang khoi cao nhat. Ly do ban dau la DANH
 * SACH BINH LUAN nam trong day va can cho de dai ra — nhung no da chuyen vao
 * buong lai (`.buong-bl`) tu lau. Ly do mat roi, quy tac o lai.
 *
 * Do duoc: ca ba khoi deu cao DUNG 513px. "Cach tra loi binh luan" chua mot o
 * danh dau va mot o so — rong khoang 90%. "San pham dang ghim" cung the. Gan
 * 800px trong tren mot man hinh cao 799px, va no day cac khoi thao tac xuong
 * duoi nep gap.
 *
 * Ai doi lai `stretch`: kiem xem danh sach binh luan da quay ve day chua. Neu
 * chua thi dung doi.
 */
.dk-lam { display: grid; gap: var(--k-4); align-items: start;
  grid-template-columns: repeat(12, minmax(0, 1fr)); }
.dk-lam > details { display: flex; flex-direction: column; }
.dk-lam > details > summary { flex: none; }

.dk-lam > #d-bl-box    { grid-column: span 6; }
.dk-lam > #d-ghim-box  { grid-column: span 6; }
@media (max-width: 1280px) {
  .dk-lam { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dk-lam > #d-bl-box, .dk-lam > #d-ghim-box { grid-column: span 1; }
}
@media (max-width: 820px) {
  .dk-lam { grid-template-columns: minmax(0, 1fr); }
}

/*
 * Cau hinh va so sach: thanh GAP LAI xep vua man, MO RA thi chiem ca hang.
 *
 * Xep ngang co dinh thi mo mot khoi la ba khoi cung hang dung nguyen, de lai
 * mot vung trang rong het chieu ngang — do duoc tren anh chup, cao ~150px.
 * Xep doc mot cot thi khong thung lo nua nhung bo trong ca nua ben phai.
 *
 * `details[open]` cho ca hang, cong `dense`, giai quyet ca hai: dong lai thi
 * nam gon 4-5 cai mot hang, mo ra thi duoc ca chieu rong de doc.
 */
/*
 * `.dk-phu` la MOT COT cac nhom; moi nhom co luoi rieng cua no.
 *
 * Ban truoc de ca bay khoi trong CUNG mot luoi `auto-fit`, nen nhan nhom chi
 * la mot dong chu troi giua dong chay — sau nhan "Dung moi ngay" van la sau o
 * xep lien nhau, va bon o cua nhom khac nam ngay canh Hen gio. Nhan khong cat
 * duoc gi thi no khong phai nhan.
 */
.dk-phu { display: flex; flex-direction: column; gap: 0; }
.dk-luoi { display: grid; gap: var(--k-2); align-items: start;
  grid-auto-flow: row dense;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.dk-phu > .khu-nguy-hiem { align-self: stretch; margin-top: var(--k-4); }
.dk-luoi > details[open] { grid-column: 1 / -1; }
/*
 * NHAN NHOM — mot hang chu vat het be ngang, cat day the thanh ba cum.
 *
 * Khong ke o giua: bay o giong het nhau thi mat khong bam duoc dau la thu dung
 * moi ngay. Cai duy nhat can la mot cai moc de mat dung lai.
 */
.dk-nhom { margin: var(--k-4) 0 var(--k-2);
  display: flex; align-items: baseline; gap: var(--k-2);
  font-size: var(--chu-xs); font-weight: 700; text-transform: uppercase;
  letter-spacing: .09em; color: var(--muted); }
.dk-nhom::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.dk-nhom-y { font-size: var(--chu-xs); font-weight: 400; text-transform: none;
  letter-spacing: 0; color: var(--muted); opacity: .75; }
.dk-nhom:first-child { margin-top: 0; }

/* Dau bang: ten phien, trang thai, va NUT CHINH — luon nhin thay, khong phai
 * cuon xuong day moi bam duoc Dung nhu truoc. */
.drawer-head { position: sticky; top: 0; z-index: 10;
  display: flex; align-items: center; gap: var(--k-4); flex-wrap: wrap;
  margin: 0 -var(--k-6) 0; padding: var(--k-3) var(--k-6);
  background: var(--panel); border-bottom: 1px solid var(--line); }
.drawer-head :is(h1, h2, h3, h4) { margin: 0; font-size: var(--chu-lg); letter-spacing: -.02em; }
.drawer-actions { display: flex; gap: var(--k-2); align-items: center; flex-wrap: wrap;
  margin-left: auto; }

/* Loi thoat "tao phien MOI ben Shopee" — chi hien khi bi chan, va phai trong
   nhu mot canh bao chu khong nhu mot tuy chon binh thuong: tick nham la mot
   phien thua tren gian hang that. */
.ep-tao { display: inline-flex; align-items: center; gap: var(--k-1);
  font-size: var(--chu-sm); color: var(--warn-text); border: 1px solid var(--warn);
  border-radius: var(--radius-md); padding: var(--k-1) var(--k-2); cursor: pointer; }

/*
 * ── GOC RE CUA BAC BO GOC LE ──────────────────────────────────────────────
 *
 * Luat nay dat `--radius-lg` (10px) va dem `12px 16px` cho MOI `<details>`
 * trong ung dung. Do la nguon cua sau cai hop 10px do duoc tren production
 * 27/08/2026 — toi da di va tung LOP mot (`.dt-phien`, `.canh-bao`...) trong
 * khi cai le loi la chinh luat GOC nay.
 *
 * `<details>` o day duoc dung nhu mot THE gap duoc, nen no phai mang bac cua
 * the: `--radius-xl` + dem deu 16px, y het `.o` va `.tile`.
 *
 * `details[open] { padding-bottom }` cung go: dem deu bon phia thi khong can
 * mot ngoai le cho trang thai mo.
 */
details { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-xl);
  padding: var(--k-4); margin: 0; align-self: start; }
summary { cursor: pointer; font-weight: 600; font-size: var(--chu-base); list-style: none;
  display: flex; align-items: center; gap: var(--k-2); }
summary::-webkit-details-marker { display: none; }
/*
 * ── DAU GAP/MO CUA `<details>` — HINH, KHONG PHAI KY TU ──────────────────
 *
 * Chu shop 26/08/2026: "vẫn quá nhiều chỗ tao thấy mày đang dùng ::before hay
 * after thế, nó cực kỳ nhỏ lạc quẻ xấu".
 *
 * Day chinh la cho do, va no la cho DONG NHAT ca ung dung: quy tac
 * `summary::before` khong gan lop nao, nen no ve len MOI the `<details>` —
 * hang phien da dung, cac khoi gap trong ngan phien, chi tiet ky thuat...
 *
 * Ban cu: `content: '\25B8'` (▸) o `font-size: .8em`. Ba khuyet diem, dung
 * ba chu chu shop dung:
 *
 *   "nhỏ"      — `.8em` cua chu 14px la 11px, canh mot bo icon 16px.
 *   "lạc quẻ"  — ▸ la tam giac DAC; ca bo icon con lai la net vien 2px, dau
 *                tron. Khong cung mot ho hinh.
 *   "xấu"      — glyph nay do PHONG CHU ve, ma Inter khong co no, nen trinh
 *                duyet roi ve phong du phong cua he dieu hanh: moi may mot
 *                hinh, va thuong lech duong chan chu.
 *
 * Nay dung `chevron-right` cua lucide — dung hinh ma `ico('chevron-right')`
 * sinh ra trong `app.js`, ve bang `mask` nen `currentColor` to lai duoc va co
 * dat bang `px` (16px, bang moi hinh khac). Mo ra thi XOAY 90 do thay vi doi
 * sang mot hinh thu hai: mot hinh, mot phep xoay, va no chuyen dong muot.
 */
summary::before {
  content: ''; display: inline-block; flex: none;
  width: 16px; height: 16px; vertical-align: -3px;
  background-color: var(--muted-foreground);
  -webkit-mask: var(--ico-chevron-phai) center/16px 16px no-repeat;
  mask: var(--ico-chevron-phai) center/16px 16px no-repeat;
  transition: transform .15s ease;
}
details[open] > summary::before { transform: rotate(90deg); }

/* Khoi rong: nhung thu vua dai vua hay dung. Ti le do .dk-lam dat. */
.het-hang { grid-column: 1 / -1; }

/* ---------- dai so lieu ban hang ----------
 * Nguoi xem · thich · binh luan · don · doanh thu — LY DO DUY NHAT de ngoi
 * canh mot phien hai tieng. Truoc day chung nam trong mot khoi gap lai o duoi,
 * nen mo trang ra la mot dau gach ngang va khong ai bam mo.
 */
.kpi { display: flex; align-items: center; gap: var(--k-4); flex-wrap: wrap;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3) var(--k-4); }
/* Cac o keo sat nhau, KHONG trai deu het chieu ngang: nam con so cach nhau
 * 280px thi mat phai chay qua ca man hinh de doc mot dong. */
.kpi-o { display: flex; flex-wrap: wrap; gap: var(--k-1) var(--k-12); flex: 1; min-width: 0; }
.kpi-o > div { display: flex; flex-direction: column; min-width: 5.5rem; }
.kpi-o b { font-size: var(--chu-2xl); font-weight: 600; letter-spacing: -.02em;
  line-height: 1.25; font-variant-numeric: tabular-nums;
  overflow: hidden; text-overflow: ellipsis; }
.kpi-o span { font-size: var(--chu-sm); color: var(--muted); }
.kpi-o .tien b { color: var(--ok-text); }
.kpi-o .chua b { color: var(--muted); font-weight: 500; }
.kpi-ben { display: flex; align-items: center; gap: var(--k-2); flex: none; }
.kpi-ben .muted { font-size: var(--chu-sm); }
/*
 * Chua doc duoc: noi VI SAO ngay tai cho — nhung CHI dong ly do mac ao canh
 * bao, khong phai ca dai.
 *
 * Truoc day ca khoi to nen vang vien vang, nen liec mot cai no doc thanh "co
 * loi" chu khong phai "day la bang diem cua phien". Bang diem thi luon phai
 * trong ra bang diem, ke ca khi chua co so.
 */
.kpi-vuong { flex-basis: 100%; font-size: var(--chu-sm); color: var(--warn-text);
  display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap;
  margin-top: var(--k-2); padding: var(--k-2) var(--k-3); border-radius: var(--radius-md);
  background: var(--warn-nen); }

/* Chua co so: mot dong, tra lai ~80px cho khung xem truoc va hang doi. */
.kpi.gon-mot-dong { padding: var(--k-2) var(--k-4); }
.kpi.gon-mot-dong .kpi-vuong { margin-top: 0; background: none; padding: 0; }
.kpi-chua { display: flex; align-items: baseline; gap: var(--k-2); flex-wrap: wrap; }
.kpi-chua b { font-size: var(--chu-sm); }
.kpi-chua span { font-size: var(--chu-sm); color: var(--muted); }

.live { background: linear-gradient(135deg, var(--panel), var(--panel-2));
  border: 1px solid var(--ok-nen); border-radius: var(--radius-lg); padding: var(--k-4) var(--k-4); margin-bottom: var(--k-3); }
.live-row { display: flex; align-items: center; gap: var(--k-3); }
.live-row.metrics { margin-top: var(--k-3); gap: var(--k-6); }
.live-row.metrics b { font-size: var(--chu-xl); display: block; font-variant-numeric: tabular-nums; }
.live-row.metrics label { margin: 0; font-size: var(--chu-xs); }
.notice { font-size: var(--chu-sm); margin: var(--k-2) 0 0; color: var(--warn-text); }

.queue { list-style: none; margin: var(--k-2) 0; padding: 0; }
.queue li { display: flex; align-items: center; gap: var(--k-2);
  background: var(--panel-2); border-radius: var(--radius-md); padding: var(--k-2) var(--k-2); margin-bottom: var(--k-1); }
.queue li img { width: 30px; height: 42px; object-fit: cover; border-radius: var(--radius-sm); background: var(--panel-3); }
.queue li .name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--chu-sm); }
.queue li .dur { color: var(--muted); font-size: var(--chu-xs); font-variant-numeric: tabular-nums; }
.queue li button { padding: 0 var(--k-2); font-size: var(--chu-sm); }
.add-row { display: flex; gap: var(--k-2); align-items: center; margin: var(--k-2) 0; }
.add-row select, .add-row input { margin: 0; }

/* O danh dau: o vuong o TREN CUNG mot dong voi chu dau, chu chay tiep xuong
 * duoi thang le — khong phai chu bi ep thanh cot hep ben canh o vuong. Do
 * duoc: trong cot 300px, "Tu ghim theo video dang phat" vo thanh ba dong lech. */
label.inline { display: flex; align-items: center; gap: var(--k-2); margin: var(--k-2) 0;
  color: var(--text); line-height: 1.5; }

/* Nhan CO O DANH DAU thi khong dung flex: flex bien MOI doan chu thanh mot cot
 * rieng, nen trong cot 300px "Tu ghim theo video dang phat" vo thanh ba dong
 * lech nhau. Tha o vuong ra le trai va de chu chay quanh no nhu van ban thuong. */
label.inline:has(> input[type="checkbox"]:first-child),
label.inline:has(> input[type="radio"]:first-child) { display: block; }
label.inline > input[type="checkbox"]:first-child,
label.inline > input[type="radio"]:first-child {
  float: left; width: auto; margin: var(--k-1) var(--k-2) 0 0; }
label.inline::after { content: ''; display: block; clear: both; }
label.inline input { width: auto; margin: 0; }
label.inline > span.muted, label.inline .muted { font-weight: 400; }
/* Che do gon: bo luon phan giai thich trong ngoac o nhan va nhan phu. */
/*
 * `.gon` CHI AN VAN XUOI, KHONG AN NHAN CHUC NANG.
 *
 * Hai dong `label.inline .muted` va `.bl-tudong .muted` DA GO khoi lop nay
 * (26/08/2026). Chung an ca mot so NHAN trong ngan phien — thu nguoi dung can
 * de biet mot o chon dang lam gi, khong phai van giai thich. Khi lop `.gon`
 * duoc bat vinh vien thi cac nhan do bien mat han, va do la mot phan cua
 * chuyen chu shop bao "mất hết detail chọn video".
 *
 * Con lai dung mot loai: `.hint` — cac doan van xuoi giai thich man hinh.
 */
body.gon summary + .hint { display: none; }

.dot { width: 9px; height: 9px; border-radius: 50%; background: var(--muted); display: inline-block; }
.dot.ok { background: var(--ok); }
.dot.bad { background: var(--bad); }
/* `warn` — co su co nang, nhung he van chay. Khong duoc dung mau cua `bad`:
 * hai chuyen khac nhau (may chet / may song ma co viec can nguoi) ma cung mau
 * thi cai nay se bi doc nham thanh cai kia. */
.dot.warn { background: var(--warn); }

.log { list-style: none; margin: var(--k-2) 0 0; padding: 0; max-height: 280px; overflow-y: auto; }
.log li { display: flex; gap: var(--k-2); font-size: var(--chu-sm); padding: 6px 0; border-bottom: 1px solid var(--line); }
.log li:last-child { border-bottom: none; }
.log li time { color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.log li .why { color: var(--bad-text); }

#d-name { cursor: text; }
.rename { cursor: text; border-bottom: 1px dashed transparent; }
.rename:hover { border-bottom-color: var(--muted); }
.mt { margin-top: var(--k-8); }
#member-table select { width: auto; margin: 0; padding-block: var(--k-1); padding-left: var(--k-2); font-size: var(--chu-sm); }
#shop-table input { margin: 0; padding: var(--k-1) var(--k-2); }

.toast { position: fixed; bottom: var(--k-5); left: 50%; transform: translateX(-50%);
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3) var(--k-4); z-index: 40; max-width: min(560px, 92vw); box-shadow: var(--shadow); }
.toast.bad { border-color: var(--bad); color: var(--bad-text); }
.toast.ok { border-color: var(--ok); }

@media (max-width: 700px) {
  header { gap: var(--k-2); padding: var(--k-2) var(--k-4); }
  header nav { order: 3; width: 100%; overflow-x: auto; }
  main { padding: var(--k-4); }
  .drawer-inner { padding: var(--k-4); }
}

.panel-log { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r);
  padding: var(--k-1) var(--k-4); max-height: none; }
.panel-log li { padding: var(--k-2) 0; }
.panel-log li .who { color: var(--muted); }
.panel-log li a { color: var(--accent-text); text-decoration: none; cursor: pointer; }
.panel-log li a:hover { text-decoration: underline; }

/* ── Tinh trang he thong ── */
.cham { display:inline-block; width:8px; height:8px; border-radius:50%;
        /* `--do` khong bao gio ton tai — bo di, dung thang bien that. */
        background: var(--bad); margin-left: var(--k-1); vertical-align: middle; }
/*
 * `auto-fit`, KHONG phai `auto-fill`.
 *
 * `auto-fill` giu lai cac cot RONG: do tren cua so 1600, dai nay tao 5 cot
 * 252px cho 3 o — ba o dung o 990px roi bo trong 320px con lai. `auto-fit` gom
 * cot rong lai nen cac o that gian ra day hang.
 *
 * `.tiles` da dung `auto-fit` tu dau — do la ly do dai KPI o cac man khac day
 * ma dai nay thi khong.
 */
/*
 * BON O DEU NHAU, VA KHONG KEO TRAN MAN — chu shop 25/08/2026 chup man hinh:
 * "4 cai card chu to, margin xau cuc ky xau".
 *
 * Ban truoc dung `max-content` (om sat chu) de bot "to", nhung no lam BON O
 * RONG KHAC HAN NHAU (297/181/193/180px do duoc) — nhin xoc xech, dung cai
 * "margin xau" chu shop noi. Ma quay lai `1fr` deu nhau thi moi o ~390px cho
 * ba chu ngan — lai "to" nhu cu.
 *
 * Ca hai deu sai vi cung mot ly do: de LUOI quyet dinh be rong theo man hinh.
 * Chot `max-width` cho CA LUOI thay vi cho tung o: bon o deu nhau tuyet doi
 * (1fr), nhung tong chi 880px nen moi o ~205px — vua du ba dong chu, khong
 * phinh ra chiem tron be ngang man 1.601px.
 */
/*
 * ── `.tt-grid` DUNG CHUNG LUAT HANG THE, KHONG CO BAN RIENG ──────────────
 *
 * Chu shop 26/08/2026: *"sao trang tình trạng hệ thống 4 card díu nhau rồi để
 * khoảng trống bên phải thế, tao đã bảo card dùng chung cấu trúc giữa tất cả
 * các trang cơ mà, nó phải dàn ngang sát 2 bên đều nhau"*.
 *
 * Ban cu o day dat BA thu rieng, va ca ba deu danh nhau voi luat chung:
 *
 *   `max-width: 880px`      -> hang the dung lai o 880px trong mot vung rong
 *                              1601px, de ho 672px ben phai. Day la nguyen
 *                              nhan chinh.
 *   `grid-template-columns` -> chot cung bon cot, thang `grid-auto-flow:
 *                              column` cua luat chung.
 *   `gap: var(--k-2)`       -> 8px, trong khi moi hang the khac dung 16px.
 *
 * Ca ba da go. `.tt-grid` co ten trong bo chon cua luat chung o cuoi tep
 * (`.tiles, .dem-luoi, .cvd-dem, .tt-grid`) — do la noi duy nhat dat khuon
 * hang the, cho moi man.
 */
/*
 * DO THAT 25/08/2026, chu shop bao "cac card tren dau cuc to cuc trong": Grid
 * mac dinh keo moi `.tt-o` CUNG HANG cao bang o cao nhat — o "Su co nang" co
 * them nut "Danh dau da doc" nen cao hon han hai o kia (149px ca ba, trong khi
 * "Chay lien tuc"/"Viec hong" chi can ~100px cho ba dong chu). Khac voi
 * `.sc-foot` (co mot "day" ro rang de neo), o day khong phai o nao cung co nut
 * — nen CAN GIUA theo chieu doc thay vi neo day: o ngan thi noi dung nam giua
 * khung, khong con dong lai tren dinh de trong het phia duoi.
 *
 * DO THAT LAN 2, 25/08/2026 (chu shop van bao "to ngu nhu cho" sau lan sua
 * tren, agent phan bien doc lap xac nhan): lan truoc chi nen CHIEU DOC (bot
 * padding se lam o 25/08 sau), con CHIEU NGANG van keo `1fr` deu nhau du chu
 * ben trong chi choan chua toi nua be rong — khoang trang NGANG cung gop phan
 * "to". Doi `1fr` -> `max-content` de o OM SAT chu, khong keo day theo luoi;
 * `minmax(180px, ...)` van giu san mot mep toi thieu de khong qua chat khi
 * chu rat ngan ("0"). Padding giam k-3(12px) -> k-1(4px), `.so` giam
 * chu-2xl(24px) -> chu-lg(18px) — trang tinh trang can LIEC NHANH nhieu tin
 * hieu, khong can mot con so "hero" phong truong nhu trang chu.
 */
/* Radius 14 + bong nhe cho khop ba he the kia; padding 12px (4px la qua sat
   mep — template: "chu khong bao gio sat mep"). `gap: 2px` -> 4px cho thuoc
   thang. */
.tt-o { border:1px solid var(--line); border-radius: var(--radius-xl); box-shadow: var(--bong-xs);
  padding: var(--k-3); background: var(--panel);
  display: flex; flex-direction: column; justify-content: center; gap: var(--k-1); }
.tt-o :is(h1, h2, h3, h4) { margin: 0; font-size: var(--chu-xs); text-transform:uppercase; letter-spacing:.04em;
           color:var(--muted); }
.tt-o .so { font-size: var(--chu-base); font-weight:600; line-height: 1.2; }
.tt-o.co-loi { border-color: var(--bad-vien); background: var(--bad-nen); }
/* Vach mau canh trai DA GO 26/08/2026 — cung dot voi 21 vach khac (chu shop:
 * *"nhieu card co vien border ben phai mau do hay mau xanh... bo cai mau do
 * di"*). Hop ba canh 1px + mot canh 3px nhin nhu bi xo, va mau van con day du
 * o VIEN CA HOP va nen — khong mat tin hieu nao. */
.tt-muc { border: 1px solid var(--border); padding: var(--k-2) var(--k-3); margin: var(--k-3) 0;
          background: var(--muted-bg); border-radius: var(--radius-lg); }
.tt-muc.nang, .tt-muc.chet { border-color: var(--bad-vien); background: var(--bad-nen); }
.tt-muc.canh-bao { border-color: var(--warn-vien); background: var(--warn-nen); }
.tt-muc .ma { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size: var(--chu-xs);
              color:var(--muted); }
.tt-muc .noi { margin: var(--k-1) 0; }
.tt-muc .lam { font-size: var(--chu-xs); color:var(--tin-text); }
.tt-muc .tu { font-size: var(--chu-xs); color: var(--ok-text); }
.tt-muc .chitiet { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size: var(--chu-xs);
                   color:var(--muted); margin-top: var(--k-1); word-break:break-all; }
/*
 * Trang thai SACH la mot dong, khong phai mot khoang trong.
 *
 * `padding:24px` + can giua bien mot cau "khong co su co nao" thanh mot hop cao
 * ~120px. Do la tin TOT — no khong dang chiem cho bang mot danh sach su co that.
 */
.tt-sach { padding: var(--k-2) 0; color:var(--ok-text,var(--muted)); }
/*
 * SU CO: TUNG chot be rong 62rem (992px) khi khung con 1.330px, cho khong
 * keo het man.
 *
 * DO THAT 25/08/2026: khung the nay nay da rong 1.601px (`main` da noi tu
 * lan sua khac), nen 62rem chi con lap 62% — 609px trang HOAN TOAN o ben
 * phai, dong ffmpeg/Shopee cuoi cung troi lo lung giua trang. Cung mot benh
 * voi `.kb-bang`/`.v-bang` da sua ngay hom nay: chot be rong tuyet doi khong
 * theo kip khung cha lon dan. Moi muc la mot dong log ky thuat dai (URL,
 * thong bao ffmpeg), khong phai van xuoi can gioi han do dai dong doc — nen
 * bo tran, khong thay bang mot con so khac.
 */
#tt-danhsach { max-width: none; }

/* ---------- tinh trang tung bo phan ----------
 * "Chua co su co nao" khong tra loi duoc cau hoi that: CSDL con song khong,
 * may phat con nhan viec khong, hang viec co dang tac khong. Ba thu do quyet
 * dinh phien co phat duoc hay khong, va chung deu hong theo kieu IM LANG.
 */
.bo-phan { list-style: none; margin: var(--k-2) 0 0; padding: 0;
  display: grid; gap: var(--k-2); }
.bo-phan .bp { display: grid; gap: 0; padding: var(--k-2) var(--k-3);
  border-radius: var(--radius-md); border-left: 3px solid var(--ok); background: var(--panel-2); }
.bo-phan .bp.chet { border-left-color: var(--bad); background: var(--bad-nen); }
.bo-phan .bp b { font-size: var(--chu-sm); }
.bo-phan .bp span { font-size: var(--chu-sm); color: var(--muted); }
.bo-phan .bp em { font-size: var(--chu-sm); font-style: normal; color: var(--bad-text); }
.bo-phan .bp-dong { display: flex; align-items: center; gap: var(--k-2);
  justify-content: space-between; font-size: var(--chu-sm); margin-top: var(--k-1); }
.bo-phan .bp-dong span { min-width: 0; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
/* Dem rieng DA GO — dung bac dem chung cua `table.tsx`. Xem `.bang-gon`. */
/* Moc thoi gian cua tung con so: hai o dem tu hai moc khac nhau ma khong o nao
 * khai bao thi con so lon nhat tren trang doc thanh "moi thu on". */
.tt-o .tt-moc { font-size: var(--chu-xs); color: var(--muted); margin-top: 0;
  line-height: 1.375; }

.danh-sach-nho { list-style: none; margin: var(--k-2) 0 0; padding: 0;
  display: grid; gap: var(--k-2); font-size: var(--chu-sm); }
.danh-sach-nho li { display: grid; gap: 0; padding-left: var(--k-3);
  border-left: 2px solid var(--warn); }
.danh-sach-nho li.xong { border-left-color: var(--ok); color: var(--ok-text); }
.danh-sach-nho .muted { font-size: var(--chu-sm); }
.danh-sach-nho em { font-style: normal; font-size: var(--chu-xs); color: var(--tin-text); }

/* Dau trang thu vien: tom tat + viec can lam, nam NGANG. */
/* `align-items: start`, khong `stretch`: hop "Can de y" ben phai cao gap ba
 * lan ba o tom tat ben trai, va `stretch` keo ba o do cao theo — de lai ba
 * vung trang cao ~120px. Do duoc tren anh chup. */
/* Ba o tom tat XEP DOC trong mot cot hep, khong trai ngang.
 * Trai ngang thi ba o cao 56px nam canh mot hop "Can de y" cao 240px — de lai
 * mot lo trang gan 200px x 700px giua trang, dung cai nguoi dung keu "trong".
 * Xep doc thi hai cot xap xi bang chieu cao. */
/*
 * MOT COT, khong phai hai.
 *
 * Ban cu chia 22rem cho ba o dem va phan con lai cho the "Can de y". The do
 * gap lai chi cao 44px, nen ket qua tren man 1568px la mot hop rong ~1.000 x
 * 130px nam giua trang, canh mot cot ba o dem xep DOC — trong khi chinh lop
 * cua cot do ten la `.ngang`.
 *
 * Nay: ba o dem chay ngang het be rong, "Can de y" nam duoi, cung het be rong.
 */
/*
 * BA O DEM ben trai, the "Can de y" ben PHAI — khong xep chong.
 *
 * The "Can de y" gap lai chi cao 44px; de no mot minh mot hang la mot dai
 * 1.330x44px ma chu chi chiem 130px dau. Dat canh ba o dem thi khong con
 * khoang trong nao, va no van bung ra duoc khi mo.
 */
/*
 * MOT HANG DUY NHAT: ba o dem + the "Can de y", tat ca la anh em.
 *
 * Ban truoc chia hai cot `1fr / 20rem`, nen tren man 1920px the "Can de y" bi
 * day sang tan x=1275 va dung mot minh nhu bi vut ra ria, con giua no voi ba o
 * dem la mot khoang trang. Xep chung vao CUNG mot hang flex thi khong con ranh
 * gioi nao de tao ra khoang do.
 */
/* `.tv-dau` DA GO 26/08/2026 cung luc voi `.bo-phan.ngang` o Thu vien video:
 * sau khi "Cần để ý" tach ra hang rieng, cai boc nay chi con boc DUNG mot
 * thu, va ba luat flex cua no danh voi luat hang the dung chung. Ba o tom tat
 * gio la `.tiles` — cung khuon voi moi man khac. */
/* KHONG CO GIAN, KHONG CO KEO — nut nay khong con la mot the trong hang.
 * `flex: none` de ba the so lieu chia het phan con lai; `align-self: center`
 * de nut cao 36px nam giua hang chu khong cao bang the. */
/* `.tv-thieu-hop` da TACH khoi `.tv-dau` (chu shop 26/08/2026) — no la mot
 * hang rieng ngay duoi hang the, khong con la mot o trong hang do. */
.tv-thieu-hang { display: flex; justify-content: flex-end; margin: 0 0 var(--k-4); }
/* Khung/nen cu DA GO: cai co khung bay gio la chinh cai nut `.ghost` ben
 * trong. Hop chi con la moc neo cho tam noi. */
.tv-thieu-hop { position: relative; }
.tv-thieu-hop :is(h1, h2, h3, h4) { margin: 0 0 var(--k-1); }

/* Bao loi phai o lai cho toi khi nguoi dung dong — xem chu thich ham toast() */
.toast { display: flex; align-items: flex-start; gap: var(--k-3); }
.toast-x { background: none; border: 0; font-size: var(--chu-xl); line-height: 1; cursor: pointer;
  color: inherit; opacity: .65; padding: 0 2px; }
.toast-x:hover { opacity: 1; }
.badge.dung { background: var(--warn-nen); color: var(--warn-text); border-color: var(--warn-vien); white-space: nowrap; }

/* ── Canh bao tuan thu quy dinh Shopee ──
 * LOI DA MAC: nen dat cung mau SANG (var(--bad-nen)) trong khi chu ke thua mau SANG
 * cua giao dien toi — chu gan nhu tang hinh. Nay mau nen lay tu bien theo che
 * do, va chu LUON dat mau ro rang thay vi ke thua.
 */
#d-tuanthu { grid-column: 1 / -1; margin: 0; }
.tt-đầu { margin: 0 0 var(--k-2); font-size: var(--chu-xs); font-weight: 600;
  text-transform: uppercase; letter-spacing: .06em; color: var(--muted); }
.tuanthu { border-left: 3px solid var(--line); padding: var(--k-3) var(--k-4);
  margin: 0 0 var(--k-2); background: var(--panel-2); border-radius: var(--radius-lg);
  color: var(--text); }
.tuanthu.nang     { border-left-color: var(--bad);  background: var(--bad-nen); }
.tuanthu.canh-bao { border-left-color: var(--warn); background: var(--warn-nen); }
.tuanthu.goi-y    { border-left-color: var(--tin-text);     background: var(--tin-nen); }
.tuanthu .nhan { display: inline-block; font-size: var(--chu-xs); font-weight: 700;
  text-transform: uppercase; letter-spacing: .06em; }
.tuanthu.nang .nhan     { color: var(--bad-text); }
.tuanthu.canh-bao .nhan { color: var(--warn-text); }
.tuanthu.goi-y .nhan    { color: var(--tin-text); }
.tuanthu .noi { margin: var(--k-1) 0; line-height: 1.5; color: var(--text); }
.tuanthu .lam { font-size: var(--chu-sm); line-height: 1.5; color: var(--text);
  font-weight: 500; }
.tuanthu .can-cu { font-size: var(--chu-xs); color: var(--muted); margin-top: var(--k-1); }
/* `--muted` tren nen trang la du do (4.5:1+), nhung ba khoi `.tuanthu` deu
 * to mau nen (`-nen`), va tren do `--muted` tut duoi 4.5:1 (do duoc 4.18-4.24
 * cho `.canh-bao`/`.goi-y`). Dung lai dung mau `.nhan` da chon rieng cho tung
 * nen do — do la mau da kiem, khong bia mau moi. */
.tuanthu.nang .can-cu     { color: var(--bad-text); }
.tuanthu.canh-bao .can-cu { color: var(--warn-text); }
.tuanthu.goi-y .can-cu    { color: var(--tin-text); }

/* ── Xem truoc video ── */
.xem-lop { position: fixed; inset: 0; background: rgb(0 0 0 / 50%); z-index: 50;
  display: flex; align-items: center; justify-content: center; padding: var(--k-5); }
.xem-hop { background: var(--panel); border-radius: var(--radius-xl); overflow: hidden;
  max-width: min(460px, 94vw); width: 100%; box-shadow: 0 20px 60px rgb(0 0 0 / 50%);
  display: flex; flex-direction: column; max-height: 92vh; }
.xem-dau { display: flex; align-items: center; justify-content: space-between; gap: var(--k-2);
  padding: var(--k-3) var(--k-4); border-bottom: 1px solid var(--line); font-weight: 600; }
.xem-dau span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#xem-player { width: 100%; background: #000; max-height: 68vh; display: block; }
.xem-chan { display: flex; align-items: center; justify-content: space-between; gap: var(--k-2);
  padding: var(--k-3) var(--k-4); border-top: 1px solid var(--line); flex-wrap: wrap; }
.xem-nut { display: flex; gap: var(--k-2); flex-wrap: wrap; }
.xem-chan a.ghost { text-decoration: none; }

/*
 * `.sc-tiendo`/`.td-*` (dong "dang chieu video gi" tren `.stream-card`) da bi
 * XOA — chu shop 25/08/2026 noi thang "bo dong thu 3 di, bo di chu khong
 * phai ghep". `tienDoPhatHtml()` trong app.js gio tra ve rong.
 */
.ch-tiendo { display: grid; gap: var(--k-1); margin-top: var(--k-1); }
.ch-tiendo .td-thanh i { background: var(--tin-text); transition: width .8s linear; }
.sc-nut { display: flex; gap: var(--k-1); align-items: center; }
/* Ban va rieng cho the `<a>` trong hang nut DA GO: `.sc-nut > *` o cuoi tep
 * cho ca `<a>` lan `<button>` cung mot khuon, nen khong con hai duong nua. Chi
 * con phan `<a>` khong the thua ke: bo gach chan. */
.sc-nut a { text-decoration: none; }

/* ── Tien ich trinh duyet ── */
.ma-nho { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: var(--chu-xs);
  word-break: break-all; }
/* Loi may doc bang tieng may thi giau di; cau nguoi doc duoc va viec phai lam
 * thi bay ra. Chu shop doc "[invalid_partner_id]" xong khong biet lam gi. */
.lam-gi { font-size: var(--chu-xs); color: var(--tin-text); margin-top: var(--k-1);
  line-height: 1.375; }
details.ky-thuat { background: none; border: 0; padding: 0; margin-top: var(--k-1); }
details.ky-thuat > summary { font-size: var(--chu-xs); font-weight: 500; color: var(--muted); }
details.ky-thuat[open] { padding-bottom: 0; }
/* Cot "Ly do roi" phai duoc phan lon be rong: cau nguoi doc duoc dai hon ma
 * loi may, va bop no vao 110px thi mot dong thanh bon dong. */
#duong table { table-layout: fixed; width: 100%; }
#duong th:nth-child(1), #duong td:nth-child(1) { width: 22%; }
#duong th:nth-child(2), #duong td:nth-child(2) { width: 11%; }
#duong th:nth-child(3), #duong td:nth-child(3) { width: 41%; }
#duong th:nth-child(4), #duong td:nth-child(4) { width: 9%; }
#duong th:nth-child(5), #duong td:nth-child(5) { width: 17%; }
/* Quy tac chung o `.luoi-o .o` dat `white-space: nowrap` cho hai cot dau de
 * ten ky thuat khong bi be. Nay ten da la tieng Viet co dau cach — de nowrap
 * thi chu tran sang DE LEN cot ben canh. Do duoc: "Bam Bat dau benTShopee ich". */
#duong td, #duong th { white-space: normal; vertical-align: top;
  word-break: normal; overflow-wrap: anywhere; }
/* Nhung `anywhere` lam mot con so hai chu so vo thanh hai dong ("1/2"), va
 * tieu de mot tu vo thanh ba dong ("L/a/n"). Cho nhung o KHONG BAO GIO dai
 * thi cam be chu. */
#duong th, #duong td:nth-child(4) { white-space: nowrap; overflow-wrap: normal; }
.tt-tot { color: var(--ok-text); font-weight: 600; }
.tt-canh { color: var(--warn-text); font-weight: 600; }
.tt-chet { color: var(--bad-text); font-weight: 600; }
tr.mo { opacity: .5; }
.hop-ma { margin-top: var(--k-4); padding: var(--k-4) var(--k-4); border: 1px solid var(--warn-vien);
  background: var(--warn-nen); border-radius: var(--radius-lg); }
.hop-ma code { display: block; margin: var(--k-2) 0; padding: var(--k-2) var(--k-3); background: var(--panel-3);
  border: 1px solid var(--line); border-radius: var(--radius-md); word-break: break-all;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: var(--chu-sm); }
.hop-ma p { margin: var(--k-2) 0 var(--k-2); font-size: var(--chu-sm); color: var(--warn-text); }

/* ── Dieu khien Shopee qua tien ich ── */
.ti-den { display:inline-block; width:8px; height:8px; border-radius:50%;
  background:var(--muted,var(--muted-foreground)); margin-left: var(--k-1); vertical-align:middle; }
.ti-den.song { background:var(--ok-text); box-shadow:0 0 0 3px var(--ok-nen); }
.ti-den.chet { background:var(--bad); box-shadow:0 0 0 3px var(--bad-nen); }
.ti-nut { display:flex; flex-wrap:wrap; gap: var(--k-2); margin: var(--k-2) 0; }
.ti-lenh { display:grid; gap: var(--k-1); margin-top: var(--k-3); }
.ti-lenh .muc { display:flex; justify-content:space-between; gap: var(--k-2);
  padding: var(--k-2) var(--k-3); border-radius: var(--radius-md); background:var(--muted-bg);
  font-size: var(--chu-sm); }
.ti-lenh .muc.xong { background: var(--ok-nen); }
.ti-lenh .muc.loi, .ti-lenh .muc.het-gio { background:var(--bad-nen); color:var(--bad-text); }
.ti-lenh .muc.dang-lam, .ti-lenh .muc.cho { background:var(--warn-nen); }
.ti-lenh .tt { flex:none; opacity:.75; }
.luoi2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; }
@media (max-width: 640px) { .luoi2 { grid-template-columns: 1fr; } }

/* ── Cot "Sap toi" trong hang doi ── */
.queue li.dang-phat { background: var(--warn-nen); border-radius: var(--radius-md); }
.queue .sap { font-size: var(--chu-xs); color: var(--muted); white-space: nowrap; flex: none; }
.queue .sap.dang { color: var(--warn-text); font-weight: 600; }
.queue .sap.mo { opacity: .55; }

/* ── Nhan phan loai nhat ky ── */
.nhom { flex: none; font-size: var(--chu-xs); font-weight: 700; letter-spacing: .05em;
  padding: 0 var(--k-2); border-radius: var(--radius-sm); background: var(--muted-bg);
  color: var(--muted); }
.n-PHAT { background: var(--tin-nen); color: var(--tin-text); }
.n-LOI { background: var(--bad-nen); color: var(--bad-text); }
.n-HANG-DOI { background: var(--tin-nen); color: var(--chip-tim); }
.n-CAU-HINH { background: var(--warn-nen); color: var(--warn-text); }
.n-HAN-MUC { background: var(--warn-nen); color: var(--warn-text); }
/* `notice` tach lam hai theo `payload.level` (xem `hinhDangSuKien`): mot canh
 * bao va mot dong tin binh thuong khong duoc cung mot mau. */
.n-CANH-BAO { background: var(--warn-nen); color: var(--warn-text); }
.n-TIN { background: var(--muted-bg); color: var(--muted-foreground); }

/* ---------- cot bang thong 30 ngay ----------
 * Mot bang MOT DONG tren man hinh 1920px doc ra la "phan mem nay so sai".
 * Ba muoi cot — ngay khong phat la cot 0 — doc ra dung cai that.
 */
.cot-do { margin: var(--k-1) 0 0; }
.cot-khung { display: flex; gap: var(--k-2); align-items: stretch; }
.cot-truc-doc { display: flex; flex-direction: column; justify-content: space-between;
  font-size: var(--chu-xs); color: var(--muted); text-align: right; flex: none;
  padding: var(--k-1) 0; font-variant-numeric: tabular-nums; }
.cot-o { position: relative; flex: 1; min-width: 0; }
.cot-luoi { position: absolute; left: 0; right: 0; height: 1px;
  background: var(--line); pointer-events: none; }
.cot-hang { display: flex; align-items: flex-end; gap: var(--k-1); height: 170px;
  padding: var(--k-1) 0; position: relative; }
.cot-hang .cot { flex: 1; height: 100%; display: flex; align-items: flex-end;
  min-width: 0; }
.cot-hang .cot i { display: block; width: 100%; background: var(--accent);
  border-radius: 4px 4px 0 0; min-height: 2px; }
.cot-hang .cot.rong i { background: var(--line); height: 2px !important; }
.cot-hang .cot:hover i { filter: brightness(1.2); }
.cot-truc { display: flex; justify-content: space-between; font-size: var(--chu-xs);
  padding-top: var(--k-1); border-top: 1px solid var(--line); }
.hai-cot > .o { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--r); padding: var(--k-4) var(--k-5); min-width: 0; }
.hai-cot > .o > :is(h1, h2, h3, h4):first-child { margin: 0 0 2px; }
.bang-cuon { overflow-x: auto; }

/* ---------- ban hang: trang thai chua co so lieu ----------
 * Mot hop rong cao mot phan ba man hinh chi de dung bon dong chu la thu ban
 * cham goi la "tra loi cau hoi hom nay ban duoc bao nhieu bang mot hop rong".
 * Khung co truc va moc 0 noi duoc "cho nay se co gi", va chi cao bang mot
 * phan tu.
 */
.sl-trong { display: grid; gap: var(--k-4); align-items: center;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--r); padding: var(--k-4) var(--k-5); }
@media (max-width: 900px) { .sl-trong { grid-template-columns: minmax(0, 1fr); } }
.sl-khung { display: flex; gap: var(--k-2); height: 120px; }
.sl-khung .cot-o { border-bottom: 1px solid var(--line); }
.sl-cho { position: absolute; inset: 0; display: grid; place-items: center;
  color: var(--muted); font-size: var(--chu-sm); }
.sl-cach { display: flex; flex-direction: column; gap: var(--k-2); font-size: var(--chu-sm);
  color: var(--muted); }
.sl-cach b { color: var(--text); }
.sl-nut { display: flex; gap: var(--k-2); flex-wrap: wrap; margin-top: var(--k-1); }

/* ---------- ban hang: san pham + kich ban ---------- */
.sp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--k-2); }
.sp-anh { width: 40px; height: 40px; object-fit: cover; border-radius: var(--radius-sm); }
.kb-card { display: flex; flex-direction: column; gap: var(--k-2); }
.kb-head { display: flex; gap: var(--k-2); align-items: center; }
.kb-head img { width: 64px; height: 36px; object-fit: cover; border-radius: var(--radius-sm); }
.kb-card textarea { width: 100%; font: inherit; resize: vertical; }
.kb-trangthai { font-size: var(--chu-xs); }
.kb-trangthai.ok { color: var(--ok-text); }
.kb-trangthai.bad { color: var(--bad-text); }
.mini { width: 5rem; }

/* ---------- binh luan ---------- */
.bl-tudong {
  display: flex; flex-direction: column; gap: var(--k-1);
  padding: var(--k-2) var(--k-3); margin-bottom: var(--k-2);
  border-radius: var(--radius-md); background: var(--muted-bg);
}
.binhluan { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--k-2); }
.binhluan .bl {
  padding: var(--k-2) var(--k-3); border-radius: var(--radius-md);
  border: 1px solid var(--border);
}
.binhluan .bl.da { opacity: .6; }
.bl-head { display: flex; gap: var(--k-2); align-items: center; flex-wrap: wrap; }
.bl-noidung { margin: var(--k-1) 0; }
.bl-goiy { font-size: var(--chu-sm); margin: var(--k-1) 0; }
.bl-daTraLoi { font-size: var(--chu-sm); color: var(--ok-text); margin-top: var(--k-1); }
.pill {
  /* Co chu / dem / ban kinh DA GO — lay tu khuon nhan chung o cuoi tep.
   * `.78em` la 11px, mot bac KHONG co trong thang `--chu-*` cua he. */
  background: var(--muted-bg);
}
.pill.y-sap-mua { background: var(--warn-nen); }
.pill.y-khieu-nai { background: var(--bad-nen); }
.canh-bao {
  /* `.85em` = 12px, trung `--chu-xs` — nhung viet bang `em` thi no doi theo
   * co chu cua khoi cha, tuc cung mot canh bao ra hai co o hai cho. */
  font-size: var(--chu-xs); padding: var(--k-2);
  background: var(--warn-nen); border-left: 3px solid var(--warn-vien);
}
/* `.muted` (4.5:1+ tren nen trang) tut con 4.24:1 tren nen `--warn-nen` cua
 * chinh khoi nay — doi sang `--warn-text`, mau da chon rieng cho nen canh
 * bao (xem `.tuanthu.canh-bao .nhan`, cung mot le). */
.canh-bao .muted { color: var(--warn-text); }
.binhluan .bl.cho { opacity: .75; border-style: dashed; }

/* ---------- cau tra loi soan san: MOT DONG mot cau ----------
 *
 * The ba tang (chip / chu / hai nut) hop cho buong binh luan dang chay, o do
 * moi binh luan la mot viec phai xu ly. O man soan san thi khong: bon cau ngan
 * chiem 520px cao va bo trong ~900px be ngang moi dong. Doc luot "da co cau
 * cho y dinh nao chua" la doc theo COT, nen xep thanh hang.
 */
/* `.binhluan .bl` la (0,2,0); mot lop `.ctl-hang` la (0,1,0) va THUA — padding
 * cu .6/.8rem van thang. Do duoc: computed van ra 9.6px/12.8px. */
/*
 * CHOT BE RONG DANH SACH, khong de hang keo het man.
 *
 * Cau tra loi soan san dai mot dong (toi da 150 ky tu). Tren khung 1.330px thi
 * chu ket thuc o ~700px con o dem "64/150" bi cot `auto` day ra tan mep phai —
 * o giua la 700px trong. Cot van la cot (doc luot theo cot van dung, do la ly
 * do ban truoc bo the ba tang), chi la khong dai qua muc mot cau can.
 */
#ctl-list { max-width: 62rem; }
/*
 * BANG SAN PHAM: chot be rong.
 *
 * Sau cot tren mot khung 1.330px thi cot "Ten" duoc ~850px cho nhung cai ten
 * dai ~400px — nua o trong, tren MOI dong, 200 dong. Chot lai thi cac cot ve
 * dung ty le voi noi dung, va mat khong phai luot ngang qua mot vung trang de
 * doi chieu ten voi gia.
 */
#sp-table { max-width: 84rem; }
/*
 * BANG VIDEO va BANG KICH BAN: cung mot benh, cung mot thuoc.
 *
 * Tren khung 1.330px, ca hai deu de mot dai trang ~330px giua cot chu cuoi va
 * cot nut — tren MOI dong. Chot be rong thi cac cot ve dung ty le voi noi dung
 * va nut khong con troi mot minh o mep phai.
 */
.v-bang { max-width: 88rem; }
.kb-bang { max-width: 82rem; }
/*
 * BANG MA TIEN ICH: DOI TU max-width SANG width:100% + cot ty le.
 *
 * DO THAT 25/08/2026: `max-width: 72rem` gan dung bang do rong tu nhien cua
 * bang (~1151px, do tren khung the 1.601px) — nen no khong cat cot nao ca, ma
 * de lai 449px trang HOAN TOAN ben ngoai bang, giua bang va mep phai the. Chu
 * shop bao "trong ben phai" ngay 24/08/2026.
 *
 * KHONG duoc bo max-width ma khong dat lai ty le cot: do CHINH LA ly do
 * max-width ton tai tu dau (xem chu thich ngay tren — thieu no thi mot cot
 * `auto` nuot het phan trang, day nut ra mot minh mep phai). Giu nguyen ty le
 * tu nhien da do (Ten 30% / Shop 17% / Lan cuoi goi 19% / Dia chi 19% / nut
 * 15%) nhung cho no LAP DAY the thay vi dung lai giua chung.
 */
#ma-table { width: 100%; }
#ma-table th:nth-child(1) { width: 30%; }
#ma-table th:nth-child(2) { width: 17%; }
#ma-table th:nth-child(3) { width: 19%; }
#ma-table th:nth-child(4) { width: 19%; }
#ma-table th:last-child { width: 15%; }
/* Bang thanh vien: bon cot, cot cuoi la nut Xoa — het thay ~990px trong mot
   the rong 1.330px. */
#member-table { max-width: 62rem; }
.binhluan .bl.ctl-hang {
  /* 8.5rem tung du cho nhan ngan, nhung "Bảo hành · đổi trả" / "Rác — không trả
     lời" (kem bieu tuong) dai hon the — chu bi ep xuong dong trong chinh cai
     pill. 11rem la du cho nhan dai nhat, va pill khong xuong dong nua. */
  display: grid; align-items: center; gap: var(--k-1) var(--k-3);
  grid-template-columns: 11rem minmax(0, 1fr) auto auto;
  padding: var(--k-1) var(--k-2);
}
.ctl-hang .pill { justify-self: start; white-space: nowrap; }
.ctl-chu { overflow-wrap: anywhere; }
.ctl-dem { font-size: var(--chu-xs); white-space: nowrap; }
.ctl-nut { display: flex; gap: var(--k-1); }
/* Hep thi nut xuong dong rieng, chu KHONG bi ep con mot chu mot dong. */
@media (max-width: 720px) {
  .binhluan .bl.ctl-hang { grid-template-columns: auto minmax(0, 1fr) auto; }
  .ctl-nut { grid-column: 1 / -1; justify-content: flex-end; }
}
/* ---------- the san pham dang ghim ----------
 * Truoc day o nay chi co chu "Chua ghim gi." va mot nut. Ghim sai mon hay ghim
 * mon het hang la mat don thang, nen cai phai bay ra la: anh, gia, gia goc,
 * hoa hong, TON KHO, va link mo trang san pham.
 */
.ghim-hien { margin: var(--k-2) 0; }
.ghim-the { display: flex; gap: var(--k-3); align-items: flex-start;
  padding: var(--k-3) var(--k-3); border-radius: var(--radius-md); background: var(--muted-bg); }
.ghim-the img { width: 56px; height: 56px; object-fit: cover; border-radius: var(--radius-sm);
  flex: none; }
.ghim-trong { width: 56px; height: 56px; border-radius: var(--radius-sm); flex: none;
  display: grid; place-items: center; font-size: var(--chu-2xl); opacity: .45;
  background: var(--panel-3); }
.ghim-chu { min-width: 0; display: flex; flex-direction: column; gap: 0; }
/* Cho ten XUONG DONG thay vi cat. Cat o cho con thua 130px roi noi lai nguyen
 * van cach do 100px o nhan nut la vo ly nhin thay duoc. */
.ghim-chu > b { overflow-wrap: anywhere; line-height: 1.25; }
.ghim-nhan + .ghim-chu, .ghim-the.goi-y .ghim-chu { padding-right: var(--k-1); }
.ghim-gia b { font-size: var(--chu-base); color: var(--accent-text); }
.ghim-gia s { font-size: var(--chu-sm); }
.ghim-link { font-size: var(--chu-xs); color: var(--tin-text); text-decoration: none;
  margin-top: var(--k-1); }
.ghim-link:hover { text-decoration: underline; }
/* Goi y (mon cua video dang phat, CHUA ghim): vien dut de khong nham voi da ghim. */
.ghim-the.goi-y { background: none; border: 1px dashed var(--line); position: relative; }
.ghim-nhan { margin-left: auto; flex: none; font-size: var(--chu-xs); font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; color: var(--muted);
  white-space: nowrap; }

/* Viec can lam hien ngay tren dong tom tat quy dinh — de gap lai van doc duoc. */
.tt-lam-gon { font-size: var(--chu-sm); color: var(--warn-text); min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
details[open] > summary .tt-lam-gon { display: none; }
.sl-tiles { grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); margin: var(--k-2) 0; }
/* Duong don hang: khoa be rong o muc doc duoc, va co truc doc ghi so. Keo
 * ngang het 1.450px thi 0->39 don vo thanh mot vet gan nhu thang. */
.bieu-do { margin: var(--k-2) 0; color: var(--accent); max-width: 760px; }
.bd-dau { font-size: var(--chu-xs); margin-bottom: var(--k-1); }
.bd-dau b { color: var(--text); }
.bd-khung { display: flex; gap: var(--k-2); align-items: stretch; }
.bd-o { position: relative; flex: 1; min-width: 0; height: 120px; }
.bieu-do svg { width: 100%; height: 120px; display: block; position: relative; }
.bieu-do-truc { display: flex; justify-content: space-between; font-size: var(--chu-xs);
  padding-top: var(--k-1); }
.upload-list { list-style: none; padding: 0; margin: var(--k-2) 0 0; font-size: var(--chu-sm); }
.upload-list li { display: flex; gap: var(--k-2); justify-content: space-between; padding: 2px 0; }
.upload-list .up-ten { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.upload-list .up-tt.ok { color: var(--ok-text); }
.upload-list .up-tt.bad { color: var(--bad-text); }
.hang-doi { font-size: var(--chu-xs); display: block; margin-top: var(--k-1); }

/* ---------- dau bang phien: trang thai + nut chinh luon nhin thay ---------- */

/* ---------- khoi "dang phat" ---------- */
.live { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3) var(--k-4); }
/*
 * Khoi "dang phat": KHUNG HINH ben trai, chu ben phai, ke tiep ngoai cung.
 *
 * Ban cham doc lap ghi day la ly do thu nhat khien chu shop chon doi thu:
 * "Relive co khuon mat dang len song, ta co mot thanh tien trinh mau cam".
 * Anh bia video von da co — hang doi ngay duoi dang hien no o 44px — nen day
 * la cho chua lam chu khong phai cho khong lam duoc.
 */
/*
 * Chieu cao dat truoc, be rong tu suy ra.
 *
 * Video Shopee la DOC. Dat be rong truoc (150px) thi khung cao 267px, va ca
 * dai bi keo theo — chu o cot giua troi lo lung giua hai khoang trong. Dat
 * chieu cao truoc thi dai luon vua, con khung rong bao nhieu la viec cua ty le.
 */
/* Buong lai: khung xem truoc + dien bien + so lieu | luoi bam nhanh. */
/*
 * BA cot: (xem truoc + dien bien + so lieu) | HANG DOI | bam nhanh.
 *
 * Truoc day hang doi nam trong `.dk-lam` BEN DUOI buong lai, nen no bat dau o
 * y=492 tren mot khung cao 799px — thu phai thao tac nhieu nhat lai la thu
 * phai cuon xuong moi cham duoc. Va cot giua cua buong lai rong 850px chi de
 * dung vai dong chu, trong ra mot mang.
 *
 * Dua hang doi len lam cot giua thi giai quyet ca hai cung luc: lap day cho
 * trong, va keo viec thao tac len tren nep gap.
 */
/* Cot trai KHONG duoc dat co dinh 20rem: no chua ca khung xem truoc, dien
 * bien, danh sach binh luan VA dai so lieu. Bop vao 320px thi "Số liệu Shopee"
 * vo doc thanh hai dong va dai KPI vo thanh mot cot chu — do duoc tren anh
 * chup. Cho no mot phan chia deu voi hang doi. */
/*
 * BUONG LAI LA MOT DAN KHOI TU XEP, KHONG PHAI BA COT CUNG.
 *
 * Do that tren man 1920px cua chu shop: ba cot `580 / 667 / 304`. Cot trai gom
 * bon thu (xem truoc, binh luan, so lieu, san pham ghim) nen no dai gap ba hai
 * cot kia — ket qua la mot vung TRANG 836x430px o nua phai man hinh, ngay giua
 * ban dieu khien. Va cung luc do khoi so lieu bi ep con 187px nen nam con so
 * xep DOC thanh nam dong.
 *
 * Nay moi khoi la mot the anh em, tu chon cho theo be rong con lai:
 *   xem truoc + dien bien   26rem
 *   hang doi video          28rem  (uu tien gian: `flex-grow: 2`)
 *   dich day + bam nhanh    17rem
 *   binh luan nguoi xem     22rem
 *   so lieu ban hang        18rem
 *   san pham dang ghim      20rem
 * Man rong thi ba khoi mot hang va khong con cho trong; man hep thi chung tu
 * xuong dong.
 */
.buong-lai { display: flex; flex-wrap: wrap; gap: var(--k-4); align-items: flex-start; }
.buong-lai > *, .buong-trai > * { min-width: 0; }
/* Luat flex o tren DA BI THAY — xem khoi "BUONG LAI LA MOT LUOI" o cuoi tep. */
/* `display: contents` — bon khoi ben trong thanh the anh em cua buong lai,
   khong phai mot cot don doc. Khong phai sua mot dong HTML nao. */
.buong-trai { display: contents; }

/* Hang doi trong buong lai: bo vien va nen cua `details` de no khong trong nhu
 * mot hop long trong mot hop; chi giu mot vach ngan hai ben. */
.buong-hd { background: none; border: 0; border-radius: 0;
  padding: 0; min-width: 0; display: flex; flex-direction: column; }
.buong-hd > summary { flex: none; }
.buong-hd #d-queue { flex: 1; overflow-y: auto; max-height: 16rem; margin-top: var(--k-2); }
/*
 * VACH NGAN HAI BEN DA BO.
 *
 * Voi bo cuc flex-wrap, "khoi nay nam giua mot hang" khong con la mot dieu
 * kien theo be rong man hinh — no phu thuoc so khoi lot vao hang do. Mot vach
 * doc treo lo lung o dau hang trong hon la khong co vach nao. Media query cu
 * (`max-width: 1400px`) tat vach theo be rong man, va voi bo cuc moi thi dieu
 * kien do khong con y nghia gi.
 */
/*
 * Khung xem truoc nam CANH phan con lai, khong phai o TREN no.
 *
 * Xep doc thi bang cao 573px: 338px cua khung cong nguyen chieu cao cua binh
 * luan va so lieu — cac khoi lam viec bi day het xuong duoi nep gap. Xep ngang
 * thi ba thu do dung dung 338px ma khung dang chiem, va khong ton them dong nao.
 *
 * `display: contents` tren .dangphat de hai con cua no (khung + dien bien)
 * thanh o luoi truc tiep, khong phai sua ham ve.
 */
/* Khung xem truoc va dien bien nam CANH nhau trong cung mot khoi. */
.dangphat { display: flex; gap: var(--k-4); align-items: flex-start;
  flex: 2 1 26rem; max-width: 42rem; }
.dangphat > .dp-xem { flex: none; }
.dangphat > .dp-than { flex: 1 1 auto; min-width: 0; }
/*
 * LUONG BINH LUAN AN CA HAI COT.
 *
 * Luat nay da duoc viet mot lan roi bi CHINH NO huy ba dong sau: nhom
 * `grid-column: 2` ben duoi tung liet ke ca `.buong-bl`, cung do dac hieu va
 * dung sau, nen no thang. Ket qua do duoc: luong binh luan rong 265px trong
 * mot cot 431px, va vung 150x224px duoi khung xem truoc bo trong hoan toan —
 * dung thu chu shop nhin nhieu nhat ca buoi live thi bi ep hep nhat.
 *
 * Dai so lieu thi NGUOC LAI: no la mot hang nam con so, dat canh nua duoi cua
 * khung xem truoc la vua — vua lap cho trong do, vua khong day binh luan xuong.
 */
/*
 * 26rem va `flex-grow: 2` — do tren PRODUCTION voi hang doi 10 video.
 *
 * Voi 22rem no la khoi thu tu tren hang dau va chi nhan phan thua: rong 310px,
 * nhan "chi cai chua tra loi" vo hai dong. Nay no xuong hang hai va duoc 640px.
 */
.buong-lai .buong-bl { flex: 2 1 26rem; max-width: 40rem; }
/*
 * SAN PHAM DANG GHIM chuyen tu ray nut ben phai sang cot trai.
 *
 * O ray phai no lam cot do cao ~700px trong khi hai cot kia dung o ~300px —
 * mot vung trong bang nua man hinh. Va cho dung cua no la canh so lieu ban
 * hang: ca hai deu tra loi "nguoi xem dang nhin thay gi va mua duoc gi".
 */
.buong-lai .bn-ghim { flex: 1 1 20rem; max-width: 34rem; }
.buong-lai .kpi { flex: 1 1 18rem; max-width: 30rem; }
/* 32rem: o 28rem thi cot ten video con ~120px va moi dong hien "Mau 034 · …"
   — dung cai duoi ten la thu phan biet muoi video voi nhau. */
.buong-lai > .buong-hd { flex: 2 1 32rem; max-width: 46rem; }
.buong-lai > .buong-nut { flex: 1 1 17rem; max-width: 24rem; }
/*
 * THU TU DOC, khong phai thu tu viet ra trong HTML.
 *
 * `display: contents` lam bon khoi cua buong trai thanh anh em, nhung thu tu
 * cua chung van la thu tu trong tep — nen "Hang doi video" va "Bam nhanh" tut
 * xuong cuoi, duoi ca so lieu va san pham ghim. Do la hai khoi nguoi truc phien
 * dung NHIEU NHAT.
 *
 * Xep lai theo tan suat nhin, khong doi mot dong HTML:
 *   1 dang phat   2 hang doi   3 bam nhanh
 *   4 binh luan   5 san pham ghim   6 so lieu
 */
/* Dau `>` KHONG xuyen qua `display: contents`: bon khoi duoi day co cha la
   `.buong-trai` trong cay DOM, du chung la the anh em trong cay HOP. Viet
   `.buong-lai > .kpi` thi luat khong bao gio khop — da mac dung mot lan o
   chinh doan nay. */
.buong-lai .dangphat  { order: 1; }
.buong-lai > .buong-hd  { order: 2; }
.buong-lai > .buong-nut { order: 3; }
.buong-lai .buong-bl  { order: 4; }
.buong-lai .bn-ghim   { order: 5; }
.buong-lai .kpi       { order: 6; }

/* Luong binh luan trong buong lai: CUON RIENG, khong keo dai ca ban dieu khien.
 * `flex: 1` o day lam buong lai cao 629px va day het cac khoi lam viec xuong
 * duoi nep gap — do duoc. Nay no cao theo noi dung, toi da 15rem roi cuon. */
.buong-bl { flex: none; display: flex; flex-direction: column; gap: var(--k-2); }
.bbl-dau { display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap; }
.bbl-tu { display: flex; align-items: center; gap: var(--k-1); margin: 0;
  font-size: var(--chu-xs); color: var(--muted); white-space: nowrap; }
.bbl-tu input { width: auto; margin: 0; }
.buong-bl .binhluan { overflow-y: auto; max-height: 13rem; }
/* Trong buong lai thi dai so lieu khong con la mot the rieng — bo vien va nen,
 * chi giu mot vach ngan. */
/* Ban "bo vien, chi giu mot vach ngan" DA GO 26/08/2026: tu nay sau khoi cua
 * buong lai deu la THE THAT — xem khoi "BUONG LAI LA MOT LUOI" o cuoi tep. Mot
 * khoi khong vien canh nam khoi co vien la dung cai chu shop goi la "lac que". */
.buong-lai .kpi.gon-mot-dong { padding: var(--k-4); }
/* Nam con so nam NGANG khi con cho, xuong dong khi het — khong phai mot cot
   doc nam dong nhu khi khoi nay bi ep con 187px. */
.kpi { flex-direction: column; align-items: stretch; }
.kpi-o { gap: var(--k-2) var(--k-6); }
.kpi-ben { justify-content: flex-end; }

/*
 * DAI KIEM CHUNG — nam DUOI DAY khung, tren nen toi dan.
 *
 * Cho nay la cho duy nhat dat duoc: goc tren trai la huy hieu "● LIVE", goc
 * tren phai de trong cho nhan "dang ghim", va giua khung la dai san pham. Day
 * khung con lai, va do cung la cho mat di xuong sau khi doc xong anh.
 *
 * Nen toi dan chu khong mot mang mau dac: anh bia co the sang hay toi tuy
 * video, va chu trang tren nen sang thi khong doc duoc. Chuyen dan tu trong
 * suot xuong den giu chu doc duoc tren MOI anh.
 */
.dp-kiem { position: absolute; left: 0; right: 0; bottom: 0;
  display: flex; gap: var(--k-1); padding: var(--k-4) var(--k-1) var(--k-1);
  background: linear-gradient(to top, rgba(0,0,0,.82), rgba(0,0,0,0)); }
.dp-kiem a, .dp-kiem button { flex: 1 1 0; min-width: 0; font-size: var(--chu-xs);
  font-weight: 700; line-height: 1; text-align: center; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; padding: var(--k-1) var(--k-1);
  border-radius: var(--radius-sm); border: 1px solid rgba(255,255,255,.35);
  background: rgba(0,0,0,.45); color: #fff; text-decoration: none;
  cursor: pointer; }
/* Nut chinh SANG HON: no la duong an toan, va la duong nen bam. Duong bang
   dieu khien co the da tien ich ra khoi phien nen no phai nhat hon. */
.dp-kiem .dp-kiem-chinh { background: rgba(255,255,255,.92); color: #111;
  border-color: rgba(255,255,255,.92); }
.dp-kiem a:hover, .dp-kiem button:hover { border-color: #fff; }
.dp-kiem.thieu { justify-content: center; color: rgba(255,255,255,.75);
  font-size: var(--chu-xs); padding: var(--k-4) var(--k-1) var(--k-1); }

/*
 * NHAN "ANH BIA" — khung nay KHONG phai hinh dang len song.
 *
 * No bay anh bia cua tep video, va khi anh do tinh co la khung den (video mo
 * dau bang canh toi la chuyen thuong) thi chu shop liec vao thay o den va
 * tuong live da chet. Mot o den co nhan thi khong lam ai hoang mang; cung o den
 * do trong mot khung gia lam man hinh live thi co.
 */
/*
 * DUOI huy hieu LIVE, khong phai goc phai — goc phai da co nhan "dang ghim",
 * va hai nhan chong len nhau thi ca hai deu khong doc duoc.
 */
.dp-xem::after { content: 'ảnh bìa video'; position: absolute; top: var(--k-6);
  left: var(--k-1); font-size: var(--chu-xs); font-weight: 600; letter-spacing: .02em;
  color: rgba(255,255,255,.8); background: rgba(0,0,0,.55);
  padding: 0 var(--k-1); border-radius: var(--radius-sm); pointer-events: none; }
/* Chua phat thi huy hieu la `.dp-cho`, cung o goc trai tren — nhan van nam duoi
   no, nhung doi chu: luc do khung khong gia lam man hinh live nua. */
.dp-xem.cho::after { content: 'ảnh bìa video đầu hàng đợi'; }

/* Chua phat: khung xem truoc van bay video dau hang doi, mo di. */
.dp-xem.cho > img { opacity: .45; filter: grayscale(.5); }
.dp-cho { position: absolute; top: var(--k-1); left: var(--k-1); font-size: var(--chu-xs);
  font-weight: 700; letter-spacing: .04em; color: #fff; white-space: nowrap;
  background: rgba(0,0,0,.6); padding: 0 var(--k-1); border-radius: var(--radius-sm); }


/*
 * 9:16 va DU TO.
 *
 * Video Shopee la doc. Khung 168px cao cho ra be rong 95px — mot con tem, va
 * ba vong cham lien deu goi dung no la con tem: khong thay duoc hinh dung hay
 * chay, khong thay chu overlay co de len mat khong. Nay dat BE RONG 190px,
 * cao tu suy ra ~338px, va dai san pham de len goc duoi.
 */
.dp-xem { position: relative; width: 150px; aspect-ratio: 9/16;
  border-radius: var(--radius-lg); overflow: hidden; background: #000;
  display: grid; place-items: center; }

/* Dai san pham de len khung — dung cho doi thu dat no. */
/* `align-self: end` la BAT BUOC, khong phai trang tri: `.dp-xem` dung
 * `place-items: center`, va thuoc tinh do keo ca o dat tuyet doi nay cao het
 * khung (do duoc: 180x308 thay vi 180x40) — dai san pham phu kin mat nguoi
 * dan, dung cai no sinh ra de khoi che. */
.dp-sp { position: absolute; left: var(--k-1); right: var(--k-1); bottom: var(--k-1);
  align-self: end; justify-self: stretch;
  display: flex; gap: var(--k-2); align-items: center; padding: var(--k-2) var(--k-2);
  border-radius: var(--radius-md); background: rgba(255,255,255,.94); color: #171a21;
  box-shadow: 0 2px 10px rgba(0,0,0,.35); }
.dp-sp.ghim { box-shadow: 0 0 0 2px var(--accent), 0 2px 10px rgba(0,0,0,.35); }
.dp-sp img { width: 30px; height: 30px; object-fit: cover; border-radius: var(--radius-sm); flex: none; }
.dp-sp-hop { width: 30px; height: 30px; display: grid; place-items: center;
  border-radius: var(--radius-sm); background: #e9edf3; font-size: var(--chu-base); flex: none; }
.dp-sp-chu { min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.dp-sp-chu > b { font-size: var(--chu-xs); overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.dp-sp-chu > span { font-size: var(--chu-xs); }
.dp-sp-chu > span > b { color: #d0021b; font-size: var(--chu-sm); }
/* Gia goc gach: 9px trong khung 190px la khong doc duoc. Cho no bang chu
 * thuong va bo mau xam nhat di. */
.dp-sp-chu s { color: #4a5160; margin-left: var(--k-1); font-size: var(--chu-xs); }

/* Chua ghim: mot dai RONG noi su that, khong phai mot the san pham gia. */
.dp-sp.trong { display: flex; flex-direction: column; gap: var(--k-1);
  align-items: flex-start; background: rgba(20,20,25,.82); color: #fff;
  border: 1px dashed rgba(255,255,255,.5); box-shadow: none; }
.dp-sp.trong b { font-size: var(--chu-xs); line-height: 1.25; font-weight: 600; }
.dp-sp.trong button { padding: var(--k-1) var(--k-2); font-size: var(--chu-xs); }
.dp-sp-chu i { font-style: normal; color: #fff; background: #d0021b;
  padding: 0 2px; border-radius: var(--radius-sm); font-size: var(--chu-xs); font-weight: 700; }
/* Nhan "dang ghim / chua ghim" len GOC TREN PHAI cua khung, canh nhan LIVE —
 * dat ngay tren dai san pham thi no de len chinh cai dai do. */
.dp-sp-nhan { position: absolute; top: var(--k-1); right: var(--k-1); font-size: var(--chu-xs);
  font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: #fff; background: rgba(0,0,0,.6); padding: 0 var(--k-1);
  border-radius: var(--radius-sm); white-space: nowrap; }
.dp-sp-nhan.ghim { background: var(--accent); }

/* Hai cot: dien bien ben trai, ke tiep ben phai. Mot cot rong 1.000px chi de
 * dung mot thanh tien trinh la bo phi dung cai dat nhat. */
.dp-than { display: grid; gap: var(--k-2) var(--k-6); min-width: 0; align-content: space-between;
  grid-template-columns: minmax(0, 1fr) minmax(0, 20rem); }
.dp-than > .dp-chinh, .dp-than > .dp-thanh, .dp-than > .dp-duoi,
.dp-than > .dp-suc { grid-column: 1; }
.dp-than > .dp-ke { grid-column: 2; grid-row: 1 / span 3; align-self: center;
  padding-left: var(--k-6); border-left: 1px solid var(--line); }
@media (max-width: 980px) {
  .dp-than { grid-template-columns: minmax(0, 1fr); }
  .dp-than > .dp-ke { grid-column: 1; grid-row: auto; padding-left: 0;
    border-left: 0; }
}

/* Suc khoe luong: toc do, fps, kbps, KHUNG ROI. */
.dp-suc { display: flex; gap: var(--k-5); flex-wrap: wrap; margin-top: var(--k-1);
  padding-top: var(--k-2); border-top: 1px solid var(--line);
  font-size: var(--chu-xs); color: var(--muted); font-variant-numeric: tabular-nums; }
.dp-suc b { color: var(--text); font-size: var(--chu-sm); }
.dp-suc .xau, .dp-suc .xau b { color: var(--bad-text); }

/* Luoi bam nhanh 3x3 — chin viec, luon nhin thay. */
/* `min-width: 0` la BAT BUOC tren mot o luoi.
 * Khong co no thi o khong co lai duoc duoi kich thuoc noi dung, va the "San
 * pham dang ghim" tran ra ngoai mep phai 49px — chu bi cat, nut bam mat mot
 * nua. Do duoc bang phep quet tran tren chinh ngan phien. */
/* Vach doc ben trai DA GO cung dot: khoi nay la mot the, va mot the co vien
 * bon canh thi khong can them mot vach nua. */
.buong-nut { display: flex; flex-direction: column; gap: var(--k-2); min-width: 0; }
.buong-nut > * { min-width: 0; }
.bn-dau { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); }
/*
 * BANG SO KY THUAT — hai cot, nhan trai, so phai.
 *
 * Doc theo cot phai la doc duoc ca cot so; nhan chi de tra cuu. Do la ly do so
 * dung `tabular-nums`: chung phai thang hang de mat bat duoc cai nao doi.
 */
/*
 * DAI NHAT KY duoi buong lai: chay het be ngang, cao co dinh, tu cuon.
 *
 * Cao co dinh la co y: no phai lap dung khoang trong ma ba cot ben tren de
 * lai, va khong duoc dai ra lam day Hen gio xuong duoi nep gap.
 */
.log-band { margin-top: var(--k-4); background: none; border: 0; border-top: 1px solid var(--line);
  border-radius: 0; padding: var(--k-3) 0 0; }
.log-band > summary { font-size: var(--chu-xs); text-transform: uppercase;
  letter-spacing: .09em; color: var(--muted); }
.log-band #d-log { max-height: 11rem; overflow-y: auto; margin-top: var(--k-2); }

.vitals { display: grid; grid-template-columns: auto 1fr; gap: 0 var(--k-2);
  margin: 0 0 var(--k-4); font-size: var(--chu-xs); }
.vitals dt { color: var(--muted); }
.vitals dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
.vitals dd.tot { color: var(--ok-text); }
.vitals dd.xau { color: var(--bad-text); font-weight: 700; }

/*
 * BAM NHANH NAM NGANG, khong xep cot.
 *
 * ── DO THAT 19/08/2026 ────────────────────────────────────────────────────
 *
 * Moi nut la mot cot doc (bieu tuong tren, chu duoi, padding .5rem) nen cao
 * 47px; chin nut thanh ba hang, 150px chi de chua chin dong chu ngan. Cong
 * voi khoi "Dich day" va thanh nhac nen, ca cot phai day len va moi thu khac
 * bi day xuong duoi man hinh.
 *
 * Nam ngang thi mot nut cao ~28px va ba hang con ~90px. Chu van doc duoc vi
 * no nam CANH bieu tuong chu khong duoi.
 */
.nut-nhanh { display: grid; gap: var(--k-1); grid-template-columns: repeat(3, 1fr); }
.nut-nhanh .nn { display: flex; flex-direction: row; align-items: center;
  justify-content: center; gap: var(--k-1); padding: var(--k-1) var(--k-1); line-height: 1; }
/* Hai nut cuoi DOI TRANG THAI BEN SHOPEE — tach khoi bay nut chi doi thu tren
 * may minh bang mot duong ke, va cai ket thuc buoi live thi vien do. */
.nut-nhanh .nn.ben-ngoai { border-top: 2px solid var(--line); }
.nut-nhanh .nn.nguy { border-color: var(--bad-vien); color: var(--bad-text); }
.nut-nhanh .nn.nguy:not(:disabled):hover { background: var(--bad-nen); }
/* Khuon cua `.nn-bieu` gop het xuong cuoi tep (mot ban duy nhat) — o do no
 * mang hinh SVG chu khong con la mot ky tu, nen `font-size` khong con nghia. */
/* Chu KHONG xuong dong: mot nut hai dong lam ca hang cao gap doi, va hang do
 * keo theo hai nut ben canh du chu cua chung ngan. */
.nn-ten { font-size: var(--chu-xs); font-weight: 500; text-align: left;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bn-am { display: grid; gap: var(--k-1); margin-top: var(--k-1); }
.bn-truot { display: flex; align-items: center; gap: var(--k-2); margin: 0;
  font-size: var(--chu-xs); color: var(--text); }
.bn-truot input[type="range"] { flex: 1; margin: 0; padding: 0; width: auto; }
.bn-am select { margin: 0; font-size: var(--chu-sm); padding-block: var(--k-1); padding-left: var(--k-2); }
/* `> img`, khong phai `img`: khong gioi han con TRUC TIEP thi quy tac nay
 * bat luon anh san pham trong dai de len khung, keo no tu 30x30 thanh 166x295
 * — dai phu kin mat nguoi dan, dung cai no sinh ra de khoi che. */
.dp-xem > img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dp-khong { font-size: var(--chu-2xl); opacity: .4; }
.dp-live { position: absolute; top: var(--k-1); left: var(--k-1); font-size: var(--chu-xs);
  font-weight: 700; letter-spacing: .04em; color: #fff; white-space: nowrap;
  background: rgba(200,30,40,.92); padding: 0 var(--k-1); border-radius: var(--radius-sm); }
.dp-than { display: flex; flex-direction: column; gap: var(--k-2); min-width: 0; }
.dp-nhan-phu { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); }
.dp-ke-the { display: flex; gap: var(--k-2); align-items: center; margin-top: var(--k-1);
  min-width: 0; }
.dp-ke-the img { width: 56px; height: 32px; object-fit: cover; border-radius: var(--radius-sm);
  flex: none; }
.dp-ke-the > div { min-width: 0; display: flex; flex-direction: column; }
.dp-ke-the b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dp-chinh { display: flex; align-items: baseline; gap: var(--k-2); flex-wrap: wrap; }
.dp-nhan { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--ok-text); }
.dp-ten { font-size: var(--chu-base); letter-spacing: -.01em; }
.dp-thanh { height: 6px; border-radius: var(--radius-sm); background: var(--panel-3); overflow: hidden; }
.dp-thanh i { display: block; height: 100%; background: var(--accent); transition: width .8s linear; }
.dp-duoi { display: flex; gap: var(--k-5); align-items: baseline; flex-wrap: wrap;
  font-size: var(--chu-sm); font-variant-numeric: tabular-nums; }
.dp-ke { min-width: 0; }

/* ---------- canh bao tuan thu: gap lai ----------
 * Ba canh bao trai het chiem 300px dau man hinh va day moi thu dieu khien
 * xuong duoi mep. Nguoi dieu hanh doc chung dung mot lan roi thoi — nen mac
 * dinh la MOT DONG. Co muc "bat buoc sua" thi mo san: do la thu co the lam
 * khoa gian hang.
 */
.tt-gop { grid-column: 1 / -1; }
.tt-gop > summary { gap: var(--k-2); }
.tt-cham { width: 8px; height: 8px; border-radius: 50%; background: var(--warn);
  flex: none; }
.tt-cham.nang { background: var(--bad); }
.tt-nang { color: var(--bad-text); }
.tt-than { margin-top: var(--k-3); display: grid; gap: var(--k-2);
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.tt-than .tuanthu { margin: 0; }

/* ---------- chu giai thich: co nhung khong chen cho ----------
 * Moi khoi co mot doan giai thich dai 2-3 dong. Cong lai chung day cac nut
 * dieu khien xuong duoi mep man hinh. Nguoi dung moi can chung; nguoi da quen
 * thi khong. Nen: tat duoc mot lan cho ca trang.
 */
.hint { font-size: var(--chu-sm); color: var(--muted); line-height: 1.5; margin: var(--k-1) 0 var(--k-2); }
body.gon .hint { display: none; }
body.gon .canh-bao { font-size: var(--chu-sm); }
.nut-gon { font-size: var(--chu-xs); }
.khu-nguy-hiem { display: flex; align-items: center; gap: var(--k-3); padding: var(--k-3) var(--k-4);
  border: 1px dashed var(--bad-vien); border-radius: var(--radius-lg); }
.khu-nguy-hiem .muted { font-size: var(--chu-sm); }

/* ---------- tong quan: hai cot ----------
 * Nhat ky hoat dong truoc day nam GIUA man hinh va chiem nua chieu cao, trong
 * khi no la thu it phai hanh dong nhat. Day sang cot phu; danh sach phien —
 * thu nguoi dung toi de lam — duoc ca chieu rong con lai.
 */
.hai-cot { display: grid; gap: var(--k-6); grid-template-columns: minmax(0, 1fr) 340px;
  align-items: start; }
@media (max-width: 1180px) { .hai-cot { grid-template-columns: minmax(0, 1fr); } }
.cot-phu > div { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--r); padding: var(--k-4) var(--k-4); }
.cot-phu :is(h1, h2, h3, h4) { margin: 0 0 var(--k-1); font-size: var(--chu-base); }
.cot-phu .log { max-height: 62vh; overflow-y: auto; }

/* O so lieu: them dong phu, va mau theo y nghia. */
.tile em { font-size: var(--chu-xs); color: var(--muted); font-style: normal; margin-top: var(--k-1); }
.tile.tien b { color: var(--ok-text); }
.tile.mo b { color: var(--muted); }

/* ---------- nhat ky trong cot phu hep ----------
 * Cot 340px lam dong nhat ky (thoi gian · nhan · viec · ten phien) vo thanh
 * bon cot hep, chu xuong dong tung chu va sinh thanh cuon ngang. Trong cot hep
 * thi XEP DOC: gio o tren, noi dung o duoi.
 */
.cot-phu .log li { display: block; padding: var(--k-2) 0; }
.cot-phu .log li time { display: block; font-size: var(--chu-xs); margin-bottom: 0; }
.cot-phu .log li .nhan-loai { margin-right: var(--k-1); }
.cot-phu .log { max-height: 58vh; }
.cot-phu .log li a, .cot-phu .log li .ten { white-space: normal; }


/* O so lieu: bot cao, chu can doi hon. */
.tile { padding: var(--k-3) var(--k-4); }
.tile b { font-size: var(--chu-2xl); }
.tile span { font-size: var(--chu-xs); color: var(--text); opacity: .85; }

/* ---------- "Can chu y": gom viec dang can lam vao MOT cho ---------- */
#can-chu-y :is(h1, h2, h3, h4) { margin: 0 0 var(--k-2); font-size: var(--chu-base); }
/* "Can chu y": moi viec mot the vua du rong, khong phai mot dai tran ngang
   chi de dat mot cau chu ben trai. */
.cy { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap;
  gap: var(--k-2); align-items: flex-start; }
/*
 * DO THAT 24/08/2026, TU KIEM LAI SAU KHI CHU SHOP BAO "the ...  dai han ra
 * ... rong han luon" o `.stream-card` (xem chu thich o do): the mot minh khi
 * chi con MOT muc "Can chu y" thuong (khong `.cy-chi-tiet`) gian toi 42rem,
 * nhung noi dung (nhan + tieu de + mot dong mo ta) chi lap duoc hon nua be
 * rong do — phan con lai la khoang TRANG ro rang. Cung mot benh, khac cho.
 * Ha tran xuong gan flex-basis hon, giu the KHONG PHONG TO khi dung mot minh.
 *
 * SUA LAI 24/08/2026 (lan 2): 30rem (480px) VAN con rong hon muc tu nhien khi
 * du hang (do that: 407px, dung container voi `.stream-card` nen trung so) —
 * mo phong bang JS (an bot muc, chi de mot muc dung mot minh) cho thay no van
 * gian toi tran 480px, rong hon 18% so muc trong hang du. Ha xuong duoi muc tu
 * nhien, giong cach da lam voi `.stream-card`: muc dung mot minh gio DUNG o
 * tran, khong con la muc rong nhat man.
 */
.cy > .cy-muc { flex: 1 1 24rem; max-width: 25rem; }
/*
 * Do that 24/08/2026 tren man Phien phat: muc co `.cy-chi-tiet` (nhieu chip
 * ten phien) bi bo hep vao 24rem (384px) nen chip phai wrap 5-6 dong, cao
 * gap ba muc thuong ben canh — hai muc ngan xep cung hang de lai mot khoang
 * TRANG lon duoi chung. Cho muc co chi tiet chiem CA HANG: chip duoc rong
 * hon nen wrap it dong hon (cao GIAM, khong tang), va hai muc ngan con lai
 * tu xep canh nhau o hang duoi — khong can biet truoc so muc hay do dai. */
.cy > .cy-muc:has(.cy-chi-tiet) { flex-basis: 100%; max-width: 100%; }
.cy-muc { display: flex; gap: var(--k-3); align-items: flex-start; cursor: pointer;
  background: var(--panel); border: 1px solid var(--line); border-left-width: 3px;
  border-radius: var(--radius-lg); padding: var(--k-3) var(--k-3); line-height: 1.5;
  transition: border-color .14s, transform .14s; }
.cy-muc:hover { border-color: var(--accent); transform: translateY(-1px); }
.cy-muc.nang { border-left-color: var(--bad); }
.cy-muc.canh-bao { border-left-color: var(--warn); }
.cy-muc.goi-y { border-left-color: var(--tin-text); }
.cy-muc .nhan { font-size: var(--chu-xs); font-weight: 700; text-transform: uppercase;
  letter-spacing: .05em; white-space: nowrap; padding-top: var(--k-1); flex: none; }
.cy-muc.nang .nhan { color: var(--bad-text); }
.cy-muc.canh-bao .nhan { color: var(--warn-text); }
.cy-muc.goi-y .nhan { color: var(--tin-text); }
.cy-lam { display: block; font-size: var(--chu-sm); color: var(--muted); margin-top: var(--k-1); }
/* Ten tung phien (khi hon mot phien cung mac mot loi) — CHIP roi tung cai,
 * tu wrap xuong dong, khong phai mot cau dinh dau phay. The "15 phien" tung
 * dinh 11+ ten lien nhau thanh mot khoi chu khong doc noi diem dau/cuoi moi
 * ten o dau. */
.cy-chi-tiet { display: flex; flex-wrap: wrap; gap: var(--k-1); margin-top: var(--k-2); }
.cy-chi-tiet span { font-size: var(--chu-xs); background: var(--panel-2); border: 1px solid var(--line);
  border-radius: var(--radius-sm); padding: 1px var(--k-2); color: var(--text); }

/* ---------- luoi cac khoi doc lap ----------
 * Sau khoi doc lap xep MOT COT thanh mot trang cao 2.070px trong cua so 851px —
 * muon xem "suc khoe cau hinh" phai cuon qua ba khoi khong lien quan. Chung
 * khong phu thuoc nhau, nen xep luoi.
 */
/* `auto-fit` chu khong `auto-fill` — cung ly do voi `.tt-grid` o tren. */
/*
 * 420px — DA THU 320 va no HONG.
 *
 * Voi 320 thi khung 1.330px ra bon cot va ca bon the nam mot hang, nghe thi
 * dep hon. Nhung the "Shop" co mot bang bon cot (ten · san · logo · nut Luu
 * tru): o 320px thi o nhap ten shop bi bop con 40px, hien ra dung hai chu
 * "Sh". Mot hang thang hon ma khong go duoc ten shop thi khong phai la hon.
 */
.luoi-o { display: grid; gap: var(--k-4); align-items: stretch;
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); margin-top: var(--k-4); }
/*
 * STRETCH, KHONG PHAI start — chu shop dat luat 24-25/08/2026: the cung hang
 * PHAI cao bang nhau, du no khong cung noi dung.
 *
 * DO THAT 25/08/2026: "Shopee Open API" (306px) canh "Duong nao dang dung"
 * (482px, bang cuon rieng) tren man Tien ich; "Tung bo phan" (249px) canh
 * "May phat" (177px) tren man Tinh trang — ca hai deu dung `align-items:
 * start` cu, day day day. `het-hang` (mot the chiem tron hang) khong bi anh
 * huong: stretch chi co tac dung khi CO HON MOT the trong cung hang.
 *
 * The ngan hon duoc keo cao theo, roi tu can giua noi dung cua no theo chieu
 * doc (xem `justify-content: center` duoi day) thay vi ghim tren de lai
 * khoang trang o day — cung each dung cho `.tt-o` ngay hom nay.
 */
/*
 * `.o` — HE THE THU TU, va no dung o CA BAY man.
 *
 * Soat doi chieu template 25/08/2026 (do tren production) tim ra: sau khi da
 * hop nhat `.tile`/`.stream-card`/`.dp-the`, van con `.o` di mot duong rieng —
 * radius 10 (thay 14), padding 16/20 (20px khong thuoc thang chuan), va
 * KHONG CO BONG. Bay tren bay man deu lech ca ba mat.
 *
 * Nay dung chung dien mao voi ba he kia: radius 14 + bong nhe + padding 16px
 * deu bon phia (20px la nac ngoai thang template {4,6,8,12,16,24,32}).
 */
/*
 * ── NOI DUNG BAT DAU TU TREN, KHONG TROI GIUA THE ─────────────────────────
 *
 * DO THAT 26/08/2026 tren /#/cai-dat: the "Shop" cao 445px (bi keo bang the
 * "Thành viên" ben trai), noi dung chi cao ~250px. Voi `justify-content:
 * center` thi phan thua chia deu tren duoi — tieu de "Shop" tut xuong y=225
 * trong khi the bat dau o y=128. Nhin ra la mot the gan nhu trong voi mot
 * dong chu lo lung o giua.
 *
 * `card.tsx` cua template khong can giua gi ca: noi dung xep tu tren xuong,
 * phan thua nam duoi. Do cung la cach moi bang dieu hanh that hoat dong —
 * mat doc cua nguoi ta di tu tren xuong, khong tu giua ra.
 */
.luoi-o > .o, .doi-ngang > .o { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius-xl); box-shadow: var(--bong-xs);
  padding: var(--k-4); min-width: 0;
  display: flex; flex-direction: column; justify-content: flex-start; }
.luoi-o > .o > :is(h1, h2, h3, h4):first-child,
.doi-ngang > .o > :is(h1, h2, h3, h4):first-child { margin-top: 0; }
.luoi-o > .o table, .doi-ngang > .o table { width: 100%; }
.luoi-o > .o .bang-cuon, .doi-ngang > .o .bang-cuon { overflow-x: auto; }

/*
 * DOI-NGANG: hai the CANH NHAU, thoat khoi `repeat(auto-fit, ...)` cua
 * `.luoi-o`. Do that 24/08/2026: auto-fit tinh SO COT THEO NOI DUNG ca
 * khoi luoi, khong phai theo tung hang — cung mot `.luoi-o` ra 3 cot o
 * man Cai dat nhung chi 2 cot o man Tien ich (mot dong URL dai trong bang
 * ep min-content khoi do rong hon). Ghep hai the vao MOT hang `het-hang`
 * roi tu chia doi bang flex la cach DUY NHAT chac chan lap kin — khong
 * phu thuoc cach auto-fit dem cot cho ca khoi.
 */
.doi-ngang { display: flex; flex-wrap: wrap; gap: var(--k-4); align-items: stretch; }
.doi-ngang > .o { flex: 1 1 420px; }

/*
 * THE-DOI: gop hai khoi ngan thanh mot the, xep DOC, thay vi de moi the
 * ket thuc som va lo mot vung trang duoi no (xem chu thich o index.html
 * canh `.the-doi`). Gach ngang giua hai khoi lam ranh gioi, khong phai vien
 * hop long trong hop.
 */
.the-doi { display: flex; flex-direction: column; gap: var(--k-5); }
.the-doi-khoi + .the-doi-khoi { padding-top: var(--k-5); border-top: 1px solid var(--line); }
.the-doi-khoi > :is(h1, h2, h3, h4):first-child { margin-top: 0; }
.the-doi-khoi > :is(h1, h2, h3, h4):first-child { margin-top: 0; }

/* Bang trong khoi hep: cot ngan khong duoc be chu ("gui-binh-luan" vo lam ba
 * dong). Cho bang cuon ngang trong khoi thay vi be chu. */
.luoi-o .o table { table-layout: auto; }

/*
 * Bang Thanh vien: het chieu ngang, KHONG cuon ngang.
 *
 * Do duoc tren anh chup: trong mot o luoi 1/3 man hinh, bang co bon cot
 * (Nguoi · Vai tro · Shop duoc giao · Xoa) sinh thanh cuon ngang va CAT MAT
 * nua nut Xoa. Mot trang phan quyen ma cat mat nut xoa thi khong tin duoc
 * phan con lai. Bang nay dai theo chieu ngang nen cho no ca hang.
 */
.luoi-o > .o.het-hang { grid-column: 1 / -1; overflow-x: visible; }
.luoi-o > .o.het-hang table { table-layout: auto; }
#member-table td:nth-child(3) { white-space: normal; }
/*
 * Cot Xoa bam SAT noi dung no xoa, khong bi day ra mep xa nhat co the.
 *
 * Cho bang chay het 1400px thi chua duoc cat xen nhung de lai hon 400px trang
 * GIUA mot dong bang, va nut xoa cach thu no xoa nua man hinh. Cho ba cot dau
 * chiem phan cua chung, cot nut chi rong bang chinh no.
 */
#member-table { width: 100%; max-width: 58rem; }
#member-table th:first-child, #member-table td:first-child { width: 40%; }
#member-table th:nth-child(2), #member-table td:nth-child(2) { width: 18%; }
#member-table td:last-child, #member-table th:last-child { text-align: right;
  white-space: nowrap; width: 1%; }
.luoi-o .o td:first-child, .luoi-o .o th:first-child,
.luoi-o .o td:nth-child(2), .luoi-o .o time { white-space: nowrap; }
.luoi-o .o { overflow-x: auto; }

/* ---------- bang hang doi ----------
 * Danh sach tho (so, ten, thoi luong) khong tra loi duoc ba cau hoi cua nguoi
 * dieu hanh: video nao gan SAN PHAM nao, cai nao DANG PHAT, cai nay SAP TOI luc
 * may gio. Xep thanh cot de doc luot duoc.
 */
/*
 * BE RONG PHAI THEO NOI DUNG THAT, VA HANG TIEU DE PHAI THANG COT VOI HANG DU LIEU.
 *
 * Ban truoc de cot cuoi la `auto`. Moi `li` la MOT luoi rieng, nen cot `auto`
 * cua hang tieu de (rong 0 — no khong co nut) khac cot `auto` cua hang du lieu
 * (80px). Hai hang chia phan con lai theo hai cach, va tieu de KHONG nam tren
 * dung cot no dat ten. Chot be rong cot nut thi ca hai hang chia giong nhau.
 *
 * Do duoc trong buong lai (cot hang doi rong 496px), phien chua phat:
 *   ten video      40px  — "Sukem 75 phut" can 97px, cat con "Suk…"
 *   "Con bao lau"  99px  — dang hien mot dau gach
 * Cot dai nhat dang danh cho o rong nhat. Cung benh voi bang kich ban.
 *
 * Be rong moi lay tu chu DAI NHAT that su chay qua o do:
 *   "sau 11p 49s" -> 5,4rem   (3,4rem cat mat chu cuoi — rang buoc cu, van giu)
 *   "75p 04s"     -> 3,6rem
 *   "↑ ↓ ✕"       -> 5,2rem
 *   anh bia       -> 30px     (do computed, KHONG lay tu `.hd-anh img` — luat do
 *                              thua dac hieu va chua bao gio chay; xem duoi)
 */
.queue li { display: grid; align-items: center; gap: var(--k-2);
  grid-template-columns: 1.5rem 30px minmax(0,1fr) 3.6rem 5.4rem 5.2rem;
  background: var(--panel-2); border-radius: var(--radius-md); padding: var(--k-2) var(--k-2); margin-bottom: var(--k-1); }
.queue li.hd-dau, .queue li.hd-cuoi { background: none; font-size: var(--chu-xs);
  color: var(--muted); padding: var(--k-1) var(--k-2); margin-bottom: var(--k-1); }
.queue li.hd-cuoi { display: block; margin-top: var(--k-2); font-size: var(--chu-sm); }
/*
 * MOT DONG CHU trong danh sach hang doi — khong chiu grid sau cot o tren.
 *
 * Thieu luat nay thi cau thong bao bi bam ra tung o: moi tu mot dong, va nut
 * "+ Thêm" trong cau roi vao mot o giua. Do that tren san xuat 19/08/2026.
 */
.queue li.hd-trong { display: block; background: none; padding: var(--k-2) 0;
  line-height: 1.5; }
/* Vach doc ve bang `box-shadow: inset` DA GO 27/08/2026 — xem khoi "VACH MAU
 * VE BANG BONG" o cuoi tep. Nen mo van giu: do la tin hieu chu shop doc duoc,
 * va no khong phai mot vach le mot canh. */
.queue li.dang { background: var(--ok-nen); }
/*
 * HANG KE TIEP co dau rieng, mo hon hang dang phat.
 *
 * Mot hang doi 60 phut xao tron thi "cai nao sap len" khong suy ra duoc bang
 * mat — cai o ngay duoi hang dang phat KHONG phai cai ke tiep. Danh dau no la
 * cach duy nhat noi ra dieu do.
 */
/* Vach doc DA GO. Hang ke tiep VAN doc duoc — chinh no mang chu "TIẾP THEO"
 * trong o ten (xem `veHangDoi` trong app.js), va mot dong chu noi ro hon mot
 * vet mau xam ma khong ai co chu giai. */
.queue li.ke { background: var(--muted-bg); }
/*
 * KHONG khai lai be rong o day — luat nay THUA cuoc dac hieu va da chet tu lau.
 *
 * `.queue li img` (0,1,2) o tren dat 30x42 va thang `.hd-anh img` (0,1,1) bat ke
 * thu tu. Do computed trong buong lai: anh la 30x42, khong phai con so viet o
 * day. Ban truoc dong nay ghi `44px 26px`, ban nay tung ghi `40px 24px` — ca hai
 * deu chua bao gio co hieu luc, va chu thich di kem ("de 44px trong cot 40px thi
 * anh tran ra ngoai") ta mot chuyen khong xay ra.
 *
 * 30x42 la DUNG cho video doc: cat ngang 40x24 tren mot khung 9:16 cho ra mot
 * lat cat vo nghia. Nen giu nguyen, chi bo phan chet va chot cot theo so THAT.
 */
.hd-anh img { display: block; }
.queue .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hd-dang, .hd-ke { display: block; font-size: var(--chu-xs); font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; }
.hd-dang { color: var(--ok-text); }
.hd-ke { color: var(--muted); }
/* Nay `.hd-sp` nam TRONG o ten, thanh dong thu hai — khong con la mot cot. */
.hd-sp { display: block; font-size: var(--chu-xs); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
/*
 * ── HINH VE BANG `mask`, KHONG BANG `content:` ────────────────────────────
 *
 * Chu shop 26/08/2026: "nhất là nhiều chỗ dùng kiểu ::before nó nhìn rất lạc
 * quẻ, bé".
 *
 * Ca hai loi deu la hau qua cua `content: '🛒 '`:
 *
 *   "bé"       — emoji trong `content` lay co chu cua o chua no. O day chu la
 *                12px, nen cai gio hang ra 12px, canh mot bo icon 16px net 2px.
 *   "lạc quẻ"  — no la emoji MAU do he dieu hanh ve. Khong to lai duoc bang
 *                `color`, nen no giu nguyen mau tren ca nen sang lan nen toi,
 *                va no khong cung ho hinh voi bo lucide.
 *
 * `mask-image` chi lay HINH DANG cua tep SVG; mau den tu `background-color:
 * currentColor` — tuc mau chu cua chinh cho do. Co dat bang `px`, doc lap voi
 * co chu. Day la cach duy nhat cho mot hinh trong `::before` ma van theo duoc
 * ca bang mau lan thang kich thuoc.
 */
.hd-sp::before {
  content: ''; display: inline-block; vertical-align: -2px;
  width: 14px; height: 14px; margin-right: var(--k-1);
  background-color: currentColor;
  -webkit-mask: var(--ico-gio-hang) center/14px 14px no-repeat;
  mask: var(--ico-gio-hang) center/14px 14px no-repeat;
}
.queue .sap { font-variant-numeric: tabular-nums; }
/* Dau cot doi ten khi ban nhap lech: cot do dang khong tinh duoc gi ca. */
.hd-lech { font-style: normal; color: var(--warn-text); font-weight: 700; }
.hd-nut { display: flex; gap: var(--k-1); }
.hd-nut button { padding: var(--k-1) var(--k-2); }
@media (max-width: 760px) {
  .queue li { grid-template-columns: 1.5rem 40px minmax(0,1fr) auto; }
  /* `.hd-sp` khong con la con truc tiep cua `li` — no nam trong o ten. Bo `>`
   * thi luat nay khong an nua, va hang van bay du sau cot. */
  .queue li .hd-sp, .queue li > .sap, .queue li.hd-dau { display: none; }
}

/* ---------- bang suc khoe cau hinh ----------
 * Bay cot: Muc · Cach tim · Dat · Chet · Chua san sang · Tinh trang · Can lam.
 * Bop vao mot o luoi 1/3 man hinh thi ba cot cuoi bi cat — dung ba cot noi ly
 * do va viec phai lam, tuc la mat dung phan bang nay sinh ra de noi.
 */
#suc-khoe table { table-layout: fixed; width: 100%; min-width: 46rem; }
/* Dem rieng DA GO — dung bac dem chung cua `table.tsx`. */
#suc-khoe th, #suc-khoe td { white-space: normal; vertical-align: top; }
#suc-khoe th:nth-child(1), #suc-khoe td:nth-child(1) { width: 18%; }
#suc-khoe th:nth-child(2), #suc-khoe td:nth-child(2) { width: 16%; }
#suc-khoe th:nth-child(3), #suc-khoe td:nth-child(3),
#suc-khoe th:nth-child(4), #suc-khoe td:nth-child(4) { width: 6%; white-space: nowrap; }
#suc-khoe th:nth-child(5), #suc-khoe td:nth-child(5) { width: 10%; white-space: nowrap; }
#suc-khoe th:nth-child(6), #suc-khoe td:nth-child(6) { width: 14%; white-space: nowrap; }
#suc-khoe th:nth-child(7), #suc-khoe td:nth-child(7) { width: 30%; }

/* Hai nut canh nhau duoi moi viec hong. */
.hang-nut { display: flex; gap: var(--k-2); flex-wrap: wrap; }

/* ---------- thu vien video: BANG ----------
 * The doc 190x300px chua duoc bay cai mot man hinh; muoi bon video la cuon ba
 * man. Hang gon 44px thi ca thu vien nam trong mot man, va ba cau hoi that
 * ("cai nao san sang · cai nao dang bi khoa · cai nao thieu kich ban") doc
 * theo COT nhanh hon doc theo the.
 */
/*
 * Be rong cot dat CO DINH, khong tha cho trinh duyet tu chia.
 *
 * `table-layout: auto` cho cot "Thao tac" (hai nut) va cot trang thai (hai huy
 * hieu) doi het cho, con cot Ten bi bop con vai ky tu — do duoc: mot ten ngan
 * vo doc thanh 141px cao, va hang thanh 153px. Dung cai bang nay sinh ra de
 * tranh.
 */
.v-bang { table-layout: fixed; width: 100%; min-width: 58rem; }
.v-bang th.v-anh, .v-bang td.v-anh { width: 3rem; padding-right: 0; }
.v-bang th:nth-child(2) { width: auto; }
.v-bang th:nth-child(3) { width: 11rem; }
.v-bang th:nth-child(4) { width: 6.5rem; }
.v-bang th:nth-child(5) { width: 7rem; }
.v-bang th:nth-child(6) { width: 10rem; }
.v-bang th:nth-child(7) { width: 15rem; }
.v-bang .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v-bang td { vertical-align: middle; }
/* Kich thuoc DUT KHOAT, khong dung aspect-ratio: aspect-ratio 9/16 tren be
 * rong 56px cho ra cao 99px, va max-height khong ep duoc no — do duoc hang cao
 * 162px. Video doc thi cat theo chieu cao, khong keo theo ty le. */
.v-bang td .thumb { width: 34px; height: 46px; flex: none;
  border-radius: var(--radius-sm); background: var(--panel-3) center/cover no-repeat;
  display: grid; place-items: center; cursor: pointer; position: relative; }
.v-bang td { padding-top: var(--k-1); padding-bottom: var(--k-1); }
.v-bang td .thumb .ph { font-size: var(--chu-sm); opacity: .4; }
.v-bang .nm { display: block; font-weight: 500; }
.v-bang .dung-line, .v-bang .bad-line { display: block; font-size: var(--chu-xs); }
.v-bang .nums { font-variant-numeric: tabular-nums; white-space: nowrap; }
.v-bang td:nth-child(3) { white-space: nowrap; }
.v-bang td:nth-child(3) .badge + .badge { margin-left: var(--k-1); }
.v-bang .v-nut { white-space: nowrap; }
.v-bang .v-nut button + button { margin-left: var(--k-1); }
/* Hang thu vien: chi hien nut khi re chuot thi phai DI CHUOT MOI BIET co gi
 * bam duoc. Giu nut luon hien, chi lam mo di. */
.v-bang .v-nut button { opacity: .78; }
.v-bang tr:hover .v-nut button { opacity: 1; }
/*
 * `#video-grid` da tro lai la LUOI THE (xem cuoi tep).
 *
 * Cho nay truoc ghi de `display: block` — vet tich cua lan doi tu the sang
 * bang. Quen go thi quy tac ID thang quy tac lop, va luoi moi ra dung MOT cot
 * cao 1600px: dung mau "hai duong cho mot viec thi chung se lech nhau".
 */
@media (max-width: 1000px) {
  .v-bang th:nth-child(6), .v-bang td:nth-child(6),
  .v-bang th:nth-child(5), .v-bang td:nth-child(5) { display: none; }
}

/* Dau hieu bam-de-xem tren anh thu nho trong BANG.
 * Truoc day no gan vao `.vcard .thumb::after`. Doi the sang bang thi `.vcard`
 * thanh ma chet, va anh thu nho mat luon dau hieu la bam duoc — chuot bien
 * thanh ban tay nhung khong co gi noi truoc dieu do. */
.v-bang td .thumb::after { content: ''; position: absolute; inset: 0;
  background-color: #fff;
  -webkit-mask: var(--ico-phat) center/18px 18px no-repeat;
  mask: var(--ico-phat) center/18px 18px no-repeat;
  /* `filter: drop-shadow` thay cho `text-shadow`: khong con chu de do bong,
   * chi con mot hinh to bang `mask` — bong phai bam vao HINH do. */
  filter: drop-shadow(0 1px 6px rgba(0,0,0,.7));
  opacity: 0; transition: opacity .15s; }
.v-bang tr:hover .thumb::after, .v-bang .thumb:hover::after { opacity: .95; }

/* ---------- san pham dang ghim: trong cot bam nhanh ----------
 * No tung nam trong `.dk-lam` duoi buong lai, cao 513px va rong ~90%. Nay nam
 * ngay duoi nut "Ghim san pham" — cung mot viec, cung mot cho — va lap dung
 * khoang trong ~200px con lai duoi luoi chin nut.
 */
.bn-ghim { background: none; border: 0; border-radius: 0; padding: var(--k-3) 0 0;
  margin-top: var(--k-2); border-top: 1px solid var(--line); }
.bn-ghim > summary { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); }
.bn-ghim > summary::before { display: none; }
.bn-ghim, .bn-ghim * { min-width: 0; }
.bn-ghim .ghim-the { flex-wrap: wrap; }
.bn-ghim button { white-space: normal; text-align: left; }

/* ---------- kich ban tung video: BANG ----------
 * Moi video mot the co san o soan bon dong, luon bung ra: 14 video = 2.103px,
 * 60% ca trang Ban hang. Nhung cau hoi that o day la doc luot — video nao ĐÃ
 * co kich ban, cai nao chua, cai nao gan nham san pham — va ba cau do doc theo
 * cot. Soan thi moi lan chi soan mot cai.
 */
/* Cot 4 la "Boi canh" (Bac 5) — them mot cot thi MOI so nth-child duoi day
 * deu truot mot bac. Do la ly do cac be rong nay nam sat nhau: sua mot cai ma
 * quen cac cai con lai thi bang lech mot cot ma khong bao gi. */
/* Hang dau bang kich ban: con bao nhieu video chua gan, va o loc xuong dung
   nhung cai do. */
.kb-dau { display: flex; align-items: center; gap: var(--k-4); flex-wrap: wrap;
  margin-bottom: var(--k-2); font-size: var(--chu-sm); }
.kb-dau label.inline { margin: 0; }
.kb-anh img[data-kb-xem] { cursor: pointer; border-radius: var(--radius-sm); }
.kb-anh img[data-kb-xem]:hover { outline: 2px solid var(--accent); }
.kb-bang { table-layout: fixed; width: 100%; min-width: 60rem; }
.kb-bang th.kb-anh, .kb-bang td.kb-anh { width: 4.5rem; }
.kb-bang th:nth-child(3) { width: 16rem; }   /* San pham */
.kb-bang th:nth-child(4) { width: 9rem; }    /* Boi canh */
.kb-bang th:nth-child(5) { width: 8rem; }    /* Kich ban */
.kb-bang th:nth-child(6) { width: 13rem; }   /* Thao tac */
.kb-bang input.kb-canh { margin: 0; padding: var(--k-1) var(--k-2); font-size: var(--chu-sm); width: 100%; }

/* ---------- bang kich ban canh (Bac 5) ---------- */
.canh-bang { width: 100%; table-layout: fixed; }
/* Khai lai y het khuon `th` cua `table.tsx` — DA GO. */
.canh-bang th:nth-child(2) { width: 6rem; }
.canh-bang th:nth-child(3) { width: 12rem; }
.canh-bang th:nth-child(4) { width: 3rem; }
/* Chi bo dem TRAI (cot dau sat le khoi), phan con lai theo bac chung. */
.canh-bang td { padding-left: 0; vertical-align: middle; }
.canh-bang input, .canh-bang select { margin: 0; width: 100%;
  padding: var(--k-1) var(--k-2); font-size: var(--chu-sm); }
.kb-bang td { vertical-align: middle; padding-top: var(--k-1); padding-bottom: var(--k-1); }
.kb-bang td img, .kb-bang .kb-trong { width: 56px; height: 32px; border-radius: var(--radius-sm);
  object-fit: cover; display: block; background: var(--panel-3); }
.kb-bang td b { display: block; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; font-weight: 500; }
.kb-bang td .muted { font-size: var(--chu-sm); }
.kb-bang select { margin: 0; padding-block: var(--k-1); padding-left: var(--k-2); font-size: var(--chu-sm); }
.kb-bang .dung-line { display: block; font-size: var(--chu-xs); color: var(--warn-text); }
.kb-bang .kb-nut { white-space: nowrap; }
.kb-bang .kb-nut button + button { margin-left: var(--k-1); }
.kb-trangthai.thieu { color: var(--warn-text); }
.kb-bang tr.kb-soan td { padding-top: 0; }
.kb-bang tr.kb-soan textarea { width: 100%; font: inherit; resize: vertical; margin-top: var(--k-1); }
#kb-list { overflow-x: auto; }

/* ---------- bang san pham ----------
 * `table-layout: auto` cho cot "Ma Shopee" (mot so tam chu so) chiem 290px
 * trong khi cot "Ten" — thu duy nhat dai — bi ep. Khoa be rong theo NOI DUNG
 * THAT chu khong theo tieu de.
 */
/*
 * TAM cot, khong phai bay. Cot dau la ANH san pham (trong khi chua co anh) va
 * cot cuoi la nut. Danh so lech mot lam cot anh RONG rong 466px va cot Ten bi
 * ep con 144px — ten vo hai dong, hang cao 107px, ca bang len 606px. Do duoc,
 * va no la loi do CHINH ban va nay gay ra.
 */
#sp-table { table-layout: fixed; width: 100%; min-width: 52rem; }
#sp-table th:nth-child(1) { width: 3.5rem; }   /* ảnh */
#sp-table th:nth-child(2) { width: auto; }     /* tên + SKU */
#sp-table th:nth-child(3) { width: 10rem; }
#sp-table th:nth-child(4) { width: 8.5rem; }
#sp-table th:nth-child(5) { width: 6rem; }
#sp-table th:nth-child(6) { width: 5rem; }
#sp-table th:nth-child(7) { width: 5rem; }
#sp-table th:nth-child(8) { width: 9rem; }
#sp-table td:first-child b { display: block; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
#sp-table td { vertical-align: middle; }
#sp-table td:last-child { white-space: nowrap; text-align: right; }
#sp-table td:last-child button + button { margin-left: var(--k-1); }

/* ---------- muc con trong thanh ben ----------
 * Bon nhom cua man Ban hang khong phu thuoc nhau nhung xep chung mot man thi
 * man do cao 2,61 man phai cuon. Tach thanh bon muc con: moi muc gon trong mot
 * man, va thanh ben noi ro dang o dau.
 *
 * `background: transparent` la BAT BUOC, khong phai trang tri: khong co no thi
 * nut lay nen mac dinh cua trinh duyet — bon o TRANG tren mot thanh ben toi.
 * Do duoc tren anh chup nen toi.
 */
.rail-con { display: flex; flex-direction: column; gap: 0;
  margin: 2px 0 var(--k-1) var(--k-4); padding-left: var(--k-2);
  border-left: 1px solid var(--line); }
.tab-con { display: block; width: 100%; text-align: left;
  background: transparent; color: var(--muted);
  padding: var(--k-1) var(--k-2); border-radius: var(--radius-sm); border: 0; font-size: var(--chu-sm);
  font-weight: 500; }
.tab-con:hover:not(.active) { background: var(--panel-2); color: var(--text); }
.tab-con.active { color: var(--accent-text); font-weight: 600; background: var(--accent-dim); }
@media (max-width: 900px) {
  .rail-con { flex-direction: row; flex-wrap: wrap; margin: 0; border: 0; padding: 0; }
  .tab-con { width: auto; }
}
/* Dang o man khac: muc con van bam duoc (chung la loi tat) nhung KHONG duoc
 * sang nhu dang mo. */
.rail-con.ngoai .tab-con.active { color: var(--muted); background: transparent;
  font-weight: 500; }


/* ---------- luoi nut doc/chan doan cua tien ich ----------
 * Sau nut, ten dai ngan khac nhau. `auto-fit` de chung tu xep thay vi ep hai
 * cot: ep cot thi mot ten dai lam gay ca hang. */
.ti-luoi { display: grid; gap: var(--k-1);
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); }
.ti-luoi button { width: 100%; }

/* Bang dieu hanh: hang bam duoc, va hang khan thi phai nhin thay tu xa. */
tr[data-mo-phien] { cursor: pointer; }
/*
 * `--bad-bg` KHONG TON TAI — ten that la `--bad-nen`.
 *
 * Nen dong nay luon roi ve gia tri du phong `rgba(220,60,60,.07)`: mot mau
 * dong cung, khong doi theo che do toi, va khong khop voi bat ky nen trang
 * thai nao khac trong ung dung. Mot bien viet sai ten khong bao gio bao loi —
 * CSS im lang nuot no va dung ban du phong.
 *
 * Vach doc `inset 3px` cung go: cung mot loai vach ma chu shop da yeu cau bo,
 * chi la ve bang `box-shadow` nen chot cu khong nhin thay.
 */
tr.hang-khan td { background: var(--bad-nen); }

/* Dong "chua co so": thay cho mot o giu cho. Mot dong thay vi 90px cho trong. */
.chua-co { margin: -var(--k-2) 0 var(--k-4); }

/*
 * Nhom phien da dung: gop lai, khong xep ngang hang voi phien dang song.
 *
 * Do that 24/08/2026 (chu shop tu bao "lech han nhau"): SAI LAN DAU — tuong
 * `padding-left: 16px` la mac dinh cua trinh duyet. That ra la luat cua chinh
 * du an: `details { padding: var(--k-3) var(--k-4); ... }` (dong 862, ap dung
 * cho MOI the <details> khong co CSS rieng de ghi de). Luoi `.ds-phien` long
 * ben trong bi chinh padding do day sang phai 16-17px so voi luoi phien dang
 * song ben ngoai — hai cot the KHONG THANG HANG, thay ro khi cuon ca trang
 * cung luc (an chup tung doan khong bat duoc, phai do `left` bang JS moi thay).
 *
 * CHI reset padding cho `<details>` nao BOC MOT LUOI PHAI THANG HANG voi mot
 * luoi cung loai o BEN NGOAI no — dung `.nhom-cu`. Dung reset trang cho moi
 * `<details>`: `.dt-phien`, `.ka-nhom`, `.kn-kythuat`... deu co padding nay va
 * deu dung, vi noi dung ben trong khong can so mep voi gi ben ngoai ca.
 */
/*
 * ── NHOM "N PHIEN DA DUNG" LA MOT NHAN GAP, KHONG PHAI MOT CAI HOP ────────
 *
 * Chu shop 26/08/2026: "Sao card lại dí sát vào border thế này, không có tí
 * margin nào cả".
 *
 * Hai rang buoc tuong nhu nguoc nhau:
 *   a) the ben trong phai THANG HANG voi the ben ngoai `<details>` — do la ly
 *      do cua `padding-left: 0` (co chot rieng trong `test/web-moc.test.js`);
 *   b) nhung `padding-left: 0` lam the cham sat vien trai cua cai hop.
 *
 * Ca hai deu dung. Cai sai la GIA THIET thu ba: rang `.nhom-cu` phai la mot
 * cai hop. No khong phai — no la mot NHAN GAP gom cac the da dung lai. Luat
 * chung `details { background; border; padding }` (dong ~1018) dung cho mot
 * khoi noi dung gap lai, khong dung cho mot nhom the.
 *
 * Bo hop di thi khong con vien nao de "dí sát vào", va luoi trong van thang
 * hang voi luoi ngoai. Het ca hai rang buoc, khong phai chon.
 */
.nhom-cu {
  margin-top: var(--k-4);
  background: none; border: 0; padding: 0;
}
.nhom-cu[open] { padding-bottom: 0; }
.nhom-cu > summary { cursor: pointer; color: var(--muted); font-size: var(--chu-sm);
  padding: var(--k-2) var(--k-1); user-select: none; }
.nhom-cu > summary:hover { color: var(--text); }
.nhom-cu[open] > summary { margin-bottom: var(--k-1); }

/* Dong gop "N phien da xong" tren bang dieu hanh. */
/* `padding` DA GO — trung y het bac dem cua khuon `table.tsx`. */
.hang-gop td { text-align: center; }
.hang-gop button { color: var(--muted); }

/*
 * BANG CHAN DOAN CUON TRONG KHUNG, khong keo dai ca trang.
 *
 * Do that: tab Tien ich cao 6.123px vi ba bang chan doan 51 / 36 / 15 dong ve
 * het chieu dai. Chin man hinh cuon de di qua mot tab ma phan lon la nhat ky.
 *
 * Chung la bang de TRA CUU, khong phai de doc tu tren xuong — nen mot khung
 * cao 420px co thanh cuon rieng dung hon, va cac khoi ben canh lai nhin thay
 * duoc cung luc.
 */
.bang-cao { max-height: 420px; overflow-y: auto; }
.bang-cao thead th { position: sticky; top: 0; z-index: 10; }

/* Hang tim san pham: o tim vua phai, so dem khong xuong dong. */
#sp-tim, #tv-tim { max-width: 34rem; }
#sp-dem { white-space: nowrap; }

/*
 * Man Tinh trang chi co HAI khoi canh nhau ("Tung bo phan", "May phat") va mot
 * khoi trai het hang. Voi luoi `auto-fit minmax(420px)` thi hang dau ra BA cot
 * va cot thu ba bo trong — 425px chet ben phai.
 *
 * Chot hai cot cho dung man nay: hai khoi that gian ra day hang.
 */
/*
 * `auto-fit` chu KHONG phai `auto-fill` — va tran nam o `.o`, khong o cot.
 *
 * Voi hai the tren khung 1.330px, `auto-fill` sinh hai cot 655px va the ben
 * phai ("May phat" — mot bang ba cot, cao 100px) phai gian ra kin ca cot do,
 * de lai mot vung trong ben trong chinh no. Xem chu thich o `.ds-phien` ve ve
 * tren / ve duoi.
 */
/* 560px, khong phai 430: voi 430 thi khung 1.330px sinh BA cot, hai the chiem
   hai cot dau va cot thu ba de trong — ma `auto-fit` khong thu no lai duoc, vi
   the "Su co gan day" (`het-hang`) an ca ba cot nen ca ba deu phai ton tai. */
.luoi-hai { grid-template-columns: repeat(auto-fit, minmax(min(560px, 100%), 1fr)); }


/* ---------- chip cau soan san duoi moi binh luan ----------
 * Bam la gui luon. Xep ngang, xuong dong duoc, va CAT bang dau ba cham chu
 * khong xuong dong giua cau — mot hang chip cao deu thi liec mot cai la chon
 * duoc, con cao thap lo nho thi phai doc tung cai. */
.bl-chip { display: flex; flex-wrap: wrap; gap: var(--k-1); margin: var(--k-1) 0 2px; }
.bl-chip .chip {
  font-size: var(--chu-xs); padding: var(--k-1) var(--k-2); border-radius: 999px;
  background: var(--panel-2); color: var(--text); border: 1px solid var(--line);
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.bl-chip .chip:hover:not(:disabled) { border-color: var(--accent); }

/* ── PHAT NHIEU PHIEN (Bang dieu hanh) ─────────────────────────────────────
 *
 * Mau lay tu bien co san (`--ok-text`, `--bad-text`, `--warn-text`) chu khong
 * go ma hex: bang mau doi theo sang/toi o `@media (prefers-color-scheme)`, va
 * mot ma hex go tay se thanh chu den tren nen den o che do toi.
 *
 * Cac lop `.ok/.bad/.warn` o day dat trong `.loat` — KHONG dinh nghia toan cuc.
 * Toan cuc thi chung se dam vao `.dot.ok`, `.toast.bad`... dang dung o cho khac.
 */
.loat { margin: var(--k-2) 0 var(--k-4); }
.loat-hop {
  border: 1px solid var(--line); border-radius: var(--radius-lg); padding: var(--k-2) var(--k-3);
  background: var(--panel);
}
.loat-hop > summary { cursor: pointer; font-weight: 600; user-select: none; }
.loat-ds { list-style: none; margin: var(--k-3) 0 0; padding: 0; }
.loat-ds > li {
  display: flex; align-items: center; gap: var(--k-2);
  padding: var(--k-1) 0; border-top: 1px solid var(--line);
}
/* Hang doi trong = van chon duoc, chi la mo di. KHONG khoa: bien do co the
 * cu (bang nay khong tu lam moi), va khoa mot thu that ra chay duoc thi nguoi
 * dung khong co cach nao vuot qua. */
.loat-ds > li.mo { opacity: .55; }
.loat-ds label {
  display: flex; align-items: center; gap: var(--k-2); flex: 1; min-width: 0; cursor: pointer;
  margin: 0; color: var(--text); font-size: var(--chu-sm); font-weight: 400;
}
/*
 * O DANH DAU PHAI DUOC TRA VE KICH THUOC THAT.
 *
 * Quy tac toan cuc o dau tep la `input { display: block; width: 100% }` — viet
 * cho o nhap chu. Mot o vuong danh dau roi vao do se GIAN RA CA HANG va day het
 * moi thu sang phai; do that lan dau ve bang nay: ten phien bi cat con "Sale
 * sáng — …" trong khi hang rong mot nua.
 *
 * `label` cung the: toan cuc no la `display: block; margin: .75rem 0` mau xam.
 */
.loat-ds input[type="checkbox"] {
  display: inline-block; width: auto; flex: none; margin: 0; padding: 0;
}
/* Ten phien la thu duoc phep cat khi chat; ten shop va cac the thi khong —
 * cat ten shop di thi hai phien cua hai shop khac nhau nhin y het nhau. */
.loat-ds label b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.loat-ds label .muted { white-space: nowrap; flex: none; }
.the-nho {
  font-size: var(--chu-xs); padding: 0 var(--k-2); border-radius: 999px;
  border: 1px solid var(--line); color: var(--muted); white-space: nowrap;
}
.the-nho.bad  { color: var(--bad-text);  border-color: var(--bad); }
.the-nho.warn { color: var(--warn-text); border-color: var(--warn); }
.loat-chan {
  display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap;
  margin-top: var(--k-3); padding-top: var(--k-2); border-top: 1px solid var(--line);
}
.loat-chan .hint { margin: 0; flex: 1; min-width: 12rem; }
.loat ul.loat-kq { list-style: none; margin: var(--k-2) 0 0; padding: 0; font-size: var(--chu-sm); }
.loat ul.loat-kq > li { padding: var(--k-1) 0; line-height: 1.5; }
.loat .ok   { color: var(--ok-text); }
.loat .bad  { color: var(--bad-text); }
.loat .warn { color: var(--warn-text); }
.loat .muted { color: var(--muted); }

/* ── LOGO CUA SHOP ─────────────────────────────────────────────────────────
 *
 * O chon trong bang phai VUA voi cot. Quy tac toan cuc dau tep la
 * `input, select, textarea { display: block; width: 100% }` — viet cho o nhap
 * trong bieu mau — nen mot `<select>` trong o bang se gian het cot. Cung dung
 * cai da lam hong hang o vuong o bang "phat nhieu phien".
 */
.v-bang select.sm, .logo-sua select {
  display: inline-block; width: auto; min-width: 8rem; margin: 0;
  padding: var(--k-1) var(--k-2); font-size: var(--chu-sm);
}
.logo-sua { margin: var(--k-2) 0; }
.logo-sua :is(h1, h2, h3, h4) { margin: 0 0 var(--k-2); font-size: var(--chu-base); }
.logo-hang {
  display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap; margin-bottom: var(--k-2);
}
.logo-hang label.inline { margin: 0; }
.logo-hang input[type="number"] { display: inline-block; width: 5rem; margin: 0; }
.logo-hang input[type="file"] { display: inline-block; width: auto; margin: 0; }

/* ── SHOPEE NOI GI VE SHOP NAY (Tinh trang) ────────────────────────────────
 *
 * Mau lay tu bien co san — bang mau doi theo sang/toi, ma hex go tay se thanh
 * chu den tren nen den. Bai `web-moc` bat moi `var(--x)` khong ai dinh nghia.
 */
.quyen-host { margin-bottom: var(--k-4); }
.quyen-host :is(h1, h2, h3, h4) { margin: var(--k-4) 0 var(--k-1); font-size: var(--chu-sm); }
.canh-obs {
  border-left: 3px solid var(--warn); padding: var(--k-2) var(--k-3); margin: var(--k-2) 0;
  background: var(--panel-2); border-radius: var(--radius-lg); line-height: 1.5;
  font-size: var(--chu-sm);
}
.ok-obs { color: var(--ok-text); font-size: var(--chu-sm); margin: var(--k-2) 0; }
.quyen-ds { list-style: none; margin: var(--k-2) 0; padding: 0; font-size: var(--chu-sm); }
.quyen-ds > li { padding: 2px 0; }
/* Co quyet dinh dam hon: no khong ngang hang voi may co tien nghi. */
.quyen-ds > li.quyet-dinh { font-weight: 600; }
.co-bat { color: var(--ok-text); }
.co-tat { color: var(--bad-text); }
.quyen-bang { font-size: var(--chu-sm); }
.quyen-bang tr.lech td { color: var(--warn-text); }
.quyen-bang tr.khop td:first-child::after {
  content: ''; display: inline-block; vertical-align: -2px;
  width: 14px; height: 14px; margin-left: var(--k-1);
  background-color: var(--ok-text);
  -webkit-mask: var(--ico-dung) center/14px 14px no-repeat;
  mask: var(--ico-dung) center/14px 14px no-repeat;
}

/* ── Bảng chọn sản phẩm (lấy thật từ Shopee) ─────────────────────────────
   Lưới ảnh giống bảng của Shopee: chủ shop đã quen mặt nó, và một bố cục
   khác đi chỉ bắt họ học lại một thứ họ đã biết. */
.sp-hop { border: 1px solid var(--border); border-radius: var(--radius-md); padding: var(--k-2); margin: var(--k-3) 0; }
.sp-luoi { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
           gap: var(--k-2); max-height: 380px; overflow-y: auto; padding: var(--k-1); }
.sp-o { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: var(--k-1);
        cursor: pointer; position: relative; font-size: var(--chu-xs); }
.sp-o.chon { border-color: var(--primary); background: var(--accent-bg); }
.sp-o img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: var(--radius-sm); display: block; }
.sp-o .ten { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
             overflow: hidden; margin: var(--k-1) 0 2px; }
/* #ee4d2d do 3,66:1 tren nen trang cua che do Sang — duoi chuan. O nay nam
 * trong hop thoai chon san pham nen phep do dong khong quet toi; bai kiem tinh
 * bat duoc. */
.sp-o .gia { color: var(--accent-text); font-weight: 600; }
.sp-o input { position: absolute; top: var(--k-2); left: var(--k-2); }
/* Món Shopee đang khoá (hết hàng / không đủ điều kiện live): hiện MỜ chứ
   không giấu — giấu đi thì chủ shop tìm mãi một món họ biết là mình có. */
.sp-o.khoa { opacity: .45; cursor: not-allowed; }


/* O loc cua bang chon san pham. Rong het hang: go tu khoa la viec lam nhieu
 * nhat o bang nay, khong phai mot thu phu. */
.sp-hop .sp-tim { width: 100%; margin: var(--k-2) 0 var(--k-2); }

/*
 * AN VOI MAT NHUNG KHONG AN VOI TRINH DUYET.
 *
 * `display:none` thi Chrome BO QUA o do khi tim truong username — dung cai
 * minh dang can no thay. Nen phai an bang cach khac.
 */
.an-thi-giac {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/*
 * O SO CO PHAN CAP.
 *
 * `.tile.lon` — hai o khan (dang chay / can chu y). To hon mot bac va chiem
 * nhieu chieu ngang hon, de mat roi vao dung cho.
 *
 * Truoc do ca sau o bang nhau, va "Dang chay" trong y het "Phien: 17".
 *
 * Be ngang/co chu that su do o `#dh-tomtat` quyet dinh (bo chon ID, luon
 * thang o day) — hai dong o day tung dat truoc bi de chet, da bo.
 */
/*
 * `--ok-text`, KHONG phai `--ok`.
 *
 * `--ok` la mau NEN/cham (chi co ban toi #35c07a); `--ok-text` moi la mau CHU
 * va co ban rieng cho che do Sang (#12734a). Dung nham thi con so "dang chay"
 * o Bang dieu hanh chi do 2,34:1 tren nen trang.
 */
.tiles .tile.lon.song b { color: var(--ok-text); }
/* Doi xung voi `.song`: con so cua mot o dem BAO HONG phai doc ra la hong.
 * Mau khong phai tin hieu duy nhat — dong `.tile-phu` ngay duoi noi ro phai
 * lam gi ("bấm Chuẩn hoá lại ở thẻ video"). */
.tiles .tile.song b { color: var(--ok-text); }
.tiles .tile.loi b { color: var(--bad-text); }
.tiles button.tile { font: inherit; text-align: left; cursor: pointer;
  border: 1px solid var(--line); }
.tiles button.tile[disabled] { cursor: default; opacity: 1; }
.tiles button.tile:not([disabled]):hover { border-color: var(--accent, var(--primary)); }

/* Hop thoai hoi mot dong — thay cho `prompt()`. */
.hoi { border: 1px solid var(--line); border-radius: var(--r);
  padding: 0; background: var(--panel); color: inherit; max-width: 30rem; width: calc(100vw - 2rem); }
.hoi::backdrop { background: rgba(0,0,0,.35); }
.hoi form { padding: var(--k-4) var(--k-5) var(--k-4); display: grid; gap: var(--k-3); }
.hoi :is(h1, h2, h3, h4) { margin: 0; font-size: var(--chu-base); }
.hoi label { display: grid; gap: var(--k-1); }
.hoi input, .hoi select { width: 100%; }
.hoi .hoi-nut { display: flex; gap: var(--k-2); justify-content: flex-end; margin-top: var(--k-1); }

/* Canh bao "cong thuc cu": mot dong + nut, phan giai thich gap lai. */
.ctc-dong { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap; }
.ctc-chitiet { margin-top: var(--k-2); }
.ctc-chitiet summary { cursor: pointer; font-size: var(--chu-sm); opacity: .8; }
.ctc-chitiet p { margin: var(--k-2) 0 0; }

/* Luat cu cho `details.tv-thieu-hop > summary` DA GO cung luc voi the
 * `<details>` — xem chu thich trong `index.html`. */
.the-nho.canh { background: var(--warn-nen); color: var(--warn-text); }

/* "Dang phat" tren Bang dieu hanh — the to, doc duoc tu xa. */
/*
 * DAI "SAP TOI" — moi moc mot dong, gio dinh mep trai.
 *
 * Doc theo cot gio la doc duoc ca lich; ten phien di sau. Nguoc lai (ten
 * truoc) thi cot gio rang cua theo do dai ten va mat phai di zic zac.
 */
.saptoi { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--r); padding: var(--k-3) var(--k-4); margin-bottom: var(--k-4); }
.saptoi-dau { font-size: var(--chu-xs); font-weight: 700; text-transform: uppercase;
  letter-spacing: .09em; color: var(--muted); margin-bottom: var(--k-2); }
.saptoi-ds { display: flex; flex-wrap: wrap; gap: var(--k-2); align-items: flex-start; }
.saptoi-the { flex: 1 1 15rem; max-width: 26rem; }
.saptoi-the { cursor: pointer; padding: var(--k-2) var(--k-2); border-radius: var(--radius-md);
  background: var(--panel-2); border: 1px solid var(--line); font-size: var(--chu-sm);
  display: grid; gap: var(--k-1); min-width: 0; }
.saptoi-the:hover { border-color: var(--accent); }
.st-dau { display: flex; align-items: baseline; gap: var(--k-2); }
.st-ten { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-weight: 600; }
.st-chan { display: flex; align-items: center; gap: var(--k-1); flex-wrap: wrap; }
.saptoi-gio { font-variant-numeric: tabular-nums; font-weight: 700;
  display: inline-flex; align-items: baseline; gap: var(--k-1); }
.saptoi-ngay { font-style: normal; font-size: var(--chu-xs); font-weight: 400;
  color: var(--muted); }
.saptoi-viec { font-size: var(--chu-xs); font-weight: 700; text-transform: uppercase;
  letter-spacing: .05em; border-radius: var(--radius-sm); padding: 0 var(--k-1); }
.saptoi-viec.bat { color: var(--ok-text); background: var(--ok-nen); }
.saptoi-viec.tat { color: var(--muted); background: var(--panel-2); }
.saptoi-con { margin-left: auto; font-size: var(--chu-xs); white-space: nowrap; }

.dp-luoi { display: grid; gap: var(--k-4); margin: 0 0 var(--k-4);
  grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); }
/*
 * DIEN MAO THE — GIONG `.tile` va `.stream-card`, KHONG rieng mot kieu.
 *
 * Soat doi chieu template 25/08/2026 tim ra van de GOC lon nhat: ban minh co
 * BA loai "the" voi BA dien mao khac nhau — `.tile` (radius 14 + bong),
 * `.stream-card` (radius 10, KHONG bong), `.dp-the` (radius 10, KHONG bong).
 * Template chi co MOT `Card` duy nhat. Do la ly do lon nhat khien app trong
 * roi rac so voi ban goc.
 *
 * Ba cho nay nay dung chung: `--radius-xl` (14px) + `--bong-xs`.
 *
 * PADDING: template de 24px deu bon phia. O day dung 16px (`--k-4`) — van
 * thuoc thang chuan va thoang hon han 12px cu, nhung khong len 24px vi the
 * cua minh it dong hon the template (template co bon dong: nhan + so + hai
 * dong chan; minh mot-hai dong). 24px quanh mot dong chu se thanh dung cai
 * "to ma trong hoac" chu shop vua bat sua ba lan.
 */
.dp-the { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius-xl); box-shadow: var(--bong-xs);
  padding: var(--k-4); cursor: pointer; }
.dp-the:hover { border-color: var(--accent, var(--primary)); }
/* `#dc2626` doi thanh bien: mot ma mau dong cung khong doi theo che do toi,
 * va no khong khop voi cac vien canh bao khac trong ung dung. */
.dp-the.khan { border-color: var(--bad-vien); }
.dp-dau { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap; }
.dp-dau b { font-size: var(--chu-base); }
.dp-ly { margin: var(--k-2) 0 0; font-size: var(--chu-sm); opacity: .85; }

/* ── Van hanh: don hang · giao van · ton kho ─────────────────────────────── */
/*
 * LUOI THE, khong phai bang dai ca man.
 *
 * Mot don co bay thu can nhin: ma, trang thai, mat hang, tien, noi nhan, thoi
 * gian. Nhet ca bay vao mot hang bang thi moi cot hep den muc phai cat chu, va
 * ten san pham — thu duy nhat giup nhan ra don — bi cat dau tien. The thi moi
 * don la mot khoi doc duoc, va man hinh rong bao nhieu thi xep bay nhieu cot.
 */
/*
 * LUOI COT DEU, khong phai flex-wrap.
 *
 * ── DO THAT 19/08/2026 ────────────────────────────────────────────────────
 *
 * `display: flex` + `align-items: flex-start` cho moi the tu cao theo noi
 * dung cua no: mot the co ba mat hang cao gap doi the co mot, va ca hang so
 * le nhu rang cua. Chu shop noi: "card thi lech nhau, cai cao cai thap,
 * khong thang hang".
 *
 * Luoi `auto-fill` chia cot deu nhau, va `stretch` (mac dinh cua grid) keo
 * moi the trong CUNG MOT HANG cao bang nhau. Khong con `max-width` rieng vi
 * cot da do luoi quyet dinh.
 */
.vh-luoi { display: grid; gap: var(--k-2);
  grid-template-columns: repeat(auto-fill, minmax(21rem, 1fr)); }

.vh-don { display: flex; flex-direction: column; gap: var(--k-2);
  padding: var(--k-3) var(--k-3); border: 1px solid var(--line); border-radius: var(--radius-lg);
  background: var(--panel-2); border-left: 3px solid var(--line); }
/* Vien trai la thu doc duoc TU XA — mau trang thai o day thay cho viec phai
   doc chu tren tung the khi luot mat qua hai chuc don. */
/* Vach mau canh DA GO 26/08/2026; mau trang thai chuyen sang MAU CHU o cuoi tep. */

.vh-don.xong   { border-left-color: var(--ok-text); }
.vh-don.huy    { border-left-color: var(--bad-text); }
.vh-don.cho    { border-left-color: var(--muted); }

.vh-don-dau { display: flex; align-items: center; justify-content: space-between;
  gap: var(--k-2); flex-wrap: wrap; }
.vh-tt { font-size: var(--chu-xs); font-weight: 700; padding: 0 var(--k-2);
  border-radius: 999px; background: var(--panel-3); white-space: nowrap; }
.vh-tt.canlam { background: var(--warn-nen); color: var(--warn-text); }
.vh-tt.dangdi { background: var(--tin-nen); color: var(--tin-text); }
.vh-tt.xong   { background: var(--ok-nen); color: var(--ok-text); }
.vh-tt.huy    { background: var(--bad-nen); color: var(--bad-text); }

.vh-don-hang { display: flex; flex-direction: column; gap: var(--k-1); font-size: var(--chu-sm); }
.vh-mon { display: flex; gap: var(--k-2); align-items: center; }
/* Anh vuong 34px: du de nhan ra mon hang khi luot mat, chua du de mot the don
 * cao gap ruoi. `flex: none` giu no khong bi bop khi ten dai. */
.vh-mon-anh { width: 34px; height: 34px; flex: none; border-radius: var(--radius-sm);
  object-fit: cover; background: var(--panel-3); }
.vh-mon-trong { display: inline-block; }
.vh-mon-ten { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.vh-mon-sl { flex: none; color: var(--muted); }
.vh-don-duoi { display: flex; justify-content: space-between; gap: var(--k-2);
  flex-wrap: wrap; font-size: var(--chu-sm); }
.vh-cod { font-style: normal; font-size: var(--chu-xs); font-weight: 700;
  padding: 0 var(--k-1); border-radius: var(--radius-sm); background: var(--warn-nen); color: var(--warn-text); }
.vh-don-huy { font-size: var(--chu-xs); color: var(--bad-text); }
.vh-don-nhan { font-size: var(--chu-xs); padding-top: var(--k-1);
  border-top: 1px solid var(--line); }
.vh-chon { display: flex; align-items: center; gap: var(--k-1); margin: 0; }
.vh-chon input { width: auto; margin: 0; }
.vh-gv-chon { display: flex; gap: var(--k-2); flex-wrap: wrap; align-items: flex-end;
  padding-top: var(--k-2); border-top: 1px solid var(--line); }
.vh-gv-chon label { flex: 1 1 9rem; min-width: 0; margin: 0; font-size: var(--chu-xs); }
.vh-gv-chon button { flex: none; }

.vh-tom { display: flex; gap: var(--k-2); flex-wrap: wrap; margin-bottom: var(--k-2); }
.vh-chip { font-size: var(--chu-xs); padding: var(--k-1) var(--k-2); border-radius: 999px;
  background: var(--panel-3); }
.vh-chip.canlam { background: var(--warn-nen); color: var(--warn-text); }

/* O nhap ton: hep vua mot so bon chu so, va nhap nhay xanh mot cai khi da ghi
   len Shopee — khong co dau hieu do thi nguoi dung khong biet no da luu chua. */
.vh-ton { width: 4.5rem; text-align: right; padding: var(--k-1) var(--k-1); }
.vh-ton.da-luu { outline: 2px solid var(--ok-text); }
.vh-tk td { vertical-align: middle; }
.vh-nhap { color: var(--ok-text); }
.vh-xuat { color: var(--bad-text); }
.vh-don[data-don-mo] { cursor: pointer; }
.vh-ct { padding-top: var(--k-2); border-top: 1px dashed var(--line); font-size: var(--chu-xs); }
.vh-ct-noi { display: flex; flex-direction: column; gap: var(--k-2); }
/* Dem/co chu rieng DA GO: 12px la duoi bac nho nhat cua bang (`--chu-sm`,
 * 14px) ma ca he dung, va o day la BANG SO SACH — doc bang mat ca ngay. Bang
 * nay gio dung `.bang-gon` neu can dac hon. */
.vh-ct-so { display: flex; justify-content: space-between; gap: var(--k-2);
  flex-wrap: wrap; font-size: var(--chu-xs); }
.vh-ct-goi { font-size: var(--chu-xs); }

/* ── Man kiem Shopee Open API ────────────────────────────────────────────── */
.ka-tom { display: flex; gap: var(--k-2); flex-wrap: wrap; }
.ka-chip { font-size: var(--chu-xs); padding: var(--k-1) var(--k-2); border-radius: 999px;
  background: var(--panel-3); }
.ka-chip.ghi      { background: var(--warn-nen); color: var(--warn-text); }
.ka-chip.dat      { background: var(--ok-nen); color: var(--ok-text); }
.ka-chip.nghiepvu { background: var(--muted-bg); color: var(--muted-foreground); }
.ka-chip.hong     { background: var(--bad-nen); color: var(--bad-text); }

.ka-nhom { border: 1px solid var(--line); border-radius: var(--radius-lg); padding: var(--k-2) var(--k-3);
  margin-bottom: var(--k-2); background: var(--panel-2); }
.ka-nhom > summary { cursor: pointer; font-size: var(--chu-sm); padding: 2px 0; }
/*
 * `display: contents` KHONG dung o day: Chrome boc than `<details>` trong
 * `::details-content`, nen mot luoi dat tren chinh `<details>` khong chia cot
 * cho con no. Luoi phai nam tren mot the BEN TRONG.
 */
.ka-luoi { display: flex; flex-wrap: wrap; gap: var(--k-2); margin-top: var(--k-2);
  align-items: stretch; }
.ka-luoi > .ka-duong { flex: 1 1 20rem; max-width: 28rem; }

/*
 * STRETCH, khong phai flex-start — cung luat chu shop 24/08/2026 (xem
 * `.luoi-o`). Do that 25/08/2026: cac the `.ka-duong` cung hang cao lech
 * nhau lon (168px vs 96px) vi noi dung khac nhau (co ket qua "goi thu" hay
 * chua, co nhan GHI hay khong). `justify-content: center` de the ngan can
 * giua thay vi dong noi dung len dinh, de trong het phia duoi.
 */
.ka-duong { display: flex; flex-direction: column; gap: var(--k-1);
  justify-content: center;
  padding: var(--k-2) var(--k-2); border: 1px solid var(--line); border-radius: var(--radius-md);
  border-left: 3px solid var(--line); background: var(--panel); }
/* Vien trai doc duoc tu xa — trong mot bang 163 dong thi mau la thu duy nhat
   luot mat qua ma van nam duoc tinh hinh. */
.ka-duong.dat      { border-left-color: var(--ok-text); }
/* Vach mau canh DA GO — mau trang thai o cuoi tep. */
.ka-duong.hong     { border-left-color: var(--bad-text); }

.ka-dau { display: flex; align-items: center; gap: var(--k-1); flex-wrap: wrap; }
.ka-pt { font-size: var(--chu-xs); font-weight: 700; letter-spacing: .03em;
  padding: 0 var(--k-1); border-radius: var(--radius-sm); }
.ka-pt.get  { background: var(--tin-nen); color: var(--tin-text); }
.ka-pt.post { background: var(--warn-nen); color: var(--warn-text); }
.ka-dd { font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--chu-xs); min-width: 0; overflow: hidden; text-overflow: ellipsis; }
/* Cung ly do voi `.vh-han.qua`: chu trang tren `--bad-text` dat o che do sang
 * nhung o che do toi `--bad-text` la do SANG, chi con 3,41:1. */
.ka-ghi { font-size: var(--chu-xs); font-weight: 700; padding: 0 var(--k-1);
  border-radius: var(--radius-sm); background: var(--bad-nen); color: var(--bad-text); }
.ka-phu { display: flex; gap: var(--k-2); flex-wrap: wrap; font-size: var(--chu-xs); }
.ka-nut { display: flex; gap: var(--k-2); align-items: center; flex-wrap: wrap; }
.ka-kq { font-size: var(--chu-xs); font-weight: 700; }
.ka-kq.dat      { color: var(--ok-text); }
.ka-kq.nghiepvu { color: var(--muted); }
.ka-kq.hong     { color: var(--bad-text); }
.ka-ra { max-height: 16rem; overflow: auto; font-size: var(--chu-xs); margin: 0;
  padding: var(--k-2) var(--k-2); border-radius: var(--radius-sm); background: var(--panel-3);
  white-space: pre-wrap; word-break: break-word; }

/* ── Uy quyen Shopee ─────────────────────────────────────────────────────── */
.uq { margin-bottom: var(--k-4); }
.uq-dau { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap; }
.uq-dau :is(h1, h2, h3, h4) { margin: 0; }
/*
 * BA TRANG THAI, BA MAU. "Sap het" phai khac han "con han": mot dong chu xam
 * ghi "con 12 phut" thi khong ai doc, cung dong do mau cam thi co. Day la thu
 * chu shop can thay TRUOC khi token het, khong phai sau.
 */
.uq-tt { font-size: var(--chu-xs); font-weight: 700; padding: var(--k-1) var(--k-2);
  border-radius: 999px; background: var(--panel-3); }
.uq-tt.on   { background: var(--ok-nen); color: var(--ok-text); }
.uq-tt.sap  { background: var(--warn-nen); color: var(--warn-text); }
.uq-tt.het  { background: var(--bad-nen); color: var(--bad-text); }
.uq-tt.chua { background: var(--muted-bg); color: var(--muted-foreground); }

.uq-buoc { margin: var(--k-3) 0 0; padding-left: var(--k-6); display: flex;
  flex-direction: column; gap: var(--k-4); }
.uq-buoc > li { padding-left: var(--k-1); }
.uq-buoc > li > b { font-size: var(--chu-sm); }
.uq-buoc .hint { margin: var(--k-1) 0 var(--k-2); }
.uq-buoc .add-row { flex-wrap: wrap; }
.uq-buoc input[type="text"], .uq-buoc input:not([type]) { min-width: 12rem; }
#uq-duong { word-break: break-all; }
/* Han giao — ba muc, va chung phai nhin ra khac nhau TU XA. Mot dong chu xam
   ghi "quá hạn" thi khong ai doc; cung dong do nen do thi co. */
.vh-han { font-size: var(--chu-xs); font-weight: 600; }
.vh-han.gap { color: var(--warn-text); font-weight: 700; }
/*
 * "Qua han" — dung khuon sac thai nhu moi the trang thai khac.
 *
 * Ban cu la chu TRANG tren nen `--bad-text`. O che do sang thi `--bad-text`
 * la do dam nen doc tot; o che do TOI no la do sang (#f0555a), va chu trang
 * tren do chi dat 3,41:1 — duoi chuan AA. Do that tren man Giao van va In phieu.
 *
 * Nen mo + chu dam cung mau thi dat o CA HAI che do, va giong het cach
 * `.vh-tt.*` dang lam — mot khuon cho moi the trang thai.
 */
.vh-han.qua { color: var(--bad-text); background: var(--bad-nen); font-weight: 700;
  padding: 0 var(--k-2); border-radius: var(--radius-sm); align-self: flex-start;
  letter-spacing: .02em; }
/* Anh san pham trong bang ton kho — nho, vuong, khong lam vo hang. */
.vh-sp { display: flex; gap: var(--k-2); align-items: flex-start; }
.vh-sp-anh { width: 44px; height: 44px; flex: none; border-radius: var(--radius-sm);
  object-fit: cover; background: var(--panel-3); }
.vh-pl-anh { width: 22px; height: 22px; border-radius: var(--radius-sm); object-fit: cover;
  vertical-align: -6px; margin-right: var(--k-1); background: var(--panel-3); }
/* Du lieu qua cu — mot dau thoi gian khong phai mot canh bao, TUOI moi la. */
/* #b26a00 do 3,91:1 tren nen trang, duoi chuan AA cho chu 13px. */
.cu-roi { color: var(--warn-text); font-size: var(--chu-sm); }
/* #8a4b00 tren nen toi chi do 2,82:1 — dung token cua chinh he. */
.cu-roi b { color: var(--warn-text); }

/* ══ MAN "DON CO VAN DE" (M10) ═══════════════════════════════════════════════
 *
 * Bon o dem BAM DUOC de loc bang. O dem khong bam duoc thi nguoi dung thay
 * "7 kien dung im" roi phai tu tim 7 don do trong ca bang.
 */
/* Luoi cua `.cvd-dem` gop vao luat chung o cuoi tep — xem "HANG THE SO LIEU".
 * O day chi con le ngoai. */
.cvd-dem { margin: var(--k-3) 0 var(--k-4); }

/*
 * `.cvd-o` la KHUON THE THU BAY cua cung mot khai niem. Giu ten lop (no mang
 * trang thai `.dang-loc` rieng — day la nut LOC, khong chi la o dem), nhung
 * hop/dem/bo goc/thu tu chu-so dung chung voi `.tile`.
 * `flex-direction: column` de nhan nam TREN so, cung luat 26/08/2026.
 */
.cvd-o {
  display: flex; flex-direction: column; align-items: stretch; gap: 2px;
  height: auto; justify-content: flex-start; text-align: left; white-space: normal;
  padding: var(--k-3) var(--k-4); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--bong-xs);
  background: var(--panel); cursor: pointer; font: inherit; color: inherit;
}
.cvd-o:hover { border-color: var(--accent); }
/* O dang loc phai nhin ra ngay la DANG LOC — khong thi bam roi khong biet
 * minh dang xem tat ca hay chi mot nhom. */
.cvd-o.dang-loc { border-color: var(--accent); background: var(--panel-2); }
.cvd-o-so { font-size: var(--chu-2xl); line-height: var(--dong-2xl); font-weight: 600;
  letter-spacing: -.01em; font-variant-numeric: tabular-nums; }
/* So 0 thi lam mo di: mot hang bon so deu dam nhu nhau thi khong huong duoc
 * mat vao cho dang co viec. */
.cvd-o-so:not(.co) { color: var(--muted); font-weight: 500; }
.cvd-o-nhan { font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Bang va suc khoe nam CANH nhau: de suc khoe duoi bang thi phai cuon qua het
 * don moi thay, ma luc do da quen mat dinh xem gi. */
.cvd-than { display: grid; grid-template-columns: 1fr 300px; gap: var(--k-4); align-items: start; }
@media (max-width: 1100px) { .cvd-than { grid-template-columns: 1fr; } }

.cvd-suckhoe {
  border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3) var(--k-4); background: var(--panel);
}
.cvd-suckhoe :is(h1, h2, h3, h4) { margin: 0 0 var(--k-3); font-size: var(--chu-base); }
.sk-hang { display: flex; justify-content: space-between; align-items: baseline; }
.sk-hang b { font-size: var(--chu-xl); }
/* Thanh co VACH NGUONG ve san: mot ti le tron khong noi duoc no dang o duoi
 * hay tren muc an toan. */
.sk-thanh {
  position: relative; height: 8px; border-radius: 999px;
  background: var(--panel-3); margin: var(--k-2) 0 var(--k-2); overflow: hidden;
}
.sk-thanh i { position: absolute; inset: 0 auto 0 0; background: var(--ok); border-radius: 999px; }
.sk-thanh i.tre { background: var(--bad); }
.sk-thanh u {
  position: absolute; top: 0; bottom: 0; width: 2px;
  background: var(--text); opacity: .55;
}
.sk-phu { font-size: var(--chu-xs); color: var(--muted); }
.sk-canh { margin: var(--k-3) 0 0; font-size: var(--chu-sm); }
.sk-nguon { margin: var(--k-3) 0 0; font-size: var(--chu-xs); line-height: 1.375; }

/* Cong tac giao dien o chan thanh ben — nho, khong tranh cho voi dieu huong. */
.gd-nut { width: 100%; font-size: var(--chu-xs); padding: var(--k-1) var(--k-2); margin-bottom: var(--k-1); }

/* ══ MAN DON HANG — BANG, theo cau truc ban thiet ke ═════════════════════════
 *
 * Ban cu la luoi the bon cot. Doi chieu hai anh canh nhau moi thay ban thiet ke
 * la mot BANG muoi cot co o chon, thanh loc sau o, thao tac hang loat va phan
 * trang — khong mot thu nao trong so do co o ban the.
 */
.vh-loc {
  display: flex; gap: var(--k-2); flex-wrap: wrap; align-items: center;
  margin: var(--k-3) 0; padding: var(--k-3); border: 1px solid var(--line);
  border-radius: var(--r); background: var(--panel);
}
.vh-loc input[type="search"] { flex: 1 1 260px; min-width: 200px; }
.vh-loc label { display: flex; align-items: center; gap: var(--k-1); font-size: var(--chu-sm); color: var(--muted); }
.vh-loc input[type="date"] { width: auto; }
.vh-loc select { width: auto; }

/* Bang cuon ngang trong khoi rieng: an cot theo be rong man la mat so lieu ma
 * khong bao gi — loi da mac mot lan. */
/*
 * BANG MOI DUNG HET BE NGANG KHUNG.
 *
 * ── DO THAT bang cach chup man, 19/08/2026 ────────────────────────────────
 *
 * `.v-bang` dung chung co `max-width: 88rem` (1408px) va `table-layout: fixed`.
 * Khung noi dung rong 1534px, nen bang dung som va chua mot dai den rong ~140px
 * ben phai — trong khi chinh trong bang thi tieu de cot bi cat cut ("Hãng vận
 * chuyể") va noi dung o bi cat bang ba cham. Nam man cung mac: Don hang, Ton
 * kho, Phieu kho, Giao van, In phieu.
 *
 * Bang moi go ca hai: rong het khung, va de trinh duyet tu chia cot theo noi
 * dung thay vi ep moi cot bang nhau.
 */
.vh-bang-bao { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--r); }
.vh-bang-bao > .v-bang { max-width: none; min-width: 0; table-layout: auto; }
/*
 * VA HUY MOI RANG BUOC BE RONG THEO CHI SO.
 *
 * `.v-bang th:nth-child(n)` duoc viet cho bang video (bay cot, thu tu co
 * dinh). Cac bang van hanh co bo cot khac han, nen nhung con so do roi vao cot
 * bat ky: o man Nha cung cap, `nth-child(4) { width: 6.5rem }` ep cot DIA CHI
 * con 104px va dia chi vo ba dong, trong khi cot ten thua 430px.
 *
 * Day la lan thu tu cung mot lop loi trong mot ngay: neo theo chi so cot.
 */
.vh-bang-bao > .v-bang th:nth-child(1),
.vh-bang-bao > .v-bang th:nth-child(2),
.vh-bang-bao > .v-bang th:nth-child(3),
.vh-bang-bao > .v-bang th:nth-child(4),
.vh-bang-bao > .v-bang th:nth-child(5),
.vh-bang-bao > .v-bang th:nth-child(6),
.vh-bang-bao > .v-bang th:nth-child(7) { width: auto; }
.vh-bang-bao > .v-bang th.c-chon { width: 36px; }
.vh-bang-don { width: 100%; border-collapse: collapse; }
/*
 * CHI GIU PHAN RIENG: dinh dau bang khi cuon, va khong xuong dong.
 *
 * `text-align`, `font-size`, `color`, `font-weight`, `background`, `padding`
 * DA GO — ca sau deu la khai lai y het (hoac lech mot bac) so voi khuon `th`
 * cua `table.tsx`. `font-weight: 600` la cho duy nhat lech that: template dat
 * `font-medium` (500), va mot dau bang dam hon cac bang khac chinh la kieu
 * "moi thang mot kieu" chu shop noi.
 */
.vh-bang-don thead th {
  position: sticky; top: 0; z-index: 10;
  white-space: nowrap;
}
.vh-bang-don tbody tr { border-top: 1px solid var(--line); cursor: pointer; }
.vh-bang-don tbody tr:hover { background: var(--panel-2); }
/* Dem rieng DA GO — dung bac dem chung cua `table.tsx`. */
.vh-bang-don td { vertical-align: middle; }
/* Hang cao 44-48px — khong chat 32px, khong phi 64px. */
.vh-bang-don tbody tr { height: 46px; }
.vh-bang-don .c-so { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.vh-bang-don .c-chon { width: 36px; text-align: center; }
.vh-bang-don .c-chon input { width: auto; margin: 0; }
/*
 * CHAT COT PHAI CHIU DUOC NOI DUNG DAI.
 *
 * ── DO THAT 19/08/2026 ─────────────────────────────────────────────────────
 * Cot "Hang trong don" o man Giao van liet ke nhieu mat hang: "Nhiệt kế điện
 * tử đo trán không tiếp xúc ×1, Khăn tắm xô 6 lớp cho bé 100x100cm ×2". Khong
 * chan be rong thi o do keo dai va DE LEN cot ben canh — chu chong chu, doc
 * khong ra chu nao.
 *
 * Cat bang ba cham chu khong xuong dong: mot dong cao gap ba lam ca bang nhay
 * lung tung khi loc.
 */
.vh-bang-don .c-sp {
  max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.vh-bang-don td { overflow: hidden; text-overflow: ellipsis; }
.vh-bang-don td:not(.c-sp):not(.tk-sp) { max-width: 220px; }
.vh-bang-don .sp-ten {
  display: inline-block; max-width: 240px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom;
}
.vh-bang-don code { font-size: var(--chu-sm); }

.vh-thanh-day {
  display: flex; align-items: center; gap: var(--k-4); flex-wrap: wrap;
  margin-top: var(--k-3); padding: var(--k-2) var(--k-3);
  border: 1px solid var(--line); border-radius: var(--r); background: var(--panel);
}
.vh-chon-het { display: flex; align-items: center; gap: var(--k-2); font-size: var(--chu-sm); }
.vh-chon-het input { width: auto; margin: 0; }
.vh-thanh-nut { display: flex; gap: var(--k-2); flex-wrap: wrap; }
.vh-trang { margin-left: auto; display: flex; align-items: center; gap: var(--k-2); font-size: var(--chu-sm); color: var(--muted); }
/*
 * `.vh-cod` DA CO MOT BAN o tren (ngay duoi `.vh-don-huy`), va ban nay ghi de
 * no bang nen `--bad` + chu trang: 3,5:1 — duoi chuan AA cho chu nho dam.
 *
 * Do that 20/08/2026 tren man Chi tiet don: chip COD hien ra mot vien thuoc do
 * KHONG CO CHU. Thu phai `.ct-tien-hang span` de mau `--muted` len chu trang,
 * nhung ke ca khong co no thi 3,5:1 van la mot chip kho doc.
 *
 * Giu mot ban duy nhat — bang mau huy hieu "can lam" cua DESIGN.md
 * (nen var(--warn-nen), chu var(--warn-text)): COD la mot viec phai lam luc giao, khong phai
 * mot trang thai loi.
 */
.warn-line { color: var(--warn-text); }

/* Tab chon kho — mot kho mot luc, thay cho bang rong san pham × kho. */
.vh-tab { display: flex; gap: var(--k-1); margin: var(--k-3) 0; border-bottom: 1px solid var(--line); }
.vh-tab-nut {
  padding: var(--k-2) var(--k-3); border: 0; border-bottom: 2px solid transparent;
  background: none; color: var(--muted); font: inherit; cursor: pointer;
}
.vh-tab-nut:hover { color: var(--text); }
.vh-tab-nut.dang { color: var(--accent-text); border-bottom-color: var(--accent); }
/* O ton doi mau theo muc: het (do) / sap het duoi 5 (vang) / du (thuong). */
.tk-o { display: inline-block; min-width: 34px; padding: 0 var(--k-2); border-radius: var(--radius-md); background: var(--panel-3); }
.tk-o.tk-het { background: var(--bad); color: var(--on-bad); }
.tk-o.tk-sap { background: var(--warn-nen); color: var(--warn-text); }
.tk-thao { white-space: nowrap; }
.tk-thao button { font-size: var(--chu-xs); padding: var(--k-1) var(--k-2); }
.tk-o-nhap {
  width: 72px; text-align: right; padding: var(--k-1) var(--k-2); border-radius: var(--radius-md);
  border: 1px solid var(--line); background: var(--panel-3); color: inherit;
  font-variant-numeric: tabular-nums;
}
.tk-o-nhap.tk-het { border-color: var(--bad); }
.tk-o-nhap.tk-sap { border-color: var(--warn); }
/* Anh 36px vuong, bo 6px — du nhan ra mat hang khi luot mat qua bang dai. */
.tk-sp { display: flex; align-items: flex-start; gap: var(--k-2); }
.tk-sp .vh-sp-anh { width: 36px; height: 36px; border-radius: var(--radius-sm); object-fit: cover; flex: 0 0 auto; }
.tk-sp-chu { display: flex; flex-direction: column; gap: 0; min-width: 0; }
.tk-sp .sp-ten { font-weight: 600; }
.tk-sp code { font-size: var(--chu-xs); }
/* Anh phan loai nho hon anh san pham: no la mau/size, khong phai mat hang. */
.tk-pl { display: inline-flex; align-items: center; gap: var(--k-1); font-size: var(--chu-sm); color: var(--muted); }
.tk-pl .vh-pl-anh { width: 24px; height: 24px; border-radius: var(--radius-sm); object-fit: cover; flex: 0 0 auto; }
/* Don Shopee tu choi hoi tham so: van hien, nhung khong chon duoc va noi ro ly do. */
.gv-hong { opacity: .72; }
.gv-hong td { background: color-mix(in srgb, var(--bad) 8%, transparent); }

/* ══ DAI TINH TRANG LIVE — thu dau tien tren man Tinh trang ══════════════════
 *
 * Chu to bang chieu cao ca dai vi day la thu duy nhat chu shop can doc tu xa,
 * khi dang lam viec khac. Mot dong chu co thuong o goc man la thu ho se bo lo —
 * va ngay 19/08 ho da bo lo suot 8 tieng.
 */
/*
 * `.tt-dai` GIO LA MOT `.tt-o` — khong con dai rieng mot hang.
 *
 * DO THAT 25/08/2026: ban cu `padding: k-5 k-6` + `chu-3xl` lam dai nay cao
 * gap doi ba the ben canh no, chiem het be rong man rieng mot hang trong khi
 * chi noi mot cau. Bo `margin-bottom`/`padding` rieng (ke thua tu `.tt-o` qua
 * lop chung o index.html), chi giu mau nen/vien theo tung trang thai.
 */
/*
 * `display: contents` GIU LAI — ba the con cua `#tt-tong` phai lot THANG vao
 * luoi `.tt-grid` de dung chung MOT hang voi dai "Đường phát" (`#tt-dai`).
 * Bo no thi `#tt-tong` chiem mot o luoi, va ba the ben trong chen chuc trong
 * mot phan tu chieu ngang — dung loi chu shop bao 25/08/2026 da sua roi.
 * (Toi da go nham dong nay mot lan trong dot 26/08; `test/web-moc.test.js`
 * bat lai. Ghi vao day de khong go lan nua.)
 */
#tt-tong { display: contents; }
/* `chu-base` chu khong `chu-lg`: o nay chua CA MOT CAU ("ĐANG PHÁT BÌNH
   THƯỜNG"), khong phai mot con so — cung co chu voi `.tt-o .so` de bon o
   nhin cung mot bac. */
.tt-dai-to { font-size: var(--chu-base); font-weight: 600; letter-spacing: -.02em;
  line-height: 1.25; }
.tt-dai-phu { margin-top: var(--k-1); font-size: var(--chu-xs); color: var(--muted); }
.tt-dai.tot { background: color-mix(in srgb, var(--ok) 14%, transparent); border-color: var(--ok); }
.tt-dai.tot .tt-dai-to { color: var(--ok-text); }
.tt-dai.chet { background: color-mix(in srgb, var(--bad) 18%, transparent); border-color: var(--bad); }
.tt-dai.chet .tt-dai-to { color: var(--bad-text); }
.tt-dai.nghi { background: var(--panel); border-color: var(--line); }
.tt-dai.nghi .tt-dai-to { color: var(--muted); }

/* ══ MAN IN PHIEU (M12) ═════════════════════════════════════════════════════ */
.ip-chon { display: flex; gap: var(--k-3); flex-wrap: wrap; align-items: stretch; margin: var(--k-3) 0; }
.ip-loai {
  flex: 1 1 200px; display: flex; flex-direction: column; gap: 0; text-align: left;
  padding: var(--k-3) var(--k-4); border: 1px solid var(--line); border-radius: var(--r);
  background: var(--panel); color: inherit; font: inherit; cursor: pointer;
}
.ip-loai:hover { border-color: var(--accent); }
.ip-loai.dang { border-color: var(--accent); background: var(--panel-2); }
.ip-loai span { font-size: var(--chu-xs); color: var(--muted); }
.ip-kho { display: flex; align-items: center; gap: var(--k-2); font-size: var(--chu-sm); color: var(--muted); }
.ip-kho select { width: auto; }
/* Ba muc tinh trang phieu — mau noi ro cai nao cam duoc, cai nao chua. */
.ip-tt { font-size: var(--chu-xs); padding: 0 var(--k-2); border-radius: 999px; background: var(--muted-bg); color: var(--muted-foreground); }
.ip-tt.dang { background: color-mix(in srgb, var(--warn) 22%, transparent); color: var(--warn-text); }
.ip-tt.san { background: color-mix(in srgb, var(--ok) 22%, transparent); color: var(--ok-text); }
.ip-tt.hong { background: color-mix(in srgb, var(--bad) 22%, transparent); color: var(--bad-text); }
/* Cot gia von binh quan o the kho — to nen khac de doi mat theo con so nay
 * qua tung dong: no la thu the kho sinh ra de giai thich. */
.tk-gv { background: var(--panel-2); font-weight: 600; }


/*
 * O CHON theo bo mau cua ung dung, khong de mac dinh trinh duyet.
 *
 * O vuong trang mac dinh choi hoan toan tren nen toi — bon subagent doi chieu
 * deu chi ra cung mot cho.
 */
.vh-bang-don input[type="checkbox"],
.vh-thanh-day input[type="checkbox"] {
  appearance: none; width: 16px; height: 16px; border-radius: var(--radius-sm);
  border: 1.5px solid var(--line); background: var(--panel-3);
  cursor: pointer; position: relative; vertical-align: middle;
}
.vh-bang-don input[type="checkbox"]:checked,
.vh-thanh-day input[type="checkbox"]:checked { background: var(--accent); border-color: var(--accent); }
.vh-bang-don input[type="checkbox"]:checked::after,
.vh-thanh-day input[type="checkbox"]:checked::after {
  content: ''; position: absolute; left: var(--k-1); top: 0;
  width: 4px; height: 8px; border: solid #fff; border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

/* Nut "Mo" trong bang: bang mau cua he chi co cam/do/xam — khong co xanh tim
 * gach chan cua lien ket mac dinh. */
.vh-bang-don a.ghost {
  display: inline-block; padding: var(--k-1) var(--k-2); border: 1px solid var(--line);
  border-radius: var(--radius-md); color: var(--text); text-decoration: none; font-size: var(--chu-sm);
}
.vh-bang-don a.ghost:hover { border-color: var(--accent); color: var(--accent-text); }


/* Ten shop duoi ten phan mem trong thanh ben. */
.rail-shop {
  padding: 0 14px 10px; margin-top: -var(--k-1);
  font-size: var(--chu-xs); color: var(--muted);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rail-shop:empty { display: none; }


/* Hop tro giup. */
.trogiup { max-width: 34rem; }
.tg-ds { margin: var(--k-3) 0 0; }
.tg-ds dt { font-weight: 600; margin-top: var(--k-3); }
.tg-ds dt:first-child { margin-top: 0; }
.tg-ds dd { margin: var(--k-1) 0 0; color: var(--muted); font-size: var(--chu-sm); line-height: 1.5; }


/* ══ BA SUA CHUNG SAU KHI DOI CHIEU 14 MAN VOI BAN THIET KE ══════════════════
 *
 * Ca ba deu lap o nhieu man, nen sua mot cho thay vi sua tung man.
 */

/*
 * 1. TIEU DE TRANG — tam ban doi chieu deu ghi "tieu de nho gan bang chu
 *    thuong". Dung: `h2 { font-size: var(--chu-base)}` chi to hon chu thuong 0,05rem.
 *    Ban thiet ke cho tieu de trang co lon, dam, dung rieng mot dong.
 */
.toolbar > :is(h1, h2) {
  font-size: var(--chu-2xl); font-weight: 700; letter-spacing: -.015em;
  margin-right: auto;
  /* Khong de "Phiên phát" vo thanh hai dong khi hang nut ben canh dai. */
  white-space: nowrap;
}
/* Nhan nhom nhat ky khong con la ma viet hoa nen bo gian chu va viet hoa ep. */
.nhom { text-transform: none; letter-spacing: 0; }

/*
 * 2. O DEM — ban thiet ke: the lon chia deu het be ngang, NHAN o tren, SO co
 *    rat lon o duoi. Dung: chip nho don ve trai, so va nhan cung mot dong.
 *
 * DOI TEN RIENG khoi `.cvd-dem`/`.cvd-o` — DO THAT 25/08/2026: hai dinh
 * nghia CUNG TEN `.cvd-dem`/`.cvd-o` (mot o dau file nay, dong ~2896, cho
 * nut BAM DUOC de loc bang "Don co van de" M10; mot o day, cho O DEM TINH
 * dung o nhieu man) chong len nhau — ban sau (o day) de len ban truoc vi
 * dung sau trong file. Bon noi dung `#dt-dem`/`#vh-tk-dem`/`#vh-tk2-dem`
 * (o dem TINH) VA `#vh-cvd-dem` (nut loc M10) deu vo tinh chung mot dang
 * nhin — chu shop chi bao "/doanh-thu to trong hoac" nhung day la loi
 * chung ca cac man dung chung ten lop.
 *
 * Doi ten rieng thanh `.dem-luoi`/`.dem-o` cho O DEM TINH, giai phong lai
 * `.cvd-dem`/`.cvd-o` cho DUNG mot minh nut loc M10 nhu thiet ke ban dau.
 *
 * Kem nen (chu shop 25/08/2026: "card nao cung to ma trong hoac, moi hang
 * moi card chieu rong khac nhau"): `1fr` (keo deu, khong can noi dung) doi
 * sang `max-content` (om sat noi dung, giong `.tt-o` /tinh-trang da sua),
 * padding k-3/k-4 -> k-1/k-3, chu gia tri chu-3xl(30px) -> chu-lg(18px).
 *
 * DOI TIEP sang FLEXBOX — DO THAT 25/08/2026, tu chinh mat nhin thay tren
 * production: con so "1.417.250₫" bi CAT CUT thanh "1.417.2…".
 *
 * `grid-template-columns: repeat(auto-fit, minmax(140px, max-content))` co
 * mot loi CSS Grid that su: khi so cot ma auto-fit tinh duoc (chia be rong
 * khung cho MUC TOI THIEU 140px) nhieu hon so o thuc te, Chrome ep MOI cot
 * co ve DUNG 140px — bo qua hoan toan phan `max-content`, du con noi dung
 * dai hon. Kiem chung bang mot khung thu nghiem rieng ngay tren trang that:
 * ba o "4/4", "7", "1.417.250₫" trong mot hang deu ra dung 140px, mac ke o
 * thu ba can rong hon. Day KHONG phai loi rieng cua trang nay — bat ky luoi
 * nao dung dung cong thuc `auto-fit, minmax(X, max-content)` deu dinh, va
 * mau nay tung duoc dung o nhieu noi trong phien sua giao dien 25/08/2026.
 *
 * Flexbox voi `flex: 0 0 auto` KHONG dinh loi nay — da kiem lai bang cung
 * mot khung thu nghiem, o rong ra dung theo noi dung (148px cho so 24px).
 */
/*
 * `.dem-luoi` / `.dem-o` DUNG CHUNG luat cua `.tiles` / `.tile` — xem khoi
 * "HANG THE SO LIEU" o cuoi tep.
 *
 * Day la KHUON THE THU SAU cua cung mot khai niem (dem so lieu), va no mang
 * dung cai loi chu shop chi ra 26/08/2026 tren /#/doanh-thu: `flex: 0 0 auto;
 * min-width: 140px` cho moi o rong bang noi dung, nen bon o khong bang nhau
 * va cong lai khong lap day hang -> "thừa bên phải".
 *
 * Khong doi ten lop (bon man dang dung: Doanh thu, Ton kho, The kho, Don co
 * van de) — chi cho chung dung chung LUAT. Phan rieng con lai o duoi.
 */
.dem-o {
  text-align: left;
  border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--panel);
}
/* Khuon cua `.dem-nhan` / `.dem-so` gop het xuong khoi "HANG THE SO LIEU" o
 * cuoi tep — mot ban duy nhat, dung chung bac chu voi `.tile-mota` / `.tile b`.
 * Chi con lai o day cai luat RIENG that su: so chua doc duoc thi mo di. */
.dem-so:not(.co) { color: var(--muted-foreground); font-weight: 500; }

/*
 * 3. O TIM — nam man deu bao thieu bieu tuong kinh lup. Ve bang nen SVG nhung
 *    thang trong CSS: khong tai tep tu may chu ngoai (DESIGN.md).
 */
input[type="search"], .o-tim {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='m20 20-3.5-3.5'/></svg>");
  background-repeat: no-repeat;
  background-position: 10px center;
  background-size: 15px 15px;
  padding-left: var(--k-8);
}


/* Thong so ky thuat gap lai o man Tinh trang. */
.quyen-ky-thuat > summary { cursor: pointer; font-size: var(--chu-sm); color: var(--muted); margin-top: var(--k-2); }
.quyen-ky-thuat > summary:hover { color: var(--text); }


/* Bang phieu kho: ma phieu mau cam, badge phan mau theo loai va trang thai. */
.pk-ma { color: var(--accent-text); }
.pk-loai-nhap { border-color: var(--tin-vien); color: var(--chip-tin); }
.pk-loai-xuat-huy { border-color: var(--bad-vien); color: var(--chip-do); }
.pk-loai-hoan-ve { border-color: var(--warn-vien); color: var(--chip-vang); }
/* Kiem kê — mau tim, KHAC ba loai kia: no khong phai hang vao hay hang ra, no
 * la mot lan dem lai va chot so. */
.pk-loai-kiem-ke { border-color: var(--border); color: var(--chip-tim); }
.pk-tt::before {
  content: ''; display: inline-block; width: 7px; height: 7px;
  border-radius: 50%; margin-right: var(--k-1); vertical-align: middle;
}
.pk-tt.ok::before { background: var(--ok-text); }
.pk-tt.nhap::before { background: var(--warn); }


/* Nhan trang thai ton dat duoi con so. */
.tk-nhan { display: block; font-size: var(--chu-xs); margin-top: 0; font-weight: 600; }
.tk-nhan-het { color: var(--bad-text); }
.tk-nhan-sap { color: var(--warn-text); }


/*
 * BANG PHAI NAM TRONG KHUNG NHIN.
 *
 * Do that: bo `table-layout: fixed` xong bang phinh ra 1878px trong khung
 * 1568px — cot Thao tac troi han ra ngoai man. Fixed thi cat chu, auto thi
 * tran. Cach thu ba: auto, nhung cot ten san pham co lai duoc.
 */
.vh-bang-bao > .v-bang { width: 100%; }
.tk-sp { max-width: 30rem; }
.tk-sp .sp-ten { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tk-thao { white-space: nowrap; }


/* ══ THU VIEN VIDEO — luoi the ═══════════════════════════════════════════════
 *
 * Bon the mot hang nhu ban thiet ke. Anh bia giu ti le DOC 9:16 vi video that
 * cua shop la 1080x1920; ban thiet ke ve ti le ngang, cho do khong chep.
 */
/* `align-items: stretch` (mac dinh cua grid), KHONG phai `start`.
 * Video co 2 hay 3 nut ("Xoá" chi hien khi video KHONG dang nam trong hang
 * doi phien nao) — the 3 nut thi hang nut xuong dong, cao hon 36px so voi
 * the 2 nut CUNG HANG. `start` de nguyen do lech; `stretch` keo moi the
 * trong hang ve chung mot chieu cao, va `.tv-nut` neo xuong day (duoi) nen
 * phan cao them la khoang trong DUOI ten/trang thai, khong phai anh bia bi
 * keo meo (anh co `aspect-ratio` rieng, khong bi anh huong). */
#video-grid.vgrid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  gap: var(--k-4); align-items: stretch; overflow-x: visible;
}
.tv-the {
  border: 1px solid var(--line); border-radius: var(--radius-xl);
  background: var(--panel); overflow: hidden;
  display: flex; flex-direction: column;
}
.tv-the:hover { border-color: var(--accent); }

.tv-bia {
  position: relative; aspect-ratio: 3 / 4;
  background: var(--panel-3) center/cover no-repeat;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.tv-bia .ph { font-size: var(--chu-3xl); opacity: .5; }

/* Thoi luong de len goc duoi-phai anh, nen den de doc tren moi anh bia. */
.tv-dai {
  position: absolute; right: var(--k-1); bottom: var(--k-1);
  background: rgba(0,0,0,.78); color: #fff;
  font-size: var(--chu-xs); padding: 0 var(--k-1); border-radius: var(--radius-sm);
}
.tv-song {
  position: absolute; left: var(--k-1); top: var(--k-1);
  background: var(--accent); color: #fff;
  font-size: var(--chu-xs); font-weight: 600; padding: 0 var(--k-2); border-radius: var(--radius-sm);
}

.tv-than { padding: var(--k-2) var(--k-3) var(--k-3); display: flex; flex-direction: column; gap: var(--k-1);
  flex: 1; }
/* Mot dong, cat bang "…" — ten dai thi WRAP xuong hang hai, va o do
 * cao them ~36px trong khi cac o ben canh (ten ngan) van mot dong, lam
 * ca hang lech chieu cao. Luoi video la mot thu vien anh nho, khong phai
 * bang chan doan — cat mot dong, xem/sua ten qua bam vao la du. */
.tv-than .nm { font-weight: 600; line-height: 1.375; cursor: pointer;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tv-trang { display: flex; gap: var(--k-1); flex-wrap: wrap; }
.tv-phu { display: flex; gap: var(--k-2); flex-wrap: wrap; font-size: var(--chu-xs); }
.tv-logo { font-size: var(--chu-xs); display: flex; align-items: center; gap: var(--k-1); }
.tv-nut { display: flex; gap: var(--k-1); flex-wrap: wrap; margin-top: auto; }


/* ══ MAN "DOANH THU & LAI GOP" ═══════════════════════════════════════════════ */
/* Khuon cua `.dt-moc` nay dung chung voi `.vh-tab` o cuoi tep — xem chu
 * thich o do. Dong nay chi con giu cho, khong dat kich thuoc nua. */
/* `order: 3` — o dem xep bang `order`, thanh phan nao khong khai thi nhan 0
 * va nhay len dau. Dong phu "tren 2/19 don biet gia von" da len tren ca nhan. */
.dt-phu { font-size: var(--chu-xs); order: 3; }

/*
 * HAI THE BANG NHAU — chu shop 26/08/2026: *"Sao 2 cái card này chiều rộng
 * lại lệch nhau là sao? tao đã bảo các card cùng hàng cùng cột phải rộng bằng
 * nhau cao bằng nhau cơ mà"*.
 *
 * Truoc do la `2fr 1fr` (bieu do rong gap doi bang top-5) va `align-items:
 * start` (the ngan hon khong keo cao bang). Ca hai deu la ngoai le tu dat,
 * va luat chu shop ra khong co ngoai le nao.
 */
.dt-than {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--k-4);
  margin: var(--k-4) 0; align-items: stretch;
}
@media (max-width: 1000px) { .dt-than { grid-template-columns: 1fr; } }
.dt-bieu-do, .dt-top {
  border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3) var(--k-4); background: var(--panel);
}
.dt-bieu-do :is(h1, h2, h3, h4), .dt-top :is(h1, h2, h3, h4) { margin: 0 0 var(--k-3); font-size: var(--chu-sm); }

.dt-do-hop { display: flex; gap: var(--k-2); }
.dt-truc {
  display: flex; flex-direction: column; justify-content: space-between;
  font-size: var(--chu-xs); color: var(--muted); height: 150px; text-align: right;
  min-width: 3.5rem;
}
.dt-svg { flex: 1; height: 150px; color: var(--muted); }
.dt-nhan-ngay {
  display: flex; justify-content: space-around; margin-top: var(--k-1);
  padding-left: var(--k-16); font-size: var(--chu-xs); color: var(--muted);
}

.dt-top-dong { display: grid; grid-template-columns: 1fr 3fr auto; gap: var(--k-2); align-items: center; margin-bottom: var(--k-2); }
.dt-top-ten { font-size: var(--chu-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dt-top-thanh { background: var(--panel-3); border-radius: var(--radius-sm); height: 10px; overflow: hidden; }
.dt-top-thanh i { display: block; height: 100%; background: var(--accent); }
.dt-top-so { font-size: var(--chu-xs); font-variant-numeric: tabular-nums; }

.dt-tru { color: var(--bad-text); }
/* #46c17c do 8,38:1 tren nen toi nhung chi 2,29:1 tren nen trang. Token
 * `--ok-text` co ban cho ca hai che do. */
.dt-lai { color: var(--ok-text); font-weight: 600; }
.dt-lo { color: var(--bad-text); font-weight: 600; }
.dt-phien > summary { cursor: pointer; margin: var(--k-4) 0 var(--k-2); font-size: var(--chu-sm); color: var(--muted); }
.dt-phien > summary:hover { color: var(--text); }


/* Chip loc man San pham. */
/* `.sp-chip` DA GO ban rieng — no la mot NUT GAT, va no dung chung khay voi
 * `.vh-tab`/`.dt-moc` o cuoi tep. Xem chu thich o do: mot nut gat khong co
 * khay thi cao 30px dung tran canh nhung o cao 36px. */


/*
 * BANG SAN PHAM — chi so cot da lech tu khi them cot chon.
 *
 * `.v-bang th:nth-child(2) { width: auto }` von nham vao cot TEN. Them mot cot
 * o chon o dau la cot 2 tro thanh cot ANH: anh duoc phat het cho thua, con cot
 * Ten bi bop con vai ky tu va vo bon dong. Do duoc tren anh chup.
 *
 * Nhac lai chi so la sua cho nay hong cho khac. Neo bang LOP.
 */
#sp-table th.c-chon, #sp-table td.c-chon { width: 36px; text-align: center; }
#sp-table th.c-chon input, #sp-table td.c-chon input { width: auto; margin: 0; }
#sp-table th:nth-child(2) { width: 4rem; }   /* anh */
#sp-table th:nth-child(3) { width: auto; }   /* ten — cot co gian */
#sp-table th:nth-child(4) { width: 10rem; }  /* ma Shopee */
#sp-table th:nth-child(5) { width: 7rem; }
#sp-table th:nth-child(6) { width: 6rem; }
#sp-table th:nth-child(7) { width: 5rem; }
#sp-table th:nth-child(8) { width: 5rem; }
#sp-table th:last-child { width: 9rem; }
#sp-table { max-width: none; }


/* O san pham trong bang don: anh nho canh ten, ten cat bang ba cham. */
.don-sp { display: flex; align-items: center; gap: var(--k-2); min-width: 0; }
.don-sp .vh-sp-anh { flex: none; }
.don-sp .sp-ten { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }


/*
 * TIEU DE TRANG — hai khuon, mot kieu.
 *
 * Nua so man dung `.toolbar > h2`, nua kia dung `.v-dau > h3` (Don co van de,
 * Phieu kho, The kho, Doi chieu ton, Nha cung cap…). Chi nang mot khuon thi
 * mot nua so man van co tieu de nho bang chu thuong — dung cai lech ma bon
 * ban doi chieu bat duoc.
 */
.v-dau > :is(h1, h3),
/*
 * BA KHUON, MOT KIEU.
 *
 * `.toolbar > h2`, `.v-dau > h3` va `.ct-dau > h2` — ba cach dat tieu de trang
 * moc lên qua thoi gian. Nang tung cai mot thi lan nao cung sot mot khuon: man
 * Chi tiet don dung khuon thu ba va da bi sot dung nhu vay, bai kiem
 * "moi man deu co tieu de trang" bat duoc.
 */
.ct-dau > :is(h1, h2) {
  font-size: var(--chu-2xl); font-weight: 700; letter-spacing: -.015em;
  margin: 0 auto 0 0; white-space: nowrap;
}
.v-dau { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap; margin-bottom: var(--k-4); }

/*
 * LIEN KET TRONG BANG khong duoc de mau mac dinh cua trinh duyet.
 *
 * Bang mau cua he chi co cam / do / xam. Mot lien ket xanh tim gach chan giua
 * bang la mau duy nhat khong thuoc bang mau nao — bon ban doi chieu deu chi
 * ra. Truoc chi nham `.vh-bang-don`, nhung mot nua so bang dung `.v-bang`
 * tran.
 */
.v-bang a.ghost {
  display: inline-block; padding: var(--k-1) var(--k-2); border: 1px solid var(--line);
  border-radius: var(--radius-md); color: var(--text); text-decoration: none; font-size: var(--chu-sm);
}
.v-bang a.ghost:hover { border-color: var(--accent); color: var(--accent); }


/* ══ MAN "IN PHIEU" — hai cot ═══════════════════════════════════════════════ */
.ip-than { display: grid; grid-template-columns: 1fr 20rem; gap: var(--k-4); align-items: start; }
@media (max-width: 1100px) { .ip-than { grid-template-columns: 1fr; } }

.ip-truoc {
  border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: var(--k-3); background: var(--panel); position: sticky; top: var(--k-3);
}
.ip-truoc-dau { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: var(--k-2); }

/* To phieu ve nen TRANG that: no la thu se in ra giay. */
.ip-to {
  background: #fff; color: #111; border-radius: var(--radius-sm); padding: var(--k-3);
  font-size: var(--chu-xs); line-height: 1.5;
}
.ip-to-a6 { aspect-ratio: 105 / 148; }
.ip-to-a4 { aspect-ratio: 210 / 297; }
.ip-to { overflow: hidden; }
.ip-vach {
  height: 34px; background: repeating-linear-gradient(90deg, #111 0 2px, #fff 2px 5px);
  color: transparent; border-radius: var(--radius-sm); margin-bottom: var(--k-1);
  font-size: 0; position: relative;
}
.ip-ma { font-family: ui-monospace, monospace; font-weight: 700; margin-bottom: var(--k-2); }
.ip-truong { display: grid; grid-template-columns: auto 1fr; gap: 0 var(--k-2); margin: 0 0 var(--k-2); }
.ip-truong dt { font-weight: 600; }
.ip-truong dd { margin: 0; }
/* To phieu la nen TRANG co dinh (no se in ra giay). #777 do 4,48:1 — thieu
 * 0,02 so voi chuan AA, nen dam them mot bac. */
.ip-truong .muted { color: #6b6b6b; }
.ip-hang { border-top: 1px dashed #bbb; padding-top: var(--k-1); }
.ip-hang-dong { display: flex; justify-content: space-between; gap: var(--k-2); }
.ip-hang-dong span:first-child {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ip-hang .muted { color: #6b6b6b; }


/* Bang "Viec can lam truoc" o Bang dieu hanh. */
.dh-viec-hop { margin: var(--k-4) 0; }
.dh-viec-hop > :is(h1, h2, h3, h4) { font-size: var(--chu-base); margin: 0 0 var(--k-3); }


/* Ngan chi tiet nha cung cap. */
.ncc-truong { display: grid; grid-template-columns: auto 1fr; gap: var(--k-1) var(--k-3); margin: var(--k-3) 0; font-size: var(--chu-sm); }
.ncc-truong dt { color: var(--muted); }
.ncc-truong dd { margin: 0; }
#vh-ncc-ds tr[data-ncc-mo] { cursor: pointer; }


/*
 * BANG TRONG NGAN CHI TIET — ngan rong 20rem, ma `.v-bang` co
 * `min-width: 58rem`. Khong go thi bang tran ra ngoai ngan va ca trang moc
 * mot thanh cuon ngang; do duoc tren anh chup: ngan chi hien duoc cot dau.
 */
.cvd-suckhoe .v-bang { min-width: 0; table-layout: auto; font-size: var(--chu-xs); }
/* Dem rieng DA GO — dung `.bang-gon` neu that su can dac hon. */
.cvd-suckhoe { overflow: hidden; }


/* Dong bao loi kem nut dan toi cho sua. */
.loi-hop {
  display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap;
  border: 1px solid var(--bad); border-radius: var(--radius-lg);
  padding: var(--k-2) var(--k-3); background: var(--bad-nen);
}
.loi-hop p { margin: 0; }
.loi-hop a.ghost {
  display: inline-block; padding: var(--k-1) var(--k-3); border: 1px solid var(--line);
  border-radius: var(--radius-md); color: var(--text); text-decoration: none; font-size: var(--chu-sm);
}
.loi-hop a.ghost:hover { border-color: var(--accent); color: var(--accent); }


/*
 * BANG DUNG HET BE NGANG o cac man con lai.
 *
 * `.v-bang { max-width: 88rem }` viet cho bang video hoi con hep. Cac bang
 * nhieu cot (Kich ban video, Cau tra loi, Don co van de) deu dung som va chua
 * mot dai trong ben phai — cung loi da sua cho nhom `.vh-bang-bao`, nhung ba
 * cho nay khong nam trong nhom do.
 *
 * DO THAT 25/08/2026, chu shop bao "Kich ban video: phan ben phai van trong":
 * dong dau tung viet `#kb-list .v-bang` — NHUNG BANG Kich ban video dung class
 * `.kb-bang`, khong phai `.v-bang`. Selector do KHONG BAO GIO KHOP duoc phan
 * tu nao, nen ban va nay tu truoc gio khong co hieu luc — dai trong 304px
 * (82rem max-width cu tru be rong container 101rem) van con nguyen. Doi dung
 * ten lop, va them chinh `.kb-bang` (khong chi `#kb-list .kb-bang`) vi day la
 * lop duy nhat dung cho bang do — giu `#kb-list .v-bang` thi mai mai chet.
 */
#kb-list .kb-bang,
.v-bang-boc > .v-bang,
.cvd-than .v-bang { max-width: none; }
/* Danh sach cau tra loi soan san la <ul>, khong phai bang — no bi bo hep boi
 * chinh be rong cua `.binhluan`. */
#ctl-list.binhluan { max-width: none; }


/*
 * ══ SUA TUONG PHAN SAU KHI DO BANG CONG THUC WCAG ═══════════════════════════
 *
 * Do tren trinh duyet that, tung phan tu co chu, tren ca 22 man. Bay nhom duoi
 * chuan AA — trong do co ca nut hanh dong chinh va nut Dung phien.
 */

/*
 * `<a class="ghost">` NGOAI BANG van an mau lien ket mac dinh cua trinh duyet
 * (#0000EE) — tren nen toi no do 1,87:1, thap nhat ca app. Quy tac cu chi nham
 * `button.ghost` va `.v-bang a.ghost`, nen mot the `<a class="ghost sm">` dat o
 * cho khac thi lot luoi.
 */
a.ghost, a.primary, a.danger {
  display: inline-block; text-decoration: none;
  padding: var(--k-1) var(--k-3); border-radius: var(--radius-md);
  border: 1px solid var(--line); background: var(--panel-2);
  color: var(--text); font-size: var(--chu-sm); line-height: 1.375;
}
a.ghost:hover { border-color: var(--accent); color: var(--accent); }
a.primary { background: var(--accent); color: var(--on-accent); border-color: transparent; }
a.danger { background: var(--bad-nut); color: var(--on-bad); border-color: transparent; }

/* Nhan "dang chieu" tren anh bia: nen cam nen chu phai la mau chu-tren-cam. */
.tv-song { color: var(--on-accent); }

/*
 * VONG TIEU DIEM — bat buoc de dung duoc ban phim.
 *
 * `:focus-visible` chi hien khi nguoi dung di bang ban phim, nen no khong lam
 * phien nguoi dung chuot. WCAG 2.2 doi vien day >= 2px va tuong phan >= 3:1.
 */
:where(button, a, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}


/*
 * ══ VUNG BAM VA CO CHU — WCAG 2.2 ═══════════════════════════════════════════
 *
 * Do tren trinh duyet that: bay cho co vung bam duoi 24x24 CSS px (chuan AA
 * `web-target-size`), va nhan nho nhat chi 10,2px.
 */

/*
 * O DANH DAU: mac dinh cua trinh duyet la 13x13px. Nang len 16px va cho o
 * chua cao it nhat 24px — dat NGOAI LE KHOANG CACH cua WCAG 2.2 (vung 24x24
 * quanh tam khong cham vao dich khac) thay vi thoi o danh dau to bang ngon tay.
 */
input[type="checkbox"], input[type="radio"] {
  width: 16px; height: 16px; margin: var(--k-1);
}
label.inline, .vh-chon-het, .ip-chon label {
  display: inline-flex; align-items: center; gap: var(--k-2); min-height: 24px;
}
td.c-chon, th.c-chon { min-height: 24px; }

/*
 * `<summary>` la mot dich bam. Cao 21–22px la duoi chuan, va no la thu nguoi
 * dung bam de mo cac khoi gap ("Vi sao, va mat gi", "Thong so ky thuat"…).
 */
summary { min-height: 24px; display: flex; align-items: center; gap: var(--k-1); }

/*
 * NHAN NHO NHAT 10,2px — duoi nguong doc duoc. 11,5px van gon trong bang ma
 * doc duoc o khoang cach ngoi thuong.
 */
.nhom { font-size: var(--chu-xs); }
.dp-chieu-nhan { font-size: var(--chu-xs); }

/* Tieu de nhom thanh ben do 10,24px — nho hon ca nhan trong bang. */
.rail-nhom { font-size: var(--chu-xs); }


/*
 * ══ TON TRONG "GIAM CHUYEN DONG" CUA HE DIEU HANH ═══════════════════════════
 *
 * Skill ui-ux-pro-max xep `reduced-motion` vao nhom CRITICAL. Nguoi bi roi loan
 * tien dinh co the chong mat vi mot hieu ung truot; ho da bao he dieu hanh
 * dieu do roi, phan mem chi can nghe.
 *
 * KHONG tat han: `transition` con 0,01ms de cac bo nghe `transitionend` van no,
 * va trang thai cuoi van dat dung. Tat bang `none` thi mot so ho tro se treo o
 * trang thai giua chung.
 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/*
 * CHIEU CAO DONG cho chu than: 1,45 la duoi khuyen nghi 1,5–1,75. Mot doan
 * giai thich dai — man nao trong app cung co — doc chat hon han o 1,45.
 */
p, .hint, li { line-height: 1.5; }


/*
 * `h1` LA TIEU DE TRANG, va no phai co cung co voi truoc khi doi the.
 *
 * Truoc day moi man dung `<h2>`, nen sau khi dang nhap ca ung dung KHONG CO
 * h1 nao — trinh doc man hinh khong biet trang nay ten gi. Doi the la viec
 * cua ngu nghia; co chu thi giu nguyen bang quy tac o tren.
 */
main h1 { font-size: var(--chu-2xl); margin: 0; }


/*
 * KHOI RONG THI KHONG CHIEM CHO.
 *
 * Man Don co van de chia hai cot; khi khong doc duoc du lieu (vi du ket noi
 * Shopee het han) thi cot phai "Suc khoe shop" van ve ra mot o vien bo tron
 * rong 300px khong co mot chu nao. Do that tren anh chup: mot khung trong
 * canh dong bao loi.
 */
.cvd-suckhoe:empty { display: none; }

/* Cum nut chua dung toi: lam mo va khong bam duoc, thay cho `disabled` — vi
 * day la lien ket chu khong phai nut. */
.mo-di { opacity: .5; pointer-events: none; }

/* Chi bao duong truyen ba muc — thay cho fps/kbps. */
.dt-tot { color: var(--ok-text); font-weight: 600; }
.dt-vua { color: var(--warn-text); font-weight: 600; }
.dt-xau { color: var(--bad-text); font-weight: 600; }

/* ── BIEU MAU TAO PHIEU KHO ─────────────────────────────────────────────────
 *
 * Mot KHOI trong dong chay cua man, khong phai hop thoai noi. Mot to phieu co
 * ba bon dong hang, moi dong hai o so — nhet vao mot hop thoai thi no cao hon
 * khung nhin va nguoi dung mat cho dang doc.
 */
.pk-form {
  margin: var(--k-3) 0 var(--k-4); padding: var(--k-4);
  border: 1px solid var(--accent); border-radius: var(--r);
  background: var(--panel);
}
.pk-dong-tren {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  gap: var(--k-3); margin: var(--k-3) 0;
}
.pk-dong-tren label { display: flex; flex-direction: column; gap: var(--k-1);
  font-size: var(--chu-sm); color: var(--muted); }
.pk-dong-tren input, .pk-dong-tren select { width: 100%; }
.pk-them-hang {
  display: flex; gap: var(--k-2); align-items: flex-end; flex-wrap: wrap;
  margin: var(--k-3) 0; padding: var(--k-3); border: 1px solid var(--line);
  border-radius: var(--r); background: var(--panel-2);
}
.pk-them-hang label { display: flex; flex-direction: column; gap: var(--k-1);
  flex: 1 1 24rem; font-size: var(--chu-sm); color: var(--muted); }
.pk-them-hang select { width: 100%; }
/*
 * O SO TRONG BANG DONG HANG.
 *
 * Rong co dinh 7rem va can PHAI: cot so lieu can thang mot duong doc, va mot o
 * nhap gian het be ngang cot lam bang phinh ra gap doi khi co nhieu dong.
 */
.pk-o {
  width: 7rem; text-align: right; font-variant-numeric: tabular-nums;
  padding: var(--k-1) var(--k-2);
}
/* Dong canh bao gia 0: no doi mot cai nhin, khong phai mot mau trang tri. */
.pk-canh { margin: var(--k-2) 0 0; }

/* ── THE TRANG THAI KET NOI SHOPEE ───────────────────────────────────────────
 *
 * Thu DUY NHAT chu shop can doc o man nay. Phan ky thuat nam trong mot khoi
 * gap lai ben duoi (`.kn-kythuat`).
 */
.kn-the {
  margin: var(--k-3) 0 var(--k-4); padding: var(--k-4) var(--k-5);
  border: 1px solid var(--line); border-radius: var(--r); background: var(--panel);
}
.kn-dau { display: flex; align-items: center; gap: var(--k-3); }
/* Neo theo VAI TRO, khong theo mot the don le: doi cap tieu de la quy tac
 * chet im lang — da mat chin quy tac vi dung loi nay. */
.kn-dau > :is(h1, h2, h3) { margin: 0; }
/* Cham trang thai — mau la mot DAU HIEU THU HAI, chu chinh van la cau tieu de:
 * DESIGN.md cam truyen tin chi bang mau. */
.kn-den {
  width: 12px; height: 12px; border-radius: 999px; flex: 0 0 auto;
  background: var(--muted);
}
.kn-den.on { background: var(--ok); }
.kn-den.sap { background: var(--warn); }
.kn-den.het, .kn-den.chua { background: var(--bad); }
.kn-noi { margin: var(--k-2) 0 0; color: var(--muted); max-width: 62ch; }
.kn-nut { display: flex; gap: var(--k-2); flex-wrap: wrap; margin-top: var(--k-3); }

.kn-kythuat {
  border: 1px solid var(--line); border-radius: var(--r);
  background: var(--panel-2); padding: 0 var(--k-4);
}
.kn-kythuat > summary {
  cursor: pointer; padding: var(--k-3) 0; font-weight: 600; color: var(--muted);
  /* Vung bam it nhat 24px chieu cao — WCAG 2.2 muc tieu con tro. */
  min-height: 24px;
}
.kn-kythuat[open] > summary { border-bottom: 1px solid var(--line); margin-bottom: var(--k-3); }
.kn-kythuat > :last-child { margin-bottom: var(--k-3); }

/* Dong hang trong ngan chi tiet phieu: MOT KHOI, khong phai mot hang bang.
 * Ngan rong 300px — bang bon cot o do bam ten mat hang ra moi tu mot dong. */
.pk-dsdong { list-style: none; margin: 0 0 var(--k-3); padding: 0; }
.pk-dsdong li {
  padding: var(--k-2) 0; border-bottom: 1px solid var(--line);
  display: flex; flex-direction: column; gap: var(--k-1);
}
.pk-dsdong li:last-child { border-bottom: 0; }
.pk-dsdong-ten { font-size: var(--chu-sm); }
.pk-dsdong-so { font-size: var(--chu-sm); color: var(--muted); font-variant-numeric: tabular-nums; }

/* ══ M9 · CHI TIET DON HANG — TAM KHOI ══════════════════════════════════════
 *
 * Trang nay DAI (tam khoi), nen thanh dau DINH: cuon xuong khoi thao tac rồi
 * mà không còn thấy mình đang ở đơn nào là một bước lạc mỗi lần.
 */
/*
 * DINH DUOI DAU TRANG, khong dinh o dinh khung nhin.
 *
 * Do that 20/08/2026: cuon xuong 41px thi thanh nay (z-index 20) de len dau
 * trang (z-index 5) va che mat 18px cuoi cua no — tuc che mot phan dai trang
 * thai buoi live, dung cai dai ton tai de chu shop khong bao gio mat dau no.
 *
 * `--dau` la chieu cao dau trang, va no CO HAI GIA TRI: dai live hien thi 3,25rem,
 * khong hien thi khoang 2rem. Quy tac `:root:has(...)` ngay duoi giu hai ben
 * khop nhau — mot con so go cung se dung mot trang thai va sai trang thai kia.
 */
.ct-dau {
  display: flex; align-items: center; gap: var(--k-3); flex-wrap: wrap;
  /*
   * `top` = dung `--dau`, KHONG cong them 1px.
   *
   * Ban cu cong 1px cho duong vien duoi cua dau trang. Nhung `* { box-sizing:
   * border-box }` nen vien nam BEN TRONG chieu cao 56px — mep duoi that su cua
   * dau trang la 56, khong phai 57. Cong them 1px de lai dung mot khe ho 1px,
   * va noi dung chay qua khe do khi cuon: dung cai "vet dut net" ma chu thich
   * cu dinh tranh, chi la o phia nguoc lai.
   * Do lai 20/08/2026: header.getBoundingClientRect().bottom === 56.
   */
  position: sticky; top: var(--dau); z-index: 30;
  padding: var(--k-3) 0; margin-bottom: var(--k-1);
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.ct-nut-dau { display: flex; gap: var(--k-2); }
/* Lien ket dong vai nut cam: giong het `button.primary` de mat khong phan biet. */
.ct-nut-dau a.primary, .ct-nut-dau a.ghost {
  display: inline-flex; align-items: center; text-decoration: none;
  padding: var(--k-2) var(--k-3); border-radius: var(--radius-md); font-size: var(--chu-sm); font-weight: 600;
  border: 1px solid var(--line);
}
.ct-nut-dau a.primary { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.ct-nut-dau a.ghost { background: var(--panel-2); color: var(--text); }

/* Han giao dem nguoc — ba muc, va MAU khong phai dau hieu duy nhat: chu doc
 * thang ra "quá hạn"/"còn", nen mu mau van doc duoc. */
.ct-han { font-size: var(--chu-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.ct-han.ct-han-gap { color: var(--warn-text); font-weight: 600; }
.ct-han.ct-han-qua { color: var(--bad-text); font-weight: 600; }

/* ② Dai canh bao — chi hien khi khach xin huy hoac tra hang. */
.ct-canhbao {
  display: flex; align-items: baseline; gap: var(--k-3); flex-wrap: wrap;
  padding: var(--k-3) var(--k-4); margin: var(--k-3) 0;
  border: 1px solid var(--bad); border-radius: var(--r);
  background: var(--bad-nen);
}
.ct-canhbao b { color: var(--bad-text); }

/* Hai cot: hang + tien + thao tac ben trai, nguoi nhan + giao van + hanh trinh
 * ben phai. Man hep thi xep doc — KHONG an cot nao. */
.ct-luoi { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: var(--k-4); align-items: start; }
@media (max-width: 1100px) { .ct-luoi { grid-template-columns: minmax(0, 1fr); } }
.ct-cot-trai, .ct-cot-phai { display: flex; flex-direction: column; gap: var(--k-4); min-width: 0; }
.ct-cot-phai :is(h1, h2, h3) { margin: 0 0 var(--k-3); font-size: var(--chu-base); }
.ct-cot-trai section :is(h1, h2) { margin: 0 0 var(--k-3); }

/* ③ Hang trong don — MOT KHOI mot dong, khong phai hang bang: ten hang dai va
 * cot hep thi bang bam chu ra tung tu (loi so 5 trong DESIGN.md). */
.ct-hang { list-style: none; margin: 0; padding: 0; }
.ct-hang li {
  display: flex; gap: var(--k-3); align-items: flex-start;
  padding: 10px 0; border-bottom: 1px solid var(--line);
}
.ct-hang li:last-child { border-bottom: 0; }
.ct-hang-anh { width: 48px; height: 48px; border-radius: var(--radius-sm); object-fit: cover; flex: 0 0 auto; }
.ct-hang-ten { display: flex; flex-direction: column; gap: 0; flex: 1 1 auto; min-width: 0; }
.ct-hang-ten b { font-weight: 600; overflow-wrap: anywhere; }
.ct-hang-ten .muted, .ct-hang-ten .ma-nho { font-size: var(--chu-xs); }
.ct-hang-von { font-size: var(--chu-xs); color: var(--muted); font-variant-numeric: tabular-nums; }
.ct-hang-so {
  display: flex; flex-direction: column; align-items: flex-end; gap: 0;
  flex: 0 0 auto; font-variant-numeric: tabular-nums; text-align: right;
}
.ct-hang-so span { font-size: var(--chu-sm); color: var(--muted); }

/* Bang tien — nhan trai, so phai, thang mot duong doc. */
.ct-tien { margin-top: var(--k-3); padding-top: var(--k-3); border-top: 1px solid var(--line); }
.ct-tien-hang {
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--k-4);
  padding: var(--k-1) 0; font-variant-numeric: tabular-nums;
}
/* `> span`, khong phai `span`: chip COD nam trong the `<b>` ben canh con so,
 * va mot bo chon con chau se de mau `--muted` len chinh chip do. */
.ct-tien-hang > span { color: var(--muted); font-size: var(--chu-sm); }
.ct-tien-dam b { font-size: var(--chu-lg); }
/* Nhom khoa gia von — vach ngang va o khoa noi ro day la phan co quyen. */
.ct-khoa { margin-top: var(--k-3); padding-top: var(--k-3); border-top: 1px dashed var(--line); }
.ct-khoa .hint { margin: var(--k-2) 0 0; }
.ct-lai b { font-size: var(--chu-base); }

/* ⑦ Bon nhom thao tac — nut vien manh, nhom co tieu de nho. */
.ct-thaotac {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: var(--k-4);
  padding: var(--k-4); border: 1px solid var(--line); border-radius: var(--r); background: var(--panel);
}
.ct-thaotac > div { display: flex; flex-direction: column; align-items: flex-start; gap: var(--k-2); }
.ct-thaotac :is(h2, h3) { margin: 0; font-size: var(--chu-sm); color: var(--muted); text-transform: uppercase;
  letter-spacing: .04em; }
.ct-thaotac a.ghost {
  display: inline-flex; align-items: center; text-decoration: none;
  padding: var(--k-2) var(--k-3); border: 1px solid var(--line); border-radius: var(--radius-md);
  background: var(--panel-2); color: var(--text); font-size: var(--chu-sm);
}

/* ④⑤ Hai dong nhan-gia-tri o cot phai. */
.ct-doi {
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--k-3);
  padding: var(--k-1) 0; border-bottom: 1px solid var(--line); font-size: var(--chu-sm);
}
.ct-doi:last-child { border-bottom: 0; }
.ct-doi span { color: var(--muted); }
.ct-sdt { display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap; }

/* ⑥ Hanh trinh — dong thoi gian doc, MOI NHAT TREN CUNG, hien san. */
.ct-hanhtrinh { list-style: none; margin: 0; padding: 0 0 0 var(--k-4); position: relative; }
.ct-hanhtrinh::before {
  content: ''; position: absolute; left: var(--k-1); top: var(--k-2); bottom: var(--k-2);
  width: 1px; background: var(--line);
}
.ct-hanhtrinh li { position: relative; padding: 6px 0; display: flex;
  flex-direction: column; gap: 0; }
.ct-hanhtrinh li::before {
  content: ''; position: absolute; left: -var(--k-4); top: var(--k-3);
  width: 9px; height: 9px; border-radius: 999px;
  background: var(--panel-3); border: 1px solid var(--line);
}
.ct-hanhtrinh li.dang::before { background: var(--accent); border-color: var(--accent); }
.ct-ht-chu { font-size: var(--chu-sm); }
.ct-ht-luc { font-size: var(--chu-xs); font-variant-numeric: tabular-nums; }

/* ⑧ Ba phan canh nhau, chay het be ngang. */
.ct-duoi { display: grid; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: var(--k-5); }
.ct-duoi p { margin: 0; }

/*
 * NUT KHOA TRONG KHOI THAO TAC PHAI MO HON NUT BAM DUOC.
 *
 * Do that 20/08/2026 tren anh chup: nut khoa dung `--panel-3` (sang hon) con
 * nut bam duoc dung `--panel-2` (toi hon), nen ba nut KHONG lam gi lai noi bat
 * hon bon nut lam duoc. Mat di thang vao thu khong bam duoc.
 */
.ct-thaotac button.ghost:disabled {
  background: transparent; border-style: dashed; color: var(--muted);
}
/* Chip COD tren dong "Khach tra" — cach con so ra, khong dinh vao chu so cuoi. */
.ct-tien-dam .vh-cod { margin-left: var(--k-2); vertical-align: 2px; }

/* Hai nut sua lech o man Doi chieu ton — xep ngang, khong xuong dong. */
.dc-nut { display: flex; gap: var(--k-1); flex-wrap: wrap; }

/* O nhap ton toi thieu — hep hon o nhap ton, va khong to mau: no la mot muc
 * chu shop dat, khong phai mot con so co the sai. */
.tk-o-nguong {
  width: 4.5rem; text-align: right; font-variant-numeric: tabular-nums;
  padding: var(--k-1) var(--k-1); font-size: var(--chu-sm);
}

/* Hai o ngay o man Doanh thu — canh bon moc, cung hang. */
.dt-tu { display: flex; align-items: center; gap: var(--k-1); font-size: var(--chu-sm); color: var(--muted); }
.dt-tu input { width: auto; }

/* O nhay trang — canh hai nut ‹ ›, hep vua du bon chu so. */
.vh-nhay { display: inline-flex; align-items: center; gap: var(--k-1); font-size: var(--chu-sm);
  color: var(--muted); margin-left: var(--k-2); }
.vh-nhay input { width: 4rem; text-align: center; padding: var(--k-1) var(--k-1);
  font-variant-numeric: tabular-nums; }

/* Ten mat hang dang xem o man The kho — duoi thanh dau, tren o chon. */
.tk2-ten { margin: 0 0 var(--k-3); font-size: var(--chu-base); font-weight: 600; }

/*
 * LIEN KET TRAN TRONG NOI DUNG — phai co mau cua he.
 *
 * ── DO THAT 20/08/2026 bang phep do tuong phan ────────────────────────────
 * `<a href="#/phieu-kho">Tạo phiếu nhập →</a>` trong khoi gia von cua man Chi
 * tiet don ra mau mac dinh cua trinh duyet `rgb(0,0,238)` — xanh tham tren nen
 * toi, do duoc **1,87:1**. No van o do, van bam duoc, chi la khong ai doc noi.
 *
 * `.ghost` va cac lop nut khac da co mau rieng nen khong bi. Cai bi la lien ket
 * viet tay giua mot cau — tuc dung cho de nguoi ta khong nghi toi viec dat mau.
 */
main a:not([class]), .hint a, .kn-noi a {
  color: var(--accent-text); text-underline-offset: 2px;
}
main a:not([class]):hover, .hint a:hover { color: var(--text); }

/* Ba the chon chat luong video — mo ta bang loi, khong con so ky thuat nao. */
.q-muc { display: grid; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
  gap: var(--k-2); margin: var(--k-3) 0 var(--k-4); }
.q-the {
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--k-1);
  padding: var(--k-3) var(--k-3); text-align: left;
  border: 1px solid var(--line); border-radius: var(--r);
  background: var(--panel-2); color: var(--text); cursor: pointer;
}
.q-the b { font-weight: 600; }
.q-the span { font-size: var(--chu-sm); color: var(--muted); }
/* Ban `.q-the.dang` CU DA GO 26/08/2026 — no dat `background: var(--accent-dim)`
 * (mot mang xam), va vi no HAI lop nen no thang ban mat the mot lop o cuoi tep.
 * Ket qua: o dang chon xam giua hai o trang, dung cai chu shop chi ra. Dau
 * hieu "dang chon" nay o DUY NHAT mot cho, cuoi tep: vien dam + bong. */
.q-the.dang b { color: var(--accent-text); }

/* O chon tren the video — goc trai tren anh bia, NGOAI vung bam "xem thu". */
.tv-the { position: relative; }
/*
 * KHONG CO O DEN SAU O DANH DAU.
 *
 * Chu shop 26/08/2026: "cái nút tick chọn ở video nó xấu quá, bỏ background đi".
 *
 * Cai nen `rgba(13,15,20,.55)` truoc day de o danh dau doc duoc tren mot anh
 * bia bat ky. Nhung o danh dau cua he nay (`checkbox.tsx`) DA co nen dac
 * (`--background`) va vien 1px — no tu doc duoc roi. Cai o den chi la mot lop
 * thu hai, va no bien mot o vuong 16px thanh mot mang toi 26px de len mat
 * nguoi trong anh bia.
 *
 * VUNG BAM 26px GIU NGUYEN — do la muc tieu con tro WCAG 2.2 (24x24 toi
 * thieu), khong phai trang tri. Chi bo phan NHIN THAY: `background:
 * transparent`. Vung bam khong can nhin thay moi bam duoc.
 */
.tv-chon {
  position: absolute; top: var(--k-2); left: var(--k-2); z-index: 10;
  display: flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: var(--radius-sm); margin: 0;
  background: transparent; cursor: pointer;
}
.tv-chon input { width: 16px; height: 16px; margin: 0; }
/* Thanh day cua Thu vien video: hai o chon nam giua cac nut, can co cho tho. */
#tv-thanh .vh-thanh-nut { gap: var(--k-2); align-items: center; }
#tv-thanh select { width: auto; min-width: 9rem; }

/* ── SUA GIA TAI CHO O MAN SAN PHAM ─────────────────────────────────────────
 *
 * Con so o trang thai xem la mot NUT, khong phai chu thuong: khong co gi bao
 * bam duoc thi khong ai bam. Vien hien khi re chuot, khong ve san — mot bang
 * hai tram dong ma dong nao cung co vien la mot bang day khung.
 */
.sp-gia-xem {
  background: transparent; border: 1px solid transparent; color: inherit;
  padding: var(--k-1) var(--k-1); border-radius: var(--radius-sm); font: inherit;
  font-variant-numeric: tabular-nums; cursor: pointer;
  /* Vung bam it nhat 24px chieu cao — WCAG 2.2. */
  min-height: 24px;
}
.sp-gia-xem:hover, .sp-gia-xem:focus-visible { border-color: var(--line); background: var(--panel-2); }
.sp-gia-sua { display: inline-flex; align-items: center; gap: var(--k-1); }
.sp-gia-nhap {
  width: 7rem; text-align: right; font-variant-numeric: tabular-nums;
  padding: var(--k-1) var(--k-1); margin: 0;
}

/* ── CHUYEN DA XAY RA (man Tinh trang) ──────────────────────────────────────
 *
 * Moi dong mot cau tieng Viet thuong, moi nhat tren cung. Muc canh bao doi
 * mau CHU (khong doi nen): mot danh sach ba muc nen khac nhau doc nhu ba khoi
 * roi rac, con day la mot dong thoi gian lien mach.
 */
.tt-chuyen-ds { list-style: none; margin: 0; padding: 0; }
.tt-chuyen-dong {
  /* 10rem vua khop MOT moc gio ("15:54 24/08/2026"), nhung lap nhieu lan thi
     cot nay in ca KHOANG ("15:54 24/08/2026 → 15:59") — dai hon 10rem, va vi
     `nowrap` ben duoi khong xuong dong nen no TRAN sang chu o cot ke, chong
     chu len nhau. 13rem + cho phep xuong dong la du cho ca hai truong hop. */
  display: grid; grid-template-columns: 13rem 1fr auto; gap: var(--k-3);
  align-items: baseline; padding: 6px 0; border-bottom: 1px solid var(--line);
  font-size: var(--chu-sm);
}
.tt-chuyen-dong:last-child { border-bottom: 0; }
.tt-chuyen-luc { color: var(--muted); font-variant-numeric: tabular-nums; }
.tt-chuyen-dong.warn .tt-chuyen-chu { color: var(--warn-text); font-weight: 600; }
.tt-chuyen-dong.error .tt-chuyen-chu { color: var(--bad-text); font-weight: 600; }
.tt-chuyen-dong .muted { font-size: var(--chu-sm); }
/* Man hep: bo cot gio ra dong rieng thay vi ep ba cot vao 320px. */
@media (max-width: 700px) {
  .tt-chuyen-dong { grid-template-columns: 1fr; gap: 0; }
}

/* So lan lap trong mot dong da gom — khong to mau, chi dam: no la mot con so
 * bo sung, khong phai mot muc canh bao thu hai. */
.tt-chuyen-lan { font-weight: 600; font-variant-numeric: tabular-nums; }
/* KHONG `nowrap`: neu khoang gio van dai hon 13rem (ten thang/nam dai hon du
   kien), xuong dong con hon la tran sang chu ben canh. */
.tt-chuyen-dong .tt-chuyen-luc { white-space: normal; word-break: keep-all; }

/*
 * ══════════════════════════════════════════════════════════════════════════
 * LOP KHOI — PORT NGUYEN VAN TU shadcn/ui v3
 * ══════════════════════════════════════════════════════════════════════════
 *
 * Moi so duoi day doc thang tu `nextjs-version/src/components/ui/*.tsx`.
 * Khong lam tron, khong noi rong. Yeu cau la "giong het" nen cho nao thay
 * chat hon ban cu thi van giu theo template.
 *
 * Lop nay dat CUOI TEP de thang cac quy tac cu o tren ma khong phai di xoa
 * chung — xoa 3.674 dong roi do lai tung man la cach chac chan de lam hong
 * mot cho khong ai thay.
 */

/* ── NUT — button.tsx ───────────────────────────────────────────────────────
 * cva goc: h-9 px-4 py-2 · text-sm font-medium · rounded-md · gap-2
 *          shadow-xs · [&_svg]:size-4 · focus-visible:ring-[3px]
 */
button, .file-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--k-2);
  height: 36px; padding: 0 var(--k-4);
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  font-family: inherit; font-size: var(--chu-sm); font-weight: 500;
  line-height: var(--dong-sm);
  white-space: nowrap; cursor: pointer;
  background: transparent; color: var(--foreground);
  box-shadow: none;
  transition: background-color .15s, color .15s, box-shadow .15s, border-color .15s;
}
button > svg, .file-btn > svg { width: 16px; height: 16px; flex-shrink: 0; pointer-events: none; }

/* Bo `filter: brightness()` cu — template doi mau nen that, khong lam sang ca
 * khoi. Loc sang lam nhoe ca chu ben trong nut. */
button:hover:not(:disabled), .file-btn:hover { filter: none; }

/* mac dinh (khong lop) = bien the `ghost` */
button:hover:not(:disabled):not(.primary):not(.ghost):not(.danger) {
  background: var(--accent-bg); color: var(--accent-foreground);
}

button.primary, .file-btn {
  background: var(--primary); color: var(--primary-foreground);
  box-shadow: var(--bong-xs);
}
button.primary:hover:not(:disabled), .file-btn:hover {
  background: color-mix(in oklch, var(--primary) 90%, transparent);
}

/* `.ghost` cua app co vien -> ung voi bien the `outline` cua template */
button.ghost {
  background: var(--background); color: var(--foreground);
  border-color: var(--border); box-shadow: var(--bong-xs);
}
button.ghost:hover:not(:disabled) {
  background: var(--accent-bg); color: var(--accent-foreground);
}

button.danger {
  /* `--on-bad` chu khong `#fff`: mot ma mau tuyet doi khong doi theo che do,
   * va bang mau da co bien rieng cho "chu tren nen do". */
  background: var(--destructive); color: var(--on-bad); box-shadow: var(--bong-xs);
  border-color: transparent;
}
button.danger:hover:not(:disabled) {
  background: color-mix(in oklch, var(--destructive) 90%, transparent);
}

button.sm  { height: 32px; padding: 0 var(--k-3); gap: var(--k-1); font-size: var(--chu-sm); }
button.big { height: 40px; padding: 0 var(--k-6); font-size: var(--chu-sm); }

button:focus-visible, .file-btn:focus-visible {
  outline: none; border-color: var(--ring);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
}

button:disabled, .file-btn:disabled {
  pointer-events: none; opacity: .5;
  background: var(--secondary); color: var(--muted-foreground);
  border-color: transparent; box-shadow: none; cursor: not-allowed;
}
.file-btn { display: inline-flex; }

/* ── O NHAP — input.tsx ────────────────────────────────────────────────────
 * h-9 px-3 py-1 rounded-md border-input shadow-xs, va:
 * `text-base md:text-sm` — 16px tren dien thoai de iOS KHONG tu phong to trang,
 * 14px tu 768px tro len. Bo mot trong hai la hong mot trong hai loai may.
 */
input, select, textarea {
  display: block; width: 100%; margin-top: var(--k-1);
  min-height: 36px; padding: var(--k-1) var(--k-3);
  background: transparent; color: var(--foreground);
  border: 1px solid var(--input); border-radius: var(--radius-md);
  box-shadow: var(--bong-xs);
  font-family: inherit; font-size: var(--chu-base); line-height: var(--dong-sm);
  transition: color .15s, box-shadow .15s, border-color .15s;
}
@media (min-width: 768px) { input, select, textarea { font-size: var(--chu-sm); } }
textarea { min-height: 60px; padding: var(--k-2) var(--k-3); }
input::placeholder, textarea::placeholder { color: var(--muted-foreground); }
input:hover, select:hover, textarea:hover { border-color: var(--input); }
input:focus, select:focus, textarea:focus {
  outline: none; border-color: var(--ring);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
}
input[aria-invalid="true"], select[aria-invalid="true"], textarea[aria-invalid="true"] {
  border-color: var(--destructive);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--destructive) 20%, transparent);
}
input:disabled, select:disabled, textarea:disabled {
  pointer-events: none; opacity: .5; cursor: not-allowed;
}

label {
  display: block; margin: 0 0 var(--k-2);
  font-size: var(--chu-sm); line-height: var(--dong-sm); font-weight: 500;
  color: var(--foreground);
}

/* ── THE — card.tsx ────────────────────────────────────────────────────────
 * `flex flex-col gap-6 rounded-xl border py-6 shadow-sm`, cac phan `px-6`.
 */
/* `--bong-xs` — cung ly do voi `.tile`, xem chu thich o do. */
.card {
  display: flex; flex-direction: column; gap: var(--k-6);
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  padding: var(--k-6); box-shadow: var(--bong-xs);
}

/* ── BANG — table.tsx ──────────────────────────────────────────────────────
 * TableHead: `h-10 px-2 text-left align-middle font-medium text-muted-foreground`
 * TableCell: `p-2 align-middle`
 * Ca hai o `text-sm`.
 */
table {
  width: 100%; border-collapse: collapse;
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  overflow: hidden; font-size: var(--chu-sm); line-height: var(--dong-sm);
}
th {
  height: 40px; padding: 0 var(--k-2);
  text-align: left; vertical-align: middle;
  font-weight: 500; font-size: var(--chu-sm);
  color: var(--muted-foreground); background: var(--muted-bg);
  border-bottom: 1px solid var(--border);
}
td {
  padding: var(--k-2); vertical-align: middle;
  border-bottom: 1px solid var(--border);
}
tbody tr:last-child td { border-bottom: none; }
tbody tr { transition: background-color .15s; }
tbody tr:hover { background: color-mix(in oklch, var(--muted-bg) 50%, transparent); }
td.right, th.right { text-align: right; font-variant-numeric: tabular-nums; }

/* ── HUY HIEU / CHIP — badge.tsx ───────────────────────────────────────────
 * `px-2 py-0.5 text-xs font-medium rounded-md border gap-1 [&>svg]:size-3`
 * KHONG co chieu cao co dinh — cao tu nhien ~22px.
 */
.chip, .badge, .the-nhan {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--k-1); width: fit-content;
  padding: 2px var(--k-2);
  border: 1px solid transparent; border-radius: var(--radius-md);
  font-size: var(--chu-xs); line-height: var(--dong-xs); font-weight: 500;
  white-space: nowrap; overflow: hidden;
}
.chip > svg, .badge > svg { width: 12px; height: 12px; }
.chip.vien, .badge.vien { border-color: var(--border); color: var(--foreground); background: transparent; }

/* ── TIEU DE — dung thang chu, khong dat co le ────────────────────────────*/
/*
 * DAT LAI CA SAU CAP.
 *
 * Ban cu chi dat `h1, h2, h3 { margin: 0 }`. `h4` giu nguyen le mac dinh cua
 * trinh duyet — `1.33em` = 21,28px, lech luoi 4pt — va no khong nam trong
 * `style.css` nen moi phep quy ve thang deu khong thay. Do that tren man
 * "Cau hinh giao van".
 */
h1, h2, h3, h4, h5, h6 { margin: 0; }
h1 { font-size: var(--chu-2xl); line-height: var(--dong-2xl); font-weight: 700; letter-spacing: -.025em; }
h2 { font-size: var(--chu-lg); line-height: var(--dong-lg); font-weight: 600; }
h3 { font-size: var(--chu-base); line-height: var(--dong-base); font-weight: 600; }
h4 { font-size: var(--chu-sm); line-height: var(--dong-sm); font-weight: 600; }
h5, h6 { font-size: var(--chu-sm); line-height: var(--dong-sm); font-weight: 500; }
.muted { color: var(--muted-foreground); font-size: var(--chu-sm); line-height: var(--dong-sm); }

/* Chu so trong bang va the so lieu phai deu be ngang, khong thi so nhay khi
 * cap nhat theo thoi gian thuc. */
table td, table th, .kpi-o b, .so-lon { font-variant-numeric: tabular-nums; }

/* ── KHUNG NGOAI — theo dung so cua template ───────────────────────────────
 * thanh ben  16rem = 256px   (sidebar.tsx: SIDEBAR_WIDTH = "16rem")
 * dau trang  56px            (layout.tsx: --header-height = spacing*14 = 4*14)
 *
 * Dau trang GIU NGUYEN 56px o moi trang thai. Truoc day no tu co lai con
 * 2.4rem khi khong co phien nao chay — template khong lam vay, va chinh cai
 * co-gian do la nguyen nhan phai vay `.ct-dau` bang `top: calc(var(--dau)+1px)`.
 */
:root, :root:has(#nav-live[hidden]) { --rail: 16rem; --dau: 56px; }

.rail {
  background: var(--sidebar); color: var(--sidebar-foreground);
  border-right: 1px solid var(--sidebar-border);
  padding: var(--k-2);
  gap: var(--k-1);
}

header, header:not(:has(.nav-live:not([hidden]))) {
  height: var(--dau); min-height: var(--dau);
  padding: 0 var(--k-4);
  gap: var(--k-2);
  background: var(--background);
  border-bottom: 1px solid var(--border);
}
@media (min-width: 1024px) { header { padding: 0 var(--k-6); gap: var(--k-2); } }

/* Muc dieu huong — sidebar-menu-button cua template:
 * `h-8 rounded-md px-2 text-sm gap-2`, dang chon thi nen `--sidebar-accent`. */
.rail .tab, .rail .tab-con {
  display: flex; align-items: center; gap: var(--k-2);
  width: 100%; height: 32px; padding: 0 var(--k-2);
  border-radius: var(--radius-md); border: 0;
  background: transparent; color: var(--sidebar-foreground);
  font-size: var(--chu-sm); font-weight: 400; text-align: left;
  justify-content: flex-start;
}
.rail .tab:hover:not(:disabled), .rail .tab-con:hover:not(:disabled) {
  background: var(--sidebar-accent); color: var(--sidebar-accent-foreground);
}
.rail .tab.active, .rail .tab-con.active {
  background: var(--sidebar-accent); color: var(--sidebar-accent-foreground);
  font-weight: 500;
}
.rail .tab > svg { width: 16px; height: 16px; }

/* Nhan nhom — template: `text-xs text-sidebar-foreground/70 px-2 h-8` */
.rail-nhom {
  display: flex; align-items: center; height: 32px; padding: 0 var(--k-2);
  font-size: var(--chu-xs); line-height: var(--dong-xs); font-weight: 500;
  color: color-mix(in oklch, var(--sidebar-foreground) 70%, transparent);
}
.rail-con { padding-left: var(--k-4); display: flex; flex-direction: column; gap: 0; }

/* ── DAU THANH BEN — theo khuon cua template ──────────────────────────────
 * Template: bieu tuong trong o vuong bo goc, roi hai dong chu xep doc
 * ("ShadcnStore" / "Admin Dashboard"). Ben minh la ten phan mem / ten shop.
 */
.brand {
  display: flex; align-items: center; gap: var(--k-2);
  height: 48px; padding: 0 var(--k-2); margin-bottom: var(--k-2);
  font-weight: 400; letter-spacing: normal; color: var(--sidebar-foreground);
}
.brand svg { color: var(--sidebar-foreground); flex: none; }
.brand-chu { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.brand-ten { font-size: var(--chu-sm); font-weight: 600; letter-spacing: -.01em; }
.rail-shop {
  padding: 0; margin: 0;
  font-size: var(--chu-xs); line-height: var(--dong-xs); color: var(--muted-foreground);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rail-shop:empty { display: none; }

/* ── TRAI DAU TRANG — site-header.tsx ─────────────────────────────────────
 * `SidebarTrigger` (nut vuong 28px) · `Separator` doc cao 16px · o tim
 * `flex-1 max-w-sm` (max-w-sm = 24rem = 384px).
 */
.dau-nut {
  height: 28px; width: 28px; padding: 0; flex: none;
  background: transparent; border-color: transparent; box-shadow: none;
  color: var(--foreground);
}
.dau-nut:hover:not(:disabled) { background: var(--accent-bg); }
.dau-vach { width: 1px; height: 16px; background: var(--border); flex: none; margin: 0 var(--k-1); }

.dau-tim { position: relative; flex: 1 1 auto; max-width: 384px; min-width: 0; }
.dau-tim-kinh {
  position: absolute; left: var(--k-2); top: 50%; transform: translateY(-50%);
  color: var(--muted-foreground); pointer-events: none;
}
.dau-tim input[type="search"] {
  margin: 0; height: 32px; min-height: 32px;
  padding: 0 40px 0 var(--k-8);
  font-size: var(--chu-sm);
  background: var(--background);
}
.dau-tim input[type="search"]::-webkit-search-cancel-button { display: none; }
.dau-phim {
  position: absolute; right: var(--k-2); top: 50%; transform: translateY(-50%);
  pointer-events: none; font-family: inherit;
  font-size: var(--chu-xs); line-height: 1; color: var(--muted-foreground);
  background: var(--muted-bg); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: var(--k-1) var(--k-1);
}
/* Ket qua tim — khuon popover cua template: nen `--popover`, bo `--radius-md`,
 * bong `--bong-md`, vien 1px. */
.dau-tim-ra {
  position: absolute; z-index: 40; top: calc(100% + 6px); left: 0; right: 0;
  margin: 0; padding: var(--k-1); list-style: none; max-height: 320px; overflow-y: auto;
  background: var(--popover); color: var(--popover-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-md);
  box-shadow: var(--bong-md);
}
.dau-tim-ra li { margin: 0; }
.dau-tim-ra button {
  width: 100%; height: 32px; justify-content: flex-start; gap: var(--k-2);
  padding: 0 var(--k-2); font-weight: 400; border-radius: var(--radius-sm);
}
.dau-tim-ra button:hover, .dau-tim-ra button.chon {
  background: var(--accent-bg); color: var(--accent-foreground);
}
.dau-tim-ra .nhom { color: var(--muted-foreground); font-size: var(--chu-xs); }

/* Thu gon thanh ben — template thu ve 3rem (chi con bieu tuong). */
:root:has(#app.rail-gon) { --rail: 3rem; }
#app.rail-gon .rail { padding: var(--k-2) 6px; overflow: hidden; }
#app.rail-gon .rail .tab span:not(.cham),
#app.rail-gon .rail .tab-con,
#app.rail-gon .rail-nhom,
#app.rail-gon .brand-chu,
#app.rail-gon .rail-chan select,
#app.rail-gon .rail-chan .gd-nut,
#app.rail-gon .rail-ai .muted { display: none; }
#app.rail-gon .rail .tab { justify-content: center; padding: 0; }
#app.rail-gon .brand { justify-content: center; padding: 0; }
@media (max-width: 900px) { :root:has(#app.rail-gon) { --rail: 16rem; } }

/* ── THE SO LIEU — section-cards.tsx ──────────────────────────────────────
 * The: `rounded-xl border py-6 shadow-sm flex flex-col gap-6`, phan trong `px-6`.
 * Dau the la LUOI 2 cot x 2 hang; huy hieu o `col-start-2 row-span-2 self-start
 * justify-self-end` — goc tren phai, ngang hang dong mo ta.
 * Con so: `text-2xl font-semibold tabular-nums`, no len 3xl khi the du rong
 * (`@[250px]/card:text-3xl`) — do la truy van theo KHOI CHUA, khong theo man hinh.
 */
/* BAN RIENG CUA `.tiles` DA GO (26/08/2026). No dat `grid-template-columns:
 * repeat(auto-fit, minmax(220px, 1fr))` — nghia la khi vung noi dung rong hon
 * tong be rong toi thieu cua so the, luoi CHI tao du cot cho so the do roi de
 * TRONG phan con lai ben phai. Do that o /tinh-trang: bon the dinh nhau ben
 * trai, 672px trong ben phai tren man 1601px. Khuon hang the chi con MOT ban,
 * o cuoi tep (`.tiles, .dem-luoi, .cvd-dem, .tt-grid`), dung
 * `grid-auto-flow: column` nen so the bao nhieu cung lap day het be ngang.
 * Xem chot `test/the-so-lieu.test.js`. */
/* `#d-bangchung` (bon o Bang chung: Binh luan nhan/Da tra loi/Tre trung
 * binh/Lan quet canh cao) luon dung DUNG bon o, khong bao gio it hon —
 * khac voi `.tiles` o cac man khac (Bang dieu hanh, Phien phat) co so o
 * THAY DOI theo du lieu. Dung `auto-fit` o day thi trong khung hep (mo
 * trong mot bang chi tiet phien, khong het chieu ngang trang), ba o vua
 * mot hang roi o thu tu mo coi mot minh voi hai cot trong ben canh — dung
 * cai loi auto-fit vua sua o `.tiles` chung, chi khac la o day so o KHONG
 * bao gio đổi nen chot cung luon an toan. */
#d-bangchung .tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 720px) { #d-bangchung .tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/*
 * DO THAT 25/08/2026 (chu shop tu bao "the qua cao qua trong" o Bang dieu hanh
 * VA Phien phat): `padding`/`gap` o day dat theo khuon shadcn goc (`p-6`, gap
 * 6) — dung khi the DU CA BON phan (`.tile-dau` + `.tile-xu` + hai dong
 * `.tile-chan`). Nhung phan lon the that su chi co `.tile-dau` (mot nhan +
 * mot con so, vi du "phien dang phat"): do JS tren #tiles (Phien phat) —
 * `padding: 24px, gap: 24px`, cao 110-122px cho dung hai dong chu. Khoang
 * trong do KHONG phai loi day (`.tile-dau` gon), ma la padding/gap co dinh
 * qua lon so voi noi dung it.
 *
 * Ha ca hai xuong mot nac — the du bon phan van doc duoc thoai mai, the it
 * phan thi khong con phinh rong nua.
 */
/*
 * DO BONG: `--bong-xs` chu KHONG `--bong-sm` — doi chieu MA NGUON template
 * shadcn ngay 25/08/2026 (chu shop chi ra dung template dang lam theo).
 *
 * Template dat `shadow-xs` = `0 1px 2px 0 rgb(0 0 0/.05)` cho the thong ke
 * (luoi ghi de o do dam dac (0,2,0), thang ca `shadow-sm` cua chinh Card).
 * Ban minh dung `--bong-sm` = `0 1px 3px .1, 0 1px 2px -1px .1` — dam gap
 * DOI ca ve do mo lan ban kinh.
 *
 * Bao cao doi chieu ghi ro: "do cao gan nhu vo hinh — mot cai bong 5% day
 * 2px va mot vien 1px. DO BONG NANG LA CACH PHO BIEN NHAT KHIEN MOT BAN SAO
 * TRONG XAU HON BAN GOC."
 */
.tile {
  container-type: inline-size;
  display: flex; flex-direction: column; gap: var(--k-3);
  padding: var(--k-4);
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs);
}
.tile-dau {
  display: grid; grid-template-rows: auto auto; align-items: start;
  gap: var(--k-1); min-width: 0;
}
.tile-dau:has(.tile-xu) { grid-template-columns: 1fr auto; }
.tile-mota {
  grid-column: 1; font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground);
}
.tile b {
  grid-column: 1; font-size: var(--chu-2xl); line-height: var(--dong-2xl);
  font-weight: 600; letter-spacing: -.01em; font-variant-numeric: tabular-nums;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@container (min-width: 250px) { .tile b { font-size: var(--chu-3xl); line-height: var(--dong-3xl); } }
.tile-xu { grid-column: 2; grid-row: 1 / span 2; align-self: start; justify-self: end; }
.tile-chan {
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--k-1);
  font-size: var(--chu-sm); line-height: var(--dong-sm);
}
.tile-chinh { font-weight: 500; color: var(--foreground); }
.tile-phu {
  display: block; font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground); opacity: 1;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
/*
 * Dong phu trong the o /tinh-trang duoc XUONG DONG.
 *
 * DO THAT 26/08/2026: the "Chạy liên tục" in ra "không khởi động lại lần …"
 * — cat mat chu cuoi cung, tuc cat mat chinh y nghia cua cau ("lần nào").
 * `white-space: nowrap` dung cho the SO LIEU (mot cum ngan, cat di van doan
 * duoc); cac the o day mang mot CAU, va mot cau bi cat la mot cau khac.
 * `grid-auto-rows: 1fr` van giu bon o cao bang nhau khi mot o xuong hai dong.
 */
#tt-tong .tile-phu, .tt-grid .tile-phu {
  white-space: normal; overflow: visible; text-overflow: clip;
}
/* Cho XUONG DONG thay vi cat "..." giua cau — cat mat chu "so lieu" (vi du) thi
   nguoi doc khong biet minh vua mat thong tin gi. Toi da 2 dong la du cho ly do
   dai nhat da thay ("Shop chinh: mat nhip N giay — so lieu doanh thu co the tre").
   Chi danh cho o "Can chu y" — cac o .tile-phu khac (the mockup video, cac o
   "Dang xem"/"Doanh thu") luon la chu ngan, khong can xuong dong. */
.tile-phu-dai {
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  white-space: normal; text-overflow: clip;
}
.tile span { font-size: var(--chu-sm); color: var(--muted-foreground); }
button.tile { text-align: left; cursor: pointer; height: auto; align-items: stretch; }
button.tile:hover:not(:disabled) { background: var(--card); }
.tile.live b { color: var(--ok-text); }
.tile.alert b { color: var(--bad-text); }

/* Con so trong the so lieu de MAU CHU THUONG, giong template — no khong to mau
 * theo nghia. Mau chi danh cho hai trang thai that su khac: dang phat, va loi. */
.tile.tien b { color: var(--foreground); }

/* ── KHOI NGUOI DUNG — nav-user.tsx ───────────────────────────────────────
 * Nut: cao 48px, o vuong 32px bo `rounded-lg`, hai dong chu, ba cham `ml-auto`.
 * Trinh don: `min-w-56` (224px), `rounded-lg`, bong `--bong-md`.
 */
.nd-khoi { position: relative; margin-top: auto; padding-top: var(--k-2); }
.nd-nut {
  display: flex; align-items: center; gap: var(--k-2);
  width: 100%; height: 48px; padding: 0 var(--k-2);
  border-radius: var(--radius-md); border: 0;
  background: transparent; color: var(--sidebar-foreground);
  text-align: left; justify-content: flex-start;
}
.nd-nut:hover:not(:disabled), .nd-nut[aria-expanded="true"] {
  background: var(--sidebar-accent); color: var(--sidebar-accent-foreground);
}
.nd-anh {
  display: flex; align-items: center; justify-content: center; flex: none;
  width: 32px; height: 32px; border-radius: var(--radius-lg);
  background: var(--muted-bg); color: var(--muted-foreground);
  font-size: var(--chu-xs); font-weight: 600; letter-spacing: .02em;
}
.nd-chu { display: grid; flex: 1; min-width: 0; text-align: left; line-height: 1.25; }
.nd-ten {
  font-size: var(--chu-sm); font-weight: 500;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.nd-phu {
  font-size: var(--chu-xs); color: var(--muted-foreground);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.nd-ba { margin-left: auto; flex: none; opacity: .7; }
.nd-nut .dot { flex: none; }

.nd-menu {
  position: absolute; z-index: 40; bottom: calc(100% + 6px); left: 0;
  min-width: 224px; width: 100%;
  display: flex; flex-direction: column; gap: 0; padding: var(--k-1);
  background: var(--popover); color: var(--popover-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: var(--bong-md);
}
.nd-menu button, .nd-menu select {
  width: 100%; height: 32px; margin: 0;
  justify-content: flex-start; text-align: left;
  padding: 0 var(--k-2); border-radius: var(--radius-sm);
  background: transparent; border-color: transparent; box-shadow: none;
  font-size: var(--chu-sm); font-weight: 400; color: var(--popover-foreground);
}
.nd-menu button:hover:not(:disabled) {
  background: var(--accent-bg); color: var(--accent-foreground);
}
.nd-menu select { border: 1px solid var(--border); }
.nd-vach { height: 1px; margin: var(--k-1) 0; background: var(--border); }

/* Thu gon thanh ben: khoi nguoi dung chi con o vuong chu cai. */
#app.rail-gon .nd-chu, #app.rail-gon .nd-ba { display: none; }
#app.rail-gon .nd-nut { justify-content: center; padding: 0; }
#app.rail-gon .nd-menu { left: 0; min-width: 224px; width: 224px; }

/* O day tung co "luoi the so lieu dung cot CO DINH theo diem ngat" (1/2/4 cot),
 * doi vi ban `.tiles` o tren dung `auto-fit` de cai thu 5 (Bang dieu hanh) co
 * lai mo coi. Nhung cot co dinh lai hong nguoc: bat ky man nao dung `.tiles`
 * VOI DUOI 4 the (Phien phat: 2-3 the tuy du lieu, Bang chung: co the it hon
 * 4) deu thua het mot cot trong ben phai — dung loi Chu shop bao 24/08 ("3
 * card thua phan ben phai"). Va cai o dinh do dinh sua la Bang dieu hanh gio
 * co `#dh-tomtat` (ID, luon thang du man nao) tu lo rieng — nen `.tiles`
 * chung quay lai `auto-fit`: N the thi N cot, khong bao gio thua o trong,
 * mien tat ca con nam TRONG MOT hang (dung voi moi so luong the thuc te tren
 * cac man con lai). */

/* ── DAU TRANG LUC DANG PHAT: DAI TRANG THAI THANG, O TIM NHUONG ───────────
 *
 * ── DO THAT 20/08/2026, bang cach dung dai trang thai len roi chup ─────────
 * Moi anh chup truoc do deu o trang thai KHONG co phien nao chay, nen ca dai
 * 56px chi co nut thu gon + o tim + nut "Gon" — rong thenh thang.
 *
 * Bat dai trang thai len thi vo: o tim (`flex: 1 1 auto`, toi 384px) an het
 * cho, ten phien bi CAT CUT ngay chu dau ("_ive AI") chu khong kip hien dau ba
 * cham. Va `header.scrollWidth === clientWidth` nen phep do tran khong bat duoc
 * — no khong tran, no bi nen.
 *
 * Luat: dang phat thi dai trang thai thang. Tim mot man hinh la viec cho luc
 * ranh; biet buoi live dang the nao la viec cho luc gap.
 */
header:has(#nav-live:not([hidden])) .dau-tim { flex: 0 1 240px; max-width: 240px; }
@media (max-width: 1240px) {
  header:has(#nav-live:not([hidden])) .dau-tim { display: none; }
}
/* Cho dai co lai duoc, va cat ten bang dau ba cham chu khong cat cut. */
.nav-live { min-width: 0; flex: 0 1 auto; flex-wrap: nowrap; }
.nav-live .nl-ten { min-width: 4rem; flex: 0 1 auto; }

/* ── NUT TU CAT CHU BANG BA CHAM PHAI LA KHOI, KHONG PHAI FLEX CANH GIUA ───
 *
 * ── DO THAT 20/08/2026 ────────────────────────────────────────────────────
 * Lop nut moi (theo `button.tsx`) dat `display: inline-flex; justify-content:
 * center`. Voi nut TU cat chu cua no bang `text-overflow: ellipsis`, hai thu
 * do triet tieu nhau: hop flex canh giua phan chu tran nen no bi xen CA HAI
 * DAU, va dau ba cham khong bao gio hien.
 *
 * Thay bang: ten phien "Live AI — Do so sinh chinh hang" hien thanh
 * "_ive AI — Do so sinh chinh han_" — mat chu dau, va khong co dau hieu nao
 * cho biet chu da bi cat.
 *
 * `display: block` tra `text-overflow` ve dung viec cua no.
 */
.nav-live .nl-ten {
  display: block; text-align: left; justify-content: flex-start;
  height: auto; padding: 2px var(--k-1); border-radius: var(--radius-sm);
}
.dp-kiem a, .dp-kiem button { justify-content: center; }
.nn-ten { text-align: left; }

/* Truoc co mot bo luat "luoi sau cot" o day cho `.tiles:has(.tile.lon)`
 * (hai o khan chiem 3, ba o thuong chiem 2). Nhung `.lon` chi bao gio xuat
 * hien trong `#dh-tomtat` (Bang dieu hanh), va bo chon ID cua man do
 * (`#dh-tomtat .tile { grid-column: auto }`, xem duoi) luon thang bo chon
 * lop nay du man hinh rong hay hep — nen ca bo luat sau cot khong bao gio
 * co hieu luc, chi la mot ban thiet ke chet nam lan trong file. Bo han,
 * dung sua tiep no: luat that su nam o `#dh-tomtat`.*/

/* ── MUC DIEU HUONG: BO GACH DOC BEN TRAI ─────────────────────────────────
 * Template danh dau muc dang chon bang NEN (`bg-sidebar-accent`) + chu dam
 * hon, khong co vach doc nao. Ban cu ve `inset 2px 0 0 var(--accent)` — hoi
 * cam thi vach do la mau thuong hieu, doi sang bang mau trung tinh thi no
 * thanh mot vet den vo nghia.
 */
.rail .tab, .rail .tab.active, .rail .tab-con, .rail .tab-con.active { box-shadow: none; }

/* ── THANH TAB — tabs.tsx ─────────────────────────────────────────────────
 * Template la NUT GAT (segmented control), khong phai hang chu gach chan:
 *   TabsList    `bg-muted h-9 rounded-lg p-[3px] inline-flex w-fit`
 *   TabsTrigger `rounded-md px-2 py-1 text-sm`, dang chon thi
 *               `bg-background shadow-sm` — noi len tren nen mo.
 */
/*
 * `.dt-moc` DUNG CHUNG LUAT NAY, khong co ban thu hai.
 *
 * ── DO THAT 26/08/2026 tren /#/doanh-thu ─────────────────────────────────
 * Chu shop: hang cong cu "bị lệch hẳn với nhau, trông xấu quá". Do bang
 * devtools:
 *
 *     button.vh-tab-nut  cao 30px, dinh o y=87
 *     input#dt-tu        cao 36px, dinh o y=80
 *     button "Tai lai"   cao 36px, dinh o y=80
 *
 * 30px la chieu cao DUNG cua mot `TabsTrigger` — nhung chi khi no nam trong
 * mot `TabsList` cao 36px co dem 3px. `#dt-moc` chi la `display:flex; gap:4px`
 * — mot cai vo rong — nen bon nut do dung TRAN o 30px canh nhung o cao 36px.
 *
 * Tuc day khong phai "loi cua .dt-moc": no la mot NUT GAT thieu mat cai
 * khay. Cho no dung chung khay voi `.vh-tab` la het — va khong sinh them mot
 * ban luat thu hai de sau nay lech tiep (CLAUDE.md §3).
 */
/*
 * `.sp-chip` (dai loc o /#/san-pham) THEM VAO 27/08/2026.
 *
 * Do that: `.sp-chip` la mot hop flex tran — nen mac `background: transparent`,
 * `padding: 0`, cao 30px — trong khi ba dai kia deu co khay 36px. Dung cai loi
 * da sua cho `.dt-moc` hom truoc, o mot cho thu tu ma ban va do khong phu.
 *
 * Chu thich cua ban va do co viet "`.dt-moc` DUNG CHUNG LUAT NAY, khong co ban
 * thu hai" — nhung `.sp-chip` la ban thu BA, va no khong nam trong danh sach.
 * CLAUDE.md muc 3: dat ten cho luat roi CHIEU VAO TEN DO, dung nho bang tay.
 */
.vh-tab, .v-tab, .bh-tab, .dt-moc, .sp-chip {
  display: inline-flex; align-items: center; justify-content: center;
  width: fit-content; max-width: 100%; flex-wrap: wrap;
  height: auto; min-height: 36px; padding: 2px; gap: 0;
  margin: 0 0 var(--k-4);
  background: var(--muted-bg); color: var(--muted-foreground);
  border: 0; border-radius: var(--radius-lg);
}
/* Trong mot HANG CONG CU thi khay khong duoc mang le duoi — `.toolbar` da
 * co `gap` rieng, mot cai margin 16px o day day no lech khoi hang. */
.toolbar .vh-tab, .toolbar .v-tab, .toolbar .bh-tab, .toolbar .dt-moc,
.toolbar .sp-chip { margin: 0; }
/*
 * ── LE DOC CUA MOT O TRONG HANG CONG CU PHAI BANG 0 ──────────────────────
 *
 * DO THAT 26/08/2026 tren /#/doanh-thu, SAU khi da sua `.dt-moc` thanh khay
 * 36px. Bon nut moc va nut "Tải lại" da thang hang (dinh y=84), nhung hai o
 * ngay va VAN cao hon 4px (dinh y=80):
 *
 *     div.dt-moc     cao 36  le 0px          -> dinh 84
 *     label.dt-tu    cao 36  le 0 0 8px      -> dinh 80
 *     button "Tải lại" cao 36  le 0px        -> dinh 84
 *
 * Ba o CUNG cao 36px ma khong cung dinh, vi `.toolbar` co
 * `align-items: center` va phep can giua cua flex tinh tren HOP LE (margin
 * box), khong phai hop noi dung: 36+8 = 44, can giua 44 thi noi dung tut len
 * 4px. Cai le 8px do den tu luat CHUNG `label { margin: 0 0 var(--k-2) }` —
 * dung cho mot nhan trong bieu mau, sai cho mot nhan lam o trong hang ngang.
 *
 * Day dung la benh da duoc ghi o `.tiles > .tile { margin-block: 0 }` (xem
 * chu thich o do): "le doc cua mot o luoi/hang phai bang 0, neu khong 'cung
 * hang thang nhau' im lang hong". Cung mot luat, mot cho khac — nen chan o
 * day cho MOI nhan trong moi hang cong cu, khong chi cho `.dt-tu`.
 */
.toolbar label, .add-row label, .vh-thanh-nut label { margin-bottom: 0; }
.vh-tab-nut, .v-tab-nut, .bh-tab-nut {
  height: 30px; padding: 0 var(--k-2); border: 0; border-radius: var(--radius-md);
  background: transparent; color: var(--muted-foreground);
  font-size: var(--chu-sm); font-weight: 500; box-shadow: none;
}
.vh-tab-nut:hover:not(:disabled), .v-tab-nut:hover:not(:disabled) {
  background: transparent; color: var(--foreground);
}
.vh-tab-nut.dang, .v-tab-nut.dang, .bh-tab-nut.dang {
  background: var(--background); color: var(--foreground);
  box-shadow: var(--bong-sm); border-bottom-color: transparent;
}

/* O tim o dau trang: dem phai chua chu "⌘K", dem trai chua kinh lup.
 * Hai so nay phai nam tren luoi — 48 va 32, khong phai 44 va 32. */
.dau-tim input[type="search"] { padding: 0 var(--k-12) 0 var(--k-8); }
.dau-tim-kinh { left: var(--k-3); }
.dau-phim { right: var(--k-2); }

/* ── O DANH DAU — checkbox.tsx ────────────────────────────────────────────
 * `size-4 shrink-0 rounded-[4px] border border-input shadow-xs`,
 * da chon thi `bg-primary border-primary text-primary-foreground`.
 * Ban cu de nguyen o mac dinh cua trinh duyet: 13px, mau he dieu hanh, va
 * khong doi theo bang mau nao ca.
 */
input[type="checkbox"], input[type="radio"] {
  appearance: none; -webkit-appearance: none;
  display: inline-grid; place-content: center;
  width: 16px; height: 16px; flex: none;
  /* CHAN CA HAI CHIEU. Trong o bang co `display:flex` thi `width` van bi
   * co lai — do duoc 12x16 o cot chon cua bang Ton kho. */
  min-width: 16px; max-width: 16px; min-height: 16px; max-height: 16px;
  margin: 0 var(--k-1) 0 0; padding: 0;
  background: var(--background); border: 1px solid var(--input);
  border-radius: 4px; box-shadow: var(--bong-xs); cursor: pointer;
  transition: background-color .15s, border-color .15s, box-shadow .15s;
}
input[type="radio"] { border-radius: 999px; }
input[type="checkbox"]::before {
  content: ''; width: 10px; height: 10px; transform: scale(0);
  transition: transform .12s ease-out;
  background: var(--primary-foreground);
  clip-path: polygon(14% 44%, 0 65%, 43% 100%, 100% 16%, 82% 0, 40% 65%);
}
input[type="radio"]::before {
  content: ''; width: 8px; height: 8px; border-radius: 999px; transform: scale(0);
  transition: transform .12s ease-out; background: var(--primary-foreground);
}
input[type="checkbox"]:checked, input[type="radio"]:checked {
  background: var(--primary); border-color: var(--primary);
}
input[type="checkbox"]:checked::before, input[type="radio"]:checked::before { transform: scale(1); }
input[type="checkbox"]:focus-visible, input[type="radio"]:focus-visible {
  outline: none; border-color: var(--ring);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
}
input[type="checkbox"]:disabled, input[type="radio"]:disabled {
  opacity: .5; cursor: not-allowed;
}
/* Nhan di kem o danh dau nam CUNG HANG, khong xuong dong — va ca cum la mot
 * vung bam rong hon 24px, dat muc san WCAG 2.2 du o vuong chi 16px. */
label:has(> input[type="checkbox"]), label:has(> input[type="radio"]) {
  display: flex; align-items: center; gap: var(--k-2);
  min-height: 24px; margin: 0; cursor: pointer;
  font-size: var(--chu-sm); font-weight: 400; color: var(--foreground);
}

/* ── O CHON — select.tsx: `h-9 px-3 py-2 rounded-md border-input shadow-xs` */
select {
  height: 36px; padding: 0 var(--k-3);
  background: var(--background); border: 1px solid var(--input);
  border-radius: var(--radius-md); box-shadow: var(--bong-xs);
  cursor: pointer;
}

/* ── VONG LAY NET PHAI THANG MOI QUY TAC KHAC ─────────────────────────────
 *
 * ── DO THAT 20/08/2026, bang cach bam Tab qua 129 phan tu ────────────────
 * 25 cho khong co dau hieu lay net nao. Ca 25 deu do CHINH TOI gay ra o phien
 * nay: hai quy tac `box-shadow: none` — mot de bo gach doc ben trai muc dieu
 * huong, mot de dung thanh tab — cung dat `box-shadow`, va do chinh la thu
 * `button:focus-visible` dung de ve vong.
 *
 * `.rail .tab` (hai lop) thang `button:focus-visible` (mot lop + mot lop gia),
 * nen vong bien mat lang le. Nhin bang mat khong thay: chi khi bam Tab moi lo.
 *
 * Quy tac nay dat CUOI CUNG va neo du sau de khong con cai gi thang no nua.
 * Xoa no di la nguoi dung ban phim mat dau vet — WCAG 2.4.7.
 */
#app :is(button, [role="button"], a, input, select, textarea):focus-visible,
.rail .tab:focus-visible, .rail .tab-con:focus-visible,
.vh-tab-nut:focus-visible, .v-tab-nut:focus-visible, .bh-tab-nut:focus-visible,
.nd-nut:focus-visible, .dau-nut:focus-visible, button.tile:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring);
  border-color: var(--ring);
  /* Vien trong mau nen tach vong ra khoi chinh phan tu, nen vong van thay ro
   * ca khi phan tu nam sat mot khoi cung mau. */
}
/* O danh dau va nut chon giu vong mong hon — chung nho, vong day se nuot ca o. */
#app :is(input[type="checkbox"], input[type="radio"]):focus-visible {
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
}

/* ── HOP THOAI — dialog.tsx ───────────────────────────────────────────────
 * `max-w-lg` (512px) · `rounded-lg` (10px) · `p-6` (24px) · `gap-4` (16px)
 * · `shadow-lg` · lop mo phia sau `bg-black/50`.
 *
 * Ban cu: khong bong (nen no chim vao trang o che do toi), rong 544/480px,
 * lop mo 35% — ba con so deu la go tay chu khong lay tu template.
 */
dialog.hoi, dialog.trogiup {
  max-width: 512px; width: calc(100% - var(--k-8));
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  background: var(--popover); color: var(--popover-foreground);
  box-shadow: var(--bong-lg);
  /* Dem dat tren CHINH hop thoai, khong tren con.
   * Ban truoc dat tren `> div` va no trung vao hang nut (`.hoi-nut`), nen hang
   * nut co dem con noi dung thi sat mep. Cau truc hai hop thoai khac nhau —
   * mot cai boc trong `form`, mot cai la h3 + dl + div — nen chi co dat tren
   * chinh no moi phu duoc ca hai. */
  padding: var(--k-6);
  gap: var(--k-4);
}
/*
 * `display` CHI DAT KHI DANG MO.
 *
 * ── DO THAT 21/08/2026 ────────────────────────────────────────────────────
 * Trinh duyet an hop thoai dong bang luat rieng cua no:
 *
 *     dialog:not([open]) { display: none }
 *
 * Do la luat cua UA, nen BAT KY luat `display` nao cua minh cung de bep no.
 * Khoi tren dat `display: grid` khong dieu kien -> ca hai hop thoai HIEN
 * THUONG TRUC giua trang du chua ai mo. Do duoc tren may that: `#trogiup-box`
 * 512x535 va `#hoi-box` 512x170, ca hai `open=false`, nam chen ngang o y=1045.
 *
 * Chu shop ta dung mot chu: "lech va kho chiu". Va cai bay o day la no trong
 * giong mot hop thoai thua can XOA DI — trong khi `#hoi-box` la hop hoi dung
 * chung cua ca ung dung (doi ten, nhap so); xoa no la mat kha nang hoi.
 *
 * Nen: giu nguyen hinh thuc, chi dua `display` vao trong `[open]`. `gap` de lai
 * o tren cung duoc — no vo hai khi chua co `display: grid`.
 */
dialog.hoi[open], dialog.trogiup[open] { display: grid; }
dialog.hoi::backdrop, dialog.trogiup::backdrop { background: rgb(0 0 0 / 50%); }
.hoi form { display: grid; gap: var(--k-4); padding: 0; }
.hoi :is(h1, h2, h3, h4), .trogiup :is(h1, h2, h3, h4) {
  margin: 0; font-size: var(--chu-lg); line-height: var(--dong-lg); font-weight: 600;
}
.hoi .hoi-nut { display: flex; gap: var(--k-2); justify-content: flex-end; margin-top: 0; }

/* ══════════════════════════════════════════════════════════════════════════
 * MAN HEP: THANH BEN THANH NGAN KEO TRUOT, KHONG PHAI HANG NGANG
 * ══════════════════════════════════════════════════════════════════════════
 *
 * ── DO THAT 20/08/2026, o be ngang cua so 900px ──────────────────────────
 * Ban cu bat `.rail` thanh `flex-direction: row` khi man hep. Voi 10 muc
 * chinh + 14 muc con thi hang do khong the la mot hang: no gap thanh mot
 * khoi cao 864px de len het noi dung, va ten phan mem troi ra giua khoi.
 *
 * Template lam khac: man hep thi thanh ben la mot NGAN KEO truot tu trai,
 * rong `18rem` (SIDEBAR_WIDTH_MOBILE trong `sidebar.tsx`), co lop mo phia
 * sau. Nut thu gon o dau trang mo/dong no.
 */
@media (max-width: 900px) {
  /*
   * MOT NGUON DUY NHAT CHO DIEM NGAT.
   *
   * JS cung can biet "dang o man hep" (nut thu gon lam hai viec khac nhau).
   * Neu JS tu viet lai `matchMedia('(max-width: 900px)')` thi con so 900 nam o
   * hai cho, va hai cho se lech nhau dung vao ngay ai do doi mot ben.
   * Nay CSS dat co, JS doc co. Doi diem ngat o day la ca hai doi theo.
   */
  :root { --man-hep: 1; }

  #app { grid-template-columns: minmax(0, 1fr); }

  .rail {
    position: fixed; inset: 0 auto 0 0; z-index: 50;
    width: 18rem; max-width: 85vw; height: 100dvh;
    flex-direction: column; flex-wrap: nowrap; align-items: stretch;
    border-right: 1px solid var(--sidebar-border); border-bottom: 0;
    box-shadow: var(--bong-lg);
    transform: translateX(-100%);
    transition: transform .2s ease-out;
    overflow-y: auto;
  }
  #app.rail-mo .rail { transform: translateX(0); }

  /* Lop mo — cung do dam voi lop sau hop thoai cua template (`bg-black/50`). */
  #app.rail-mo::before {
    content: ''; position: fixed; inset: 0; z-index: 40;
    background: rgb(0 0 0 / 50%);
  }

  /* Man hep thi giu nguyen dang doc — khong ep thanh hang ngang nua. */
  .rail .brand { padding: 0 var(--k-2); }
  .rail nav { flex-direction: column; flex-wrap: nowrap; }
  .rail-nhom { display: flex; }
  .rail-con { flex-direction: column; flex-wrap: nowrap; padding-left: var(--k-4); }
  .tab-con { width: 100%; }
  .rail-chan { margin-top: auto; }

  /* Thu gon o man hep khong con nghia — nut do chuyen sang mo/dong ngan keo. */
  :root:has(#app.rail-gon) { --rail: 0; }
  /* `revert` tra ve gia tri MAC DINH CUA THE (`inline` cho span), khong phai
   * gia tri minh da dat o quy tac khac. `.brand-chu` la `flex column`, revert
   * lam no thanh `inline` va hai dong ten dinh vao nhau mot hang.
   * Nen phai ghi lai dung gia tri, khong dung `revert`. */
  #app.rail-gon .rail .tab span:not(.cham) { display: inline; }
  #app.rail-gon .rail .tab-con { display: flex; }
  #app.rail-gon .rail-nhom { display: flex; }
  #app.rail-gon .brand-chu { display: flex; }
  #app.rail-gon .nd-chu { display: grid; }
  #app.rail-gon .rail .tab, #app.rail-gon .brand, #app.rail-gon .nd-nut {
    justify-content: flex-start; padding: 0 var(--k-2);
  }
}

/* ── HAI LOP THAY CHO KIEU NOI TUYEN ──────────────────────────────────────
 * `index.html` co bon cho go thang `style="margin-bottom:.7rem"` — .7rem la
 * 11,2px, lech luoi. Kieu noi tuyen la duong vong qua he thiet ke theo dinh
 * nghia: no khong nam trong `style.css` nen moi phep quy va moi bai chan deu
 * khong thay no. Do la ly do hai lop nay ton tai.
 */
.rong-duoi { margin-bottom: var(--k-3); }
.rong-doc  { margin: var(--k-2) 0; }

/* ── HUY HIEU TRUNG TINH: NEN `--muted-bg`, KHONG PHAI `--panel-3` ────────
 * `--panel-3` la `oklch(.94 0 0)` — bi danh cu cua minh, dam hon nen
 * `secondary` cua template (`oklch(.97 0 0)`). Tren nen dam hon do, chu mo
 * chi con 4,34:1 — duoi chuan. Doi ve dung token template thi vua khop vua
 * dat 4,75:1.
 */
.badge, .ip-tt { background: var(--muted-bg); color: var(--muted-foreground); }

/* ══════════════════════════════════════════════════════════════════════════
 * BANG DIEU HANH: NAM O, MOT HANG
 * ══════════════════════════════════════════════════════════════════════════
 *
 * ── DO THAT 21/08/2026 ──────────────────────────────────────────────────
 * Chu shop: *"5 card to tổ bố ra chả có thông tin gì, cho 5 card bé lại thành
 * 1 hàng đi để 2 hàng làm cái gì?"*
 *
 * `.tiles` dung `auto-fit, minmax(170px, 1fr)`, VA hai trong nam the mang lop
 * `.lon` (`grid-column: span 2`). Nam the do an bay o luoi, nen o do rong pho
 * thong chung tran xuong hang thu hai — mot hang bon o va mot hang ba o le.
 *
 * O day chot dung nam cot bang nhau va HUY phan `span 2`. Con so van doc duoc
 * vi cai lam no de doc la co chu, khong phai be ngang cua the.
 */
#dh-tomtat .tile { grid-column: auto; }
/*
 * `veDieuHanh()` (app.js) ve the theo khuon PHANG cu — `<b>` + `<span>` +
 * `<span class="tile-phu">` nam TRUC TIEP trong `.tile`, khong boc qua
 * `.tile-dau`/`.tile-chan` nhu khuon moi. Rieng `padding` duoc ghi de o day,
 * nhung `gap` thi khong — nen `gap: var(--k-3)` cua khuon moi (dung cho
 * KHOANG CACH GIUA `.tile-dau` va `.tile-chan`, hai khoi) bi ap nham thanh
 * khoang cach GIUA TUNG DONG rieng le trong the nay, nhan len ba dong thanh
 * hai lan gap — dung nguyen nhan the "Dang chay/Can chu y" cao bat thuong.
 */
/*
 * MOT DONG NGANG — chu shop 25/08/2026 noi BA LAN: "bo dong thu 3 di, gop
 * dong 1 va 2 thanh 1 dong thanh cai card do 1 dong thoi". `.tile` von la
 * `flex-direction: column` (so tren, nhan duoi, chu thich duoi nua) — doi
 * sang `row` de so va nhan nam CUNG mot dong; dong thu ba (`.tile-phu`) da
 * bi go khoi app.js, chuyen vao `title`.
 */
/* `flex-direction: row` DA GO — no la cai ep "so truoc, chu sau tren mot
 * dong", tuc dung thu chu shop cam ngay 26/08/2026. Xem `theSoLieu()`. */
#dh-tomtat .tile { padding: var(--k-3) var(--k-4); gap: var(--k-1); }
/* 24px (`--chu-2xl`) — dung co chu template dat cho CON SO KPI. Truoc do toi
   ha xuong 20px de the bot cao, nhung the gio chi con MOT dong nen 24px van
   giu the thap (~48px), ma con so lai dung bac cua template. */
#dh-tomtat .tile b,
#dh-tomtat .tile.lon b { font-size: var(--chu-2xl); line-height: 1.2; }

/*
 * `#tiles` (/phien-phat, hai o "phien dang phat"/"video san sang") — CUNG
 * benh, chu shop 25/08/2026 chup man hinh: "2 card chieu cao con lech nhau ma
 * no trong hoac ra cuc ky vo nghia". Hai o nay chi co `.tile-dau` (mot nhan +
 * mot con so) nhung an `padding: k-4` + `gap: k-3` + chu `chu-3xl` (30px qua
 * container query) — cao 110-122px cho dung hai dong chu.
 *
 * Gop nhan va so thanh MOT DONG NGANG, ha co chu, bot padding — cung cong
 * thuc da dung cho `#dh-tomtat`.
 */
/* `row-reverse` DA GO — no dao thu tu thanh "so truoc, chu sau", nguoc luat
 * chu shop ra 26/08/2026. Khuon chung lo het; o day khong con gi rieng. */
#tiles .tile { padding: var(--k-3) var(--k-4); gap: var(--k-1); }
#tiles .tile b { font-size: var(--chu-2xl); line-height: 1.2; }

/*
 * `#sl-tong` (/doanh-thu, khoi "theo tung buoi phat") dung CHINH ham `the()`
 * (khuon PHANG cu, giong `#dh-tomtat`) nen dinh CUNG mot loi gap nhan doi da
 * ghi o tren. Chu shop 25/08/2026 bao "/doanh-thu card nao cung to ma trong
 * hoac" — ap dung y het cong thuc da chung minh dung cho `#dh-tomtat`.
 *
 * DOI TIEP sang FLEXBOX — DO THAT 25/08/2026, tu chinh mat nhin thay: khoi
 * nay dung DUNG cong thuc `auto-fit, minmax(140px, max-content)` bi loi that
 * cua CSS Grid (xem chu thich day du o `.dem-luoi` phia tren) — con so
 * "1.417.250₫" o day bi CHROME EP CAT thanh "1.417.2…" du con nhieu cho
 * trong ben canh. Kiem chung bang khung thu nghiem rieng: ba o trong mot
 * hang deu bi ep dung 140px bat ke noi dung dai hon.
 *
 * DOI SANG FLEX VAN CHUA DU — TIM RA NGUYEN NHAN THAT SU THU HAI:
 *
 * Sua xong deploy len, mo lai tren production bang mat: VAN CAT "1.417.2…".
 * Do bang JS ngay tren trang that (khong doan): `.tile` co con la
 * `flex-basis:auto; flex-grow:0; flex-shrink:0`, nhung `width` van bi khoa
 * cung 140px — dung bang `min-width`, khong hon. Nguyen nhan: `.tile` (dinh
 * nghia goc, cho `@container (min-width:250px)` phong to con so) co
 * `container-type: inline-size`. Theo dac ta CSS Containment, mot phan tu
 * co `inline-size` containment MA kich thuoc cua no la TU DONG (khong dinh)
 * thi trinh duyet TINH NHU THE NO KHONG CO NOI DUNG tren truc do — bo qua
 * hoan toan be rong that cua chu ben trong, chi con `min-width` lam san.
 * Dung containment nay pha CA HAI cach — grid `max-content` LAN flex
 * `flex-basis:auto` — vi ca hai deu can do NOI DUNG THAT de tinh kich thuoc,
 * va containment cat dut chinh phep do do.
 *
 * `#sl-tong` khong bao gio dat toi 250px (luon la o nho, dem gon), nen bo
 * containment o day khong mat gi — chi mat kha nang phong to chu o 250px+
 * MA CHINH O NAY khong bao gio cham toi.
 */
/*
 * `display: flex; flex-wrap: wrap` + `flex: 0 0 auto` DA GO.
 *
 * Do la NGUON cua loi chu shop chi ra 26/08/2026: "/#/doanh-thu 4 tab đầu
 * tiên chiều rộng không bằng nhau mà còn thừa bên phải nữa". `flex: 0 0 auto`
 * = moi the rong bang dung noi dung cua no, nen "4/4" hep con "1.553.750đ"
 * rong, va tong ba the khong lap day hang -> ho mot mang ben phai.
 *
 * Nay dung chung luoi cua `.tiles` (mot hang, cot bang nhau, lap day hang).
 */
#sl-tong .tile { padding: var(--k-3) var(--k-4); gap: var(--k-1);
  container-type: normal; }
#sl-tong .tile b { font-size: var(--chu-2xl); line-height: 1.2; }

/* Man hep thi nam cot canh nhau la khong doc duoc nua — xuong ba roi hai.
 * Nam the tren luoi ba/hai cot deu le mot the o hang cuoi — cho the CUOI
 * cung an not phan con lai, khong de mot o trong. */
/*
 * ── BO `span 2` O THE CUOI, 27/08/2026 ───────────────────────────────────
 *
 * Luat cu cho the CUOI an not phan con lai de "khong de mot o trong". Do that
 * o khung 760px, Bang dieu hanh: bon the rong 222px, the "Đang xem" rong
 * 459px — gap doi. Chu shop: "các card không bằng nhau không thẳng hàng".
 *
 * Doi mot O TRONG lay mot THE GAP DOI la doi lay cai te hon: o trong o CUOI
 * luoi la hinh dang binh thuong cua moi luoi the, con mot the to gap doi cac
 * the khac thi doc ra la hong.
 *
 * Nam the thi khong so cot nao chia het (5 la so nguyen to) — nen chap nhan
 * mot o trong o cuoi, va giu MOI THE BANG NHAU.
 */
@media (max-width: 1100px) {
  #dh-tomtat { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  #dh-tomtat { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Nut "Danh dau da doc" trong o Su co nang: nho, khong tranh cho voi con so. */
.tt-o button.nho { margin-top: var(--k-2); padding: var(--k-1) var(--k-2);
  font-size: var(--chu-xs); line-height: 1.2; }

/*
 * ══ LOP DONG BO — SUA GOC, KHONG SUA TUNG CHO ══════════════════════════════
 *
 * Chu shop 26/08/2026: "tất cả các design của mày đều quá xấu, quá thiếu
 * thống nhất, lệch". Doan nay khong them mot phong cach moi — no ep MOT THANG
 * do cho nhung cho da lech ra khoi thang do cua template.
 *
 * ── VI SAO CAC CHO DO LECH: MOT NGUYEN NHAN DUY NHAT ──────────────────────
 *
 * Quy tac `button, .file-btn` (dong ~4281) la BO CHON THEO THE, do dam dac
 * (0,0,1). No dat bay thuoc tinh len MOI phan tu `<button>` cua ca ung dung:
 *
 *     justify-content: center;  align-items: center;  height: 36px;
 *     padding: 0 16px;  white-space: nowrap;  font-size: 14px;
 *     border-radius: 8px;  gap: 8px;
 *
 * Dieu do dung cho mot cai NUT. Nhung trong he nay co nhung `<button>` KHONG
 * PHAI nut — chung la the, la o luoi, la nhan bam duoc. Moi lop nhu vay phai
 * TU do lai tung thuoc tinh nao no khong muon; cho nao quen mot thuoc tinh la
 * cho do lech, va lech im lang.
 *
 * ── DO THAT 26/08/2026, tren live.tongdai.ai/#/ ───────────────────────────
 * `#dh-canhbao` ("2 Cần chú ý") la `<button class="tile lon">`. Cac o ben
 * canh la `<div class="tile lon">`. Do bang devtools:
 *
 *     div.tile.lon    justify-content: normal   -> chu bat dau tu le trai
 *     button.tile.lon justify-content: center   -> chu don vao giua
 *
 * `.tile` (0,1,0) khong khai `justify-content` bao gio, nen gia tri `center`
 * cua quy tac `button` tran di thang qua. Chu shop nhin ra ngay: "các card
 * trên cùng đang để căn trái mà cái '2 cần chú ý' sao lại căn giữa".
 *
 * Nen luat o day khong phai "sua o Can chu y" ma la: MOI LOP DUNG TREN MOT
 * `<button>` MA KHONG PHAI NUT DEU PHAI DO LAI CA BAY THUOC TINH. Viet mot
 * lan o day, cho tat ca, de lop them sau nay khong phai nho lai.
 */
/*
 * Chi liet ke nhung lop THAT SU dat tren mot `<button>`:
 *   `.tile`  — o so lieu bam duoc (#dh-canhbao)
 *   `.q-the` — o chon muc bitrate
 * `.tv-the` va `.dp-the` la `<article>`, khong phai `<button>` — bo chon
 * `button.tv-the` se khong bao gio khop cai gi, va mot bo chon chet trong
 * mot khoi "reset" doc ra nhu la da duoc lo, tuc no che mat cho chua duoc lo.
 * `label.tv-chon` cung khong thuoc day: `<label>` khong an luat `button` nao,
 * va dat `height: auto` len no la BOP vung bam 26px cua chinh no.
 */
button.tile, button.q-the {
  justify-content: normal; align-items: stretch;
  height: auto; white-space: normal;
  font-size: var(--chu-base); font-weight: inherit; text-align: left;
}
/*
 * ── THE BI TAT VAN LA MOT THE, KHONG PHAI MOT NUT XAM ─────────────────────
 *
 * DO THAT 26/08/2026 tren production, Bang dieu hanh: nam the tren mot hang,
 * RIENG the "Cần chú ý" mang nen xam (oklch .97) trong khi bon the kia trang
 * (oklch 1). Dung cai "lạc quẻ" chu shop chi ra nhieu lan.
 *
 * Nguyen nhan: `#dh-canhbao` la `<button class="tile lon">`, va khi khong co
 * canh bao nao thi no `disabled`. Luat chung `button:disabled` son no thanh
 * `--muted-bg` — dung cho mot cai nut, sai cho mot cai the.
 *
 * The so lieu la mot O THONG TIN truoc, moi la nut sau: con so "0" van phai
 * doc duoc, va no phai giong bon o ben canh. Dau hieu "khong bam duoc" la
 * khong co con tro va khong co hieu ung ro chuot — khong phai doi mau nen.
 */
button.tile:disabled, button.q-the:disabled {
  background: var(--card); color: var(--card-foreground);
  border-color: var(--border);
}

/*
 * ── O CHON — MOT CHEVRON, KHONG PHAI MUI TEN CUA HE DIEU HANH ─────────────
 *
 * Chu shop: "phần nút sắp sếp icon sổ xuống sát viền quá" va "rất nhiều trang
 * nút dropdown đều bị lệch, nút xổ xuống đều bị lệch sát phải".
 *
 * Do that tren /#/san-pham: `#sp-sapxep` co `padding: 4px 12px`, nhung mui ten
 * VAN dinh vao vien phai. Do la vi `<select>` mac dinh tu ve mui ten cua he
 * dieu hanh, va CHO VE do nam ngoai hop padding — trinh duyet khong cho CSS
 * voi toi. Them bao nhieu `padding-right` cung khong nhuc nhich.
 *
 * Cach duy nhat: `appearance: none` de tat mui ten cua he, roi TU VE lay.
 *
 * `right 12px center` la khoang cach cua template (`pr-3` tren SelectTrigger),
 * va `padding-right: 32px` de chu dai khong chui xuong duoi mui ten.
 */
select:not([multiple]):not([size]) {
  appearance: none; -webkit-appearance: none;
  padding-right: var(--k-8);
  background-image: var(--ico-chevron);
  background-repeat: no-repeat;
  background-position: right var(--k-3) center;
  background-size: 16px 16px;
}
/*
 * Mui ten khong the dung `currentColor` (anh trong `url()` khong nhin thay mau
 * chu cua trang), nen no duoc khai HAI LAN — mot cho nen sang, mot cho nen
 * toi. Hai dong, va chung nam canh nhau nen khong ai sua mot ben roi quen ben
 * kia. Mau lay dung `--muted-foreground` cua tung che do.
 */
:root {
  --ico-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236e6e6e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}
/*
 * HINH DUNG TRONG `mask-image` — mau den tu `currentColor` cua noi dung, nen
 * mot ban duy nhat chay dung tren ca nen sang lan nen toi (khac `--ico-chevron`
 * o tren, cai do la `background-image` nen phai ghim mau).
 * Ba hinh nay la `shopping-cart`, `play`, `check` — cung bo lucide voi `ico()`
 * trong `app.js`.
 */
:root {
  --ico-gio-hang: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='20' r='1'/%3E%3Ccircle cx='19' cy='20' r='1'/%3E%3Cpath d='M2 3h2l2.7 12.4a2 2 0 0 0 2 1.6h7.7a2 2 0 0 0 2-1.6L21 7H5'/%3E%3C/svg%3E");
  --ico-phat: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M6 3 20 12 6 21V3Z'/%3E%3C/svg%3E");
  --ico-chevron-phai: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E");
  --ico-dung: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}
html[data-giao-dien="toi"] {
  --ico-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a1a1a1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}
/* Nhieu o chon dang bi `input, select, textarea { width: 100% }` keo dai het
 * hang — do that: `#sp-sapxep` 802px cho mot nhan 14 ky tu. Trong mot HANG
 * CONG CU (`.toolbar`, `.add-row`, `.vh-thanh-nut`) o chon phai vua noi dung,
 * khong phai vua khung. Dung `#tv-thanh select { width: auto }` la ban va cho
 * MOT man; day la cung mot luat cho moi hang cong cu. */
.toolbar > select, .toolbar select:not(.rong),
.add-row > select, .vh-thanh-nut select, .dt-moc + * select {
  width: auto; min-width: 8rem; max-width: 22rem;
}

/*
 * ── NUT CHI CO HINH — bien the `size="icon"` cua button.tsx ───────────────
 *
 * Template: `size-9` (36x36) cho co thuong, va o hang nut nho la 32x32 —
 * VUONG, khong phai chu nhat. Truoc doan nay he khong co lop nao cho viec do,
 * nen moi nut chi co hinh deu tu no rong ra theo `padding: 0 16px` cua nut
 * thuong: `⏭` rong 42px, `🗑` rong 40px, canh `Mở` rong 48px va `↗ Xem` rong
 * 66px — nam nut, nam be rong, tren cung mot hang.
 */
/*
 * `button.nut-ico`, KHONG phai `.nut-ico` — do dam dac, khong phai thu tu.
 *
 * ── DO THAT 26/08/2026 tren live.tongdai.ai, bang devtools ───────────────
 * Ban dau viet `.nut-ico { padding: 0 }` — do dam dac (0,1,0). Nhung
 * `button.sm { padding: 0 var(--k-3) }` la (0,1,1), tuc CAO HON, nen no
 * thang bat ke nam truoc hay sau trong tep. Do duoc tren hang nut cua the
 * phien:
 *
 *     .sc-nut > button   width: 32px   padding: 0px 12px
 *
 * `box-sizing: border-box` (dat o `*` dau tep) nen 32px do la KE CA dem: chi
 * con 8px cho mot hinh 16px co `flex: none`. Hinh tran ra ngoai o vuong.
 *
 * `button.nut-ico` la (0,1,1) — ngang bang `button.sm`, va nam SAU trong tep
 * nen thang. Giu ca ban `.nut-ico` tran cho cac the khong phai `<button>`.
 */
.nut-ico, button.nut-ico { width: 36px; padding: 0; flex: none; }
.nut-ico.sm, button.nut-ico.sm { width: 32px; height: 32px; padding: 0; }

/*
 * ── HANG NUT CUA MOT THE — cung lop, cung co, cung bo hinh ────────────────
 *
 * Chu shop 26/08/2026 ve the phien: "các nút còn lại đều phải cùng 1 class,
 * cùng chiều cao, chiều rộng, chiều dài và chỉ dùng icon svg đồng bộ thôi bỏ
 * chữ đi".
 *
 * `.sc-nut > *` chu khong `.sc-nut button`: trong hang do co MOT the `<a>`
 * ("Xem" — mo trang nguoi xem cua Shopee, phai la lien ket that de con bam
 * chuot giua mo tab moi). Bo chon theo `button` bo sot no, va do dung la ly
 * do truoc day phai co mot ban va rieng `.sc-nut a.ghost.sm` o dong ~1348.
 */
/* `> button, > a` (0,1,1) chu khong `> *` (0,1,0) — cung ly do do dam dac
 * voi `.nut-ico` ngay tren: `> *` de nguyen `padding: 0 12px` cua
 * `button.sm`, va do duoc that tren san xuat. */
.sc-nut > button, .sc-nut > a {
  width: 32px; height: 32px; padding: 0; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-md);
}

/*
 * ── TAM NOI MO XUONG DUOI — cung tam `.nd-menu`, khac huong ───────────────
 *
 * Trinh don nguoi dung nam o CHAN thanh ben nen no mo LEN (`bottom: 100%`).
 * Tam "Cần để ý" nam o dau trang nen phai mo XUONG. Chi khac hai dong toa do
 * — moi thu con lai (nen, vien, bo goc, bong, dem) dung chung, nen hai tam
 * trong nhu nhau va khong the lech nhau ve sau.
 */
.nd-menu.pop-duoi {
  top: calc(100% + 6px); bottom: auto; left: auto; right: 0;
  width: max-content; max-width: min(28rem, 90vw);
  padding: var(--k-3);
}
/* Ben trong tam nay la CHU DOC, khong phai muc trinh don — nen bo luat
 * "moi nut cao 32px, can trai" cua `.nd-menu`. */
.nd-menu.pop-duoi .danh-sach-nho { margin: 0; }

/* Nhan dem tren nut: khong duoc keo chieu cao nut ra khoi 36px. */
.tv-thieu-hop .the-nho { flex: none; }

/* Ba cham trang thai tren Bang dieu hanh — thay cho emoji 🔴🟡🟢.
 * Kich thuoc va cach can le lay theo `.cham` da co o tren, chi khac la mau
 * den tu bien cua he chu khong tu he dieu hanh. */
.cham-tt {
  display: inline-block; width: 10px; height: 10px; border-radius: 50%;
  vertical-align: middle; flex: none;
  background: var(--muted-foreground);
}
.cham-tt.xau  { background: var(--bad-text, var(--destructive)); }
.cham-tt.canh { background: var(--warn-text, #b45309); }
.cham-tt.tot  { background: var(--ok-text, #16a34a); }

/*
 * ── HINH TRONG DONG CHU ───────────────────────────────────────────────────
 *
 * `ico()` sinh ra `<svg class="ico">`. Trong mot NUT thi luat
 * `button > svg` da lo (16px, khong co lai). Nhung rat nhieu hinh nam trong
 * mot dong chu — nhan trang thai, chip, dau dong — va o do khong co luat nao,
 * nen SVG se lay chieu cao dong lam co va tut xuong duoi duong chan chu.
 */
.ico {
  flex: none; vertical-align: -.15em;
}
/* Hinh dung mot minh trong mot the bao (o giu cho anh bia, cham LIVE): can
 * giua, va nhat di vi no la thu THAY CHO noi dung, khong phai noi dung. */
.ph > .ico, .dp-khong > .ico, .dp-sp-hop > .ico, .ghim-trong > .ico,
.big-icon > .ico { opacity: .4; vertical-align: middle; }
.big-icon { display: inline-flex; color: var(--muted-foreground); opacity: 1; }
.dp-live > .ico { fill: currentColor; vertical-align: middle; }

/* Nut nhanh trong ngan phien: o hinh khong duoc co lai khi ten dai. */
.nn-bieu { display: inline-flex; align-items: center; opacity: .75; flex: none;
  color: var(--muted-foreground); }

/*
 * ══ HANG THE SO LIEU — MOT LUAT CHO MOI TAB ════════════════════════════════
 *
 * ── LUAT CHU SHOP RA 26/08/2026 ───────────────────────────────────────────
 *   "Các card cùng loại trên cùng luôn phải bằng nhau cả chiều cao và chiều
 *    rộng và căn sát 2 bên trái phải"
 *   "hiện tại đang mỗi thằng 1 kiểu"
 *
 * ── TAI SAO TRUOC DO MOI TAB MOT KIEU ─────────────────────────────────────
 * `.tiles` co mot luat chung, nhung BON tab tu ghi de len no:
 *
 *   #dh-tomtat  `flex-direction: row`        -> so truoc chu, mot dong
 *   #tiles      `.tile-dau: row-reverse`     -> so truoc chu, mot dong
 *   #sl-tong    `display: flex; flex: 0 0 auto` -> the rong theo NOI DUNG
 *   #tt-tong    `display: contents` + `.tt-o` -> mot khuon the khac han
 *
 * Ban ghi de thu ba la nguon cua "thừa bên phải": `flex: 0 0 auto` cho moi the
 * rong bang dung chu ben trong, nen ba the ngan khong bao gio lap day hang.
 * Ca bon da go. Duoi day la luat DUY NHAT.
 *
 * ── `grid-auto-flow: column` chu khong `auto-fit, minmax()` ───────────────
 * `repeat(auto-fit, minmax(220px, 1fr))` cho so cot THEO BE RONG MAN: cung
 * mot trang, man 1280px ra 5 cot con man 1600px ra 7 — nen hai the o
 * `/phien-phat` (chi co 2) bong rong gap ruoi khi chu shop keo to cua so.
 * "Bang nhau" thi dat duoc, nhung "cung mot dang thong nhat" thi khong.
 *
 * `grid-auto-flow: column` + `grid-auto-columns: minmax(0, 1fr)` noi dung y
 * cai can noi: DAT HET tren MOT hang, moi cot bang nhau, va cong lai lap day
 * dung be ngang vung noi dung. Hai the thi moi cai mot nua; nam the thi moi
 * cai mot phan nam. Khong bao gio ho ben phai, khong phu thuoc be rong man.
 *
 * `grid-auto-rows: 1fr` — chieu cao bang nhau, ke ca khi mot the co them dong
 * `.tile-chan` con the khac thi khong.
 */
/* `<ul class="tiles">` (Thu vien video) — bo dau cham va le mac dinh cua danh
 * sach. Danh sach van la the DUNG ve mat nghia: ba o do la mot danh sach dem. */
ul.tiles, ul.dem-luoi { list-style: none; padding-left: 0; }
.tiles, .dem-luoi, .cvd-dem, .tt-grid {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  grid-auto-rows: 1fr;
  grid-template-columns: none;
  gap: var(--k-4);
  margin-bottom: var(--k-6);
  align-items: stretch;
}
/* Dai "Đường phát" o /tinh-trang: cung hop voi `.tile` de bon o tren mot hang
 * trong nhu MOT bo. No van giu `.tt-o` (mang mau theo trang thai tot/chet). */
.tt-o {
  display: flex; flex-direction: column; gap: 2px;
  padding: var(--k-3) var(--k-4); min-width: 0;
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  background: var(--card); box-shadow: var(--bong-xs);
}
.tt-o :is(h1, h2, h3, h4) {
  margin: 0; order: 1;
  font-size: var(--chu-sm); line-height: var(--dong-sm); font-weight: 400;
  text-transform: none; letter-spacing: 0; color: var(--muted-foreground);
}
.tt-o .tt-dai-to, .tt-o .so { order: 2; }
.tt-o .tt-dai-phu, .tt-o .tt-moc { order: 3; }

/* O dem cua bon man Van hanh: cung hop, cung dem, cung bo goc voi `.tile`. */
.dem-o {
  display: flex; flex-direction: column; gap: 2px;
  padding: var(--k-3) var(--k-4); min-width: 0;
  box-shadow: var(--bong-xs);
}
/* `order:` DA GO — thu tu nay gio dung o CHINH DOM (app.js). Dua vao `order`
 * de dao thu tu la de mot ban HTML doc ra nguoc voi cai nhin thay: nguoi doc
 * ma nguon tuong so nam truoc, va trinh doc man hinh doc theo DOM chu khong
 * theo `order`. */
.dem-nhan {
  font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dem-so {
  font-size: var(--chu-2xl); line-height: var(--dong-2xl);
  font-weight: 600; letter-spacing: -.01em; font-variant-numeric: tabular-nums;
}
/*
 * MAN HEP: mot hang nam the la khong doc duoc nua. Quay ve luoi xuong dong,
 * VA phai tra `grid-auto-flow` ve `row` — neu khong `grid-template-columns`
 * bi `auto-flow: column` bo qua.
 */
@media (max-width: 1100px) {
  .tiles, .dem-luoi, .cvd-dem, .tt-grid {
    grid-auto-flow: row;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (max-width: 720px) {
  .tiles, .dem-luoi, .cvd-dem, .tt-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/*
 * THE: chu TREN, so DUOI. Day la hinh dang bat buoc — xem `theSoLieu()`.
 * `.tile-dau` la luoi hai hang (mo ta / con so) + mot cot phu cho huy hieu.
 */
.tile-dau {
  display: grid;
  grid-template-rows: auto auto;
  align-items: start;
  gap: 2px;
  min-width: 0;
}
.tile-mota {
  grid-row: 1; grid-column: 1;
  font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground);
  /* Nhan dai thi CAT bang "…", khong xuong dong: mot the xuong dong la mot
   * the cao hon cac the ben canh, va `grid-auto-rows: 1fr` se keo ca hang
   * cao theo — tuc mot nhan dai lam ca hang phinh ra. */
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
.tile b {
  grid-row: 2; grid-column: 1;
  font-size: var(--chu-2xl); line-height: var(--dong-2xl);
  font-weight: 600; letter-spacing: -.01em; font-variant-numeric: tabular-nums;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* Huy hieu xu huong: cot hai, trai dai ca hai hang, neo goc tren phai. */
.tile-xu { grid-column: 2; grid-row: 1 / span 2; align-self: start; justify-self: end; }

/* O "Sự cố nặng"/"Việc hỏng" khi co loi — giu mau canh bao cua `.tt-o` cu. */
.tile.co-loi { border-color: var(--bad-vien); background: var(--bad-nen); }
/* Nut "Đánh dấu đã đọc" tach khoi hang the, khong nhet vao trong mot o
 * (nhet vao thi o do cao hon, va `grid-auto-rows: 1fr` keo ca hang cao theo). */
/* Nut nam trong dong phu cua the "Sự cố nặng" — khong duoc keo chieu cao the.
 * `.tile-phu` co `white-space: nowrap`, nen phai cho phep xuong dong o day. */
.tile-phu:has(> .tt-da-doc) { white-space: normal; }
.tt-da-doc { margin-top: var(--k-1); height: 28px; }

/*
 * ══ BO VIEN MAU O CANH THE ═════════════════════════════════════════════════
 *
 * Chu shop 26/08/2026: "Sao tao lại thấy có nhiều card có viền border bên phải
 * màu đỏ hay màu xanh là sao, nhìn rất khó hiểu, bỏ cái màu đó đi".
 *
 * Co 21 bo chon dat mot vach mau 2-3px o canh trai the: `.bp`, `.tt-muc`,
 * `.tuanthu`, `.cy-muc`, `.vh-don`, `.ka-duong`, `.danh-sach-nho li`...
 *
 * ── VI SAO BO ─────────────────────────────────────────────────────────────
 * 1. Chu shop khong doc duoc y nghia cua no. Mot vach xanh canh mot vach do
 *    ma khong co chu giai thich thi no la trang tri, khong phai thong tin.
 * 2. shadcn/ui KHONG dung vach mau canh the o dau ca. `alert.tsx` bao mau
 *    bang MAU CHU + hinh (`text-destructive`, `[&>svg]`); `card.tsx` chi co
 *    mot vien 1px `--border` deu bon canh. Vach mau canh la mot thoi quen tu
 *    ban thiet ke khac, va no chinh la thu lam giao dien "moi thang mot kieu".
 *
 * ── MUC DO KHONG BI MAT ───────────────────────────────────────────────────
 * Cai vach do KHONG phai duong duy nhat bao muc do: moi khoi deu con nhan chu
 * ("Bắt buộc sửa" / "Nên sửa" / "Gợi ý"), mau chu, va nen mo theo trang thai.
 * Bo vach chi bo lop THU HAI cua cung mot tin — thu ma chu shop doc ra la
 * nhieu, khong phai ro hon.
 *
 * Dat CUOI TEP de thang moi bo chon o tren ma khong phai di sua 21 cho — sua
 * 21 cho la cach chac chan de sot mot cai roi khong ai thay.
 */
.bp, .tt-muc, .tuanthu, .cy-muc, .vh-don, .ka-duong, .canh-bao, .canh-obs,
.danh-sach-nho li, .bo-phan .bp {
  border-left-width: 1px;
  border-left-color: var(--border);
  border-right-color: var(--border);
}
/* Nen mo theo trang thai GIU LAI — do la tin hieu doc duoc va no khong gay
 * kho hieu: mot the nen do nhat canh mot the nen trang thi ro la co chuyen. */

/*
 * ── LUAT TREN CHUA DU: BAN THEO TRANG THAI VAN THANG NO ───────────────────
 *
 * DO THAT 26/08/2026, sau khi da viet luat tren va bao "da bo 21 vach".
 * Luat tren dung bo chon MOT LOP (`.vh-don`, do dam dac 0,1,0). Nhung mau
 * vach khong nam o do — no nam o cac ban THEO TRANG THAI: `.vh-don.xong`,
 * `.tuanthu.nang`, `.cy-muc.canh-bao`, `.ka-duong.hong`... tat ca deu 0,2,0,
 * tuc THANG luat tren bat ke thu tu trong tep.
 *
 * Ket qua: vach van con mau, chi mong di tu 3px xuong 1px. Toi da tuyen bo
 * xong mot viec ma khong do lai — dung CLAUDE.md muc 1.
 *
 * ── CHUA ──────────────────────────────────────────────────────────────────
 * Bo chon o day KHOP DO DAM DAC voi cac ban trang thai (deu hai lop) va nam
 * SAU chung trong tep, nen thang. Mau trang thai khong mat: no chuyen ra
 * VIEN CA HOP — dung hinh cua `alert.tsx` (vien 1px + nen mo + mau chu),
 * thay vi mot vach le mot canh.
 *
 * Muc do van con doc duoc bang chu o moi khoi (`.nhan`: "Bắt buộc sửa" /
 * "Nên sửa" / "Gợi ý"), nen day khong phai bo tin hieu, chi la doi hinh.
 */
.tuanthu.nang, .cy-muc.nang { border-color: var(--bad-vien); }
.tuanthu.canh-bao, .cy-muc.canh-bao { border-color: var(--warn-vien); }
.tuanthu.goi-y, .cy-muc.goi-y { border-color: var(--tin-vien); }
.ka-duong.dat { border-color: var(--ok-vien); }
.ka-duong.hong { border-color: var(--bad-vien); }
/* Don hang: trang thai da co MAU CHU o cuoi tep (`.vh-don.canlam`,
 * `.vh-don.dangdi`), nen o day chi tra vien ve mau trung tinh. */
.vh-don.xong, .vh-don.huy, .vh-don.cho { border-color: var(--border); }
.danh-sach-nho li.xong { border-left-color: var(--border); }

/*
 * Hai khoi canh bao con lai (`.canh-bao` o Kiem API, `.canh-obs` o Quyen
 * host) truoc chi co DUNG MOT canh trai — luat tren tra no ve mau trung tinh
 * nhung van la mot vach le, khong phai mot hop. Cho chung hinh `alert.tsx`
 * that: vien 1px deu bon canh + nen mo.
 */
.canh-bao, .canh-obs {
  border: 1px solid var(--warn-vien);
  border-radius: var(--radius-lg);
}

/*
 * ══ BANG — MOT BAC DEM, VA MOT BIEN THE DAC ════════════════════════════════
 *
 * ── DO THAT 26/08/2026 ────────────────────────────────────────────────────
 * Quet ca tep: SAU gia tri dem khac nhau cho o bang, tren cung mot ung dung:
 *
 *   khuon `table.tsx`        th `0 8px`      td `8px`     <- bac dung
 *   #tt-worker               `8px 8px`
 *   #suc-khoe                `8px 8px`
 *   .canh-bang td            `4px 4px 4px 0`
 *   .vh-ct-bang td           `4px 4px`  + chu 12px
 *   .vh-bang-don td          `8px 12px`
 *   .cvd-suckhoe .v-bang     `4px 4px`
 *
 * Va HAI co chu: 14px o moi noi, 12px rieng `.vh-ct-bang` — mot bang SO SACH,
 * tuc cai bang doc lau nhat trong ca he, lai la cai co chu nho nhat.
 *
 * Ca sau ban rieng da go. Con lai mot bac dem duy nhat (`table.tsx`) va mot
 * bien the dac duy nhat duoi day, cho bang that su nhieu cot.
 *
 * shadcn khong ship bien the dac. Nhung mot bien the CO TEN, dung o vai cho,
 * van hon sau con so ngau nhien rai khap tep — va no bat nguoi them bang moi
 * phai CHON, thay vi go mot con so moi.
 */
.bang-gon th { height: 32px; }
.bang-gon td { padding: var(--k-1) var(--k-2); }

/*
 * ══ KHOI NOI DUNG — MOT DIEN MAO, THEO card.tsx ════════════════════════════
 *
 * ── DO THAT 26/08/2026, quet ca tep ───────────────────────────────────────
 * Co 40+ lop dong vai "mot khoi noi dung co vien" — va chung chia lam hai
 * phe ban kinh, cong voi mot phe thu ba khong co bong:
 *
 *   14px (`--radius-xl`)  .card .tile .stream-card .tt-o .luoi-o>.o .dp-the
 *                         .tv-the table            <- dung `card.tsx`
 *   10px (`--r`/`-lg`)    .hai-cot>.o .cot-phu>div .sl-trong .saptoi .hoi
 *                         .vh-loc .vh-bang-bao .pk-form .kn-the .ct-thaotac
 *                         .cy-muc .ka-nhom .cvd-suckhoe .vh-don .dt-bieu-do
 *                         .ip-truoc .loi-hop .hop-ma .live .kpi ...
 *   khong bong            gan het nhom 10px
 *
 * `card.tsx` cua template la `rounded-xl border shadow-sm`. Nen nhom 14px
 * dung, nhom 10px lech — va vi hai nhom NAM CANH NHAU tren cung mot man (vi
 * du /phien-phat: `.stream-card` 14px canh `.cot-phu > div` 10px), mat nhin
 * ra ngay la hai thu khac he.
 *
 * ── CHI DAT HAI THUOC TINH ────────────────────────────────────────────────
 * `border-radius` va `box-shadow`. KHONG dung toi `border-color` hay
 * `background`: mot so khoi co mau theo trang thai co y (`.loi-hop` vien do,
 * `.hop-ma` vien vang, `.khu-nguy-hiem` vien dut, `.pk-form` vien cam) — do
 * la THONG TIN, khong phai lech phong cach. Dong bo hinh dang, giu mau.
 *
 * ── LIET KE TUONG MINH, khong dung bo chon rong ───────────────────────────
 * Viet ro tung lop thay vi mot mau chung nhu `[class*="-hop"]`. Them mot khoi
 * moi ma quen khai o day thi no se trong khac cac khoi ben canh — nhin ra
 * duoc. Mot bo chon rong thi nguoc lai: no se om luon nhung thu khong phai
 * khoi noi dung (chip, nut, o nhap) va lam hong chung mot cach im lang.
 */
.o,
.hai-cot > .o, .cot-phu > div,
.sl-trong, .saptoi, .hoi, .loat-hop, .panel-log, .empty,
.vh-loc, .vh-bang-bao, .vh-thanh-day, .vh-don,
.pk-form, .pk-them-hang,
.kn-the, .kn-kythuat,
.ct-canhbao, .ct-thaotac,
.cy-muc, .ka-nhom, .ka-duong, .cvd-suckhoe,
.dt-bieu-do, .dt-top, .ip-truoc, .ip-loai,
.loi-hop, .hop-ma, .khu-nguy-hiem, .live, .kpi,
.saptoi-the, .q-the, .sp-hop, .binhluan .bl {
  border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs);
}

/*
 * TAM NOI (`popover.tsx` / `dropdown-menu.tsx`) — MOT BAC KHAC, CO Y.
 *
 * Template phan biet ro: the noi dung la `rounded-xl` + `shadow-sm`; tam noi
 * len tren noi dung la `rounded-lg` + bong DAY hon (`shadow-md`). Bong day la
 * thu noi "cai nay dang noi ben tren", va no phai khac the thuong — neu
 * khong, mot trinh don mo ra trong nhu mot khoi vua duoc chen vao trang.
 */
.nd-menu, .dau-tim-ra, .toast, dialog.hoi, dialog.trogiup {
  border-radius: var(--radius-lg);
}
.nd-menu, .dau-tim-ra { box-shadow: var(--bong-md); }
.toast { box-shadow: var(--bong-lg); }

/*
 * ══ NHAN NHO / CHIP — MOT HINH DANG, THEO badge.tsx ════════════════════════
 *
 * ── DO THAT 26/08/2026, quet ca tep ───────────────────────────────────────
 * Hai muoi mot lop cung dong mot vai — "mot nhan chu nho co nen" — chia lam
 * BA phe ban kinh va BA phe do dam:
 *
 *   ban kinh:  999px (vien thuoc)  .badge .pill .the-nho .vh-tt .vh-chip
 *                                  .ka-chip .uq-tt .ip-tt
 *              4px  (`-sm`)        .dp-cho .dp-live .dp-sp-nhan .vh-cod
 *                                  .ka-ghi .vh-han.qua .tv-dai .tv-song .nhom
 *              8px  (`-md`)        .chip .badge .the-nhan  <- khuon badge.tsx
 *
 *   do dam:    500 (khuon) / 600 / 700
 *
 *   co chu:    12px o khap noi, RIENG `.pill` dat `.78em` = 11px
 *
 * `badge.tsx` cua template: `rounded-md px-2 py-0.5 text-xs font-medium`.
 * Mot hinh, mot do dam, mot co chu. Ba phe tren la ba lan ai do can mot cai
 * nhan va go moi mot cai — dung thu chu shop goi la "mỗi thằng 1 kiểu".
 *
 * ── CHI DAT HINH DANG, GIU MAU ────────────────────────────────────────────
 * Khong dung toi `background`/`color`: mau cua chung mang nghia (do = hong,
 * xanh = tot, xam = thuong). Chi thong nhat hinh dang, do dam va co chu.
 *
 * Cac nhan de LEN ANH (`.tv-dai`, `.tv-song`, `.dp-*`) van giu nen dac cua
 * chung — do la thu lam chung doc duoc tren mot buc anh bat ky.
 */
.badge, .pill, .the-nho, .the-nhan, .chip, .nhom,
.vh-tt, .vh-chip, .vh-cod, .ka-chip, .ka-ghi, .uq-tt, .ip-tt,
.dp-cho, .dp-live, .dp-sp-nhan, .tv-dai, .tv-song, .vh-han.qua {
  border-radius: var(--radius-md);
  padding: 2px var(--k-2);
  font-size: var(--chu-xs);
  line-height: var(--dong-xs);
  font-weight: 500;
  letter-spacing: 0;
}
/* `.pill` truoc day dat `.78em` — 11px, mot bac KHONG co trong thang chu cua
 * he (`--chu-xs` la 12px, nho nhat). Mot co chu ngoai thang la mot co chu
 * khong ai kiem duoc, va no da la co chu nho nhat toan ung dung. */

/* Cham tron dan truoc `.badge` giu nguyen — no la mot hinh, khong phai chu. */
.badge::before { border-radius: 50%; }

/*
 * ══ THANG CHONG LOP (z-index) — MOT BAC THANG, KHONG PHAI 8 CON SO ═════════
 *
 * ── DO THAT 26/08/2026, quet ca tep ───────────────────────────────────────
 * Muoi sau cho dat `z-index`, voi sau gia tri roi rac (5, 10, 20, 30, 40, 50)
 * va KHONG cho nao noi cai nao phai nam tren cai nao. Hai cho DUNG BANG NHAU
 * ma lai phai xep tren duoi:
 *
 *   .rail            20      thanh ben
 *   .drawer          30      ngan chi tiet phien
 *   .toast           40      bao loi
 *   .nd-menu         40      trinh don nguoi dung
 *   .xem-lop         50      lop phu xem video
 *
 * ── MOT LOI THAT TRONG SO DO ──────────────────────────────────────────────
 * `.toast` (40) nam DUOI `.xem-lop` (50). Nghia la: mo mot video len xem, bam
 * mot viec gi do that bai — cau bao loi ve ra SAU tam den, khong ai thay.
 * Nguoi dung chi thay "bam khong an gi ca". Dung loai loi im lang ma
 * CLAUDE.md §8 noi toi: canh bao co keu, nhung khong toi duoc ai.
 *
 * Bao loi PHAI la lop tren cung. No la thu duy nhat co the phai noi ve chinh
 * cai dang nam tren cung.
 *
 * ── BAC THANG, DAT TEN ────────────────────────────────────────────────────
 * Dat theo ten thay vi con so de lan sau khong ai phai doan "40 la cao hay
 * thap". Cach nhau 10 de con cho chen.
 */
:root {
  --z-neo:    10;   /* dau bang dinh, o chon tren anh — trong mot khoi */
  --z-rail:   20;   /* thanh ben, dau trang */
  --z-ngan:   30;   /* ngan chi tiet phien */
  --z-noi:    40;   /* trinh don, o goi y tim kiem */
  --z-lop:    50;   /* lop phu toan man (xem video, thanh ben tren dien thoai) */
  --z-bao:    60;   /* BAO LOI — luon tren cung, xem ly do o tren */
}
.rail { z-index: var(--z-rail); }
.drawer { z-index: var(--z-ngan); }
.nd-menu, .dau-tim-ra { z-index: var(--z-noi); }
.xem-lop { z-index: var(--z-lop); }
.toast { z-index: var(--z-bao); }

/*
 * ══ LOGO live.ai ═══════════════════════════════════════════════════════════
 *
 * ── LOI THAT 26/08/2026 ───────────────────────────────────────────────────
 * Toi thay markup logo vao `index.html` ma QUEN HAN viet luat CSS cho no. Anh
 * ra dung kich thuoc that (336x128), tran ra ngoai thanh ben rong 240px va de
 * len ca danh sach muc. Chu shop chup man hinh: *"icon lỗi tùm lum thế này"*.
 *
 * `<img>` khong co `width`/`height` trong CSS thi lay kich thuoc THAT cua tep.
 * Hai thuoc tinh `width`/`height` tren the HTML chi cho trinh duyet biet ti le
 * de dat cho truoc — chung KHONG gioi han kich thuoc ve.
 *
 * ── HAI TEP, CSS CHON THEO NEN ────────────────────────────────────────────
 * Ca hai the deu nam trong DOM; CSS an mot cai. Khong doi `src` bang JS vi
 * lam vay thi luc trang vua nap trinh duyet da tai mot ban, va neu do la ban
 * sai nen thi co mot nhay logo doi mau.
 *
 * Mac dinh (`:root` khong co thuoc tinh, hoac `sang`) hien ban NEN SANG.
 */
.brand-logo {
  height: 26px; width: auto; max-width: 100%;
  object-fit: contain; flex: none;
  /* Anh co vien trong suot san; khong dat nen de no hoa vao thanh ben. */
  background: none;
}
.brand-logo-toi { display: none; }
html[data-giao-dien="toi"] .brand-logo-sang { display: none; }
html[data-giao-dien="toi"] .brand-logo-toi { display: block; }

/*
 * THANH BEN THU GON (48px) — chu ky khong vua, doi sang BIEU TUONG VUONG.
 *
 * Ca chu rong 68px o chieu cao 26px; thanh ben thu gon chi con ~24px chieu
 * ngang dung duoc. Thu ep chu nho lai cho vua thi no cao 9px — khong doc duoc.
 * Nen o che do do dung chinh tep bieu tuong (ngoi sao + cham tim), la phan duy
 * nhat cua logo nhan ra duoc o co nho.
 */
#app.rail-gon .brand-logo { display: none; }
#app.rail-gon .brand::before {
  content: ''; width: 24px; height: 24px; flex: none;
  background: url('/logo/live-ai-bieu-tuong.png') center/contain no-repeat;
}

/* Man dang nhap: logo to hon, dat giua, va la tieu de cua man. */
.dn-logo { margin: 0 0 var(--k-2); line-height: 0; }
.dn-logo .brand-logo { height: 40px; }

/* Ten shop nay la con TRUC TIEP cua `.brand` (khong con boc trong `.brand-chu`),
 * nen no can tu xuong dong duoi logo thay vi nam canh. */
.brand { flex-wrap: wrap; height: auto; min-height: 48px; padding-top: var(--k-2); }
.brand > .rail-shop { flex: 1 0 100%; }
#app.rail-gon .brand > .rail-shop { display: none; }

/* Chuoi dang CHAY BINH THUONG: mau tin, khong phai mau canh bao. Mot viec
 * dang chay dung khong duoc trong nhu mot su co (26/08/2026). */
#d-chuoi-ket.dang-lam {
  background: var(--tin-nen); border-color: var(--tin-vien); color: var(--tin-text);
}

/*
 * ══ BON BUOC CUA CHUOI TU DONG ═════════════════════════════════════════════
 *
 * Chu shop 26/08/2026: *"khi bật live extension nó phải làm qua rất nhiều
 * bước, mà UI nó chả đổi gì cứ đứng im"* — roi khi co bang buoc: *"sao nó xấu
 * thậm tệ thế này"*.
 *
 * Ban dau bon buoc nam CHEN vao cung dong voi cau chu, kieu "1 Tao phien 2 Lay
 * Key 3 Day luong" — cac so tro thanh mot day so lac giua cau van, va khong co
 * gi cho thay chung la mot TIEN TRINH.
 *
 * Nay: mot hang rieng, cach cau chu mot duong ke, moi buoc la mot o co vach
 * noi giua — doc ra la mot chuoi buoc noi tiep nhau, khong phai mot day so.
 */
.chuoi-buoc {
  list-style: none;
  margin: var(--k-3) 0 0; padding: var(--k-3) 0 0;
  border-top: 1px solid var(--border);
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr);
  gap: 0;
}
@media (max-width: 720px) {
  .chuoi-buoc { grid-auto-flow: row; grid-auto-columns: none; gap: var(--k-2); }
  .cb::after { display: none; }
}

.cb {
  position: relative; min-width: 0;
  display: flex; align-items: center; gap: var(--k-2);
  padding-right: var(--k-3);
  font-size: var(--chu-sm); line-height: var(--dong-sm);
  color: var(--muted-foreground);
}
/* Vach noi giua cac buoc — thu bien mot day o thanh mot TIEN TRINH. */
.cb::after {
  content: ''; position: absolute; right: 0; top: 50%;
  width: var(--k-3); height: 1px; background: var(--border);
}
.cb:last-child { padding-right: 0; }
.cb:last-child::after { display: none; }

.cb > span:last-child {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cb .ico { flex: none; }
.cb-so {
  display: inline-grid; place-items: center; flex: none;
  width: 18px; height: 18px; border-radius: 999px;
  border: 1px solid var(--border);
  font-size: var(--chu-xs); line-height: 1; font-variant-numeric: tabular-nums;
}

/* Buoc DA XONG: vien va chu chim han xuong — mat luot qua, khong dung lai. */
.cb.xong { color: var(--muted-foreground); }
.cb.xong .ico { color: var(--ok-text); }
/* Buoc DANG LAM la thu duy nhat duoc dam — mat phai roi vao dung day. */
.cb.dang { color: var(--foreground); font-weight: 500; }
.cb.hong { color: var(--bad-text); }
.cb.hong .ico { color: var(--bad-text); }

/*
 * Vong quay cua buoc dang lam — dau hieu "may van dang chay" ro nhat, va no
 * chuyen dong nen mat bat duoc ngay ca khi khong doc chu.
 */
.cb-quay {
  width: 16px; height: 16px; flex: none; border-radius: 999px;
  border: 2px solid color-mix(in oklch, currentColor 22%, transparent);
  border-top-color: currentColor;
  animation: cb-quay 0.7s linear infinite;
}
@keyframes cb-quay { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .cb-quay { animation: cb-nhay 1.6s ease-in-out infinite; }
  @keyframes cb-nhay { 50% { opacity: .35; } }
}

/* Khoi bao trang thai chuoi: mot the day du, khong phai mot dong chu troi. */
#d-chuoi-ket {
  display: block; padding: var(--k-3) var(--k-4);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs); margin: var(--k-3) 0;
}
#d-chuoi-ket > b { display: block; margin-bottom: 2px; }
#d-chuoi-ket #d-chuoi-mo { color: var(--muted-foreground); font-size: var(--chu-sm); }
#d-chuoi-ket #d-chuoi-dong { margin-top: var(--k-3); }

/*
 * ══ HANG THE GAP LAI: CUNG HANG PHAI CUNG CHIEU CAO ════════════════════════
 *
 * Chu shop 26/08/2026: *"sao 3 cái tab bên dưới lại không thẳng hàng thế này,
 * nhìn cực kỳ khó chịu, 5 tab ở dưới cũng chiều cao lệch nhau"*.
 *
 * Nguyen nhan: `details { align-self: start }` (luat chung) cong voi
 * `.dk-luoi { align-items: start }`. Ca hai deu cho moi the CHI CAO BANG NOI
 * DUNG cua no. Khi mot `summary` xuong hai dong ("Cách trả lời bình luận" +
 * huy hieu "tự động · cách 20s") thi the do cao hon hai the ben canh.
 *
 * Cung mot luat da ap cho hang the so lieu sang nay (`grid-auto-rows: 1fr`);
 * o day chi la mot ho the khac bi bo sot.
 *
 * `[open]` thi KHONG keo: mot the dang mo chiem ca hang (`grid-column: 1/-1`)
 * va noi dung cua no dai ngan tuy y — keo cac the khac cao theo no la de mot
 * hang trong ron.
 */
.dk-luoi { align-items: stretch; }
.dk-luoi > details:not([open]) { align-self: stretch; }
.dk-luoi > details[open] { align-self: start; }
/* `summary` cao het the de vung bam phu ca o, khong chi mot dong chu. */
.dk-luoi > details:not([open]) > summary { min-height: 100%; align-items: center; }

/*
 * Hai the bieu do o /doanh-thu: tieu de dinh len dinh, con lai bo trong.
 * Chu shop: *"nó cũng không vào giữa, nhìn khó chịu quá"*.
 */
.dt-bieu-do, .dt-top {
  display: flex; flex-direction: column; justify-content: center;
  min-height: 8rem;
}
.dt-bieu-do > :is(h1, h2, h3, h4), .dt-top > :is(h1, h2, h3, h4) {
  margin-bottom: var(--k-2);
}

/*
 * ══ HAI HO THE CON DUNG NEN XAM — QUY NOT VE card.tsx ══════════════════════
 *
 * Chu shop 26/08/2026: *"3 cái card tự dưng lạc quẻ không giống mẫu card bình
 * thường, không có border mà lại background xám"* (Thu vien video), va *"phần
 * Chất lượng video cũng tự dưng cái card lạc quẻ để background là sao"*.
 *
 * Ca hai deu dung `background: var(--panel-2)` — mot mang xam KHONG VIEN. Do
 * la kieu the cua mot ban thiet ke khac: `card.tsx` cua template la nen
 * `--card` (trang, cung mau trang) + vien 1px + bong nhe. Nen tren cung mot
 * man hinh, hai the nay doc ra la "mot loai vat khac" so voi moi the con lai.
 *
 * Chung khong di qua khuon `.tile` vi chung khong phai the SO LIEU — mot cai
 * la o trang thai bo phan, mot cai la nut chon. Nhung DIEN MAO thi phai chung.
 */
.bo-phan .bp, .q-the {
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs);
  padding: var(--k-3) var(--k-4);
}
/* Trang thai van doc duoc — bang MAU CHU va nen mo, khong bang mot vach canh.
 * (Vach canh da bo cho ca he sang nay; day la hai cho con sot.) */
.bo-phan .bp.chet { border-color: var(--bad-vien); background: var(--bad-nen); }
/*
 * O DANG CHON KHONG DOI MAU NEN.
 *
 * DO THAT 26/08/2026 tren /#/cai-dat: ba o "Chất lượng video" — hai o trang
 * (oklch 1), rieng o dang chon xam (oklch .97). Chu shop: *"phần Chất lượng
 * video cũng tự dưng cái card lạc quẻ để background là sao"*.
 *
 * Ban tren (`.q-the`) da doi nen ve `--card`, nhung `.q-the.dang` o giua tep
 * van con `background: var(--accent-dim)` va no HAI LOP nen thang. Dung mo-tip
 * vua can o vach mau canh the: sua ban mot lop, quen ban theo trang thai.
 *
 * Dau hieu "dang chon" nay la VIEN DAM + BONG — dung cach `card.tsx` danh dau
 * mot the duoc chon, va no khong pha vo mat trang.
 */
.q-the.dang { border-color: var(--primary); box-shadow: var(--bong-sm);
  background: var(--card); }

/*
 * BA HOP CON SOT LAI CUNG MOT BENH: nen xam + vien khong deu.
 *
 * `.vh-don` (the don hang o Van hanh) con `border-left: 3px solid var(--line)`
 * — vach mau DA GO sang 26/08 nhung be day 3px thi khong: hop ba canh 1px, mot
 * canh 3px, nhin nhu bi xo. `.pk-them-hang` (khoi them hang o Phat kem) va
 * `.kn-kythuat` (khoi "chi tiet ky thuat" o Ket noi) thi dung nen `--panel-2`
 * — mang xam giua mot trang toan the trang.
 *
 * Chi dat DIEN MAO (nen + vien), KHONG dat dem: `.kn-kythuat` la mot
 * `<details>` co dem doc rieng cho phan tom tat, ghi de dem se lam no vo.
 */
.vh-don, .pk-them-hang, .kn-kythuat {
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border);
}

/*
 * ══ THE NGANG DAI VA TRONG BEN PHAI: DAT MOT HINH O GIUA BEN PHAI ══════════
 *
 * Chu shop 26/08/2026, chi vao mau `tasks` cua template:
 *   "khi các card nó dài ngang và trống bên phải thì họ sẽ để cái icon ở giữa
 *    bên phải chỗ đỡ trống, nghiên cứu làm y như nó đi"
 *
 * Dung — do la mot thu thuat co that trong template: mot the rong ma noi dung
 * ngan de lai mot mang trong ben phai, va mot hinh mo dat o do vua lap cho
 * trong vua NOI THEM cai the do noi ve chuyen gi.
 *
 * Ba luat de no khong thanh trang tri:
 *   1. Hinh MO (`opacity: .12`) va to — no la NEN, khong tranh doc voi chu.
 *   2. `pointer-events: none` — khong bao gio chan mot cu bam.
 *   3. Chi dat o the CO CHO TRONG THAT (khai bang lop `.the-hinh`), khong rai
 *      dai tra: mot the da day noi dung ma them hinh nen thi thanh roi.
 */
.the-hinh {
  position: relative; overflow: hidden;
  /* Du cao cho hinh 64px + dem hai dau. Khong dat thi mot the noi dung ngan
   * cao 48px se CAT mat hinh (do `overflow: hidden`) — hinh con mot vet. */
  min-height: calc(64px + var(--k-6));
  display: flex; flex-direction: column; justify-content: center;
}
.the-hinh > .the-hinh-nen {
  position: absolute; right: var(--k-4); top: 50%; transform: translateY(-50%);
  /* 64px = 16 x 4pt — tren luoi khoang cach cua he. 72 khong nam tren luoi
   * va `test/web-moc.test.js` chan dung. */
  width: 64px; height: 64px; pointer-events: none;
  color: var(--muted-foreground); opacity: .12;
}
.the-hinh > .the-hinh-nen > svg { width: 100%; height: 100%; }
/* Chu khong duoc chui xuong duoi hinh. */
.the-hinh > :not(.the-hinh-nen) { position: relative; padding-right: var(--k-16); }
@media (max-width: 640px) {
  .the-hinh > .the-hinh-nen { display: none; }
  .the-hinh > :not(.the-hinh-nen) { padding-right: 0; }
}

/*
 * ══ QUET CUOI: MOI GIA TRI CON NAM NGOAI HE TOKEN ══════════════════════════
 *
 * Chu shop 26/08/2026: *"làm hết đi, quét tất đi sửa tất"*.
 *
 * Quet ca tep, doi chieu voi thang token. Ket qua thuc te nho hon nhieu so voi
 * con so "350 lop chua quy" toi bao truoc do — vi phan lon cac lop do la BO
 * CUC thuan (be rong cot, vung luoi), khong dat mau/co/bo goc nao ca.
 *
 * Nhung cho THAT SU lech, va tai sao chung lech co hai:
 *
 * ── 1. MAU GO CUNG: KHONG DOI THEO NEN TOI ──────────────────────────────
 * `#ee4d2d`, `#7c4a03`, `#e5e7eb`... la gia tri tuyet doi. O che do toi chung
 * giu nguyen, nen mot chip xam nhat `#e5e7eb` tren nen `oklch(.145 0 0)` thanh
 * mot mang sang choi, va chu `#374151` tren no gan nhu khong doc duoc.
 *
 * Cac bien `--ok-text`, `--warn-text`, `--tin-text`, `--muted-*` DA co ban
 * rieng cho tung che do — dung chung la het.
 *
 * ── 2. BO GOC MOT BEN: TAN DU CUA VACH MAU DA GO ────────────────────────
 * `.tt-muc`, `.tuanthu`, `.canh-obs` co `border-radius: 0 8px 8px 0` — bo goc
 * ba canh, canh trai vuong. Do la hinh dang cua mot the CO VACH MAU o canh
 * trai. Vach do da go sang nay (chu shop: "bỏ cái màu đó đi"), nen gio chung
 * la nhung the vuong mot goc ma khong ai hieu vi sao.
 *
 * ── GIU NGUYEN CO Y ─────────────────────────────────────────────────────
 *   - Mau de len ANH/VIDEO (`.dp-*`, `.tv-dai`, `.xem-*`): phai co dinh, vi
 *     nen cua chung la mot buc anh bat ky, khong phai nen cua giao dien.
 *   - Mau cua ban IN (`.ip-to`, `.ip-truong .muted`): giay luon trang, muc
 *     luon den — khong co che do toi tren giay.
 *   - Lop phu modal (`::backdrop`): luon toi, o ca hai che do.
 */

/* ── Bo goc: tra ve bo goc day du ─────────────────────────────────────── */
.tt-muc, .tuanthu, .canh-obs { border-radius: var(--radius-lg); }
.tab { border-radius: var(--radius-md) var(--radius-md) 0 0; }

/* ── Mau trang thai: dung bien, de doi theo che do ────────────────────── */
.the-nho.canh { color: var(--warn-text); background: var(--warn-nen); }
.vh-don.canlam { color: var(--warn-text); }
.vh-don.dangdi { color: var(--tin-text); }
.ka-chip.nghiepvu { background: var(--muted-bg); color: var(--muted-foreground); }
.ka-duong.nghiepvu { color: var(--muted-foreground); }
.tk-o.tk-het { color: var(--on-bad); }
.tk-o.tk-sap { color: var(--warn-text); background: var(--warn-nen); }
.pk-tt.nhap::before { background: var(--warn); }
.pk-loai-nhap { border-color: var(--tin-vien); }
.pk-loai-xuat-huy { border-color: var(--bad-vien); }
.pk-loai-hoan-ve { border-color: var(--warn-vien); }
.pk-loai-kiem-ke { border-color: var(--border); }
.loi-hop, .ct-canhbao { background: var(--bad-nen); }
.nut-nhanh .nn.nguy:not(:disabled):hover { background: var(--bad-nen); }
.queue li.dang { background: var(--ok-nen); }
button.danger { color: var(--on-bad); }

/* O chon san pham dang chon: dung mau nhan cua he, khong go mau cam Shopee.
 * `#ee4d2d` la mau thuong hieu Shopee — dung no trong giao dien cua minh la
 * muon mot mau cua ben khac, va no khong nam trong bang mau nao o day. */
.sp-o.chon { border-color: var(--primary); background: var(--accent-bg); }

/* ── Bong: quy ve thang `--bong-*` ────────────────────────────────────── */
.xem-hop { box-shadow: var(--bong-lg); }
.dp-sp { box-shadow: var(--bong-md); }


/*
 * ══ BUONG LAI LA MOT LUOI 12 COT, KHONG PHAI MOT HANG FLEX TU XUONG DONG ═══
 *
 * ── CHU SHOP 26/08/2026, kem hai anh chup ─────────────────────────────────
 * *"ảnh khi đang phát phiên live nó thòi ra bàn ở giữa, 2 bên lại cụt bên dưới
 * rất xấu, xem cấu trúc lại cho nó đẹp, đều cho tao"*.
 *
 * ── VI SAO NO LECH ────────────────────────────────────────────────────────
 * Bo cuc cu la `display: flex; flex-wrap: wrap` voi sau khoi, moi khoi mot
 * `flex-basis` chinh tay (26rem / 32rem / 17rem / 20rem / 18rem) va mot
 * `max-width` rieng. Ket qua do duoc tren production:
 *
 *   .dangphat   rong 646  cao 458   day o y=608
 *   .buong-nut  rong 339  cao 218   day o y=368
 *
 * Hai khoi CUNG mot hang, ket thuc cach nhau 240px. Do la cai "cụt bên dưới".
 * Va vi so khoi lot vao moi hang phu thuoc be rong man hinh, khong ai doan
 * duoc hang nao gom khoi nao — nen khong the chinh cho "deu" bang cach chinh
 * them mot `flex-basis` nua. Moi lan chinh la mot bo cuc khac.
 *
 * ── CHUA: LUOI CO TRUC, HAI HANG CUNG MOT BO COT ──────────────────────────
 * Mau `shadcnstore.com/.../dashboard` dung luoi 12 cot. Khoi nao chiem may cot
 * la viet ra, khong de trinh duyet tu quyet.
 *
 *   hang 1 (lam viec):  Dang phat 5 | Hang doi 4 | Buoi live ben Shopee 3
 *   hang 2 (theo doi):  Binh luan 5 | San pham ghim 4 | So lieu 3
 *
 * Hai hang DUNG CHUNG bo cot, nen mep trai/phai cua sau khoi thang hang doc.
 * `align-items: stretch` (mac dinh cua luoi) lam moi khoi trong CUNG mot hang
 * cao bang nhau — het "cụt bên dưới".
 *
 * Thu tu dat cho van la `order: 1..6` da co o tren; luoi tu xep theo do.
 */
.buong-lai {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  grid-auto-rows: min-content;
  align-items: stretch;
  gap: var(--k-4);
}
.buong-lai .dangphat    { grid-column: span 5; }
.buong-lai > .buong-hd  { grid-column: span 4; }
.buong-lai > .buong-nut { grid-column: span 3; }
.buong-lai .buong-bl    { grid-column: span 5; }
.buong-lai .bn-ghim     { grid-column: span 4; }
.buong-lai .kpi         { grid-column: span 3; }

/*
 * VA SAU KHOI DEU LA THE THAT.
 *
 * Truoc day chung la sau kieu khac nhau: `.buong-nut` co mot vach doc ben
 * trai, `.buong-bl` va `.kpi` chi co mot vach ngang o tren, `.buong-hd` va
 * `.bn-ghim` khong co gi. Anh chup cua chu shop cho thay dung dieu do — ba
 * khoi troi noi canh nhau khong ranh gioi.
 *
 * `card.tsx`: vien 1px + nen `--card` + bo goc + bong nhe + dem. Sau khoi cung
 * mot dien mao thi hang moi "deu".
 *
 * `min-width: 0` giu cho noi dung dai (ten video) khong bung cot luoi ra.
 */
/*
 * DAU `>` KHONG XUYEN QUA `display: contents` — bon trong sau khoi nay co cha
 * la `.buong-trai`, du chung la the anh em trong cay HOP. Viet
 * `.buong-lai > .kpi` thi luat khong bao gio khop. Ma nguon o tren da ghi lai
 * mot lan mac loi nay; day la lan thu hai, nen ghi to hon.
 */
.buong-lai .dangphat,
.buong-lai > .buong-hd,
.buong-lai > .buong-nut,
.buong-lai .buong-bl,
.buong-lai .bn-ghim,
.buong-lai .kpi {
  min-width: 0;
  /*
   * LE DOC BANG 0 — cung luat da ghi o `.tiles > .tile`.
   *
   * `stretch` keo o ra bang chieu cao HANG, roi margin AN vao trong phan do:
   * o co margin thap hon dung bang margin. Do that ngay sau khi dung luoi
   * nay: `.bn-ghim` (mot `<details>`, co margin mac dinh) bat dau o y=632
   * trong khi hai khoi cung hang bat dau o y=624. Doc CSS cua `.bn-ghim`
   * khong thay gi sai — margin den tu kieu mac dinh cua the.
   */
  margin-block: 0;
  /* Luoi quyet dinh be rong. `flex-basis`/`max-width` chinh tay cua bo cuc cu
   * chi con lam khoi khong lap day o cua no. */
  flex: none; max-width: none;
  padding: var(--k-4);
  background: var(--card); color: var(--card-foreground);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--bong-xs);
}

/*
 * MAN HEP. 12 cot chia 5/4/3 chi doc duoc khi con du be ngang cho cot hep
 * nhat (3/12 cua vung noi dung). Duoi 1180px thi gap doi lai: 6/6, roi 12.
 */
@media (max-width: 1180px) {
  .buong-lai .dangphat, .buong-lai > .buong-hd, .buong-lai > .buong-nut,
  .buong-lai .buong-bl, .buong-lai .bn-ghim, .buong-lai .kpi {
    grid-column: span 6;
  }
}
@media (max-width: 760px) {
  .buong-lai .dangphat, .buong-lai > .buong-hd, .buong-lai > .buong-nut,
  .buong-lai .buong-bl, .buong-lai .bn-ghim, .buong-lai .kpi {
    grid-column: span 12;
  }
}

/*
 * ══ THE SO LIEU TRONG MOT THE TO: CO CHU VA VI TRI PHAI THEO ═══════════════
 *
 * ── CHU SHOP 26/08/2026, kem anh chup /#/doanh-thu ────────────────────────
 * *"mày để card to mà chữ nhỏ xấu quá, đã thế margin lại còn lệch không vào
 * giữa, nó bị lệch lên trên... trong 1 card to thì vị trí, margin, fontsize
 * chữ nó phải chỉnh cho phù hợp"*.
 *
 * ── DO THAT ───────────────────────────────────────────────────────────────
 * Hang bon the o /#/doanh-thu: moi the rong ~390px, CAO 120px, nhung noi dung
 * chi ~60px. The cao 120px vi the "Lãi gộp" co them mot dong chan
 * (`.tile-chan`) va `grid-auto-rows: 1fr` keo ca hang cao theo. Ba the kia
 * khong co dong chan nen noi dung nam sat MEP TREN va bo trong 60px phia duoi.
 *
 * ── HAI CHUA, LAY TU CHINH MAU ────────────────────────────────────────────
 * 1. CO CHU LON HON KHI THE DU RONG.
 *
 *    Mau lam bang TRUY VAN KHOI CHUA (`text-2xl @[250px]/card:text-3xl`).
 *    Ben minh KHONG DUNG DUOC cach do: `container-type: inline-size` da tung
 *    lam CAT CUT so doanh thu tren production ("1.417.2…"), va `#sl-tong .tile`
 *    hien dat `container-type: normal` CO Y de chua loi day — xem khoi chu
 *    thich dai o `#sl-tong .tile`. Bat lai la mo lai dung cai loi do.
 *
 *    (Toi da viet mot khoi `@container (min-width: 250px)` truoc khi doc doan
 *    do, va no CHET LANG: `container-type` do ra `normal`, dieu kien khong bao
 *    gio dung. Do lai tren trang that moi thay — CLAUDE.md muc 1.)
 *
 *    Cach thay the: dem SO THE TRONG HANG bang `:has()`. Hang bon the tro
 *    xuong thi moi the du rong cho co chu 3xl; hang nam the (bang dieu hanh)
 *    thi khong. Va chi tu 1400px tro len — duoi do vung noi dung hep lai va
 *    bon the cung thanh chat.
 *
 * 2. THE KHONG CO DONG CHAN THI CAN GIUA NOI DUNG THEO CHIEU DOC.
 *    The co dong chan van `space-between` — dau tren, chan duoi, dung nhu mau.
 *    The khong co thi phan thua chia deu tren duoi thay vi don het xuong duoi.
 *    Day KHONG mau thuan voi luat "the to bat dau tu tren" (`.luoi-o > .o`):
 *    o day khong co tieu de nao de neo, chi hai dong chu ngan.
 */
.tile { justify-content: space-between; }
.tile:not(:has(.tile-chan)) { justify-content: center; }
/*
 * NHUNG CA HANG PHAI CUNG MOT KIEU.
 *
 * Do that sau ban vá dau: hang tren /#/doanh-thu co bon the, rieng "Lãi gộp"
 * co dong chan. Ba the kia can giua, the do khong — nen NHAN cua chung nam o
 * bon do cao khac nhau. Sua mot lech thanh mot lech khac.
 *
 * Trong MOT hang, chi can mot the co dong chan la ca hang neo TREN: luc do
 * bon cai nhan thang hang, va cho trong don xuong duoi — dung nhu `card.tsx`.
 * Hang khong the nao co dong chan thi ca hang can giua.
 */
.tiles:has(.tile-chan) .tile { justify-content: space-between; }
/*
 * DO TREN TRANG THAT truoc khi sua (CLAUDE.md muc 1):
 *
 *   .tiles .tile o Bang dieu hanh   rong 310  container inline-size  chu 24px
 *   #sl-tong .tile o Doanh thu      rong 512  container NORMAL       chu 24px
 *   .dem-luoi .dem-o o Doanh thu    rong 388  (khong phai `.tile`)   chu 24px
 *
 * `@container (min-width: 250px) { .tile b }` CO chay — nhung no la (0,1,1),
 * nen o hai man co bo chon mang ID no thua:
 *   `#dh-tomtat .tile b`  (1,1,1)  -> Bang dieu hanh giu 24px  (dung: 310px hep)
 *   `#sl-tong .tile b`    (1,1,1)  -> Doanh thu giu 24px       (SAI: 512px)
 *
 * Nen chi phai sua DUNG hai cho, khong phai viet them mot co che thu hai:
 */
/* The 512px — day la cai the chu shop chi vao ("card to mà chữ nhỏ"). */
#sl-tong .tile b { font-size: var(--chu-3xl); line-height: var(--dong-3xl); }
/*
 * O dem cua hang tren /#/doanh-thu (`.dem-o`) khong phai `.tile` nen khong co
 * truy van khoi chua nao cham toi. The rong 388px, cao 102px, chu 24px, VA
 * noi dung don len dinh — dung ca hai loi chu shop chi ra trong mot the.
 */
.dem-luoi .dem-so { font-size: var(--chu-3xl); line-height: var(--dong-3xl); }
.dem-luoi .dem-o { justify-content: center; }
/*
 * CUNG LUAT "ca hang mot kieu" nhu `.tiles:has(.tile-chan)`.
 *
 * Do that: o "Lãi gộp" co dong thu ba ("chưa đơn nào biết giá vốn"), nen khi
 * can giua thi nhan cua no nam o y=145 con ba o kia o y=156. Chi mot o co dong
 * phu la CA HANG neo tren — luc do bon cai nhan thang hang.
 */
.dem-luoi:has(.dem-o > :nth-child(3)) .dem-o { justify-content: flex-start; }

/*
 * ══ BANG: CO DIEM NHAN, KHONG PHAI MOT MANG CHU DEN ════════════════════════
 *
 * ── CHU SHOP 26/08/2026 ───────────────────────────────────────────────────
 * *"trong tab sản phẩm, các màn mà có table, hiện toàn bộ các cột trong table
 * nó chữ màu đen hết nhìn chả có focus gì và nhìn rất xấu, các phần đặc biệt
 * nhấn mạnh thì phải để màu khác nữa"*.
 *
 * `table.tsx` cua mau: than bang la chu MO (`text-muted-foreground` cho cot
 * phu), va cot DINH DANH cung mot vai gia tri quan trong moi giu mau chu day.
 * Mat nguoi doc luot doc theo cot dau; cac cot con lai la so lieu tra cuu.
 *
 * ── VI SAO `:where()` ─────────────────────────────────────────────────────
 * `:where()` co do dam dac BANG KHONG. Nghia la moi lop dat mau san — `.muted`,
 * `.tt-tot`, `.tt-chet`, `.badge`, `.pill` — deu THANG luat nay ma khong phai
 * ke ten chung ra o day. Neu viet `tbody td:first-child` (0,1,2) thi no se de
 * len ca mot o co y dat `.muted`, va toi se phai di sua tung cho.
 *
 * Do dung la cai bay "ban theo trang thai thang ban chung" da can hai lan hom
 * nay (vach mau canh the, nen o dang chon). `:where()` la cach chan no tu goc
 * thay vi doi bat duoc.
 */
tbody :where(td) { color: var(--muted-foreground); }
tbody :where(td:first-child) { color: var(--foreground); font-weight: 500; }
/*
 * COT DAU KHONG PHAI LUC NAO CUNG LA COT DINH DANH.
 *
 * DO THAT 26/08/2026 tren bang dieu hanh: cot dau cua bang phien la mot O CHAM
 * TRANG THAI (`<td><span class="cham-tt tot">`) — o do KHONG co chu, va luat
 * tren dang do dam mot o rong trong khi "Thế giới Bé Bé" o cot hai thi mo.
 * Nhan manh roi vao dung cho khong co gi de nhan.
 *
 * O cham / o tick / o nut la COT DIEU KHIEN. Cot dinh danh la cot ngay sau no.
 */
/*
 * COT DIEU KHIEN = o tick, o cham trang thai, o anh bia. Chung khong co chu
 * nao, nen do dam chung la nhan manh vao mot o trong.
 *
 * Bang san pham co HAI cot nhu vay lien nhau (o tick, roi anh), nen phai bat
 * duoc ca chuoi hai o — do that 26/08/2026: nhan manh roi vao o ANH, con ten
 * san pham o cot ba thi mo.
 */
tbody :where(td.c-chon, td:has(> input), td:has(> img),
             td:has(> .cham-tt), td:has(> .cham), td:has(> .dot), td:has(> .thumb)) {
  color: var(--muted-foreground); font-weight: 400;
}
/*
 * O dinh danh = o dau tien SAU chuoi cot dieu khien (chiu duoc toi da hai o).
 *
 * `:not(...)` la phan BAT BUOC: khong co no thi o thu hai cua bang san pham
 * (o ANH) van khop luat nay va lai duoc do dam — dung cai vua sua. Mot o
 * dieu khien khong bao gio la o dinh danh, du no dung o vi tri nao.
 */
/*
 * O TICK la cot DIEU KHIEN; o NHAP LIEU thi khong — chinh no la o dinh danh.
 *
 * Do that 27/08/2026 tren /#/cai-dat, bang `#shop-table`: cot dau la mot
 * `<input>` chua TEN SHOP, va luat duoi day day nhan manh sang cot hai — chu
 * "shopee" (ten san, mot hang so). Nhan manh roi vao mot tu khong phan biet
 * duoc dong nay voi dong kia.
 *
 * Nen chi `input[type="checkbox"]` moi tinh la dieu khien. Mot o nhap chu thi
 * chinh no mang danh tinh, va no duoc to o luat ngay duoi.
 */
tbody :where(
  td.c-chon:first-child + td:not(:has(> img)):not(:has(> input)):not(:has(> .thumb)),
  td:first-child:has(> input[type="checkbox"], > img, > .cham-tt, > .cham, > .dot, > .thumb)
    + td:not(:has(> img)):not(:has(> input)):not(:has(> .thumb)),
  td.c-chon:first-child + td:has(> img) + td,
  td:first-child:has(> input[type="checkbox"]) + td:has(> img) + td
) { color: var(--foreground); font-weight: 500; }
/* O nhap lieu mang danh tinh (ten shop, ten phieu...) — to nhu cot dinh danh. */
tbody :where(td:first-child > input:not([type="checkbox"])) {
  color: var(--foreground); font-weight: 500;
}

/*
 * TIEN LA CON SO NGUOI TA DEN DAY DE XEM — no phai day mau.
 * *"các phần đặc biệt nhấn mạnh thì phải để màu khác nữa"* (chu shop 26/08).
 */
tbody :where(td.sp-o-gia, td.c-tien, td[class$="-gia"]) {
  color: var(--foreground); font-weight: 500; font-variant-numeric: tabular-nums;
}
/* Gia tri duoc nhan manh trong mot o: ten dam, so tien, con so chinh. */
tbody :where(td b, td strong, td .tien, td .so, td a) { color: var(--foreground); }


/*
 * ══ DAI SO LIEU TRONG BUONG LAI: LUOI HAI COT, KHONG PHAI HANG TU XUONG DONG
 *
 * DO THAT 26/08/2026 sau khi buong lai thanh luoi: `.kpi` la o hep nhat cua
 * hang (3/12 cot, 380px) nhung `.kpi-o` van la mot hang flex tu xuong dong —
 * nen nam con so xep thanh 3 + 2, hai o cuoi le sang trai va phan con lai bo
 * trong. Trong mot the cao 410px thi cho trong do bang nua the.
 *
 * Hai cot co truc: nam so xep 2/2/1 deu nhau, va o cuoi tu chiem het hang.
 */
.buong-lai .kpi-o {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--k-4);
  align-content: start;
}
.buong-lai .kpi-o > div { min-width: 0; }
/* Nhan cua khoi "San pham dang ghim" khong duoc xuong hai dong canh vien ghim:
 * tieu de tren mot dong, ten san pham xuong dong duoi. */
.bn-ghim > summary { display: flex; flex-wrap: wrap; align-items: center; gap: var(--k-2); }
.bn-ghim > summary > .pill { flex: 1 1 100%; }

/*
 * Danh sach mon Shopee khong nhan — nam trong the "San pham dang ghim".
 * Nen canh bao mo + vien: day la mot trang thai CAN NGUOI XU LY, khong phai
 * mot dong tin binh thuong. Mau khong phai tin hieu duy nhat — cau chu ngay
 * trong khoi noi ro phai lam gi.
 */
/*
 * KHOI DAI `.ghim-cam` DA GO 27/08/2026 — thay bang mot NUT + hop noi.
 *
 * Chu shop: *"nó làm card 'Sản phẩm đang ghim' đầy dài ngoằng làm 2 card 2 bên
 * trống rỗng"*. Ba the trong hang buong lai cao bang nhau, nen mot khoi dai o
 * the giua keo ca hang cao theo — hai the ben canh thanh hai o trong.
 *
 * Nut mang mau canh bao de no khong lan vao cac nut thao tac binh thuong: day
 * la mot viec CAN NGUOI XU LY, khong phai mot nut bam cho vui.
 */
.ghim-cam-nut {
  margin-top: var(--k-3); align-self: flex-start;
  display: inline-flex; align-items: center; gap: var(--k-2);
  border-color: var(--warn-vien); background: var(--warn-nen); color: var(--warn-text);
}
.ghim-cam-nut:hover:not(:disabled) { border-color: var(--warn); }
/* Danh sach trong hop noi: mot mon mot khoi, ly do o dong duoi bang chu mo. */
#ghim-cam-ds { max-height: 22rem; overflow-y: auto; }
#ghim-cam-ds li { display: grid; gap: 2px; padding-left: var(--k-3); }

/*
 * ══ NUT KHONG DUOC KEO HET BE NGANG CUA MOT THE ════════════════════════════
 *
 * DO THAT 27/08/2026 tren /#/tien-ich: "Lưu" va "Thử kết nối" la con TRUC TIEP
 * cua `.o` — mot hop `display: flex; flex-direction: column`. Con cua flex cot
 * bi keo het be ngang theo mac dinh, va `.o` khong co `gap`, nen hai nut ra
 * 759px va DINH VAO NHAU: mot mang den chong mot mang trang.
 *
 * Moi hang nut khac trong ca ung dung deu nam trong mot hop rieng
 * (`.kn-nut`, `.ct-nut-dau`, `.toolbar`) — nam ngang, co khoang cach. Hai nut
 * kia da duoc boc vao `.kn-nut`.
 *
 * Luat duoi day la LUOI AN TOAN cho lan sau: ai them mot nut thang vao `.o` ma
 * quen boc thi no van khong bung ra het be ngang. Khong the bat bang bai kiem
 * van ban — chi nhin thay khi do tren trang that.
 */
.luoi-o > .o > button,
.doi-ngang > .o > button {
  align-self: flex-start;
  margin-top: var(--k-2);
}

/*
 * ══ HAI THU LAM CA TRANG "NHAY" KHI DOI TAB ════════════════════════════════
 *
 * Chu shop 27/08/2026: *"tao thay chua dong bo chua dep lam"* — sau khi bo
 * quet tu dong da bao sach. Bo quet do dung: no soi tung man MOT MINH. Cai
 * chu shop thay la thu chi hien ra khi DOI QUA DOI LAI giua cac man.
 *
 * ── 1. BE RONG VUNG NOI DUNG NHAY 15px ────────────────────────────────────
 * Do that:
 *   /#/                 rong 1616   (noi dung ngan, khong co thanh cuon)
 *   /#/san-pham         rong 1601   (noi dung dai, CO thanh cuon)
 *
 * Muoi lam pixel do la be rong thanh cuon. Moi lan bam sang mot tab dai hon
 * hay ngan hon, CA trang xe dich ngang — tieu de, the, bang, tat ca. Do la thu
 * mat nguoi ta thay ngay ma khong goi ten duoc.
 *
 * `scrollbar-gutter: stable` giu san cho cho thanh cuon o MOI man, co hay
 * khong. Vung noi dung dung yen.
 */
html { scrollbar-gutter: stable; }

/*
 * ── 2. TIEU DE TRANG O HAI DO CAO KHAC NHAU ───────────────────────────────
 * Do that:
 *   man CO nut o hang tieu de (`/`, `/san-pham`...)   -> h1 dinh o y=82
 *   man KHONG co nut  (`/tien-ich`, `/cai-dat`...)    -> h1 dinh o y=80
 *
 * Ca hai deu dung `.toolbar`, va `.toolbar` deu bat dau o y=80. Chenh lech
 * den tu chieu cao cua chinh no: co nut thi hang cao 36px, khong nut thi cao
 * 32px (bang chieu cao chu), va `align-items: center` day tieu de xuong 2px.
 *
 * `min-height: 36px` — hang tieu de luon mot chieu cao, du no chua gi.
 */
.toolbar { min-height: 36px; }


/*
 * ══ MOT BAC BO GOC CHO THE, MOT BAC CHO DIEU KHIEN ═════════════════════════
 *
 * ── CHU SHOP 27/08/2026 ───────────────────────────────────────────────────
 * *"Check kỹ lại đi tao thấy chưa đồng bộ chưa đẹp lắm"*.
 *
 * ── DO THAT tren production, dem theo tung gia tri ────────────────────────
 *   14px  130 hop   <- `--radius-xl`, bac cua THE (`card.tsx`)
 *    8px   34 hop   <- `--radius-md`, bac cua O NHAP / NUT
 *   10px    6 hop   <- `--radius-lg`, KHONG THUOC BAC NAO
 *
 * Sau cai hop 10px do la: `.dem-o` (hang o dem tren /#/doanh-thu),
 * `.dt-phien` (khoi "Doanh thu theo từng buổi phát"), `.canh-bao`,
 * `.tt-muc`, `.tuanthu`, `.canh-obs`.
 *
 * `.dem-o` la vi du ro nhat: no nam NGAY TREN mot hang `.tile` bo goc 14px,
 * cung mot man hinh, cung mot loai noi dung (nhan + con so). Bon pixel chenh
 * nhau thi khong ai chi ra duoc, nhung mat nhin thay ngay la "hai loai vat".
 *
 * `card.tsx` cua mau co DUNG MOT bac cho the (`rounded-xl`). Nen mot hop CO
 * VIEN, du rong hon 120px, deu di ve `--radius-xl`.
 */
.dem-o, .dt-phien, .canh-bao, .tt-muc, .tuanthu, .canh-obs, .cy-muc, .ka-duong {
  border-radius: var(--radius-xl);
}

/*
 * VA MOT BAC DEM CHO THE.
 *
 * Do that: cac hop co vien dang dung `16px`, `12px 16px`, va
 * `12px 16px 16px` — ba bac cho cung mot vai tro. `.dt-phien` la cai la nhat:
 * dem duoi 16 ma dem tren 12.
 *
 * `card.tsx` dung mot bac (`px-6`, tuc dem deu). Ben minh chon `--k-4` (16px)
 * — da la bac cua `.o`, `.tile`, va cac the trong buong lai.
 */
.dt-phien { padding: var(--k-4); }

/* Ten shop tren dong nhat ky — luat "hien thi phai theo shop" (26/08/2026).
   Truoc do moi dong nhat ky khong noi no cua shop nao, va chu shop da doc mot
   canh bao cua shop The gioi Be Be thanh chuyen cua shop Sukem.
   Dung the phu giong `.badge` cua shadcn (badge.tsx, bien the `secondary`). */
.nk-shop {
  flex: none;
  padding: 0 var(--k-2);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--secondary);
  color: var(--secondary-foreground);
  font-size: var(--chu-xs);
  line-height: 1.5rem;
  white-space: nowrap;
}

/* ══════════════════════════════════════════════════════════════════════════
   HÀNG "THÊM MỚI" DƯỚI BẢNG PHẢI THẲNG CỘT ĐẦU

   Đo trên trang thật 27/08/2026, phần Shop ở /#/cai-dat:
     bảng bắt đầu ở x=1105.5 → viền 1px → ô ở 1106 → đệm 8px → ô nhập ở 1114.5
     ô "Tên shop mới"                                                ở 1105.5
   Lệch đúng 9px, và mắt bắt được ngay vì hai ô nhập xếp thẳng dưới nhau.

   `table ~ .add-row` bắt mọi hàng thêm mới nằm sau một bảng, nên không phải
   gắn lớp tay ở mười chỗ trong HTML — chỗ quên sẽ không tự báo.

   Cộng 1px cho VIỀN bảng, không chỉ đệm ô: thiếu nó vẫn lệch 1px. */
table ~ .add-row { padding-left: calc(var(--k-2) + 1px); }

/* ══════════════════════════════════════════════════════════════════════════
   CON SỐ TRONG BẢNG — điểm nhấn, không phải nền

   Chủ shop, 27/08/2026: "cột nào cũng đều chữ đen xì nhìn không có điểm nhấn
   và khó nhìn ... tùy giá trị cho nó màu khác để nhìn đẹp và có focus".

   Đo trên trang thật trước khi sửa: ô `.c-so` chứa số 46 có màu oklch(0.535)
   đậm 400 — NHẠT NHẤT hàng, nhạt hơn cả nhãn bên trái nó. Bảng vẽ ra để người
   ta đọc con số, mà con số lại chìm nhất.

   Lớp trạng thái do `toMauSo()` trong app.js gắn (CSS không đọc được nội dung
   chữ). Ba mức, mang nghĩa chứ không trang trí:

     .so-khong  0 / rỗng / "—"   lùi ra sau — không có gì phải làm
     .so-co     số khác 0        đậm lên — đây là thứ cần đọc
     .so-canh   ô tự khai mức    dùng lại --warn sẵn có
     .so-xau    ô tự khai mức    dùng lại --destructive sẵn có

   KHÔNG tự suy "số to là xấu": 116 lần quét vi phạm là tốt, 116 cảnh báo là
   xấu — máy không phân biệt được, nên chỉ tô cảnh báo khi chính ô đó khai.

   Đủ 0,2,0 để thắng `tbody :where(td)` (0,0,2) — `:where` không có trọng số,
   nên một lớp đơn cũng đủ, nhưng hai lớp thì không phải nhớ luật đó nữa. */
/* KHOÁ VÀO LỚP TRẠNG THÁI, KHÔNG ĐÒI KÈM `.c-so`.
   Bản đầu viết `.c-so.so-co`, và đo trên trang thật thì ô `169` ĐÃ ĐƯỢC gắn
   `so-co` mà màu vẫn `oklch(0.535)` — vì ô đó không có `.c-so` (bảng phiên ở
   Bảng điều hành không gắn lớp nào cả). Lớp gắn rồi mà không ai tô: nhìn mã
   thì tưởng đang chạy, chỉ đo trên trình duyệt mới thấy.
   Một lớp đơn (0,1,0) đã thắng `tbody :where(td)` (0,0,2) vì `:where` không
   mang trọng số. */
.so-co    { color: var(--foreground); font-weight: 600; }
.so-khong { color: var(--muted-foreground); font-weight: 400; }
.so-canh  { color: var(--warn-text); font-weight: 600; }
.so-xau   { color: var(--bad-text); font-weight: 600; }

/* Số luôn đọc theo cột: chữ số cùng bề rộng thì mắt so hàng trên hàng dưới
   được. Trước đây chỉ `.vh-bang-don .c-so` có, tức đúng một bảng. */
.c-so { font-variant-numeric: tabular-nums; }

/* ══════════════════════════════════════════════════════════════════════════
   RÀ GIAO DIỆN NHIỀU CỠ MÀN — 27/08/2026

   Chủ shop: "thiết kế hiện tại mày mới check cho mỗi màn fullhd, kéo nhỏ lại
   hay màn nhỏ là vỡ hết giao diện, chữ đè".

   Đo bằng cách nạp chính ứng dụng trong một <iframe> đặt bề rộng cố định —
   `@media` bên trong iframe tính theo khung của nó, nên đó là phép đo thật chứ
   không phải đọc CSS rồi đoán. Cửa sổ Chrome ở máy này không đổi kích thước
   được (`outerWidth` đứng yên ở 1920), nên iframe là đường duy nhất đo được.
   ════════════════════════════════════════════════════════════════════════ */

/* ── 1. BẢNG KHÔNG ĐƯỢC ĐẨY CẢ TRANG TRÀN NGANG ────────────────────────────
   Đo ở khung 1024: `/#/san-pham` có `scrollWidth` vượt `clientWidth` 103px.
   Bảng sản phẩm cần tối thiểu 832px trong khoảng trống 729px.

   Tràn ngang cả trang là kiểu vỡ nặng nhất: cột cuối bị cắt mất, và người ta
   phải cuộn ngang cả trang mới thấy — kể cả phần đầu trang vốn vừa vặn.

   `:has(> table)` bắt MỌI khối chứa bảng, kể cả bảng thêm sau này. Bọc tay
   từng bảng là mười cơ hội quên một cái, và chỗ quên sẽ không tự báo
   (CLAUDE.md §4b). Dự án đã có `.bang-cuon` cho việc này nhưng nó phải nhớ
   gắn tay — nên bảng sản phẩm không có. */
main :where(.o, .bh-phan, .card, section) :has(> table),
main :where(.o, .bh-phan):has(> table) { overflow-x: auto; }

/* ── 2. THANH CÔNG CỤ PHẢI XUỐNG DÒNG ĐƯỢC ─────────────────────────────────
   Đo ở `/#/doanh-thu`: `.toolbar` là `display:flex; gap:8px; flex-wrap:nowrap`
   với năm khối (tiêu đề, dải mốc, hai ô ngày, nút tải lại) rộng tổng 1281px.
   `nowrap` nghĩa là màn hẹp hơn thì chúng ép nhau bẹp rồi tràn — đúng cái chủ
   shop gọi là "kéo nhỏ lại là vỡ hết".

   Cho xuống dòng thì màn hẹp thành hai hàng, xấu hơn một chút nhưng đọc được;
   `nowrap` thì mất chữ. */
.toolbar { flex-wrap: wrap; }

/* ── 3. HAI NHÓM ĐIỀU KHIỂN PHẢI TÁCH NHAU ─────────────────────────────────
   `/#/doanh-thu`: dải "Hôm nay · 7 ngày · 15 ngày · 30 ngày" kết thúc ở x=1044,
   ô "Từ ngày" bắt đầu ở x=1052 — cách nhau ĐÚNG 8px, bằng khoảng cách giữa các
   nút BÊN TRONG một nhóm. Mắt không tách được đâu là hết nhóm này, đâu là bắt
   đầu nhóm kia, nên đọc ra một hàng dài lộn xộn.

   Khoảng cách trong nhóm 8px thì giữa hai nhóm phải rộng hơn hẳn. */
.toolbar > .dt-moc { margin-right: var(--k-5); }

/* ── 4. DẢI LỌC SÁT BẢNG HƠN ───────────────────────────────────────────────
   `/#/san-pham`: đáy dải chip ở y=216, đỉnh bảng ở y=264 — hở 48px (16px lề
   dưới của chip cộng 32px lề trên của `.mt`, hai lề này không gộp).

   Dải lọc và bảng là MỘT khối nghĩa: bấm chip nào thì bảng đổi theo. Hở 48px
   làm chúng đọc ra như hai phần rời nhau. */
/* Hai lề KHÔNG gộp ở đây (đo: 16 dưới chip + 32 trên bảng = 48px thật), nên
   phải triệt lề dưới của chip chứ không chỉ hạ lề trên của bảng — bản đầu chỉ
   hạ một vế và còn 32px. */
.sp-chip:has(+ table), .sp-chip:has(+ .bang-cuon) { margin-bottom: 0; }
.sp-chip + table,
.sp-chip + .bang-cuon { margin-top: var(--k-4); }

/* ── 5. HÀNG THÀNH VIÊN THẲNG HÀNG ─────────────────────────────────────────
   `/#/cai-dat`, phần Thành viên. Đo tâm dọc của từng điều khiển trong CÙNG một
   hàng: ô chọn vai trò 255, huy hiệu 255,5, nút Xoá 255 — nhưng chữ "tất cả
   shop" ở 236,5. Lệch 19px, và đó là cái chủ shop thấy là "siêu vẹo".

   Nguyên nhân: ô "Shop được giao" chứa `<span>` rồi `<select>`, hai thứ tự
   xuống dòng nên ô cao gấp đôi; các ô khác canh giữa theo chiều cao mới đó,
   còn chữ trong ô này thì nằm ở dòng trên.

   Cho ô đó thành một hàng ngang canh giữa: chữ và ô chọn nằm cùng dòng, hàng
   trở lại một tầng, mọi thứ thẳng nhau. `wrap` để màn hẹp vẫn xuống dòng được
   thay vì tràn. */
.tv-giao {
  display: flex; align-items: center; gap: var(--k-2); flex-wrap: wrap;
}
/* Ô vẫn là ô bảng thật — đổi `display` của chính `<td>` là kéo nó ra khỏi
   thuật toán bảng và làm lệch cả cột. Đã thử và đo: lệch vẫn còn 22px. */
td:has(> .tv-giao) { vertical-align: middle; }
