/*! Jueyin Study Hub · assets/study-hub.css · v1.7
 * Giao diện module học tập dùng chung (ThuPhong, LoTrinh, Note).
 * Mọi class bắt đầu bằng "jyh-". Không đổi .btn, .card, .grid, .label của trang.
 */
/* Chữ số kiểu Georgia cho bảng điểm, bộ đếm; unicode-range chỉ gồm chữ số, dấu câu cơ bản và × − – —,
   nên chữ cái (kể cả tiếng Việt có dấu) luôn dùng phông kế tiếp trong --jy-font-num */
@font-face{font-family:"Jueyin Num";src:local("Georgia");font-weight:100 550;unicode-range:U+0020-0040,U+00B7,U+00D7,U+2013-2014,U+2026,U+2212}
@font-face{font-family:"Jueyin Num";src:local("Georgia Bold"),local("Georgia-Bold");font-weight:551 900;unicode-range:U+0020-0040,U+00B7,U+00D7,U+2013-2014,U+2026,U+2212}


/* ==========================================================================
   1. MỘT CHỖ ĐỔI MÀU
   Bảng màu lấy từ chính trang Thư phòng (--ink #251711, --red #721f24,
   --paper #faf7f1, --surface #fffdf9, --line #d7c2a8, --gold #b99054,
   --muted #706158), chỉ làm ấm và dịu hơn một chút cho phần học tập.
   Mọi màu, bo góc và chuyển động của module nằm trong khối này.
   ========================================================================== */
:root{
  /* Mực, nâu tối (cuống vé, thanh phiên học, bản đồ) */
  --jy-ink:#251711;
  --jy-dark:#2a1912;
  --jy-dark2:#3d2519;
  --jy-dark3:#5a3a2a;
  /* Đỏ son trầm: màu nhấn chính */
  --jy-accent:#7a2228;
  --jy-accent-hi:#8d2c32;
  --jy-accent-lo:#5f181d;
  /* Giấy */
  --jy-bg:#faf7f1;
  --jy-surface:#fffdf9;
  --jy-cream:#f6efe5;
  --jy-cream2:#ede2d2;
  --jy-line:#dfcdb6;
  --jy-line2:#ece2d5;
  /* Chữ phụ */
  --jy-muted:#706158;
  --jy-faint:#9a887c;
  /* Vàng: --jy-gold cho nét và chữ trên nền tối, --jy-gold-ink cho chữ trên nền sáng */
  --jy-gold:#c9a266;
  --jy-gold-hi:#e8c895;
  --jy-gold-ink:#8a6631;
  --jy-sand:#ead9c2;
  /* Trạng thái */
  --jy-ok:#2f6b52;
  --jy-bad:#a5352e;
  --jy-bronze:#a0703f;

  /* Cùng màu ở dạng R,G,B để pha độ trong */
  --jy-ink-rgb:37,23,17;
  --jy-dark-rgb:42,25,18;
  --jy-dark2-rgb:61,37,25;
  --jy-accent-rgb:122,34,40;
  --jy-sand-rgb:234,217,194;
  --jy-gold-rgb:201,162,102;
  --jy-ok-rgb:47,107,82;
  --jy-bad-rgb:165,53,46;

  /* Kính mờ trên nền tối */
  --jy-glass:rgba(var(--jy-dark-rgb),.62);
  --jy-glass-strong:rgba(var(--jy-dark-rgb),.93);
  --jy-glass-edge:rgba(var(--jy-sand-rgb),.34);
  --jy-blur:saturate(140%) blur(14px);

  /* Bóng (cùng kiểu bóng thẻ của trang) */
  --jy-shadow:0 14px 42px rgba(52,28,19,.08);
  --jy-shadow-lift:0 20px 44px -22px rgba(52,28,19,.42);
  --jy-glow:0 4px 10px -6px rgba(var(--jy-ink-rgb),.4);

  /* Chuyển động */
  --jy-ease-out:cubic-bezier(.2,.8,.2,1);
  --jy-ease-spring:cubic-bezier(.34,1.56,.64,1);
  --jy-ease-in:cubic-bezier(.4,0,1,1);
  --jy-t-fast:120ms;
  --jy-t-base:240ms;
  --jy-t-slow:480ms;
  --jy-t-epic:1200ms;

  /* Chữ (cùng phông của trang) */
  --jy-font-ui:Aptos,"Segoe UI Variable","Segoe UI","Noto Sans","Noto Sans Devanagari","Nirmala UI",Roboto,Arial,sans-serif;
  /* v1.6.6: bỏ Georgia khỏi phông chữ: Georgia không có dấu chồng tiếng Việt (ố, ầ, ễ, ộ… bị tách dấu).
     Chữ số vẫn dùng Georgia qua "Jueyin Num" (chỉ gồm chữ số và dấu câu), chữ cái rơi sang Palatino Linotype. */
  --jy-font-title:"Palatino Linotype",Palatino,"Noto Serif",Cambria,"Times New Roman",serif;
  --jy-font-han:"Songti SC","Noto Serif SC","Noto Serif CJK SC","Source Han Serif SC",STSong,"SimSun",serif;
  --jy-font-num:"Jueyin Num","Palatino Linotype",Palatino,"Noto Serif",Cambria,"Times New Roman",serif;

  /* Hình khối: bo góc vừa phải */
  --jy-r:6px;
  --jy-r-card:10px;
  --jy-r-tile:14px;
  --jy-notch:12px;
  --jy-tap:44px;
  --jy-tap-game:56px;

  /* Hạt giấy cho nền tối */
  --jy-grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ==========================================================================
   2. TRANG GIỮ NGUYÊN MÀU CŨ
   body.jyh-theme chỉ sửa vài chỗ cần cho module, không đổi màu của trang.
   ========================================================================== */

/* overflow-x:hidden của trang làm hỏng position:sticky của thanh tab.
   clip vẫn che phần tràn nhưng không tạo vùng cuộn mới. */
@supports (overflow:clip){
  body.jyh-theme{overflow-x:clip!important}
}
@supports not (overflow:clip){
  body.jyh-theme{overflow-x:visible!important}
}

/* ==========================================================================
   3. NỀN MÓNG CỦA MODULE
   ========================================================================== */
.jyh-band,.jyh-root,.jyh-hsearch-host,.jyh-start{
  font-family:var(--jy-font-ui);
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
  font-synthesis:none;
}
.jyh-band *,.jyh-root *,.jyh-hsearch-host *{box-sizing:border-box}
.jyh-band :where(button,input,select,textarea),
.jyh-root :where(button,input,select,textarea),
.jyh-hsearch-host :where(button,input){font:inherit;color:inherit}
.jyh-band :where(button),.jyh-root :where(button),.jyh-hsearch-host :where(button){cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.jyh-band :where(a),.jyh-root :where(a){color:inherit}
.jyh-band :where(h2,h3,h4),.jyh-root :where(h2,h3,h4){font-family:var(--jy-font-title);font-weight:500;margin:0}
.jyh-band :where(p),.jyh-root :where(p){margin:0}
.jyh-band [hidden],.jyh-root [hidden],.jyh-hsearch-host [hidden]{display:none!important}
html:lang(hi) .jyh-band,html:lang(hi) .jyh-root,html:lang(hi) .jyh-hsearch-host{font-family:"Nirmala UI","Noto Sans Devanagari",var(--jy-font-ui)}

.jyh-sr{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.jyh-han{font-family:var(--jy-font-han);font-weight:500;letter-spacing:.02em}
.jyh-py{font-family:var(--jy-font-ui);letter-spacing:.01em}
.jyh-kicker{display:inline-flex;align-items:center;gap:.5em;font-size:.75rem;font-weight:850;letter-spacing:.16em;text-transform:uppercase;line-height:1.4}
.jyh-muted{color:var(--jy-muted)}
.jyh-gold{color:var(--jy-gold-ink)}
.jyh-italic{font-family:var(--jy-font-title);font-style:normal;font-weight:500}
.jyh-num{font-family:var(--jy-font-num);font-variant-numeric:lining-nums tabular-nums}

/* Icon nét (sprite) */
.jyh-i{width:1.25em;height:1.25em;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.22em}
.jyh-i--fill{fill:currentColor;stroke:none}
.jyh-sprite{position:absolute;width:0;height:0;overflow:hidden}

/* Vòng focus thống nhất */
.jyh-band :focus-visible,.jyh-root :focus-visible,.jyh-hsearch-host :focus-visible{outline:2px solid rgba(var(--jy-accent-rgb),.55);outline-offset:2px}
.jyh-night :focus-visible,.jyh-full--night :focus-visible,.jyh-full__bar :focus-visible{outline-color:var(--jy-gold-hi)}

/* ==========================================================================
   4. HERO CỦA THƯ PHÒNG
   Giữ ảnh và màu gốc. Lớp phủ nhẹ hơn để ảnh không bị che.
   Một nút bắt đầu, ô mã ưu đãi, ô tìm kiếm cùng hàng với Đăng nhập.
   ========================================================================== */
body.jyh-theme .hero>img{filter:saturate(.9) contrast(1.05)}
body.jyh-theme .hero::before{
  background:
    linear-gradient(90deg,rgba(28,14,9,.86) 0%,rgba(28,14,9,.6) 40%,rgba(28,14,9,.16) 74%,rgba(28,14,9,.04) 100%),
    linear-gradient(0deg,rgba(28,14,9,.6) 0%,rgba(28,14,9,0) 52%);
}
body.jyh-theme .hero p{text-shadow:0 1px 2px rgba(20,10,6,.4)}
body.jyh-theme .hero .actions{gap:9px;align-items:center}
body.jyh-theme .hero .btn{min-height:44px;border-radius:var(--jy-r);font-family:var(--jy-font-ui);transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast),transform var(--jy-t-fast) var(--jy-ease-out)}
body.jyh-theme .hero .btn:active{transform:scale(.97)}
body.jyh-theme .hero .btn.ghost{background:rgba(37,23,17,.42);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
body.jyh-theme .hero .btn.ghost:hover{background:rgba(37,23,17,.62);border-color:rgba(255,255,255,.7)}

/* Nút bắt đầu (thay chỗ "Học HSK 1") */
body.jyh-theme .hero .btn.jyh-start{gap:10px;padding-inline:18px;border-color:#f3e2c7;background:#f3e2c7;color:var(--jy-ink)}
body.jyh-theme .hero .btn.jyh-start:hover{background:#fbeedb;border-color:#fbeedb}
.jyh-start .jyh-i{font-size:1.05rem;stroke-width:2;transition:transform var(--jy-t-base) var(--jy-ease-out)}
.jyh-start:hover .jyh-i{transform:translateX(3px)}

/* Ô mã ưu đãi: luôn hiện (khách bấm Áp dụng sẽ được nhắc đăng nhập) */
body.jyh-theme .hero .actions .library-redeem[hidden]{display:flex!important}
body.jyh-theme .hero .library-redeem{min-height:44px;padding:3px;border-color:rgba(255,255,255,.5);border-radius:var(--jy-r);background:rgba(37,23,17,.5);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
body.jyh-theme .hero .library-redeem input{min-height:36px;border-radius:4px;width:clamp(130px,13vw,176px)}
body.jyh-theme .hero .library-redeem button{min-height:36px;border-radius:4px}
body.jyh-theme .hero .library-redeem-status a{color:#fff3df;font-weight:750}

/* Cụm tài khoản: ô tìm kiếm đứng trước Đăng nhập, luôn cùng một hàng.
   Tự đủ, không phụ thuộc ui-refinement.css (mở trang ở máy vẫn đúng). */
body.jyh-theme .hero .actions{display:flex;flex-wrap:wrap}
body.jyh-theme .hero .account-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:9px;margin-left:auto;padding-left:14px;border-left:1px solid rgba(255,255,255,.34)}
body.jyh-theme .hero .account-actions>.btn{flex:0 0 auto;white-space:nowrap}
.jyh-hsearch-host{display:contents}
.jyh-hsearch{
  position:relative;display:flex;align-items:center;width:clamp(184px,18vw,244px);min-height:44px;margin:0;
  border:1px solid rgba(255,255,255,.42);border-radius:var(--jy-r);background:rgba(37,23,17,.42);color:#fff;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);cursor:text;
  transition:border-color var(--jy-t-fast),background-color var(--jy-t-fast);
}
.jyh-hsearch:hover{border-color:rgba(255,255,255,.7)}
.jyh-hsearch:focus-within{border-color:#e8c895;background:rgba(37,23,17,.7)}
.jyh-hsearch>.jyh-i{margin-left:12px;color:#ead9c2;font-size:1.05rem}
.jyh-hsearch__input{flex:1;min-width:0;height:42px;padding:0 8px 0 9px;border:0;background:transparent;color:#fff;font:600 15px/1.2 var(--jy-font-ui);outline:0!important}
.jyh-hsearch__input::placeholder{color:rgba(255,246,233,.74);font-weight:500}
.jyh-hsearch__input::-webkit-search-cancel-button{display:none}
.jyh-hsearch .jyh-kbd{margin-right:9px;border-color:rgba(255,255,255,.4);color:#fff}
.jyh-hsearch--btn{padding:0;text-align:left;font:inherit;cursor:pointer}
.jyh-hsearch__fake{flex:1;min-width:0;padding:0 10px 0 9px;color:rgba(255,246,233,.8);font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-hsearch--btn{display:none}

/* Khi một hàng không đủ chỗ: cụm tài khoản xuống hàng riêng, ô tìm kiếm rộng ra */
body.jyh-theme .hero .actions.jyh-split .account-actions{flex:1 1 100%;margin:2px 0 0;padding:0;border-left:0}
body.jyh-theme .hero .actions.jyh-split .jyh-hsearch{width:min(360px,100%)}

/* Người đã có tiến độ: hero gọn lại, vẫn thấy ảnh (K1) */
body.jyh-theme .hero.jyh-hero-compact,body.jyh-theme .hero.jyh-hero-compact .hero-inner{min-height:0}
body.jyh-theme .hero.jyh-hero-compact .hero-inner{padding-block:84px 34px}
body.jyh-theme .hero.jyh-hero-compact h1{font-size:clamp(44px,6vw,72px);margin:10px 0 20px}
body.jyh-theme .hero.jyh-hero-compact p:not(.library-redeem-status),
body.jyh-theme .hero.jyh-hero-compact .overline{display:none}

/* v1.6.5 · Hàng nút đầu trang dàn ngang trên toàn bề rộng (thay lưới 4 cột "đóng cục" của 1.6.3).
   Thứ tự: Bắt đầu · Hướng dẫn nhanh · (khách) Feedback · tìm kiếm · mã ưu đãi · Đăng nhập hoặc Hồ sơ ▾ (sát phải).
   Đã đăng nhập: Đăng xuất, Hồ sơ, Quản lý, Feedback nằm trong menu Hồ sơ (JS thêm .jyh-hrow và nút .jyh-acct). */
body.jyh-theme .hero-inner>div{flex:1 1 auto;min-width:0}
body.jyh-theme .hero .actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;width:100%;max-width:none}
body.jyh-theme .hero .actions>.account-actions{display:contents}
body.jyh-theme .hero .actions>.jyh-start{order:1;flex:0 0 auto}
body.jyh-theme .hero .actions>.jy-guide-open{order:2;flex:0 0 auto}
body.jyh-theme .hero .actions>.feedback-entry{order:3;flex:0 0 auto}
body.jyh-theme .hero .actions .jyh-hsearch{order:4;flex:1 1 240px;width:auto;min-width:200px;max-width:440px}
body.jyh-theme .hero .actions>.library-redeem{order:5;flex:0 0 auto;display:flex}
body.jyh-theme .hero .actions>.library-redeem input{width:150px;flex:0 1 auto;min-width:0}
body.jyh-theme .hero .actions .account-actions>.btn{order:6;flex:0 0 auto;white-space:nowrap}
body.jyh-theme .hero .actions #libraryLogin,body.jyh-theme .hero .actions #libraryLogout,body.jyh-theme .hero .actions .jyh-acct{margin-left:auto}
body.jyh-theme .hero .actions>.library-redeem-status{order:7;flex:1 1 100%}
body.jyh-theme .hero .actions.jyh-hrow.is-auth>.feedback-entry,
body.jyh-theme .hero .actions.jyh-hrow.is-auth #libraryLogout,
body.jyh-theme .hero .actions.jyh-hrow.is-auth #libraryProfile,
body.jyh-theme .hero .actions.jyh-hrow.is-auth #libraryManager{display:none!important}
.jyh-acct[hidden]{display:none!important}
/* Nút Hồ sơ ▾ và menu */
body.jyh-theme .hero .btn.jyh-acct{gap:8px;padding-inline:7px 12px}
.jyh-acct__av{display:grid;place-items:center;flex:none;width:28px;height:28px;border-radius:50%;background:linear-gradient(180deg,#f3d27e,#d9a441);color:var(--jy-ink);font:800 .8125rem/1 var(--jy-font-ui)}
.jyh-acct__chev{font-size:.95rem;opacity:.85;transition:transform var(--jy-t-fast)}
.jyh-acct[aria-expanded="true"] .jyh-acct__chev{transform:rotate(180deg)}
.jyh-acctpop{position:fixed;z-index:2147482600;min-width:244px;max-width:min(300px,calc(100vw - 20px));padding:6px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:0 22px 50px -18px rgba(37,23,17,.45);font-family:var(--jy-font-ui);color:var(--jy-ink)}
.jyh-acctpop__head{display:flex;align-items:center;gap:10px;padding:8px 10px 10px;margin-bottom:4px;border-bottom:1px solid var(--jy-line2)}
.jyh-acctpop__who{display:grid;min-width:0}
.jyh-acctpop__who b{font-weight:800;font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-acctpop__who small{color:var(--jy-muted);font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-acctpop .jyh-menu__item{min-height:44px;padding:6px 12px;color:var(--jy-ink);font-size:.9063rem;font-weight:650;text-decoration:none}
.jyh-acctpop .jyh-menu__item:hover,.jyh-acctpop .jyh-menu__item:focus-visible{background:var(--jy-cream)}
.jyh-acctpop .jyh-menu__item.is-danger{color:var(--jy-bad)}
.jyh-acctpop__sep{display:block;height:1px;margin:4px 6px;background:var(--jy-line2)}
/* Máy tính bảng: hai hàng — Bắt đầu · Hướng dẫn nhanh · Feedback · tài khoản / tìm kiếm · mã ưu đãi */
@media (min-width:651px) and (max-width:1099px){
  body.jyh-theme .hero .actions .jyh-hsearch{order:7;flex:1 1 55%;max-width:none}
  body.jyh-theme .hero .actions>.library-redeem{order:8}
  body.jyh-theme .hero .actions>.library-redeem-status{order:9}
}
/* Điện thoại: lưới 6 cột — Bắt đầu / Hướng dẫn nhanh + (Feedback hoặc Hồ sơ ▾) / tìm kiếm (+ Đăng nhập) / mã ưu đãi */
@media (max-width:650px){
  body.jyh-theme .hero .actions{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
  body.jyh-theme .hero .actions>.jyh-start{grid-column:1/-1;order:1}
  body.jyh-theme .hero .actions>.jy-guide-open{grid-column:span 3;order:2}
  body.jyh-theme .hero .actions>.feedback-entry{grid-column:span 3;order:3}
  body.jyh-theme .hero .actions>.jy-guide-open,
  body.jyh-theme .hero .actions>.feedback-entry{min-width:0;min-height:44px;padding-inline:10px;justify-content:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  body.jyh-theme .hero .actions .account-actions>.btn{grid-column:span 3;order:5;width:100%;min-width:0;margin-left:0;justify-content:center}
  body.jyh-theme .hero .actions .account-actions>.btn.jyh-acct{order:3}
  body.jyh-theme .hero .actions .jyh-hsearch{grid-column:span 4;order:4;width:auto;min-width:0;max-width:none}
  body.jyh-theme .hero .actions.is-auth .jyh-hsearch{grid-column:1/-1}
  body.jyh-theme .hero .actions:not(.is-auth) #libraryLogin{grid-column:span 2}
  body.jyh-theme .hero .actions>.library-redeem{grid-column:1/-1;order:7}
  body.jyh-theme .hero .actions>.library-redeem-status{grid-column:1/-1;order:8}
  body.jyh-theme .hero .actions>.library-redeem input{width:auto;flex:1;font-size:16px}
  .jyh-hsearch--desk{display:none}
  .jyh-hsearch--btn{display:flex}
  body.jyh-theme .hero.jyh-hero-compact .hero-inner{padding-block:68px 22px}
  body.jyh-theme .hero.jyh-hero-compact h1{font-size:44px;margin:6px 0 14px}
  body.jyh-theme .hero.jyh-hero-compact .eyebrow{font-size:17px}
}
@media (max-width:360px){
  body.jyh-theme .hero .actions>.jy-guide-open,
  body.jyh-theme .hero .actions>.feedback-entry,
  body.jyh-theme .hero .actions .account-actions>.btn{padding-inline:6px;font-size:14px}
}


/* ==========================================================================
   5. LỚP PHỦ ĐANG MỞ
   ========================================================================== */
/* Thanh tab đang dính ở đỉnh: thu cụm ngôn ngữ thành ô 44 px ở đầu phải (K6) */
body.jyh-tabs-stuck .portal-tools{top:max(5px,env(safe-area-inset-top))!important;right:8px!important;left:auto!important}
body.jyh-tabs-stuck .portal-tools>label{position:relative;width:44px;min-height:44px!important;height:44px;padding:0!important;justify-content:center;font-size:16px;overflow:hidden}
body.jyh-tabs-stuck .portal-tools>label select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;max-width:none!important}

/* Trong phiên học, trò chơi hoặc hộp thoại: ẩn cụm ngôn ngữ và Toki (K6, K31) */
body.jyh-layer-open .portal-tools,
body.jyh-layer-open .toki-floating,
body.jyh-layer-open .toki-quick-panel,
body.jyh-layer-open .jueyin-language.floating{opacity:0!important;visibility:hidden!important;pointer-events:none!important}
html.jyh-scroll-lock{overflow:hidden!important}

/* v1.3 · Toki chỉ ở góc dưới bên phải (bỏ nút "Toki Chat" trùng ở đầu trang) */
body.jyh-theme .hero .actions .toki-entry{display:none!important}
body.jyh-theme .toki-floating{top:auto!important;bottom:max(18px,env(safe-area-inset-bottom))!important;right:max(18px,env(safe-area-inset-right))!important;left:auto!important}
body.jyh-theme .toki-floating::before{content:"Toki Chat";position:absolute;right:calc(100% - 8px);bottom:22px;padding:7px 12px;border:1px solid rgba(var(--jy-gold-rgb),.55);border-radius:var(--jy-r);background:var(--jy-ink);color:#fff8ee;font:700 .8125rem/1 var(--jy-font-ui);letter-spacing:.02em;white-space:nowrap;box-shadow:0 10px 24px -12px rgba(37,23,17,.6);opacity:0;transform:translateX(6px);transition:opacity var(--jy-t-fast),transform var(--jy-t-fast);pointer-events:none}
body.jyh-theme .toki-floating:hover::before,body.jyh-theme .toki-floating:focus-visible::before{opacity:1;transform:none}
@media (max-width:640px){body.jyh-theme .toki-floating{bottom:max(10px,env(safe-area-inset-bottom))!important;right:10px!important}}

/* v1.6.2 · Tab khác "Hôm nay" là một trang riêng: ẩn các phần chỉ thuộc trang chủ (chọn phiên bản, lưới HSK, giới thiệu, chân trang) */
html.jyh-focus [data-jy-home]{display:none!important}
html.jyh-focus .jyh-panels{min-height:calc(100vh - var(--jy-header-offset,0px) - 64px)}
@supports (min-height:100dvh){html.jyh-focus .jyh-panels{min-height:calc(100dvh - var(--jy-header-offset,0px) - 64px)}}

/* v1.6.3 · Trang chỉ có giao diện sáng: giữ thanh cuộn, ô nhập và khung Toki ở bảng màu sáng.
   Nếu trang bị đặt color-scheme tối (trình duyệt, khung nhúng) mà khung Toki vẫn sáng, trình duyệt vẽ nền trắng sau Toki. */
:root{color-scheme:light!important}
.toki-floating-frame{color-scheme:light!important;background:transparent!important}

/* v1.6.4 · Trang Thư phòng, Lộ trình, Ghi chú: cùng bề rộng với Bàn học, lề hai bên hẹp hơn */
body.jyh-theme .wrap,body.jyh-theme .hero-inner,body.jyh-theme .jyp-hero__inner{width:min(1320px,calc(100% - 48px))}
@media (max-width:700px){body.jyh-theme .wrap,body.jyh-theme .hero-inner,body.jyh-theme .jyp-hero__inner{width:calc(100% - 28px)}}

/* v1.7 · Phần giới thiệu của trang chủ theo phiên bản đang xem: HSK 2.0 (6 cấp) không nhắc HSK 7–9.
   Trang đặt data-jy-ed trên <html> khi đổi lưới HSK 3.0 / 2.0. */
html[data-jy-ed="2.0"] body [data-jy-ed="3.0"],html:not([data-jy-ed="2.0"]) body [data-jy-ed="2.0"]{display:none!important}

/* ==========================================================================
   6. THÀNH PHẦN CHUẨN
   ========================================================================== */

/* --- Nút: bo góc vừa phải như nút của trang --- */
.jyh-btn{
  position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  min-height:var(--jy-tap);padding:.55em 1.1em;border:1px solid transparent;border-radius:var(--jy-r);
  background:transparent;font-size:.9375rem;font-weight:700;line-height:1.25;text-decoration:none;text-align:center;
  transition:transform var(--jy-t-fast) var(--jy-ease-out),background-color var(--jy-t-fast),border-color var(--jy-t-fast),color var(--jy-t-fast),box-shadow var(--jy-t-fast);
  -webkit-user-select:none;user-select:none;
}
.jyh-btn:active:not(:disabled){transform:scale(.97)}
.jyh-btn:disabled,.jyh-btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed}
.jyh-btn--primary{background:var(--jy-accent);border-color:var(--jy-accent);color:#fff;box-shadow:var(--jy-glow)}
.jyh-btn--primary:hover:not(:disabled){background:var(--jy-accent-hi);border-color:var(--jy-accent-hi)}
.jyh-btn--primary .jyh-i{stroke-width:2}
.jyh-btn--ink{background:var(--jy-ink);border-color:var(--jy-ink);color:#fff}
.jyh-btn--ink:hover:not(:disabled){background:#3a261d}
.jyh-btn--ghost{border-color:var(--jy-line);background:var(--jy-surface);color:var(--jy-ink)}
.jyh-btn--ghost:hover:not(:disabled){border-color:var(--jy-ink)}
.jyh-btn--soft{border-color:var(--jy-cream2);background:var(--jy-cream);color:var(--jy-accent-lo)}
.jyh-btn--soft:hover:not(:disabled){background:var(--jy-cream2)}
.jyh-btn--night{border-color:rgba(var(--jy-sand-rgb),.42);background:rgba(255,255,255,.06);color:#fff8ee}
.jyh-btn--night:hover:not(:disabled){background:rgba(255,255,255,.13)}
.jyh-btn--gold{border-color:rgba(var(--jy-gold-rgb),.75);background:rgba(var(--jy-gold-rgb),.16);color:var(--jy-gold-hi)}
.jyh-btn--gold:hover:not(:disabled){background:rgba(var(--jy-gold-rgb),.26)}
.jyh-btn--danger{border-color:rgba(var(--jy-bad-rgb),.35);background:var(--jy-surface);color:var(--jy-bad)}
.jyh-btn--link{min-height:var(--jy-tap);padding-inline:.4em;color:var(--jy-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;font-weight:700}
.jyh-btn--link:hover{color:var(--jy-accent-hi)}
.jyh-btn--block{display:flex;width:100%}
.jyh-btn--lg{min-height:50px;padding-inline:1.35em;font-size:1rem}
.jyh-btn--sm{min-height:40px;padding-inline:.85em;font-size:.875rem}
.jyh-btn .jyh-i{font-size:1.1em}
.jyh-btn__sub{font-weight:600;opacity:.82;font-size:.85em}

/* Nút biểu tượng luôn kèm chữ nhỏ (nguyên tắc 2) */
.jyh-ibtn{
  display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  min-width:var(--jy-tap);min-height:var(--jy-tap);padding:4px 6px;border:1px solid transparent;border-radius:var(--jy-r);
  background:transparent;color:var(--jy-accent);font-size:.6875rem;font-weight:700;line-height:1.1;white-space:nowrap;
  transition:background-color var(--jy-t-fast),color var(--jy-t-fast),transform var(--jy-t-fast) var(--jy-ease-out);
}
.jyh-ibtn .jyh-i{font-size:1.15rem}
.jyh-ibtn:hover:not(:disabled){background:rgba(var(--jy-accent-rgb),.07)}
.jyh-ibtn:active:not(:disabled){transform:scale(.94)}
.jyh-ibtn:disabled{opacity:.42;cursor:not-allowed}
.jyh-ibtn[aria-pressed="true"]{color:var(--jy-gold-ink)}
.jyh-ibtn[aria-pressed="true"] .jyh-i{fill:currentColor}
/* v1.6 · Nút chỉ có biểu tượng (✕ đóng, tạm dừng, âm thanh): chữ vẫn có cho trình đọc màn hình và chú thích khi rê chuột */
.jyh-ibtn--icon{position:relative;min-width:42px;min-height:42px;padding:0;border-radius:50%;gap:0}
.jyh-ibtn--icon .jyh-i{font-size:1.32rem}
.jyh-ibtn--icon>span{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;padding:0}
.jyh-ibtn--night{color:#fff8ee}
.jyh-ibtn--night:hover:not(:disabled){background:rgba(255,255,255,.1)}
.jyh-ibtn--night[aria-pressed="true"]{color:var(--jy-gold-hi)}
.jyh-ibtn--row{flex-direction:row;gap:6px;padding-inline:10px;font-size:.8125rem}

/* --- Chip lọc, lựa chọn --- */
.jyh-chips{display:flex;flex-wrap:wrap;gap:8px}
.jyh-chips--scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;margin-inline:-2px;padding-inline:2px;overscroll-behavior-x:contain}
.jyh-chips--scroll::-webkit-scrollbar{display:none}
.jyh-chip{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:.4em;min-height:40px;padding:0 .95em;
  border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-ink);
  font-size:.875rem;font-weight:700;white-space:nowrap;transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast),color var(--jy-t-fast);
}
.jyh-chip:hover{border-color:var(--jy-ink)}
.jyh-chip[aria-pressed="true"],.jyh-chip[aria-checked="true"],.jyh-chip[aria-selected="true"]{background:var(--jy-ink);border-color:var(--jy-ink);color:#fff}
.jyh-chip .jyh-i{font-size:1rem}
.jyh-chip__count{font-weight:600;opacity:.7}
.jyh-chip--lock{color:var(--jy-muted)}

/* --- Thẻ giấy: viền mảnh, bóng nhẹ như thẻ HSK của trang --- */
.jyh-card{position:relative;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);padding:22px;box-shadow:var(--jy-shadow)}
.jyh-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.jyh-card__kicker{display:block;margin-bottom:6px;color:var(--jy-accent)}
.jyh-card__title{font-family:var(--jy-font-title);font-size:1.4rem;line-height:1.2;color:var(--jy-ink)}
.jyh-card__sub{margin-top:4px;color:var(--jy-muted);font-size:.875rem;line-height:1.5}
.jyh-section{margin-top:32px}
.jyh-section__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 16px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--jy-line)}
.jyh-section__head>:first-child{flex:1 1 260px;min-width:0}
.jyh-section__title{font-family:var(--jy-font-title);font-size:1.6rem;line-height:1.2;color:var(--jy-ink)}
.jyh-kicker--accent{color:var(--jy-accent)}

/* --- Vé (khía tròn, đường đục lỗ, cuống vé) --- */
.jyh-ticket{position:relative;filter:drop-shadow(0 14px 22px rgba(52,28,19,.1)) drop-shadow(0 1px 2px rgba(52,28,19,.1))}
.jyh-ticket__body{
  --stub:172px;
  position:relative;display:grid;grid-template-columns:minmax(0,1fr) var(--stub);
  min-height:200px;background:var(--jy-surface);border-radius:var(--jy-r-card);overflow:hidden;
  -webkit-mask:
    radial-gradient(circle at calc(100% - var(--stub)) 0,#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) top/100% 51% no-repeat,
    radial-gradient(circle at calc(100% - var(--stub)) 100%,#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) bottom/100% 51% no-repeat;
  mask:
    radial-gradient(circle at calc(100% - var(--stub)) 0,#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) top/100% 51% no-repeat,
    radial-gradient(circle at calc(100% - var(--stub)) 100%,#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) bottom/100% 51% no-repeat;
}
.jyh-ticket__main{position:relative;min-width:0;padding:24px 26px}
.jyh-ticket__stub{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px 16px;text-align:center;background:var(--jy-cream)}
.jyh-ticket__stub::before{content:"";position:absolute;left:-1px;top:calc(var(--jy-notch) + 6px);bottom:calc(var(--jy-notch) + 6px);width:2px;background:radial-gradient(circle,rgba(var(--jy-ink-rgb),.32) 1.2px,transparent 1.7px) 0 0/2px 9px repeat-y}
.jyh-ticket__stub--night{color:#fff8ee;background:
  radial-gradient(120% 80% at 85% 0%,rgba(var(--jy-gold-rgb),.2),transparent 62%),
  linear-gradient(160deg,var(--jy-dark2),var(--jy-dark))}
.jyh-ticket__stub--night::before{background:radial-gradient(circle,rgba(var(--jy-sand-rgb),.6) 1.2px,transparent 1.7px) 0 0/2px 9px repeat-y}
.jyh-ticket__stub--night::after{content:"";position:absolute;inset:0;background-image:var(--jy-grain);opacity:.12;mix-blend-mode:overlay;pointer-events:none}

/* Vé đứng: cuống ở dưới, khía hai bên */
.jyh-ticket--v .jyh-ticket__body{
  --stubh:72px;
  grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) var(--stubh);
  -webkit-mask:
    radial-gradient(circle at 0 calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) left/51% 100% no-repeat,
    radial-gradient(circle at 100% calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) right/51% 100% no-repeat;
  mask:
    radial-gradient(circle at 0 calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) left/51% 100% no-repeat,
    radial-gradient(circle at 100% calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) right/51% 100% no-repeat;
}
.jyh-ticket--v .jyh-ticket__stub{flex-direction:row;justify-content:space-between;padding:12px 22px}
.jyh-ticket--v .jyh-ticket__stub::before{left:calc(var(--jy-notch) + 6px);right:calc(var(--jy-notch) + 6px);top:-1px;bottom:auto;width:auto;height:2px;background:radial-gradient(circle,rgba(var(--jy-ink-rgb),.32) 1.2px,transparent 1.7px) 0 0/9px 2px repeat-x}
.jyh-ticket--v .jyh-ticket__stub--night::before{background:radial-gradient(circle,rgba(var(--jy-sand-rgb),.6) 1.2px,transparent 1.7px) 0 0/9px 2px repeat-x}

.jyh-ticket__band{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:-24px -26px 18px;padding:12px 26px;background:linear-gradient(120deg,var(--jy-dark),var(--jy-dark2));color:var(--jy-sand)}
.jyh-ticket__band .jyh-kicker{color:var(--jy-gold-hi)}
.jyh-ticket__band b{color:var(--jy-gold-hi);font:italic 500 1.05rem/1 var(--jy-font-title)}
.jyh-stub-label{font-size:.6875rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;opacity:.86}
.jyh-stub-big{font-family:var(--jy-font-title);font-style:normal;font-size:1.55rem;line-height:1.1;color:var(--jy-gold-hi)}
.jyh-barcode{width:100%;max-width:116px;height:24px;opacity:.62;background:
  repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 4px,currentColor 4px 5px,transparent 5px 8px,currentColor 8px 11px,transparent 11px 12px,currentColor 12px 13px,transparent 13px 16px)}
.jyh-barcode-text{font-size:.5625rem;letter-spacing:.32em;opacity:.7;text-transform:uppercase}

/* Tem son 完成 */
.jyh-stamp{position:absolute;display:grid;place-items:center;width:84px;height:84px;border:3px double rgba(var(--jy-accent-rgb),.82);border-radius:8px;color:rgba(var(--jy-accent-rgb),.88);font:700 1.6rem/1 "STKaiti","Kaiti SC",KaiTi,var(--jy-font-han);letter-spacing:.06em;transform:rotate(-9deg);mix-blend-mode:multiply;pointer-events:none;opacity:0}
.jyh-stamp.is-on{opacity:.9;animation:jyhStamp var(--jy-t-slow) var(--jy-ease-spring) both}
@keyframes jyhStamp{0%{opacity:0;transform:rotate(-9deg) scale(2.1)}60%{opacity:.95}100%{opacity:.9;transform:rotate(-9deg) scale(1)}}

/* --- Biểu tượng kính: cùng kiểu nút kính mờ của trang (nền kem, viền trắng) --- */
.jyh-gi{width:56px;height:56px;flex:0 0 auto;transition:transform var(--jy-t-base) var(--jy-ease-spring);overflow:visible}
.jyh-gi--sm{width:40px;height:40px}
.jyh-gi--lg{width:72px;height:72px}
.jyh-frost{display:inline-grid;place-items:center;flex:0 0 auto;width:48px;height:48px;border:1px solid rgba(255,255,255,.9);border-radius:var(--jy-r-tile);
  background:linear-gradient(145deg,rgba(255,253,247,.96),rgba(239,222,207,.7));color:var(--jy-accent);
  box-shadow:0 10px 24px -15px rgba(69,28,27,.62),0 2px 6px -4px rgba(69,28,27,.4),inset 0 1px 0 #fff}
.jyh-frost .jyh-i{font-size:1.3rem}
.jyh-frost .jyh-gi{width:36px;height:36px}

/* --- Ô nhập --- */
.jyh-field{display:grid;gap:6px}
.jyh-field__label{font-size:.8125rem;font-weight:800;color:var(--jy-ink)}
.jyh-field__hint{font-size:.8125rem;color:var(--jy-muted);line-height:1.45}
.jyh-input,.jyh-textarea,.jyh-select{
  width:100%;min-height:46px;padding:10px 13px;border:1px solid var(--jy-line);border-radius:var(--jy-r);
  background:#fff;color:var(--jy-ink);font-size:16px;line-height:1.45;
  transition:border-color var(--jy-t-fast),box-shadow var(--jy-t-fast);
}
.jyh-textarea{min-height:120px;resize:vertical}
.jyh-select{appearance:none;-webkit-appearance:none;padding-right:40px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23706158' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center/18px}
.jyh-input:focus,.jyh-textarea:focus,.jyh-select:focus{outline:0;border-color:var(--jy-accent);box-shadow:0 0 0 3px rgba(var(--jy-accent-rgb),.13)}
.jyh-input::placeholder,.jyh-textarea::placeholder{color:#a39283}
.jyh-input--han{font-family:var(--jy-font-han);font-size:1.25rem}

/* Công tắc */
.jyh-switch{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;min-height:52px;padding:6px 0;border:0;background:transparent;text-align:left}
.jyh-switch__text{display:grid;gap:2px;font-weight:700;font-size:.9375rem}
.jyh-switch__text small{font-weight:500;color:var(--jy-muted);font-size:.8125rem}
.jyh-switch__track{position:relative;flex:0 0 50px;height:28px;border-radius:999px;background:#dccfbd;transition:background-color var(--jy-t-fast)}
.jyh-switch__track::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(37,23,17,.25);transition:transform var(--jy-t-base) var(--jy-ease-spring)}
.jyh-switch[aria-checked="true"] .jyh-switch__track{background:var(--jy-accent)}
.jyh-switch[aria-checked="true"] .jyh-switch__track::after{transform:translateX(22px)}

/* Nhãn nhỏ: chữ nhỏ trong khung vuông, như nhãn "MIỄN PHÍ" của trang */
.jyh-badge{display:inline-flex;align-items:center;gap:.35em;min-height:24px;padding:2px 8px;border:1px solid var(--jy-cream2);border-radius:4px;background:var(--jy-cream);color:var(--jy-accent-lo);font-size:.75rem;font-weight:800;letter-spacing:.02em;white-space:nowrap}
.jyh-badge--night{background:rgba(255,255,255,.07);color:#fff8ee;border-color:rgba(var(--jy-sand-rgb),.34)}
.jyh-badge--gold{background:rgba(var(--jy-gold-rgb),.16);color:var(--jy-gold-hi);border-color:rgba(var(--jy-gold-rgb),.5)}
.jyh-badge--lock{background:#f0e8dd;color:var(--jy-muted);border-color:var(--jy-line2)}
/* Từ loại (động từ, danh từ…): chữ trung tính, không tô màu */
.jyh-pos{display:inline-flex;align-items:center;min-height:22px;padding:0 7px;border:1px solid var(--jy-line);border-radius:4px;background:transparent;color:var(--jy-muted);font-size:.75rem;font-weight:600;letter-spacing:.01em;line-height:1.2;white-space:nowrap}
.jyh-status{display:inline-flex;align-items:center;gap:6px;font-size:.75rem;font-weight:750;color:var(--jy-muted);white-space:nowrap}
.jyh-status::before{content:"";width:9px;height:9px;border-radius:2px;background:#d8c9b6}
.jyh-status--learning{color:var(--jy-accent)}.jyh-status--learning::before{background:var(--jy-accent)}
.jyh-status--known{color:var(--jy-ok)}.jyh-status--known::before{background:var(--jy-ok)}
.jyh-status--hard{color:var(--jy-bad)}.jyh-status--hard::before{background:var(--jy-bad)}

/* Vòng và thanh tiến độ */
.jyh-ring{position:relative;display:grid;place-items:center;width:92px;height:92px}
.jyh-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.jyh-ring__track{fill:none;stroke:rgba(255,255,255,.13);stroke-width:6}
.jyh-ring__fill{fill:none;stroke:var(--jy-gold-hi);stroke-width:6;stroke-linecap:round;transition:stroke-dashoffset var(--jy-t-slow) var(--jy-ease-out)}
.jyh-ring--light .jyh-ring__track{stroke:var(--jy-line2)}
.jyh-ring--light .jyh-ring__fill{stroke:var(--jy-accent)}
.jyh-ring__val{position:relative;font:500 1.55rem/1 var(--jy-font-num);color:#fff8ee}
.jyh-ring__val small{font-size:.55em;opacity:.78}
.jyh-ring--light .jyh-ring__val{color:var(--jy-ink)}
.jyh-bar{position:relative;height:7px;border-radius:999px;background:#eee4d7;overflow:hidden}
.jyh-bar>i{position:absolute;inset:0 auto 0 0;width:var(--v,0%);border-radius:inherit;background:var(--jy-accent);transition:width var(--jy-t-slow) var(--jy-ease-out)}
.jyh-bar>i+i{background:var(--jy-ok)}
.jyh-bar--night{background:rgba(255,255,255,.14)}
.jyh-bar--night>i{background:var(--jy-gold-hi)}

/* Khung chờ: chữ Hán thở và dải sáng (không vòng quay) */
.jyh-skel{position:relative;overflow:hidden;border-radius:var(--jy-r);background:#f0e7db}
.jyh-skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);animation:jyhSheen 1.4s var(--jy-ease-out) infinite}
@keyframes jyhSheen{to{transform:translateX(100%)}}
.jyh-loading{display:grid;justify-items:center;gap:12px;padding:36px 16px;text-align:center;color:var(--jy-muted);font-weight:700}
.jyh-loading__han{font:400 3.4rem/1 var(--jy-font-han);color:var(--jy-accent);animation:jyhBreath 2.4s ease-in-out infinite}
.jyh-ticket__stub--night .jyh-loading__han{color:var(--jy-gold-hi)}
@keyframes jyhBreath{0%,100%{opacity:.35;transform:scale(.96)}50%{opacity:1;transform:scale(1.04)}}

/* Màn hình trống luôn có câu giải thích và một nút (nguyên tắc 4) */
.jyh-empty{display:grid;justify-items:center;gap:12px;padding:28px 16px;text-align:center}
.jyh-empty p{max-width:36ch;color:var(--jy-muted);line-height:1.55}
.jyh-error{color:var(--jy-bad)}

/* Phím tắt */
.jyh-kbd{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border:1px solid rgba(var(--jy-sand-rgb),.5);border-bottom-width:2px;border-radius:4px;font:700 .72rem/1 var(--jy-font-ui);color:inherit;opacity:.85}

/* Ký hiệu đúng / sai luôn kèm chữ (K30) */
.jyh-ok{color:var(--jy-ok);font-weight:800}
.jyh-bad{color:var(--jy-bad);font-weight:800}

/* Ô chữ 田字格 (nét đỏ son như sách luyện chữ) */
.jyh-tian{position:relative;display:grid;place-items:center;aspect-ratio:1;width:var(--size,108px);border:2px solid rgba(var(--jy-accent-rgb),.5);background:
  linear-gradient(rgba(var(--jy-accent-rgb),.24),rgba(var(--jy-accent-rgb),.24)) center/100% 1px no-repeat,
  linear-gradient(90deg,rgba(var(--jy-accent-rgb),.24),rgba(var(--jy-accent-rgb),.24)) center/1px 100% no-repeat,
  #fff;color:var(--jy-ink);font:500 calc(var(--size,108px)*.66)/1 var(--jy-font-han)}
.jyh-tian::before{content:"";position:absolute;inset:0;background:
  linear-gradient(45deg,transparent calc(50% - .5px),rgba(var(--jy-accent-rgb),.13) 50%,transparent calc(50% + .5px)),
  linear-gradient(-45deg,transparent calc(50% - .5px),rgba(var(--jy-accent-rgb),.13) 50%,transparent calc(50% + .5px));pointer-events:none}
.jyh-tian>span{position:relative}
.jyh-tians{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}

/* --- Mặt tối: bản đồ chặng, ô trò chơi (nâu mực, hạt giấy, ánh vàng nhẹ) --- */
.jyh-night{position:relative;color:#fff8ee;background:
  radial-gradient(70% 120% at 8% -10%,rgba(var(--jy-gold-rgb),.17),transparent 62%),
  radial-gradient(60% 90% at 96% 8%,rgba(var(--jy-accent-rgb),.34),transparent 66%),
  linear-gradient(180deg,var(--jy-dark2) 0%,var(--jy-dark) 100%)}
.jyh-night::after{content:"";position:absolute;inset:0;border-radius:inherit;background-image:var(--jy-grain);opacity:.12;mix-blend-mode:overlay;pointer-events:none}

/* Trời sao trong trò chơi: 3 lớp sao trôi, sao băng thưa */
.jyh-sky{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.jyh-sky__par{position:absolute;inset:-30px;transition:transform 600ms var(--jy-ease-out)}
.jyh-sky__par--1{transform:translate3d(calc(var(--px,0)*-4px),calc(var(--py,0)*-3px),0)}
.jyh-sky__par--2{transform:translate3d(calc(var(--px,0)*-9px),calc(var(--py,0)*-6px),0)}
.jyh-sky__par--3{transform:translate3d(calc(var(--px,0)*-16px),calc(var(--py,0)*-10px),0)}
.jyh-sky__stars{position:absolute;left:0;top:0;width:1px;height:1px;border-radius:50%;background:transparent;animation:jyhDrift 160s linear infinite alternate}
.jyh-sky__par--2 .jyh-sky__stars{animation-duration:120s}
.jyh-sky__par--3 .jyh-sky__stars{animation-duration:90s}
@keyframes jyhDrift{from{transform:translateX(0)}to{transform:translateX(-220px)}}
.jyh-sky__spark{position:absolute;width:var(--s,14px);height:var(--s,14px);color:#fff1d6;opacity:.8;filter:drop-shadow(0 0 5px rgba(255,236,200,.6));animation:jyhTwinkle var(--d,4s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes jyhTwinkle{0%,100%{opacity:.25;transform:scale(.7) rotate(0deg)}50%{opacity:.95;transform:scale(1) rotate(12deg)}}
.jyh-sky__shoot{position:absolute;top:18%;left:62%;width:160px;height:2px;border-radius:2px;background:linear-gradient(90deg,rgba(255,240,214,0),rgba(255,240,214,.9));opacity:0;transform:rotate(-16deg);transform-origin:right center}
.jyh-sky__shoot.is-go{animation:jyhShoot 1000ms var(--jy-ease-out) both}
@keyframes jyhShoot{0%{opacity:0;transform:translate3d(120px,-34px,0) rotate(-16deg) scaleX(.2)}15%{opacity:1}100%{opacity:0;transform:translate3d(-260px,76px,0) rotate(-16deg) scaleX(1)}}

/* --- Ảnh phong cảnh của Jueyin (không có người): khung viền trong, nhãn góc --- */
.jyh-photo{position:relative;overflow:hidden;background:#1c100b center/cover no-repeat}
.jyh-photo::before{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(28,14,9,.55),rgba(28,14,9,.08) 62%);pointer-events:none}
.jyh-photo::after{content:"";position:absolute;inset:10px;border:1px solid rgba(255,253,249,.6);pointer-events:none}
.jyh-photo__label{position:absolute;z-index:1;top:15px;left:15px;padding:5px 8px;border:1px solid rgba(247,229,199,.67);background:rgba(37,23,17,.9);color:#fff8ee;font-size:.6875rem;font-weight:850;letter-spacing:.12em;line-height:1.2;text-transform:uppercase}

/* v1.5 · Công tắc phiên bản HSK 3.0 / 2.0 (từ vựng, bản đồ chặng) */
.jyh-edsw{flex:0 0 auto;display:inline-flex;align-items:stretch;padding:3px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-cream);margin-right:6px}
.jyh-edsw__btn{display:inline-flex;align-items:center;min-height:34px;padding:0 .85em;border:0;border-radius:4px;background:transparent;color:var(--jy-muted);font-size:.8125rem;font-weight:800;white-space:nowrap;transition:background-color var(--jy-t-fast),color var(--jy-t-fast),box-shadow var(--jy-t-fast)}
.jyh-edsw__btn:hover{color:var(--jy-ink)}
.jyh-edsw__btn[aria-checked="true"]{background:var(--jy-ink);color:#fff;box-shadow:0 2px 8px rgba(37,23,17,.16)}
.jyh-edsw--night{border-color:rgba(var(--jy-sand-rgb),.4);background:rgba(255,255,255,.06)}
.jyh-edsw--night .jyh-edsw__btn{color:rgba(255,246,233,.78)}
.jyh-edsw--night .jyh-edsw__btn:hover{color:#fff}
.jyh-edsw--night .jyh-edsw__btn[aria-checked="true"]{background:var(--jy-gold-hi);color:var(--jy-ink)}

/* ==========================================================================
   7. LỚP PHỦ: hộp thoại, tấm trượt, màn hình toàn phần, toast
   ========================================================================== */
.jyh-root{position:relative;z-index:2147482300}
.jyh-layer{position:fixed;inset:0;z-index:2147482300;display:flex;align-items:flex-end;justify-content:center;overscroll-behavior:contain;-webkit-tap-highlight-color:transparent}
.jyh-layer__scrim{position:absolute;inset:0;background:rgba(var(--jy-ink-rgb),.56);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;transition:opacity var(--jy-t-base) var(--jy-ease-out)}
.jyh-layer.is-in .jyh-layer__scrim{opacity:1}
.jyh-layer.is-out .jyh-layer__scrim{opacity:0;transition-duration:160ms}

/* Tấm trượt từ đáy (điện thoại) / hộp giữa màn hình (máy tính) */
.jyh-sheet{
  position:relative;display:flex;flex-direction:column;width:100%;max-height:calc(100dvh - 20px);
  border-radius:14px 14px 0 0;background:var(--jy-surface);color:var(--jy-ink);
  box-shadow:0 -18px 50px -20px rgba(var(--jy-ink-rgb),.5);
  transform:translateY(105%);transition:transform var(--jy-t-base) var(--jy-ease-out);
}
.jyh-layer.is-in .jyh-sheet{transform:none}
.jyh-layer.is-out .jyh-sheet{transform:translateY(105%);transition:transform 160ms var(--jy-ease-in)}
.jyh-sheet__grab{display:block;width:44px;height:5px;margin:8px auto -2px;border-radius:9px;background:#dccfbd}
.jyh-sheet__head{position:relative;display:flex;align-items:center;gap:10px;padding:12px 12px 12px 22px;border-bottom:1px solid var(--jy-line2)}
.jyh-sheet__title{flex:1;min-width:0;font-family:var(--jy-font-title);font-size:1.35rem;line-height:1.25}
.jyh-sheet__body{flex:1;min-height:0;overflow:auto;padding:18px 22px 22px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.jyh-sheet__foot{position:sticky;bottom:0;display:flex;flex-wrap:wrap;gap:10px;padding:12px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--jy-line2);background:var(--jy-surface);border-radius:0 0 10px 10px}
.jyh-sheet__foot>.jyh-btn{flex:1 1 140px}
.jyh-sheet__status{flex:1 1 100%;margin:-2px 0 0;color:var(--jy-muted);font-size:.8125rem;font-weight:650;text-align:center}
.jyh-sheet--wide{--sheet-w:880px}
@media (min-width:720px){
  .jyh-layer{align-items:center;padding:24px}
  .jyh-sheet{width:min(var(--sheet-w,620px),100%);max-height:min(860px,calc(100dvh - 48px));border-radius:var(--jy-r-card);opacity:0;transform:translateY(22px) scale(.985);transition:transform var(--jy-t-base) var(--jy-ease-out),opacity var(--jy-t-base)}
  .jyh-layer.is-in .jyh-sheet{opacity:1;transform:none}
  .jyh-layer.is-out .jyh-sheet{opacity:0;transform:translateY(12px) scale(.985);transition-duration:160ms}
  .jyh-sheet__grab{display:none}
  .jyh-layer--full{padding:0;align-items:stretch}
}

/* Màn hình toàn phần: phiên học, trò chơi */
.jyh-full{position:relative;display:flex;flex-direction:column;width:100%;height:100%;background:var(--jy-bg);opacity:0;transform:translateY(14px);transition:opacity var(--jy-t-base) var(--jy-ease-out),transform var(--jy-t-base) var(--jy-ease-out)}
.jyh-layer.is-in .jyh-full{opacity:1;transform:none}
.jyh-layer.is-out .jyh-full{opacity:0;transform:translateY(10px);transition-duration:160ms}
.jyh-full__bar{
  position:relative;z-index:2;display:flex;align-items:center;gap:8px;
  padding:calc(6px + env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) 6px max(10px,env(safe-area-inset-left));
  background:linear-gradient(115deg,var(--jy-dark),var(--jy-dark2));color:#fff8ee;
  box-shadow:inset 0 -1px 0 rgba(var(--jy-gold-rgb),.38);
}
.jyh-full__bar::after{content:"";position:absolute;inset:0;background-image:var(--jy-grain);opacity:.1;mix-blend-mode:overlay;pointer-events:none}
.jyh-full__title{flex:1;min-width:0;display:grid;gap:4px;padding-inline:4px}
.jyh-full__title strong{font-size:.9375rem;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-full__body{position:relative;flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.jyh-full--night{background:var(--jy-dark)}

/* Hộp xác nhận nhỏ */
.jyh-confirm .jyh-sheet{--sheet-w:440px}
.jyh-confirm__text{color:var(--jy-muted);line-height:1.6}

/* --- Toast: đáy giữa, 3 giây, có Hoàn tác, không chặn thao tác --- */
.jyh-toasts{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));z-index:2147482600;display:grid;gap:8px;width:min(460px,calc(100% - 24px));transform:translateX(-50%);pointer-events:none}
.jyh-toast{
  pointer-events:auto;position:relative;display:flex;align-items:center;gap:10px;min-height:52px;padding:8px 8px 8px 16px;overflow:hidden;
  border:1px solid var(--jy-glass-edge);border-radius:var(--jy-r-card);background:var(--jy-glass-strong);-webkit-backdrop-filter:var(--jy-blur);backdrop-filter:var(--jy-blur);
  color:#fff8ee;font-size:.9375rem;font-weight:700;line-height:1.35;box-shadow:0 18px 40px -18px rgba(var(--jy-ink-rgb),.8);
  animation:jyhToastIn var(--jy-t-base) var(--jy-ease-out) both;
}
.jyh-toast.is-out{animation:jyhToastOut 160ms var(--jy-ease-in) both}
.jyh-toast__icon{flex:0 0 auto;color:var(--jy-gold-hi)}
.jyh-toast__msg{flex:1;min-width:0}
.jyh-toast__act{flex:0 0 auto;min-height:40px;padding:0 14px;border:1px solid rgba(var(--jy-gold-rgb),.6);border-radius:var(--jy-r);background:transparent;color:var(--jy-gold-hi);font-weight:800}
.jyh-toast__act:hover{background:rgba(var(--jy-gold-rgb),.14)}
.jyh-toast__timer{position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--jy-gold);transform-origin:left;animation:jyhToastTimer var(--d,3s) linear forwards}
@keyframes jyhToastIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
@keyframes jyhToastOut{to{opacity:0;transform:translateY(8px)}}
@keyframes jyhToastTimer{to{transform:scaleX(0)}}
body.jyh-layer-open .jyh-toasts{bottom:calc(96px + env(safe-area-inset-bottom))}
body.jyh-game-open .jyh-toasts{top:auto;bottom:calc(18px + env(safe-area-inset-bottom))}

/* --- Kết quả tìm kiếm (ô trong hero và bảng tìm kiếm) --- */
.jyh-results{display:grid;gap:2px}
.jyh-results__group{margin:10px 0 2px;padding:0 10px;color:var(--jy-accent);font-size:.6875rem;font-weight:850;letter-spacing:.16em;text-transform:uppercase}
.jyh-results__group:first-child{margin-top:2px}
.jyh-res{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;min-height:52px;padding:8px 10px;
  border:0;border-radius:var(--jy-r);background:transparent;text-align:left;color:var(--jy-ink);
  animation:jyhRowIn var(--jy-t-base) var(--jy-ease-out) both;animation-delay:calc(var(--i,0)*30ms);
}
.jyh-res[aria-selected="true"],.jyh-res:hover{background:var(--jy-cream)}
.jyh-res__lead{display:grid;place-items:center;min-width:44px;height:44px;padding:0 6px;border:1px solid var(--jy-line2);border-radius:var(--jy-r);background:#fff;color:var(--jy-ink);font:500 1.35rem/1 var(--jy-font-han)}
.jyh-res__lead--icon{font:inherit;color:var(--jy-accent)}
.jyh-res__main{min-width:0;display:grid;gap:1px}
.jyh-res__title{display:flex;align-items:baseline;gap:8px;min-width:0;font-weight:750}
.jyh-res__title .jyh-py{color:var(--jy-accent);font-weight:650}
.jyh-res__sub{color:var(--jy-muted);font-size:.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-res__where{color:var(--jy-faint);font-size:.6875rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
.jyh-res mark{background:rgba(var(--jy-gold-rgb),.38);color:inherit;border-radius:2px;padding:0 1px}
@keyframes jyhRowIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

.jyh-search-panel{
  position:absolute;z-index:2147482200;display:flex;flex-direction:column;max-height:min(70vh,560px);
  border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);color:var(--jy-ink);
  box-shadow:0 30px 70px -26px rgba(var(--jy-ink-rgb),.6);overflow:hidden;font-family:var(--jy-font-ui);
  animation:jyhToastIn var(--jy-t-base) var(--jy-ease-out) both;
}
.jyh-search-panel__body{overflow:auto;padding:8px;overscroll-behavior:contain}
.jyh-search-panel__foot{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 14px;border-top:1px solid var(--jy-line2);background:var(--jy-bg);color:var(--jy-muted);font-size:.75rem}
.jyh-search-panel__foot .jyh-kbd{border-color:var(--jy-line);color:var(--jy-muted)}
.jyh-search-empty{display:grid;gap:12px;padding:18px 12px 14px;text-align:center;color:var(--jy-muted)}
.jyh-search-empty .jyh-btns{justify-content:center}

/* Bảng tìm kiếm toàn màn hình (điện thoại) / bảng lệnh (máy tính) */
.jyh-palette{position:relative;display:flex;flex-direction:column;width:100%;height:100%;background:var(--jy-surface);opacity:0;transform:translateY(12px);transition:opacity var(--jy-t-base) var(--jy-ease-out),transform var(--jy-t-base) var(--jy-ease-out)}
.jyh-layer.is-in .jyh-palette{opacity:1;transform:none}
.jyh-palette__top{display:flex;align-items:center;gap:8px;padding:calc(10px + env(safe-area-inset-top)) 10px 10px;background:linear-gradient(115deg,var(--jy-dark),var(--jy-dark2))}
.jyh-palette__body{flex:1;min-height:0;overflow:auto;padding:8px 8px 24px;overscroll-behavior:contain}
@media (min-width:720px){
  .jyh-layer--palette{align-items:flex-start;padding-top:12vh}
  .jyh-palette{width:min(640px,100%);height:auto;max-height:72vh;border-radius:var(--jy-r-card);overflow:hidden;box-shadow:0 40px 90px -30px rgba(var(--jy-ink-rgb),.8)}
  .jyh-palette__top{padding:12px}
}

/* --- Ô tìm kiếm trên nền tối (bảng tìm kiếm) --- */
.jyh-search{position:relative;display:flex;align-items:center;width:100%;min-height:50px;border-radius:var(--jy-r);isolation:isolate}
.jyh-search__box{position:absolute;inset:0;z-index:-1;border:1px solid rgba(var(--jy-sand-rgb),.45);border-radius:inherit;background:rgba(255,255,255,.08);transition:border-color var(--jy-t-fast),background-color var(--jy-t-fast)}
.jyh-search:focus-within .jyh-search__box{border-color:var(--jy-gold-hi);background:rgba(255,255,255,.12)}
.jyh-search__ring{display:none}
.jyh-search__icon{flex:0 0 auto;margin-left:14px;color:var(--jy-sand);font-size:1.1rem}
.jyh-search__input{
  flex:1;min-width:0;height:50px;padding:0 12px;border:0;background:transparent;color:#fff;
  font-size:16px;font-weight:650;letter-spacing:.01em;outline:0!important;
}
.jyh-search__input::placeholder{color:rgba(255,246,233,.7);font-weight:500}
.jyh-search__input::-webkit-search-cancel-button{display:none}
.jyh-search__kbd{margin-right:14px;color:#fff}
.jyh-search__clear{display:grid;place-items:center;width:44px;height:44px;margin-right:4px;border:0;border-radius:var(--jy-r);background:transparent;color:#fff}
.jyh-search__clear:hover{background:rgba(255,255,255,.12)}
@media (max-width:719px){.jyh-search__kbd{display:none}}

/* Menu nhỏ */
.jyh-menu{display:grid;gap:2px}
.jyh-menu__item{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:8px 12px;border:0;border-radius:var(--jy-r);background:transparent;text-align:left;font-weight:700}
.jyh-menu__item:hover{background:var(--jy-cream)}
.jyh-menu__item small{display:block;color:var(--jy-muted);font-weight:500}
.jyh-btns{display:flex;flex-wrap:wrap;gap:10px}

.jyh-layer--full{align-items:stretch}

/* ==========================================================================
   8. DẢI MODULE, ĐẦU MỤC, THANH TAB
   ========================================================================== */
/* v1.6.4: lề hai bên hẹp lại (1180 → 1320px, chừa 24px mỗi bên; điện thoại 14px) */
.jyh-wrap{width:min(1320px,calc(100% - 48px));margin-inline:auto}
@media (max-width:700px){.jyh-wrap{width:calc(100% - 28px)}}
@media (max-width:719px){.jyh-wrap{width:calc(100% - 28px)}}

.jyh-band{position:relative;display:block;color:var(--jy-ink);font-size:1rem;line-height:1.55;scroll-margin-top:0}

/* Đầu mục theo kiểu trang: nhãn đỏ, tiêu đề chữ có chân, kẻ mảnh */
.jyh-head{padding:44px 0 0}
.jyh-head__row{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:18px 40px;padding-bottom:20px;border-bottom:1px solid #cdb79b}
.jyh-head__text{min-width:0;flex:1 1 380px}
.jyh-head__kicker{color:var(--jy-accent)}
.jyh-head__title{margin-top:10px;font-family:var(--jy-font-title);font-size:clamp(2rem,3.4vw,2.55rem);font-weight:500;line-height:1.1;color:var(--jy-ink)}
.jyh-head__title em{font-style:normal;font-weight:inherit;font-family:inherit;color:var(--jy-accent)} /* v1.6.3: cùng một font, chỉ khác màu */
.jyh-head__sub{margin-top:8px;max-width:60ch;color:var(--jy-muted);font-size:1rem}

/* Ba con số, kiểu ô thống kê của trang */
.jyh-stats{display:grid;grid-template-columns:repeat(3,minmax(96px,auto));border-block:1px solid var(--jy-line);text-align:center}
.jyh-stats>div{display:grid;align-content:center;gap:3px;padding:10px 18px}
.jyh-stats>div+div{border-left:1px solid var(--jy-line)}
.jyh-stats b{font:500 1.6rem/1.1 var(--jy-font-num);color:var(--jy-ink)}
.jyh-stats span{color:var(--jy-muted);font-size:.6875rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase;line-height:1.35}
@media (max-width:719px){
  .jyh-head{padding-top:30px}
  .jyh-head__row{gap:16px}
  .jyh-stats{grid-template-columns:repeat(3,minmax(0,1fr));width:100%}
  .jyh-stats>div{padding:9px 6px}
  .jyh-stats b{font-size:1.35rem}
  .jyh-stats span{font-size:.625rem;letter-spacing:.06em}
}

/* Thanh tab dính: nền giấy, tab đang chọn có gạch đỏ son trượt theo */
.jyh-tabs{position:sticky;top:0;z-index:850;background:rgba(250,247,241,.96);-webkit-backdrop-filter:saturate(140%) blur(10px);backdrop-filter:saturate(140%) blur(10px);border-bottom:1px solid var(--jy-line);transition:box-shadow var(--jy-t-base)}
body.jyh-tabs-stuck .jyh-tabs{box-shadow:0 12px 24px -20px rgba(52,28,19,.5)}
.jyh-tabs__inner{position:relative;display:flex;gap:4px;transition:padding-right var(--jy-t-base)}
body.jyh-tabs-stuck .jyh-tabs__inner{padding-right:54px}
.jyh-tab{
  position:relative;z-index:1;flex:1 1 0;display:flex;align-items:center;justify-content:center;gap:8px;min-width:0;min-height:56px;padding:6px 10px;
  border:0;border-radius:0;background:transparent;color:var(--jy-muted);font-size:.9375rem;font-weight:750;letter-spacing:.01em;white-space:nowrap;
  transition:color var(--jy-t-base) var(--jy-ease-out),background-color var(--jy-t-fast);
}
.jyh-tab:hover:not([aria-selected="true"]){color:var(--jy-ink);background:rgba(var(--jy-gold-rgb),.08)}
.jyh-tab .jyh-i{font-size:1.15rem}
.jyh-tab[aria-selected="true"]{color:var(--jy-ink)}
.jyh-tab[aria-selected="true"] .jyh-i{color:var(--jy-accent)}
.jyh-tab__badge{min-width:20px;height:20px;padding:0 6px;border-radius:4px;background:var(--jy-accent);color:#fff;font-size:.6875rem;font-weight:800;line-height:20px}
.jyh-tabs__ink{position:absolute;z-index:0;bottom:-1px;left:0;width:0;height:3px;border-radius:3px 3px 0 0;background:var(--jy-accent);transition:transform var(--jy-t-base) var(--jy-ease-out),width var(--jy-t-base) var(--jy-ease-out)}
.jyh-tab__short{display:none}
@media (max-width:719px){
  .jyh-tabs__inner{gap:0}
  .jyh-tab{flex-direction:column;gap:3px;min-height:58px;padding:6px 2px;font-size:.6875rem;font-weight:750}
  .jyh-tab .jyh-i{font-size:1.25rem}
  .jyh-tab__long{display:none}
  .jyh-tab__short{display:inline}
  .jyh-tab__badge{position:absolute;top:4px;right:calc(50% - 24px);min-width:18px;height:18px;line-height:18px;font-size:.625rem;padding:0 5px}
}

/* Khu nội dung */
.jyh-panels{position:relative;padding:28px 0 60px}
.jyh-panel{outline:0}
.jyh-panel.is-entering{animation:jyhPanelIn var(--jy-t-base) var(--jy-ease-out) both}
@keyframes jyhPanelIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.jyh-boot{display:grid;place-items:center;min-height:240px;padding:40px 16px;color:var(--jy-muted);font-weight:700;text-align:center}

/* Lưới bố cục */
.jyh-grid{display:grid;gap:20px}
.jyh-grid--today{grid-template-columns:minmax(0,1.42fr) minmax(0,1fr);align-items:stretch}
.jyh-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.jyh-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.jyh-stack{display:flex;flex-direction:column;gap:20px;min-width:0}
.jyh-stack>.jyh-grow{flex:1 1 auto}
@media (max-width:959px){.jyh-grid--today{grid-template-columns:minmax(0,1fr)}.jyh-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:719px){.jyh-grid--2,.jyh-grid--3{grid-template-columns:minmax(0,1fr)}.jyh-panels{padding:20px 0 44px}.jyh-grid,.jyh-stack{gap:16px}}

/* Dải thông báo nhẹ */
.jyh-note{display:flex;align-items:flex-start;gap:12px;padding:13px 16px;border:1px solid var(--jy-line);border-left:3px solid var(--jy-gold);border-radius:var(--jy-r);background:var(--jy-cream);color:var(--jy-ink);font-size:.9375rem;line-height:1.55}
.jyh-note .jyh-i{flex:0 0 auto;margin-top:2px;color:var(--jy-gold-ink)}
.jyh-note--warn{border-left-color:var(--jy-bad)}
.jyh-note--warn .jyh-i{color:var(--jy-bad)}
.jyh-note__body{flex:1;min-width:0;display:grid;gap:8px}
.jyh-note__actions{display:flex;flex-wrap:wrap;gap:8px}

.jyh-short{display:none}
@media (max-width:719px){.jyh-long{display:none}.jyh-short{display:inline}.jyh-card__head .jyh-btn{flex:0 0 auto}}

/* ==========================================================================
   9. TAB HÔM NAY
   ========================================================================== */
/* Vé Bước tiếp theo */
.jyh-next .jyh-ticket__body{min-height:236px}
.jyh-next__main{display:flex;flex-direction:column;gap:10px;height:100%}
.jyh-next__kicker{color:var(--jy-accent)}
.jyh-next__title{font-family:var(--jy-font-title);font-size:clamp(1.65rem,2.6vw,2.15rem);line-height:1.12;color:var(--jy-ink)}
.jyh-next__meta{display:flex;flex-wrap:wrap;gap:6px 18px;color:var(--jy-muted);font-size:.875rem;font-weight:650}
.jyh-next__meta span{display:inline-flex;align-items:center;gap:6px}
.jyh-next__meta .jyh-i{color:var(--jy-gold-ink)}
/* Những từ sắp học / sắp ôn: thấy trước nội dung của bước */
.jyh-next__words{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:2px}
.jyh-next__wlabel{margin-right:4px;color:var(--jy-faint);font-size:.6875rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jyh-next__w{display:inline-flex;align-items:baseline;gap:6px;min-height:32px;padding:4px 10px;border:1px solid var(--jy-line2);border-radius:var(--jy-r);background:var(--jy-cream);color:var(--jy-ink);font-size:.8125rem;line-height:1.2}
.jyh-next__w .jyh-han{font-size:1.05rem}
.jyh-next__w .jyh-py{color:var(--jy-muted)}
.jyh-next__actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-top:auto;padding-top:8px}
.jyh-next__why{color:var(--jy-muted);font-size:.8125rem;line-height:1.5}
.jyh-next .jyh-stamp{top:18px;right:22px}
.jyh-next--done .jyh-next__title{color:var(--jy-accent-lo)}
.jyh-next__stubtext{display:grid;gap:4px;justify-items:center}
@media (max-width:719px){
  .jyh-next .jyh-ticket__body{--stubh:92px;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) var(--stubh);
    -webkit-mask:
      radial-gradient(circle at 0 calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) left/51% 100% no-repeat,
      radial-gradient(circle at 100% calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) right/51% 100% no-repeat;
    mask:
      radial-gradient(circle at 0 calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) left/51% 100% no-repeat,
      radial-gradient(circle at 100% calc(100% - var(--stubh)),#0000 var(--jy-notch),#000 calc(var(--jy-notch) + .5px)) right/51% 100% no-repeat}
  .jyh-next .jyh-ticket__main{padding:20px 18px 18px}
  .jyh-next .jyh-ticket__stub{flex-direction:row;justify-content:space-between;padding:10px 20px}
  .jyh-next .jyh-ticket__stub::before{left:calc(var(--jy-notch) + 6px);right:calc(var(--jy-notch) + 6px);top:-1px;bottom:auto;width:auto;height:2px;background:radial-gradient(circle,rgba(var(--jy-sand-rgb),.6) 1.2px,transparent 1.7px) 0 0/9px 2px repeat-x}
  .jyh-next .jyh-ring{width:68px;height:68px}
  .jyh-next .jyh-ring__val{font-size:1.2rem}
  .jyh-next .jyh-barcode{max-width:70px}
  .jyh-next__actions .jyh-btn--primary{flex:1 1 100%}
  .jyh-next .jyh-stamp{top:12px;right:12px;width:70px;height:70px;font-size:1.3rem}
  .jyh-next__stubtext{justify-items:start;text-align:left}
}

/* Kế hoạch hôm nay */
.jyh-plan{display:flex;flex-direction:column}
.jyh-plan .jyh-card__head{margin-bottom:6px}
.jyh-tasks{display:grid;margin:0 -8px 14px}
.jyh-task{
  display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;min-height:62px;padding:10px 8px;
  border:0;border-bottom:1px solid var(--jy-line2);background:transparent;text-align:left;color:var(--jy-ink);border-radius:0;
  transition:background-color var(--jy-t-fast);
}
.jyh-task:last-child{border-bottom:0}
.jyh-task:hover{background:var(--jy-cream)}
.jyh-task__text{min-width:0;display:grid;gap:2px}
.jyh-task__title{font-weight:750;font-size:.9875rem;line-height:1.3}
.jyh-task__meta{color:var(--jy-muted);font-size:.8125rem;line-height:1.35}
.jyh-task__go{display:inline-flex;align-items:center;gap:4px;color:var(--jy-accent);font-size:.8125rem;font-weight:800;white-space:nowrap}
.jyh-task.is-done .jyh-task__title{color:var(--jy-muted)}
.jyh-task.is-done .jyh-task__go{color:var(--jy-ok)}
.jyh-check{position:relative;display:grid;place-items:center;width:26px;height:26px;border:2px solid #cdb79b;border-radius:50%;background:#fff;transition:background-color var(--jy-t-base),border-color var(--jy-t-base)}
.jyh-check svg{width:15px;height:15px;fill:none;stroke:#fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:24;stroke-dashoffset:24}
.jyh-task.is-done .jyh-check{border-color:var(--jy-ok);background:var(--jy-ok)}
.jyh-task.is-done .jyh-check svg{stroke-dashoffset:0}
.jyh-task.is-justdone .jyh-check{animation:jyhPop var(--jy-t-slow) var(--jy-ease-spring)}
.jyh-task.is-justdone .jyh-check svg{transition:stroke-dashoffset 360ms var(--jy-ease-out) 120ms}
@keyframes jyhPop{0%{transform:scale(.6)}60%{transform:scale(1.18)}100%{transform:scale(1)}}
.jyh-plan__foot{display:grid;gap:12px;margin-top:auto;padding-top:14px;border-top:1px dashed var(--jy-line)}
.jyh-why{display:flex;gap:10px;color:var(--jy-muted);font-size:.875rem;line-height:1.55}
.jyh-why .jyh-i{flex:0 0 auto;margin-top:2px;color:var(--jy-gold-ink)}
.jyh-why b{color:var(--jy-ink)}

/* Từ của ngày */
.jyh-wotd .jyh-ticket__main{padding:24px 24px 20px}
.jyh-wotd .jyh-ticket__band{margin:-24px -24px 18px;padding-inline:24px}
.jyh-wotd__top{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;align-items:center}
.jyh-wotd__han{padding:0;border:0;background:transparent;cursor:pointer}
.jyh-wotd__info{display:grid;gap:4px;min-width:0}
.jyh-wotd__py{color:var(--jy-accent);font-size:1.3rem;font-weight:700}
.jyh-wotd__mean{font-size:1.05rem;font-weight:650;line-height:1.4}
.jyh-wotd__row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px}
.jyh-ex{display:grid;gap:3px;margin-top:16px;padding:12px 14px;border-left:3px solid var(--jy-gold);border-radius:0 var(--jy-r) var(--jy-r) 0;background:var(--jy-cream)}
.jyh-ex__zh{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;font:500 1.15rem/1.5 var(--jy-font-han)}
.jyh-ex__py{color:var(--jy-muted);font-size:.875rem}
.jyh-ex__tr{font-size:.9375rem}
.jyh-wotd .jyh-ticket__stub{color:var(--jy-ink)}

/* Nhịp học 7 ngày */
.jyh-rhythm{display:flex;flex-direction:column}
.jyh-rhythm .jyh-card__head{margin-bottom:10px}
.jyh-week{flex:1 1 auto;display:flex;flex-direction:column;min-height:150px}
.jyh-week__plot{position:relative;flex:1 1 auto;min-height:112px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;border-bottom:1px solid var(--jy-line)}
.jyh-week__col{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;min-width:0}
.jyh-week__v{color:var(--jy-muted);font:500 .75rem/1.2 var(--jy-font-num)}
.jyh-week__bar{display:block;width:100%;max-width:30px;height:var(--h,0%);min-height:3px;border-radius:4px 4px 0 0;background:var(--jy-gold);transition:height var(--jy-t-slow) var(--jy-ease-out)}
.jyh-week__col.is-zero .jyh-week__bar{background:var(--jy-line)}
.jyh-week__col.is-today .jyh-week__bar{background:var(--jy-accent)}
.jyh-week__col.is-today .jyh-week__v{color:var(--jy-accent);font-weight:700}
.jyh-week__goal{position:absolute;left:0;right:0;bottom:var(--g,50%);border-top:1px dashed rgba(var(--jy-accent-rgb),.42);pointer-events:none}
.jyh-week__goal em{position:absolute;left:0;bottom:3px;padding:0 4px 0 0;background:var(--jy-surface);color:var(--jy-accent);font:600 .6875rem/1.3 var(--jy-font-ui)}
.jyh-week__empty{position:absolute;left:50%;top:64%;display:flex;align-items:center;gap:10px;width:min(300px,86%);padding:10px 14px;border:1px solid var(--jy-line2);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-muted);font-size:.8125rem;font-weight:650;line-height:1.4;transform:translate(-50%,-50%);box-shadow:var(--jy-shadow)}
.jyh-week__empty .jyh-i{flex:0 0 auto;font-size:1.15rem;color:var(--jy-accent)}
.jyh-week__days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:6px;text-align:center}
.jyh-week__days span{color:var(--jy-muted);font-size:.6875rem;font-weight:750;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-week__days .is-today{color:var(--jy-ink)}
.jyh-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:16px;border-block:1px solid var(--jy-line2);text-align:center}
.jyh-metrics>div{display:grid;gap:2px;padding:10px 6px}
.jyh-metrics>div+div{border-left:1px solid var(--jy-line2)}
.jyh-metrics b{font:500 1.4rem/1.15 var(--jy-font-num);color:var(--jy-ink)}
.jyh-metrics span{color:var(--jy-muted);font-size:.6875rem;font-weight:750;letter-spacing:.06em;text-transform:uppercase;line-height:1.3}

/* Thẻ Nền tảng phát âm: ảnh "正音" của trang bên trái */
.jyh-found{display:grid;grid-template-columns:132px minmax(0,1fr) auto;align-items:center;gap:16px;min-height:104px;padding:0 18px 0 0;overflow:hidden;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);text-decoration:none;color:var(--jy-ink);box-shadow:var(--jy-shadow);transition:border-color var(--jy-t-fast)}
.jyh-found:hover{border-color:var(--jy-ink)}
.jyh-found__art{position:relative;align-self:stretch;display:grid;place-items:center;min-height:104px;border-right:1px solid var(--jy-line2);background:
  linear-gradient(rgba(var(--jy-accent-rgb),.13) 1px,transparent 1px) 0 0/18px 18px,
  linear-gradient(90deg,rgba(var(--jy-accent-rgb),.13) 1px,transparent 1px) 0 0/18px 18px,
  #fbf6ec}
.jyh-found__art::before{content:"";position:absolute;top:-4px;left:50%;width:58px;height:16px;background:rgba(214,200,172,.82);box-shadow:0 1px 2px rgba(37,23,17,.15);transform:translateX(-50%) rotate(-3deg)}
.jyh-found__art::after{content:"音";position:absolute;right:9px;bottom:9px;display:grid;place-items:center;width:22px;height:22px;border-radius:3px;background:#b8342b;color:#fff3e8;font:600 .8rem/1 "STKaiti","Kaiti SC",KaiTi,"Noto Serif SC",serif;box-shadow:0 2px 4px rgba(122,34,40,.3)}
.jyh-found__art b{position:relative;color:#251711;font:400 2.1rem/.9 "STKaiti","Kaiti SC",KaiTi,"Noto Serif SC",serif;letter-spacing:.06em;transform:rotate(-3deg)}
.jyh-found__text{min-width:0;display:grid;gap:3px}
.jyh-found__text .jyh-kicker{font-size:.6875rem}
.jyh-found__text b{font-family:var(--jy-font-title);font-size:1.15rem;font-weight:500;line-height:1.25}
.jyh-found__text>span:last-child{color:var(--jy-muted);font-size:.8125rem}
.jyh-found>.jyh-i{color:var(--jy-accent)}
@media (max-width:420px){.jyh-found{grid-template-columns:104px minmax(0,1fr) auto;gap:12px;padding-right:12px}.jyh-found__art b{font-size:1.7rem}}
/* v1.6.4 · việc "Ôn thẻ đến hạn" có nút xem và chỉnh danh sách */
.jyh-taskrow{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;border-bottom:1px solid var(--jy-line2)}
.jyh-taskrow:last-child{border-bottom:0}
.jyh-taskrow .jyh-task{border-bottom:0}
.jyh-task__tune{margin-right:4px;color:var(--jy-accent)}

/* ==========================================================================
   10. PHIÊN HỌC: thẻ lật 3D, chấm 4 mức, tổng kết
   ========================================================================== */
.jyh-ses{display:grid;grid-template-rows:minmax(0,1fr) auto auto;gap:14px;min-height:100%;width:100%;max-width:580px;margin:0 auto;padding:18px 16px calc(16px + env(safe-area-inset-bottom))}
.jyh-ses__stage{display:grid;place-items:center;min-height:0}
.jyh-ses__actions{display:grid;gap:8px;justify-items:center;width:100%}
.jyh-ses__foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px 14px;min-height:44px;color:var(--jy-muted);font-size:.8125rem;font-weight:600}
.jyh-ses__foot .jyh-kbd{border-color:var(--jy-line);color:var(--jy-muted)}
.jyh-ses__hint{opacity:.85}
.jyh-fc-wrap{width:100%}
.jyh-fc{width:100%;perspective:1400px;outline:0;-webkit-user-select:none;user-select:none;touch-action:pan-y;cursor:pointer}
.jyh-fc:focus-visible .jyh-ticket__body{outline:2px solid rgba(var(--jy-accent-rgb),.5);outline-offset:3px}
.jyh-fc.is-enter{animation:jyhCardIn 380ms var(--jy-ease-out) both}
@keyframes jyhCardIn{from{opacity:0;transform:translateY(36px) scale(.97)}to{opacity:1;transform:none}}
.jyh-fc__inner{position:relative;display:grid;transform-style:preserve-3d;transition:transform 450ms var(--jy-ease-out)}
.jyh-fc__inner.is-flipped{transform:rotateY(180deg)}
.jyh-fc__face{grid-area:1/1;-webkit-backface-visibility:hidden;backface-visibility:hidden;min-width:0}
.jyh-fc__back{transform:rotateY(180deg)}
.jyh-fc .jyh-ticket__body{min-height:min(430px,58vh)}
.jyh-fc .jyh-ticket__main{display:flex;flex-direction:column}
.jyh-fc__back .jyh-ticket__body::before{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;background:linear-gradient(105deg,transparent 35%,rgba(255,250,240,.7) 50%,transparent 65%);transform:translateX(-120%)}
.jyh-fc__inner.is-flipped .jyh-fc__back .jyh-ticket__body::before{animation:jyhSweep 700ms var(--jy-ease-out) 260ms both}
@keyframes jyhSweep{to{transform:translateX(120%)}}
.jyh-fc__center{flex:1;display:grid;justify-items:center;align-content:center;gap:12px;min-height:200px;text-align:center}
.jyh-fc__han{font-size:clamp(3.2rem,calc(15rem / (var(--len,1) + 1.2)),6.4rem);line-height:1.08;color:var(--jy-ink)}
.jyh-fc__han--sm{font-size:2.6rem}
.jyh-fc__py{color:var(--jy-accent);font-size:1.3rem;font-weight:700}
.jyh-fc__mean{font-size:1.15rem;font-weight:700;line-height:1.45;color:var(--jy-ink)}
.jyh-fc__mean--big{font-family:var(--jy-font-title);font-size:clamp(1.5rem,5vw,2rem);font-weight:500;max-width:22ch}
.jyh-fc__tap{color:var(--jy-muted);font-size:.8125rem;font-weight:600}
.jyh-fc__free{font-size:1.5rem;font-weight:700;line-height:1.4;white-space:pre-wrap;overflow-wrap:anywhere}
.jyh-fc__free--back{font-size:1.2rem;font-weight:600}
.jyh-fc__backtop{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:8px 14px;margin-bottom:10px}
.jyh-fc__backtop .jyh-pos{margin-top:4px}
.jyh-fc__noex{margin-top:14px;color:var(--jy-muted);font-size:.875rem}
.jyh-fc__hard{margin-top:14px}
.jyh-fc__bigsay{display:grid;place-items:center;gap:6px;width:116px;height:116px;border:1px solid rgba(255,255,255,.9);border-radius:50%;background:linear-gradient(145deg,#fffdf7,#f1e2d2);color:var(--jy-accent);font-weight:800;box-shadow:0 16px 30px -18px rgba(69,28,27,.7),inset 0 1px 0 #fff}
.jyh-fc__bigsay .jyh-i{font-size:2.3rem}
.jyh-fc__stubtext{display:flex;align-items:center;gap:10px}
.jyh-fc.is-left .jyh-ticket__main{background:rgba(var(--jy-bad-rgb),.06)}
.jyh-fc.is-right .jyh-ticket__main{background:rgba(var(--jy-ok-rgb),.06)}
.jyh-fc--intro{width:100%}
.jyh-fc__intro{display:grid;justify-items:center;gap:10px;text-align:center}
.jyh-fc__head{display:flex;align-items:center;justify-content:center;gap:8px}
.jyh-fc__intro .jyh-ex{width:100%;text-align:left}
.jyh-ibtn.is-playing{color:var(--jy-gold-ink)}
.jyh-ibtn--night.is-playing{color:var(--jy-gold-hi)}

.jyh-grades{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;width:100%}
.jyh-grade{position:relative;display:grid;justify-items:center;align-content:center;gap:2px;min-height:var(--jy-tap-game);padding:8px 4px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface);font-weight:800;transition:transform var(--jy-t-fast) var(--jy-ease-out),background-color var(--jy-t-fast)}
.jyh-grade:active{transform:scale(.96)}
.jyh-grade__name{font-size:.9375rem;line-height:1.2}
.jyh-grade__ivl{font-size:.75rem;color:var(--jy-muted);font-weight:650;line-height:1.2}
.jyh-grade__key{position:absolute;top:5px;right:5px;min-width:18px;height:18px;font-size:.625rem;border-color:var(--jy-line);color:var(--jy-muted)}
.jyh-grade--again{color:var(--jy-bad);border-color:rgba(var(--jy-bad-rgb),.35)}
.jyh-grade--again:hover{background:#fbf0ee}
.jyh-grade--hard{color:var(--jy-ink)}
.jyh-grade--hard:hover{background:var(--jy-cream)}
.jyh-grade--good{color:var(--jy-accent);border-color:rgba(var(--jy-accent-rgb),.4)}
.jyh-grade--good:hover{background:#f8eeea}
.jyh-grade--easy{color:var(--jy-ok);border-color:rgba(var(--jy-ok-rgb),.4)}
.jyh-grade--easy:hover{background:#eef5f0}
@media (max-width:719px){.jyh-grade__key{display:none}.jyh-ses{padding-top:12px;gap:10px}.jyh-fc .jyh-ticket__body{min-height:min(400px,52vh)}}

/* Tổng kết phiên */
.jyh-sum{width:100%}
.jyh-sum .jyh-ticket__body{min-height:0}
.jyh-sum__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:6px 0 14px;border-block:1px solid var(--jy-line2);text-align:center}
.jyh-sum__grid>div{padding:10px 4px}
.jyh-sum__grid>div+div{border-left:1px solid var(--jy-line2)}
.jyh-sum__num{display:block;font:500 2.1rem/1.1 var(--jy-font-num);color:var(--jy-ink)}
.jyh-sum__num--sm{font:800 1rem/1.3 var(--jy-font-ui);padding:12px 0 6px}
.jyh-sum__lbl{display:block;margin-top:2px;color:var(--jy-muted);font-size:.6875rem;font-weight:750;letter-spacing:.06em;text-transform:uppercase}
.jyh-sum__hard{display:grid;gap:8px;margin-top:4px}
.jyh-sum__hard .jyh-kicker{color:var(--jy-bad)}
.jyh-sum__done{display:flex;align-items:center;gap:8px;margin-top:12px;color:var(--jy-ok);font-weight:800}
.jyh-sum .jyh-ticket__main{padding-bottom:30px}
.jyh-sum .jyh-stamp{right:22px;bottom:-40px;z-index:3}
.jyh-sum.is-plan-done .jyh-ticket__band{background:linear-gradient(120deg,var(--jy-dark),var(--jy-accent-lo))}

/* Vé xé đôi khi xong cả kế hoạch */
.jyh-next.is-torn .jyh-ticket__stub{animation:jyhTear 1200ms var(--jy-ease-out) both}
@keyframes jyhTear{0%{transform:none}30%{transform:translate(18px,8px) rotate(7deg)}70%{transform:translate(18px,8px) rotate(7deg)}100%{transform:none}}
@media (max-width:719px){@keyframes jyhTear{0%{transform:none}30%{transform:translate(8px,18px) rotate(-5deg)}70%{transform:translate(8px,18px) rotate(-5deg)}100%{transform:none}}}

/* ==========================================================================
   11. TAB TỪ VỰNG & THẺ
   ========================================================================== */
.jyh-decks{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(200px,1fr);gap:12px;overflow-x:auto;padding:4px 2px 12px;margin:0 -2px;scroll-snap-type:x proximity;overscroll-behavior-x:contain;scrollbar-width:thin}
.jyh-deck{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:14px;min-height:132px;padding:16px 16px 16px 20px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:var(--jy-shadow);scroll-snap-align:start}
.jyh-deck::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(var(--jy-accent),var(--jy-gold));border-radius:var(--jy-r-card) 0 0 var(--jy-r-card)}
.jyh-deck__top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.jyh-deck__name{font-weight:800;font-size:.9875rem;line-height:1.3}
.jyh-deck__count{font:500 1.6rem/1 var(--jy-font-num);color:var(--jy-accent)}
.jyh-deck__actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.jyh-deck__empty{color:var(--jy-muted);font-size:.8125rem;font-weight:600}
.jyh-dirs{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:4px}
.jyh-dirs__label{color:var(--jy-muted);font-size:.75rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}

.jyh-vlist{padding:0;overflow:hidden}
.jyh-vtools{display:grid;gap:12px;padding:16px 16px 10px;border-bottom:1px solid var(--jy-line);background:var(--jy-bg)}
.jyh-vtools__row{display:grid;grid-template-columns:minmax(0,1fr) 200px 180px;gap:10px}
.jyh-vfilter{position:relative;display:block}
.jyh-vfilter .jyh-i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--jy-muted)}
.jyh-vfilter .jyh-input{padding-left:42px}
.jyh-vcount{color:var(--jy-muted);font-size:.8125rem;font-weight:650}
@media (max-width:719px){.jyh-vtools__row{grid-template-columns:1fr 1fr}.jyh-vfilter{grid-column:1/-1}}

.jyh-wlist{display:grid}
.jyh-wrow{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto auto;align-items:center;gap:4px 8px;padding:6px 10px 6px 6px;border-bottom:1px solid var(--jy-line)}
.jyh-wrow:last-child{border-bottom:0}
.jyh-wrow__main{display:flex;align-items:center;gap:14px;min-width:0;min-height:56px;padding:6px 10px;border:0;border-radius:var(--jy-r);background:transparent;text-align:left;color:var(--jy-ink)}
.jyh-wrow__main:hover{background:var(--jy-cream)}
.jyh-wrow__han{flex:0 0 auto;min-width:5.4rem;font-size:1.65rem;line-height:1.1}
.jyh-wrow__text{display:grid;min-width:0}
.jyh-wrow__py{color:var(--jy-accent);font-size:.875rem;font-weight:700}
.jyh-wrow__mean{font-size:.9375rem;line-height:1.35;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.jyh-wlist__more{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 16px;padding:16px}
.jyh-wlist__count{color:var(--jy-muted);font-size:.875rem;font-weight:600}
.jyh-rot180{transform:rotate(180deg)}
@media (max-width:719px){
  .jyh-wrow{grid-template-columns:minmax(0,1fr) auto auto auto;padding-right:4px}
  .jyh-wrow .jyh-status{grid-column:1;grid-row:2;padding-left:16px;margin-top:-8px}
  .jyh-wrow__han{min-width:4.6rem;font-size:1.45rem}
  .jyh-wrow__main{gap:10px;padding-inline:8px}
}

/* Chi tiết từ */
.jyh-word{display:grid;gap:16px}
.jyh-word__top{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;align-items:start}
.jyh-word__info{display:grid;gap:6px;min-width:0}
.jyh-word__py{color:var(--jy-accent);font-size:1.4rem;font-weight:700}
.jyh-word__mean{font-size:1.1rem;font-weight:700;line-height:1.45}
.jyh-word__meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.jyh-word__next{display:flex;align-items:center;gap:6px;color:var(--jy-muted);font-size:.8125rem;font-weight:650}
.jyh-word__actions{display:flex;flex-wrap:wrap;gap:8px}
.jyh-word__actions .jyh-btn{flex:1 1 180px}
.jyh-sheet__py{font-family:var(--jy-font-ui);font-size:1rem;font-weight:700;color:var(--jy-accent);margin-left:6px}
@media (max-width:479px){.jyh-word__top{grid-template-columns:1fr;justify-items:center;text-align:center}.jyh-word__meta,.jyh-word__info .jyh-btns{justify-content:center}}

/* Biểu mẫu */
.jyh-form{display:grid;gap:14px}
.jyh-inline-form{display:flex;gap:8px;margin-top:14px}
.jyh-inline-form .jyh-input{flex:1}
.jyh-error:empty{display:none}
.jyh-error{font-size:.875rem;font-weight:700}

/* Nhập nhiều từ */
.jyh-import__text{font-family:var(--jy-font-han),var(--jy-font-ui);margin-top:10px}
.jyh-import__preview{margin-top:14px}
.jyh-import__rows{display:grid;border:1px solid var(--jy-line);border-radius:var(--jy-r);overflow:hidden}
.jyh-import__row{display:grid;grid-template-columns:90px 120px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--jy-line);font-size:.875rem}
.jyh-import__row:last-child{border-bottom:0}
.jyh-import__row .jyh-han{font-size:1.15rem}
.jyh-import__row .jyh-py{color:var(--jy-accent);font-weight:650}
.jyh-import__mean{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:600px){.jyh-import__row{grid-template-columns:70px minmax(0,1fr);}.jyh-import__row .jyh-import__mean{grid-column:1/-1}}

/* Ô tìm từ trong phần tạo thẻ (v1.5) */
.jyh-pick{position:relative;display:grid;gap:6px;margin-bottom:14px;padding:12px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-cream)}
.jyh-pick__title{color:var(--jy-ink);font-size:.8125rem;font-weight:800;letter-spacing:.02em}
.jyh-pick__box{position:relative;display:block}
.jyh-pick__box>.jyh-i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--jy-muted);pointer-events:none}
.jyh-pick__q.jyh-input{padding-left:42px;background:#fff}
.jyh-pick__hint{color:var(--jy-muted);font-size:.75rem;line-height:1.45}
.jyh-pick__list{display:grid;max-height:min(340px,46vh);overflow:auto;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:#fff;overscroll-behavior:contain}
.jyh-pick__row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px;padding:4px 8px 4px 4px;border-bottom:1px solid var(--jy-line)}
.jyh-pick__row:last-child{border-bottom:0}
.jyh-pick__row.is-act{background:#fbf3ea}
.jyh-pick__main{display:flex;align-items:center;gap:12px;min-width:0;padding:6px 8px;border:0;border-radius:var(--jy-r);background:transparent;color:var(--jy-ink);text-align:left}
.jyh-pick__main:hover{background:var(--jy-cream)}
.jyh-pick__main:disabled{opacity:1;cursor:default}
.jyh-pick__han{flex:0 0 auto;min-width:3.6rem;font-size:1.45rem;line-height:1.1}
.jyh-pick__text{display:grid;gap:1px;min-width:0}
.jyh-pick__py{color:var(--jy-accent);font-size:.8125rem;font-weight:700}
.jyh-pick__mean{overflow:hidden;font-size:.875rem;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}
.jyh-pick__tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.jyh-pick__tags .jyh-badge{padding:1px 6px;font-size:.625rem}
.jyh-badge--ed2{border-color:rgba(185,144,84,.7);background:#fbf4e6;color:#7a5a1c}
.jyh-pick__acts{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}
.jyh-pick__empty{display:grid;justify-items:start;gap:8px;padding:12px;color:var(--jy-muted);font-size:.875rem}
.jyh-quickpick{margin:2px 0 16px}
.jyh-quickpick .jyh-pick{margin-bottom:0;background:var(--jy-surface)}
@media (max-width:560px){.jyh-pick{padding:10px}.jyh-pick__row{grid-template-columns:minmax(0,1fr);padding-right:4px}.jyh-pick__acts{justify-content:flex-start;padding:0 0 8px 8px}.jyh-pick__han{min-width:3rem;font-size:1.3rem}}

/* ---------- v1.6.3 · Loại từ trong danh sách, bảng chọn bộ thẻ, vé bộ thẻ ---------- */
.jyh-wrow__line{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 8px;min-width:0}
.jyh-wrow__pos{color:var(--jy-muted);font-size:.75rem;font-weight:650;line-height:1.3}
.jyh-pick__pos{margin-left:6px;color:var(--jy-muted);font-size:.75rem;font-weight:650}
.jyh-fc__pos{margin-top:10px}
.jyh-wrow--free{grid-template-columns:minmax(0,1fr) auto}
.jyh-deck__actions .jyh-btn--sm{min-height:36px;padding-inline:.7em}
.jyh-deck--user::before{background:linear-gradient(var(--jy-gold),var(--jy-accent))}

.jyh-dpick{display:grid;gap:18px}
.jyh-dpick__word{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-cream)}
.jyh-dpick__word>.jyh-han{font-size:2rem;line-height:1}
.jyh-dpick__wtxt{display:grid;gap:2px;min-width:0}
.jyh-dpick__wtxt b{color:var(--jy-accent);font-size:.9375rem}
.jyh-dpick__wtxt small{color:var(--jy-muted);font-size:.8125rem;line-height:1.4}
.jyh-dpick__group{display:grid;gap:6px}
.jyh-dpick__group h4{display:flex;align-items:center;gap:8px;margin:0 0 2px;color:var(--jy-muted);font:750 .75rem/1.2 var(--jy-font-ui);letter-spacing:.12em;text-transform:uppercase}
.jyh-dpick__group h4 .jyh-num{padding:1px 7px;border-radius:999px;background:var(--jy-cream2);color:var(--jy-ink);letter-spacing:0}
.jyh-dpick__row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;min-height:54px;padding:8px 12px;border:1px solid var(--jy-line2);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-ink);font:inherit;text-align:left;cursor:pointer;transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast)}
.jyh-dpick__row:hover{border-color:var(--jy-line);background:var(--jy-cream)}
.jyh-dpick__row:focus-visible{outline:2px solid var(--jy-gold);outline-offset:2px}
.jyh-dpick__ic{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--jy-cream);color:var(--jy-accent)}
.jyh-dpick__ic .jyh-i{font-size:1.05rem}
.jyh-dpick__txt{display:grid;gap:2px;min-width:0}
.jyh-dpick__txt b{font-weight:750;font-size:.9375rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jyh-dpick__txt small{color:var(--jy-muted);font-size:.8125rem;line-height:1.35}
.jyh-dpick__box{width:22px;height:22px;border:2px solid var(--jy-gold);border-radius:6px;background:#fff}
.jyh-dpick__row.is-on{border-color:rgba(var(--jy-accent-rgb),.35);background:#fbf1ee}
.jyh-dpick__row.is-on .jyh-dpick__ic{background:var(--jy-accent);color:#fff8ef}
.jyh-dpick__row.is-on .jyh-dpick__box{border-color:var(--jy-accent);background:var(--jy-accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7'/%3E%3C/svg%3E") center/14px no-repeat}
.jyh-dpick__row--act .jyh-dpick__ic{background:var(--jy-ink);color:#fff8ef}
.jyh-dpick__go{color:var(--jy-muted)}
.jyh-dpick__filter{display:flex;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:#fff}
.jyh-dpick__filter .jyh-input{border:0;padding-inline:0;min-height:40px;background:transparent}
.jyh-dpick__new{margin-top:4px}

/* ---------- v1.6.3 · Thứ tự nét cho từng chữ ---------- */
.jyh-so{display:grid;gap:12px;margin-top:16px;padding:14px 16px 16px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface)}
.jyh-so-layer .jyh-so{margin-top:0;border:0;padding:0;background:transparent}
.jyh-so__head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px 12px}
.jyh-so__head h4{display:flex;align-items:center;gap:8px;margin:0;font:600 1.0625rem/1.3 var(--jy-font-title);color:var(--jy-ink)}
.jyh-so__head h4 .jyh-i{color:var(--jy-accent)}
.jyh-so__body{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.jyh-so__msg{color:var(--jy-muted);font-size:.8125rem}
.jyh-so__cells{display:flex;flex-wrap:wrap;gap:14px 16px}
.jyh-so__cell{display:grid;justify-items:center;gap:6px}
.jyh-so__pad{position:relative;display:grid;place-items:center;min-width:92px;min-height:92px;border:1px solid #cdb79b;border-radius:6px;background-color:#fffdf9;
  background-image:linear-gradient(90deg,transparent calc(50% - .5px),rgba(205,183,155,.55) calc(50% - .5px),rgba(205,183,155,.55) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(0deg,transparent calc(50% - .5px),rgba(205,183,155,.55) calc(50% - .5px),rgba(205,183,155,.55) calc(50% + .5px),transparent calc(50% + .5px))}
.jyh-so__pad svg{display:block}
.jyh-so__pad.is-empty .jyh-han{font-size:3.4rem;line-height:1;color:var(--jy-faint)}
.jyh-so__n{color:var(--jy-muted);font-size:.8125rem;font-weight:700;font-variant-numeric:tabular-nums}
.jyh-so__btns{display:flex;gap:4px}
.jyh-so__btns .jyh-ibtn{min-height:34px}

/* v1.6.4 · Ôn hôm nay: đề xuất sẵn, chỉnh được trong ngày */
.jyh-deck__tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;background:var(--jy-accent);color:#fff8ee;font:800 .625rem/1.6 var(--jy-font-ui);letter-spacing:.04em;vertical-align:2px}
.jyh-dt{display:grid;gap:14px}
.jyh-dt__mode{display:grid;gap:6px;padding:12px 14px;border-radius:var(--jy-r-card);background:var(--jy-cream);border:1px solid var(--jy-line)}
.jyh-dt__mode p{margin:0;color:#4b3d34;font-size:.875rem;line-height:1.55}
.jyh-dt__badge{display:inline-flex;align-items:center;gap:6px;justify-self:start;padding:3px 10px;border-radius:999px;background:var(--jy-ok);color:#fff;font-size:.75rem;font-weight:800}
.jyh-dt__badge.is-custom{background:var(--jy-accent)}
.jyh-dt__ctl{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:12px;align-items:end}
@media (max-width:719px){.jyh-dt__ctl{grid-template-columns:1fr}}
.jyh-dt__lbl{display:block;margin-bottom:6px;color:var(--jy-muted);font-size:.75rem;font-weight:800}
.jyh-dt__order{display:block}
.jyh-dt__add{display:grid;gap:8px}
.jyh-dtrow{grid-template-columns:auto minmax(0,1fr) auto auto}
.jyh-dtrow.is-skip .jyh-wrow__main{opacity:.45;text-decoration:line-through}
.jyh-dtrow.is-outside .jyh-wrow__main{opacity:.6}
.jyh-dt__check{display:grid;place-items:center;width:40px;height:40px;border:0;background:transparent;cursor:pointer}
.jyh-dt__check span{width:20px;height:20px;border:2px solid var(--jy-line);border-radius:5px;background:#fff;transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast)}
.jyh-dt__check[aria-checked="true"] span{border-color:var(--jy-accent);background:var(--jy-accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-6.5' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/14px no-repeat}
.jyh-dt__tag{color:var(--jy-muted);font-size:.75rem;font-weight:700;white-space:nowrap}
.jyh-dt__tag.is-mine{color:var(--jy-accent)}
@media (max-width:719px){.jyh-dtrow{grid-template-columns:auto minmax(0,1fr) auto}.jyh-dtrow .jyh-dt__tag{grid-column:2;grid-row:2;padding-left:14px;margin-top:-10px}}
.jyh-next__tune{display:inline-flex;align-items:center;gap:6px;min-height:32px;margin-left:auto;padding:0 10px;border:1px solid rgba(var(--jy-sand-rgb),.45);border-radius:999px;background:transparent;color:inherit;font:700 .75rem/1 var(--jy-font-ui);cursor:pointer}
.jyh-next__tune:hover{border-color:var(--jy-gold-hi)}

/* v1.6.5 · Hàng bộ thẻ: thanh cuộn mảnh màu vàng đồng, mờ dần ở mép còn thẻ, nút ‹ › trên máy tính */
.jyh-hscroll{position:relative}
.jyh-hscroll .jyh-decks{scroll-behavior:smooth;scroll-snap-type:x mandatory;scroll-padding-inline:2px;scrollbar-width:thin;scrollbar-color:#c9a266 rgba(var(--jy-sand-rgb),.5)}
.jyh-hscroll .jyh-decks>*{scroll-snap-align:start}
@supports not (scrollbar-color:auto){
  .jyh-hscroll .jyh-decks::-webkit-scrollbar{height:6px}
  .jyh-hscroll .jyh-decks::-webkit-scrollbar-track{margin-inline:10px;border-radius:999px;background:rgba(var(--jy-sand-rgb),.5)}
  .jyh-hscroll .jyh-decks::-webkit-scrollbar-thumb{border-radius:999px;background:linear-gradient(90deg,#d9b77a,#b99054)}
  .jyh-hscroll .jyh-decks::-webkit-scrollbar-thumb:hover{background:#8a6631}
}
.jyh-hscroll.is-scroll:not(.is-start):not(.is-end) .jyh-decks{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 44px,#000 calc(100% - 44px),transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 44px,#000 calc(100% - 44px),transparent 100%)}
.jyh-hscroll.is-scroll.is-start:not(.is-end) .jyh-decks{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent 100%);mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent 100%)}
.jyh-hscroll.is-scroll.is-end:not(.is-start) .jyh-decks{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 56px);mask-image:linear-gradient(90deg,transparent 0,#000 56px)}
.jyh-hscroll__btn{position:absolute;top:calc(50% - 6px);z-index:2;display:grid;place-items:center;width:40px;height:40px;margin-top:-20px;border:1px solid var(--jy-line);border-radius:50%;background:var(--jy-surface);color:var(--jy-accent);box-shadow:0 8px 20px -8px rgba(37,23,17,.45);cursor:pointer;transition:transform var(--jy-t-fast) var(--jy-ease-out),background-color var(--jy-t-fast)}
.jyh-hscroll__btn:hover{background:var(--jy-cream);transform:scale(1.06)}
.jyh-hscroll__btn .jyh-i{font-size:1.15rem}
.jyh-hscroll__btn--prev{left:-8px}
.jyh-hscroll__btn--next{right:-8px}
.jyh-hscroll__btn[hidden]{display:none}
@media (hover:none),(pointer:coarse){.jyh-hscroll__btn{display:none}}

/* Cùng kiểu thanh cuộn cho các chỗ cuộn khác trong Bàn học */
.jyh-map__stages,.jyh-sheet__body,.jyh-palette__body,.jyh-search-panel__body,.jyh-pick__list,.jyh-kwpop{scrollbar-width:thin;scrollbar-color:#c9a266 transparent}
@supports not (scrollbar-color:auto){
  .jyh-map__stages::-webkit-scrollbar,.jyh-sheet__body::-webkit-scrollbar,.jyh-palette__body::-webkit-scrollbar,.jyh-search-panel__body::-webkit-scrollbar,.jyh-pick__list::-webkit-scrollbar,.jyh-kwpop::-webkit-scrollbar{width:6px;height:6px}
  .jyh-map__stages::-webkit-scrollbar-thumb,.jyh-sheet__body::-webkit-scrollbar-thumb,.jyh-palette__body::-webkit-scrollbar-thumb,.jyh-search-panel__body::-webkit-scrollbar-thumb,.jyh-pick__list::-webkit-scrollbar-thumb,.jyh-kwpop::-webkit-scrollbar-thumb{border-radius:999px;background:#c9a266}
}

/* ---------- v1.6.5 · Cách viết: nút trên dòng từ, khối dưới dòng, thẻ ôn ---------- */
.jyh-wrow--deck{grid-template-columns:minmax(0,1fr) auto auto}
.jyh-wrow__so-btn[aria-expanded="true"]{background:var(--jy-cream);border-color:var(--jy-line);color:var(--jy-ink)}
.jyh-wrow.is-so{background:linear-gradient(180deg,rgba(var(--jy-accent-rgb),.035),transparent 72px)}
.jyh-wrow__so{grid-column:1/-1;min-width:0;padding:2px 6px 10px 10px;animation:jyhSoIn .26s var(--jy-ease-out) both}
@keyframes jyhSoIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media (max-width:719px){
  .jyh-wrow--deck{grid-template-columns:minmax(0,1fr) auto auto}
  .jyh-wrow .jyh-ibtn{min-width:40px;padding-inline:3px}
  .jyh-so-lbl{font-size:0}
  .jyh-so-lbl::after{content:attr(data-short);font-size:.6875rem}
  .jyh-wrow__so{padding:0 2px 10px 4px}
}

/* Khối Cách viết: ô 田字格 cùng kiểu với ô chữ ở bảng từ */
.jyh-so__head h4 small{margin-left:2px;color:var(--jy-muted);font:650 .75rem/1.2 var(--jy-font-ui);letter-spacing:.02em}
.jyh-so__acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.jyh-so__pad{border:1.5px solid rgba(var(--jy-accent-rgb),.42);border-radius:4px;background:
  linear-gradient(45deg,transparent calc(50% - .5px),rgba(var(--jy-accent-rgb),.1) 50%,transparent calc(50% + .5px)),
  linear-gradient(-45deg,transparent calc(50% - .5px),rgba(var(--jy-accent-rgb),.1) 50%,transparent calc(50% + .5px)),
  linear-gradient(rgba(var(--jy-accent-rgb),.2),rgba(var(--jy-accent-rgb),.2)) center/100% 1px no-repeat,
  linear-gradient(90deg,rgba(var(--jy-accent-rgb),.2),rgba(var(--jy-accent-rgb),.2)) center/1px 100% no-repeat,#fffefb;min-width:0;min-height:0;box-sizing:content-box}
.jyh-so__pad .jyh-han{line-height:1;color:var(--jy-ink)}
.jyh-so__pad.is-empty .jyh-han{font-size:inherit;color:var(--jy-faint)}
.jyh-so__pad.is-wait{cursor:pointer}
.jyh-so__pad.is-wait .jyh-han{color:rgba(37,23,17,.82);transition:color var(--jy-t-fast)}
.jyh-so__pad.is-wait:hover .jyh-han{color:var(--jy-accent)}
.jyh-so.is-loading .jyh-so__pad.is-wait{overflow:hidden}
.jyh-so.is-loading .jyh-so__pad.is-wait::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,250,240,.75) 50%,transparent 70%);transform:translateX(-100%);animation:jyhSoShine 1.1s ease-in-out infinite}
@keyframes jyhSoShine{to{transform:translateX(100%)}}
.jyh-so__load{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;width:100%}
.jyh-so__load--inline{width:auto;flex:1 1 200px}
.jyh-so__body:has(.jyh-so__load--inline){align-items:center}
.jyh-so__pad.is-mini .jyh-han{color:rgba(37,23,17,.6)}
.jyh-so__playhint{position:absolute;right:3px;bottom:3px;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--jy-accent);color:#fff8ee;font-size:.625rem}
.jyh-so__playhint .jyh-i{font-size:.625rem;margin-left:1px}
.jyh-so__load:empty{display:none}
.jyh-so__body{align-items:flex-start}
.jyh-so__practice .jyh-i{color:var(--jy-accent)}

/* gọn (dưới dòng từ) */
.jyh-so--compact{margin-top:0;padding:12px 14px 14px;gap:10px;background:var(--jy-cream);border-color:var(--jy-line2);box-shadow:inset 0 1px 0 #fff}
.jyh-so--compact .jyh-so__head h4{font-size:1rem}
.jyh-so--compact .jyh-so__cells{gap:12px 14px}
.jyh-so--compact .jyh-so__btns .jyh-ibtn{min-height:32px;padding-inline:5px}
@media (max-width:479px){
  .jyh-so--compact{padding:10px 10px 12px}
  .jyh-so--compact .jyh-so__cells{gap:10px}
  .jyh-so--compact .jyh-so__btns{flex-direction:column;gap:0}
  .jyh-so--compact .jyh-so__btns .jyh-ibtn{flex-direction:row;gap:4px;min-height:28px}
}

/* thẻ ôn: chỉ ô chữ + một hàng nút cho cả từ */
.jyh-so--bare{margin:2px 0 4px;padding:0;border:0;background:transparent;justify-items:center;gap:8px}
.jyh-so--bare .jyh-so__body{justify-content:center}
.jyh-so--bare .jyh-so__cells{justify-content:center;gap:6px 8px}
.jyh-so--bare .jyh-so__cell{gap:2px}
.jyh-so--bare .jyh-so__n{font-size:.6875rem}
.jyh-so--bare .jyh-so__load{justify-content:center}
.jyh-so__wbar{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}
.jyh-so__wbar[hidden]{display:none}
.jyh-so__wbar .jyh-ibtn--row{min-height:34px}
.jyh-fc__back .jyh-so--bare{margin:0 0 10px}
[data-so-card][aria-expanded="true"]{background:var(--jy-cream);border-color:var(--jy-line)}

/* ---------- v1.6.5 · Phân trang danh sách từ ---------- */
.jyh-vcount-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;min-height:34px}
.jyh-vcount-row .jyh-vcount{margin:0}
.jyh-vpg:empty{display:none}
.jyh-pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px}
.jyh-pager__nums{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.jyh-pager__btn{display:inline-grid;place-items:center;min-width:40px;height:40px;padding:0 8px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-ink);font:700 .875rem/1 var(--jy-font-ui);font-variant-numeric:tabular-nums;cursor:pointer;transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast),color var(--jy-t-fast)}
.jyh-pager__btn:hover:not(:disabled){border-color:var(--jy-gold);background:var(--jy-cream)}
.jyh-pager__btn:focus-visible{outline:2px solid var(--jy-gold);outline-offset:2px}
.jyh-pager__btn:disabled{opacity:.38;cursor:default}
.jyh-pager__btn[aria-current="page"]{border-color:var(--jy-ink);background:var(--jy-ink);color:#fff8ee}
.jyh-pager__arrow{color:var(--jy-accent)}
.jyh-pager__arrow .jyh-i{font-size:1.05rem}
.jyh-pager__gap{min-width:18px;color:var(--jy-muted);font-weight:800;text-align:center}
.jyh-pager__jump{display:flex;align-items:center;gap:6px;margin-left:8px}
.jyh-pager__jump label{display:flex;align-items:center;gap:6px;color:var(--jy-muted);font-size:.8125rem;font-weight:700;white-space:nowrap}
.jyh-pager__jump .jyh-input{width:68px;min-height:38px;padding:0 8px;text-align:center;font-weight:700;-moz-appearance:textfield}
.jyh-pager__jump .jyh-input::-webkit-outer-spin-button,.jyh-pager__jump .jyh-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.jyh-pager__total{color:var(--jy-muted);font-size:.8125rem;font-weight:700;white-space:nowrap}
.jyh-pager--compact{gap:4px}
.jyh-pager--compact .jyh-pager__btn{min-width:34px;height:34px}
.jyh-pager__of{padding:0 6px;color:var(--jy-ink);font-size:.8125rem;font-weight:750;white-space:nowrap;font-variant-numeric:tabular-nums}
.jyh-wlist__pages{flex-direction:column;gap:10px;border-top:1px solid var(--jy-line);background:var(--jy-bg)}
@media (max-width:479px){
  .jyh-pager__btn{min-width:36px;height:38px;padding:0 6px}
  .jyh-pager__jump{width:100%;justify-content:center;margin:4px 0 0}
}

/* v1.6.5 · Ô chữ đầu bảng chi tiết từ và thẻ giới thiệu: tự vẽ từng nét, nút gọn ngay dưới */
.jyh-word__top>.jyh-so,.jyh-fc__intro>.jyh-so{margin:0}
.jyh-so--icons{gap:4px}
.jyh-so--icons .jyh-so__wbar{gap:2px}
.jyh-so--icons .jyh-so__wbar .jyh-ibtn{min-width:46px;min-height:40px;padding:2px 4px}
.jyh-so--bare .jyh-so__msg{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.jyh-so--bare.is-fail .jyh-so__msg{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto;white-space:normal;max-width:240px;font-size:.75rem;text-align:center}
.jyh-so--bare .jyh-so__load{justify-content:center;width:auto}
.jyh-so--bare .jyh-so__load:not(:has(button)):not(:has(.jyh-so__msg:not(:empty))){display:none}
@media (max-width:479px){.jyh-word__top>.jyh-so{justify-self:center}}

/* ==========================================================================
   12. TAB GHI CHÚ VÀ THƯ VIỆN NGỮ PHÁP
   ========================================================================== */
.jyh-notes-intro{display:grid;grid-template-columns:minmax(220px,.36fr) minmax(0,1fr);padding:0;overflow:hidden;margin-bottom:18px}
.jyh-notes-intro__art{min-height:232px;background-image:url(hsk2.png);background-position:58% 36%}
.jyh-notes-intro__body{display:flex;flex-direction:column;gap:6px;padding:22px 24px}
.jyh-notes-intro__body .jyh-tpls{margin-top:auto;padding-top:12px}
@media (max-width:719px){.jyh-notes-intro{grid-template-columns:minmax(0,1fr)}.jyh-notes-intro__art{min-height:150px}.jyh-notes-intro__body{padding:18px}}
.jyh-tpls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.jyh-tpl{display:flex;align-items:flex-start;gap:12px;min-height:72px;padding:14px;border:1px dashed rgba(var(--jy-accent-rgb),.32);border-radius:var(--jy-r-card);background:var(--jy-surface);text-align:left;color:var(--jy-ink);transition:background-color var(--jy-t-fast),border-color var(--jy-t-fast)}
.jyh-tpl:hover{background:var(--jy-cream);border-color:var(--jy-accent)}
.jyh-tpl>.jyh-i{flex:0 0 auto;margin-top:2px;font-size:1.3rem;color:var(--jy-accent)}
.jyh-tpl span{display:grid;gap:2px;min-width:0;flex:1}
.jyh-tpl .jyh-tpl__plus{margin-left:auto;color:var(--jy-accent);font-size:1rem}
.jyh-tpl b{font-size:.9375rem}
.jyh-tpl small{color:var(--jy-muted);font-size:.8125rem;font-family:var(--jy-font-han),var(--jy-font-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:719px){.jyh-tpls{grid-template-columns:1fr}}
.jyh-ntools{display:grid;gap:10px;margin-bottom:14px}
.jyh-notes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.jyh-notes-empty{grid-column:1/-1;border:1px dashed var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface)}
.jyh-note-card{position:relative;display:flex;flex-direction:column;gap:8px;min-height:150px;padding:16px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:var(--jy-shadow);text-align:left;color:var(--jy-ink);transition:border-color var(--jy-t-fast),transform var(--jy-t-fast) var(--jy-ease-out)}
.jyh-note-card:hover{border-color:var(--jy-ink);transform:translateY(-1px)}
.jyh-note-card.is-pinned{border-top:3px solid var(--jy-accent)}
.jyh-note-card__top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.jyh-note-card__title{font-family:var(--jy-font-title);font-size:1.15rem;line-height:1.25}
.jyh-note-card__pin{color:var(--jy-accent)}
.jyh-note-card__struct{padding:6px 10px;border-left:3px solid var(--jy-gold);background:var(--jy-cream);font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-note-card__body{color:var(--jy-muted);font-size:.875rem;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jyh-note-card__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto}
.jyh-note-card__tags{display:flex;flex-wrap:wrap;gap:4px;min-width:0}
.jyh-note-card__when{color:var(--jy-muted);font-size:.75rem;font-weight:650;white-space:nowrap}

.jyh-noteform__title{font-family:var(--jy-font-title);font-size:1.15rem}
.jyh-noteform__struct{font-family:var(--jy-font-han),var(--jy-font-ui);font-size:1.1rem}
.jyh-noteform__body{min-height:180px;font-size:16px;line-height:1.6}
.jyh-tags{display:flex;flex-wrap:wrap;gap:6px}
.jyh-tags:empty{display:none}
.jyh-tag{display:inline-flex;align-items:center;gap:2px;min-height:30px;padding:0 4px 0 10px;border:1px solid var(--jy-cream2);border-radius:4px;background:var(--jy-cream);color:var(--jy-accent-lo);font-size:.8125rem;font-weight:800}
.jyh-tag button{display:grid;place-items:center;width:28px;height:28px;border:0;border-radius:4px;background:transparent;color:inherit}
.jyh-tag button:hover{background:rgba(var(--jy-accent-rgb),.12)}
.jyh-note-layer .jyh-sheet{--sheet-w:720px}
@media (max-width:719px){.jyh-note-layer .jyh-sheet{max-height:100dvh;height:100dvh;border-radius:0}}

.jyh-gram{display:grid;gap:18px;margin-top:12px}
.jyh-gram__gtitle{margin-bottom:8px;color:var(--jy-accent);font-family:var(--jy-font-ui);font-size:.75rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jyh-gram__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px}
.jyh-gram__item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;align-items:center;min-height:64px;padding:10px 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface);text-align:left;color:var(--jy-ink)}
.jyh-gram__item:hover{border-color:var(--jy-ink)}
.jyh-gram__t{font-weight:750;font-size:.9375rem;line-height:1.3}
.jyh-gram__s{grid-column:1;color:var(--jy-accent);font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-gram__item .jyh-ok{grid-column:2;grid-row:1/span 2}
.jyh-gram__item.is-read{background:var(--jy-cream)}
.jyh-gsheet{display:grid;gap:16px}
.jyh-gsheet__struct{display:grid;gap:6px;padding:16px 18px;border-radius:var(--jy-r-card);background:linear-gradient(120deg,var(--jy-dark),var(--jy-dark2));color:#fff}
.jyh-gsheet__struct .jyh-kicker{color:var(--jy-gold-hi)}
.jyh-gsheet__struct .jyh-han{font-size:1.35rem;line-height:1.6}
.jyh-gsheet__block{display:grid;gap:8px}
.jyh-gsheet__block .jyh-kicker{color:var(--jy-accent)}
.jyh-gsheet__block p{line-height:1.65}
.jyh-gsheet .jyh-ex{margin-top:0}
.jyh-text{display:grid;gap:12px}
.jyh-text__zh{font-size:1.45rem;line-height:1.9}
.jyh-text__py{color:var(--jy-accent);line-height:1.7}
.jyh-text__tr{padding:12px 14px;border-left:3px solid var(--jy-gold);background:var(--jy-cream);line-height:1.65}

/* v1.6.4 · Thông tin HSK 3.0 */
.jyh-h30{padding:0;overflow:hidden}
.jyh-h30__sum{display:flex;align-items:center;gap:12px;padding:16px 18px;cursor:pointer;list-style:none}
.jyh-h30__sum::-webkit-details-marker{display:none}
.jyh-h30__sum .jyh-section__title{flex:1;margin:0;font-size:1.25rem}
.jyh-h30__badge{flex:none;padding:4px 10px;border-radius:999px;background:var(--jy-accent);color:#fff8ee;font:800 .75rem/1.2 var(--jy-font-ui);letter-spacing:.04em}
.jyh-h30__chev{color:var(--jy-muted);transition:transform var(--jy-t-fast)}
.jyh-h30[open] .jyh-h30__chev{transform:rotate(180deg)}
.jyh-h30>:not(summary){margin-left:18px;margin-right:18px}
.jyh-h30__lead{color:var(--jy-ink);line-height:1.6;margin-top:0}
.jyh-h30__time{display:grid;gap:8px;margin:14px 18px;padding:0;list-style:none;border-left:2px solid var(--jy-line)}
.jyh-h30__time li{position:relative;display:grid;grid-template-columns:minmax(96px,auto) minmax(0,1fr);gap:4px 14px;padding:2px 0 2px 16px;line-height:1.5}
.jyh-h30__time li::before{content:"";position:absolute;left:-6px;top:8px;width:10px;height:10px;border-radius:50%;background:var(--jy-gold);box-shadow:0 0 0 3px var(--jy-surface)}
.jyh-h30__time li:last-child::before{background:var(--jy-accent)}
.jyh-h30__time b{font:600 .875rem/1.5 var(--jy-font-num);color:var(--jy-accent);white-space:nowrap}
.jyh-h30__time span{color:#4b3d34}
@media (max-width:560px){.jyh-h30__time li{grid-template-columns:1fr}}
.jyh-h30__foot{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:12px;margin-bottom:18px}
.jyh-h30__foot small{color:var(--jy-muted);font-weight:600}
.jyh-h30 .jyh-note{margin-top:4px}
.jyh-h30__mini{display:flex;align-items:flex-start;gap:8px;margin:0 0 12px;padding:10px 12px;border-radius:var(--jy-r);background:var(--jy-cream);color:var(--jy-muted);font-size:.8125rem;font-weight:650;line-height:1.5}
.jyh-h30__mini .jyh-i{flex:none;margin-top:2px;color:var(--jy-gold-ink)}
.jyh-h30__mini{align-items:center}
.jyh-h30__mini .jyh-i{margin-top:0}
.jyh-h30__mini .jyh-btn--link{display:inline;min-height:0;padding:0;font-size:inherit;vertical-align:baseline}

/* ==========================================================================
   13. TAB LỘ TRÌNH: khảo sát, bản đồ chặng, biểu đồ, dữ liệu, cài đặt
   ========================================================================== */
.jyh-profile__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:4px 0 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-line);overflow:hidden}
.jyh-profile__grid>div{padding:12px 14px;background:var(--jy-cream)}
.jyh-profile__grid dt{color:var(--jy-muted);font-size:.6875rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jyh-profile__grid dd{margin:4px 0 0;font-weight:800;font-size:.9875rem;display:flex;align-items:center;gap:6px}
@media (max-width:719px){.jyh-profile__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.jyh-profile .jyh-note{margin-top:12px}
.jyh-why--block{margin-top:14px;padding:14px 16px;border-radius:var(--jy-r);background:var(--jy-cream)}
.jyh-why--block ul{margin:6px 0 0;padding-left:18px;display:grid;gap:4px}

/* Thẻ Lộ trình của bạn: ảnh Lộ trình của trang bên trái */
.jyh-profile{display:grid;grid-template-columns:minmax(220px,.3fr) minmax(0,1fr);padding:0;overflow:hidden}
.jyh-profile__art{min-height:100%;background-image:url(hsk2.png);background-position:62% 50%}
.jyh-profile__body{min-width:0;padding:22px 24px}
@media (max-width:719px){.jyh-profile{grid-template-columns:minmax(0,1fr)}.jyh-profile__art{min-height:150px}.jyh-profile__body{padding:18px}}

/* Khảo sát */
.jyh-sv{margin:0 0 18px;padding:0;border:0}
.jyh-sv__q{margin-bottom:10px;padding:0;font-weight:800;font-size:1rem;color:var(--jy-ink)}
.jyh-opts{display:grid;gap:8px}
.jyh-opts--6{grid-template-columns:repeat(6,minmax(0,1fr))}
.jyh-opts--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.jyh-opts--4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:719px){.jyh-opts--6{grid-template-columns:repeat(3,minmax(0,1fr))}.jyh-opts--3{grid-template-columns:1fr}.jyh-opts--4{grid-template-columns:repeat(2,minmax(0,1fr))}}
.jyh-opt{position:relative;display:grid;align-content:center;gap:2px;min-height:58px;padding:10px 12px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:#fff;text-align:left;color:var(--jy-ink);transition:border-color var(--jy-t-fast),background-color var(--jy-t-fast),box-shadow var(--jy-t-fast)}
.jyh-opt:hover{border-color:var(--jy-ink)}
.jyh-opt[aria-checked="true"]{border-color:var(--jy-accent);background:#f8eeea;box-shadow:0 0 0 2px rgba(var(--jy-accent-rgb),.25)}
.jyh-opt[aria-checked="true"]::after{content:"✓";position:absolute;top:6px;right:9px;color:var(--jy-accent);font-weight:900;font-size:.8125rem}
.jyh-opt__label{font-weight:800;font-size:.9375rem;display:flex;align-items:center;gap:6px}
.jyh-opt__sub{color:var(--jy-muted);font-size:.75rem;font-weight:600;line-height:1.35}
.jyh-opt>.jyh-i{position:absolute;top:8px;right:8px;color:var(--jy-muted);font-size:.875rem}
.jyh-sv__exam{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.jyh-sv__exam .jyh-input{width:auto;min-width:200px}
/* v1.7 · Lộ trình dự kiến ngay trong hộp lập lộ trình, và bảng "Lộ trình đã sẵn sàng" sau khi lưu */
.jyh-svp{display:grid;gap:8px;margin-top:4px;padding:14px 16px;border:1px solid var(--jy-line);border-radius:12px;background:var(--jy-paper-2,#f6efe4)}
.jyh-svp p{margin:0;color:var(--jy-ink);font-size:.9rem;line-height:1.5}
.jyh-svp__title{display:flex;align-items:center;gap:8px;margin:0;color:var(--jy-accent);font-size:.75rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.jyh-svp__route{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0;padding:0;list-style:none}
.jyh-svp__st{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:3px 10px 3px 4px;border:1px solid var(--jy-line);border-radius:999px;background:#fff;color:var(--jy-ink);font-size:.82rem;font-weight:700}
.jyh-svp__st>b,.jyh-svp__st>.jyh-han,.jyh-svp__st>.jyh-i{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--jy-accent);color:#fff;font-size:.72rem}
.jyh-svp__st.is-done{opacity:.7}.jyh-svp__st.is-done>.jyh-i{background:#2f7a55}
.jyh-svp__st.is-locked{color:var(--jy-muted)}.jyh-svp__st.is-locked>.jyh-i{background:var(--jy-muted)}
.jyh-svp__arrow{color:var(--jy-muted);font-weight:700}
.jyh-svp__ok{display:flex;align-items:center;gap:6px;color:#2f7a55!important;font-weight:700}
.jyh-svp__warn{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;background:rgba(168,50,44,.08);color:#8a2a25!important;font-size:.9rem;font-weight:600}
.jyh-svp__note{color:var(--jy-muted)!important;font-size:.82rem!important}
.jyh-svdone{display:grid;gap:14px}
.jyh-svdone__ok{display:flex;align-items:center;gap:8px;margin:0;color:#2f7a55;font-size:1.05rem;font-weight:800}
.jyh-svdone__go{display:flex;flex-wrap:wrap;gap:8px}
@media (max-width:560px){.jyh-svdone__go .jyh-btn{flex:1 1 100%;justify-content:center}}

/* Bản đồ chặng: chòm sao trên nền đêm */
.jyh-map{position:relative;padding:24px 24px 20px;border-radius:var(--jy-r-card);overflow:hidden;box-shadow:var(--jy-shadow)}
.jyh-map>*{position:relative;z-index:1}
.jyh-map__title{color:#fff}
.jyh-map__headrow{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.jyh-map__path--7{grid-template-columns:repeat(7,minmax(0,1fr))}
.jyh-seg.jyh-sv__ed{grid-template-columns:repeat(2,minmax(0,1fr));max-width:460px}
.jyh-seg.jyh-sv__ed .jyh-seg__btn{flex-direction:column;gap:1px;min-height:50px}
.jyh-seg.jyh-sv__ed .jyh-seg__btn small{font-size:.75rem;font-weight:600;opacity:.8}
.jyh-map__sub{margin-top:4px;color:rgba(255,246,233,.82);font-size:.875rem}
.jyh-map__path{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px;margin:18px 0 16px;position:relative}
.jyh-map__path::before{content:"";position:absolute;left:6%;right:6%;top:23px;height:2px;background:repeating-linear-gradient(90deg,rgba(var(--jy-sand-rgb),.5) 0 4px,transparent 4px 10px)}
.jyh-map__node{position:relative;display:grid;justify-items:center;gap:4px;min-height:96px;padding:0 2px;border:0;background:transparent;color:#fff;text-decoration:none;text-align:center}
.jyh-map__dot{display:grid;place-items:center;width:48px;height:48px;border:1px solid rgba(var(--jy-sand-rgb),.45);border-radius:50%;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.22),rgba(255,255,255,.04));font:500 1.15rem/1 var(--jy-font-num);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:transform var(--jy-t-base) var(--jy-ease-spring),box-shadow var(--jy-t-base)}
.jyh-map__dot b{font-weight:500}
.jyh-map__node:hover .jyh-map__dot{transform:scale(1.08)}
.jyh-map__name{font-weight:800;font-size:.8125rem}
.jyh-map__pct{color:rgba(255,246,233,.75);font-size:.6875rem;font-weight:650;line-height:1.25}
.jyh-map__node.is-done .jyh-map__dot{background:linear-gradient(160deg,var(--jy-ok),#1f4a39);border-color:rgba(255,255,255,.4)}
.jyh-map__node.is-current .jyh-map__dot{border-color:var(--jy-gold-hi);box-shadow:0 0 0 4px rgba(var(--jy-gold-rgb),.2),0 0 22px rgba(var(--jy-gold-rgb),.45);color:var(--jy-gold-hi)}
.jyh-map__node.is-open .jyh-map__dot{background:var(--jy-surface);color:var(--jy-ink);border-color:var(--jy-surface)}
.jyh-map__node.is-locked{opacity:.75}
.jyh-map__node.is-beyond .jyh-map__name{opacity:.7}
@media (max-width:719px){
  .jyh-map__path{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:12px}
  .jyh-map__path::before{display:none}
  .jyh-map{padding:18px 14px}
}
.jyh-map__summary{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 14px;padding:10px 0;border-top:1px solid rgba(var(--jy-sand-rgb),.2);color:rgba(255,246,233,.9);font-size:.8125rem;font-weight:700}
.jyh-map__stages{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px;max-height:320px;overflow:auto;padding:2px 2px 4px;overscroll-behavior:contain;scrollbar-width:thin}
.jyh-stage{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;gap:4px 8px;align-items:center;min-height:56px;padding:8px 10px;border:1px solid rgba(var(--jy-sand-rgb),.25);border-radius:8px;background:rgba(255,255,255,.06);color:#fff;text-align:left}
.jyh-stage:hover{background:rgba(255,255,255,.12)}
.jyh-stage__n{grid-row:1/span 2;display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.1);font:500 .9375rem/1 var(--jy-font-num)}
.jyh-stage__bar{position:relative;height:6px;border-radius:9px;background:rgba(255,255,255,.14);overflow:hidden}
.jyh-stage__bar i{position:absolute;inset:0 auto 0 0;width:var(--v);border-radius:inherit;background:var(--jy-sand)}
.jyh-stage__bar i+i{background:var(--jy-gold)}
.jyh-stage__t{font-size:.6875rem;font-weight:700;color:rgba(255,246,233,.8)}
.jyh-stage.is-done{border-color:rgba(var(--jy-ok-rgb),.7);background:rgba(var(--jy-ok-rgb),.22)}
.jyh-stage.is-current{border-color:var(--jy-gold);box-shadow:0 0 18px -4px rgba(var(--jy-gold-rgb),.55)}
.jyh-stage.is-focus .jyh-stage__n{background:var(--jy-gold);color:var(--jy-dark)}
.jyh-empty--night p{color:rgba(255,246,233,.85)}

/* Ô số và biểu đồ */
.jyh-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
@media (max-width:719px){.jyh-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
.jyh-kpi{display:grid;gap:4px;padding:16px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:var(--jy-shadow)}
.jyh-kpi>.jyh-i{color:var(--jy-gold-ink);font-size:1.2rem}
.jyh-kpi__v{font:500 1.75rem/1.1 var(--jy-font-num);color:var(--jy-ink)}
.jyh-kpi__l{color:var(--jy-muted);font-size:.75rem;font-weight:750;line-height:1.3}
.jyh-chart{display:flex;flex-direction:column;gap:6px;min-width:0}
.jyh-chart__title{font-family:var(--jy-font-title);font-size:1.2rem;font-weight:500}
.jyh-chart__legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:.8125rem;font-weight:700;color:var(--jy-muted)}
.jyh-chart__legend b{color:var(--jy-ink);font-weight:500;font-size:1rem}
.jyh-dot{display:inline-block;width:10px;height:10px;margin-right:6px;border-radius:2px;vertical-align:-1px}
.jyh-dot--blue{background:var(--jy-accent)}.jyh-dot--jade{background:var(--jy-ok)}
.jyh-hm{width:100%;max-width:520px;height:auto;margin-top:8px}
.jyh-hm__wd{font:600 9px var(--jy-font-ui);fill:var(--jy-muted)}
.jyh-hm__c{cursor:pointer;outline:0}
.jyh-hm__c--0{fill:#efe6da}.jyh-hm__c--1{fill:#e6d2ad}.jyh-hm__c--2{fill:#d1aa6c}.jyh-hm__c--3{fill:#a8613f}.jyh-hm__c--4{fill:#7a2228}
.jyh-hm__c.is-today{stroke:var(--jy-gold);stroke-width:2}
.jyh-hm__c.is-sel,.jyh-hm__c:focus-visible{stroke:var(--jy-ink);stroke-width:2}
.jyh-hm__legend{display:flex;align-items:center;gap:4px;color:var(--jy-muted);font-size:.6875rem;font-weight:700}
.jyh-hm__k{display:inline-block;width:12px;height:12px;border-radius:3px}
.jyh-hm__k.jyh-hm__c--0{background:#efe6da}.jyh-hm__k.jyh-hm__c--1{background:#e6d2ad}.jyh-hm__k.jyh-hm__c--2{background:#d1aa6c}.jyh-hm__k.jyh-hm__c--3{background:#a8613f}.jyh-hm__k.jyh-hm__c--4{background:#7a2228}
.jyh-hm__detail{min-height:1.4em;color:var(--jy-ink);font-size:.875rem;font-weight:650}
.jyh-line{width:100%;height:auto;margin-top:4px}
.jyh-line__axis{stroke:var(--jy-line);stroke-width:1}
.jyh-line__lbl{font:600 9px var(--jy-font-ui);fill:var(--jy-muted)}
.jyh-line__area{fill:rgba(var(--jy-accent-rgb),.1)}
.jyh-line__l1{fill:none;stroke:var(--jy-accent);stroke-width:2.4;stroke-linejoin:round;stroke-linecap:round}
.jyh-line__l2{fill:none;stroke:var(--jy-ok);stroke-width:2.4;stroke-linejoin:round;stroke-linecap:round}
/* v1.6.3 · Tôi yếu ở đâu: tên và số cùng một dòng, thanh đầy bên dưới; chữ và số cùng một font */
.jyh-skills{display:grid;gap:16px;margin-top:12px}
.jyh-skill{display:grid;gap:7px}
.jyh-skill__top{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;min-height:24px}
.jyh-skill__name{font-weight:750;font-size:.9375rem;line-height:1.3;color:var(--jy-ink)}
.jyh-skill__tag{padding:2px 8px;border-radius:999px;background:rgba(var(--jy-bad-rgb),.1);color:var(--jy-bad);font-size:.75rem;font-weight:750;line-height:1.4}
.jyh-skill__v{margin-left:auto;font:750 .9375rem/1.3 var(--jy-font-ui);font-variant-numeric:tabular-nums;color:var(--jy-ink);white-space:nowrap}
.jyh-skill.is-none .jyh-skill__v{font-weight:600;font-size:.8125rem;color:var(--jy-muted)}
.jyh-skill .jyh-bar{height:8px}
.jyh-skill.is-none .jyh-bar{background:repeating-linear-gradient(90deg,#e6dccd 0 7px,transparent 7px 11px)}
.jyh-skill__hint{font-size:.8125rem;line-height:1.4;color:var(--jy-faint)}
.jyh-skill__go{justify-self:start;margin-top:2px}
.jyh-skill.is-weak .jyh-skill__name{color:var(--jy-bad)}
.jyh-skill.is-weak .jyh-bar>i{background:var(--jy-bad)}
.jyh-mocks{display:grid;gap:10px;margin-top:6px}
.jyh-mock{display:grid;grid-template-columns:minmax(0,130px) minmax(0,1fr) 44px;align-items:center;gap:10px;font-size:.875rem}
.jyh-mock__name{display:grid;font-weight:750}
.jyh-mock__name small{color:var(--jy-muted);font-weight:600}

/* Dữ liệu và cài đặt */
.jyh-who{display:flex;align-items:center;gap:8px;font-weight:750;overflow-wrap:anywhere}
.jyh-file{position:relative;cursor:pointer}
.jyh-file input{position:absolute!important}
.jyh-settings{display:grid;gap:2px;margin-top:8px}
.jyh-settings .jyh-switch{border-bottom:1px solid var(--jy-line)}
.jyh-voice{display:grid;gap:8px;padding-top:12px}
.jyh-details summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-weight:800;color:var(--jy-accent)}
.jyh-details ul{margin:0;padding-left:18px;display:grid;gap:6px;color:var(--jy-muted);font-size:.875rem;line-height:1.5}

/* v1.6 · HSK 7–9 trong bản 3.0: nút cấp chung, tải lười, liên kết ba trang học */
.jyh-opts--7{grid-template-columns:repeat(7,minmax(0,1fr))}
@media (max-width:719px){.jyh-opts--7{grid-template-columns:repeat(3,minmax(0,1fr))}.jyh-opts--7>:last-child{grid-column:1/-1}}
.jyh-map__dot b.is-wide{font-size:.74em;letter-spacing:-.02em;white-space:nowrap}
.jyh-map .jyh-loading{color:rgba(255,246,233,.88)}
.jyh-map__pages{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:rgba(255,246,233,.85);font-size:.8125rem;font-weight:700}
.jyh-map__pages .jyh-btn{color:#fff;border-color:rgba(var(--jy-sand-rgb),.45);background:rgba(255,255,255,.06)}
.jyh-map__pages .jyh-btn:hover{background:rgba(255,255,255,.14)}

/* ---------- v1.6.3 · Ngữ pháp trong từng chặng ---------- */
.jyh-stage__t{display:flex;align-items:center;gap:8px}
.jyh-stage__g{display:inline-flex;align-items:center;gap:3px;color:rgba(255,246,233,.72)}
.jyh-stage__g .jyh-i{font-size:.75rem}
.jyh-stage__g.is-done{color:var(--jy-gold-hi)}
.jyh-stagesec{display:grid;gap:10px}
[data-stage-gram]{margin-top:20px}
.jyh-stagesec__head{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:6px 14px;padding-bottom:8px;border-bottom:1px solid var(--jy-line2)}
.jyh-stagesec__head h4{display:flex;align-items:center;gap:8px;margin:0;font:600 1.0625rem/1.3 var(--jy-font-title);color:var(--jy-ink)}
.jyh-stagesec__head h4 .jyh-i{color:var(--jy-accent)}
.jyh-stagesec__head span{color:var(--jy-muted);font-size:.8125rem;font-weight:650}

/* v1.6.4 · Từ đã biết: ô số, chú giải bấm được, danh sách có menu ⋮ */
.jyh-kpi--btn{position:relative;text-align:left;cursor:pointer;color:inherit;font:inherit;transition:border-color var(--jy-t-fast),transform var(--jy-t-fast) var(--jy-ease-out),box-shadow var(--jy-t-fast)}
.jyh-kpi--btn>.jyh-i:last-child{position:absolute;right:12px;top:16px;color:var(--jy-muted);font-size:1rem}
.jyh-kpi--btn:hover{border-color:var(--jy-gold);box-shadow:var(--jy-shadow-lift);transform:translateY(-1px)}
.jyh-chart__lg{display:inline-flex;align-items:center;gap:0;min-height:34px;padding:0 10px 0 8px;border:1px solid var(--jy-line);border-radius:999px;background:var(--jy-surface);color:var(--jy-muted);font:inherit;cursor:pointer}
.jyh-chart__lg:hover{border-color:var(--jy-gold);color:var(--jy-ink)}
.jyh-chart__lg b{margin-left:6px}
.jyh-chart__foot{display:flex;justify-content:flex-start;margin-top:6px}
.jyh-kwbar{display:grid;gap:10px;margin-bottom:6px}
.jyh-kwseg{margin-bottom:0}
.jyh-kwbar__row{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:10px}
@media (max-width:719px){.jyh-kwbar__row{grid-template-columns:1fr}}
.jyh-kwrow{grid-template-columns:minmax(0,1fr) auto auto auto}
.jyh-kw__meta{display:grid;justify-items:end;gap:2px;text-align:right}
.jyh-kw__meta small{color:var(--jy-muted);font-size:.75rem;font-weight:650;white-space:nowrap}
.jyh-kw__more{width:40px;min-width:40px;justify-content:center}
.jyh-kw__more .jyh-i{font-size:1.25rem}
.jyh-kw__more[aria-expanded="true"]{background:var(--jy-cream);color:var(--jy-ink)}
@media (max-width:719px){
  .jyh-kwrow{grid-template-columns:minmax(0,1fr) auto}
  .jyh-kwrow .jyh-kw__meta{grid-column:1;grid-row:2;justify-items:start;display:flex;gap:8px;align-items:center;padding-left:16px;margin-top:-8px}
  .jyh-kwrow .jyh-status{display:none}
  .jyh-kwrow .jyh-kw__more{grid-column:2;grid-row:1}
}
.jyh-kwpop{position:fixed;z-index:2147482600;min-width:248px;max-width:min(320px,calc(100vw - 20px));max-height:min(70vh,520px);overflow:auto;padding:6px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:0 22px 50px -18px rgba(37,23,17,.45);animation:jyhPopIn .14s var(--jy-ease-out)}
.jyh-kwpop__head{display:flex;align-items:baseline;gap:8px;padding:8px 12px 10px;border-bottom:1px solid var(--jy-line2);margin-bottom:4px}
.jyh-kwpop__head .jyh-han{font-size:1.25rem}
.jyh-kwpop__head .jyh-py{color:var(--jy-accent);font-weight:700;font-size:.875rem}
.jyh-kwpop .jyh-menu__item{min-height:42px;padding:6px 12px;font-size:.875rem;font-weight:650;color:var(--jy-ink)}
.jyh-kwpop .jyh-menu__item:hover,.jyh-kwpop .jyh-menu__item:focus-visible{background:var(--jy-cream)}
.jyh-menu__item.is-danger{color:var(--jy-bad)}
.jyh-menu__item .jyh-i{color:var(--jy-gold-ink);font-size:1.05rem}
.jyh-menu__item.is-danger .jyh-i{color:var(--jy-bad)}
@keyframes jyhPopIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}

/* v1.6.4 · Lộ trình theo ngày: dấu hiệu trên ô ngày, các mục trong bảng ngày, Nền tảng 8 ngày */
.jyh-stage__n{position:relative}
.jyh-stage__marks{position:absolute;right:-9px;top:-7px;display:flex;gap:1px}
.jyh-stage__marks i{display:grid;place-items:center;width:15px;height:15px;border-radius:50%;background:var(--jy-dark2);border:1px solid rgba(var(--jy-sand-rgb),.4);color:var(--jy-gold-hi);font-style:normal}
.jyh-stage__marks i .jyh-i{font-size:.5625rem}
.jyh-stage__marks i.is-mock{background:var(--jy-gold);color:var(--jy-dark);border-color:var(--jy-gold-hi)}
.jyh-map__stages--found{grid-template-columns:repeat(auto-fill,minmax(176px,1fr));max-height:none}
.jyh-stage--found{grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;min-height:64px}
.jyh-stage__name{font:600 .9375rem/1.25 var(--jy-font-title);color:#fff8ee}
.jyh-stage--found .jyh-stage__t{min-height:1em;color:var(--jy-gold-hi)}
.jyh-stage--found .jyh-stage__t .jyh-i{font-size:.75rem}
.jyh-dayitems{display:grid;gap:8px}
.jyh-dayitem{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;min-height:58px;padding:10px 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);color:var(--jy-ink);text-align:left;text-decoration:none;font:inherit;cursor:pointer;transition:border-color var(--jy-t-fast),background-color var(--jy-t-fast)}
.jyh-dayitem:hover{border-color:var(--jy-gold);background:#fffaf2}
.jyh-dayitem>.jyh-i{color:var(--jy-muted)}
.jyh-dayitem__ic{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;background:var(--jy-cream);color:var(--jy-accent)}
.jyh-dayitem__txt{display:grid;gap:2px;min-width:0}
.jyh-dayitem__txt b{font-weight:700;font-size:.9375rem;line-height:1.35}
.jyh-dayitem__txt small{color:var(--jy-muted);font-size:.8125rem;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jyh-dayitem__go{font-size:.8125rem;font-weight:800;color:var(--jy-accent)}
.jyh-dayitem.is-done .jyh-dayitem__ic{background:rgba(var(--jy-ok-rgb),.14);color:var(--jy-ok)}
.jyh-dayitem.is-done .jyh-dayitem__go{color:var(--jy-ok)}
.jyh-stagesec--test,.jyh-stagesec--mock{padding:14px;border-radius:var(--jy-r-card);background:var(--jy-cream);border:1px solid var(--jy-line)}
.jyh-stagesec--mock{background:linear-gradient(180deg,#fbf3e2,#f6ead4);border-color:rgba(var(--jy-gold-rgb),.6)}
.jyh-daykeep{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.jyh-daykeep li{position:relative;padding:10px 12px 10px 34px;border-radius:var(--jy-r);background:var(--jy-cream);line-height:1.5}
.jyh-daykeep li::before{content:"";position:absolute;left:14px;top:18px;width:8px;height:8px;border-radius:50%;background:var(--jy-gold)}
.jyh-day-layer .jyh-sheet__body{display:grid;gap:18px}

/* ---------- v1.7d · Quản lý lộ trình: ngày bắt đầu, so với lịch, kho từ đã học, đặt lại ---------- */
.jyh-pm-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
.jyh-profile__grid>.jyh-pm-begin{grid-column:1/-1}
.jyh-pm-begin dd{flex-wrap:wrap;justify-content:space-between}
.jyh-pm-edit{min-height:32px;padding:0 4px;font-size:.8125rem}
.jyh-pm-edit .jyh-ic{width:16px;height:16px}
.jyh-pm-sched{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;margin:0 0 12px;padding:10px 14px;border:1px solid var(--jy-line);border-left:4px solid var(--jy-muted);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-ink-2,var(--jy-ink));font-size:.875rem;line-height:1.45}
p.jyh-pm-sched{align-items:center}
.jyh-pm-sched>span{flex:1 1 280px;min-width:0}
.jyh-pm-sched--ahead,.jyh-pm-sched--ok{border-left-color:var(--jy-ok,#3f7a52)}
.jyh-pm-sched--behind{border-left-color:var(--jy-bad,#a3281f)}
.jyh-pm-tag{display:inline-flex;align-items:center;gap:6px;font-weight:800;white-space:nowrap}
.jyh-pm-sched--ahead .jyh-pm-tag,.jyh-pm-sched--ok .jyh-pm-tag{color:var(--jy-ok,#2f6a45)}
.jyh-pm-sched--behind .jyh-pm-tag{color:var(--jy-bad,#a3281f)}
.jyh-pm-tag .jyh-ic{width:16px;height:16px}
.jyh-stage.is-due{position:relative;border-color:rgba(var(--jy-sand-rgb),.8);border-style:dashed}
.jyh-stage.is-due::after{content:"";position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--jy-gold);box-shadow:0 0 0 3px rgba(var(--jy-gold-rgb),.25)}
.jyh-stage.is-due.is-current{border-style:solid}
.jyh-pm-due{display:flex;align-items:center;gap:8px;margin:0 0 12px;color:var(--jy-muted);font-size:.875rem;font-weight:700}
.jyh-pm-due .jyh-ic{width:16px;height:16px}
.jyh-pm-store{display:grid;gap:14px;margin:18px 0 0}
.jyh-pm-store .jyh-card__title{display:flex;align-items:center;gap:10px}
.jyh-pm-store .jyh-card__title .jyh-gi{width:34px;height:34px;flex:none}
.jyh-pm-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-line);overflow:hidden}
.jyh-pm-stat{display:grid;gap:2px;padding:12px 14px;border:0;background:var(--jy-cream);color:var(--jy-ink);font:inherit;text-align:left}
button.jyh-pm-stat{cursor:pointer;transition:background-color var(--jy-t-fast)}
button.jyh-pm-stat:hover{background:#fff}
button.jyh-pm-stat:focus-visible{outline:2px solid var(--jy-accent);outline-offset:-2px}
.jyh-pm-stat b{font-size:1.5rem;font-weight:800;line-height:1.1}
.jyh-pm-stat span{color:var(--jy-muted);font-size:.8125rem;font-weight:700}
button.jyh-pm-stat span::after{content:" ›";color:var(--jy-accent)}
.jyh-pm-sub{margin:2px 0 -4px;color:var(--jy-muted);font-size:.8125rem;font-weight:800}
.jyh-pm-levels{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 18px;margin:0;padding:0;list-style:none}
.jyh-pm-levels li{display:grid;grid-template-columns:58px minmax(0,1fr) auto;align-items:center;gap:10px;font-size:.8125rem;font-weight:700}
.jyh-pm-lv{white-space:nowrap}
.jyh-pm-bar{position:relative;height:8px;border-radius:99px;background:rgba(var(--jy-sand-rgb),.28);overflow:hidden}
.jyh-pm-bar i{position:absolute;inset:0 auto 0 0;width:var(--v,0%);border-radius:inherit;background:var(--jy-accent)}
.jyh-pm-empty{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;padding:14px 16px;border:1px dashed var(--jy-line);border-radius:var(--jy-r);background:var(--jy-cream)}
.jyh-pm-empty p{margin:0;color:var(--jy-muted)}
.jyh-pm-opts{display:grid;gap:10px;margin-bottom:14px}
.jyh-pm-opt{min-height:0;padding:12px 14px}
.jyh-pm-opt .jyh-opt__label{font-weight:800}
.jyh-pm-reset .jyh-field{margin-bottom:12px}
.jyh-pm-quick{margin:10px 0 0}
.jyh-sv__begin{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 10px;font-size:.875rem;font-weight:700}
.jyh-sv__begin .jyh-input{width:auto;min-width:200px}
@media (max-width:719px){
  .jyh-pm-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .jyh-pm-actions{justify-content:flex-start}
}
/* v1.7e · Lộ trình theo ngày theo nhịp: ngày dự kiến trong ô, chia trang khi cấp có nhiều ngày, việc hôm nay sau khảo sát */
.jyh-stage__d{color:rgba(255,246,233,.66);font:600 .6875rem/1 var(--jy-font-num);white-space:nowrap}
.jyh-stage.is-due .jyh-stage__d{color:var(--jy-gold-hi)}
.jyh-stage.has-d{grid-template-rows:auto auto auto;row-gap:4px}
.jyh-stage.has-d .jyh-stage__n{grid-row:1/span 3}
.jyh-stage.has-d .jyh-stage__d{grid-column:2;grid-row:1;justify-self:end;display:inline-flex;align-items:center;gap:4px}
.jyh-stage.is-due.has-d::after{display:none}
.jyh-stage.is-due.has-d .jyh-stage__d::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--jy-gold);box-shadow:0 0 0 2px rgba(var(--jy-gold-rgb),.25)}
.jyh-stage.has-d .jyh-stage__bar{grid-column:2;grid-row:2}
.jyh-stage.has-d .jyh-stage__t{grid-column:2;grid-row:3}
.jyh-map__pager{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0 0 10px;color:rgba(255,246,233,.92);font-size:.8125rem;font-weight:700}
.jyh-map__pager .jyh-ibtn{border:1px solid rgba(var(--jy-sand-rgb),.35);border-radius:999px}
.jyh-map__pager .jyh-ibtn:disabled{opacity:.35}
.jyh-map__pager .jyh-btn--link{color:var(--jy-gold-hi)}
.jyh-svdone .jyh-profile__grid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:719px){.jyh-svdone .jyh-profile__grid{grid-template-columns:minmax(0,1fr)}}
.jyh-profile__grid>.jyh-svdone__today{grid-column:1/-1}
.jyh-svdone__today dd{font-weight:700;line-height:1.45}

/* v1.7 · Tab Toki: ứng dụng Toki (Toki.html) phủ toàn màn hình, nút ← của Toki về lại Bàn học.
   Nằm dưới các lớp của Bàn học (2147482300) để bảng tìm kiếm, thông báo vẫn hiện lên trên. */
.jyh-tokifull{position:fixed;inset:0;z-index:2147482250;background:#faf7f1}
.jyh-tokifull[hidden]{display:none!important}
.jyh-tokifull__wait{position:absolute;inset:0;align-content:center;pointer-events:none}
.jyh-tokifull.is-ready .jyh-tokifull__wait{display:none}
.jyh-tokifull__frame{position:absolute;inset:0;z-index:1;display:block;width:100%;height:100%;border:0;background:transparent}
html.jyh-toki-open,html.jyh-toki-open body{overflow:hidden!important}
/* Đang ở tab Toki: ẩn nút Toki nổi và khung nổi (đã đóng) để chỉ có một khung chat */
html.jyh-on-toki .toki-floating,html.jyh-on-toki .toki-quick-panel{display:none!important}
/* Chỗ giữ chỗ trong tab khi khung đã đóng */
.jyh-toki-hold{display:grid;justify-items:start;gap:10px;max-width:640px}
.jyh-toki-hold .jyh-card__title{margin:0}

/* ==========================================================================
   14. TRÒ CHƠI (bản 1.4): tab, bản đồ màn, ván tùy chỉnh, khung chơi, 4 game
   Ngoài trang vẫn là giấy – mực – đỏ son; trong ván mỗi trò một tông sáng
   rực hơn theo bảng màu cổ: đỏ đèn lồng, ngọc bích sông, chàm đêm sao,
   vàng tia chớp. Chữ Hán luôn trên nền giấy sáng để dễ đọc.
   ========================================================================== */

/* --- Màu riêng của từng trò --- */
.jyh-game--lantern,.jyh-gcard--lantern,.jyh-daily--lantern,.jyh-pre--lantern,.jyh-cb__game--lantern,.jyh-lmap--lantern,.jyh-gres--lantern,.jyh-rec--lantern{--g0:#5c0d14;--g1:#ff5a3f;--g2:#ffd27a;--gglow:rgba(255,96,64,.5);--gbg1:#3d0c13;--gbg2:#14050a;--gpanel:rgba(52,14,16,.86)}
.jyh-game--boat,.jyh-gcard--boat,.jyh-daily--boat,.jyh-pre--boat,.jyh-cb__game--boat,.jyh-lmap--boat,.jyh-gres--boat,.jyh-rec--boat{--g0:#0b4b45;--g1:#2fd1b4;--g2:#ffd27a;--gglow:rgba(47,209,180,.42);--gbg1:#0b3a36;--gbg2:#04181a;--gpanel:rgba(8,44,42,.86)}
.jyh-game--stars,.jyh-gcard--stars,.jyh-daily--stars,.jyh-pre--stars,.jyh-cb__game--stars,.jyh-lmap--stars,.jyh-gres--stars,.jyh-rec--stars{--g0:#2c1f74;--g1:#9b7bff;--g2:#ffe08a;--gglow:rgba(139,108,255,.45);--gbg1:#1c1652;--gbg2:#06051a;--gpanel:rgba(26,20,72,.86)}
.jyh-game--flash,.jyh-gcard--flash,.jyh-daily--flash,.jyh-pre--flash,.jyh-cb__game--flash,.jyh-lmap--flash,.jyh-gres--flash,.jyh-rec--flash{--g0:#1a2160;--g1:#f2c14e;--g2:#fff1c1;--gglow:rgba(242,193,78,.3);--gbg1:#141a52;--gbg2:#050820;--gpanel:rgba(14,18,56,.9)}
.jyh-game--brush,.jyh-gcard--brush,.jyh-daily--brush,.jyh-pre--brush,.jyh-cb__game--brush,.jyh-lmap--brush,.jyh-gres--brush,.jyh-rec--brush{--g0:#5e1414;--g1:#e0a040;--g2:#ffe3a6;--gglow:rgba(224,140,60,.42);--gbg1:#4a1410;--gbg2:#16070a;--gpanel:rgba(58,16,14,.9)}
.jyh-game--speak,.jyh-gcard--speak,.jyh-daily--speak,.jyh-pre--speak,.jyh-cb__game--speak,.jyh-lmap--speak,.jyh-gres--speak,.jyh-rec--speak{--g0:#4a1426;--g1:#ffb347;--g2:#ffe08a;--gglow:rgba(255,170,80,.4);--gbg1:#3a1020;--gbg2:#12040a;--gpanel:rgba(48,12,26,.88)}

.jyh-sheet__title[tabindex="-1"]:focus,.jyh-layer[tabindex="-1"]:focus,.jyh-full__body[tabindex="-1"]:focus{outline:none}
@media (hover:none){.jyh-gintro__keys{display:none}}

/* --- Sao (dùng chung) --- */
.jyh-strow{display:inline-flex;align-items:center;gap:2px}
.jyh-st{width:16px;height:16px;fill:rgba(255,255,255,.16);stroke:rgba(232,200,149,.65);stroke-width:1.2;stroke-linejoin:round}
.jyh-st.is-on{fill:#ffcf5a;stroke:#f0a92e;filter:drop-shadow(0 0 3px rgba(255,196,70,.55))}
.jyh-card .jyh-st,.jyh-rec .jyh-st{fill:#efe5d6;stroke:#d8c6ad}
.jyh-card .jyh-st.is-on,.jyh-rec .jyh-st.is-on{fill:#e9ae38;stroke:#b98226;filter:none}

/* ==========================================================================
   A. TAB TRÒ CHƠI
   ========================================================================== */
.jyh-gtab__head{align-items:flex-end}
.jyh-gtab__stats{display:flex;flex-wrap:wrap;gap:8px}
.jyh-gtab__stats>span{display:inline-flex;align-items:baseline;gap:6px;min-height:40px;padding:8px 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface)}
.jyh-gtab__stats b{font:500 1.35rem/1 var(--jy-font-num);color:var(--jy-ink)}
.jyh-gtab__stats small{color:var(--jy-muted);font-size:.75rem;font-weight:750}
.jyh-gtab__stats .jyh-i{align-self:center;color:#d39a2a;fill:#f2c45a}

/* Thử thách hôm nay */
.jyh-daily{position:relative;display:grid;grid-template-columns:230px minmax(0,1fr) auto;align-items:center;gap:22px;margin:0 0 22px;padding:0 26px 0 0;overflow:hidden;border-radius:var(--jy-r-card);color:#fff8ee;
  background:radial-gradient(60% 120% at 30% 50%,var(--gglow),transparent 70%),linear-gradient(105deg,var(--gbg2),var(--gbg1) 55%,var(--gbg2));box-shadow:0 24px 46px -26px rgba(37,23,17,.7),inset 0 0 0 1px rgba(255,255,255,.08)}
.jyh-daily::after{content:"";position:absolute;inset:0;background-image:var(--jy-grain);opacity:.12;mix-blend-mode:overlay;pointer-events:none}
.jyh-daily__art{position:relative;align-self:stretch;min-height:170px;overflow:hidden;-webkit-mask:linear-gradient(90deg,#000 70%,transparent);mask:linear-gradient(90deg,#000 70%,transparent)}
.jyh-daily__body{position:relative;z-index:1;display:grid;gap:6px;padding:18px 0}
.jyh-daily__body .jyh-kicker{display:flex;align-items:center;gap:6px;color:var(--g2)}
.jyh-daily__body h4{font:500 1.75rem/1.15 var(--jy-font-title)}
.jyh-daily__body p{color:var(--jy-sand);font-size:.9375rem;line-height:1.5}
.jyh-daily__best{display:flex;align-items:center;gap:8px;font-weight:800;color:var(--g2)!important}
.jyh-daily .jyh-btn{position:relative;z-index:1;white-space:nowrap}
@media (max-width:760px){
  .jyh-daily{grid-template-columns:minmax(0,1fr);gap:0;padding:0 0 18px}
  .jyh-daily__art{min-height:130px;-webkit-mask:linear-gradient(180deg,#000 65%,transparent);mask:linear-gradient(180deg,#000 65%,transparent)}
  .jyh-daily__body{padding:4px 18px 12px}
  .jyh-daily .jyh-btn{margin:0 18px}
}

/* Thẻ trò chơi */
.jyh-games{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
@media (max-width:899px){.jyh-games{grid-template-columns:repeat(2,minmax(0,1fr))}.jyh-games>.jyh-gcard:last-child:nth-child(odd){grid-column:1/-1}}
@media (max-width:600px){.jyh-games{grid-template-columns:minmax(0,1fr)}}
.jyh-gcard{position:relative;display:flex;flex-direction:column;min-width:0;overflow:hidden;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface);box-shadow:var(--jy-shadow);transition:transform var(--jy-t-base) var(--jy-ease-out),box-shadow var(--jy-t-base)}
.jyh-gcard:hover{transform:translateY(-3px);box-shadow:var(--jy-shadow-lift)}
.jyh-gcard__art{position:relative;display:block;width:100%;height:clamp(178px,15vw,214px);padding:0;border:0;overflow:hidden;cursor:pointer;text-align:left;background:var(--gbg2)}
.jyh-gcard__art .jyh-badge{position:absolute;z-index:3;top:12px;left:12px;background:rgba(0,0,0,.35);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.jyh-gcard__art::after{content:"";position:absolute;inset:0;z-index:2;background:linear-gradient(0deg,rgba(0,0,0,.72) 0%,rgba(0,0,0,.42) 27%,transparent 54%);pointer-events:none}
.jyh-gcard__lv{position:absolute;z-index:3;left:14px;right:14px;bottom:12px;display:grid;gap:2px;color:#fff8ee;text-shadow:0 2px 12px rgba(0,0,0,.65)}
.jyh-gcard__lv small{font-size:.6875rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--g2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-gcard__lv b{font:500 1.65rem/1.05 var(--jy-font-title)}
.jyh-gcard__body{display:grid;gap:8px;padding:16px 18px 6px}
.jyh-gcard__title{font-family:var(--jy-font-title);font-size:1.3rem;line-height:1.2;color:var(--jy-ink)}
.jyh-gcard__train{min-height:2.9em;color:var(--jy-muted);font-size:.875rem;line-height:1.45}
.jyh-gcard__prog{display:grid;gap:6px;margin-top:4px}
.jyh-gcard__prog .jyh-bar>i{background:linear-gradient(90deg,var(--g1),var(--g2))}
.jyh-gcard__prog span{display:flex;align-items:center;gap:6px;color:var(--jy-muted);font-size:.75rem;font-weight:750}
.jyh-gcard__prog .jyh-i{color:#d39a2a;fill:#f2c45a}
.jyh-gcard__foot{display:grid;gap:8px;margin-top:auto;padding:12px 14px 14px}
.jyh-gcard__foot>.jyh-btn--primary{min-height:48px;font-size:1rem}
.jyh-gcard__more{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.jyh-gmini{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:54px;padding:6px 4px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:var(--jy-surface);color:var(--jy-ink);font-size:.6875rem;font-weight:750;line-height:1.15;text-align:center;transition:border-color var(--jy-t-fast),background-color var(--jy-t-fast)}
.jyh-gmini .jyh-i{font-size:1.15rem;color:var(--jy-accent)}
.jyh-gmini:hover{border-color:var(--jy-ink);background:#fff}

/* --- Ảnh bìa vẽ bằng CSS (không dùng ảnh người) --- */
.jyh-art{position:absolute;inset:0;display:block;overflow:hidden}
.jyh-art::after{content:"";position:absolute;inset:0;background-image:var(--jy-grain);opacity:.14;mix-blend-mode:overlay;pointer-events:none}

/* Ván tùy chỉnh đã lưu */
.jyh-pres{display:grid;padding:4px 18px}
.jyh-pre{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--jy-line2)}
.jyh-pre:last-child{border-bottom:0}
.jyh-pre__ic{display:grid;place-items:center;width:54px;height:54px;border-radius:12px;background:radial-gradient(circle at 50% 30%,var(--gglow),transparent 70%),linear-gradient(150deg,var(--gbg1),var(--gbg2));box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.jyh-pre__ic .jyh-gi{width:36px;height:36px}
.jyh-pre__main{display:grid;gap:3px;min-width:0;padding:0;border:0;background:none;color:inherit;text-align:left}
.jyh-pre__main b{font-size:1rem;color:var(--jy-ink)}
.jyh-pre__main small{color:var(--jy-muted);font-size:.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-pre__best{display:flex;align-items:center;gap:5px;color:var(--jy-gold-ink);font-weight:800}
.jyh-pre__best .jyh-num{font-size:1.1rem}
.jyh-pre__acts{display:flex;gap:2px}
.jyh-pre--solo{grid-template-columns:auto minmax(0,1fr);padding:4px 0 12px;border:0}
@media (max-width:680px){.jyh-pre{grid-template-columns:auto minmax(0,1fr)}.jyh-pre__best:empty{display:none}.jyh-pre__best{grid-column:2}.jyh-pre__acts{grid-column:1/-1;justify-content:flex-end}}
.jyh-pres-empty{display:grid;justify-items:center;gap:12px;padding:30px 18px;text-align:center}
.jyh-pres-empty p{max-width:44ch;color:var(--jy-muted);line-height:1.55}
.jyh-pres-empty__art{display:grid;place-items:center;width:84px;height:84px;border-radius:50%;background:var(--jy-cream)}

/* Kỷ lục gần đây */
.jyh-recs{display:grid}
.jyh-rec{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto 52px;align-items:center;gap:12px;padding:10px 2px;border-bottom:1px solid var(--jy-line2)}
.jyh-rec:last-child{border-bottom:0}
.jyh-rec>.jyh-gi{padding:4px;border-radius:10px;background:linear-gradient(150deg,var(--gbg1),var(--gbg2))}
.jyh-rec__name{display:grid;min-width:0;font-weight:750;font-size:.9375rem;line-height:1.3}
.jyh-rec__name small{color:var(--jy-muted);font-weight:600;font-size:.75rem}
.jyh-rec__score{font:500 1.25rem/1 var(--jy-font-num);color:var(--jy-ink)}
.jyh-rec__acc{color:var(--jy-muted);font-size:.8125rem;font-weight:700;text-align:right}
@media (max-width:560px){.jyh-rec{grid-template-columns:auto minmax(0,1fr) auto 44px}.jyh-rec .jyh-strow{display:none}}

/* ==========================================================================
   B. BẢNG TẠO VÁN TÙY CHỈNH
   ========================================================================== */
.jyh-cb-layer .jyh-sheet{--sheet-w:1000px}
.jyh-cb__sec{margin:0 0 18px}
.jyh-cb__h{margin-bottom:10px;color:var(--jy-ink);font-size:.9375rem;font-weight:800}
.jyh-cb__games{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:10px}
.jyh-cb__game{position:relative;display:flex;align-items:center;gap:10px;min-height:66px;padding:10px 12px;overflow:hidden;border:1px solid var(--jy-line);border-radius:10px;background:#fff;color:var(--jy-ink);text-align:left;transition:border-color var(--jy-t-fast),box-shadow var(--jy-t-fast)}
.jyh-cb__game .jyh-gi{flex:0 0 auto;width:42px;height:42px;padding:3px;border-radius:10px;background:linear-gradient(150deg,var(--gbg1),var(--gbg2))}
.jyh-cb__game span{display:grid;gap:2px;min-width:0}
.jyh-cb__game b{font-size:.9375rem;line-height:1.2}
.jyh-cb__game small{color:var(--jy-muted);font-size:.75rem;font-weight:700}
.jyh-cb__game:hover{border-color:var(--jy-ink)}
.jyh-cb__game[aria-checked="true"]{border-color:var(--jy-accent);background:#fbf2ed;box-shadow:0 0 0 2px rgba(var(--jy-accent-rgb),.25)}
.jyh-cb__game[aria-checked="true"]::after{content:"✓";position:absolute;top:calc(50% - 28px);left:36px;display:grid;place-items:center;width:20px;height:20px;border:2px solid #fff;border-radius:50%;background:var(--jy-accent);color:#fff;font-size:.6875rem;font-weight:900;line-height:1;box-shadow:0 2px 6px rgba(37,23,17,.3)}
.jyh-cb__cols{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:4px 30px}
@media (max-width:860px){.jyh-cb__cols{grid-template-columns:minmax(0,1fr)}}
.jyh-seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;margin-bottom:12px;padding:4px;border:1px solid var(--jy-line);border-radius:8px;background:var(--jy-cream)}
.jyh-seg__btn{display:flex;align-items:center;justify-content:center;gap:6px;min-height:42px;padding:6px 8px;border:0;border-radius:6px;background:transparent;color:var(--jy-muted);font-size:.8125rem;font-weight:750;line-height:1.2}
.jyh-seg__btn[aria-checked="true"]{background:#fff;color:var(--jy-ink);box-shadow:0 2px 8px rgba(37,23,17,.14)}
.jyh-seg__btn .jyh-i{font-size:1rem}
.jyh-cb__sub{margin:2px 0 8px;color:var(--jy-muted);font-size:.8125rem;font-weight:700}
.jyh-chips+.jyh-cb__sub{margin-top:14px}
.jyh-cb__range{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-top:12px}
.jyh-cb__range label{display:grid;gap:4px;color:var(--jy-muted);font-size:.75rem;font-weight:750}
.jyh-cb__range .jyh-select{width:112px;min-height:42px}
.jyh-cb__mine{display:grid;gap:6px}
.jyh-cb__mrow{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:46px;padding:8px 14px;border:1px solid var(--jy-line);border-radius:var(--jy-r);background:#fff;color:var(--jy-ink);font-weight:700;text-align:left}
.jyh-cb__mrow b{font:500 1.1rem/1 var(--jy-font-num);color:var(--jy-accent)}
.jyh-cb__mrow[aria-checked="true"]{border-color:var(--jy-accent);background:#fbf2ed;box-shadow:0 0 0 2px rgba(var(--jy-accent-rgb),.2)}
.jyh-cb__mrow:disabled{opacity:.5;cursor:not-allowed}
.jyh-cb__list{min-height:160px;font-family:var(--jy-font-ui),var(--jy-font-han)}
.jyh-cb__parse{min-height:1.4em;margin-top:6px;font-size:.8125rem;line-height:1.45}
.jyh-cb__count{margin-top:12px;padding:9px 12px;border-radius:var(--jy-r);background:#ecf5ef;color:var(--jy-ok);font-size:.8125rem;font-weight:800}
.jyh-cb__count.is-bad{background:#f8e9e7;color:var(--jy-bad)}
.jyh-cb-layer .jyh-chip:disabled{opacity:.45;cursor:not-allowed}
.jyh-cb-layer .jyh-chip .jyh-i{font-size:.85rem}
.jyh-cb-layer .jyh-switch{min-height:44px;padding:0}
.jyh-share .jyh-input{font-size:.875rem;color:var(--jy-muted)}

/* ==========================================================================
   C. BẢN ĐỒ MÀN
   ========================================================================== */
.jyh-map-layer .jyh-full{background:var(--gbg2)}
.jyh-mapbar{grid-template-columns:auto minmax(0,1fr) auto auto auto}
.jyh-lmap{position:relative;min-height:100%;padding:22px clamp(12px,3vw,32px) calc(40px + env(safe-area-inset-bottom));color:#fff8ee;isolation:isolate;overflow:hidden;background:radial-gradient(90% 60% at 50% -10%,var(--gglow),transparent 60%),linear-gradient(180deg,var(--gbg1),var(--gbg2) 70%)}
.jyh-lmap__wrap{position:relative;z-index:1;display:grid;gap:20px;max-width:1120px;margin:0 auto}
.jyh-lmap__hint{display:flex;align-items:center;gap:8px;color:var(--jy-sand);font-size:.875rem;line-height:1.5}
.jyh-lmap__hint .jyh-i{flex:0 0 auto;color:var(--g2)}
.jyh-lchap{position:relative;padding:18px 20px 22px;border:1px solid rgba(255,226,168,.22);border-radius:16px;background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(0,0,0,.28));box-shadow:0 30px 60px -36px #000,inset 0 1px 0 rgba(255,255,255,.08)}
.jyh-lchap.is-locked{opacity:.62;filter:saturate(.6)}
.jyh-lchap__head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;margin-bottom:18px}
.jyh-lchap__num{display:grid;place-items:center;width:54px;height:54px;border:2px solid var(--g2);border-radius:50%;background:radial-gradient(circle at 40% 30%,var(--g1),var(--g0));color:#fff8ee;font-size:1.55rem;box-shadow:0 0 22px -2px var(--gglow)}
.jyh-lchap__txt{display:grid;gap:2px;min-width:0}
.jyh-lchap__txt .jyh-kicker{color:var(--g2)}
.jyh-lchap__txt h3{font:500 1.5rem/1.2 var(--jy-font-title)}
.jyh-lchap__txt p{color:var(--jy-sand);font-size:.875rem;line-height:1.45}
.jyh-lchap__stars{display:flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;background:rgba(0,0,0,.32);color:var(--jy-sand);font-weight:700;white-space:nowrap}
.jyh-lchap__stars .jyh-i{color:#ffcf5a;fill:#ffcf5a}
.jyh-lchap__stars b{color:#ffe2a8;font-size:1.1rem}
.jyh-lnodes{position:relative;display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}
.jyh-lnodes::before{content:"";position:absolute;left:6%;right:6%;top:36px;height:3px;background:repeating-linear-gradient(90deg,rgba(255,226,168,.5) 0 9px,transparent 9px 17px)}
.jyh-lnodes li{display:grid;justify-items:center}
.jyh-lnode{position:relative;display:grid;justify-items:center;gap:7px;width:100%;padding:0;border:0;background:none;color:inherit;cursor:pointer}
.jyh-lnode__disc{position:relative;display:grid;place-items:center;width:72px;height:72px;border:2px solid rgba(255,226,168,.45);border-radius:50%;background:radial-gradient(circle at 40% 30%,#4c3326,#22140e);color:#fff8ee;font-size:1.55rem;box-shadow:0 12px 22px -12px #000,inset 0 2px 0 rgba(255,255,255,.12);transition:transform var(--jy-t-fast) var(--jy-ease-out),box-shadow var(--jy-t-base)}
.jyh-lnode__disc b{font:500 1.55rem/1 var(--jy-font-num)}
.jyh-lnode:hover .jyh-lnode__disc{transform:translateY(-3px) scale(1.04)}
.jyh-lnode.is-done .jyh-lnode__disc{border-color:#ffe9bf;background:radial-gradient(circle at 38% 28%,#fff6d8 0%,var(--g2) 26%,var(--g1) 66%,var(--g0) 100%);color:#2a1306;box-shadow:0 0 22px 2px var(--gglow),inset 0 2px 0 rgba(255,255,255,.4)}
.jyh-lnode.is-done .jyh-lnode__disc b{text-shadow:0 1px 0 rgba(255,255,255,.4)}
.jyh-lnode.is-current .jyh-lnode__disc{border-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.16),0 0 30px 8px var(--gglow);animation:jyhNodePulse 1.8s ease-in-out infinite}
@keyframes jyhNodePulse{0%,100%{box-shadow:0 0 0 4px rgba(255,255,255,.14),0 0 24px 4px var(--gglow)}50%{box-shadow:0 0 0 9px rgba(255,255,255,.06),0 0 38px 12px var(--gglow)}}
.jyh-lnode.is-locked{cursor:not-allowed}
.jyh-lnode.is-locked .jyh-lnode__disc{border-style:dashed;color:rgba(234,217,194,.6);background:rgba(0,0,0,.35)}
.jyh-lnode.is-boss .jyh-lnode__disc{width:84px;height:84px;margin-top:-6px;border-width:3px}
.jyh-lnode__crown{position:absolute;top:-16px;left:50%;transform:translateX(-50%);color:#ffd27a;font-size:1.25rem;filter:drop-shadow(0 0 6px rgba(255,200,90,.8))}
.jyh-lnode .jyh-st{width:15px;height:15px}
.jyh-lnode:focus-visible{outline:none}
.jyh-lnode:focus-visible .jyh-lnode__disc{outline:3px solid #fff;outline-offset:3px}
@media (max-width:780px){.jyh-lnodes{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:18px}.jyh-lnodes::before{display:none}.jyh-lchap__head{grid-template-columns:auto minmax(0,1fr)}.jyh-lchap__stars{grid-column:1/-1;justify-self:start}}
@media (max-width:380px){.jyh-lnode__disc{width:62px;height:62px}.jyh-lnode.is-boss .jyh-lnode__disc{width:70px;height:70px}}

/* ==========================================================================
   D. KHUNG CHƠI: thanh trên, bảng điểm, sân chơi, lớp phủ
   ========================================================================== */
.jyh-game-layer .jyh-full{background:var(--gbg2)}
.jyh-game-layer .jyh-full__body{display:flex;flex-direction:column}
.jyh-gbar{display:grid;grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr) auto;align-items:center;gap:6px 12px;min-height:66px;background:linear-gradient(100deg,var(--gbg2),var(--gbg1) 50%,var(--gbg2));box-shadow:inset 0 -1px 0 rgba(255,255,255,.1),0 12px 30px -14px rgba(0,0,0,.8)}
.jyh-gbar [data-g-pause]{justify-self:end}
.jyh-gbar .jyh-full__title{gap:3px}
.jyh-gbar__kicker{color:var(--g2);font-size:.625rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-gbar .jyh-full__title strong{font-family:var(--jy-font-title);font-size:1.25rem;font-weight:500}
.jyh-gbar__hud{display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:8px;min-width:0}
.jyh-gbar__prog{position:absolute;left:0;right:0;bottom:0;height:3px;background:rgba(255,255,255,.08);pointer-events:none}
.jyh-gbar__prog b{display:block;height:100%;background:linear-gradient(90deg,var(--g1),var(--g2));box-shadow:0 0 10px var(--gglow);transform:scaleX(0);transform-origin:left;transition:transform 300ms var(--jy-ease-out)}
.jyh-hstat{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:0 13px;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.07);color:#fff8ee;white-space:nowrap}
.jyh-hstat small{color:var(--jy-sand);font-size:.625rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jyh-hstat b{font:500 1.1rem/1 var(--jy-font-num)}
.jyh-hstat b small{margin-left:1px;color:var(--jy-sand);font:500 .8rem/1 var(--jy-font-num);letter-spacing:0;text-transform:none}
.jyh-hstat .jyh-i{width:16px;height:16px;color:var(--g2)}
.jyh-hstat--lbl b{font:700 .875rem/1 var(--jy-font-ui)}
.jyh-hstat--rank{border-color:rgba(255,226,168,.4)}
.jyh-hstat--rank b{color:#ffe2a8}
.jyh-hstat--score{border-color:rgba(255,226,168,.45)}
.jyh-hstat--score b{min-width:2.2ch;color:var(--g2);font-size:1.45rem;text-align:right}
.jyh-hstat--time.is-low{border-color:#ff6b5b;background:rgba(160,20,20,.35);animation:jyhBeat 1s ease-in-out infinite}
.jyh-hstat--time.is-low b,.jyh-hstat--time.is-low .jyh-i{color:#ffb3a8}
.jyh-hstat--lives{gap:5px}
.jyh-hstat--lives i{width:13px;height:16px;border-radius:50%/45%;background:rgba(255,255,255,.16)}
.jyh-hstat--lives i.is-on{background:radial-gradient(circle at 50% 35%,#ffe6b0,#ff8a52 40%,#d6302c 75%);box-shadow:0 0 9px rgba(255,120,80,.75)}
.jyh-hstat--combo{border-color:#ffb36b;background:linear-gradient(135deg,#ff8a3d,#d1283a);animation:jyhHudPop 300ms var(--jy-ease-spring)}
.jyh-hstat--combo .jyh-i,.jyh-hstat--combo b{color:#fff}
.jyh-hstat--combo small{color:rgba(255,255,255,.85);letter-spacing:0}
.jyh-hstat--combo.is-hot{box-shadow:0 0 18px rgba(255,120,60,.8)}
@keyframes jyhHudPop{from{transform:scale(.7);opacity:0}}
@media (max-width:700px){
  .jyh-gbar{grid-template-columns:auto minmax(0,1fr) auto auto;min-height:0;padding-bottom:9px}
  .jyh-gbar__hud{grid-column:1/-1;grid-row:2}
  .jyh-gbar [data-g-pause]{grid-column:3}
  .jyh-mapbar{grid-template-columns:auto minmax(0,1fr) auto auto}
  .jyh-gbar .jyh-full__title strong{font-size:1.05rem}
  .jyh-hstat{min-height:34px;padding:0 9px;gap:5px}
  .jyh-hstat--score b{font-size:1.2rem}
  .jyh-hstat--score small{display:none}
}
@media (max-width:380px){.jyh-hstat{padding:0 7px}.jyh-hstat .jyh-i{display:none}.jyh-hstat--lives i{width:10px;height:13px}}

/* Sân chơi: nền theo màu trò + ảnh kiến trúc của Jueyin mờ phía sau + ánh sáng chuyển động */
.jyh-arena{position:relative;flex:1 0 auto;display:flex;flex-direction:column;align-items:stretch;min-height:100%;padding:clamp(12px,2.2vh,22px) clamp(10px,2.4vw,28px) calc(14px + env(safe-area-inset-bottom));overflow:hidden;color:#fff8ee;isolation:isolate;background:radial-gradient(90% 70% at 50% -12%,var(--gglow),transparent 62%),linear-gradient(180deg,var(--gbg1),var(--gbg2))}
.jyh-arena::before{content:"";position:absolute;inset:0;z-index:-3;background-size:cover;background-position:center;opacity:.2;filter:saturate(.7);mix-blend-mode:luminosity}
.jyh-arena--lantern::before{background-image:url(hsk2.png)}
.jyh-arena--boat::before{background-image:url(hsk1.png);background-position:center 30%}
.jyh-arena--stars::before{background-image:url(hsk1.png);background-position:center 10%;opacity:.12}
.jyh-arena--flash::before{background-image:url(hsk2.png);background-position:center 60%}
.jyh-arena::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 85% 80% at 50% 45%,transparent 50%,rgba(0,0,0,.55) 100%)}
.jyh-arena>:not(.jyh-amb):not(.jyh-gbanner){position:relative;z-index:1}
.jyh-amb{position:absolute;inset:0;z-index:-2;overflow:hidden;pointer-events:none}
.jyh-amb i{position:absolute;inset:-30% -10%;opacity:.55}
.jyh-amb::after{content:"";position:absolute;inset:0;opacity:0;background:radial-gradient(circle at 50% 30%,rgba(255,250,225,.75),rgba(255,240,200,.25) 60%,transparent 80%)}
.jyh-arena.is-zap .jyh-amb::after{animation:jyhZapFx .6s ease-out}
@keyframes jyhZapFx{0%{opacity:0}12%{opacity:1}30%{opacity:.2}42%{opacity:.7}100%{opacity:0}}
/* đèn lồng: đốm sáng ấm bay lên */
.jyh-arena--lantern .jyh-amb i{background:radial-gradient(6px 6px at 10% 20%,rgba(255,190,110,.9),transparent),radial-gradient(9px 9px at 34% 62%,rgba(255,150,90,.55),transparent),radial-gradient(5px 5px at 58% 34%,rgba(255,220,150,.8),transparent),radial-gradient(12px 12px at 80% 76%,rgba(255,120,70,.35),transparent),radial-gradient(7px 7px at 92% 18%,rgba(255,200,120,.6),transparent);background-size:340px 300px;animation:jyhAmbUp 22s linear infinite}
.jyh-arena--lantern .jyh-amb i:nth-child(2){background-size:520px 460px;opacity:.4;animation-duration:34s;filter:blur(2px)}
.jyh-arena--lantern .jyh-amb i:nth-child(3){background-size:220px 210px;opacity:.3;animation-duration:15s}
@keyframes jyhAmbUp{from{transform:translateY(0)}to{transform:translateY(-300px)}}
/* thuyền: sương trôi ngang */
.jyh-arena--boat .jyh-amb i{background:radial-gradient(40% 12% at 30% 50%,rgba(190,255,235,.16),transparent 70%),radial-gradient(30% 10% at 75% 30%,rgba(255,226,170,.12),transparent 70%);background-size:900px 420px;animation:jyhAmbSide 40s linear infinite}
.jyh-arena--boat .jyh-amb i:nth-child(2){background-size:1300px 600px;animation-duration:60s;animation-direction:reverse}
.jyh-arena--boat .jyh-amb i:nth-child(3){display:none}
@keyframes jyhAmbSide{from{transform:translateX(0)}to{transform:translateX(-900px)}}
/* sao: lấp lánh */
.jyh-arena--stars .jyh-amb i{background:radial-gradient(1.6px 1.6px at 10% 20%,#fff,transparent),radial-gradient(1.2px 1.2px at 30% 70%,#fff8dd,transparent),radial-gradient(1.8px 1.8px at 55% 35%,#fff,transparent),radial-gradient(1.2px 1.2px at 80% 60%,#fff,transparent),radial-gradient(1.4px 1.4px at 92% 12%,#fff8dd,transparent);background-size:300px 260px;animation:jyhTwinkleBg 4s ease-in-out infinite alternate}
.jyh-arena--stars .jyh-amb i:nth-child(2){background-size:470px 380px;animation-duration:6s;animation-delay:-2s}
.jyh-arena--stars .jyh-amb i:nth-child(3){background-size:640px 520px;animation-duration:9s}
@keyframes jyhTwinkleBg{from{opacity:.25}to{opacity:.85}}
/* tia chớp: mưa xiên và chớp lóe theo nhịp */
.jyh-arena--flash .jyh-amb i{background:repeating-linear-gradient(105deg,transparent 0 18px,rgba(255,240,200,.07) 18px 19px);background-size:200px 200px;animation:jyhRain .7s linear infinite}
.jyh-arena--flash .jyh-amb i:nth-child(2){background:radial-gradient(60% 40% at 70% 10%,rgba(255,230,160,.0),transparent);animation:jyhStorm 7s ease-in-out infinite}
.jyh-arena--flash .jyh-amb i:nth-child(3){display:none}
@keyframes jyhRain{to{background-position:-60px 200px}}
@keyframes jyhStorm{0%,86%,100%{background:radial-gradient(60% 40% at 70% 10%,rgba(255,230,160,0),transparent)}88%{background:radial-gradient(60% 40% at 70% 10%,rgba(255,236,180,.35),transparent 70%)}90%{background:radial-gradient(60% 40% at 70% 10%,rgba(255,236,180,.05),transparent)}93%{background:radial-gradient(60% 40% at 70% 10%,rgba(255,236,180,.28),transparent 70%)}}

/* Lớp phủ: mở đầu, đếm ngược, tạm dừng, kết quả */
.jyh-gover{position:fixed;left:0;right:0;bottom:0;top:var(--gbar-h,66px);z-index:6;display:grid;place-items:center;overflow:auto;padding:18px 14px calc(18px + env(safe-area-inset-bottom));background:rgba(10,5,3,.72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);animation:jyhFade 200ms linear both;overscroll-behavior:contain}
.jyh-gover.is-count{background:rgba(10,5,3,.3);-webkit-backdrop-filter:blur(1.5px);backdrop-filter:blur(1.5px);pointer-events:none}
.jyh-gintro,.jyh-gpause{position:relative;display:grid;justify-items:center;gap:12px;width:min(580px,100%);margin:auto;padding:30px clamp(18px,4vw,32px) 24px;border:1px solid rgba(255,226,168,.28);border-radius:18px;color:#fff8ee;text-align:center;
  --c:rgba(255,226,168,.9);
  background:
    linear-gradient(var(--c),var(--c)) 12px 12px/22px 1.5px,linear-gradient(var(--c),var(--c)) 12px 12px/1.5px 22px,
    linear-gradient(var(--c),var(--c)) right 12px top 12px/22px 1.5px,linear-gradient(var(--c),var(--c)) right 12px top 12px/1.5px 22px,
    linear-gradient(var(--c),var(--c)) left 12px bottom 12px/22px 1.5px,linear-gradient(var(--c),var(--c)) left 12px bottom 12px/1.5px 22px,
    linear-gradient(var(--c),var(--c)) right 12px bottom 12px/22px 1.5px,linear-gradient(var(--c),var(--c)) right 12px bottom 12px/1.5px 22px,
    radial-gradient(90% 60% at 50% 0%,var(--gglow),transparent 70%),
    linear-gradient(180deg,var(--gbg1),var(--gbg2));
  background-repeat:no-repeat;box-shadow:0 40px 90px -30px #000,inset 0 1px 0 rgba(255,255,255,.1);animation:jyhPopIn 380ms var(--jy-ease-spring) both}
@keyframes jyhPopIn{from{opacity:0;transform:translateY(16px) scale(.96)}}
.jyh-gintro__art .jyh-gi{width:86px;height:86px;filter:drop-shadow(0 12px 24px var(--gglow))}
.jyh-gintro .jyh-kicker,.jyh-gpause .jyh-kicker{color:var(--g2)}
.jyh-gintro__title{display:grid;justify-items:center;gap:6px;font:500 clamp(2.1rem,6vw,3rem)/1.05 var(--jy-font-title)}
.jyh-gintro__boss{display:flex;align-items:center;gap:6px;color:#ffd27a;font:800 .75rem/1 var(--jy-font-ui);letter-spacing:.16em;text-transform:uppercase}
.jyh-gintro__goal{max-width:44ch;color:#fff8ee;font-size:1.05rem;font-weight:650;line-height:1.55}
.jyh-gintro__new{display:grid;gap:5px;width:100%;padding:12px 14px;border:1px solid rgba(255,210,122,.5);border-radius:10px;background:rgba(255,210,122,.09);text-align:left}
.jyh-gintro__new b{display:flex;align-items:center;gap:6px;color:#ffd27a;font-size:.75rem;letter-spacing:.12em;text-transform:uppercase}
.jyh-gintro__new span{color:var(--jy-sand);font-size:.9rem;line-height:1.55}
.jyh-gintro__stars{display:grid;gap:6px;width:100%;margin:0;padding:0;list-style:none}
.jyh-gintro__stars li{display:grid;grid-template-columns:66px minmax(0,1fr);align-items:center;gap:10px;padding:8px 12px;border-radius:8px;background:rgba(0,0,0,.28);text-align:left;font-size:.9rem;font-weight:650}
.jyh-gintro__stars .jyh-st{width:17px;height:17px;fill:#ffcf5a;stroke:#f0a92e}
.jyh-gintro__stars li.is-got{background:rgba(255,207,90,.14);box-shadow:inset 0 0 0 1px rgba(255,207,90,.35)}
.jyh-gintro__chips{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}
.jyh-gintro__have{color:var(--jy-sand);font-size:.85rem;line-height:1.5}
.jyh-gintro__keys{color:rgba(234,217,194,.7);font-size:.75rem;font-weight:700}
.jyh-btn--xl{min-height:58px;padding-inline:2em;border-radius:10px;font-size:1.1rem}
.jyh-gintro .jyh-btn--primary,.jyh-gpause .jyh-btn--primary,.jyh-gres .jyh-gres__btns .jyh-btn--primary{min-width:220px;border-color:#ff7a5c;background:linear-gradient(180deg,#e0453a,#a3212a);box-shadow:0 12px 28px -10px rgba(230,70,50,.75),inset 0 1px 0 rgba(255,255,255,.25)}
.jyh-gintro .jyh-btn--primary:hover,.jyh-gpause .jyh-btn--primary:hover,.jyh-gres .jyh-gres__btns .jyh-btn--primary:hover{background:linear-gradient(180deg,#ec5245,#b0262f)}
.jyh-gpause h3{font:500 2.2rem/1.1 var(--jy-font-title)}
.jyh-gpause__goal{max-width:44ch;color:var(--jy-sand);line-height:1.5}
.jyh-gpause__btns{display:grid;gap:10px;width:min(300px,82vw)}
.jyh-gcount{position:relative;display:grid;place-items:center;width:240px;height:240px}
.jyh-gcount__ring{position:absolute;inset:0;border:3px solid var(--g2);border-radius:50%;opacity:.5;animation:jyhRingOut 640ms ease-out infinite}
@keyframes jyhRingOut{from{transform:scale(.6);opacity:.8}to{transform:scale(1.25);opacity:0}}
.jyh-gcount b{position:relative;font:500 9rem/1 var(--jy-font-title);color:#fff3d6;text-shadow:0 0 44px var(--gglow),0 6px 0 rgba(0,0,0,.35)}
.jyh-gcount b.is-go{font-size:4.6rem;color:var(--g2);white-space:nowrap}
.jyh-gcount b.is-pop{animation:jyhCountPop 640ms var(--jy-ease-out) both}
@keyframes jyhCountPop{0%{opacity:0;transform:scale(1.9)}28%{opacity:1;transform:scale(1)}78%{opacity:1}100%{opacity:0;transform:scale(.8)}}

/* Chữ điểm bay lên và băng thông báo */
.jyh-pop{position:fixed;z-index:30;pointer-events:none;transform:translate(-50%,-50%);color:#fff3d6;font:700 1.65rem/1 var(--jy-font-num);text-shadow:0 2px 12px rgba(0,0,0,.65);white-space:nowrap;animation:jyhPopUp 950ms var(--jy-ease-out) forwards}
.jyh-pop--gold{color:#ffd27a}
.jyh-pop--bad{color:#ff9a8a;font-size:1.3rem}
@keyframes jyhPopUp{0%{opacity:0;transform:translate(-50%,-30%) scale(.7)}18%{opacity:1;transform:translate(-50%,-70%) scale(1.12)}100%{opacity:0;transform:translate(-50%,-190%) scale(1)}}
.jyh-gbanner{position:absolute;left:50%;top:44%;z-index:20;pointer-events:none;transform:translate(-50%,-50%);animation:jyhBanner2 1.65s var(--jy-ease-out) forwards}
.jyh-gbanner span{display:block;max-width:86vw;padding:12px 26px;border:1px solid rgba(255,210,122,.65);border-radius:12px;background:linear-gradient(180deg,rgba(40,20,10,.94),rgba(18,9,5,.94));color:#ffe2a8;font:italic 500 clamp(1.25rem,3.4vw,2rem)/1.25 var(--jy-font-title);text-align:center;box-shadow:0 24px 40px -18px #000,0 0 34px -4px var(--gglow)}
.jyh-gbanner--combo span{border-color:#ffd27a;background:linear-gradient(135deg,#ff8a3d,#c41f33);color:#fff;font-style:normal;font-weight:700;font-family:var(--jy-font-ui)}
.jyh-gbanner--win span{border-color:#fff1c1;background:linear-gradient(180deg,rgba(90,52,8,.95),rgba(40,20,4,.95));color:#ffe9b0}
@keyframes jyhBanner2{0%{opacity:0;transform:translate(-50%,-30%) scale(.8)}14%{opacity:1;transform:translate(-50%,-50%) scale(1.05)}24%{transform:translate(-50%,-50%) scale(1)}78%{opacity:1}100%{opacity:0;transform:translate(-50%,-75%)}}

/* Vé kết quả */
.jyh-gres{display:grid;gap:14px;width:min(600px,100%);margin:auto;animation:jyhPopIn 420ms var(--jy-ease-spring) both}
.jyh-gres .jyh-ticket__main{padding:0 0 18px}
.jyh-gres__hero{position:relative;display:grid;justify-items:center;gap:8px;padding:22px 22px 20px;color:#fff8ee;text-align:center;background:radial-gradient(80% 100% at 50% 0%,var(--gglow),transparent 72%),linear-gradient(180deg,var(--gbg1),var(--gbg2))}
.jyh-gres__hero::after{content:"";position:absolute;inset:0;background-image:var(--jy-grain);opacity:.12;mix-blend-mode:overlay;pointer-events:none}
.jyh-gres__hero .jyh-kicker{color:var(--g2)}
.jyh-gres__title{font:500 clamp(1.7rem,4.4vw,2.3rem)/1.12 var(--jy-font-title)}
.jyh-gres.is-fail .jyh-gres__title{color:#ffc9bd}
.jyh-gres__stars{display:flex;align-items:flex-end;gap:12px;margin:6px 0 2px}
.jyh-gstar .jyh-st{width:56px;height:56px;fill:rgba(255,255,255,.08);stroke:rgba(255,255,255,.32);stroke-width:1}
.jyh-gstar[data-star="1"] .jyh-st{width:70px;height:70px}
.jyh-gstar.is-pop .jyh-st{fill:#ffcf5a;stroke:#fff1c1;filter:drop-shadow(0 0 14px rgba(255,200,80,.85));animation:jyhStarPop 520ms var(--jy-ease-spring) both}
@keyframes jyhStarPop{0%{transform:scale(.2) rotate(-40deg)}100%{transform:none}}
.jyh-gres__record{display:flex;align-items:center;gap:8px;color:#ffd27a;font-weight:800}
.jyh-gres .jyh-sum__grid{margin:14px 22px 10px}
.jyh-gres__meta{display:flex;flex-wrap:wrap;gap:6px 18px;margin:0 22px;color:var(--jy-muted);font-size:.875rem}
.jyh-gres__meta b{color:var(--jy-ink)}
.jyh-gres__note{margin:10px 22px 0;color:var(--jy-muted);font-size:.875rem;line-height:1.5}
.jyh-gres__chapter{display:flex;align-items:center;gap:8px;margin:12px 22px 0;padding:10px 12px;border-radius:8px;background:#fbf0d8;color:#7a4d10;font-weight:800}
.jyh-gres__wrong{margin:12px 22px 0}
.jyh-gres__wrong summary{display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;list-style:none}
.jyh-gres__wrong summary::-webkit-details-marker{display:none}
.jyh-gres__wrong summary .jyh-kicker{color:var(--jy-bad)}
.jyh-gres__wrong summary b{display:grid;place-items:center;min-width:24px;height:22px;padding:0 6px;border-radius:99px;background:#f6dfdb;color:var(--jy-bad);font-size:.75rem}
.jyh-gres__w{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:6px 0;border-top:1px solid var(--jy-line2)}
.jyh-gres__w .jyh-han{font-size:1.35rem}
.jyh-gres__w .jyh-py{color:var(--jy-accent);font-size:.875rem;font-weight:700}
.jyh-gres__m{min-width:0;color:var(--jy-muted);font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jyh-gres__clean{display:flex;align-items:center;gap:8px;margin:12px 22px 0;color:var(--jy-ok);font-weight:800}
.jyh-gres__hero .jyh-stamp{top:16px;right:18px;width:62px;height:62px;border-color:rgba(255,226,168,.85);color:#ffe2a8;font-size:1.15rem;mix-blend-mode:normal}
@media (max-width:620px){.jyh-gres__hero .jyh-stamp{top:auto;right:14px;bottom:14px;width:52px;height:52px;font-size:.95rem}}
.jyh-gres .jyh-ticket__stub{color:var(--jy-muted)}
.jyh-gres__btns{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}
.jyh-gres__btns--sub{margin-top:-4px}
/* v1.7 · hàng nút chính (Màn tiếp theo · Chơi lại · Bản đồ màn · Về bàn học) luôn chung một hàng */
.jyh-gres__btns--main{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:8px}
.jyh-gres .jyh-gres__btns--main .jyh-btn{min-width:0;padding-inline:10px;white-space:normal;line-height:1.2;text-align:center}
@media (max-width:560px){.jyh-gres .jyh-gres__btns--main .jyh-btn{flex-direction:column;gap:5px;min-height:66px;padding:8px 4px;font-size:.75rem}.jyh-gres__btns--main .jyh-btn .jyh-i{font-size:1.2rem}}
.jyh-gres__btns--sub .jyh-btn{min-height:42px;font-size:.875rem}
@media (max-width:560px){.jyh-gres__btns--sub .jyh-btn{flex:1 1 100%}.jyh-gres__w{grid-template-columns:auto minmax(0,1fr) auto}.jyh-gres__w .jyh-py{display:none}.jyh-gstar .jyh-st{width:46px;height:46px}.jyh-gstar[data-star="1"] .jyh-st{width:58px;height:58px}}

/* Bàn chơi kiểu sơn mài: viền vàng 4 góc */
.jyh-panel-g{
  --c:rgba(255,226,168,.85);
  border:1px solid rgba(255,226,168,.3);border-radius:16px;
  background:
    linear-gradient(var(--c),var(--c)) 10px 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) 10px 10px/1.5px 20px,
    linear-gradient(var(--c),var(--c)) right 10px top 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px top 10px/1.5px 20px,
    linear-gradient(var(--c),var(--c)) left 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/1.5px 20px,
    linear-gradient(var(--c),var(--c)) right 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/1.5px 20px,
    linear-gradient(180deg,var(--gpanel),rgba(0,0,0,.55));
  background-repeat:no-repeat;box-shadow:0 34px 70px -34px #000,inset 0 1px 0 rgba(255,255,255,.08)}

/* ==========================================================================
   E. GAME 1 · ĐÈN LỒNG
   ========================================================================== */
.jyh-lt{position:relative;display:flex;flex:1 1 auto;flex-direction:column;gap:clamp(6px,1.4vh,12px);width:100%;max-width:1200px;min-height:0;margin:0 auto}
.jyh-lt__head{position:relative;display:grid;justify-items:center;gap:clamp(6px,1.2vh,10px)}
.jyh-lt__string{display:flex;flex-wrap:wrap;justify-content:center;gap:4px clamp(10px,2.2vw,26px);min-height:clamp(58px,9vh,92px)}
@keyframes jyhSway{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
.jyh-lt__clock{display:flex;align-items:center;gap:12px;width:min(860px,100%)}
.jyh-lt:not(.has-timer) .jyh-lt__clock{display:none}
.jyh-lt__timer{flex:1;height:12px;overflow:hidden;border-radius:99px;background:rgba(255,255,255,.12);box-shadow:inset 0 1px 3px rgba(0,0,0,.6)}
.jyh-lt__timer i{display:block;height:100%;transform-origin:left;background:linear-gradient(90deg,#ff6a4d,#ffd27a);box-shadow:0 0 16px rgba(255,170,90,.7)}
.jyh-lt.is-low .jyh-lt__timer i{background:linear-gradient(90deg,#b81f2a,#ff6a4d)}
.jyh-lt.is-low .jyh-lt__sec{color:#ffb3a8;animation:jyhBeat 1s ease-in-out infinite}
.jyh-lt__sec{min-width:3em;color:#ffe2a8;font-size:1.4rem;text-align:right}
.jyh-lt__step{min-height:1.6em;max-width:100%;color:var(--jy-sand);font-size:clamp(.875rem,1.7vh,1.05rem);font-weight:700;line-height:1.6;text-align:center}
/* v1.6.5 · Dòng đáp án khi ghép sai giữ đúng một dòng: bàn thẻ không bị đẩy xuống rồi kéo lên */
.jyh-lt__ans{display:inline-block;max-width:100%;overflow:hidden;color:#fff8ee;line-height:1.45;white-space:nowrap;text-overflow:ellipsis;vertical-align:top}
.jyh-lt__ans .jyh-han{font-size:1.35em;line-height:1}
.jyh-lt__shuffle{position:absolute;top:0;right:0;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid rgba(255,255,255,.2);border-radius:99px;background:rgba(0,0,0,.35);color:var(--jy-sand);font-size:.75rem;font-weight:800}
.jyh-lt__shuffle.is-soon{border-color:#ffd27a;color:#ffd27a;animation:jyhBeat .9s ease-in-out infinite}
.jyh-lt__shuffle[hidden]{display:none}
.jyh-lt__shuffle .jyh-i{font-size:.95rem}
.jyh-lt__shufn{display:none}
@media (max-width:560px){.jyh-lt__shuffle{padding:5px 9px}.jyh-lt__shuft{display:none}.jyh-lt__shufn{display:inline}}
.jyh-lt__gridwrap{position:relative;flex:1 1 0;min-height:180px;overflow-x:hidden;overflow-y:auto;padding:4px 2px 8px}
.jyh-lt__grid{display:flex;flex-wrap:wrap;align-content:center;justify-content:center;gap:var(--gap,12px);max-width:calc(var(--cols,4) * var(--cw,140px) + (var(--cols,4) - 1) * var(--gap,12px));min-height:100%;margin:0 auto}
.jyh-lt__card{position:relative;flex:0 0 var(--cw,140px);width:var(--cw,140px);max-width:100%;height:var(--ch,96px);padding:0;border:0;background:none;color:var(--jy-ink);perspective:1000px;animation:jyhGCardIn 360ms var(--jy-ease-out) both;animation-delay:calc(var(--i,0) * 24ms);transition:transform 260ms var(--jy-ease-out),opacity 300ms}
@keyframes jyhGCardIn{from{opacity:0;transform:translateY(12px) scale(.94)}}
.jyh-lt__in{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform 460ms var(--jy-ease-out)}
.jyh-lt__face,.jyh-lt__back{position:absolute;inset:0;display:grid;place-items:center;padding:8px;border-radius:12px;-webkit-backface-visibility:hidden;backface-visibility:hidden}
.jyh-lt__face{border:1px solid rgba(255,248,236,.95);background:linear-gradient(180deg,#fffdf8,#f3e3cf);box-shadow:0 16px 28px -16px rgba(0,0,0,.95),inset 0 0 0 5px #fffdf8,inset 0 0 0 6px rgba(201,162,102,.4);transition:box-shadow var(--jy-t-fast),transform var(--jy-t-fast) var(--jy-ease-out)}
.jyh-lt__face .jyh-han{font-size:min(calc(2.5rem * var(--fs,1)),calc((var(--cw,140px) - 26px) / var(--n,1)));line-height:1;white-space:nowrap}
.jyh-lt__py{color:var(--jy-accent);font-size:min(calc(1.15rem * var(--fs,1)),calc((var(--cw,140px) - 24px) / (var(--n,6) * .6)));font-weight:800;line-height:1.2;text-align:center;overflow-wrap:anywhere}
.jyh-lt__mean{display:-webkit-box;overflow:hidden;font-size:calc(.98rem * var(--fs,1));font-weight:750;line-height:1.3;text-align:center;-webkit-box-orient:vertical;-webkit-line-clamp:3}
.jyh-lt__card--py .jyh-lt__face{background:linear-gradient(180deg,#fff7f3,#f7dfd5)}
.jyh-lt__card--mean .jyh-lt__face{background:linear-gradient(180deg,#fffdf6,#f2e8d0)}
.jyh-lt__back{transform:rotateY(180deg);border:1px solid rgba(255,200,150,.55);background:radial-gradient(circle at 50% 36%,#d0453a,#7a141c 72%);box-shadow:0 16px 28px -16px rgba(0,0,0,.95),inset 0 0 0 5px rgba(255,210,150,.25)}
.jyh-lt__back b{color:rgba(255,226,168,.92);font:500 calc(2rem * var(--fs,1))/1 var(--jy-font-han);text-shadow:0 0 14px rgba(255,190,110,.6)}
.jyh-lt__card.is-down .jyh-lt__in{transform:rotateY(180deg)}
.jyh-lt__card.is-down.is-up .jyh-lt__in{transform:none}
.jyh-lt__card:not(.is-down):hover .jyh-lt__face{transform:translateY(-2px)}
.jyh-lt__card.is-sel .jyh-lt__face{box-shadow:0 0 0 3px #ffd27a,0 0 28px 6px rgba(255,190,90,.6),inset 0 0 0 5px #fff,inset 0 0 0 6px rgba(201,162,102,.6);transform:translateY(-4px)}
.jyh-lt__card.is-bad .jyh-lt__face{border-color:#ff8a7a;background:linear-gradient(180deg,#fff1ee,#f6d3cd);color:var(--jy-bad);animation:jyhShake 400ms var(--jy-ease-out)}
.jyh-lt__card.is-match .jyh-lt__face{box-shadow:0 0 0 3px #8ef0c0,0 0 32px 8px rgba(120,230,170,.6),inset 0 0 0 5px #fff,inset 0 0 0 6px rgba(120,200,160,.6)}
.jyh-lt__card.is-done{opacity:0;transform:scale(.6) translateY(-24px);pointer-events:none}
.jyh-lt__grid.is-triple .jyh-lt__card--py .jyh-lt__face::after,.jyh-lt__grid.is-triple .jyh-lt__card--mean .jyh-lt__face::after{position:absolute;top:6px;left:8px;color:var(--jy-faint);font-size:.625rem;font-weight:800;letter-spacing:.1em}
.jyh-lt__grid.is-triple .jyh-lt__card--py .jyh-lt__face::after{content:"PINYIN"}
.jyh-lt__peek{position:absolute;left:50%;top:6px;z-index:5;display:grid;justify-items:center;gap:6px;padding:8px 18px;border:1px solid #ffd27a;border-radius:99px;background:rgba(20,8,6,.9);color:#ffd27a;font-weight:800;transform:translateX(-50%)}
.jyh-lt__peek i{display:block;width:160px;height:4px;border-radius:2px;background:#ffd27a;transform-origin:left;animation:jyhShrink var(--d) linear forwards}
@keyframes jyhShrink{to{transform:scaleX(0)}}
@media (max-width:560px){.jyh-lt__face,.jyh-lt__back{padding:5px;border-radius:10px}.jyh-lt__sec{font-size:1.1rem}}

/* ==========================================================================
   F. GAME 2 · ĐUA THUYỀN
   ========================================================================== */
.jyh-bt{display:flex;flex:1 1 auto;flex-direction:column;gap:clamp(10px,1.8vh,18px);width:100%;max-width:1200px;min-height:0;margin:0 auto}
.jyh-bt__river{position:relative;flex:0 0 auto;display:grid;grid-template-rows:repeat(var(--lanes,4),minmax(0,1fr));height:clamp(190px,34vh,370px);overflow:hidden;border:1px solid rgba(255,226,168,.32);border-radius:16px;background:linear-gradient(180deg,#1f7a70 0%,#125a53 45%,#0a3a37 100%);box-shadow:0 30px 60px -30px #000,inset 0 14px 22px -14px rgba(0,0,0,.6),inset 0 -14px 22px -14px rgba(0,0,0,.6)}
.jyh-bt__shore{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(255,240,200,.14),transparent 14%,transparent 86%,rgba(0,0,0,.25))}
.jyh-bt__waves{position:absolute;inset:0;opacity:.6;pointer-events:none;background:radial-gradient(22px 4px at 10px 10px,rgba(255,255,255,.4),transparent 70%) 0 14px/90px 30px repeat,radial-gradient(30px 4px at 40px 22px,rgba(190,255,235,.28),transparent 70%) 0 0/120px 36px repeat;animation:jyhWaves 5s linear infinite}
@keyframes jyhWaves{to{background-position:-90px 14px,-120px 0}}
.jyh-bt__finish{position:absolute;top:0;bottom:0;right:22px;z-index:1;width:12px;background:repeating-linear-gradient(0deg,#fff8ee 0 10px,#1d1209 10px 20px);opacity:.92;box-shadow:0 0 16px rgba(255,255,255,.35)}
.jyh-bt__finish span{position:absolute;top:8px;right:18px;color:#fff8ee;font-size:.625rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
.jyh-bt__flags{position:absolute;inset:0;pointer-events:none}
.jyh-bt__flag{position:absolute;top:0;bottom:0;left:calc(8px + var(--bw,110px) + (100% - var(--bw,110px) - 46px) * var(--p));width:2px;background:repeating-linear-gradient(0deg,rgba(255,226,168,.75) 0 7px,transparent 7px 14px)}
.jyh-bt__flag span{position:absolute;bottom:6px;left:6px;color:rgba(255,226,168,.9);font-size:.625rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}
.jyh-bt__lane{position:relative;border-bottom:1px dashed rgba(255,255,255,.12)}
.jyh-bt__lane:last-child{border-bottom:0}
.jyh-bt__lane.is-me{background:linear-gradient(90deg,rgba(255,210,122,.16),transparent 55%)}
.jyh-bt__tag{position:absolute;left:12px;top:4px;z-index:2;color:rgba(255,248,238,.75);font-size:.625rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.jyh-bt__lane.is-me .jyh-bt__tag{color:#ffd27a}
.jyh-bt__boat{position:absolute;left:8px;top:50%;width:clamp(92px,10.5vw,146px);margin-top:calc(clamp(92px,10.5vw,146px) * -.16);transition:transform 520ms var(--jy-ease-out)}
.jyh-bt__wake{position:absolute;left:-36px;bottom:12%;width:56px;height:10px;border-radius:50%;background:radial-gradient(ellipse,rgba(255,255,255,.65),transparent 70%);opacity:0;transition:opacity var(--jy-t-fast),width var(--jy-t-base),left var(--jy-t-base)}
.jyh-bt__boat.is-row .jyh-bt__wake{opacity:.95}
.jyh-bt__boat.is-nitro .jyh-bt__wake{left:-110px;width:130px;height:14px;opacity:1;background:linear-gradient(90deg,transparent,rgba(255,210,122,.95));border-radius:8px;filter:blur(1px)}
@keyframes jyhBoost{30%{transform:translateX(10px) rotate(-2deg) scale(1.05)}}
.jyh-bt__console{flex:1 1 auto;display:grid;align-content:center;justify-items:center;gap:clamp(8px,1.4vh,14px);width:min(780px,100%);margin:0 auto;padding:clamp(12px,2vh,22px) clamp(12px,2.2vw,26px)}
.jyh-bt__console{--c:rgba(255,226,168,.85);border:1px solid rgba(255,226,168,.3);border-radius:16px;background:linear-gradient(var(--c),var(--c)) 10px 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) 10px 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px top 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px top 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/1.5px 20px,linear-gradient(180deg,var(--gpanel),rgba(0,0,0,.55));background-repeat:no-repeat;box-shadow:0 34px 70px -34px #000,inset 0 1px 0 rgba(255,255,255,.08)}
.jyh-bt__word{position:relative;display:grid;justify-items:center;align-content:center;gap:4px;width:100%;min-height:clamp(150px,23vh,220px)}
.jyh-bt__ring,.jyh-bt__target{position:absolute;inset:0;margin:auto;width:clamp(150px,23vh,214px);height:clamp(150px,23vh,214px);border-radius:50%;pointer-events:none}
.jyh-bt__target{border:2px solid rgba(255,255,255,.18);box-shadow:inset 0 0 30px rgba(0,0,0,.3)}
.jyh-bt__ring{border:3px solid rgba(255,210,122,.7);will-change:transform}
.jyh-bt__ring.is-hot{border-color:#fff3d6;box-shadow:0 0 34px 6px var(--gglow),inset 0 0 24px rgba(255,230,180,.3)}
.jyh-bt__ask{position:relative;color:var(--jy-sand);font-size:.875rem;font-weight:750}
.jyh-bt__han{position:relative;font-size:clamp(2.6rem,7vh,4.4rem);line-height:1.1;letter-spacing:.06em}
.jyh-bt__han span{opacity:.5;transition:opacity var(--jy-t-fast),color var(--jy-t-fast)}
.jyh-bt__han span.is-on{opacity:1;color:#ffe2a8;text-shadow:0 0 20px rgba(255,200,120,.7)}
.jyh-bt__han span.is-done{opacity:.95;color:#9ff0d0}
.jyh-bt__han.is-hidden span{color:var(--jy-sand);opacity:.6}
.jyh-bt--marks .jyh-bt__han,.jyh-bt--plain .jyh-bt__han{font-size:clamp(1.8rem,4.4vh,2.6rem)}
.jyh-bt__syls{position:relative;display:flex;flex-wrap:wrap;justify-content:center;gap:16px}
.jyh-bt__syl b{color:#fff8ee;font:650 clamp(1.7rem,4.6vh,2.7rem)/1.05 var(--jy-font-ui);opacity:.45;transition:opacity var(--jy-t-fast),color var(--jy-t-fast)}
.jyh-bt__syl.is-active b{opacity:1;color:#ffd27a;text-shadow:0 0 18px rgba(255,200,100,.6)}
.jyh-bt__syl.is-done b{opacity:.92;color:#9ff0d0}
.jyh-bt--hanzi .jyh-bt__syl b,.jyh-bt--listen .jyh-bt__syl b{font-size:1.5rem}
.jyh-bt__mean{position:relative;min-height:1.35em;color:var(--jy-sand);font-weight:650;text-align:center}
.jyh-bt__replay{position:absolute!important;top:0;right:0}
.jyh-bt__verdict{min-height:1.5em;font-size:1.05rem;font-weight:800;text-align:center}
.jyh-bt__v--perfect{color:#ffd27a}
.jyh-bt__v--ok{color:#9ff0d0}
.jyh-bt__v--bad{color:#ff9d8f}
.jyh-bt__rev{margin-left:6px;color:var(--jy-sand);font-weight:600}
.jyh-bt__rev .jyh-han{color:#fff}
.jyh-bt__pads{grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:clamp(6px,1vw,12px)}
@media (max-width:560px){
  .jyh-bt__river{height:clamp(170px,31vh,280px)}
  .jyh-bt__tag,.jyh-bt__flag span{display:none}
  .jyh-bt__boat{width:88px;margin-top:-14px}
  .jyh-bt__replay span{display:none}
}

/* Nút thanh điệu (dùng chung) */
.jyh-tones{display:grid;grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:8px;width:100%}
.jyh-tone{position:relative;display:grid;justify-items:center;align-content:center;gap:4px;min-height:clamp(70px,11vh,104px);padding:8px 4px;border:1px solid rgba(255,255,255,.92);border-radius:12px;background:linear-gradient(180deg,#fffdf8,#f2e5d3);color:var(--jy-accent);box-shadow:0 14px 24px -14px rgba(0,0,0,.9),inset 0 1px 0 #fff;transition:transform var(--jy-t-fast) var(--jy-ease-out),background-color var(--jy-t-fast)}
.jyh-tone:hover:not(:disabled){transform:translateY(-2px)}
.jyh-tone:active:not(:disabled),.jyh-tone.is-hit{transform:scale(.95)}
.jyh-tone svg{width:clamp(26px,4vh,36px);height:clamp(26px,4vh,36px);fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.jyh-tone__key{position:absolute;top:6px;left:8px;color:var(--jy-faint);font:800 .6875rem/1 var(--jy-font-ui)}
.jyh-tone__name{color:var(--jy-muted);font-size:.6875rem;font-weight:750;line-height:1.2;text-align:center}
.jyh-tone.is-right{border-color:#6fd6a6;background:linear-gradient(180deg,#effcf5,#cdeedd);color:var(--jy-ok);box-shadow:0 0 22px rgba(110,220,160,.55)}
.jyh-tone.is-wrong{border-color:#ff8a7a;background:linear-gradient(180deg,#fff2ef,#f6d3cd);color:var(--jy-bad)}
@media (max-width:560px){.jyh-tone__name{display:none}.jyh-tone{min-height:64px}}

/* ==========================================================================
   G. GAME 3 · MƯA SAO
   ========================================================================== */
.jyh-cat{display:flex;flex:1 1 auto;flex-direction:column;gap:10px;width:100%;max-width:1000px;height:calc(100dvh - var(--gbar-h,66px) - 34px - env(safe-area-inset-bottom));min-height:420px;margin:0 auto}
.jyh-cat__prompt{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:74px;padding:12px 20px}
.jyh-cat__prompt{--c:rgba(255,226,168,.85);border:1px solid rgba(255,226,168,.3);border-radius:16px;background:linear-gradient(var(--c),var(--c)) 10px 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) 10px 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px top 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px top 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/1.5px 20px,linear-gradient(180deg,var(--gpanel),rgba(0,0,0,.55));background-repeat:no-repeat;box-shadow:0 24px 50px -30px #000}
.jyh-cat__ask{display:grid;gap:4px;min-width:0}
.jyh-cat__ask small{color:#cbbcff;font-size:.6875rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jyh-cat__target{color:#ffe08a;font:500 clamp(1.4rem,3.6vh,2.1rem)/1.15 var(--jy-font-title);overflow-wrap:anywhere}
.jyh-cat__say{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 18px;border:1px solid #ffe08a;border-radius:999px;background:rgba(255,224,138,.12);color:#ffe08a;font-weight:800}
.jyh-cat__say .jyh-i{font-size:1.3rem}
.jyh-cat__goal{position:relative;flex:0 0 auto;display:flex;align-items:baseline;justify-content:center;gap:1px;width:66px;height:66px;padding-top:21px;border-radius:50%;background:conic-gradient(#ffe08a calc(var(--p,0) * 360deg),rgba(255,255,255,.14) 0)}
.jyh-cat__goal::before{content:"";position:absolute;inset:5px;border-radius:50%;background:#15113a}
.jyh-cat__goal b,.jyh-cat__goal small{position:relative}
.jyh-cat__goal b{font:500 1.35rem/1 var(--jy-font-num);color:#fff8ee}
.jyh-cat__goal small{color:#cbbcff;font-size:.75rem}
.jyh-cat__field{position:relative;flex:1 1 auto;min-height:260px;overflow:hidden;border:1px solid rgba(255,224,138,.25);border-radius:16px;background:radial-gradient(80% 60% at 50% 0%,rgba(139,108,255,.28),transparent 70%),linear-gradient(180deg,#140f3d,#0a0820 70%,#1b1030);touch-action:none;cursor:ew-resize;box-shadow:0 30px 60px -30px #000}
.jyh-cat__ground{position:absolute;left:0;right:0;bottom:86px;height:2px;background:linear-gradient(90deg,transparent,rgba(255,224,138,.75),transparent);box-shadow:0 0 18px rgba(255,224,138,.55)}
.jyh-cat__item{position:absolute;left:0;top:0;z-index:2;display:grid;place-items:center;width:clamp(56px,7.4vh,74px);height:clamp(56px,7.4vh,74px);margin-left:calc(clamp(56px,7.4vh,74px) / -2);will-change:transform;transition:opacity 220ms,filter 220ms}
.jyh-cat__item--char{border-radius:50%;background:radial-gradient(circle at 38% 30%,#fffdf5 0%,#fbe7c0 42%,#e2b86c 100%);box-shadow:0 0 0 2px rgba(255,248,232,.7),0 0 28px 7px rgba(255,224,138,.4);color:#3a1612;font:500 clamp(1.7rem,3.9vh,2.3rem)/1 var(--jy-font-han)}
.jyh-cat__item--char::before{content:"";position:absolute;left:50%;bottom:100%;width:5px;height:54px;margin-left:-2.5px;border-radius:3px;background:linear-gradient(rgba(255,224,138,0),rgba(255,224,138,.6));pointer-events:none}
.jyh-cat__item.is-stale{opacity:.35;filter:grayscale(.7)}
.jyh-cat__item--bomb{border-radius:50%;background:radial-gradient(circle at 40% 35%,#ffd2a0,#ff5a3c 42%,#9e1020);box-shadow:0 0 26px 9px rgba(255,80,50,.55);color:#fff;font:900 1.35rem/1 var(--jy-font-ui)}
.jyh-cat__tail{position:absolute;left:50%;bottom:70%;z-index:-1;width:18px;height:80px;margin-left:-9px;border-radius:50%;background:linear-gradient(transparent,rgba(255,120,60,.8));filter:blur(2px)}
.jyh-cat__item--power{border-radius:16px;background:linear-gradient(145deg,#fff6df,#ffd27a);box-shadow:0 0 0 2px #fff,0 0 32px 9px rgba(255,210,122,.65);color:#7a2228;animation:jyhPowerGlow 1.2s ease-in-out infinite alternate}
.jyh-cat__item--power .jyh-i{width:30px;height:30px;stroke-width:2.2}
.jyh-cat__item--power b{font:900 1.2rem/1 var(--jy-font-ui)}
@keyframes jyhPowerGlow{to{box-shadow:0 0 0 2px #fff,0 0 44px 14px rgba(255,210,122,.85)}}
.jyh-cat__item.is-got{opacity:0;filter:brightness(2.2)}
.jyh-cat__item.is-bad{opacity:0;filter:grayscale(1) brightness(.5)}
.jyh-cat__basket{position:absolute;left:0;bottom:16px;z-index:3;display:grid;justify-items:center;width:clamp(100px,12vw,136px);pointer-events:none;will-change:transform}
.jyh-cat__cap{display:block;width:34%;height:9px;border-radius:3px 3px 0 0;background:#d9b06a}
.jyh-cat__body{display:block;width:100%;height:clamp(38px,5.2vh,48px);border-radius:0 0 60px 60px/0 0 40px 40px;background:radial-gradient(circle at 50% 15%,#fff1c9 0%,#ffb35c 30%,#e8432f 62%,#8c1520 100%);box-shadow:0 0 36px 10px rgba(255,130,70,.5),inset 0 -8px 14px rgba(110,0,20,.45)}
.jyh-cat__glow{position:absolute;left:-20%;right:-20%;top:-34px;height:60px;background:radial-gradient(ellipse at 50% 100%,rgba(255,200,120,.38),transparent 70%)}
.jyh-cat__basket.is-catch .jyh-cat__body{animation:jyhCatch 360ms var(--jy-ease-out)}
@keyframes jyhCatch{40%{filter:brightness(1.7);transform:scaleY(.86)}}
.jyh-cat__note{min-height:1.5em;color:var(--jy-sand);font-size:.875rem;font-weight:650;text-align:center}
.jyh-cat__note b{color:#fff8ee}
@media (max-width:560px){.jyh-cat__prompt{min-height:64px;padding:10px 14px}.jyh-cat__goal{width:56px;height:56px;padding-top:17px}.jyh-cat__goal b{font-size:1.1rem}}

/* ==========================================================================
   H. GAME 4 · TIA CHỚP
   ========================================================================== */
.jyh-fl{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,1.8vh,18px);width:100%;max-width:660px;margin:0 auto}
.jyh-fl__top{display:flex;align-items:center;justify-content:center;gap:20px;width:100%}
.jyh-fl__clock{position:relative;display:grid;place-items:center;width:clamp(88px,13vh,124px);aspect-ratio:1}
.jyh-fl__clock svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.jyh-fl__track{fill:none;stroke:rgba(255,255,255,.12);stroke-width:7}
.jyh-fl__ring{fill:none;stroke:#ffc53d;stroke-width:7;stroke-linecap:round;stroke-dasharray:276.5;transition:stroke-dashoffset 200ms linear;filter:drop-shadow(0 0 6px rgba(255,197,61,.75))}
.jyh-fl__clock.is-low .jyh-fl__ring{stroke:#ff6b5b;filter:drop-shadow(0 0 6px rgba(255,107,91,.8))}
.jyh-fl__time{position:relative;color:#fff3d6;font:500 clamp(2.1rem,5.2vh,3rem)/1 var(--jy-font-num)}
.jyh-fl__clock.is-low .jyh-fl__time{color:#ffb3a8;animation:jyhBeat 1s ease-in-out infinite}
@keyframes jyhBeat{0%,100%{transform:scale(1)}15%{transform:scale(1.1)}30%{transform:scale(1)}45%{transform:scale(1.05)}}
.jyh-fl__side{display:grid;justify-items:start;gap:8px}
.jyh-fl__mult{min-height:1.4em;color:#ffc53d;font-size:1.15rem;font-weight:900;letter-spacing:.06em;text-shadow:0 0 14px rgba(255,190,50,.6)}
.jyh-fl__goal{display:flex;align-items:baseline;gap:4px;padding:6px 14px;border:1px solid rgba(255,197,61,.45);border-radius:999px;background:rgba(0,0,0,.32)}
.jyh-fl__goal b{color:#fff1c1;font:500 1.45rem/1 var(--jy-font-num)}
.jyh-fl__goal small{color:var(--jy-sand)}
.jyh-fl__goal span{margin-left:6px}
.jyh-fl__stage{position:relative;width:100%;height:clamp(260px,44vh,450px);perspective:1100px}
.jyh-fl__card{position:absolute;inset:0;display:grid;align-content:center;justify-items:center;gap:12px;padding:30px 24px 24px;overflow:hidden;border:1px solid rgba(255,248,236,.95);border-radius:18px;background:linear-gradient(180deg,#fffdf8,#f5e8d6);color:var(--jy-ink);text-align:center;touch-action:pan-y;cursor:grab;box-shadow:0 34px 64px -28px rgba(0,0,0,.95),inset 0 0 0 9px #fffdf8,inset 0 0 0 10px rgba(201,162,102,.45);transition:transform 260ms var(--jy-ease-out),opacity 260ms,filter 260ms;will-change:transform}
.jyh-fl__card.is-gold{border-color:#ffe08a;background:linear-gradient(160deg,#fffaf0,#f7e2b3);box-shadow:0 0 0 3px rgba(255,210,122,.75),0 0 46px 6px rgba(255,200,80,.45),0 34px 64px -28px rgba(0,0,0,.95),inset 0 0 0 9px #fdf3df,inset 0 0 0 10px rgba(201,162,102,.7)}
.jyh-fl__card.is-gold::before{content:"";position:absolute;top:16px;right:18px;width:22px;height:28px;background:#e9a81a;clip-path:polygon(55% 0,0 58%,42% 58%,30% 100%,100% 38%,58% 38%)}
.jyh-fl__fuse{position:absolute;left:16px;right:16px;top:12px;height:6px;border-radius:3px;background:linear-gradient(90deg,#ff9f1c,#ffe08a);box-shadow:0 0 12px rgba(255,160,30,.75);transform-origin:left}
.jyh-fl__fuse.is-low{background:linear-gradient(90deg,#c0262d,#ff6b5b);box-shadow:0 0 12px rgba(255,80,60,.8)}
.jyh-fl__type{color:var(--jy-accent);font-size:.6875rem;font-weight:850;letter-spacing:.16em;text-transform:uppercase}
.jyh-fl__han{font-size:clamp(3.4rem,10.5vh,6.2rem);line-height:1.05}
.jyh-fl__eq{color:var(--jy-faint);font-size:1.4rem;line-height:1}
.jyh-fl__claim{max-width:24ch;font-size:clamp(1.15rem,2.7vh,1.55rem);font-weight:750;line-height:1.35}
.jyh-fl__claim.jyh-py{color:var(--jy-accent)}
.jyh-fl__claim--top{font-size:clamp(1.25rem,3vh,1.75rem);font-weight:800}
.jyh-fl__ask{color:var(--jy-muted);font-size:.9375rem;font-weight:650}
.jyh-fl__say{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:0 18px;border:1px solid var(--jy-line);border-radius:999px;background:#fff;color:var(--jy-accent);font-weight:800}
.jyh-fl__card.is-out-r{opacity:0;transform:translateX(120%) rotate(12deg)}
.jyh-fl__card.is-out-l{opacity:0;transform:translateX(-120%) rotate(-12deg)}
.jyh-fl__card.is-burnt{opacity:0;filter:sepia(1) brightness(.35);transform:scale(.92)}
.jyh-fl__card.is-in{animation:jyhGCardIn 260ms var(--jy-ease-out) both}
.jyh-fl__verdict{position:absolute;top:22px;left:20px;padding:4px 10px;border-radius:4px;font-size:.875rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase;opacity:0;transition:opacity 120ms}
.jyh-fl__verdict--yes{left:auto;right:20px;border:2px solid var(--jy-ok);color:var(--jy-ok)}
.jyh-fl__verdict--no{border:2px solid var(--jy-bad);color:var(--jy-bad)}
.jyh-fl__flash{position:absolute;inset:0;z-index:5;border-radius:18px;pointer-events:none;animation:jyhFlashFx 440ms ease-out forwards}
.jyh-fl__flash--ok{background:radial-gradient(circle,rgba(160,240,200,.75),transparent 70%)}
.jyh-fl__flash--bad{background:radial-gradient(circle,rgba(255,150,130,.75),transparent 70%)}
@keyframes jyhFlashFx{from{opacity:1}to{opacity:0}}
.jyh-fl__answers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;width:100%}
.jyh-fl__btn{display:flex;align-items:center;justify-content:center;gap:10px;min-height:clamp(60px,9vh,80px);border:2px solid;border-radius:14px;font-size:1.2rem;font-weight:900;box-shadow:0 16px 30px -16px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.8);transition:transform var(--jy-t-fast) var(--jy-ease-out)}
.jyh-fl__btn .jyh-i{font-size:1.4rem;stroke-width:2.6}
.jyh-fl__btn .jyh-kbd{border-color:currentColor;opacity:.6}
.jyh-fl__btn:hover{transform:translateY(-2px)}
.jyh-fl__btn:active{transform:scale(.97)}
.jyh-fl__btn--no{border-color:#ff8a7a;background:linear-gradient(180deg,#fff6f3,#f6d6cf);color:#a5352e}
.jyh-fl__btn--yes{border-color:#6fd6a6;background:linear-gradient(180deg,#f3fff9,#cfeedd);color:#256b4c}
.jyh-fl__correct{min-height:1.5em;color:var(--jy-sand);font-size:.9rem;font-weight:650;text-align:center}
.jyh-fl__correct b{color:#fff8ee}
.jyh-arena .jyh-ok{color:#9ff0d0}
.jyh-arena .jyh-bad{color:#ff9d8f}
.jyh-arena .jyh-muted{color:var(--jy-sand)}

/* Giảm chuyển động */
body.jyh-reduce .jyh-amb i,
body.jyh-reduce .jyh-bt__waves,body.jyh-reduce .jyh-fl__time,body.jyh-reduce .jyh-lnode.is-current .jyh-lnode__disc,body.jyh-reduce .jyh-cat__item--power,body.jyh-reduce .jyh-gcount__ring{animation:none!important}


/* ---------- v1.6 · Nét bút Hán tự (viết chữ, chấm thứ tự nét) ---------- */
@keyframes jyhInkStroke{0%{stroke-dashoffset:100;opacity:1}16%,78%{stroke-dashoffset:0;opacity:1}92%,100%{stroke-dashoffset:0;opacity:0}}
.jyh-arena--brush::before{background-image:none}
.jyh-arena--brush .jyh-amb i{background:radial-gradient(38% 30% at 18% 28%,rgba(217,164,65,.14),transparent 70%),radial-gradient(34% 26% at 82% 72%,rgba(195,66,63,.12),transparent 70%);animation:jyhInkDrift 24s ease-in-out infinite alternate}
.jyh-arena--brush .jyh-amb i:nth-child(2){animation-duration:31s;animation-direction:alternate-reverse;opacity:.35}
.jyh-arena--brush .jyh-amb i:nth-child(3){display:none}
@keyframes jyhInkDrift{from{transform:translate(-3%,-2%) scale(1)}to{transform:translate(3%,2%) scale(1.08)}}
.jyh-br{flex:1 0 auto;display:grid;place-items:start center;padding-top:clamp(2px,1.2vh,12px)}
.jyh-br__card{width:min(540px,100%);display:grid;justify-items:center;gap:6px;text-align:center}
.jyh-br__ask{margin:0;color:rgba(255,248,238,.8);font-size:.875rem;font-weight:700;letter-spacing:.01em}
.jyh-br__word{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;font-size:clamp(1.9rem,6vw,2.6rem);line-height:1.15}
.jyh-br__word span{min-width:1.15em;padding:0 4px 2px;border-bottom:3px solid transparent;color:rgba(255,248,238,.5)}
.jyh-br__word span.is-on{color:var(--g1,#d9a441);border-bottom-color:var(--g1,#d9a441)}
.jyh-br__word span.is-done{color:#fff8ee}
.jyh-br__py{margin:0;color:#ffe3a6;font-size:1.05rem;font-weight:700}
.jyh-br__mean{margin:0;max-width:46ch;color:rgba(255,248,238,.86);font-size:.95rem;line-height:1.45}
.jyh-br__pad{position:relative;width:min(340px,84vw,44vh);aspect-ratio:1;margin-top:6px;border-radius:12px;background:#fbf4e8;box-shadow:0 18px 50px rgba(0,0,0,.45),inset 0 0 0 2px rgba(122,34,40,.55);touch-action:none;overflow:hidden;user-select:none;-webkit-user-select:none}
.jyh-br__pad::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(rgba(122,34,40,.3),rgba(122,34,40,.3)) center/100% 1px no-repeat,linear-gradient(90deg,rgba(122,34,40,.3),rgba(122,34,40,.3)) center/1px 100% no-repeat,linear-gradient(45deg,transparent calc(50% - .5px),rgba(122,34,40,.15) 50%,transparent calc(50% + .5px)),linear-gradient(-45deg,transparent calc(50% - .5px),rgba(122,34,40,.15) 50%,transparent calc(50% + .5px))}
.jyh-br__svg{position:relative;z-index:1;display:grid;place-items:center;width:100%;height:100%}
.jyh-br__meter{width:min(340px,84vw,44vh);height:6px;border-radius:9px;background:rgba(255,255,255,.14);overflow:hidden}
.jyh-br__meter i{display:block;height:100%;transform-origin:left;background:linear-gradient(90deg,var(--g1,#d9a441),#ffe3a6)}
.jyh-br__meter.is-low i{background:linear-gradient(90deg,#c3423f,#ff8f6b)}
.jyh-br__meter.is-low{animation:jyhBrPulse .9s ease-in-out infinite}
.jyh-br.is-hurry .jyh-br__pad{animation:jyhBrHurry .5s ease-in-out infinite alternate}
@keyframes jyhBrPulse{50%{box-shadow:0 0 0 4px rgba(255,120,100,.28)}}
@keyframes jyhBrHurry{from{box-shadow:0 18px 50px rgba(0,0,0,.45),inset 0 0 0 2px rgba(122,34,40,.55)}to{box-shadow:0 18px 50px rgba(0,0,0,.45),inset 0 0 0 4px #e0574d,0 0 26px rgba(224,87,77,.55)}}
.jyh-br__timer[aria-pressed="true"]{border-color:rgba(217,164,65,.7);color:#ffe3a6}
.jyh-br__timer .jyh-i{fill:none!important;stroke:currentColor}
.jyh-gintro__opts{width:min(440px,100%);margin:2px auto 6px;padding:4px 14px;border:1px solid rgba(255,248,239,.18);border-radius:14px;background:rgba(255,248,239,.06);text-align:left}
.jyh-switch--night{color:#fff8ef;cursor:pointer}
.jyh-switch--night .jyh-switch__text{display:grid;grid-template-columns:auto 1fr;align-items:center;column-gap:8px}
.jyh-switch--night .jyh-switch__text .jyh-i{width:18px;height:18px;color:#ffe3a6}
.jyh-switch--night .jyh-switch__text small{grid-column:1/-1;color:rgba(255,248,239,.72)}
.jyh-switch--night .jyh-switch__track{background:rgba(255,248,239,.24)}
.jyh-switch--night[aria-checked="true"] .jyh-switch__track{background:#d9a441}
@media (prefers-reduced-motion:reduce){.jyh-br__meter.is-low,.jyh-br.is-hurry .jyh-br__pad{animation:none}.jyh-br.is-hurry .jyh-br__pad{box-shadow:0 18px 50px rgba(0,0,0,.45),inset 0 0 0 4px #e0574d}}
.jyh-br__stroke{margin:2px 0 0;color:rgba(255,248,238,.82);font-weight:800;font-size:.875rem;font-variant-numeric:tabular-nums}
.jyh-br__verdict{min-height:1.7em;margin:0}
.jyh-br__v{display:inline-block;padding:3px 11px;border-radius:999px;font-weight:800;font-size:.9rem}
.jyh-br__v--perfect{background:rgba(47,143,107,.3);color:#b6f3d6}
.jyh-br__v--ok{background:rgba(217,164,65,.24);color:#ffe3a6}
.jyh-br__v--bad{background:rgba(195,66,63,.3);color:#ffc9be}
.jyh-br__tools{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:2px}
.jyh-br__tools .jyh-ibtn[disabled]{opacity:.45;cursor:not-allowed}
.jyh-br__keys{margin:2px 0 0;color:rgba(255,248,238,.55);font-size:.75rem}
@media (hover:none){.jyh-br__keys{display:none}}
@media (prefers-reduced-motion:reduce){.jyh-art__s{animation:none;stroke-dashoffset:0}.jyh-arena--brush .jyh-amb i{animation:none}}

/* ---------- v1.6.3 · Hành trình theo cấp: HSK 1–3 · 4–6 · 7–9 ---------- */
.jyh-gtracks{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;margin:0 0 18px;padding:14px 16px;border:1px solid var(--jy-line);border-radius:var(--jy-r-card);background:var(--jy-surface)}
.jyh-gtracks__txt{flex:1 1 300px;min-width:0}
.jyh-gtracks__txt p{margin:4px 0 0;color:var(--jy-muted);font-size:.875rem;line-height:1.5}
.jyh-gtrack{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;flex:0 1 460px;min-width:min(100%,300px);padding:4px;border:1px solid var(--jy-line);border-radius:10px;background:var(--jy-cream)}
.jyh-gtrack__btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:0;min-height:52px;padding:6px 8px;border:0;border-radius:7px;background:transparent;color:var(--jy-muted);font:inherit;cursor:pointer;transition:background-color var(--jy-t-fast),color var(--jy-t-fast),box-shadow var(--jy-t-fast)}
.jyh-gtrack__btn b{display:flex;align-items:center;gap:5px;font-size:.9375rem;font-weight:750;line-height:1.2;color:inherit;white-space:nowrap}
.jyh-gtrack__btn b .jyh-i{font-size:.875rem}
.jyh-gtrack__btn small{max-width:100%;overflow:hidden;text-overflow:ellipsis;font-size:.75rem;font-weight:600;line-height:1.2;white-space:nowrap;opacity:.85}
.jyh-gtrack__btn:hover{color:var(--jy-ink);background:rgba(255,255,255,.6)}
.jyh-gtrack__btn[aria-checked="true"]{background:#fff;color:var(--jy-accent);box-shadow:0 2px 10px rgba(37,23,17,.14)}
.jyh-gtrack__btn[aria-checked="true"] small{color:var(--jy-ink)}
.jyh-gtrack__btn.is-locked{color:var(--jy-faint)}
.jyh-gtrack__btn:focus-visible{outline:2px solid var(--jy-gold);outline-offset:2px}
.jyh-gtrack--night{border-color:rgba(255,226,168,.25);background:rgba(0,0,0,.28)}
.jyh-gtrack--night .jyh-gtrack__btn{color:rgba(255,248,238,.74)}
.jyh-gtrack--night .jyh-gtrack__btn:hover{background:rgba(255,255,255,.08);color:#fff8ee}
.jyh-gtrack--night .jyh-gtrack__btn[aria-checked="true"]{background:var(--g2,#ffd27a);color:#2a1912;box-shadow:0 0 18px -4px var(--gglow,rgba(255,210,122,.5))}
.jyh-gtrack--night .jyh-gtrack__btn[aria-checked="true"] small{color:#2a1912}
.jyh-gtrack--night .jyh-gtrack__btn.is-locked{color:rgba(255,248,238,.48)}
.jyh-lmap__tracks{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px 18px}
.jyh-lmap__tracks .jyh-kicker{color:var(--g2)}
.jyh-lchap.is-noaccess{opacity:1;filter:none}
.jyh-lchap.is-noaccess .jyh-lnodes{opacity:.45;filter:saturate(.4)}
.jyh-lchap__need{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;margin:-6px 0 16px;padding:10px 12px;border:1px dashed rgba(255,226,168,.4);border-radius:10px;color:#fff3df;font-size:.875rem;line-height:1.45}
.jyh-lchap__need>.jyh-i{color:var(--g2)}
.jyh-lchap__need span{flex:1 1 200px}
@media (max-width:600px){
  .jyh-gtracks{padding:12px}
  .jyh-gtrack{flex-basis:100%}
  .jyh-gtrack__btn{min-height:50px;padding:6px 4px}
  .jyh-gtrack__btn b{font-size:.875rem}
}

/* ==========================================================================
   v1.6.4 · Trò 6: Thả đèn trời (phát âm)
   ========================================================================== */
.jyh-sky{display:block;overflow:visible}
.jyh-sky__ch{font-family:var(--jy-font-han);font-weight:600}
.jyh-sky__halo{opacity:0;transition:opacity .4s}
.jyh-sky.is-lit .jyh-sky__halo{opacity:calc(.45 + var(--fl,1) * .55)}
.jyh-sky__flame{transform-box:view-box;transform-origin:50px 126px;transform:scale(calc(.25 + var(--fl,1) * .95));opacity:calc(.25 + var(--fl,1));transition:transform .12s linear}
.jyh-sky.is-lit .jyh-sky__flame path{animation:jyhFlicker .32s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:50% 100%}
@keyframes jyhFlicker{from{transform:scale(1,1)}to{transform:scale(.9,1.12)}}
/* thẻ ở tab Trò chơi */
@keyframes jyhBob{from{transform:translateY(0)}to{transform:translateY(-10px)}}
/* sân chơi */
.jyh-arena--speak::before{background-image:url(hsk1.png);background-position:center 70%;opacity:.3}
.jyh-arena--speak{background:linear-gradient(180deg,#0d0a22 0%,#1c1642 46%,#2a1a33 72%,#08161a 100%)}
.jyh-sp{position:relative;flex:1 1 auto;display:grid;grid-template-rows:auto 1fr auto;width:100%;max-width:760px;min-height:0;margin:0 auto;gap:8px}
.jyh-sp__sky{position:absolute;inset:0 -30vw;pointer-events:none;overflow:hidden;z-index:0}
.jyh-sp__sky .jyh-sky{position:absolute;left:var(--x);top:var(--y);width:var(--w);height:auto;animation:jyhBob 3.4s ease-in-out infinite alternate;opacity:.9}
.jyh-sp>*{position:relative;z-index:1}
/* bầu trời đèn bay là lớp nền phủ kín, không chiếm một hàng của lưới (giữ hàng 1fr cho đèn và chữ) */
.jyh-sp>.jyh-sp__sky{position:absolute;z-index:0}
.jyh-sp__top{display:flex;justify-content:center;align-items:flex-start}
.jyh-sp__dots{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:5px;padding:6px 12px;border-radius:999px;background:rgba(20,14,40,.55);border:1px solid rgba(232,200,149,.28)}
.jyh-sp__dots>i{width:11px;height:15px;border-radius:5px 5px 4px 4px;background:rgba(255,255,255,.18)}
.jyh-sp__dots>i.is-on{background:linear-gradient(180deg,#ffe08a,#f09a3e);box-shadow:0 0 8px rgba(255,190,90,.8)}
.jyh-sp__dots>i.is-out{background:#4a3a3a}
.jyh-sp__dots>i.is-cur{outline:2px solid rgba(232,200,149,.75);outline-offset:1px}
.jyh-sp__tries{display:inline-flex;gap:3px;margin-left:8px;padding-left:10px;border-left:1px solid rgba(232,200,149,.3)}
.jyh-sp__tries b{width:9px;height:12px;border-radius:50% 50% 45% 45%/60% 60% 40% 40%;background:rgba(255,255,255,.18)}
.jyh-sp__tries b.is-on{background:radial-gradient(circle at 50% 70%,#fff3c4,#ffb347 60%,#ff7a3d);box-shadow:0 0 6px rgba(255,170,80,.7)}
.jyh-sp__main{display:grid;justify-items:center;align-content:center;gap:clamp(6px,1.4vh,14px);text-align:center;min-height:0}
.jyh-sp__lan{position:relative;width:clamp(96px,16vh,150px);aspect-ratio:100/150}
.jyh-sp__lan .jyh-sky{position:absolute;inset:0;width:100%;height:100%}
.jyh-sp__lan.is-fly .jyh-sky{animation:jyhSkyFly 2.3s cubic-bezier(.35,.05,.4,1) forwards}
.jyh-sp__lan.is-out .jyh-sky{filter:grayscale(.6) brightness(.8)}
@keyframes jyhSkyFly{0%{transform:translateY(0) scale(1)}100%{transform:translate(24px,-58vh) scale(.5);opacity:0}}
.jyh-sp__word{display:grid;gap:6px;justify-items:center}
.jyh-sp__han{font-size:clamp(2.4rem,7.5vh,3.6rem);line-height:1.05;letter-spacing:.04em;color:#fff8ee;text-shadow:0 2px 18px rgba(0,0,0,.6)}
.jyh-sp__han.is-sent{font-size:clamp(1.5rem,4.6vh,2.2rem);letter-spacing:.02em;max-width:22ch}
.jyh-sp__syls{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 10px}
.jyh-sp__syl{display:grid;justify-items:center;gap:1px;min-width:40px}
.jyh-sp__syl svg{width:30px;height:18px;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.jyh-sp__syl b{font-size:1.0625rem;font-weight:700;color:#fff8ee}
.jyh-sp__syl--t1 svg{stroke:#ff7a6e}.jyh-sp__syl--t2 svg{stroke:#ffc35a}.jyh-sp__syl--t3 svg{stroke:#6fd6b5}.jyh-sp__syl--t4 svg{stroke:#93a9ff}.jyh-sp__syl--t5 svg{stroke:#c9b8a8}
.jyh-sp__syl.is-hidden b{filter:blur(6px);opacity:.6}
.jyh-sp__mean{color:#e9dcc8;font-weight:600;max-width:46ch}
.jyh-sp__note{max-width:52ch;margin:0;color:#cbbfae;font-size:.8125rem;line-height:1.5}
.jyh-sp__tools{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
.jyh-sbtn{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:0 14px;border-radius:999px;border:1px solid rgba(232,200,149,.45);background:rgba(20,14,40,.55);color:#fff8ee;font-weight:700;font-size:.875rem;cursor:pointer}
.jyh-sbtn .jyh-i{font-size:1rem}
.jyh-sbtn[aria-pressed="true"]{background:rgba(240,199,94,.2);border-color:#f0c75e}
.jyh-sbtn[hidden]{display:none}
.jyh-sp__foot{display:grid;justify-items:center;gap:8px;padding-bottom:4px}
.jyh-sp__state{min-height:1.4em;margin:0;font-weight:700;color:#f3e3c8;font-size:.9375rem;text-align:center}
.jyh-sp__heard{min-height:1.2em;margin:0;font-size:1.0625rem;color:#cfc3ff}
.jyh-sp__mic{position:relative;width:84px;height:84px;border-radius:50%;border:0;cursor:pointer;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,#9b2a32,#6a161d);box-shadow:0 0 0 4px rgba(240,199,94,.75),0 14px 30px -8px rgba(0,0,0,.7);color:#fff8ee}
.jyh-sp__mic .jyh-i{font-size:2rem}
.jyh-sp__mic::before,.jyh-sp__mic::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid rgba(240,199,94,.7);opacity:0}
.jyh-sp__mic.is-on{background:radial-gradient(circle at 50% 35%,#c23a43,#7f1b23)}
.jyh-sp__mic.is-on::before{animation:jyhMicRing 1.4s ease-out infinite}.jyh-sp__mic.is-on::after{animation:jyhMicRing 1.4s ease-out .7s infinite}
.jyh-sp__mic:disabled{opacity:.5;cursor:default}
@keyframes jyhMicRing{from{transform:scale(1);opacity:.9}to{transform:scale(1.6);opacity:0}}
.jyh-sp__fb{display:grid;gap:8px;justify-items:center;width:100%;max-width:560px}
.jyh-sp__fb[hidden]{display:none}
.jyh-sp__msg{margin:0;font-weight:800;font-size:1rem;text-align:center}
.jyh-sp__msg.is-ok{color:#9ff0c6}.jyh-sp__msg.is-near{color:#ffd27a}.jyh-sp__msg.is-bad{color:#ffb0a6}
.jyh-sp__chips{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}
.jyh-sp__chip{display:grid;justify-items:center;padding:5px 10px;border-radius:10px;border:1px solid;min-width:54px}
.jyh-sp__chip b{font-size:1.25rem;font-weight:500;line-height:1.1;color:#fff8ee}
.jyh-sp__chip span{font-size:.75rem;font-weight:700;color:#f3e3c8}
.jyh-sp__chip.is-ok{border-color:rgba(159,240,198,.6);background:rgba(47,107,82,.35)}
.jyh-sp__chip.is-tone{border-color:rgba(255,210,122,.7);background:rgba(160,110,20,.3)}
.jyh-sp__chip.is-miss{border-color:rgba(255,160,150,.6);background:rgba(165,53,46,.35)}
.jyh-sp__acts{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
.jyh-sp__judge{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
.jyh-sp__privacy{max-width:60ch;margin:2px 0 0;color:#bfb2a0;font-size:.75rem;text-align:center}
@media (max-height:700px){.jyh-sp__mic{width:68px;height:68px}.jyh-sp__lan{width:84px}.jyh-sp__privacy{display:none}}

/* ==========================================================================
   v1.6.5 · Bộ hình trò chơi (theo bản mẫu art đã duyệt): đèn lồng gân vàng,
   thuyền rồng buồm sọc, quả cầu sao + đèn hoa sen, mây giông, bút lông + nghiên mực.
   Chuyển động nhẹ, tắt khi chọn giảm chuyển động.
   ========================================================================== */
.jya{display:block;overflow:visible}
.jya-t{font-family:var(--jy-font-han)}
.jya-u{font-family:var(--jy-font-ui)}
.jya-lantern .jya-sway{transform-box:view-box;transform-origin:60px 0}
.jya-lantern.is-sway .jya-sway{animation:jyaSway 5.2s ease-in-out infinite alternate}
.jya-lantern .jya-fringe{transform-box:view-box;transform-origin:60px 139px}
.jya-lantern.is-sway .jya-fringe{animation:jyaFringe 3.1s ease-in-out infinite alternate}
.jya-lantern.is-lit .jya-halo,.jya-lantern.is-lit .jya-inglow{animation:jyaGlow 3.4s ease-in-out infinite alternate}
@keyframes jyaSway{from{transform:rotate(-2.4deg)}to{transform:rotate(2.4deg)}}
@keyframes jyaFringe{from{transform:rotate(3deg)}to{transform:rotate(-3deg)}}
@keyframes jyaGlow{from{opacity:.78}to{opacity:1}}
.jya-boat .jya-oar{transform-box:view-box;transform-origin:0 0}
.jya-boat.is-rowing .jya-oar{animation:jyaOar 1.15s cubic-bezier(.5,0,.4,1) infinite}
.jya-boat .jya-flag{transform-box:view-box;transform-origin:155.5px 10px}
.jya-boat.is-rowing .jya-flag{animation:jyaFlag 1.4s ease-in-out infinite alternate}
.jya-boat.is-rowing .jya-sail{animation:jyaSail 2.3s ease-in-out infinite alternate;transform-box:view-box;transform-origin:160px 30px}
@keyframes jyaOar{0%{transform:rotate(0)}45%{transform:rotate(17deg)}100%{transform:rotate(0)}}
@keyframes jyaFlag{from{transform:skewY(0) scaleX(1)}to{transform:skewY(-5deg) scaleX(.9)}}
@keyframes jyaSail{from{transform:scaleX(1)}to{transform:scaleX(1.025)}}
.jya-lotus .jya-flame path{animation:jyaFlicker .32s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:50% 100%}
@keyframes jyaFlicker{from{transform:scale(1,1)}to{transform:scale(.9,1.12)}}
.jya-storm .jya-rain{animation:jyaRain .9s linear infinite}
.jya-storm .jya-bolt{animation:jyaBolt 3.6s steps(1) infinite;filter:drop-shadow(0 0 6px rgba(255,214,90,.8))}
@keyframes jyaRain{from{transform:translate(0,-6px);opacity:0}30%{opacity:1}to{transform:translate(-4px,10px);opacity:0}}
@keyframes jyaBolt{0%,62%,70%,100%{opacity:1}64%,68%{opacity:.25}}
.jya-brush .jya-drip{animation:jyaDrip 2.6s ease-in infinite}
@keyframes jyaDrip{0%,55%{transform:translateY(0);opacity:0}60%{opacity:1}100%{transform:translateY(12px);opacity:0}}
.jya-orb{filter:drop-shadow(0 6px 12px rgba(0,0,0,.25))}
/* dây đèn treo: --lw = bề rộng một đèn */
.jya-garland{position:relative;width:100%;height:100%;pointer-events:none}
.jya-garland__rope{position:absolute;left:0;top:0;width:100%}
.jya-garland__item{position:absolute;width:calc(var(--lw,74px) * var(--s,1));transform:translateX(-50%)}
.jya-garland__item .jya-sway{animation-delay:var(--dl,0s)}
/* Đèn trên dây lắc bằng transform của khung HTML (trình duyệt xoay sẵn ảnh đèn, không vẽ lại SVG mỗi khung hình);
   ánh sáng của đèn đã thắp là một lớp riêng chỉ đổi độ mờ */
.jya-garland .jya-garland__item{transform-origin:50% 0;animation:jyaSwayItem 5.2s ease-in-out infinite alternate;animation-delay:var(--dl,0s);will-change:transform}
.jya-garland .jya-lantern .jya-sway,.jya-garland .jya-lantern .jya-fringe,.jya-garland .jya-lantern .jya-halo,.jya-garland .jya-lantern .jya-inglow{animation:none}
.jya-garland .jya-garland__item.is-lit::before{content:"";position:absolute;z-index:-1;left:-34%;right:-34%;top:6%;height:72%;border-radius:50%;background:radial-gradient(closest-side,rgba(255,190,90,.38),rgba(255,138,61,.12) 62%,transparent);animation:jyaGlowEl 3.4s ease-in-out infinite alternate;pointer-events:none}
@keyframes jyaSwayItem{from{transform:translateX(-50%) rotate(-2.4deg)}to{transform:translateX(-50%) rotate(2.4deg)}}
@keyframes jyaGlowEl{from{opacity:.55}to{opacity:1}}
.jya-garland__item.is-pop .jya-lantern{animation:jyaLit 700ms var(--jy-ease-out)}
@keyframes jyaLit{0%{transform:scale(.82);filter:brightness(1.8)}55%{transform:scale(1.08)}100%{transform:scale(1);filter:none}}
/* sóng nước */
.jya-waves{position:absolute;left:-50%;width:200%;height:14px;background:radial-gradient(14px 5px at 50% 100%,transparent 92%,rgba(159,224,206,.42) 96%,transparent 100%) 0 0/48px 14px repeat-x;animation:jyaWaves 9s linear infinite;pointer-events:none}
.jya-waves--2{animation-duration:13s;opacity:.6}
@keyframes jyaWaves{to{transform:translateX(48px)}}

/* (v1.7: ảnh bìa và băng "Thử thách hôm nay" nay là ảnh vẽ đặt bằng CSS — xem 10c-art.css) */

/* ---------- Đèn lồng Hán tự: dây đèn, thẻ có góc viền vàng ---------- */
.jyh-lt__string{--lw:clamp(36px,min(8vh,8.5vw),84px);display:block;width:100%;height:calc(var(--lw) * 1.77 + 26px);min-height:0}
.jyh-lt__garland .jya-garland__item{width:var(--lw)}
.jyh-lt__face{--face:linear-gradient(180deg,#fffdf7,#f3e7d2);--corner:rgba(185,144,84,.62);border:0;border-radius:12px;background:
  linear-gradient(var(--corner),var(--corner)) 9px 9px/16px 2px no-repeat,linear-gradient(var(--corner),var(--corner)) 9px 9px/2px 16px no-repeat,
  linear-gradient(var(--corner),var(--corner)) right 9px bottom 9px/16px 2px no-repeat,linear-gradient(var(--corner),var(--corner)) right 9px bottom 9px/2px 16px no-repeat,var(--face);
  box-shadow:0 10px 24px -10px rgba(0,0,0,.6),inset 0 0 0 1px rgba(201,162,102,.6),inset 0 0 0 5px #fffaf0,inset 0 0 0 6px rgba(201,162,102,.35)}
.jyh-lt__card--py .jyh-lt__face{--face:linear-gradient(180deg,#fff7f3,#f7dfd5)}
.jyh-lt__card--mean .jyh-lt__face{--face:linear-gradient(180deg,#fffdf6,#f2e8d0)}
.jyh-lt__card.is-sel .jyh-lt__face{box-shadow:0 0 0 3px #f0c75e,0 0 28px rgba(240,199,94,.55),inset 0 0 0 1px rgba(201,162,102,.6),inset 0 0 0 5px #fffaf0}
.jyh-lt__card.is-done{opacity:.38;filter:saturate(.4);transform:none;pointer-events:none}
.jyh-lt__card.is-done::after{content:"✓";position:absolute;right:10px;bottom:10px;z-index:2;display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--jy-ok,#2f6b52);color:#fff;font:800 14px/1 var(--jy-font-ui)}
@media (max-width:560px){.jyh-lt__face{--corner:rgba(185,144,84,.5);background-size:12px 2px,2px 12px,12px 2px,2px 12px,auto;background-position:7px 7px,7px 7px,right 7px bottom 7px,right 7px bottom 7px,0 0}.jyh-lt__card.is-done::after{right:6px;bottom:6px;width:20px;height:20px;font-size:11px}}

/* ---------- Đua thuyền: thuyền rồng, mặt trống ---------- */
.jyh-bt__river{--rh:clamp(190px,34vh,370px);--L:calc(var(--rh) / var(--lanes,4));height:var(--rh)}
.jyh-bt__boat{top:calc(var(--L) * -.02);width:min(calc(var(--L) * 1.78),26vw,200px);height:auto;margin-top:0}
@media (max-width:560px){.jyh-bt__river{--rh:clamp(170px,30vh,330px)}.jyh-bt__boat{top:calc(var(--L) * .14)}}
.jyh-bt__boat .jya-boat{width:100%;height:auto}
.jyh-bt__boat.is-me .jya-boat{filter:drop-shadow(0 0 10px rgba(255,170,90,.55))}
.jyh-bt__boat.is-row .jya-boat{animation:jyhBoost 420ms var(--jy-ease-out)}
.jyh-bt__boat.is-nitro .jya-boat{filter:drop-shadow(0 0 16px rgba(255,210,122,.95))}
.jyh-bt__wake{bottom:16%}
.jyh-bt__tag{padding:1px 6px;border-radius:4px;background:rgba(6,32,30,.55)}
.jyh-bt__target{border:0;background:radial-gradient(circle closest-side,#f7ead0 0 75%,#d9bf90 76% 79%,#8f1f2c 80% 93%,#5c1219 94%);box-shadow:0 18px 30px rgba(0,0,0,.5),0 0 0 3px rgba(240,199,94,.55)}
.jyh-bt__target::before{content:"";position:absolute;inset:0;border-radius:50%;background:repeating-conic-gradient(from 0deg,#f0c75e 0 1.6deg,transparent 1.6deg 22.5deg);-webkit-mask:radial-gradient(circle closest-side,transparent 0 84%,#000 85% 88%,transparent 89%);mask:radial-gradient(circle closest-side,transparent 0 84%,#000 85% 88%,transparent 89%)}
.jyh-bt__ring{border-color:rgba(240,199,94,.85);box-shadow:0 0 22px rgba(240,199,94,.4)}
.jyh-bt__han{color:#3a1d12;font-size:min(clamp(2.4rem,6.4vh,4rem),calc(clamp(150px,23vh,214px) * .6 / var(--n,1)))}
.jyh-bt__han span{color:#3a1d12;opacity:.45}
.jyh-bt__han span.is-on{color:var(--jy-accent,#7a2228);opacity:1;text-shadow:0 0 14px rgba(240,199,94,.55)}
.jyh-bt__han span.is-done{color:#2f6b52;opacity:1}
.jyh-bt__han.is-hidden span{color:#8a6a52;opacity:.75}
.jyh-bt--marks .jyh-bt__han,.jyh-bt--plain .jyh-bt__han{font-size:min(clamp(1.8rem,4.4vh,2.6rem),calc(clamp(150px,23vh,214px) * .6 / var(--n,1)))}
.jyh-bt__syl b{color:#3a1d12;opacity:.35}
.jyh-bt__syl.is-active b{color:var(--jy-accent,#7a2228);opacity:1;text-shadow:none}
.jyh-bt__syl.is-done b{color:#2f6b52;opacity:.95}
.jyh-bt__word{min-height:clamp(160px,24vh,226px)}
.jyh-bt__mean{margin-top:-2px}

/* ---------- Mưa sao: quả cầu sao, đèn hoa sen ---------- */
.jyh-cat__item--char{border-radius:50%;background:none;box-shadow:none}
.jyh-cat__item--char::before{bottom:72%;height:46px;width:2px;margin-left:-1px;background:linear-gradient(rgba(255,226,150,0),rgba(255,226,150,.7))}
.jyh-cat__item--char .jya-orb,.jyh-cat__item--bomb .jya-orb{position:absolute;left:-30%;top:-30%;width:160%;height:160%}
.jyh-cat__item--bomb{border-radius:50%;background:none;box-shadow:none}
.jyh-cat__item--bomb .jyh-cat__tail{bottom:66%}
.jyh-cat__basket{width:clamp(118px,13vw,156px);bottom:6px}
.jyh-cat__lotus{width:100%;height:auto}
.jyh-cat__glow{top:-16px}
.jyh-cat__basket.is-catch .jyh-cat__lotus{animation:jyhCatch 360ms var(--jy-ease-out)}

/* ---------- Tia chớp: hai đám mây giông ---------- */
.jyh-fl__sky{position:absolute;inset:0;z-index:0;pointer-events:none}
.jyh-fl{position:relative;z-index:1}
.jyh-fl__storm{position:absolute;left:5%;top:5%;width:clamp(150px,17vw,240px)}
.jyh-fl__storm--2{left:auto;right:5%;top:24%;width:clamp(110px,12.5vw,180px);opacity:.75}
@media (max-width:760px){.jyh-fl__storm{width:96px;left:2%;top:1%;opacity:.5}.jyh-fl__storm--2{display:none}}
.jyh-fl__mult:not(:empty){padding:6px 12px;border:1px solid rgba(246,201,69,.55);border-radius:999px;background:rgba(246,201,69,.16);color:#f6d27a;font-weight:800}

/* ---------- Nét bút: bút lông + nghiên mực, mạng là giọt mực ---------- */
.jyh-br__padwrap{position:relative}
.jyh-br__ink{position:absolute;left:calc(100% - 40px);bottom:-34px;width:clamp(170px,19vw,260px);transform:rotate(-8deg);pointer-events:none}
@media (max-width:900px),(max-height:620px){.jyh-br__ink{display:none}}
.jyh-game--brush .jyh-hstat--lives i{width:14px;height:14px;border-radius:50%;background:transparent;box-shadow:inset 0 0 0 2px rgba(232,200,149,.45)}
.jyh-game--brush .jyh-hstat--lives i.is-on{background:radial-gradient(circle at 40% 35%,#4a3a30,#1a1210 62%);box-shadow:inset 0 -3px 0 rgba(255,255,255,.12),0 0 0 2px rgba(232,200,149,.5)}

/* ---------- Màn kết quả: đèn trời bay lên, pháo giấy khi đủ 3 sao ---------- */
.jya-rise,.jya-confetti{position:fixed;left:0;right:0;bottom:0;top:var(--gbar-h,66px);z-index:0;overflow:hidden;pointer-events:none}
.jyh-gover.is-result>.jyh-gres{position:relative;z-index:1}
.jya-rise .jyh-sky{position:absolute;inset:auto auto -130px var(--x);width:var(--w);height:auto;overflow:visible;animation:jyaRise var(--t,14s) linear infinite;animation-delay:var(--d,0s);opacity:0}
@keyframes jyaRise{0%{transform:translateY(0);opacity:0}8%{opacity:1}85%{opacity:.85}100%{transform:translate(16px,calc(-100vh - 140px)) scale(.7);opacity:0}}
.jya-confetti i{position:absolute;top:-14px;left:var(--x);width:8px;height:12px;border-radius:2px;background:var(--c);animation:jyaConf var(--t) linear infinite;animation-delay:var(--d)}
@keyframes jyaConf{to{transform:translateY(calc(100vh + 20px)) rotate(540deg)}}

/* Giảm chuyển động: hình đứng yên */
body.jyh-reduce .jya *,body.jyh-reduce .jya,body.jyh-reduce .jya-garland__item,body.jyh-reduce .jya-garland__item::before,body.jyh-reduce .jya-waves,body.jyh-reduce .jya-rise,body.jyh-reduce .jya-confetti{animation:none!important}
body.jyh-reduce .jya-rise,body.jyh-reduce .jya-confetti{display:none}
@media (prefers-reduced-motion:reduce){
  .jya *,.jya,.jya-garland__item,.jya-garland__item::before,.jya-waves{animation:none!important}
  .jya-rise,.jya-confetti{display:none}
}
/* ==========================================================================
   v1.7 · Art trò chơi theo Bản mẫu đã chốt (ảnh vẽ vector, không dùng ảnh AI)
   Ảnh nằm trong assets/game-art/ (đường dẫn tính từ file CSS này):
   thumb-*.svg ảnh bìa · banner-*.svg băng "Thử thách hôm nay" · bg-*.svg nền trong trò (-m: điện thoại dọc)
   stars-*.svg các lớp của khung chơi Mưa sao · river-band.svg mặt sông · drum.svg trống thuyền rồng.
   Chỉ đổi phần trình bày: mọi nút, phím, điểm, luật chơi giữ nguyên.
   ========================================================================== */

/* ---------- Ảnh bìa thẻ trò ---------- */
.jyh-art{background-color:var(--gbg2);background-position:center;background-repeat:no-repeat;background-size:cover}
.jyh-art::after{display:none}
.jyh-art--lantern{background-image:url(game-art/thumb-lantern.svg)}
.jyh-art--boat{background-image:url(game-art/thumb-boat.svg)}
.jyh-art--stars{background-image:url(game-art/thumb-stars.svg)}
.jyh-art--flash{background-image:url(game-art/thumb-flash.svg)}
.jyh-art--brush{background-image:url(game-art/thumb-brush.svg)}
.jyh-art--speak{background-image:url(game-art/thumb-speak.svg)}
.jyh-gcard__art::after{background:linear-gradient(0deg,rgba(0,0,0,.66) 0%,rgba(0,0,0,.24) 28%,transparent 50%)}
.jyh-gcard__art .jyh-art{transition:transform .6s var(--jy-ease-out)}
.jyh-gcard:hover .jyh-gcard__art .jyh-art{transform:scale(1.04)}

/* ---------- Băng "Thử thách hôm nay": nền vẽ của trò trong ngày, chữ và nút ở nửa trái ---------- */
.jyh-daily{--df:18,8,6;--dbg:#1f0d0a;grid-template-columns:minmax(0,min(560px,62%)) minmax(0,1fr);align-items:start;gap:12px 22px;min-height:200px;padding:24px 28px;
  background-color:var(--dbg);background-position:right center;background-repeat:no-repeat;background-size:cover}
.jyh-daily::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(var(--df),.9) 0%,rgba(var(--df),.72) 34%,rgba(var(--df),.18) 62%,transparent 80%)}
.jyh-daily__art{display:none}
.jyh-daily__body{grid-column:1;padding:0}
.jyh-daily .jyh-btn{grid-column:1;justify-self:start;margin:0}
.jyh-daily--lantern{--df:26,3,6;--dbg:#22060a;background-image:url(game-art/banner-lantern.svg)}
.jyh-daily--boat{--df:20,8,14;--dbg:#1c0c14;background-image:url(game-art/banner-boat.svg)}
.jyh-daily--stars{--df:12,7,22;--dbg:#0e0a1c;background-image:url(game-art/banner-stars.svg)}
.jyh-daily--flash{--df:5,8,32;--dbg:#070a26;background-image:url(game-art/banner-flash.svg)}
.jyh-daily--brush{--df:40,8,10;--dbg:#2a080b;background-image:url(game-art/banner-brush.svg)}
.jyh-daily--speak{--df:16,4,9;--dbg:#12040a;background-image:url(game-art/banner-speak.svg)}
@media (max-width:760px){
  .jyh-daily{grid-template-columns:minmax(0,1fr);gap:12px;min-height:0;padding:150px 18px 18px;background-size:auto 170px;background-position:72% 0}
  .jyh-daily::before{background:linear-gradient(180deg,transparent 0,transparent 96px,var(--dbg) 170px,var(--dbg) 100%)}
  .jyh-daily .jyh-btn{margin:0}
}

/* ---------- Nền trong trò: ảnh vẽ của từng trò thay cho ảnh kiến trúc mờ ---------- */
.jyh-arena::before{opacity:1;filter:none;mix-blend-mode:normal;background-size:cover;background-position:center}
.jyh-arena::after{background:radial-gradient(ellipse 90% 85% at 50% 45%,transparent 55%,rgba(0,0,0,.42) 100%)}
.jyh-arena--lantern{background:#3a0b10}
.jyh-arena--lantern::before{background-image:url(game-art/bg-lantern.svg)}
.jyh-arena--boat{background:#3a1b24}
.jyh-arena--boat::before{background-image:url(game-art/bg-boat.svg);background-position:center 35%}
.jyh-arena--stars{background:#0e0a1c}
.jyh-arena--stars::before{background-image:url(game-art/bg-stars.svg);background-position:center bottom}
.jyh-arena--flash{background:#0b0f33}
.jyh-arena--flash::before{background-image:url(game-art/bg-flash.svg)}
.jyh-arena--brush{background:#efe6d6}
.jyh-arena--brush::before{background-image:url(game-art/bg-brush.svg)}
.jyh-arena--speak{background:#1a0710}
.jyh-arena--speak::before{background-image:url(game-art/bg-speak.svg);background-position:center bottom}
@media (max-aspect-ratio:4/5){
  .jyh-arena--lantern::before{background-image:url(game-art/bg-lantern-m.svg)}
  .jyh-arena--boat::before{background-image:url(game-art/bg-boat-m.svg);background-position:center top}
  .jyh-arena--stars::before{background-image:url(game-art/bg-stars-m.svg)}
  .jyh-arena--flash::before{background-image:url(game-art/bg-flash-m.svg)}
  .jyh-arena--brush::before{background-image:url(game-art/bg-brush-m.svg)}
  .jyh-arena--speak::before{background-image:url(game-art/bg-speak-m.svg)}
}

/* ---------- 01 Đèn lồng Hán tự: dây đèn hộp lụa, đồng hồ mảnh ---------- */
.jya-lantern .jya-fringe{transform-origin:60px 152px}
.jyh-lt__timer{height:4px;background:rgba(255,226,168,.2);box-shadow:none}
.jyh-lt__timer i{background:linear-gradient(90deg,#ff8a3d,#ffd27a);box-shadow:0 0 10px rgba(255,170,90,.55)}
.jyh-lt__sec{color:#f6dcb0;font-size:1.15rem}
.jyh-lt__step{min-height:1.7em;color:#f6dcb0}  /* đủ chỗ cho dòng đáp án khi ghép sai: bàn thẻ không xê dịch dù chỉ nửa điểm ảnh */
.jyh-lt__card--py .jyh-lt__face,.jyh-lt__card--mean .jyh-lt__face{background:linear-gradient(var(--corner),var(--corner)) 9px 9px/16px 2px no-repeat,linear-gradient(var(--corner),var(--corner)) 9px 9px/2px 16px no-repeat,linear-gradient(var(--corner),var(--corner)) right 9px bottom 9px/16px 2px no-repeat,linear-gradient(var(--corner),var(--corner)) right 9px bottom 9px/2px 16px no-repeat,var(--face)}
@media (max-width:560px){.jyh-lt__card--py .jyh-lt__face,.jyh-lt__card--mean .jyh-lt__face{background-size:12px 2px,2px 12px,12px 2px,2px 12px,auto;background-position:7px 7px,7px 7px,right 7px bottom 7px,right 7px bottom 7px,0 0}}

/* ---------- 02 Đua thuyền: làn đua là mặt sông, dây phao đỏ vàng, đích là dây cờ đuôi nheo, trống thuyền rồng ---------- */
.jyh-bt__river{background:linear-gradient(180deg,rgba(255,214,160,.10),transparent 30%,rgba(6,26,24,.28)),url(game-art/river-band.svg) center/cover;border-color:rgba(255,226,168,.4)}
.jyh-bt__waves{opacity:.32}
.jyh-bt__lane{border-bottom:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='44' height='14'%3E%3Cpath d='M0 9.5H44' stroke='%232a1b12' stroke-width='1.1' opacity='.75'/%3E%3Cellipse cx='11' cy='9.5' rx='4.4' ry='2.8' fill='%23d4343e'/%3E%3Cellipse cx='9.8' cy='8.4' rx='1.6' ry='.8' fill='%23fff' opacity='.5'/%3E%3Cellipse cx='33' cy='9.5' rx='4.4' ry='2.8' fill='%23efb94c'/%3E%3Cellipse cx='31.8' cy='8.4' rx='1.6' ry='.8' fill='%23fff' opacity='.5'/%3E%3C/svg%3E") left bottom/44px 14px repeat-x}
.jyh-bt__lane:last-child{background:none}
.jyh-bt__lane.is-me{background:linear-gradient(90deg,rgba(255,210,122,.18),transparent 55%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='44' height='14'%3E%3Cpath d='M0 9.5H44' stroke='%232a1b12' stroke-width='1.1' opacity='.75'/%3E%3Cellipse cx='11' cy='9.5' rx='4.4' ry='2.8' fill='%23d4343e'/%3E%3Cellipse cx='9.8' cy='8.4' rx='1.6' ry='.8' fill='%23fff' opacity='.5'/%3E%3Cellipse cx='33' cy='9.5' rx='4.4' ry='2.8' fill='%23efb94c'/%3E%3Cellipse cx='31.8' cy='8.4' rx='1.6' ry='.8' fill='%23fff' opacity='.5'/%3E%3C/svg%3E") left bottom/44px 14px repeat-x}
.jyh-bt__lane.is-me:last-child{background:linear-gradient(90deg,rgba(255,210,122,.18),transparent 55%)}
.jyh-bt__finish{width:16px;opacity:1;box-shadow:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='22'%3E%3Cpath d='M2 0V22' stroke='%232a1b12' stroke-width='1.3'/%3E%3Cpath d='M2 1L14 5L2 9Z' fill='%23d4343e'/%3E%3Cpath d='M2 12L14 16L2 20Z' fill='%23efb94c'/%3E%3C/svg%3E") left top/16px 22px repeat-y}
.jyh-bt__finish::before,.jyh-bt__finish::after{content:"";position:absolute;left:-1px;width:6px;height:12px;border-radius:2px;background:#a8161f;box-shadow:0 -5px 0 -1px #f0c463}
.jyh-bt__finish::before{top:0}
.jyh-bt__finish::after{bottom:0}
.jyh-bt__tag{background:rgba(6,32,30,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.jyh-bt__target{background:url(game-art/drum.svg) center/100% no-repeat;box-shadow:0 18px 30px rgba(0,0,0,.5)}
.jyh-bt__target::before{display:none}
.jyh-bt__console{background:linear-gradient(var(--c),var(--c)) 10px 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) 10px 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px top 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px top 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) left 10px bottom 10px/1.5px 20px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/20px 1.5px,linear-gradient(var(--c),var(--c)) right 10px bottom 10px/1.5px 20px,linear-gradient(180deg,rgba(40,14,16,.86),rgba(16,5,7,.9));background-repeat:no-repeat;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}

/* ---------- 03 Mưa sao (1.7b): Di Hòa Viên lúc chạng vạng — nhìn qua hai cột đỏ và xà vẽ màu ra Phật Hương Các;
   trời tím than → hồng phấn (màu Mưa sao Bản mẫu 1). Lớp đầu tiên là lớp trên cùng: xà đỡ góc, cột, xà, mặt hồ, bờ hồ, núi tháp, trời ---------- */
.jyh-arena--stars .jyh-amb{display:none}
.jyh-cat{gap:18px;padding:0 6px}
.jyh-cat__prompt{border-color:rgba(201,165,90,.5);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.jyh-game--stars{--gpanel:rgba(34,22,58,.66)}
.jyh-cat__field{border:1px solid rgba(201,165,90,.55);border-radius:14px;
  --pr:linear-gradient(90deg,#5a121c,#a8262c 20%,#e8604a 40%,#c23a33 60%,#7a1c26 80%,#3a0c16);
  --pl:linear-gradient(90deg,#3a0c16,#7a1c26 20%,#c23a33 40%,#e8604a 60%,#a8262c 80%,#5a121c);
  background:url(game-art/stars-queti-r.svg) right 38px top 40px/auto 62px no-repeat,url(game-art/stars-queti-l.svg) left 32px top 40px/auto 62px no-repeat,
    var(--pr) right 0 top 0/40px 100% no-repeat,var(--pl) left 0 top 0/34px 100% no-repeat,
    url(game-art/stars-beam.svg) left 50% top 0/auto 46px repeat-x,
    url(game-art/stars-lake.svg) left 50% bottom 0/100% 92px no-repeat,url(game-art/stars-shore.svg) left 50% bottom 84px/auto 64px repeat-x,
    url(game-art/stars-tower.svg) left 50% bottom 100px/auto 54% no-repeat,url(game-art/stars-sky.svg) center top/cover no-repeat,#2a1d48;
  box-shadow:0 0 0 9px #0a0612,0 0 0 10px rgba(201,165,90,.32),0 30px 60px -24px #000}
@media (max-aspect-ratio:4/5){
  .jyh-cat__field{background:url(game-art/stars-queti-r.svg) right 15px top 25px/auto 38px no-repeat,url(game-art/stars-queti-l.svg) left 13px top 25px/auto 38px no-repeat,
    var(--pr) right 0 top 0/16px 100% no-repeat,var(--pl) left 0 top 0/14px 100% no-repeat,
    url(game-art/stars-beam.svg) left 50% top 0/auto 30px repeat-x,
    url(game-art/stars-lake.svg) left 50% bottom 0/100% 92px no-repeat,url(game-art/stars-shore.svg) left 50% bottom 84px/auto 54px repeat-x,
    url(game-art/stars-tower.svg) left 50% bottom 96px/auto 42% no-repeat,url(game-art/stars-sky-m.svg) center top/cover no-repeat,#2a1d48}
}
/* màn hình thấp (máy tính xách tay): xà, xà đỡ góc và núi tháp nhỏ lại để khung chơi thoáng */
@media (max-height:760px) and (min-aspect-ratio:4/5){
  .jyh-cat__field{background-size:auto 50px,auto 50px,32px 100%,28px 100%,auto 38px,100% 80px,auto 56px,auto 50%,cover;
    background-position:right 30px top 33px,left 26px top 33px,right 0 top 0,left 0 top 0,left 50% top 0,left 50% bottom 0,left 50% bottom 72px,left 50% bottom 86px,center top}
}
.jyh-cat__field>.jyh-sky{opacity:.5}
.jyh-cat__ground{opacity:.35}
/* sao rơi: đĩa ngà có đuôi sao chổi mềm phía trên */
.jyh-cat__item--char::before{bottom:48%;z-index:-1;width:84%;height:240%;margin-left:-42%;border-radius:0;
  background:linear-gradient(0deg,rgba(255,248,226,.62),rgba(255,248,226,0) 72%) 31% 100%/2px 58% no-repeat,linear-gradient(0deg,rgba(255,248,226,.5),rgba(255,248,226,0) 76%) 67% 100%/2px 70% no-repeat,
    linear-gradient(0deg,rgba(255,248,226,.42),rgba(255,248,226,0) 80%) 50% 100%/2px 86% no-repeat,linear-gradient(0deg,rgba(255,240,204,.5),rgba(255,240,204,.14) 45%,rgba(255,240,204,0));
  -webkit-mask:radial-gradient(50% 100% at 50% 100%,#000 34%,transparent 100%);mask:radial-gradient(50% 100% at 50% 100%,#000 34%,transparent 100%)}
.jyh-cat__item--bomb .jyh-cat__tail{bottom:48%;width:76%;height:220%;margin-left:-38%;border-radius:0;filter:none;
  background:linear-gradient(0deg,rgba(255,138,90,.8),rgba(255,90,60,.22) 50%,rgba(255,90,60,0));
  -webkit-mask:radial-gradient(50% 100% at 50% 100%,#000 30%,transparent 100%);mask:radial-gradient(50% 100% at 50% 100%,#000 30%,transparent 100%)}

/* ---------- 04 Tia chớp: nền lam đêm (màu Mưa sao bản 1.7), mây giông lam xám, thẻ ngà viền vàng đôi, nút kem ---------- */
.jyh-fl__storm{opacity:.92}
.jyh-fl__storm--2{opacity:.72}
.jyh-fl__track{stroke:rgba(243,234,214,.15);stroke-width:4}
.jyh-fl__ring{stroke:#e8c27a;stroke-width:4;filter:drop-shadow(0 0 6px rgba(255,214,120,.7))}
.jyh-fl__time{color:#f3ead6}
.jyh-fl__goal{border-color:rgba(243,234,214,.3);background:rgba(4,6,26,.35)}
.jyh-fl__goal b{color:#f3ead6}
.jyh-fl__mult{color:#f2c14e}
.jyh-fl__card{border-color:rgba(255,246,226,.95);color:#33141f;
  background:radial-gradient(circle at 50% 0,rgba(255,255,255,.7),transparent 60%),linear-gradient(160deg,#fff8e8,#efdab1);
  box-shadow:0 30px 50px -24px rgba(0,0,0,.8),0 0 40px rgba(255,217,160,.22),inset 0 0 0 6px #fff6e2,inset 0 0 0 7px #b8893a,inset 0 0 0 10px #fff6e2,inset 0 0 0 10.6px #b8893a}
.jyh-fl__type{color:#8a5a1c}
.jyh-fl__ask{color:#6e5a64}
.jyh-fl__btn{border-color:rgba(184,137,58,.6);background:linear-gradient(180deg,#fff8ea,#f0dfbf);box-shadow:0 12px 22px -14px rgba(0,0,0,.85),inset 0 1px 0 rgba(255,255,255,.85)}
.jyh-fl__btn--no{border-color:rgba(184,137,58,.6);background:linear-gradient(180deg,#fff8ea,#f0dfbf);color:#a3242e}
.jyh-fl__btn--yes{border-color:rgba(184,137,58,.6);background:linear-gradient(180deg,#fff8ea,#f0dfbf);color:#24694b}
.jyh-fl__correct{color:#cfd6f5}

/* ---------- 05 Nét bút: giấy kem, bóng trúc nâu ấm, dải lụa vàng; vòm đỏ rượu → hổ phách (màu Đèn lồng) ---------- */
.jyh-game-layer.jyh-game--brush .jyh-full{background:#efe6d6}
.jyh-arena--brush{color:#251711}
.jyh-arena--brush::after{background:radial-gradient(ellipse 90% 85% at 50% 45%,transparent 62%,rgba(90,60,30,.14) 100%)}
.jyh-arena--brush .jyh-amb{display:none}
/* thanh trên màu giấy */
.jyh-game-layer.jyh-game--brush .jyh-gbar{background:linear-gradient(180deg,rgba(255,251,243,.97),rgba(248,240,226,.95));color:#251711;box-shadow:inset 0 -1px 0 rgba(37,23,17,.1),0 10px 26px -18px rgba(37,23,17,.45)}
.jyh-game-layer.jyh-game--brush .jyh-gbar::after{opacity:.04}
.jyh-game-layer.jyh-game--brush .jyh-gbar :focus-visible{outline-color:#8a5a1c}
.jyh-game-layer.jyh-game--brush .jyh-gbar .jyh-ibtn--night{color:#3a2a20}
.jyh-game-layer.jyh-game--brush .jyh-gbar .jyh-ibtn--night:hover:not(:disabled){background:rgba(37,23,17,.07)}
.jyh-game-layer.jyh-game--brush .jyh-gbar .jyh-ibtn--night[aria-pressed="true"]{color:#8a5a1c}
.jyh-game-layer.jyh-game--brush .jyh-gbar__kicker{color:#8a5a1c}
.jyh-game-layer.jyh-game--brush .jyh-gbar .jyh-full__title strong{color:#251711}
.jyh-game-layer.jyh-game--brush .jyh-gbar__prog{background:rgba(37,23,17,.08)}
.jyh-game-layer.jyh-game--brush .jyh-hstat{border-color:rgba(37,23,17,.16);background:rgba(255,255,255,.62);box-shadow:none;color:#251711}
.jyh-game-layer.jyh-game--brush .jyh-hstat small,.jyh-game-layer.jyh-game--brush .jyh-hstat b small{color:#8a6a4a}
.jyh-game-layer.jyh-game--brush .jyh-hstat .jyh-i{color:#8a5a1c}
.jyh-game-layer.jyh-game--brush .jyh-hstat--score b,.jyh-game-layer.jyh-game--brush .jyh-hstat--rank b{color:#7a1c2a}
.jyh-game-layer.jyh-game--brush .jyh-hstat--time.is-low{border-color:#c3423f;background:rgba(195,66,63,.12)}
.jyh-game-layer.jyh-game--brush .jyh-hstat--time.is-low b,.jyh-game-layer.jyh-game--brush .jyh-hstat--time.is-low .jyh-i{color:#a3242e}
.jyh-game-layer.jyh-game--brush .jyh-hstat--lives i{box-shadow:inset 0 0 0 2px rgba(37,23,17,.25)}
.jyh-game-layer.jyh-game--brush .jyh-hstat--lives i.is-on{box-shadow:inset 0 -3px 0 rgba(255,255,255,.12),0 0 0 2px rgba(37,23,17,.2)}
/* vòm: đề bài, chữ, bảng 田字格 và số nét nằm trong vòm */
.jyh-br{align-items:stretch}
.jyh-br__card{--aw:calc(min(340px,84vw,44vh) + 64px);position:relative;isolation:isolate;align-content:start;padding:calc(var(--aw) * .19) 0 14px}
.jyh-br__card::before,.jyh-br__card::after{content:"";position:absolute;z-index:-1;left:50%;bottom:-64px;pointer-events:none}
.jyh-br__card::before{top:0;width:var(--aw);margin-left:calc(var(--aw) / -2);
  border-radius:calc(var(--aw) / 2) calc(var(--aw) / 2) 0 0/calc(var(--aw) * .42) calc(var(--aw) * .42) 0 0;
  background:radial-gradient(60% 40% at 50% 62%,rgba(255,177,77,.2),transparent 70%),linear-gradient(180deg,#2e0810 0%,#5e1414 55%,#8a2c16 90%,#a8441a 100%);
  box-shadow:0 30px 60px -30px rgba(60,10,10,.6)}
.jyh-br__card::after{top:9px;width:calc(var(--aw) - 18px);margin-left:calc((var(--aw) - 18px) / -2);border:1px solid rgba(232,194,122,.55);border-bottom:0;
  border-radius:calc((var(--aw) - 18px) / 2) calc((var(--aw) - 18px) / 2) 0 0/calc(var(--aw) * .42 - 9px) calc(var(--aw) * .42 - 9px) 0 0}
/* đề bài luôn nằm gọn trong vòm, không chạm hay bị đường chỉ vàng cắt qua: bề rộng tối đa nhỏ hơn dây cung của vòm ở độ cao đó; dài thì xuống hai dòng cân nhau */
.jyh-br__ask{max-width:calc(var(--aw) * .72);color:#e7c98a;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;text-wrap:balance}
.jyh-br__mean{max-width:min(46ch,calc(var(--aw) - 48px))}
.jyh-br__pad{box-shadow:0 0 0 3px #fbf4e8,0 0 0 4px rgba(232,194,122,.6),0 18px 40px rgba(0,0,0,.45),inset 0 0 0 1px rgba(122,34,40,.45)}
.jyh-br__ink{display:none}
.jyh-br__tools{gap:8px}
.jyh-br__tools .jyh-ibtn{flex-direction:row;gap:8px;min-height:40px;padding:8px 14px;border:1px solid rgba(37,23,17,.15);border-radius:9px;background:rgba(255,252,245,.9);color:#3a2a20;font-size:.8125rem;box-shadow:0 6px 14px -10px rgba(37,23,17,.5)}
.jyh-br__tools .jyh-ibtn:hover:not(:disabled){background:#fffdf8}
.jyh-br__tools .jyh-ibtn .jyh-i{font-size:1.05rem}
.jyh-br__tools .jyh-br__timer[aria-pressed="true"]{border-color:#c99a45;color:#8a5a1c}
.jyh-br__keys{color:rgba(255,240,220,.62)}
@media (max-width:900px),(max-height:620px){
  .jyh-br__card{padding-top:60px}
  .jyh-br__card::before{left:0;width:100%;margin-left:0;border-radius:50% 50% 0 0/120px 120px 0 0}
  .jyh-br__card::after{left:9px;width:calc(100% - 18px);margin-left:0;border-radius:50% 50% 0 0/111px 111px 0 0}
  .jyh-br__ask{max-width:calc(76% - 20px)}
  .jyh-br__tools{gap:6px;padding:2px 8px 0}
  .jyh-br__tools .jyh-ibtn{min-height:36px;padding:6px 10px;gap:6px;font-size:.75rem}
}
/* máy tính: công cụ đứng bên phải vòm như bản mẫu */
@media (min-width:901px) and (min-height:621px){
  .jyh-br__card{width:auto;grid-template-columns:minmax(0,200px) var(--aw) minmax(0,200px);column-gap:22px}
  .jyh-br__card>*{grid-column:2}
  .jyh-br__tools{grid-column:3;grid-row:5;flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-self:start;align-self:end;margin:0 0 4px}
  .jyh-br__tools .jyh-ibtn{justify-content:flex-start}
  .jyh-br__keys{grid-column:3;grid-row:6/span 3;justify-self:start;align-self:start;max-width:200px;color:rgba(37,23,17,.55);text-align:left}
}

/* ---------- 06 Thả đèn trời: nền đỏ mận có đèn trời và pháo hoa, đèn lớn cam rực, micro kem vàng ---------- */
.jyh-sky__flame{transform-origin:50px 120px}
.jyh-sp__lan{width:clamp(104px,19vh,176px)}
.jyh-sp__dots{border-color:rgba(255,226,168,.28);background:rgba(26,6,14,.55)}
.jyh-sbtn{border-color:rgba(255,226,168,.32);background:rgba(26,6,14,.5);color:#f6dcb0}
.jyh-sbtn[aria-pressed="true"]{border-color:#f0c75e;background:rgba(240,199,94,.18);color:#ffe3a6}
.jyh-sp__heard{color:#ffd9a0}
.jyh-sp__mic{background:radial-gradient(circle at 35% 30%,#fff3cf,#e9b54f);color:#2a0b15;box-shadow:0 0 0 6px rgba(255,214,140,.18),0 0 34px 8px rgba(255,190,90,.45),0 14px 30px -8px rgba(0,0,0,.7)}
.jyh-sp__mic.is-on{background:radial-gradient(circle at 35% 30%,#fffaf0,#ffc45a);box-shadow:0 0 0 6px rgba(255,214,140,.3),0 0 46px 12px rgba(255,190,90,.6),0 14px 30px -8px rgba(0,0,0,.7)}
.jyh-sp__mic::before,.jyh-sp__mic::after{border-color:rgba(255,214,140,.8)}
@media (max-height:700px){.jyh-sp__lan{width:88px}}

/* ---------- Giảm chuyển động ---------- */
body.jyh-reduce .jyh-gcard__art .jyh-art{transition:none;transform:none}
@media (prefers-reduced-motion:reduce){.jyh-gcard__art .jyh-art{transition:none}.jyh-gcard:hover .jyh-gcard__art .jyh-art{transform:none}}
/* ==========================================================================
   v1.7 · Ba trò ngữ pháp: 07 Xếp chữ in · 08 Chén trôi suối khúc · 09 Tủ thuốc trăm ngăn
   Màu thành phần câu chỉ dùng trong ba trò này; màu luôn đi cùng nhãn chữ Hán nhỏ.
   ========================================================================== */
.jyh-game--order,.jyh-gcard--order,.jyh-daily--order,.jyh-pre--order,.jyh-cb__game--order,.jyh-lmap--order,.jyh-gres--order,.jyh-rec--order{--g0:#5a2e1e;--g1:#e2c48f;--g2:#f2c46f;--gglow:rgba(242,196,111,.38);--gbg1:#2a1a12;--gbg2:#120a07;--gpanel:rgba(42,26,18,.9)}
.jyh-game--stream,.jyh-gcard--stream,.jyh-daily--stream,.jyh-pre--stream,.jyh-cb__game--stream,.jyh-lmap--stream,.jyh-gres--stream,.jyh-rec--stream{--g0:#1e3328;--g1:#5f9c8f;--g2:#e8c27a;--gglow:rgba(95,156,143,.4);--gbg1:#14261d;--gbg2:#0a120e;--gpanel:rgba(16,30,24,.9)}
.jyh-game--cabinet,.jyh-gcard--cabinet,.jyh-daily--cabinet,.jyh-pre--cabinet,.jyh-cb__game--cabinet,.jyh-lmap--cabinet,.jyh-gres--cabinet,.jyh-rec--cabinet{--g0:#5b2a1c;--g1:#c49a4a;--g2:#e6c27a;--gglow:rgba(196,154,74,.4);--gbg1:#2b1510;--gbg2:#150a07;--gpanel:rgba(43,21,16,.9)}

/* Ảnh bìa, băng thử thách, nền trong trò */
.jyh-art--order{background-image:url(game-art/thumb-order.svg)}
.jyh-art--stream{background-image:url(game-art/thumb-stream.svg)}
.jyh-art--cabinet{background-image:url(game-art/thumb-cabinet.svg)}
.jyh-daily--order{--df:24,14,9;--dbg:#170d08;background-image:url(game-art/banner-order.svg)}
.jyh-daily--stream{--df:9,18,13;--dbg:#0a140f;background-image:url(game-art/banner-stream.svg)}
.jyh-daily--cabinet{--df:26,11,8;--dbg:#160a07;background-image:url(game-art/banner-cabinet.svg)}
.jyh-arena--order{background:#160d09}
.jyh-arena--order::before{background-image:url(game-art/bg-order.svg)}
.jyh-arena--stream{background:#0c1611}
.jyh-arena--stream::before{background-image:url(game-art/bg-stream.svg)}
.jyh-arena--cabinet{background:#170b08}
.jyh-arena--cabinet::before{background-image:url(game-art/bg-cabinet.svg)}
@media (max-aspect-ratio:4/5){
  .jyh-arena--order::before{background-image:url(game-art/bg-order-m.svg)}
  .jyh-arena--stream::before{background-image:url(game-art/bg-stream-m.svg)}
  .jyh-arena--cabinet::before{background-image:url(game-art/bg-cabinet-m.svg)}
}
.jyh-arena--order .jyh-amb,.jyh-arena--stream .jyh-amb,.jyh-arena--cabinet .jyh-amb{display:none}

/* ---------- Màu thành phần (chữ kem trên các màu này đạt tương phản ≥ 4,5:1) ---------- */
.jyh-role--pr{--rc:#3e5a7a}.jyh-role--n{--rc:#8e6220}.jyh-role--t{--rc:#4f7a5a}.jyh-role--d{--rc:#4f7a5a}.jyh-role--p{--rc:#4f7a5a}
.jyh-role--v{--rc:#a8322c}.jyh-role--a{--rc:#6a3d5c}.jyh-role--mq{--rc:#8a5a3c}.jyh-role--u{--rc:#5b5552}.jyh-role--c{--rc:#5b5552}
.jyh-grc{display:inline-flex;align-items:center;gap:5px;min-height:24px;padding:2px 9px 2px 3px;border-radius:999px;background:var(--rc,#5b5552);color:#fbf4e6;font-size:.75rem;font-weight:700;line-height:1;white-space:nowrap}
.jyh-grc b{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:rgba(255,248,236,.18);font:500 .8rem/1 var(--jy-font-han)}
.jyh-grc:not(:has(span)){padding-right:3px}

/* ==========================================================================
   v1.7d · Thiết kế lại: mỗi trò một vật chính làm thật kỹ, mọi thứ khác lùi lại.
   Nhịp chung: đọc tờ giấy (đề) → thao tác trên vật chính → đọc giải thích (cũng trên giấy) ở cùng một chỗ.
   Chữ luôn là thứ sáng nhất: mực trên giấy, trên gỗ hoàng dương, trên đá.
   ========================================================================== */
/* ---------- Giấy dùng chung: đề (ô nghĩa, đơn thuốc) và giải thích ---------- */
.jyh-or__mean,.jyh-sf__mean,.jyh-cb9__pack,.jyh-or__info,.jyh-sf__why:not(:empty),.jyh-cb9__why{position:relative;border-radius:4px;color:#24170f;
  background:url(game-art/tex-paper.svg) 0 0/240px 240px,linear-gradient(178deg,#f8f1e1,#ede1c6);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 0 26px rgba(170,140,90,.16),0 12px 26px -16px rgba(0,0,0,.85),0 2px 4px rgba(0,0,0,.25)}
/* ô đề: vạch son dọc như giấy viết thư (tiên chỉ), nhãn nhỏ, nghĩa chữ lớn */
.jyh-or__mean,.jyh-sf__mean{display:grid;gap:2px;flex:0 1 640px;min-width:0;padding:10px 20px 12px 26px;text-align:left}
.jyh-or__mean::before,.jyh-sf__mean::before{content:"";position:absolute;left:12px;top:11px;bottom:11px;width:2px;border-radius:1px;background:#b0342a;opacity:.75}
.jyh-or__mean small,.jyh-sf__mean small{color:#7a5a3a;font:700 .75rem/1.3 var(--jy-font-ui);letter-spacing:.01em}
.jyh-or__mean b,.jyh-sf__mean b{color:#20140d;font:500 clamp(1.08rem,2.5vh,1.42rem)/1.35 var(--jy-font-title)}
/* hai nút công cụ (gợi ý, pinyin) luôn đứng cạnh ô đề */
.jyh-gtools{display:flex;gap:8px;flex:none}
/* ô giải thích: vạch màu bên trái báo đúng/sai */
.jyh-or__info,.jyh-sf__why:not(:empty),.jyh-cb9__why{width:min(100%,760px)}
.jyh-sf__why:not(:empty)::before,.jyh-cb9__why::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;border-radius:0 3px 3px 0;background:var(--note,#9a7436)}
.jyh-sf__why.is-ok,.jyh-cb9__why:has(.jyh-cb9__ok){--note:#2f6a45}
.jyh-sf__why.is-bad,.jyh-cb9__why:has(.jyh-cb9__bad){--note:#a8322c}
.jyh-gr-keys,.jyh-or__keys,.jyh-sf__keys,.jyh-cb9__keys{margin:0;color:rgba(251,244,230,.5);font-size:.75rem;text-align:center}
@media (pointer:coarse){.jyh-or__keys,.jyh-sf__keys,.jyh-cb9__keys{display:none}}
.is-shake{animation:jyhOrShake .36s}
@keyframes jyhOrShake{20%,60%{transform:translateX(-4px)}40%,80%{transform:translateX(4px)}}

/* ================= 07 · Xếp chữ in: khuôn sắt ke đồng + con chữ gỗ hoàng dương ================= */
.jyh-or{position:relative;z-index:1;display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,1.7vh,18px);width:100%;max-width:980px;margin:0 auto}
.jyh-or__top{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 12px;width:100%}
.jyh-or__tpl{display:flex;flex:1 1 100%;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px;transition:opacity .3s}
.jyh-or__tpl:empty{display:none}
.jyh-or__tpl>i{color:rgba(251,244,230,.4);font-style:normal}
/* khuôn: thép đen, mép trên bắt sáng đèn dầu, bốn ke góc đồng có đinh tán */
.jyh-or__press{position:relative;width:100%;padding:18px 20px 20px;border-radius:7px;
  background:radial-gradient(110% 130% at 12% -20%,rgba(255,214,150,.15),transparent 55%),linear-gradient(180deg,#3b3530 0%,#2a2521 55%,#201b18 100%);
  box-shadow:inset 0 1px 0 rgba(255,236,200,.22),inset 0 0 0 1px rgba(0,0,0,.65),inset 0 -3px 8px rgba(0,0,0,.4),0 0 0 1px #0c0907,0 30px 50px -28px #000,0 10px 22px -12px rgba(0,0,0,.85)}
.jyh-or__press::before{content:"";position:absolute;inset:5px;z-index:1;pointer-events:none;--b:linear-gradient(135deg,#f6dc99,#c99a48 48%,#8a6428);
  background:var(--b) left top/26px 4px no-repeat,var(--b) left top/4px 26px no-repeat,var(--b) right top/26px 4px no-repeat,var(--b) right top/4px 26px no-repeat,
    var(--b) left bottom/26px 4px no-repeat,var(--b) left bottom/4px 26px no-repeat,var(--b) right bottom/26px 4px no-repeat,var(--b) right bottom/4px 26px no-repeat;
  filter:drop-shadow(0 1px 0 rgba(0,0,0,.65))}
.jyh-or__press::after{content:"";position:absolute;inset:8px;z-index:1;pointer-events:none;--r:radial-gradient(circle,#fff3c8 0 1px,#d6a955 1.6px 2.5px,rgba(0,0,0,.45) 2.9px,transparent 3.4px);
  background:var(--r) left top/8px 8px no-repeat,var(--r) right top/8px 8px no-repeat,var(--r) left bottom/8px 8px no-repeat,var(--r) right bottom/8px 8px no-repeat}
/* lòng khuôn: rãnh chìm, mỗi ô một chỗ con chữ */
.jyh-or__slots{position:relative;display:grid;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));gap:6px;padding:7px;border-radius:3px;
  background:linear-gradient(180deg,#120c09,#1a120e);box-shadow:inset 0 3px 9px rgba(0,0,0,.85),inset 0 0 0 1px rgba(0,0,0,.8),0 1px 0 rgba(255,226,180,.08)}
.jyh-or__slot{position:relative;display:grid;place-items:center;min-height:clamp(76px,11.2vh,100px);border-radius:3px;
  background:linear-gradient(180deg,#1d1511,#150f0c);box-shadow:inset 0 2px 5px rgba(0,0,0,.8),inset 0 -1px 0 rgba(255,214,160,.05)}
.jyh-or__slot.has-role::after{content:"";position:absolute;left:12px;right:12px;bottom:6px;height:2px;border-radius:2px;background:var(--rc);opacity:.55}
.jyh-or__slot.is-next{box-shadow:inset 0 2px 5px rgba(0,0,0,.8),inset 0 0 0 1px rgba(242,196,111,.6),0 0 16px -4px rgba(242,196,111,.5);animation:jyhOrPulse 1.8s ease-in-out infinite}
@keyframes jyhOrPulse{50%{box-shadow:inset 0 2px 5px rgba(0,0,0,.8),inset 0 0 0 1px rgba(242,196,111,.22),0 0 0 rgba(242,196,111,0)}}
.jyh-or__lab{color:var(--rc,#fff);font:500 1.5rem/1 var(--jy-font-han);opacity:.34;text-shadow:0 1px 0 rgba(255,255,255,.08)}
/* con chữ: mặt gỗ hoàng dương có vân vòng của thớ đầu, cạnh vát bắt sáng, thân dày, chữ in mực */
.jyh-or__blk{position:relative;display:grid;place-items:center;align-content:center;gap:3px;min-width:clamp(60px,6.4vw,80px);min-height:clamp(70px,10.6vh,94px);padding:9px 11px 11px;border:0;border-radius:4px;cursor:pointer;color:#1a120c;
  background:radial-gradient(120% 80% at 22% 0%,rgba(255,250,232,.62),transparent 58%),repeating-radial-gradient(circle at 16% 135%,transparent 0 5px,rgba(124,84,40,.11) 5px 6px),linear-gradient(180deg,#f0dbae 0%,#e5c78f 55%,#d7b379 100%);
  box-shadow:inset 0 1px 0 rgba(255,251,236,.9),inset 1px 0 0 rgba(255,246,222,.5),inset 0 -2px 0 rgba(122,84,40,.38),inset -1px 0 0 rgba(122,84,40,.3),0 4px 0 #8c6536,0 5px 0 #5c3f20,0 12px 16px -5px rgba(0,0,0,.65);
  font:inherit;transition:transform .16s var(--jy-ease-out),box-shadow .16s}
.jyh-or__blk b{font:600 clamp(1.45rem,3.5vh,2rem)/1.05 var(--jy-font-han);letter-spacing:.02em;color:#17100b;text-shadow:0 0 .7px rgba(23,16,11,.55),0 1px 0 rgba(255,246,222,.6)}
.jyh-or__blk small{color:#6b4a26;font:600 .74rem/1.1 var(--jy-font-ui)}
.jyh-or__blk.has-role::after{content:"";position:absolute;left:9px;right:9px;bottom:4px;height:3px;border-radius:2px;background:var(--rc);opacity:.85}
.jyh-or__blk:hover{transform:translateY(-3px);box-shadow:inset 0 1px 0 rgba(255,251,236,.9),inset 1px 0 0 rgba(255,246,222,.5),inset 0 -2px 0 rgba(122,84,40,.38),inset -1px 0 0 rgba(122,84,40,.3),0 6px 0 #8c6536,0 7px 0 #5c3f20,0 18px 22px -6px rgba(0,0,0,.65)}
.jyh-or__blk:active{transform:translateY(2px);box-shadow:inset 0 1px 0 rgba(255,251,236,.9),inset 0 -2px 0 rgba(122,84,40,.38),0 2px 0 #8c6536,0 3px 0 #5c3f20,0 6px 10px -4px rgba(0,0,0,.6)}
.jyh-or__blk:focus-visible{outline:2px solid #f2c46f;outline-offset:3px}
/* số phím: khắc mờ dưới chân con chữ trong khay (chỉ máy có bàn phím) */
.jyh-or__blk .jyh-kbd{position:absolute;left:50%;bottom:-21px;top:auto;color:rgba(251,244,230,.48);font:700 .7rem/1 var(--jy-font-ui);font-style:normal;transform:translateX(-50%)}
.jyh-or__slot .jyh-or__blk{width:calc(100% - 8px);min-height:calc(100% - 10px);box-shadow:inset 0 1px 0 rgba(255,251,236,.9),inset 0 -2px 0 rgba(122,84,40,.38),0 2px 0 #8c6536,0 3px 0 #5c3f20,0 6px 10px -4px rgba(0,0,0,.7);animation:jyhOrSet .22s var(--jy-ease-out)}
@keyframes jyhOrSet{from{transform:translateY(-8px)}}
.jyh-or__blk.is-lock{box-shadow:inset 0 0 0 2px #c9a35a,inset 0 1px 0 rgba(255,251,236,.9),0 2px 0 #8c6536,0 3px 0 #5c3f20,0 6px 10px -4px rgba(0,0,0,.7)}
.jyh-or__blk.is-lock::before{content:"";position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff0c8,#c99a48 60%,#7a5420);box-shadow:0 1px 1px rgba(0,0,0,.4)}
/* khay chữ: gỗ sẫm có thớ, lõm xuống */
.jyh-or__tray{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 12px;width:100%;min-height:clamp(96px,13.5vh,122px);padding:16px 16px 30px;border-radius:8px;
  background:url(game-art/tex-wood.svg) 0 0/320px 160px,radial-gradient(120% 120% at 50% -10%,rgba(255,206,140,.1),transparent 60%),linear-gradient(180deg,#3a2417,#27170f);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.6),inset 0 10px 18px rgba(0,0,0,.55),inset 0 -1px 0 rgba(255,220,170,.08),0 1px 0 rgba(255,220,170,.06)}
.jyh-or__tray .jyh-or__blk{flex:0 0 auto}
@media (pointer:coarse){.jyh-or__tray{padding-bottom:16px}.jyh-or__blk .jyh-kbd{display:none}}
.jyh-or__bar{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
.jyh-or__msg{min-height:1.4em;margin:0;color:#e9dcc6;font-size:.9375rem;font-weight:600;text-align:center}
.jyh-or__msg.is-ok{color:#a9dcb4}.jyh-or__msg.is-bad,.jyh-or__msg.is-warn{color:#f4b3a6}
/* in xong: tờ giấy Tuyên phủ lên khuôn, chữ ăn mực, dấu son */
.jyh-or__paper{position:absolute;inset:8px;z-index:3;display:grid;place-items:center;border-radius:4px;animation:jyhOrPaper .6s var(--jy-ease-out) both}
.jyh-or__sheet{position:relative;display:grid;place-items:center;width:100%;height:100%;padding:12px 64px;border-radius:3px;
  background:url(game-art/tex-paper.svg) 0 0/240px 240px,linear-gradient(178deg,#f9f2e3,#efe4cb);
  box-shadow:inset 0 0 0 1px rgba(160,130,90,.25),inset 0 0 34px rgba(170,140,90,.2),0 12px 26px -12px rgba(0,0,0,.75)}
.jyh-or__line{margin:0;color:#1b130d;font:600 clamp(1.5rem,4vh,2.3rem)/1.3 var(--jy-font-han);letter-spacing:.08em;text-align:center;text-shadow:0 0 1px rgba(27,19,13,.55)}
.jyh-or__seal{position:absolute;right:16px;bottom:12px;display:grid;place-items:center;width:40px;height:40px;border:2.5px solid #b0342a;border-radius:4px;background:rgba(176,52,42,.06);color:#b0342a;font:700 1.3rem/1 var(--jy-font-han);
  transform:rotate(-6deg);-webkit-mask:url(game-art/tex-stamp.svg) center/52px 52px;mask:url(game-art/tex-stamp.svg) center/52px 52px;animation:jyhOrSeal .32s .38s var(--jy-ease-out) both}
@keyframes jyhOrPaper{from{transform:translateY(-26px);opacity:0}to{transform:none;opacity:1}}
@keyframes jyhOrSeal{from{transform:scale(1.8) rotate(-6deg);opacity:0}to{transform:rotate(-6deg);opacity:1}}
.jyh-or.is-done .jyh-or__tray,.jyh-or.is-done .jyh-or__bar{display:none}
/* chú giải dưới bản in: cùng loại giấy */
.jyh-or__info{display:grid;justify-items:center;gap:9px;padding:16px 20px 18px;text-align:center}
.jyh-or__roles{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 10px}
.jyh-or__rb{display:grid;justify-items:center;gap:5px}
.jyh-or__rb>b{color:#1b130d;font:500 1.25rem/1 var(--jy-font-han)}
.jyh-or__ipy{margin:0;color:#7a5532;font-size:.9375rem}
.jyh-or__imean{margin:0;color:#24170f;font:500 1.06rem/1.4 var(--jy-font-title)}
.jyh-or__alt{margin:0;color:#2f6a45;font-size:.875rem;font-weight:700}
.jyh-or__gp{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:4px 10px;margin:0;color:#4a3826}
.jyh-or__gp .jyh-kicker{color:#8a6a40;font-size:.8125rem;letter-spacing:.01em;text-transform:none}
.jyh-or__gp code{padding:2px 8px;border-radius:4px;background:rgba(176,52,42,.08);color:#9a2c22;font:inherit;font-weight:700}
@media (max-width:640px){
  .jyh-or__slots{grid-template-columns:repeat(min(var(--n,4),4),minmax(0,1fr))}
  .jyh-or__press{padding:12px}
  .jyh-or__blk{min-width:50px;padding:7px 8px 9px}
  .jyh-or__bar{width:100%}
  .jyh-or__bar .jyh-btn{flex:1 1 40%}
  .jyh-or__sheet{padding:12px 44px}
}

/* ================= 08 · Chén trôi suối khúc: mặt suối + chén sơn mài (nhĩ bôi) ================= */
.jyh-sf{position:relative;z-index:1;display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,1.7vh,18px);width:100%;max-width:1000px;margin:0 auto}
.jyh-sf__top{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 12px;width:100%}
.jyh-sf__mean{transition:opacity .5s}
.jyh-sf__mean b{transition:filter .5s,opacity .5s}
.jyh-sf__mean.is-hidden b{filter:blur(7px);opacity:.45}
/* mặt suối: ba lớp nước, trời phản chiếu, gợn chạy chậm */
.jyh-sf__lane{position:relative;width:100%;min-height:clamp(214px,31vh,300px);padding:20px 18px 100px;border-radius:20px;overflow:hidden;
  background:url(game-art/tex-ripple.svg) 0 0/480px 160px,radial-gradient(90% 55% at 50% 0%,rgba(205,236,224,.18),transparent 70%),radial-gradient(80% 60% at 50% 105%,rgba(8,26,22,.6),transparent 70%),linear-gradient(180deg,#1a453d 0%,#20564a 48%,#173f37 100%);
  box-shadow:inset 0 14px 26px -14px rgba(0,0,0,.65),inset 0 -16px 26px -14px rgba(0,0,0,.55),inset 0 0 0 1px rgba(205,236,224,.14),0 26px 46px -26px #000;
  animation:jyhSfWater 46s linear infinite}
@keyframes jyhSfWater{to{background-position:-480px 0,0 0,0 0,0 0}}
/* dòng chảy chính, nơi chén trôi */
.jyh-sf__flow{position:absolute;left:-4%;right:-4%;bottom:24px;z-index:0;height:56px;border-radius:50%;
  background:linear-gradient(90deg,transparent,rgba(232,214,160,.16) 45%,transparent 60%) 0 0/50% 100% no-repeat,linear-gradient(180deg,rgba(205,236,224,.10),rgba(205,236,224,.02));
  box-shadow:inset 0 1px 0 rgba(205,236,224,.18);animation:jyhSfFlow 7s linear infinite}
@keyframes jyhSfFlow{from{background-position:-50% 0,0 0}to{background-position:150% 0,0 0}}
.jyh-sf__ask{position:relative;z-index:1;margin:0 0 12px;color:rgba(223,236,229,.8);font-size:.8125rem;font-weight:700;letter-spacing:.01em;text-align:center}
.jyh-sf__line{position:relative;z-index:1;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:8px 4px}
/* đá cuội: mặt sáng, rìa ướt, vòng nước quanh chân; chữ mực đậm */
.jyh-sf__stone{position:relative;display:grid;justify-items:center;gap:2px;min-width:52px;padding:11px 13px 13px;border-radius:44% 56% 47% 53% / 56% 50% 50% 44%;
  background:url(game-art/tex-paper.svg) 0 0/130px 130px,radial-gradient(120% 95% at 30% 16%,#fbf8f0 0,#e7e1d3 40%,#c9c1ae 100%);color:#1b241f;
  box-shadow:inset 0 -4px 7px rgba(84,76,60,.35),inset 0 2px 2px rgba(255,255,255,.75),0 7px 0 -3px rgba(9,34,29,.6),0 14px 18px -10px rgba(0,0,0,.75)}
.jyh-sf__stone::after{content:"";position:absolute;left:-7px;right:-7px;bottom:-9px;height:14px;border-radius:50%;border:1px solid rgba(205,236,224,.32);border-top-color:transparent;pointer-events:none}
.jyh-sf__stone b{font:600 clamp(1.4rem,3.4vh,1.85rem)/1.08 var(--jy-font-han);color:#18201c}
.jyh-sf__stone small{color:#4b5a51;font-size:.72rem;font-weight:700}
.jyh-sf__stone.is-word{background:radial-gradient(120% 95% at 30% 16%,#fffaf0 0,#f3e6c8 45%,#dcc596 100%);box-shadow:0 0 0 2px #d9b66a,inset 0 -4px 7px rgba(120,90,40,.3),0 7px 0 -3px rgba(9,34,29,.6),0 14px 18px -10px rgba(0,0,0,.75);animation:jyhSfRise .5s var(--jy-ease-out) both}
.jyh-sf__stone.is-word b{color:#8a5a10}
@keyframes jyhSfRise{from{transform:translateY(16px) scale(.8);opacity:0}to{transform:none;opacity:1}}
.jyh-sf__punct{align-self:flex-end;padding:0 0 14px;color:#eef5f0;font:600 1.4rem/1 var(--jy-font-han)}
/* vũng xoáy giữa hai phiến đá: hai vòng sóng quanh một đồng xu chữ cái */
.jyh-sf__pool{position:relative;display:grid;place-items:center;width:48px;height:48px;margin:0 -2px 8px;border:0;border-radius:50%;cursor:pointer;
  background:radial-gradient(circle,rgba(9,30,26,.92) 0 32%,rgba(28,74,65,.85) 33% 55%,rgba(205,236,224,.3) 56% 58%,transparent 60%,rgba(205,236,224,.14) 70% 71.5%,transparent 73%)}
.jyh-sf__pool i{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#f4efe3;box-shadow:0 2px 0 rgba(0,0,0,.35),inset 0 -2px 0 rgba(120,110,90,.25);color:#a8322c;font:800 .82rem/1 var(--jy-font-ui);font-style:normal}
.jyh-sf__pool::after{content:"";position:absolute;inset:-4px;border:1px solid rgba(232,214,160,.5);border-radius:50%;animation:jyhSfRipple 2.6s ease-out infinite}
@keyframes jyhSfRipple{from{transform:scale(.7);opacity:.9}to{transform:scale(1.25);opacity:0}}
.jyh-sf__pool:hover i,.jyh-sf__pool:focus-visible i{background:#fff8e6;box-shadow:0 0 0 3px rgba(232,194,122,.75)}
.jyh-sf__pool:focus-visible{outline:none}
.jyh-sf__pool.is-right i{background:#e8c27a;color:#1c1714;box-shadow:0 0 0 4px rgba(232,194,122,.6)}
.jyh-sf__pool.is-bad i{background:#6d7a74;color:#e9e2d2}
.jyh-sf__pool.is-off{opacity:.25;pointer-events:none}
/* chén: nhĩ bôi sơn mài đời Hán, ngoài đen, lòng son, viền vàng; mảnh giấy chở chữ đứng trong chén */
.jyh-sf__cup{position:absolute;left:0;top:0;z-index:2;width:68px;height:56px;pointer-events:none;transition:transform .55s cubic-bezier(.3,.7,.3,1)}
.jyh-sf__cupart{position:absolute;left:-14px;top:0;width:96px;height:56px;overflow:visible}
.jyh-sf__cupword{position:absolute;left:50%;bottom:20px;display:grid;justify-items:center;min-width:40px;padding:4px 8px 5px;border-radius:2px;
  background:url(game-art/tex-paper.svg) 0 0/120px 120px,#f6efe0;color:#1c1714;box-shadow:inset 0 2px 0 #b0342a,0 3px 7px rgba(0,0,0,.5);transform:translateX(-50%);animation:jyhSfBob 2.4s ease-in-out infinite}
.jyh-sf__cupword b{font:600 1.3rem/1.1 var(--jy-font-han)}
.jyh-sf__cupword small{color:#6a4a26;font-size:.66rem;font-weight:700}
.jyh-sf__cupword small:empty{display:none}
@keyframes jyhSfBob{50%{transform:translateX(-50%) translateY(-2px) rotate(2deg)}}
.jyh-sf__cup.is-in .jyh-sf__cupword{animation:none;opacity:0;transition:opacity .3s}
.jyh-sf__cup.is-bump{animation:jyhSfBump .6s}
@keyframes jyhSfBump{30%{rotate:-12deg}60%{rotate:8deg}}
.jyh-sf__why{min-height:1.5em;max-width:760px;margin:0;color:#dfe9e1;font-weight:600;text-align:center}
.jyh-sf__why:not(:empty){padding:12px 20px 13px 24px;color:#24170f;text-align:left;line-height:1.5}
.jyh-sf__why.is-ok{color:#24170f}.jyh-sf__why.is-bad{color:#24170f}
@media (max-width:640px){
  .jyh-sf__lane{padding:14px 10px 92px}
  .jyh-sf__stone{min-width:42px;padding:9px 9px 11px}
  .jyh-sf__pool{width:42px;height:42px}
}

/* ================= 09 · Tủ thuốc trăm ngăn: mặt ngăn kéo gỗ hồng mộc, khung nhãn đồng, quai đồng ================= */
.jyh-cb9{position:relative;z-index:1;display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,1.7vh,16px);width:100%;max-width:1000px;margin:0 auto}
/* đơn thuốc (đề) ở trên, công cụ bên cạnh */
.jyh-cb9__counter{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 12px;width:100%}
.jyh-cb9__pack{display:grid;flex:0 1 760px;justify-items:center;gap:8px;min-width:0;padding:18px 28px 20px;text-align:center}
.jyh-cb9__pack::before{content:"";position:absolute;inset:7px;border:1px solid rgba(168,50,44,.42);border-radius:2px;box-shadow:inset 0 0 0 3px rgba(248,241,225,0),inset 0 0 0 4px rgba(168,50,44,.18);pointer-events:none}
.jyh-cb9__pack>*{position:relative}
.jyh-cb9__kicker{padding:3px 10px;border-radius:3px;background:#a8322c;color:#fbf4e6;font-size:.78rem;font-weight:800;letter-spacing:.01em}
.jyh-cb9__sent{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:2px;margin:0;color:#1d130d;font:500 clamp(1.5rem,3.9vh,2.1rem)/1.25 var(--jy-font-han)}
.jyh-cb9__tk{display:grid;justify-items:center}
.jyh-cb9__tk small{color:#7a5a32;font:600 .68rem/1.2 var(--jy-font-ui)}
.jyh-cb9__tk.is-hi b{padding:0 3px;background:linear-gradient(0deg,rgba(214,169,85,.6) 30%,transparent 30%);color:#8a2420}
.jyh-cb9__tk.is-blank b{display:inline-block;min-width:1.4em;border-bottom:2px solid #b8893a;color:#b8893a}
.jyh-cb9__mean{margin:0;color:#5b4130;font:500 1rem/1.4 var(--jy-font-title)}
.jyh-cb9__again{margin:0;color:#a8322c;font-size:.8rem;font-weight:700}
.jyh-cb9__pack.is-fly{animation:jyhCbFly .7s var(--jy-ease-out)}
@keyframes jyhCbFly{40%{transform:translateY(-10px) scale(.97);opacity:.75}100%{transform:none;opacity:1}}
/* thân tủ: gỗ hồng mộc có thớ, viền ngoài sẫm, hàng ngăn đang hỏi được đèn rọi */
.jyh-cb9__wall{display:grid;gap:8px;width:100%;padding:14px;border-radius:5px;
  background:url(game-art/tex-wood.svg) 0 0/320px 160px,linear-gradient(180deg,#3d1b12,#2a120c);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.6),inset 0 2px 0 rgba(255,214,170,.08),0 0 0 3px #1a0a06,0 0 0 4px rgba(214,170,110,.22),0 30px 50px -28px #000}
.jyh-cb9__decrow{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.jyh-cb9__row{display:grid;grid-template-columns:repeat(var(--k,3),minmax(0,1fr));gap:8px;margin:0 -6px;padding:6px;border-radius:4px;background:radial-gradient(70% 150% at 50% 50%,rgba(242,196,111,.14),transparent 72%)}
.jyh-cb9__wall.is-wide .jyh-cb9__row{grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr))}
.jyh-cb9__dec,.jyh-cb9__dr{background:radial-gradient(140% 100% at 30% 0%,rgba(255,206,160,.1),transparent 60%),url(game-art/tex-wood.svg) 0 0/320px 160px,linear-gradient(180deg,#6a3222,#55261a);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.55),inset 2px 2px 0 rgba(255,214,170,.1),inset -2px -2px 0 rgba(0,0,0,.28),0 2px 0 rgba(0,0,0,.45)}
/* ngăn trang trí: tối hơn, nhãn vị thuốc mờ, quai nhỏ */
.jyh-cb9__dec{position:relative;display:grid;place-items:center;min-height:clamp(42px,6.5vh,58px);padding-bottom:10px;border-radius:2px;filter:brightness(.6) saturate(.85)}
.jyh-cb9__dec::before{content:attr(data-h);min-width:2.6em;padding:1px 8px;border-radius:1px;background:rgba(241,231,208,.85);box-shadow:0 0 0 1.5px #9a7436;color:#3a2418;font:500 .8rem/1.35 var(--jy-font-han);letter-spacing:.08em;text-align:center}
.jyh-cb9__dec i{position:absolute;left:50%;bottom:5px;width:20px;height:7px;margin-left:-10px;border:1.5px solid #b48a44;border-top:0;border-radius:0 0 10px 10px}
/* ngăn trả lời */
.jyh-cb9__dr{position:relative;display:grid;align-content:center;justify-items:center;gap:6px;min-height:clamp(90px,13vh,118px);padding:12px 10px 30px;border:0;border-radius:2px;cursor:pointer;color:#241612;transition:transform .16s var(--jy-ease-out),box-shadow .16s}
.jyh-cb9__tag{display:grid;justify-items:center;gap:3px;min-width:68%;padding:7px 12px;border-radius:2px;background:linear-gradient(180deg,#f7efdc,#ebdfc3);
  box-shadow:0 0 0 2px #b88d44,0 0 0 3px #5e421a,0 3px 5px 2px rgba(0,0,0,.35),inset 0 0 12px rgba(160,130,80,.18)}
.jyh-cb9__tag b{color:#1f130e;font:600 clamp(1.3rem,3.3vh,1.75rem)/1.1 var(--jy-font-han)}
.jyh-cb9__tag small{color:#6a3a22;font-size:.75rem;font-weight:700;line-height:1.2}
.jyh-cb9__dr[class*="jyh-role--"] .jyh-cb9__tag{box-shadow:0 0 0 2px #b88d44,0 0 0 3px #5e421a,0 3px 5px 2px rgba(0,0,0,.35),inset 0 -3px 0 var(--rc)}
/* quai đồng: đế + quai cong, đung đưa khi kéo */
.jyh-cb9__pull{position:absolute;left:50%;bottom:8px;width:40px;height:15px;margin-left:-20px;transform-origin:50% 0}
.jyh-cb9__pull::before{content:"";position:absolute;left:4px;right:4px;top:0;height:6px;border-radius:3px;background:linear-gradient(180deg,#f2d999,#b88a40 60%,#7a5420);box-shadow:0 1px 1px rgba(0,0,0,.55)}
.jyh-cb9__pull::after{content:"";position:absolute;left:1px;right:1px;top:3px;height:12px;border:2.5px solid #d7ad5c;border-top:0;border-radius:0 0 15px 15px;box-shadow:0 2px 2px rgba(0,0,0,.45)}
.jyh-cb9__dr .jyh-kbd{position:absolute;top:5px;left:7px;color:rgba(243,234,216,.6);font:700 .66rem/1 var(--jy-font-ui);font-style:normal}
@media (pointer:coarse){.jyh-cb9__dr .jyh-kbd{display:none}}
.jyh-cb9__dr:hover{transform:translateY(-1px);box-shadow:inset 0 0 0 1px rgba(0,0,0,.55),inset 2px 2px 0 rgba(255,214,170,.16),inset -2px -2px 0 rgba(0,0,0,.28),0 0 0 1px rgba(230,194,122,.75),0 8px 16px -8px rgba(0,0,0,.8)}
.jyh-cb9__dr:hover .jyh-cb9__pull::after{border-color:#f3d792}
.jyh-cb9__dr:focus-visible{outline:2px solid #e6c27a;outline-offset:3px}
.jyh-cb9__dr.is-open{animation:jyhCbOpen .9s var(--jy-ease-out)}
.jyh-cb9__dr.is-open .jyh-cb9__pull{animation:jyhCbSwing .9s ease-in-out}
@keyframes jyhCbOpen{20%{transform:translateY(-2px) scale(1.05);box-shadow:0 0 0 2px #e6c27a,0 16px 26px -10px rgba(0,0,0,.9)}60%{transform:scale(1.02)}}
@keyframes jyhCbSwing{20%{transform:rotate(18deg)}45%{transform:rotate(-12deg)}70%{transform:rotate(6deg)}}
.jyh-cb9__dr.is-shake{animation:jyhOrShake .36s}
.jyh-cb9__dr.is-hint{box-shadow:inset 0 0 0 1px rgba(0,0,0,.55),0 0 0 3px #e6c27a,0 0 24px rgba(230,194,122,.55)}
.jyh-cb9__dr.is-off{opacity:.3;pointer-events:none}
.jyh-cb9__dr.is-wide{min-height:clamp(80px,12vh,112px)}
.jyh-cb9__dr.is-wide .jyh-cb9__tag b{font:600 clamp(.98rem,2.3vh,1.18rem)/1.25 var(--jy-font-han)}
.jyh-cb9__dr.is-wide .jyh-cb9__tag small{font-size:.8rem}
/* giải thích: mặt sau đơn thuốc */
.jyh-cb9__why{display:grid;gap:6px;padding:14px 20px 16px 24px;color:#24170f;text-align:left;line-height:1.5}
.jyh-cb9__why p{margin:0}
.jyh-cb9__why .jyh-cb9__mean{color:#7a5532}
.jyh-cb9__ok{color:#2f6a45;font-weight:800}.jyh-cb9__bad{color:#a3281f;font-weight:800}
.jyh-cb9__def{color:#5a4632;font-size:.9rem}
.jyh-cb9__full{color:#1d130d;font:500 1.25rem/1.3 var(--jy-font-han)}
@media (max-width:640px){
  .jyh-cb9__wall{padding:10px}
  .jyh-cb9__decrow{grid-template-columns:repeat(3,minmax(0,1fr))}
  .jyh-cb9__decrow .jyh-cb9__dec:nth-child(n+4){display:none}
  .jyh-cb9__row{grid-template-columns:repeat(min(var(--k,3),3),minmax(0,1fr))}
  .jyh-cb9__pack{padding:16px 18px 18px}
}
@media (max-width:640px){
  .jyh-gtools{flex:1 1 100%}
  .jyh-gtools .jyh-btn{flex:1 1 0}
}
.jyh-gres__wrong--sent .jyh-gres__w .jyh-han{font-size:1.05rem}
@media (prefers-reduced-motion:reduce){
  .jyh-or__paper,.jyh-or__seal,.jyh-or__slot .jyh-or__blk,.jyh-sf__stone.is-word,.jyh-cb9__pack.is-fly,.jyh-cb9__dr.is-open,.jyh-cb9__dr.is-open .jyh-cb9__pull{animation:none}
  .jyh-sf__lane,.jyh-sf__flow,.jyh-sf__pool::after,.jyh-sf__cupword,.jyh-or__slot.is-next{animation:none}
  .jyh-sf__cup{transition:none}
}

/* ==========================================================================
   v1.6.4 · Hướng dẫn nhanh: đi một vòng qua các chức năng chính
   Vòng sáng quanh chỗ đang chỉ (phần còn lại của trang tối đi) + thẻ hướng dẫn cạnh đó.
   ========================================================================== */
.jyh-tour{position:fixed;inset:0;z-index:2147482700;pointer-events:none;font-family:var(--jy-font-ui);color:var(--jy-ink);opacity:0;transition:opacity var(--jy-t-base) var(--jy-ease-out)}
.jyh-tour.is-in{opacity:1}
.jyh-tour__block{position:fixed;inset:0;pointer-events:auto;background:transparent;cursor:default}
.jyh-tour.is-free .jyh-tour__block{background:rgba(var(--jy-ink-rgb),.58)}
.jyh-tour__ring{position:fixed;left:50%;top:50%;width:0;height:0;border-radius:var(--jy-r-tile);pointer-events:none;
  box-shadow:0 0 0 3px rgba(var(--jy-gold-rgb),.95),0 0 0 9px rgba(var(--jy-gold-rgb),.22),0 0 0 200vmax rgba(var(--jy-ink-rgb),.58);
  transition:left var(--jy-t-slow) var(--jy-ease-out),top var(--jy-t-slow) var(--jy-ease-out),width var(--jy-t-slow) var(--jy-ease-out),height var(--jy-t-slow) var(--jy-ease-out),opacity var(--jy-t-base)}
.jyh-tour.is-busy .jyh-tour__ring{transition-duration:var(--jy-t-base)}
.jyh-tour__card{position:fixed;left:50%;top:50%;width:min(380px,calc(100vw - 24px));pointer-events:auto;border:1px solid var(--jy-line);border-radius:var(--jy-r-tile);background:var(--jy-surface);
  box-shadow:0 26px 70px -18px rgba(var(--jy-ink-rgb),.55);transition:left var(--jy-t-slow) var(--jy-ease-out),top var(--jy-t-slow) var(--jy-ease-out),opacity var(--jy-t-base)}
.jyh-tour.is-busy .jyh-tour__card{opacity:.9}
.jyh-tour__card.is-nudge{animation:jyhTourNudge .36s var(--jy-ease-out)}
@keyframes jyhTourNudge{0%,100%{translate:0}25%{translate:-5px 0}75%{translate:5px 0}}
.jyh-tour__in{position:relative;padding:14px 16px 14px 18px}
.jyh-tour__head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.jyh-tour__ic{display:grid;place-items:center;flex:none;width:34px;height:34px;border-radius:10px;background:linear-gradient(150deg,var(--jy-accent-hi),var(--jy-accent-lo));color:#fff6ea}
.jyh-tour__ic .jyh-i{width:18px;height:18px}
.jyh-tour__count{flex:1;color:var(--jy-accent);font-size:.75rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.jyh-tour__x{margin-right:-6px}
.jyh-tour__t{margin:0 0 6px;font:500 1.3125rem/1.25 var(--jy-font-title);color:var(--jy-ink)}
.jyh-tour__x2{margin:0;color:#4b3d34;font-size:.9375rem;line-height:1.58}
.jyh-tour__bar{height:3px;margin:14px 0 12px;border-radius:3px;background:var(--jy-line2);overflow:hidden}
.jyh-tour__bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--jy-gold),var(--jy-accent));transition:width var(--jy-t-slow) var(--jy-ease-out)}
.jyh-tour__foot{display:flex;align-items:center;justify-content:space-between;gap:10px}
.jyh-tour__skip{padding-inline:2px;color:var(--jy-muted)}
.jyh-tour__nav{display:flex;gap:8px;margin-left:auto}
.jyh-tour__nav .jyh-btn{min-height:42px}
/* Mũi tên chỉ về chỗ đang nói tới */
.jyh-tour__arrow{position:absolute;width:14px;height:14px;background:var(--jy-surface);border:1px solid var(--jy-line);transform:rotate(45deg);display:none}
.jyh-tour__card[data-side="below"] .jyh-tour__arrow{display:block;top:-8px;margin-left:-7px;border-right:0;border-bottom:0}
.jyh-tour__card[data-side="above"] .jyh-tour__arrow{display:block;bottom:-8px;margin-left:-7px;border-left:0;border-top:0}
.jyh-tour__card[data-side="right"] .jyh-tour__arrow{display:block;left:-8px;margin-top:-7px;border-top:0;border-right:0}
.jyh-tour__card[data-side="left"] .jyh-tour__arrow{display:block;right:-8px;margin-top:-7px;border-bottom:0;border-left:0}
/* Điện thoại: thẻ nằm sát đáy, chỗ đang chỉ ở phần trên màn hình */
.jyh-tour__card.is-dock{left:12px!important;right:12px;top:auto;width:auto;max-height:min(52vh,420px);overflow:auto;border-radius:16px}
.jyh-tour__card.is-dock:not(.is-docktop){top:auto!important}
.jyh-tour__card.is-docktop{bottom:auto}
.jyh-tour__card.is-dock .jyh-tour__in{padding:12px 14px 14px}
.jyh-tour__card.is-dock .jyh-tour__t{font-size:1.1875rem}
.jyh-tour__card.is-dock .jyh-tour__x2{font-size:.9063rem}
@media (max-width:380px){.jyh-tour__nav .jyh-btn{padding-inline:12px}}
body.jyh-tour-on .toki-floating{pointer-events:none}
body.jyh-reduce .jyh-tour,body.jyh-reduce .jyh-tour__ring,body.jyh-reduce .jyh-tour__card,body.jyh-reduce .jyh-tour__bar span{transition:none}
@media (prefers-reduced-motion:reduce){.jyh-tour,.jyh-tour__ring,.jyh-tour__card,.jyh-tour__bar span{transition:none}.jyh-tour__card.is-nudge{animation:none}}
@media print{.jyh-tour{display:none}}

/* v1.6.5 · Bước "Bên trong mỗi bài HSK": các mục của bài và liên kết mở thử */
.jyh-tour__extra{display:grid;gap:10px;margin:2px 0 4px}
.jyh-tour__parts{display:flex;flex-wrap:wrap;gap:5px;margin:0;padding:0;list-style:none}
.jyh-tour__parts li{padding:3px 9px;border:1px solid var(--jy-line);border-radius:999px;background:var(--jy-cream);color:var(--jy-ink);font-size:.75rem;font-weight:700;line-height:1.35}
.jyh-tour__parts li.is-key{border-color:var(--jy-accent);background:var(--jy-accent);color:#fff8ee}
.jyh-tour__link{justify-self:start;gap:6px}
.jyh-tour__link .jyh-i:last-child{font-size:.95em}
@media (max-width:639px){.jyh-tour__extra{gap:8px}.jyh-tour__parts{gap:4px}.jyh-tour__parts li{padding:1px 7px;font-size:.6875rem}.jyh-tour__link{min-height:36px}}

/* ==========================================================================
   99. CHUYỂN ĐỘNG CHUNG VÀ CHẾ ĐỘ GIẢM HIỆU ỨNG (K30)
   ========================================================================== */
.jyh-shake{animation:jyhShake 400ms var(--jy-ease-out)}
@keyframes jyhShake{0%,100%{transform:none}20%{transform:translateX(-8px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
.jyh-sky.is-paused *{animation-play-state:paused!important}
.jyh-fillme{fill:currentColor}

/* Giảm hiệu ứng: thay bằng mờ dần ngắn, tắt hạt, tắt lệch sao, tắt rung.
   study-hub.js gắn body.jyh-reduce theo cài đặt hoặc prefers-reduced-motion. */
@keyframes jyhFade{from{opacity:0}to{opacity:1}}
body.jyh-reduce .jyh-sky__stars,
body.jyh-reduce .jyh-sky__spark,
body.jyh-reduce .jyh-sky__shoot,
body.jyh-reduce .jyh-loading__han,
body.jyh-reduce .jyh-skel::after{animation:none!important}
body.jyh-reduce .jyh-sky__par{transform:none!important}
body.jyh-reduce .jyh-shake{animation:none!important}
body.jyh-reduce .jyh-panel.is-entering,
body.jyh-reduce .jyh-res,
body.jyh-reduce .jyh-toast,
body.jyh-reduce .jyh-fc.is-enter,
body.jyh-reduce .jyh-stamp.is-on,
body.jyh-reduce .jyh-search-panel{animation:jyhFade 160ms linear both!important}
body.jyh-reduce .jyh-fc__inner{transition:none!important}
body.jyh-reduce .jyh-fc__back .jyh-ticket__body::before{display:none}
body.jyh-reduce .jyh-sheet,body.jyh-reduce .jyh-full,body.jyh-reduce .jyh-palette{transform:none!important;transition:opacity 160ms linear!important}
body.jyh-reduce .jyh-tabs__ink{transition:none}
body.jyh-reduce .jyh-next.is-torn .jyh-ticket__stub{animation:none!important}
body.jyh-reduce .jyh-task.is-justdone .jyh-check{animation:none}
body.jyh-reduce .jyh-week__bar{transition:none}
body.jyh-reduce .jyh-start .jyh-i{transition:none}
@media (prefers-reduced-motion:reduce){
  .jyh-sky__stars,.jyh-sky__spark,.jyh-sky__shoot,.jyh-loading__han{animation:none!important}
}
