/* TypingMaster — shared styles
   Brand: change --brand gradient + .logo text to rebrand. */

:root{
  --bg:#0b1020;
  --bg2:#0e1530;
  --card:#141c3a;
  --card2:#18224a;
  --ink:#eef2ff;
  --muted:#9aa6c7;
  --line:rgba(255,255,255,.09);
  --teal:#4ade80;
  --amber:#fbbf24;
  --rose:#fb7185;
  --grad:linear-gradient(120deg,#d4f636,#4ade80 38%,#2dd4bf 72%,#22d3ee);
  --radius:16px;
  --shadow:0 18px 50px rgba(0,0,0,.45);
  --font:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Code",Menlo,Consolas,monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:var(--font);
  background:
    radial-gradient(900px 480px at 12% -6%,rgba(74,222,128,.12),transparent 60%),
    radial-gradient(900px 520px at 95% 8%,rgba(212,246,54,.10),transparent 60%),
    var(--bg);
  color:var(--ink);
  min-height:100vh;
  line-height:1.6;
}
a{color:inherit;text-decoration:none}
.wrap{max-width:1080px;margin:0 auto;padding:0 20px}

/* ---------- header ---------- */
header.site{
  position:sticky;top:0;z-index:50;
  background:rgba(11,16,32,.82);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
}
.nav{display:flex;align-items:center;justify-content:space-between;height:64px}
.logo{font-weight:800;font-size:1.25rem;letter-spacing:.5px;display:flex;align-items:center;gap:10px}
.logo .kb{
  width:34px;height:34px;border-radius:10px;display:grid;place-items:center;
  background:var(--grad);font-family:var(--mono);font-weight:700;color:#0b1020;font-size:1.05rem;
}
.logo em{font-style:normal;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.nav-links{display:flex;gap:6px}
.nav-links a{
  padding:9px 16px;border-radius:999px;font-weight:600;color:var(--muted);font-size:.95rem;
  transition:.18s;
}
.nav-links a:hover{color:var(--ink);background:rgba(255,255,255,.06)}
.nav-links a.active{color:#0b1020;background:var(--grad)}
@media(max-width:560px){
  .wrap{padding:0 12px}
  .logo{font-size:1.05rem;gap:7px}
  .logo .kb{width:29px;height:29px;font-size:.9rem;border-radius:8px}
  .nav-links{gap:2px}
  .nav-links a{padding:8px 7px;font-size:.8rem}
}

/* ---------- hero ---------- */
.hero{padding:72px 0 46px;text-align:center}
.eyebrow{
  display:inline-block;font-size:.8rem;font-weight:700;letter-spacing:2px;text-transform:uppercase;
  color:var(--teal);border:1px solid rgba(74,222,128,.35);border-radius:999px;padding:6px 16px;margin-bottom:18px;
  background:rgba(74,222,128,.07);
}
.hero h1{font-size:clamp(2rem,5.4vw,3.4rem);line-height:1.12;font-weight:800;max-width:760px;margin:0 auto 16px}
.hero h1 .grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p.lead{color:var(--muted);font-size:1.12rem;max-width:640px;margin:0 auto 30px}
.cta-row{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
.btn{
  display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:1rem;
  padding:14px 28px;border-radius:14px;border:0;cursor:pointer;transition:.18s;color:#0b1020;
  background:var(--grad);
}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(96,165,250,.35)}
.btn.ghost{background:rgba(255,255,255,.06);color:var(--ink);border:1px solid var(--line)}
.btn.ghost:hover{box-shadow:none;background:rgba(255,255,255,.1)}
.btn.small{padding:9px 18px;font-size:.9rem;border-radius:10px}

/* ---------- stat strip ---------- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:34px 0 8px}
.stat{
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);padding:18px 14px;text-align:center;
}
.stat b{font-size:1.7rem;display:block;font-family:var(--mono)}
.stat span{color:var(--muted);font-size:.82rem}
@media(max-width:640px){.stats{grid-template-columns:repeat(2,1fr)}}

/* ---------- cards ---------- */
.section{padding:44px 0}
.section h2{font-size:1.7rem;margin-bottom:6px}
.section .sub{color:var(--muted);margin-bottom:22px}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media(max-width:820px){.grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.grid{grid-template-columns:1fr}}
.card{
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);padding:22px;
  transition:.18s;
}
.card:hover{transform:translateY(-3px);border-color:rgba(74,222,128,.4)}
.card .ico{font-size:1.7rem;margin-bottom:10px}
.card h3{margin-bottom:8px;font-size:1.08rem}
.card p{color:var(--muted);font-size:.93rem}

/* ---------- footer ---------- */
footer.site{border-top:1px solid var(--line);margin-top:40px;padding:26px 0;color:var(--muted);font-size:.88rem}
footer.site .wrap{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
footer.site .wrap.legal{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;padding-top:12px;font-size:.82rem}
footer.site .wrap.legal a{color:var(--muted)}
footer.site .foot{display:flex;justify-content:space-between;align-items:center;gap:14px 28px;flex-wrap:wrap}
.foot-brand{display:flex;align-items:center;gap:12px}
.foot-brand .kb{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;font-weight:800;font-size:1.05rem;background:linear-gradient(120deg,#d4f636,#4ade80,#2dd4bf);color:#0b1020;box-shadow:0 4px 14px rgba(74,222,128,.35);flex:none}
.foot-brand strong{display:block;color:var(--ink);font-size:1rem;line-height:1.2}
.foot-brand p{margin:0;font-size:.8rem}
.foot-links{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px}
.foot-links a{color:var(--muted);text-decoration:none}
.foot-links a:hover{color:var(--ink)}
footer.site .copy{margin:0}

/* ---------- typing test ---------- */
.test-shell{max-width:900px;margin:0 auto}
.modebar{
  display:flex;flex-direction:column;gap:12px;margin:26px 0 8px;
  background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:14px;padding:14px 18px;
}
.modebar .grp{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.modebar .lbl{color:var(--muted);font-size:.8rem;font-weight:700;letter-spacing:1px;text-transform:uppercase;min-width:58px;margin:0 8px 0 0}
.modebar button{
  background:transparent;border:0;color:var(--muted);font-weight:700;font-size:.92rem;
  padding:8px 14px;border-radius:9px;cursor:pointer;transition:.15s;font-family:var(--mono);
}
.modebar button:hover{color:var(--ink)}
.modebar button.on{background:var(--grad);color:#0b1020}
.hud{display:flex;gap:26px;justify-content:center;margin:20px 0 6px;font-family:var(--mono)}
.hud .m{text-align:center}
.hud .m b{font-size:1.9rem;display:block;color:var(--teal)}
.hud .m span{font-size:.75rem;color:var(--muted);letter-spacing:1.5px;text-transform:uppercase}
.words-box{
  position:relative;background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);
  padding:30px 28px;margin:14px 0;cursor:text;min-height:190px;
  font-family:var(--mono);font-size:1.45rem;line-height:2.1;user-select:none;
}
@media(max-width:560px){.words-box{font-size:1.15rem;padding:22px 18px}}
.words-box .word{display:inline-block;margin-right:.55em;white-space:nowrap}
.words-box .ch{border-radius:4px;transition:background .08s,color .08s}
.words-box .ch.ok{color:var(--teal)}
.words-box .ch.bad{color:var(--rose);background:rgba(251,113,133,.14)}
.words-box .ch.next{background:rgba(251,191,36,.18);border-radius:4px;animation:blink 1.1s steps(1) infinite}
@keyframes blink{50%{background:rgba(251,191,36,.05)}}
.focus-hint{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;
  background:rgba(11,16,32,.9);border:1px solid var(--line);border-radius:999px;
  padding:10px 24px;font-size:.95rem;font-weight:700;color:var(--ink);z-index:5;
  box-shadow:var(--shadow);pointer-events:none;
}
.focus-hint.hidden{display:none}
#hiddenInput{position:fixed;top:-100px;left:-100px;width:10px;height:10px;opacity:0}
.result{
  text-align:center;background:linear-gradient(180deg,var(--card2),var(--bg2));
  border:1px solid rgba(74,222,128,.35);border-radius:var(--radius);padding:34px 20px;margin:18px 0;
  box-shadow:var(--shadow);
}
.result.hidden{display:none}
.result h2{margin-bottom:4px}
.result .big{font-family:var(--mono);font-size:3.4rem;font-weight:800;background:var(--grad);
  -webkit-background-clip:text;background-clip:text;color:transparent;line-height:1.2}
.result .big small{font-size:1.1rem;color:var(--muted);-webkit-text-fill-color:var(--muted)}
.result .row{display:flex;gap:30px;justify-content:center;margin:16px 0 22px;flex-wrap:wrap}
.result .row .m b{font-size:1.5rem;font-family:var(--mono);display:block}
.result .row .m span{color:var(--muted);font-size:.8rem}
.best-badge{
  display:inline-block;background:rgba(251,191,36,.14);border:1px solid rgba(251,191,36,.5);
  color:var(--amber);font-weight:700;border-radius:999px;padding:6px 16px;margin-bottom:10px;font-size:.9rem;
}
.test-actions{display:flex;gap:12px;justify-content:center;margin-top:6px;flex-wrap:wrap}
.tip{color:var(--muted);font-size:.88rem;text-align:center;margin-top:14px}

/* ---------- lessons ---------- */
.lesson-list{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
@media(max-width:700px){.lesson-list{grid-template-columns:1fr}}
.lesson-card{
  display:flex;gap:16px;align-items:center;background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);padding:18px;cursor:pointer;transition:.18s;
}
.lesson-card:hover{transform:translateY(-2px);border-color:rgba(74,222,128,.4)}
.lesson-num{
  flex:0 0 46px;width:46px;height:46px;border-radius:13px;display:grid;place-items:center;
  font-weight:800;font-family:var(--mono);background:rgba(255,255,255,.06);border:1px solid var(--line);
}
.lesson-card.done .lesson-num{background:var(--grad);color:#0b1020;border:0}
.lesson-card h3{font-size:1.02rem;margin-bottom:2px}
.lesson-card p{color:var(--muted);font-size:.86rem}
.lesson-card .keys{font-family:var(--mono);font-size:.78rem;color:var(--teal);margin-top:4px}
.lesson-card .go{margin-left:auto;font-size:1.3rem;color:var(--muted)}

.lesson-view{max-width:860px;margin:0 auto}
.lesson-head{display:flex;align-items:center;gap:14px;margin:26px 0 6px;flex-wrap:wrap}
.back{background:rgba(255,255,255,.06);border:1px solid var(--line);color:var(--ink);
  border-radius:10px;padding:9px 16px;font-weight:700;cursor:pointer;font-size:.9rem}
.back:hover{background:rgba(255,255,255,.12)}
.lesson-head h2{font-size:1.5rem}
.lesson-intro{color:var(--muted);margin:6px 0 18px}
.lesson-intro b{color:var(--teal)}
.kbd{
  display:inline-block;min-width:36px;text-align:center;font-family:var(--mono);font-size:1rem;font-weight:700;
  background:rgba(255,255,255,.07);border:1px solid var(--line);border-bottom-width:3px;
  border-radius:8px;padding:6px 11px;margin:0 3px;
}
.practice-box{
  background:linear-gradient(180deg,var(--card),var(--bg2));border:1px solid var(--line);
  border-radius:var(--radius);padding:28px 24px;margin:16px 0;cursor:text;
  font-family:var(--mono);font-size:1.35rem;line-height:2.15;user-select:none;position:relative;
}
.practice-box .ch.ok{color:var(--teal)}
.practice-box .ch.bad{color:var(--rose);background:rgba(251,113,133,.14)}
.practice-box .ch.next{background:rgba(251,191,36,.16);border-radius:4px}
.progress{height:10px;background:rgba(255,255,255,.07);border-radius:999px;overflow:hidden;margin:14px 0}
.progress i{display:block;height:100%;width:0;background:var(--grad);border-radius:999px;transition:width .2s}
.lesson-hud{display:flex;gap:24px;margin:10px 0;font-family:var(--mono)}
.lesson-hud .m b{font-size:1.4rem;color:var(--teal)}
.lesson-hud .m span{color:var(--muted);font-size:.75rem;display:block;letter-spacing:1px;text-transform:uppercase}
.lesson-done{
  text-align:center;padding:30px 20px;border:1px solid rgba(74,222,128,.35);border-radius:var(--radius);
  background:linear-gradient(180deg,var(--card2),var(--bg2));margin:16px 0;
}
.lesson-done.hidden{display:none}
.lesson-done h3{font-size:1.4rem;margin-bottom:8px}
.lesson-done p{color:var(--muted);margin-bottom:16px}

/* on-screen keyboard */
.kb-wrap{margin:22px 0;overflow:hidden;padding-bottom:6px;position:relative}
.kb-scale{width:max-content;margin:0 auto;transform-origin:top left}
.kb-row{display:flex;gap:6px;justify-content:center;margin-bottom:6px}
.key{
  min-width:58px;height:62px;padding:2px 12px;border-radius:11px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;font-family:var(--mono);font-size:1.08rem;font-weight:700;
  background:rgba(255,255,255,.05);border:1px solid var(--line);border-bottom-width:3px;color:var(--muted);
  transition:.12s;
}
.key small{font-size:.74rem;font-weight:400;color:var(--muted);opacity:.85;margin-top:2px}
.key.wide{min-width:102px}
.key.space{min-width:380px}
.key.next{background:rgba(251,191,36,.22);border-color:var(--amber);color:var(--ink);transform:translateY(1px)}
.key.hit{background:rgba(74,222,128,.25);border-color:var(--teal);color:var(--ink)}
.finger-legend{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:10px;font-size:.8rem;color:var(--muted)}
.finger-legend i{display:inline-block;width:12px;height:12px;border-radius:4px;margin-right:6px;vertical-align:-1px}

/* how-it-works steps */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;counter-reset:step}
@media(max-width:700px){.steps{grid-template-columns:1fr}}
.step{background:linear-gradient(180deg,var(--card),var(--bg2));border:1px solid var(--line);
  border-radius:var(--radius);padding:24px 20px;position:relative}
.step::before{
  counter-increment:step;content:counter(step);
  width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  background:var(--grad);color:#0b1020;font-weight:800;margin-bottom:12px;font-family:var(--mono);
}
.step h3{margin-bottom:8px}
.step p{color:var(--muted);font-size:.93rem}
.faq{max-width:760px;margin:0 auto}
.faq details{background:linear-gradient(180deg,var(--card),var(--bg2));border:1px solid var(--line);
  border-radius:12px;padding:16px 20px;margin-bottom:10px}
.faq summary{font-weight:700;cursor:pointer}
.faq p{color:var(--muted);margin-top:8px;font-size:.94rem}

/* ================= v2: glossy 3D + typing animations ================= */

/* aurora background blobs */
body{position:relative}
body::before,body::after{
  content:"";position:fixed;border-radius:50%;filter:blur(110px);z-index:-1;opacity:.5;
  animation:drift 16s ease-in-out infinite alternate;pointer-events:none;
}
body::before{width:520px;height:520px;left:-140px;top:-120px;
  background:radial-gradient(circle,rgba(74,222,128,.5),transparent 70%)}
body::after{width:620px;height:620px;right:-160px;top:30vh;
  background:radial-gradient(circle at 32% 24%,rgba(244,114,182,.3),transparent 62%),radial-gradient(circle,rgba(167,139,250,.45),transparent 70%);animation-delay:-8s}
@keyframes drift{
  from{transform:translate(0,0) scale(1)}
  to{transform:translate(60px,40px) scale(1.12)}
}

/* glossy 3D buttons */
.btn{
  position:relative;overflow:hidden;
  box-shadow:0 10px 26px rgba(96,165,250,.28),inset 0 1px 0 rgba(255,255,255,.55),inset 0 -3px 0 rgba(0,0,0,.18);
  text-shadow:0 1px 0 rgba(255,255,255,.25);
}
.btn::before{ /* travelling shine */
  content:"";position:absolute;top:0;bottom:0;left:-70%;width:45%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  transform:skewX(-20deg);transition:left .5s;
}
.btn:hover::before{left:130%}
.btn:active{transform:translateY(2px);box-shadow:0 4px 12px rgba(96,165,250,.25),inset 0 1px 0 rgba(255,255,255,.4)}
.btn.ghost{
  background:linear-gradient(180deg,rgba(255,255,255,.1),rgba(255,255,255,.03));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 6px 18px rgba(0,0,0,.35);
  text-shadow:none;
}
.hero .btn{animation:floaty 5s ease-in-out infinite}
.hero .btn.ghost{animation-delay:-2.5s}
@keyframes floaty{0%,100%{translate:0 0}50%{translate:0 -5px}}

/* glossy cards with sheen sweep */
.card{position:relative;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 14px 34px rgba(0,0,0,.35)}
.card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:46%;
  background:linear-gradient(180deg,rgba(255,255,255,.09),transparent);
  border-radius:var(--radius) var(--radius) 0 0;pointer-events:none;
}
.card::after{
  content:"";position:absolute;top:0;bottom:0;left:-80%;width:50%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.14),transparent);
  transform:skewX(-20deg);transition:left .6s;
}
.card:hover::after{left:140%}
.card:hover{transform:translateY(-5px) scale(1.01)}

/* stat cards rise in */
.stat{box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 10px 26px rgba(0,0,0,.35);
  animation:rise .55s cubic-bezier(.2,.9,.3,1.2) backwards}
.stat:nth-child(2){animation-delay:.07s}.stat:nth-child(3){animation-delay:.14s}.stat:nth-child(4){animation-delay:.21s}
@keyframes rise{from{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:none}}

/* 3D typing boxes: inset depth + gloss edge */
.words-box,.practice-box{
  box-shadow:inset 0 3px 14px rgba(0,0,0,.5),inset 0 -1px 0 rgba(255,255,255,.07),0 16px 40px rgba(0,0,0,.35);
  position:relative;
}
.words-box::before,.practice-box::before{
  content:"";position:absolute;top:0;left:14px;right:14px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);pointer-events:none;
}

/* ---- typing animations ---- */
.words-box .ch,.practice-box .ch{display:inline-block}
.words-box .ch.ok,.practice-box .ch.ok{animation:pop .22s cubic-bezier(.2,.9,.3,1.4)}
@keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.45);text-shadow:0 0 14px rgba(74,222,128,.9)}100%{transform:scale(1)}}
.words-box .ch.bad,.practice-box .ch.bad{animation:shake .25s}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}
/* wrong-key warning: whole box shakes with a red flash */
.words-box.warn,.practice-box.warn{animation:boxWarn .32s;border-color:rgba(248,113,113,.85)!important;
  box-shadow:0 0 0 3px rgba(248,113,113,.28),0 0 26px rgba(248,113,113,.45)!important}
@keyframes boxWarn{0%,100%{transform:translateX(0)}20%{transform:translateX(-8px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
.words-box .ch.next,.practice-box .ch.next{
  box-shadow:0 0 14px rgba(251,191,36,.75),inset 0 0 6px rgba(251,191,36,.35);
}
.words-box .word.done{animation:wordglow .55s ease-out}
@keyframes wordglow{
  0%{text-shadow:0 0 0 transparent;transform:translateY(0)}
  35%{text-shadow:0 0 18px rgba(74,222,128,.85);transform:translateY(-3px)}
  100%{text-shadow:0 0 0 transparent;transform:translateY(0)}
}

/* 3D keycaps */
.key{
  background:linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.03) 55%,rgba(0,0,0,.22));
  box-shadow:0 5px 0 rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.35);
  text-shadow:0 1px 2px rgba(0,0,0,.6);
}
.key.next{
  background:linear-gradient(180deg,rgba(251,191,36,.5),rgba(251,191,36,.18));
  box-shadow:0 7px 0 rgba(0,0,0,.45),0 0 22px rgba(251,191,36,.65),inset 0 1px 0 rgba(255,255,255,.5);
  transform:translateY(-2px);color:#fff;
}
.key.hit{
  transform:translateY(4px);
  background:linear-gradient(180deg,rgba(74,222,128,.55),rgba(74,222,128,.2));
  box-shadow:0 1px 0 rgba(0,0,0,.45),0 0 18px rgba(74,222,128,.7),inset 0 1px 0 rgba(255,255,255,.5);
  color:#fff;
}
.finger-legend{margin-top:12px}

/* glossy mode pills */
.modebar{box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 10px 26px rgba(0,0,0,.35)}
.modebar button{border-radius:9px;transition:.15s}
.modebar button.on{box-shadow:0 4px 14px rgba(96,165,250,.45),inset 0 1px 0 rgba(255,255,255,.5)}
.modebar button:not(.on):hover{background:rgba(255,255,255,.08);transform:translateY(-1px)}

/* HUD glow */
.hud .m b{text-shadow:0 0 18px rgba(74,222,128,.55)}

/* result + lesson-done pop-in */
.result,.lesson-done{animation:popin .45s cubic-bezier(.2,.9,.3,1.25) backwards;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14),var(--shadow)}
@keyframes popin{from{opacity:0;transform:scale(.92) translateY(14px)}to{opacity:1;transform:none}}
.best-badge{position:relative;overflow:hidden;
  box-shadow:0 0 20px rgba(251,191,36,.35),inset 0 1px 0 rgba(255,255,255,.3)}
.best-badge::after{
  content:"";position:absolute;top:0;bottom:0;left:-60%;width:40%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.6),transparent);
  transform:skewX(-20deg);animation:shine 2.2s ease-in-out infinite;
}
@keyframes shine{0%{left:-60%}60%,100%{left:140%}}

/* progress shimmer */
.progress{box-shadow:inset 0 2px 5px rgba(0,0,0,.5)}
.progress i{position:relative;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 0 12px rgba(74,222,128,.6)}
.progress i::after{
  content:"";position:absolute;top:0;bottom:0;left:-40%;width:35%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.65),transparent);
  transform:skewX(-20deg);animation:shine 1.8s ease-in-out infinite;
}

/* lesson cards + numbers */
.lesson-card{box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 10px 26px rgba(0,0,0,.3)}
.lesson-card:hover{transform:translateY(-4px) scale(1.01)}
.lesson-num{
  background:linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.03));
  box-shadow:0 4px 0 rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.35);
}
.lesson-card.done .lesson-num{box-shadow:0 4px 14px rgba(96,165,250,.5),inset 0 1px 0 rgba(255,255,255,.5)}

/* eyebrow + focus hint gloss */
.eyebrow{box-shadow:0 0 22px rgba(74,222,128,.25),inset 0 1px 0 rgba(255,255,255,.2)}
.focus-hint{background:rgba(11,16,32,.78);
  text-shadow:0 2px 8px rgba(0,0,0,.8)}

/* step cards */
.step{box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 12px 30px rgba(0,0,0,.32)}
.step::before{box-shadow:0 6px 16px rgba(96,165,250,.4),inset 0 1px 0 rgba(255,255,255,.5)}

/* responsive: roomier type on small screens, tighter boxes */
@media(max-width:640px){
  .words-box,.practice-box{border-radius:14px}
  .lesson-hud{gap:18px}
  .result .big{font-size:2.6rem}
}
@media(max-width:400px){
  .hud{gap:18px}
  .hud .m b{font-size:1.5rem}
}

/* reduced motion: calm everything down */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ================= v3: header buttons, custom panel, graph, light theme ================= */

.hidden{display:none!important}

/* header icon buttons (sound + theme) */
.hdr-btns{display:flex;gap:8px;margin-left:10px}
.icon-btn{
  width:38px;height:38px;border-radius:11px;border:1px solid var(--line);
  background:rgba(255,255,255,.06);font-size:1.05rem;cursor:pointer;transition:.15s;
  display:grid;place-items:center;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14);
}
.icon-btn:hover{background:rgba(255,255,255,.13);transform:translateY(-1px)}
.icon-btn:active{transform:translateY(1px)}

/* stats: auto-fit for 5 cards */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin:34px 0 8px}

/* custom text panel */
.custom-panel{
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin:0 0 14px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 12px 30px rgba(0,0,0,.3);
  animation:popin .3s cubic-bezier(.2,.9,.3,1.2) backwards;
}
.custom-panel h3{margin-bottom:6px}
.custom-panel p{color:var(--muted);font-size:.9rem;margin-bottom:10px}
.custom-panel textarea{
  width:100%;background:rgba(0,0,0,.25);border:1px solid var(--line);border-radius:10px;
  color:var(--ink);font-family:var(--font);font-size:.95rem;padding:12px;resize:vertical;margin-bottom:8px;
}
.custom-panel textarea:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 3px rgba(74,222,128,.2)}
.form-err{color:var(--rose)!important;font-weight:600}

/* WPM graph */
#wpmGraph{width:100%;height:150px;margin:12px 0 6px;display:block}

/* ---------- light theme ---------- */
[data-theme="light"]{
  --bg:#e6edff; --bg2:#d8e1fb; --card:#ffffff; --card2:#f2f6ff;
  --ink:#12203f; --muted:#4d5f85; --line:rgba(38,64,140,.16);
  --teal:#16a34a; --amber:#c2620a; --rose:#e11d48;
  --shadow:0 18px 44px rgba(22,163,74,.18);
}
[data-theme="light"] body::before,[data-theme="light"] body::after{opacity:.6}
[data-theme="light"] body::before{background:radial-gradient(circle,rgba(74,222,128,.5),transparent 70%)}
[data-theme="light"] body::after{background:radial-gradient(circle at 32% 24%,rgba(212,246,54,.35),transparent 62%),radial-gradient(circle,rgba(34,211,238,.40),transparent 70%)}
[data-theme="light"] header.site{background:rgba(255,255,255,.86)}
[data-theme="light"] .words-box,[data-theme="light"] .practice-box{
  border:2px solid transparent;
  background:
    linear-gradient(180deg,#ffffff,#f1f6ff) padding-box,
    linear-gradient(135deg,#4ade80,#2dd4bf,#22d3ee,#d4f636,#4ade80) border-box;
  background-size:auto,300% 300%;
  box-shadow:inset 0 2px 10px rgba(30,50,90,.06),0 16px 36px rgba(22,163,74,.16),0 0 26px rgba(74,222,128,.12);
}
[data-theme="light"] .words-box::before,[data-theme="light"] .practice-box::before{
  background:linear-gradient(90deg,transparent,rgba(21,36,65,.2),transparent);
}
[data-theme="light"] .key{
  background:linear-gradient(180deg,#ffffff,#e4eaf5);
  color:#1c2947;text-shadow:none;border-color:rgba(21,36,65,.30);
  box-shadow:0 4px 0 rgba(30,50,90,.18),inset 0 1px 0 #ffffff;
}
[data-theme="light"] .key small{color:#54648a}
.kb-lang{position:absolute;top:-8px;right:6px;z-index:2;font-size:.72rem;font-weight:800;letter-spacing:1.5px;
  color:#0b1020;background:linear-gradient(120deg,#d4f636,#4ade80);padding:5px 14px;border-radius:999px;
  box-shadow:0 4px 14px rgba(74,222,128,.4)}
[data-theme="light"] .key.next{color:#7c2d12;text-shadow:none;background:linear-gradient(180deg,#fde68a,#fbbf24);
  border-color:#d97706;box-shadow:0 4px 0 rgba(180,100,10,.30),0 0 18px rgba(251,191,36,.55),inset 0 1px 0 #fff}
[data-theme="light"] .key.hit{color:#065f46;text-shadow:none;background:linear-gradient(180deg,#a7f3d0,#6ee7b7);
  border-color:#10b981;box-shadow:0 1px 0 rgba(30,50,90,.20),0 0 16px rgba(74,222,128,.50),inset 0 1px 0 #fff}
[data-theme="light"] .modebar{background:rgba(255,255,255,.78)}
[data-theme="light"] .modebar button{color:var(--muted)}
[data-theme="light"] .kbd{background:rgba(21,36,65,.06);color:var(--ink)}
[data-theme="light"] .focus-hint{background:rgba(255,255,255,.94);color:var(--ink);text-shadow:none}
[data-theme="light"] .btn.ghost{
  background:linear-gradient(180deg,rgba(21,36,65,.07),rgba(21,36,65,.02));
  color:var(--ink);text-shadow:none;
}
[data-theme="light"] .icon-btn{background:rgba(21,36,65,.06)}
[data-theme="light"] .icon-btn:hover{background:rgba(21,36,65,.12)}
[data-theme="light"] .custom-panel textarea{background:#fff;color:var(--ink)}
[data-theme="light"] .lesson-num{background:linear-gradient(180deg,#ffffff,#e7edf6);color:var(--ink)}
[data-theme="light"] .hud .m b{text-shadow:0 0 16px rgba(13,148,136,.35)}
[data-theme="light"] .eyebrow{border-color:rgba(13,148,136,.45);background:rgba(13,148,136,.08)}
[data-theme="light"] .card::before{background:linear-gradient(180deg,rgba(21,36,65,.05),transparent)}
[data-theme="light"] .progress i{box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 0 10px rgba(13,148,136,.4)}

/* mobile: hide logo text to fit toggles + links */
@media(max-width:560px){
  .logo span:last-child{display:none}
  .hdr-btns{margin-left:4px;gap:6px}
  .icon-btn{width:33px;height:33px;font-size:.95rem;border-radius:9px}
}

/* ================= v4: game, certificates, history ================= */

/* word drop game */
.game-shell{max-width:900px;margin:0 auto}
.game-area{
  position:relative;height:440px;overflow:hidden;cursor:text;
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:inset 0 3px 14px rgba(0,0,0,.5),inset 0 -1px 0 rgba(255,255,255,.07),0 16px 40px rgba(0,0,0,.35);
  margin:14px 0;user-select:none;
}
@media(max-width:640px){.game-area{height:380px}}
.game-area::before{
  content:"";position:absolute;top:0;left:14px;right:14px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);pointer-events:none;z-index:5;
}
.game-area::after{ /* danger zone */
  content:"";position:absolute;left:0;right:0;bottom:0;height:34px;
  background:linear-gradient(180deg,transparent,rgba(251,113,133,.16));pointer-events:none;
}
.game-area.hitflash{animation:hitflash .35s}
@keyframes hitflash{0%,100%{box-shadow:inset 0 3px 14px rgba(0,0,0,.5)}40%{box-shadow:inset 0 0 60px rgba(251,113,133,.55)}}
.drop-word{
  position:absolute;top:0;left:0;font-family:var(--mono);font-size:1.35rem;font-weight:700;
  background:rgba(255,255,255,.07);border:1px solid var(--line);border-radius:10px;
  padding:6px 14px;white-space:nowrap;
  box-shadow:0 8px 20px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.2);
  will-change:transform;
}
.drop-word .ch{display:inline-block}
.drop-word .ch.ok{color:var(--teal);animation:pop .2s}
.drop-word.target{border-color:var(--amber);box-shadow:0 8px 20px rgba(0,0,0,.4),0 0 18px rgba(251,191,36,.5)}
.drop-word.pop{animation:wordpop .22s forwards}
@keyframes wordpop{to{transform:scale(1.6)!important;opacity:0}}
.drop-word.shake{animation:shake .25s}
.game-overlay{
  position:absolute;inset:0;z-index:10;display:flex;flex-direction:column;gap:12px;
  align-items:center;justify-content:center;text-align:center;padding:20px;
  background:rgba(11,16,32,.78);backdrop-filter:blur(4px);border-radius:var(--radius);
}
.game-overlay h2{font-size:1.8rem}
.game-overlay p{color:var(--muted)}
[data-theme="light"] .game-overlay{background:rgba(255,255,255,.88)}
[data-theme="light"] .drop-word{background:rgba(255,255,255,.9);box-shadow:0 8px 20px rgba(30,50,90,.18),inset 0 1px 0 #fff}

/* certificate */
.cert-btn-row{margin-top:4px}
.cert-modal{
  position:fixed;inset:0;z-index:200;display:flex;flex-direction:column;gap:14px;
  align-items:center;justify-content:center;padding:24px;
  background:rgba(5,8,18,.85);backdrop-filter:blur(6px);
}
.cert-modal.hidden{display:none!important}
.cert-card{
  width:min(680px,94vw);background:linear-gradient(160deg,#fdfbf5,#f3ecd9);
  border-radius:8px;padding:14px;color:#2a2118;
  box-shadow:0 30px 80px rgba(0,0,0,.6),inset 0 0 0 2px #b98a2f,inset 0 0 0 10px #fdfbf5,inset 0 0 0 12px #b98a2f;
  animation:popin .45s cubic-bezier(.2,.9,.3,1.25) backwards;
}
.cert-inner{text-align:center;padding:34px 26px}
.cert-brand{font-weight:800;letter-spacing:3px;font-size:.85rem;color:#8a6a25;text-transform:uppercase}
.cert-inner h2{font-size:1.9rem;margin:10px 0 2px;color:#2a2118}
.cert-tier{font-size:1.15rem;font-weight:800;margin-bottom:14px;
  background:linear-gradient(120deg,#b98a2f,#e8c15a,#b98a2f);-webkit-background-clip:text;background-clip:text;color:transparent}
.cert-inner p{color:#5a4c33}
.cert-name{font-size:2rem;font-weight:800;color:#2a2118;border-bottom:2px solid #b98a2f;
  display:inline-block;min-width:280px;padding:4px 18px;margin:6px 0 12px}
.cert-date{margin-top:14px;font-size:.9rem;color:#8a7a55}
.cert-modal input{
  width:min(420px,90vw);padding:12px 16px;border-radius:10px;font-size:1rem;
  border:1px solid var(--line);background:rgba(255,255,255,.08);color:var(--ink);
}
.cert-modal input:focus{outline:none;border-color:var(--teal)}

/* history chart (home) */
.hist-wrap{margin-top:8px}
#histChart{width:100%;height:170px;display:block;margin:6px 0}
.hist-empty{color:var(--muted);text-align:center;padding:26px 10px;border:1px dashed var(--line);border-radius:12px}
.mode-best{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.mode-chip{background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:999px;
  padding:7px 15px;font-size:.85rem;font-weight:600}
.mode-chip b{font-family:var(--mono);color:var(--teal)}
[data-theme="light"] .mode-chip{background:rgba(21,36,65,.05)}

/* ================= v5: layouts, heatmap, daily, backup ================= */

/* keyboard layout selector */
.layout-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 14px}
.layout-row .lbl{font-size:.75rem;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted)}
.layout-row button{
  border:1px solid var(--line);background:rgba(255,255,255,.05);color:var(--muted);
  font-family:var(--font);font-weight:700;font-size:.8rem;padding:8px 14px;border-radius:9px;cursor:pointer;transition:.15s;
}
.layout-row button:hover{color:var(--ink);background:rgba(255,255,255,.1)}
.layout-row button.on{
  background:linear-gradient(120deg,var(--teal),#22d3ee);color:#0b1020;border-color:transparent;
  box-shadow:0 4px 14px rgba(74,222,128,.35);
}
.tip-inline{font-size:.8rem;color:var(--muted)}
[data-theme="light"] .layout-row button{background:rgba(21,36,65,.05)}

/* daily challenge card */
.daily-card{border-color:rgba(251,191,36,.35)}
.daily-card h3{margin-bottom:6px}

/* key heatmap */
.heat-map{margin-top:6px}
.heat-row{display:flex;gap:7px;justify-content:center;margin-bottom:7px}
.heat-key{
  width:44px;height:44px;display:grid;place-items:center;border-radius:10px;
  font-family:var(--mono);font-weight:700;font-size:1rem;color:#0b1020;
  box-shadow:inset 0 2px 0 rgba(255,255,255,.35),0 4px 10px rgba(0,0,0,.3);
  cursor:default;
}
.heat-key.dim{background:rgba(255,255,255,.06);color:var(--muted);box-shadow:inset 0 0 0 1px var(--line)}
[data-theme="light"] .heat-key.dim{background:rgba(21,36,65,.06)}
.heat-legend{display:flex;gap:16px;justify-content:center;margin-top:10px;font-size:.8rem;color:var(--muted)}
@media(max-width:560px){.heat-key{width:34px;height:38px;font-size:.9rem}}

/* ================= v6: achievements, toast, strict ================= */

/* toast notifications */
.tm-toast{
  position:fixed;left:50%;bottom:26px;transform:translate(-50%,80px);z-index:500;
  background:linear-gradient(120deg,#d4f636,#4ade80);color:#0b1020;font-weight:800;
  padding:14px 24px;border-radius:14px;box-shadow:0 16px 40px rgba(0,0,0,.5);
  opacity:0;transition:transform .35s cubic-bezier(.2,.9,.3,1.2),opacity .3s;
  max-width:92vw;text-align:center;pointer-events:none;
}
.tm-toast.show{transform:translate(-50%,0);opacity:1}

/* achievements grid */
.ach-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:6px}
.ach{
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px solid var(--line);border-radius:14px;padding:16px 12px;text-align:center;
  filter:grayscale(1);opacity:.45;transition:.25s;
}
.ach.got{filter:none;opacity:1;box-shadow:0 8px 24px rgba(74,222,128,.12)}
.ach-icon{font-size:2rem;display:block;margin-bottom:8px}
.ach.got .ach-icon{animation:pop .4s}
.ach-name{display:block;font-weight:800;font-size:.9rem;margin-bottom:4px}
.ach-desc{display:block;font-size:.75rem;color:var(--muted);line-height:1.4}

/* strict mode */
.words-box.strict-on{border-color:rgba(251,113,133,.55);box-shadow:inset 0 2px 10px rgba(0,0,0,.5),0 0 24px rgba(251,113,133,.25)}
#strictBtn.on{
  background:linear-gradient(120deg,#fb7185,#f43f5e);color:#fff;border-color:transparent;
  box-shadow:0 4px 14px rgba(251,113,133,.4);
}

/* ================= v8: colorful popups ================= */
@keyframes popframe{to{background-position:300% 0}}

/* game overlay: aurora backdrop + rainbow-framed card */
.game-overlay{
  background:
    radial-gradient(500px 260px at 20% 15%, rgba(74,222,128,.22), transparent 60%),
    radial-gradient(500px 260px at 85% 85%, rgba(167,139,250,.22), transparent 60%),
    radial-gradient(420px 240px at 80% 10%, rgba(244,114,182,.16), transparent 60%),
    rgba(7,10,24,.82);
}
.game-card{
  max-width:min(480px,92%);
  border:2px solid transparent;border-radius:20px;padding:34px 38px;text-align:center;
  background:
    linear-gradient(180deg, rgba(26,34,64,.97), rgba(12,17,36,.97)) padding-box,
    linear-gradient(135deg,#d4f636,#4ade80,#2dd4bf,#22d3ee,#4ade80,#d4f636) border-box;
  background-size:auto,300% 300%;
  animation:popframe 7s linear infinite, popin .45s cubic-bezier(.2,.9,.3,1.25) backwards;
  box-shadow:0 24px 70px rgba(0,0,0,.55),0 0 44px rgba(167,139,250,.18);
}
.game-card h2{
  font-size:1.9rem;margin:0 0 10px;
  background:linear-gradient(90deg,#d4f636,#4ade80,#2dd4bf);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.game-card p{color:var(--muted);margin:8px 0}
.game-card .btn{margin-top:10px}
[data-theme="light"] .game-card{background:linear-gradient(180deg,#ffffff,#eef2ff)}
[data-theme="light"] .game-card p{color:#5b6b8c}

/* certificate modal: aurora backdrop + animated rainbow frame around the paper */
.cert-modal{
  background:
    radial-gradient(600px 320px at 15% 10%, rgba(74,222,128,.16), transparent 60%),
    radial-gradient(600px 320px at 85% 90%, rgba(244,114,182,.15), transparent 60%),
    radial-gradient(500px 300px at 85% 10%, rgba(167,139,250,.16), transparent 60%),
    rgba(5,8,18,.88);
}
.cert-card{
  border:4px solid transparent;
  background:
    linear-gradient(160deg,#fdfbf5,#f3ecd9) padding-box,
    linear-gradient(135deg,#fbbf24,#d4f636,#4ade80,#2dd4bf,#fbbf24) border-box;
  background-size:auto,300% 300%;
  animation:popframe 8s linear infinite, popin .45s cubic-bezier(.2,.9,.3,1.25) backwards;
  box-shadow:0 30px 80px rgba(0,0,0,.6),0 0 46px rgba(244,114,182,.3),
    inset 0 0 0 2px #b98a2f,inset 0 0 0 10px #fdfbf5,inset 0 0 0 12px #b98a2f;
}

/* toast: flowing rainbow */
.tm-toast{
  background:linear-gradient(120deg,#d4f636,#4ade80,#2dd4bf,#22d3ee,#d4f636);
  background-size:300% 300%;animation:popframe 5s linear infinite;
}

/* instant theme switching: no half-faded text while colors flip */
html.theming *,html.theming *::before,html.theming *::after{transition:none!important}

/* ================= v9: vivid pop recolor ================= */

/* gradient frames on typing boxes (dark theme; light has its own above) */
.words-box,.practice-box{
  border:2px solid transparent;
  background:
    linear-gradient(180deg,var(--card),var(--bg2)) padding-box,
    linear-gradient(135deg,rgba(74,222,128,.65),rgba(96,165,250,.5),rgba(167,139,250,.65),rgba(244,114,182,.5),rgba(74,222,128,.65)) border-box;
  background-size:auto,300% 300%;
}

/* gradient bar under section titles */
.section h2{position:relative;padding-bottom:12px}
.section h2::after{
  content:"";position:absolute;left:0;bottom:0;width:64px;height:4px;border-radius:4px;
  background:linear-gradient(90deg,#d4f636,#4ade80,#2dd4bf,#22d3ee);
  box-shadow:0 0 12px rgba(96,165,250,.55);
}

/* punchier buttons + active mode pills */
.btn{
  box-shadow:0 10px 30px rgba(139,92,246,.38),inset 0 1px 0 rgba(255,255,255,.55),inset 0 -3px 0 rgba(0,0,0,.18);
}
.modebar button.on{
  box-shadow:0 4px 18px rgba(139,92,246,.55),inset 0 1px 0 rgba(255,255,255,.5);
}

/* eyebrow badge pops more */
.eyebrow{
  border-color:rgba(74,222,128,.55);background:rgba(74,222,128,.1);
  box-shadow:0 0 26px rgba(74,222,128,.3),inset 0 1px 0 rgba(255,255,255,.2);
}

/* current character pops harder */
.words-box .ch.next,.practice-box .ch.next{
  background:rgba(251,191,36,.32);
  box-shadow:0 0 18px rgba(251,191,36,.9),inset 0 0 8px rgba(251,191,36,.45);
}

/* unlocked achievements glow */
.ach.got{
  border-color:rgba(74,222,128,.45);
  box-shadow:0 8px 26px rgba(74,222,128,.2),0 0 18px rgba(74,222,128,.15);
}

/* cards get a whisper of color */
.card{
  border:1px solid rgba(139,92,246,.16);
  box-shadow:0 16px 40px rgba(20,30,70,.35),0 0 24px rgba(139,92,246,.08),inset 0 1px 0 rgba(255,255,255,.09);
}
[data-theme="light"] .card{
  border:1px solid rgba(99,102,241,.16);
  box-shadow:0 16px 38px rgba(22,163,74,.16),0 0 22px rgba(139,92,246,.08),inset 0 1px 0 #ffffff;
}

/* stat numbers glow */
.hud .m b{text-shadow:0 0 20px rgba(74,222,128,.5)}
.result .big{
  background:linear-gradient(120deg,#d4f636,#4ade80,#2dd4bf,#22d3ee);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
