/* TypeSprint Typing Test v1.1 – all styles scoped under .tsp */
.tsp{--bg:#f4f5fc;--card:#fff;--ink:#0f1226;--mute:#5d6486;--line:#e3e6f4;--p1:#5b3df5;--p2:#2d8cff;--tint:#eef0ff;--ok:#0fa86f;--okbg:#e5f8ef;--bad:#e8365d;--badbg:#fdeaf0;--grad:linear-gradient(135deg,#5b3df5 0%,#2d8cff 100%);--shadow:0 20px 60px -20px rgba(70,60,200,.28),0 2px 6px rgba(20,20,60,.05);
font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;color:var(--ink);line-height:1.65;max-width:980px;margin:24px auto;-webkit-font-smoothing:antialiased;text-align:left}
.tsp *{box-sizing:border-box}
.tsp h2,.tsp h3{font-family:inherit;color:var(--ink);text-transform:none}
.tsp p{color:inherit;max-width:75ch}
.tsp a{color:var(--p1)}
.tsp.tsp-modalwrap{margin:0;max-width:none}

/* ---------- Test card ---------- */
.tsp .test{position:relative;overflow:hidden;background:radial-gradient(600px 220px at 0% 0%,rgba(91,61,245,.07),transparent 70%),radial-gradient(600px 220px at 100% 100%,rgba(45,140,255,.08),transparent 70%),var(--card);border:1px solid var(--line);border-radius:28px;padding:34px 30px 26px;box-shadow:var(--shadow)}
.tsp .prog{position:absolute;left:0;top:0;width:100%;height:6px;background:var(--tint)}
.tsp .prog i{display:block;width:100%;height:100%;background:var(--grad);border-radius:0 6px 6px 0;transition:width 1s linear}

/* ---------- Stat cards ---------- */
.tsp .top{display:grid;grid-template-columns:1.15fr 1fr 1fr 1fr;gap:14px;margin:0 0 22px}
.tsp .pill{position:relative;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:14px 16px 12px;text-align:left;box-shadow:0 1px 2px rgba(20,20,60,.04)}
.tsp .pill:before{content:"";position:absolute;left:16px;top:0;width:28px;height:4px;border-radius:0 0 4px 4px;background:var(--p2)}
.tsp .pill:nth-child(3):before{background:var(--p1)}
.tsp .pill:nth-child(4):before{background:var(--ok)}
.tsp .pill b{display:block;margin-top:4px;font-size:2.1rem;line-height:1.1;font-weight:800;letter-spacing:-.04em;font-variant-numeric:tabular-nums}
.tsp .pill span{display:block;font-size:.72rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--mute)}
.tsp .pill.t{background:var(--grad);border:0;box-shadow:0 12px 28px -10px rgba(70,60,220,.6)}
.tsp .pill.t:before{background:rgba(255,255,255,.55)}
.tsp .pill.t b,.tsp .pill.t span{color:#fff}
.tsp .pill.t span{opacity:.85}

/* ---------- Words area ---------- */
.tsp #tsp-words{position:relative;height:calc(10.2rem + 22px);overflow:hidden;padding:11px 20px;background:#f7f8fe;border:1px solid var(--line);border-radius:20px;font-size:clamp(1.3rem,2.6vw,1.65rem);line-height:3.4rem;font-weight:500;letter-spacing:.005em;color:#2a2f4d;cursor:text;user-select:none;-webkit-mask-image:linear-gradient(#000 78%,rgba(0,0,0,.45));mask-image:linear-gradient(#000 78%,rgba(0,0,0,.45))}
.tsp #tsp-words span{display:inline-block;margin:0 3px;padding:0 9px;border-radius:10px;transition:background .12s,color .12s}
.tsp #tsp-words span.cur{background:var(--card);color:var(--p1);font-weight:700;box-shadow:0 0 0 2px var(--p1),0 8px 18px -8px rgba(91,61,245,.55)}
.tsp #tsp-words span.ok{color:var(--ok)}
.tsp #tsp-words span.bad{color:var(--bad);background:var(--badbg);text-decoration:line-through;text-decoration-thickness:2px}
.tsp #tsp-words span.cur.wrongnow{color:var(--bad);background:var(--badbg);box-shadow:0 0 0 2px var(--bad)}

/* ---------- Input + buttons ---------- */
.tsp .row{display:flex;gap:12px;margin-top:18px}
.tsp #tsp-inp{flex:1;min-width:0;font:inherit;font-size:1.35rem;font-weight:500;padding:16px 22px;color:var(--ink);background:var(--card);border:2px solid var(--line);border-radius:18px;box-shadow:inset 0 2px 4px rgba(20,20,60,.04);transition:border-color .15s,box-shadow .15s}
.tsp #tsp-inp::placeholder{color:#9aa0be}
.tsp #tsp-inp:focus{outline:none;border-color:var(--p1);box-shadow:0 0 0 5px rgba(91,61,245,.14)}
.tsp button{font:inherit;font-weight:700;font-size:1rem;letter-spacing:.01em;border:0;border-radius:18px;padding:0 28px;min-height:58px;color:#fff;background:var(--grad);cursor:pointer;box-shadow:0 12px 24px -10px rgba(70,60,220,.65);transition:transform .15s,box-shadow .15s,filter .15s}
.tsp button:hover{transform:translateY(-2px);filter:brightness(1.06);box-shadow:0 16px 30px -10px rgba(70,60,220,.75)}
.tsp button:active{transform:translateY(1px)}
.tsp button.ghost{background:var(--tint);color:var(--p1);box-shadow:none}
.tsp button.ghost:before{content:"\21BB";margin-right:8px;font-weight:800}
.tsp button:focus-visible,.tsp summary:focus-visible{outline:3px solid var(--p1);outline-offset:3px}
.tsp .hint{margin:14px 4px 0;color:var(--mute);font-size:.9rem}
.tsp .hint kbd{font:inherit;font-size:.78rem;font-weight:700;padding:2px 8px;background:var(--card);border:1px solid var(--line);border-bottom-width:3px;border-radius:7px;color:var(--ink)}

/* ---------- Results popup ---------- */
.tsp #tsp-modal{position:fixed;inset:0;z-index:99999;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(10,12,34,.6);backdrop-filter:blur(6px)}
.tsp #tsp-modal.on{display:flex}
.tsp .box{width:100%;max-width:480px;max-height:94vh;overflow:auto;background:var(--card);border-radius:30px;box-shadow:0 40px 100px -20px rgba(0,0,0,.55);animation:tsp-pop .32s cubic-bezier(.2,1.25,.4,1)}
@keyframes tsp-pop{from{transform:translateY(24px) scale(.94);opacity:0}to{transform:none;opacity:1}}
.tsp .mhead{text-align:center;padding:30px 24px 26px;background:radial-gradient(300px 160px at 50% 0%,rgba(255,255,255,.25),transparent 70%),var(--grad);color:#fff}
.tsp .mhead h2{margin:0;color:#fff;font-size:.85rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;opacity:.85}
.tsp .big{margin:6px 0 4px;font-size:5rem;line-height:1;font-weight:800;letter-spacing:-.05em;color:#fff}
.tsp .big small{font-size:1.4rem;font-weight:700;letter-spacing:0;opacity:.8}
.tsp #tsp-rl{display:inline-block;padding:5px 16px;border-radius:999px;background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.35);color:#fff;font-size:.88rem;font-weight:700}
.tsp .mbody{padding:22px 24px 26px}
.tsp .grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0 0 16px}
.tsp .grid div{padding:12px 16px;background:var(--bg);border:1px solid var(--line);border-left:4px solid var(--p2);border-radius:14px}
.tsp .grid div:nth-child(2){border-left-color:var(--p1)}
.tsp .grid div:nth-child(3){border-left-color:var(--ok)}
.tsp .grid div:nth-child(4){border-left-color:var(--bad)}
.tsp .grid div:nth-child(n+5){border-left-color:#b7bcd6}
.tsp .grid b{display:block;font-size:1.45rem;line-height:1.2;letter-spacing:-.02em}
.tsp .grid span{font-size:.76rem;color:var(--mute);font-weight:600}
.tsp #tsp-rmis{font-size:.88rem;color:var(--mute);margin-bottom:10px}
.tsp #tsp-rbest{margin:0 0 16px;padding:10px 14px;background:var(--okbg);color:#0a7a50;border-radius:12px;font-weight:700;font-size:.92rem;text-align:center}
.tsp #tsp-again{width:100%}

/* ---------- Content sections ---------- */
.tsp .card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:26px;margin:16px 0;box-shadow:0 1px 3px rgba(20,20,60,.04)}
.tsp h2.sec{display:flex;align-items:center;gap:12px;margin:56px 0 16px;font-size:1.8rem;font-weight:800;letter-spacing:-.03em}
.tsp h2.sec:before{content:"";width:6px;height:30px;border-radius:4px;background:var(--grad)}
.tsp .tips{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;margin:16px 0}
.tsp .tips .card{margin:0}
.tsp .tips h3{margin:12px 0 4px;font-size:1.08rem;font-weight:700}
.tsp .tips p{margin:0;color:var(--mute);font-size:.95rem}
.tsp .ico{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:var(--tint);color:var(--p1);font-weight:800;font-size:1.2rem}
.tsp details{margin:10px 0;padding:0 22px;background:var(--card);border:1px solid var(--line);border-radius:16px;transition:border-color .15s,box-shadow .15s}
.tsp details[open]{border-color:var(--p1);box-shadow:0 10px 26px -14px rgba(91,61,245,.5)}
.tsp summary{cursor:pointer;padding:17px 0;font-weight:700}
.tsp details p{margin:0 0 18px;color:var(--mute)}
.tsp table.lv,.tsp .hist{width:100%;border-collapse:collapse}
.tsp .lv td,.tsp .lv th,.tsp .hist td,.tsp .hist th{padding:12px 8px;text-align:left;border-bottom:1px solid var(--line)}
.tsp .lv th,.tsp .hist th{font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mute)}
.tsp .lv tr:last-child td{border-bottom:0}

/* ---------- Tablet / Mobile ---------- */
@media(max-width:720px){
 .tsp .test{padding:26px 16px 20px;border-radius:24px}
 .tsp .top{grid-template-columns:1fr 1fr;gap:10px}
 .tsp .pill b{font-size:1.8rem}
 .tsp #tsp-words{height:calc(8.7rem + 20px);line-height:2.9rem;padding:10px 12px;border-radius:16px}
 .tsp #tsp-words span{padding:0 7px;margin:0 2px}
 .tsp .row{flex-direction:column;gap:10px}
 .tsp #tsp-inp{font-size:1.2rem;padding:15px 18px}
 .tsp button{width:100%;min-height:54px}
 .tsp h2.sec{font-size:1.5rem;margin-top:44px}
 .tsp #tsp-modal{align-items:flex-end;padding:0}
 .tsp .box{max-width:none;border-radius:28px 28px 0 0;animation-name:tsp-up}
 .tsp .big{font-size:4.2rem}
}
@keyframes tsp-up{from{transform:translateY(100%)}to{transform:none}}
@media(max-width:380px){.tsp .grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.tsp .box,.tsp .prog i,.tsp button{animation:none;transition:none}}

/* ---------- Banner / hero + ad slots ---------- */
.tsp .hero{position:relative;text-align:center;padding:48px 16px 30px}
.tsp .hero:before{content:"";position:absolute;left:50%;top:-30px;width:760px;max-width:100%;height:330px;transform:translateX(-50%);background:radial-gradient(closest-side,rgba(91,61,245,.22),rgba(45,140,255,.10),transparent);z-index:0;pointer-events:none}
.tsp .hero>*{position:relative;z-index:1}
.tsp .badges{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:20px}
.tsp .badges span{padding:6px 15px;background:var(--card);border:1px solid var(--line);border-radius:999px;font-size:.82rem;font-weight:700;color:var(--mute)}
.tsp .badges span:before{content:"";display:inline-block;width:7px;height:7px;margin-right:8px;border-radius:50%;background:var(--ok)}
.tsp .hero h1{margin:0 0 14px;font-family:inherit;font-size:clamp(2.3rem,6.5vw,4rem);line-height:1.05;font-weight:800;letter-spacing:-.04em;color:transparent;background:linear-gradient(120deg,var(--ink) 25%,var(--p1) 75%);-webkit-background-clip:text;background-clip:text}
.tsp .hero p{margin:0 auto;max-width:560px;color:var(--mute);font-size:1.15rem}
.tsp .ad{display:flex;align-items:center;justify-content:center;max-width:728px;min-height:90px;margin:28px auto;background:var(--card);border:1px dashed #cfd4ea;border-radius:14px;color:var(--mute);font-size:.78rem}

/* ---------- Difficulty selector ---------- */
.tsp .levels{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 20px}
.tsp .levels button.lvl{position:relative;display:block;width:100%;min-height:0;padding:12px 16px 12px 40px;text-align:left;color:var(--ink);background:var(--card);border:2px solid var(--line);border-radius:16px;box-shadow:none;filter:none}
.tsp .levels button.lvl:hover{transform:translateY(-1px);border-color:#c9cff0;box-shadow:0 8px 18px -12px rgba(40,50,140,.45)}
.tsp .levels button.lvl:before{content:"";position:absolute;left:14px;top:50%;width:14px;height:14px;margin-top:-7px;border-radius:50%;border:2px solid #c3c9e6;background:var(--card)}
.tsp .levels button.lvl b{display:block;font-size:1rem;line-height:1.2}
.tsp .levels button.lvl small{display:block;margin-top:2px;font-size:.76rem;font-weight:500;color:var(--mute)}
.tsp .levels button.lvl.on{border-color:var(--p1);background:var(--tint);box-shadow:0 10px 22px -14px rgba(91,61,245,.7)}
.tsp .levels button.lvl.on:before{border-color:var(--p1);background:radial-gradient(circle,var(--p1) 45%,transparent 50%)}
.tsp .levels button.lvl.on b{color:var(--p1)}
@media(max-width:720px){.tsp .levels{gap:8px}.tsp .levels button.lvl{padding:10px 8px 10px 30px;min-height:0}.tsp .levels button.lvl:before{left:9px;width:12px;height:12px;margin-top:-6px}.tsp .levels button.lvl small{display:none}}

/* ---------- Animated keyboard + hands ---------- */
.tsp .kb{margin-top:24px;padding:16px 8px 0;background:#fff;border:1px solid var(--line);border-radius:22px;overflow:hidden}
.tsp .kb svg{display:block;width:100%;max-width:760px;height:auto;margin:0 auto;overflow:hidden}
.tsp .kb rect.hl{fill:rgba(61,107,255,0);stroke:none;pointer-events:none;transition:fill .09s}
.tsp .kb rect.hl.on{fill:rgba(47,125,225,.38);stroke:#2f7de1;stroke-width:1.4}

/* ---------- Design v3 ---------- */
.tsp,.tsp button,.tsp input{font-family:Arial,Helvetica,sans-serif}
.tsp{margin:32px auto}
.tsp .hero{padding:72px 16px 46px}
.tsp .hero h1{font-size:clamp(2.4rem,6.5vw,4.2rem)}
.tsp .hero p{font-size:1.2rem}
.tsp .hero:after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background-image:radial-gradient(rgba(91,61,245,.2) 1.2px,transparent 1.4px);background-size:22px 22px;-webkit-mask-image:radial-gradient(closest-side,#000,transparent);mask-image:radial-gradient(closest-side,#000,transparent)}
.tsp .ad{margin:48px auto}
.tsp .test{padding:42px 36px 34px;border-radius:30px;border:1px solid transparent;background:linear-gradient(var(--card),var(--card)) padding-box,linear-gradient(135deg,rgba(91,61,245,.6),rgba(45,140,255,.35) 50%,var(--line)) border-box;box-shadow:0 34px 80px -34px rgba(70,60,200,.45),0 4px 12px rgba(20,20,60,.05)}
.tsp .lvrow{display:flex;gap:12px;margin:0 0 16px}
.tsp .lvrow .levels{flex:1;margin:0}
.tsp button.tsp-theme{display:flex;align-items:center;gap:8px;min-height:0;padding:0 20px;border-radius:16px;background:var(--tint);color:var(--p1);box-shadow:none;font-size:.9rem;white-space:nowrap}
.tsp button.tsp-theme:hover{transform:none;filter:none;box-shadow:none;background:var(--line)}
.tsp button.tsp-theme span{font-size:1.2rem;line-height:1}
.tsp .top{gap:14px;margin:0 0 12px}
.tsp .pill{padding:12px 18px 11px;border-radius:16px}
.tsp .pill b{font-size:1.8rem}
.tsp #tsp-words{height:calc(3 * 2.6rem + 28px);padding:14px 22px;border-radius:16px;font-size:1.1rem;line-height:2.6rem;font-weight:400;letter-spacing:0;-webkit-mask-image:none;mask-image:none}
.tsp #tsp-words span{margin:0;padding:0 4px;border-radius:8px}
.tsp #tsp-words span.cur{box-shadow:0 0 0 2px var(--p1),0 6px 14px -6px rgba(91,61,245,.5)}
.tsp .row{margin-top:16px;gap:14px}
.tsp #tsp-inp{font-size:1.1rem;padding:14px 22px}
.tsp p.hint{margin:14px 4px 0;max-width:none;font-size:.85rem}
.tsp .kb{margin-top:34px;padding:22px 10px 0;background:linear-gradient(#fbfcff,#eef1fb);border-radius:24px}
.tsp .kb svg{max-width:760px}
.tsp h2.sec{margin:84px 0 26px;font-size:2rem}
.tsp .card{padding:32px;margin:26px 0}
.tsp .tips,.tsp .steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:22px;margin:26px 0}
.tsp .tips .card{margin:0;padding:30px 26px;transition:transform .2s,box-shadow .2s}
.tsp .tips .card:hover{transform:translateY(-4px);box-shadow:0 22px 40px -22px rgba(70,60,200,.5)}
.tsp .ico{width:52px;height:52px;border-radius:16px;background:var(--grad);color:#fff;font-size:1.05rem;box-shadow:0 12px 22px -10px rgba(70,60,220,.65)}
.tsp .tips h3{margin:16px 0 6px;font-size:1.15rem}
.tsp .step{padding:30px 26px 28px;background:var(--card);border:1px solid var(--line);border-radius:22px}
.tsp .step b{display:grid;place-items:center;width:40px;height:40px;margin-bottom:16px;border-radius:50%;background:var(--grad);color:#fff;font-size:1rem}
.tsp .step h3{margin:0 0 6px;font-size:1.15rem}
.tsp .step p{margin:0;color:var(--mute);font-size:.95rem}
.tsp .lv th,.tsp .lv td{padding:16px 16px}
.tsp .lv td:first-child{font-weight:700}
.tsp .lv tr:nth-child(even) td{background:var(--bg)}
.tsp details{margin:14px 0;padding:0 26px;border-radius:18px}
.tsp summary{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:21px 0;list-style:none}
.tsp summary::-webkit-details-marker{display:none}
.tsp summary:after{content:"+";font-size:1.7rem;font-weight:400;line-height:1;color:var(--p1);transition:transform .2s}
.tsp details[open] summary:after{transform:rotate(45deg)}
@media(max-width:720px){
 .tsp .hero{padding:48px 12px 30px}
 .tsp .test{padding:26px 16px 20px;border-radius:24px}
 .tsp .lvrow{gap:8px;margin-bottom:16px}
 .tsp button.tsp-theme{width:auto;min-height:0;padding:0 14px}.tsp button.tsp-theme b{display:none}
 .tsp .top{gap:8px;margin-bottom:12px}
 .tsp .pill{padding:12px 14px}.tsp .pill b{font-size:1.4rem}
 .tsp #tsp-words{height:calc(3 * 2.4rem + 24px);padding:12px 14px;font-size:1rem;line-height:2.4rem}
 .tsp .row{flex-direction:column}
 .tsp .kb{margin-top:22px}
 .tsp h2.sec{margin-top:56px;font-size:1.6rem}
 .tsp .card{padding:22px}
 .tsp details{padding:0 18px}
}

/* close button */
.tsp .box{position:relative}
.tsp .box .mx{position:absolute;top:12px;right:12px;z-index:2;width:38px;height:38px;min-height:0;padding:0;border-radius:50%;font-size:1.6rem;line-height:1;background:rgba(255,255,255,.25);color:#fff;box-shadow:none;border:1px solid rgba(255,255,255,.4)}
.tsp .box .mx:hover{background:rgba(255,255,255,.4);transform:none;filter:none}

/* ---------- Scale (looks like 80% browser zoom) ---------- */
.tsp{zoom:.8}
@media(max-width:720px){.tsp{zoom:1}}

/* ---------- Night mode ---------- */
.tsp.tsp-dark{--bg:#0e1325;--card:#171c33;--ink:#eef1fb;--mute:#9aa3c4;--line:#2a3252;--tint:#222a55;--p1:#9a8cff;--p2:#4da3ff;--ok:#3ddc97;--okbg:#12382c;--bad:#ff6b8b;--badbg:#3a1b2a;--shadow:0 20px 60px -20px rgba(0,0,0,.6)}
.tsp.tsp-dark:not(.tsp-modalwrap){background:#0b0f1e;border-radius:26px;padding:10px}
.tsp.tsp-dark #tsp-words{background:#0e1325;color:#d6dbf3}
.tsp.tsp-dark #tsp-inp::placeholder{color:#6f7aa3}
.tsp.tsp-dark .kb{background:#f1f3fb}
.tsp.tsp-dark .levels button.lvl:before{border-color:#4b557f}
.tsp.tsp-dark .levels button.lvl:hover{border-color:#4b557f}
.tsp.tsp-dark .ad{border-color:#2a3252}
.tsp.tsp-dark #tsp-rbest{color:#3ddc97}
.tsp.tsp-dark .hint kbd{background:var(--bg)}
.tsp.tsp-dark .pill.t{box-shadow:none}
html.tsp-night body{background:#070a16}
html.tsp-night .site-header{background:rgba(14,19,37,.88);border-bottom-color:#2a3252}
html.tsp-night .site-logo{color:#eef1fb}
html.tsp-night .site-nav a{color:#9aa3c4}
html.tsp-night .site-nav a:hover{background:#222a55;color:#9a8cff}
html.tsp-night .site-footer{background:#05070f}
