:root {
  --bg: #F7F8F7; --panel: #FFFFFF; --ink: #16201C; --muted: #5E6B64;
  --faint: #8B968F; --rule: #DDE3DF; --rule-2: #C3CDC7;
  --accent: #B45309; --accent-soft: #FBF1E5; --accent-ink: #FFFFFF;
  --ai: #3F5C6B; --ai-soft: #EDF2F4;
  --sans: system-ui, -apple-system, "Inter", "Segoe UI", sans-serif;
  --serif: ui-serif, "Source Serif 4", "Iowan Old Style", Georgia, serif;
  --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --shadow: 0 1px 3px rgba(22,32,28,.07);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg: #10150F; --panel: #171E18; --ink: #E7EDE8; --muted: #9EABA3;
    --faint: #78847C; --rule: #262F29; --rule-2: #38443C;
    --accent: #E9A25C; --accent-soft: #2A2016; --accent-ink: #16201C;
    --ai: #9EC2D2; --ai-soft: #1A2429;
    --shadow: 0 1px 3px rgba(0,0,0,.35);
  }
}
* { box-sizing: border-box; }
body {
  margin: 0; background: var(--bg); color: var(--ink);
  font-family: var(--sans); font-size: 16px; line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
.app { max-width: 680px; margin: 0 auto; padding: 0 20px 80px; }

header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 0 16px; border-bottom: 1px solid var(--rule); margin-bottom: 26px;
}
header .who { font-family: var(--serif); font-size: 19px; font-weight: 600; }
header .who small { display: block; font-family: var(--mono); font-size: 11px; color: var(--faint); font-weight: 400; }
.streak { display: flex; align-items: baseline; gap: 6px; font-family: var(--mono); font-size: 13px; color: var(--muted); }
.streak b { font-family: var(--serif); font-size: 26px; color: var(--accent); font-weight: 600; }

h1 { font-family: var(--serif); font-size: 28px; font-weight: 600; margin: 0 0 8px; text-wrap: balance; letter-spacing: -.01em; }
h2 { font-family: var(--serif); font-size: 22px; font-weight: 600; margin: 0 0 10px; text-wrap: balance; }
.cap { color: var(--muted); margin: 0 0 26px; }

.task {
  display: flex; gap: 14px; align-items: flex-start; width: 100%; text-align: left;
  background: var(--panel); border: 1px solid var(--rule); border-radius: 10px;
  padding: 16px 18px; margin-bottom: 10px; cursor: pointer; font: inherit; color: inherit;
  box-shadow: var(--shadow); transition: border-color .12s;
}
.task:hover:not(:disabled) { border-color: var(--accent); }
.task:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.task:disabled { cursor: default; opacity: .7; }
.task .n {
  flex: none; width: 30px; height: 30px; border-radius: 50%;
  display: grid; place-items: center; font-family: var(--mono); font-size: 13px; font-weight: 600;
  background: var(--accent-soft); color: var(--accent);
}
.task[data-done="true"] .n { background: var(--accent); color: var(--accent-ink); }
.task .body { flex: 1; }
.task .body b { display: block; font-size: 16px; margin-bottom: 2px; }
.task .body span { font-size: 13.5px; color: var(--muted); }
.task .state { font-family: var(--mono); font-size: 11px; color: var(--faint); letter-spacing: .05em; flex: none; padding-top: 4px; }

.card { background: var(--panel); border: 1px solid var(--rule); border-radius: 10px; padding: 18px 20px; margin-bottom: 12px; box-shadow: var(--shadow); }
.card .kind { font-family: var(--mono); font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--faint); display: block; margin-bottom: 9px; }
.card p { margin: 0; }
.card ol { margin: 0; padding-left: 20px; }
.card ol li { margin-bottom: 5px; }
.termname { font-weight: 600; }
.cmp { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--rule); border: 1px solid var(--rule); border-radius: 7px; overflow: hidden; }
.cmp > div { background: var(--panel); padding: 12px 14px; }
.cmp b { display: block; font-size: 13px; color: var(--accent); margin-bottom: 3px; }
.latex { font-family: var(--mono); font-size: 15px; background: var(--accent-soft); padding: 10px 13px; border-radius: 5px; overflow-x: auto; }
.capt { font-size: 13px; color: var(--muted); margin-top: 7px; }
.gl { margin-top: 11px; padding-top: 10px; border-top: 1px dashed var(--rule-2); font-size: 13px; color: var(--muted); }
.gl b { color: var(--ink); }

.ctx { background: var(--ai-soft); border-left: 3px solid var(--ai); border-radius: 0 7px 7px 0; padding: 12px 16px; margin-bottom: 14px; font-size: 15px; }

.prompt { font-size: 17px; margin: 0 0 14px; }
.opts { display: flex; flex-direction: column; gap: 8px; margin-bottom: 18px; }
.opt {
  display: flex; gap: 11px; align-items: flex-start; text-align: left; width: 100%;
  background: var(--panel); border: 1px solid var(--rule-2); border-radius: 8px;
  padding: 12px 15px; font: inherit; color: inherit; cursor: pointer;
}
.opt:hover:not(:disabled) { border-color: var(--accent); }
.opt:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.opt[aria-pressed="true"] { border-color: var(--accent); background: var(--accent-soft); }
.opt:disabled { cursor: default; }
.opt .mk { flex: none; font-family: var(--mono); font-size: 12px; color: var(--faint); padding-top: 2px; }

.blanks { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.blanks input {
  font: inherit; font-size: 15px; padding: 9px 12px; min-width: 120px;
  border: 1px solid var(--rule-2); border-radius: 7px; background: var(--panel); color: var(--ink);
}
.blanks input:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; border-color: var(--accent); }
textarea {
  font: inherit; font-size: 15.5px; width: 100%; min-height: 130px; padding: 12px 14px;
  border: 1px solid var(--rule-2); border-radius: 8px; background: var(--panel); color: var(--ink); resize: vertical;
}
textarea:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; border-color: var(--accent); }
.bank { font-family: var(--mono); font-size: 13px; color: var(--muted); margin-bottom: 14px; }
.bank span { display: inline-block; background: var(--accent-soft); padding: 2px 8px; border-radius: 4px; margin: 0 5px 5px 0; color: var(--accent); }

button.go {
  font: inherit; font-weight: 600; font-size: 15.5px; padding: 11px 26px;
  background: var(--accent); color: var(--accent-ink); border: 0; border-radius: 8px; cursor: pointer;
}
button.go:disabled { opacity: .45; cursor: default; }
button.go:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
button.ghost { background: none; color: var(--muted); border: 1px solid var(--rule-2); }

.row { display: flex; gap: 10px; align-items: center; margin-top: 18px; flex-wrap: wrap; }
.back { background: none; border: 0; font: inherit; font-size: 14px; color: var(--muted); cursor: pointer; padding: 0; margin-bottom: 16px; }
.back:hover { color: var(--accent); }

/* Phản hồi — KHÔNG dùng đỏ/xanh cho đúng/sai (AST-005). Một sắc duy nhất,
   khác nhau ở CHỮ chứ không ở màu. */
.fb { border-left: 3px solid var(--accent); background: var(--accent-soft); border-radius: 0 8px 8px 0; padding: 14px 18px; margin-top: 16px; }
.fb b { display: block; margin-bottom: 5px; }
.fb ul { margin: 8px 0 0; padding-left: 18px; font-size: 14.5px; }

.terms { display: flex; flex-direction: column; gap: 10px; }
.term { background: var(--panel); border: 1px solid var(--rule); border-radius: 9px; padding: 14px 17px; box-shadow: var(--shadow); }
.term b { font-size: 17px; }
.term .vi { color: var(--accent); font-size: 14.5px; margin-left: 8px; }
.term p { margin: 5px 0 0; font-size: 14.5px; color: var(--muted); }

.login { max-width: 380px; margin: 90px auto; text-align: center; }
.login input { font: inherit; font-size: 16px; padding: 11px 14px; width: 100%; border: 1px solid var(--rule-2); border-radius: 8px; background: var(--panel); color: var(--ink); margin-bottom: 12px; }
.login input:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.warn { font-size: 13px; color: var(--muted); background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; padding: 12px 15px; margin-top: 22px; text-align: left; }
.warn b { color: var(--ink); }
.err { color: var(--accent); font-size: 14.5px; margin-top: 12px; }
.done { text-align: center; padding: 40px 0; }
.done .big { font-family: var(--serif); font-size: 46px; color: var(--accent); font-weight: 600; line-height: 1; }

/* ── khởi tạo hồ sơ (AST-001) và đồng ý phụ huynh (AST-011) ─────────────── */

.field { margin-bottom: 14px; }
.field label {
display: block; font-size: 13px; font-weight: 600; color: var(--muted);
margin-bottom: 5px; letter-spacing: .02em;
}
.field input, .field select {
font: inherit; font-size: 16px; padding: 11px 13px; width: 100%;
border: 1px solid var(--rule-2); border-radius: 8px;
background: var(--panel); color: var(--ink);
}
.field input:focus-visible, .field select:focus-visible {
outline: 2px solid var(--accent); outline-offset: 1px; border-color: var(--accent);
}

.card ul { margin: 0; padding-left: 20px; }
.card ul li { margin-bottom: 6px; }

.linkbox {
font-family: var(--mono); font-size: 13px; word-break: break-all;
background: var(--accent-soft); color: var(--accent);
padding: 10px 12px; border-radius: 6px; user-select: all;
}

/* Ô khai báo giám hộ — BR-17 điều kiện 3. Đặt DƯỚI phần cảnh báo và mặc định
   tắt; không có đường nào bật nó mà không đi qua màn đó. */
.check {
display: flex; gap: 11px; align-items: flex-start;
background: var(--panel); border: 1px solid var(--rule-2); border-radius: 8px;
padding: 14px 16px; margin: 16px 0 0; cursor: pointer; font-size: 14.5px;
}
.check input { margin: 3px 0 0; width: 18px; height: 18px; flex: none; accent-color: var(--accent); }
.check:has(input:focus-visible) { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ── Màn giới thiệu, danh mục khoá học, đăng nhập ────────────────────────── */

.gate-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 0 16px; border-bottom: 1px solid var(--rule); margin-bottom: 30px;
}
.brand {
  font-family: var(--serif); font-size: 19px; font-weight: 600;
  background: none; border: 0; padding: 0; color: inherit; cursor: pointer;
}
.tagline {
  font-family: var(--mono); font-size: 12px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--accent); margin: 0 0 8px;
}
.lede { font-size: 17.5px; color: var(--muted); margin: 0 0 4px; text-wrap: pretty; }

/* `.go` gốc chỉ khớp `button.go`. Ô chọn ảnh đại diện là một `<label for>` —
   phải là label để một cú bấm mở được hộp chọn tệp mà không cần JS — nên nhãn
   đó cần cùng một hình dạng. */
label.go { display: inline-block; font: inherit; font-weight: 600; font-size: 15.5px;
  padding: 11px 26px; background: var(--accent); color: var(--accent-ink);
  border: 0; border-radius: 8px; cursor: pointer; }
label.ghost { background: none; color: var(--muted); border: 1px solid var(--rule-2); }
.go.small, label.go.small { font-size: 14px; padding: 8px 16px; }

/* Vạch "hoặc" giữa đăng nhập bằng mật khẩu và đăng nhập bằng nhà cung cấp. */
.sep { display: flex; align-items: center; gap: 12px; margin: 18px 0 14px; color: var(--faint); font-size: 13px; }
.sep::before, .sep::after { content: ""; flex: 1; height: 1px; background: var(--rule); }

.login .go, .login label.go { width: 100%; }
.prov { margin-bottom: 10px; }
.swap { font-size: 14px; color: var(--muted); margin-top: 18px; }
.link { background: none; border: 0; padding: 0; font: inherit; color: var(--accent); cursor: pointer; text-decoration: underline; }

/* Thẻ khoá học — dùng ở cả màn giới thiệu lẫn phần Khám phá sau khi đăng nhập. */
.courses { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.course {
  display: flex; flex-direction: column; gap: 6px; text-align: left; width: 100%;
  background: var(--panel); border: 1px solid var(--rule); border-radius: 10px;
  padding: 16px 18px; font: inherit; color: inherit; cursor: pointer;
  box-shadow: var(--shadow); transition: border-color .12s;
}
.course:hover { border-color: var(--accent); }
.course:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.course__top { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.course__subject { font-family: var(--mono); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--accent); }
.course__grade { font-family: var(--mono); font-size: 11px; color: var(--faint); }
.course b { font-family: var(--serif); font-size: 17px; font-weight: 600; }
.course__desc { font-size: 14px; color: var(--muted); }
.course__meta { font-family: var(--mono); font-size: 12px; color: var(--faint); }

/* Chủ đề trong một khoá. Chỉ tên và số bài — server không trả tên từng bài. */
.units { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
.unit { display: flex; gap: 13px; align-items: baseline; padding: 12px 0; border-bottom: 1px solid var(--rule); }
.unit__n { font-family: var(--mono); font-size: 12px; color: var(--faint); flex: none; width: 22px; }
.unit__body b { font-family: var(--serif); font-size: 16.5px; font-weight: 600; display: block; }
.unit__body span { font-family: var(--mono); font-size: 12px; color: var(--faint); }

/* ── Thanh tab của người đã đăng nhập ────────────────────────────────────── */

.tabs { display: flex; gap: 4px; margin: 0 0 26px; border-bottom: 1px solid var(--rule); }
.tab {
  font: inherit; font-size: 14.5px; background: none; border: 0;
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  padding: 9px 14px; color: var(--muted); cursor: pointer;
}
.tab[aria-pressed="true"] { color: var(--ink); border-bottom-color: var(--accent); font-weight: 600; }
.tab:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }

/* ── Màn Khoá học ────────────────────────────────────────────────────────── */

.pills { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 22px; }
.pill {
  font: inherit; font-size: 14px; padding: 7px 14px; cursor: pointer;
  background: var(--panel); color: var(--muted);
  border: 1px solid var(--rule-2); border-radius: 999px;
}
.pill[aria-pressed="true"] { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.pill em { font-style: normal; font-family: var(--mono); font-size: 10.5px; margin-left: 7px; opacity: .75; }

/* Bốn trạng thái của BR-27. KHÔNG có thanh tiến độ và KHÔNG có phần trăm ở đây
   — BR-19 cấm, và cách chắc chắn nhất để giữ là không có class nào để dùng. */
.mus { display: flex; flex-direction: column; gap: 4px; margin: 0 0 20px; }
.mu {
  display: flex; gap: 12px; align-items: center; width: 100%; text-align: left;
  font: inherit; font-size: 15px; padding: 10px 14px; cursor: pointer;
  background: none; border: 1px solid transparent; border-radius: 8px; color: inherit;
}
.mu:hover { border-color: var(--rule-2); }
.mu:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.mu__mark { flex: none; width: 20px; font-size: 13px; color: var(--accent); text-align: center; }
.mu__title { flex: 1; }
.mu__state { font-family: var(--mono); font-size: 11px; color: var(--faint); letter-spacing: .04em; flex: none; }
.mu[data-state="done"] .mu__title { color: var(--muted); }
.mu[data-state="upcoming"], .mu[data-state="locked"] { color: var(--faint); }
.mu__why { font-size: 14px; color: var(--muted); margin: 2px 0 10px 46px; }

/* ── Màn Tài khoản ───────────────────────────────────────────────────────── */

.avatar-row { display: flex; gap: 18px; align-items: center; margin-bottom: 26px; }
.avatar {
  flex: none; width: 72px; height: 72px; border-radius: 50%; overflow: hidden;
  background: var(--accent-soft); color: var(--accent);
  display: grid; place-items: center; font-family: var(--serif); font-size: 30px; font-weight: 600;
  border: 1px solid var(--rule);
}
.avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.avatar-row__acts { display: flex; gap: 8px; flex-wrap: wrap; }

/* `field-opt`, KHÔNG phải `opt`: `.opt` đã là nút đáp án trắc nghiệm ở trên, và
   dùng lại tên đó biến chữ "không bắt buộc" thành một ô có viền trông hệt một ô
   nhập thứ hai. Đã xảy ra thật. */
.field .field-opt { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--faint); }
.hint { font-size: 13.5px; color: var(--muted); margin: 6px 0 10px; }
.field.readonly { margin-top: 28px; padding-top: 18px; border-top: 1px solid var(--rule); }
.ro { display: grid; grid-template-columns: auto 1fr; gap: 4px 16px; margin: 0; font-size: 15px; }
.ro dt { font-family: var(--mono); font-size: 12px; color: var(--faint); align-self: center; }
.ro dd { margin: 0; }

.chips { display: flex; gap: 8px; flex-wrap: wrap; }
.chip {
  font: inherit; font-size: 14.5px; padding: 8px 16px; cursor: pointer;
  background: var(--panel); color: var(--muted);
  border: 1px solid var(--rule-2); border-radius: 999px;
}
.chip[aria-pressed="true"] { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
.chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* Xác nhận đã lưu. Cùng một sắc với `.err` — khác nhau ở CHỮ, không ở màu, đúng
   nguyên tắc AST-005 đã áp cho khối phản hồi ở trên. */
.ok { color: var(--accent); font-size: 14.5px; margin-top: 12px; }
.uid { font-family: var(--mono); font-size: 11px; color: var(--faint); margin-top: 26px; }

/* Liên kết trong thân trang — mặc định của trình duyệt là xanh dương, thứ duy
   nhất trên trang không đến từ bảng token. */
a { color: var(--accent); }
