@import "https://fonts.googleapis.com/css2?family=Onest:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap";:root{--ink:#13221c;--muted:#4d6359;--brand:#0b6b56;--brand-deep:#084c3d;--brand-soft:#d7ebe3;--paper:#f3f7f5;--panel:#ffffffb8;--line:#13221c1a;--error:#c0392b;--ok:#0b6b56;--shadow:0 18px 50px #13342814;--radius:18px;--font:"Onest", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font);color:var(--ink);-webkit-font-smoothing:antialiased;background-color:#0000;background-image:radial-gradient(1200px 600px at 10% -10%,#cfe8dc 0%,#0000 55%),radial-gradient(900px 500px at 100% 0,#d9e6f0 0%,#0000 50%),linear-gradient(#eef5f1 0%,#e4ece8 100%);background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;margin:0}a{color:inherit;text-decoration:none}button,input{font:inherit}.shell{flex-direction:column;min-height:100vh;display:flex}.shell--bare .main{padding:0}.topbar{border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:10;background:#f3f7f5bf;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.5rem;display:flex;position:sticky;top:0}.topbar-brand{letter-spacing:-.03em;color:var(--brand-deep);font-size:1.15rem;font-weight:800}.topbar-nav{gap:1rem;display:flex}.topbar-nav a{color:var(--muted);font-size:.95rem;font-weight:500}.topbar-nav a.active{color:var(--brand)}.main{flex:1;width:min(960px,100%);margin:0 auto;padding:1.5rem}.hero{place-items:center;min-height:100vh;padding:2rem 1.5rem 5rem;display:grid;position:relative;overflow:hidden}.hero-bg{background:linear-gradient(135deg,#0b6b561f,#0000 40%),radial-gradient(80% 50% at 70% 80%,#0b6b562e,#0000 60%),url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%230b6b56' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");animation:18s ease-in-out infinite alternate drift;position:absolute;inset:0}@keyframes drift{0%{transform:scale(1)translate(0)}to{transform:scale(1.04)translate(-1%,1%)}}.hero-content{text-align:center;max-width:34rem;position:relative}.hero-eyebrow{text-transform:uppercase;letter-spacing:.14em;color:var(--brand);margin:0 0 .75rem;font-size:.75rem;font-weight:600}.hero-brand{letter-spacing:-.05em;color:var(--brand-deep);margin:0;font-size:clamp(3.4rem,12vw,5.6rem);font-weight:800;line-height:.95}.hero-lead{color:var(--muted);max-width:28rem;margin:1.1rem auto 0;font-size:1.15rem;line-height:1.5}.hero-actions{flex-wrap:wrap;justify-content:center;gap:.75rem;margin-top:1.75rem;display:flex}.hero-meta{color:var(--muted);margin-top:1.25rem;font-size:.95rem}.home-links{color:var(--muted);justify-content:center;gap:1.5rem;margin-top:2.5rem;font-weight:500;display:flex}.home-links a:hover{color:var(--brand)}.btn{cursor:pointer;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:.4rem;padding:.85rem 1.35rem;font-weight:600;transition:transform .15s,background .15s,border-color .15s;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-deep)}.btn-ghost{border-color:var(--line);color:var(--ink);background:#ffffffa6}.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}.page-header h1{letter-spacing:-.03em;margin:0;font-size:clamp(1.8rem,4vw,2.4rem)}.page-header p{color:var(--muted);margin:.5rem 0 0}.page-header{margin-bottom:1.5rem}.eyebrow{color:var(--brand);letter-spacing:.04em;text-transform:uppercase;margin:0;font-size:.85rem;font-weight:600}.muted{color:var(--muted)}.text-link{color:var(--brand);font-weight:600}.lesson-list{flex-direction:column;gap:.65rem;margin:0;padding:0;list-style:none;display:flex}.lesson-link{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);grid-template-columns:auto 1fr auto;align-items:center;gap:1rem;padding:1rem 1.1rem;transition:border-color .15s,transform .15s;display:grid}.lesson-link:hover{border-color:var(--brand);transform:translateY(-1px)}.lesson-num{background:var(--brand-soft);width:2.4rem;height:2.4rem;color:var(--brand-deep);border-radius:12px;place-items:center;font-weight:700;display:grid}.lesson-title{letter-spacing:-.02em;font-weight:700;display:block}.lesson-desc{color:var(--muted);margin-top:.2rem;font-size:.92rem;display:block}.lesson-meta{flex-direction:column;align-items:flex-end;gap:.35rem;display:flex}.lesson-stats{color:var(--muted);font-size:.8rem}.badge{color:var(--muted);background:#e8eef0;border-radius:999px;padding:.25rem .55rem;font-size:.75rem;font-weight:600}.badge--passed{background:var(--brand-soft);color:var(--brand-deep)}.badge--in_progress{color:#8a5a22;background:#f3e8d8}.lesson-item--passed .lesson-num{background:var(--brand);color:#fff}.lesson-screen{flex-direction:column;gap:1.25rem;display:flex}.lesson-header{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.lesson-header h1{letter-spacing:-.03em;margin:.2rem 0 0;font-size:1.7rem}.stats-bar{grid-template-columns:repeat(3,1fr);gap:.75rem;display:grid}.stat{background:var(--panel);border:1px solid var(--line);text-align:center;border-radius:14px;padding:.85rem 1rem}.stat-value{letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:1.45rem;font-weight:750;display:block}.stat-label{color:var(--muted);font-size:.8rem}.typing-area{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#ffffffd1;outline:none;padding:1.4rem 1.25rem}.typing-area:focus{border-color:#0b6b5673}.typing-text{font-family:var(--mono);letter-spacing:.01em;word-break:break-word;margin:0;font-size:clamp(1.25rem,2.5vw,1.55rem);line-height:1.75}.ch{display:inline-block;position:relative}.ch--done{color:#13221c59}.ch--current{color:var(--brand-deep);background:#0b6b561f;border-radius:4px}.ch--todo{color:var(--ink)}.caret{background:var(--brand);width:100%;height:2px;animation:1s step-end infinite blink;position:absolute;bottom:0;left:0}@keyframes blink{50%{opacity:0}}.hint-line{text-align:center;color:var(--muted);margin:0;font-size:.9rem}.layout-warning{color:#8a2a22;text-align:center;background:#fde8e6;border:1px solid #e8b4b0;border-radius:12px;margin:0;padding:.75rem 1rem;font-size:.92rem;font-weight:500}.keyboard{margin-top:.25rem}.keyboard-hint{text-align:center;min-height:1.4em;margin:0 0 .75rem;font-weight:600}.keyboard-rows{border:1px solid var(--line);border-radius:var(--radius);background:#ffffff8c;flex-direction:column;gap:.4rem;padding:.85rem;display:flex}.keyboard-row{justify-content:center;gap:.35rem;display:flex}.key{border:1px solid var(--line);min-width:2rem;min-height:2.6rem;font-family:var(--mono);color:var(--ink);background:#fff;border-radius:10px;place-items:center;font-size:.85rem;transition:transform .1s,background .15s,border-color .15s,box-shadow .15s;display:grid;position:relative}.key-shift{color:var(--muted);font-size:.65rem;position:absolute;top:.2rem;right:.35rem}.key--finger{box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--finger) 35%, transparent)}.key--target{background:color-mix(in srgb, var(--finger) 22%, white);border-color:var(--finger);color:var(--ink);box-shadow:0 8px 18px color-mix(in srgb, var(--finger) 25%, transparent);transform:translateY(-2px)}.key--pressed{transform:translateY(1px)scale(.97)}.result{text-align:center;max-width:32rem;margin:0 auto;padding:2.5rem 1rem}.result-eyebrow{color:var(--brand);text-transform:uppercase;letter-spacing:.08em;margin:0;font-size:.8rem;font-weight:700}.result h1{letter-spacing:-.03em;margin:.5rem 0 1.5rem;font-size:2.2rem}.result-grid{grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1.25rem;display:grid}.result-grid div{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1rem .5rem}.result-grid strong{letter-spacing:-.03em;font-size:1.8rem;display:block}.result-grid span{color:var(--muted);font-size:.85rem}.result-hint{color:var(--muted);margin:0 0 .5rem}.timer{letter-spacing:-.04em;color:var(--brand-deep);font-variant-numeric:tabular-nums;flex-direction:column;align-items:flex-end;font-size:2rem;font-weight:800;line-height:1;display:flex}.timer span{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem;font-weight:600}.progress-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;margin-bottom:1.5rem;display:grid}.progress-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem}.progress-card strong{letter-spacing:-.03em;font-size:1.8rem;display:block}.progress-card span{color:var(--muted);font-size:.9rem}.progress-actions{flex-wrap:wrap;gap:.75rem;display:flex}.animate-in{animation:.55s both rise}.animate-pop{animation:.45s cubic-bezier(.2,.8,.2,1) both pop}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes pop{0%{opacity:0;transform:scale(.96)translateY(8px)}to{opacity:1;transform:none}}@media (width<=720px){.lesson-link{grid-template-columns:auto 1fr}.lesson-meta{flex-flow:wrap;grid-column:2;align-items:flex-start}.key{border-radius:7px;min-width:1.4rem;min-height:2.1rem;font-size:.7rem}.keyboard-rows{padding:.5rem;overflow-x:auto}.result-grid{grid-template-columns:1fr}}
