:root{--bg:#06060f;--bg2:#0c0c1e;--bg3:#11112c;--bg4:#171738;--border:#1a1a38;--border2:#252550;--border3:#333368;--text:#eef0ff;--text2:#9090b8;--text3:#50507a;--accent:#6366f1;--accent2:#4f51d4;--accent3:#3a3caa;--accent-soft:rgba(99,102,241,0.10);--accent-glow:rgba(99,102,241,0.22);--green:#4ade80;--green-bg:rgba(74,222,128,0.10);--orange:#fb923c;--orange-bg:rgba(251,146,60,0.10);--blue:#60a5fa;--blue-bg:rgba(96,165,250,0.10);--yellow:#fbbf24;--red:#f87171;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:22px;--radius-2xl:28px;--font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--shadow:0 2px 8px rgba(0,0,0,.50);--shadow-lg:0 8px 32px rgba(0,0,0,.55);--transition:0.18s cubic-bezier(0.4,0,0.2,1)}*{box-sizing:border-box;margin:0;padding:0;text-transform:none!important;-webkit-tap-highlight-color:transparent}body,html{width:100%;height:100%;background:var(--bg);overflow:hidden;touch-action:manipulation}#app{width:100%;height:100vh;height:100dvh;display:flex;flex-direction:column;background:var(--bg);font-family:var(--font);user-select:none;-webkit-user-select:none}#screen{flex:1;position:relative;overflow:hidden;min-height:0;background:var(--bg)}canvas{position:absolute;inset:0;width:100%;height:100%}#bg-cv{z-index:0}#tr-cv{z-index:5}#ball{position:absolute;border-radius:50%;z-index:15;cursor:pointer;display:none;touch-action:manipulation}#char,#saccade-left,#saccade-right{position:absolute;z-index:15;cursor:pointer;display:none;font-weight:800;transform:translate(-50%,-50%);touch-action:manipulation;-webkit-text-stroke:1px rgba(0,0,0,0.3)}#crowding-wrap{position:absolute;z-index:15;display:none;transform:translate(-50%,-50%);cursor:pointer;touch-action:manipulation;white-space:nowrap;font-weight:800;-webkit-text-stroke:1px rgba(0,0,0,0.3)}#bubble-layer{position:absolute;inset:0;z-index:15;pointer-events:none}#vernier-cv{position:absolute;inset:0;z-index:15;display:none;cursor:pointer;touch-action:manipulation}#pattern-wrap{position:absolute;inset:0;z-index:25;display:none;flex-direction:column;align-items:center;justify-content:flex-start;gap:8px;background:var(--bg);overflow-y:auto;-webkit-overflow-scrolling:touch;padding:clamp(12px,3vw,20px) clamp(10px,3vw,16px);padding-bottom:max(env(safe-area-inset-bottom,0px),16px)}#rsvp-wrap{position:absolute;inset:0;z-index:20;display:none;flex-direction:column;align-items:center;justify-content:center;gap:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:clamp(16px,4vw,24px);padding-bottom:max(env(safe-area-inset-bottom,0px),20px);background:var(--bg)}#memory-wrap{position:absolute;inset:0;z-index:15;display:none;flex-direction:column;align-items:center;justify-content:center}#pursuit-ball{position:absolute;z-index:15;border-radius:50%;display:none;cursor:pointer;touch-action:manipulation;pointer-events:none}#pursuit-ring{position:absolute;z-index:14;border-radius:50%;display:none;border:3px dashed rgba(255,255,255,.2);pointer-events:none}#hud{position:absolute;top:max(env(safe-area-inset-top,0px),clamp(8px,2vw,14px));left:0;right:0;display:flex;justify-content:center;gap:5px;z-index:20;pointer-events:none;flex-wrap:wrap;padding:0 12px}.hbox{background:rgba(8,8,22,.88);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:clamp(4px,1vw,6px) clamp(10px,2vw,15px);color:var(--text2);font-size:clamp(11px,2.5vw,12px);font-weight:500;letter-spacing:.01em}.hbox span{color:var(--text);font-weight:700}#streak-box{background:var(--orange-bg);border-color:rgba(251,146,60,.4)}#streak-box span{color:var(--orange)}#rt-box span{color:var(--blue)}#diff-box span{color:var(--green)}#fb{position:absolute;z-index:30;pointer-events:none;font-size:clamp(24px,5.5vw,36px);font-weight:900;opacity:0;transition:opacity .15s;transform:translate(-50%,-50%);text-shadow:0 2px 12px rgba(0,0,0,.5);letter-spacing:-.02em}#diff-banner{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);z-index:25;background:rgba(58,60,170,.92);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--accent);border-radius:var(--radius-md);padding:6px 20px;color:#c4b5fd;font-size:clamp(12px,2.8vw,14px);display:none;pointer-events:none;white-space:nowrap;font-weight:700}#story-banner{position:absolute;top:60px;left:50%;transform:translateX(-50%);z-index:22;background:rgba(6,6,15,.88);border:1px solid var(--border2);border-radius:var(--radius-md);padding:6px 16px;color:var(--yellow);font-size:clamp(11px,2.5vw,13px);display:none;pointer-events:none;text-align:center;max-width:80%}#rt-display{position:absolute;bottom:14px;right:14px;z-index:22;background:rgba(6,6,15,.85);border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 12px;color:var(--blue);font-size:clamp(11px,2.5vw,12px);display:none;pointer-events:none;font-weight:600}#rest-banner{position:absolute;inset:0;background:rgba(6,6,15,.97);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);z-index:45;display:none;flex-direction:column;align-items:center;justify-content:center;gap:14px}#rest-banner h3{color:var(--text);font-size:clamp(20px,5vw,30px);font-weight:800;letter-spacing:-.02em}#rest-banner p{color:var(--text2);font-size:clamp(13px,3vw,16px)}#rest-count{color:var(--green);font-size:clamp(48px,12vw,72px);font-weight:900;letter-spacing:-.04em}#overlay{position:absolute;inset:0;background:var(--bg);z-index:50;display:flex;flex-direction:column;align-items:center;text-align:center;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-top:max(env(safe-area-inset-top,0px),0px);padding-bottom:max(env(safe-area-inset-bottom,0px),24px);gap:0}.home-brand{width:100%;padding:clamp(14px,3.5vw,22px) clamp(16px,4vw,24px) clamp(10px,2.5vw,16px);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;border-bottom:1px solid var(--border)}.home-logo{display:flex;align-items:center;gap:10px}.home-logo-icon{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--accent) 0,#818cf8 50%,#a78bfa 100%);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;box-shadow:0 0 18px var(--accent-glow)}.home-logo-text{font-size:15px;font-weight:800;color:var(--text);letter-spacing:-.02em;line-height:1.1}.home-logo-sub{font-size:10px;font-weight:600;color:var(--text3);letter-spacing:.06em;text-transform:uppercase!important;margin-top:2px}.home-header-badge{background:var(--green-bg);border:1px solid rgba(74,222,128,.25);border-radius:20px;padding:4px 10px;font-size:11px;font-weight:700;color:var(--green);letter-spacing:.03em}.home-hero{width:100%;padding:clamp(14px,3vh,22px) clamp(16px,4vw,24px) clamp(10px,2.5vh,16px);display:flex;flex-direction:column;align-items:center;gap:10px;flex-shrink:0}#overlay h2{color:var(--text);font-size:clamp(22px,5.5vw,30px);font-weight:900;letter-spacing:-.03em;line-height:1.15}.hero-sub{color:var(--text2);font-size:clamp(13px,3vw,15px);max-width:380px;line-height:1.7}.patch-reminder{display:flex;align-items:center;gap:8px;background:linear-gradient(135deg,rgba(251,146,60,.1),rgba(251,146,60,.05));border:1px solid rgba(251,146,60,.3);border-radius:var(--radius-lg);padding:clamp(9px,2vw,12px) clamp(14px,3vw,18px);color:var(--orange);font-size:clamp(12px,2.8vw,14px);font-weight:600;width:100%;max-width:400px;text-align:left}.home-section{width:100%;max-width:420px;padding:clamp(8px,2vh,12px) clamp(16px,4vw,24px);display:flex;flex-direction:column;gap:8px;flex-shrink:0}.home-section-label{font-size:10px;font-weight:700;color:var(--text3);letter-spacing:.09em;text-transform:uppercase!important}#trophy-shelf{display:flex;gap:clamp(4px,1.2vw,8px);flex-wrap:wrap;justify-content:flex-start}.trophy{font-size:clamp(20px,4.5vw,28px);opacity:.12;transition:opacity .3s,transform .4s;filter:grayscale(1)}.trophy.earned{opacity:1;filter:none}@keyframes pop{0%,100%{transform:scale(1)}50%{transform:scale(1.6)}}.new-earn{animation:.5s pop}#history-bar{display:flex;gap:3px;align-items:flex-end;height:36px}.hbar{width:clamp(10px,2.8vw,18px);border-radius:3px 3px 0 0;background:var(--accent);min-height:3px;transition:height .4s;opacity:.65}.score-big{color:var(--green);font-size:clamp(28px,7vw,42px);font-weight:900;letter-spacing:-.03em}.home-actions{width:100%;max-width:420px;padding:clamp(10px,2.5vh,16px) clamp(16px,4vw,24px);display:flex;flex-direction:column;gap:8px;flex-shrink:0}.obtn{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;border:none;border-radius:var(--radius-lg);padding:clamp(13px,3vw,16px) clamp(20px,5vw,32px);font-size:clamp(14px,3.5vw,16px);cursor:pointer;min-height:52px;touch-action:manipulation;font-weight:700;letter-spacing:-.01em;transition:var(--transition);box-shadow:0 4px 18px rgba(99,102,241,.28);width:100%;display:flex;align-items:center;justify-content:center;gap:8px}.obtn:hover{background:linear-gradient(135deg,var(--accent2),var(--accent3));box-shadow:0 4px 22px rgba(99,102,241,.42)}.obtn:active{transform:scale(.97);box-shadow:0 2px 8px rgba(99,102,241,.18)}.obtn.ghost{background:0 0;border:1.5px solid var(--border3);color:var(--text2);box-shadow:none}.obtn.ghost:hover{background:var(--bg2);border-color:var(--accent);color:var(--text)}.home-btn-row{display:flex;gap:8px;width:100%}.home-btn-row .obtn{flex:1}#weekly-report{background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-lg);padding:16px 20px;max-width:420px;text-align:left;width:100%}#weekly-report h3{color:var(--text);font-size:15px;margin-bottom:12px;font-weight:700}.stat-row{display:flex;justify-content:space-between;font-size:13px;color:var(--text2);padding:5px 0;border-bottom:.5px solid var(--border)}.stat-row span{color:var(--accent);font-weight:700}#ctrls{background:#0f0f28;border-top:1px solid #2e2e5a;padding:clamp(6px,1.4vh,9px) clamp(12px,2.5vw,18px);padding-bottom:max(env(safe-area-inset-bottom,0px),clamp(6px,1.4vh,9px));display:flex;flex-direction:column;gap:5px;flex-shrink:0;align-items:center}#mode-row{display:flex;gap:3px;align-items:center;justify-content:center;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:wrap;padding-bottom:1px;width:100%}#mode-row::-webkit-scrollbar{display:none}#options-row{display:flex;gap:5px;align-items:center;flex-wrap:wrap;justify-content:center;width:100%}#ctrls label{color:#c0c0e0;font-size:clamp(9px,2vw,10.5px);white-space:nowrap;font-weight:800;letter-spacing:.08em;text-transform:uppercase!important;flex-shrink:0;margin-right:3px}.mbtn{background:#1c1c42;color:#c8c8f0;border:1px solid #38386a;border-radius:var(--radius-sm);padding:clamp(4px,1.2vw,6px) clamp(7px,1.8vw,11px);font-size:clamp(10px,2.3vw,11.5px);cursor:pointer;text-align:center;min-height:30px;touch-action:manipulation;font-weight:600;white-space:nowrap;transition:var(--transition);flex-shrink:0}.mbtn:hover{background:#282860;color:#fff;border-color:#55a}.mbtn.on,.mbtn:active{background:rgba(99,102,241,.3);border-color:#6366f1;color:#fff;font-weight:700}.abtn,select{background:#1c1c42;color:#fff;border:1px solid #38386a;border-radius:var(--radius-sm);padding:clamp(4px,1vw,6px) clamp(9px,1.8vw,12px);font-size:clamp(10px,2.3vw,11.5px);cursor:pointer;min-height:30px;touch-action:manipulation;-webkit-appearance:none;appearance:none;font-family:var(--font);font-weight:600;transition:var(--transition)}.abtn:hover,select:hover{background:#282860;color:#fff;border-color:#55a}.abtn:active{background:#333370}#fsbtn{background:#1c1c42;color:#c8c8f0;border:1px solid #38386a;border-radius:var(--radius-sm);padding:5px 10px;font-size:16px;cursor:pointer;min-height:30px;line-height:1;touch-action:manipulation;transition:var(--transition)}#fsbtn:hover{color:#fff;background:#282860;border-color:#55a}#tutorial-overlay{position:absolute;inset:0;z-index:60;background:rgba(6,6,15,.97);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);display:none;flex-direction:column;align-items:center;justify-content:stretch;gap:0;text-align:center;padding:0;overflow:hidden}#tutorial-overlay .tut-icon{font-size:clamp(36px,8vw,52px);margin-bottom:8px;animation:1.2s infinite alternate tutBounce}@keyframes tutBounce{from{transform:translateY(0)}to{transform:translateY(-8px)}}#tutorial-overlay .tut-title{color:var(--text);font-size:clamp(18px,4.5vw,26px);font-weight:900;letter-spacing:-.03em;margin-bottom:6px}#tutorial-overlay .tut-subtitle{color:var(--accent);font-size:clamp(11px,2.5vw,13px);font-weight:700;letter-spacing:.07em;text-transform:uppercase!important;margin-bottom:10px}#tutorial-overlay .tut-desc{color:var(--text2);font-size:clamp(13px,3vw,15px);line-height:1.65;max-width:420px;margin-bottom:12px}#tutorial-overlay .tut-steps{display:flex;flex-direction:column;gap:6px;max-width:400px;width:100%;margin-bottom:12px}.tut-step{display:flex;align-items:center;gap:12px;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--radius-md);padding:10px 14px;text-align:left}.tut-step-num{background:var(--accent);color:#fff;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0}.tut-step-text{color:var(--text);font-size:clamp(12px,3vw,14px);font-weight:500;line-height:1.4}#tut-timer-bar{width:80%;max-width:320px;height:4px;background:var(--border);border-radius:2px;overflow:hidden;margin-bottom:8px}#tut-timer-fill{height:100%;background:var(--accent);width:100%;border-radius:2px;transition:width 30s linear}#tut-skip-btn{background:linear-gradient(135deg,var(--accent),var(--accent2));border:none;color:#fff;padding:13px 32px;border-radius:var(--radius-lg);cursor:pointer;font-size:clamp(14px,3.5vw,16px);font-weight:700;touch-action:manipulation;transition:var(--transition);min-height:50px;width:100%;max-width:360px;box-shadow:0 4px 14px rgba(99,102,241,.3)}#tut-skip-btn:active{background:var(--accent2);transform:scale(.98)}#tut-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;align-items:center;gap:0;padding:clamp(14px,3vw,20px) clamp(14px,4vw,24px);padding-bottom:8px}#tut-footer{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px clamp(14px,4vw,24px);padding-bottom:max(env(safe-area-inset-bottom,0px),14px);border-top:1px solid var(--border);background:rgba(6,6,15,.96);width:100%}#tut-parent-tip{background:var(--accent-soft);border:1.5px solid rgba(99,102,241,.22);border-radius:var(--radius-md);padding:10px 14px;max-width:420px;width:100%;text-align:left;display:none}#tut-parent-tip .tip-label{font-size:11px;font-weight:800;color:var(--accent);letter-spacing:.08em;text-transform:uppercase!important;margin-bottom:5px}#tut-parent-tip .tip-text{font-size:clamp(12px,3vw,14px);color:var(--text2);line-height:1.6}.speak-badge{display:inline-flex;align-items:center;gap:5px;background:var(--green-bg);border:1px solid rgba(74,222,128,.25);border-radius:20px;padding:3px 10px;font-size:11px;font-weight:700;color:var(--green);margin-bottom:8px}#onboarding{position:absolute;inset:0;z-index:70;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;padding:24px;overflow-y:auto}.ob-step{display:none;flex-direction:column;align-items:center;gap:16px;text-align:center;max-width:440px;width:100%}.ob-step.active{display:flex}.ob-hero{font-size:clamp(64px,16vw,96px)}.ob-title{color:var(--text);font-size:clamp(24px,6vw,36px);font-weight:900;letter-spacing:-.03em;line-height:1.15}.ob-body{color:var(--text2);font-size:clamp(14px,3.5vw,16px);line-height:1.7}.ob-card{background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-lg);padding:14px 18px;text-align:left;width:100%}.ob-card h4{color:var(--text);font-size:14px;font-weight:700;margin-bottom:4px}.ob-card p{color:var(--text2);font-size:13px;line-height:1.5}.ob-dots{display:flex;gap:8px;justify-content:center}.ob-dot{width:8px;height:8px;border-radius:50%;background:var(--border2);transition:var(--transition)}.ob-dot.active{background:var(--accent);width:24px;border-radius:4px}#game-select-overlay{position:absolute;inset:0;z-index:55;background:var(--bg);display:none;flex-direction:column;overflow-y:auto;-webkit-overflow-scrolling:touch}.gs-header{padding:clamp(16px,4vw,22px) clamp(16px,4vw,24px) clamp(12px,2.5vw,16px);flex-shrink:0;border-bottom:1px solid var(--border);background:var(--bg);position:sticky;top:0;z-index:2}.gs-header h2{color:#fff;font-size:clamp(17px,4.5vw,22px);font-weight:800;letter-spacing:-.02em}.gs-header p{color:#b0b0d8;font-size:13px;margin-top:4px;line-height:1.5}.gs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:10px;padding:14px clamp(12px,3vw,20px);padding-bottom:max(env(safe-area-inset-bottom,0px),20px)}.gs-card{background:#131330;border:1.5px solid #2a2a58;border-radius:var(--radius-lg);padding:14px 13px;cursor:pointer;touch-action:manipulation;transition:var(--transition);display:flex;flex-direction:column;gap:7px}.gs-card:hover{border-color:#4a4a90;background:#1a1a40;transform:translateY(-1px)}.gs-card:active{transform:scale(.97)}.gs-card.active-mode{border-color:var(--accent);background:rgba(99,102,241,.18);box-shadow:0 0 0 1px var(--accent)}.gs-icon{font-size:26px;line-height:1}.gs-name{color:#fff;font-size:13px;font-weight:700;letter-spacing:-.01em}.gs-desc{color:#a0a0c8;font-size:11px;line-height:1.5;flex:1}.gs-badge{display:inline-block;background:rgba(99,102,241,.14);color:var(--accent);font-size:10px;font-weight:700;padding:2px 8px;border-radius:20px;letter-spacing:.04em;width:fit-content}#progress-overlay{position:absolute;inset:0;z-index:55;background:var(--bg);display:none;flex-direction:column;overflow-y:auto;-webkit-overflow-scrolling:touch}.prog-header{display:flex;align-items:center;gap:12px;padding:clamp(14px,3.5vw,20px) clamp(16px,4vw,24px);border-bottom:1px solid var(--border);background:var(--bg);position:sticky;top:0;z-index:2;flex-shrink:0}.prog-header h2{color:var(--text);font-size:clamp(17px,4.5vw,22px);font-weight:800;flex:1;letter-spacing:-.02em}.prog-back{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-sm);padding:7px 14px;color:var(--text2);cursor:pointer;font-size:13px;font-weight:600;touch-action:manipulation;transition:var(--transition)}.prog-back:hover{background:var(--bg4);color:var(--text);border-color:var(--border2)}.prog-body{padding:clamp(14px,3vw,20px);display:flex;flex-direction:column;gap:12px;padding-bottom:max(env(safe-area-inset-bottom,0px),24px)}.stat-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 18px}.stat-card h3{color:var(--text3);font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase!important;margin-bottom:12px}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.stat-item{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 14px}.stat-item-val{color:var(--text);font-size:clamp(20px,5vw,26px);font-weight:900;letter-spacing:-.03em}.stat-item-lbl{color:var(--text3);font-size:10.5px;font-weight:600;margin-top:3px;letter-spacing:.02em}.trophy-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}.trophy-item{background:var(--bg3);border-radius:var(--radius-md);padding:10px 6px;text-align:center;opacity:.22;transition:var(--transition);border:1px solid transparent}.trophy-item.earned{opacity:1;background:var(--accent-soft);border-color:rgba(99,102,241,.25)}.trophy-item .ti-emoji{font-size:20px}.trophy-item .ti-lbl{font-size:10px;color:var(--text2);margin-top:3px;font-weight:600;line-height:1.3}.disclaimer{width:100%;max-width:420px;padding:clamp(6px,1.5vh,10px) clamp(16px,4vw,24px);flex-shrink:0}.disclaimer p{font-size:clamp(10px,2.3vw,11px);color:var(--text3);line-height:1.65;text-align:center;background:rgba(255,255,255,.02);border:1px solid var(--border);border-radius:var(--radius-md);padding:clamp(10px,2.5vw,14px) clamp(12px,3vw,16px)}.disclaimer strong{color:var(--orange);font-weight:700}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.slide-up{animation:slideUp .35s var(--transition) both}