@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:400;src:url(./nunito-latin-400-normal-r8SDr6Up.woff2) format("woff2"),url(./nunito-latin-400-normal-DKg4f3fz.woff) format("woff")}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(./nunito-latin-700-normal-Dort48En.woff2) format("woff2"),url(./nunito-latin-700-normal-OcDqTBcA.woff) format("woff")}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(./nunito-latin-800-normal-Dz8SOQK_.woff2) format("woff2"),url(./nunito-latin-800-normal-D-J0wlBY.woff) format("woff")}@font-face{font-family:Andika;font-style:normal;font-display:swap;font-weight:400;src:url(./andika-latin-400-normal-BTFTIZb-.woff2) format("woff2"),url(./andika-latin-400-normal-BK42By1L.woff) format("woff")}@font-face{font-family:Andika;font-style:normal;font-display:swap;font-weight:700;src:url(./andika-latin-700-normal-Dk95f5lc.woff2) format("woff2"),url(./andika-latin-700-normal-CAUSQC6x.woff) format("woff")}:root{color-scheme:light;--canvas: #fbf6ec;--canvas-deep: #f3ead8;--card: #ffffff;--ink: #1b2a4a;--muted: #5f6b85;--line: #e8e0d0;--navy: #1b2a4a;--navy-deep: #111c33;--navy-soft: #e1e6f1;--gold: #c9a24a;--gold-deep: #a9842f;--gold-soft: #f4e9c9;--coral: #ff7a59;--coral-deep: #e8603f;--coral-soft: #ffe4da;--sun: #ffd166;--sun-soft: #fff1c7;--sky: #4da3ff;--sky-soft: #dcecff;--leaf: #4cc27a;--leaf-soft: #d9f5e3;--berry: #b26cff;--berry-soft: #ecdeff;--rose: #ff6fa5;--rose-soft: #ffdfeb;--success: #2ec27e;--success-soft: #d7f5e6;--error: #ff5c5c;--error-soft: #ffdede;--tile-red: #ff6b6b;--tile-blue: #4da3ff;--tile-green: #4cc27a;--tile-yellow: #ffd166;--r-sm: 16px;--r-md: 24px;--r-lg: 32px;--r-pill: 999px;--shadow-sm: 0 2px 0 rgba(27, 42, 74, .08), 0 6px 16px rgba(27, 42, 74, .08);--shadow-md: 0 4px 0 rgba(27, 42, 74, .08), 0 12px 28px rgba(27, 42, 74, .1);--shadow-lift: 0 6px 0 rgba(27, 42, 74, .08), 0 18px 36px rgba(27, 42, 74, .12);--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 24px;--s-6: 32px;--s-7: 48px;--s-8: 64px;--touch: 72px;--touch-lg: 96px;--font-ui: "Nunito", "Segoe UI", system-ui, -apple-system, sans-serif;--font-word: "Andika", "Nunito", system-ui, sans-serif;--fs-xs: clamp(14px, 1.2vw + 8px, 16px);--fs-sm: clamp(16px, 1.4vw + 8px, 20px);--fs-md: clamp(20px, 1.6vw + 10px, 26px);--fs-lg: clamp(26px, 2.2vw + 12px, 36px);--fs-xl: clamp(34px, 3.2vw + 14px, 52px);--fs-2xl: clamp(44px, 4.6vw + 16px, 76px);--fs-word: clamp(36px, 4vw + 14px, 64px);--fs-letter: clamp(56px, 7vw + 16px, 120px);--ease: cubic-bezier(.2, .8, .2, 1);--t-fast: .14s;--t-base: .22s;--t-slow: .3s;--safe-t: env(safe-area-inset-top, 0px);--safe-r: env(safe-area-inset-right, 0px);--safe-b: env(safe-area-inset-bottom, 0px);--safe-l: env(safe-area-inset-left, 0px)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;touch-action:manipulation;-webkit-tap-highlight-color:transparent;overscroll-behavior:none}body{font-family:var(--font-ui);font-size:var(--fs-md);line-height:1.25;color:var(--ink);background:var(--canvas);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow:hidden}#app{display:flex;flex-direction:column;overflow:hidden}.screen{flex:1;min-height:0;display:flex;flex-direction:column;padding:calc(var(--s-4) + var(--safe-t)) calc(var(--s-5) + var(--safe-r)) calc(var(--s-4) + var(--safe-b)) calc(var(--s-5) + var(--safe-l));animation:screen-in var(--t-slow) var(--ease) both}.screen--scroll{overflow-y:auto;-webkit-overflow-scrolling:touch}.game,.game *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}button,input,select{font:inherit;color:inherit}button{border:0;background:none;cursor:pointer;touch-action:manipulation}button:disabled{cursor:default}img{display:block;max-width:100%}:focus{outline:none}:focus-visible{outline:4px solid var(--sky);outline-offset:3px;border-radius:var(--r-sm)}.word{font-family:var(--font-word);font-weight:700;letter-spacing:.01em}.letter{font-family:var(--font-word);font-weight:700;line-height:1}.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes screen-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes pop-in{0%{opacity:0;transform:scale(.7)}60%{transform:scale(1.06)}to{opacity:1;transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-10px)}40%{transform:translate(10px)}60%{transform:translate(-6px)}80%{transform:translate(6px)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.toasts{position:fixed;left:calc(var(--s-4) + var(--safe-l));bottom:calc(var(--s-4) + var(--safe-b));z-index:90;display:flex;flex-direction:column;gap:var(--s-2);pointer-events:none;max-width:min(420px,calc(100vw - 2 * var(--s-4)))}.toast{padding:var(--s-3) var(--s-4);border-radius:var(--r-sm);background:var(--ink);color:#fff;font-size:var(--fs-xs);font-weight:700;box-shadow:var(--shadow-md);animation:toast-in var(--t-base) var(--ease) both;border-left:6px solid var(--sky)}.toast--error{border-left-color:var(--error)}.toast--success{border-left-color:var(--success)}@keyframes toast-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.bigbtn{--btn-bg: var(--navy);--btn-fg: #fff;--btn-shadow: var(--navy-deep);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--s-3);min-height:var(--touch);min-width:var(--touch);padding:0 var(--s-6);border-radius:var(--r-md);background:var(--btn-bg);color:var(--btn-fg);font-weight:800;font-size:var(--fs-md);line-height:1;box-shadow:0 5px 0 var(--btn-shadow),var(--shadow-sm);transition:transform var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease),opacity var(--t-fast) var(--ease);white-space:nowrap}.bigbtn:active:not(:disabled){transform:translateY(4px);box-shadow:0 1px 0 var(--btn-shadow),var(--shadow-sm)}.bigbtn:disabled{opacity:.45}.bigbtn__icon{display:inline-flex;flex:none}.bigbtn__label{display:inline-block}.bigbtn--secondary{--btn-bg: var(--card);--btn-fg: var(--ink);--btn-shadow: var(--line)}.bigbtn--ghost{--btn-bg: transparent;--btn-fg: var(--muted);--btn-shadow: transparent;box-shadow:none}.bigbtn--ghost:active:not(:disabled){box-shadow:none;transform:scale(.95)}.bigbtn--success{--btn-bg: var(--success);--btn-shadow: #1f9c62}.bigbtn--danger{--btn-bg: var(--error);--btn-shadow: #d94444}.bigbtn--sun{--btn-bg: var(--sun);--btn-fg: var(--ink);--btn-shadow: #e3b345}.bigbtn--sm{min-height:56px;min-width:56px;padding:0 var(--s-5);font-size:var(--fs-sm);border-radius:var(--r-sm)}.bigbtn--lg{min-height:88px;padding:0 var(--s-7);font-size:var(--fs-lg);border-radius:var(--r-lg)}.bigbtn--xl{min-height:108px;padding:0 var(--s-8);font-size:var(--fs-xl);border-radius:var(--r-lg)}.bigbtn--round{padding:0;width:var(--touch);height:var(--touch);border-radius:50%}.bigbtn--round.bigbtn--sm{width:var(--touch);height:var(--touch)}.bigbtn--round.bigbtn--lg{width:96px;height:96px}.bigbtn--block{display:flex;width:100%}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--s-5);background:#2b2b3a73;animation:overlay-in var(--t-base) var(--ease) both}.overlay__panel{width:100%;max-width:560px;max-height:calc(100% - var(--s-5));overflow-y:auto;background:var(--card);border-radius:var(--r-lg);padding:var(--s-6);box-shadow:var(--shadow-lift);animation:pop-in var(--t-slow) var(--ease) both;display:flex;flex-direction:column;gap:var(--s-5);text-align:center}.overlay__panel--sm{max-width:420px}.overlay__panel--lg{max-width:820px}.overlay__panel--danger{border-top:10px solid var(--error)}.overlay__panel--info{border-top:10px solid var(--sky)}.overlay__title{font-size:var(--fs-lg);font-weight:800;color:var(--ink)}.overlay__text{font-size:var(--fs-sm);color:var(--muted);line-height:1.4}.overlay__actions{display:flex;flex-wrap:wrap;gap:var(--s-4);justify-content:center}.overlay__actions>*{flex:1 1 180px}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.pinpad{display:flex;flex-direction:column;align-items:center;gap:var(--s-5)}.pinpad--error .pinpad__dots{animation:shake var(--t-slow) var(--ease)}.pinpad__dots{display:flex;gap:var(--s-4)}.pinpad__dot{width:20px;height:20px;border-radius:50%;border:3px solid var(--muted);transition:background-color var(--t-fast) var(--ease)}.pinpad__dot--on{background:var(--ink);border-color:var(--ink)}.pinpad__keys{display:grid;grid-template-columns:repeat(3,72px);gap:var(--s-3)}.pinpad__key{width:72px;height:72px;border-radius:var(--r-sm);background:var(--canvas-deep);font-size:var(--fs-lg);font-weight:800;display:grid;place-items:center;transition:transform var(--t-fast) var(--ease)}.pinpad__key:active{transform:scale(.92);background:var(--sun-soft)}.pinpad__key--fn{background:transparent;color:var(--muted);font-size:var(--fs-sm)}.pinpad__cancel{min-height:56px;padding:0 var(--s-5);color:var(--muted);font-weight:700}.pinpad__dots--reveal .pinpad__dot{width:44px;height:56px;border-radius:var(--r-sm);display:grid;place-items:center;font-size:var(--fs-lg);font-weight:800;color:var(--ink)}.pinpad__dots--reveal .pinpad__dot--on{background:var(--sun-soft);border-color:var(--ink)}.picker{display:flex;flex-direction:column;gap:var(--s-5);align-items:stretch}.picker__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--s-4)}.picker__card{display:flex;flex-direction:column;align-items:center;gap:var(--s-3);padding:var(--s-4);min-height:150px;border-radius:var(--r-md);background:var(--canvas);border:4px solid transparent;transition:transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}.picker__card:active{transform:scale(.96)}.picker__card--on{border-color:var(--gold);background:var(--gold-soft)}.picker__card--new{background:transparent;border:4px dashed var(--line)}.picker__card-avatar{width:76px;height:76px;border-radius:50%;display:grid;place-items:center;font-size:40px;line-height:1;box-shadow:var(--shadow-sm)}.picker__card-avatar--new{background:var(--card);color:var(--muted);box-shadow:none}.picker__card-name{font-weight:800;font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.picker__guest{align-self:center;min-height:56px;padding:0 var(--s-5);color:var(--muted);font-weight:700}.picker--create{text-align:left}.picker__label{font-weight:800;font-size:var(--fs-sm);color:var(--muted)}.picker__input{width:100%;min-height:var(--touch);padding:0 var(--s-5);border-radius:var(--r-sm);border:3px solid var(--line);background:var(--canvas);font-size:var(--fs-lg);font-weight:800}.picker__input:focus{border-color:var(--sky)}.picker__avatars{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-3)}.picker__avatar{height:88px;border-radius:var(--r-md);font-size:clamp(32px,5vmin,48px);display:grid;place-items:center;border:5px solid transparent;transition:transform var(--t-fast) var(--ease)}.picker__avatar:active{transform:scale(.94)}.picker__avatar--on{border-color:var(--ink);transform:scale(1.05)}.home{gap:var(--s-5);background:radial-gradient(circle at 12% 18%,var(--gold-soft) 0 120px,transparent 121px),radial-gradient(circle at 88% 82%,var(--navy-soft) 0 160px,transparent 161px),var(--canvas)}.home__bar{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4)}.home__tools{display:flex;gap:var(--s-3)}.chip{display:inline-flex;align-items:center;gap:var(--s-3);min-height:var(--touch);padding:var(--s-2) var(--s-5) var(--s-2) var(--s-2);border-radius:var(--r-pill);background:var(--card);box-shadow:var(--shadow-sm);font-weight:800;font-size:var(--fs-md);transition:transform var(--t-fast) var(--ease)}.chip:active{transform:scale(.97)}.chip__avatar{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;font-size:30px;line-height:1}.chip__name{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home__hero{display:flex;align-items:center;justify-content:center;gap:var(--s-5);text-align:left;padding:var(--s-2) 0}.home__logo{flex:none;width:clamp(88px,14vmin,128px);height:clamp(88px,14vmin,128px);border-radius:50%;box-shadow:var(--shadow-md)}.home__wordmark{display:flex;flex-direction:column;gap:var(--s-1)}.home__brand{font-size:var(--fs-sm);font-weight:900;letter-spacing:.28em;text-transform:uppercase;color:var(--gold-deep)}.home__title{font-size:var(--fs-2xl);font-weight:900;letter-spacing:-.02em;line-height:1;color:var(--navy)}.home__title-accent{color:var(--gold)}.home__sub{margin-top:var(--s-2);color:var(--muted);font-weight:700;font-size:var(--fs-md)}.shelf{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center;gap:var(--s-5);max-width:1400px;width:100%;margin:0 auto}.series{display:flex;flex-direction:column;gap:var(--s-3)}.series__title{text-align:center;font-size:var(--fs-md);font-weight:900;color:var(--ink);letter-spacing:.02em}.books{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--s-4)}.series--phonics .book{flex:0 0 clamp(200px,18vw,240px)}.series--vocab .book{flex:0 0 clamp(320px,32vw,420px)}.series--phonics .book{flex-direction:column;justify-content:center;text-align:center;gap:var(--s-3);min-height:170px}.series--phonics .book__text{align-items:center}.book{--book-color: var(--coral);--book-soft: var(--coral-soft);position:relative;display:flex;align-items:center;gap:var(--s-4);min-height:120px;padding:var(--s-4) var(--s-5);border-radius:var(--r-lg);background:var(--card);box-shadow:0 8px 0 var(--book-soft),var(--shadow-md);text-align:left;transition:transform var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease)}.book:active{transform:translateY(6px);box-shadow:0 2px 0 var(--book-soft),var(--shadow-md)}.book--sun{--book-color: var(--sun);--book-soft: var(--sun-soft)}.book--sky{--book-color: var(--sky);--book-soft: var(--sky-soft)}.book--leaf{--book-color: var(--leaf);--book-soft: var(--leaf-soft)}.book--berry{--book-color: var(--berry);--book-soft: var(--berry-soft)}.book--ink{--book-color: var(--ink);--book-soft: #d9d9e3}.book__badge{background:var(--muted)}.book__badge{flex:0 0 auto;width:clamp(64px,9vmin,88px);height:clamp(64px,9vmin,88px);border-radius:var(--r-md);display:grid;place-items:center;background:var(--book-color);color:#fff;font-size:clamp(28px,4.2vmin,44px);font-weight:900;letter-spacing:-.03em;line-height:1}.book__text{display:flex;flex-direction:column;gap:4px;min-width:0}.book__badge--text{font-size:clamp(18px,2.6vmin,28px);letter-spacing:0}.book__title{font-size:var(--fs-md);font-weight:900;color:var(--ink);line-height:1.1}.book__sub{font-size:var(--fs-xs);font-weight:700;color:var(--muted)}@media (orientation: portrait),(max-width: 900px){.series__title{text-align:left;padding-left:var(--s-2)}.books{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.series--phonics .book,.series--vocab .book{flex:none}.series--phonics .book{flex-direction:row;justify-content:flex-start;text-align:left;min-height:120px}.series--phonics .book__text{align-items:flex-start}.shelf{justify-content:flex-start;overflow-y:auto}.home__hero{flex-direction:column;text-align:center;gap:var(--s-3)}.home__wordmark{align-items:center}.chip__name{max-width:140px}}.setup{gap:var(--s-5)}.setup__bar{display:flex;align-items:center;gap:var(--s-4)}.setup__title{flex:1;text-align:center;font-size:var(--fs-xl);font-weight:900}.setup__spacer{width:56px}.setup__notice{align-self:center;max-width:760px;padding:var(--s-3) var(--s-5);border-radius:var(--r-sm);background:var(--sun-soft);color:#6b4e00;font-size:var(--fs-sm);font-weight:700;text-align:center}.setup__body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--s-6);max-width:1100px;width:100%;margin:0 auto}.setup__group{display:flex;flex-direction:column;gap:var(--s-3)}.setup__label{font-size:var(--fs-sm);font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.setup__title-sub{display:block;font-size:var(--fs-sm);font-weight:700;color:var(--muted)}.games{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-4)}.game-opt{--go-color: var(--coral);--go-soft: var(--coral-soft);position:relative;display:flex;align-items:center;gap:var(--s-3);min-height:96px;padding:var(--s-3) var(--s-4);border-radius:var(--r-md);background:var(--card);border:4px solid transparent;box-shadow:var(--shadow-sm);text-align:left;transition:transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease)}.game-opt:active{transform:scale(.98)}.game-opt--pick{--go-color: var(--sky);--go-soft: var(--sky-soft)}.game-opt--listen{--go-color: var(--leaf);--go-soft: var(--leaf-soft)}.game-opt--letter{--go-color: var(--berry);--go-soft: var(--berry-soft)}.game-opt--on{border-color:var(--go-color);background:var(--go-soft)}.game-opt__icon{flex:0 0 auto;width:64px;height:64px;border-radius:50%;display:grid;place-items:center;background:var(--go-color);color:#fff}.game-opt__icon svg{width:56%;height:56%}.game-opt__text{display:flex;flex-direction:column;gap:2px;min-width:0}.game-opt__title{font-size:var(--fs-md);font-weight:900;color:var(--ink);line-height:1.1}.game-opt__hint{font-size:var(--fs-xs);font-weight:700;color:var(--muted)}.game-opt__badge{position:absolute;top:6px;right:8px;padding:2px 8px;border-radius:var(--r-pill);background:var(--sun-soft);color:#8a6400;font-size:var(--fs-xs);font-weight:800}@media (orientation: portrait),(max-width: 900px){.games{grid-template-columns:repeat(2,minmax(0,1fr))}}.units{display:flex;flex-wrap:wrap;gap:var(--s-3)}.unit{display:inline-flex;align-items:center;gap:var(--s-3);min-height:var(--touch);padding:0 var(--s-5);border-radius:var(--r-pill);background:var(--card);border:4px solid transparent;box-shadow:var(--shadow-sm);font-size:var(--fs-md);font-weight:800;transition:transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease)}.unit:active{transform:scale(.96)}.unit--on{border-color:var(--sky);background:var(--sky-soft)}.unit__num{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--ink);color:#fff;font-size:var(--fs-sm)}.unit--on .unit__num{background:var(--sky)}.unit__title{font-size:var(--fs-md)}.setup__footer{display:flex;align-items:center;justify-content:center;gap:var(--s-6);flex-wrap:wrap}.setup__meta{color:var(--muted);font-weight:700}.dots{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap}.dot{width:16px;height:16px;border-radius:50%;background:var(--line);transition:transform var(--t-base) var(--ease),background-color var(--t-base) var(--ease)}.dots--dense .dot{width:12px;height:12px}.dots--dense{gap:6px}.dot--ok{background:var(--success)}.dot--no{background:var(--error)}.dot--now{background:var(--gold);transform:scale(1.3);animation:pulse 1.2s var(--ease) infinite}.photo{width:100%;display:flex;flex-direction:column;align-items:center;gap:var(--s-3);text-align:center;contain:layout;border-radius:var(--r-lg)}.photo__frame{position:relative;width:100%;aspect-ratio:1 / 1;border-radius:var(--r-lg);background:var(--card);box-shadow:var(--shadow-md);overflow:hidden;border:6px solid var(--card);transition:transform var(--t-base) var(--ease),box-shadow var(--t-base) var(--ease)}.photo--hero{width:100%;max-width:min(520px,100%)}.photo--choice .photo__frame{border-radius:var(--r-md);border-width:5px}.photo__thumb,.photo__img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;border-radius:calc(var(--r-lg) - 6px);transition:opacity var(--t-slow) var(--ease)}.photo__thumb{transform:scale(1.08);opacity:.9}.photo__thumb--hidden,.photo__img{opacity:0}.photo__img--visible{opacity:1}.photo__emoji{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-size:clamp(64px,18vmin,180px);line-height:1;background:var(--canvas-deep)}.photo--choice .photo__emoji{font-size:clamp(44px,10vmin,110px)}.photo__caption{font-size:var(--fs-word);color:var(--ink);animation:pop-in var(--t-slow) var(--ease) both}.photo--tappable{cursor:pointer;padding:0;width:100%}.photo--tappable:active .photo__frame{transform:scale(.96)}.photo__badge{position:absolute;right:6%;bottom:6%;width:22%;min-width:44px;aspect-ratio:1;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:900;font-size:clamp(22px,4vmin,44px);opacity:0;transform:scale(.5);transition:opacity var(--t-base) var(--ease),transform var(--t-base) var(--ease)}.photo__badge--ok{background:var(--success)}.photo__badge--no{background:var(--error)}.photo--correct .photo__frame{border-color:var(--success);box-shadow:0 0 0 6px var(--success-soft),var(--shadow-md);animation:pulse var(--t-slow) var(--ease)}.photo--correct .photo__badge--ok{opacity:1;transform:scale(1)}.photo--wrong .photo__frame{border-color:var(--error);animation:shake var(--t-slow) var(--ease)}.photo--wrong .photo__badge--no{opacity:1;transform:scale(1)}.photo--wrong,.photo--dim{opacity:.45}.photo--wrong .photo__frame{opacity:1}.mic{display:flex;flex-direction:column;align-items:center;gap:var(--s-4)}.mic__btn{position:relative;width:clamp(140px,22vmin,200px);height:clamp(140px,22vmin,200px);border-radius:50%;display:grid;place-items:center}.mic__core{position:relative;z-index:1;width:100%;height:100%;border-radius:50%;display:grid;place-items:center;background:var(--coral);color:#fff;box-shadow:0 8px 0 var(--coral-deep),var(--shadow-md);transition:transform var(--t-fast) var(--ease),background-color var(--t-base) var(--ease),box-shadow var(--t-fast) var(--ease)}.mic__core svg{width:46%;height:46%}.mic__btn:active:not(:disabled) .mic__core{transform:translateY(6px);box-shadow:0 2px 0 var(--coral-deep),var(--shadow-md)}.mic--idle .mic__core{animation:pulse 1.6s var(--ease) infinite}.mic__ring{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:6px solid var(--coral);opacity:0;transform:scale(1)}.mic--listening .mic__ring--1{animation:mic-ring 1.4s var(--ease) infinite}.mic--listening .mic__ring--2{animation:mic-ring 1.4s var(--ease) .7s infinite}.mic--starting .mic__core,.mic--processing .mic__core{background:var(--sky);box-shadow:0 8px #2f7fd6,var(--shadow-md)}.mic--listening .mic__core{background:var(--rose);box-shadow:0 8px #d94f86,var(--shadow-md)}.mic--correct .mic__core{background:var(--success);box-shadow:0 8px #1f9c62,var(--shadow-md)}.mic--wrong .mic__core{background:var(--sun);color:var(--ink);box-shadow:0 8px #e3b345,var(--shadow-md)}.mic--disabled .mic__core{background:var(--line);box-shadow:none}.mic__hint{min-height:1.4em;font-size:var(--fs-md);font-weight:800;color:var(--muted)}@keyframes mic-ring{0%{opacity:.8;transform:scale(1)}to{opacity:0;transform:scale(1.6)}}.play{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:var(--s-6);align-items:center;max-width:1400px;width:100%;margin:0 auto}.play__stimulus{min-height:0;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-4)}.play__stimulus .photo--hero{width:min(100%,calc(100vh - 290px))}.play__response{min-height:0;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-4)}.play__prompt{font-size:var(--fs-lg);font-weight:900;text-align:center;color:var(--ink)}.play__prompt-sub{font-size:var(--fs-md);font-weight:700;color:var(--muted);text-align:center}.wchoice{--wc-bg: var(--card);--wc-shadow: var(--line);display:flex;align-items:stretch;border-radius:var(--r-md);background:var(--wc-bg);box-shadow:0 6px 0 var(--wc-shadow),var(--shadow-sm);overflow:hidden;min-height:var(--touch-lg);transition:transform var(--t-fast) var(--ease),opacity var(--t-base) var(--ease),background-color var(--t-base) var(--ease)}.wchoice__main{flex:1;min-width:0;display:grid;place-items:center;padding:var(--s-3) var(--s-3);font-size:clamp(28px,5.6vw - 26px,52px);line-height:1.1;color:var(--ink);overflow:hidden;overflow-wrap:anywhere}.wchoice__speak{flex:none;width:var(--touch);display:grid;place-items:center;color:var(--sky);border-left:3px solid var(--canvas);transition:transform var(--t-fast) var(--ease)}.wchoice__speak:active{transform:scale(.9)}.wchoice--idle:active{transform:translateY(4px)}.wchoice--correct{--wc-bg: var(--success);--wc-shadow: #1f9c62;animation:pulse var(--t-slow) var(--ease)}.wchoice--correct .wchoice__main,.wchoice--correct .wchoice__speak{color:#fff}.wchoice--wrong{--wc-bg: var(--error);--wc-shadow: #d94444;animation:shake var(--t-slow) var(--ease);opacity:.6}.wchoice--wrong .wchoice__main,.wchoice--wrong .wchoice__speak{color:#fff}.wchoice--dim{opacity:.4}.tile{--tile: var(--tile-red);--tile-shadow: rgba(0, 0, 0, .18);display:grid;place-items:center;border-radius:var(--r-lg);background:var(--tile);color:#fff;font-size:var(--fs-letter);box-shadow:0 8px 0 var(--tile-shadow),var(--shadow-md);transition:transform var(--t-fast) var(--ease),opacity var(--t-base) var(--ease);text-shadow:0 3px 0 rgba(0,0,0,.12)}.tile--red{--tile: var(--tile-red)}.tile--blue{--tile: var(--tile-blue)}.tile--green{--tile: var(--tile-green)}.tile--yellow{--tile: var(--tile-yellow);color:var(--ink);text-shadow:none}.tile--idle:active{transform:translateY(6px);box-shadow:0 2px 0 var(--tile-shadow),var(--shadow-md)}.tile--correct{outline:8px solid var(--success);outline-offset:4px;animation:pulse var(--t-slow) var(--ease)}.tile--wrong{animation:shake var(--t-slow) var(--ease);opacity:.45}.tile--dim{opacity:.35}.bigspeaker{width:clamp(150px,26vmin,240px);height:clamp(150px,26vmin,240px);border-radius:50%;display:grid;place-items:center;background:var(--sun);color:var(--ink);box-shadow:0 10px #e3b345,var(--shadow-md);transition:transform var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease)}.bigspeaker svg{width:50%;height:50%}.bigspeaker:active{transform:translateY(8px);box-shadow:0 2px #e3b345,var(--shadow-md)}.bigspeaker--talking{animation:pulse .9s var(--ease) infinite}.bubble{min-height:72px;min-width:220px;max-width:100%;padding:var(--s-3) var(--s-5);border-radius:var(--r-md);background:var(--card);box-shadow:var(--shadow-sm);font-size:var(--fs-md);font-weight:700;color:var(--muted);text-align:center;display:grid;place-items:center;position:relative}.bubble:after{content:"";position:absolute;left:50%;bottom:-12px;width:24px;height:24px;background:var(--card);transform:translate(-50%) rotate(45deg);border-radius:4px}.bubble--heard{color:var(--ink)}.bubble--ok{background:var(--success-soft);color:#157a4a}.bubble--ok:after{background:var(--success-soft)}.bubble--retry{background:var(--sun-soft);color:#6b4e00}.bubble--retry:after{background:var(--sun-soft)}.teacher-tools{position:absolute;right:calc(var(--s-4) + var(--safe-r));bottom:calc(var(--s-4) + var(--safe-b));display:flex;gap:var(--s-2);opacity:.55}.teacher-tools:hover,.teacher-tools:focus-within{opacity:1}.say-word{display:inline-flex;align-items:baseline;gap:var(--s-3);padding:var(--s-2) var(--s-5);border-radius:var(--r-pill);background:var(--sun-soft);color:var(--ink);font-size:var(--fs-word);animation:pop-in var(--t-slow) var(--ease) both}.say-word small{font-family:var(--font-ui);font-size:var(--fs-sm);font-weight:800;color:var(--muted)}@media (orientation: portrait){.play{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) minmax(0,1fr);gap:var(--s-4)}.play__stimulus .photo--hero{width:min(100%,40vh)}.wchoice__main{font-size:clamp(28px,4.2vw + 8px,52px)}}.choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:var(--s-4);width:100%;height:100%;min-height:0;min-width:0}.choices>*{min-width:0;min-height:var(--touch)}.choices--tiles{aspect-ratio:1 / 1;max-height:100%;max-width:100%;margin:auto}.game{gap:var(--s-4)}.game__bar{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);flex:none}.game__stars{display:inline-flex;align-items:center;gap:var(--s-2);min-height:56px;padding:0 var(--s-4) 0 var(--s-3);border-radius:var(--r-pill);background:var(--card);box-shadow:var(--shadow-sm);color:#e0a800;font-weight:900;font-size:var(--fs-md)}.game__stars span{color:var(--ink);min-width:1.2em;text-align:center}.stars{display:flex;align-items:flex-end;justify-content:center;gap:var(--s-3)}.stars__star{display:inline-flex;color:var(--line);transition:color var(--t-base) var(--ease)}.stars__star svg{width:clamp(72px,12vmin,128px);height:auto;stroke-width:1.8}.stars__star--2{margin-bottom:clamp(16px,4vmin,40px)}.stars__star--lit{color:var(--sun);animation:star-pop .42s var(--ease) both}@keyframes star-pop{0%{transform:scale(.3) rotate(-25deg);opacity:0}60%{transform:scale(1.25) rotate(6deg);opacity:1}to{transform:scale(1) rotate(0);opacity:1}}.result{gap:var(--s-6);align-items:center;justify-content:center;background:radial-gradient(circle at 50% -10%,var(--gold-soft) 0 260px,transparent 261px),var(--canvas)}.result__hero{display:flex;flex-direction:column;align-items:center;gap:var(--s-3);flex:none}.result__title{font-size:var(--fs-2xl);font-weight:900;letter-spacing:-.02em;color:var(--navy);animation:pop-in var(--t-slow) var(--ease) both}.result__score{display:inline-flex;align-items:baseline;gap:var(--s-2);padding:var(--s-2) var(--s-6);border-radius:var(--r-pill);background:var(--card);box-shadow:var(--shadow-sm);font-weight:900}.result__score-num{font-size:var(--fs-xl)}.result__score-sep,.result__score-total{font-size:var(--fs-lg);color:var(--muted)}.missed{flex:none;min-height:0;width:100%;max-width:1200px;display:flex;flex-direction:column;gap:var(--s-3)}.missed__title{font-size:var(--fs-md);font-weight:800;color:var(--muted);text-align:center}.missed__row{display:flex;gap:var(--s-4);overflow-x:auto;padding:var(--s-2) var(--s-2) var(--s-4);justify-content:safe center;-webkit-overflow-scrolling:touch}.missed__item{flex:none;width:clamp(120px,16vmin,170px);display:flex;flex-direction:column;align-items:center;gap:var(--s-2);transition:transform var(--t-fast) var(--ease)}.missed__item:active{transform:scale(.95)}.missed__word{font-size:var(--fs-md)}.result__perfect{flex:none;display:grid;place-items:center;color:var(--muted);font-weight:800;font-size:var(--fs-md)}.result__actions{display:flex;gap:var(--s-5);flex-wrap:wrap;justify-content:center;flex:none}.teacher{gap:var(--s-4);font-size:var(--fs-sm)}.teacher__bar{display:flex;align-items:center;gap:var(--s-4);flex-wrap:wrap}.teacher__title{font-size:var(--fs-lg);font-weight:900;margin-right:auto}.teacher__tools{display:flex;gap:var(--s-2);flex-wrap:wrap}.teacher__body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:var(--s-5)}.roster{min-height:0;display:flex;flex-direction:column;gap:var(--s-3);background:var(--card);border-radius:var(--r-md);padding:var(--s-4);box-shadow:var(--shadow-sm)}.roster__head{display:flex;align-items:center;justify-content:space-between;font-weight:800;color:var(--muted)}.roster__list{list-style:none;overflow-y:auto;display:flex;flex-direction:column;gap:var(--s-2)}.roster__item{width:100%;display:flex;align-items:center;gap:var(--s-3);min-height:64px;padding:var(--s-2) var(--s-3);border-radius:var(--r-sm);text-align:left;border:3px solid transparent}.roster__item--on{background:var(--navy-soft);border-color:var(--navy)}.roster__avatar{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;font-size:24px}.roster__text{display:flex;flex-direction:column;min-width:0}.roster__name{font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.roster__meta{font-size:var(--fs-xs);color:var(--muted)}.roster__empty,.detail__empty,.stats__empty{color:var(--muted);padding:var(--s-4)}.detail{min-height:0;overflow-y:auto;background:var(--card);border-radius:var(--r-md);padding:var(--s-5);box-shadow:var(--shadow-sm)}.stats{display:flex;flex-direction:column;gap:var(--s-4)}.stats__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);flex-wrap:wrap}.stats__name{font-size:var(--fs-lg);font-weight:900}.stats__actions{display:flex;gap:var(--s-2)}.stats__sub{font-size:var(--fs-sm);font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-top:var(--s-2)}.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-3)}.kpi{display:flex;flex-direction:column;align-items:center;padding:var(--s-4);border-radius:var(--r-sm);background:var(--canvas)}.kpi__num{font-size:var(--fs-lg);font-weight:900}.kpi__label{font-size:var(--fs-xs);color:var(--muted);font-weight:700}.table{width:100%;border-collapse:collapse;font-size:var(--fs-xs)}.table th,.table td{text-align:left;padding:10px var(--s-3);border-bottom:1px solid var(--line)}.table th{color:var(--muted);font-weight:800}.table__word{font-size:var(--fs-md)}.table__row--bad .pct{color:var(--error)}.pct{display:inline-block;min-width:56px;font-weight:800;padding:2px 8px;border-radius:6px;background:linear-gradient(90deg,var(--leaf-soft) var(--pct),transparent var(--pct))}.teacher__form{display:flex;flex-direction:column;gap:var(--s-4)}.teacher__input{width:100%;min-height:64px;padding:0 var(--s-4);border-radius:var(--r-sm);border:3px solid var(--line);background:var(--canvas);font-size:var(--fs-md);font-weight:800}.teacher__input:focus{border-color:var(--sky)}.teacher__avatars{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-2)}.teacher__avatar{aspect-ratio:1;min-height:56px;border-radius:var(--r-sm);font-size:30px;display:grid;place-items:center;border:4px solid transparent}.teacher__avatar--on{border-color:var(--ink)}@media (orientation: portrait),(max-width: 820px){.teacher__body{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.roster__list{max-height:220px}}.teacher__pin-msg{text-align:center;color:var(--error);font-weight:700;margin-bottom:var(--s-4)}.settings{gap:var(--s-5)}.settings__bar{display:flex;align-items:center;gap:var(--s-4)}.settings__title{flex:1;text-align:center;font-size:var(--fs-xl);font-weight:900}.settings__spacer{width:56px}.settings__body{width:100%;max-width:820px;margin:0 auto;display:flex;flex-direction:column;gap:var(--s-5);padding-bottom:var(--s-6)}.setting{display:flex;flex-direction:column;gap:var(--s-3)}.setting--card{padding:var(--s-5);border-radius:var(--r-md);background:var(--sky-soft)}.setting__label{font-size:var(--fs-sm);font-weight:800;color:var(--muted)}.setting__row{display:flex;gap:var(--s-3);flex-wrap:wrap}.setting__note{font-size:var(--fs-sm);font-weight:700;color:var(--ink);line-height:1.4}.setting__note--warn{color:#8a6400}.seg{display:flex;gap:var(--s-2);padding:6px;border-radius:var(--r-md);background:var(--card);box-shadow:var(--shadow-sm)}.seg__opt{flex:1;min-height:64px;border-radius:calc(var(--r-md) - 6px);font-weight:800;font-size:var(--fs-md);color:var(--muted);transition:background-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}.seg__opt:active{transform:scale(.97)}.seg--word .seg__opt{font-family:var(--font-word)}.seg__opt--on{background:var(--navy);color:#fff}.settings__version{text-align:center;color:var(--muted);font-size:var(--fs-xs);font-weight:700}
