:root{--blue:#3b82f6;--blue-dark:#1d4ed8;--blue-soft:#dbeafe;--yellow:#fbbf24;--yellow-soft:#fef3c7;--green:#22c55e;--green-soft:#dcfce7;--orange:#fb923c;--pink:#f472b6;--purple:#a78bfa;--teal:#2dd4bf;--red:#ef4444;--text:#1e293b;--muted:#64748b;--bg:#f0f9ff;--card:#fff;--shadow:0 4px 14px #3b82f626;--radius:18px;color:var(--text);background:var(--bg);font-family:PingFang TC,Noto Sans TC,Microsoft JhengHei,Hiragino Sans CNS,system-ui,sans-serif;line-height:1.5}html{font-size:16px}@media (width>=900px){html{font-size:19px}}html.app-learn{font-size:calc(clamp(16px, .45vw + 14.5px, 22px) * var(--learn-ui-scale,1))}@media (width>=900px){html.app-learn{font-size:calc(clamp(18px, .55vw + 13px, 26px) * var(--learn-ui-scale,1))}}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:linear-gradient(#e0f2fe 0%,#fefce8 50%,#f0f9ff 100%);min-height:100dvh}button{cursor:pointer;border:none;font-family:inherit}button:disabled{opacity:.45;cursor:not-allowed}h1,h2,p{margin:0}.app-shell{max-width:720px;min-height:100dvh;margin:0 auto;padding:12px 14px 48px;position:relative}.app-version{right:max(8px, env(safe-area-inset-right,0px));bottom:max(8px, calc(env(safe-area-inset-bottom,0px) + 6px));z-index:40;pointer-events:none;-webkit-user-select:none;user-select:none;letter-spacing:.02em;color:#475569;opacity:.92;background:#ffffffd1;border-radius:8px;padding:3px 8px;font-size:12px;line-height:1.2;position:fixed;box-shadow:0 1px 4px #0f172a14}@media (width<=520px){.app-version{bottom:max(14px, calc(env(safe-area-inset-bottom,0px) + 10px));right:max(10px, env(safe-area-inset-right,0px));opacity:.95;font-size:12px}}.screen{flex-direction:column;gap:14px;animation:.25s fadeIn;display:flex}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.en-soft{color:var(--muted);font-size:.85rem;font-weight:400}.btn{box-shadow:var(--shadow);border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:12px 18px;font-size:1.05rem;font-weight:700;transition:transform .12s,box-shadow .12s;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn-en{opacity:.85;font-size:.75rem;font-weight:500}.btn-primary{background:linear-gradient(135deg, var(--blue), var(--blue-dark));color:#fff}.btn-secondary{color:var(--blue-dark);border:2px solid var(--blue-soft);background:#fff}.btn-ghost{box-shadow:none;color:var(--blue-dark);background:0 0;padding:8px 10px;font-size:.95rem}.btn-warn{color:#b91c1c;background:#fee2e2;border:2px solid #fecaca}.btn-xl{width:100%;max-width:420px;padding:18px 28px;font-size:1.25rem}.btn-lg{padding:14px 22px;font-size:1.1rem}.btn-chip{border:2px solid var(--blue-soft);box-shadow:none;background:#fff;border-radius:999px;padding:8px 12px;font-size:.9rem}.btn-speak-big{color:#fff;background:linear-gradient(135deg,#60a5fa,#2563eb);border-radius:22px;width:100%;max-width:320px;padding:22px 28px;font-size:1.3rem}.topbar{justify-content:space-between;align-items:center;gap:8px;padding:4px 0 8px;display:flex}.topbar-center{text-align:center;flex:1}.topbar-center h1{color:var(--blue-dark);font-size:1.2rem}.stars-pill{background:var(--yellow-soft);border:2px solid var(--yellow);border-radius:999px;padding:6px 12px;font-size:.9rem;font-weight:800}.home-hero{text-align:center;flex-direction:column;align-items:center;gap:16px;padding:28px 8px 16px;display:flex}.home-badge{background:var(--yellow);color:#78350f;border-radius:999px;padding:6px 14px;font-size:.95rem;font-weight:800}.home-title{color:var(--blue-dark);font-size:2rem}.home-sub{color:var(--muted);margin-top:-8px}.home-lesson-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);border:3px solid var(--blue-soft);width:100%;padding:22px 18px}.home-lesson-card h2{color:var(--text);margin:8px 0 4px;font-size:1.35rem}.emoji-big{font-size:3rem;display:block}.home-hint{color:var(--muted);margin-top:8px;font-size:.85rem}.hub-intro{text-align:center;color:var(--blue-dark);font-weight:600}.island-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.island-btn{box-shadow:var(--shadow);background:#fff;border:3px solid #0000;border-radius:20px;flex-direction:column;align-items:center;gap:4px;min-height:120px;padding:18px 10px;transition:transform .12s;display:flex;position:relative}.island-btn:active{transform:scale(.96)}.island-btn.done{border-color:var(--green)}.island-btn.locked{opacity:.55;filter:grayscale(.35);cursor:not-allowed;border-color:#bbb}.island-btn.locked:active{transform:none}.island-lock-badge{pointer-events:none;flex-direction:column;align-items:flex-start;gap:2px;font-size:.85rem;display:flex;position:absolute;top:6px;left:8px;right:8px}.island-lock-cov{color:#555;background:#ffffffd9;border-radius:6px;padding:1px 4px;font-size:.65rem;font-weight:700;line-height:1.2}.hub-lock-msg{margin:8px 16px 4px}.island-emoji{font-size:2rem}.island-title{color:var(--text);text-align:center;font-size:1rem;font-weight:800}.island-en{color:var(--muted);font-size:.75rem}.island-done-badge{font-size:.85rem;position:absolute;top:8px;right:10px}.island-star-pct{color:#c9a227;align-items:center;gap:2px;font-weight:700;display:inline-flex}.island-star-pct .island-pct{color:var(--muted);font-size:.7rem;font-weight:800}.island-badge{background:var(--red);color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;height:22px;font-size:.75rem;font-weight:800;display:flex;position:absolute;top:8px;right:10px}.island-blue{background:linear-gradient(160deg,#eff6ff,#dbeafe)}.island-yellow{background:linear-gradient(160deg,#fffbeb,#fef3c7)}.island-green{background:linear-gradient(160deg,#f0fdf4,#dcfce7)}.island-purple{background:linear-gradient(160deg,#f5f3ff,#ede9fe)}.island-orange{background:linear-gradient(160deg,#fff7ed,#ffedd5)}.island-pink{background:linear-gradient(160deg,#fdf2f8,#fce7f3)}.island-teal{background:linear-gradient(160deg,#f0fdfa,#ccfbf1)}.island-gray{background:linear-gradient(160deg,#f8fafc,#e2e8f0)}.hub-title-banner{box-shadow:var(--shadow);text-align:center;background:linear-gradient(160deg,#fff7ed,#ffedd5 40%,#fef3c7);border:3px solid #fdba74;border-radius:18px;padding:14px 16px 12px}.hub-title-banner-label{color:#c2410c;background:#ffffffb3;border-radius:999px;margin-bottom:8px;padding:2px 10px;font-size:.75rem;font-weight:700;display:inline-block}.hub-title-banner-row{justify-content:center;align-items:center;gap:8px;margin-top:4px;display:flex}.hub-title-speakable{cursor:pointer;color:var(--text);background:#ffffffd9;border:none;border-radius:14px;align-items:center;gap:10px;padding:10px 16px;font-size:1.45rem;font-weight:800;line-height:1.4;transition:transform .12s,box-shadow .12s;display:inline-flex;box-shadow:0 1px 4px #0000000f}.hub-title-speakable:active{transform:scale(.97)}.hub-author-speakable{color:#9a3412;font-size:1.15rem;font-weight:700}.hub-author-row{flex-wrap:wrap;margin-top:8px}.hub-author-soft-label{color:#c2410c;opacity:.85;font-size:.8rem;font-weight:700}.hub-title-speaker{flex-shrink:0;font-size:1.25rem}.hub-title-hint{color:#9a3412;opacity:.9;margin-top:8px;font-size:.8rem;font-weight:600}.pr-title-card{box-shadow:var(--shadow);background:linear-gradient(160deg,#fff7ed,#ffedd5);border:3px solid #fdba74;border-radius:16px;flex-direction:column;gap:8px;padding:12px;display:flex}.pr-title-row{text-align:left;cursor:pointer;background:#ffffffd9;border:2px solid #0000;border-radius:12px;align-items:center;gap:10px;width:100%;padding:10px 12px;transition:border-color .12s,box-shadow .12s;display:flex}.pr-title-row.active{border-color:#f97316;box-shadow:0 0 0 3px #f9731640}.pr-title-soft-label{color:#c2410c;background:#ffedd5;border-radius:999px;flex-shrink:0;padding:4px 8px;font-size:.75rem;font-weight:800}.pr-title-body{flex:1}.pr-title-zh{color:var(--text);font-size:1.25rem;font-weight:800;line-height:1.5}.read-soft-badge{color:#c2410c;background:#ffedd5;border-radius:999px;align-self:flex-start;margin-bottom:6px;padding:3px 10px;font-size:.75rem;font-weight:800;display:inline-block}.read-summary-soft{color:var(--muted);font-weight:600}.controls-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:flex}.controls-row.wrap{justify-content:center}.rate-group{gap:4px;display:flex}.sentence-list{flex-direction:column;gap:10px;display:flex}.sentence-card{text-align:left;border:3px solid var(--blue-soft);box-shadow:var(--shadow);background:#fff;border-radius:16px;align-items:flex-start;gap:10px;width:100%;padding:14px;display:flex}.sentence-card.active{border-color:var(--blue);background:#eff6ff;box-shadow:0 0 0 3px #3b82f640}.sent-num{background:var(--blue);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:1.75rem;height:1.75rem;font-size:.9rem;font-weight:800;display:flex}.sent-body{flex:1}.sent-zh{font-size:1.1rem;font-weight:600;line-height:1.65}.sent-play-zh{flex:1;align-items:flex-start;gap:8px;width:100%;display:flex}.sent-num-btn,.sent-speaker-btn{cursor:pointer;background:0 0;border:none;padding:0}.sent-zh-chars{line-height:2.1}.tap-char{text-align:center;cursor:pointer;-webkit-user-select:text;user-select:text;border-radius:8px;min-width:1.35em;margin:.08em .04em;padding:.12em .08em;display:inline-block}.tap-char:hover,.tap-char:active{background:#fde68a}.tap-punct{padding:.12em 0;display:inline-block}.sent-en{color:var(--muted);margin-top:6px;font-size:.88rem;line-height:1.45}.sent-speaker{flex-shrink:0;font-size:1.2rem}.nav-row{flex-wrap:wrap;justify-content:center;gap:8px;padding-top:4px;display:flex}.alert-warn{background:var(--yellow-soft);border:2px solid var(--yellow);text-align:center;border-radius:12px;padding:10px 14px;font-size:.9rem}.vocab-card-wrap{perspective:800px;padding:8px 0}.vocab-card{border:4px solid var(--blue);width:100%;min-height:280px;box-shadow:var(--shadow);background:linear-gradient(145deg,#fff,#eff6ff);border-radius:24px;justify-content:center;align-items:center;padding:24px;display:flex;position:relative}.vocab-zh{color:var(--blue-dark);font-size:clamp(2.2rem,5vw,3.1rem);font-weight:900}.vocab-kind-badge{letter-spacing:.04em;color:#8a4b12;background:#ffe8c8;border-radius:6px;width:fit-content;margin:0 auto 10px;padding:2px 10px;font-size:.75rem;font-weight:700;display:block}.vocab-pinyin{color:var(--muted);margin-top:8px;font-size:1.1rem}.vocab-tap-hint{color:var(--muted);margin-top:16px;font-size:.8rem}.vocab-en-big{color:#0f766e;font-size:1.8rem;font-weight:800}.vocab-zh-small{color:var(--blue-dark);margin-top:10px;font-size:1.3rem;font-weight:700}.vocab-card{cursor:pointer;text-align:center;min-height:280px}.vocab-en-line{cursor:pointer;width:100%;font:inherit;color:inherit;background:#f0fdfa;border:2px solid #99f6e4;border-radius:14px;flex-direction:column;align-items:center;gap:4px;margin:10px 0 0;padding:12px 14px;display:flex}.vocab-en-front{color:#0f766e;font-size:1.35rem;font-weight:800}.vocab-en-line.vocab-en-big{color:#0f766e;font-size:1.8rem;font-weight:800}.vocab-en-missing{color:var(--muted,#6b7280);text-align:center;margin:.35rem 0 .6rem;font-size:.95rem}.vocab-en-speak-hint{color:#0d9488;font-size:.85rem;font-weight:600}.vocab-gloss{text-align:left;background:#fff7ed;border:2px solid #fdba74;border-radius:14px;margin-top:14px;padding:12px 14px}.vocab-gloss-label{color:#c2410c;margin:0 0 6px;font-size:.9rem;font-weight:800}.vocab-gloss-zh{color:#1e293b;margin:0;font-size:1.25rem;font-weight:700;line-height:1.45}.vocab-gloss-en{color:#64748b;margin:6px 0 0;font-size:1.05rem}.vocab-example{text-align:left;background:#eff6ff;border:2px solid #93c5fd;border-radius:14px;margin-top:14px;padding:14px}.vocab-example-label{color:#1d4ed8;margin:0 0 8px;font-size:.9rem;font-weight:800}.vocab-example-jyutping{color:#0369a1;margin:6px 0 0;font-size:1rem;font-weight:600}.vocab-example-en{color:#475569;margin:8px 0 0;font-size:1.15rem;line-height:1.4}.vocab-example-speak{width:100%;min-height:48px;margin-top:12px;font-size:1.05rem!important}@media (width<=520px){.vocab-example-zh{font-size:1.7rem}.vocab-en-line.vocab-en-big{font-size:1.65rem}.vocab-gloss-zh{font-size:1.35rem}}.vocab-back,.vocab-front{width:100%}.vocab-card .vocab-back,.vocab-card.flipped .vocab-front{display:none}.vocab-card.flipped .vocab-back{display:block}.dot-row{flex-wrap:wrap;justify-content:center;gap:6px;padding:8px 0;display:flex}.dot{width:12px;height:12px;box-shadow:none;background:#cbd5e1;border-radius:50%;padding:0}.dot.active{background:var(--blue);transform:scale(1.3)}.dot.weak{background:var(--orange)}.hint{text-align:center;color:var(--muted);font-size:.95rem}.hint.center{text-align:center}.listen-prompt{flex-direction:column;align-items:center;gap:12px;padding:16px 0;display:flex}.choice-grid{grid-template-columns:1fr 1fr;gap:12px;width:100%;max-width:min(100%,880px);margin-inline:auto;display:grid}.choice-btn{border:3px solid var(--blue-soft);color:var(--text);box-shadow:var(--shadow);background:#fff;border-radius:16px;min-height:72px;padding:20px 12px;font-size:1.35rem;font-weight:800}.choice-btn.correct{border-color:var(--green);background:var(--green-soft)}.choice-btn.dim{opacity:.5}.feedback{text-align:center;border-radius:12px;padding:10px;font-size:1.15rem;font-weight:800}.feedback.ok{background:var(--green-soft);color:#166534}.feedback.bad{color:#7f1d1d;background:#fecaca;border:3px solid #ef4444;padding:14px 16px;font-size:1.45rem;animation:2s ease-in-out feedback-bad-pulse;box-shadow:0 0 0 4px #ef444440}@keyframes feedback-bad-pulse{0%,to{transform:scale(1);box-shadow:0 0 0 4px #ef444433}50%{transform:scale(1.03);box-shadow:0 0 0 8px #ef444459}}.game-result{text-align:center;align-items:center;gap:16px;padding-top:48px}.game-result h1{color:var(--blue-dark);font-size:1.6rem}.big-score{color:var(--blue);font-size:2.5rem;font-weight:900}.stars-display{font-size:2.2rem}.match-board{grid-template-columns:1fr 1fr;gap:12px;display:grid}.match-col{flex-direction:column;gap:8px;display:flex}.match-card{border:3px solid var(--purple);min-height:56px;box-shadow:var(--shadow);background:#fff;border-radius:14px;padding:14px 10px;font-size:1.15rem;font-weight:800}.match-card.en{border-color:var(--teal);font-size:.95rem;font-weight:700}.match-card.picked{background:var(--yellow-soft);border-color:var(--yellow)}.match-card.matched{background:var(--green-soft);border-color:var(--green);opacity:.7}.match-card.wrong{border-color:var(--red);background:#fee2e2;animation:.35s shake}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}.fill-prompt{border:3px solid var(--orange);box-shadow:var(--shadow);background:#fff;border-radius:18px;padding:22px 16px}.fill-sentence{text-align:center;font-size:1.25rem;font-weight:700;line-height:1.7}.wrong-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.wrong-item{box-shadow:var(--shadow);background:#fff;border:2px solid #fecaca;border-radius:14px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:14px;display:flex}.wrong-item>:first-child{flex:12rem;min-width:0}.wrong-type{color:#991b1b;background:#fee2e2;border-radius:999px;margin-bottom:4px;padding:2px 8px;font-size:.75rem;font-weight:800;display:inline-block}.wrong-zh{font-size:1.3rem;font-weight:800}.wrong-prompt,.wrong-correct{color:var(--muted);margin-top:2px;font-size:.85rem}.empty-state{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:48px 16px;display:flex}.tip-card{box-shadow:var(--shadow);border:2px solid var(--blue-soft);background:#fff;border-radius:16px;padding:16px}.tip-card h2{color:var(--blue-dark);margin-bottom:10px;font-size:1.1rem}.tip-card p,.tip-card li{margin-bottom:6px;line-height:1.6}.think-list{flex-direction:column;gap:12px;padding-left:1.2rem;display:flex}.poly-row{align-items:flex-start;gap:12px;margin-bottom:10px;display:flex}.poly-char{color:var(--blue);min-width:1.5em;font-size:1.8rem;font-weight:900}.poly-row ul{margin:0;padding-left:1rem}.parent-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.weak-row{background:var(--yellow-soft);border-radius:10px;justify-content:space-between;align-items:center;padding:8px 12px;font-weight:700;display:flex}@media (width>=600px){.app-shell{max-width:820px;padding:20px 24px 40px}.island-grid{grid-template-columns:1fr 1fr}.vocab-zh{font-size:clamp(2.4rem,4.5vw,3.15rem)}.home-title{font-size:2.55rem}.home-lesson-card h2{font-size:1.55rem}.home-library-open{padding:12px 14px;font-size:1.2rem;font-weight:800;line-height:1.45}.btn-xl{font-size:1.4rem}.btn-lg{font-size:1.2rem}.choice-btn{min-height:84px;font-size:1.55rem}.tile-chip{min-width:56px;min-height:56px;font-size:1.35rem}.tile-char{min-width:60px;font-size:1.55rem}.sent-zh{font-size:1.35rem}.fill-sentence{font-size:1.45rem}.match-card{font-size:1.35rem}.cw-cell,.cw-char{font-size:clamp(1rem,2.2vw,1.25rem)}.vocab-example-zh{font-size:1.75rem}.vocab-gloss-zh{font-size:1.4rem}}@media (width>=1100px){.app-shell{max-width:900px}.home-title{font-size:2.75rem}.home-lesson-card h2,.home-crossword-card h2{font-size:1.7rem}.home-library-open{font-size:1.35rem}.vocab-zh{font-size:clamp(2.5rem,4vw,3.2rem)}.choice-btn,.tile-char{font-size:1.7rem}.sent-zh{font-size:1.5rem}.cw-cell,.cw-char{font-size:clamp(1.05rem,2vw,1.3rem)}}.home-entries{flex-direction:column;gap:14px;width:100%;display:flex}.home-lesson-card{flex-direction:column;align-items:center;gap:8px;display:flex}.home-lesson-card-alt{background:linear-gradient(#faf5ff,#fff);border-color:#c4b5fd}.hub-objective{text-align:center;background:var(--yellow-soft);border:2px solid var(--yellow);color:#78350f;border-radius:12px;padding:8px 12px;font-weight:700}.composer-intro{border:2px solid var(--blue-soft);color:var(--blue-dark);background:#fff;border-radius:14px;padding:12px 14px;font-weight:600;line-height:1.5}.field{text-align:left;flex-direction:column;gap:6px;width:100%;display:flex}.field-label{color:var(--blue-dark);font-size:1rem;font-weight:800}.field-label .req{color:#dc2626;margin-left:6px;font-size:.9rem;font-style:normal;font-weight:700}.field-input,.field-textarea{border:3px solid var(--blue-soft);width:100%;box-shadow:var(--shadow);resize:vertical;background:#fff;border-radius:14px;padding:14px 16px;font-family:inherit;font-size:1.1rem;line-height:1.55}.field-input:focus,.field-textarea:focus{border-color:var(--blue);outline:none;box-shadow:0 0 0 3px #2563eb33}.field-textarea-lg{min-height:220px;font-size:1.15rem}.composer .btn-xl,.composer .btn-lg{width:100%;max-width:none}.alert-info{color:#1b5e20;background:#e8f5e9;border:2px solid #81c784;border-radius:14px;margin:.5rem 0 1rem;padding:.75rem 1rem;font-size:.95rem}.field-check{align-items:center;gap:.6rem;margin-bottom:.75rem;display:flex}.field-check input[type=checkbox]{width:1.25rem;height:1.25rem}.parent-ai-hint{margin-bottom:.75rem;line-height:1.45}.parent-ai-actions{flex-wrap:wrap;gap:.75rem;margin-top:.5rem;display:flex}.lesson-library-filters{text-align:left;flex-wrap:wrap;justify-content:flex-start;align-items:flex-end;gap:8px;width:100%;margin:.75rem 0 .5rem;display:flex}.lesson-library-filters .lesson-filter-field{flex:120px;min-width:110px;max-width:100%;margin:0}.lesson-library-filters .lesson-filter-search{flex:2 180px}.lesson-library-filters .field-label{text-align:left;margin-bottom:.25rem;font-size:.85rem;display:block}.lesson-library-filters .field-input{width:100%;min-height:2.5rem;font-size:1rem}.home-library-list{text-align:left;flex-direction:column;align-items:stretch;gap:.5rem;width:100%;margin:1rem 0 0;padding:0;list-style:none;display:flex}.home-library-item{text-align:left;justify-content:flex-start;align-items:stretch;gap:.5rem;width:100%;display:flex}.home-library-open{text-align:left;white-space:normal;flex-direction:column;flex:1;justify-content:flex-start;align-items:stretch;width:100%;display:flex}.home-profile-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;width:100%;margin-bottom:8px;display:flex}.profile-chip{border:2px solid var(--blue-soft);background:#fff;border-radius:999px;align-items:center;gap:8px;padding:8px 12px;font-weight:700;display:inline-flex}.avatar-sm{object-fit:cover;border-radius:50%;width:36px;height:36px}.avatar-color{color:#fff;justify-content:center;align-items:center;font-weight:800;display:inline-flex}.avatar-preview{object-fit:cover;border-radius:50%;width:96px;height:96px;margin:8px auto;display:block}.lesson-cover,.hub-cover,.ocr-preview{object-fit:cover;border-radius:14px;width:100%;max-height:160px;margin:8px 0}.library-thumb{object-fit:cover;border-radius:8px;width:40px;height:40px;margin-right:8px}.mode-tabs{flex-wrap:wrap;gap:8px;display:flex}.auth-faces{flex-wrap:wrap;gap:10px;margin:8px 0 12px;display:flex}.auth-face{cursor:pointer;background:0 0;border:2px solid #0000;border-radius:12px;flex-direction:column;align-items:center;gap:4px;min-width:72px;padding:8px;display:flex}.auth-face.active{border-color:var(--blue);background:#eff6ff}.btn-chip.active{background:var(--blue);color:#fff;border-color:var(--blue)}.tile-bank{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.tile-chip{border:2px solid var(--blue-soft);background:#fff;border-radius:12px;min-width:48px;min-height:48px;padding:10px 14px;font-size:1.15rem;font-weight:700}.tile-char{min-width:52px;font-size:1.35rem}.reorder-answer{border:2px dashed var(--blue-soft);background:#eff6ff;border-radius:14px;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;min-height:64px;padding:12px;display:flex}.reorder-answer.ok{background:#dcfce7;border-color:#86efac}.reorder-answer.bad{background:#fee2e2;border-color:#fecaca}.build-selected{text-align:center;letter-spacing:.1em;min-height:48px;font-size:clamp(1.4rem,3vw,1.8rem);font-weight:800}.build-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.build-actions .btn:disabled{opacity:.45;cursor:not-allowed}.build-hint-banner{color:#9a3412;text-align:center;background:#fff7ed;border:2px solid #fdba74;border-radius:14px;margin:.5rem 0;padding:.75rem 1rem;font-size:1.05rem;font-weight:700}.build-progress{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin:2px 0 0;font-size:.95rem;display:flex}.build-live-stars{letter-spacing:.05em;font-size:1.05rem}.build-found{background:#f0fdf4;border:2px solid #bbf7d0;border-radius:14px;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex}.build-found-label{color:var(--blue-dark);flex-shrink:0;font-weight:700}.build-found-chips{flex-wrap:wrap;gap:6px;display:flex}.found-chip{background:#fff;border:2px solid #86efac;border-radius:999px;align-items:center;padding:4px 10px;font-size:1rem;font-weight:700;display:inline-flex}.build-found-summary{text-align:center;letter-spacing:.08em;font-weight:700}.cw-block{background:0 0;min-height:32px}.cw-cell{aspect-ratio:1;background:#fff;border:2px solid #94a3b8;border-radius:6px;justify-content:center;align-items:center;min-height:32px;font-size:1.1rem;font-weight:800;display:flex;position:relative}.cw-cell.active{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-soft)}.cw-num{color:#64748b;font-size:.55rem;position:absolute;top:2px;left:3px}.cw-char{line-height:1}.compare-grid{grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;display:grid}.compare-grid>div{background:#f8fafc;border-radius:12px;padding:12px}.field-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row-actions{flex-wrap:wrap;gap:4px;display:inline-flex}.parent-lib-row{border:1px solid var(--blue-soft,#bfdbfe);background:#fff;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px}.parent-learner-group{border:1px solid var(--blue-soft,#bfdbfe);background:#fff;border-radius:12px;margin-top:14px;padding:12px 12px 8px}.parent-learner-group-title{color:var(--blue-dark,#1e3a5f);margin:0 0 10px;font-size:1rem;font-weight:800;line-height:1.3}.parent-learner-group .parent-list{gap:8px}.parent-lib-card{box-shadow:none;background:#fff;border:3px solid #16a34a;border-radius:14px;flex-direction:column;gap:12px;padding:16px 16px 14px;display:flex}.parent-lib-card-head{flex-direction:column;gap:6px;min-width:0;display:flex}.parent-lib-card-title{color:var(--blue-dark,#1e3a5f);word-break:break-word;margin:0;font-size:1.2rem;font-weight:800;line-height:1.35}.parent-lib-card-sub{margin:0;font-size:.9rem;font-weight:600;line-height:1.4}.parent-lib-card-pills{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.parent-lib-pill{color:var(--blue-dark,#1e3a5f);background:var(--blue-soft,#e0f2fe);border-radius:999px;padding:2px 10px;font-size:.75rem;font-weight:700;display:inline-block}.parent-lib-card-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.parent-lib-card-actions--primary .btn{min-height:2.4rem}.parent-lib-card-actions--tools{border-top:1px dashed var(--blue-soft,#bfdbfe);padding-top:4px}.parent-lib-card-edit{border-top:1px solid var(--blue-soft,#dbeafe);flex-direction:column;gap:12px;padding-top:4px;display:flex}.parent-lib-card-danger{color:#9a3412;border-color:#fdba74}.parent-lib-row-main{flex-direction:column;flex:220px;gap:2px;min-width:0;display:flex}.parent-lib-meta{flex-direction:column;gap:2px;width:100%;min-width:0;display:flex}.parent-lib-meta-band{flex-wrap:wrap;align-items:center;gap:6px;width:100%;display:flex}.parent-lib-meta-input{box-sizing:border-box;width:auto;max-width:none;min-height:32px;box-shadow:none;border-radius:10px;padding:4px 8px;font-size:.9rem;font-weight:600}.parent-lib-meta-title{flex:140px;width:auto;min-width:100px}.parent-lib-meta-grade,.parent-lib-meta-subject{flex:none;width:auto;min-width:5.5rem;max-width:9rem}.parent-lib-meta-custom{flex:0 7rem;width:auto;min-width:5rem}.parent-lib-meta-row,.parent-lib-meta-field,.parent-lib-meta-field--half,.parent-lib-meta-label{display:none}.parent-lib-meta-save{white-space:nowrap;border-radius:999px;flex:none;padding:4px 12px;font-size:.85rem}.parent-lib-row-status{color:var(--muted,#64748b);margin:0;font-size:.8rem;font-weight:500;line-height:1.3}.parent-list{gap:6px}.parent-lib-row .row-actions,.parent-lib-row .row-actions{gap:3px}.parent-lib-row .btn-chip{padding:4px 8px;font-size:.8rem}.home-library-open{text-align:left;flex-direction:column;flex:1;justify-content:flex-start;align-items:stretch;width:100%;display:flex}.boot-loading{text-align:center;color:var(--muted,#64748b);padding:48px 16px;font-size:1.05rem}.api-banner{color:#92400e;background:#fef3c7;border:1px solid #f59e0b;border-radius:12px;margin-bottom:10px;padding:10px 12px;font-size:.9rem;line-height:1.4}.dev-banner{color:#fff;background:#9a3412;border-radius:12px;margin-bottom:10px;padding:10px 12px;font-size:.9rem;line-height:1.4}.dev-banner-link{color:#fed7aa;font:inherit;cursor:pointer;background:0 0;border:0;margin:0;padding:0;font-weight:700;text-decoration:underline;display:inline}.api-banner code{background:#fff7ed;border-radius:4px;padding:1px 4px;font-size:.85em}.ocr-paste-zone{text-align:center;cursor:text;background:#ffffffd9;border:2px dashed #5b8def;border-radius:16px;outline:none;margin-top:.75rem;padding:1.25rem 1rem}.ocr-paste-zone:focus,.ocr-paste-zone.busy{border-color:#2f6fdb;box-shadow:0 0 0 3px #2f6fdb33}.ocr-paste-title{color:#1a3a6b;margin:0 0 .35rem;font-size:1.05rem;font-weight:700}.home-crossword-card{color:#fff;background:linear-gradient(135deg,#1e3a5f 0%,#3b82f6 100%);border:none}.home-crossword-card h2{color:#fff}.home-crossword-card .en-soft{color:#ffffffd9}.home-crossword-card .btn-primary{color:#1e293b;background:#fbbf24;border-color:#f59e0b}.crossword-grid{--cw-col-min:1.75rem;background:#1e3a5f;border-radius:12px;gap:3px;max-width:min(100%,720px);margin-left:auto;margin-right:auto;padding:12px;display:grid;overflow-x:auto;box-shadow:0 8px 24px #1e3a5f59}.cw-block{aspect-ratio:1;background:#0f2744;border-radius:4px;min-height:1.75rem}.cw-cell{aspect-ratio:1;cursor:pointer;background:#fff;border:2px solid #94a3b8;border-radius:4px;justify-content:center;align-items:center;min-height:1.75rem;padding:0;font-size:clamp(.95rem,2.4vw,1.25rem);font-weight:800;display:flex;position:relative}.cw-cell.active{background:#fffbeb;border-color:#fbbf24;box-shadow:0 0 0 2px #fbbf2480}.cw-num{color:#64748b;font-size:.55rem;font-weight:700;line-height:1;position:absolute;top:2px;left:3px}.cw-char{color:#0f172a;line-height:1}.cw-clue-panels{grid-template-columns:1fr 1fr;gap:10px;margin-top:12px;display:grid}@media (width<=520px){.cw-clue-panels{grid-template-columns:1fr}}.cw-clue-panel h2{margin:0 0 6px;font-size:1rem}.cw-loading{text-align:center;padding:32px 16px}.hub-crossword-link{text-align:center;margin-top:12px}.smart-text{cursor:help;border-radius:4px;transition:background .15s}.smart-text:hover,.smart-text:focus-visible{background:#fbbf2440}.page-speak-tip{z-index:9999;color:#0f172a;pointer-events:auto;background:#fffbeb;border:3px solid #f59e0b;border-radius:16px;width:min(300px,100vw - 24px);padding:14px 14px 12px;font-size:1.05rem;line-height:1.45;animation:.15s ease-out page-speak-in;position:fixed;box-shadow:0 12px 32px #0f172a40}@keyframes page-speak-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media (pointer:fine) and (width>=521px){.page-speak-tip{cursor:grab}.page-speak-tip.is-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none;animation:none}.page-speak-tip button{cursor:pointer}}.page-speak-close{color:#64748b;cursor:pointer;background:0 0;border:none;min-width:36px;min-height:36px;padding:4px 8px;font-size:1.25rem;line-height:1;position:absolute;top:6px;right:8px}.page-speak-original{color:#1e3a5f;word-break:break-word;margin:0 28px 6px 0;font-size:1.35rem;font-weight:800}.page-speak-jyutping{color:#0369a1;margin:0 0 6px;font-size:.95rem;font-weight:600}.page-speak-translation{color:#334155;margin:0 0 12px;font-size:1.05rem}.page-speak-actions{flex-wrap:wrap;gap:8px;display:flex}.page-speak-btn{flex:auto;min-height:48px;font-weight:700;font-size:1.05rem!important}.page-speak-warn{color:#b45309;margin:8px 0 0;font-size:.85rem}@media (width<=520px){.page-speak-tip{width:calc(100vw - 24px);max-width:calc(100vw - 24px);font-size:1.1rem;right:auto;left:12px!important}.page-speak-original{font-size:1.5rem}.page-speak-btn{width:100%;min-height:52px}}.vocab-card-static{text-align:center;flex-direction:column;align-items:stretch;gap:.75rem;min-height:280px;padding:1.25rem 1.1rem 1.4rem;display:flex}.speakable-word{cursor:pointer;font:inherit;color:inherit;font-weight:inherit;background:0 0;border:none;border-radius:10px;padding:.15rem .35rem}.speakable-word:hover,.speakable-word:focus-visible{background:#3b82f626;outline:2px solid #3b82f6}.speakable-en{color:#0f766e}.vocab-en-big{color:#0f766e;overflow-wrap:anywhere;margin:.15rem 0 .35rem;font-size:1.85rem;font-weight:800}.vocab-en-big .speakable-en{white-space:normal;overflow-wrap:anywhere;max-width:100%}.vocab-definition{text-align:left;background:#f0f9ff;border:2px solid #bae6fd;border-radius:14px;padding:.75rem .9rem}.vocab-def-label,.vocab-example-label{color:#0369a1;margin-bottom:.25rem;font-size:.85rem;font-weight:800}.vocab-def-text{color:#0f172a;margin:0;font-size:1.15rem;font-weight:600;line-height:1.5}.vocab-def-en{color:#64748b;margin:.35rem 0 0;font-size:.95rem}.vocab-example{text-align:left;background:#fff7ed;border:2px solid #fed7aa;border-radius:14px;padding:.85rem .95rem}.vocab-example-zh{color:#1e293b;margin:.2rem 0 .4rem;font-size:1.35rem;font-weight:700;line-height:1.55}.vocab-example-en{color:#64748b;margin:0 0 .55rem;font-size:1.05rem}.vocab-example-actions{flex-wrap:wrap;gap:.45rem;display:flex}.vocab-example-missing{color:#94a3b8;font-size:.95rem}.btn-sm{padding:.45rem .75rem;font-size:.9rem}.vocab-card.vocab-card-static{text-align:center;display:block}.vocab-card.vocab-card-static .vocab-front,.vocab-card.vocab-card-static .vocab-back{display:block}.game-score-line{flex-wrap:wrap;justify-content:center;align-items:center;gap:.65rem;margin-top:.25rem;display:flex}.game-progress{color:#1e3a5f;font-weight:800}.score-stars{background:linear-gradient(#fff8db,#ffe08a);border:2px solid #f5b800;border-radius:999px;align-items:center;gap:.35rem;padding:.2rem .65rem;display:inline-flex;box-shadow:0 2px #e6a800}.score-stars-icons{letter-spacing:.05em;font-size:1.25rem;line-height:1}.star-filled{filter:drop-shadow(0 0 2px #ffcf33)}.star-empty{opacity:.45}.score-stars-label{color:#9a6700;font-size:1rem;font-weight:900}.speakable-sentence{color:#1e3a5f;flex-wrap:wrap;justify-content:center;align-items:center;gap:.15rem .2rem;font-size:1.45rem;font-weight:800;line-height:1.7;display:flex}.speak-chunk{font:inherit;font-weight:inherit;color:inherit;cursor:pointer;background:#3b82f614;border:none;border-radius:8px;padding:.05rem .2rem}.speak-chunk:hover,.speak-chunk:focus-visible{background:#3b82f638;outline:2px solid #3b82f6}.speak-chunk-plain{white-space:pre-wrap}.feedback.bad{padding:.85rem 1rem;font-size:1.25rem;font-weight:800;animation:2.2s feedbackPulse}@keyframes feedbackPulse{0%,to{opacity:1;transform:scale(1)}15%{transform:scale(1.04)}30%{transform:scale(1)}}.tile-chip{cursor:pointer}.read-aloud .read-prompt-card{box-shadow:var(--shadow);border:3px solid var(--blue-soft);text-align:center;background:#fff;border-radius:20px;flex-direction:column;align-items:center;gap:10px;padding:20px 16px;display:flex}.read-prompt-label{color:var(--blue-dark);margin:0;font-size:1.05rem;font-weight:800}.read-expected{color:var(--text);word-break:break-word;max-width:100%;font-size:clamp(1.5rem,3.2vw,2.05rem);font-weight:900;line-height:1.55}.read-text-hl .read-ch{border-radius:4px;padding:0 1px}.read-ch.ok{color:#14532d;background:#bbf7d0}.read-ch.bad{color:#7f1d1d;text-underline-offset:3px;background:#fecaca;text-decoration:underline;text-decoration-thickness:3px}.read-ch.neutral{color:var(--muted)}.read-ch.passed{color:#14532d;background:#bbf7d0}.read-ch.wait{color:#92400e;background:#fde68a;animation:1.1s ease-in-out infinite read-wait-pulse;box-shadow:0 0 0 2px #f59e0b73}.read-ch.upcoming{color:#94a3b8;background:0 0}@keyframes read-wait-pulse{0%,to{transform:scale(1);box-shadow:0 0 0 2px #f59e0b59}50%{transform:scale(1.06);box-shadow:0 0 0 6px #f59e0b26}}.read-live-progress{margin:0;font-size:.95rem;font-weight:700}.read-wait-coach{background:#fffbeb;border:2px solid #fbbf24;border-radius:14px;flex-direction:column;align-items:center;gap:8px;padding:10px 14px;display:flex}.read-wait-tip{color:#92400e;margin:0;font-size:1.25rem;font-weight:900}.read-wait-speak{font-weight:800}.read-paused-block{flex-direction:column;align-items:center;gap:8px;display:flex}.read-sub{margin:0;font-size:1rem}.read-demo-btn{min-width:160px;margin-top:4px}.read-listen-row{flex-wrap:wrap;justify-content:center;align-items:stretch;gap:10px;margin-top:4px;display:flex}.read-own-btn{color:#5b21b6;background:#ede9fe;border-color:#a78bfa;min-width:160px}.read-own-btn:hover,.read-own-btn:focus-visible{background:#ddd6fe}.read-own-btn-banner{align-self:center;font-size:1.05rem;font-weight:800}.read-perfect-block{flex-direction:column;align-items:center;gap:10px;display:flex}.read-banner.soft{color:#854d0e;background:#fef9c3;border-radius:12px;margin:0;padding:10px 14px;font-size:.9rem;font-weight:600}.read-banner.gate-rules{color:#0c4a6e;background:#e0f2fe;border-radius:12px;margin:0;padding:10px 14px;font-size:.88rem;font-weight:600;line-height:1.45}.read-nav-row{flex-wrap:wrap;justify-content:center;gap:10px;width:100%;display:flex}.read-nav-row .btn{min-width:8rem}.read-recording-ui{flex-direction:column;align-items:center;gap:8px;padding:12px;display:flex}.read-pulse{background:#ef4444;border-radius:50%;width:56px;height:56px;animation:1.1s ease-in-out infinite read-pulse;box-shadow:0 0 #ef444480}@keyframes read-pulse{0%{transform:scale(.95);box-shadow:0 0 #ef44448c}70%{transform:scale(1.05);box-shadow:0 0 0 18px #ef444400}to{transform:scale(.95);box-shadow:0 0 #ef444400}}.read-rec-label{color:#b91c1c;margin:0;font-size:1.2rem;font-weight:800}.read-interim{color:var(--muted);word-break:break-word;max-width:100%;margin:0;font-size:1.05rem}.read-result-block{flex-direction:column;gap:10px;display:flex}.read-heard{text-align:center;margin:0;font-size:1.05rem}.read-heard-tap{box-shadow:none;color:var(--blue-dark);font-weight:800;font-size:inherit;cursor:pointer;background:0 0;border:none;padding:0 4px;text-decoration:underline}.read-asr-ref{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:14px;margin-top:4px;padding:10px 12px}.read-asr-ref-label{color:#64748b;margin:0 0 8px;font-size:.9rem;font-weight:700}.read-wrong-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.read-wrong-list-soft .read-wrong-item{box-shadow:none;background:#fff;border:1px solid #e2e8f0}.read-wrong-list-soft .read-wrong-exp{color:#475569;font-size:1.1rem;font-weight:700}.read-wrong-list-soft .read-wrong-tip{color:#64748b;font-weight:600}.read-wrong-item{text-align:left;width:100%;box-shadow:var(--shadow);cursor:pointer;background:#fff7ed;border:2px solid #fdba74;border-radius:14px;flex-direction:column;gap:4px;padding:12px 14px;display:flex}.read-wrong-exp{color:#9a3412;font-size:1.35rem;font-weight:900}.read-wrong-heard{color:var(--muted);font-size:.95rem}.read-wrong-tip{color:#c2410c;font-size:1rem;font-weight:700}.read-actions{flex-direction:column;align-items:center;gap:10px;padding:8px 0 4px;display:flex}.read-mic-btn{max-width:420px}@media (width>=768px){.read-expected{font-size:clamp(1.65rem,2.8vw,2.15rem)}.read-wrong-exp{font-size:1.55rem}}.page-speak-toggle.is-on{font-weight:800;color:#166534!important;background:#dcfce7!important;border-color:#22c55e!important}.page-speak-toggle.is-off{font-weight:700;color:#64748b!important;background:#f1f5f9!important;border-color:#cbd5e1!important}.page-speak-toggle.floating{z-index:10000;cursor:pointer;background:#fff;border:2px solid #cbd5e1;border-radius:999px;min-height:40px;padding:8px 14px;font-size:.95rem;position:fixed;top:10px;right:10px;box-shadow:0 4px 14px #0f172a26}.page-speak-toggle.floating.is-on{color:#166534;background:#dcfce7;border-color:#22c55e}@media (width>=900px){.page-speak-toggle.floating{padding:10px 16px;font-size:1.05rem}}.read-interim-note{color:#b45309;margin-top:4px;font-size:.85rem;font-weight:600;display:block}.read-summary-list{text-align:left;width:100%;max-width:560px;margin:12px 0 20px;padding:0;list-style:none}.read-summary-row{background:#fff;border:2px solid #e2e8f0;border-radius:12px;align-items:flex-start;gap:8px;margin-bottom:8px;padding:10px 12px;font-size:1.05rem;display:flex}.read-summary-idx{color:#64748b;flex-shrink:0;font-weight:800}.read-summary-text{color:#0f172a;flex:1;font-weight:700}.read-summary-score{color:#1d4ed8;flex-shrink:0;font-weight:800}.read-skip-btn{margin-top:4px}.read-accept-btn{border-width:2px;border-color:var(--blue);width:100%;max-width:420px;font-weight:800}.read-accept-btn-banner{max-width:100%;margin-top:4px;padding:16px 22px;font-size:1.2rem;box-shadow:0 6px 18px #2563eb47}.read-asr-soft-note{color:#92400e;text-align:center;background:#fffbeb;border:2px dashed #fbbf24;border-radius:14px;margin:0;padding:10px 14px;font-size:1.02rem;font-weight:700;line-height:1.45}.read-learn-panel{flex-direction:column;gap:10px;width:100%;margin:12px 0 8px;display:flex}.read-learn-row{text-align:left;background:#f8fafc;border:2px solid #e2e8f0;border-radius:14px;align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.read-learn-body{flex:1;min-width:0}.read-learn-label{color:#1d4ed8;background:#dbeafe;border-radius:999px;margin-bottom:6px;padding:2px 10px;font-size:.8rem;font-weight:800;display:inline-block}.read-learn-text{color:#0f172a;margin:0;font-size:1.15rem;font-weight:700;line-height:1.45}.read-speak-chip{flex-shrink:0;min-width:52px;min-height:44px;font-weight:800}@media (width>=900px){.read-learn-text{font-size:1.3rem}}.game-comprehension .comp-cover{object-fit:cover;width:100%;max-height:200px;box-shadow:var(--shadow);border:3px solid var(--blue-soft);border-radius:18px;display:block}.comp-question-bubble{text-align:left;width:100%;box-shadow:var(--shadow);color:var(--text);cursor:pointer;background:linear-gradient(145deg,#eff6ff,#dbeafe);border:3px solid #93c5fd;border-radius:22px;flex-direction:column;align-items:flex-start;gap:8px;padding:18px 20px;display:flex}.comp-q-label{color:var(--blue-dark);opacity:.85;font-size:.85rem;font-weight:700}.comp-q-text{color:var(--blue-dark);font-size:clamp(1.35rem,2.8vw,1.65rem);font-weight:900;line-height:1.45}.comp-options{flex-direction:column;gap:12px;display:flex}.comp-option-btn{text-align:left;border:3px solid var(--blue-soft);width:100%;box-shadow:var(--shadow);color:var(--text);background:#fff;border-radius:18px;align-items:flex-start;gap:14px;min-height:72px;padding:16px 14px;display:flex}.comp-option-btn:active:not(:disabled){transform:scale(.985)}.comp-option-letter{background:var(--blue);color:#fff;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:2.2rem;height:2.2rem;font-size:1.15rem;font-weight:900;display:inline-flex}.comp-option-text{flex:1;font-size:1.2rem;font-weight:800;line-height:1.4}.comp-option-btn.correct{border-color:var(--green);background:var(--green-soft)}.comp-option-btn.correct .comp-option-letter{background:#16a34a}.comp-option-btn.wrong{background:#fee2e2;border-color:#ef4444}.comp-option-btn.wrong .comp-option-letter{background:#dc2626}.comp-option-btn.dim{opacity:.55}.comp-tip{color:#92400e;background:#fffbeb;border:2px solid #fde68a;border-radius:12px;margin:0;padding:10px 14px;font-weight:700}.comp-next{width:100%;margin-top:4px}@media (width>=900px){.comp-q-text{font-size:clamp(1.45rem,2.5vw,1.75rem)}.comp-option-text{font-size:1.4rem}.comp-option-btn{min-height:88px;padding:20px 18px}.game-comprehension .comp-cover{max-height:260px}}@media (width>=1100px){.comp-q-text{font-size:clamp(1.5rem,2.2vw,1.85rem)}.comp-option-text{font-size:1.55rem}}.model-switcher{width:100%;margin:6px 0 10px}.model-switcher-bar{padding:6px 0}.model-switcher-card{border:2px solid var(--blue-soft);background:#f8fafc;border-radius:14px;margin-bottom:12px;padding:10px 12px}.model-switcher-row{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:6px;display:flex}.model-switcher-label{font-size:.95rem;font-weight:700}.model-switcher-current{color:#64748b;word-break:break-all;font-size:.85rem}.model-switcher-chips{flex-wrap:wrap;gap:6px;margin-bottom:6px;display:flex}.model-chip{padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.8rem}.model-chip.active{background:var(--yellow);color:#78350f;border-color:#f59e0b}.model-switcher-custom{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.model-switcher-input{flex:1;min-width:120px;padding:8px 10px;font-size:.9rem}.model-switcher-status{color:#15803d;margin:4px 0 0;font-size:.85rem}.model-switcher-bar .model-switcher-custom{margin-top:2px}.sent-free{-webkit-user-select:text;user-select:text;cursor:text;touch-action:manipulation;padding:8px 2px;font-size:1.35rem;line-height:2}.sent-free::selection{background:#3b82f659}.pr-title-zh.sent-free::selection{background:#3b82f659}.sent-select-hint{margin:4px 0 10px}.score-board{text-align:center;background:#fff7e8;border:2px solid #f6c56b;border-radius:22px;width:min(720px,100%);margin:12px auto 18px;padding:16px 18px 12px}.score-board-lesson{margin:8px 0 14px}.score-headline{justify-content:center;align-items:baseline;gap:8px;display:flex}.score-star{font-size:1.8rem}.score-num{color:#b45309;font-size:2.6rem;font-weight:800;line-height:1}.score-label{color:#92400e;font-weight:700}.score-meta{color:#78716c;margin:6px 0 8px;font-size:.95rem}.score-track{background:#fde68a;border-radius:999px;height:12px;overflow:hidden}.score-fill{background:linear-gradient(90deg,#f59e0b,#f97316);height:100%;display:block}.sticker-row{flex-wrap:wrap;justify-content:center;gap:8px;margin:12px 0 0;padding:0;list-style:none;display:flex}.sticker{background:#fff;border:2px solid #fbbf24;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:2px;width:72px;min-height:72px;display:flex}.sticker.locked{opacity:.45;filter:grayscale();border-style:dashed}.sticker-emoji{font-size:1.6rem}.sticker-name{font-size:.72rem;font-weight:700}.lesson-score{color:#b45309;margin-top:4px;font-weight:800;display:block}@media (width<=520px){.home-profile-bar,.weak-row,.row-actions{flex-wrap:wrap}.crossword-grid{--cw-col-min:0px;max-width:100%;overflow-x:auto}.sent-speaker-btn{justify-content:center;align-items:center;min-width:44px;min-height:44px;padding:6px;display:inline-flex}}@media (pointer:coarse){.app-shell{-webkit-touch-callout:none}.app-shell :is(h1,h2,h3,h4,p,li,span,.smart-text,.sent-free,.tip-card,.sent-zh){-webkit-user-select:text;user-select:text;-webkit-touch-callout:none}.app-shell input,.app-shell textarea,.app-shell select,.app-shell [contenteditable=true]{-webkit-touch-callout:default;-webkit-user-select:text;user-select:text}}.home-library-item .btn.home-library-open{text-align:left;white-space:normal;flex-direction:column;flex:auto;justify-content:flex-start;align-items:stretch;width:100%;display:flex}.home-library-item .home-library-open>span{text-align:left;align-self:stretch;width:100%;max-width:100%;display:block}.home-library-item .lesson-score,.home-library-item .smart-text,.home-library-item .en-soft{text-align:left}.home-library-pager{text-align:left;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:10px;width:100%;margin-top:10px;display:flex}.home-library-page-btn{min-width:44px;min-height:44px;padding:10px 16px}.home-library-page-btn:disabled{opacity:.45}.home-library-page-num{text-align:left;align-items:center;min-height:44px;font-weight:800;display:inline-flex}.build-len-pick{flex-direction:column;gap:14px;width:100%;display:flex}.build-len-card{flex-direction:column;gap:6px;display:flex}.build-len-btn{flex-direction:column;align-items:center;gap:2px;width:100%;display:flex}.build-len-btn.is-default{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}.build-len-btn.is-empty{background:#f8fafc;border-style:dashed}.build-len-empty{text-align:center;color:#b91c1c;margin:0;font-weight:700}.build-len-tag{color:var(--blue-dark);background:var(--blue-soft);border-radius:999px;padding:0 8px;font-weight:800}.build-word .tile-bank .tile-chip{position:relative}.build-word .tile-chip.tile-crossed{cursor:default}.build-word .tile-x{pointer-events:none;z-index:1;display:block;position:absolute;inset:1px}.build-word .tile-x-svg{width:100%;height:100%;display:block;overflow:visible}.busy-modal-root{z-index:20000;pointer-events:auto;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.busy-modal-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0f172a8c;position:absolute;inset:0}.busy-modal-card{z-index:1;text-align:center;color:#0f172a;background:#fff;border:3px solid #cbd5e1;border-radius:20px;width:min(360px,100vw - 32px);padding:28px 24px 22px;position:relative;box-shadow:0 20px 48px #0f172a59}.busy-modal-spinner{border:4px solid #e2e8f0;border-top-color:#3b82f6;border-radius:50%;width:44px;height:44px;margin:0 auto 16px;animation:.8s linear infinite busy-modal-spin}@keyframes busy-modal-spin{to{transform:rotate(360deg)}}.busy-modal-message{margin:0;font-size:1.15rem;font-weight:800;line-height:1.4}.busy-modal-lesson{margin:8px 0 0;font-size:.95rem}.busy-modal-hint{margin:12px 0 0;font-size:.85rem}.busy-modal-error{color:#b91c1c;text-align:left;word-break:break-word;background:#fef2f2;border:2px solid #fecaca;border-radius:12px;margin:12px 0 0;padding:10px 12px;font-size:.95rem;font-weight:600;line-height:1.4}.busy-modal-close{min-width:120px;margin-top:16px}.bubble-match{flex-direction:column;min-height:100%;padding-bottom:8px;display:flex;position:relative}.bubble-hint{margin:4px 12px 8px;font-weight:700}.bubble-hud{background:#ffffffb8;border:2px solid #6366f133;border-radius:16px;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 18px;margin:2px 12px 6px;padding:8px 12px;display:flex;box-shadow:0 2px 8px #0f172a0f}.bubble-hearts{gap:2px;font-size:1.35rem;line-height:1;display:flex}.bubble-heart.filled{filter:drop-shadow(0 1px 1px #dc262659)}.bubble-heart.empty{opacity:.4;color:#94a3b8}.bubble-hearts-result{justify-content:center;margin:8px 0 16px;font-size:1.6rem}.bubble-score{color:#1e3a5f;font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:900}.bubble-timer{flex-direction:column;align-items:center;gap:4px;min-width:4.8rem;display:flex}.bubble-timer-num{font-variant-numeric:tabular-nums;color:#334155;font-size:1.05rem;font-weight:900}.bubble-timer.urgent .bubble-timer-num{color:#dc2626;animation:.6s ease-in-out infinite alternate bubble-timer-pulse}.bubble-timer-bar{background:#e2e8f0;border-radius:999px;width:4.8rem;height:7px;display:block;overflow:hidden}.bubble-timer-fill{background:linear-gradient(90deg,#22c55e,#84cc16);border-radius:999px;height:100%;transition:width .9s linear;display:block}.bubble-timer.urgent .bubble-timer-fill{background:linear-gradient(90deg,#f97316,#dc2626)}@keyframes bubble-timer-pulse{0%{transform:scale(1)}to{transform:scale(1.08)}}.bubble-game-over-msg{color:#9a3412;text-align:center;margin:8px 16px 12px;font-size:1.15rem;font-weight:800}.bubble-review{text-align:left;background:#fff7ed;border:2px solid #fdba74;border-radius:16px;width:calc(100% - 32px);max-width:28rem;margin:8px 16px 16px;padding:14px 16px}.bubble-review-title{color:#9a3412;text-align:center;margin:0 0 10px;font-size:1.05rem;font-weight:900}.bubble-review-list{margin:0;padding:0 0 0 1.1rem;list-style:outside}.bubble-review-list li{color:#1e293b;margin:6px 0;font-size:1rem;font-weight:700;line-height:1.4}.bubble-review-zh{color:#4338ca;font-weight:900}.bubble-review-en{color:#334155;font-weight:700}.bubble-arena{background:radial-gradient(circle at 20% 30%,#ffdc7859,#0000 40%),radial-gradient(circle at 80% 20%,#78c8ff59,#0000 42%),radial-gradient(circle at 50% 80%,#c8a0ff4d,#0000 45%),linear-gradient(#fff8e8 0%,#e8f6ff 100%);border:3px solid #5078c840;border-radius:22px;flex:1;width:calc(100% - 20px);max-width:960px;min-height:52vh;margin:0 auto;position:relative;overflow:visible;box-shadow:inset 0 0 0 2px #fff9}.en-bubble{white-space:normal;border:3px solid hsl(var(--bubble-hue,200) 70% 45%);background:hsl(var(--bubble-hue,200) 85% 92%);width:max-content;min-width:4.2rem;max-width:min(46%,16rem);height:auto;max-height:none;box-shadow:0 6px 0 hsl(var(--bubble-hue,200) 60% 38%), 0 10px 18px #0000001f;color:#1e293b;z-index:2;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:999px;padding:10px 14px;font-size:clamp(14px,1.6vw,17px);font-weight:800;line-height:1.35;position:absolute;overflow:visible;transform:translate(-50%,-50%)}.en-bubble.long{text-align:center;border-radius:1.2rem;max-width:min(72%,22rem)}.en-bubble.xl{text-align:left;border-radius:1.1rem;max-width:min(88%,28rem)}.en-bubble.dragging{cursor:grabbing;box-shadow:0 10px 0 hsl(var(--bubble-hue,200) 60% 38%), 0 16px 28px #00000038;animation:none;transform:translate(-50%,-50%)scale(1.06)}.en-bubble:active:not(.dragging){transform:translate(-50%,-50%)scale(.96)}.en-bubble-text{white-space:normal;word-break:break-word;overflow-wrap:anywhere;text-align:center;max-width:none;line-height:1.35;display:block;overflow:visible}.en-bubble.long .en-bubble-text{text-align:left}.en-bubble.pop{z-index:5;background:#dcfce7;border-color:#16a34a;animation:3.8s ease-out forwards bubble-pop}.en-bubble.miss{z-index:5;background:#fee2e2;border-color:#dc2626;animation:.4s ease-in-out shake}.en-bubble.reveal{z-index:8;background:#fef9c3;border-color:#ca8a04;animation:3s ease-in-out forwards bubble-reveal-pulse;box-shadow:0 0 0 6px #facc1573,0 8px #a16207,0 12px 22px #00000026}@keyframes bubble-reveal-pulse{0%{transform:translate(-50%,-50%)scale(1)}15%{transform:translate(-50%,-50%)scale(1.22)}30%{transform:translate(-50%,-50%)scale(1.08)}50%{transform:translate(-50%,-50%)scale(1.16)}70%,to{transform:translate(-50%,-50%)scale(1.1)}}.en-bubble-x,.en-bubble-ok{color:#fff;border-radius:50%;place-items:center;width:28px;height:28px;font-size:1rem;font-weight:900;display:grid;position:absolute;top:-10px;right:-6px}.en-bubble-x{background:#dc2626}.en-bubble-ok{background:#16a34a}@keyframes bubble-bob{0%,to{translate:0}50%{translate:0 -8px}}@keyframes bubble-pop{0%{opacity:1;transform:translate(-50%,-50%)scale(1)}8%{opacity:1;transform:translate(-50%,-50%)scale(1.28)}14%{opacity:1;transform:translate(-50%,-50%)scale(1.1)}82%{opacity:1;transform:translate(-50%,-50%)scale(1.1)}to{opacity:0;transform:translate(-50%,-50%)scale(.35)}}.zh-stage{margin:12px 12px 4px;position:relative}.zh-target{background:linear-gradient(#fff 0%,#eef2ff 100%);border:4px solid #6366f1;border-radius:22px;flex-direction:column;align-items:center;gap:4px;width:100%;padding:16px 14px 14px;display:flex;box-shadow:0 8px #4338ca,0 14px 24px #4338ca40}.zh-target-label{color:#6366f1;font-size:.85rem;font-weight:700}.zh-target-word{color:#1e1b4b;letter-spacing:.04em;font-size:clamp(1.6rem,5vw,2.35rem);font-weight:900}.zh-target-tip{color:#64748b;font-size:.8rem;font-weight:600}.zh-stage.flash-ok .zh-target{border-color:#16a34a;animation:.7s stage-flash;box-shadow:0 8px #15803d,0 0 0 8px #22c55e40}.zh-stage.flash-bad .zh-target{border-color:#dc2626;animation:.4s shake;box-shadow:0 8px #b91c1c,0 0 0 8px #ef444433}@keyframes stage-flash{0%,to{filter:brightness()}40%{filter:brightness(1.15)}}.bubble-cheer{color:#fff;white-space:nowrap;z-index:6;background:#16a34a;border-radius:999px;padding:8px 16px;font-size:1.1rem;font-weight:900;animation:.35s cheer-in;position:absolute;top:-12px;left:50%;transform:translate(-50%,-100%);box-shadow:0 6px 16px #16a34a59}.bubble-cheer.bad{background:#dc2626;box-shadow:0 6px 16px #dc262659}.bubble-done-list{background:#f0fdf4;border:2px solid #86efac;border-radius:16px;margin:8px 12px 16px;padding:12px 14px}.bubble-done-heading{color:#166534;margin:0 0 8px;font-size:1rem;font-weight:900}.bubble-done-empty{margin:0;font-size:.9rem}.bubble-done-chips{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.bubble-done-chip{text-align:left;cursor:pointer;background:#fff;border:2px solid #86efac;border-radius:999px;align-items:center;gap:6px;max-width:100%;padding:8px 12px;font-weight:800;display:inline-flex;box-shadow:0 2px 6px #16653414}.bubble-done-chip:active{transform:scale(.97)}.bubble-done-zh{color:#1e3a8a;font-size:1.05rem}.bubble-done-secs{color:#b45309;background:#fffbeb;border:1px solid #fcd34d;border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:.85rem;font-weight:900;line-height:1.3}.bubble-done-secs.timed-out{color:#b91c1c;background:#fef2f2;border-color:#fca5a5}.bubble-done-sep{color:#94a3b8}.bubble-done-en{color:#0f766e;word-break:break-word;font-size:.95rem}.bubble-done-ok,.bubble-done-miss{color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:1.35rem;height:1.35rem;font-size:.75rem;font-weight:900;line-height:1;display:inline-grid}.bubble-done-ok{background:#16a34a}.bubble-done-miss{background:#dc2626}.timeout-modal-backdrop{z-index:80;background:#0f172a8c;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.timeout-modal{text-align:center;background:#fffef7;border:5px solid #ca8a04;border-radius:1.5rem;width:min(94vw,28rem);padding:1.5rem 1.35rem 1.35rem;box-shadow:0 18px 40px #00000047}.timeout-modal-emoji{margin-bottom:.35rem;font-size:2.6rem;line-height:1}.timeout-modal-title{color:#a16207;margin-bottom:.75rem;font-size:clamp(1.6rem,5.5vw,2.1rem);font-weight:900}.timeout-modal-label{color:#64748b;margin-bottom:.35rem;font-size:clamp(1.05rem,3.5vw,1.25rem);font-weight:800}.timeout-modal-pair{flex-direction:column;align-items:center;gap:.2rem;margin-bottom:1.15rem;display:flex}.timeout-modal-line{flex-wrap:wrap;justify-content:center;align-items:center;gap:.45rem;max-width:100%;display:inline-flex}.timeout-modal-zh{color:#1e3a8a;margin:0;font-size:clamp(2rem,7vw,2.75rem);font-weight:900;line-height:1.2}.timeout-modal-eq{color:#94a3b8;margin:.15rem 0;font-size:1.4rem;font-weight:800}.timeout-modal-en{color:#0f766e;word-break:break-word;margin:0;font-size:clamp(1.45rem,5vw,2rem);font-weight:900;line-height:1.3}.timeout-modal-speak{border:2px solid var(--blue-soft,#bfdbfe);cursor:pointer;background:#eff6ff;border-radius:999px;flex-shrink:0;place-items:center;width:2.4rem;height:2.4rem;padding:0;font-size:1.15rem;line-height:1;display:inline-grid}.timeout-modal-speak:active{transform:scale(.94)}.timeout-modal-ok{border-radius:999px;width:100%;min-height:3.4rem;font-size:clamp(1.25rem,4.2vw,1.55rem);font-weight:900}.bubble-result-modal{background:#f8fbff;border-color:#2563eb}.bubble-result-title{color:#1e3a8a;margin-bottom:.2rem}.bubble-result-sub{margin:0 0 .65rem;font-size:.95rem}.bubble-result-stars{letter-spacing:.08em;margin:0 0 .45rem;font-size:clamp(1.6rem,5vw,2.1rem);line-height:1.2}.bubble-result-score{color:#1e3a8a;margin:0 0 .25rem;font-size:clamp(1.55rem,5vw,2rem);font-weight:900}.bubble-result-mistakes{color:#334155;margin:0 0 1.1rem;font-size:clamp(1.05rem,3.5vw,1.25rem);font-weight:800}@keyframes cheer-in{0%{opacity:0;transform:translate(-50%,-70%)scale(.8)}to{opacity:1;transform:translate(-50%,-100%)scale(1)}}@media (width>=700px){.bubble-arena{min-height:48vh}.en-bubble{font-size:clamp(15px,1.4vw,17px)}}.lesson-media-block{border:1px solid var(--blue-soft,#bfdbfe);background:#0f172a0a;border-radius:16px;max-width:720px;margin:8px 12px 12px;overflow:hidden}.screen.hub .lesson-media-block{margin-left:auto;margin-right:auto}.lesson-media-block--compact{border-radius:12px;max-width:480px;margin:6px 10px 8px}.lesson-media-video,.lesson-media-cover{object-fit:contain;background:#0f172a;width:100%;max-height:280px;display:block}.lesson-media-block--compact .lesson-media-video,.lesson-media-block--compact .lesson-media-cover{max-height:180px}.lesson-media-cover{background:#f8fafc}.lesson-gallery{background:#f8fafc;position:relative}.lesson-gallery-scroller{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;touch-action:pan-x;scrollbar-width:none;display:flex;overflow-x:auto}.lesson-gallery-scroller::-webkit-scrollbar{display:none}.lesson-gallery-hit{scroll-snap-align:start;cursor:zoom-in;background:0 0;border:0;flex:0 0 100%;width:100%;margin:0;padding:0}.lesson-gallery-img{object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;background:#f8fafc;width:100%;max-height:280px;display:block}.lesson-media-block--compact .lesson-gallery-img{max-height:180px}.lesson-gallery-hint{text-align:center;margin:0;padding:0 8px 6px;font-size:.85rem}.lesson-gallery-nav{justify-content:center;align-items:center;gap:8px;padding:6px 8px 8px;display:flex}.lesson-gallery-btn{min-width:44px}.lesson-gallery-count{text-align:center;min-width:4.5em}.lesson-lightbox{z-index:80;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.lesson-lightbox-backdrop{cursor:pointer;background:#0f172acc;border:0;margin:0;padding:0;position:absolute;inset:0}.lesson-lightbox-frame{z-index:1;flex-direction:column;align-items:center;gap:10px;max-width:min(96vw,1100px);max-height:96vh;display:flex;position:relative}.lesson-lightbox-img{object-fit:contain;background:#fff;border-radius:12px;width:auto;max-width:96vw;height:auto;max-height:calc(96vh - 88px);display:block}.lesson-lightbox-close{min-width:120px}.lesson-lightbox-nav{align-items:center;gap:8px;display:flex}.parent-lib-media-row{flex-wrap:wrap;align-items:flex-start;gap:8px 12px;margin-top:6px;display:flex}.parent-lib-media-row .lesson-image-controls,.parent-lib-media-row .lesson-video-controls{margin-top:0}.lesson-image-controls{margin-top:4px}.lesson-image-thumbs{flex-wrap:wrap;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.comp-edit-card{border:1px solid var(--blue-soft,#bfdbfe);background:#fff;border-radius:12px;flex-direction:column;gap:8px;margin-top:12px;padding:12px;display:flex}.comp-edit-card-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.lesson-image-thumb{border:1px solid var(--blue-soft,#bfdbfe);background:#f8fafc;border-radius:10px;width:72px;height:72px;position:relative;overflow:hidden}.lesson-image-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lesson-image-thumb-del{padding:2px 8px;font-size:.75rem;position:absolute;bottom:2px;right:2px}.lesson-video-controls{margin-top:4px}.lesson-video-controls-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.lesson-video-name{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:.8rem;overflow:hidden}.lesson-video-error{color:#b91c1c;margin:2px 0 0;font-size:.8rem}.pr-title-row{text-align:left;cursor:default;background:0 0;border:none;align-items:flex-start;gap:8px;width:100%;padding:0;display:flex}.pr-title-zh.sent-free{cursor:text;-webkit-user-select:text;user-select:text;margin:0}.home-library-row{flex-direction:column;flex:auto;align-items:stretch;gap:.25rem;width:100%;min-width:0;display:flex}.lesson-crown-chip{color:#92400e;cursor:pointer;text-align:left;white-space:normal;background:linear-gradient(#fff8e7 0%,#fde68a 100%);border:1px solid #f0d48a;border-radius:.85rem;align-self:flex-start;max-width:100%;margin:0;padding:.25rem .6rem;font-size:.8rem;font-weight:800;line-height:1.4;box-shadow:0 1px #92400e1f}.lesson-crown-chip:hover,.lesson-crown-chip:focus-visible{outline-offset:1px;outline:2px solid #f59e0b}.lesson-crown-chip-muted{color:#9ca3af;box-shadow:none;background:#f3f4f6;border-color:#e5e7eb;font-weight:700}.lb-modal-root{z-index:1200;justify-content:center;align-items:flex-end;padding:0;display:flex;position:fixed;inset:0}@media (width>=640px){.lb-modal-root{align-items:center;padding:1.5rem}}.lb-modal-backdrop{cursor:pointer;background:#0f172a73;border:0;margin:0;padding:0;position:absolute;inset:0}.lb-modal-card{z-index:1;background:#fff;border-radius:1.1rem 1.1rem 0 0;flex-direction:column;gap:.75rem;width:min(420px,100%);max-height:min(80vh,640px);padding:1.1rem 1.15rem 1.25rem;display:flex;position:relative;overflow:auto;box-shadow:0 -8px 32px #0f172a2e}@media (width>=640px){.lb-modal-card{border-radius:1.1rem;box-shadow:0 16px 48px #0f172a38}}.lb-modal-title{color:#1f2937;margin:0;font-size:1.25rem;font-weight:900}.lb-modal-empty{margin:.25rem 0 .5rem}.lb-modal-list{flex-direction:column;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.lb-modal-row{background:#fffbeb;border:1px solid #fde68a;border-radius:.65rem;grid-template-columns:2.4rem 1fr auto;align-items:center;gap:.4rem;padding:.45rem .55rem;display:grid}.lb-modal-rank{color:#b45309;font-weight:900}.lb-modal-name{color:#1f2937;text-overflow:ellipsis;white-space:nowrap;font-weight:800;overflow:hidden}.lb-modal-score{color:#92400e;white-space:nowrap;font-size:.85rem;font-weight:700}.lb-modal-close{align-self:stretch;min-height:44px}.vocab-wordmap{text-align:left;border-top:1px dashed #e5e7eb;width:100%;margin-top:.65rem;padding:.45rem .15rem .15rem}.vocab-wordmap-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.25rem .75rem;margin-bottom:.35rem;display:flex}.vocab-wordmap-title{color:#6b7280;letter-spacing:.02em;margin:0;font-size:.78rem;font-weight:800}.vocab-wordmap-legend{color:#9ca3af;align-items:center;gap:.28rem;margin:0;font-size:.68rem;font-weight:600;display:inline-flex}.vocab-wordmap-swatch{border-radius:999px;flex:none;width:.55rem;height:.55rem;display:inline-block}.vocab-wordmap-swatch.unlearned{background:#f87171}.vocab-wordmap-swatch.learned{background:#34d399}.vocab-wordmap-empty{margin:0;font-size:.75rem}.vocab-wordmap-chips{flex-wrap:wrap;gap:.28rem;display:flex}.vocab-wordmap-chip{cursor:pointer;opacity:.92;border:1px solid #0000;border-radius:999px;min-height:0;margin:0;padding:.12rem .4rem;font-size:.72rem;font-weight:700;line-height:1.25}.vocab-wordmap-chip.unlearned{color:#b91c1c;background:#fef2f2;border-color:#fecaca}.vocab-wordmap-chip.learned{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.vocab-wordmap-chip.current{outline-offset:1px;opacity:1;outline:2px solid #6366f1}.vocab-wordmap-chip:hover,.vocab-wordmap-chip:focus-visible{opacity:1;outline-offset:1px;outline:2px solid #94a3b8}.vocab-wordmap-chip.current:hover,.vocab-wordmap-chip.current:focus-visible{outline-color:#4f46e5}.app-shell.app-shell--learn{max-width:min(1100px,96vw);min-height:100dvh;padding:12px 16px 40px}@media (width>=600px){.app-shell.app-shell--learn{max-width:min(1200px,96vw);padding:20px 28px 40px}}@media (width>=1100px){.app-shell.app-shell--learn{max-width:min(1200px,96vw)}.app-shell--learn .island-grid{grid-template-columns:1fr 1fr 1fr}.app-shell--learn .choice-btn{font-size:clamp(1.35rem,2vw,1.55rem)}}.app-shell--learn .home-title{font-size:clamp(1.85rem,4vw,2.45rem)}.app-shell--learn .lesson-media-block{max-width:min(100%,880px);margin-left:auto;margin-right:auto}.app-shell--learn .score-board{max-width:min(100%,880px)}.practice-settings-block{border:1px solid var(--blue-soft);background:#f8fafc;border-radius:14px;margin:16px 0;padding:12px 14px}.practice-settings-block h3{color:var(--blue-dark);margin:0 0 10px;font-size:1.05rem}.practice-settings-savebar{z-index:5;border:2px solid var(--blue-soft);background:#eff6ff;border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:8px 0 14px;padding:10px 12px;display:flex;position:sticky;top:0}.practice-settings-savebar-status{color:var(--blue-dark);font-size:.95rem;font-weight:800}.practice-settings-savebar-actions{flex-wrap:wrap;gap:8px;display:flex}.hint.bad{color:#b91c1c;font-weight:700}.learn-ui-scale.chip{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.learn-ui-scale-chip-label{color:var(--blue-dark);white-space:nowrap;padding:0 4px;font-size:.85rem;font-weight:800}.learn-ui-scale.floating{left:max(8px, env(safe-area-inset-left,0px));bottom:max(40px, calc(env(safe-area-inset-bottom,0px) + 36px));z-index:40;border:2px solid var(--blue-soft);background:#ffffffeb;border-radius:12px;align-items:center;gap:4px;padding:4px 6px;display:inline-flex;position:fixed;box-shadow:0 2px 8px #0f172a1a}.learn-ui-scale.floating .learn-ui-scale-btn{background:var(--blue-soft);min-width:36px;min-height:36px;color:var(--blue-dark);border-radius:10px;padding:4px 8px;font-size:.95rem;font-weight:900;line-height:1}.learn-ui-scale.floating .learn-ui-scale-btn:disabled{opacity:.4}.learn-ui-scale.floating .learn-ui-scale-label{text-align:center;min-width:2.5rem;color:var(--text);font-size:.8rem;font-weight:800}.copybook-modal-root{z-index:120;justify-content:center;align-items:stretch;display:flex;position:fixed;inset:0}.copybook-modal-backdrop{background:#0f172a8c;position:absolute;inset:0}.copybook-modal-panel{z-index:1;background:#e8eef5;flex-direction:column;width:min(960px,100%);max-height:100%;margin:0 auto;display:flex;position:relative;box-shadow:0 8px 40px #00000040}.copybook-modal-toolbar{background:#fff;border-bottom:1px solid #cbd5e1;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;display:flex}.copybook-modal-heading{margin:0;font-size:1.15rem}.copybook-modal-actions{flex-wrap:wrap;gap:8px;display:flex}.copybook-modal-scroll{flex:1;padding:16px;overflow:auto}.copybook-doc.copybook-print-root{--copybook-grid:#22c55e;--copybook-guide:#22c55e73;--copybook-trace:#94a3b8;--copybook-radius:0px;--copybook-font:"KaiTi", "STKaiti", "Kaiti TC", "BiauKai", serif;--copybook-cell-mm:15mm;--copybook-cols:12;flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.copybook-page{--copybook-grid:inherit;--copybook-fit-scale:1;color:#0f172a;box-sizing:border-box;width:210mm;max-width:100%;height:297mm;min-height:297mm;padding:var(--copybook-page-pad-y,6mm) var(--copybook-page-pad-x,10mm);font-family:var(--copybook-font);background:#fff;border:1px solid #cbd5e1;display:block;position:relative;overflow:hidden;box-shadow:0 2px 12px #0f172a1f}.copybook-page-fit{width:max-content;transform:scale(var(--copybook-fit-scale,1));transform-origin:top;flex-direction:column;align-items:stretch;margin:0 auto;display:flex}.copybook-sheet{display:contents}.copybook-sheet-header{text-align:center;break-inside:avoid;page-break-inside:avoid;flex:none;margin-bottom:3mm}.copybook-sheet-title{margin:0 0 6px;font-family:inherit;font-size:1.15rem;font-weight:700}.copybook-sheet-meta{color:#334155;margin:0;font-size:.95rem}.copybook-sheet-empty{text-align:center;color:#64748b;margin:24px 0}.copybook-sheet-body{flex:auto;width:100%}.copybook-page-footer{text-align:center;color:#64748b;flex:none;margin-top:4mm;padding-top:2mm;font-size:.8rem}.copybook-block{break-inside:avoid;page-break-inside:avoid;width:100%}.copybook-row{grid-template-columns:repeat(var(--copybook-cols,12), var(--copybook-cell-mm,15mm));width:fit-content;max-width:100%;margin:0 auto;display:grid}.copybook-cell{box-sizing:border-box;width:var(--copybook-cell-mm,15mm);height:var(--copybook-cell-mm,15mm);aspect-ratio:auto;border:none;border-right:1.25px solid var(--copybook-grid);border-bottom:1.25px solid var(--copybook-grid);border-radius:var(--copybook-radius);justify-content:center;align-items:center;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden;container-type:size}.copybook-row .copybook-cell:first-child{border-left:1.25px solid var(--copybook-grid)}.copybook-sheet-body>.copybook-block:first-child>.copybook-row:first-child .copybook-cell{border-top:1.25px solid var(--copybook-grid)}.copybook-cell-guides{pointer-events:none;background:0 0;position:absolute;inset:0}.copybook-cell--fang .copybook-cell-guides{background:0 0}.copybook-cell--tianzi .copybook-cell-guides{background:linear-gradient(to right, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0), linear-gradient(to bottom, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0)}.copybook-cell--jiaocha .copybook-cell-guides{background:linear-gradient(45deg, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0), linear-gradient(-45deg, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0)}.copybook-cell--mizi .copybook-cell-guides{background:linear-gradient(to right, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0), linear-gradient(to bottom, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0), linear-gradient(45deg, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0), linear-gradient(-45deg, transparent calc(50% - .4px), var(--copybook-guide) 0, var(--copybook-guide) calc(50% + .4px), transparent 0)}.copybook-cell-char{z-index:1;font-size:calc(1.35rem * var(--copybook-font-scale,1));font-size:calc(70cqmin * var(--copybook-font-scale,1));font-weight:500;line-height:1;position:relative}.copybook-row--model .copybook-cell-char{color:#0f172a}.copybook-row--trace-solid .copybook-cell-char{color:color-mix(in srgb, var(--copybook-trace) 40%, transparent)}.copybook-row--trace-fill .copybook-cell-char{color:color-mix(in srgb, var(--copybook-trace) 55%, transparent)}.copybook-row--trace-dotted .copybook-cell-char{color:#0000;-webkit-text-stroke:.85px var(--copybook-trace)}.copybook-row--trace-outline .copybook-cell-char{color:#0000;-webkit-text-stroke:1.1px var(--copybook-trace)}.copybook-row--empty .copybook-cell-char{display:none}.hub-copybook-actions{flex-wrap:wrap;gap:8px;margin:10px 0 4px;display:flex}.copybook-admin{gap:16px;display:grid}@media (width>=900px){.copybook-admin{grid-template-columns:minmax(0,1.35fr) minmax(240px,.75fr);align-items:start}}.copybook-admin-preview{background:#e8eef5;border-radius:12px;min-width:0;max-height:min(78vh,900px);padding:12px;overflow:auto}.copybook-admin-preview-head{z-index:2;background:#e8eef5;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;padding-bottom:6px;display:flex;position:sticky;top:0}.copybook-admin-preview-label{color:var(--muted);margin:0;font-size:.85rem;font-weight:700}.copybook-admin-thumb{transform-origin:0 0;zoom:.72;border-radius:8px;max-height:min(52vh,520px);overflow:auto}.copybook-admin-controls{flex-direction:column;gap:10px;display:flex}.copybook-admin-controls select,.copybook-admin-controls input[type=text]{width:100%}.copybook-font-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.copybook-admin-controls input[type=color]{cursor:pointer;width:100%;min-height:40px;padding:4px}@media print{@page{size:A4 portrait;margin:0}html,body{background:#fff!important;height:auto!important;margin:0!important;padding:0!important;overflow:visible!important}body.copybook-printing .app-shell,body.copybook-printing .learn-ui-scale,.copybook-modal-backdrop,.no-print{display:none!important}body.copybook-printing .copybook-modal-root,.copybook-modal-root{width:100%!important;height:auto!important;box-shadow:none!important;z-index:auto!important;background:0 0!important;display:block!important;position:static!important;inset:auto!important}.copybook-modal-panel,.copybook-modal-scroll{width:100%!important;height:auto!important;max-height:none!important;box-shadow:none!important;background:0 0!important;margin:0!important;padding:0!important;display:block!important;position:static!important;overflow:visible!important}.copybook-doc.copybook-print-root{-webkit-print-color-adjust:exact;print-color-adjust:exact;gap:0!important;width:100%!important;display:block!important}.copybook-page{page-break-after:always;break-after:page;page-break-inside:avoid;break-inside:avoid;box-shadow:none!important;width:210mm!important;max-width:210mm!important;height:297mm!important;min-height:297mm!important;padding:var(--copybook-page-pad-y,6mm) var(--copybook-page-pad-x,10mm)!important;border:none!important;margin:0!important;position:relative!important;overflow:hidden!important}.copybook-page-fit{transform:scale(var(--copybook-fit-scale,1))!important;transform-origin:top!important}.copybook-page:last-child{page-break-after:auto;break-after:auto}.copybook-block{break-inside:avoid;page-break-inside:avoid}.copybook-sheet{display:contents}.copybook-sheet-header{margin-bottom:3mm}.copybook-sheet-title{font-size:14pt}.copybook-row{flex-wrap:nowrap!important;width:fit-content!important;max-width:100%!important;margin:0 auto!important;display:flex!important}.copybook-cell{-webkit-print-color-adjust:exact;print-color-adjust:exact;container-type:normal;width:var(--copybook-cell-mm)!important;height:var(--copybook-cell-mm)!important;flex:0 0 var(--copybook-cell-mm)!important;aspect-ratio:auto!important}.copybook-cell-char{font-size:calc(var(--copybook-cell-mm) * .7 * var(--copybook-font-scale,1))!important}.copybook-cell-guides{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
