@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&family=Playfair+Display:wght@600;700&display=swap";.react-calendar{width:350px;max-width:100%;background:#fff;border:1px solid #a0a096;font-family:Arial,Helvetica,sans-serif;line-height:1.125em}.react-calendar--doubleView{width:700px}.react-calendar--doubleView .react-calendar__viewContainer{display:flex;margin:-.5em}.react-calendar--doubleView .react-calendar__viewContainer>*{width:50%;margin:.5em}.react-calendar,.react-calendar *,.react-calendar *:before,.react-calendar *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.react-calendar button{margin:0;border:0;outline:none}.react-calendar button:enabled:hover{cursor:pointer}.react-calendar__navigation{display:flex;height:44px;margin-bottom:1em}.react-calendar__navigation button{min-width:44px;background:none}.react-calendar__navigation button:disabled{background-color:#f0f0f0}.react-calendar__navigation button:enabled:hover,.react-calendar__navigation button:enabled:focus{background-color:#e6e6e6}.react-calendar__month-view__weekdays{text-align:center;text-transform:uppercase;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__weekdays__weekday{padding:.5em}.react-calendar__month-view__weekNumbers .react-calendar__tile{display:flex;align-items:center;justify-content:center;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__days__day--weekend{color:#d10000}.react-calendar__month-view__days__day--neighboringMonth,.react-calendar__decade-view__years__year--neighboringDecade,.react-calendar__century-view__decades__decade--neighboringCentury{color:#757575}.react-calendar__year-view .react-calendar__tile,.react-calendar__decade-view .react-calendar__tile,.react-calendar__century-view .react-calendar__tile{padding:2em .5em}.react-calendar__tile{max-width:100%;padding:10px 6.6667px;background:none;text-align:center;font:inherit;font-size:.833em}.react-calendar__tile:disabled{background-color:#f0f0f0;color:#ababab}.react-calendar__month-view__days__day--neighboringMonth:disabled,.react-calendar__decade-view__years__year--neighboringDecade:disabled,.react-calendar__century-view__decades__decade--neighboringCentury:disabled{color:#cdcdcd}.react-calendar__tile:enabled:hover,.react-calendar__tile:enabled:focus{background-color:#e6e6e6}.react-calendar__tile--now{background:#ffff76}.react-calendar__tile--now:enabled:hover,.react-calendar__tile--now:enabled:focus{background:#ffffa9}.react-calendar__tile--hasActive{background:#76baff}.react-calendar__tile--hasActive:enabled:hover,.react-calendar__tile--hasActive:enabled:focus{background:#a9d4ff}.react-calendar__tile--active{background:#006edc;color:#fff}.react-calendar__tile--active:enabled:hover,.react-calendar__tile--active:enabled:focus{background:#1087ff}.react-calendar--selectRange .react-calendar__tile--hover{background-color:#e6e6e6}:root{--bg: #F5F0EB;--surface: #FAF8F5;--text: #2D2A24;--text-secondary: #8A8580;--primary: #C9953C;--primary-dark: #B5822E;--danger: #9B4A3E;--warning: #A8884E;--success: #4A7C6B;--border: #E5DDD3;--radius: 16px;--shadow: 0 1px 3px rgba(45,42,36,.06), 0 1px 2px rgba(45,42,36,.04);--font-size: 16px;--touch-target: 44px;--book1: #C9953C;--book2: #4A7C6B;--book3: #A8884E;--book4: #9B4A3E;--ease-apple: cubic-bezier(.25, .1, .25, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--duration-fast: .2s;--duration-normal: .3s}*{box-sizing:border-box;margin:0;padding:0}html{font-size:var(--font-size);-webkit-text-size-adjust:100%}body{font-family:Inter,Source Han Sans SC,system-ui,-apple-system,PingFang SC,Hiragino Sans GB,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;overscroll-behavior:none;-webkit-overflow-scrolling:touch}body h1,body h2,body h3,body .card-header h3,body .header-title,body .tuning-header h2,body .score-panel-header h3{font-family:Playfair Display,"Source Han Serif SC",serif;font-weight:600;letter-spacing:.02em}body .ring-score,body .detail-value,body .tuning-live-value,body .stat-value,body .word-score-badge{font-family:JetBrains Mono,SF Mono,monospace;font-variant-numeric:tabular-nums}.app{max-width:1200px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.header-brand{display:flex;align-items:center;gap:8px}.header-logo{font-size:24px}.header-title{font-size:1.1rem;font-weight:700;color:var(--primary)}.header-nav{display:flex;gap:4px}.nav-btn{position:relative;display:flex;align-items:center;gap:4px;padding:8px 12px;border:none;border-radius:8px;background:transparent;font-size:.85rem;color:var(--text-secondary);cursor:pointer;min-height:var(--touch-target);transition:all .15s}.nav-btn.active{background:var(--primary);color:#fff}.nav-btn:active{transform:scale(.96)}.nav-icon{font-size:1.1rem}.badge{position:absolute;top:4px;right:4px;background:var(--danger);color:#fff;font-size:.7rem;font-weight:700;min-width:18px;height:18px;border-radius:9px;display:flex;align-items:center;justify-content:center;padding:0 4px}.app-main{flex:1;padding:16px}.app-footer{text-align:center;padding:12px;font-size:.75rem;color:var(--text-secondary);border-top:1px solid var(--border)}.card{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);padding:16px;margin-bottom:16px}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-header h3{font-size:1rem;font-weight:600}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 20px;border:2px solid var(--border);border-radius:8px;background:var(--surface);font-size:.9rem;font-weight:500;color:var(--text);cursor:pointer;min-height:var(--touch-target);transition:all .15s;touch-action:manipulation}.btn:active{transform:scale(.96)}.btn:disabled{opacity:.5;pointer-events:none}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-outline{background:transparent;border-color:var(--border)}.btn-sm{padding:6px 12px;font-size:.8rem;min-height:36px}.btn-full{width:100%;margin-top:8px}.btn-xf{padding:10px 20px;background:linear-gradient(135deg,#1e90ff,#00bfff);color:#fff;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;transition:opacity .2s,transform .1s}.btn-xf:active{transform:scale(.97)}.btn-xf:disabled{opacity:.5;cursor:not-allowed}.btn-azure{padding:10px 20px;background:linear-gradient(135deg,#0078d4,#00a4ef);color:#fff;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;transition:opacity .2s,transform .1s}.btn-azure:active{transform:scale(.97)}.btn-azure:disabled{opacity:.5;cursor:not-allowed}.btn-loop-record{background:linear-gradient(135deg,#3498db,#8e44ad);color:#fff;border:none;padding:8px 16px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:transform .1s,opacity .2s}.btn-loop-record:hover{opacity:.9}.btn-loop-record:active{transform:scale(.97)}.btn-loop-record:disabled{opacity:.5;cursor:not-allowed}.loop-record-group{display:flex;align-items:center;gap:8px;margin-top:8px}.loop-count-selector{display:flex;align-items:center;gap:4px;background:#f0f0f0;border-radius:8px;padding:2px 6px}.loop-count-selector .loop-label{font-size:12px;color:#666}.loop-count-selector .loop-num{font-size:16px;font-weight:700;color:#2c3e50;min-width:24px;text-align:center}.btn-count{background:#fff;border:1px solid #ddd;border-radius:6px;width:28px;height:28px;font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s}.btn-count:hover{background:#e8f0fe}.btn-count:active{background:#d0e3fc}.btn-count:disabled{opacity:.4;cursor:not-allowed}.loop-indicator{background:linear-gradient(135deg,#3498db22,#8e44ad22);border:1px solid #3498db44;border-radius:8px;padding:6px 14px}.btn-record{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px 48px;background:var(--danger);color:#fff;border:none;border-radius:20px;font-size:1.1rem;font-weight:600;cursor:pointer;transition:all .15s;min-height:80px;touch-action:manipulation}.btn-record:active{transform:scale(.95)}.record-icon{font-size:2rem}.record-error{margin-top:8px;padding:8px 12px;background:#fff3cd;color:#856404;border:1px solid #FFEEBA;border-radius:6px;font-size:.85rem;text-align:center}.btn-stop-recording{padding:10px 24px;background:var(--danger);color:#fff;border:none;border-radius:8px;font-size:.9rem;cursor:pointer;min-height:var(--touch-target)}.stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.stat-card{background:var(--surface);border-radius:var(--radius);padding:12px;text-align:center;border:1px solid var(--border);border-top:3px solid var(--border)}.stat-card.accent-red{border-top-color:var(--danger)}.stat-card.accent-yellow{border-top-color:var(--warning)}.stat-card.accent-green{border-top-color:var(--success)}.stat-card.accent-blue{border-top-color:var(--primary)}.stat-value{font-size:1.5rem;font-weight:700}.stat-label{font-size:.75rem;color:var(--text-secondary);margin-top:4px}.lesson-list-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.lesson-list-header h2{font-size:1.3rem}.search-bar{flex:1;max-width:300px}.search-input{width:100%;padding:8px 12px;border:2px solid var(--border);border-radius:8px;font-size:.9rem;background:var(--surface)}.book-filters{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.filter-btn{padding:8px 16px;border:2px solid var(--border);border-radius:20px;background:var(--surface);font-size:.85rem;cursor:pointer;min-height:var(--touch-target);transition:all .15s}.filter-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}.lesson-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.lesson-card{background:var(--surface);border-radius:var(--radius);padding:16px;border:1px solid var(--border);cursor:pointer;transition:all .15s;touch-action:manipulation}.lesson-card:active{transform:scale(.98)}.lesson-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.book-badge{font-size:.7rem;color:#fff;padding:2px 8px;border-radius:10px}.lesson-num{font-size:.85rem;color:var(--text-secondary);font-weight:600}.lesson-title{font-size:.95rem;margin-bottom:6px}.lesson-preview{font-size:.8rem;color:var(--text-secondary);margin-bottom:8px;line-height:1.4}.lesson-meta{display:flex;gap:12px;font-size:.75rem;color:var(--text-secondary)}.no-audio-badge{color:var(--warning);font-weight:500}.lesson-view{display:flex;flex-direction:column;min-height:100dvh}.lesson-topbar{display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}.btn-back{padding:8px 12px;border:none;background:transparent;font-size:.9rem;color:var(--primary);cursor:pointer;min-height:var(--touch-target)}.lesson-title-bar{flex:1;font-size:1rem;font-weight:600}.mode-toggle{display:flex;border-radius:8px;overflow:hidden;border:2px solid var(--border)}.mode-btn{padding:6px 12px;border:none;background:var(--surface);font-size:.8rem;cursor:pointer;min-height:36px}.mode-btn.active{background:var(--primary);color:#fff}.lesson-content{display:flex;flex:1;gap:16px;align-items:flex-start;min-height:0}.sentence-sidebar{width:280px;max-height:calc(100vh - 140px);border-right:1px solid var(--border);background:var(--surface);padding:12px;flex-shrink:0;display:flex;flex-direction:column}.sentence-list{flex:1;overflow-y:auto;min-height:0;scrollbar-width:thin;scrollbar-color:#cbd5e0 transparent}.sentence-list::-webkit-scrollbar{width:5px}.sentence-list::-webkit-scrollbar-thumb{background:#cbd5e0;border-radius:4px}.sidebar-scroll-btns{display:flex;gap:4px;justify-content:center;padding-top:6px;border-top:1px solid #e2e8f0;margin-top:4px}.sidebar-scroll-btns button{width:28px;height:28px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;color:#64748b;font-size:.7rem;cursor:pointer}.sidebar-scroll-btns button:hover{background:#e2e8f0}.sentence-sidebar h4{font-size:.85rem;margin-bottom:8px;color:var(--text-secondary)}.sentence-list{display:flex;flex-direction:column;gap:4px}.sentence-item{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:none;border-radius:8px;background:transparent;cursor:pointer;text-align:left;font-size:.8rem;line-height:1.4;transition:all .15s}.sentence-item.active{background:#4a90d91f;font-weight:600}.sentence-num{background:var(--bg);min-width:24px;height:24px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:600;flex-shrink:0;margin-top:1px}.sentence-item.active .sentence-num{background:var(--primary);color:#fff}.sentence-text-preview{flex:1;word-break:break-word;line-height:1.4}.sentence-time{font-size:.7rem;color:var(--text-secondary);flex-shrink:0;margin-top:1px}.lesson-main{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px}.lesson-guide-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:100;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease}.lesson-guide-card{background:#fff;border-radius:16px;padding:28px 32px;max-width:400px;text-align:center;box-shadow:0 16px 48px #0003}.lesson-guide-card h3{font-size:1.2rem;margin-bottom:20px}.guide-steps{display:flex;flex-direction:column;gap:16px;margin-bottom:20px}.guide-step{display:flex;align-items:flex-start;gap:12px;text-align:left}.guide-num{width:24px;height:24px;border-radius:50%;background:#3b82f6;color:#fff;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.guide-icon{font-size:1.5rem;flex-shrink:0}.guide-step strong{display:block;font-size:.9rem;margin-bottom:2px}.guide-step p{font-size:.8rem;color:#64748b;margin:0}.player-area{position:relative;display:flex;flex-direction:column;gap:8px}.waveform-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.waveform-scroll canvas{min-width:100%}.waveform-scroll::-webkit-scrollbar{height:6px}.waveform-scroll::-webkit-scrollbar-thumb{background:#cbd5e0;border-radius:3px}.player-area .score-panel{position:absolute;top:0;left:0;right:0;z-index:10;margin:0;box-shadow:0 4px 24px #00000026}.align-status{font-size:.85rem;padding:8px 12px;border-radius:8px;background:#ebf8ff;color:#2b6cb0;text-align:center;animation:pulse 1.5s infinite}.align-status.align-done{background:#f0fff4;color:#276749;animation:none}.align-hint{font-size:.75rem;opacity:.7;margin-left:8px}.waveform-container{background:var(--surface);border-radius:var(--radius);padding:12px;border:1px solid var(--border)}.waveform-canvas{width:100%;border-radius:8px}.waveform-hint{font-size:.7rem;color:var(--text-secondary);text-align:center;margin-top:4px}.action-bar{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 6px;background:var(--surface);border-radius:14px;border:1px solid var(--border);width:72px}.action-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:60px;height:60px;border:2px solid #e2e8f0;border-radius:4px;background:var(--surface);cursor:pointer;transition:all .15s;font-family:inherit;padding:6px 4px}.action-btn:hover{border-color:#93c5fd;background:#eff6ff;transform:scale(1.05)}.action-btn:active{transform:scale(.95)}.action-btn.active{border-color:#3b82f6;background:#dbeafe}.action-icon{font-size:1.3rem;line-height:1}.action-label{font-size:.7rem;font-weight:600;color:#475569;line-height:1}.action-btn.loop-step-1{border-color:#f59e0b;background:#fef3c7}.action-btn.loop-step-2{border-color:#10b981;background:#d1fae5}.action-btn.action-record{border-color:#ef4444;background:#fef2f2}.action-btn.action-record:hover{background:#fecaca}.action-btn.action-record.active{border-color:#dc2626;background:#fecaca;animation:pulse-border 1s infinite}@keyframes pulse-border{0%,to{box-shadow:0 0 #ef444466}50%{box-shadow:0 0 0 8px #ef444400}}.action-btn.action-loop-record{border-color:#8b5cf6;background:#f5f3ff}.action-btn.action-playback{border-color:#10b981;background:#ecfdf5}.action-btn.action-playback.disabled{border-color:#e2e8f0;background:#f8fafc;opacity:.4;cursor:default;pointer-events:none}.action-timer,.action-sub{font-size:.65rem;color:#94a3b8;text-align:center;line-height:1.3}.action-sub.ready{color:#10b981;font-weight:600}.action-link{background:none;border:none;color:#ef4444;cursor:pointer;font-size:.65rem;text-decoration:underline;padding:0}.action-group-divider{width:100%;display:flex;align-items:center;margin:6px 0 2px}.action-group-divider:before,.action-group-divider:after{content:"";flex:1;height:1px;background:#e2e8f0}.action-group-label{font-size:.55rem;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:1px;padding:0 6px}.action-btn.action-classical{border-color:#d4a017;background:linear-gradient(135deg,#fff9e6,#fef3c7);box-shadow:0 0 0 1px #d4a0174d}.action-btn.action-classical:hover{background:linear-gradient(135deg,#fef3c7,#fde68a);border-color:#b8860b;box-shadow:0 0 0 3px #d4a01759}.action-btn.action-assess{border-color:#10b981;background:#ecfdf5}.action-btn.action-assess:hover{background:#d1fae5}.action-btn.action-azure{border-color:#3b82f6;background:#eff6ff}.action-btn.action-retry{border-color:#f59e0b;background:#fffbeb}.action-btn.action-discard{border-color:#e2e8f0;background:#f8fafc}.action-btn.action-alt{border-color:#d1fae5;background:#f0fdf4}.lesson-right{flex-shrink:0;position:sticky;top:12px}.playback-controls-kid{background:var(--surface);border-radius:var(--radius);padding:8px 14px;border:1px solid var(--border)}.playback-compact{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap}.time-display-kid{font-size:1rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text);white-space:nowrap}.time-sep-kid{color:var(--text-secondary);margin:0 4px}.time-total-kid{color:var(--text-secondary);font-weight:400}.btn-nav-sentence{width:36px;height:36px;border:2px solid #e2e8f0;border-radius:10px;background:#f8fafc;font-size:1.2rem;font-weight:700;color:#475569;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;flex-shrink:0}.btn-nav-sentence:hover:not(:disabled){border-color:#93c5fd;background:#eff6ff}.btn-nav-sentence:disabled{opacity:.3;cursor:default}.sentence-progress-kid{font-size:.75rem;font-weight:600;color:#94a3b8;white-space:nowrap;min-width:32px;text-align:center}.btn-speed-tag{padding:2px 8px;font-size:.7rem;font-weight:700;color:#6366f1;background:#eef2ff;border:1px solid #c7d2fe;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .1s}.btn-speed-tag:hover{background:#e0e7ff;border-color:#a5b4fc}.text-display{background:var(--surface);border-radius:var(--radius);padding:16px;border:1px solid var(--border)}.ref-text-preview{background:#fefcbf;border:1px solid #D69E2E;border-radius:6px;padding:6px 12px;margin:8px 0;font-size:.82rem;color:#975a16}.ref-text-preview strong{color:#744210}.text-display-wrapper{position:relative}.btn-selection-mode{position:absolute;top:-8px;right:0;padding:3px 10px;border:1px solid #CBD5E0;border-radius:6px;background:#fff;font-size:.72rem;cursor:pointer;color:#4a5568;transition:all .15s}.btn-selection-mode:hover{background:#edf2f7}.btn-selection-mode.active{background:#fefcbf;border-color:#d69e2e;color:#975a16;font-weight:600}.selection-count{position:absolute;top:-8px;right:100px;font-size:.72rem;color:#975a16;background:#fefcbf;padding:3px 8px;border-radius:6px;font-weight:600}.word-selected{border-radius:4px}.text-display-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:8px}.text-display-header h3{font-size:.95rem}.text-display-hint{font-size:.72rem;color:#a0aec0;display:flex;align-items:center;gap:4px}.text-display-info{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.badge-timestamps{font-size:.7rem;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:2px 8px;border-radius:10px;font-weight:600}.score-legend{display:flex;gap:12px;font-size:.75rem}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:10px;height:10px;border-radius:50%;display:inline-block}.legend-dot.bad{background:var(--danger)}.legend-dot.ok{background:var(--warning)}.legend-dot.good{background:var(--success)}.text-content{font-size:1.05rem;line-height:2;max-height:300px;overflow-y:auto}.sentence-block{padding:2px 0}.sentence-block.sentence-active{background:#4a90d90f;padding-left:8px;border-radius:4px}.sentence-block.sentence-title,.sentence-block.sentence-title .word-text,.sentence-block.sentence-title .word-token-plain{font-weight:700;font-size:1.05rem}.sentence-block.sentence-body{font-weight:400;font-size:1rem}.word-token.has-score{font-weight:500}.word-token.word-current{font-weight:700;text-shadow:0 0 6px rgba(74,144,217,.25);animation:wordPulse .3s ease-in-out}@keyframes wordPulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.word-token-pitch{display:inline-block;vertical-align:text-bottom;padding:0 3px;margin-right:.2em}.word-token-pitch .word-text{display:inline;line-height:1.4}.pitch-sparkline{display:block;height:9px;margin-bottom:4px}.word-token-plain{display:inline-block;vertical-align:text-bottom;padding:13px 3px 0;margin-right:.2em}.word-corrected{outline:2px dashed #3182CE;outline-offset:1px;border-radius:2px}.word-corrected.word-stressed{outline-color:#e53e3e}.word-token{-webkit-user-select:none;user-select:none}.word-token-pitch .word-space{display:none}.stress-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#e53e3e;vertical-align:super;margin-right:2px;flex-shrink:0}.trend-icon{color:#2b6cb0;font-weight:600;font-size:.6rem;vertical-align:super;margin-right:1px;-webkit-user-select:none;user-select:none}.record-section{background:var(--surface);border-radius:var(--radius);padding:16px;border:1px solid var(--border)}.recording-playback audio{width:100%;max-width:360px;height:40px}.score-panel{background:var(--surface);border-radius:var(--radius);padding:16px;border:1px solid var(--border);animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.score-panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.score-panel-header h3{font-size:1rem}.score-change{font-size:.85rem;font-weight:600;color:var(--primary)}.score-main{display:flex;align-items:center;gap:24px;flex-wrap:wrap}.score-ring{flex-shrink:0}.ring-score{font-size:1.8rem;font-weight:700;fill:var(--text)}.ring-label{font-size:.75rem;fill:var(--text-secondary)}.score-details{flex:1;display:flex;flex-direction:column;gap:8px;min-width:200px}.detail-bar-row{display:flex;align-items:center;gap:8px}.detail-label{width:80px;font-size:.8rem;color:var(--text-secondary);flex-shrink:0}.detail-bar-track{flex:1;height:8px;background:var(--bg);border-radius:4px;overflow:hidden}.detail-bar-fill{height:100%;border-radius:4px}.detail-value{width:32px;text-align:right;font-size:.85rem;font-weight:600}.word-summary{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.summary-row{display:flex;gap:16px;flex-wrap:wrap;font-size:.85rem}.score-note{margin-top:8px;padding:8px 12px;background:#ebf8ff;border-radius:6px;font-size:.8rem;color:#2b6cb0}.drama-stars-section{margin-top:12px;padding:10px 14px;background:linear-gradient(135deg,#fffbeb,#fef3c7);border:1px solid #FCD34D;border-radius:10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.drama-stars-label{font-size:.85rem;font-weight:600;color:#92400e;white-space:nowrap}.drama-stars{font-size:1.4rem;letter-spacing:2px;color:#f59e0b;text-shadow:0 1px 2px rgba(180,83,9,.2)}.drama-stars-hint{font-size:.7rem;color:#a16207;opacity:.8}.loop-results-section{margin-top:16px;padding-top:12px;border-top:1px solid #E2E8F0}.loop-results-section h4{margin:0 0 8px;font-size:.85rem;color:#4a5568}.loop-results-table{display:flex;flex-direction:column;gap:4px}.loop-result-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;font-size:.78rem;background:#f7fafc}.loop-result-row.followed{background:#f0fff4}.loop-result-row.skipped{background:#fff5f5;opacity:.7}.loop-result-row.best{background:#fffde7;font-weight:600}.loop-result-row.worst{background:#fff3e0}.loop-index{min-width:60px;font-weight:600;color:#2d3748}.loop-stat{color:#4a5568}.loop-stat strong{color:#2d3748}.loop-badge{font-size:.7rem;padding:1px 6px;border-radius:10px;margin-left:auto}.loop-result-row.followed .loop-badge{background:#c6f6d5;color:#22543d}.loop-result-row.skipped .loop-badge{background:#fed7d7;color:#742a2a}.loop-error{color:#e53e3e;font-size:.75rem}.loop-playback{display:flex;gap:16px;margin-top:8px;font-size:.78rem}.loop-playback span{display:flex;align-items:center;gap:6px}.loop-playback audio{height:28px;width:160px}.score-ring-wrap{position:relative;flex-shrink:0}.score-ring{position:relative}.ring-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;display:flex;flex-direction:column;align-items:center}.ring-score{font-size:2.2rem;font-weight:800;line-height:1}.ring-label{font-size:.8rem;color:var(--text-secondary)}.word-detail-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.word-detail-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 0;background:none;border:none;font-size:.9rem;font-weight:600;cursor:pointer;color:var(--text);min-height:var(--touch-target)}.word-count-badge{font-size:.75rem;background:#fff5f5;color:var(--danger);padding:2px 10px;border-radius:10px;font-weight:600}.word-list{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:400px;overflow-y:auto}.word-score-row{border-radius:8px;border:1px solid #E2E8F0;background:var(--bg)}.word-score-summary{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:8px;min-height:var(--touch-target);transition:background .15s;cursor:pointer}.word-play-btn{width:28px;height:28px;border:1px solid #cbd5e0;border-radius:6px;background:#f7fafc;font-size:.75rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;margin-left:2px;flex-shrink:0}.word-play-btn:hover{background:#edf2f7;border-color:#a0aec0}.word-play-btn:disabled{opacity:.5;cursor:default}.word-score-summary:active{background:#e8ecf0}.word-rank{font-size:.75rem;color:var(--text-secondary);width:24px;text-align:center;flex-shrink:0}.word-text{font-weight:600;font-size:1rem;flex:1;min-width:60px}.word-emoji{font-size:.9rem;flex-shrink:0}.word-score-badge{color:#fff;font-size:.85rem;font-weight:700;padding:3px 12px;border-radius:12px;min-width:40px;text-align:center;flex-shrink:0}.word-expand-icon{font-size:.85rem;color:var(--text-secondary);width:20px;text-align:center;flex-shrink:0}.word-phonemes{display:flex;flex-direction:column;gap:5px;padding:8px 12px 10px 48px;border-top:1px solid #E2E8F0;background:#fafbfc}.phoneme-detail-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;max-width:100%}.phoneme-candidates{display:flex;flex-wrap:wrap;gap:3px;font-size:.65rem;opacity:.8}.phoneme-candidate{padding:1px 6px;border-radius:8px;background:#f7fafc;border:1px solid #E2E8F0;white-space:nowrap}.phoneme-hint{font-size:.7rem;color:var(--text-secondary);margin-left:4px}.phoneme-tag{display:inline-flex;align-items:center;gap:3px;border:1.5px solid;border-radius:12px;padding:2px 8px;font-size:.8rem;font-weight:600;cursor:pointer;transition:transform .1s}.phoneme-tag:active{transform:scale(.95)}.phoneme-symbol{font-style:italic;font-size:.85rem}.phoneme-score{font-size:.7rem;font-weight:700}.phoneme-summary{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.phoneme-summary h4{font-size:.85rem;margin-bottom:8px}.phoneme-list{display:flex;flex-wrap:wrap;gap:6px}.word-popup-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0000004d;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .15s ease;padding:20px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.word-popup-card{background:var(--surface);border-radius:var(--radius);padding:20px;max-width:360px;width:100%;box-shadow:0 8px 32px #00000026;animation:popIn .2s ease}@keyframes popIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.word-popup-header{display:flex;align-items:center;gap:10px;margin-bottom:16px}.word-popup-word{font-size:1.2rem;font-weight:700;flex:1}.word-popup-score{color:#fff;font-size:1rem;font-weight:800;padding:4px 12px;border-radius:12px}.word-popup-close{background:none;border:none;font-size:1.1rem;color:var(--text-secondary);cursor:pointer;padding:4px 8px;min-height:var(--touch-target);min-width:var(--touch-target);border-radius:8px}.word-popup-close:active{background:var(--bg)}.phoneme-detail-title{font-size:.85rem;color:var(--text-secondary);margin-bottom:10px}.phoneme-detail-list{display:flex;flex-direction:column;gap:8px}.phoneme-detail-item{display:flex;align-items:center;gap:10px;padding:6px 10px;background:var(--bg);border-radius:6px;border-left:3px solid}.phoneme-detail-symbol{font-size:1rem;font-weight:700;font-style:italic;width:50px;flex-shrink:0}.phoneme-detail-bar-wrap{flex:1;height:8px;background:#e2e8f0;border-radius:4px;overflow:hidden}.phoneme-detail-bar{height:100%;border-radius:4px;transition:width .6s ease}.phoneme-detail-score{font-weight:700;font-size:.9rem;width:32px;text-align:right;flex-shrink:0}.word-token.has-phoneme-issues{position:relative}.dashboard-grid{display:flex;flex-direction:column;gap:16px}.calendar-wrapper{display:flex;justify-content:center}.react-calendar{width:100%;max-width:500px;border:none!important;font-family:inherit!important;background:transparent!important}.react-calendar__tile{min-height:44px!important;font-size:.85rem!important}.react-calendar__tile.has-review{background:#4a90d91f!important;font-weight:600}.react-calendar__tile.today{border:2px solid var(--primary)!important;border-radius:6px}.calendar-dot{width:18px;height:18px;background:var(--primary);color:#fff;border-radius:50%;font-size:.65rem;display:flex;align-items:center;justify-content:center;margin:2px auto}.cal-dot{width:6px;height:6px;background:var(--primary);border-radius:50%;margin:2px auto}.review-list{display:flex;flex-direction:column;gap:8px}.review-item{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:var(--bg);border-radius:8px;gap:12px}.review-info{display:flex;flex-direction:column;gap:2px}.review-segment{font-size:.8rem;color:var(--text-secondary)}.review-meta{font-size:.75rem;color:var(--text-secondary)}.empty-state{text-align:center;padding:40px 16px;color:var(--text-secondary)}.empty-icon{font-size:3rem;display:block;margin-bottom:12px}.settings-page{max-width:600px;margin:0 auto}.settings-body{padding:4px 0}.settings-body .form-group{margin-bottom:16px}.settings-body label{display:block;font-weight:600;font-size:.9rem;margin-bottom:4px}.settings-msg{margin-top:12px;padding:8px 12px;background:#f0fff4;color:var(--success);border-radius:6px;font-size:.85rem}.file-import{background:var(--surface);border-radius:var(--radius);padding:16px;border:1px solid var(--border);max-width:600px;margin:0 auto}.import-options{display:flex;gap:12px;margin-bottom:16px}.import-option-btn{flex:1;padding:12px;border:2px solid var(--border);border-radius:10px;background:var(--surface);font-size:.9rem;cursor:pointer;min-height:var(--touch-target);transition:all .15s}.import-option-btn.active{border-color:var(--primary);background:#4a90d90d}.import-section{margin-top:12px}.import-section h4{font-size:.95rem;margin-bottom:4px}.hint{font-size:.8rem;color:var(--text-secondary);margin-bottom:8px}.form-group{margin-bottom:12px}.form-group label{display:block;font-size:.85rem;font-weight:500;margin-bottom:4px}.form-row{display:flex;gap:12px}.text-input,.select-input,.text-area{width:100%;padding:8px 12px;border:2px solid var(--border);border-radius:8px;font-size:.9rem;font-family:inherit;background:var(--surface)}.text-area{resize:vertical;min-height:120px}.toggle-row{display:flex;gap:4px}.toggle-btn{padding:6px 16px;border:2px solid var(--border);background:var(--surface);border-radius:6px;cursor:pointer;font-size:.85rem;min-height:var(--touch-target)}.toggle-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}.file-input{font-size:.9rem}.import-message{margin-top:12px;padding:8px 12px;background:#ebf8ff;border-radius:6px;font-size:.85rem;color:#2b6cb0}.section-divider{text-align:center;padding:20px 0;color:var(--text-secondary);font-size:.85rem}.section-divider span{background:var(--bg);padding:0 16px}.review-calendar{max-width:600px}.cal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-header h3{font-size:1rem}.cal-day-detail{margin-top:16px}.cal-day-detail h4{font-size:.9rem;margin-bottom:8px}.text-muted{color:var(--text-secondary);font-size:.85rem}.review-day-list{list-style:none;display:flex;flex-direction:column;gap:6px}.review-day-item{display:flex;align-items:center;gap:12px;padding:8px 10px;background:var(--bg);border-radius:6px;font-size:.85rem}.review-score{margin-left:auto;font-weight:600;color:var(--primary)}@media (max-width: 640px){.lesson-content{flex-direction:column}.sentence-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border);max-height:35vh}.lesson-right{position:static;width:100%;order:3}.action-bar{flex-direction:row;flex-wrap:wrap;justify-content:center;width:100%;gap:8px;padding:10px 8px}.action-btn{width:52px;height:52px;border-radius:4px}.action-icon{font-size:1.15rem}.action-label{font-size:.6rem}.action-group-divider{width:100%;margin:4px 0}.lesson-main{padding:10px;gap:10px}.stats-row{grid-template-columns:repeat(2,1fr)}.nav-label{display:none}.header-title{font-size:.9rem}.lesson-topbar{flex-wrap:wrap;gap:6px}.score-main{flex-direction:column;align-items:center}.playback-controls{flex-direction:column;align-items:stretch}}@media (min-width: 641px) and (max-width: 1180px){:root{--touch-target: 44px}.lesson-content{gap:10px}.sentence-sidebar{width:200px;padding:8px}.sentence-item{padding:7px 8px;font-size:.75rem}.sentence-num{min-width:22px;height:22px;font-size:.65rem}.lesson-main{padding:12px;gap:12px;min-width:0}.lesson-right{flex-shrink:0;position:sticky;top:8px}.action-bar{width:80px;gap:5px;padding:10px 5px}.action-btn{width:66px;height:58px;border-radius:4px;padding:5px 3px}.action-icon{font-size:1.25rem}.action-label{font-size:.62rem}.lesson-topbar{padding:8px 10px;gap:8px}.lesson-title-bar{font-size:.9rem}.btn-back{font-size:.82rem;padding:7px 10px}.mode-btn{padding:6px 10px;font-size:.73rem}.text-display{font-size:1rem}.text-display-header h3{font-size:.9rem}.pitch-sparkline{height:7px;margin-bottom:2px}.word-token-pitch{padding:0 2px;margin-right:.12em}.word-token-pitch .word-text,.word-token-plain{font-size:.92rem}}@media (min-width: 1025px) and (max-width: 1180px){.sentence-sidebar{width:240px}.pitch-sparkline{height:7px;margin-bottom:2px}.word-token-pitch{padding:0 2px;margin-right:.12em}.word-token-pitch .word-text,.word-token-plain{font-size:.95rem}}.portrait-warning{display:none}@media (orientation: portrait) and (max-width: 640px){.portrait-warning{display:flex;position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;z-index:9999;align-items:center;justify-content:center;flex-direction:column;gap:16px;color:#fff;font-size:1.2rem;text-align:center;padding:24px;cursor:pointer}.portrait-warning .rotate-icon{font-size:3rem;animation:rotate-hint 2s ease-in-out infinite}@keyframes rotate-hint{0%,to{transform:rotate(0)}50%{transform:rotate(90deg)}}}@media (min-width: 1024px){.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.dashboard-grid>.card:last-child{grid-column:1 / -1}}.tuning-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;background:#00000080;display:flex;align-items:center;justify-content:center}.tuning-panel{background:var(--surface);border-radius:14px;padding:24px;max-width:560px;width:90vw;max-height:85vh;overflow-y:auto;box-shadow:0 12px 40px #00000040;border:1px solid var(--border)}.tuning-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.tuning-header h2{margin:0;font-size:1.2rem}.tuning-close-btn{width:32px;height:32px;border:none;background:#edf2f7;border-radius:8px;cursor:pointer;font-size:1rem}.tuning-lang-select{margin-bottom:16px;display:flex;align-items:center;gap:8px}.tuning-lang-select label{font-weight:600;font-size:.9rem}.tuning-lang-select select{padding:6px 10px;border:1px solid #cbd5e0;border-radius:6px;font-size:.9rem}.tuning-dims{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.tuning-dim-row{background:#f7fafc;border:1px solid #e2e8f0;border-radius:10px;padding:12px}.tuning-dim-row.dim-disabled{opacity:.5}.tuning-dim-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tuning-dim-toggle{display:flex;align-items:center;gap:6px;cursor:pointer;flex:1}.tuning-dim-toggle input[type=checkbox]{width:18px;height:18px}.tuning-dim-name{font-weight:600;font-size:.85rem}.tuning-dim-desc{font-size:.75rem;color:#718096;margin:6px 0 8px 26px;line-height:1.4}.tuning-badge{font-size:.6rem;padding:2px 6px;border-radius:4px;font-weight:600}.tuning-badge-offline{background:#c6f6d5;color:#22543d}.tuning-badge-online{background:#fed7d7;color:#742a2a}.tuning-badge-azure{background:#bee3f8;color:#1a365d}.tuning-unlock-btn{width:24px;height:24px;border:none;background:transparent;cursor:pointer;font-size:.8rem;padding:0}.tuning-unlock-btn.unlocked{color:#d69e2e}.tuning-weight{display:flex;align-items:center;gap:4px}.tuning-weight-label{font-size:.7rem;color:#718096}.tuning-weight-slider{width:60px}.tuning-slider-row{display:flex;align-items:center;gap:8px;padding:4px 0 4px 26px}.tuning-slider-label{font-size:.75rem;color:#4a5568;min-width:130px}.tuning-slider{flex:1;max-width:200px}.tuning-slider-value{font-size:.75rem;color:#2d3748;min-width:40px;text-align:right;font-variant-numeric:tabular-nums}.tuning-live-score{display:flex;align-items:center;gap:10px;padding:12px;background:#fffbeb;border-radius:8px;margin-bottom:12px}.tuning-live-label{font-weight:600;font-size:.85rem}.tuning-live-value{font-size:1.5rem;font-weight:700}.tuning-rescoring{font-size:.75rem;color:#d69e2e;animation:pulse 1s infinite}.tuning-rescore-btn{padding:6px 14px;border:1px solid #d69e2e;background:#fff;border-radius:6px;cursor:pointer;font-size:.8rem}.tuning-rescore-btn:hover{background:#fffbeb}.tuning-rescore-btn:disabled{opacity:.5;cursor:default}.tuning-desc-box{padding:10px;background:#ebf8ff;border-radius:6px;font-size:.8rem;color:#2b6cb0;margin-bottom:12px;line-height:1.5}.tuning-actions{display:flex;gap:8px;justify-content:flex-end}.tuning-action-btn{padding:8px 16px;border:1px solid #cbd5e0;border-radius:6px;background:#fff;cursor:pointer;font-size:.8rem}.tuning-action-btn:hover{background:#f7fafc}.tuning-action-btn.primary{background:#2b6cb0;color:#fff;border-color:#2b6cb0}.tuning-action-btn.primary:hover{background:#2c5282}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
