.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:560px;display:flex;background:#fff;border-top:1px solid #e8eef8;padding:6px 0 calc(6px + env(safe-area-inset-bottom));z-index:50}.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--c-text-light);text-decoration:none;font-weight:600}.tab-icon{font-size:22px}.tab.on{color:var(--c-primary)}.login-wrap[data-v-ecfa8327]{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;background:linear-gradient(180deg,#dce9ff 0%,var(--c-bg) 45%)}.mascot[data-v-ecfa8327]{font-size:64px;animation:bounce-ecfa8327 2.4s ease-in-out infinite}@keyframes bounce-ecfa8327{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.app-title[data-v-ecfa8327]{font-size:30px;margin-top:8px;color:var(--c-text)}.app-slogan[data-v-ecfa8327]{color:var(--c-text-light);margin:6px 0 22px;font-size:14px}.form-card[data-v-ecfa8327]{width:100%;max-width:360px}.tabs[data-v-ecfa8327]{display:flex;background:#eef3fc;border-radius:12px;padding:4px;margin-bottom:16px}.tabs button[data-v-ecfa8327]{flex:1;border:none;background:transparent;padding:9px;border-radius:9px;font-size:15px;font-weight:600;color:var(--c-text-light);cursor:pointer}.tabs button.active[data-v-ecfa8327]{background:#fff;color:var(--c-primary);box-shadow:0 2px 6px #00000014}.error-box[data-v-ecfa8327]{margin-bottom:12px}.error[data-v-ecfa8327]{color:#e05656;font-size:13px}.guide-btn[data-v-ecfa8327]{margin-top:8px;border:none;background:#fff3f3;color:#d64545;font-size:13px;font-weight:600;padding:8px 12px;border-radius:10px;cursor:pointer;width:100%}.hint[data-v-ecfa8327]{text-align:center;font-size:12px;color:var(--c-text-light);margin-top:10px}.user-card[data-v-f3916f24]{display:flex;align-items:center;gap:14px}.user-avatar[data-v-f3916f24]{font-size:44px;width:56px;height:56px;display:flex;align-items:center;justify-content:center;background:#eaf2ff;border-radius:50%;flex-shrink:0}.user-info[data-v-f3916f24]{flex:1}.user-name[data-v-f3916f24]{font-size:18px;font-weight:800}.role-badge[data-v-f3916f24]{display:inline-block;font-size:11px;padding:2px 8px;border-radius:8px;margin-top:4px;background:#eef3fc;color:var(--c-text-light);font-weight:600}.role-badge.admin[data-v-f3916f24]{background:#fff1e0;color:#e0821a}.user-stats[data-v-f3916f24]{display:flex;flex-direction:column;gap:4px;align-items:flex-end}.us-item[data-v-f3916f24]{display:flex;align-items:baseline;gap:5px}.us-item b[data-v-f3916f24]{font-size:13px}.us-item i[data-v-f3916f24]{font-style:normal;font-size:10px;color:var(--c-text-light)}.section-title[data-v-f3916f24]{font-size:15px;margin-bottom:4px}.section-hint[data-v-f3916f24]{font-size:12px;color:var(--c-text-light);margin-bottom:14px}.avatar-row[data-v-f3916f24]{display:flex;flex-wrap:wrap;gap:8px}.av-btn[data-v-f3916f24]{width:46px;height:46px;font-size:26px;border:2px solid #e3eaf6;border-radius:12px;background:#fafcff;cursor:pointer}.av-btn.on[data-v-f3916f24]{border-color:var(--c-primary);background:#eaf2ff}.error[data-v-f3916f24]{color:#e05656;font-size:13px;margin-bottom:10px}.saved[data-v-f3916f24]{color:#2e9e5b;font-size:13px;margin-bottom:10px}.admin-btn[data-v-f3916f24]{background:#fff;color:var(--c-text);border:2px solid #e3eaf6;margin-top:4px}.logout-btn[data-v-f3916f24]{background:#fff;color:#e05656;border:2px solid #f0d5d5;margin-top:4px}.logout-btn[data-v-f3916f24]:active{background:#fef5f5}.who[data-v-42707ffb]{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:14px}.admin-btn[data-v-42707ffb]{background:#ffffff38;border:none;border-radius:10px;width:32px;height:32px;font-size:16px;cursor:pointer}.who-avatar[data-v-42707ffb]{font-size:22px}.who-name[data-v-42707ffb]{font-weight:600}.grade-bar[data-v-42707ffb]{display:flex;gap:8px;overflow-x:auto;padding-bottom:10px;scrollbar-width:none}.grade-bar[data-v-42707ffb]::-webkit-scrollbar{display:none}.grade-btn[data-v-42707ffb]{flex-shrink:0;border:2px solid #e3eaf6;background:#fff;border-radius:14px;padding:8px 14px;font-size:14px;font-weight:700;color:var(--c-text-light);cursor:pointer}.grade-btn i[data-v-42707ffb]{display:block;font-style:normal;font-size:10px;font-weight:400;opacity:.8}.grade-btn.on[data-v-42707ffb]{border-color:var(--c-primary);color:var(--c-primary);background:#eaf2ff}.unit-block[data-v-42707ffb]{background:#fff;border-radius:14px;margin-bottom:8px;overflow:hidden;box-shadow:0 1px 3px #0000000a;border:1px solid #eef3fb}.unit-block.open[data-v-42707ffb]{border-color:#c5d8f5;box-shadow:0 2px 8px #4f8ef71f}.unit-head[data-v-42707ffb]{display:flex;align-items:center;gap:10px;padding:14px 16px;cursor:pointer;transition:background .15s}.unit-head[data-v-42707ffb]:active{background:#f5f9ff}.unit-badge[data-v-42707ffb]{width:32px;height:32px;background:linear-gradient(135deg,var(--c-star),#ff8f3a);color:#fff;font-weight:800;font-size:15px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.unit-info[data-v-42707ffb]{flex:1;display:flex;flex-direction:column;gap:2px}.unit-title[data-v-42707ffb]{font-weight:700;font-size:15px}.unit-count[data-v-42707ffb]{font-size:11px;color:var(--c-text-light)}.unit-chevron[data-v-42707ffb]{color:#b8c5db;font-size:22px;font-weight:700;transition:transform .25s ease}.unit-chevron.open[data-v-42707ffb]{transform:rotate(90deg);color:var(--c-primary)}.unit-body[data-v-42707ffb]{border-top:1px solid #eef3fb}.unit-loading[data-v-42707ffb]{padding:20px;text-align:center;color:var(--c-text-light);font-size:13px}.text-row[data-v-42707ffb]{display:flex;align-items:center;gap:8px;padding:12px 16px;cursor:pointer;border-bottom:1px solid #f0f4fa}.text-row[data-v-42707ffb]:last-child{border-bottom:none}.text-row[data-v-42707ffb]:active{background:#f5f9ff}.t-title[data-v-42707ffb]{font-weight:600;flex:1;font-size:15px}.row-stars[data-v-42707ffb]{font-size:12px;color:var(--c-star);letter-spacing:1px}.t-author[data-v-42707ffb]{font-size:12px;color:var(--c-text-light)}.go[data-v-42707ffb]{color:#c5cfe0;font-size:20px}.unit-empty[data-v-42707ffb]{padding:16px;text-align:center;color:var(--c-text-light);font-size:13px}.expand-enter-active[data-v-42707ffb],.expand-leave-active[data-v-42707ffb]{transition:max-height .3s ease,opacity .2s ease;overflow:hidden;max-height:600px}.expand-enter-from[data-v-42707ffb],.expand-leave-to[data-v-42707ffb]{max-height:0;opacity:0}.review-card[data-v-42707ffb]{margin-bottom:12px;padding:4px 0;overflow:hidden}.review-head[data-v-42707ffb]{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer}.review-icon[data-v-42707ffb]{font-size:26px}.review-info[data-v-42707ffb]{flex:1;display:flex;flex-direction:column;gap:2px}.review-info b[data-v-42707ffb]{font-size:15px}.review-info i[data-v-42707ffb]{font-style:normal;font-size:11px;color:var(--c-text-light)}.review-arrow[data-v-42707ffb]{color:var(--c-text-light);transition:transform .2s}.review-arrow.open[data-v-42707ffb]{transform:rotate(180deg)}.review-list[data-v-42707ffb]{border-top:1px dashed #e8eef8}.review-row[data-v-42707ffb]{display:flex;align-items:center;gap:8px;padding:11px 14px;cursor:pointer;border-bottom:1px solid #f0f4fa;background:#fffdf5}.review-row[data-v-42707ffb]:last-child{border-bottom:none}.review-row[data-v-42707ffb]:active{background:#fff8e0}.r-title[data-v-42707ffb]{font-weight:700;font-size:14px;flex:1}.r-detail[data-v-42707ffb]{font-size:11px;color:#b45309;background:#fff1d6;border-radius:8px;padding:2px 8px}.r-overdue[data-v-42707ffb]{font-size:11px;color:#e05656}.review-card+.unit-block[data-v-42707ffb],.review-card[data-v-42707ffb]+*{margin-top:0}.tabbar-spacer[data-v-42707ffb]{height:72px}.head-card[data-v-d79f9ce8]{text-align:center;padding:20px 16px}.head-top[data-v-d79f9ce8]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.poem-title[data-v-d79f9ce8]{font-size:22px;margin-bottom:4px}.poem-author[data-v-d79f9ce8]{font-size:13px;color:var(--c-text-light)}.poem-meta[data-v-d79f9ce8]{font-size:12px;color:var(--c-text-light);margin-top:6px}.section-title[data-v-d79f9ce8]{font-size:15px;margin-bottom:10px}.sentence[data-v-d79f9ce8]{font-size:17px;line-height:1.9;padding:3px 0;letter-spacing:.5px}.sentence.center[data-v-d79f9ce8]{text-align:center}.notes-toggle[data-v-d79f9ce8]{border:none;background:none;color:var(--c-primary);font-size:14px;cursor:pointer;padding:2px 0;width:100%;text-align:left}.rec-empty[data-v-d79f9ce8]{font-size:13px;color:var(--c-text-light)}.rec-row[data-v-d79f9ce8]{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid #f0f3f8}.rec-row[data-v-d79f9ce8]:last-child{border-bottom:none}.rec-info[data-v-d79f9ce8]{display:flex;align-items:center;gap:10px;font-size:13px}.rec-dur[data-v-d79f9ce8],.rec-rate[data-v-d79f9ce8]{color:var(--c-text-light);font-size:12px}.rec-ops[data-v-d79f9ce8]{display:flex;gap:6px}.rec-btn[data-v-d79f9ce8]{border:1px solid #e3eaf6;background:#fff;border-radius:8px;width:34px;height:30px;cursor:pointer;font-size:13px}.rec-btn.play[data-v-d79f9ce8]{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.rec-btn.del[data-v-d79f9ce8]{color:#e05a4e}.notes[data-v-d79f9ce8]{font-size:13px;color:var(--c-text-light);line-height:1.8;margin-top:8px;white-space:pre-line}.modes[data-v-d79f9ce8]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.mode-btn[data-v-d79f9ce8]{border:2px solid #e3eaf6;background:#fff;border-radius:var(--radius);padding:16px 10px;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:15px;font-weight:700;color:var(--c-text);cursor:pointer;transition:transform .1s,border-color .15s}.mode-btn[data-v-d79f9ce8]:active{transform:scale(.95);border-color:var(--c-primary)}.stars.earned[data-v-d79f9ce8]{font-size:16px}.mode-icon[data-v-d79f9ce8]{font-size:30px}.mode-btn i[data-v-d79f9ce8]{font-style:normal;font-size:11px;color:var(--c-text-light);font-weight:400}.quiz-banner[data-v-d79f9ce8]{margin-top:12px;width:100%;display:flex;align-items:center;gap:12px;border:none;border-radius:var(--radius);padding:14px 16px;background:linear-gradient(100deg,#ff9f43,#ff7e5f);color:#fff;cursor:pointer;text-align:left;transition:transform .1s}.quiz-banner[data-v-d79f9ce8]:active{transform:scale(.98)}.quiz-banner .mode-icon[data-v-d79f9ce8]{font-size:28px}.quiz-info[data-v-d79f9ce8]{flex:1;display:flex;flex-direction:column;gap:2px}.quiz-info b[data-v-d79f9ce8]{font-size:16px}.quiz-info i[data-v-d79f9ce8]{font-style:normal;font-size:11px;opacity:.9}.quiz-go[data-v-d79f9ce8]{font-size:15px;font-weight:800;opacity:.95}.who[data-v-1df212ef]{display:flex;align-items:center;gap:6px;font-size:14px}.who-avatar[data-v-1df212ef]{font-size:22px}.who-name[data-v-1df212ef]{font-weight:600}.grade-bar[data-v-1df212ef]{display:flex;gap:8px;overflow-x:auto;padding-bottom:10px;scrollbar-width:none}.grade-bar[data-v-1df212ef]::-webkit-scrollbar{display:none}.grade-btn[data-v-1df212ef]{flex-shrink:0;border:2px solid #e3eaf6;background:#fff;border-radius:14px;padding:6px 14px;font-size:13px;font-weight:700;color:var(--c-text-light);cursor:pointer}.grade-btn.on[data-v-1df212ef]{border-color:var(--c-primary);color:var(--c-primary);background:#eaf2ff}.loading[data-v-1df212ef],.empty[data-v-1df212ef]{text-align:center;padding:30px;color:var(--c-text-light)}.stat-grid[data-v-1df212ef]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:12px}.stat-card[data-v-1df212ef]{background:var(--c-card);border-radius:14px;padding:12px 4px;display:flex;flex-direction:column;align-items:center;gap:4px;box-shadow:var(--shadow)}.stat-card.clickable[data-v-1df212ef]{cursor:pointer}.stat-card.clickable[data-v-1df212ef]:active{transform:scale(.96)}.daily-chart[data-v-1df212ef]{display:flex;align-items:flex-end;gap:4px;height:110px}.daily-col[data-v-1df212ef]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;cursor:pointer}.daily-bar[data-v-1df212ef]{width:70%;max-width:26px;background:linear-gradient(180deg,#6fa6ff,var(--c-primary));border-radius:4px 4px 0 0}.daily-bar.off[data-v-1df212ef]{background:#e7edf6}.daily-label[data-v-1df212ef]{font-size:10px;color:var(--c-text-light)}.daily-count[data-v-1df212ef]{font-size:10px;color:var(--c-primary);font-weight:700}.day-detail[data-v-1df212ef]{margin-top:10px;font-size:13px;color:var(--c-text);background:#eef3fc;border-radius:8px;padding:8px 10px}.day-hint[data-v-1df212ef]{margin-top:8px;font-size:12px;color:var(--c-text-light);text-align:center}.rec-row[data-v-1df212ef]{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid #f0f3f8}.rec-row[data-v-1df212ef]:last-child{border-bottom:none}.rec-main[data-v-1df212ef]{display:flex;flex-direction:column;gap:2px;font-size:14px}.rec-meta[data-v-1df212ef]{font-size:12px;color:var(--c-text-light)}.rec-ops[data-v-1df212ef]{display:flex;gap:6px}.rec-btn[data-v-1df212ef]{border:1px solid #e3eaf6;background:#fff;border-radius:8px;width:34px;height:30px;cursor:pointer;font-size:13px}.rec-btn.play[data-v-1df212ef]{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.stat-num[data-v-1df212ef]{font-size:14px;font-weight:800;color:var(--c-text);white-space:nowrap}.stat-label[data-v-1df212ef]{font-size:10px;color:var(--c-text-light)}.review-tip[data-v-1df212ef]{padding:12px 14px;margin-bottom:12px;font-size:13px;color:#b45309;background:#fff7e6;cursor:pointer}.review-tip b[data-v-1df212ef]{color:#d97706}.section[data-v-1df212ef]{padding:16px;margin-bottom:12px}.sec-title[data-v-1df212ef]{font-size:15px;font-weight:800;margin-bottom:12px}.radar-wrap[data-v-1df212ef]{display:flex;gap:12px;align-items:center}.radar[data-v-1df212ef]{width:150px;flex-shrink:0}.radar-legend[data-v-1df212ef]{flex:1;display:flex;flex-direction:column;gap:8px}.legend-row[data-v-1df212ef]{display:flex;align-items:center;gap:6px;font-size:12px}.legend-row span[data-v-1df212ef]{width:40px;color:var(--c-text-light)}.legend-row b[data-v-1df212ef]{width:32px;text-align:right}.legend-bar[data-v-1df212ef]{flex:1;height:6px;background:#eef3fb;border-radius:3px;overflow:hidden}.legend-bar i[data-v-1df212ef]{display:block;height:100%;background:linear-gradient(90deg,#4f8ef7,#6fa6ff);border-radius:3px}.legend-colors[data-v-1df212ef]{display:flex;gap:12px;font-size:11px;color:var(--c-text-light);margin-bottom:10px}.dot[data-v-1df212ef]{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;vertical-align:middle}.dot.good[data-v-1df212ef]{background:var(--c-green)}.dot.mid[data-v-1df212ef]{background:var(--c-star)}.dot.weak[data-v-1df212ef]{background:#f97316}.dot.none[data-v-1df212ef]{background:#d5deec}.heat-grid[data-v-1df212ef]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.heat-cell[data-v-1df212ef]{border-radius:12px;padding:10px 8px;display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;border:2px solid transparent;transition:transform .15s}.heat-cell[data-v-1df212ef]:active{transform:scale(.95)}.heat-cell.good[data-v-1df212ef]{background:#e5f6ee;border-color:#bfe6d2}.heat-cell.mid[data-v-1df212ef]{background:#fff4de;border-color:#ffe3ad}.heat-cell.weak[data-v-1df212ef]{background:#ffe9dc;border-color:#ffd0b5}.heat-cell.none[data-v-1df212ef]{background:#f2f5fa;border-color:#e3eaf5}.heat-title[data-v-1df212ef]{font-size:11px;font-weight:700;text-align:center;color:var(--c-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.3;min-height:28px}.heat-val[data-v-1df212ef]{font-size:11px;color:var(--c-text-light)}.empty-small[data-v-1df212ef]{text-align:center;color:var(--c-text-light);font-size:13px;padding:10px}.weak-row[data-v-1df212ef]{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid #f0f4fa}.weak-row[data-v-1df212ef]:last-child{border-bottom:none}.weak-main[data-v-1df212ef]{flex:1;min-width:0}.weak-sentence[data-v-1df212ef]{font-size:13px;font-weight:600;line-height:1.5;margin-bottom:4px}.weak-meta[data-v-1df212ef]{display:flex;gap:8px;font-size:11px;color:var(--c-text-light);margin-bottom:4px}.weak-count[data-v-1df212ef]{color:#e05656}.weak-bar[data-v-1df212ef]{height:5px;background:#eef3fb;border-radius:3px;overflow:hidden}.weak-bar i[data-v-1df212ef]{display:block;height:100%;background:#f97316;border-radius:3px}.practice-btn[data-v-1df212ef]{flex-shrink:0;border:none;background:var(--c-primary);color:#fff;border-radius:12px;padding:8px 10px;font-size:12px;font-weight:700;cursor:pointer}.practice-btn[data-v-1df212ef]:active{background:var(--c-primary-dark)}.summary[data-v-fd8f0a8a]{display:flex;padding:14px 8px}.sum-item[data-v-fd8f0a8a]{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px}.sum-num[data-v-fd8f0a8a]{font-size:17px;font-weight:800;color:var(--c-primary-dark)}.sum-label[data-v-fd8f0a8a]{font-size:12px;color:var(--c-text-light)}.badge-grid[data-v-fd8f0a8a]{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.badge-card[data-v-fd8f0a8a]{background:var(--c-card);border-radius:16px;box-shadow:var(--shadow);padding:14px 8px;text-align:center;display:flex;flex-direction:column;align-items:center}.badge-card.locked[data-v-fd8f0a8a]{opacity:.62}.badge-icon[data-v-fd8f0a8a]{font-size:34px;margin-bottom:6px}.badge-card.locked .badge-icon[data-v-fd8f0a8a]{filter:grayscale(1)}.badge-name[data-v-fd8f0a8a]{font-size:14px;font-weight:800;margin-bottom:4px}.badge-desc[data-v-fd8f0a8a]{font-size:11px;color:var(--c-text-light);line-height:1.4;margin-bottom:6px;min-height:30px}.badge-got[data-v-fd8f0a8a]{font-size:11px;color:var(--c-green);background:#e5f6ee;border-radius:8px;padding:3px 8px;font-weight:700}.badge-progress[data-v-fd8f0a8a]{width:100%;padding:0 4px}.badge-bar[data-v-fd8f0a8a]{height:8px;background:#e3eaf6;border-radius:6px;overflow:hidden;margin-bottom:3px}.badge-bar i[data-v-fd8f0a8a]{display:block;height:100%;background:var(--c-primary);border-radius:6px}.badge-progress-text[data-v-fd8f0a8a]{font-size:10px;color:var(--c-text-light)}.seg[data-v-0a74a06a]{display:flex;background:#e3eaf6;border-radius:14px;padding:4px;margin-bottom:14px}.seg button[data-v-0a74a06a]{flex:1;border:none;background:transparent;border-radius:11px;padding:9px;font-size:15px;font-weight:700;color:var(--c-text-light);cursor:pointer}.seg button.on[data-v-0a74a06a]{background:#fff;color:var(--c-primary-dark);box-shadow:0 2px 6px #4f8ef726}.user-row[data-v-0a74a06a],.text-row[data-v-0a74a06a]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0;border-bottom:1px solid #f0f4fb}.user-row[data-v-0a74a06a]:last-child,.text-row[data-v-0a74a06a]:last-child{border-bottom:none}.user-info[data-v-0a74a06a],.text-info[data-v-0a74a06a]{min-width:0}.user-info b[data-v-0a74a06a]{font-size:15px}.text-info b[data-v-0a74a06a]{font-size:15px;display:block}.text-meta[data-v-0a74a06a]{font-size:12px;color:var(--c-text-light)}.role-badge[data-v-0a74a06a]{font-size:11px;border-radius:8px;padding:2px 8px;margin-left:8px;font-weight:600}.role-badge.admin[data-v-0a74a06a]{background:#fff1e0;color:#e0821a}.role-badge.student[data-v-0a74a06a]{background:#e5f6ee;color:#2e9e63}.role-badge.disabled[data-v-0a74a06a]{background:#f0f4fb;color:#7b8ba6}.user-actions[data-v-0a74a06a]{display:flex;gap:8px;flex-shrink:0}.mini[data-v-0a74a06a]{border:1.5px solid #dfe8f5;background:#fff;border-radius:9px;padding:6px 12px;font-size:13px;font-weight:600;color:var(--c-primary-dark);cursor:pointer}.mini.danger[data-v-0a74a06a]{color:#e05656;border-color:#f5cfcf}.hint[data-v-0a74a06a]{font-size:12px;color:var(--c-text-light);text-align:center}.grade-bar[data-v-0a74a06a]{display:flex;gap:8px;margin-bottom:14px;overflow-x:auto;padding-bottom:2px}.grade-btn[data-v-0a74a06a]{flex-shrink:0;border:2px solid #e3eaf6;background:#fff;border-radius:12px;padding:8px 14px;font-size:14px;font-weight:700;color:var(--c-text-light);cursor:pointer}.grade-btn.on[data-v-0a74a06a]{color:#fff;background:var(--c-primary);border-color:var(--c-primary)}.grade-btn.add[data-v-0a74a06a]{color:var(--c-green);border-color:#cdeede}.editor[data-v-0a74a06a]{animation:slide-0a74a06a .2s ease}@keyframes slide-0a74a06a{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.ed-title[data-v-0a74a06a]{font-size:16px;margin-bottom:12px}.ed-grid[data-v-0a74a06a]{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}.ed-grid .field[data-v-0a74a06a]{grid-column:1 / -1}.ed-grid .field.half[data-v-0a74a06a]{grid-column:auto}.field select[data-v-0a74a06a],.field textarea[data-v-0a74a06a]{width:100%;border:2px solid #e3eaf6;border-radius:12px;padding:10px 12px;font-size:15px;outline:none;background:#fafcff;color:var(--c-text);font-family:inherit}.field textarea[data-v-0a74a06a]{line-height:1.8;resize:vertical}.field select[data-v-0a74a06a]:focus,.field textarea[data-v-0a74a06a]:focus{border-color:var(--c-primary)}.check-line[data-v-0a74a06a]{display:flex;align-items:center;gap:8px;padding-top:26px}.big-check[data-v-0a74a06a]{width:22px;height:22px;accent-color:var(--c-primary)}.ed-actions[data-v-0a74a06a]{display:flex;gap:10px;margin-top:4px}.ed-actions .btn[data-v-0a74a06a]{flex:1}.overlay[data-v-b6ec152e]{position:fixed;top:0;right:0;bottom:0;left:0;background:#2b3a558c;display:flex;align-items:center;justify-content:center;z-index:50;padding:24px}.panel[data-v-b6ec152e]{background:#fff;border-radius:24px;padding:28px 24px;width:100%;max-width:320px;text-align:center;animation:pop-b6ec152e .35s cubic-bezier(.34,1.56,.64,1)}@keyframes pop-b6ec152e{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}.big-emoji[data-v-b6ec152e]{font-size:56px}.title[data-v-b6ec152e]{font-size:22px;margin:8px 0 12px}.star-row[data-v-b6ec152e]{font-size:44px;letter-spacing:6px}.star[data-v-b6ec152e]{color:#e3e8f2}.star.on[data-v-b6ec152e]{color:var(--c-star);animation:stamp-b6ec152e .4s cubic-bezier(.34,1.56,.64,1) backwards}.star.on[data-v-b6ec152e]:nth-child(2){animation-delay:.15s}.star.on[data-v-b6ec152e]:nth-child(3){animation-delay:.3s}@keyframes stamp-b6ec152e{0%{transform:scale(2.2);opacity:0}to{transform:scale(1);opacity:1}}.reward-row[data-v-b6ec152e]{display:flex;justify-content:center;gap:12px;margin:12px 0 18px}.reward[data-v-b6ec152e]{font-size:14px;background:#f0f4fb;border-radius:10px;padding:5px 10px;color:var(--c-text)}.new-awards[data-v-b6ec152e]{margin:4px 0 14px;padding:10px;background:linear-gradient(135deg,#fff7e0,#ffe9f0);border-radius:14px}.new-awards-title[data-v-b6ec152e]{font-size:13px;font-weight:800;color:#e0821a;margin-bottom:6px}.new-award[data-v-b6ec152e]{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--c-text);padding:3px 0}.new-award-icon[data-v-b6ec152e]{font-size:20px}.confetti[data-v-b6ec152e]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none}.confetti span[data-v-b6ec152e]{position:absolute;top:-30px;animation:fall-b6ec152e 2.6s linear forwards}@keyframes fall-b6ec152e{to{transform:translateY(110vh) rotate(320deg);opacity:.4}}.progress-wrap[data-v-4ce32fea]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.progress-bar[data-v-4ce32fea]{flex:1;height:10px;background:#e3eaf6;border-radius:6px;overflow:hidden}.progress-bar i[data-v-4ce32fea]{display:block;height:100%;background:linear-gradient(90deg,var(--c-primary),#6fa6ff);border-radius:6px;transition:width .3s}.progress-text[data-v-4ce32fea]{font-size:12px;color:var(--c-text-light)}.read-card[data-v-4ce32fea]{min-height:200px}.read-card.center .sentence[data-v-4ce32fea]{text-align:center}.sentence[data-v-4ce32fea]{font-size:18px;line-height:1.9;padding:4px 6px;border-radius:8px;transition:all .25s}.sentence.first[data-v-4ce32fea]{text-align:center;font-weight:700;color:var(--c-text);background:#eef3fc;border-radius:8px;font-size:20px}.sentence.first2[data-v-4ce32fea]{text-align:center;font-size:13px;font-weight:400;color:var(--c-text-light);background:transparent;margin-bottom:10px}.sentence.cur[data-v-4ce32fea]{background:#fff7e0;color:#b57a00;font-weight:700;box-shadow:inset 0 0 0 2px #ffe3a0}.sentence.dim[data-v-4ce32fea]{opacity:.45}.py[data-v-4ce32fea]{display:block;font-size:12px;font-weight:400;color:#8aa0c4;margin-top:2px}.ctrl.small.on[data-v-4ce32fea]{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.tts-warn[data-v-4ce32fea]{font-size:13px;color:#b57a00;background:#fff7e0}.controls[data-v-4ce32fea]{padding:12px}.ctrl-row[data-v-4ce32fea]{display:flex;gap:10px}.ctrl-row+.ctrl-row[data-v-4ce32fea]{margin-top:10px}.ctrl[data-v-4ce32fea]{flex:1;border:2px solid #e3eaf6;background:#fff;border-radius:12px;padding:12px 6px;font-size:14px;font-weight:700;color:var(--c-text);cursor:pointer}.ctrl[data-v-4ce32fea]:disabled{opacity:.4}.ctrl.main[data-v-4ce32fea]{background:var(--c-primary);border-color:var(--c-primary);color:#fff;flex:1.4}.ctrl.main.stop[data-v-4ce32fea]{background:#ff8f6b;border-color:#ff8f6b}.ctrl.small[data-v-4ce32fea]{flex:none;padding:8px 14px;font-size:13px}.speed[data-v-4ce32fea]{flex:1;display:flex;align-items:center;gap:8px;font-size:13px;color:var(--c-text-light);padding:0 6px}.speed input[data-v-4ce32fea]{flex:1}.speed b[data-v-4ce32fea]{color:var(--c-text);width:44px;text-align:right}.done-btn[data-v-4ce32fea]{margin-top:4px;background:var(--c-green)}.q-title[data-v-09b255b6]{font-size:17px;margin-bottom:4px}.q-desc[data-v-09b255b6]{font-size:13px;color:var(--c-text-light);margin-bottom:14px}.lv-btn[data-v-09b255b6]{display:flex;align-items:center;gap:12px;width:100%;border:2px solid #e3eaf6;background:#fff;border-radius:14px;padding:14px;margin-bottom:10px;cursor:pointer;font-size:16px}.lv-btn[data-v-09b255b6]:active{transform:scale(.98)}.lv-emoji[data-v-09b255b6]{font-size:26px}.lv-name[data-v-09b255b6]{font-weight:800}.lv-desc[data-v-09b255b6]{margin-left:auto;font-size:12px;color:var(--c-text-light)}.progress-wrap[data-v-09b255b6]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.progress-bar[data-v-09b255b6]{flex:1;height:10px;background:#e3eaf6;border-radius:6px;overflow:hidden}.progress-bar i[data-v-09b255b6]{display:block;height:100%;background:linear-gradient(90deg,var(--c-primary),#6fa6ff);transition:width .3s}.progress-text[data-v-09b255b6]{font-size:12px;color:var(--c-text-light);white-space:nowrap}.fill-card[data-v-09b255b6]{min-height:160px;display:flex;align-items:center}.fill-card.center[data-v-09b255b6]{justify-content:center}.sentence-line[data-v-09b255b6]{font-size:19px;line-height:2.4;letter-spacing:1px}.ch[data-v-09b255b6]{white-space:pre-wrap}.blank-slot[data-v-09b255b6]{display:inline-block;min-width:26px;margin:0 3px;border-bottom:3px solid #b8c8e6;text-align:center;vertical-align:baseline}.blank-slot input[data-v-09b255b6]{width:26px;border:none;outline:none;background:transparent;font-size:19px;text-align:center;color:var(--c-primary-dark);font-weight:700}.blank-slot b[data-v-09b255b6]{color:var(--c-primary-dark);font-weight:700}.blank-slot.ok[data-v-09b255b6]{border-bottom-color:var(--c-green)}.blank-slot.ok b[data-v-09b255b6]{color:var(--c-green)}.blank-slot.bad[data-v-09b255b6]{border-bottom-color:#ff6b6b;background:#ffecec;border-radius:4px}.blank-slot.bad b[data-v-09b255b6]{color:#e05656}.inline-error[data-v-09b255b6]{color:#e05656;font-size:13px;text-align:center;margin:10px 0}.judge[data-v-09b255b6]{text-align:center;font-size:15px;font-weight:700;margin-bottom:12px}.judge.good[data-v-09b255b6]{color:var(--c-green)}.judge.bad[data-v-09b255b6]{color:#e05656}.action-row[data-v-09b255b6]{display:flex;gap:10px}.action-row .btn[data-v-09b255b6]{flex:1}.btn.warn[data-v-09b255b6]{background:#ff9f43}.actions[data-v-09b255b6]{margin-top:4px}.progress-wrap[data-v-2735fcc6]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.progress-bar[data-v-2735fcc6]{flex:1;height:10px;background:#e3eaf6;border-radius:6px;overflow:hidden}.progress-bar i[data-v-2735fcc6]{display:block;height:100%;background:linear-gradient(90deg,var(--c-primary),#6fa6ff);transition:width .3s}.progress-text[data-v-2735fcc6]{font-size:12px;color:var(--c-text-light)}.tip[data-v-2735fcc6]{text-align:center;font-size:13px;color:var(--c-text-light);margin-bottom:10px}.flip-card[data-v-2735fcc6]{perspective:1000px;height:220px;margin-bottom:14px;cursor:pointer}.flip-inner[data-v-2735fcc6]{position:relative;width:100%;height:100%;transition:transform .5s;transform-style:preserve-3d}.flip-card.flipped .flip-inner[data-v-2735fcc6]{transform:rotateY(180deg)}.flip-card.flipped[data-v-2735fcc6]{cursor:default}.face[data-v-2735fcc6]{position:absolute;top:0;right:0;bottom:0;left:0;backface-visibility:hidden;border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px}.face.back[data-v-2735fcc6]{background:linear-gradient(135deg,#4f8ef7,#6fa6ff);color:#fff}.face-index[data-v-2735fcc6]{font-size:13px;opacity:.85}.face-hint[data-v-2735fcc6]{font-size:22px;font-weight:800;letter-spacing:2px}.face-tap[data-v-2735fcc6]{font-size:13px;animation:pulse-2735fcc6 1.6s infinite}@keyframes pulse-2735fcc6{0%,to{opacity:.6}50%{opacity:1}}.face.front[data-v-2735fcc6]{background:#fff;transform:rotateY(180deg)}.face.front.center[data-v-2735fcc6]{text-align:center}.face-sentence[data-v-2735fcc6]{font-size:19px;line-height:2;letter-spacing:1px}.rate-box[data-v-2735fcc6]{text-align:center}.rate-q[data-v-2735fcc6]{font-size:15px;font-weight:700;margin-bottom:12px}.rate-row[data-v-2735fcc6]{display:flex;gap:10px}.rate-btn[data-v-2735fcc6]{flex:1;border:2px solid #e3eaf6;background:#fff;border-radius:14px;padding:12px 4px;font-size:13px;font-weight:700;cursor:pointer}.rate-btn[data-v-2735fcc6]:active{transform:scale(.95)}.rate-btn.no[data-v-2735fcc6]{color:#e08a5a;border-color:#ffd9c0;background:#fff6ef}.rate-btn.yes[data-v-2735fcc6]{color:#2e9e63;border-color:#c8ecd8;background:#effaf4}.rate-btn.great[data-v-2735fcc6]{color:#d69a00;border-color:#ffe3a0;background:#fff8e5}.tip[data-v-73b8e571]{text-align:center;font-size:13px;color:var(--c-text-light);margin-bottom:12px;line-height:1.8}.privacy[data-v-73b8e571]{font-size:11px;opacity:.75}.hint-card[data-v-73b8e571]{min-height:140px}.hint-line[data-v-73b8e571]{font-size:17px;line-height:1.9;color:var(--c-text-light);letter-spacing:1px}.hint-line.center[data-v-73b8e571]{text-align:center}.inline-error[data-v-73b8e571]{color:#e05656;font-size:13px;text-align:center;margin:10px 0}.rec-box[data-v-73b8e571]{text-align:center;padding:22px 16px}.rec-btn[data-v-73b8e571]{border:none;background:linear-gradient(135deg,#ff8fab,#ff6b8a);color:#fff;width:110px;height:110px;border-radius:50%;font-size:15px;font-weight:800;cursor:pointer;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;box-shadow:0 8px 20px #ff6b8a59;animation:breathe-73b8e571 2s infinite}@keyframes breathe-73b8e571{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.rec-icon[data-v-73b8e571]{font-size:34px}.rec-hint[data-v-73b8e571]{font-size:12px;color:var(--c-text-light);margin-top:12px}.wave[data-v-73b8e571]{display:flex;justify-content:center;gap:5px;height:40px;align-items:center}.wave i[data-v-73b8e571]{width:5px;height:10px;background:var(--c-pink);border-radius:3px;animation:wv-73b8e571 .8s ease-in-out infinite alternate}@keyframes wv-73b8e571{0%{height:8px}to{height:34px}}.rec-time[data-v-73b8e571]{font-size:26px;font-weight:800;color:var(--c-pink);margin:8px 0 14px;font-variant-numeric:tabular-nums}.rec-time.done[data-v-73b8e571]{color:var(--c-green)}.stop-btn[data-v-73b8e571]{max-width:260px;margin:0 auto;background:#ff6b6b}.done-actions[data-v-73b8e571]{display:flex;flex-direction:column;gap:10px;margin-bottom:6px}.play-btn[data-v-73b8e571]{background:var(--c-primary)}.rate-title[data-v-73b8e571]{font-size:14px;font-weight:700;margin:14px 0 10px}.rate-row[data-v-73b8e571]{display:flex;gap:8px}.rate-btn[data-v-73b8e571]{flex:1;border:2px solid #e3eaf6;background:#fff;border-radius:12px;padding:10px 2px;font-size:12px;font-weight:700;cursor:pointer}.rate-btn.no[data-v-73b8e571]{color:#e08a5a;border-color:#ffd9c0;background:#fff6ef}.rate-btn.yes[data-v-73b8e571]{color:#2e9e63;border-color:#c8ecd8;background:#effaf4}.rate-btn.great[data-v-73b8e571]{color:#d69a00;border-color:#ffe3a0;background:#fff8e5}.progress-wrap[data-v-817f8d0c]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.progress-bar[data-v-817f8d0c]{flex:1;height:10px;background:#e3eaf6;border-radius:6px;overflow:hidden}.progress-bar i[data-v-817f8d0c]{display:block;height:100%;background:linear-gradient(90deg,#ff9f43,#ff6b6b);transition:width .3s}.progress-text[data-v-817f8d0c]{font-size:12px;color:var(--c-text-light);white-space:nowrap}.q-card[data-v-817f8d0c]{text-align:center;padding:22px 16px;position:relative}.type-chip[data-v-817f8d0c]{display:inline-block;font-size:12px;font-weight:700;color:#fff;background:linear-gradient(90deg,#ff9f43,#ff7e5f);border-radius:20px;padding:4px 12px;margin-bottom:14px}.q-text[data-v-817f8d0c]{font-size:20px;font-weight:700;line-height:1.8;letter-spacing:.5px;word-break:break-all}.q-text.long[data-v-817f8d0c]{font-size:18px}.q-hint[data-v-817f8d0c]{font-size:12px;color:var(--c-text-light);margin-top:10px}.options[data-v-817f8d0c]{display:flex;flex-direction:column;gap:10px;margin-top:14px}.opt[data-v-817f8d0c]{display:flex;align-items:center;gap:12px;border:2px solid #e3eaf6;background:#fff;border-radius:14px;padding:14px;font-size:16px;cursor:pointer;transition:transform .1s,border-color .15s,background .15s;text-align:left}.opt[data-v-817f8d0c]:active{transform:scale(.98)}.opt-letter[data-v-817f8d0c]{flex-shrink:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#f0f4fb;font-weight:800;font-size:14px;color:var(--c-primary-dark)}.opt-text[data-v-817f8d0c]{flex:1;line-height:1.5;word-break:break-all}.opt-mark[data-v-817f8d0c]{font-size:18px;font-weight:900}.opt.right[data-v-817f8d0c]{border-color:var(--c-green);background:#effaf0}.opt.right .opt-letter[data-v-817f8d0c]{background:var(--c-green);color:#fff}.opt.right .opt-mark[data-v-817f8d0c]{color:var(--c-green)}.opt.wrong[data-v-817f8d0c]{border-color:#ff6b6b;background:#ffecec;animation:shake-817f8d0c .35s}.opt.wrong .opt-letter[data-v-817f8d0c]{background:#ff6b6b;color:#fff}.opt.dim[data-v-817f8d0c]{opacity:.5}.wrong-tip[data-v-817f8d0c]{margin-top:12px;text-align:center;font-size:14px;font-weight:700;color:var(--c-green);background:#effaf0;border-radius:10px;padding:8px}@keyframes shake-817f8d0c{0%,to{transform:translate(0)}25%{transform:translate(-5px)}75%{transform:translate(5px)}}:root{--c-primary: #4f8ef7;--c-primary-dark: #3a6fd8;--c-bg: #f0f4fb;--c-card: #ffffff;--c-text: #2b3a55;--c-text-light: #7b8ba6;--c-star: #ffb43a;--c-green: #4ec48a;--c-pink: #ff8fab;--c-purple: #a78bfa;--radius: 18px;--shadow: 0 4px 16px rgba(79, 142, 247, .12)}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}html,body{height:100%;font-family:PingFang SC,Microsoft YaHei,system-ui,-apple-system,sans-serif;background:var(--c-bg);color:var(--c-text)}#app{min-height:100%;display:flex;flex-direction:column}.tabbar-spacer{height:72px}.page{flex:1;max-width:560px;width:100%;margin:0 auto;padding:16px 16px calc(24px + env(safe-area-inset-bottom))}.topbar{display:flex;align-items:center;gap:10px;padding:14px 16px;padding-top:calc(14px + env(safe-area-inset-top));background:linear-gradient(135deg,#4f8ef7,#6fa6ff);color:#fff}.topbar .back{background:#ffffff38;border:none;color:#fff;width:34px;height:34px;border-radius:12px;font-size:18px;cursor:pointer}.topbar .title{font-size:18px;font-weight:700;flex:1}.topbar .sub{font-size:12px;opacity:.85}.card{background:var(--c-card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}.btn{display:block;width:100%;border:none;border-radius:14px;padding:14px;font-size:16px;font-weight:700;cursor:pointer;transition:transform .08s,opacity .15s;color:#fff;background:var(--c-primary)}.btn:active{transform:scale(.97)}.btn.ghost{background:#fff;color:var(--c-primary);border:2px solid var(--c-primary)}.btn.small{padding:8px 14px;width:auto;font-size:14px}.field{margin-bottom:12px}.field label{display:block;font-size:13px;color:var(--c-text-light);margin-bottom:6px}.field input{width:100%;border:2px solid #e3eaf6;border-radius:12px;padding:12px 14px;font-size:16px;outline:none;background:#fafcff;color:var(--c-text)}.field input:focus{border-color:var(--c-primary)}.tag{display:inline-block;font-size:11px;padding:2px 8px;border-radius:8px;font-weight:600}.tag.poem{background:#fff1e0;color:#e0821a}.tag.classical{background:#efe7ff;color:#7c5cd6}.tag.modern{background:#e5f6ee;color:#2e9e63}.tag.daily{background:#ffe9f0;color:#e0567f}.stars{color:var(--c-star);letter-spacing:2px;font-size:13px}.loading{text-align:center;color:var(--c-text-light);padding:40px 0}.toast{position:fixed;left:50%;bottom:90px;transform:translate(-50%);background:#2b3a55e0;color:#fff;padding:10px 18px;border-radius:12px;font-size:14px;z-index:99;animation:fadein .2s}@keyframes fadein{0%{opacity:0}to{opacity:1}}.empty{text-align:center;color:var(--c-text-light);padding:30px 0}
