:root{--bg:#faf6f0;--panel:#fff;--panel-2:#f4ecdf;--border:#e8dcc8;--text:#2b2318;--text-dim:#7d715e;--accent:#e8834e;--accent-rgb:232, 131, 78;--accent-2:#d9a441;--danger:#e0503f;--danger-rgb:224, 80, 63;--success:#3fa35a;--success-rgb:63, 163, 90;--chart-grid:#e8dcc8;--chart-axis:#7d715e;--key-bg:#f4ecdf;--key-border:#e0d2b8;--key-shadow:#785f3240;--shadow:0 10px 30px #5a3c1414;--font-body:"Manrope", system-ui, sans-serif;--font-display:"Space Grotesk", "Manrope", system-ui, sans-serif;--font-mono:"Space Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;font:16px/1.5 var(--font-body);color:var(--text);background:var(--bg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#171310;--panel:#201a15;--panel-2:#292019;--border:#3d3122;--text:#f5ecdd;--text-dim:#ab9c86;--accent:#f2984f;--accent-rgb:242, 152, 79;--accent-2:#e8c15a;--danger:#ff7a63;--danger-rgb:255, 122, 99;--success:#5ecb79;--success-rgb:94, 203, 121;--chart-grid:#3d3122;--chart-axis:#ab9c86;--key-bg:#292019;--key-border:#453723;--key-shadow:#00000073;--shadow:0 10px 30px #0006}}*{box-sizing:border-box}body{margin:0;overflow-x:hidden}#root{min-height:100vh}button{cursor:pointer;font-family:inherit}.app-shell{grid-template-columns:280px 1fr;min-height:100vh;display:grid}.sidebar{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;gap:16px;padding:20px 16px;display:flex;overflow-y:auto}.brand{align-items:center;gap:10px;padding:4px 4px 8px;display:flex}.brand-logo{object-fit:cover;border-radius:9px;flex-shrink:0;width:34px;height:34px}.brand-title{font-family:var(--font-display);letter-spacing:-.2px;font-size:19px;font-weight:700}.brand-sub{color:var(--text-dim);font-size:12px}.streak-badge{background:var(--panel-2);border:1px solid var(--border);border-radius:12px;align-items:center;gap:10px;padding:10px 14px;display:flex}.streak-flame{transform-origin:70% 100%;font-size:22px;animation:2.6s ease-in-out infinite flameFlicker;display:inline-block}@keyframes flameFlicker{0%,to{transform:rotate(-3deg)scale(1)}25%{transform:rotate(2deg)scale(1.05)}50%{transform:rotate(-1deg)scale(.97)}75%{transform:rotate(3deg)scale(1.03)}}.streak-count{font-size:16px;font-weight:700}.streak-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.4px;font-size:11px}.dashboard-link{background:var(--panel-2);border:1px solid var(--border);text-align:left;color:var(--text);border-radius:10px;padding:10px 12px;font-size:14px;font-weight:600}.dashboard-link.active{background:var(--accent);color:#fff;border-color:var(--accent)}.day-list{flex-direction:column;gap:6px;display:flex}.day-item{text-align:left;color:var(--text);background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:10px;padding:8px 10px;transition:background .15s;display:flex}.day-item:hover:not(.locked){background:var(--panel-2)}.day-item.active{background:var(--accent);color:#fff}.day-item.locked{opacity:.4;cursor:not-allowed}.day-number{background:var(--key-bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;font-size:12px;font-weight:700;display:flex}.day-item.active .day-number{background:#ffffff40}.day-item.completed .day-number{background:var(--success);color:#fff}.day-info{flex-direction:column;flex:1;min-width:0;display:flex}.day-title{text-transform:uppercase;letter-spacing:.4px;opacity:.75;font-size:11px}.day-name{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.day-best{opacity:.8;flex-shrink:0;font-size:11px;font-weight:700}.main-panel{width:100%;min-width:0;max-width:900px;margin:0 auto;padding:28px 40px}.app-footer{text-align:center;color:var(--text-dim);opacity:.7;margin-top:40px;padding-top:16px;font-size:12px}.lesson-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px 16px;margin-bottom:20px;display:flex}.lesson-day-tag{color:var(--accent);text-transform:uppercase;letter-spacing:.6px;margin-bottom:4px;font-size:12px;font-weight:700}.lesson-header h1{font-family:var(--font-display);letter-spacing:-.3px;margin:0 0 6px;font-size:27px}.lesson-header p{color:var(--text-dim);max-width:480px;margin:0;font-size:14px}.lesson-focus{background:var(--panel-2);border:1px solid var(--border);white-space:nowrap;border-radius:10px;padding:8px 14px;font-size:13px;font-weight:600}.live-stats{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:14px;align-items:center;gap:20px;margin-bottom:18px;padding:16px 20px;display:flex}.stat-tile{text-align:center;min-width:64px}.stat-value{font-family:var(--font-mono);color:var(--text);font-variant-numeric:tabular-nums;font-size:24px;font-weight:700}.stat-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.4px;font-size:11px}.progress-track{background:var(--panel-2);border-radius:999px;flex:1;height:8px;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--accent), var(--accent-2));border-radius:999px;height:100%;transition:width .15s}.typing-area{background:var(--panel);border:2px solid var(--border);font-family:var(--font-mono);letter-spacing:.3px;cursor:text;min-height:140px;box-shadow:var(--shadow);border-radius:14px;outline:none;padding:28px 30px;font-size:22px;line-height:1.9;transition:border-color .15s,box-shadow .15s;position:relative}.typing-area:focus{border-color:var(--accent);box-shadow:var(--shadow), 0 0 0 3px rgba(var(--accent-rgb), .15)}.passage span.pending{color:var(--text-dim)}.passage span.correct{color:var(--success)}.passage span.incorrect{color:var(--danger);background:rgba(var(--danger-rgb), .15);border-radius:3px}.passage span.current{color:var(--text);border-left:2px solid var(--accent);animation:1s step-end infinite blink}@keyframes blink{50%{border-color:#0000}}.typing-hint{color:var(--text-dim);margin-top:14px;font-family:inherit;font-size:13px}.regenerate-row{justify-content:center;margin-top:14px;display:flex}.btn-ghost{border:1px dashed var(--border);color:var(--text-dim);background:0 0;border-radius:10px;padding:8px 16px;font-size:13px}.btn-ghost:hover{color:var(--text);border-color:var(--accent)}.virtual-keyboard{-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;gap:6px;max-width:100%;margin-top:22px;padding-bottom:4px;display:flex;overflow-x:auto}.kb-row{gap:6px;display:flex}.kb-key{background:var(--key-bg);border:1px solid var(--key-border);min-width:38px;height:38px;color:var(--text-dim);box-shadow:inset 0 1px 0 #fff6, 0 2px 0 var(--key-border), 0 4px 6px #0000001f;border-radius:8px;justify-content:center;align-items:center;font-size:13px;font-weight:600;transition:transform .15s cubic-bezier(.34,1.56,.64,1),background .12s,color .12s,box-shadow .15s;display:flex}.kb-key-target{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:inset 0 1px 0 #ffffff4d, 0 2px 0 #00000040, 0 6px 14px rgba(var(--accent-rgb), .45);transform:translateY(-3px)scale(1.1)}.kb-key-error-pulse{background:var(--danger);border-color:var(--danger);animation:.25s keyShake}@keyframes keyShake{0%,to{transform:translateY(-3px)scale(1.1)translate(0)}25%{transform:translateY(-3px)scale(1.1)translate(-3px)}75%{transform:translateY(-3px)scale(1.1)translate(3px)}}.kb-key-focus:not(.kb-key-target){border-color:var(--accent);color:var(--text)}.kb-key-shift,.kb-key-space{text-transform:uppercase;min-width:80px;font-size:11px}.kb-key-space{min-width:260px}.modal-backdrop{z-index:50;background:#0a0a148c;justify-content:center;align-items:center;animation:.15s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--panel);text-align:center;width:380px;max-width:90vw;box-shadow:var(--shadow);border-radius:18px;padding:32px 36px;animation:.35s cubic-bezier(.34,1.56,.64,1) popIn;position:relative}@keyframes popIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.modal-emoji{margin-bottom:6px;font-size:40px;animation:.5s cubic-bezier(.34,1.56,.64,1) .15s both emojiPop;display:inline-block}@keyframes emojiPop{0%{transform:scale(0)rotate(-15deg)}to{transform:scale(1)rotate(0)}}.confetti{pointer-events:none;width:0;height:0;position:absolute;top:50px;left:50%}.confetti-piece{opacity:0;border-radius:1px;width:7px;height:10px;animation:.9s ease-out forwards confettiBurst;position:absolute;top:0;left:0}@keyframes confettiBurst{0%{opacity:1;transform:translate(-50%,-50%)rotate(0)}to{transform:translate(calc(-50% + var(--tx)), calc(-50% + var(--ty))) rotate(var(--rot));opacity:0}}.modal h2{font-family:var(--font-display);margin:0 0 6px;font-size:21px}.modal-message{color:var(--text-dim);margin:0 0 20px;font-size:14px}.modal-stats{justify-content:center;gap:28px;margin-bottom:24px;display:flex}.modal-stat-value{font-family:var(--font-mono);font-size:26px;font-weight:700}.modal-stat-label{color:var(--text-dim);text-transform:uppercase;font-size:11px}.modal-actions{justify-content:center;gap:10px;display:flex}.btn-primary,.btn-secondary{border:none;border-radius:10px;padding:10px 18px;font-size:14px;font-weight:700;transition:transform .12s,box-shadow .12s,filter .12s}.btn-primary{background:var(--accent);color:#fff;box-shadow:0 4px 12px rgba(var(--accent-rgb), .35)}.btn-primary:hover{filter:brightness(1.06);box-shadow:0 6px 16px rgba(var(--accent-rgb), .4);transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.btn-secondary{background:var(--panel-2);color:var(--text);border:1px solid var(--border)}.dashboard h1{font-family:var(--font-display);letter-spacing:-.3px;margin:0 0 2px;font-size:29px}.dashboard-sub{color:var(--text-dim);margin:0 0 20px}.dashboard-tiles{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;margin-bottom:24px;display:grid}.dash-tile{background:var(--panel);border:1px solid var(--border);text-align:center;box-shadow:var(--shadow);border-radius:14px;padding:16px}.dash-tile-value{font-family:var(--font-mono);font-size:22px;font-weight:700}.dash-tile-label{color:var(--text-dim);margin-top:4px;font-size:12px}.chart-card{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:14px;margin-bottom:20px;padding:20px}.chart-card h3{margin:0 0 12px;font-size:15px}.day-grid{grid-template-columns:repeat(5,1fr);gap:10px;display:grid}.day-grid-cell{background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:10px;flex-direction:column;align-items:center;gap:2px;padding:12px 6px;font-weight:700;display:flex}.day-grid-cell.completed{background:var(--success);color:#fff;border-color:var(--success)}.day-grid-cell small{opacity:.85;font-size:10px;font-weight:600}@media (width<=800px){.app-shell{grid-template-columns:1fr}.main-panel{order:1;padding:20px}.sidebar{border-right:none;border-top:1px solid var(--border);order:2;max-height:320px}.typing-area{padding:20px;font-size:18px}}.app-loading{min-height:100vh;color:var(--text-dim);flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:15px;display:flex}.app-loading-logo{border-radius:12px;width:48px;height:48px;animation:1.4s ease-in-out infinite loadingPulse}@keyframes loadingPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.94)}}.auth-shell{flex-direction:column;justify-content:center;align-items:center;gap:28px;min-height:100vh;padding:20px;display:flex}.auth-hero{text-align:center;flex-direction:column;align-items:center;gap:10px;max-width:440px;display:flex}.auth-hero-illustration{width:min(340px,80vw);box-shadow:var(--shadow);border-radius:20px;margin-bottom:6px;animation:4s ease-in-out infinite heroFloat}@keyframes heroFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.auth-hero h1{font-family:var(--font-display);letter-spacing:-.5px;margin:0;font-size:32px;line-height:1.15}.auth-hero p{color:var(--text-dim);margin:0;font-size:15px}.auth-hero-features{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px;display:flex}.auth-hero-feature{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);border-radius:999px;padding:6px 14px;font-size:12px;font-weight:600}.auth-card{background:var(--panel);border:1px solid var(--border);text-align:center;width:380px;max-width:100%;box-shadow:var(--shadow);border-radius:18px;flex-direction:column;gap:14px;padding:36px;display:flex}.auth-logo{border-radius:12px;width:48px;height:48px;margin:0 auto}.auth-card h1{font-family:var(--font-display);margin:0;font-size:23px}.auth-sub{color:var(--text-dim);margin:0 0 6px;font-size:13px}.auth-config-msg{color:var(--text-dim);text-align:left;font-size:13px;line-height:1.6}.auth-config-msg code{background:var(--panel-2);border-radius:4px;padding:1px 5px;font-size:12px}.auth-tabs{background:var(--panel-2);border-radius:10px;gap:4px;padding:4px;display:flex}.auth-tabs button{color:var(--text-dim);background:0 0;border:none;border-radius:8px;flex:1;padding:8px 0;font-size:13px;font-weight:700}.auth-tabs button.active{background:var(--accent);color:#fff}.auth-field{text-align:left;color:var(--text-dim);flex-direction:column;gap:6px;font-size:12px;font-weight:600;display:flex}.auth-field input{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:10px;padding:10px 12px;font-family:inherit;font-size:14px}.auth-field input:focus{border-color:var(--accent);outline:none}.auth-error{background:rgba(var(--danger-rgb), .12);color:var(--danger);text-align:left;border-radius:8px;padding:8px 10px;font-size:12px}.auth-info{background:rgba(var(--success-rgb), .12);color:var(--success);text-align:left;border-radius:8px;padding:8px 10px;font-size:12px}.auth-submit{width:100%;padding:12px;font-size:14px}.auth-forgot-link{color:var(--text-dim);text-align:right;background:0 0;border:none;margin-top:-6px;padding:0;font-size:12px;font-weight:600}.auth-forgot-link:hover{color:var(--accent)}.sidebar-footer{border-top:1px solid var(--border);flex-direction:column;gap:10px;margin-top:auto;padding-top:10px;display:flex}.account-row{justify-content:space-between;align-items:center;gap:8px;display:flex}.account-email{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.notif-box{flex-direction:column;gap:6px;display:flex}.notif-enable{width:100%;padding:9px 10px;font-size:12px}.notif-row{background:var(--panel-2);border-radius:10px;justify-content:space-between;align-items:center;padding:8px 10px;font-size:12px;font-weight:600;display:flex}.notif-denied{color:var(--text-dim);background:var(--panel-2);border-radius:8px;padding:8px 10px;font-size:11px}
