/* ============================================================
   Kanji JFT — Modern UI
   Fonts: Plus Jakarta Sans (UI) + Noto Sans JP (kanji)
   ============================================================ */

:root{
  --font-sans:'Plus Jakarta Sans','Segoe UI',system-ui,-apple-system,sans-serif;
  --font-jp:'Noto Sans JP','Hiragino Kaku Gothic ProN','Yu Gothic',sans-serif;

  --bg:#f6f7fb;
  --bg-soft:#eef0f7;
  --card:#ffffff;
  --card-hover:#ffffff;
  --ink:#202634;
  --ink-soft:#5a6272;
  --muted:#8a92a5;
  --border:#e7e9f1;
  --border-strong:#d8dce8;

  --primary:#e0455a;
  --primary-2:#ff7b54;
  --primary-soft:color-mix(in srgb,var(--primary) 14%,#ffffff);
  --green:#27ae60;
  --green-soft:#e6f7ee;
  --green-ink:#1e9a55;
  --gold:#f5b301;
  --gold-soft:#fdf6dd;
  --blue:#3f7af0;
  --blue-soft:#e9f0fe;
  --purple:#8b5cf6;
  --purple-soft:#f1ebff;
  --cyan:#0ea5b7;
  --cyan-soft:#e0f6f9;
  --red-soft:#fdecec;
  --red-ink:#d63a46;

  --radius:16px;
  --radius-lg:22px;
  --radius-pill:999px;

  --shadow-sm:0 2px 10px rgba(32,38,52,.06);
  --shadow:0 10px 28px -12px rgba(32,38,52,.18);
  --shadow-lg:0 28px 60px -22px rgba(32,38,52,.28);
  --shadow-primary:0 10px 22px -10px color-mix(in srgb,var(--primary) 55%,transparent);

  --header-bg:rgba(255,255,255,.82);
  --header-border:rgba(231,233,241,.9);
  --track:#eceef4;
}

[data-theme="dark"]{
  --bg:#0f1117;
  --bg-soft:#171a23;
  --card:#1a1d27;
  --card-hover:#20242f;
  --ink:#eceef4;
  --ink-soft:#b9c0d0;
  --muted:#8a93a8;
  --border:#272b38;
  --border-strong:#343a4a;

  --primary:#ff5c6d;
  --primary-2:#ff8a63;
  --primary-soft:color-mix(in srgb,var(--primary) 22%,#171a23);
  --green:#3ecf7e;
  --green-soft:#1b2f24;
  --green-ink:#4fe08d;
  --gold:#f7bf38;
  --gold-soft:#352e17;
  --blue:#5b8df6;
  --blue-soft:#1f2a44;
  --purple:#a78bfa;
  --purple-soft:#2b2440;
  --cyan:#38c3d8;
  --cyan-soft:#122a30;
  --red-soft:#3a2226;
  --red-ink:#ff6b76;

  --shadow-sm:0 2px 10px rgba(0,0,0,.35);
  --shadow:0 12px 30px -14px rgba(0,0,0,.55);
  --shadow-lg:0 30px 64px -24px rgba(0,0,0,.7);
  --shadow-primary:0 10px 22px -10px color-mix(in srgb,var(--primary) 55%,transparent);

  --header-bg:rgba(18,20,27,.8);
  --header-border:rgba(39,43,56,.8);
  --track:#262a35;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:var(--font-sans);
  background:
    radial-gradient(1100px 380px at 12% -10%, var(--primary-soft), transparent 60%),
    radial-gradient(900px 360px at 108% 4%, var(--blue-soft), transparent 55%),
    var(--bg);
  background-attachment:fixed;
  color:var(--ink);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
  line-height:1.5;
  transition:background .35s ease,color .35s ease;
}
button{font-family:inherit}
.container{max-width:1000px;margin:0 auto;padding:16px 16px 0}

/* ---------- Header ---------- */
.site-header{
  position:sticky;top:0;z-index:40;
  background:var(--header-bg);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--header-border);
  transition:background .35s ease,border-color .35s ease;
}
.header-top{display:flex;align-items:center;justify-content:space-between;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;max-width:1000px;margin:0 auto}
.brand{display:flex;align-items:center;gap:12px}
.brand-mark{
  width:44px;height:44px;border-radius:14px;display:grid;place-items:center;
  font-family:var(--font-jp);font-weight:900;font-size:22px;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  box-shadow:var(--shadow-primary);
}
.brand-title{font-size:19px;font-weight:800;letter-spacing:.2px;line-height:1.2}
.brand-title span{color:var(--primary)}
.brand-sub{font-size:12px;color:var(--muted);margin-top:1px}
.header-actions{display:flex;align-items:center;gap:10px}
.icon-btn{
  width:42px;height:42px;border-radius:14px;display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--border);background:var(--card);color:var(--ink);
  transition:.2s;box-shadow:var(--shadow-sm);
}
.icon-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-strong)}
[data-theme="light"] .ic-sun{display:none}
[data-theme="dark"] .ic-moon{display:none}

/* ---------- Install button ---------- */
.install-btn{
  display:inline-flex;align-items:center;gap:7px;
  padding:10px 16px;border-radius:var(--radius-pill);
  border:none;cursor:pointer;font-size:13px;font-weight:800;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  box-shadow:var(--shadow-primary);transition:.2s;white-space:nowrap;
}
.install-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}
.install-btn:active{transform:scale(.95)}
.install-btn[hidden]{display:none}

/* ---------- Offline badge ---------- */
.offline-badge{
  position:fixed;top:calc(env(safe-area-inset-top) + 10px);left:50%;
  transform:translateX(-50%) translateY(-80px);
  background:var(--ink);color:var(--bg);padding:9px 18px;border-radius:var(--radius-pill);
  font-size:12.5px;font-weight:800;box-shadow:var(--shadow-lg);z-index:70;
  transition:transform .35s cubic-bezier(.2,.8,.3,1);white-space:nowrap;
}
.offline-badge.show{transform:translateX(-50%) translateY(0)}
.offline-badge[hidden]{display:none}

/* ---------- Update banner ---------- */
.update-banner{
  position:fixed;left:0;right:0;bottom:0;z-index:65;
  display:none;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  background:var(--card);border-top:1px solid var(--border);
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));
  font-size:13px;font-weight:700;color:var(--ink);
  box-shadow:0 -10px 28px -14px rgba(32,38,52,.22);
}
.update-banner.show{display:flex}
.update-reload{
  border:none;border-radius:var(--radius-pill);cursor:pointer;
  padding:9px 18px;font-size:12.5px;font-weight:800;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  box-shadow:var(--shadow-primary);transition:.2s;
}
.update-reload:hover{transform:translateY(-2px)}

/* ---------- Modal (iOS install) ---------- */
.modal-overlay{
  position:fixed;inset:0;z-index:80;display:grid;place-items:center;
  background:rgba(15,17,23,.55);backdrop-filter:blur(4px);
  -webkit-backdrop-filter:blur(4px);
  padding:calc(20px + env(safe-area-inset-top)) 20px calc(20px + env(safe-area-inset-bottom));
  animation:fadeIn .22s ease;
}
.modal-overlay[hidden]{display:none}
.modal{
  position:relative;width:100%;max-width:380px;background:var(--card);
  border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:30px 24px 26px;text-align:center;box-shadow:var(--shadow-lg);
}
.modal-close{
  position:absolute;top:12px;right:14px;border:none;background:transparent;
  color:var(--muted);font-size:26px;line-height:1;cursor:pointer;width:36px;height:36px;
  border-radius:12px;transition:.2s;
}
.modal-close:hover{background:var(--bg-soft);color:var(--ink)}
.modal-ico{font-size:42px;margin-bottom:6px}
.modal h3{font-size:17px;font-weight:800;margin-bottom:14px}
.ios-steps{list-style:none;counter-reset:step;text-align:left;display:flex;flex-direction:column;gap:12px;margin-bottom:20px}
.ios-steps li{
  display:flex;align-items:flex-start;gap:12px;font-size:13.5px;color:var(--ink-soft);
  font-weight:600;line-height:1.5;
}
.ios-steps li::before{
  counter-increment:step;content:counter(step);
  flex:none;width:26px;height:26px;border-radius:999px;display:grid;place-items:center;
  background:var(--primary-soft);color:var(--primary);font-weight:800;font-size:12.5px;
}
.ios-steps b{color:var(--ink)}
.share-glyph{font-size:16px;font-weight:800}
.modal .modal-ok{width:100%;max-width:220px}
.modal-sub{font-size:12.5px;color:var(--muted);font-weight:600;margin:-8px auto 16px;max-width:280px;line-height:1.5}
.swatches{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.swatch{
  display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer;
  border:2px solid var(--border);background:var(--card);border-radius:var(--radius);
  padding:10px 4px;transition:.2s;min-width:0;
}
.swatch i{width:30px;height:30px;border-radius:999px;display:block;background:linear-gradient(135deg,var(--sw1),var(--sw2));box-shadow:0 6px 14px -6px color-mix(in srgb,var(--sw1) 70%,transparent)}
.swatch span{font-size:9.5px;font-weight:700;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.swatch:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-strong)}
.swatch.active{border-color:var(--sw1);box-shadow:0 0 0 2px color-mix(in srgb,var(--sw1) 30%,transparent),var(--shadow)}
.swatch.active span{color:var(--sw1)}
.swatch-custom{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:4px}
.swatch-custom label{font-size:12.5px;font-weight:700;color:var(--ink-soft)}
.swatch-custom input[type=color]{width:52px;height:36px;border:1px solid var(--border);border-radius:10px;background:var(--card);padding:3px;cursor:pointer}

/* ---------- Main navbar (desktop / tablet) ---------- */
.main-nav{
  display:flex;gap:6px;align-items:center;
  max-width:1000px;margin:0 auto;padding:0 12px 12px;
  flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
}
.main-nav::-webkit-scrollbar{display:none}
.nav-link{
  flex:none;display:inline-flex;align-items:center;gap:8px;
  padding:9px 16px;border-radius:var(--radius-pill);
  font-size:13.5px;font-weight:700;color:var(--ink-soft);
  background:transparent;border:1px solid transparent;cursor:pointer;transition:.2s;
  text-decoration:none;min-height:44px;
}
.nav-link svg{flex:none}
.nav-link:hover{background:var(--bg-soft);color:var(--ink)}
.nav-link.active{
  background:var(--primary-soft);color:var(--primary);border-color:transparent;
}
.nav-link.active svg{color:var(--primary)}

/* ---------- View system ---------- */
.view{display:none}
.view.active{display:block;animation:fadeIn .28s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.view-head{margin:6px 0 14px}
.view-head h2{font-size:21px;font-weight:800;letter-spacing:.2px}
.view-head p{font-size:13px;color:var(--muted);margin-top:2px}
.print-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.print-btn{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;padding:10px 16px}
.print-btn:hover{color:var(--primary);border-color:var(--primary)}

/* ---------- Sub bar (search + day tabs) ---------- */
.sub-bar{display:flex;flex-direction:column;gap:8px;margin:0 0 16px}
.sub-bar .search-wrap{flex:1 1 auto}
.sub-bar .day-tabs{margin-bottom:0}
.day-tabs[hidden]{display:none}

/* ---------- Home v2 ---------- */
.hero{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:
    radial-gradient(560px 260px at 88% 8%, rgba(255,255,255,.20), transparent 60%),
    radial-gradient(420px 420px at 8% 95%, rgba(90,0,18,.45), transparent 60%),
    linear-gradient(135deg,#b81c38 0%, var(--primary) 55%, var(--primary-2) 100%);
  color:#fff;border-radius:26px;padding:28px 24px;margin:4px 0 18px;
  box-shadow:0 18px 40px -14px rgba(200,30,60,.5);position:relative;overflow:hidden;
}
.hero::before{
  content:'';position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:radial-gradient(circle at 50% 0%, rgba(255,255,255,.10) 7px, transparent 8px);
  background-size:34px 17px;background-position:0 0;
}
.hero::after{content:'漢';position:absolute;right:-10px;bottom:-52px;font-family:var(--font-jp);font-size:180px;opacity:.14;pointer-events:none}
.hero-float{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.hero-float span{
  position:absolute;bottom:-40px;font-family:var(--font-jp);font-weight:900;color:#fff;
  opacity:0;animation:floatUp 9s linear infinite;
}
.hero-float span:nth-child(1){left:6%;font-size:26px;animation-delay:0s}
.hero-float span:nth-child(2){left:22%;font-size:18px;animation-delay:2.2s}
.hero-float span:nth-child(3){left:45%;font-size:30px;animation-delay:4.1s}
.hero-float span:nth-child(4){left:63%;font-size:16px;animation-delay:1.2s}
.hero-float span:nth-child(5){left:78%;font-size:24px;animation-delay:5.6s}
.hero-float span:nth-child(6){left:90%;font-size:18px;animation-delay:7s}
@keyframes floatUp{
  0%{transform:translateY(0) rotate(-6deg);opacity:0}
  12%{opacity:.35}
  85%{opacity:.25}
  100%{transform:translateY(-260px) rotate(8deg);opacity:0}
}
.hero-text{position:relative;z-index:1}
.hero-eyebrow{font-size:11px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;opacity:.9;white-space:nowrap}
.hero-title{font-size:30px;font-weight:900;margin-top:6px;line-height:1.18;letter-spacing:-.3px}
.hero-title span{
  background:linear-gradient(90deg,#ffe27a,#ffb35c);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.hero-sub{font-size:13px;opacity:.94;margin-top:8px;font-weight:600}
.hero-mark{
  position:relative;z-index:1;font-family:var(--font-jp);font-size:78px;font-weight:900;
  line-height:1;flex:none;
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.35);
  border-radius:22px;padding:10px 14px;backdrop-filter:blur(2px);
  box-shadow:0 12px 28px -12px rgba(0,0,0,.4);
}
.hero-cta{
  margin-top:18px;display:inline-flex;align-items:center;gap:9px;
  padding:12px 26px;border-radius:var(--radius-pill);border:none;cursor:pointer;
  background:#fff;color:#c81e3a;font-size:14.5px;font-weight:900;
  box-shadow:0 12px 26px -10px rgba(0,0,0,.4);transition:.2s;position:relative;overflow:hidden;
}
.hero-cta::after{
  content:'';position:absolute;top:0;bottom:0;width:40px;left:-60px;
  background:linear-gradient(100deg,transparent,rgba(200,30,60,.25),transparent);
  transform:skewX(-20deg);animation:shine 3.2s ease-in-out infinite;
}
@keyframes shine{0%,55%{left:-60px}90%,100%{left:130%}}
.hero-cta:hover{transform:translateY(-2px)}
.hero-cta:active{transform:scale(.96)}
.hero-cta span{font-size:12px}
.hero-cta{white-space:nowrap}

/* kartu unggulan */
.feat-card{
  display:flex;align-items:center;gap:16px;width:100%;text-align:left;
  border:none;cursor:pointer;color:#fff;margin:0 0 20px;padding:18px 18px;
  background:
    radial-gradient(300px 160px at 92% 20%, rgba(255,255,255,.14), transparent 60%),
    linear-gradient(120deg,#232a5e 0%, #4a2a86 55%, #7a2a86 100%);
  border-radius:22px;position:relative;overflow:hidden;
  box-shadow:0 16px 34px -14px rgba(60,30,120,.55);transition:.2s;
}
.feat-card::before{
  content:'試試試';position:absolute;right:6px;top:50%;transform:translateY(-50%);
  font-family:var(--font-jp);font-size:44px;font-weight:900;opacity:.10;letter-spacing:6px;pointer-events:none;
}
.feat-card:hover{transform:translateY(-3px);box-shadow:0 22px 44px -14px rgba(60,30,120,.6)}
.feat-card:active{transform:scale(.98)}
.feat-kanji{
  font-family:var(--font-jp);font-size:44px;font-weight:900;flex:none;
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.3);
  width:76px;height:76px;display:grid;place-items:center;border-radius:20px;
}
.feat-meta{display:flex;flex-direction:column;flex:1;min-width:0;gap:2px}
.feat-tag{
  align-self:flex-start;font-size:10px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;
  background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.25);
  padding:3px 10px;border-radius:var(--radius-pill);margin-bottom:4px;
}
.feat-meta strong{font-size:18px;font-weight:900;letter-spacing:-.2px}
.feat-meta small{font-size:12px;opacity:.85;font-weight:600}
.feat-arrow{font-size:30px;font-weight:800;opacity:.7;flex:none}

/* grid menu */
.menu-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 22px}
.menu-card{
  display:flex;flex-direction:column;align-items:flex-start;gap:12px;text-align:left;
  background:var(--card);border:1px solid var(--border);border-radius:20px;
  box-shadow:var(--shadow-sm);cursor:pointer;transition:.2s;color:var(--ink);padding:18px 16px;
  position:relative;overflow:hidden;
}
.menu-card::after{content:'';position:absolute;left:0;top:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent);pointer-events:none}
[data-theme="dark"] .menu-card::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent)}
.menu-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);border-color:var(--border-strong)}
.menu-card:active{transform:scale(.97)}
.menu-ico{
  width:54px;height:54px;border-radius:17px;display:grid;place-items:center;flex:none;
  font-family:var(--font-jp);font-size:25px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,var(--g1),var(--g2));
  box-shadow:0 10px 20px -8px var(--g2);
}
.g-blue{--g1:#3b82f6;--g2:#1d4ed8}
.g-gold{--g1:#f59e0b;--g2:#d97706}
.g-green{--g1:#22c55e;--g2:#15803d}
.g-purple{--g1:#a855f7;--g2:#7e22ce}
.g-red{--g1:#ef4444;--g2:#b91c1c}
.g-cyan{--g1:#06b6d4;--g2:#0e7490}
.g-pink{--g1:#ec4899;--g2:#be185d}
.g-teal{--g1:#14b8a6;--g2:#0f766e}
.menu-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.menu-meta strong{font-size:14.5px;font-weight:800;letter-spacing:-.1px}
.menu-meta small{font-size:11.5px;color:var(--muted);font-weight:600;line-height:1.45}

.section-title{font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.8px;margin-bottom:10px}
.home-day-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:10px}
.day-chip{
  display:flex;flex-direction:column;gap:10px;padding:16px 14px;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  cursor:pointer;transition:.22s;box-shadow:var(--shadow-sm);text-align:left;color:var(--ink);
  position:relative;overflow:hidden;
}
.day-chip::before{
  content:'';position:absolute;left:0;top:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--da,var(--primary)),var(--db,var(--primary-2)));
  opacity:0;transition:.22s;
}
.day-chip:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);border-color:var(--border-strong)}
.day-chip:hover::before{opacity:1}
.day-chip-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.day-num{
  font-family:var(--font-jp);font-size:20px;font-weight:900;line-height:1;
  color:#fff;background:linear-gradient(135deg,var(--da,var(--primary)),var(--db,var(--primary-2)));
  width:44px;height:44px;border-radius:13px;display:grid;place-items:center;
  box-shadow:0 10px 22px -10px color-mix(in srgb,var(--da,var(--primary)) 60%,transparent);
}
.day-status{
  font-size:11px;font-weight:800;color:var(--green-ink);background:var(--green-soft);
  border-radius:var(--radius-pill);padding:3px 9px;min-width:42px;text-align:center;
  font-variant-numeric:tabular-nums;
}
.day-chip-name{font-size:14px;font-weight:800}
.day-chip-count{font-size:11px;color:var(--muted);font-weight:700;font-variant-numeric:tabular-nums}
.day-chip .progress-track{height:6px}
.day-chip.done{border-color:var(--green);background:linear-gradient(180deg,var(--card),var(--green-soft))}
.day-chip.done::before{background:linear-gradient(90deg,var(--green),#2ecc71);opacity:1}
.day-chip.done .day-num{background:linear-gradient(135deg,var(--green),#2ecc71);box-shadow:0 10px 22px -10px rgba(39,174,96,.5)}
.day-chip.done .day-status{background:var(--green);color:#fff}

/* ---------- Progress ---------- */
.progress-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.progress-week{margin:18px 0 22px}
.week-chart{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px 16px 14px;box-shadow:var(--shadow-sm)}
.wc-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0}
.wc-num{font-size:11px;font-weight:800;color:var(--ink-soft);font-variant-numeric:tabular-nums;height:15px}
.wc-bar{width:100%;max-width:34px;border-radius:8px 8px 4px 4px;background:linear-gradient(180deg,var(--primary),var(--primary-2));min-height:4px;transition:height .6s cubic-bezier(.22,.9,.3,1)}
.wc-bar.empty{background:var(--track)}
.wc-bar.today{box-shadow:var(--shadow-primary)}
.wc-day{font-size:10px;font-weight:700;color:var(--muted);white-space:nowrap}
.wc-day.today{color:var(--primary)}
.progress-days{display:flex;flex-direction:column;gap:10px}
.progress-row{
  display:flex;align-items:center;gap:14px;padding:14px 16px;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);transition:.2s;
}
.progress-row:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.progress-row .p-day{
  flex:none;width:46px;height:46px;border-radius:14px;display:grid;place-items:center;
  font-family:var(--font-jp);font-weight:900;font-size:17px;
  color:#fff;background:linear-gradient(135deg,var(--da,var(--primary)),var(--db,var(--primary-2)));
}
.progress-row .p-meta{flex:1;min-width:0}
.progress-row .p-meta strong{font-size:14px;font-weight:800;display:block}
.progress-row .p-meta small{font-size:12px;color:var(--muted);font-weight:600}
.progress-row .progress-track{height:7px;margin-top:6px}
.progress-row .p-num{flex:none;font-size:13px;font-weight:800;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.progress-row.done{border-color:var(--green);background:linear-gradient(180deg,var(--card),var(--green-soft))}
.progress-row.done .p-day{background:var(--green-soft);color:var(--green-ink)}
.progress-mastered{margin-top:22px}
.mastered-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.mastered-chip{
  font-family:var(--font-jp);font-size:20px;font-weight:800;color:var(--green-ink);
  background:var(--green-soft);border:1px solid var(--green);border-radius:var(--radius-pill);
  padding:6px 14px;
}
.chip-note{font-family:var(--font-sans);font-size:10.5px;color:var(--muted);font-weight:600;margin-left:4px}

/* ---------- Stats dashboard ---------- */
.stats-dash{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:4px 0 18px}
.stat-card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:14px 16px;display:flex;align-items:center;gap:12px;
  box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .2s,background .35s ease,border-color .35s ease;
}
.stat-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.stat-ico{
  width:44px;height:44px;flex:none;border-radius:14px;display:grid;place-items:center;
}
.ico-red{background:var(--primary-soft);color:var(--primary)}
.ico-green{background:var(--green-soft);color:var(--green-ink)}
.stat-meta{display:flex;flex-direction:column;min-width:0}
.stat-label{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
.stat-value{font-size:24px;font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums}
.stat-progress{justify-content:flex-start}
.ring{position:relative;flex:none}
.ring svg{display:block;transform:rotate(-90deg)}
.ring-bg{stroke:var(--track);stroke-width:4.5}
.ring-fg{
  stroke:url(#ringGrad);stroke-width:4.5;stroke-linecap:round;
  transition:stroke-dashoffset .8s cubic-bezier(.22,.9,.3,1);
}
.ring-txt{
  position:absolute;inset:0;display:grid;place-items:center;
  font-size:13px;font-weight:800;color:var(--primary);font-variant-numeric:tabular-nums;
}
.stat-note{font-size:11px;color:var(--muted);font-weight:700;font-variant-numeric:tabular-nums}
.progress-track{
  height:8px;border-radius:var(--radius-pill);background:var(--track);overflow:hidden;
}
.progress-track i{
  display:block;height:100%;width:0;border-radius:var(--radius-pill);
  background:linear-gradient(90deg,var(--primary),var(--primary-2));
  transition:width .8s cubic-bezier(.22,.9,.3,1);
}

/* ---------- Toolbar ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.search-wrap{
  flex:1 1 240px;display:flex;align-items:center;gap:8px;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-pill);
  padding:10px 16px;box-shadow:var(--shadow-sm);transition:.2s;
}
.search-wrap:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.search-ico{color:var(--muted);flex:none}
.search-wrap input{
  flex:1;border:none;outline:none;background:transparent;color:var(--ink);
  font-family:var(--font-sans);font-size:14px;font-weight:500;min-width:0;
}
.search-wrap input::placeholder{color:var(--muted)}
.search-wrap input::-webkit-search-cancel-button{display:none}

/* ---------- Day tabs ---------- */
.day-tabs{
  display:flex;gap:8px;overflow-x:auto;padding:10px;margin-bottom:16px;
  background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-lg);
  scrollbar-width:none;
}
.day-tabs::-webkit-scrollbar{display:none}
.tab{
  flex:none;border:1px solid var(--border);background:var(--card);color:var(--ink-soft);
  padding:7px 14px 7px 7px;border-radius:var(--radius-pill);cursor:pointer;font-size:12.5px;font-weight:700;
  transition:.2s;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:8px;
  min-height:44px;
}
.tab-num{
  flex:none;font-family:var(--font-jp);font-size:12.5px;font-weight:800;line-height:1;
  width:30px;height:30px;border-radius:999px;display:grid;place-items:center;
  background:var(--bg-soft);color:var(--muted);transition:.2s;
}
.tab:hover{transform:translateY(-2px);border-color:var(--border-strong);box-shadow:var(--shadow)}
.tab:hover .tab-num{color:var(--primary)}
.tab.active{
  background:linear-gradient(135deg,var(--da,var(--primary)),var(--db,var(--primary-2)));color:#fff;
  border-color:transparent;box-shadow:0 10px 22px -10px color-mix(in srgb,var(--da,var(--primary)) 60%,transparent);
}
.tab.active .tab-num{background:rgba(255,255,255,.24);color:#fff}
.tab .cnt{opacity:.72;font-weight:700;font-size:10.5px;background:rgba(127,127,127,.14);padding:2px 8px;border-radius:var(--radius-pill);font-variant-numeric:tabular-nums}
.tab.active .cnt{background:rgba(255,255,255,.25)}

/* ---------- Quiz type ---------- */
.quiz-type-bar{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;
  max-width:560px;margin:0 auto 16px;
  background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:6px;
}
.qtype{
  display:flex;align-items:center;justify-content:center;gap:10px;
  border:none;background:transparent;border-radius:var(--radius);
  padding:11px 12px;cursor:pointer;color:var(--muted);transition:all .25s ease;
}
.qtype svg{flex:none}
.qtype:hover{color:var(--ink)}
.qtype.active{
  background:var(--card);color:var(--primary);
  box-shadow:var(--shadow-sm);
}
.qtype.active svg{color:var(--primary)}
.qt-txt{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15}
.qt-label{font-size:13.5px;font-weight:800}
.qt-sub{font-size:10px;font-weight:600;opacity:.75}

/* ---------- Grid cards ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:12px}
.card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:20px 14px;box-shadow:var(--shadow-sm);cursor:pointer;transition:.22s;
  position:relative;overflow:hidden;text-align:center;display:flex;flex-direction:column;align-items:center;
}
.card::before{
  content:'';position:absolute;left:0;top:0;right:0;height:4px;
  background:linear-gradient(90deg,var(--da,var(--primary)),var(--db,var(--primary-2)));
  opacity:0;transition:.22s;
}
.card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg),0 0 0 1px var(--primary-soft);border-color:var(--border-strong)}
.card:hover::before{opacity:1}
.card .kanji{
  font-family:var(--font-jp);font-size:42px;font-weight:900;color:var(--ink);
  line-height:1.25;text-shadow:0 4px 18px var(--primary-soft),0 2px 8px rgba(0,0,0,.06);
}
.card .read{font-size:14px;color:var(--muted);margin-top:6px;font-weight:600;min-height:21px;letter-spacing:.3px}
.card .mean{font-size:13.5px;color:var(--ink);margin-top:6px;font-weight:700}
.card .eng{font-size:11px;color:var(--muted);margin-top:2px;text-transform:capitalize}
.card-day{
  font-size:10.5px;font-weight:800;color:#fff;margin-top:8px;
  background:linear-gradient(135deg,var(--da,var(--primary)),var(--db,var(--primary-2)));
  padding:3px 12px;border-radius:var(--radius-pill);
  letter-spacing:.3px;box-shadow:0 6px 14px -6px color-mix(in srgb,var(--da,var(--primary)) 60%,transparent);
}
.card .badge{
  position:absolute;top:12px;right:12px;font-size:10px;font-weight:800;letter-spacing:.4px;
  padding:3px 10px;border-radius:var(--radius-pill);color:#fff;text-transform:uppercase;
}
.badge.new{background:linear-gradient(135deg,#9aa3b5,#7c869c)}
.badge.learn{background:linear-gradient(135deg,var(--green),#2ecc71)}
.card.mastered{border-color:var(--green);background:linear-gradient(180deg,var(--card),var(--green-soft))}
.card.mastered::after{
  content:'✓';position:absolute;top:8px;left:12px;color:var(--green-ink);
  font-weight:900;font-size:18px;
}
.empty{
  grid-column:1/-1;padding:64px 20px;text-align:center;color:var(--muted);
  background:var(--card);border:1px dashed var(--border-strong);border-radius:var(--radius-lg);
  font-weight:600;
}

/* ---------- Flashcard (3D flip) ---------- */
.flash-scene{perspective:1400px;max-width:560px;margin:8px auto 0}
.flash-card{
  position:relative;height:360px;cursor:pointer;transform-style:preserve-3d;
  transition:transform .65s cubic-bezier(.3,.85,.35,1);
}
.flash-card.flipped{transform:rotateY(180deg)}
.flash-inner{position:absolute;inset:0;transform-style:preserve-3d}
.flash-face{
  position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:28px 20px;text-align:center;gap:6px;
}
.flash-back{transform:rotateY(180deg);background:linear-gradient(180deg,var(--card),var(--primary-soft))}
.flash-tag{
  position:absolute;top:16px;left:50%;transform:translateX(-50%);
  font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);
  background:var(--bg-soft);border:1px solid var(--border);padding:4px 14px;border-radius:var(--radius-pill);
}
.flash-kanji{
  font-family:var(--font-jp);font-size:118px;font-weight:900;line-height:1.1;color:var(--ink);
  text-shadow:0 8px 28px var(--primary-soft);
  animation:kanjiIn .5s ease both;
}
@keyframes kanjiIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}
.flash-front-hint{
  margin-top:18px;font-size:12.5px;font-weight:600;color:var(--muted);
  display:flex;align-items:center;gap:6px;
}
.flash-front-hint svg{transition:transform .2s}
.flash-card:hover .flash-front-hint svg{transform:translateX(3px)}
.flash-read{
  font-family:var(--font-jp);font-size:34px;font-weight:800;color:var(--ink);letter-spacing:1px;
  display:flex;gap:8px;flex-wrap:wrap;justify-content:center;
}
.speak-btn{
  border:none;background:transparent;color:var(--primary);cursor:pointer;
  display:grid;place-items:center;padding:10px;border-radius:50%;transition:.2s;
  min-width:44px;min-height:44px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;
}
.speak-btn:hover{background:var(--primary-soft);transform:scale(1.1)}
.speak-btn-back{display:inline-flex;align-items:center;gap:6px;border-radius:var(--radius-pill);margin-top:14px;padding:10px 18px;font-size:13px}
.speak-btn-back:hover{color:var(--primary);border-color:var(--primary)}
.card-speak{
  position:absolute;bottom:10px;right:10px;z-index:5;border:none;background:var(--bg-soft);
  color:var(--muted);width:40px;height:40px;border-radius:50%;display:grid;place-items:center;cursor:pointer;transition:.2s;
  touch-action:manipulation;-webkit-tap-highlight-color:transparent;
}
.card-speak:hover{background:var(--primary-soft);color:var(--primary);transform:scale(1.08)}
.flash-read .pill{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-pill);
  padding:6px 18px;box-shadow:var(--shadow-sm);
}
.flash-mean{font-size:22px;font-weight:800;color:var(--ink);margin-top:10px}
.flash-eng{font-size:13px;color:var(--muted);margin-top:2px;text-transform:capitalize}

.flash-nav{
  max-width:560px;margin:18px auto 0;display:flex;align-items:center;justify-content:space-between;gap:10px;
}
.nav-btn{
  width:52px;height:52px;flex:none;border-radius:18px;border:1px solid var(--border);
  background:var(--card);color:var(--ink);font-size:26px;font-weight:700;cursor:pointer;
  display:grid;place-items:center;transition:.2s;box-shadow:var(--shadow-sm);line-height:1;
}
.nav-btn:hover{transform:translateY(-2px) scale(1.03);box-shadow:var(--shadow);border-color:var(--primary);color:var(--primary)}
.nav-btn:active{transform:scale(.94)}
.flash-center-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.btn{
  border:none;border-radius:var(--radius-pill);padding:12px 20px;font-size:14px;font-weight:800;cursor:pointer;
  transition:.2s;background:var(--bg-soft);color:var(--ink-soft);
}
.btn:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.btn:active{transform:scale(.96)}
.btn.primary{background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;box-shadow:var(--shadow-primary)}
.btn.ghost{background:var(--card);color:var(--ink-soft);border:1px solid var(--border)}
.flash-progress{max-width:560px;margin:14px auto 0;display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.flash-progress .progress-track{flex:1}

/* ---------- Quiz ---------- */
.quiz-box{
  max-width:560px;margin:8px auto;background:var(--card);border:1px solid var(--border);
  border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:28px 22px 30px;text-align:center;
  perspective:800px;
}
.exam-info{display:flex;flex-direction:column;align-items:center;gap:14px;padding:6px 0}
.exam-desc{color:var(--ink-soft);font-size:13.5px;font-weight:600;line-height:1.6;max-width:420px}
.coming-soon-card{padding:38px 20px;text-align:center}
.coming-soon-ico{font-size:46px;line-height:1;animation:pulse 1.6s ease infinite}
.coming-soon-card h3{font-size:20px;font-weight:800;margin:14px 0 8px;color:var(--ink)}
.coming-soon-card p{color:var(--muted);font-size:13.5px;font-weight:600;line-height:1.6;margin:6px auto;max-width:380px}
.coming-soon-card b{color:var(--ink-soft)}
.coming-soon-contact{margin-top:12px}
.coming-soon-contact a{color:var(--primary);font-weight:800;text-decoration:none;font-size:15px}
.exam-timer{
  width:96px;margin:0 auto 6px;padding:8px 0;border-radius:var(--radius-pill);
  font-size:22px;font-weight:800;font-variant-numeric:tabular-nums;
  color:var(--primary);background:var(--primary-soft);letter-spacing:.5px;
}
.exam-timer.low{color:#fff;background:var(--red-ink);animation:pulse 1s ease infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.55}}
.quiz-progress{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.quiz-progress .progress-track{flex:1}
.quiz-top{display:flex;align-items:center;gap:10px}
.quiz-streak{
  flex:none;display:inline-flex;align-items:center;gap:4px;
  font-size:11px;font-weight:800;color:var(--gold);background:var(--gold-soft);
  border:1px solid var(--gold);border-radius:var(--radius-pill);padding:4px 11px;
  animation:pop .3s ease;
}
.quiz-q-wrap{display:flex;flex-direction:column;align-items:center;margin-top:16px}
.quiz-day{
  font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;
  color:var(--primary);background:var(--primary-soft);
  border-radius:var(--radius-pill);padding:4px 13px;min-height:22px;
}
.quiz-q-row{display:flex;align-items:center;gap:16px}
.quiz-speak{
  flex:none;width:48px;height:48px;border-radius:15px;border:1px solid var(--border);
  background:var(--card);color:var(--muted);display:grid;place-items:center;cursor:pointer;
  transition:.2s;box-shadow:var(--shadow-sm);
}
.quiz-speak[hidden]{display:none}
.quiz-speak:hover{color:var(--primary);border-color:var(--primary);transform:translateY(-2px)}
.quiz-speak:active{transform:scale(.92)}
.quiz-q{
  font-family:var(--font-jp);font-size:82px;font-weight:900;line-height:1.2;color:var(--ink);
  text-shadow:0 8px 26px var(--primary-soft);margin-top:14px;
}
.quiz-q.choukai{
  font-size:74px;line-height:1;display:grid;place-items:center;
  background:radial-gradient(circle,var(--primary-soft),transparent 70%);
  width:120px;height:120px;margin:14px auto 0;border-radius:50%;
  animation:earPulse 1.8s ease infinite;
}
@keyframes earPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
.quiz-prompt{color:var(--muted);font-size:13.5px;font-weight:600;margin:6px 0 20px}
.quiz-opts{display:grid;gap:10px}
.qopt{
  display:flex;align-items:center;gap:12px;text-align:left;
  border:2px solid var(--border);background:var(--card);border-radius:var(--radius);
  padding:13px 16px;font-size:16px;font-weight:700;color:var(--ink);cursor:pointer;
  transition:.2s ease-out;font-variant-numeric:tabular-nums;
  transform-style:preserve-3d;
  margin-bottom:8px;
}
.qopt:hover:not(:disabled){border-color:var(--primary);transform:translateY(-2px) scale(1.02) rotateX(2deg) translateZ(4px);box-shadow:var(--shadow),0 0 20px rgba(224,69,90,.15);}
.qopt:active:not(:disabled){transform:scale(.97) rotateX(180deg) translateZ(-2px)}
.qopt-letter{
  flex:none;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;
  background:var(--bg-soft);color:var(--muted);font-size:13px;font-weight:800;
  transition:.16s;
}
.qopt-text{flex:1;min-width:0}
.qopt .mark{flex:none;font-size:17px;font-weight:900;display:none}
.qopt.correct{border-color:var(--green);background:var(--green-soft);color:var(--green-ink);animation:pop .32s ease}
.qopt.correct .mark{display:inline;color:var(--green)}
.qopt.correct .qopt-letter{background:var(--green);color:#fff}
.qopt.wrong{border-color:var(--red-ink);background:var(--red-soft);color:var(--red-ink);animation:shake .4s ease}
.qopt.wrong .mark{display:inline;color:var(--red-ink)}
.qopt.wrong .qopt-letter{background:var(--red-ink);color:#fff}
.qopt:disabled{cursor:default;opacity:.92}
@keyframes pop{0%{transform:scale(.96)}55%{transform:scale(1.03)}100%{transform:scale(1)}}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}50%{transform:translateX(5px)}75%{transform:translateX(-3px)}}
.fb{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:800}
.fb-ok{color:var(--green-ink)}
.fb-no{color:var(--red-ink)}
.quiz-result{margin-top:16px;font-size:15px;font-weight:800;min-height:24px}
.quiz-score{font-size:12px;color:var(--muted);margin-top:4px;font-weight:600}
.result-panel{
  max-width:300px;margin:0 auto;padding:20px 18px;border-radius:var(--radius-lg);
  background:var(--card);border:2px solid var(--border);
}
.result-panel.pass{border-color:var(--green);background:linear-gradient(180deg,var(--card),var(--green-soft))}
.result-panel.fail{border-color:var(--red-ink);background:linear-gradient(180deg,var(--card),var(--red-soft))}
.result-pct{font-size:40px;font-weight:900;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.result-panel.pass .result-pct{color:var(--green-ink)}
.result-panel.fail .result-pct{color:var(--red-ink)}
.result-msg{font-size:15px;font-weight:800;margin-top:8px;color:var(--ink)}
.result-detail{font-size:12px;font-weight:600;color:var(--muted);margin-top:4px}
.quiz-end-actions{display:none;margin-top:16px;justify-content:center;flex-wrap:wrap;gap:8px}
.quiz-end-actions.show{display:flex}
.quiz-end-actions .btn{width:100%;max-width:260px}

/* ---------- Live ranking during quiz ---------- */
.quiz-live-ranking{
  position:absolute;top:10px;right:10px;background:linear-gradient(135deg,var(--primary),var(--primary-2));
  color:#fff;padding:8px 12px;border-radius:var(--radius);font-size:11px;font-weight:800;
  box-shadow:var(--shadow-primary);backface-visibility:hidden;
  animation:rankIn .4s ease forwards;
  z-index:10;
}
@keyframes rankIn{from{transform:scale(.8) rotate(-5deg) translateZ(-100px);opacity:0}to{transform:scale(1) rotate(0) translateZ(0);opacity:1}}
.rank-badge-small{
  width:32px;height:32px;flex:none;border-radius:50%;display:grid;place-items:center;
  font-size:13px;font-weight:900;background:var(--bg-soft);color:var(--muted);
  border:2px solid var(--border);margin-right:6px;
}
.rank-s{border-color:var(--green);color:var(--green-ink)}
.rank-a{border-color:#22c55e;color:#14b8a6}
.rank-b{border-color:var(--blue);color:#22d3ee}
.rank-c{border-color:var(--purple);color:#9f7aea}

/* ---------- Quiz Challenge (mode game) ---------- */
.quiz-box.game-box{position:relative;overflow:hidden}
.game-hud{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:14px;min-height:44px;
}
.hud-hearts{display:flex;gap:3px;font-size:21px;line-height:1}
.hud-heart{display:inline-block;transition:.25s}
.hud-heart.lost{filter:grayscale(1);opacity:.4;transform:scale(.82)}
.hud-hearts.hit .hud-heart.lost:last-of-type{animation:heartHit .5s ease}
@keyframes heartHit{0%{transform:scale(1.6)}55%{transform:scale(.65)}100%{transform:scale(.82)}}
.hud-score-wrap{display:flex;flex-direction:column;align-items:center;line-height:1.15}
.hud-score-label{font-size:9.5px;font-weight:800;letter-spacing:1.8px;color:var(--muted)}
.hud-score{font-size:26px;font-weight:900;color:var(--ink);font-variant-numeric:tabular-nums;text-shadow:0 2px 10px var(--primary-soft)}
.hud-score.bump{animation:scoreBump .35s ease}
@keyframes scoreBump{0%{transform:scale(1)}40%{transform:scale(1.25);color:var(--primary)}100%{transform:scale(1)}}
.hud-combo{
  flex:none;display:inline-flex;align-items:center;
  font-size:11.5px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,#f59e0b,#f43f5e);
  border-radius:var(--radius-pill);padding:5px 12px;
  box-shadow:0 4px 12px rgba(244,63,94,.35);
}
.hud-combo.pop{animation:pop .3s ease}

.game-timer{display:flex;align-items:center;gap:10px;margin-bottom:18px}
.game-timer[hidden]{display:none}
.game-timer-track{
  flex:1;height:10px;border-radius:99px;background:var(--bg-soft);
  border:1px solid var(--border);overflow:hidden;
}
.game-timer-bar{
  display:block;height:100%;width:100%;border-radius:99px;
  background:linear-gradient(90deg,var(--green),#2ecc71);
  transition:width .1s linear;
}
.game-timer-num{
  flex:none;min-width:42px;text-align:center;font-weight:900;font-size:15px;
  font-variant-numeric:tabular-nums;color:var(--ink);
  background:var(--bg-soft);border:1px solid var(--border);border-radius:99px;padding:3px 10px;
}
.game-timer.low .game-timer-bar{background:linear-gradient(90deg,#ef4444,#f97316);animation:pulse 1s ease infinite}
.game-timer.low .game-timer-num{color:#fff;background:var(--red-ink);border-color:var(--red-ink)}

.popup-layer{position:absolute;left:0;right:0;top:32%;height:0;pointer-events:none;z-index:6}
.game-pop{
  position:absolute;left:50%;white-space:nowrap;
  font-size:28px;font-weight:900;color:var(--green-ink);
  text-shadow:0 2px 0 rgba(255,255,255,.55),0 6px 18px var(--green-soft);
  animation:floatUp 1s ease forwards;
}
.game-pop.bad{color:var(--red-ink);font-size:32px;text-shadow:0 2px 0 rgba(255,255,255,.55),0 6px 18px var(--red-soft)}
@keyframes floatUp{
  0%{opacity:0;transform:translate(-50%,14px) scale(.7)}
  20%{opacity:1;transform:translate(-50%,-4px) scale(1.18)}
  70%{opacity:1;transform:translate(-50%,-30px) scale(1)}
  100%{opacity:0;transform:translate(-50%,-64px) scale(.95)}
}

/* Layar mulai game */
.game-start{padding:4px 0 6px}
.gs-best{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px}
.gs-best-card{
  background:var(--bg-soft);border:1.5px dashed var(--border-strong,var(--border));
  border-radius:var(--radius);padding:13px 10px;display:flex;flex-direction:column;gap:3px;
}
.gs-best-card small{font-size:10.5px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--muted)}
.gs-best-card strong{font-size:21px;font-weight:900;color:var(--ink);font-variant-numeric:tabular-nums}
.gs-rules{
  list-style:none;margin:0 auto 20px;padding:0;max-width:360px;
  display:flex;flex-direction:column;gap:9px;text-align:left;
}
.gs-rules li{display:flex;gap:10px;align-items:flex-start;font-size:13px;font-weight:600;color:var(--ink-soft);line-height:1.5}
.gs-rules li span{flex:none;line-height:1.3}
.gs-play{
  width:100%;max-width:320px;padding:15px 22px;border-radius:18px;
  font-size:17px;font-weight:900;letter-spacing:.8px;
  animation:pulse 2.4s ease infinite;
}

/* Hasil akhir game */
.result-panel.game-panel{max-width:320px;padding:24px 18px 20px}
.rank-badge{
  width:84px;height:84px;margin:-58px auto 10px;border-radius:26px;
  display:grid;place-items:center;font-size:42px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,#94a3b8,#64748b);
  box-shadow:0 12px 28px rgba(0,0,0,.22),inset 0 -3px 0 rgba(0,0,0,.15);
  animation:rankIn .6s cubic-bezier(.2,1.5,.4,1) backwards .05s;
}
@keyframes rankIn{from{transform:scale(.25) rotate(-14deg);opacity:0}}
.rank-badge.rank-s{background:linear-gradient(135deg,#f59e0b,#f43f5e)}
.rank-badge.rank-a{background:linear-gradient(135deg,#22c55e,#14b8a6)}
.rank-badge.rank-b{background:linear-gradient(135deg,#3f7af0,#22d3ee)}
.rank-badge.rank-c{background:linear-gradient(135deg,#f59e0b,#f97316)}
.result-final{display:flex;flex-direction:column;gap:1px;margin-top:2px}
.result-final small{font-size:10px;font-weight:800;letter-spacing:1.6px;color:var(--muted)}
.result-final strong{font-size:38px;font-weight:900;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums}
.result-panel .result-msg{margin-top:6px}
.record-banner{
  display:inline-flex;align-items:center;gap:8px;margin-top:12px;
  padding:7px 16px;border-radius:99px;font-size:13px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,#f59e0b,#f43f5e);
  box-shadow:0 6px 18px rgba(244,63,94,.35);
  animation:pop .5s ease .35s backwards;
}
.result-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px}
.rg-cell{background:var(--bg-soft);border-radius:var(--radius);padding:10px 6px;display:flex;flex-direction:column;gap:2px}
.rg-cell small{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
.rg-cell strong{font-size:17px;font-weight:900;color:var(--ink);font-variant-numeric:tabular-nums}
.gameover-tag{
  display:inline-block;font-size:10.5px;font-weight:900;letter-spacing:1.2px;
  color:#fff;background:var(--red-ink);border-radius:var(--radius-pill);
  padding:4px 13px;animation:pulse 1.2s ease infinite;
}
.fb-combo{color:var(--gold);font-weight:800}

/* ---------- Choukai (latihan mendengar) ---------- */
.ck-kanji{font-family:var(--font-jp);color:var(--primary);font-size:.72em}
.ck-list{display:flex;flex-direction:column;gap:10px}
.ck-card{
  display:flex;align-items:center;gap:14px;padding:14px 16px;text-align:left;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-sm);cursor:pointer;transition:.22s;color:var(--ink);width:100%;
  animation:cardIn .4s ease backwards;animation-delay:calc(var(--i,0)*40ms);
}
.ck-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:var(--border-strong)}
.ck-card:active{transform:scale(.98)}
.ck-num{
  flex:none;width:42px;height:42px;border-radius:13px;display:grid;place-items:center;
  font-family:var(--font-jp);font-weight:900;font-size:16px;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
}
.ck-card.done .ck-num{background:linear-gradient(135deg,var(--green),#2ecc71)}
.ck-meta{flex:1;min-width:0;display:flex;flex-direction:column}
.ck-meta strong{font-size:14px;font-weight:800}
.ck-meta small{font-size:11.5px;color:var(--muted);font-weight:600;margin-top:1px}
.ck-state{flex:none;font-size:16px;color:var(--green-ink)}
.ck-progress{display:flex;align-items:center;gap:12px;margin-top:14px;padding:0 4px;color:var(--muted);font-size:12px;font-weight:700}
.ck-progress .progress-track{flex:1}
.ck-mode{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:16px;padding:6px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-lg)}
.ck-mode-btn{border:none;background:transparent;padding:10px 6px;border-radius:var(--radius);font-weight:800;font-size:12px;color:var(--muted);cursor:pointer;transition:.2s;touch-action:manipulation;line-height:1.3}
.ck-mode-btn.active{background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;box-shadow:var(--shadow-primary)}
.ck-mode-btn:not(.active):hover{color:var(--ink)}
.ck-opts.tf{grid-template-columns:1fr 1fr;gap:10px}
.ck-opts.tf .qopt{justify-content:center;min-height:64px}
.ck-opts.tf .qopt-text{font-size:16px;font-weight:800}
.ck-scene{
  display:flex;align-items:center;justify-content:center;gap:12px;margin:0 auto 16px;
  padding:12px 18px;border-radius:var(--radius-lg);max-width:320px;
  background:linear-gradient(135deg,var(--primary-soft),transparent 70%);
  border:1px dashed var(--border-strong);
}
.ck-scene-e{font-size:40px;line-height:1;filter:drop-shadow(0 4px 8px rgba(0,0,0,.15))}
.ck-scene-l{font-size:13px;font-weight:800;color:var(--ink-soft)}
.ck-opts.pic-grid{grid-template-columns:1fr 1fr;gap:10px}
.qopt.pic{flex-direction:column;gap:10px;padding:14px 10px;text-align:center;justify-content:flex-start}
.qopt.pic .qopt-pic{width:64px;height:64px;border-radius:16px;display:grid;place-items:center;font-size:38px;line-height:1;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.qopt.pic .qopt-text{font-size:12.5px;font-weight:800;line-height:1.3}
.qopt.pic .mark{display:none}
.ck-player .ck-progress{margin-top:14px;margin-bottom:0;padding:0}
.ck-score .ck-score-emoji{font-size:58px;line-height:1.3}
.ck-score .ck-score-num{font-size:54px;font-weight:900;font-family:var(--font-jp);color:var(--ink);margin-top:6px}
.ck-score .ck-score-num small{font-size:.45em;color:var(--muted);font-weight:800}
.ck-player{
  max-width:560px;margin:0 auto;background:var(--card);border:1px solid var(--border);
  border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:28px 22px;text-align:center;
  animation:cardIn .35s ease backwards;
}
.ck-sub{font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--muted)}
.ck-play-wrap{position:relative;width:120px;height:120px;margin:18px auto 12px;display:grid;place-items:center}
.ck-play-btn{
  position:relative;z-index:2;width:120px;height:120px;border:none;border-radius:50%;cursor:pointer;
  display:grid;place-items:center;background:linear-gradient(135deg,var(--primary),var(--primary-2));
  color:#fff;box-shadow:var(--shadow-primary);transition:.2s;font-size:44px;line-height:1;touch-action:manipulation;
}
.ck-play-btn:hover{transform:scale(1.05)}
.ck-play-btn:active{transform:scale(.94)}
.ck-ring{position:absolute;inset:0;border-radius:50%;border:2px solid var(--primary);opacity:0;animation:ckRipple 2s ease infinite}
.ck-ring:nth-child(2){animation-delay:1s}
@keyframes ckRipple{0%{transform:scale(1);opacity:.5}100%{transform:scale(1.7);opacity:0}}
.ck-question{font-size:16px;font-weight:800;color:var(--ink);margin:0 0 16px;line-height:1.5}
.ck-opts{display:grid;gap:10px}
.ck-opts .qopt{font-size:14.5px}
.ck-result{margin-top:14px;min-height:26px;font-weight:800}
.ck-script{
  font-family:var(--font-jp);font-size:18px;line-height:1.8;color:var(--ink-soft);
  background:var(--bg-soft);border:1px dashed var(--border-strong);border-radius:var(--radius);
  padding:16px;margin-top:12px;text-align:left;
}
.ck-script[hidden]{display:none}
.ck-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:18px}
.ck-actions .btn{min-width:130px}

/* ---------- Bottom navigation (floating dock, mobile) ---------- */
.bottom-nav{
  position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(12px + env(safe-area-inset-bottom));
  z-index:45;display:none;
  width:calc(100% - 24px);max-width:520px;
  align-items:center;justify-content:space-between;gap:2px;
  background:rgba(255,255,255,.85);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.7);
  border-radius:24px;
  padding:8px;
  box-shadow:0 10px 30px rgba(32,38,52,.08),0 2px 8px rgba(32,38,52,.04);
  overflow-x:auto;scrollbar-width:none;
}
[data-theme="dark"] .bottom-nav{
  background:rgba(24,27,36,.82);
  border-color:rgba(255,255,255,.08);
  box-shadow:0 12px 32px rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.35);
}
.bottom-nav::-webkit-scrollbar{display:none}
.bnav-link{
  flex:1 1 0;min-width:54px;max-width:96px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:8px 4px;min-height:52px;border:none;background:transparent;cursor:pointer;
  color:var(--muted);font-size:10.5px;font-weight:700;border-radius:16px;
  transition:all .3s ease;position:relative;text-decoration:none;white-space:nowrap;
}
.bnav-link svg{color:var(--muted);transition:all .3s ease;width:22px;height:22px}
.bnav-link:hover{color:var(--ink)}
.bnav-link:active{transform:scale(.93)}
.bnav-link.active{
  color:var(--primary);background:var(--primary-soft);
  box-shadow:0 8px 18px -8px rgba(224,69,90,.5);
}
.bnav-link.active svg{color:var(--primary);transform:translateY(-1px)}
[data-theme="dark"] .bnav-link.active{box-shadow:0 8px 18px -8px rgba(255,92,109,.5)}

/* ---------- Menu Lainnya (bottom sheet) ---------- */
.sheet-overlay{
  position:fixed;inset:0;z-index:70;display:grid;align-items:end;justify-content:center;
  background:rgba(15,17,23,.5);backdrop-filter:blur(4px);
  -webkit-backdrop-filter:blur(4px);
  opacity:0;transition:opacity .25s ease;
}
.sheet-overlay.show{opacity:1}
.sheet-overlay[hidden]{display:none}
.more-sheet{
  width:calc(100vw - 28px);max-width:520px;
  margin:0 14px calc(88px + env(safe-area-inset-bottom));
  background:var(--card);border:1px solid var(--border);border-radius:24px;
  padding:18px 16px calc(18px + env(safe-area-inset-bottom));
  box-shadow:var(--shadow-lg);
  transform:translateY(28px);transition:transform .3s cubic-bezier(.22,.9,.3,1);
}
.sheet-overlay.show .more-sheet{transform:translateY(0)}
.more-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.more-title{font-size:14px;font-weight:800;color:var(--ink)}
.more-close{
  border:none;background:var(--bg-soft);color:var(--muted);
  width:34px;height:34px;border-radius:11px;font-size:19px;line-height:1;cursor:pointer;
  display:grid;place-items:center;transition:.2s;
}
.more-close:hover{background:var(--primary-soft);color:var(--primary)}
.more-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.more-item{
  display:flex;align-items:center;gap:12px;padding:13px 12px;text-align:left;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  cursor:pointer;color:var(--ink);transition:.2s;
}
.more-item:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-strong)}
.more-item:active{transform:scale(.97)}
.more-ico{width:42px;height:42px;flex:none;border-radius:13px;display:grid;place-items:center}
.more-meta{display:flex;flex-direction:column;min-width:0}
.more-meta strong{font-size:13.5px;font-weight:800;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.more-meta small{font-size:11px;color:var(--muted);font-weight:600}

/* ---------- Footer & toast ---------- */
footer{text-align:center;color:var(--muted);font-size:11.5px;font-weight:500;padding:28px 16px 44px}
.visitor-count{display:inline-block;margin-top:6px;padding:4px 12px;border-radius:999px;background:var(--card);border:1px solid var(--border);font-weight:700;color:var(--ink);font-size:12px}
.toast{
  position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(90px);
  background:var(--ink);color:var(--bg);padding:12px 22px;border-radius:var(--radius-pill);
  font-size:13px;font-weight:700;opacity:0;transition:.35s cubic-bezier(.2,.8,.3,1);
  z-index:60;box-shadow:var(--shadow-lg);pointer-events:none;white-space:nowrap;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---------- Header ring ---------- */
.header-ring{
  position:relative;width:44px;height:44px;border-radius:14px;display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--border);background:var(--card);color:var(--ink);transition:.2s;box-shadow:var(--shadow-sm);
}
.header-ring:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-strong)}
.hring-bg{stroke:var(--track);stroke-width:5}
.hring-fg{stroke:url(#ringGrad);stroke-width:5;stroke-linecap:round;transition:stroke-dashoffset .8s cubic-bezier(.22,.9,.3,1)}
.hring-txt{position:absolute;font-size:8.5px;font-weight:800;color:var(--primary);font-variant-numeric:tabular-nums}

/* ---------- Splash ---------- */
.splash{
  position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  background:linear-gradient(160deg,var(--primary),var(--primary-2));
  transition:opacity .5s ease,visibility .5s ease;
}
.splash.hide{opacity:0;visibility:hidden}
.splash[hidden]{display:none}
.splash-logo{
  font-family:var(--font-jp);font-weight:900;font-size:72px;color:#fff;line-height:1;
  width:110px;height:110px;border-radius:32px;display:grid;place-items:center;
  background:rgba(255,255,255,.14);box-shadow:0 18px 40px -12px rgba(0,0,0,.35);
  animation:splashPop .7s cubic-bezier(.2,.9,.3,1.3) both;
}
.splash-txt{font-size:17px;font-weight:800;color:#fff;letter-spacing:1px}
.splash-txt span{opacity:.85}
.splash-bar{width:140px;height:4px;border-radius:999px;background:rgba(255,255,255,.25);overflow:hidden}
.splash-bar i{display:block;height:100%;width:40%;border-radius:999px;background:#fff;animation:splashSlide 1s ease infinite}
@keyframes splashPop{from{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes splashSlide{from{transform:translateX(-110%)}to{transform:translateX(360%)}}

/* ---------- Spotlight (Kanji Hari Ini) ---------- */
.spotlight{margin:0 0 22px}
.spotlight-card{
  position:relative;overflow:hidden;display:flex;align-items:center;gap:22px;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:24px 22px;box-shadow:var(--shadow-sm);transition:.25s;
}
.spotlight-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.spotlight-glow{
  flex:none;font-family:var(--font-jp);font-weight:900;font-size:120px;line-height:1;
  background:linear-gradient(135deg,var(--da),var(--db));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  opacity:.18;position:absolute;right:-6px;bottom:-26px;pointer-events:none;user-select:none;
}
.spotlight-meta{position:relative;z-index:1;flex:1;min-width:0}
.spotlight-tag{display:inline-flex;font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,var(--da),var(--db));border-radius:var(--radius-pill);padding:4px 12px;box-shadow:0 8px 16px -8px color-mix(in srgb,var(--da) 70%,transparent)}
.spotlight-kanji{font-family:var(--font-jp);font-size:64px;font-weight:900;line-height:1.15;color:var(--ink);margin-top:10px}
.spotlight-read{font-family:var(--font-jp);font-size:20px;font-weight:700;color:var(--muted);letter-spacing:1px}
.spotlight-mean{font-size:14px;font-weight:700;color:var(--ink);margin-top:4px}
.spotlight-mean em{font-style:normal;color:var(--muted);font-weight:600;text-transform:capitalize}
.spotlight-btn{margin-top:14px;border:none;cursor:pointer;color:#fff;font-weight:800;font-size:13px;
  background:linear-gradient(135deg,var(--da),var(--db));border-radius:var(--radius-pill);padding:10px 20px;transition:.2s;
  box-shadow:0 10px 20px -10px color-mix(in srgb,var(--da) 70%,transparent)}
.spotlight-btn:hover{transform:translateY(-2px);box-shadow:0 14px 26px -10px color-mix(in srgb,var(--da) 80%,transparent)}
.spotlight-btn:active{transform:scale(.96)}

/* ---------- Mode fokus flashcard ---------- */
.flash-focus-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px}
.flash-focus-btn.active{background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;border-color:transparent;box-shadow:var(--shadow-primary)}
body.focus-mode .site-header,
body.focus-mode .bottom-nav,
body.focus-mode .sub-bar,
body.focus-mode .view-head,
body.focus-mode footer,
body.focus-mode .offline-badge{display:none!important}
body.focus-mode main{padding-bottom:0!important}
body.focus-mode .flash-scene{max-width:820px;margin-top:6vh}
body.focus-mode .flash-card{height:min(78vh,620px)}
body.focus-mode .flash-nav{max-width:820px}
body.focus-mode .flash-progress{max-width:820px}

/* ---------- Skeleton ---------- */
.card.skeleton-card{cursor:default;pointer-events:none;gap:12px;justify-content:center;min-height:220px}
.card.skeleton-card:hover{transform:none;box-shadow:var(--shadow-sm)}
.card.skeleton-card:hover::before{opacity:0}
.sk{display:block;border-radius:10px;background:linear-gradient(90deg,var(--bg-soft) 25%,var(--track) 37%,var(--bg-soft) 63%);background-size:400% 100%;animation:shimmer 1.2s ease infinite}
.sk-kanji{width:64px;height:52px;border-radius:14px}
.sk-line{width:80%;height:14px}
.sk-line.short{width:55%;height:11px}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}

/* ---------- Stagger masuk ---------- */
.card,.day-chip,.progress-row{animation:cardIn .42s ease backwards;animation-delay:calc(var(--i,0)*45ms)}
@keyframes cardIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}

/* ---------- Mascot quiz ---------- */
.quiz-mascot{position:absolute;top:14px;right:14px;font-size:34px;line-height:1;transition:transform .25s;user-select:none}
.quiz-mascot.happy{animation:mascotHappy .5s ease}
.quiz-mascot.sad{animation:mascotSad .45s ease}
.quiz-mascot.ok{animation:mascotOk .5s ease}
@keyframes mascotHappy{0%{transform:scale(.6) rotate(-8deg)}55%{transform:scale(1.25) rotate(6deg)}100%{transform:scale(1)}}
@keyframes mascotSad{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}
@keyframes mascotOk{0%{transform:translateY(0)}50%{transform:translateY(-6px)}100%{transform:translateY(0)}}

/* ---------- Confetti ---------- */
.confetti-canvas{position:fixed;inset:0;z-index:95;pointer-events:none}

/* ---------- Heatmap ---------- */
.progress-heatmap{margin:18px 0 22px}
.heatmap{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;box-shadow:var(--shadow-sm)}
.heatmap-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.heatmap-title{font-size:12px;font-weight:800;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.6px}
.heatmap-scale{display:flex;align-items:center;gap:3px;font-size:10px;font-weight:600;color:var(--muted)}
.heatmap-scale i{width:10px;height:10px;border-radius:3px}
.heatmap-scroll{overflow-x:auto;scrollbar-width:none}
.heatmap-scroll::-webkit-scrollbar{display:none}
.hm-month-row{display:grid;grid-template-columns:repeat(16,minmax(16px,1fr));gap:3px;margin-left:30px;margin-bottom:4px;min-width:320px}
.hm-month{font-size:9px;font-weight:700;color:var(--muted);white-space:nowrap;text-align:left}
.hm-body{display:flex;gap:3px;min-width:320px}
.hm-days{display:flex;flex-direction:column;gap:3px;margin-right:2px}
.hm-days span{height:16px;font-size:8.5px;font-weight:700;color:var(--muted);display:grid;place-items:center}
.hm-cols{display:flex;gap:3px}
.hm-col{display:flex;flex-direction:column;gap:3px}
.hm-col i{width:16px;height:16px;border-radius:4px;background:var(--track);cursor:default}
.hm-col i.today{outline:2px solid var(--primary);outline-offset:1px}
.hm-col i.c1{background:color-mix(in srgb,var(--primary) 30%,var(--track))}
.hm-col i.c2{background:color-mix(in srgb,var(--primary) 55%,var(--track))}
.hm-col i.c3{background:color-mix(in srgb,var(--primary) 78%,var(--track))}
.hm-col i.c4{background:var(--primary)}

/* ---------- Glassmorphism premium ---------- */
.site-header{backdrop-filter:blur(20px) saturate(1.6);-webkit-backdrop-filter:blur(20px) saturate(1.6)}
.bottom-nav{backdrop-filter:blur(20px) saturate(1.7);-webkit-backdrop-filter:blur(20px) saturate(1.7);background:linear-gradient(180deg,rgba(255,255,255,.88),rgba(255,255,255,.72))}
[data-theme="dark"] .bottom-nav{background:linear-gradient(180deg,rgba(26,29,39,.9),rgba(26,29,39,.78))}
.stat-card,.quick-card{position:relative}
.stat-card::after,.quick-card::after{content:'';position:absolute;left:0;top:0;right:0;height:1px;border-radius:inherit;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent);pointer-events:none}
[data-theme="dark"] .stat-card::after,[data-theme="dark"] .quick-card::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent)}

/* ---------- Responsive ---------- */
@media(min-width:768px){
  .main-nav{display:flex}
}
@media(max-width:767px){
  .main-nav{display:none}
  .bottom-nav{display:flex}
  main{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
  footer{padding-bottom:calc(104px + env(safe-area-inset-bottom))}
  .toast{bottom:calc(88px + env(safe-area-inset-bottom))}
  .update-banner{bottom:calc(78px + env(safe-area-inset-bottom))}
}
@media(max-width:480px){
  .install-txt-full{display:none}
  .install-btn{padding:10px 13px;font-size:12.5px}
}
@media(max-width:680px){
  .stats-dash{grid-template-columns:1fr 1fr;gap:10px}
  .stat-progress{grid-column:1/-1}
  .stat-value{font-size:21px}
  .brand-title{font-size:17px}
  .hero{padding:22px 20px}
  .hero-title{font-size:23px}
  .hero-mark{font-size:52px;padding:8px 12px}
  .quick-grid{grid-template-columns:1fr 1fr}
  .quick-card{padding:14px}
  .progress-summary{grid-template-columns:1fr 1fr}
  .progress-summary .stat-progress{grid-column:1/-1}
  .flash-card{height:330px}
  .flash-kanji{font-size:96px}
  .flash-read{font-size:26px}
  .flash-mean{font-size:19px}
  .quiz-q{font-size:64px}
  .card .kanji{font-size:38px}
  .nav-btn{width:46px;height:46px}
}
@media(max-width:400px){
  .flash-kanji{font-size:82px}
  .flash-read{font-size:22px}
  .flash-center-actions{flex-direction:column}
  .bnav-link{font-size:10px}
  .quick-grid{grid-template-columns:1fr}
  .hero-sub{font-size:12px}
  .more-grid{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
/* ---------- Quiz: pengaturan sesi ---------- */
.gs-cfg{
  display:flex;flex-direction:column;gap:13px;
  margin-bottom:18px;text-align:left;
}
.gs-cfg-row{display:flex;flex-direction:column;gap:7px}
.gs-cfg-label{
  font-size:10.5px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;
  color:var(--muted);display:flex;align-items:center;gap:6px;
}
.gs-cfg-label::after{content:'';flex:1;height:1px;background:var(--border)}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg-btn{
  border:1px solid var(--border);background:var(--card);color:var(--ink-soft);
  font-family:inherit;font-size:12px;font-weight:700;padding:7px 13px;
  border-radius:var(--radius-pill);cursor:pointer;transition:.18s ease;
  display:inline-flex;align-items:center;gap:5px;line-height:1.2;
}
.seg-btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary);transform:translateY(-1px)}
.seg-btn.active{
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  border-color:transparent;color:#fff;
  box-shadow:0 5px 14px -5px var(--primary-soft),0 2px 6px -3px var(--primary-soft);
}
.seg-btn:disabled{opacity:.42;cursor:not-allowed}

/* ---------- Quiz: panel kata sulit ---------- */
.miss-panel{margin-top:14px;text-align:left;border-top:1px dashed var(--border-strong);padding-top:13px}
.miss-title{
  font-size:11px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;
  color:var(--red-ink);margin-bottom:9px;display:flex;align-items:center;gap:6px;
}
.miss-chips{display:flex;flex-wrap:wrap;gap:6px;max-height:168px;overflow:auto;padding-right:2px}
.miss-chip{
  background:var(--bg-soft);border:1px solid var(--border-strong);
  border-radius:10px;padding:6px 10px;font-size:11.5px;line-height:1.4;
}
.miss-chip .jp{font-family:var(--font-jp);font-size:15px;color:var(--ink);margin-right:4px}
.miss-chip small{display:block;color:var(--muted);font-weight:600}
.miss-chip.more{display:inline-flex;align-items:center;color:var(--muted);font-weight:700}
.miss-hint{display:block;margin-top:9px;font-size:11px;color:var(--muted);line-height:1.5}

/* ---------- Quiz: power-up ---------- */
.game-hud{flex-wrap:wrap}
.hud-powerups{
  flex-basis:100%;display:flex;justify-content:center;gap:10px;margin-top:8px;
}
.pw-btn{
  width:42px;height:34px;border-radius:var(--radius-pill);
  border:1px solid var(--border-strong);background:var(--card);color:var(--ink);
  font-size:15px;line-height:1;cursor:pointer;transition:.18s ease;
  display:inline-flex;align-items:center;justify-content:center;
  box-shadow:var(--shadow-sm);
}
.pw-btn:hover:not(:disabled){transform:translateY(-2px) scale(1.06);border-color:var(--primary)}
.pw-btn:active:not(:disabled){transform:scale(.94)}
.pw-btn.used,.pw-btn:disabled{opacity:.28;filter:grayscale(1);cursor:not-allowed;box-shadow:none}
.qopt.dim{opacity:.25;text-decoration:line-through;pointer-events:none}

/* ---------- Quiz: XP & level ---------- */
.xp-row{
  display:flex;align-items:center;gap:10px;
  margin:-4px 0 16px;text-align:left;
}
.xp-lv{
  flex:none;font-weight:900;font-size:12px;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  padding:6px 12px;border-radius:var(--radius-pill);
  box-shadow:0 5px 14px -5px var(--primary-soft);
}
.xp-bar-wrap{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}
.xp-top{display:flex;justify-content:space-between;font-size:10px;font-weight:700;color:var(--muted)}
.progress-track .xp-fill{
  display:block;height:100%;border-radius:99px;width:0;
  background:linear-gradient(90deg,var(--primary),var(--primary-2));
}
.xp-gain-row{
  display:flex;gap:8px;justify-content:center;align-items:center;
  margin-top:11px;flex-wrap:wrap;
}
.xp-pill{
  font-weight:900;font-size:11.5px;color:#fff;
  background:linear-gradient(135deg,#6366f1,#8b5cf6);
  padding:5px 13px;border-radius:var(--radius-pill);
  box-shadow:0 5px 14px -5px rgba(99,102,241,.55);
}
.lvlup-banner{
  font-weight:900;font-size:11.5px;color:#fff;
  background:linear-gradient(135deg,#f59e0b,#f43f5e);
  padding:5px 13px;border-radius:var(--radius-pill);
  box-shadow:0 5px 14px -5px rgba(244,63,94,.5);
  animation:pop .45s ease;
}

/* ---------- Quiz: riwayat sesi ---------- */
.gs-hist{text-align:left;margin-bottom:16px}
.hist-chips{display:flex;gap:6px;flex-wrap:wrap}
.hist-chip{
  background:var(--bg-soft);border:1px solid var(--border);
  border-radius:var(--radius-pill);padding:5px 11px;
  font-size:11px;font-weight:700;color:var(--ink-soft);
  font-variant-numeric:tabular-nums;
}
.hist-chip b{color:var(--ink)}
.hist-chip small{color:var(--muted);margin-left:5px;font-weight:600}

/* ---------- Bareng (Multiplayer) ---------- */
.mp-landing,.mp-form{max-width:420px;margin:0 auto;display:flex;flex-direction:column;gap:12px;text-align:center}
.mp-hero{text-align:center;padding:8px 0 4px}
.mp-hero-ico{font-size:44px;line-height:1;filter:drop-shadow(0 6px 14px var(--primary-soft))}
.mp-hero h3{margin:10px 0 4px;font-size:21px;font-weight:900;color:var(--ink)}
.mp-hero p{font-size:13px;color:var(--muted);font-weight:600;line-height:1.55}
.mp-big-btn{width:100%;padding:15px 18px;font-size:15.5px;border-radius:var(--radius-lg)}
.mp-back{align-self:flex-start;border:none;background:none;color:var(--primary);font-weight:800;font-size:13.5px;cursor:pointer;padding:2px 0}
.mp-label{font-size:10.5px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--muted);text-align:left;margin-top:6px}
.mp-input{
  width:100%;padding:13px 16px;font:inherit;font-weight:700;color:var(--ink);
  background:var(--card);border:1.5px solid var(--border-strong);border-radius:var(--radius-lg);
  outline:none;transition:.2s;
}
.mp-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.mp-pin-in{font-size:26px;font-weight:900;letter-spacing:10px;text-align:center;font-variant-numeric:tabular-nums}
.mp-err{color:var(--red-ink);font-size:12.5px;font-weight:700;margin:-4px 0}

.mp-center{display:flex;flex-direction:column;gap:14px;justify-content:center;align-items:center;min-height:280px}
.mp-pin-loading{font-weight:700;color:var(--muted)}

.mp-lobby{max-width:460px;margin:0 auto;text-align:center;display:flex;flex-direction:column;gap:12px}
.mp-lobby-sub{font-weight:700;color:var(--muted);font-size:13px;margin-bottom:-4px}
.mp-pin-box{
  display:flex;justify-content:center;gap:7px;
}
.mp-pin-box span{
  width:46px;height:58px;display:inline-flex;align-items:center;justify-content:center;
  font-size:30px;font-weight:900;font-variant-numeric:tabular-nums;color:#fff;
  background:linear-gradient(160deg,var(--primary),var(--primary-2));
  border-radius:14px;box-shadow:0 8px 20px -8px var(--primary-soft);
}
.mp-copy{width:fit-content;margin:0 auto}
.mp-lobby-meta{font-size:12px;font-weight:700;color:var(--muted)}
.mp-players-head{font-size:10.5px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--muted);text-align:left;margin-top:4px}
.mp-players{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}
.mp-player-chip{
  background:var(--card);border:1px solid var(--border-strong);
  padding:6px 11px;border-radius:var(--radius-pill);font-size:12.5px;font-weight:700;color:var(--ink);
  display:inline-flex;align-items:center;gap:4px;
}
.mp-player-chip.me{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary-soft)}
.mp-player-chip small{color:var(--muted);font-weight:600}
.mp-waiting{display:flex;align-items:center;justify-content:center;gap:8px;color:var(--muted);font-weight:700;font-size:13px}
.spin{width:14px;height:14px;border-radius:50%;border:2.5px solid var(--border-strong);border-top-color:var(--primary);animation:spin .8s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}
.mp-leave{width:100%;color:var(--red-ink)}

.mp-game{max-width:480px;margin:0 auto;display:flex;flex-direction:column;gap:13px}
.mp-game-top{display:flex;align-items:center;gap:8px}
.mp-qnum{font-size:12.5px;font-weight:800;color:var(--muted)}
.mp-live-dot{width:8px;height:8px;border-radius:50%;background:#ef4444;margin-left:auto;animation:pulse 1.1s ease infinite}
.mp-live-txt{font-size:11px;font-weight:900;letter-spacing:1.5px;color:#ef4444}
.mp-timer-track{height:9px;border-radius:99px;background:var(--bg-soft);border:1px solid var(--border);overflow:hidden}
#mpTimerBar{display:block;height:100%;width:100%;background:linear-gradient(90deg,var(--green),#2ecc71);transition:width .25s linear}
#mpTimerBar.low{background:linear-gradient(90deg,#ef4444,#f97316)}

.mp-q-box{
  background:var(--card);border:1px solid var(--border-strong);border-radius:var(--radius-lg);
  padding:22px 16px;text-align:center;box-shadow:var(--shadow-sm);
}
.mp-q-text{font-family:var(--font-jp);font-size:42px;font-weight:900;color:var(--ink);line-height:1.2}
.mp-q-text.jp{letter-spacing:1px}
.mp-q-read{font-size:15px;color:var(--muted);font-weight:600;margin-top:6px}
.mp-speak{
  border:none;background:var(--bg-soft);color:var(--primary);font:inherit;font-weight:800;
  padding:9px 18px;border-radius:var(--radius-pill);cursor:pointer;margin-bottom:8px;
}
.mp-q-answer{font-size:24px;font-weight:900;color:var(--green-ink)}
.mp-q-answer .jp{font-family:var(--font-jp)}

.mp-opts{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.mopt{
  position:relative;display:flex;align-items:center;gap:10px;
  min-height:62px;padding:12px 14px;border:none;border-radius:var(--radius-lg);
  color:#fff;font-family:inherit;cursor:pointer;text-align:left;
  box-shadow:0 6px 16px -8px rgba(0,0,0,.45);transition:transform .15s ease,opacity .2s;
}
.mopt:not(:disabled):hover{transform:translateY(-2px) scale(1.015)}
.mopt:not(:disabled):active{transform:scale(.97)}
.mopt.c0{background:linear-gradient(140deg,#ef4444,#b91c1c)}
.mopt.c1{background:linear-gradient(140deg,#3b82f6,#1d4ed8)}
.mopt.c2{background:linear-gradient(140deg,#f59e0b,#c2410c)}
.mopt.c3{background:linear-gradient(140deg,#10b981,#047857)}
.mopt.mine{outline:3px solid var(--ink);outline-offset:-3px}
.mopt:disabled{cursor:default;opacity:.92}
.mopt-letter{
  flex:none;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.25);border-radius:8px;font-weight:900;font-size:13px;color:#fff;
}
.mopt-text{font-size:15.5px;font-weight:800;line-height:1.3;word-break:break-word}
.mopt-text.jp{font-family:var(--font-jp);font-size:19px}

.mp-status{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;font-weight:700;color:var(--muted)}
.mp-ok{color:var(--green-ink)}
.mp-streak{color:#ea580c}

.mp-mini-lb-wrap{border:1px dashed var(--border-strong);border-radius:var(--radius-lg);padding:10px 14px}
.mp-mini-lb-wrap summary{cursor:pointer;font-weight:800;font-size:12.5px;color:var(--ink-soft)}
.mp-mini-lb{display:flex;flex-direction:column;gap:5px;margin-top:8px}
.lb-row{
  display:flex;align-items:center;gap:9px;background:var(--bg-soft);
  border-radius:10px;padding:7px 11px;font-size:13px;
}
.lb-row.me{outline:2px solid var(--primary);background:var(--primary-soft)}
.lb-row.gain{background:linear-gradient(90deg,var(--green-soft),transparent)}
.lb-rank{flex:none;width:24px;font-weight:900;color:var(--muted)}
.lb-name{flex:1;font-weight:700;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-name small{color:var(--green-ink);margin-left:6px;font-weight:800}
.lb-score{font-weight:900;font-variant-numeric:tabular-nums;color:var(--ink)}
.mp-mini-lb.big .lb-row{padding:10px 13px;font-size:14px}
.mp-lb-title{font-size:13px;font-weight:900;text-align:center;color:var(--ink);margin-top:4px}
.mp-reveal-head{font-size:19px;font-weight:900;text-align:center;color:var(--ink)}

.mp-end{max-width:460px;margin:0 auto;text-align:center;display:flex;flex-direction:column;gap:16px}
.mp-end-title{font-size:22px;font-weight:900;color:var(--ink)}
.podium{display:flex;align-items:flex-end;justify-content:center;gap:10px}
.pod-col{display:flex;flex-direction:column;align-items:center;gap:4px;width:96px}
.pod-medal{font-size:30px;line-height:1}
.pod-name{font-size:13px;font-weight:800;color:var(--ink);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pod-score{font-size:12px;font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums}
.pod-bar{width:100%;border-radius:12px 12px 0 0;background:linear-gradient(180deg,var(--primary),var(--primary-2));box-shadow:inset 0 3px 8px rgba(255,255,255,.28)}
.pod-bar.h1{height:92px}
.pod-bar.h2{height:64px;opacity:.82}
.pod-bar.h3{height:44px;opacity:.66}

/* --- Layar soal Bareng: topbar, jam ring, live, reveal --- */
.mp-topbar{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mp-qnum b{color:var(--ink);font-size:16px}
.mp-clock{position:relative;width:86px;height:86px;flex:none}
.mp-clock svg{transform:rotate(-90deg)}
.mc-bg{fill:none;stroke:var(--bg-soft);stroke-width:8}
.mc-fg{fill:none;stroke:var(--primary);stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset .25s linear}
.mc-txt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.15}
.mc-txt small{font-size:7.5px;font-weight:900;letter-spacing:1.8px;color:var(--muted)}
.mc-txt b{font-size:17px;font-weight:900;color:var(--ink);font-variant-numeric:tabular-nums}
.mp-clock.mid .mc-fg{stroke:#f59e0b}
.mp-clock.danger .mc-fg{stroke:#ef4444}
.mp-clock.danger .mc-txt b{color:#ef4444;animation:pulse 1s ease infinite}
.mp-live{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:900;letter-spacing:1.5px;color:#ef4444}
.mp-live i{width:8px;height:8px;border-radius:50%;background:#ef4444;animation:pulse 1.1s ease infinite}
.mp-count{font-variant-numeric:tabular-nums}
.mp-q-inner{display:flex;flex-direction:column;align-items:center;gap:6px}
.mp-q-box.anim-in{animation:qIn3d .5s cubic-bezier(.2,.9,.35,1.35)}
.mopt.opt-enter{animation:optIn .45s cubic-bezier(.2,.85,.35,1.2) backwards}
.mp-reveal-burst{
  text-align:center;font-size:16.5px;font-weight:900;padding:12px 14px;border-radius:var(--radius-lg);
  background:var(--bg-soft);border:1.5px dashed var(--border-strong);color:var(--muted);
  animation:pop .35s ease;
}
.mp-reveal-burst.good{
  color:#fff;background:linear-gradient(135deg,#10b981,#059669);
  border-color:transparent;box-shadow:0 10px 26px -10px rgba(16,185,129,.55);
}
.mp-reveal-cap{font-size:10.5px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--muted)}
.mp-skipnow{width:100%}

@media(max-width:430px){
  .mp-opts{grid-template-columns:1fr}
  .mp-pin-box span{width:40px;height:50px;font-size:25px}
  .mp-clock,.mp-clock svg{width:68px;height:68px}
  .mc-txt b{font-size:14px}
}

/* ---------- Koin & misi ---------- */
.coin-chip{
  flex:none;display:inline-flex;align-items:center;gap:6px;
  background:var(--bg-soft);border:1px solid var(--border-strong);
  border-radius:var(--radius-pill);padding:6px 12px 6px 7px;
}
.coin-chip b{font-size:13px;font-weight:900;color:var(--ink);font-variant-numeric:tabular-nums}
.coin-3d{display:inline-block;font-size:16px;animation:coinSpin 2.6s ease-in-out infinite;transform-style:preserve-3d}
@keyframes coinSpin{
  0%,100%{transform:perspective(300px) rotateY(0)}
  50%{transform:perspective(300px) rotateY(180deg)}
}
.coin-pill{
  font-weight:900;font-size:11.5px;color:#92400e;
  background:linear-gradient(135deg,#fde68a,#f59e0b);
  padding:5px 13px;border-radius:var(--radius-pill);
  box-shadow:0 5px 14px -5px rgba(245,158,11,.55);
}

.quest-panel{
  border:1.5px solid transparent;border-radius:var(--radius-lg);
  background:linear-gradient(var(--card),var(--card)) padding-box,
    linear-gradient(120deg,var(--primary),#8b5cf6,#f59e0b) border-box;
  padding:13px 14px;margin-bottom:16px;text-align:left;
  box-shadow:0 10px 26px -14px var(--primary-soft);
}
.qp-title{font-size:12px;font-weight:900;letter-spacing:.8px;text-transform:uppercase;color:var(--primary);margin-bottom:10px}
.quest-row{
  display:flex;align-items:center;gap:10px;padding:7px 0;
}
.quest-row+.quest-row{border-top:1px dashed var(--border)}
.quest-row.ready{background:linear-gradient(90deg,rgba(245,158,11,.09),transparent);border-radius:10px;padding-left:8px;padding-right:8px}
.quest-row.done{opacity:.55}
.q-ico{flex:none;font-size:17px}
.q-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.q-label{font-size:12px;font-weight:700;color:var(--ink)}
.q-bar{height:6px;border-radius:99px;background:var(--bg-soft);overflow:hidden}
.q-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--primary),#8b5cf6);transition:width .5s ease}
.q-prog{flex:none;font-size:11px;font-weight:800;color:var(--muted);font-variant-numeric:tabular-nums}
.q-reward{flex:none;font-size:11px;font-weight:800;color:#b45309}
.q-claim{
  flex:none;border:none;font-family:inherit;font-size:11.5px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,#f59e0b,#f43f5e);
  padding:6px 12px;border-radius:var(--radius-pill);cursor:pointer;
  animation:pop 2s ease infinite;box-shadow:0 5px 14px -5px rgba(244,63,94,.6);
}

/* ---------- Toko item ---------- */
.shop-strip{text-align:left;margin-bottom:16px}
.shop-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px}
.shop-card{
  display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:12px 8px;transition:.2s;
}
.shop-card:hover{transform:translateY(-3px) rotateX(6deg);border-color:var(--primary);box-shadow:var(--shadow-md)}
.sh-ico{font-size:26px;line-height:1;filter:drop-shadow(0 4px 8px rgba(0,0,0,.15))}
.sh-name{font-size:11.5px;font-weight:800;color:var(--ink);line-height:1.25}
.sh-name small{display:block;font-size:9.5px;font-weight:600;color:var(--muted);margin-top:2px}
.sh-buy{
  border:none;font-family:inherit;font-size:11px;font-weight:900;color:#fff;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  padding:6px 12px;border-radius:var(--radius-pill);cursor:pointer;
}
.sh-buy small{display:block;font-size:9px;opacity:.85;font-weight:700}
.sh-equip{
  width:100%;border:1px dashed var(--border-strong);background:transparent;
  font-family:inherit;font-size:10.5px;font-weight:800;color:var(--muted);
  padding:4px 6px;border-radius:var(--radius-pill);cursor:pointer;
}
.sh-equip.on{border-style:solid;border-color:var(--green);color:var(--green-ink);background:var(--green-soft)}

/* ---------- Sprint clock & feedback cepat ---------- */
.hud-extra{flex:none;display:flex;align-items:center}
.sprint-clock{
  font-weight:900;font-size:21px;color:var(--ink);font-variant-numeric:tabular-nums;
  background:var(--bg-soft);border:1.5px solid var(--border-strong);
  border-radius:var(--radius-pill);padding:5px 14px;line-height:1.1;text-align:center;
}
.sprint-clock small{display:block;font-size:8px;font-weight:800;letter-spacing:1.6px;color:var(--muted)}
.sprint-clock.danger{color:#fff;background:var(--red-ink);border-color:var(--red-ink);animation:pulse 1s ease infinite}
.sprint-clock.danger small{color:rgba(255,255,255,.75)}
.sprint-clock.shake{animation:shakeWrong .45s ease}
@keyframes shakeWrong{
  0%,100%{transform:translateX(0)}
  20%{transform:translateX(-6px)}40%{transform:translateX(6px)}
  60%{transform:translateX(-4px)}80%{transform:translateX(4px)}
}
.freeze-btn{background:linear-gradient(135deg,#93c5fd,#3b82f6);border:none;width:auto;padding:0 14px;font-size:13px;font-weight:900;color:#fff}

.fb-row{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center}
.fb-skip{
  border:none;font-family:inherit;font-size:12px;font-weight:900;color:var(--primary);
  background:var(--primary-soft);padding:7px 14px;border-radius:var(--radius-pill);
  cursor:pointer;transition:.15s;animation:pop .3s ease;
}
.fb-skip:hover{transform:translateY(-1px)}

/* ---------- Animasi 3D soal ---------- */
.quiz-q-wrap.anim-in .quiz-q{
  animation:qIn3d .5s cubic-bezier(.2,.9,.35,1.35);
  transform-style:preserve-3d;
}
@keyframes qIn3d{
  0%{opacity:0;transform:perspective(700px) rotateX(28deg) translateY(18px) scale(.86)}
  100%{opacity:1;transform:perspective(700px) rotateX(0) translateY(0) scale(1)}
}
.qopt.opt-enter{animation:optIn .45s cubic-bezier(.2,.85,.35,1.2) backwards}
@keyframes optIn{
  0%{opacity:0;transform:perspective(600px) translateZ(-60px) translateX(-24px) rotateY(-8deg)}
  100%{opacity:1;transform:perspective(600px) translateZ(0) translateX(0) rotateY(0)}
}
.gs-play.gs-sprint{
  background:linear-gradient(135deg,#f59e0b,#ef4444);
  box-shadow:0 10px 26px -10px rgba(239,68,68,.65);
  animation:pulse 1.6s ease infinite;
}
@media(prefers-reduced-motion:reduce){
  .coin-3d,.q-claim,.gs-play.gs-sprint,.sprint-clock.danger{animation:none!important}
}

/* ============ MP LOBBY ENHANCEMENTS ============ */
.mp-lobby .mp-pin-box {
  background: linear-gradient(135deg, var(--primary), var(--primary-2));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  text-shadow: none;
  font-size: 24px;
  font-weight: 900;
  padding: 16px 8px;
  border-radius: var(--radius-pill);
  margin: 12px 0;
  box-shadow: var(--shadow-primary);
  letter-spacing: 2px;
}

.mp-lobby .mp-pin-box span {
  display: inline-block;
  margin: 0 2px;
  background: rgba(255,255,255,.2);
  padding: 4px 8px;
  border-radius: var(--radius);
}

.mp-lobby .mp-lobby-meta {
  color: var(--primary);
  font-weight: 800;
  margin-top: 4px;
}

.mp-lobby .mp-players-head {
  color: var(--muted);
  margin-bottom: 8px;
}

.mp-lobby .mp-player-chip {
  background: var(--card);
  border: 1px solid var(--border);
  transition: all .2s ease;
}

.mp-lobby .mp-player-chip:hover {
  border-color: var(--primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-sm);
}

.mp-lobby .mp-player-chip.me {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-soft);
}

/* ============ MP GAME SCREEN ENHANCEMENTS ============ */
.mp-game .mp-topbar {
  background: linear-gradient(135deg, var(--bg-soft), var(--card));
  border-radius: var(--radius-lg);
  padding: 12px 16px;
  box-shadow: var(--shadow-sm);
}

.mp-game .mp-clock {
  margin: 0 16px;
}

.mp-game .mp-clock svg {
  filter: drop-shadow(0 6px 12px rgba(32,38,52,.15));
}

.mp-game .mp-clock.mid .mc-fg {
  stroke: var(--primary);
}

.mp-game .mp-clock.danger .mc-fg {
  stroke: var(--red-ink);
}

.mp-game .mp-live {
  color: var(--primary);
}

.mp-game .mp-live i {
  background: var(--primary);
  animation: none;
}

.mp-game .mp-status {
  background: var(--bg-soft);
  border-radius: var(--radius);
  padding: 8px 12px;
}

.mp-game .mp-ok {
  color: var(--green-ink);
}

.mp-game .mp-streak {
  color: var(--primary);
}

/* ============ MP OPTIONS ENHANCEMENTS ============ */
.mp-opts .mopt {
  border: 2px solid transparent;
  transition: all .2s cubic-bezier(.22,.9,.35,1.35);
  border-radius: var(--radius);
}

.mp-opts .mopt:hover:not(:disabled) {
  border-color: var(--primary);
  transform: translateY(-2px) scale(1.03);
  box-shadow: var(--shadow), 0 0 20px rgba(224,69,90,.2);
}

.mp-opts .mopt:active:not(:disabled) {
  transform: scale(.96);
}

.mp-opts .mopt.mine {
  border-color: var(--primary);
  box-shadow: 0 0 10px rgba(224,69,90,.3);
}

.mp-opts .mopt.right .mopt-mark {
  color: var(--green-ink);
  transform: scale(1.2);
}

.mp-opts .mopt.wrong .mopt-mark {
  color: var(--red-ink);
}

/* ============ MP REVEAL SCREEN ENHANCEMENTS ============ */
.mp-reveal-burst {
  width: 100%;
  text-align: center;
  padding: 20px 0;
  animation: burstIn .5s ease;
}

@keyframes burstIn {
  from { opacity: 0; transform: scale(0.8) translateY(10px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}

.mp-reveal-burst.good {
  color: var(--green-ink);
  animation: burstIn .5s ease, goodPulse 2s ease infinite;
}

@keyframes goodPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.8; }
}

.mp-reveal-burst.bad {
  color: var(--red-ink);
}

/* ============ MP PIN DISPLAY IMPROVEMENT ============ */
.mp-pin-box {
  background: linear-gradient(135deg, var(--primary-soft), var(--purple-soft));
  border: 2px solid var(--primary);
  border-radius: var(--radius-pill);
  padding: 16px 20px;
  margin: 12px 0;
  box-shadow: var(--shadow-primary);
  position: relative;
  overflow: hidden;
}

.mp-pin-box::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  background: linear-gradient(90deg, var(--primary), var(--primary-2));
}

.mp-pin-box span {
  display: inline-block;
  margin: 0 3px;
  background: var(--bg);
  padding: 6px 12px;
  border-radius: var(--radius);
  font-weight: 900;
  min-width: 40px;
  text-align: center;
}

/* ============ MP END SCREEN ============ */
.mp-end .mp-end-hero {
  animation: heroIn .5s ease;
}

@keyframes heroIn {
  from { opacity: 0; transform: scale(0.9); }
  to { opacity: 1; transform: scale(1); }
}

.mp-end .podium .pod-col {
  border-radius: var(--radius);
  padding: 12px;
  margin: 4px 0;
}

/* ============ RESPONSIVE IMPROVEMENTS ============ */
@media (max-width: 600px) {
  .mp-lobby .mp-pin-box {
    font-size: 18px;
  }
  
  .mp-opts .mopt {
    font-size: 14px;
    padding: 12px 8px;
  }
  
  .mp-game .mp-topbar {
    flex-direction: column;
    gap: 8px;
  }
  
  .mp-game .mp-clock {
    margin: 8px 0;
  }
}

/* ============================================================
   KANJI JFT — PREMIUM 2026 VISUAL LAYER
   Purpose: modern, polished, mobile-first visual refresh.
   No JS/API changes required.
   ============================================================ */
:root{
  --premium-glass:rgba(255,255,255,.72);
  --premium-line:rgba(255,255,255,.78);
  --premium-glow:rgba(224,69,90,.20);
  --premium-depth:0 24px 70px rgba(31,38,60,.14);
}
[data-theme="dark"]{
  --premium-glass:rgba(25,29,40,.78);
  --premium-line:rgba(255,255,255,.08);
  --premium-glow:rgba(255,92,109,.18);
  --premium-depth:0 28px 80px rgba(0,0,0,.42);
}

html{scroll-behavior:smooth}
body{
  background:
    radial-gradient(700px 380px at 8% -5%,var(--premium-glow),transparent 62%),
    radial-gradient(620px 360px at 94% 4%,rgba(91,141,246,.12),transparent 62%),
    var(--bg);
  background-attachment:fixed;
}
body::before{
  content:"";
  position:fixed;inset:0;pointer-events:none;z-index:-1;opacity:.28;
  background-image:linear-gradient(rgba(120,130,160,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(120,130,160,.055) 1px,transparent 1px);
  background-size:34px 34px;
  mask-image:linear-gradient(to bottom,#000,transparent 80%);
}

.site-header{
  background:color-mix(in srgb,var(--header-bg) 88%,transparent);
  backdrop-filter:blur(22px) saturate(150%);
  -webkit-backdrop-filter:blur(22px) saturate(150%);
  box-shadow:0 1px 0 var(--premium-line),0 16px 45px rgba(20,25,40,.06);
}
.brand-mark{
  box-shadow:0 14px 30px var(--premium-glow),inset 0 1px 0 rgba(255,255,255,.55);
  transform:translateZ(0);
}
.brand-mark:hover{transform:translateY(-2px) rotate(-2deg);box-shadow:0 18px 38px var(--premium-glow),inset 0 1px 0 rgba(255,255,255,.6)}

.hero{
  position:relative;overflow:hidden;isolation:isolate;
  border:1px solid var(--premium-line)!important;
  box-shadow:var(--premium-depth),inset 0 1px 0 rgba(255,255,255,.5);
  background:
    radial-gradient(420px 240px at 84% 30%,rgba(255,255,255,.22),transparent 65%),
    linear-gradient(135deg,var(--primary),var(--primary-2))!important;
  transform:translateZ(0);
}
.hero::before,.hero::after{content:"";position:absolute;pointer-events:none;border-radius:50%;filter:blur(2px)}
.hero::before{width:260px;height:260px;right:-90px;top:-120px;background:rgba(255,255,255,.13);box-shadow:0 0 90px rgba(255,255,255,.12)}
.hero::after{width:150px;height:150px;left:44%;bottom:-110px;background:rgba(255,255,255,.08)}
.hero-text,.hero-mark{position:relative;z-index:2}
.hero-title{letter-spacing:-.035em;text-shadow:0 3px 18px rgba(80,20,30,.16)}
.hero-cta{
  box-shadow:0 16px 34px rgba(75,20,30,.22),inset 0 1px 0 rgba(255,255,255,.35)!important;
  transition:transform .2s ease,box-shadow .2s ease!important;
}
.hero-cta:hover{transform:translateY(-3px)!important;box-shadow:0 22px 42px rgba(75,20,30,.28),inset 0 1px 0 rgba(255,255,255,.4)!important}
.hero-mark{
  text-shadow:0 18px 34px rgba(70,10,20,.24);
  transform:perspective(700px) rotateY(-12deg) rotateX(5deg);
  transition:transform .45s ease;
}
.hero:hover .hero-mark{transform:perspective(700px) rotateY(-3deg) rotateX(2deg) translateY(-5px)}

.stat-card,.quick-card,.card,.panel,.section-card,.quiz-card,.flashcard-wrap,.progress-card{
  border-color:var(--premium-line)!important;
  box-shadow:var(--shadow-sm),inset 0 1px 0 rgba(255,255,255,.55);
  transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease;
}
.stat-card:hover,.quick-card:hover,.card:hover,.panel:hover,.section-card:hover,.quiz-card:hover,.progress-card:hover{
  transform:translateY(-4px);
  box-shadow:var(--shadow-lg),inset 0 1px 0 rgba(255,255,255,.6);
}
.quick-card{position:relative;overflow:hidden;background:var(--card)}
.quick-card::after{
  content:"";position:absolute;width:110px;height:110px;right:-65px;bottom:-65px;border-radius:50%;
  background:var(--primary-soft);pointer-events:none;
}

.sub-bar{
  position:sticky;top:8px;z-index:20;
  padding:10px!important;border:1px solid var(--premium-line);
  background:var(--premium-glass)!important;
  backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);
  border-radius:20px!important;box-shadow:0 12px 36px rgba(30,35,50,.08);
}
.search-wrap{box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 8px 24px rgba(30,35,50,.05)!important}
.day-tabs button,.day-tab,.filter-chip,.pill,.tag{
  transition:transform .16s ease,box-shadow .16s ease,background .16s ease!important;
}
.day-tabs button:hover,.day-tab:hover,.filter-chip:hover{transform:translateY(-1px)}
.day-tabs button.active,.day-tab.active{box-shadow:0 8px 18px var(--premium-glow)}

/* Cards containing Japanese characters get tactile depth */
.kanji-card,.word-card,.flash-card,.fc-card,.quiz-option{
  box-shadow:0 14px 32px rgba(25,32,50,.10),inset 0 1px 0 rgba(255,255,255,.55)!important;
}
.kanji-card:hover,.word-card:hover{transform:translateY(-5px) perspective(800px) rotateX(1deg)}

/* 3D flashcard polish */
.flashcard,.flash-card,.fc-card{transform-style:preserve-3d}
.flashcard:hover,.flash-card:hover,.fc-card:hover{box-shadow:0 26px 60px rgba(30,35,55,.18),inset 0 1px 0 rgba(255,255,255,.65)!important}

/* Quiz answers */
.quiz-option{
  position:relative;overflow:hidden;
  background:linear-gradient(145deg,var(--card),var(--bg-soft));
}
.quiz-option::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(110deg,transparent 20%,rgba(255,255,255,.18) 45%,transparent 70%);
  transform:translateX(-120%);transition:transform .6s ease;
}
.quiz-option:hover::before{transform:translateX(120%)}
.quiz-option:hover{transform:translateY(-3px);box-shadow:0 18px 36px rgba(30,35,55,.13)!important}

/* Buttons */
button,.btn,.hero-cta,.install-btn,.icon-btn{touch-action:manipulation}
.btn-primary,.primary-btn,.hero-cta{
  position:relative;overflow:hidden;
}
.btn-primary::after,.primary-btn::after,.hero-cta::after{
  content:"";position:absolute;top:0;left:-80%;width:45%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);
  transform:skewX(-20deg);transition:left .55s ease;pointer-events:none;
}
.btn-primary:hover::after,.primary-btn:hover::after,.hero-cta:hover::after{left:140%}

/* More / modal sheets */
.modal,.sheet,.more-sheet,.dialog,.modal-content{
  box-shadow:0 32px 90px rgba(12,16,28,.25),inset 0 1px 0 rgba(255,255,255,.55)!important;
  border:1px solid var(--premium-line)!important;
  backdrop-filter:blur(20px) saturate(140%);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
}

/* Bottom navigation: floating app feel */
.bottom-nav,.mobile-nav{
  background:color-mix(in srgb,var(--card) 82%,transparent)!important;
  backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);
  border:1px solid var(--premium-line)!important;
  box-shadow:0 -10px 40px rgba(25,30,45,.10),0 10px 30px rgba(25,30,45,.08)!important;
}

/* N3 section */
.n3-hero,.n3-card,.n3-stat,.n3-search,.n3-flashcard,.n3-quiz-card{
  border:1px solid var(--premium-line)!important;
  box-shadow:var(--premium-depth),inset 0 1px 0 rgba(255,255,255,.5)!important;
}
.n3-hero{background:linear-gradient(135deg,#24154d,#6d3ad4 48%,#ee5b78)!important;overflow:hidden}
.n3-hero::before{content:"N3";position:absolute;right:5%;top:-30px;font:900 180px/1 var(--font-sans);color:rgba(255,255,255,.08);transform:rotate(-8deg);pointer-events:none}

/* Scrollbar */
*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:99px}

/* Mobile: keep it fast and clean */
@media (max-width:700px){
  body::before{opacity:.16;background-size:28px 28px}
  .sub-bar{top:4px;border-radius:16px!important}
  .hero{border-radius:24px!important;min-height:245px}
  .hero-mark{opacity:.20;transform:none!important;font-size:150px!important}
  .stat-card:hover,.quick-card:hover,.card:hover,.panel:hover,.section-card:hover,.quiz-card:hover,.progress-card:hover{transform:none}
  .n3-hero::before{font-size:120px;top:10px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}
}
/* v47 mobile safe-area polish */
@media(max-width:767px){
  main{padding-bottom:calc(150px + env(safe-area-inset-bottom))}
  footer{padding-bottom:calc(158px + env(safe-area-inset-bottom))}
}

/* ---------- FIX v49: remove decorative circles that cover quick-card content ---------- */
.quick-card::after{
  content:none !important;
  display:none !important;
}
.quick-card > *{
  position:relative;
  z-index:1;
}


/* ---------- Support / Notification / Donation ---------- */
.support-modal{max-width:430px;text-align:center}
.support-modal h2{margin:8px 0 6px;font-size:20px;color:var(--ink)}
.info-card{padding:13px 14px;margin:10px 0;text-align:left;background:var(--bg-soft);border:1px solid var(--border);border-radius:16px}
.info-card strong{display:block;font-size:13px;color:var(--ink)}
.info-card p{margin:5px 0 0;font-size:12px;line-height:1.55;color:var(--muted)}
.qr-wrap{display:grid;place-items:center;margin:14px auto;padding:12px;background:#fff;border:1px solid var(--border);border-radius:18px;width:min(230px,100%);min-height:230px}
.qr-wrap img{display:block;width:200px;height:200px;object-fit:contain;border-radius:10px}
.donation-link{display:flex;justify-content:center;text-decoration:none;width:100%;box-sizing:border-box}
.qr-note{margin:10px 0 0;font-size:11px;color:var(--muted)}
.support-item .more-ico{font-size:20px}
.more-ico.ico-pink{background:var(--primary-soft);color:var(--primary)}
@media(max-width:420px){.more-grid{grid-template-columns:1fr}.qr-wrap,.qr-wrap img{width:190px;height:190px;min-height:190px}}

/* ---------- Wayground-inspired Game Hub ---------- */
.game-mode-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:0 0 14px;overflow-x:auto;padding:2px 1px 5px}
.game-mode-card{min-width:150px;border:1px solid var(--border);background:var(--card);color:var(--ink);border-radius:18px;padding:12px;display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;box-shadow:var(--shadow-sm);transition:.2s}
.game-mode-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.game-mode-card.active{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 8px 24px -12px color-mix(in srgb,var(--primary) 50%,transparent)}
.game-mode-card .gm-ico{width:38px;height:38px;border-radius:13px;display:grid;place-items:center;background:var(--bg-soft);font-size:20px;flex:none}
.game-mode-card.active .gm-ico{background:var(--card)}
.game-mode-card b{display:block;font-size:13px;font-weight:900}
.game-mode-card small{display:block;color:var(--muted);font-size:10.5px;font-weight:700;margin-top:2px;line-height:1.25}
@media(max-width:700px){.game-mode-strip{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:minmax(150px,1fr);scroll-snap-type:x proximity}.game-mode-card{scroll-snap-align:start}}
.game-pop{font-weight:1000;text-shadow:0 2px 0 rgba(255,255,255,.35)}
[data-theme="dark"] .game-pop{text-shadow:0 2px 0 rgba(0,0,0,.3)}
/* ============================================================
   Kanji Game Hub — gameshow-inspired, original UI
   ============================================================ */
.jg-game-hub{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(250px,1fr);gap:12px;margin:0 0 14px}
.jg-hub-card{border:1px solid var(--border);border-radius:22px;background:linear-gradient(135deg,var(--card),var(--bg-soft));padding:20px;box-shadow:var(--shadow-sm)}
.jg-hub-main{position:relative;overflow:hidden}
.jg-hub-main:after{content:'遊';position:absolute;right:16px;bottom:-22px;font:900 130px/1 var(--font-jp);opacity:.045;pointer-events:none}
.jg-hub-kicker{font-size:10px;font-weight:1000;letter-spacing:.14em;color:var(--primary);margin-bottom:6px}
.jg-hub-main h3{font-size:20px;line-height:1.25;margin:0 0 7px;max-width:560px}
.jg-hub-main p{margin:0;color:var(--ink-soft);font-size:12px;line-height:1.6;max-width:620px}
.jg-hub-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;position:relative;z-index:1}
.jg-hub-stats{display:grid;grid-template-columns:1fr;gap:8px}
.jg-hub-stats>div{display:grid;grid-template-columns:34px 1fr;grid-template-rows:auto auto;column-gap:9px;align-items:center;border:1px solid var(--border);border-radius:17px;background:var(--card);padding:10px 12px;box-shadow:var(--shadow-sm)}
.jg-hub-stats span{grid-row:1/3;font-size:21px;display:grid;place-items:center}
.jg-hub-stats b{font-size:12px}.jg-hub-stats small{font-size:10px;color:var(--muted);font-weight:700;margin-top:1px}
@media(max-width:760px){.jg-game-hub{grid-template-columns:1fr}.jg-hub-stats{grid-template-columns:repeat(3,1fr)}.jg-hub-stats>div{display:block;text-align:center;padding:10px 6px}.jg-hub-stats span{display:block;margin-bottom:3px}.jg-hub-stats b{display:block}.jg-hub-stats small{display:block}}
@media(max-width:460px){.jg-hub-stats{grid-template-columns:1fr}.jg-hub-stats>div{text-align:left;display:grid;grid-template-columns:30px 1fr;grid-template-rows:auto auto}.jg-hub-stats span{grid-row:1/3;margin:0}}

/* ---------- Quiz Simple: plain, separate from Game/Bareng ---------- */
.quiz-simple-card{max-width:760px;margin:18px auto;padding:18px;border:1px solid var(--border,#e7e7ea);border-radius:18px;background:var(--card,#fff)}
.quiz-simple-settings{display:flex;gap:8px;justify-content:center;margin-bottom:20px;flex-wrap:wrap}
.quiz-simple-start{text-align:center;padding:34px 16px}.simple-quiz-icon{font-size:42px;margin-bottom:8px}.quiz-simple-start h3{margin:4px 0 6px}.quiz-simple-start p{margin:0 0 18px;opacity:.7}
.quiz-simple-game{padding:6px 2px 12px}.quiz-simple-game .quiz-q{min-height:90px;display:flex;align-items:center;justify-content:center;text-align:center}
.quiz-simple-game .quiz-result{text-align:center;margin-top:14px;min-height:38px}.quiz-simple-game .qopt.correct{outline:2px solid #31a24c}.quiz-simple-game .qopt.wrong{outline:2px solid #d64b4b}

/* Game music control */
.hud-music{width:38px;height:38px;border:1px solid var(--border);border-radius:12px;background:var(--card);color:var(--ink);display:grid;place-items:center;font-size:18px;cursor:pointer;box-shadow:var(--shadow-sm);margin-left:auto;transition:transform .16s ease,opacity .16s ease,background .16s ease}
.hud-music:hover{transform:translateY(-1px)}
.hud-music.off{opacity:.58;background:var(--bg-soft)}
@media (max-width:600px){.hud-music{width:34px;height:34px;font-size:16px;border-radius:10px}}


/* ---------- Irodori Elementary 2 ---------- */
.irodori-view{padding-bottom:32px}
.irodori-level{
  display:inline-flex;align-items:center;vertical-align:middle;
  margin-left:6px;padding:4px 9px;border-radius:999px;
  font-size:11px;background:var(--primary-soft);color:var(--primary);
  letter-spacing:.5px
}
.irodori-hero{
  display:flex;align-items:center;justify-content:space-between;gap:18px;
  margin:4px 0 14px;padding:22px 24px;border-radius:var(--radius-lg);
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
  color:#fff;box-shadow:var(--shadow-primary)
}
.irodori-eyebrow{font-size:10px;font-weight:900;letter-spacing:1.2px;opacity:.82}
.irodori-hero h3{margin:5px 0 3px;font-size:21px}
.irodori-hero p{margin:0;font-size:12.5px;opacity:.9;font-weight:600}
.irodori-actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.irodori-note{
  display:flex;gap:9px;align-items:flex-start;margin:12px 0 18px;padding:12px 14px;
  border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-soft);
  color:var(--ink-soft);font-size:12.5px;line-height:1.5
}
.irodori-note strong{color:var(--ink);white-space:nowrap}
.irodori-topics{display:flex;gap:7px;flex-wrap:wrap;margin:0 0 14px}
.irodori-topic{
  border:1px solid var(--border);background:var(--card);color:var(--ink-soft);
  padding:7px 11px;border-radius:999px;font-size:11.5px;font-weight:800
}
.irodori-grid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px
}
.irodori-card{
  border:1px solid var(--border);background:var(--card);border-radius:var(--radius-lg);
  padding:16px;box-shadow:var(--shadow-sm);transition:.2s
}
.irodori-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.irodori-card-top{display:flex;align-items:flex-start;gap:12px}
.irodori-num{
  flex:none;width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  background:var(--primary-soft);color:var(--primary);font-weight:900;font-size:13px
}
.irodori-card h4{font-size:14px;line-height:1.35;margin:1px 0 4px;color:var(--ink)}
.irodori-topic-name{font-size:11px;color:var(--muted);font-weight:700}
.irodori-card p{font-size:11.5px;color:var(--ink-soft);line-height:1.5;margin:12px 0}
.irodori-links{display:flex;gap:7px;flex-wrap:wrap}
.irodori-links a{
  display:inline-flex;align-items:center;gap:5px;padding:8px 10px;border-radius:10px;
  text-decoration:none;font-size:11.5px;font-weight:800;border:1px solid var(--border);
  color:var(--ink-soft);background:var(--bg-soft)
}
.irodori-links a:hover{border-color:var(--primary);color:var(--primary)}
@media(max-width:700px){
  .irodori-hero{flex-direction:column;align-items:flex-start}
  .irodori-grid{grid-template-columns:1fr}
}

/* ---------- Irodori interactive exercises + audio ---------- */
.irodori-exercise{margin-top:14px;padding-bottom:24px}
.iro-ex-head{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;margin-bottom:12px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);box-shadow:var(--shadow-sm)}
.iro-ex-head h3{margin:4px 0;font-size:20px;color:var(--ink)}
.iro-ex-head p{margin:0;color:var(--muted);font-size:12px}
.iro-audio-box{padding:15px;margin-bottom:14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-soft)}
.iro-audio-title{font-weight:900;color:var(--ink);margin-bottom:10px}
.iro-audio-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.iro-audio-item{display:flex;align-items:center;gap:8px;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--card);font-size:11px;font-weight:800;color:var(--ink-soft)}
.iro-audio-item audio{width:100%;height:34px;min-width:0}
.iro-audio-box small{display:block;margin-top:10px;color:var(--muted);line-height:1.5}
.iro-audio-box code{font-family:monospace;background:var(--card);padding:2px 4px;border-radius:4px}
.iro-ex-list{display:grid;gap:10px}
.iro-ex-card{padding:15px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card)}
.iro-ex-q{display:flex;gap:10px;align-items:flex-start;color:var(--ink);font-size:13px;line-height:1.55;margin-bottom:10px}
.iro-ex-q b{display:grid;place-items:center;flex:none;width:28px;height:28px;border-radius:9px;background:var(--primary-soft);color:var(--primary)}
.iro-answer{width:100%;box-sizing:border-box;border:1px solid var(--border);background:var(--bg-soft);color:var(--ink);border-radius:10px;padding:11px 12px;font:inherit;outline:none}
.iro-answer:focus{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 12%,transparent)}
.iro-ex-result{margin-top:8px;font-size:12px;font-weight:800;min-height:16px}
.iro-ex-result.ok{color:#18864b}.iro-ex-result.bad{color:#c43d3d}
.iro-ex-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.iro-score{margin-top:10px;padding:11px 13px;border-radius:10px;background:var(--bg-soft);color:var(--ink-soft);font-size:12px;font-weight:800}
.irodori-links button{display:inline-flex;align-items:center;gap:5px;padding:8px 10px;border-radius:10px;text-decoration:none;font-size:11.5px;font-weight:800;border:1px solid var(--border);color:var(--ink-soft);background:var(--bg-soft);cursor:pointer;font-family:inherit}
.irodori-links button:hover{border-color:var(--primary);color:var(--primary)}
@media(max-width:700px){.iro-ex-head{align-items:flex-start;flex-direction:column}.iro-audio-grid{grid-template-columns:1fr}.iro-audio-item{align-items:flex-start;flex-direction:column}.iro-audio-item audio{width:100%}}

/* Irodori exact-PDF practice view */
.irodori-exact-note,.irodori-work-note{margin:14px 0;padding:14px 16px;border-radius:14px;background:rgba(127,127,127,.08);line-height:1.55}
.irodori-pdf-frame{display:block;width:100%;height:78vh;min-height:650px;border:1px solid rgba(127,127,127,.25);border-radius:16px;background:#fff;margin:14px 0}
.iro-pdf-actions{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}

/* Irodori v70 — per-lesson PDF + exact numbered audio controls */
.irodori-lesson-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:14px;align-items:start}
.irodori-pdf-wrap{min-width:0}
.irodori-audio-side{position:sticky;top:12px;min-width:0}
.iro-audio-box{padding:14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);box-shadow:var(--shadow-sm)}
.iro-audio-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}
.iro-audio-head strong{display:block;color:var(--ink);font-size:13px}
.iro-audio-head small{display:block;margin-top:4px;color:var(--muted);line-height:1.45;font-size:10.5px}
.iro-audio-head .btn{flex:none;font-size:10.5px;padding:7px 9px}
.iro-audio-list{display:grid;gap:6px;max-height:68vh;overflow:auto;padding-right:2px}
.iro-audio-row{display:grid;grid-template-columns:34px 58px minmax(0,1fr);grid-template-rows:auto auto;column-gap:7px;align-items:center;padding:7px;border:1px solid var(--border);border-radius:10px;background:var(--bg-soft)}
.iro-audio-play{grid-row:1 / span 2;width:32px;height:32px;border:0;border-radius:9px;background:var(--primary);color:#fff;font-weight:900;cursor:pointer;box-shadow:var(--shadow-sm)}
.iro-audio-play:hover{filter:brightness(1.06);transform:translateY(-1px)}
.iro-audio-num{font-weight:900;color:var(--ink);font-size:11px}
.iro-audio-file{font-size:9.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.iro-audio-row audio{display:none}
.iro-audio-help{margin-top:10px;color:var(--muted);font-size:10px;line-height:1.5}
.iro-audio-help code,.iro-audio-head code{font-family:monospace;background:var(--bg-soft);padding:2px 4px;border-radius:4px}
.irodori-links button{font-family:inherit}
@media(max-width:900px){.irodori-lesson-layout{grid-template-columns:1fr}.irodori-audio-side{position:static}.iro-audio-list{max-height:none;grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.iro-audio-list{grid-template-columns:1fr}.iro-audio-head{flex-direction:column}.irodori-pdf-frame{min-height:520px;height:72vh}}

/* Irodori v71 — full lesson interactive viewer */
.iro-int-head{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:18px 20px;margin:14px 0 10px;border:1px solid var(--border);border-radius:18px;background:var(--card);box-shadow:var(--shadow-sm)}
.iro-int-head h3{margin:5px 0 3px;font-size:20px;color:var(--ink)}
.iro-int-head p{margin:0;color:var(--muted);font-size:12px}
.iro-int-note{padding:13px 15px;border-radius:14px;background:rgba(127,127,127,.08);border:1px solid var(--border);color:var(--ink-soft);font-size:12px;line-height:1.55}
.iro-int-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.iro-int-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px;align-items:start}
.iro-pages{min-width:0;display:flex;flex-direction:column;align-items:center;gap:18px;padding:12px;background:#252525;border-radius:18px;overflow:auto;max-height:none}
.iro-page{position:relative;flex:none;background:#fff;box-shadow:0 8px 30px rgba(0,0,0,.25);overflow:hidden}
.iro-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.iro-overlay{position:absolute;inset:0;z-index:4}
.iro-page-number{position:absolute;right:8px;bottom:8px;z-index:8;background:rgba(20,20,20,.72);color:#fff;border-radius:8px;padding:4px 7px;font-size:9px;pointer-events:none}
.iro-pdf-audio{position:absolute;z-index:10;border:1px solid rgba(0,110,70,.2);background:#20b96b;color:#fff;border-radius:8px;padding:3px 6px;font-size:9px;font-weight:900;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.18);white-space:nowrap}
.iro-pdf-audio:hover{filter:brightness(1.06);transform:translateY(-1px)}
.iro-answer-overlay{position:absolute;z-index:20;min-width:120px;min-height:34px;width:180px;height:55px;resize:both;padding:7px 9px;border:2px solid var(--primary);border-radius:8px;background:rgba(255,255,255,.93);color:#111;font:600 13px/1.4 inherit;box-shadow:0 3px 12px rgba(0,0,0,.16);outline:none}
.iro-answer-overlay:focus{box-shadow:0 0 0 3px rgba(32,185,107,.22)}
.iro-answer-mode .iro-overlay{cursor:crosshair}
.iro-int-side{position:sticky;top:12px;display:grid;gap:10px;min-width:0}
.iro-side-card{padding:14px;border:1px solid var(--border);border-radius:16px;background:var(--card);box-shadow:var(--shadow-sm)}
.iro-side-card>b{display:block;color:var(--ink);font-size:13px;margin-bottom:4px}
.iro-side-muted{display:block;color:var(--muted);font-size:10.5px;line-height:1.5;margin-bottom:10px}
.iro-side-card ol{margin:7px 0 0 18px;padding:0;color:var(--ink-soft);font-size:11px;line-height:1.7}
.iro-side-audio{display:grid;gap:6px;max-height:70vh;overflow:auto}
.iro-side-audio-row{display:grid;grid-template-columns:30px 48px minmax(0,1fr);align-items:center;gap:6px;padding:6px;border:1px solid var(--border);border-radius:9px;background:var(--bg-soft)}
.iro-side-audio-row button{width:28px;height:28px;border:0;border-radius:8px;background:var(--primary);color:#fff;font-weight:900;cursor:pointer}
.iro-side-audio-row b{font-size:10px;color:var(--ink)}
.iro-side-audio-row span{font-size:8.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.iro-side-audio-row audio{display:none}
.iro-loading{padding:30px;text-align:center;color:var(--muted);font-size:13px}
@media(max-width:1000px){.iro-int-layout{grid-template-columns:1fr}.iro-int-side{position:static}.iro-side-audio{max-height:320px}.iro-pages{align-items:flex-start}}
@media(max-width:650px){.iro-int-head{align-items:flex-start;flex-direction:column}.iro-pages{padding:6px;overflow-x:auto}.iro-page{transform-origin:top left;transform:scale(.72);margin-right:-28%;margin-bottom:-25%}.iro-int-toolbar .btn{font-size:10px;padding:7px 9px}}

/* Irodori v72 — true in-app full lesson reader */
#irodoriExercise[hidden]{display:none!important}
body.irodori-reader-open{overflow:hidden!important}
body.irodori-reader-open .view:not(#irodoriView){visibility:hidden}
.irodori-view:has(#irodoriExercise:not([hidden])){position:static}
#irodoriExercise:not([hidden]){position:fixed;inset:0;z-index:99999;margin:0!important;padding:0!important;background:#0d1017;overflow:hidden}
.iro-reader{position:absolute;inset:0;display:flex;flex-direction:column;background:#0d1017;color:#fff}
.iro-reader-bar{flex:none;display:flex;justify-content:space-between;align-items:center;gap:14px;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.1);background:rgba(16,18,27,.98);backdrop-filter:blur(12px);z-index:30}
.iro-reader-title{display:flex;align-items:center;gap:12px;min-width:0}
.iro-reader-back{border:1px solid rgba(255,255,255,.12);background:#1a1e29;color:#fff;border-radius:11px;padding:9px 12px;font:800 12px inherit;cursor:pointer;white-space:nowrap}
.iro-reader-title>div{min-width:0}.iro-reader-title span{display:block;font-size:9px;letter-spacing:.12em;color:#45d789;font-weight:900}.iro-reader-title strong{display:block;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.iro-reader-title small{display:block;color:#9da5b5;font-size:10px;margin-top:2px}
.iro-reader-tools{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.iro-reader-tools .btn{font-size:10px;padding:8px 10px}
.iro-reader-body{min-height:0;flex:1;display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:10px;padding:10px}
.iro-reader-body>.iro-pages{height:100%;max-height:none;overflow:auto;border-radius:14px;background:#292c32;padding:16px;scroll-behavior:smooth;align-items:center}
.iro-reader-body>.iro-int-side{height:100%;overflow:auto;position:static;align-content:start}
.iro-reader .iro-page{margin:0 auto}.iro-reader .iro-page-number{position:sticky;bottom:8px;float:right}
.iro-reader:fullscreen{background:#0d1017}
@media(max-width:1000px){.iro-reader-bar{align-items:flex-start}.iro-reader-tools{max-width:55%}.iro-reader-body{grid-template-columns:1fr}.iro-reader-body>.iro-int-side{display:none}}
@media(max-width:650px){.iro-reader-title small{display:none}.iro-reader-title strong{font-size:13px}.iro-reader-tools .btn{padding:7px 8px}.iro-reader-body{padding:5px}.iro-reader-body>.iro-pages{padding:8px}}

/* v73 per-page Irodori reader */
.iro-page-counter{display:inline-flex;align-items:center;justify-content:center;min-width:105px;padding:7px 10px;border:1px solid rgba(255,255,255,.16);border-radius:9px;background:rgba(255,255,255,.06);font-size:12px;font-weight:700;white-space:nowrap}
.iro-reader-tools button:disabled{opacity:.4;cursor:not-allowed}
.iro-reader-body>.iro-pages{justify-content:flex-start;align-items:center;overflow:auto}
.iro-reader .iro-page{margin:0 auto}
.iro-reader .iro-loading{min-height:240px;display:grid;place-items:center;text-align:center;padding:30px}
@media(max-width:1200px){.iro-reader-tools{gap:5px}.iro-page-counter{min-width:86px;font-size:11px}}
@media(max-width:760px){.iro-reader-tools{max-width:100%;overflow-x:auto;flex-wrap:nowrap}.iro-reader-tools .iro-page-counter{order:-1}.iro-reader-body>.iro-pages{padding:8px}.iro-page-counter{min-width:78px}}

/* Irodori v75 — image page UI */
.iro-image-reader{background:#071019!important;color:#fff}
.iro-image-reader .iro-reader-bar{background:#08121b;border-bottom:1px solid rgba(255,255,255,.1);padding:10px 20px}
.iro-image-reader .iro-reader-tools{align-items:center}
.iro-image-reader .iro-reader-tools .btn{border-radius:12px}
.iro-image-pages{background:#0b121a!important;padding:14px!important;display:flex;justify-content:center;align-items:flex-start!important;overflow:auto!important}
.iro-image-pages .iro-page{position:relative;width:min(100%,900px);height:auto!important;aspect-ratio:auto!important;background:#fff;border-radius:2px;overflow:hidden;box-shadow:0 10px 35px rgba(0,0,0,.35);flex:none}
.iro-page-image{display:block;width:100%;height:auto;user-select:none;-webkit-user-drag:none}
.iro-image-pages .iro-overlay{position:absolute;inset:0;z-index:5}
.iro-image-audio{
  position:absolute;
  transform:translate(-50%,-50%);
  min-width:0;
  width:auto;
  height:var(--audio-size,24px);
  min-height:18px;
  padding:0 7px;
  border:2px solid rgba(255,255,255,.96);
  border-radius:999px;
  background:#1789df;
  color:#fff;
  font-size:clamp(9px,calc(var(--audio-size,24px)*.52),13px);
  font-weight:900;
  line-height:1;
  white-space:nowrap;
  box-shadow:0 2px 7px rgba(0,0,0,.25);
  cursor:pointer;
  z-index:12;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  touch-action:manipulation;
}
.iro-image-audio:hover{transform:translate(-50%,-50%) scale(1.04)}
.iro-image-audio[data-playing="1"]{background:#16b56b}
.iro-image-audio.small{height:var(--audio-size,23px);font-size:clamp(9px,calc(var(--audio-size,23px)*.5),12px)}
.iro-image-footer{flex:none;display:flex;align-items:center;justify-content:center;gap:14px;padding:8px 16px;background:#08121b;border-top:1px solid rgba(255,255,255,.1);z-index:30}
.iro-image-footer>span{min-width:110px;text-align:center;color:#dbe4ee;font-size:12px;font-weight:800}
.iro-image-reader .iro-int-side{overflow:auto}
.iro-image-reader .iro-side-card{background:#0d1923;border-color:rgba(255,255,255,.1);color:#fff}
.iro-image-reader .iro-side-card>b{color:#fff}
.iro-image-reader .iro-side-muted{color:#9eabb8}
.iro-image-reader .iro-side-audio-row{background:#101f2b;border-color:rgba(255,255,255,.08);grid-template-columns:34px 55px minmax(0,1fr);padding:7px}
.iro-image-reader .iro-mini-play{width:30px;height:30px;border-radius:50%;background:#163247;border:1px solid rgba(255,255,255,.14);color:#fff;cursor:pointer}
.iro-image-reader .iro-side-audio-row b{color:#fff}
.iro-image-reader .iro-side-audio-row span{color:#8fa0af}
.iro-image-reader .iro-answer-overlay{z-index:25}
@media(max-width:1000px){.iro-image-reader .iro-reader-body{grid-template-columns:1fr}.iro-image-reader .iro-int-side{display:none}}
@media(max-width:700px){.iro-image-reader .iro-reader-bar{padding:8px}.iro-image-reader .iro-reader-title strong{font-size:13px}.iro-image-reader .iro-reader-tools{max-width:62%;overflow-x:auto;flex-wrap:nowrap}.iro-image-reader .iro-reader-tools .btn{padding:7px 8px;white-space:nowrap}.iro-image-pages{padding:5px!important}.iro-image-footer{gap:7px;padding:6px}.iro-image-footer .btn{padding:7px 10px;font-size:10px}.iro-image-footer>span{min-width:85px;font-size:10px}}

/* v76 responsive image reader + answer box controls */
.iro-image-pages{overflow:auto!important;justify-content:center!important;align-items:center!important;min-width:0;min-height:0}
.iro-image-pages .iro-page{width:auto!important;height:auto!important;max-width:100%!important;max-height:100%!important;aspect-ratio:auto!important;transform:none!important;margin:auto!important;display:block}
.iro-image-pages .iro-page-image{width:auto!important;height:auto!important;max-width:100%!important;max-height:calc(100vh - 190px)!important;object-fit:contain;display:block}
.iro-image-pages .iro-overlay{position:absolute!important;inset:0!important}
.iro-image-audio{transform:translate(-50%,-50%)!important;min-width:34px!important;width:34px!important;height:34px!important;padding:0!important;border:2px solid #fff!important;border-radius:50%!important;background:#1789df!important;display:flex!important;align-items:center!important;justify-content:center!important;font-size:14px!important;line-height:1!important}
.iro-image-audio:hover{transform:translate(-50%,-50%) scale(1.08)!important}
.iro-image-audio[data-playing="1"]{background:#16b56b!important}
.iro-answer-overlay{box-sizing:border-box;min-width:80px;min-height:32px;width:180px;height:58px;resize:none;cursor:move;touch-action:none}
.iro-answer-overlay:focus{cursor:text}
.iro-answer-resize{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;border-radius:0 0 7px 0;background:var(--primary);cursor:nwse-resize;z-index:2}
.iro-answer-delete{position:absolute;right:-9px;top:-9px;width:22px;height:22px;border:0;border-radius:50%;background:#ef5350;color:#fff;font-size:12px;line-height:22px;padding:0;cursor:pointer;z-index:3}
.iro-answer-overlay-wrap{position:absolute;z-index:25;box-sizing:border-box}
.iro-answer-overlay-wrap textarea{position:relative!important;left:0!important;top:0!important;width:100%!important;height:100%!important}
@media(max-width:1000px){
 .iro-image-pages{padding:4px!important;overflow:hidden!important}
 .iro-image-pages .iro-page-image{max-width:100%!important;max-height:calc(100vh - 205px)!important}
}
@media(max-width:700px){
 .iro-image-reader .iro-reader-bar{padding:7px 8px;gap:6px;flex-wrap:wrap}
 .iro-image-reader .iro-reader-title{flex:1 1 100%;order:0}
 .iro-image-reader .iro-reader-tools{max-width:100%!important;overflow-x:auto;flex-wrap:nowrap;justify-content:flex-start;order:1;width:100%;scrollbar-width:none}
 .iro-image-reader .iro-reader-tools::-webkit-scrollbar{display:none}
 .iro-image-reader .iro-reader-tools .btn{font-size:10px;padding:7px 9px;flex:none}
 .iro-image-reader .iro-page-counter{order:0}
 .iro-reader-body{padding:3px!important}
 .iro-image-pages{padding:2px!important;overflow:hidden!important}
 .iro-image-pages .iro-page{width:100%!important;max-width:100%!important}
 .iro-image-pages .iro-page-image{width:100%!important;height:auto!important;max-width:100%!important;max-height:none!important}
 .iro-image-footer{padding:5px 7px!important;gap:5px!important}
 .iro-image-footer .btn{flex:1;padding:9px 8px;font-size:11px}
 .iro-image-footer>span{min-width:90px;font-size:10px}
}
/* v77 responsive image pan + adjustable audio hotspots */
.iro-image-pages{cursor:grab;user-select:none;overscroll-behavior:contain}
.iro-image-pages.panning{cursor:grabbing}
.iro-image-pages.zoomed{justify-content:flex-start!important;align-items:flex-start!important}
.iro-image-audio{width:var(--audio-size,34px)!important;min-width:var(--audio-size,34px)!important;height:var(--audio-size,34px)!important;box-sizing:border-box}
.iro-image-audio.adjustable{outline:2px dashed rgba(22,181,107,.95);outline-offset:3px;cursor:move!important}
body.iro-audio-edit-mode .iro-image-pages{cursor:default}
body.iro-audio-edit-mode .iro-image-audio.adjustable::after{content:'↔';position:absolute;inset:auto -4px -12px auto;font-size:9px;color:#fff;background:#0b7d4c;border-radius:4px;padding:1px 3px;pointer-events:none}
.iro-zoom-label{display:inline-flex;align-items:center;justify-content:center;min-width:42px;height:32px;border-radius:9px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);font-size:11px;font-weight:800;color:#dce5ee}
@media(max-width:700px){
 .iro-zoom-label{min-width:38px;height:29px;font-size:10px}
 .iro-image-pages{touch-action:none}
 .iro-image-pages:not(.zoomed){cursor:default}
}

/* V79 touch + mouse responsive image reader */
.iro-image-pages{position:relative;touch-action:none;overscroll-behavior:contain;align-items:flex-start!important;justify-content:flex-start!important;}
.iro-image-pages .iro-page{margin:0 auto!important;}
.iro-image-pages:not(.zoomed) .iro-page{width:100%!important;max-width:900px!important;}
.iro-image-pages.zoomed .iro-page{max-width:none!important;}
.iro-image-pages .iro-page-image{pointer-events:none;}
.iro-image-audio{width:var(--audio-size,22px)!important;min-width:var(--audio-size,22px)!important;height:var(--audio-size,22px)!important;padding:0!important;border-width:1.5px!important;font-size:calc(var(--audio-size,22px) * .48)!important;line-height:1!important;transform:translate(-50%,-50%)!important;}
.iro-image-audio:hover{transform:translate(-50%,-50%) scale(1.08)!important;}
.iro-image-audio.small{width:var(--audio-size,22px)!important;min-width:var(--audio-size,22px)!important;height:var(--audio-size,22px)!important;}
.iro-image-pages.panning{cursor:grabbing!important;}
.iro-image-pages:not(.zoomed){cursor:default;}
@media(max-width:700px){
  .iro-image-reader .iro-reader-body{min-height:0!important;}
  .iro-image-reader .iro-reader-bar{flex:none!important;}
  .iro-image-reader .iro-reader-title{flex:0 0 auto!important;}
  .iro-image-pages{padding:0!important;overflow:auto!important;display:block!important;}
  .iro-image-pages:not(.zoomed) .iro-page{width:100%!important;max-width:none!important;margin:0!important;}
  .iro-image-pages.zoomed .iro-page{margin:0!important;}
  .iro-image-pages .iro-page-image{width:100%!important;max-width:none!important;height:auto!important;}
  .iro-image-audio{--audio-size:21px;}
}

/* IRODORI V80 — single coherent responsive image reader override */
#irodoriExercise:not([hidden]){position:fixed!important;inset:0!important;z-index:999999!important;background:#071019!important;}
body.irodori-reader-open{overflow:hidden!important;}
.iro-image-reader{position:fixed!important;inset:0!important;width:100vw!important;height:100dvh!important;display:flex!important;flex-direction:column!important;background:#071019!important;color:#fff!important;overflow:hidden!important;}
.iro-image-reader .iro-reader-bar{flex:0 0 auto!important;display:flex!important;align-items:center!important;gap:12px!important;min-height:72px!important;padding:10px 14px!important;background:#08121b!important;border-bottom:1px solid rgba(255,255,255,.10)!important;box-sizing:border-box!important;z-index:50!important;}
.iro-image-reader .iro-reader-title{flex:0 0 auto!important;display:flex!important;align-items:center!important;gap:12px!important;min-width:250px!important;max-width:330px!important;}
.iro-image-reader .iro-reader-title>div{min-width:0!important;}
.iro-image-reader .iro-reader-title span{display:block!important;font-size:11px!important;letter-spacing:.12em!important;color:#45d789!important;font-weight:900!important;}
.iro-image-reader .iro-reader-title strong{display:block!important;font-size:18px!important;white-space:nowrap!important;}
.iro-image-reader .iro-reader-title small{display:block!important;color:#9da5b5!important;font-size:11px!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;}
.iro-image-reader .iro-reader-back{flex:0 0 auto!important;white-space:nowrap!important;}
.iro-image-reader .iro-reader-tools{flex:1 1 auto!important;min-width:0!important;display:flex!important;align-items:center!important;gap:7px!important;overflow-x:auto!important;overflow-y:hidden!important;white-space:nowrap!important;scrollbar-width:none!important;padding:2px 1px!important;}
.iro-image-reader .iro-reader-tools::-webkit-scrollbar{display:none!important;}
.iro-image-reader .iro-reader-tools .btn,.iro-image-reader .iro-page-counter{flex:0 0 auto!important;white-space:nowrap!important;}
.iro-image-reader .iro-page-counter{font-weight:800!important;color:#e8eef5!important;}
.iro-image-reader .iro-reader-body{flex:1 1 auto!important;min-height:0!important;display:grid!important;grid-template-columns:minmax(0,1fr) 350px!important;gap:10px!important;padding:10px!important;box-sizing:border-box!important;overflow:hidden!important;}
.iro-image-reader .iro-image-pages{position:relative!important;min-width:0!important;min-height:0!important;width:100%!important;height:100%!important;display:block!important;overflow:auto!important;background:#0b121a!important;border:1px solid rgba(255,255,255,.04)!important;border-radius:14px!important;padding:8px!important;box-sizing:border-box!important;overscroll-behavior:contain!important;touch-action:none!important;scrollbar-gutter:stable!important;}
.iro-image-reader .iro-image-pages.panning{cursor:grabbing!important;}
.iro-image-reader .iro-image-pages:not(.panning){cursor:grab!important;}
.iro-image-reader .iro-page{position:relative!important;display:block!important;flex:none!important;margin:0 auto!important;width:var(--iro-page-width,900px)!important;max-width:none!important;height:auto!important;background:#fff!important;overflow:visible!important;box-shadow:0 8px 28px rgba(0,0,0,.35)!important;border-radius:2px!important;}
.iro-image-reader .iro-page-image{display:block!important;width:100%!important;height:auto!important;max-width:none!important;max-height:none!important;user-select:none!important;-webkit-user-drag:none!important;pointer-events:none!important;}
.iro-image-reader .iro-overlay{position:absolute!important;inset:0!important;z-index:10!important;}
.iro-image-reader .iro-image-audio{position:absolute!important;left:0;top:0;width:var(--audio-size,20px)!important;min-width:var(--audio-size,20px)!important;height:var(--audio-size,20px)!important;padding:0!important;margin:0!important;border:0!important;background:transparent!important;color:transparent!important;font-size:0!important;line-height:0!important;transform:translate(-50%,-50%)!important;z-index:20!important;cursor:pointer!important;touch-action:none!important;}
.iro-image-reader .iro-image-audio::before{content:'▶';position:absolute!important;inset:50% auto auto 50%!important;width:calc(var(--audio-size,20px) - 3px)!important;height:calc(var(--audio-size,20px) - 3px)!important;transform:translate(-50%,-50%)!important;display:grid!important;place-items:center!important;border-radius:50%!important;background:#1689df!important;color:#fff!important;font-size:calc(var(--audio-size,20px)*.43)!important;font-weight:900!important;line-height:1!important;box-shadow:0 2px 7px rgba(0,0,0,.35)!important;border:1.5px solid rgba(255,255,255,.95)!important;box-sizing:border-box!important;}
.iro-image-reader .iro-image-audio[data-playing="1"]::before{content:'❚❚'!important;background:#18b86c!important;font-size:calc(var(--audio-size,20px)*.36)!important;}
.iro-image-reader .iro-image-audio.adjustable::before{outline:2px dashed #37d48b!important;outline-offset:3px!important;}
.iro-image-reader .iro-page-number{position:absolute!important;right:8px!important;bottom:8px!important;z-index:30!important;background:rgba(0,0,0,.65)!important;color:#fff!important;padding:5px 8px!important;border-radius:9px!important;font-size:10px!important;font-weight:800!important;}
.iro-image-reader .iro-int-side{min-width:0!important;height:100%!important;overflow:auto!important;}
.iro-image-reader .iro-side-card{box-sizing:border-box!important;}
.iro-image-reader .iro-image-footer{flex:0 0 auto!important;display:flex!important;align-items:center!important;justify-content:center!important;gap:14px!important;padding:8px 14px!important;background:#08121b!important;border-top:1px solid rgba(255,255,255,.1)!important;z-index:50!important;}
.iro-image-reader .iro-image-footer .btn{min-width:150px!important;}
.iro-image-reader .iro-image-footer>span{min-width:120px!important;text-align:center!important;font-size:12px!important;font-weight:800!important;}
.iro-image-reader .iro-answer-overlay-wrap{position:absolute!important;z-index:35!important;box-sizing:border-box!important;}
.iro-image-reader .iro-answer-overlay{width:100%!important;height:100%!important;resize:none!important;box-sizing:border-box!important;background:rgba(255,255,255,.88)!important;color:#111!important;border:2px solid #ff5b7f!important;border-radius:8px!important;padding:7px!important;font:600 13px/1.35 system-ui,sans-serif!important;}
.iro-image-reader .iro-answer-delete{position:absolute!important;right:-9px!important;top:-9px!important;width:22px!important;height:22px!important;border-radius:50%!important;border:0!important;background:#e6465e!important;color:#fff!important;z-index:3!important;}
.iro-image-reader .iro-answer-resize{position:absolute!important;right:-5px!important;bottom:-5px!important;width:16px!important;height:16px!important;border-radius:4px!important;background:#1689df!important;border:2px solid #fff!important;z-index:4!important;touch-action:none!important;}
body:not(.iro-answer-mode) .iro-image-reader .iro-answer-overlay-wrap{pointer-events:none!important;}
.iro-image-reader .iro-loading{min-height:220px!important;display:grid!important;place-items:center!important;text-align:center!important;padding:30px!important;color:#dce6ef!important;}

@media(max-width:1050px){
  .iro-image-reader .iro-reader-body{grid-template-columns:1fr!important;}
  .iro-image-reader .iro-int-side{display:none!important;}
  .iro-image-reader .iro-reader-title{min-width:220px!important;max-width:270px!important;}
}
@media(max-width:720px){
  .iro-image-reader .iro-reader-bar{display:block!important;padding:7px 8px!important;min-height:0!important;}
  .iro-image-reader .iro-reader-title{max-width:none!important;min-width:0!important;width:100%!important;margin-bottom:6px!important;}
  .iro-image-reader .iro-reader-title small{display:none!important;}
  .iro-image-reader .iro-reader-title strong{font-size:16px!important;}
  .iro-image-reader .iro-reader-tools{width:100%!important;max-width:none!important;overflow-x:auto!important;justify-content:flex-start!important;gap:6px!important;padding-bottom:2px!important;}
  .iro-image-reader .iro-reader-tools .btn{padding:8px 10px!important;font-size:11px!important;min-height:38px!important;}
  .iro-image-reader .iro-page-counter{font-size:11px!important;min-width:auto!important;}
  .iro-image-reader .iro-reader-body{padding:4px!important;gap:0!important;}
  .iro-image-reader .iro-image-pages{padding:0!important;border-radius:10px!important;}
  .iro-image-reader .iro-image-footer{gap:5px!important;padding:6px 5px!important;}
  .iro-image-reader .iro-image-footer .btn{min-width:0!important;flex:1 1 0!important;padding:10px 7px!important;font-size:11px!important;}
  .iro-image-reader .iro-image-footer>span{min-width:75px!important;font-size:10px!important;}
  .iro-image-reader .iro-image-audio{--audio-size:19px;}
}
@media(min-width:721px){
  .iro-image-reader .iro-page{--iro-page-width:900px;}
}
@media(max-width:720px){
  .iro-image-reader .iro-page{--iro-page-width:100%;}
}
/* Irodori v81: image-first reader diagnostics */
.iro-hotspot-warning{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);z-index:8;padding:5px 9px;border-radius:8px;background:rgba(0,0,0,.62);color:#fff;font-size:11px;pointer-events:none;white-space:nowrap}


/* V84 — inline audio marker: sit directly on the printed audio number */
.iro-image-reader .iro-image-audio{
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  height:var(--audio-size,24px)!important;
  min-height:20px!important;
  padding:0 7px!important;
  margin:0!important;
  border:1.5px solid rgba(255,255,255,.96)!important;
  border-radius:999px!important;
  background:#1689df!important;
  color:#fff!important;
  font-size:clamp(9px,calc(var(--audio-size,24px)*.48),13px)!important;
  font-weight:900!important;
  line-height:1!important;
  white-space:nowrap!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  box-sizing:border-box!important;
  box-shadow:0 2px 7px rgba(0,0,0,.28)!important;
  transform:translate(-50%,-50%)!important;
  z-index:25!important;
}
.iro-image-reader .iro-image-audio::before{content:none!important;display:none!important;}
.iro-image-reader .iro-image-audio[data-playing="1"]{
  background:#18b86c!important;
}
.iro-image-reader .iro-image-audio:hover{
  transform:translate(-50%,-50%) scale(1.04)!important;
}
@media(max-width:720px){
  .iro-image-reader .iro-image-audio{
    padding:0 6px!important;
    font-size:clamp(9px,calc(var(--audio-size,23px)*.5),12px)!important;
  }
}


/* V85 — visible audio-marker overlay. Coordinates come from OCR of the rendered
   lesson image, not the PDF's hidden text layer. Keep controls compact so they
   sit on the printed speaker/number without obscuring the lesson. */
.iro-image-reader .iro-image-audio{
  --audio-size:22px!important;
  width:auto!important;
  min-width:0!important;
  height:22px!important;
  min-height:22px!important;
  max-height:22px!important;
  padding:0 6px!important;
  border:1px solid rgba(255,255,255,.98)!important;
  border-radius:999px!important;
  background:#1689df!important;
  color:#fff!important;
  font-size:11px!important;
  font-weight:900!important;
  line-height:22px!important;
  white-space:nowrap!important;
  box-shadow:0 1px 4px rgba(0,0,0,.28)!important;
  transform:translate(-50%,-50%)!important;
}
.iro-image-reader .iro-image-audio:hover{transform:translate(-50%,-50%)!important;filter:brightness(1.05)!important;}
.iro-image-reader .iro-image-audio[data-playing="1"]{background:#18b86c!important;}
@media(max-width:720px){
 .iro-image-reader .iro-image-audio{height:21px!important;min-height:21px!important;max-height:21px!important;padding:0 5px!important;font-size:10px!important;line-height:21px!important;}
}


