/* ═══════════════════════════════════════════════════════
   MNN Learning — みんなの日本語
   styles.css — All application styles
   Extracted from index.html (main CSS + splash CSS)
   ═══════════════════════════════════════════════════════ */
    /* ═══════════════════════════════════════════════════
       1. CSS CUSTOM PROPERTIES — THEME VARIABLES
    ═══════════════════════════════════════════════════ */
    :root {
      --transition-theme: background-color 0.35s ease, color 0.35s ease,
                          border-color 0.35s ease, box-shadow 0.35s ease;
      /* Tier warna aksen (dipakai buat badge/border/glow tint) — default: tema Biru */
      --accent-t1: #60a5fa; --accent-t1-rgb: 96,165,250;
      --accent-t2: #3b82f6; --accent-t2-rgb: 59,130,246;
      --accent-t3: #1d4ed8; --accent-t3-rgb: 37,99,235;
      --accent-primary: #3b7dd8;
      --accent-noun:    #4a9eff;
      --accent-verb:    #34d399;
      --accent-adj:     #fb923c;
      --accent-danger:  #f87171;
      --accent-success: #34d399;
      --accent-kana:    #e03c4c;
      /* Warna khas per-tab nav bawah — biar tiap panel kerasa beda pas aktif, bukan monoton */
      --tab-dashboard: var(--accent-primary);
      --tab-materi:    #34d399;
      --tab-quiz:      #fb923c;
      --tab-kotoba:    #a78bfa;
      --tab-kana:      #22d3ee;
      --tab-settings:  #94a3b8;
      --tab-sensei:    #f472b6;

      /* Palet warna resmi MNN Learning — diambil dari logo (navy + merah torii/matahari) */
      --mnn-navy:       #1c3a5e;
      --mnn-navy-dark:  #122A45;
      --mnn-navy-rgb:   28,58,94;
      --mnn-red:        #c0392b;
      --mnn-red-dark:   #a5281c;
      --mnn-red-rgb:    192,57,43;
      --mnn-cloud:      #94a3b8;
      --mnn-ornament-bg: url("assets/ornament-dark.jpeg");
      --mnn-third:      #c0392b;
      --mnn-third-rgb:  192,57,43;
      /* Navy dipakai sebagai warna PERMUKAAN (card/hero) tetap navy gelap di semua tema.
         Tapi kalau dipakai sebagai warna TEKS/ICON di atas kartu, di dark mode dia butek
         karena mirip sama warna latar sendiri — makanya ada varian "-fg" yang lebih terang
         khusus buat teks/aksen, terpisah dari --mnn-navy yang tetap dipakai buat permukaan. */
      --mnn-navy-fg:     var(--mnn-navy);
      --mnn-navy-fg-rgb: var(--mnn-navy-rgb);
    }

    /* ── Tema Warna: Ungu (Klasik) — opsional, dipilih lewat Setelan ── */
    [data-accent="purple"] {
      --accent-t1: #c4b5fd; --accent-t1-rgb: 196,181,253;
      --accent-t2: #a78bfa; --accent-t2-rgb: 167,139,250;
      --accent-t3: #7c3aed; --accent-t3-rgb: 124,58,237;
    }

    [data-theme="dark"] {
      --accent-primary: #6fa8f0;
      --bg-base:        #0a1830;
      --bg-surface:     #10233f;
      --bg-elevated:    #15304f;
      --bg-glass:       rgba(15,35,63,0.72);
      --bg-card:        #122a48;
      --bg-card-hover:  #17335a;
      --border:         rgba(255,255,255,0.09);
      --border-strong:  rgba(255,255,255,0.18);
      --text-primary:   #f5f8ff;
      --text-secondary: #a3b5d4;
      --text-muted:     #5f7796;
      --text-inverse:   #0a1830;
      --shadow-card:    0 8px 28px rgba(0,0,0,.4), 0 1px 3px rgba(0,0,0,.3);
      --shadow-float:   0 24px 70px rgba(0,0,0,.5), 0 6px 18px rgba(0,0,0,.35);
      --nav-bg:         rgba(10,24,48,0.92);
      --header-bg:      rgba(10,24,48,0.88);
      --mnn-navy-fg:     #5b9bf0;
      --mnn-navy-fg-rgb: 91,155,240;
    }
    [data-theme="dark"][data-accent="purple"] { --accent-primary: #c4b5fd; }
    [data-theme="dark"][data-accent="red"] { --accent-primary: #e0776b; --accent-t1: #e0776b; --accent-t1-rgb: 224,119,107; }

    [data-theme="light"] {
      --accent-primary: var(--mnn-navy);
      --bg-base:        #f5f5f7;
      --bg-surface:     #ffffff;
      --bg-elevated:    #ffffff;
      --bg-glass:       rgba(255,255,255,0.78);
      --bg-card:        #ffffff;
      --bg-card-hover:  #f8f8fc;
      --border:         rgba(0,0,0,0.07);
      --border-strong:  rgba(0,0,0,0.13);
      --text-primary:   #1a1a2e;
      --text-secondary: #5a5a7a;
      --text-muted:     #9a9ab8;
      --text-inverse:   #ffffff;
      --shadow-card:    0 2px 10px rgba(20,20,40,.06), 0 1px 2px rgba(20,20,40,.04);
      --shadow-float:   0 14px 40px rgba(20,20,40,.10), 0 4px 12px rgba(20,20,40,.05);
      --nav-bg:         rgba(245,245,247,0.92);
      --header-bg:      rgba(245,245,247,0.88);
    }
    [data-theme="light"][data-accent="purple"] { --accent-primary: #c4b5fd; }
    [data-theme="light"][data-accent="red"] { --accent-primary: var(--mnn-red); --accent-t1: var(--mnn-red); --accent-t1-rgb: var(--mnn-red-rgb); }

    /* ═══════════════════════════════════════════════════
       2. RESET & BASE
    ═══════════════════════════════════════════════════ */
    *, *::before, *::after { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
    html { font-size:16px; scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
    body {
      font-family: 'DM Sans','Noto Sans JP',system-ui,sans-serif;
      background-color: var(--bg-base);
      color: var(--text-primary);
      transition: var(--transition-theme);
      min-height: 100dvh;
      overflow-x: hidden;
      -webkit-font-smoothing: antialiased;
    }
    [data-theme="dark"] body {
      background-image:
        radial-gradient(ellipse 900px 500px at 50% -10%, rgba(91,155,240,.10), transparent 60%),
        radial-gradient(ellipse 700px 400px at 100% 15%, rgba(192,57,43,.08), transparent 60%);
      background-attachment: fixed;
    }
    ::-webkit-scrollbar { width:4px; height:4px; }
    ::-webkit-scrollbar-track { background:transparent; }
    ::-webkit-scrollbar-thumb { background:var(--border-strong); border-radius:99px; }
    /* Baris chip/filter yang di-scroll horizontal — sembunyikan scrollbar-nya total, lebih bersih (spt app mobile) */
    .kotoba-action-row, .kanji-set-tabs { scrollbar-width:none; }
    .kotoba-action-row::-webkit-scrollbar, .kanji-set-tabs::-webkit-scrollbar { display:none; }

    /* ═══════════════════════════════════════════════════
       3. LAYOUT
    ═══════════════════════════════════════════════════ */
    #app { max-width:430px; margin:0 auto; min-height:100dvh; display:flex; flex-direction:column; position:relative; }

    /* ═══════════════════════════════════════════════════
       4. STICKY HEADER
    ═══════════════════════════════════════════════════ */
    .header {
      position:sticky; top:0; z-index:100;
      background:var(--header-bg);
      backdrop-filter:blur(20px) saturate(180%);
      -webkit-backdrop-filter:blur(20px) saturate(180%);
      border-bottom:1px solid var(--border);
      padding:9px 18px;
      transition:var(--transition-theme);
    }
    .header-inner { display:flex; align-items:center; gap:10px; }
    .header-title { flex:1; }
    .header-title h1 { font-family:'Noto Sans JP',sans-serif; font-size:13px; font-weight:700; color:var(--text-secondary); letter-spacing:.02em; }
    .header-title .chapter-name { font-size:15px; font-weight:600; color:var(--text-primary); margin-top:1px; line-height:1.2; }
    .header-title--brand { display:flex; align-items:center; gap:8px; }
    .btn-sidebar-toggle { display:none; }
    .header-logo { width:26px; height:26px; border-radius:8px; object-fit:cover; flex-shrink:0; box-shadow:0 1px 4px rgba(var(--mnn-navy-rgb),.25); }
    .header-title--brand h1 { font-size:14.5px; font-weight:700; color:var(--text-primary); letter-spacing:.01em; margin:0; }
    .brand-kaizen { font-family:'Yellowtail',cursive; font-size:19px; font-weight:400; color:var(--mnn-red); margin-left:1px; line-height:1; position:relative; top:1px; }
    .header-actions { display:flex; align-items:center; gap:8px; }
    .guest-mode-badge {
      display:flex; align-items:center; gap:4px;
      padding:4px 9px; border-radius:99px;
      background:#000; border:1px solid #000;
      font-size:10px; font-weight:700; color:#fff;
      letter-spacing:.02em; cursor:pointer; flex-shrink:0; white-space:nowrap;
    }
    [data-theme="light"] .guest-mode-badge {
      background:#fff; border:1px solid rgba(0,0,0,.12);
      color:#000;
    }

    /* Progress Ring */
    .progress-ring { position:relative; width:36px; height:36px; flex-shrink:0; }
    .progress-ring svg { width:36px; height:36px; transform:rotate(-90deg); }
    .progress-ring .track { fill:none; stroke:var(--border-strong); stroke-width:2.5; }
    .progress-ring .fill {
      fill:none; stroke:var(--accent-primary); stroke-width:2.5; stroke-linecap:round;
      stroke-dasharray:88; stroke-dashoffset:88;
      transition:stroke-dashoffset 0.6s cubic-bezier(.4,0,.2,1);
    }
    .progress-ring .ring-label {
      position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
      font-size:8.5px; font-weight:700; color:var(--accent-primary); letter-spacing:-.02em;
    }

    /* Theme Toggle */
    .btn-theme {
      width:36px; height:36px; border-radius:50%;
      border:1px solid var(--border-strong); background:var(--bg-elevated);
      cursor:pointer; display:flex; align-items:center; justify-content:center;
      font-size:16px; transition:transform .25s ease, background .35s ease; flex-shrink:0;
    }
    .btn-theme:active { transform:scale(.88); }

    /* Install Pill — hidden by default */
    .btn-install { display:none !important; }

    /* Profile / Avatar button */
    .btn-profile {
      width:34px; height:34px; border-radius:50%;
      border:2px solid var(--border-strong);
      background:var(--bg-elevated);
      cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center;
      font-size:16px; overflow:hidden; flex-shrink:0;
      position:relative;
    }
    .btn-profile:active { transform:scale(.93); }
    .btn-profile.is-logged-in { border-color:var(--accent-primary); }
    #profile-avatar-icon { display:flex; align-items:center; justify-content:center; width:100%; height:100%; }
    .btn-profile-img { width:100%; height:100%; object-fit:cover; border-radius:50%; }
    .btn-profile-dot {
      position:absolute; bottom:0; right:0;
      width:9px; height:9px; border-radius:50%;
      background:var(--accent-verb); border:2px solid var(--bg-base);
      display:none;
    }
    .btn-profile.is-logged-in .btn-profile-dot { display:block; }

    /* Profile page — regular .page like Dashboard/Achievement (see .page / .page.active
       rules elsewhere); no fixed-overlay/sheet mechanics, so it inherits the same
       proven document-flow scrolling as every other page in the app. */
    #profile-panel-inner {
      display:flex; flex-direction:column; gap:14px;
      padding-bottom:24px;
    }
    @keyframes fadeInUp { from { transform:translateY(24px); opacity:0; } to { transform:translateY(0); opacity:1; } }
    .profile-hero {
      position:relative; overflow:hidden; border-radius:22px;
      padding:18px 16px; margin:0 0 4px; min-height:110px;
      display:flex; flex-direction:row; align-items:center; gap:14px;
      background-image: url("assets/ornament-light.jpeg");
      background-size:cover;
      background-position:50% 42%;
      background-repeat:no-repeat;
      border:1px solid var(--border);
      box-shadow:var(--shadow-card);
    }
    [data-theme="dark"] .profile-hero {
      background-image: url("assets/ornament-dark.jpeg");
    }
    .profile-hero-text { display:flex; flex-direction:column; gap:2px; min-width:0; }
    .profile-avatar-big {
      width:68px; height:68px; border-radius:50%;
      background:var(--bg-card); border:3px solid var(--mnn-red);
      display:flex; align-items:center; justify-content:center;
      font-size:28px; overflow:hidden; flex-shrink:0;
      box-shadow:0 4px 16px rgba(var(--mnn-red-rgb),.25);
    }
    .profile-name { font-size:19px; font-weight:700; color:var(--text-primary); text-align:left; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .profile-email { font-size:12px; color:var(--text-muted); text-align:left; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .profile-premium-badge-float {
      position:absolute; top:14px; right:14px; z-index:1;
    }
    .profile-stats-row {
      display:grid; grid-template-columns:repeat(3,1fr);
      gap:10px; text-align:center;
    }
    .profile-stat-box {
      padding:14px 6px 12px; border-radius:18px;
      background:var(--bg-card); border:1px solid var(--border);
      box-shadow:var(--shadow-card);
      display:flex; flex-direction:column; align-items:center;
    }
    .profile-stat-icon-badge {
      width:32px; height:32px; border-radius:50%;
      display:flex; align-items:center; justify-content:center;
      font-size:15px; line-height:1; margin-bottom:6px;
    }
    .profile-stat-icon-badge svg { width:16px; height:16px; }
    .profile-stat-val { font-size:19px; font-weight:800; color:var(--text-primary); line-height:1; }
    .profile-stat-lbl { font-size:10px; color:var(--text-muted); margin-top:4px; font-weight:600; letter-spacing:.04em; }
    .profile-action-card {
      background:var(--bg-elevated); border:1px solid var(--border-strong);
      border-radius:20px; box-shadow:var(--shadow-card);
      overflow:hidden; padding:4px;
    }
    .profile-action-list { display:flex; flex-direction:column; }
    .profile-action-item {
      display:flex; align-items:center; gap:12px;
      padding:12px 10px; border-radius:14px; cursor:pointer;
      transition:background .15s ease; border:none; background:none;
      width:100%; text-align:left; font-family:'DM Sans',sans-serif;
      border-bottom:1px solid var(--border);
    }
    .profile-action-list > .profile-action-item:last-child { border-bottom:none; }
    .profile-action-item:active { background:var(--bg-card-hover); }
    .profile-action-icon {
      flex-shrink:0; line-height:1;
      width:34px; height:34px; border-radius:11px;
      display:flex; align-items:center; justify-content:center;
      background:rgba(var(--mnn-navy-rgb),.1); color:var(--mnn-navy);
    }
    .profile-action-icon svg { width:17px; height:17px; }
    .profile-action-item.danger .profile-action-icon { background:rgba(var(--mnn-red-rgb),.12); color:var(--mnn-red); }
    .profile-action-chevron { margin-left:auto; color:var(--text-muted); font-size:14px; flex-shrink:0; }
    .profile-action-label { font-size:14px; font-weight:600; color:var(--text-primary); }
    .profile-action-sub { font-size:11px; color:var(--text-muted); margin-top:1px; }
    .profile-action-item.danger .profile-action-label { color:var(--accent-danger); }
    /* Login / auth-choice screen — contained hero card, using the app's existing ornament asset */
    .auth-hero-card {
      position:relative; overflow:hidden; border-radius:22px;
      padding:28px 20px 22px; margin-bottom:26px; width:100%; min-height:190px;
      display:flex; flex-direction:column; align-items:center; gap:8px; text-align:center;
      background-image: url("assets/ornament-light.jpeg");
      background-size:cover;
      background-position:60% 40%;
      background-repeat:no-repeat;
      border:1px solid var(--border);
      box-shadow:var(--shadow-card);
    }
    [data-theme="dark"] .auth-hero-card {
      background-image: url("assets/ornament-dark.jpeg");
    }

    /* Login form inside sheet */
    .profile-login-form { display:flex; flex-direction:column; gap:12px; }
    .profile-input {
      width:100%; padding:13px 14px; border-radius:18px;
      border:1.5px solid var(--border-strong); background:var(--bg-card);
      color:var(--text-primary); font-size:14px; font-family:'DM Sans',sans-serif;
      outline:none; box-sizing:border-box; transition:border-color .18s ease;
    }
    .profile-input:focus { border-color:var(--accent-primary); }

    /* ═══════════════════════════════════════════════════
       5. MAIN CONTENT
    ═══════════════════════════════════════════════════ */
    .main-content { flex:1; padding:20px 18px 100px; display:flex; flex-direction:column; gap:20px; }
    .section-label { font-size:11px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--text-muted); }

    /* ═══════════════════════════════════════════════════
       6. FLASHCARD — Mazii Style
    ═══════════════════════════════════════════════════ */
    /* Counter atas tengah */
    .fc-top-counter {
      text-align:center; font-size:13px; font-weight:500; color:var(--text-muted);
      letter-spacing:.04em; margin-bottom:6px; padding-top:2px;
    }
    .flashcard-scene { perspective:1200px; width:100%; }
    .flashcard-flipper {
      width:100%; min-height:220px; max-height:360px; aspect-ratio:5/3.6; position:relative;
      transform-style:preserve-3d;
      transition:transform .55s cubic-bezier(.4,.2,.2,1);
      cursor:pointer;
    }
    /* Di layar lebar (tablet/desktop), aspect-ratio akan mendorong tinggi
       melebihi max-height — abaikan aspect-ratio begitu lebar > ~520px
       supaya card tetap kompak seperti flashcard kanji. */
    @media (min-width:520px) {
      .flashcard-flipper { aspect-ratio:unset; height:300px; }
    }
    .flashcard-flipper.is-flipped { transform:rotateY(180deg); }
    .card-face {
      position:absolute; inset:0; border-radius:26px;
      backface-visibility:hidden; -webkit-backface-visibility:hidden;
      display:flex; flex-direction:column; align-items:center; justify-content:center;
      padding:24px 28px; overflow:hidden;
      background:var(--bg-card); border:1px solid var(--border-strong);
      box-shadow:var(--shadow-float);
      transition:background .35s ease, border-color .35s ease, box-shadow .35s ease;
    }
    .flashcard-scene[data-cat="noun"] .card-face,
    .flashcard-scene[data-cat="verb"] .card-face,
    .flashcard-scene[data-cat="adj"]  .card-face,
    .flashcard-scene[data-cat="other"] .card-face {
      box-shadow:var(--shadow-float), 0 0 0 2px var(--mnn-red);
      border-color:var(--mnn-red);
    }
    .card-back { transform:rotateY(180deg); justify-content:flex-start; padding-top:20px; gap:2px; overflow-y:auto; }
    /* [Fix] Kanji gak punya contoh kalimat kayak kosakata — balikin ke tengah biar gak nge-gantung di atas */
    #kanji-scene .card-back { justify-content:center; padding-top:0; }
    .card-category-tag { position:absolute; top:14px; left:14px; padding:3px 10px; border-radius:99px; font-size:10px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; }
    .tag-noun { background:rgba(74,158,255,.14); color:var(--accent-noun); }
    .tag-verb { background:rgba(52,211,153,.14); color:var(--accent-verb); }
    .tag-adj  { background:rgba(251,146,60,.14); color:var(--accent-adj); }
    .tag-other{ background:rgba(var(--accent-t1-rgb),.14); color:var(--accent-primary); }
    .card-kanji-wrap { text-align:center; max-width:100%; padding:0 6px; box-sizing:border-box; }
    /* [FIX v2.7.4] iOS Safari: ganti display:inline → display:ruby agar ruby layout proper;
       tambah ruby-position:over + -webkit-ruby-position:before untuk posisi furigana di atas */
    ruby { ruby-align:center; display:ruby; ruby-position:over; -webkit-ruby-position:before; }
    ruby rt { display:ruby-text; font-family:'Noto Sans JP',sans-serif; font-size:.54em; font-weight:400; color:var(--accent-primary); letter-spacing:.04em; opacity:.85; line-height:1; }
    /* [FIX] Furigana (gaya kurung） di dalam flow Bunpou (Struktur/Fungsi/Penjelasan/Contoh
       Kalimat) kekecilan — dibesarkan khusus di sini tanpa ganggu ukuran furigana di tempat lain. */
    .bunpou-detail-body .furi-paren { font-size:.85em; opacity:.9; }
    .bunpou-detail-body ruby rt { font-size:.68em; opacity:1; }
    /* Furigana inline parens style */
    /* [FIX v2.7.3] iOS: font-size .78em terlalu besar dengan Hiragino fallback → kecilkan ke .65em,
       tambah Hiragino ke font stack supaya metrics konsisten, cegah iOS auto-scale span */
    .furi-paren { font-family:'Noto Sans JP','Hiragino Sans','Hiragino Kaku Gothic Pro',sans-serif; font-size:.65em; color:var(--accent-primary); opacity:.75; letter-spacing:.01em; font-weight:400; -webkit-text-size-adjust:none; }
    body.furigana-off .furi-paren { display:none; }
    body.romaji-off .vocab-romaji { display:none; }
    body.romaji-off .card-romaji  { display:none; }
    body.romaji-off .reibun-romaji { display:none; }
    /* FRONT card */
    .card-main-text { font-family:'Noto Sans JP',sans-serif; font-size:40px; font-weight:800; color:var(--text-primary); line-height:1.3; text-align:center; letter-spacing:.02em; max-width:100%; word-break:keep-all; overflow-wrap:break-word; }
    .card-hint-mazii { position:absolute; bottom:14px; font-size:11px; color:var(--text-muted); letter-spacing:.06em; font-weight:400; }
    /* BACK card elements */
    .cb-furigana { font-family:'Noto Sans JP',sans-serif; font-size:22px; font-weight:600; color:var(--text-primary); text-align:center; }
    .cb-romaji { font-size:12px; color:var(--text-muted); font-style:italic; margin-top:2px; letter-spacing:.03em; text-align:center; }
    .cb-arti-label { font-size:9px; font-weight:700; letter-spacing:.1em; color:var(--text-muted); margin-top:10px; text-transform:uppercase; }
    .cb-arti-id { font-size:18px; font-weight:700; color:var(--accent-primary); text-align:center; margin-top:3px; }
    .cb-arti-en { font-size:13px; color:var(--text-secondary); text-align:center; margin-top:2px; }
    .cb-divider { width:80%; height:1px; background:var(--border-strong); margin:10px auto; }
    .cb-example-wrap { text-align:center; width:100%; }
    .cb-ex-jp { font-family:'Noto Sans JP',sans-serif; font-size:14px; color:var(--text-primary); line-height:1.5; }
    .cb-ex-romaji { font-size:11px; color:var(--text-muted); font-style:italic; margin-top:2px; letter-spacing:.02em; }
    .cb-ex-id { font-size:13px; color:var(--text-secondary); margin-top:3px; line-height:1.5; }

    /* Learned badge on card */
    .card-known-badge {
      position:absolute; top:14px; right:14px; padding:2px 8px; border-radius:99px;
      font-size:9px; font-weight:700; background:rgba(52,211,153,.14); color:var(--accent-verb);
      border:1px solid rgba(52,211,153,.25);
    }

    /* ═══════════════════════════════════════════════════
       7. CARD CONTROLS — Mazii style
    ═══════════════════════════════════════════════════ */
    .fc-controls-mazii { display:flex; align-items:center; gap:8px; margin-top:10px; }
    .fc-btn-mazii {
      flex:1; height:48px; border-radius:18px; border:1px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-primary); font-size:14px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center; gap:4px;
      box-shadow:var(--shadow-card);
    }
    .fc-btn-mazii:active { transform:scale(.96); }
    .fc-btn-star { flex:0 0 52px; font-size:20px; }
    .fc-btn-star.is-starred { color:#f59e0b; border-color:rgba(245,158,11,.3); background:rgba(245,158,11,.08); }
    .fc-btn-nav { background:var(--mnn-red); border-color:var(--mnn-red); color:#fff; }
    .fc-btn-nav:active { background:var(--mnn-red-dark); }
    /* legacy refs kept for TTS/mark */
    .card-controls { display:flex; align-items:center; gap:10px; margin-top:12px; }
    .btn-nav {
      flex:1; height:48px; border-radius:18px; border:1px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-primary); font-size:15px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center; gap:6px;
      box-shadow:var(--shadow-card);
    }
    .btn-nav:active { transform:scale(.96); }
    .btn-nav.btn-primary { background:var(--accent-primary); border-color:transparent; color:#0f0f1e; }
    .btn-tts { flex:0 0 48px !important; width:48px; font-size:18px; }
    .card-counter { flex-shrink:0; font-size:12px; font-weight:600; color:var(--text-muted); min-width:40px; text-align:center; }

    /* Mark learned + Quick Review row */
    .mark-row { display:flex; gap:8px; margin-top:8px; }
    .btn-mark-learned {
      flex:1; height:48px; border-radius:18px; border:1px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-secondary); font-size:13px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center; gap:6px;
    }
    .btn-mark-learned.is-learned { background:rgba(52,211,153,.1); border-color:rgba(52,211,153,.3); color:var(--accent-verb); }
    .btn-mark-learned:active { transform:scale(.98); }
    .btn-quick-review {
      flex:1; height:48px; border-radius:18px; padding:0 14px;
      border:1px solid rgba(var(--accent-t1-rgb),.25); background:rgba(var(--accent-t1-rgb),.08);
      color:var(--accent-primary); font-size:13px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center; gap:5px; white-space:nowrap;
    }
    .btn-quick-review:active { transform:scale(.97); }

    /* [SENTENCE_ENGINE] Difficulty toggle buttons */
    .ex-diff-btn {
      flex:1; padding:5px 8px; border-radius:10px; font-size:10px; font-weight:700;
      border:1px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-muted); cursor:pointer; transition:all .2s; min-width:58px;
    }
    .ex-diff-btn.active {
      background:rgba(99,102,241,.15); border-color:rgba(99,102,241,.4);
      color:var(--accent-primary);
    }
    .ex-diff-btn:active { transform:scale(.97); }

    /* ═══════════════════════════════════════════════════
       8. VOCABULARY LIST
    ═══════════════════════════════════════════════════ */
    .vocab-section { display:flex; flex-direction:column; gap:0; padding:2px 0; }
    .vocab-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }

    /* Setiap item = kartu terpisah, bukan tabel */
    .vocab-item {
      display:flex;
      flex-direction:row;
      align-items:center;
      gap:0;
      padding:0 14px;
      min-height:72px;
      margin-bottom:14px !important;
      background:var(--bg-card);
      border:2.5px solid var(--mnn-red);
      border-radius:20px;
      transition:background .18s ease, transform .12s ease;
      box-shadow:0 2px 8px rgba(0,0,0,.18);
      overflow:hidden;
    }
    .vocab-item:active { background:var(--bg-card-hover); transform:scale(.985); }
    .vocab-item.is-learned { border-color:rgba(52,211,153,.55); }

    /* Left cell: furigana + kanji/kana + romaji */
    .vocab-japanese {
      flex: 0 0 38%;
      max-width: 38%;
      padding: 14px 10px 14px 0;
      display:flex; flex-direction:column; justify-content:center; align-items:flex-start;
      min-width:0;
    }
    .vocab-furigana {
      font-family:'Noto Sans JP',sans-serif;
      font-size:10px; font-weight:400;
      color:var(--accent-primary); opacity:.9;
      letter-spacing:.04em;
      min-height:13px;
      line-height:1.2;
      white-space:nowrap; overflow:hidden; text-overflow:ellipsis; width:100%;
    }
    .vocab-kana {
      font-family:'Noto Sans JP',sans-serif;
      font-size:18px; font-weight:700;
      color:var(--text-primary); line-height:1.3;
      white-space:nowrap; overflow:hidden; text-overflow:ellipsis; width:100%;
    }
    .vocab-romaji {
      font-size:10px; color:var(--text-muted); font-style:italic;
      margin-top:2px;
      white-space:nowrap; overflow:hidden; text-overflow:ellipsis; width:100%;
    }

    /* Divider: pendek, tidak full-height, biar tidak kesan tabel */
    .vocab-divider {
      flex: 0 0 1px;
      width: 1px;
      height: 36px;       /* fixed pendek, bukan stretch */
      background: var(--border-strong);
      border-radius: 1px;
      align-self: center;
    }

    /* Right cell: meaning text, vertically centered */
    .vocab-meaning {
      flex:1;
      padding: 10px 0 10px 12px;
      font-size:13px; font-weight:500; color:var(--text-secondary);
      line-height:1.5; word-break:break-word;
      display:flex; align-items:center;
      min-width:0;
    }

    /* Learned dot — dipakai di Kotoba page (passive indicator) */
    .vocab-learned-dot {
      width:7px; height:7px; border-radius:50%;
      background:var(--accent-verb);
      justify-self:end; align-self:center;
      opacity:0; transition:opacity .2s;
    }
    .vocab-item.is-learned .vocab-learned-dot { opacity:1; }

    /* Tombol toggle "Sudah Hafal" — dipakai di Materi > Kosakata (interaktif) */
    .vocab-hafal-btn {
      width:26px; height:26px; border-radius:50%; flex-shrink:0; margin-left:auto;
      border:2px solid var(--border-strong); background:var(--bg-elevated);
      display:flex; align-items:center; justify-content:center;
      font-size:12px; font-weight:800; color:transparent; cursor:pointer;
      transition:all .15s ease;
    }
    .vocab-hafal-btn:active { transform:scale(.9); }
    .vocab-hafal-btn.is-learned { background:#34d399; border-color:#34d399; color:#0f0f1e; }

    .vocab-filter-chips { display:flex; gap:7px; margin-bottom:12px; }
    .vocab-filter-chip {
      flex:1; padding:7px 6px; border-radius:11px; border:1.5px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-muted); font-size:11px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; text-align:center; transition:all .15s ease;
    }
    .vocab-filter-chip.active { border-color:var(--mnn-red); background:rgba(var(--mnn-red-rgb),.08); color:var(--mnn-red); }

    /* ═══════════════════════════════════════════════════
       [Fix] Kartu kosakata KHUSUS panel Kotoba — ornamen navy gelap
       (scoped ke #page-kotoba biar TIDAK ikut mengubah tab Materi)
    ═══════════════════════════════════════════════════ */
    #page-kotoba .vocab-item {
      position:relative;
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1px solid rgba(255,255,255,.08);
      box-shadow:0 3px 10px rgba(var(--mnn-navy-rgb),.24);
    }
    #page-kotoba .vocab-item-ornament {
      position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:88% center;
      opacity:.35;
      -webkit-mask-image:linear-gradient(to left, rgba(0,0,0,1) 0%, rgba(0,0,0,.7) 45%, rgba(0,0,0,0) 100%);
      mask-image:linear-gradient(to left, rgba(0,0,0,1) 0%, rgba(0,0,0,.7) 45%, rgba(0,0,0,0) 100%);
      pointer-events:none;
    }
    #page-kotoba .vocab-item:has(.vocab-item-badge) { padding-top:16px; }
    #page-kotoba .vocab-item:active { background:none; transform:scale(.985); }
    #page-kotoba .vocab-item.is-learned { border-color:rgba(52,211,153,.4); }
    #page-kotoba .vocab-japanese { position:relative; z-index:1; }
    #page-kotoba .vocab-furigana { color:#e0776b; opacity:.95; }
    #page-kotoba .vocab-kana { color:#fff; }
    #page-kotoba .vocab-romaji { color:rgba(255,255,255,.55); }
    #page-kotoba .vocab-divider { position:relative; z-index:1; background:rgba(255,255,255,.18); }
    #page-kotoba .vocab-meaning { position:relative; z-index:1; color:rgba(255,255,255,.85); }
    #page-kotoba .vocab-learned-dot { position:relative; z-index:1; }

    /* ═══════════════════════════════════════════════════
              8b. KOTOBA PAGE
    ═══════════════════════════════════════════════════ */
    .kotoba-chip {
      flex-shrink:0; padding:7px 14px; border-radius:99px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-secondary); font-size:12px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .2s cubic-bezier(.4,0,.2,1);
      white-space:nowrap;
    }
    .kotoba-chip:active { transform:scale(.96); }
    .kotoba-chip.active {
      background:var(--mnn-red); border-color:var(--mnn-red);
      color:#fff; box-shadow:0 2px 10px rgba(var(--mnn-red-rgb),.35);
    }
    .kotoba-book-btn {
      flex:1; padding:8px 10px; border-radius:16px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-secondary); font-size:12px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .2s cubic-bezier(.4,0,.2,1);
      text-align:center; position:relative;
    }
    .kotoba-book-btn:active { transform:scale(.97); }
    .kotoba-book-btn.active {
      background:rgba(var(--accent-t1-rgb),.18); border-color:var(--accent-primary);
      color:var(--accent-primary); box-shadow:0 2px 10px rgba(var(--accent-t1-rgb),.2);
    }
    /* [v3.7.1] Redesign filter Kotoba: grid rapi, gak perlu scroll horizontal lagi */
    .kotoba-filter-group { display:flex; flex-direction:column; gap:8px; }
    .kotoba-chip-all { width:100%; border-radius:16px; padding:10px 14px; font-size:12.5px; }
    .kotoba-filter-grid2 { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
    .kotoba-filter-grid3 { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; }
    .kotoba-filter-grid2 .kotoba-chip, .kotoba-filter-grid3 .kotoba-book-btn, .kotoba-filter-grid2 .kotoba-book-btn { width:100%; white-space:normal; }

    /* ═══════════════════════════════════════════════════
       8d. KOTOBA PAGE — REDESIGN v3.8 (mockup: navy hero + ornamen torii,
       category cards, dark book hero)
    ═══════════════════════════════════════════════════ */

    /* Hero card — Ensiklopedia */
    .kotoba-hero-card {
      position:relative; overflow:hidden; border-radius:22px; padding:18px 20px 16px;
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1px solid rgba(255,255,255,.1);
      box-shadow:0 10px 30px rgba(0,0,0,.4);
    }
    .kotoba-hero-ornament {
      position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:78% center;
      opacity:.5;
      -webkit-mask-image:linear-gradient(to left, rgba(0,0,0,1) 0%, rgba(0,0,0,.9) 35%, rgba(0,0,0,0) 100%);
      mask-image:linear-gradient(to left, rgba(0,0,0,1) 0%, rgba(0,0,0,.9) 35%, rgba(0,0,0,0) 100%);
      pointer-events:none;
    }
    .kotoba-hero-content { position:relative; z-index:1; max-width:78%; }
    .kotoba-hero-label {
      font-size:11px; font-weight:800; letter-spacing:.09em; text-transform:uppercase;
      color:#e0776b; margin-bottom:6px;
    }
    .kotoba-hero-title-row { display:flex; align-items:center; gap:9px; margin-bottom:5px; }
    .kotoba-hero-icon {
      width:32px; height:32px; border-radius:10px; flex-shrink:0;
      background:rgba(var(--mnn-red-rgb),.9); color:#fff;
      display:flex; align-items:center; justify-content:center;
      box-shadow:0 2px 8px rgba(0,0,0,.25);
    }
    .kotoba-hero-icon svg { width:17px; height:17px; }
    .kotoba-hero-title { font-size:19px; font-weight:800; color:#fff; line-height:1.2; }
    .kotoba-hero-sub { font-size:11.5px; color:rgba(255,255,255,.72); font-weight:500; line-height:1.4; }

    /* [ADD] Progress ring panel: Dipelajari | % | Tersisa */
    .kotoba-hero-progress {
      position:relative; z-index:1;
      display:flex; align-items:center; justify-content:space-between;
      margin-top:12px; padding:10px 16px;
      background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.1);
      border-radius:16px;
    }
    .kotoba-hero-progress-stat { display:flex; flex-direction:column; gap:2px; min-width:0; }
    .kotoba-hero-progress-label { font-size:9.5px; color:rgba(255,255,255,.55); font-weight:600; }
    .kotoba-hero-progress-value { font-size:17px; font-weight:800; line-height:1.2; }
    .kotoba-hero-progress-ring { position:relative; width:54px; height:54px; flex-shrink:0; display:flex; align-items:center; justify-content:center; }
    .kotoba-hero-progress-ring svg { position:absolute; inset:0; }
    .kotoba-hero-progress-ring circle#kotoba-progress-ring-fg { transition:stroke-dashoffset .5s ease; }
    .kotoba-hero-progress-pct { position:relative; z-index:1; font-size:12px; font-weight:800; color:#fff; }

    /* Search + Upgrade CTA */
    .kotoba-search-wrap { display:flex; flex-direction:column; gap:9px; }
    .kotoba-search-box { position:relative; display:flex; align-items:center; }
    .kotoba-search-icon { position:absolute; left:14px; font-size:13px; opacity:.55; pointer-events:none; }
    .kotoba-search-input {
      width:100%; padding:12px 14px 12px 38px; border-radius:14px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated); color:var(--text-primary);
      font-size:13px; font-family:'DM Sans',sans-serif; transition:border-color .2s ease;
    }
    .kotoba-search-input:focus { border-color:rgba(var(--accent-t1-rgb),.4); outline:none; }
    .kotoba-search-input:disabled { opacity:.65; cursor:not-allowed; }
    .kotoba-upgrade-btn {
      width:100%; padding:13px; border-radius:14px; border:none;
      background:linear-gradient(135deg, var(--mnn-red) 0%, var(--mnn-red-dark) 100%);
      color:#fff; font-size:13px; font-weight:800; font-family:'DM Sans',sans-serif;
      cursor:pointer; display:flex; align-items:center; justify-content:center; gap:6px;
      box-shadow:0 4px 14px rgba(var(--mnn-red-rgb),.32); transition:transform .15s ease;
    }
    .kotoba-upgrade-btn:active { transform:scale(.98); }

    /* Category section head */
    .kotoba-section-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:2px; }
    .kotoba-section-title {
      font-size:11.5px; font-weight:800; letter-spacing:.07em; text-transform:uppercase; color:var(--text-muted);
      min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    }
    .kotoba-section-head .kotoba-chip-all { width:auto; flex-shrink:0; padding:5px 13px; font-size:10.5px; border-radius:99px; }

    /* Category cards — 3-col grid, row1: verb/adj/noun, row2: other + semua-buku(span 2) */
    .kotoba-cat-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-top:8px; }
    .kotoba-cat-card {
      display:flex; align-items:center; gap:7px; text-align:left; white-space:normal;
      padding:9px 8px; border-radius:14px;
      border:1.5px solid var(--border-strong); background:var(--bg-card);
      box-shadow:0 2px 6px rgba(0,0,0,.08);
      min-width:0; overflow:hidden;
    }
    .kotoba-cat-card.active {
      border-color:var(--mnn-red); background:rgba(var(--mnn-red-rgb),.07);
      box-shadow:0 2px 10px rgba(var(--mnn-red-rgb),.18);
    }
    .kotoba-cat-icon {
      width:30px; height:30px; border-radius:50%; flex-shrink:0;
      display:flex; align-items:center; justify-content:center;
    }
    .kotoba-cat-icon svg { width:15px; height:15px; }
    /* Fix: solid color bg (bukan rgba tint) supaya lebih menonjol, icon putih */
    .kotoba-cat-icon.tag-verb  { background:var(--accent-verb);  color:#fff; }
    .kotoba-cat-icon.tag-adj   { background:var(--accent-adj);   color:#fff; }
    .kotoba-cat-icon.tag-noun { background:var(--accent-noun); color:#fff; }
    .kotoba-cat-icon.tag-other { background:#8b90a0; color:#fff; }
    .kotoba-cat-card.active .kotoba-cat-icon {
      background:var(--mnn-red) !important; color:#fff !important;
    }
    .kotoba-cat-text { display:flex; flex-direction:column; gap:0; min-width:0; }
    .kotoba-cat-name { font-size:11.5px; font-weight:700; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .kotoba-cat-sub { font-size:9px; color:var(--text-muted); white-space:nowrap; }
    /* Lainnya sits col 1 row 2; Semua Buku spans remaining 2 cols on row 2 */
    .kotoba-cat-grid .kotoba-cat-card[data-cat="other"] { grid-column:1; }
    .kotoba-cat-grid .kotoba-book-hero { grid-column:2 / span 2; padding:9px 12px; }

    /* Book hero — "Semua Buku" navy ornament card, kini setengah lebar (span 2 col) */
    .kotoba-book-hero,
    .kotoba-book-hero.active {
      position:relative; overflow:hidden; display:flex; align-items:center; gap:8px;
      width:100%; min-width:0; padding:9px 12px; border-radius:14px; text-align:left;
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1.5px solid rgba(255,255,255,.08); color:#fff;
      box-shadow:0 3px 10px rgba(var(--mnn-navy-rgb),.22);
    }
    .kotoba-book-hero.active { border-color:rgba(var(--mnn-red-rgb),.6); }
    .kotoba-book-hero-ornament {
      position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:70% center;
      opacity:.4; pointer-events:none;
    }
    .kotoba-book-hero-icon {
      position:relative; z-index:1; width:28px; height:28px; border-radius:50%; flex-shrink:0;
      background:rgba(255,255,255,.16); display:flex; align-items:center; justify-content:center;
    }
    .kotoba-book-hero-icon svg { width:14px; height:14px; }
    .kotoba-book-hero-text { position:relative; z-index:1; flex:1; display:flex; flex-direction:column; gap:0; min-width:0; }
    .kotoba-book-hero-title { font-size:12px; font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .kotoba-book-hero-sub { font-size:9px; color:rgba(255,255,255,.65); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .kotoba-book-hero-arrow { position:relative; z-index:1; font-size:16px; color:rgba(255,255,255,.5); }

    /* [Fix] Buku I/II/III — default (belum dipilih) = merah solid; dipilih (active) = ornamen navy gelap */
    .kotoba-book-card {
      position:relative; overflow:hidden; display:flex; align-items:center; justify-content:center;
      gap:7px; width:100%; flex:none; min-width:0;
      padding:11px; border-radius:16px; border:1.5px solid rgba(var(--mnn-red-rgb),.3);
      background:var(--mnn-red);
      color:#fff; font-size:13px; font-weight:700;
      box-shadow:0 3px 10px rgba(var(--mnn-red-rgb),.25);
    }
    .kotoba-book-card svg { position:relative; z-index:1; width:16px; height:16px; flex-shrink:0; }
    .kotoba-book-card span:not(.kotoba-book-card-ornament) { position:relative; z-index:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
    .kotoba-book-card-ornament { display:none; }
    .kotoba-book-card.active {
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border-color:rgba(255,255,255,.08); color:#fff;
      box-shadow:0 3px 10px rgba(var(--mnn-navy-rgb),.22);
    }
    .kotoba-book-card.active .kotoba-book-card-ornament {
      display:block; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:60% center;
      opacity:.4; pointer-events:none;
    }
    .kotoba-book-card.locked { opacity:.55; }

    /* Vocab list item — v3.8 redesign (badge corner, listen button, star) */
    .vocab-item-badge {
      position:absolute; top:9px; left:12px; z-index:1;
      font-size:9px; font-weight:800; padding:2px 7px; border-radius:6px;
      background:rgba(255,255,255,.14); color:#ff8a75;
      letter-spacing:.03em;
    }
    .vocab-listen-btn {
      display:inline-flex; align-items:center; gap:4px; margin-top:3px;
      background:none; border:none; padding:0; cursor:pointer;
      font-size:10.5px; font-weight:700; color:#ff8a75;
      font-family:'DM Sans',sans-serif;
    }
    .vocab-listen-btn:active { opacity:.6; }
    /* [ADD] Wrapper pojok kanan-atas: tombol Hafal + Favorit bersebelahan */
    .vocab-item-actions {
      position:absolute; top:9px; right:10px; z-index:1;
      display:flex; align-items:center; gap:7px;
    }
    .vocab-fav-btn {
      position:static;
      background:none; border:none; cursor:pointer; font-size:14px; padding:2px;
      transition:opacity .15s ease;
    }
    /* [ADD] Tombol toggle "Sudah Hafal" di Kotoba — base .vocab-hafal-btn sudah ada
       (sama persis punya Materi), ini cuma override utk kartu navy gelap */
    #page-kotoba .vocab-hafal-btn { border-color:rgba(255,255,255,.4); background:transparent; }
    #page-kotoba .vocab-hafal-btn.is-learned { background:#34d399; border-color:#34d399; }

    /* [ADD] Filter "Semua / Belum Hafal / Sudah Hafal" utk list kosakata Kotoba */
    .kotoba-mastery-chips { display:flex; gap:7px; }
    .kotoba-mastery-chip {
      flex:1; min-width:0; padding:7px 4px; border-radius:11px; border:1.5px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-muted); font-size:11px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; text-align:center; transition:all .15s ease;
      overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    }
    .kotoba-mastery-chip.active { border-color:var(--mnn-red); background:rgba(var(--mnn-red-rgb),.08); color:var(--mnn-red); }

    .kotoba-book-btn.locked { opacity:.75; }
    .kotoba-book-btn.locked::after {
      content:'🔒'; font-size:10px; margin-left:4px; opacity:.8;
    }
    .kotoba-book-btn.locked.active {
      background:var(--bg-elevated); border-color:var(--border-strong); color:var(--text-secondary);
      box-shadow:none;
    }
    /* [REDESIGN v4.0] Action row (Flashcard/Review/Favorit/Acak) — list-card:
       kotak icon warna + judul/subtitle + chevron, bukan pill solid merah lagi */
    .kotoba-action-row { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
    .kotoba-action-card {
      display:flex; align-items:center; gap:10px;
      padding:10px 12px; border-radius:14px;
      border:1px solid var(--border); background:var(--bg-card);
      cursor:pointer; transition:all .15s ease; text-align:left;
      box-shadow:0 2px 6px rgba(0,0,0,.06);
      min-width:0;
    }
    .kotoba-action-card:active { transform:scale(.97); background:var(--bg-card-hover); }
    .kotoba-action-card-icon {
      width:34px; height:34px; border-radius:10px; flex-shrink:0; color:#fff;
      display:flex; align-items:center; justify-content:center;
    }
    .kotoba-action-card-icon svg { width:17px; height:17px; }
    .kotoba-action-card-text { display:flex; flex-direction:column; gap:1px; min-width:0; flex:1; }
    .kotoba-action-card-title { font-size:12.5px; font-weight:700; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .kotoba-action-card-sub { font-size:9.5px; color:var(--text-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .kotoba-action-card-chev { font-size:16px; color:var(--text-muted); opacity:.5; flex-shrink:0; }
    .kotoba-lesson-badge {
      display:inline-block; padding:2px 8px; border-radius:6px;
      background:rgba(var(--accent-t1-rgb),.12); border:1px solid rgba(var(--accent-t1-rgb),.2);
      font-size:9px; font-weight:700; color:var(--accent-primary);
      letter-spacing:.06em; text-transform:uppercase; margin-bottom:6px;
      font-family:'DM Sans',sans-serif;
    }
    .kotoba-cat-dot {
      display:inline-block; width:7px; height:7px; border-radius:50%;
      margin-left:4px; flex-shrink:0; align-self:center;
    }
    .kotoba-group-header {
      font-size:11px; font-weight:700; color:var(--text-muted);
      letter-spacing:.08em; text-transform:uppercase;
      padding:6px 2px 4px; border-bottom:1px solid var(--border);
      margin-bottom:4px;
    }

    /* ═══════════════════════════════════════════════════


    /* ═══════════════════════════════════════════════════
       8c. SOCIAL / ABOUT SECTION
    ═══════════════════════════════════════════════════ */
    .about-card {
      background:var(--bg-card); border:1px solid var(--border);
      border-radius:22px; padding:20px 18px;
      display:flex; flex-direction:column; gap:16px;
    }
    .about-app-title {
      font-size:18px; font-weight:800; color:var(--text-primary);
      font-family:'DM Sans',sans-serif;
      margin-bottom:4px; display:flex; align-items:center; gap:8px;
    }
    .about-app-logo { width:24px; height:24px; border-radius:7px; object-fit:cover; flex-shrink:0; }
    .about-maker {
      font-size:12px; color:var(--text-muted);
      font-weight:500;
    }
    .about-maker span { color:var(--mnn-navy-fg); font-weight:700; }
    .social-grid {
      display:grid; grid-template-columns:1fr 1fr; gap:10px;
    }
    .social-btn {
      display:flex; align-items:center; gap:10px;
      padding:12px 14px; border-radius:18px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated);
      cursor:pointer; transition:all .18s ease;
      text-decoration:none; color:inherit;
    }
    .social-btn:active { transform:scale(.97); opacity:.85; }
    .social-btn-icon {
      flex-shrink:0; width:34px; height:34px; border-radius:10px;
      display:flex; align-items:center; justify-content:center;
      background:rgba(255,255,255,.5);
    }
    .social-btn-icon svg { width:18px; height:18px; }
    [data-theme="dark"] .social-btn-icon { background:rgba(255,255,255,.06); }
    .social-btn-label { font-size:12px; font-weight:700; color:var(--text-primary); font-family:'DM Sans',sans-serif; }
    .social-btn-sub { font-size:10px; color:var(--text-muted); margin-top:1px; }
    .social-btn.fb   { border-color:rgba(59,89,152,.3);   background:rgba(59,89,152,.06); }
    .social-btn.fb   .social-btn-icon { color:#3b5998; }
    .social-btn.ig   { border-color:rgba(236,72,153,.3);  background:rgba(236,72,153,.06); }
    .social-btn.ig   .social-btn-icon { color:#d6249f; }
    .social-btn.tt   { border-color:rgba(20,20,20,.4);    background:rgba(0,0,0,.03); }
    .social-btn.tt   .social-btn-icon { color:#1a1a1a; }
    [data-theme="dark"] .social-btn.tt .social-btn-icon { color:#e5e5e5; }
    .social-btn.wa   { border-color:rgba(37,211,102,.3);  background:rgba(37,211,102,.06); }
    .social-btn.wa   .social-btn-icon { color:#25d366; }
    /* Dark mode: badge & card lebih pekat/menyala biar ngga nyatu ke background gelap */
    [data-theme="dark"] .social-btn.fb { border-color:rgba(107,142,214,.4); background:rgba(107,142,214,.13); }
    [data-theme="dark"] .social-btn.fb .social-btn-icon { background:rgba(107,142,214,.26); color:#8fb0f0; }
    [data-theme="dark"] .social-btn.ig { border-color:rgba(240,101,178,.4); background:rgba(240,101,178,.13); }
    [data-theme="dark"] .social-btn.ig .social-btn-icon { background:rgba(240,101,178,.26); color:#f472b6; }
    [data-theme="dark"] .social-btn.tt { border-color:rgba(255,255,255,.3); background:rgba(255,255,255,.08); }
    [data-theme="dark"] .social-btn.tt .social-btn-icon { background:rgba(255,255,255,.18); color:#f5f5f5; }
    [data-theme="dark"] .social-btn.wa { border-color:rgba(52,211,153,.4); background:rgba(52,211,153,.13); }
    [data-theme="dark"] .social-btn.wa .social-btn-icon { background:rgba(52,211,153,.26); color:#34d399; }

    /* ═══════════════════════════════════════════════════
       9. CATEGORY LEGEND
    ═══════════════════════════════════════════════════ */
    .category-legend { display:flex; gap:8px; flex-wrap:wrap; }
    .legend-item { display:flex; align-items:center; gap:6px; padding:5px 10px; border-radius:99px; font-size:11px; font-weight:600; border:1px solid transparent; }
    .legend-noun { background:rgba(74,158,255,.1); border-color:rgba(74,158,255,.2); color:var(--accent-noun); }
    .legend-verb { background:rgba(52,211,153,.1); border-color:rgba(52,211,153,.2); color:var(--accent-verb); }
    .legend-adj  { background:rgba(251,146,60,.1);  border-color:rgba(251,146,60,.2);  color:var(--accent-adj); }
    .legend-dot  { width:7px; height:7px; border-radius:50%; flex-shrink:0; }

    /* ═══════════════════════════════════════════════════
       9b. QUIZ HUB
    ═══════════════════════════════════════════════════ */
    /* Context header — breadcrumb pills + big title, mirrors current lesson context */
    .quiz-context-header { display:flex; flex-direction:column; gap:6px; flex-shrink:0; }
    .quiz-crumb-row { display:flex; align-items:center; gap:6px; }
    .quiz-crumb-pill {
      font-size:11px; font-weight:800; padding:3px 10px; border-radius:99px;
      background:rgba(var(--mnn-red-rgb),.14); color:var(--mnn-red);
      font-family:'DM Sans',sans-serif; letter-spacing:.01em;
    }
    .quiz-crumb-pill.muted { background:var(--bg-elevated); color:var(--text-secondary); }
    .quiz-context-title { font-size:20px; font-weight:800; color:var(--text-primary); line-height:1.25; letter-spacing:-.3px; }

    /* Mode cards — Quiz Kosakata / Kanji Learn, always-colored brand cards */
    .quiz-mode-cards { display:grid; grid-template-columns:1fr 1fr; gap:10px; flex-shrink:0; }
    .quiz-hub-tab {
      display:flex; flex-direction:column; align-items:flex-start; justify-content:center; gap:6px;
      padding:20px 16px; border-radius:20px; border:1px solid rgba(255,255,255,.1); cursor:pointer; min-height:88px;
      font-family:'DM Sans',sans-serif; text-align:left; color:#fff;
      transition:transform .16s ease, box-shadow .18s ease; position:relative; overflow:hidden;
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      box-shadow:0 8px 22px rgba(0,0,0,.35);
    }
    .quiz-hub-tab[data-hub="vocab"] {
      background:linear-gradient(135deg, var(--mnn-red) 0%, var(--mnn-red-dark) 100%);
      box-shadow:0 8px 22px rgba(var(--mnn-red-rgb),.3);
    }
    .quiz-hub-tab::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:70% center; background-repeat:no-repeat;
      opacity:.35; pointer-events:none;
    }
    .quiz-hub-tab > * { position:relative; z-index:1; }
    .quiz-hub-tab:active { transform:scale(.98); }
    .quiz-hub-tab.active { box-shadow:0 6px 22px rgba(0,0,0,.28); }
    .quiz-hub-tab.active::after {
      content:''; position:absolute; inset:0; border-radius:20px;
      border:2px solid rgba(255,255,255,.55); pointer-events:none;
    }
    .quiz-mode-title { font-size:16px; font-weight:800; color:#fff; }
    .quiz-mode-sub { font-size:11.5px; color:rgba(255,255,255,.72); font-weight:500; }

    /* "Pilih Sumber Soal" row + book chips */
    .quiz-book-tabs-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
    .quiz-book-tab {
      display:flex; align-items:center; justify-content:center; gap:6px;
      padding:9px 10px; border-radius:13px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-secondary); font-size:12px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease; text-align:center;
      white-space:nowrap; min-width:0;
    }
    .quiz-book-tab svg { width:15px; height:15px; flex-shrink:0; color:var(--tab-accent, var(--mnn-red)); }
    .quiz-book-tab span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .quiz-book-tab.active { background:rgba(var(--mnn-red-rgb),.14); border-color:var(--mnn-red); color:var(--mnn-red); }
    .quiz-book-tab.active svg { color:var(--mnn-red); }
    .quiz-book-tab.quiz-reset-btn {
      color:var(--text-muted);
    }
    .quiz-book-tab.quiz-reset-btn svg { color:var(--text-muted); }

    /* Chapter list items */
    .quiz-chapter-item {
      display:flex; align-items:center; gap:12px; padding:13px 15px;
      background:var(--bg-card); border:1.5px solid var(--border); border-radius:20px;
      cursor:pointer; transition:all .16s ease; font-family:'DM Sans',sans-serif;
      box-shadow:var(--shadow-card);
    }
    .quiz-chapter-item:active { transform:scale(.98); }

    /* Selected (currently browsed) chapter — navy brand highlight, same language as dashboard cards */
    .quiz-chapter-item.selected {
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border-color:transparent; box-shadow:0 4px 16px rgba(var(--mnn-navy-rgb),.26);
      position:relative; overflow:hidden;
    }
    .quiz-chapter-item.selected::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:65% center; background-repeat:no-repeat;
      opacity:.4; pointer-events:none;
    }
    .quiz-chapter-item.selected > * { position:relative; z-index:1; }
    .quiz-chapter-item.selected .quiz-chapter-title { color:#fff; }
    .quiz-chapter-item.selected .quiz-chapter-count { color:rgba(255,255,255,.65); }
    .quiz-chapter-item.selected .quiz-chapter-check { color:#fff; }
    .quiz-chapter-item.selected .quiz-chapter-badge { background:rgba(255,255,255,.22); color:#fff; }

    /* "Semua Pelajaran" — always-premium banner card */
    .quiz-chapter-item.premium-banner {
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border-color:transparent; box-shadow:0 4px 16px rgba(var(--mnn-navy-rgb),.26);
      position:relative; overflow:hidden;
    }
    .quiz-chapter-item.premium-banner::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:65% center; background-repeat:no-repeat;
      opacity:.4; pointer-events:none;
    }
    .quiz-chapter-item.premium-banner > * { position:relative; z-index:1; }
    .quiz-chapter-item.premium-banner .quiz-chapter-title { color:#fff; }
    .quiz-chapter-item.premium-banner .quiz-chapter-badge { background:rgba(255,255,255,.2); color:#fff; }
    .quiz-chapter-item.premium-banner .quiz-chapter-count { color:var(--mnn-red); font-weight:800; }
    .quiz-chapter-item.premium-banner .quiz-chapter-check,
    .quiz-chapter-item.premium-banner .quiz-item-chevron { color:rgba(255,255,255,.55); }
    .quiz-premium-pill {
      font-size:9px; font-weight:800; color:#fbbf24; background:rgba(251,191,36,.16);
      border-radius:99px; padding:2px 7px; margin-left:6px; letter-spacing:.02em; white-space:nowrap;
    }

    /* Locked (non-premium) chapters */
    .quiz-chapter-item.locked { opacity:.6; }
    .quiz-chapter-item.locked .quiz-chapter-badge { background:var(--bg-elevated); color:var(--text-muted); }

    /* Number badge (circle) */
    .quiz-chapter-badge {
      width:34px; height:34px; border-radius:50%; flex-shrink:0;
      display:flex; align-items:center; justify-content:center;
      font-size:13px; font-weight:800; font-family:'Noto Sans JP',sans-serif;
      background:rgba(var(--mnn-red-rgb),.12); color:var(--mnn-red);
    }
    .quiz-chapter-info { flex:1; min-width:0; display:flex; flex-direction:column; }
    .quiz-chapter-title { font-size:13.5px; font-weight:700; color:var(--text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .quiz-chapter-count { font-size:11px; color:var(--text-muted); font-weight:600; flex-shrink:0; white-space:nowrap; }
    .quiz-item-chevron { font-size:16px; color:var(--text-muted); flex-shrink:0; opacity:.7; }
    .quiz-chapter-check { display:none; }

    /* Kanji panel */
    .kanji-set-tabs { display:flex; gap:6px; overflow-x:auto; scrollbar-width:none; padding:2px; }
    .kanji-set-tab {
      flex-shrink:0; padding:8px 14px; border-radius:16px;
      border:1.5px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-secondary); font-size:12px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; white-space:nowrap; transition:all .18s;
    }
    .kanji-set-tab.active { background:var(--accent-primary); border-color:var(--accent-primary); color:#0f0f1e; }
    .kanji-mode-tabs { display:flex; gap:8px; }
    .kanji-mode-tab {
      flex:1; min-width:0; padding:10px 6px; border-radius:16px; text-align:center;
      border:1.5px solid var(--mnn-red); background:var(--mnn-red);
      color:#fff; font-size:12px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s;
      overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
      position:relative;
    }
    .kanji-mode-tab > span { position:relative; z-index:1; }
    .kanji-mode-tab.active {
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border-color:rgba(255,255,255,.08);
    }
    .kanji-mode-tab.active::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:70% center;
      opacity:.35; pointer-events:none;
    }

    /* [ADD] Tombol "Mode Pertanyaan" di Tes Kanji — icon badge + judul/sub, bukan pill kompak */
    .kanji-mode-question-btn {
      flex:none; width:100%; height:auto; min-width:0;
      padding:12px 14px; text-align:left; display:flex; align-items:center; gap:10px;
      border-radius:14px; white-space:normal;
      background:var(--bg-card); border:2px solid var(--mnn-red);
    }
    .kanji-mode-question-icon {
      width:36px; height:36px; border-radius:11px; flex-shrink:0;
      display:flex; align-items:center; justify-content:center;
    }
    .kanji-mode-question-icon svg { width:18px; height:18px; }
    .kanji-mode-question-title { font-weight:700; color:var(--text-primary); font-size:13px; }
    .kanji-mode-question-sub { font-size:11px; color:var(--text-muted); margin-top:2px; }

    /* Kanji flashcard */
    .kanji-card-scene { flex:1; min-height:220px; max-height:340px; cursor:pointer; perspective:900px; width:100%; }
    .kanji-card-inner { width:100%; height:100%; min-height:220px; position:relative; transform-style:preserve-3d; transition:transform .45s ease; }
    .kanji-card-inner.flipped { transform:rotateY(180deg); }
    .kanji-face {
      position:absolute; inset:0; backface-visibility:hidden;
      background:var(--bg-card); border:1.5px solid var(--border); border-radius:26px;
      display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px;
      padding:20px; box-shadow:0 4px 20px rgba(0,0,0,.2);
    }
    .kanji-face.back { transform:rotateY(180deg); }
    .kanji-char { font-family:'Noto Sans JP',sans-serif; font-size:88px; font-weight:700; color:var(--text-primary); line-height:1.1; }
    .kanji-reading { font-family:'Noto Sans JP',sans-serif; font-size:22px; color:var(--accent-primary); font-weight:600; }
    .kanji-meaning { font-size:16px; color:var(--text-secondary); font-weight:500; text-align:center; }
    .kanji-set-pip { font-size:10px; font-weight:800; color:var(--text-muted); letter-spacing:.08em; background:var(--bg-elevated); padding:3px 8px; border-radius:6px; }
    .kanji-hafal-pip { font-size:10px; font-weight:800; color:var(--accent-verb); letter-spacing:.06em; background:rgba(52,211,153,.1); padding:3px 8px; border-radius:6px; display:none; }
    .kanji-hafal-pip.show { display:block; }
    .kanji-flip-hint { font-size:11px; color:var(--text-muted); opacity:.6; }
    .kanji-nav-row { display:flex; align-items:center; gap:8px; flex-shrink:0; }
    .kanji-btn-prev, .kanji-btn-next { flex:1; padding:11px; border-radius:16px; background:var(--bg-card); border:1px solid var(--border); color:var(--text-secondary); font-size:13px; font-weight:700; cursor:pointer; transition:all .15s; font-family:'DM Sans',sans-serif; }
    .kanji-btn-prev:active, .kanji-btn-next:active { transform:scale(.97); }
    .kanji-btn-hafal { flex:2; padding:11px; border-radius:16px; background:var(--bg-card); border:1.5px solid var(--border-strong); color:var(--text-secondary); font-size:13px; font-weight:700; cursor:pointer; transition:all .18s; font-family:'DM Sans',sans-serif; text-align:center; }
    .kanji-btn-hafal.active { background:rgba(52,211,153,.15); border-color:rgba(52,211,153,.4); color:var(--accent-verb); }
    .kanji-list-item {
      display:flex; align-items:center; gap:12px; padding:11px 14px;
      background:var(--bg-card); border:1px solid var(--border); border-radius:18px;
      margin-bottom:8px; cursor:pointer; transition:background .15s;
    }
    .kanji-list-item.is-hafal { border-color:rgba(52,211,153,.25); }
    .kanji-list-kj { font-family:'Noto Sans JP',sans-serif; font-size:22px; font-weight:700; color:var(--text-primary); width:36px; text-align:center; flex-shrink:0; }
    .kanji-list-info { flex:1; min-width:0; }
    .kanji-list-rd { font-size:12px; color:var(--accent-primary); font-weight:600; }
    .kanji-list-mn { font-size:12px; color:var(--text-secondary); }
    .kanji-list-chk { font-size:14px; color:var(--accent-verb); }
    /* ═══════════════════════════════════════════════════
       10. QUIZ
    ═══════════════════════════════════════════════════ */
    .quiz-card { background:var(--bg-card); border:1px solid var(--border-strong); border-radius:24px; padding:24px; box-shadow:var(--shadow-float); }
    .quiz-question { text-align:center; margin-bottom:20px; }
    .quiz-jp { font-family:'Noto Sans JP',sans-serif; font-size:40px; font-weight:700; color:var(--text-primary); line-height:1.3; }
    .quiz-subtext { font-size:12px; color:var(--text-muted); margin-top:6px; font-style:italic; }
    .quiz-options { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
    .quiz-option {
      padding:14px 12px; border-radius:18px; border:1.5px solid var(--border-strong);
      background:var(--bg-elevated); color:var(--text-primary); font-size:14px; font-weight:500;
      font-family:'DM Sans',sans-serif; cursor:pointer; text-align:center; transition:all .18s ease;
    }
    .quiz-option:active { transform:scale(.97); }
    .quiz-option.correct { border-color:var(--accent-success); background:rgba(52,211,153,.12); color:var(--accent-success); }
    .quiz-option.wrong { border-color:var(--accent-danger); background:rgba(248,113,113,.1); color:var(--accent-danger); }
    .quiz-progress-bar { height:4px; background:var(--border-strong); border-radius:99px; overflow:hidden; margin-bottom:16px; }
    .quiz-progress-fill { height:100%; background:var(--accent-primary); border-radius:99px; transition:width .4s ease; }
    .quiz-score { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
    .score-badge { padding:4px 12px; border-radius:99px; font-size:12px; font-weight:700; background:rgba(var(--accent-t1-rgb),.12); color:var(--accent-primary); }
    .quiz-result { text-align:center; padding:8px 0; }
    .result-emoji { font-size:56px; margin-bottom:12px; display:block; }
    .result-score { font-size:42px; font-weight:800; color:var(--text-primary); }
    .result-label { font-size:14px; color:var(--text-secondary); margin-top:6px; margin-bottom:20px; }

    /* ═══════════════════════════════════════════════════
       11. SETTINGS
    ═══════════════════════════════════════════════════ */
    .settings-section { background:var(--bg-card); border:1px solid var(--border); border-radius:22px; overflow:hidden; box-shadow:var(--shadow-card); }
    .settings-item { display:flex; align-items:center; gap:14px; padding:15px 18px; border-bottom:1px solid var(--border); cursor:pointer; transition:background .15s ease; }
    .settings-item:last-child { border-bottom:none; }
    .settings-item:active { background:var(--bg-card-hover); }
    .settings-icon { width:36px; height:36px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:16px; flex-shrink:0; }
    .icon-purple { background:rgba(var(--accent-t1-rgb),.15); }
    .icon-blue   { background:rgba(74,158,255,.15); }
    .icon-green  { background:rgba(52,211,153,.15); }
    .icon-orange { background:rgba(251,146,60,.15); }
    .icon-red    { background:rgba(248,113,113,.15); }
    .settings-text { flex:1; }
    .settings-label { font-size:15px; font-weight:500; color:var(--text-primary); }
    .settings-desc { font-size:12px; color:var(--text-muted); margin-top:2px; }
    .settings-arrow { color:var(--text-muted); font-size:13px; }
    .toggle-switch { width:44px; height:26px; border-radius:13px; border:none; cursor:pointer; position:relative; transition:background .25s ease; flex-shrink:0; }
    .toggle-switch.on  { background:var(--accent-primary); }
    .toggle-switch.off { background:var(--border-strong); }
    .toggle-switch::after { content:''; position:absolute; width:20px; height:20px; background:white; border-radius:50%; top:3px; transition:left .25s cubic-bezier(.4,0,.2,1); box-shadow:0 2px 6px rgba(0,0,0,.22); }
    .toggle-switch.on::after  { left:21px; }
    .toggle-switch.off::after { left:3px; }

    .accent-theme-switch { display:flex; gap:4px; background:var(--bg-elevated); border:1px solid var(--border-strong); border-radius:16px; padding:3px; flex-shrink:0; }
    .accent-theme-opt { width:32px; height:32px; border-radius:9px; border:none; background:transparent; font-size:15px; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all .2s cubic-bezier(.4,0,.2,1); opacity:.55; }
    .accent-theme-opt.active { background:var(--bg-card); opacity:1; box-shadow:0 2px 8px rgba(0,0,0,.12); transform:scale(1.05); }
    .accent-theme-opt:active { transform:scale(.92); }

    /* ═══════════════════════════════════════════════════
       12. DASHBOARD
    ═══════════════════════════════════════════════════ */
    .dashboard-greeting {
      position:relative; overflow:hidden; border-radius:20px;
      padding:16px 18px; margin-bottom:12px; min-height:108px;
      background-image:
        linear-gradient(100deg, var(--bg-base) 0%, rgba(var(--mnn-navy-rgb),.02) 40%, rgba(0,0,0,0) 65%),
        url("assets/ornament-light.jpeg");
      background-size: 100% 100%, cover;
      background-position: center, 60% 42%;
      background-repeat: no-repeat, no-repeat;
      border:1px solid var(--border);
      box-shadow:var(--shadow-card);
    }
    [data-theme="dark"] .dashboard-greeting {
      background-image:
        linear-gradient(100deg, var(--bg-base) 0%, rgba(var(--mnn-navy-rgb),.05) 40%, rgba(0,0,0,0) 65%),
        url("assets/ornament-dark.jpeg");
    }
    .dashboard-greeting-text { position:relative; z-index:1; max-width:62%; }
    .greeting-sub { font-size:13px; color:var(--text-muted); font-weight:500; margin-bottom:4px; }
    .greeting-main { font-family:'Noto Sans JP',sans-serif; font-size:22px; font-weight:700; color:var(--text-primary); line-height:1.3; }
    .greeting-main span { color:var(--mnn-red); }
    [data-theme="dark"] .greeting-main span {
      color: var(--mnn-red);
      filter: saturate(1.6);
    }
    /* Saturasi dinaikin di semua angka/label headline (glow dihapus sesuai request) */
    [data-theme="dark"] .stat-value,
    [data-theme="dark"] .progress-ring .ring-label,
    [data-theme="dark"] .progress-bar-pct,
    [data-theme="dark"] .bdetail-progress-label,
    [data-theme="dark"] .chapter-progress-pct,
    [data-theme="dark"] .roadmap-step-pct,
    [data-theme="dark"] .book-btn.active .book-progress-text,
    [data-theme="dark"] .materi-progress-item-pct,
    [data-theme="dark"] .kotoba-hero-progress-value {
      filter: saturate(1.6);
    }
    .greeting-tagline { font-size:11.5px; color:var(--text-muted); margin-top:4px; }
    .dashboard-greeting-ornament { display:none; }
    .stats-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
    .stats-grid .stat-card {
      position:relative; overflow:hidden;
      background:var(--bg-card); border:1px solid var(--border); border-radius:18px;
      padding:12px 4px 16px; text-align:center; box-shadow:var(--shadow-card);
      display:flex; flex-direction:column; align-items:center; justify-content:center;
      min-height:108px;
    }
    .stats-grid .stat-card::after {
      content:''; position:absolute; left:0; right:0; bottom:0; height:13px;
      background:var(--stat-accent, var(--mnn-navy));
      opacity:.9;
      -webkit-mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 20' preserveAspectRatio='none'><path d='M0 9 Q 12.5 1 25 9 T 50 9 T 75 9 T 100 9 V20 H0 Z'/></svg>");
      mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 20' preserveAspectRatio='none'><path d='M0 9 Q 12.5 1 25 9 T 50 9 T 75 9 T 100 9 V20 H0 Z'/></svg>");
      -webkit-mask-size:100% 100%; mask-size:100% 100%;
      -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
    }
    .stat-card-icon-badge {
      width:34px; height:34px; border-radius:50%;
      display:flex; align-items:center; justify-content:center;
      font-size:16px; line-height:1; margin-bottom:6px;
    }
    .stat-card-icon-badge svg { width:18px; height:18px; }
    .stats-grid .stat-value { font-size:19px; font-weight:800; line-height:1; }
    .stats-grid .stat-label { font-size:11.5px; font-weight:700; color:var(--text-primary); margin-top:4px; }
    .stat-sub { font-size:9.5px; color:var(--text-muted); font-weight:500; margin-top:1px; }
    .stat-value { font-size:26px; font-weight:800; line-height:1; margin-bottom:4px; }
    .stat-label { font-size:11px; color:var(--text-muted); font-weight:500; }
    .progress-bar-wrap {
      position:relative; overflow:hidden;
      background:linear-gradient(135deg, #e0453a 0%, var(--mnn-red) 55%, var(--mnn-red-dark) 100%);
      border:1px solid rgba(255,255,255,.12); border-radius:22px; padding:18px;
      box-shadow:0 8px 24px rgba(var(--mnn-red-rgb),.35);
    }
    .progress-bar-ornament { display:none; }
    .progress-bar-header { position:relative; z-index:1; display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
    .progress-bar-title { display:flex; align-items:center; gap:10px; font-size:14.5px; font-weight:700; color:#fff; }
    .progress-bar-icon {
      width:38px; height:38px; border-radius:50%; flex-shrink:0;
      display:inline-flex; align-items:center; justify-content:center; font-size:17px;
      background:rgba(255,255,255,.18); color:#fff;
    }
    .progress-bar-pct { position:relative; z-index:1; font-size:17px; font-weight:800; color:#fff; }
    .progress-bar-track { position:relative; z-index:1; height:9px; background:rgba(255,255,255,.22); border-radius:99px; overflow:hidden; }
    .progress-bar-fill { height:100%; border-radius:99px; background:#fff; transition:width .7s cubic-bezier(.4,0,.2,1); }
    .progress-bar-sub { position:relative; z-index:1; font-size:11.5px; color:rgba(255,255,255,.75); margin-top:8px; }

    /* Book buttons */
    .book-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
    .book-btn {
      position:relative; overflow:hidden;
      background: var(--bg-card);
      border:2px solid var(--border); border-radius:20px;
      padding:16px 12px; cursor:pointer; text-align:center; color:var(--text-primary);
      transition:all .18s ease; box-shadow:var(--shadow-card);
    }
    .book-btn.active { border-color:var(--mnn-red); }
    .book-btn:active { transform:scale(.98); }
    .book-btn .book-emoji {
      font-size:20px; margin:0 auto 8px; width:44px; height:44px; line-height:44px;
      border-radius:50%; background:rgba(var(--mnn-red-rgb),.10); color:var(--mnn-red);
      box-shadow:none;
    }
    .book-btn:not(.active) .book-emoji { background:var(--bg-elevated); color:var(--text-muted); }
    .book-btn .book-label { font-weight:800; font-size:15px; margin-bottom:1px; color:var(--text-primary); }
    .book-btn.active .book-label { color:var(--mnn-red); }
    .book-btn .book-range { color:var(--text-muted); font-size:11.5px; }
    .book-progress-row, .book-progress-text { display:none; }
    .book-btn.active .book-progress-row { display:block; margin-top:10px; }
    .book-btn.active .book-progress-text { display:block; font-size:11px; font-weight:700; color:var(--mnn-red); margin-top:5px; }
    .book-progress-bar { height:5px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .book-progress-fill { height:100%; background:var(--mnn-red); border-radius:99px; transition:width .5s ease; }

    /* Chapter list */
    .chapter-list { display:flex; flex-direction:column; gap:8px; }
    .chapter-card {
      display:flex; align-items:center; gap:12px; padding:12px 14px;
      background: var(--bg-card);
      border:1px solid var(--border); border-radius:18px;
      cursor:pointer; transition:all .18s ease; box-shadow:var(--shadow-card);
      position:relative; overflow:hidden;
    }
    .chapter-card > * { position:relative; z-index:1; }
    .chapter-card:active { transform:scale(.99); }
    .chapter-card.active { border-color:var(--mnn-red); background:rgba(var(--mnn-red-rgb),.05); }
    .chapter-num {
      width:32px; height:32px; border-radius:50% !important; display:flex; align-items:center; justify-content:center;
      font-size:12.5px; font-weight:800; flex-shrink:0; font-family:'Noto Sans JP',sans-serif;
      background:var(--bg-elevated) !important;
      color:var(--text-secondary) !important; box-shadow:none;
    }
    .chapter-card.active .chapter-num { background:var(--mnn-red) !important; color:#fff !important; }
    .chapter-info { flex:1; min-width:0; }
    .chapter-title { font-size:13.5px; font-weight:700; color:var(--text-primary); }
    .chapter-topic { font-size:11px; color:var(--text-muted); margin-top:2px; }
    .chapter-progress-row { display:flex; align-items:center; gap:6px; margin-top:6px; }
    .chapter-progress-bar { flex:1; height:4px; background:var(--border-strong); border-radius:99px; overflow:hidden; max-width:110px; }
    .chapter-progress-fill { height:100%; background:var(--mnn-red); border-radius:99px; }
    .chapter-progress-pct { font-size:10.5px; font-weight:700; color:var(--mnn-red); flex-shrink:0; min-width:28px; text-align:right; }
    .chapter-arrow { color:var(--text-muted); font-size:14px; flex-shrink:0; }

    /* ═══════════════════════════════════════════════════
       13. BOTTOM NAVIGATION
    ═══════════════════════════════════════════════════ */
    .bottom-nav {
      position:fixed; bottom:0; left:50%; transform:translateX(-50%);
      width:100%; max-width:430px;
      background:var(--nav-bg);
      backdrop-filter:blur(24px) saturate(180%);
      -webkit-backdrop-filter:blur(24px) saturate(180%);
      border-top:1px solid var(--border);
      padding:8px 0 calc(8px + env(safe-area-inset-bottom));
      z-index:90;
      transition:background .35s ease, border-color .35s ease;
    }
    .nav-items { display:flex; align-items:center; justify-content:space-around; }
    .nav-item { flex:1; display:flex; flex-direction:column; align-items:center; gap:3px; padding:6px 4px; cursor:pointer; position:relative; border:none; background:none; font-family:'DM Sans',sans-serif; color:var(--text-secondary); }
    .nav-icon-wrap { position:relative; width:28px; height:28px; display:flex; align-items:center; justify-content:center; }
    .nav-icon { transition:transform .25s cubic-bezier(.34,1.56,.64,1); line-height:1; position:relative; z-index:1; display:flex; }
    .nav-icon svg { width:21px; height:21px; }
    .nav-icon-wrap::before { content:''; position:absolute; inset:-4px; border-radius:16px; background:rgba(var(--accent-t1-rgb),.14); transform:scale(0); transition:transform .3s cubic-bezier(.34,1.56,.64,1); }
    .nav-icon-wrap::after { content:''; position:absolute; bottom:-5px; left:50%; transform:translateX(-50%) scaleX(0); width:18px; height:3px; border-radius:99px; background:var(--accent-primary); transition:transform .3s cubic-bezier(.34,1.56,.64,1); }
    .nav-item.active { color:var(--accent-primary); }
    .nav-item.active .nav-icon { transform:translateY(-2px); }
    .nav-item.active .nav-icon-wrap::before { transform:scale(1); }
    .nav-item.active .nav-icon-wrap::after  { transform:translateX(-50%) scaleX(1); }
    /* Warna khas per-tab — override warna default biru di atas, pakai rgba literal (aman semua browser) */
    .nav-item[data-page="dashboard"].active { color:var(--tab-dashboard); }
    .nav-item[data-page="dashboard"].active .nav-icon-wrap::before { background:rgba(var(--accent-t1-rgb),.16); }
    .nav-item[data-page="dashboard"].active .nav-icon-wrap::after  { background:var(--tab-dashboard); }
    .nav-item[data-page="materi"].active { color:var(--tab-materi); }
    .nav-item[data-page="materi"].active .nav-icon-wrap::before { background:rgba(52,211,153,.16); }
    .nav-item[data-page="materi"].active .nav-icon-wrap::after  { background:var(--tab-materi); }
    .nav-item[data-page="quiz"].active { color:var(--tab-quiz); }
    .nav-item[data-page="quiz"].active .nav-icon-wrap::before { background:rgba(251,146,60,.16); }
    .nav-item[data-page="quiz"].active .nav-icon-wrap::after  { background:var(--tab-quiz); }
    .nav-item[data-page="kotoba"].active { color:var(--tab-kotoba); }
    .nav-item[data-page="kotoba"].active .nav-icon-wrap::before { background:rgba(167,139,250,.16); }
    .nav-item[data-page="kotoba"].active .nav-icon-wrap::after  { background:var(--tab-kotoba); }
    .nav-item[data-page="kana"].active { color:var(--tab-kana); }
    .nav-item[data-page="kana"].active .nav-icon-wrap::before { background:rgba(34,211,238,.16); }
    .nav-item[data-page="kana"].active .nav-icon-wrap::after  { background:var(--tab-kana); }
    .nav-item[data-page="settings"].active { color:var(--tab-settings); }
    .nav-item[data-page="settings"].active .nav-icon-wrap::before { background:rgba(148,163,184,.16); }
    .nav-item[data-page="settings"].active .nav-icon-wrap::after  { background:var(--tab-settings); }
    .nav-item[data-page="ai-sensei"].active { color:var(--tab-sensei); }
    .nav-item[data-page="ai-sensei"].active .nav-icon-wrap::before { background:rgba(244,114,182,.16); }
    .nav-item[data-page="ai-sensei"].active .nav-icon-wrap::after  { background:var(--tab-sensei); }
    .nav-label { font-size:10px; font-weight:600; color:var(--text-muted); transition:color .2s ease; letter-spacing:.02em; }
    .nav-item.active .nav-label { color:inherit; }

    /* ═══════════════════════════════════════════════════
       14. PAGE SECTIONS
    ═══════════════════════════════════════════════════ */
    .page { display:none; }
    .page.active { display:flex; flex-direction:column; gap:20px; }

    /* ═══════════════════════════════════════════════════
       15. UTILITY COMPONENTS
    ═══════════════════════════════════════════════════ */
    .btn-primary-full {
      width:100%; height:52px; border-radius:20px; border:none;
      background:var(--accent-primary); color:#0f0f1e; font-size:15px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer;
      display:flex; align-items:center; justify-content:center; gap:8px;
      transition:all .18s ease; box-shadow:0 4px 20px rgba(var(--accent-t1-rgb),.28);
    }
    .btn-primary-full:active { transform:scale(.98); opacity:.9; }
    .btn-ghost {
      display:inline-flex; align-items:center; gap:6px; padding:9px 16px;
      border-radius:16px; border:1px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-secondary); font-size:13px; font-weight:600;
      font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease;
    }
    .btn-ghost:active { transform:scale(.97); }
    .empty-state { text-align:center; padding:40px 20px; color:var(--text-muted); }
    .empty-state-icon { font-size:40px; margin-bottom:12px; }
    .empty-state-text { font-size:14px; line-height:1.5; }

    /* ═══════════════════════════════════════════════════
       16. ANIMATIONS
    ═══════════════════════════════════════════════════ */
    @keyframes fadeSlideUp { from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:translateY(0)} }
    .page.active > * { animation:fadeSlideUp .3s ease both; }
    .page.active > *:nth-child(1){animation-delay:0ms}
    .page.active > *:nth-child(2){animation-delay:50ms}
    .page.active > *:nth-child(3){animation-delay:100ms}
    .page.active > *:nth-child(4){animation-delay:150ms}
    .page.active > *:nth-child(5){animation-delay:200ms}
    @keyframes pageIn { from{opacity:0;transform:translateX(10px)} to{opacity:1;transform:translateX(0)} }
    .page.active { animation:pageIn .28s ease both; }
    @keyframes spin { to{transform:rotate(360deg)} }

    /* ═══════════════════════════════════════════════════
       17. RESPONSIVE
    ═══════════════════════════════════════════════════ */
    @media (min-width:430px) {
      #app { border-left:1px solid var(--border); border-right:1px solid var(--border); }
      .bottom-nav { border-left:1px solid var(--border); border-right:1px solid var(--border); }
    }

    /* ═══════════════════════════════════════════════════
       18. DESKTOP LAYOUT (≥1024px) — Windows/PC/Laptop
       Sidebar navigation pattern (Duolingo/Anki-style):
       fixed left sidebar + centered max-width content column.
       Mobile layout (<1024px) completely untouched.
    ═══════════════════════════════════════════════════ */
    /* [LANDSCAPE FIX] Layout desktop ini SEKARANG juga aktif saat HP diputar
   landscape (lebar > tinggi, tinggi terbatas) — tidak hanya saat layar
   beneran >= 1024px. Supaya seluruh app (bukan cuma AI JFT Simulation)
   berubah ke mode desktop saat diputar. */
    @media (min-width: 1024px),
           (orientation: landscape) and (max-height: 500px) and (min-width: 600px) {
      body {
        display: flex;
        justify-content: center;
        background: var(--bg-base);
      }

      /* #app becomes a row: [sidebar] [app-main-col] */
      #app {
        max-width: 1180px;
        width: 100%;
        flex-direction: row;
        align-items: flex-start;
        border: none !important;
        gap: 0;
      }

      /* Header+main wrapper becomes the flexible right column.
         On mobile this div has zero effect (default block flow). */
      .app-main-col {
        flex: 1;
        min-width: 0;
        display: flex;
        flex-direction: column;
      }

      /* ── Sidebar (re-skinned .bottom-nav) ──
         order:-1 visually places it before .app-main-col
         without moving its position in the HTML/tab order. */
      .bottom-nav {
        order: -1;
        position: sticky;
        top: 0;
        left: auto;
        transform: none;
        width: 232px;
        max-width: 232px;
        height: 100dvh;
        flex-shrink: 0;
        border-top: none;
        border-left: none !important;
        border-right: 1px solid var(--border);
        padding: 24px 14px;
        display: flex;
        align-items: flex-start;
        overflow: hidden;
        transition: width .22s ease, padding .22s ease, opacity .18s ease, border-color .18s ease;
      }
      /* Sidebar collapsed state */
      #app.sidebar-collapsed .bottom-nav {
        width: 0; max-width: 0; padding-left: 0; padding-right: 0;
        opacity: 0; border-right-color: transparent; pointer-events: none;
      }
      .btn-sidebar-toggle {
        display: flex; align-items: center; justify-content: center;
        width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0;
        border: 1px solid var(--border); background: var(--bg-card);
        color: var(--text-secondary); cursor: pointer; margin-right: 4px;
      }
      .btn-sidebar-toggle:hover { background: var(--bg-card-hover); }
      .btn-sidebar-toggle svg { width: 17px; height: 17px; }
      .nav-items {
        flex-direction: column;
        align-items: stretch;
        justify-content: flex-start;
        gap: 4px;
        width: 100%;
      }
      .nav-item {
        flex-direction: row;
        justify-content: flex-start;
        gap: 12px;
        padding: 11px 14px;
        border-radius: 16px;
        transition: background .2s ease;
      }
      .nav-item:hover { background: var(--bg-card-hover); }
      .nav-item.active { background: rgba(var(--accent-t1-rgb),.12); }
      .nav-icon-wrap { width: 22px; height: 22px; }
      .nav-icon-wrap::before { display: none; }
      .nav-icon-wrap::after { display: none; }
      .nav-item.active .nav-icon { transform: none; }
      .nav-label {
        font-size: 14px;
        font-weight: 600;
        order: 2;
      }

      /* ── Content column: comfortable reading width ── */
      .main-content {
        max-width: 760px;
        width: 100%;
        margin: 0 auto;
        padding: 28px 32px 60px;
        gap: 24px;
      }
      .header { padding: 16px 32px; }
      .header-inner { max-width: 760px; margin: 0 auto; }

      /* ── Profile page: comfortable reading width on desktop/landscape ── */
      #page-profile #profile-panel-inner {
        max-width: 720px;
        margin: 0 auto;
        width: 100%;
      }
    }

    /* Theme icon toggle */
    .icon-sun  { display:none; }
    .icon-moon { display:flex; align-items:center; justify-content:center; color:#ffffff; }
    [data-theme="light"] .icon-sun  { display:flex; align-items:center; justify-content:center; }
    [data-theme="light"] .icon-moon { display:none; }

    /* Info banner */
    .info-banner { background:linear-gradient(135deg,rgba(var(--accent-t1-rgb),.12),rgba(74,158,255,.08)); border:1px solid rgba(var(--accent-t1-rgb),.2); border-radius:20px; padding:14px 16px; }
    .info-banner-title { font-size:13px; font-weight:700; color:var(--accent-primary); margin-bottom:4px; }
    .info-banner-text { font-size:12px; color:var(--text-secondary); line-height:1.55; }

    /* Chapter selector */
    .chapter-select-row { display:flex; align-items:center; gap:8px; margin-bottom:2px; overflow:hidden; width:100%; }
    .chapter-select-label { font-size:12px; color:var(--text-muted); font-weight:500; flex-shrink:0; }
    select.chapter-picker { flex:1; min-width:0; max-width:100%; padding:8px 10px; border-radius:12px; border:1px solid var(--border-strong); background:var(--bg-card); color:var(--text-primary); font-size:13px; font-family:'DM Sans',sans-serif; font-weight:500; outline:none; cursor:pointer; overflow:hidden; text-overflow:ellipsis; }

    /* Search input */
    .search-input {
      width:100%; padding:12px 16px; border-radius:18px;
      border:1px solid var(--border-strong); background:var(--bg-card);
      color:var(--text-primary); font-size:14px; font-family:'DM Sans',sans-serif;
      outline:none; transition:border-color .2s ease;
    }
    .search-input:focus { border-color:rgba(var(--accent-t1-rgb),.4); }

    /* ═══════════════════════════════════════════════════
       18. KANA TRAINER PAGE
    ═══════════════════════════════════════════════════ */
    .kana-grid { display:grid; grid-template-columns:repeat(5,1fr); gap:6px; }
    .kana-grid.combo-grid { grid-template-columns:repeat(3,1fr); }
    .kana-cell {
      background:var(--bg-card); border:1.5px solid var(--border);
      border-radius:12px; padding:9px 4px; text-align:center;
    }
    .kana-cell.mastered { background:rgba(52,211,153,.08); border-color:rgba(52,211,153,.4); }
    .kana-cell.seen     { background:rgba(245,158,11,.08); border-color:rgba(245,158,11,.35); }
    .kana-cell-char { font-family:'Noto Sans JP',sans-serif; font-size:21px; color:var(--text-primary); }
    .kana-cell-rom  { font-size:9px; color:var(--text-muted); margin-top:1px; font-weight:500; }
    .kana-tab-row { display:flex; gap:6px; margin-bottom:14px; }
    .kana-tab { flex:1; padding:7px 0; border-radius:9px; border:1px solid var(--border-strong); background:var(--bg-card); color:var(--text-muted); cursor:pointer; font-size:13px; font-weight:700; font-family:'DM Sans',sans-serif; transition:all .2s; text-transform:capitalize; }
    .kana-tab.active { border-color:var(--accent-kana); background:rgba(224,60,76,.14); color:var(--text-primary); }
    .kana-cat-label { font-size:10px; font-weight:700; color:var(--text-muted); text-transform:uppercase; letter-spacing:.1em; margin-bottom:8px; display:flex; justify-content:space-between; }

    /* Kana flashcard */
    .kana-flashcard {
      width:100%; min-height:180px; background:var(--bg-card); border:1px solid var(--border-strong);
      border-radius:26px; display:flex; flex-direction:column; align-items:center; justify-content:center;
      cursor:pointer; box-shadow:var(--shadow-float); position:relative; padding:24px;
      transition:all .2s;
    }
    .kana-flashcard .kana-big { font-family:'Noto Sans JP',sans-serif; font-size:88px; font-weight:300; line-height:1; color:var(--text-primary); }
    .kana-flashcard .kana-rom-reveal { font-size:32px; font-weight:700; color:var(--accent-kana); margin-top:8px; }

    /* AI Sensei */
    .ai-banner { background:linear-gradient(135deg,rgba(var(--accent-t1-rgb),.1),rgba(74,158,255,.06)); border:1px solid rgba(var(--accent-t1-rgb),.2); border-radius:20px; padding:14px 16px; margin-bottom:0; }
    .ai-quick-btns { display:flex; flex-wrap:wrap; gap:6px; }
    .ai-quick-btn { background:var(--bg-elevated); border:1px solid var(--border-strong); border-radius:10px; padding:5px 10px; color:var(--text-muted); cursor:pointer; font-size:12px; font-family:'DM Sans',sans-serif; transition:all .15s; }
    .ai-quick-btn:hover { border-color:rgba(var(--accent-t1-rgb),.3); color:var(--text-secondary); }
    .ai-answer { background:var(--bg-elevated); border:1px solid var(--border-strong); border-radius:20px; padding:16px; }
    .ai-answer-label { font-size:13px; font-weight:700; color:var(--accent-primary); margin-bottom:10px; display:flex; gap:6px; align-items:center; }
    .ai-answer-text { color:var(--text-primary); font-size:14px; line-height:1.85; white-space:pre-wrap; }

    /* Grammar view */
    .grammar-item { background:var(--bg-card); border:1px solid var(--border); border-radius:18px; overflow:hidden; margin-bottom:8px; }
    .grammar-header { display:flex; justify-content:space-between; align-items:center; padding:14px 16px; cursor:pointer; font-size:14px; font-weight:700; color:var(--text-primary); }
    .grammar-header:active { background:var(--bg-card-hover); }
    .grammar-body { background:var(--bg-surface); padding:14px 16px; border-top:1px solid var(--border); color:var(--text-secondary); font-size:13px; line-height:1.95; }

    /* ── Redesign v3.7.1: Row-list Bunpou (kayak vocab-item Kotoba) — ganti grid card centered ── */
    .grammar-progress-summary { display:flex; gap:8px; margin-bottom:12px; flex-wrap:wrap; }
    .bunpou-rows { display:flex; flex-direction:column; gap:10px; }
    .bunpou-row {
      display:flex; align-items:center; gap:12px;
      background:linear-gradient(160deg, var(--bg-card) 0%, var(--bg-elevated) 100%);
      border:2.5px solid rgba(var(--mnn-red-rgb),.55); border-radius:18px;
      padding:12px 14px; cursor:pointer; min-height:64px;
      transition:all .18s cubic-bezier(.4,0,.2,1); box-shadow:var(--shadow-card);
    }
    .bunpou-row:active { transform:scale(.98); background:var(--bg-card-hover); }
    .bunpou-row.br-done { border-color:rgba(52,211,153,.5); }
    .bunpou-row-num {
      flex-shrink:0; width:30px; height:30px; border-radius:10px; display:flex; align-items:center; justify-content:center;
      background:var(--mnn-red); font-size:13px; font-weight:800; color:#fff;
      box-shadow:0 2px 8px rgba(var(--mnn-red-rgb),.3);
    }
    .bunpou-row.br-done .bunpou-row-num { background:#34d399; box-shadow:0 2px 8px rgba(52,211,153,.3); }
    .bunpou-row-body { flex:1; min-width:0; }
    .bunpou-row-title {
      font-family:'Noto Sans JP',sans-serif; font-size:14px; font-weight:700;
      color:var(--text-primary); line-height:1.4; overflow-wrap:anywhere;
    }
    .bunpou-row-status { display:flex; align-items:center; gap:5px; font-size:10.5px; font-weight:600; color:var(--text-muted); margin-top:3px; }
    .bunpou-row-status-dot { width:7px; height:7px; border-radius:50%; background:var(--mnn-red); flex-shrink:0; }
    .bunpou-row.br-done .bunpou-row-status { color:#34d399; }
    .bunpou-row.br-done .bunpou-row-status-dot { background:#34d399; }
    .bunpou-row-arrow { flex-shrink:0; font-size:18px; color:var(--text-muted); opacity:.6; }
    .bunpou-row-check {
      flex-shrink:0; width:22px; height:22px; border-radius:99px; background:#34d399; color:#0f0f1e;
      font-size:11px; display:flex; align-items:center; justify-content:center; font-weight:800;
    }

    /* ═══════════════════════════════════════════════════
       MATERI PAGE — REDESIGN (hero + picker/ring + icon tabs + dual progress)
    ═══════════════════════════════════════════════════ */
    .materi-hero {
      position:relative; overflow:hidden; border-radius:20px;
      background:linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1px solid rgba(255,255,255,.1);
      padding:14px 15px 16px; box-shadow:0 10px 30px rgba(0,0,0,.4), 0 0 0 1px rgba(255,255,255,.03);
    }
    .materi-hero::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:78% 28%; background-repeat:no-repeat;
      opacity:.5; pointer-events:none;
    }
    .materi-hero::after {
      content:''; position:absolute; inset:0;
      background:linear-gradient(100deg, rgba(var(--mnn-navy-rgb),.92) 0%, rgba(var(--mnn-navy-rgb),.55) 55%, rgba(var(--mnn-navy-rgb),.15) 100%);
      pointer-events:none;
    }
    .materi-hero-inner { position:relative; z-index:1; max-width:80%; }
    .materi-hero-book {
      display:inline-block; padding:2.5px 9px; border-radius:99px;
      background:rgba(255,255,255,.16); color:#fff; font-size:9.5px; font-weight:700;
      letter-spacing:.03em; margin-bottom:6px;
    }
    .materi-hero-lesson { color:rgba(255,255,255,.68); font-size:11px; font-weight:700; letter-spacing:.02em; }
    .materi-hero-topic {
      font-family:'Noto Sans JP',sans-serif; color:#fff; font-size:18px; font-weight:800;
      line-height:1.25; margin-top:1px; overflow-wrap:anywhere;
    }
    .materi-hero-tags { display:flex; gap:5px; margin-top:8px; }
    .materi-hero-tag { font-size:9px; font-weight:800; padding:2.5px 9px; border-radius:99px; letter-spacing:.02em; }
    .materi-hero-tag-level { background:var(--mnn-red); color:#fff; }
    .materi-hero-tag-type { background:rgba(255,255,255,.15); color:#fff; }

    .materi-picker-card {
      display:flex; align-items:center; gap:8px;
      background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
      padding:9px 10px; box-shadow:var(--shadow-card);
    }
    .materi-picker-col { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
    .materi-picker-col-wide { flex:1.3; }
    .materi-picker-col select.chapter-picker { flex:none; width:100%; }
    .materi-picker-label { font-size:8.5px; color:var(--text-muted); font-weight:700; text-transform:uppercase; letter-spacing:.05em; }
    .materi-picker-divider { width:1px; align-self:stretch; background:var(--border); flex-shrink:0; }
    .materi-overall-ring { display:flex; flex-direction:column; align-items:center; gap:3px; flex-shrink:0; }
    .materi-ring.progress-ring { width:44px; height:44px; }
    .materi-ring.progress-ring svg { width:44px; height:44px; }
    .materi-ring .fill { stroke-dasharray:163.4; stroke-dashoffset:163.4; }
    .materi-ring .ring-label { font-size:11px; }
    .materi-overall-label { font-size:8px; color:var(--text-muted); font-weight:600; text-align:center; line-height:1.25; }

    /* ── Custom picker trigger (replaces native <select> visually; the real
       <select> stays in the DOM off-screen so all existing JS keeps working) ── */
    .materi-picker-trigger {
      display:flex; align-items:center; justify-content:space-between; gap:5px;
      width:100%; padding:7px 9px; border-radius:10px; border:1px solid var(--mnn-red);
      background:var(--mnn-red); color:#fff; font-size:11.5px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; text-align:left; line-height:1.3;
    }
    .materi-picker-trigger:active { transform:scale(.98); background:var(--mnn-red-dark); }
    .materi-picker-trigger-label { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }
    .materi-picker-trigger-chev { flex-shrink:0; opacity:.85; font-size:9px; transition:transform .2s; color:#fff; }
    .materi-picker-trigger.open .materi-picker-trigger-chev { transform:rotate(180deg); }
    .sr-only-select { position:absolute !important; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }

    .picker-sheet-overlay {
      position:fixed; inset:0; width:100vw; max-width:100vw; z-index:610; background:rgba(0,0,0,.55);
      display:flex; align-items:flex-end; justify-content:center; overflow:hidden;
      opacity:0; pointer-events:none; transition:opacity .25s ease;
    }
    .picker-sheet-overlay.open { opacity:1; pointer-events:auto; }
    .picker-sheet {
      width:100%; max-width:430px; max-height:70vh; overflow-y:auto; overflow-x:hidden;
      background:var(--bg-elevated); border:1px solid var(--border); border-bottom:none;
      border-radius:22px 22px 0 0; padding:12px 0 max(16px, env(safe-area-inset-bottom));
      transform:translateY(100%); transition:transform .3s cubic-bezier(.32,.72,0,1);
      box-shadow:0 -12px 40px rgba(0,0,0,.35);
    }
    .picker-sheet-overlay.open .picker-sheet { transform:translateY(0); }
    .picker-sheet-handle { width:38px; height:4px; border-radius:99px; background:var(--mnn-red); opacity:.6; margin:0 auto 10px; }
    .picker-sheet-title {
      font-size:10.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase;
      color:var(--text-muted); padding:0 18px 6px;
    }
    .picker-sheet-list { display:flex; flex-direction:column; }
    .picker-sheet-item {
      display:flex; align-items:center; gap:11px; width:100%; padding:12px 18px; border:none; background:none;
      color:var(--text-primary); font-size:14px; font-weight:600; font-family:'DM Sans',sans-serif; cursor:pointer; text-align:left;
      border-bottom:1px solid var(--border); overflow-wrap:anywhere;
    }
    .picker-sheet-item:last-child { border-bottom:none; }
    .picker-sheet-item:active { background:var(--bg-card-hover); }
    .picker-sheet-item.selected { background:rgba(var(--mnn-red-rgb),.07); }
    .picker-sheet-item.locked { opacity:.4; }
    .picker-sheet-item-radio { width:17px; height:17px; border-radius:50%; border:2px solid var(--border-strong); flex-shrink:0; position:relative; }
    .picker-sheet-item.selected .picker-sheet-item-radio { border-color:var(--mnn-red); }
    .picker-sheet-item.selected .picker-sheet-item-radio::after {
      content:''; position:absolute; inset:3px; border-radius:50%; background:var(--mnn-red);
    }
    .picker-sheet-item-label { flex:1; min-width:0; line-height:1.4; }

    .materi-tab-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
    /* Scoped with #sub-tab-row so these win regardless of cascade order vs the generic .sub-tab rules */
    #sub-tab-row.materi-tab-grid.materi-tab-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
    #sub-tab-row .materi-tab-card {
      display:flex; flex-direction:column; align-items:flex-start; gap:0;
      padding:9px 11px; border-radius:14px; border:1.5px solid var(--border-strong);
      background:var(--bg-card); cursor:pointer; transition:all .18s ease; text-align:left;
      font-family:'DM Sans',sans-serif; box-shadow:var(--shadow-card); min-width:0;
    }
    #sub-tab-row .materi-tab-card:active { transform:scale(.98); }
    #sub-tab-row .materi-tab-card.active { border-color:var(--accent-primary); background:rgba(var(--accent-t1-rgb),.08); color:var(--text-primary); }
    #sub-tab-row .materi-tab-icon {
      width:26px; height:26px; border-radius:9px; display:flex; align-items:center; justify-content:center;
      font-size:13px; margin-bottom:4px;
    }
    #sub-tab-row .materi-tab-icon-bunpou    { background:rgba(74,158,255,.15); color:#4a9eff; }
    #sub-tab-row .materi-tab-icon-renshu    { background:rgba(245,158,11,.15); color:#f59e0b; }
    #sub-tab-row .materi-tab-icon-flashcard { background:rgba(139,92,246,.15); color:#8b5cf6; }
    #sub-tab-row .materi-tab-icon-kosakata  { background:rgba(224,60,76,.15); color:#e03c4c; }
    #sub-tab-row .materi-tab-name { font-size:12px; font-weight:800; color:var(--text-primary); }
    #sub-tab-row .materi-tab-sub  { font-size:9.5px; color:var(--text-muted); font-weight:500; }

    .materi-progress-dual {
      display:flex; flex-direction:column; gap:10px;
      background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
      padding:11px 12px; box-shadow:var(--shadow-card);
    }
    .materi-progress-item-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:5px; }
    .materi-progress-item-title { font-size:11.5px; font-weight:700; color:var(--text-primary); }
    .materi-progress-item-pct   { font-size:11.5px; font-weight:800; color:var(--accent-primary); }
    .materi-progress-item-track { height:6px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .materi-progress-item-fill  { height:100%; width:0%; border-radius:99px; transition:width .6s cubic-bezier(.4,0,.2,1); }
    .materi-progress-item-fill-bunpou { background:linear-gradient(90deg,#4a9eff,#2f6fd1); }
    .materi-progress-item-fill-renshu { background:linear-gradient(90deg,#f59e0b,#d97706); }
    .materi-progress-item-sub { font-size:9.5px; color:var(--text-muted); margin-top:4px; font-weight:500; }

    #page-materi.page.active { gap:12px; }

    .materi-list-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
    .materi-list-title { font-size:15px; font-weight:800; color:var(--text-primary); }
    .materi-list-sort { display:flex; align-items:center; gap:6px; font-size:11px; color:var(--text-muted); font-weight:600; }
    .materi-list-sort select {
      border:1px solid var(--border-strong); background:var(--bg-card); color:var(--text-primary);
      border-radius:9px; padding:4px 8px; font-size:11px; font-family:'DM Sans',sans-serif; outline:none; cursor:pointer;
    }

    .bunpou-row-title-line { display:flex; align-items:center; flex-wrap:wrap; gap:6px; }
    .bunpou-row-badge {
      display:inline-block; font-size:9.5px; font-weight:700; padding:2px 9px; border-radius:99px;
      background:rgba(251,191,36,.13); color:#d97706; letter-spacing:.01em;
    }
    .bunpou-row-progress-track { height:4px; background:var(--border-strong); border-radius:99px; overflow:hidden; margin-top:7px; }
    .bunpou-row-progress-fill { height:100%; border-radius:99px; background:linear-gradient(90deg,var(--accent-t1),var(--accent-t3)); transition:width .5s ease; }
    .bunpou-row.br-done .bunpou-row-progress-fill { background:linear-gradient(90deg,#34d399,#059669); }

    /* ── Panel detail slide-in — "flow baru" saat kartu diklik ── */
    .bunpou-detail-overlay {
      position:fixed; inset:0; width:100vw; max-width:100vw; height:100vh; height:100dvh;
      z-index:520; background:var(--bg-base); overflow:hidden;
      transform:translateX(100%); transition:transform .28s cubic-bezier(.32,.72,0,1);
      display:flex; flex-direction:column;
    }
    .bunpou-detail-overlay.open { transform:translateX(0); }
    .bunpou-detail-panel { display:flex; flex-direction:column; height:100%; min-height:0; overflow:hidden; }
    .bunpou-detail-topbar {
      display:flex; align-items:center; gap:10px; padding:12px 14px;
      border-bottom:1px solid var(--border); background:var(--bg-surface); flex-shrink:0;
    }
    .bunpou-detail-back {
      width:34px; height:34px; border-radius:11px; border:1px solid var(--border-strong);
      background:var(--bg-elevated); color:var(--text-primary); font-size:15px; cursor:pointer;
      display:flex; align-items:center; justify-content:center; flex-shrink:0;
    }
    .bunpou-detail-back:active { transform:scale(.92); }
    .bunpou-detail-topbar-mid { flex:1; min-width:0; display:flex; flex-direction:column; gap:1px; }
    .bunpou-detail-topbar-title { font-size:13.5px; font-weight:800; color:var(--text-primary); }
    .bunpou-detail-topbar-sub { font-size:10.5px; color:var(--text-muted); font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .bunpou-detail-body { flex:1; min-height:0; overflow-y:auto; overflow-x:hidden; padding:16px; }

    /* ── Detail hero: tag + judul besar + deskripsi + meta + progress ── */
    .bdetail-hero { margin-bottom:14px; }
    .bdetail-hero-tags { display:flex; gap:5px; margin-bottom:8px; }
    .bdetail-hero-title { font-family:'Noto Sans JP',sans-serif; font-size:26px; font-weight:800; color:var(--text-primary); line-height:1.25; overflow-wrap:anywhere; }
    .bdetail-hero-desc { font-size:12.5px; color:var(--text-muted); margin-top:5px; line-height:1.6; }
    .bdetail-hero-meta { display:flex; gap:14px; margin-top:10px; font-size:11.5px; color:var(--text-muted); font-weight:600; }
    .bdetail-hero-meta span { display:inline-flex; align-items:center; gap:5px; }
    .bdetail-progress-row { display:flex; align-items:center; gap:8px; margin-top:12px; }
    .bdetail-progress-track { flex:1; height:8px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .bdetail-progress-fill { height:100%; width:0%; border-radius:99px; background:linear-gradient(90deg,var(--mnn-red),#c02b3d); transition:width .5s ease; }
    .bdetail-progress-label { font-size:11.5px; font-weight:800; color:var(--mnn-red); flex-shrink:0; }

    /* ── Struktur: chip pemecah pola ── */
    .struktur-chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; }
    .struktur-chip {
      display:inline-flex; align-items:center; gap:4px; padding:4px 10px; border-radius:99px;
      background:rgba(var(--accent-t1-rgb),.08); border:1px solid rgba(var(--accent-t1-rgb),.2);
      font-family:'Noto Sans JP',sans-serif; font-size:12px; font-weight:700; color:var(--accent-primary);
    }
    .struktur-chip-gloss { font-family:'DM Sans',sans-serif; font-size:10.5px; font-weight:600; color:var(--text-muted); }

    /* ── Contoh Kalimat: carousel satu-per-satu ── */
    .reibun-carousel-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
    .reibun-carousel-dots { display:flex; gap:5px; }
    .reibun-carousel-dot { width:6px; height:6px; border-radius:50%; background:var(--border-strong); transition:all .2s; }
    .reibun-carousel-dot.active { background:var(--accent-primary); width:16px; border-radius:99px; }
    .reibun-carousel-nav { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:10px; }
    .reibun-carousel-arrow {
      width:32px; height:32px; border-radius:10px; border:1px solid var(--border-strong); background:var(--bg-elevated);
      color:var(--text-primary); font-size:16px; cursor:pointer; display:flex; align-items:center; justify-content:center; flex-shrink:0;
    }
    .reibun-carousel-arrow:disabled { opacity:.3; cursor:default; }
    .reibun-carousel-arrow:active:not(:disabled) { transform:scale(.92); }
    .reibun-action-row { display:flex; gap:8px; margin-top:8px; }
    .reibun-action-btn {
      flex:1; display:flex; align-items:center; justify-content:center; gap:5px; padding:7px 8px; border-radius:10px;
      border:1px solid var(--border-strong); background:var(--bg-elevated); color:var(--text-secondary);
      font-size:11px; font-weight:700; cursor:pointer; font-family:'DM Sans',sans-serif;
    }
    .reibun-action-btn:active { transform:scale(.96); }
    .reibun-action-btn.copied { color:#34d399; border-color:rgba(52,211,153,.35); }

    /* ── Kesalahan Umum: kartu tip ── */
    .kesalahan-tip { display:flex; gap:8px; padding:9px 11px; background:rgba(248,113,113,.06); border:1px solid rgba(248,113,113,.18); border-radius:12px; margin-bottom:7px; font-size:12px; line-height:1.6; }
    .kesalahan-tip:last-child { margin-bottom:0; }

    /* ── Reibun Creator: tombol AI + feedback ── */
    .reibun-creator-check-btn {
      display:flex; align-items:center; justify-content:center; gap:6px; flex:2; height:40px; border-radius:12px;
      border:none; background:linear-gradient(135deg,#34d399,#059669); color:#fff; font-size:13px; font-weight:800;
      cursor:pointer; font-family:'DM Sans',sans-serif;
    }
    .reibun-creator-check-btn:active { transform:scale(.98); }
    .reibun-creator-alt { font-size:11px; color:var(--text-muted); margin-top:6px; }
    .reibun-creator-alt b { color:var(--text-primary); font-family:'Noto Sans JP',sans-serif; }

    /* ── Latihan Bunpou: kartu CTA dengan info soal/XP ── */
    .bunpou-drill-card {
      display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:10px;
      padding:12px 14px; border-radius:16px; border:1px solid rgba(var(--accent-t1-rgb),.25);
      background:rgba(var(--accent-t1-rgb),.06);
    }
    .bunpou-drill-card-info { font-size:11.5px; color:var(--text-muted); font-weight:600; }
    .bunpou-drill-card-btn {
      display:flex; align-items:center; gap:6px; padding:9px 16px; border-radius:12px; border:none;
      background:var(--mnn-red); color:#fff; font-size:12.5px; font-weight:800; cursor:pointer; font-family:'DM Sans',sans-serif;
      white-space:nowrap;
    }
    .bunpou-drill-card-btn:active { transform:scale(.97); }

    /* ── Renshu count picker — bottom sheet, muncul sebelum quiz mulai ── */
    .renshu-count-overlay {
      position:fixed; inset:0; z-index:530; background:rgba(0,0,0,.5);
      display:flex; align-items:flex-end; justify-content:center;
      opacity:0; pointer-events:none; transition:opacity .25s ease;
    }
    .renshu-count-overlay.open { opacity:1; pointer-events:auto; }
    .renshu-count-sheet {
      width:100%; max-width:480px; background:var(--bg-elevated);
      border-radius:24px 24px 0 0; padding:20px 18px 24px; box-shadow:var(--shadow-float);
      transform:translateY(100%); transition:transform .3s cubic-bezier(.32,.72,0,1);
    }
    .renshu-count-overlay.open .renshu-count-sheet { transform:translateY(0); }
    .renshu-count-title { font-size:15px; font-weight:800; color:var(--text-primary); margin-bottom:14px; text-align:center; }
    .renshu-count-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:12px; }
    .renshu-count-opt {
      padding:14px 10px; border-radius:16px; border:1.5px solid var(--border-strong);
      background:var(--bg-card); color:var(--text-primary); font-size:14px; font-weight:700;
      cursor:pointer; font-family:'DM Sans',sans-serif; transition:all .15s ease;
    }
    .renshu-count-opt:active { transform:scale(.96); background:rgba(var(--accent-t1-rgb),.12); border-color:var(--accent-primary); }
    .renshu-count-opt-all { grid-column:1 / -1; background:var(--mnn-red); color:#fff; border:none; }
    .renshu-count-cancel {
      width:100%; padding:12px; border-radius:16px; border:none; background:none;
      color:var(--text-muted); font-size:13px; font-weight:600; cursor:pointer; font-family:'DM Sans',sans-serif;
    }

    /* Sub-tabs (Kosakata / Bunpou / Quiz / AI) */
    .sub-tab-row { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
    .sub-tab { padding:9px 13px; border-radius:12px; border:1px solid var(--border-strong); background:var(--bg-card); color:var(--text-muted); cursor:pointer; font-size:13px; font-weight:700; font-family:'DM Sans',sans-serif; transition:all .18s; text-align:center; }
    .sub-tab.active { background:rgba(var(--accent-t1-rgb),.15); border-color:rgba(var(--accent-t1-rgb),.4); color:var(--accent-primary); }
    .sub-tab-fc { padding:9px 13px; border-radius:12px; border:1px solid rgba(52,211,153,.25); background:rgba(52,211,153,.08); color:var(--accent-verb); cursor:pointer; font-size:13px; font-weight:700; font-family:'DM Sans',sans-serif; transition:all .18s; text-align:center; }

    /* Shimmer */
    .shimmer { background:linear-gradient(90deg,var(--border),var(--border-strong),var(--border)); background-size:200% 100%; animation:shimmer 1.4s linear infinite; }
    @keyframes shimmer { 0%{background-position:-200% 0} 100%{background-position:200% 0} }

    /* Input search inside materi */
    .filter-input { width:100%; padding:9px 14px; border-radius:12px; border:1px solid var(--border-strong); background:var(--bg-card); color:var(--text-primary); font-size:14px; font-family:'DM Sans',sans-serif; outline:none; box-sizing:border-box; margin-bottom:10px; transition:border-color .2s; }
    .filter-input:focus { border-color:rgba(var(--accent-t1-rgb),.4); }

    /* ─── Kana Quiz ─── */
    .kana-quiz-opts { display:grid; grid-template-columns:1fr 1fr; gap:9px; }
    .kana-quiz-opt {
      padding:16px 10px; border-radius:13px; border:1.5px solid var(--border-strong);
      background:var(--bg-elevated); color:var(--text-primary); font-size:22px; font-weight:700;
      font-family:'DM Sans',sans-serif; cursor:pointer; text-align:center; transition:all .18s;
    }
    .kana-quiz-opt.k-correct { border-color:var(--accent-verb); background:rgba(52,211,153,.12); color:var(--accent-verb); }
    .kana-quiz-opt.k-wrong   { border-color:var(--accent-danger); background:rgba(248,113,113,.1); color:var(--accent-danger); }
    .kana-type-input { width:100%; padding:14px 18px; border-radius:13px; border:2px solid var(--border-strong); background:var(--bg-card); color:var(--text-primary); font-size:22px; font-weight:700; text-align:center; outline:none; transition:border-color .2s; }
    .kana-type-input.k-ok { border-color:var(--accent-verb); background:rgba(52,211,153,.06); }
    .kana-type-input.k-no { border-color:var(--accent-danger); background:rgba(248,113,113,.06); }

    /* ═══════════════════════════════════════════════════
       ✏️ RENSHU — Latihan Tab
    ═══════════════════════════════════════════════════ */
    /* Sub-tab row: flex wrap for 5 tabs */
    .sub-tab-row {
      display:flex; flex-wrap:wrap; gap:8px;
    }
    .sub-tab, .sub-tab-fc {
      min-width:calc(50% - 4px); flex:1;
    }

    /* Renshu mode selector */
    .renshu-modes { display:grid; grid-template-columns:1fr; gap:10px; }
    .renshu-mode-btn {
      display:flex; align-items:center; gap:14px; padding:16px 18px;
      background:var(--bg-card); border:2.5px solid var(--mnn-red);
      border-radius:20px; cursor:pointer; transition:all .18s ease;
      font-family:'DM Sans',sans-serif; text-align:left;
      box-shadow:var(--shadow-card);
    }
    .renshu-mode-btn:active { transform:scale(.98); background:var(--bg-card-hover); }
    .renshu-mode-icon {
      flex-shrink:0; width:44px; height:44px; border-radius:14px;
      display:flex; align-items:center; justify-content:center;
      background:rgba(var(--mnn-red-rgb),.1); color:var(--mnn-red);
    }
    /* Warna beda tiap mode biar gampang dibedain sekilas */
    .renshu-mode-icon-partikel { background:rgba(224,60,76,.12);  color:#e03c4c; }
    .renshu-mode-icon-susun    { background:rgba(74,158,255,.12); color:#4a9eff; }
    .renshu-mode-icon-isi      { background:rgba(245,158,11,.12); color:#f59e0b; }
    .renshu-mode-icon-vocab    { background:rgba(16,185,129,.12); color:#10b981; }
    .renshu-mode-icon-matching { background:rgba(139,92,246,.12); color:#8b5cf6; }
    .renshu-mode-icon-soal     { background:rgba(6,182,212,.12);  color:#06b6d4; }
    .renshu-mode-info { flex:1; }
    .renshu-mode-title { font-size:15px; font-weight:700; color:var(--text-primary); }
    .renshu-mode-desc { font-size:12px; color:var(--text-muted); margin-top:2px; }
    .renshu-mode-arrow { font-size:18px; color:var(--text-muted); }

    /* Progress bar for renshu */
    .renshu-progress-wrap { margin-bottom:14px; }
    .renshu-progress-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
    .renshu-progress-title { font-size:12px; font-weight:600; color:var(--text-secondary); }
    .renshu-score-badge { font-size:12px; font-weight:700; color:var(--accent-primary); background:rgba(var(--accent-t1-rgb),.12); padding:3px 10px; border-radius:99px; border:1px solid rgba(var(--accent-t1-rgb),.2); }
    .renshu-progress-bar { height:5px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .renshu-progress-fill { height:100%; background:var(--accent-primary); border-radius:99px; transition:width .4s ease; }

    /* Latihan 1 — Partikel */
    .renshu-question-card {
      background:var(--bg-card); border:1px solid var(--border-strong);
      border-radius:22px; padding:20px 18px; margin-bottom:16px;
      box-shadow:var(--shadow-card); text-align:center;
    }
    .renshu-question-text {
      font-family:'Noto Sans JP',sans-serif; font-size:20px;
      font-weight:600; color:var(--text-primary); line-height:1.7;
      letter-spacing:.04em;
    }
    .renshu-question-blank {
      display:inline-block; min-width:48px; padding:2px 8px;
      background:rgba(var(--accent-t1-rgb),.15); border-bottom:2.5px solid var(--accent-primary);
      border-radius:4px 4px 0 0; color:var(--accent-primary);
      font-weight:800; letter-spacing:.06em; transition:all .2s;
    }
    .renshu-question-blank.filled {
      background:rgba(var(--accent-t1-rgb),.25); color:var(--accent-primary);
      border-bottom-color:var(--accent-adj);
    }
    .renshu-translation { font-size:12px; color:var(--text-muted); margin-top:8px; font-style:italic; }
    .renshu-particle-opts { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-bottom:16px; }
    .renshu-opt-btn {
      height:52px; border-radius:18px; border:1px solid var(--border-strong);
      background:var(--bg-elevated); color:var(--text-primary);
      font-size:18px; font-family:'Noto Sans JP',sans-serif; font-weight:600;
      cursor:pointer; transition:all .18s ease;
      display:flex; align-items:center; justify-content:center;
    }
    .renshu-opt-btn:active { transform:scale(.95); }
    .renshu-opt-btn.is-correct {
      background:rgba(52,211,153,.15); border-color:var(--accent-verb); color:var(--accent-verb);
      animation:renshu-bounce .35s cubic-bezier(.34,1.56,.64,1);
    }
    .renshu-opt-btn.is-wrong {
      background:rgba(248,113,113,.1); border-color:var(--accent-danger); color:var(--accent-danger);
      animation:renshu-shake .35s ease;
    }
    .renshu-opt-btn.is-reveal {
      background:rgba(52,211,153,.08); border-color:rgba(52,211,153,.35); color:var(--accent-verb);
      opacity:.7;
    }
    @keyframes renshu-bounce {
      0%   { transform:scale(1); }
      40%  { transform:scale(1.1); }
      70%  { transform:scale(.96); }
      100% { transform:scale(1); }
    }
    @keyframes renshu-shake {
      0%,100% { transform:translateX(0); }
      20%     { transform:translateX(-6px); }
      40%     { transform:translateX(6px); }
      60%     { transform:translateX(-4px); }
      80%     { transform:translateX(4px); }
    }
    .renshu-feedback {
      text-align:center; padding:10px 14px; border-radius:16px;
      font-size:13px; font-weight:700; margin-bottom:14px;
      display:none;
    }
    .renshu-feedback.correct { background:rgba(52,211,153,.12); color:var(--accent-verb); border:1px solid rgba(52,211,153,.25); display:block; }
    .renshu-feedback.wrong   { background:rgba(248,113,113,.1); color:var(--accent-danger); border:1px solid rgba(248,113,113,.2); display:block; }

    /* Latihan 2 — Susun Kalimat */
    .renshu-word-pool {
      display:flex; flex-wrap:wrap; gap:8px; padding:14px;
      background:var(--bg-surface); border:1px solid var(--border-strong);
      border-radius:18px; min-height:64px; margin-bottom:12px;
    }
    .renshu-word-pool.answer-zone {
      background:rgba(var(--accent-t1-rgb),.05); border-color:rgba(var(--accent-t1-rgb),.25);
      min-height:56px; border-style:dashed;
    }
    .renshu-word-chip {
      padding:8px 14px; border-radius:12px;
      background:var(--bg-elevated); border:1px solid var(--border-strong);
      cursor:pointer; font-family:'Noto Sans JP',sans-serif; font-size:16px;
      color:var(--text-primary); transition:all .15s ease;
      user-select:none; -webkit-user-select:none;
    }
    .renshu-word-chip:active { transform:scale(.94); }
    .renshu-word-chip.in-answer {
      background:rgba(var(--accent-t1-rgb),.12); border-color:rgba(var(--accent-t1-rgb),.35);
      color:var(--accent-primary);
    }
    .renshu-word-chip.disabled { opacity:.4; cursor:default; }
    .renshu-zone-label { font-size:10px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); margin-bottom:6px; }

    /* Latihan 3 — Fill in the blank */
    .renshu-fill-input {
      width:100%; padding:14px 18px; border-radius:13px;
      border:2px solid var(--border-strong); background:var(--bg-card);
      color:var(--text-primary); font-size:18px;
      font-family:'Noto Sans JP',sans-serif; font-weight:600;
      text-align:center; outline:none; transition:border-color .22s;
      margin-bottom:10px;
    }
    .renshu-fill-input:focus { border-color:rgba(var(--accent-t1-rgb),.5); }
    .renshu-fill-input.is-correct { border-color:var(--accent-verb); background:rgba(52,211,153,.06); }
    .renshu-fill-input.is-wrong   { border-color:var(--accent-danger); background:rgba(248,113,113,.06); }
    .renshu-hint { font-size:12px; color:var(--text-muted); text-align:center; margin-bottom:12px; }

    /* Result screen */
    .renshu-result {
      text-align:center; padding:24px 16px; display:flex;
      flex-direction:column; align-items:center; gap:14px;
    }
    .renshu-result-emoji { font-size:56px; }
    .renshu-result-score { font-size:48px; font-weight:800; color:var(--text-primary); line-height:1; }
    .renshu-result-sub { font-size:14px; color:var(--text-secondary); }
    .renshu-result-bar { width:100%; height:8px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .renshu-result-bar-fill { height:100%; border-radius:99px; transition:width .7s cubic-bezier(.4,0,.2,1); }

    /* Back button in renshu */
    .renshu-back-row { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
    .renshu-title-row { font-size:13px; font-weight:700; color:var(--text-secondary); }

    /* Score history pill */
    .renshu-best-score { display:inline-flex; align-items:center; gap:5px; padding:3px 10px; border-radius:99px; font-size:11px; font-weight:700; background:rgba(var(--accent-t1-rgb),.1); color:var(--accent-primary); border:1px solid rgba(var(--accent-t1-rgb),.2); }

    /* ─── Reibun (例文) per-bunpou ─── */
    .reibun-item { padding:12px 14px; border-bottom:1px solid var(--border); }
    .reibun-item:last-child { border-bottom:none; }
    .reibun-num { font-size:10px; font-weight:700; color:var(--text-muted); margin-bottom:4px; }
    .reibun-jp { font-family:'Noto Sans JP',sans-serif; font-size:16px; color:var(--text-primary); line-height:1.6; }
    .reibun-romaji { font-size:11px; color:var(--text-muted); font-style:italic; margin-top:2px; }
    .reibun-reveal-btn { display:inline-flex; align-items:center; gap:5px; margin-top:6px; padding:4px 10px; border-radius:10px; border:1.5px dashed rgba(74,158,255,.4); background:rgba(74,158,255,.06); color:var(--accent-noun); font-size:11px; font-weight:700; cursor:pointer; font-family:'DM Sans',sans-serif; transition:all .15s; }
    .reibun-reveal-btn:hover { background:rgba(74,158,255,.12); }
    .reibun-arti { margin-top:6px; font-size:13px; color:var(--text-secondary); background:rgba(74,158,255,.06); border-left:3px solid var(--accent-noun); padding:6px 10px; border-radius:0 8px 8px 0; display:none; }
    .reibun-arti.show { display:block; }

    /* Bunpou renshu mini-drill */
    .bunpou-drill-btn { display:flex; align-items:center; gap:8px; margin-top:10px; padding:9px 14px; border-radius:16px; border:1px solid rgba(var(--accent-t1-rgb),.25); background:rgba(var(--accent-t1-rgb),.07); color:var(--accent-primary); font-size:12px; font-weight:700; cursor:pointer; font-family:'DM Sans',sans-serif; width:100%; transition:all .15s; }
    .bunpou-drill-btn:active { background:rgba(var(--accent-t1-rgb),.16); transform:scale(.99); }

    /* Isi Kalimat answer hint display */
    .ri-answer-hint {
      margin-top:0; padding:10px 16px; border-radius:16px;
      font-size:14px; font-weight:700; text-align:center;
      display:none;
    }
    .ri-answer-hint.correct { background:rgba(52,211,153,.12); color:var(--accent-verb); border:1px solid rgba(52,211,153,.25); display:block; }
    .ri-answer-hint.wrong   { background:rgba(248,113,113,.1); color:var(--accent-danger); border:1px solid rgba(248,113,113,.2); display:block; }

    /* ═══════════════════════════════════════════════════
       BUNPOU UPGRADE — New Feature Styles
    ═══════════════════════════════════════════════════ */

    /* [v3.6.4] Header berwarna dihapus — sekarang warna kategori ada di background
       card + outline tebal, header cuma teks polos warna senada. */
    .bsection { background:var(--bg-surface); border-radius:16px; border:2.5px solid var(--border); overflow:hidden; margin-bottom:10px; }
    .bsection-head { padding:12px 14px 2px; font-size:12.5px; font-weight:800; letter-spacing:.02em; color:var(--text-primary); }
    .bsection-body { padding:8px 14px 14px; font-size:14px; color:var(--text-secondary); line-height:1.9; }
    .bsection-v-struktur  { background:rgba(59,130,246,.07);  border-color:rgba(59,130,246,.5); }
    .bsection-v-struktur  .bsection-head { color:#2563eb; }
    .bsection-v-fungsi    { background:rgba(251,146,60,.08);  border-color:rgba(251,146,60,.55); }
    .bsection-v-fungsi    .bsection-head { color:#ea580c; }
    .bsection-v-kesalahan { background:rgba(248,113,113,.07); border-color:rgba(248,113,113,.55); }
    .bsection-v-kesalahan .bsection-head { color:#dc2626; }
    .bsection-v-mirip     { background:rgba(167,139,250,.07); border-color:rgba(167,139,250,.5); }
    .bsection-v-mirip     .bsection-head { color:#7c3aed; }
    .bsection-v-lengkap   { background:rgba(100,116,139,.07); border-color:rgba(100,116,139,.45); }
    .bsection-v-lengkap   .bsection-head { color:#475569; }
    .bsection-v-reibun    { background:rgba(34,211,238,.07);  border-color:rgba(34,211,238,.5); }
    .bsection-v-reibun    .bsection-head { color:#0891b2; }
    .bsection-v-creator   { background:rgba(52,211,153,.08);  border-color:rgba(52,211,153,.5); }
    .bsection-v-creator   .bsection-head { color:#059669; }

    /* Difficulty badges for Reibun */
    .diff-badge { display:inline-flex; align-items:center; padding:2px 7px; border-radius:6px; font-size:9px; font-weight:700; vertical-align:middle; margin-left:4px; }
    .diff-easy   { background:rgba(52,211,153,.12); color:var(--accent-verb); border:1px solid rgba(52,211,153,.22); }
    .diff-medium { background:rgba(251,146,60,.12); color:var(--accent-adj); border:1px solid rgba(251,146,60,.22); }
    .diff-hard   { background:rgba(248,113,113,.12); color:var(--accent-danger); border:1px solid rgba(248,113,113,.22); }

    /* Reibun Creator */
    /* .reibun-creator container lama dihapus — diganti .bsection (lihat di atas) */
    .reibun-creator-input { width:100%; padding:11px 14px; border-radius:12px; border:1.5px solid var(--border-strong); background:var(--bg-card); color:var(--text-primary); font-size:16px; font-family:'Noto Sans JP',sans-serif; outline:none; transition:border-color .2s; margin-bottom:8px; box-sizing:border-box; }
    .reibun-creator-input:focus { border-color:rgba(var(--accent-t1-rgb),.5); }
    .reibun-creator-feedback { padding:8px 12px; border-radius:10px; font-size:12px; font-weight:700; margin-top:8px; line-height:1.55; }
    .reibun-creator-feedback.rcf-ok   { background:rgba(52,211,153,.1); color:var(--accent-verb); border:1px solid rgba(52,211,153,.2); }
    .reibun-creator-feedback.rcf-warn { background:rgba(251,146,60,.1); color:var(--accent-adj); border:1px solid rgba(251,146,60,.2); }

    /* Grammar Progress Pills */
    .grammar-prog-row { display:flex; gap:5px; flex-wrap:wrap; padding:4px 16px 10px; border-top:1px solid var(--border); }
    .grammar-prog-pill { display:inline-flex; align-items:center; gap:5px; padding:3px 8px; border-radius:6px; font-size:10px; font-weight:600; background:var(--bg-elevated); border:1px solid var(--border); color:var(--text-muted); }
    .grammar-prog-pill.gpp-done { background:rgba(52,211,153,.08); border-color:rgba(52,211,153,.2); color:var(--accent-verb); }
    .grammar-prog-pill.gpp-date { background:rgba(74,158,255,.08); border-color:rgba(74,158,255,.18); color:var(--accent-noun); }
    .gpp-dot { width:6px; height:6px; border-radius:50%; background:var(--mnn-red); flex-shrink:0; }
    .grammar-prog-pill.gpp-done .gpp-dot { background:#34d399; }

    /* [ADDITIVE — Bunpou UX fix] Ringkasan progress di atas list grammar */
    .grammar-progress-summary { display:flex; gap:10px; margin-bottom:10px; padding:10px 12px; background:var(--bg-elevated); border:1px solid var(--border); border-radius:16px; }
    .gps-item { font-size:12px; font-weight:600; color:var(--text-muted); }
    .gps-item.gps-complete { color:var(--accent-verb); }

    /* [ADDITIVE] Tombol quick-drill di header collapsed */
    .grammar-quick-drill-btn { font-size:10px; font-weight:700; padding:4px 9px; border-radius:7px; border:1px solid var(--accent-verb); background:rgba(52,211,153,.08); color:var(--accent-verb); cursor:pointer; white-space:nowrap; }
    .grammar-quick-drill-btn:active { background:rgba(52,211,153,.18); }

    /* [ADDITIVE] CTA setelah Reibun Creator jawaban benar */
    .reibun-next-drill-btn { display:block; width:100%; margin-top:8px; padding:10px; border-radius:12px; border:none; background:var(--accent-verb); color:#fff; font-size:12px; font-weight:700; cursor:pointer; }
    .reibun-next-drill-btn:active { opacity:.85; }

    /* [ADDITIVE — Flashcard difficulty badge] */
    .card-diff-badge { display:inline-block; font-size:10px; font-weight:700; padding:2px 8px; border-radius:99px; margin-left:6px; vertical-align:middle; }
    .card-diff-badge.diff-easy { background:rgba(52,211,153,.12); color:#34d399; border:1px solid rgba(52,211,153,.25); }
    .card-diff-badge.diff-med  { background:rgba(251,191,36,.1);  color:#fbbf24; border:1px solid rgba(251,191,36,.25); }
    .card-diff-badge.diff-hard { background:rgba(239,68,68,.1);   color:#ef4444; border:1px solid rgba(239,68,68,.25); }

    /* Daily Vocab Review */

    /* Hint toggle button */
    .hint-eye-wrap { text-align:center; margin-bottom:10px; }
    .hint-eye-btn { display:inline-flex; align-items:center; gap:5px; padding:5px 13px; border-radius:10px; border:1.5px dashed var(--border-strong); background:transparent; color:var(--text-muted); font-size:11px; font-weight:700; cursor:pointer; font-family:'DM Sans',sans-serif; transition:all .18s; }
    .hint-eye-btn:hover, .hint-eye-btn:active { border-color:rgba(var(--accent-t1-rgb),.45); color:var(--accent-primary); }
    .hint-text { font-size:12px; color:var(--text-muted); text-align:center; margin-top:5px; font-family:'Noto Sans JP',sans-serif; }

    /* ═══════════════════════════════════════════════════
       GAMIFICATION SYSTEM — GFY CSS
    ═══════════════════════════════════════════════════ */

    /* ─── Dashboard Hero Card ─── */
    .gfy-hero {
      background: linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border: 1px solid rgba(255,255,255,.08);
      border-radius: 22px;
      padding: 14px 16px;
      margin-bottom: 12px;
      display: flex;
      align-items: center;
      gap: 12px;
      box-shadow: 0 2px 8px rgba(0,0,0,.18);
      position: relative;
      overflow: hidden;
    }
    .gfy-hero::before {
      content: '';
      position: absolute;
      inset: 0;
      background-image: var(--mnn-ornament-bg);
      background-size: cover; background-position: 60% center; background-repeat: no-repeat;
      opacity: 1;
      mix-blend-mode: normal;
      pointer-events: none;
    }
    .gfy-hero::after {
      content: '';
      position: absolute; inset: 0;
      background: linear-gradient(100deg, rgba(var(--mnn-navy-rgb),.55) 0%, rgba(var(--mnn-navy-rgb),.15) 55%, transparent 85%);
      pointer-events: none;
    }
    .gfy-hero > * { position: relative; z-index: 1; }
    .gfy-avatar-wrap {
      position: relative;
      flex-shrink: 0;
    }
    .gfy-avatar-circle {
      width: 52px; height: 52px;
      border-radius: 50%;
      background: rgba(255,255,255,.10);
      border: 2px solid rgba(255,255,255,.25);
      display: flex; align-items: center; justify-content: center;
      overflow: hidden;
      cursor: pointer;
      transition: border-color .2s ease, transform .15s ease;
    }
    .gfy-avatar-circle:active { transform: scale(.93); }
    .gfy-avatar-circle:hover { border-color: var(--mnn-red); }
    .gfy-avatar-circle svg { width: 40px; height: 40px; }
    .gfy-level-badge {
      position: absolute; bottom: -2px; right: -4px;
      background: linear-gradient(135deg, var(--mnn-red), var(--mnn-red-dark));
      color: #fff;
      font-size: 9px; font-weight: 800;
      padding: 2px 5px;
      border-radius: 99px;
      border: 1.5px solid var(--mnn-navy);
      white-space: nowrap;
    }
    .gfy-info { flex: 1; min-width: 0; }
    .gfy-name-row {
      display: flex; align-items: center; gap: 6px;
      margin-bottom: 3px;
    }
    .gfy-level-label {
      font-size: 13px; font-weight: 700; color: #fff;
    }
    .gfy-streak-pill {
      display: inline-flex; align-items: center; gap: 3px;
      background: var(--mnn-red);
      border: 1px solid rgba(255,255,255,.22);
      border-radius: 99px;
      padding: 2px 8px;
      font-size: 11px; font-weight: 700; color: #fff;
      box-shadow: 0 2px 8px rgba(0,0,0,.25);
    }
    .gfy-streak-pill.hot { background: var(--mnn-red-dark); border-color: rgba(255,255,255,.28); color: #fff; }
    .gfy-exp-bar-wrap { margin-top: 4px; }
    .gfy-exp-label {
      display: flex; justify-content: space-between;
      font-size: 10px; color: rgba(255,255,255,.65);
      margin-bottom: 4px;
    }
    .gfy-exp-track {
      height: 5px; background: rgba(255,255,255,.16); border-radius: 99px; overflow: hidden;
    }
    .gfy-exp-fill {
      height: 100%;
      background: linear-gradient(90deg, var(--mnn-red), #e5735f);
      border-radius: 99px;
      transition: width .6s cubic-bezier(.4,0,.2,1);
    }
    .gfy-stats-row {
      display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap;
    }
    .gfy-stat-chip {
      display: flex; align-items: center; gap: 4px;
      background: rgba(10,22,40,.72);
      border: 1px solid rgba(255,255,255,.16);
      border-radius: 10px; padding: 4px 8px;
      font-size: 11px; color: rgba(255,255,255,.8); font-weight: 600;
      backdrop-filter: blur(2px);
    }
    .gfy-stat-chip span { color: #fff; }

    /* ─── Streak Milestone Bar ─── */
    .gfy-milestone-row {
      display: flex; gap: 8px; margin-top: 10px; margin-bottom: 14px; align-items: stretch;
    }
    .gfy-milestone {
      flex: 1; text-align: center;
      padding: 12px 6px;
      border-radius: 16px;
      border: 1px solid var(--border);
      background: var(--bg-card);
      box-shadow: var(--shadow-card);
      font-size: 9.5px; color: var(--text-muted);
      font-weight: 600; transition: all .2s;
    }
    .gfy-milestone.reached {
      border-color: var(--mnn-red);
      background: var(--mnn-red);
      color: #fff;
      box-shadow: 0 2px 6px rgba(0,0,0,.15);
    }
    .gfy-milestone .ms-icon { font-size: 15px; display: block; margin-bottom: 4px; }
    .gfy-milestone .ms-day { font-size: 13px; font-weight: 800; display: block; color: var(--text-primary); }
    .gfy-milestone.reached .ms-day { color: #fff; }

    /* ─── Achievement Page Ornaments ─── */
    #page-achievements { position: relative; }
    #page-achievements::before {
      content: ''; position: absolute; top: -40px; right: -50px; width: 160px; height: 160px;
      background: radial-gradient(circle, rgba(var(--mnn-red-rgb),.14), transparent 70%);
      pointer-events: none; z-index: 0;
    }
    #page-achievements::after {
      content: ''; position: absolute; top: 60px; left: -60px; width: 140px; height: 140px;
      background: radial-gradient(circle, rgba(var(--mnn-navy-rgb),.12), transparent 70%);
      pointer-events: none; z-index: 0;
    }
    #page-achievements > * { position: relative; z-index: 1; }

    /* ─── Achievement Grid ─── */
    .gfy-ach-section { margin-bottom: 14px; }
    .gfy-ach-section-title {
      font-size: 11px; font-weight: 800;
      color: var(--text-secondary); letter-spacing: .08em;
      text-transform: uppercase; margin-bottom: 10px;
      padding-left: 10px; position: relative;
    }
    .gfy-ach-section-title::before {
      content: ''; position: absolute; left: 0; top: 1px; bottom: 1px; width: 4px;
      border-radius: 99px; background: linear-gradient(180deg, var(--mnn-red), var(--mnn-navy));
    }
    .gfy-ach-grid {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;
    }
    .gfy-ach-card {
      background: var(--bg-card);
      border: 2px solid var(--mnn-red);
      border-radius: 18px;
      padding: 14px 8px 10px;
      text-align: center;
      cursor: pointer;
      transition: all .18s ease;
      position: relative;
      overflow: hidden;
      box-shadow: var(--shadow-card);
    }
    .gfy-ach-card > * { position: relative; z-index: 1; }
    .gfy-ach-card.unlocked {
      box-shadow: 0 4px 14px rgba(var(--mnn-red-rgb),.18);
    }
    .gfy-ach-card.locked { border-color: var(--border); opacity: .55; filter: grayscale(.5); }
    .gfy-ach-card:active { transform: scale(.95); }
    .gfy-ach-icon {
      margin-bottom: 6px;
      width: 42px; height: 42px; margin-left: auto; margin-right: auto;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      background: rgba(var(--mnn-red-rgb),.12); color: var(--mnn-red);
    }
    .gfy-ach-icon svg { width: 21px; height: 21px; }
    .gfy-ach-card.locked .gfy-ach-icon { background: rgba(148,163,184,.15); color: var(--text-muted); }
    .gfy-ach-name { font-size: 9.5px; font-weight: 700; color: var(--text-primary); line-height: 1.3; }
    .gfy-ach-card.locked .gfy-ach-name { color: var(--text-muted); }
    .gfy-ach-check {
      position: absolute; top: 6px; right: 6px;
      width: 15px; height: 15px; border-radius: 50%;
      background: var(--mnn-red);
      display: flex; align-items: center; justify-content: center;
      color: #fff; z-index: 2;
    }
    .gfy-ach-check svg { width: 9px; height: 9px; }

    /* ─── Reward Popup ─── */
    #gfy-reward-popup {
      position: fixed;
      top: 70px; left: 50%; transform: translateX(-50%) translateY(-20px);
      z-index: 9990;
      max-width: 340px; width: calc(100% - 32px);
      pointer-events: none;
      opacity: 0;
      transition: opacity .3s ease, transform .3s ease;
    }
    #gfy-reward-popup.show {
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }
    .gfy-reward-inner {
      background: var(--bg-elevated);
      border: 1.5px solid rgba(var(--accent-t2-rgb),.45);
      border-radius: 20px;
      padding: 12px 16px;
      display: flex; align-items: center; gap: 10px;
      box-shadow: 0 8px 32px rgba(0,0,0,.4);
    }
    .gfy-reward-icon { font-size: 26px; flex-shrink: 0; display:flex; align-items:center; justify-content:center; width:32px; height:32px; }
    .gfy-reward-icon svg { width:28px; height:28px; }
    .gfy-reward-text { flex: 1; }
    .gfy-reward-title { font-size: 13px; font-weight: 800; color: var(--text-primary); }
    .gfy-reward-sub { font-size: 11px; color: var(--text-muted); margin-top: 1px; }
    .gfy-exp-badge {
      background: linear-gradient(135deg, var(--accent-t2), #f472b6);
      color: #fff; font-size: 11px; font-weight: 800;
      padding: 3px 9px; border-radius: 99px; flex-shrink: 0;
    }

    /* ─── Level Up Popup ─── */
    #gfy-levelup-overlay {
      position: fixed; inset: 0; z-index: 9995;
      display: none; align-items: center; justify-content: center;
      background: rgba(0,0,0,.65); backdrop-filter: blur(6px);
    }
    #gfy-levelup-overlay.show { display: flex; }
    .gfy-levelup-card {
      background: var(--bg-elevated);
      border: 2px solid rgba(var(--accent-t2-rgb),.5);
      border-radius: 28px;
      padding: 32px 28px;
      text-align: center;
      max-width: 300px; width: calc(100% - 32px);
      animation: gfySlideUp .4s cubic-bezier(.34,1.4,.64,1);
      position: relative; overflow: hidden;
    }
    .gfy-levelup-card::before {
      content: '';
      position: absolute; top: 0; left: 0; right: 0; height: 3px;
      background: linear-gradient(90deg, #f59e0b, #ef4444, var(--accent-t2), #22c55e, #f59e0b);
    }
    .gfy-levelup-num {
      font-size: 56px; font-weight: 900;
      background: linear-gradient(135deg, #f59e0b, #ef4444);
      -webkit-background-clip: text; -webkit-text-fill-color: transparent;
      line-height: 1;
    }
    .gfy-levelup-label { font-size: 18px; font-weight: 800; color: var(--text-primary); margin: 8px 0 4px; }
    .gfy-levelup-sub { font-size: 13px; color: var(--text-secondary); margin-bottom: 20px; }
    .gfy-levelup-btn {
      width: 100%; padding: 13px;
      border-radius: 16px; border: none;
      background: linear-gradient(135deg, var(--accent-t2), #f472b6);
      color: #fff; font-size: 14px; font-weight: 700;
      cursor: pointer; font-family: 'DM Sans', sans-serif;
    }

    /* ─── Avatar Modal ─── */
    #gfy-avatar-modal {
      position: fixed; inset: 0; z-index: 9000;
      display: none; align-items: flex-end; justify-content: center;
    }
    #gfy-avatar-modal.open { display: flex; }
    .gfy-avatar-bg {
      position: absolute; inset: 0;
      background: rgba(0,0,0,.6); backdrop-filter: blur(6px);
    }
    .gfy-avatar-sheet {
      position: relative;
      background: var(--bg-elevated);
      border-radius: 28px 28px 0 0;
      padding: 20px 18px 40px;
      width: 100%; max-width: 430px;
      max-height: 80vh; overflow-y: auto;
    }
    .gfy-avatar-handle {
      width: 36px; height: 4px;
      background: var(--border-strong); border-radius: 99px;
      margin: 0 auto 16px;
    }
    .gfy-avatar-title {
      font-size: 16px; font-weight: 800; color: var(--text-primary);
      text-align: center; margin-bottom: 4px;
    }
    .gfy-avatar-sub {
      font-size: 12px; color: var(--text-muted);
      text-align: center; margin-bottom: 16px;
    }
    .gfy-avatar-grid {
      display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px;
      margin-bottom: 16px;
    }
    .gfy-av-item {
      background: var(--bg-card);
      border: 2px solid var(--border);
      border-radius: 18px;
      padding: 10px 6px;
      display: flex; flex-direction: column; align-items: center; gap: 6px;
      cursor: pointer;
      transition: all .18s ease;
    }
    .gfy-av-item:active { transform: scale(.93); }
    .gfy-av-item.selected {
      border-color: var(--accent-primary);
      background: rgba(var(--accent-t1-rgb),.1);
    }
    .gfy-av-item svg { width: 44px; height: 44px; }
    .gfy-av-name { font-size: 9px; color: var(--text-muted); font-weight: 600; text-align: center; }
    .gfy-av-item.selected .gfy-av-name { color: var(--accent-primary); }
    .gfy-avatar-confirm {
      width: 100%; padding: 14px;
      border-radius: 16px; border: none;
      background: linear-gradient(135deg, var(--accent-t2), #f472b6);
      color: #fff; font-size: 14px; font-weight: 700;
      cursor: pointer; font-family: 'DM Sans', sans-serif;
      position: sticky; bottom: -2px;
      box-shadow: 0 -8px 16px -4px var(--bg-elevated);
    }
    .gfy-avatar-confirm:disabled { opacity: .5; cursor: not-allowed; }

    /* ─── Profile Gamify Section ─── */
    .gfy-profile-section {
      width: 100%; margin: 12px 0;
      background: linear-gradient(135deg, rgba(var(--mnn-red-rgb),.08), rgba(var(--mnn-red-rgb),.03));
      border: 1.5px solid rgba(var(--mnn-red-rgb),.28);
      border-radius: 18px; padding: 14px 14px 12px;
    }
    .gfy-profile-row {
      display: flex; justify-content: space-around; margin-bottom: 12px;
    }
    .gfy-prf-stat { text-align: center; }
    .gfy-prf-val { font-size: 17px; font-weight: 800; color: var(--text-primary); }
    .gfy-prf-lbl { font-size: 10px; color: var(--text-muted); margin-top: 1px; }
    .gfy-profile-section .gfy-exp-label { color: var(--text-secondary); font-weight:600; }
    .gfy-profile-section .gfy-exp-track { background: rgba(var(--mnn-red-rgb),.15); }
    .gfy-profile-section .gfy-exp-fill { background: linear-gradient(90deg, var(--mnn-red), var(--mnn-red-dark)); }
    .gfy-avatar-change-btn {
      margin-top: 10px; width: 100%; padding: 11px; border-radius: 14px; border: none;
      background: var(--mnn-red); color: #fff; font-size: 12.5px; font-weight: 700;
      cursor: pointer; font-family: 'DM Sans', sans-serif;
      display: flex; align-items: center; justify-content: center; gap: 6px;
      box-shadow: 0 4px 14px rgba(var(--mnn-red-rgb),.3);
    }
    .gfy-avatar-change-btn:active { transform: scale(.98); }

    /* ─── Achievement Page ─── */
    #page-achievements {
      display: none; flex-direction: column; gap: 0;
      padding: 16px; overflow-y: auto;
    }
    #page-achievements.active { display: flex; }

    @keyframes gfySlideUp {
      from { transform: translateY(40px) scale(.9); opacity: 0; }
      to   { transform: translateY(0) scale(1); opacity: 1; }
    }
    @keyframes gfyPop {
      0%   { transform: scale(1); }
      50%  { transform: scale(1.15); }
      100% { transform: scale(1); }
    }
    .gfy-pop { animation: gfyPop .35s ease; }

    /* ═══════════════════════════════════════════════════
       v2.5 — NEW FEATURES CSS
    ═══════════════════════════════════════════════════ */

    /* ── Learning Path Widget ─────────────────── */
    .lp-widget {
      position:relative; overflow:hidden;
      background: linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1px solid rgba(255,255,255,.08); border-radius:22px; padding:16px; margin-bottom:14px;
      box-shadow:0 2px 8px rgba(0,0,0,.18);
    }
    .lp-widget::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:68% 32%; background-repeat:no-repeat;
      opacity:.65; pointer-events:none;
    }
    .lp-widget > * { position:relative; z-index:1; }
    .lp-widget-title { font-size:11px; font-weight:700; color:rgba(255,255,255,.6); letter-spacing:.08em; text-transform:uppercase; margin-bottom:12px; display:flex; align-items:center; gap:6px; }
    .lp-rows { display:flex; flex-direction:column; gap:8px; }
    .lp-row {
      display:flex; align-items:center; gap:10px; padding:9px 12px; background:rgba(10,22,40,.55);
      border-radius:14px; cursor:pointer; transition:background .15s;
      border-left:3px solid var(--row-accent, var(--mnn-red));
    }
    .lp-row:active { background:rgba(10,22,40,.7); }
    .lp-row-icon {
      flex-shrink:0; width:28px; height:28px;
      display:flex; align-items:center; justify-content:center;
      border-radius:50%; background:rgba(255,255,255,.20); color:var(--row-accent, var(--mnn-red));
    }
    .lp-row-icon svg { width:15px; height:15px; }
    .lp-row-body { flex:1; min-width:0; }
    .lp-row-label { font-size:12px; font-weight:600; color:rgba(255,255,255,.6); }
    .lp-row-value { font-size:13px; font-weight:700; color:#fff; margin-top:1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .lp-row-arrow {
      font-size:13px; flex-shrink:0; width:26px; height:26px; line-height:26px; text-align:center;
      border-radius:50%; color:var(--row-accent, var(--mnn-red));
      border:1.5px solid var(--row-accent, var(--mnn-red)); background:rgba(255,255,255,.06);
    }

    /* ── Daily Missions ───────────────────────── */
    .mission-widget {
      position:relative; overflow:hidden;
      background: linear-gradient(135deg, var(--mnn-navy) 0%, var(--mnn-navy-dark) 100%);
      border:1px solid rgba(255,255,255,.08); border-radius:22px; padding:16px; margin-bottom:14px;
      box-shadow:0 2px 8px rgba(0,0,0,.18);
    }
    .mission-widget::before {
      content:''; position:absolute; inset:0;
      background-image:var(--mnn-ornament-bg); background-size:cover; background-position:68% 60%; background-repeat:no-repeat;
      opacity:.65; pointer-events:none;
    }
    .mission-widget > * { position:relative; z-index:1; }
    .mission-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
    .mission-title { font-size:11px; font-weight:700; color:rgba(255,255,255,.6); letter-spacing:.08em; text-transform:uppercase; }
    .mission-reset { font-size:10px; color:rgba(255,255,255,.5); }
    .mission-item { display:flex; align-items:center; gap:10px; padding:10px 12px; margin-bottom:6px; background:rgba(10,22,40,.55); border-radius:14px; border-bottom:none; }
    .mission-item:last-child { margin-bottom:0; }
    .mission-icon {
      flex-shrink:0; width:30px; height:30px; font-size:15px;
      display:flex; align-items:center; justify-content:center;
      border-radius:50%; background:rgba(255,255,255,.20);
    }
    .mission-icon svg { width:16px; height:16px; }
    .mission-info { flex:1; }
    .mission-name { font-size:13px; font-weight:600; color:#fff; }
    .mission-progress-bar-wrap { height:4px; background:rgba(255,255,255,.16); border-radius:99px; margin-top:5px; overflow:hidden; }
    .mission-progress-bar { height:100%; background:var(--mnn-red); border-radius:99px; transition:width .4s ease; }
    .mission-progress-text { font-size:10px; color:rgba(255,255,255,.55); margin-top:3px; }
    .mission-exp-badge { font-size:10px; font-weight:700; color:#6ee7b7; background:rgba(52,211,153,.18); border:1px solid rgba(52,211,153,.35); border-radius:10px; padding:3px 7px; flex-shrink:0; }
    .mission-claim-btn { font-size:11px; font-weight:700; padding:5px 12px; border-radius:12px; border:none; background:var(--mnn-red); color:#fff; cursor:pointer; flex-shrink:0; transition:opacity .15s; }
    .mission-claim-btn:disabled { opacity:.5; cursor:not-allowed; }
    .mission-claimed { font-size:11px; color:#6ee7b7; font-weight:700; flex-shrink:0; display:inline-flex; align-items:center; gap:3px; }
    .mission-claimed svg { width:11px; height:11px; }

    /* ── Roadmap Page ─────────────────────────── */
    #page-roadmap { flex-direction:column; gap:16px; padding:18px 16px 90px; overflow-y:auto; }
    #page-roadmap.active { display:flex; }
    .roadmap-header { display:flex; flex-direction:column; gap:4px; margin-bottom:18px; }
    .roadmap-progress-card {
      position:relative; overflow:hidden;
      margin-top:12px; background:var(--bg-card); border:1px solid var(--border); border-radius:18px; padding:16px 18px;
      box-shadow:var(--shadow-card);
    }
    .roadmap-progress-card::before {
      content:''; position:absolute; top:-10px; right:-10px; width:70%; height:120%;
      background-image:url("assets/ornament-light.jpeg");
      background-size:cover; background-position:70% 40%;
      -webkit-mask-image:linear-gradient(to left, rgba(0,0,0,.85) 0%, rgba(0,0,0,0) 75%);
      mask-image:linear-gradient(to left, rgba(0,0,0,.85) 0%, rgba(0,0,0,0) 75%);
      opacity:.8; pointer-events:none;
    }
    [data-theme="dark"] .roadmap-progress-card::before { background-image:url("assets/ornament-dark.jpeg"); }
    .roadmap-progress-card-row { position:relative; z-index:1; display:flex; flex-direction:column; gap:2px; margin-bottom:10px; }
    .roadmap-progress-card-label { font-size:11px; font-weight:700; color:var(--text-muted); letter-spacing:.06em; text-transform:uppercase; }
    .roadmap-progress-card-pct { font-size:28px; font-weight:800; color:var(--text-primary); line-height:1; }
    .roadmap-progress-bar { position:relative; z-index:1; height:6px; background:var(--border-strong); border-radius:99px; overflow:hidden; margin-top:0; max-width:60%; }
    .roadmap-progress-fill { height:100%; background:var(--mnn-red); border-radius:99px; transition:width .6s cubic-bezier(.4,0,.2,1); }

    .roadmap-steps { display:flex; flex-direction:column; gap:0; }
    .roadmap-step { display:flex; align-items:flex-start; gap:14px; position:relative; padding-bottom:18px; }
    .roadmap-step:last-child { padding-bottom:0; }
    .roadmap-step-connector { position:absolute; left:19px; top:40px; width:2px; height:calc(100% - 20px); background:var(--border-strong); }
    .roadmap-step.done .roadmap-step-connector { background:var(--mnn-red); }
    .roadmap-step-dot {
      width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center;
      font-size:17px; flex-shrink:0; border:2px solid var(--border-strong); background:var(--bg-card);
      position:relative; z-index:1; transition:all .3s; color:var(--text-secondary);
    }
    .roadmap-step-dot svg { width:18px; height:18px; }
    .roadmap-step.done .roadmap-step-dot { background:var(--mnn-red); border-color:var(--mnn-red); color:#fff; }
    .roadmap-step.active-step .roadmap-step-dot { background:rgba(var(--mnn-red-rgb),.12); border-color:var(--mnn-red); color:var(--mnn-red); }
    .roadmap-step-body {
      flex:1; padding:12px 14px; margin-top:-2px;
      background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
      box-shadow:var(--shadow-card);
    }
    .roadmap-step.active-step .roadmap-step-body { border-color:rgba(var(--mnn-red-rgb),.35); }
    .roadmap-step-num { font-size:10px; font-weight:700; color:var(--text-muted); letter-spacing:.1em; text-transform:uppercase; }
    .roadmap-step-title { font-size:15px; font-weight:700; color:var(--text-primary); margin-top:2px; }
    .roadmap-step.done .roadmap-step-title { color:var(--mnn-red); }
    .roadmap-step-desc { font-size:12px; color:var(--text-muted); margin-top:3px; }
    .roadmap-step-pct { font-size:11px; font-weight:700; color:var(--mnn-red); margin-top:8px; display:flex; align-items:center; gap:6px; }
    .roadmap-step-pct-bar { flex:1; height:4px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .roadmap-step-pct-fill { height:100%; background:var(--mnn-red); border-radius:99px; }
    .roadmap-cta-btn { width:100%; padding:13px; border-radius:18px; border:none; background:var(--accent-primary); color:var(--text-inverse); font-size:13px; font-weight:700; cursor:pointer; font-family:'DM Sans',sans-serif; }

    /* ── Statistics Page ──────────────────────── */
    #page-stats { flex-direction:column; gap:16px; padding:18px 16px 90px; overflow-y:auto; }
    #page-stats.active { display:flex; }
    .stats-cards-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
    .stat-card { background:var(--bg-card); border:1px solid var(--border); border-radius:18px; padding:14px; display:flex; flex-direction:column; gap:4px; }
    .stat-card-icon { font-size:22px; }
    .stat-card-val { font-size:22px; font-weight:800; color:var(--text-primary); line-height:1; margin-top:4px; }
    .stat-card-label { font-size:11px; color:var(--text-muted); font-weight:500; }
    .stat-section-title { font-size:11px; font-weight:700; color:var(--text-muted); letter-spacing:.08em; text-transform:uppercase; margin-bottom:10px; }

    /* ── Study Calendar (Heatmap) ─────────────── */
    .calendar-wrap { background:var(--bg-card); border:1px solid var(--border); border-radius:20px; padding:14px; overflow:hidden; }
    .calendar-month-label { font-size:12px; font-weight:700; color:var(--text-secondary); margin-bottom:10px; }
    .calendar-grid { display:flex; gap:3px; overflow-x:auto; padding-bottom:4px; }
    .calendar-week { display:flex; flex-direction:column; gap:3px; }
    .calendar-day { width:13px; height:13px; border-radius:3px; background:var(--border-strong); flex-shrink:0; cursor:default; transition:transform .1s; }
    .calendar-day:hover { transform:scale(1.4); }
    .calendar-day[data-level="1"] { background:rgba(var(--accent-t1-rgb),.3); }
    .calendar-day[data-level="2"] { background:rgba(var(--accent-t1-rgb),.55); }
    .calendar-day[data-level="3"] { background:var(--accent-primary); }
    .calendar-legend { display:flex; align-items:center; gap:6px; margin-top:10px; justify-content:flex-end; }
    .calendar-legend-label { font-size:10px; color:var(--text-muted); }
    .calendar-legend-swatch { width:10px; height:10px; border-radius:2px; }

    /* ── Smart Review Page ────────────────────── */
    #page-review { flex-direction:column; gap:16px; padding:18px 16px 90px; overflow-y:auto; }
    #page-review.active { display:flex; }
    .review-empty { text-align:center; padding:40px 20px; }
    .review-empty-icon { font-size:48px; margin-bottom:12px; }
    .review-empty-text { font-size:14px; color:var(--text-muted); }
    .review-item { background:var(--bg-card); border:1px solid var(--border); border-radius:18px; padding:14px 16px; display:flex; align-items:center; gap:12px; cursor:pointer; transition:background .15s; }
    .review-item:active { background:var(--bg-card-hover); }
    .review-item-jp { font-size:18px; font-weight:700; font-family:'Noto Sans JP',sans-serif; color:var(--text-primary); }
    .review-item-kana { font-size:12px; color:var(--text-muted); margin-top:1px; }
    .review-item-arti { font-size:13px; color:var(--text-secondary); flex:1; }
    .review-item-difficulty { font-size:10px; font-weight:700; padding:3px 8px; border-radius:10px; flex-shrink:0; }
    .review-diff-hard { background:rgba(248,113,113,.15); color:#f87171; border:1px solid rgba(248,113,113,.3); }
    .review-diff-medium { background:rgba(251,146,60,.12); color:#fb923c; border:1px solid rgba(251,146,60,.25); }
    .review-badge { display:inline-flex; align-items:center; gap:4px; padding:3px 10px; border-radius:99px; font-size:10px; font-weight:700; }
    .review-badge-count { background:rgba(248,113,113,.15); color:#f87171; border:1px solid rgba(248,113,113,.25); }

    /* ── JLPT Mode ────────────────────────────── */
    .jlpt-filter-wrap { display:flex; gap:6px; margin-top:8px; }
    .jlpt-chip { padding:5px 12px; border-radius:99px; border:1px solid var(--border-strong); background:transparent; color:var(--text-muted); font-size:11px; font-weight:700; cursor:pointer; transition:all .15s; font-family:'DM Sans',sans-serif; white-space:nowrap; }
    .jlpt-chip.active { background:rgba(var(--accent-t1-rgb),.15); border-color:var(--accent-primary); color:var(--accent-primary); }
    .jlpt-progress-wrap { background:var(--bg-card); border:1px solid var(--border); border-radius:18px; padding:12px 14px; margin-top:10px; }
    .jlpt-progress-row { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
    .jlpt-progress-row:last-child { margin-bottom:0; }
    .jlpt-level-badge { font-size:10px; font-weight:800; padding:3px 8px; border-radius:10px; min-width:34px; text-align:center; flex-shrink:0; }
    .jlpt-n5 { background:rgba(52,211,153,.15); color:#34d399; border:1px solid rgba(52,211,153,.3); }
    .jlpt-n4 { background:rgba(74,158,255,.15); color:#4a9eff; border:1px solid rgba(74,158,255,.3); }
    .jlpt-n3 { background:rgba(251,146,60,.13); color:#fb923c; border:1px solid rgba(251,146,60,.28); }
    .jlpt-progress-bar-w { flex:1; height:6px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
    .jlpt-progress-bar-f { height:100%; border-radius:99px; transition:width .6s ease; }
    .jlpt-progress-count { font-size:11px; color:var(--text-muted); font-weight:600; flex-shrink:0; min-width:60px; text-align:right; }

    /* ── Animations ───────────────────────────── */
    @keyframes v25LevelUp {
      0%   { transform:scale(0.5) translateY(20px); opacity:0; }
      60%  { transform:scale(1.1) translateY(-5px); opacity:1; }
      80%  { transform:scale(0.97) translateY(2px); }
      100% { transform:scale(1) translateY(0); opacity:1; }
    }
    @keyframes v25FadeOut {
      0%  { opacity:1; transform:translateY(0); }
      100%{ opacity:0; transform:translateY(-20px); }
    }
    @keyframes v25Confetti {
      0%  { transform:rotate(0deg) scale(1); opacity:1; }
      100%{ transform:rotate(720deg) scale(0); opacity:0; }
    }
    @keyframes v25PulseRing {
      0%   { transform:scale(1); opacity:.7; }
      70%  { transform:scale(2.2); opacity:0; }
      100% { transform:scale(2.2); opacity:0; }
    }
    .v25-levelup-overlay {
      position:fixed; inset:0; z-index:9999; pointer-events:none;
      display:flex; align-items:center; justify-content:center;
    }
    .v25-levelup-card {
      background:linear-gradient(135deg,rgba(var(--accent-t1-rgb),.95),rgba(129,140,248,.95));
      color:#fff; border-radius:28px; padding:28px 36px; text-align:center;
      box-shadow:0 20px 60px rgba(0,0,0,.5);
      animation:v25LevelUp .6s cubic-bezier(.22,.68,0,1.3) forwards;
    }
    .v25-levelup-title { font-size:13px; font-weight:700; opacity:.9; letter-spacing:.08em; text-transform:uppercase; }
    .v25-levelup-num { font-size:56px; font-weight:900; line-height:1; margin:6px 0; }
    .v25-levelup-sub { font-size:14px; opacity:.85; }
    .v25-pulse-ring {
      position:absolute; width:40px; height:40px; border-radius:50%;
      border:2px solid var(--accent-primary);
      animation:v25PulseRing 1.5s ease-out infinite;
    }
    @keyframes v25RoadmapNode {
      0%  { transform:scale(0); opacity:0; }
      70% { transform:scale(1.2); }
      100%{ transform:scale(1); opacity:1; }
    }
    .roadmap-step-dot.animate { animation:v25RoadmapNode .5s ease forwards; }


/* ── SPLASH CSS ─────────────────────────────────────── */

  /* ── SPLASH BASE ───────────────────────────────────── */
  #splash {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0;
    opacity: 0;
    animation: splashFadeIn .55s cubic-bezier(.4,0,.2,1) .05s forwards;
  }

  /* Light theme */
  #splash.splash-light {
    background: #fafafa;
  }
  #splash.splash-light .splash-title {
    color: #0a0a0a;
  }
  #splash.splash-light .splash-sub {
    color: rgba(0,0,0,.35);
  }
  /* light logo shown via JS */
  #splash.splash-light .splash-spinner-track {
    background: rgba(0,0,0,.1);
  }
  #splash.splash-light .splash-spinner-bar {
    background: #111111;
  }
  #splash.splash-light .splash-brand {
    color: rgba(0,0,0,.2);
    border-top-color: rgba(0,0,0,.07);
  }

  /* Logo area */
  .splash-logo-wrap {
    position: relative;
    width: 110px;
    height: 110px;
    margin-bottom: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .splash-logo-img {
    width: 110px;
    height: 110px;
    object-fit: contain;
    display: block;
    /* no border-radius, no background — pure logo */
  }
  .splash-logo-img.hidden { display: none; }

  /* Title */
  .splash-title {
    font-family: 'Noto Sans JP', 'DM Sans', sans-serif;
    font-size: 22px;
    font-weight: 800;
    letter-spacing: .04em;
    margin-bottom: 6px;
    text-align: center;
  }
  .splash-sub {
    font-family: 'DM Sans', sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .08em;
    text-transform: uppercase;
    text-align: center;
    margin-bottom: 40px;
  }

  /* Spinner */
  .splash-spinner-wrap {
    width: 48px;
    height: 3px;
    border-radius: 99px;
    overflow: hidden;
    margin-bottom: 0;
  }
  .splash-spinner-track {
    width: 100%;
    height: 100%;
    border-radius: 99px;
    position: relative;
    overflow: hidden;
  }
  .splash-spinner-bar {
    position: absolute;
    left: -70%;
    top: 0;
    width: 70%;
    height: 100%;
    border-radius: 99px;
    animation: splashSweep 1.4s cubic-bezier(.4,0,.6,1) infinite;
  }

  /* Brand footer */
  .splash-brand {
    position: absolute;
    bottom: 36px;
    left: 50%;
    transform: translateX(-50%);
    white-space: nowrap;
    font-family: 'DM Sans', sans-serif;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    padding-top: 14px;
    border-top: 1px solid;
    text-align: center;
  }

  /* Fade out helper */
  #splash.splash-exit {
    transition: opacity .38s cubic-bezier(.4,0,1,1);
    opacity: 0 !important;
  }

  /* Keyframes */
  @keyframes splashFadeIn {
    from { opacity: 0; transform: scale(.97); }
    to   { opacity: 1; transform: scale(1);   }
  }
  @keyframes splashSweep {
    0%   { left: -70%;  }
    100% { left: 110%;  }
  }

/* ═══════════════════════════════════════════════════
   16. SIMULASI UJIAN — JFT Basic Full Simulation
   (Integration layer only — exam_engine_v9.js membawa
   CSS-nya sendiri untuk konten di dalam #mnn-exam-root)
═══════════════════════════════════════════════════ */
:root {
  --exam-green:       #16a34a;
  --exam-green-soft:  rgba(22,163,74,.12);
  --exam-green-soft2: rgba(22,163,74,.20);
  --roadmap-blue:       #2563eb;
  --roadmap-blue-soft:  rgba(var(--accent-t3-rgb),.12);
  --roadmap-blue-soft2: rgba(var(--accent-t3-rgb),.22);
}

/* ── Dashboard menu card ── */
.exam-sim-menu-card {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 16px 16px 14px;
  border-radius: 20px;
  border: 1px solid var(--border);
  background: var(--bg-card);
  box-shadow: var(--shadow-card);
  cursor: pointer;
  text-align: left;
  font-family: 'DM Sans', sans-serif;
  transition: transform .12s ease, background .2s ease;
}
.exam-sim-menu-card:active { transform: scale(.98); }
.exam-sim-badge {
  position: absolute; top: -9px; left: 14px;
  background: var(--mnn-red); color: #fff;
  font-size: 9.5px; font-weight: 800; letter-spacing: .03em;
  padding: 4px 9px; border-radius: 99px;
  box-shadow: 0 2px 6px rgba(0,0,0,.15);
}
.exam-sim-menu-row { display: flex; align-items: center; gap: 10px 12px; flex-wrap: wrap; }
.exam-sim-menu-icon {
  flex-shrink: 0;
  width: 44px; height: 44px;
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px;
  background: rgba(var(--mnn-red-rgb),.08);
  border: 1px solid rgba(var(--mnn-red-rgb),.15);
}
.exam-sim-menu-text { flex: 1 1 140px; min-width: 0; }
.exam-sim-menu-title { font-size: 14px; font-weight: 800; color: var(--text-primary); letter-spacing: -.1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.exam-sim-menu-sub { font-size: 11px; color: var(--text-muted); margin-top: 2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.exam-sim-menu-cta {
  flex-shrink: 0; margin-left: auto; font-size: 12px; font-weight: 700; color: #fff;
  background: var(--mnn-red); padding: 10px 14px; border-radius: 13px; white-space: nowrap;
}
.exam-sim-meta-row {
  display: flex; flex-wrap: wrap; gap: 5px 10px;
  padding-top: 10px; border-top: 1px solid var(--border);
  font-size: 10.5px; color: var(--text-muted); font-weight: 500;
}
.exam-sim-meta-row span { white-space: nowrap; }
.exam-sim-meta-row b { color: var(--text-primary); font-weight: 700; }

/* ── Roadmap Progress mini card (dashboard) ── */
.roadmap-menu-card {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-radius: 20px;
  border: 1px solid var(--border);
  background: var(--bg-card);
  box-shadow: var(--shadow-card);
  cursor: pointer;
  text-align: left;
  font-family: 'DM Sans', sans-serif;
  transition: transform .12s ease, background .2s ease;
}
.roadmap-menu-card:active { transform: scale(.98); }
.roadmap-menu-icon {
  flex-shrink: 0;
  width: 44px; height: 44px;
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px;
  background: rgba(var(--mnn-navy-fg-rgb),.1);
  border: 1px solid rgba(var(--mnn-navy-fg-rgb),.2);
  color: var(--mnn-navy-fg);
}
.roadmap-menu-text { flex: 1; min-width: 0; }
.roadmap-menu-title { font-size: 14px; font-weight: 800; color: var(--text-primary); letter-spacing: -.1px; }
.roadmap-menu-sub2 { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
.roadmap-menu-sub { font-size: 11px; font-weight: 700; color: var(--mnn-navy-fg); margin-top: 3px; }
.roadmap-menu-cta {
  flex-shrink: 0; font-size: 12px; font-weight: 700; color: var(--mnn-navy-fg);
  background: var(--bg-elevated); padding: 10px 14px; border-radius: 13px; white-space: nowrap;
  border: 1px solid rgba(var(--mnn-navy-fg-rgb),.3);
}


/* ── Simulasi Ujian hub page ── */
.exam-sim-card {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 22px;
  padding: 18px;
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.exam-sim-card-header { display: flex; align-items: center; gap: 12px; }
.exam-sim-card-icon {
  flex-shrink: 0;
  width: 48px; height: 48px;
  border-radius: 18px;
  display: flex; align-items: center; justify-content: center;
  font-size: 24px;
  background: rgba(var(--mnn-red-rgb),.10);
}
.exam-sim-card-heading { flex: 1; min-width: 0; }
.exam-sim-card-title { font-size: 16px; font-weight: 800; color: var(--text-primary); letter-spacing: -.1px; }
.exam-sim-card-sub { font-size: 12px; color: var(--text-muted); margin-top: 2px; line-height: 1.4; }

.exam-sim-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.exam-sim-chip {
  font-size: 12px; font-weight: 700;
  padding: 6px 12px;
  border-radius: 99px;
  background: rgba(var(--mnn-red-rgb),.08);
  color: var(--mnn-red);
  border: 1px solid rgba(var(--mnn-red-rgb),.18);
  white-space: nowrap;
}

.exam-sim-card-hint {
  font-size: 12px; color: var(--text-secondary); line-height: 1.6;
  background: rgba(var(--mnn-red-rgb),.06);
  border: 1px solid rgba(var(--mnn-red-rgb),.14);
  border-radius: 16px;
  padding: 10px 12px;
}

.exam-sim-btn {
  width: 100%;
  padding: 14px;
  border: none;
  border-radius: 18px;
  background: var(--mnn-red);
  color: #ffffff;
  font-size: 14px;
  font-weight: 800;
  font-family: 'DM Sans', sans-serif;
  letter-spacing: -.1px;
  cursor: pointer;
  transition: filter .15s ease, transform .12s ease;
  box-shadow: 0 2px 6px rgba(0,0,0,.15);
}
.exam-sim-btn:active { transform: scale(.98); filter: brightness(.96); }

/* ── JFT exam embedded page (full-screen takeover) ──
   exam_engine_v9.js sets #mnn-exam-root { height:100% } and relies on
   a bounded-height ancestor for its internal flex/scroll layout
   (identical to exam_demo.html's html/body height:100% + overflow:hidden).
   We reproduce that here so the simulator's existing layout/scroll
   behaviour is preserved exactly. */
#page-jft-exam.active {
  position: fixed;
  inset: 0;
  z-index: 500;
  height: 100dvh;
  margin: 0;
  padding: 0;
  gap: 0;
  background: var(--bg-base);
}
.jft-exam-topbar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 10px;
  height: 44px;
  padding: env(safe-area-inset-top) 14px 0;
  background: var(--bg-elevated);
  border-bottom: 1px solid var(--border-strong);
}
.jft-exam-back {
  font-family: 'DM Sans', sans-serif;
  font-size: 13px;
  font-weight: 700;
  color: var(--mnn-red);
  background: transparent;
  border: none;
  padding: 8px 4px;
  margin: 0 -4px;
  cursor: pointer;
  flex-shrink: 0;
}
.jft-exam-topbar-title {
  font-size: 12px;
  font-weight: 700;
  color: var(--text-muted);
  letter-spacing: .04em;
  margin-left: auto;
}
.jft-exam-container {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

/* ── Loading / error states (before engine takes over) ── */
.jft-sim-loading, .jft-sim-error {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  gap: 14px;
  padding: 24px;
  font-family: 'DM Sans', sans-serif;
  color: var(--text-primary);
}
.jft-sim-loading p, .jft-sim-error p { font-size: 13px; color: var(--text-muted); line-height: 1.6; }
.jft-sim-spinner {
  width: 36px; height: 36px;
  border: 3px solid var(--border-strong);
  border-top-color: var(--exam-green);
  border-radius: 50%;
  animation: jft-sim-spin .7s linear infinite;
}
@keyframes jft-sim-spin { to { transform: rotate(360deg); } }
.jft-sim-error-icon { font-size: 36px; }
.jft-sim-error h3 { font-size: 16px; font-weight: 800; color: var(--text-primary); }
.jft-sim-error-detail { font-size: 11px; color: var(--text-muted); opacity: .7; word-break: break-word; max-width: 280px; }

/* ═══════════════════════════════════════════════════
   KANA TRAINER — v3.9 REDESIGN
═══════════════════════════════════════════════════ */
/* Progress minggu ini */
.kana-weekly-card {
  display:flex; align-items:center; justify-content:space-between; gap:14px;
  background:var(--bg-card); border:1px solid var(--border); border-radius:22px;
  padding:18px 18px 16px; box-shadow:var(--shadow-card);
}
.kana-weekly-left { flex:1; min-width:0; }
.kana-weekly-pct { font-size:30px; font-weight:800; color:var(--accent-kana); line-height:1; }
.kana-weekly-sub { font-size:11.5px; color:var(--text-muted); font-weight:500; margin-top:4px; }
.kana-weekly-track { height:7px; background:var(--border-strong); border-radius:99px; overflow:hidden; margin-top:10px; }
.kana-weekly-fill { height:100%; background:var(--accent-kana); border-radius:99px; transition:width .6s ease; }
.kana-weekly-bars { display:flex; align-items:flex-end; gap:5px; flex-shrink:0; height:52px; }
.kana-weekly-bar-col { display:flex; flex-direction:column; align-items:center; justify-content:flex-end; gap:4px; width:12px; height:100%; }
.kana-weekly-bar { width:100%; min-height:4px; border-radius:99px; background:var(--border-strong); transition:height .4s ease; }
.kana-weekly-bar.is-today { background:var(--accent-kana); }
.kana-weekly-bar-label { font-size:9px; font-weight:600; color:var(--text-muted); }
.kana-weekly-bar-label.is-today { color:var(--accent-kana); font-weight:800; }

/* Metric cards: streak / hari ini / total kartu */
.kana-metric-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.kana-metric-card {
  background:var(--bg-card); border:1px solid var(--border); border-radius:18px;
  padding:12px; box-shadow:var(--shadow-card); display:flex; flex-direction:column; gap:2px;
}
.kana-metric-top { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.kana-metric-icon {
  width:32px; height:32px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:15px; background:rgba(var(--accent-t1-rgb),.14);
}
.kmc-green  .kana-metric-icon { background:rgba(52,211,153,.16); color:#16a34a; }
.kmc-orange .kana-metric-icon { background:rgba(251,146,60,.16); color:#c2660a; }
.kmc-blue   .kana-metric-icon { background:rgba(74,158,255,.16); color:#2563eb; }
.kana-metric-badge {
  font-size:9.5px; font-weight:800; color:#16a34a; background:rgba(52,211,153,.16);
  padding:2px 7px; border-radius:99px; letter-spacing:.02em;
}
.kana-metric-val { font-size:22px; font-weight:800; color:var(--text-primary); line-height:1; }
.kana-metric-label { font-size:10.5px; color:var(--text-muted); font-weight:600; margin-top:3px; }

/* Mode belajar — card style dgn ikon + chevron */
.kana-mode-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.kana-mode-card {
  display:flex; align-items:center; gap:10px; width:100%;
  background:var(--bg-card); border:1px solid var(--border); border-radius:18px;
  padding:13px 14px; cursor:pointer; box-shadow:var(--shadow-card);
  font-family:'DM Sans',sans-serif; transition:transform .15s ease, border-color .15s ease;
}
.kana-mode-card:active { transform:scale(.97); }
.kana-mode-card-full { grid-column:1/-1; }
.kana-mode-icon {
  width:34px; height:34px; border-radius:11px; flex-shrink:0; font-size:16px;
  display:flex; align-items:center; justify-content:center; color:var(--kmc, var(--accent-primary));
  background:color-mix(in srgb, var(--kmc, var(--accent-primary)) 16%, transparent);
}
.kana-mode-label { flex:1; text-align:left; font-size:13px; font-weight:700; color:var(--text-primary); }
.kana-mode-arrow { color:var(--text-muted); font-size:16px; flex-shrink:0; }

/* Filter aksara — chip row scrollable */
.kana-filter-chip-row { display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; padding-bottom:2px; }
.kana-filter-chip-row::-webkit-scrollbar { display:none; }
.kana-filter-chip {
  flex-shrink:0; padding:8px 16px; border-radius:99px; border:1px solid var(--border-strong);
  background:var(--bg-card); color:var(--text-secondary); font-size:12.5px; font-weight:700;
  font-family:'DM Sans',sans-serif; cursor:pointer; transition:all .18s ease; white-space:nowrap;
}
.kana-filter-chip.active { border-color:var(--accent-kana); background:rgba(224,60,76,.14); color:var(--accent-kana); }

/* Progress per kategori */
.kana-cat-progress-list { display:flex; flex-direction:column; gap:8px; }
.kana-cat-row {
  display:flex; align-items:center; gap:12px;
  background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
  padding:11px 14px; box-shadow:var(--shadow-card);
}
.kana-cat-icon {
  width:34px; height:34px; border-radius:50%; flex-shrink:0; font-size:15px;
  font-family:'Noto Sans JP',sans-serif; font-weight:700;
  display:flex; align-items:center; justify-content:center;
}
.kana-cat-body { flex:1; min-width:0; }
.kana-cat-row-top { display:flex; justify-content:space-between; font-size:12px; font-weight:700; color:var(--text-primary); margin-bottom:5px; }
.kana-cat-track { height:6px; background:var(--border-strong); border-radius:99px; overflow:hidden; }
.kana-cat-fill { height:100%; border-radius:99px; transition:width .6s ease; }
.kana-cat-frac { font-size:11px; color:var(--text-muted); font-weight:600; flex-shrink:0; }

/* Misi hari ini */
.kana-mission-card {
  background:var(--bg-card); border:1px solid var(--border); border-radius:20px;
  padding:16px; box-shadow:var(--shadow-card);
}
.kana-mission-head { margin-bottom:10px; }
.kana-mission-title { font-size:13.5px; font-weight:800; color:var(--text-primary); }
.kana-mission-list { display:flex; flex-direction:column; gap:9px; margin-bottom:12px; }
.kana-mission-item { display:flex; align-items:center; gap:10px; }
.kana-mission-check {
  width:19px; height:19px; border-radius:50%; border:2px solid var(--border-strong); flex-shrink:0;
  display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:800; color:#fff;
}
.kana-mission-item.is-done .kana-mission-check { background:var(--accent-verb); border-color:var(--accent-verb); }
.kana-mission-text { flex:1; font-size:12.5px; color:var(--text-secondary); }
.kana-mission-item.is-done .kana-mission-text { color:var(--text-primary); text-decoration:line-through; text-decoration-color:var(--border-strong); }
.kana-mission-count { font-size:11px; font-weight:700; color:var(--text-muted); }
.kana-mission-reward {
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding-top:12px; border-top:1px solid var(--border);
  font-size:11.5px; color:var(--text-muted); font-weight:600;
}
.kana-mission-claim {
  padding:8px 16px; border-radius:99px; border:none; cursor:pointer;
  background:linear-gradient(135deg,#fbbf24,#f59e0b); color:#3a2a00; font-size:12px; font-weight:800;
  font-family:'DM Sans',sans-serif; box-shadow:0 3px 10px rgba(245,158,11,.3);
}
.kana-mission-claim:disabled { opacity:.45; cursor:default; box-shadow:none; background:var(--border-strong); color:var(--text-muted); }

/* Kartu sulit banner */
.kana-difficult-banner {
  display:flex; align-items:center; gap:12px;
  background:rgba(248,113,113,.08); border:1px solid rgba(248,113,113,.28); border-radius:18px;
  padding:14px 16px;
}
.kana-difficult-icon { font-size:22px; flex-shrink:0; }
.kana-difficult-body { flex:1; min-width:0; }
.kana-difficult-title { font-size:13px; font-weight:800; color:var(--text-primary); }
.kana-difficult-sub { font-size:11px; color:var(--text-muted); margin-top:1px; }
.kana-difficult-btn {
  flex-shrink:0; padding:9px 14px; border-radius:12px; border:none; cursor:pointer;
  background:var(--accent-danger); color:#fff; font-size:11.5px; font-weight:800;
  font-family:'DM Sans',sans-serif; white-space:nowrap;
}

/* Favorit star di flashcard */
.kana-fav-btn {
  position:absolute; top:12px; left:12px; border:none; background:transparent; cursor:pointer;
  font-size:22px; color:var(--border-strong); line-height:1; padding:2px;
}
.kana-fav-btn.is-fav { color:#f59e0b; }

/* ═══════════════════════════════════════════════════
   SETTINGS — v3.9 REDESIGN
═══════════════════════════════════════════════════ */
.icon-indigo { background:rgba(129,140,248,.16); }
.icon-rainbow { background:linear-gradient(135deg,rgba(244,114,182,.22),rgba(96,165,250,.22),rgba(52,211,153,.22)); }
.icon-red-jp, .icon-blue-jp {
  font-family:'Noto Sans JP',sans-serif; font-weight:700; font-size:15px;
}
.icon-red-jp { background:rgba(224,60,76,.14); color:var(--accent-kana); }
.icon-blue-jp { background:rgba(74,158,255,.14); color:#4a9eff; }

.settings-item-expandable { cursor:pointer; }
.settings-chevron { color:var(--text-muted); font-size:17px; flex-shrink:0; transition:transform .2s ease; }
#accent-theme-switch.accent-theme-switch {
  display:flex; gap:6px; justify-content:center;
  max-height:0; opacity:0; overflow:hidden; padding:0 18px;
  border-bottom:1px solid var(--border);
  background:var(--bg-elevated);
  transition:max-height .25s ease, opacity .2s ease, padding .25s ease;
}
#accent-theme-switch.accent-theme-switch.is-open { max-height:60px; opacity:1; padding:10px 18px; }
#accent-theme-switch .accent-theme-opt { width:38px; height:38px; }

.about-version-badge {
  flex-shrink:0; font-size:10.5px; font-weight:800; color:var(--accent-primary);
  background:rgba(var(--accent-t1-rgb),.14); border-radius:99px; padding:4px 11px;
  white-space:nowrap;
}

/* ═══════════════════════════════════════════════════
   KANA TRAINER — v3.9.1 polish (hero ornament, line icons, wave cards)
═══════════════════════════════════════════════════ */
.kana-hero {
  position:relative; padding:16px 18px; min-height:108px; overflow:hidden;
  border-radius:20px; border:1px solid var(--border); box-shadow:var(--shadow-card);
  background:var(--bg-base); margin-bottom:12px;
}
.kana-hero-text { position:relative; z-index:1; max-width:62%; }
.kana-hero-ornament {
  position:absolute; top:0; right:-18px; bottom:0; width:60%;
  background-image:
    linear-gradient(to right, var(--bg-base) 0%, rgba(0,0,0,0) 48%),
    url("assets/ornament-light.jpeg");
  background-size: 100% 100%, cover;
  background-position: center, 72% 40%;
  background-repeat: no-repeat, no-repeat;
  -webkit-mask-image:linear-gradient(to right, rgba(0,0,0,0) 0%, rgba(0,0,0,.4) 25%, rgba(0,0,0,1) 55%, rgba(0,0,0,1) 100%);
  mask-image:linear-gradient(to right, rgba(0,0,0,0) 0%, rgba(0,0,0,.4) 25%, rgba(0,0,0,1) 55%, rgba(0,0,0,1) 100%);
  pointer-events:none;
}
[data-theme="dark"] .kana-hero-ornament {
  background-image:
    linear-gradient(to right, var(--bg-base) 0%, rgba(0,0,0,0) 48%),
    url("assets/ornament-dark.jpeg");
}

/* Line-style icons (Feather-esque) shared by mode cards & metric cards */
.kana-mode-icon svg { width:18px; height:18px; }
.kana-metric-icon svg { width:17px; height:17px; }

/* Wave decoration + gentle drift animation, matching home dashboard stat cards */
.kana-metric-card { position:relative; overflow:hidden; padding-bottom:20px; }
.kana-metric-card::after {
  content:''; position:absolute; left:0; right:0; bottom:0; height:14px;
  background:var(--kmc-wave, var(--mnn-navy)); opacity:.85;
  -webkit-mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 20' preserveAspectRatio='none'><path d='M0 9 Q 12.5 1 25 9 T 50 9 T 75 9 T 100 9 V20 H0 Z'/></svg>");
  mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 20' preserveAspectRatio='none'><path d='M0 9 Q 12.5 1 25 9 T 50 9 T 75 9 T 100 9 V20 H0 Z'/></svg>");
  -webkit-mask-size:140% 100%; mask-size:140% 100%;
  -webkit-mask-repeat:repeat-x; mask-repeat:repeat-x;
  animation: kanaWaveDrift 5s ease-in-out infinite;
}
.kmc-green  { --kmc-wave:#34d399; }
.kmc-orange { --kmc-wave:#fb923c; }
.kmc-blue   { --kmc-wave:#4a9eff; }
@keyframes kanaWaveDrift { 0%{ -webkit-mask-position:0% 0; mask-position:0% 0; } 100%{ -webkit-mask-position:-40% 0; mask-position:-40% 0; } }

/* ═══════════════════════════════════════════════════
   SETTINGS — v3.9.1 polish (unify with redesign: ornament + red/navy accent)
═══════════════════════════════════════════════════ */
.settings-hero {
  position:relative; padding:16px 18px; min-height:108px; overflow:hidden;
  border-radius:20px; border:1px solid var(--border); box-shadow:var(--shadow-card);
  background:var(--bg-base); margin-bottom:12px;
}
.settings-hero-text { position:relative; z-index:1; max-width:64%; }
.settings-hero-ornament {
  position:absolute; top:0; right:-18px; bottom:0; width:52%;
  background-image:
    linear-gradient(to right, var(--bg-base) 0%, rgba(0,0,0,0) 48%),
    url("assets/ornament-light.jpeg");
  background-size: 100% 100%, cover;
  background-position: center, 78% 35%;
  background-repeat: no-repeat, no-repeat;
  -webkit-mask-image:linear-gradient(to right, rgba(0,0,0,0) 0%, rgba(0,0,0,.35) 30%, rgba(0,0,0,1) 60%, rgba(0,0,0,1) 100%);
  mask-image:linear-gradient(to right, rgba(0,0,0,0) 0%, rgba(0,0,0,.35) 30%, rgba(0,0,0,1) 60%, rgba(0,0,0,1) 100%);
  opacity:.85; pointer-events:none;
}
[data-theme="dark"] .settings-hero-ornament {
  background-image:
    linear-gradient(to right, var(--bg-base) 0%, rgba(0,0,0,0) 48%),
    url("assets/ornament-dark.jpeg");
}

/* Outline merah solid menyatukan settings-section dgn tema aplikasi */
.settings-section {
  position:relative;
  border:1.5px solid var(--mnn-red) !important;
}

.about-card {
  position:relative; overflow:hidden;
  border:1.5px solid var(--mnn-red) !important;
}
.about-card::after {
  content:''; position:absolute; top:-10px; right:-10px; width:88px; height:88px;
  background-image:url("assets/ornament-light.jpeg");
  background-size:cover; background-position:70% 30%;
  -webkit-mask-image:radial-gradient(circle at 70% 30%, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 72%);
  mask-image:radial-gradient(circle at 70% 30%, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 72%);
  opacity:.5; pointer-events:none;
}
[data-theme="dark"] .about-card::after { background-image:url("assets/ornament-dark.jpeg"); }

/* Rekomendasi aplikasi lainnya */
.recommend-apps-card {
  background:var(--bg-card); border:1.5px solid var(--mnn-red); border-radius:22px;
  padding:16px; box-shadow:var(--shadow-card); position:relative; overflow:hidden;
}
.recommend-apps-title { font-size:13px; font-weight:800; color:var(--text-primary); margin-bottom:2px; }
.recommend-apps-sub { font-size:11px; color:var(--text-muted); margin-bottom:12px; }
.recommend-app-item {
  display:flex; align-items:center; gap:12px; text-decoration:none;
  padding:11px 10px; border-radius:14px; border:1px solid var(--border);
  margin-bottom:8px; transition:background .15s ease, border-color .15s ease;
}
.recommend-app-item:last-of-type { margin-bottom:12px; }
.recommend-app-item:active { background:var(--bg-elevated); }
.recommend-app-icon {
  width:40px; height:40px; border-radius:12px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  overflow:hidden; background:var(--bg-elevated); border:1px solid var(--border);
}
.recommend-app-icon img { width:100%; height:100%; object-fit:cover; }
.recommend-app-body { flex:1; min-width:0; }
.recommend-app-name { font-size:13px; font-weight:700; color:var(--text-primary); display:flex; align-items:center; gap:6px; }
.recommend-app-desc { font-size:11px; color:var(--text-muted); margin-top:1px; }
.recommend-app-badge {
  font-size:9px; font-weight:800; padding:2px 7px; border-radius:99px; letter-spacing:.03em;
}
.recommend-app-badge.free { background:rgba(52,211,153,.16); color:#16a34a; }
.recommend-app-badge.soon { background:rgba(148,163,184,.18); color:var(--text-muted); }
.recommend-app-arrow { color:var(--text-muted); font-size:16px; flex-shrink:0; }
.recommend-apps-cta {
  display:flex; align-items:center; justify-content:center; gap:6px; width:100%;
  padding:11px; border-radius:14px; border:1px dashed var(--border-strong);
  background:transparent; color:var(--accent-primary); font-size:12.5px; font-weight:700;
  font-family:'DM Sans',sans-serif; cursor:pointer; text-decoration:none;
}
