*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f0f4f8;--card:#fff;--text:#1a202c;--muted:#64748b;--border:#e2e8f0;--success:#48bb78;--error:#fc8181;--shadow:0 2px 8px #00000014, 0 1px 3px #0000000d;--shadow-lg:0 8px 24px #0000001f;--text-scale:1}html,body{background:var(--bg);height:100%;color:var(--text);-webkit-font-smoothing:antialiased;overscroll-behavior:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif}#app{min-height:100vh}button{cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;border:none;font-family:inherit}button:active:not(:disabled){opacity:.85;transform:scale(.97)}button:disabled{opacity:.45;cursor:default}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-9px)}40%{transform:translate(9px)}60%{transform:translate(-6px)}80%{transform:translate(4px)}}@keyframes pop{0%{opacity:0;transform:scale(.5)}60%{opacity:1;transform:scale(1.12)}to{opacity:1;transform:scale(1)}}@keyframes slide-up{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.anim-slide{animation:.22s both slide-up}.anim-fade{animation:.2s both fade-in}@keyframes page-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes page-out{0%{transform:translate(0)}to{transform:translate(100%)}}.page-slide-in{animation:.28s cubic-bezier(.25,.46,.45,.94) both page-in}.page-slide-out{pointer-events:none;animation:.24s cubic-bezier(.55,0,1,.45) both page-out}.unit-overlay{z-index:10;background:var(--bg);position:fixed;inset:0;overflow-y:auto}.home{padding-bottom:40px;position:relative}.home-header{color:#fff;text-align:center;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);position:relative;overflow:hidden}.shader-canvas{width:calc(100% + 80px);height:calc(100% + 170px);display:block;position:absolute;top:-40px;left:-40px}.home-header-content{z-index:1;padding:calc(52px + env(safe-area-inset-top)) 24px 44px;position:relative}.home-logo{margin-bottom:10px;padding:5px 0;font-size:52px;line-height:1}.home-title{font-size:calc(34px * var(--text-scale,1));letter-spacing:-1px;text-shadow:0 1px 10px #00000059;font-weight:800}.home-sub{font-size:calc(16px * var(--text-scale,1));opacity:.9;text-shadow:0 1px 6px #0000004d;margin-top:4px}.home-total-bar{z-index:2;background:#fff3;height:3px;position:absolute;bottom:0;left:0;right:0}.home-total-fill{background:#fff;height:100%;transition:width .4s}.units-list{flex-direction:column;gap:10px;width:100%;max-width:1100px;margin:0 auto;padding:16px 16px 32px;display:flex}.home-level-hdr{align-items:center;gap:10px;padding:22px 4px 6px;display:flex}.home-level-hdr:before,.home-level-hdr:after{content:"";background:var(--border);flex:1;height:1px}.home-level-label{font-size:calc(12px * var(--text-scale,1));letter-spacing:2px;color:var(--muted);text-transform:uppercase;flex-shrink:0;font-weight:800}.home-section{box-shadow:var(--shadow);background:var(--card);scroll-margin-top:calc(env(safe-area-inset-top) + 10px);border-radius:16px;overflow:hidden}.home-section.kind-vocab{--kind-rgb:44,122,123;--kind-ink:#22543d;--kind-ink-dark:#68d391}.home-section.kind-grammar{--kind-rgb:43,108,176;--kind-ink:#2c5282;--kind-ink-dark:#90cdf4}.home-section.kind-stories{--kind-rgb:192,86,33;--kind-ink:#7b341e;--kind-ink-dark:#f6ad55}.home-section.kind-longstories{--kind-rgb:214,158,46;--kind-ink:#975a16;--kind-ink-dark:#f6e05e;--kind-solid:#946d20}.home-section.kind-complete{--kind-rgb:184,50,128;--kind-ink:#702459;--kind-ink-dark:#f687b3}.home-section.kind-book{--kind-rgb:197,48,48;--kind-ink:#9b2c2c;--kind-ink-dark:#fc8181}.home-section.kind-dictation{--kind-rgb:14,116,144;--kind-ink:#164e63;--kind-ink-dark:#67e8f9}.home-section.kind-tenses{--kind-rgb:101,140,30;--kind-ink:#3f6212;--kind-ink-dark:#bef264;--kind-solid:#5d811c}.home-section[class*=kind-] .home-section-hdr{background:var(--kind-solid,rgb(var(--kind-rgb)))}.home-section[class*=kind-] .home-section-hdr:active{filter:brightness(.9)}.home-section[class*=kind-] .home-section-label,.home-section[class*=kind-] .home-section-meta,.home-section[class*=kind-] .home-section-chevron{color:#fff}.home-section[class*=kind-] .home-section-meta{opacity:.9}.home-section[class*=kind-] .unit-prog-fill{background:var(--kind-ink,var(--success))}@media (prefers-color-scheme:dark){.home-section[class*=kind-] .home-section-hdr{background:rgba(var(--kind-rgb), .09)}.home-section[class*=kind-] .home-section-hdr:active{filter:none;background:var(--border)}.home-section[class*=kind-] .home-section-label{color:var(--kind-ink-dark)}.home-section[class*=kind-] .home-section-meta,.home-section[class*=kind-] .home-section-chevron{color:var(--muted)}.home-section[class*=kind-] .home-section-meta{opacity:1}.home-section[class*=kind-] .unit-prog-fill{background:var(--kind-ink-dark,var(--success))}}.home-section-title{font:inherit;margin:0}.home-section-hdr{background:var(--card);cursor:pointer;-webkit-tap-highlight-color:transparent;text-align:left;border:none;align-items:center;gap:10px;width:100%;padding:14px 18px;transition:background .15s;display:flex}.home-section-hdr:active{background:var(--border)}.home-section-label{font-size:calc(15px * var(--text-scale,1));color:var(--text);flex:1;font-weight:700}.home-section-meta{font-size:calc(12px * var(--text-scale,1));color:var(--muted);font-weight:500}@media (prefers-color-scheme:light){.home-section-meta,.home-level-label{color:#475569}}.home-section-chevron{font-size:calc(14px * var(--text-scale,1));color:var(--muted)}.home-section-body{background:var(--border);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1px;display:grid}.unit-card{background:var(--card);cursor:pointer;border-left:5px solid var(--uc);-webkit-tap-highlight-color:transparent;border-radius:0;align-items:center;gap:16px;padding:16px 18px;transition:background .15s;display:flex}.unit-card:active{background:var(--border)}a.unit-card{color:inherit;text-decoration:none}.unit-card-emoji{flex-shrink:0;font-size:38px}.unit-card-body{flex:1;min-width:0}.unit-card-title{font-size:calc(17px * var(--text-scale,1));font-weight:700}.unit-card-sub{font-size:calc(14px * var(--text-scale,1));color:var(--muted);margin-top:4px}.unit-prog-row{align-items:center;gap:8px;margin-top:10px;display:flex}.unit-prog-wrap{background:var(--border);border-radius:2px;flex:1;height:4px;overflow:hidden}.unit-prog-fill{background:var(--success);border-radius:2px;height:100%;transition:width .4s}.unit-prog-text{font-size:calc(12px * var(--text-scale,1));color:var(--muted);flex-shrink:0}.unit-card-arrow{font-size:calc(26px * var(--text-scale,1));color:var(--muted);flex-shrink:0;font-weight:300}.conv-wrap{max-width:640px;margin:0 auto;padding:16px 16px 32px}.conv-context{font-size:calc(14px * var(--text-scale,1));color:var(--muted);text-align:center;margin-bottom:16px;font-style:italic}.conv-controls{flex-wrap:wrap;justify-content:center;gap:10px;margin-bottom:20px;display:flex}.conv-play-btn{font-size:calc(14px * var(--text-scale,1));color:#fff;background:var(--muted);border-radius:20px;padding:9px 20px;font-weight:600;transition:opacity .15s}.conv-play-btn:active{opacity:.8}.conv-trans-btn{font-size:calc(14px * var(--text-scale,1));background:var(--border);color:var(--text);border-radius:20px;padding:9px 16px;font-weight:500;transition:background .15s}.conv-trans-btn.active{background:var(--text);color:var(--card)}.conv-dialogue{flex-direction:column;gap:12px;display:flex}.conv-row{align-items:flex-end;gap:8px;display:flex}.conv-row-right{justify-content:flex-end}.conv-avatar{flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;font-size:26px;display:flex}.conv-bubble{background:var(--card);box-shadow:var(--shadow);border-radius:16px 16px 16px 4px;max-width:80%;padding:10px 12px;transition:box-shadow .2s;position:relative}.conv-bubble-right{border-radius:16px 16px 4px}.conv-bubble-playing{box-shadow:0 0 0 2px currentColor, var(--shadow-lg)}.conv-speaker{font-size:calc(12px * var(--text-scale,1));color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:3px;font-weight:700}.conv-french{font-size:calc(15px * var(--text-scale,1));color:var(--text);font-weight:600;line-height:1.4}.conv-english{font-size:calc(13px * var(--text-scale,1));color:var(--muted);margin-top:4px;line-height:1.3}.conv-speak-btn{font-size:calc(14px * var(--text-scale,1));color:var(--muted);float:right;background:0 0;margin-left:8px;padding:2px 0 0 4px}.conv-narration{background:var(--border);color:var(--muted);font-style:italic;font-size:calc(14px * var(--text-scale,1));border-radius:10px;padding:10px 14px;line-height:1.5;transition:box-shadow .2s}.conv-narration-text{display:block}.unit-screen{background:var(--bg);flex-direction:column;min-height:100vh;display:flex}.unit-header{color:#fff;padding:calc(14px + env(safe-area-inset-top)) 16px 14px;z-index:20;align-items:center;gap:12px;display:flex;position:sticky;top:0}.back-btn{color:#fff;background:#ffffff38;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:26px;line-height:1;transition:background .15s;display:flex}.back-btn:active{background:#ffffff59}.hdr-info{flex:1;min-width:0}.hdr-unit{font-size:calc(11px * var(--text-scale,1));text-transform:uppercase;letter-spacing:.5px;opacity:.75;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.hdr-phase{font-size:calc(17px * var(--text-scale,1));white-space:nowrap;text-overflow:ellipsis;margin-top:8px;font-weight:700;overflow:hidden}.hdr-total{font-size:calc(12px * var(--text-scale,1));opacity:.8;white-space:nowrap;text-overflow:ellipsis;margin-top:2px;overflow:hidden}.phase-nav{flex-shrink:0;gap:5px;display:flex}.pn-btn{min-width:34px;height:34px;font-size:calc(13px * var(--text-scale,1));cursor:pointer;color:#fffffff2;background:#ffffff1f;border:1.5px solid #ffffff38;border-radius:17px;flex-shrink:0;justify-content:center;align-items:center;padding:0 6px;font-weight:700;transition:background .15s,color .15s,border-color .15s;display:flex}.pn-btn.active{color:var(--uc);cursor:default;background:#fff;border-color:#fff}.pn-btn.complete{color:#fff;background:#ffffff4d;border-color:#ffffff8c}.pn-btn.pn-arrow{font-size:calc(18px * var(--text-scale,1))}.pn-btn:not(.active):active{background:#ffffff40}.unit-loading{flex:1;justify-content:center;align-items:center;display:flex}.unit-loading-spinner{border:3px solid var(--border);border-top-color:var(--uc);border-radius:50%;width:34px;height:34px;animation:.7s linear infinite unit-spin}@keyframes unit-spin{to{transform:rotate(360deg)}}.lesson{flex:1;padding:18px 16px 32px;overflow-y:auto}.lesson-intro{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:16px;padding:20px}.lesson-intro h2{font-size:calc(17px * var(--text-scale,1));margin-bottom:8px;font-weight:800}.lesson-intro p{font-size:calc(16px * var(--text-scale,1));color:var(--muted);font-style:italic;line-height:1.65}.lesson-intro p+p{margin-top:10px}.lesson-intro-points{font-size:calc(15px * var(--text-scale,1));color:var(--muted);margin:10px 0 0;padding-left:20px;line-height:1.6}.lesson-intro-points li{margin-top:6px}.lesson-intro-points strong{color:var(--text)}.book-chapter .lesson-intro{box-shadow:none;background:0 0;margin-bottom:16px;padding:0 4px}.book-chapter .lesson-intro h2{margin-bottom:0}.rule-section{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:14px;overflow:hidden}.rule-hdr{color:#fff;font-weight:700;font-size:calc(16px * var(--text-scale,1));align-items:center;gap:10px;padding:14px 16px;display:flex}.rule-hdr-icon{font-size:20px}.rule-item{border-bottom:1px solid var(--border);grid-template-columns:1fr auto;align-items:start;column-gap:8px;padding:14px 16px;display:grid}.rule-item:last-child{border-bottom:none}.rule-ending{font-size:calc(17px * var(--text-scale,1));font-family:monospace;font-weight:800}.rule-ex{font-size:calc(16px * var(--text-scale,1));color:var(--muted);margin-top:3px;font-style:italic}.rule-speak{grid-area:1/2/span 3;align-self:center}.rule-ex-en{font-size:calc(14px * var(--text-scale,1));color:var(--muted);margin-top:2px}.rule-ex-en+.rule-note{margin-top:12px}.rule-note{font-size:calc(16px * var(--text-scale,1));background:var(--bg);color:var(--muted);white-space:pre-line;border-radius:6px;margin-top:6px;padding:4px 8px;display:block}.word-list{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:16px;overflow:hidden}.word-row{border-bottom:1px solid var(--border);flex-direction:column;gap:4px;padding:12px 14px;display:flex}.word-row:last-child{border-bottom:none}.word-row-main{align-items:center;gap:8px;display:flex}.speak-btn{color:var(--muted);background:0 0;border-radius:6px;flex-shrink:0;margin-top:6px;padding:2px 4px;font-size:16px}.speak-btn:active{color:var(--text)}.word-fr{font-size:calc(15px * var(--text-scale,1));flex:1;font-weight:700}.word-gender{color:var(--muted);margin-left:4px;font-weight:500}.word-arr{font-size:calc(13px * var(--text-scale,1));color:var(--muted);flex-shrink:0}.word-en{font-size:calc(15px * var(--text-scale,1));color:var(--muted);text-align:right;flex:1}.word-literal{font-size:calc(14px * var(--text-scale,1));color:var(--muted);text-align:center;font-style:italic}.word-example{font-size:calc(14px * var(--text-scale,1));color:var(--text);justify-content:center;align-items:center;gap:2px;font-style:italic;display:flex}.word-example .speak-btn{margin-top:0;font-size:14px}.word-example-en{font-size:calc(13px * var(--text-scale,1));color:var(--muted);text-align:center}.lesson-cta{margin-top:24px;padding-bottom:8px}.book-glossary{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:16px;padding:14px 16px}.book-glossary-title{font-size:calc(12px * var(--text-scale,1));text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:8px;font-weight:700}.book-glossary-word{border-bottom:1px dashed var(--border);font-size:calc(14px * var(--text-scale,1));justify-content:space-between;gap:12px;padding:6px 0;display:flex}.book-glossary-word:last-child{border-bottom:none}.book-glossary-fr-group{align-items:center;gap:2px;display:flex}.book-glossary-fr{font-weight:700}.book-glossary-speak{margin-top:0}.book-glossary-en{color:var(--muted);text-align:right}.book-paragraphs{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:16px;overflow:hidden}.book-para{border-bottom:1px solid var(--border);cursor:pointer;padding:16px}.book-para:last-child{border-bottom:none}.book-para-fr{font-size:calc(16px * var(--text-scale,1));align-items:flex-start;gap:8px;font-weight:600;line-height:1.6;display:flex}.book-para-speak{margin-top:1px}.picture-book .book-para-fr{font-size:calc(24px * var(--text-scale,1));justify-content:space-between;line-height:1.4}.picture-line{cursor:pointer}.picture-line+.picture-line{margin-top:10px}.picture-line .book-para-en{margin-top:6px;padding-top:6px}.picture-book .book-para-speak{margin-top:7px}.book-para-en{font-size:calc(14px * var(--text-scale,1));color:var(--muted);border-top:1px dashed var(--border);margin-top:10px;padding-top:10px;line-height:1.55}.alpha-grid{grid-template-columns:repeat(5,1fr);gap:8px;padding:0 0 8px;display:grid}.alpha-card{background:var(--card);text-align:center;cursor:pointer;border:2px solid var(--border);border-radius:10px;flex-direction:column;align-items:center;gap:2px;padding:10px 4px 8px;transition:border-color .15s,transform .1s;display:flex}.alpha-card:active{transform:scale(.92)}.alpha-letter{font-size:calc(26px * var(--text-scale,1));font-weight:900;line-height:1.1}.alpha-name{font-size:calc(12px * var(--text-scale,1));word-break:break-word;font-weight:600;line-height:1.2}.alpha-hint{font-size:calc(12px * var(--text-scale,1));color:var(--muted);line-height:1.2}.btn-primary,.btn-secondary{width:100%;font-size:calc(17px * var(--text-scale,1));text-align:center;border-radius:16px;padding:17px;font-weight:700;display:block}.btn-primary{color:#fff;transition:opacity .15s,transform .1s;box-shadow:0 4px 16px #0003}.btn-secondary{background:var(--card);color:var(--text);box-shadow:var(--shadow);border:2px solid var(--border);font-weight:600}.quiz{width:100%;max-width:720px;padding:20px 16px calc(32px + env(safe-area-inset-bottom,0px));flex-direction:column;flex:1;gap:18px;margin:0 auto;display:flex}.qprog-row{align-items:center;gap:8px;display:flex}.qprog-bar{background:var(--border);border-radius:3px;flex:1;height:6px;overflow:hidden}.qprog-fill{border-radius:3px;height:100%;transition:width .3s}.qprog-text{font-size:calc(12px * var(--text-scale,1));color:var(--muted);flex-shrink:0}.quiz-card{background:var(--card);text-align:center;box-shadow:var(--shadow-lg);border-radius:22px;flex-direction:column;justify-content:center;align-items:center;gap:10px;min-height:170px;padding:40px 24px;transition:background .18s;display:flex;position:relative;overflow:hidden}.quiz-card.flash-ok{background:#f0fff4}.quiz-card.flash-shake{animation:.5s shake}.check-anim{color:var(--success);font-size:52px;animation:.35s cubic-bezier(.175,.885,.32,1.275) both pop}.quiz-prompt{font-size:calc(14px * var(--text-scale,1));color:var(--muted);font-weight:500}.quiz-word-row{grid-template-columns:1fr auto 1fr;align-self:stretch;align-items:center;display:grid}.quiz-word-row .quiz-word{grid-column:2}.quiz-word-row .speak-btn{grid-column:3;justify-self:start;margin-left:8px}.quiz-word{font-size:calc(34px * var(--text-scale,1));letter-spacing:-.5px;font-weight:900;line-height:1.1}.quiz-hint{font-size:calc(13px * var(--text-scale,1));color:var(--muted)}.score-line{text-align:center;font-size:calc(13px * var(--text-scale,1));color:var(--muted)}.audio-cue{background:var(--border);border-radius:50%;justify-content:center;align-items:center;width:80px;height:80px;font-size:40px;display:flex}.audio-cue:active{background:#cbd5e0}.mc-options{flex-direction:column;gap:10px;margin-top:auto;display:flex}.mc-opt{background:var(--card);border:2px solid var(--border);font-size:calc(15px * var(--text-scale,1));text-align:left;color:var(--text);box-shadow:var(--shadow);border-radius:14px;justify-content:space-between;align-items:center;gap:10px;padding:18px 20px;font-weight:600;line-height:1.3;transition:border-color .12s,background .12s;display:flex}.mc-opt.opt-ok{border-color:var(--success);color:#276749;background:#f0fff4}.mc-opt-check{color:var(--success);font-size:18px;font-weight:900}.mc-opt.opt-bad{border-color:var(--error);color:#9b2335;background:#fff5f5;animation:.45s shake}.math-problem{flex-wrap:wrap;justify-content:center;align-items:baseline;gap:8px;margin:8px 0 4px;display:flex}.math-operand{font-size:calc(22px * var(--text-scale,1));font-weight:800}.math-op{font-size:calc(26px * var(--text-scale,1));color:var(--muted);font-weight:300}.math-blank{font-size:calc(28px * var(--text-scale,1));color:var(--muted);font-weight:900}.prep-country{font-size:calc(42px * var(--text-scale,1));text-align:center;margin:4px 0 2px;font-weight:900}.prep-english{font-size:calc(16px * var(--text-scale,1));color:var(--muted);text-align:center;margin-bottom:8px}.prep-options{gap:12px;margin-top:auto;display:flex}.prep-opt{background:var(--card);border:2px solid var(--border);font-size:calc(24px * var(--text-scale,1));text-align:center;color:var(--text);box-shadow:var(--shadow);border-radius:16px;flex:1;padding:22px 8px;font-weight:900;transition:border-color .12s,background .12s}.prep-opt.prep-opt-ok{border-color:var(--success);color:#276749;background:#f0fff4}.prep-opt.prep-opt-bad{border-color:var(--error);color:#9b2335;background:#fff5f5;animation:.45s shake}.conj-verb-line{flex-direction:column;align-items:center;gap:2px;display:flex}.conj-verb{font-size:calc(18px * var(--text-scale,1));color:var(--text);font-weight:800}.conj-verb-en{font-size:calc(12px * var(--text-scale,1));color:var(--muted)}.sg-wrap{flex-direction:column;flex:1;display:flex;overflow:hidden}.sg-hdr{flex-shrink:0;padding:12px 16px 6px}.sg-arena{-webkit-user-select:none;user-select:none;flex:1;position:relative;overflow:hidden}.sg-zone{z-index:1;width:50%;transition:background .1s;position:absolute;top:0;bottom:0}.sg-zone-m{left:0}.sg-zone-f{right:0}.sg-zone:active{background:#0000000a}.sg-divider{background:var(--border);pointer-events:none;z-index:0;width:1px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.sg-lbl{opacity:.06;pointer-events:none;z-index:0;font-size:100px;font-weight:900;line-height:1;position:absolute;top:12%}.sg-lbl-m{color:#2b6cb0;left:8%}.sg-lbl-f{color:#97266d;right:8%}.sg-switch-anchor{pointer-events:none;z-index:5;flex-direction:column;align-items:center;gap:10px;display:flex;position:absolute;left:50%;transform:translate(-50%,-50%)}.sg-switch-bar{border-radius:5px;width:88px;height:10px;transition:transform .13s,background .13s;box-shadow:0 2px 8px #00000038}.sg-switch-hint{font-size:calc(13px * var(--text-scale,1));opacity:.7;font-weight:700;transition:color .13s}.sg-word{z-index:10;background:var(--card);box-shadow:var(--shadow-lg);pointer-events:none;white-space:nowrap;text-align:center;border-radius:14px;padding:10px 22px 12px;position:absolute;transform:translate(-50%,-50%)}.sg-word-main{font-size:calc(26px * var(--text-scale,1));letter-spacing:-.5px;font-weight:900}.sg-word-sub{font-size:calc(13px * var(--text-scale,1));color:var(--text-secondary,#888);margin-top:2px;font-weight:500}.sg-bucket{z-index:5;text-align:center;pointer-events:none;min-width:80px;box-shadow:var(--shadow);border:2px solid #0000;border-radius:18px;padding:14px 18px;transition:background .18s,border-color .18s;position:absolute;transform:translate(-50%,-50%)}.sg-bucket.bkt-ok{border-color:var(--success)!important;background:#f0fff4!important}.sg-bucket.bkt-bad{animation:.45s shake;border-color:var(--error)!important;background:#fff5f5!important}.sg-bkt-letter{font-size:calc(28px * var(--text-scale,1));font-weight:900}.sg-bkt-sub{font-size:calc(12px * var(--text-scale,1));color:var(--muted);margin-top:2px}.results{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:14px;min-height:100vh;padding:40px 24px 48px;display:flex}.res-emoji{font-size:80px;animation:.4s cubic-bezier(.175,.885,.32,1.275) both pop}.res-title{font-size:calc(30px * var(--text-scale,1));letter-spacing:-1px;font-weight:900}.res-score{font-size:calc(56px * var(--text-scale,1));font-weight:900;line-height:1}.res-badge{font-size:calc(14px * var(--text-scale,1));border-radius:20px;padding:6px 18px;font-weight:700}.badge-great{color:#22543d;background:#c6f6d5}.badge-good{color:#2a4365;background:#bee3f8}.badge-keep{color:#742a2a;background:#fed7d7}.res-actions{flex-direction:column;gap:10px;width:100%;margin-top:16px;display:flex}@media (prefers-color-scheme:dark){:root{--bg:#14171e;--card:#1b2534;--text:#f1f5f9;--muted:#94a3b8;--border:#334155;--shadow:0 2px 8px #00000059, 0 1px 3px #00000040;--shadow-lg:0 8px 24px #00000080}.gbtn.masc{color:#90cdf4;background:#1a3a5c}.gbtn.fem{color:#fbb6ce;background:#4a1942}.gbtn.wrong{background:#2d1515!important}.mc-opt{background:var(--card)}.mc-opt.opt-ok{color:#68d391;background:#1a3a2a}.mc-opt.opt-bad{color:#fc8181;background:#2d1515}.quiz-card.flash-ok{background:#1a3a2a}.audio-cue:active{background:#475569}.sg-bucket.bkt-ok{background:#1a3a2a!important}.sg-bucket.bkt-bad{background:#2d1515!important}.badge-great{color:#68d391;background:#1a3a2a}.badge-good{color:#90cdf4;background:#1a3a5c}.badge-keep{color:#fc8181;background:#2d1515}.vmatch-btn{color:#f1f5f9;background:#2d3748;border-color:#4a5568}.vmatch-btn.vmatch-selected{background:#1a3a5c;border-color:currentColor}.vmatch-btn.vmatch-matched{border-color:var(--success);color:#68d391;background:#1a3a2a}.vmatch-btn.vmatch-wrong{border-color:var(--error);color:#fc8181;background:#2d1515}.vmatch-verb-card{background:#2d3748;border-color:currentColor}.lost-word-item{background:var(--card);border-color:var(--border)}}html.native-launch,html.native-launch body{background:0 0}.splash-overlay{z-index:200;pointer-events:none;opacity:1;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);position:fixed;inset:0}.splash-overlay.is-fading{opacity:0;transition:opacity .5s}.splash-hat{will-change:transform, font-size;font-size:120px;line-height:1;transition:transform .6s cubic-bezier(.4,0,.2,1),font-size .6s cubic-bezier(.4,0,.2,1);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.home-tools{gap:10px;display:flex}.home-tools+.home-level-hdr{padding-top:6px}.home-tool{background:var(--card);width:78px;box-shadow:var(--shadow);color:var(--text);-webkit-tap-highlight-color:transparent;border-radius:14px;flex-direction:column;align-items:center;gap:4px;padding:10px 4px 8px;transition:background .15s;display:flex}.home-tool:active{background:var(--border)}.home-tool-icon{font-size:26px;line-height:1;position:relative}.home-tool-badge{color:#fff;min-width:18px;height:18px;box-shadow:0 0 0 2px var(--card);background:#7c6ce0;border-radius:999px;justify-content:center;align-items:center;padding:0 5px;font-size:11px;font-weight:800;display:flex;position:absolute;top:-6px;right:-12px}.home-tool-label{font-size:calc(11px * var(--text-scale,1));color:var(--muted);white-space:nowrap;font-weight:600}.lost-words-list{flex-direction:column;flex:1;gap:0;padding:16px;display:flex;overflow-y:auto}.lost-word-item{background:var(--card);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.lost-word-item:first-child{border-radius:12px 12px 0 0}.lost-word-item:last-of-type{border-bottom:none;border-radius:0 0 12px 12px}.lost-word-text{flex-direction:column;gap:2px;display:flex}.lost-word-fr{font-size:calc(16px * var(--text-scale,1));font-weight:600}.lost-word-en{font-size:calc(13px * var(--text-scale,1));color:var(--muted)}.lost-gender-badge{font-size:calc(12px * var(--text-scale,1));text-transform:uppercase;letter-spacing:.02em;font-weight:700}.lost-word-dots{flex-shrink:0;gap:6px;display:flex}.lost-dot{background:var(--border);border:2px solid #c0392b;border-radius:50%;width:10px;height:10px}.lost-dot.filled{background:#c0392b}.lost-practice-btn{color:#fff;font-size:calc(16px * var(--text-scale,1));border-radius:12px;width:100%;margin-top:20px;padding:14px;font-weight:600}.lost-practice-hint{text-align:center;font-size:calc(13px * var(--text-scale,1));color:var(--muted);margin-top:20px}.lost-practice-hdr-btn{color:#fff;font-size:calc(14px * var(--text-scale,1));background:#ffffff40;border-radius:8px;margin-left:auto;padding:6px 12px;font-weight:600}.goal-pie{flex-shrink:0;position:relative}.goal-pie svg{display:block}.goal-pie-label{font-size:calc(12px * var(--text-scale,1));justify-content:center;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.track-pie-badge{top:calc(env(safe-area-inset-top) + 14px);z-index:5;filter:drop-shadow(0 1px 4px #00000040);background:0 0;border-radius:50%;position:absolute;right:16px}.track-list{flex-direction:column;gap:10px;padding:16px 16px 32px;display:flex}.track-card{background:var(--card);box-shadow:var(--shadow);border-left:4px solid #0000;border-radius:14px;padding:14px 16px;transition:border-color .2s}.track-card.running{border-left-color:var(--success)}.track-card-top{align-items:center;gap:14px;display:flex}.track-card-emoji{flex-shrink:0;font-size:30px}.track-card-body{flex:1;min-width:0}.track-card-title{font-size:calc(16px * var(--text-scale,1));font-weight:700}.track-card-time{font-size:calc(14px * var(--text-scale,1));color:var(--muted);margin-top:3px}.track-card-goal{color:var(--muted)}.track-remove-btn{opacity:.6;background:0 0;flex-shrink:0;font-size:18px}.track-prog-wrap{background:var(--border);border-radius:3px;height:5px;margin-top:12px;overflow:hidden}.track-prog-fill{background:var(--success);border-radius:3px;height:100%;transition:width .4s}.track-card-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.track-timer-btn{color:#fff;font-size:calc(13px * var(--text-scale,1));background:#2c7a7b;border-radius:20px;padding:8px 16px;font-weight:600}.track-timer-btn.stop{background:#c05621}.track-manual-btn,.track-goal-btn{background:var(--border);color:var(--text);font-size:calc(13px * var(--text-scale,1));border-radius:20px;padding:8px 14px;font-weight:600}.track-inline-form{align-items:center;gap:8px;margin-top:12px;display:flex}.track-inline-form input{background:var(--bg);border:1px solid var(--border);min-width:0;font-size:calc(14px * var(--text-scale,1));color:var(--text);border-radius:8px;flex:1;padding:8px 10px;font-family:inherit}.track-inline-form button{color:#fff;font-size:calc(13px * var(--text-scale,1));background:#2c7a7b;border-radius:8px;flex-shrink:0;padding:8px 12px;font-weight:600}.track-cancel-btn{background:var(--border)!important;color:var(--text)!important}.track-new-form{flex-direction:column;gap:10px;display:flex}.track-new-form input{background:var(--bg);border:1px solid var(--border);font-size:calc(14px * var(--text-scale,1));color:var(--text);border-radius:8px;width:100%;padding:10px 12px;font-family:inherit}.track-add-area-btn{background:var(--card);color:var(--muted);border:1.5px dashed var(--border);font-size:calc(15px * var(--text-scale,1));border-radius:14px;padding:16px;font-weight:600}.vmatch-verb-card{background:var(--card);box-shadow:var(--shadow);border:2px solid #0000;border-radius:12px;align-items:center;gap:12px;margin:12px 16px 4px;padding:14px 18px;display:flex}.vmatch-verb-fr{font-size:calc(26px * var(--text-scale,1));font-weight:800}.vmatch-verb-en{font-size:calc(14px * var(--text-scale,1));color:var(--muted)}.vmatch-hint{text-align:center;font-size:calc(13px * var(--text-scale,1));color:var(--muted);margin:6px 0 10px}.vmatch-grid{grid-template-columns:1fr 1fr;gap:8px;padding:0 12px;display:grid}.vmatch-col{flex-direction:column;gap:7px;display:flex}.vmatch-btn{border:2px solid var(--border);background:var(--card);font-size:calc(15px * var(--text-scale,1));text-align:center;cursor:pointer;border-radius:10px;padding:11px 10px;font-weight:600;transition:border-color .15s,background .15s,color .15s}.vmatch-btn.vmatch-selected{background:#63b3ed26;border-color:currentColor}.vmatch-btn.vmatch-matched{border-color:var(--success);color:var(--success);opacity:1;cursor:default;background:#48bb7826}.vmatch-btn.vmatch-wrong{border-color:var(--error);color:var(--error);background:#fc818126;animation:.4s shake}.vmatch-check{color:var(--success)}.vmatch-form-btn{color:var(--text)}.cwrite-table{background:var(--card);box-shadow:var(--shadow);border-radius:12px;margin:0 16px 8px;overflow:hidden}.cwrite-row{border-bottom:1px solid var(--border);grid-template-columns:90px 1fr 32px;align-items:center;transition:background .15s;display:grid}.cwrite-row:last-child{border-bottom:none}.cwrite-row.cwrite-ok{background:#48bb781f}.cwrite-row.cwrite-bad{background:#fc81811f}.cwrite-pronoun{font-size:calc(13px * var(--text-scale,1));color:var(--muted);border-right:1px solid var(--border);padding:10px 12px;font-weight:600}.cwrite-input-col{flex-direction:column;gap:2px;padding:6px 10px;display:flex}.cwrite-input{width:100%;font-size:calc(16px * var(--text-scale,1));color:var(--text);background:0 0;border:none;outline:none;padding:4px 0;font-family:inherit;font-weight:600}.cwrite-input:disabled{opacity:1}.cwrite-answer{font-size:calc(13px * var(--text-scale,1));color:var(--success);font-weight:700}.cwrite-icon{text-align:center;padding-right:8px;font-size:16px;font-weight:700}.cwrite-icon-ok{color:var(--success)}.cwrite-icon-bad{color:var(--error)}@media (prefers-color-scheme:dark){.cwrite-row.cwrite-ok{background:#48bb7826}.cwrite-row.cwrite-bad{background:#fc818126}.cwrite-input{color:var(--text)}}.fbq-phrase{font-size:calc(30px * var(--text-scale,1));letter-spacing:-.5px;color:var(--text);font-weight:800;line-height:1.3}.fbq-blank{border-bottom:3px solid var(--muted);min-width:60px;color:var(--muted);vertical-align:bottom;margin:0 4px;display:inline-block}.fbq-answer-slot{border-radius:6px;min-width:60px;margin:0 4px;padding:0 6px;font-weight:800;display:inline-block}.fbq-slot-ok{color:#276749;background:#48bb782e}.fbq-slot-bad{color:#9b2c2c;background:#fc81812e;text-decoration:line-through}.fbq-hint{font-size:calc(14px * var(--text-scale,1));color:var(--muted);margin-top:10px}.fbq-show-hint{font-size:calc(13px * var(--text-scale,1));color:var(--muted);background:0 0;border:none;margin-top:10px;padding:4px;font-weight:700;text-decoration:underline}.fbq-your-answer{font-size:calc(18px * var(--text-scale,1));color:#9b2c2c;margin-top:10px;font-weight:700;text-decoration:line-through}.fbq-correct-answer{font-size:calc(20px * var(--text-scale,1));color:var(--success);margin-top:10px;font-weight:800}.fbq-input{border:2px solid var(--border);width:calc(100% - 32px);font-size:calc(20px * var(--text-scale,1));background:var(--card);color:var(--text);text-align:center;border-radius:14px;outline:none;margin:0 16px;padding:16px;font-family:inherit;font-weight:700;transition:border-color .15s;display:block}.fbq-input:focus{border-color:var(--muted)}@media (prefers-color-scheme:dark){.fbq-slot-ok{color:#68d391;background:#48bb7833}.fbq-slot-bad{color:#fc8181;background:#fc818133}.fbq-your-answer{color:#fc8181}}.playback-row{justify-content:center;align-items:center;gap:14px;margin-top:12px;display:flex}.dictation-play-btn{color:#fff;width:84px;height:84px;font-size:calc(34px * var(--text-scale,1));border-radius:50%;justify-content:center;align-items:center;transition:transform .1s;display:flex;box-shadow:0 4px 16px #0003}.dictation-play-btn:active{transform:scale(.92)}.playback-slow-btn{background:var(--border);width:52px;height:52px;font-size:calc(24px * var(--text-scale,1));border-radius:50%;justify-content:center;align-items:center;transition:transform .1s;display:flex}.playback-slow-btn:active{transform:scale(.92)}.dictation-hint-line{font-size:calc(13px * var(--text-scale,1));color:var(--muted);margin-top:12px}.rewrite-prompt-row{justify-content:center;align-items:center;gap:8px;display:flex}.rewrite-prompt{font-size:calc(22px * var(--text-scale,1));letter-spacing:-.3px;color:var(--text);font-weight:800;line-height:1.35}.fvg-wrap{-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;display:flex;overflow:hidden}.fvg-status{flex-shrink:0;align-items:center;gap:10px;padding:14px 16px 10px;display:flex}.fvg-lives{flex-shrink:0;gap:6px;display:flex}.fvg-heart{color:#fc8181;font-size:22px;transition:opacity .2s}.fvg-heart-lost{opacity:.2}.fvg-prog-bar{background:var(--border);border-radius:3px;flex:1;height:6px;overflow:hidden}.fvg-prog-fill{border-radius:3px;height:100%;transition:width .3s}.fvg-score{font-size:calc(20px * var(--text-scale,1));color:var(--text);text-align:right;flex-shrink:0;min-width:32px;font-weight:800}.fvg-arena{flex:1;position:relative;overflow:hidden}.fvg-lanes{pointer-events:none;grid-template-columns:1fr 1fr 1fr;display:grid;position:absolute;inset:0}.fvg-lane{border-right:1px solid var(--border);transition:background .2s}.fvg-lane:last-child{border-right:none}.fvg-bucket-target{box-shadow:0 0 0 2px}.fvg-card{background:var(--card);box-shadow:var(--shadow-lg);white-space:nowrap;border-radius:18px;flex-direction:column;align-items:center;gap:6px;padding:20px 36px;transition:background .15s,box-shadow .15s;display:flex;position:absolute;left:50%;transform:translate(-50%)}.fvg-form{font-size:calc(40px * var(--text-scale,1));color:var(--text);font-weight:900}.fvg-hint{font-size:calc(14px * var(--text-scale,1));color:var(--muted);font-weight:600}.fvg-card-ok{box-shadow:0 0 0 3px var(--success), var(--shadow-lg);background:#f0fff4}.fvg-card-bad{box-shadow:0 0 0 3px var(--error), var(--shadow-lg);background:#fff5f5;animation:.4s shake}.fvg-buckets{flex-shrink:0;gap:10px;padding:12px 12px 20px;display:flex}.fvg-bucket{font-size:calc(17px * var(--text-scale,1));background:0 0;border:2px solid;border-radius:16px;flex:1;padding:18px 8px;font-family:inherit;font-weight:700;transition:opacity .15s,transform .1s}.fvg-bucket:active:not(:disabled){transform:scale(.96)}@media (prefers-color-scheme:dark){.fvg-card-ok{background:#48bb7826}.fvg-card-bad{background:#fc818126}}.paywall-backdrop{z-index:200;padding:16px 16px calc(16px + env(safe-area-inset-bottom));background:#0a0c148c;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0;overflow-y:auto}.paywall{background:var(--card);width:100%;max-width:440px;color:var(--text);text-align:center;border-radius:24px;margin:auto 0 0;padding:28px 22px 18px;box-shadow:0 12px 40px #00000059}.paywall-emoji{font-size:44px;line-height:1}.paywall-title{font-size:calc(22px * var(--text-scale,1));margin-top:10px;font-weight:800}.paywall-text{font-size:calc(15px * var(--text-scale,1));color:var(--muted);margin-top:8px;line-height:1.55}.paywall-perks{text-align:left;max-width:320px;font-size:calc(15px * var(--text-scale,1));margin:16px auto 0;line-height:1.9;list-style:none}.paywall-plans{gap:10px;margin-top:18px;display:flex}.paywall-plan{background:var(--bg);color:var(--text);border:2px solid var(--border);border-radius:16px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:16px 8px 12px;transition:border-color .15s,transform .1s;display:flex;position:relative}.paywall-plan.selected{background:#667eea1f;border-color:#667eea}.paywall-plan:active{transform:scale(.98)}.paywall-badge{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:999px;padding:3px 9px;font-size:11px;font-weight:700;position:absolute;top:-10px}.paywall-plan-title{font-size:calc(14px * var(--text-scale,1));color:var(--muted);font-weight:700}.paywall-plan-price{font-size:calc(24px * var(--text-scale,1));font-weight:800}.paywall-plan-period{font-size:calc(13px * var(--text-scale,1));color:var(--muted)}.paywall-plan-note{font-size:calc(11px * var(--text-scale,1));color:var(--muted);margin-top:6px;line-height:1.3}.paywall-cta{background:linear-gradient(135deg,#667eea,#764ba2);margin-top:18px}.paywall-store{text-decoration:none}.paywall-link{width:100%;color:var(--text);font-weight:600;font-size:calc(15px * var(--text-scale,1));background:0 0;margin-top:10px;padding:10px;display:block}.paywall-link-small{font-size:calc(13px * var(--text-scale,1));color:var(--muted);margin-top:0;font-weight:500}.paywall-message{color:var(--muted);margin-top:4px;font-size:13px}.paywall-test-note{color:var(--muted);opacity:.8;margin-top:8px;font-size:12px}.paywall-done{padding:12px 0 6px}.paywall-sheet-backdrop{z-index:210;background:#00000059;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.paywall-sheet{background:var(--card);width:100%;max-width:480px;color:var(--text);padding:16px 20px calc(24px + env(safe-area-inset-bottom));border-radius:20px 20px 0 0;box-shadow:0 -8px 30px #0000004d}.paywall-sheet-hdr{justify-content:space-between;align-items:center;font-size:17px;font-weight:700;display:flex}.paywall-sheet-cancel{color:#667eea;background:0 0;font-size:16px;font-weight:600}.paywall-sheet-item{border-top:1px solid var(--border);border-bottom:1px solid var(--border);text-align:left;align-items:center;gap:12px;margin-top:18px;padding:12px 0;display:flex}.paywall-sheet-app{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;font-size:30px;display:flex}.paywall-sheet-name{font-weight:700}.paywall-sheet-desc{color:var(--muted);font-size:13px}.paywall-sheet-price{margin-left:auto;font-weight:700}.paywall-sheet-note{color:var(--muted);text-align:center;margin:14px 0;font-size:13px}.paywall-sheet-confirm{background:#0a84ff}.paywall-sheet-processing{color:var(--muted);justify-content:center;align-items:center;gap:12px;padding:17px;font-weight:600;display:flex}.paywall-sheet-processing .unit-loading-spinner{--uc:#667eea;width:22px;height:22px}.free-strip{background:var(--card);width:100%;height:40px;box-shadow:var(--shadow);font-size:calc(14px * var(--text-scale,1));color:var(--muted);border:none;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:0 16px;display:flex}.free-strip-icon{font-size:16px;line-height:1}.free-strip-link{font-size:calc(14px * var(--text-scale,1));color:#667eea;background:0 0;border:none;padding:0;font-weight:700}.paywall-link-inline{color:#667eea;font-weight:600;font-size:inherit;background:0 0;padding:0;text-decoration:underline}.unit-card.locked .unit-card-emoji,.unit-card.locked .unit-card-body{opacity:.55}.unit-card-lock{font-size:18px}.paywall-inline{padding:16px}.paywall-inline .paywall{box-shadow:var(--shadow);margin:0 auto}.rp-screen{z-index:150;background:var(--bg);height:100%;color:var(--text);flex-direction:column;display:flex;position:fixed;top:0;left:0;right:0}.rp-header{padding:calc(12px + env(safe-area-inset-top)) 16px 12px;color:#fff;align-items:center;gap:12px;display:flex}.rp-close{color:#fff;background:#fff3;border-radius:50%;flex-shrink:0;width:36px;height:36px;font-size:16px}.rp-header-title{font-size:17px;font-weight:700}.rp-header-sub{opacity:.85;font-size:13px}.rp-pick{text-align:center;width:100%;max-width:480px;margin:0 auto;padding:24px 20px;overflow-y:auto}.rp-context{color:var(--muted);font-style:italic;font-size:calc(14px * var(--text-scale,1));line-height:1.5}.rp-pick-title{font-size:calc(20px * var(--text-scale,1));margin:20px 0 14px;font-weight:800}.rp-pick-btn{background:var(--card);width:100%;color:var(--text);box-shadow:var(--shadow);font-size:calc(17px * var(--text-scale,1));text-align:left;border-radius:16px;align-items:center;gap:14px;margin-bottom:10px;padding:14px 18px;font-weight:700;display:flex}.rp-pick-btn:active{transform:scale(.98)}.rp-pick-emoji{font-size:30px}.rp-note{color:var(--muted);margin-top:14px;font-size:12px}.rp-list{overscroll-behavior:contain;flex-direction:column;flex:1;gap:12px;width:100%;max-width:640px;min-height:0;margin:0 auto;padding:16px;display:flex;overflow-y:auto}.rp-tap{font-size:calc(11px * var(--text-scale,1));color:var(--muted);margin-top:4px}.rp-learner{flex-direction:column;gap:6px;display:flex}.rp-correction{border-left:3px solid var(--success);max-width:85%;font-size:calc(14px * var(--text-scale,1));background:#48bb781f;border-radius:10px;align-self:flex-end;margin-right:44px;padding:8px 12px;line-height:1.4}.rp-correction-label{font-weight:700}.rp-tip{color:var(--muted);font-size:calc(13px * var(--text-scale,1));margin-top:3px}.rp-typing{gap:4px;padding:14px 16px;display:flex}.rp-typing span{background:var(--muted);border-radius:50%;width:7px;height:7px;animation:1s ease-in-out infinite rp-dot}.rp-typing span:nth-child(2){animation-delay:.15s}.rp-typing span:nth-child(3){animation-delay:.3s}@keyframes rp-dot{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.rp-notice{text-align:center;color:var(--muted);padding:4px 12px;font-size:13px}.rp-end{text-align:center;padding:8px 0 16px}.rp-end-title{margin-bottom:12px;font-size:18px;font-weight:800}.rp-input-bar{align-items:center;gap:8px;width:100%;max-width:640px;margin:0 auto;padding:10px 12px 6px;display:flex}.rp-input{border:2px solid var(--border);background:var(--card);min-width:0;color:var(--text);border-radius:22px;flex:1;padding:12px 16px;font-size:16px}.rp-send{color:#fff;border-radius:50%;flex-shrink:0;width:44px;height:44px;font-size:20px;font-weight:700}.rp-send:disabled{opacity:.4}.rp-turns{text-align:center;color:var(--muted);padding:0 0 calc(10px + env(safe-area-inset-bottom));font-size:11px}.conv-roleplay-btn{margin-bottom:10px}.book-header{aspect-ratio:2;width:calc(100% + 32px);height:auto;margin:-18px -16px 16px;display:block}@media (width>=672px){.book-header{border-radius:16px;width:100%;max-width:640px;margin:0 auto 16px}}.ts-card{text-align:left;min-height:0;padding:16px 18px}.ts-text{font-size:calc(17px * var(--text-scale,1));line-height:1.75}.ts-gap{border-bottom:2px dashed var(--border);color:var(--muted);margin:0 1px;padding:0 6px;font-style:italic;line-height:1.5;display:inline-block}.ts-current{color:var(--text);border-bottom-style:solid;border-bottom-width:3px;font-weight:700}.ts-filled{color:var(--success);font-weight:700}.ts-english{font-size:calc(15px * var(--text-scale,1));color:var(--muted);margin-top:12px;font-style:italic;line-height:1.6}.ts-listen{border:1px solid var(--border);color:var(--text);font-size:calc(14px * var(--text-scale,1));cursor:pointer;background:0 0;border-radius:999px;margin-top:10px;padding:6px 14px}.ts-prompt{text-align:center;font-size:calc(15px * var(--text-scale,1));color:var(--muted);margin:10px 4px 8px;line-height:1.5}.ts-quiz .mc-options{gap:8px;margin-top:0}.ts-quiz .mc-opt{padding:11px 16px}.ts-quiz .lesson-cta{margin-top:0}.ts-prompt strong{color:var(--text)}.ts-tip{color:var(--text);margin-top:8px}.ts-tense-tag{color:#fff;font-weight:700;font-size:calc(13px * var(--text-scale,1));border-radius:999px;margin-right:4px;padding:2px 10px;display:inline-block}.load-failed{text-align:center;min-height:60vh;color:var(--text);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px 16px;display:flex}.load-failed-emoji{font-size:44px;line-height:1}.load-failed-title{font-size:calc(20px * var(--text-scale,1));font-weight:700}.load-failed-text{font-size:calc(15px * var(--text-scale,1));color:var(--muted);max-width:320px}.load-failed-btn{background:#667eea;max-width:240px;margin-top:12px}.label-game{--lg-m:#2b6cb0;--lg-f:#b83280;--lg-p:#2f855a}.label-prompt{text-align:center;font-size:calc(14px * var(--text-scale,1));color:var(--muted)}.label-picture{background:var(--card);width:100%;max-height:54vh;box-shadow:var(--shadow);-webkit-user-select:none;user-select:none;border-radius:16px;display:block}@media (width<=671px){.label-picture{width:calc(100% + 32px);max-height:58vh;box-shadow:none;border-radius:0;margin:0 -16px}.label-tray{gap:6px;margin:0 -10px}.label-chip{font-size:calc(13px * var(--text-scale,1));padding:5px 10px}}@media (width<=671px) and (height<=760px){.label-game{gap:10px;padding-top:12px}.label-picture{max-height:46vh}.label-game .score-line{display:none}}.label-line{stroke:var(--muted);stroke-width:1.2px;opacity:.55}.label-dot{fill:var(--muted)}.label-iris{transition:transform .12s ease-out}@media (prefers-reduced-motion:reduce){.label-iris{transition:none}}.label-slot{cursor:pointer}.label-slot rect{fill:var(--bg);stroke:var(--muted);stroke-width:1.5px;stroke-dasharray:4 3;transition:fill .2s,stroke .2s}.label-slot.ready rect{stroke:var(--text)}.label-bubbles .label-slot:not(.placed):not(.bad) rect{fill:#fff;stroke:#a0aec0}.label-bubbles .label-slot.ready:not(.placed) rect{stroke:#4a5568}.label-slot.bad rect{fill:#fed7d7;stroke:#e53e3e;stroke-dasharray:none;animation:.4s shake}.label-slot.placed rect{stroke-dasharray:none;stroke-width:0;animation:.3s pop}.label-slot.placed.g-M rect{fill:var(--lg-m)}.label-slot.placed.g-F rect{fill:var(--lg-f)}.label-slot.placed.g-P rect{fill:var(--lg-p)}.label-slot text{fill:#fff;text-anchor:middle;dominant-baseline:middle;pointer-events:none;font-size:13px;font-weight:700}.label-slot.bad rect,.label-slot.placed rect{transform-box:fill-box;transform-origin:50%}.label-tray{flex-wrap:wrap;justify-content:center;gap:8px;min-height:40px;display:flex}.label-chip{border:2px solid var(--border);background:var(--card);color:var(--text);font-weight:700;font-size:calc(14px * var(--text-scale,1));box-shadow:var(--shadow);touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;border-radius:999px;padding:7px 12px}.label-chip.selected{color:#fff}.label-chip.lifted{opacity:.3}.label-chip.shake{animation:.4s shake}.label-ghost{z-index:300;pointer-events:none;white-space:nowrap;cursor:grabbing;position:fixed;transform:translate(-50%,-50%)scale(1.08)}.label-ghost.touch{transform:translate(-50%,-130%)scale(1.08)}.label-done{color:var(--lg-p);padding:8px;font-weight:800}@media (prefers-color-scheme:dark){.label-game{--lg-m:#3182ce;--lg-f:#d53f8c;--lg-p:#38a169}.label-slot.bad rect{fill:#4a1d1d}}.pick-prompt{text-align:center;font-size:calc(16px * var(--text-scale,1));font-weight:700}.pick-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.pick-opt{text-align:left;background:var(--card);border:2px solid var(--border);color:var(--text);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;align-items:flex-start;gap:3px;padding:12px 14px;transition:border-color .12s,background .12s;display:flex}.pick-opt.on{color:#fff}.pick-opt.on .pick-en{color:#ffffffd9}.pick-fr{font-size:calc(15px * var(--text-scale,1));font-weight:700}.pick-en{font-size:calc(12px * var(--text-scale,1));color:var(--muted)}.pick-opt.ok{border-color:var(--success);color:#276749;background:#f0fff4}.pick-opt.missed{border-color:var(--success);border-style:dashed}.pick-opt.bad{border-color:var(--error);color:#9b2335;background:#fff5f5;animation:.45s shake}.pick-opt.fine{opacity:.5}.pick-key{font-size:calc(12px * var(--text-scale,1));color:var(--muted);justify-content:center;gap:14px;display:flex}.pick-key-ok{color:var(--success);font-weight:700}.pick-key-missed{border-bottom:2px dashed var(--success)}.pick-key-bad{color:var(--error);font-weight:700}@media (prefers-color-scheme:dark){.pick-opt.ok{color:#9ae6b4;background:#1a3a2a}.pick-opt.bad{color:#fc8181;background:#2d1515}}.fc{gap:16px}.fc-counts{font-size:calc(11px * var(--text-scale,1));justify-content:center;gap:24px;font-weight:600;display:flex}.fc-count{flex-direction:column;align-items:center;line-height:1.2;display:flex}.fc-count b{font-size:calc(18px * var(--text-scale,1));font-weight:800}.fc-count.new{color:#3182ce}.fc-count.learn{color:#e53e3e}.fc-count.review{color:#38a169}.fc-card{background:var(--card);box-shadow:var(--shadow-lg);text-align:center;cursor:pointer;border-radius:22px;flex-direction:column;align-items:center;gap:14px;min-height:260px;padding:22px 20px 28px;display:flex}.fc-card.flipped{cursor:default}.fc-unit{font-size:calc(12px * var(--text-scale,1));color:var(--muted);align-items:center;gap:8px;display:flex}.fc-new-tag{color:#fff;background:#3182ce;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}.fc-front{font-size:calc(28px * var(--text-scale,1));flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:6px;margin-top:18px;font-weight:800;line-height:1.2;display:flex}.fc-speak{margin-top:0;font-size:20px}.fc-front-ex{font-size:calc(16px * var(--text-scale,1));color:var(--muted);text-align:center;margin-top:-6px;font-style:italic}.fc-back{border-top:1px dashed var(--border);flex-direction:column;align-self:stretch;gap:8px;padding-top:16px;display:flex}.fc-french{font-size:calc(24px * var(--text-scale,1));flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;font-weight:800;display:flex}.fc-gender,.fc-literal{font-size:calc(13px * var(--text-scale,1));color:var(--muted)}.fc-example{font-style:italic;font-size:calc(15px * var(--text-scale,1));flex-direction:column;gap:3px;display:flex}.fc-example-en{color:var(--muted);font-style:normal;font-size:calc(13px * var(--text-scale,1))}.fc-grades{grid-template-columns:repeat(3,1fr);gap:8px;margin-top:auto;display:grid}.fc-grade{color:#fff;box-shadow:var(--shadow);border-radius:14px;flex-direction:column;align-items:center;gap:2px;padding:12px 4px;font-weight:800;display:flex}.fc-grade-when{font-size:calc(12px * var(--text-scale,1));opacity:.9;font-weight:600}.fc-grade-label{font-size:calc(15px * var(--text-scale,1))}.fc-grade.again{background:#e53e3e}.fc-grade.hard{background:#dd6b20}.fc-grade.good{background:#38a169}.fc-grade.easy{background:#3182ce}.fc-empty{text-align:center;color:var(--muted);padding:40px 12px}.fc-empty-icon{font-size:52px}.fc-empty-title{font-size:calc(20px * var(--text-scale,1));color:var(--text);margin:8px 0 6px;font-weight:800}.fc-choose{margin-top:18px;padding:14px 28px}.fc-deck{padding:16px 16px calc(32px + env(safe-area-inset-bottom,0px));width:100%;max-width:720px;margin:0 auto}.fc-deck-btn{flex-direction:column;align-items:center;padding:5px 12px;line-height:1.15;display:flex}.fc-deck-btn-count{font-size:calc(15px * var(--text-scale,1));font-weight:600}.fc-deck-btn-count b{font-weight:800}.fc-deck-btn-label{font-size:calc(11px * var(--text-scale,1));opacity:.9;font-weight:600}.book-show-all{color:var(--muted);font-weight:600;font-size:calc(15px * var(--text-scale,1));background:0 0;border:none;align-items:center;gap:10px;margin:0 4px 12px auto;padding:4px 0;display:flex}.fc-deck-all{font-size:calc(14px * var(--text-scale,1));color:var(--muted);justify-content:space-between;align-items:center;margin:-4px 4px 6px;display:flex}.fc-deck-all-btn{color:#2b6cb0;font-weight:700;font-size:inherit;background:0 0;border:none;padding:4px 0}@media (prefers-color-scheme:dark){.fc-deck-all-btn{color:#90cdf4}}.fc-deck-intro{color:var(--muted);font-size:calc(14px * var(--text-scale,1));text-align:center;margin:0 0 14px}.fc-deck-level{margin-bottom:18px}.fc-deck-level-hdr{font-size:calc(13px * var(--text-scale,1));color:var(--muted);letter-spacing:.5px;margin:0 4px 8px;font-weight:800}.fc-deck-unit{text-align:left;background:var(--card);width:100%;box-shadow:var(--shadow);color:var(--text);border:2px solid #0000;border-radius:14px;align-items:center;gap:12px;margin-bottom:8px;padding:12px 14px;display:flex}.fc-deck-unit.on{border-color:#2b6cb0}.fc-deck-unit{gap:0;padding:0}.fc-deck-toggle{color:inherit;text-align:left;background:0 0;border:none;align-items:center;gap:10px;padding:12px 14px;display:flex}.fc-deck-main{flex:1;gap:12px;min-width:0;padding-right:6px}.fc-deck-browse{border:1.5px solid var(--border);font-size:calc(13px * var(--text-scale,1));color:#2b6cb0;background:0 0;border-radius:999px;flex-shrink:0;padding:4px 12px;font-weight:700}@media (prefers-color-scheme:dark){.fc-deck-browse{color:#90cdf4}}.fc-deck-browse+.fc-deck-browse{margin-left:6px}.fc-new-set{border:2px dashed var(--border);color:#2b6cb0;width:100%;font-weight:800;font-size:calc(15px * var(--text-scale,1));background:0 0;border-radius:14px;margin-bottom:8px;padding:12px}@media (prefers-color-scheme:dark){.fc-new-set{color:#90cdf4}}.fc-edit{flex-direction:column;gap:8px;display:flex}.fc-edit-label,.fc-edit-add-hdr,.fc-edit-count{font-size:calc(13px * var(--text-scale,1));color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:6px 2px 0;font-weight:700}.fc-edit-input{box-sizing:border-box;border:1.5px solid var(--border);background:var(--card);width:100%;color:var(--text);border-radius:10px;padding:11px 12px;font-size:16px}.fc-edit-input:focus{border-color:#2b6cb0;outline:none}.fc-edit-title{font-weight:700}.fc-edit-add{background:var(--card);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;gap:8px;margin-top:6px;padding:12px;display:flex}.fc-edit-add .fc-edit-add-hdr{margin:0 2px}.fc-edit-add-btn:disabled{opacity:.45}.fc-edit-card{grid-template-columns:1fr 1fr auto;align-items:center;gap:6px;display:grid}.fc-edit-del{color:var(--muted);background:0 0;border:none;padding:6px 8px;font-size:18px}.fc-edit-delete{color:#e53e3e;font-weight:700;font-size:calc(15px * var(--text-scale,1));background:0 0;border:none;margin:18px auto 8px;padding:8px}.fc-browse-bar{color:var(--muted);font-weight:600;font-size:calc(15px * var(--text-scale,1));justify-content:space-between;align-items:center;display:flex}.fc-browse-nav{align-items:center;gap:10px;margin-top:auto;display:flex}.fc-browse-show{flex:1}.fc-browse-btn{border:1.5px solid var(--border);background:var(--card);width:52px;height:52px;color:var(--text);border-radius:14px;flex-shrink:0;font-size:26px;font-weight:700}.fc-deck-emoji{flex-shrink:0;font-size:26px}.fc-deck-body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.fc-deck-title{font-weight:700;font-size:calc(15px * var(--text-scale,1))}.fc-deck-sub{font-size:calc(12px * var(--text-scale,1));color:var(--muted)}.fc-deck-order{color:#fff;background:#2b6cb0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:800;display:flex}.fc-switch{background:var(--border);border-radius:999px;flex-shrink:0;width:42px;height:24px;transition:background .15s;position:relative}.fc-switch span{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #00000040}.fc-switch.on{background:#2b6cb0}.fc-switch.on span{transform:translate(18px)}.fc-today{font-size:calc(14px * var(--text-scale,1));color:var(--text);flex-direction:column;align-items:center;gap:2px;display:flex}.fc-today b{color:#38a169;font-weight:800}.fc-total{font-size:calc(12px * var(--text-scale,1));color:var(--muted)}.fc-done-stats{color:var(--text);font-size:calc(15px * var(--text-scale,1));flex-direction:column;gap:4px;margin:6px 0 10px;display:flex}.fc-done-stats b{color:#38a169;font-size:calc(18px * var(--text-scale,1))}.word-pattern,.fc-pattern{text-align:center}.verb-pattern{font-size:calc(14px * var(--text-scale,1));color:var(--text);line-height:2;display:inline}.vp-slot{white-space:nowrap;border-radius:999px;align-items:baseline;gap:5px;margin:0 2px;padding:1px 8px;font-weight:700;display:inline-flex}.vp-keep{white-space:nowrap}.vp-word{white-space:nowrap;margin:0 2px;font-weight:700;background:0 0!important}.vp-tag{vertical-align:1px;border-radius:999px;margin-left:4px;padding:0 6px;font-size:.8em;font-weight:800;line-height:1.6;display:inline-block}.vp-cod .vp-tag{background:#dbeafe}.vp-coi .vp-tag{background:#ede9fe}.vp-y .vp-tag{background:#d1fae5}.vp-en .vp-tag{background:#ffedd5}.vp-pronoun{font-size:.85em;font-weight:800}.vp-cod{color:#1e40af;background:#dbeafe}.vp-coi{color:#5b21b6;background:#ede9fe}.vp-y{color:#04503a;background:#d1fae5}.vp-en{color:#8a2c0c;background:#ffedd5}.vp-tonic{color:#2d3748;background:#e2e8f0}.vp-tonic .vp-tag{background:#e2e8f0}.word-fr .verb-pattern{font-size:inherit;line-height:inherit}@media (prefers-color-scheme:dark){.vp-cod{color:#bfdbfe;background:#1e3a5f}.vp-coi{color:#ddd6fe;background:#3b2a63}.vp-y{color:#a7f3d0;background:#134e3a}.vp-en{color:#fed7aa;background:#5a2e12}.vp-cod .vp-tag{background:#1e3a5f}.vp-coi .vp-tag{background:#3b2a63}.vp-y .vp-tag{background:#134e3a}.vp-en .vp-tag{background:#5a2e12}.vp-pronoun{opacity:.85}.vp-tonic{color:#e2e8f0;background:#3a4556}.vp-tonic .vp-tag{background:#3a4556}}.word-group-note{border-bottom:1px solid var(--border);padding:14px 16px 4px}.word-group-note p{font-size:calc(16px * var(--text-scale,1));color:var(--text);margin:0 0 10px;line-height:1.6}.label-example{text-align:center;justify-content:center;align-items:center;min-height:64px;margin:4px 0 2px;display:flex}.label-example-fr{font-size:calc(18px * var(--text-scale,1));color:var(--text);flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;display:flex}.label-example-fr strong{color:var(--uc-ink,var(--uc,#2b6cb0))}.label-example-en{font-size:calc(14px * var(--text-scale,1));color:var(--muted);margin-top:2px}.pc-maison{border-radius:14px;width:calc(100% - 24px);max-width:420px;height:auto;margin:12px auto;display:block}.gt-card{background:var(--card);box-shadow:var(--shadow);border-radius:16px;max-width:600px;margin:0 auto 16px;padding:12px 12px 4px}.gt{border-collapse:collapse;width:100%;font-size:calc(16px * var(--text-scale,1))}.gt th{text-align:center;padding:4px 4px 10px}.gt th:first-child{text-align:left}.gt-head{border-radius:999px;padding:2px 10px;font-size:.85em;font-weight:800;display:inline-block}.gt th:first-child .gt-head{color:var(--muted)}.gt td{text-align:center;color:var(--text);border-top:1px solid var(--border);padding:8px 4px;font-weight:700}.gt td:first-child{text-align:left;font-weight:600}.gt td.gt-k-cod{color:#1e40af}.gt td.gt-k-coi{color:#5b21b6}.gt td.gt-k-y{color:#04503a}.gt td.gt-k-en{color:#8a2c0c}.gt-hl td{background:#fffbea}.gt-sub{color:var(--muted);font-size:.72em;font-weight:500;display:block}.gt-card{overflow-x:auto}.gt-inline{grid-column:1/-1;margin:10px 0 4px;overflow-x:auto}.gt-pc .gt td:nth-child(2){color:#c05621}@media (prefers-color-scheme:dark){.gt-pc .gt td:nth-child(2){color:#f6ad55}}.gt-pc .gt td:last-child{font-style:italic;font-weight:500}.vt-hdr{align-items:baseline;gap:10px;padding:4px 4px 10px;display:flex}.vt-verb{font-size:calc(20px * var(--text-scale,1));color:var(--text);font-weight:800}.vt-en{color:var(--muted);font-size:calc(15px * var(--text-scale,1));flex:1}.vt-card .gt td:first-child{width:40%}.vt-card .gt tr:has(td:nth-child(4)) td:first-child{width:30%}.vt-stem{font-size:calc(15px * var(--text-scale,1));color:var(--muted);padding:0 4px 10px}.vt-card .gt td:nth-child(2){text-align:left}.vt-card .gt td.vt-speak{text-align:right;width:40px;padding:2px 0}@media (width<=420px){.gt{font-size:calc(15px * var(--text-scale,1))}.gt td,.gt th{padding-left:2px;padding-right:2px}.gt-head{padding:2px 7px}}.gt tr>:first-child{padding-left:8px}.gt-key{font-size:calc(14px * var(--text-scale,1));color:var(--muted);align-items:center;gap:8px;margin:0 4px 10px;font-weight:600;display:flex}.gt-key-swatch{background:#fffbea;border:1px solid #ecc94b;border-radius:4px;flex-shrink:0;width:18px;height:14px}@media (prefers-color-scheme:dark){.gt-key-swatch{background:#243450;border:none;box-shadow:inset 3px 0 #63b3ed}}.gt-note{font-size:calc(16px * var(--text-scale,1));color:var(--text);margin:12px 4px;line-height:1.6}@media (prefers-color-scheme:dark){.gt td.gt-k-cod{color:#bfdbfe}.gt td.gt-k-coi{color:#ddd6fe}.gt td.gt-k-y{color:#a7f3d0}.gt td.gt-k-en{color:#fed7aa}.gt-hl td{background:#243450}.gt-hl td:first-child{box-shadow:inset 3px 0 #63b3ed}}.vp-key{background:var(--card);box-shadow:var(--shadow);border-radius:16px;margin-bottom:14px;padding:14px 16px}.vp-key-title{font-size:calc(16px * var(--text-scale,1));color:var(--muted);margin-bottom:10px;line-height:1.55}.vp-key-items{flex-wrap:wrap;gap:6px;display:flex}.vp-key-items .vp-slot{font-size:calc(14px * var(--text-scale,1))}
