/* Khu quản trị — nội bộ, ít người dùng, ưu tiên ĐỌC NHANH hơn là đẹp.

   ⭐ TÔNG MÀU theo thuộc tính `data-theme` trên thẻ <html>, do đoạn script trong <head> đặt (App.razor):
   lựa chọn người dùng đã lưu → nếu chưa có thì theo hệ điều hành. Bảng SÁNG là mặc định, bảng TỐI nằm trong
   :root[data-theme="dark"]. Toàn bộ giao diện chỉ đọc qua biến, không gán màu cứng ở đâu nữa — gán cứng một
   chỗ là chỗ đó "kẹt" ở một tông và tạo ra đúng kiểu lệch lạc nửa sáng nửa tối.

   ⚠️ KHÔNG dùng @media (prefers-color-scheme): nút đổi tông sẽ không thắng nổi nó, bấm "sáng" mà máy đang
   để tối thì vẫn ra tối.
*/

/* ⭐ color-scheme phải BÁM THEO tông đang chọn. Để cố định "light dark" là bảo trình duyệt tự tô nền gốc,
   thanh cuộn và ô nhập theo HỆ ĐIỀU HÀNH — chọi với màu CSS tô, ra giao diện lem nửa sáng nửa tối. */
:root[data-theme="light"] { color-scheme: light; }
:root[data-theme="dark"]  { color-scheme: dark; }

:root {

    --bg: #ffffff;
    --panel: #f5f7fa;
    --surface: #ffffff;
    --line: #dfe4ec;
    --text: #16202f;
    --muted: #5c6880;
    --accent: #1657c8;
    --warn: #a86a00;
    --danger: #c62828;
    --ok: #0f8a5f;

    --input-bg: #ffffff;
    --btn-bg: #eef2f8;
    --btn-fg: #16202f;
    --btn-border: #cfd8e6;
    --btn-hover: #e2e9f4;
    --btn-danger-bg: #fdecec;
    --btn-danger-fg: #a01d1d;
    --btn-danger-border: #f0bcbc;
    --btn-danger-hover: #fbdcdc;

    --chip-bg: #eef2f8;
    --row-panel: #f0f3f8;
    --side-hover: #e9eef6;
    --side-active-bg: #dbe6fa;
    --side-active-fg: #0f3f9e;
    --code-fg: #23324a;
    --shadow: 0 8px 28px rgba(20, 40, 90, .10);
}

:root[data-theme="dark"] {
    --bg: #0f1115;
    --panel: #171a21;
    --surface: #171a21;
    --line: #262b35;
    --text: #e6e8ec;
    --muted: #8b94a7;
    --accent: #4c9aff;
    --warn: #ffb020;
    --danger: #ff5c5c;
    --ok: #3ecf8e;

    --input-bg: #0d1016;
    --btn-bg: #223049;
    --btn-fg: #dce6f7;
    --btn-border: #2f4160;
    --btn-hover: #2a3a58;
    --btn-danger-bg: #3a1f24;
    --btn-danger-fg: #ffc9c9;
    --btn-danger-border: #5b2a31;
    --btn-danger-hover: #4a262c;

    --chip-bg: #1f2430;
    --row-panel: #12151b;
    --side-hover: #1f2430;
    --side-active-bg: #223049;
    --side-active-fg: #ffffff;
    --code-fg: #cbd3e1;
    --shadow: 0 8px 28px rgba(0, 0, 0, .35);
}

* { box-sizing: border-box; }

html, body {
    margin: 0;
    background: var(--bg);
    color: var(--text);
    font: 15px/1.55 "Segoe UI", system-ui, -apple-system, sans-serif;
}

a { color: var(--accent); text-decoration: none; }
h1 { font-size: 22px; margin: 0 0 4px; }
h2 { font-size: 17px; margin: 26px 0 8px; }
h3 { font-size: 15px; margin: 0 0 6px; }
code { font-family: ui-monospace, Consolas, monospace; font-size: 13px; color: var(--code-fg); }
code.fp { font-size: 12px; color: var(--muted); }

.muted { color: var(--muted); font-size: 13px; }
.err { color: var(--danger); }
.ok { color: var(--ok); }
.warn-text { color: var(--warn); }

/* ---- khung ---- */
.admin { display: flex; min-height: 100vh; }

.side {
    width: 200px;
    flex: 0 0 200px;
    background: var(--panel);
    border-right: 1px solid var(--line);
    padding: 16px 10px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.side .brand { font-weight: 700; padding: 4px 10px 14px; }
.side .brand span { color: var(--muted); font-weight: 400; }
.side a, .side .linkbtn {
    display: block;
    padding: 8px 10px;
    border-radius: 6px;
    color: var(--text);
    background: none;
    border: 0;
    text-align: left;
    font: inherit;
    cursor: pointer;
}
.side a:hover, .side .linkbtn:hover { background: var(--side-hover); }
.side a.active { background: var(--side-active-bg); color: var(--side-active-fg); }
.side .spacer { flex: 1; }

main { flex: 1; padding: 20px 26px 60px; min-width: 0; }
.who { float: right; color: var(--muted); font-size: 13px; }
.who .role { color: var(--accent); }

/* ---- thẻ số ---- */
.cards { display: flex; gap: 12px; flex-wrap: wrap; margin: 14px 0; }
.card {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 14px 16px;
    min-width: 170px;
    color: var(--text);
}
.card.warn { border-color: var(--warn); }
.card .num { font-size: 24px; font-weight: 600; }
.card .lbl { color: var(--muted); font-size: 13px; }

/* ---- bảng ---- */
table.grid, table.kv { width: 100%; border-collapse: collapse; margin-top: 10px; }
table.grid th, table.grid td, table.kv th, table.kv td {
    border-bottom: 1px solid var(--line);
    padding: 8px 10px;
    text-align: left;
    vertical-align: top;
}
table.grid th { color: var(--muted); font-weight: 500; font-size: 13px; }
table.kv th { width: 220px; color: var(--muted); font-weight: 500; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }
tr.merged { opacity: .55; }
tr.panel td { background: var(--row-panel); }

.chip {
    display: inline-block;
    background: var(--chip-bg);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 1px 9px;
    margin: 1px 3px 1px 0;
    font-size: 12px;
}

/* Feature đã hết hạn: vẫn hiện để còn tra ngược, nhưng phải nhìn ra ngay là đã hết. */
.chip.off { color: var(--danger); border-color: var(--danger); }

.st { padding: 1px 8px; border-radius: 999px; font-size: 12px; background: var(--chip-bg); }
.st.completed, .st.active { color: var(--ok); }
.st.pending { color: var(--warn); }
.st.refunded, .st.revoked, .st.expired, .st.suspended { color: var(--danger); }

/* ---- điều khiển ---- */
.toolbar { display: flex; gap: 10px; align-items: center; margin: 12px 0; flex-wrap: wrap; }
input, select {
    background: var(--input-bg);
    color: var(--text);
    border: 1px solid var(--line);
    border-radius: 6px;
    padding: 7px 10px;
    font: inherit;
    min-width: 200px;
}
input[type=checkbox] { min-width: 0; }
button {
    background: var(--btn-bg);
    color: var(--btn-fg);
    border: 1px solid var(--btn-border);
    border-radius: 6px;
    padding: 7px 12px;
    font: inherit;
    cursor: pointer;
}
button:hover { background: var(--btn-hover); }
button.danger { background: var(--btn-danger-bg); border-color: var(--btn-danger-border); color: var(--btn-danger-fg); }
button.danger:hover { background: var(--btn-danger-hover); }
button:disabled { opacity: .5; cursor: default; }
button.linkbtn { background: none; border: 0; color: var(--muted); }
.stack { display: flex; flex-direction: column; gap: 6px; max-width: 380px; }
.stack label { color: var(--muted); font-size: 13px; margin-top: 6px; }
.panel-box {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 14px 16px;
    margin-top: 16px;
}

/* ---- đăng nhập ---- */
.login-wrap { display: flex; min-height: 100vh; align-items: center; justify-content: center; }
.login {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: 10px;
    padding: 26px 28px;
    width: 340px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.login h1 { margin-bottom: 14px; }
.login h1 span { color: var(--muted); font-weight: 400; }
.login label { color: var(--muted); font-size: 13px; margin-top: 8px; }
.login button { margin-top: 16px; padding: 9px; }

/* ---- ma trận giá ---- */
table.matrix input.price { min-width: 110px; text-align: right; }
table.matrix th.off, table.matrix tr.off { opacity: .55; }

/* ---- dùng thử (S13) ---- */
/* Dòng đã tắt / đã hết hạn: mờ đi nhưng KHÔNG ẩn — vẫn phải tra ngược được. */
tr.off { opacity: .55; }

.stats { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }

.checks { display: flex; flex-direction: column; gap: 6px; }
.check { display: flex; align-items: flex-start; gap: 8px; }
.check input { margin-top: 3px; }

textarea {
    background: var(--input-bg);
    color: var(--text);
    border: 1px solid var(--line);
    border-radius: 6px;
    padding: 8px 10px;
    font: inherit;
    width: 100%;
    resize: vertical;
}

/* Trang công khai: không có thanh bên nên tự căn giữa. */
.public-wrap { max-width: 620px; margin: 40px auto; padding: 0 16px; }

/* Thẻ đăng ký dùng thử. min-width của .card hợp cho ô thống kê nhỏ, không hợp cho biểu mẫu ⇒ ghi đè. */
.trial-card {
    min-width: 0;
    width: 100%;
    padding: 20px 22px;
    box-shadow: var(--shadow);
}

.trial-card .card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 4px;
}

.trial-card .card-head h2 { margin: 0; font-size: 18px; }

/* Trong thẻ, các ô nhập chiếm hết bề ngang — min-width 200px của input sẽ làm vỡ khung hẹp. */
.trial-card input[type=text],
.trial-card input:not([type]) { width: 100%; min-width: 0; }

.trial-card .stack { gap: 4px; max-width: none; }
.trial-card label { margin-top: 8px; }
.trial-card textarea { font-family: ui-monospace, Consolas, monospace; font-size: 12px; }
