:root{--purple-50:#eeedfe;--purple-100:#cecbf6;--purple-200:#afa9ec;--purple-400:#7f77dd;--purple-600:#534ab7;--purple-800:#3c3489;--purple-900:#26215c;--coral-50:#faece7;--coral-100:#f5c4b3;--coral-200:#f0997b;--coral-400:#d85a30;--coral-600:#993c1d;--coral-800:#712b13;--coral-900:#4a1b0c;--bg-page:#fafafc;--bg-surface:#fff;--text-primary:#1a1a22;--text-secondary:#5f5e6a;--text-muted:#9a99a6;--border:#e6e5ee;--border-strong:#cfcedc;--color-primary:var(--purple-600);--color-primary-hover:var(--purple-800);--color-accent:var(--coral-400);--color-accent-hover:var(--coral-600);--color-success:#3b6d11;--color-error:#a32d2d;--font-sans:-apple-system, "Inter", system-ui, sans-serif;--font-size-caption:13px;--font-size-body:16px;--font-size-heading-sm:20px;--font-size-heading-md:24px;--font-size-heading-lg:32px;--line-height-body:1.6;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:32px;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--transition-fast:.15s ease;color:var(--text-primary);background:var(--bg-page);font-family:var(--font-sans);font-size:var(--font-size-body);line-height:var(--line-height-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}#root{min-height:100vh}.page{min-height:100vh;padding:var(--space-lg);place-items:center;display:grid}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius-md);width:min(100%,420px);padding:var(--space-md)}.page--dashboard{place-items:start center}.dashboard{gap:1rem;width:min(100%,720px);display:grid}.dashboard-panel{width:100%}.dashboard-section h2,.feature-card h2{margin:0 0 .35rem;font-size:1.2rem}.dashboard-section__header{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;display:flex}.range-select{min-width:140px}.feature-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;display:grid}.feature-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius-md);min-height:44px;color:inherit;transition:border-color var(--transition-fast), background-color var(--transition-fast);gap:.35rem;padding:1.25rem 1.35rem;text-decoration:none;display:grid}.feature-card:hover{border-color:var(--color-primary);background:var(--purple-50)}h1{font-size:var(--font-size-heading-lg);margin:0 0 .5rem;font-weight:600}.muted{color:var(--text-secondary);margin:0}.actions{gap:.75rem;margin-top:1.5rem;display:flex}.header-row{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.5rem;display:flex}.form{gap:1rem;display:grid}.language-current{margin:-.35rem 0 0;font-size:.9rem}label{gap:.35rem;font-size:.9rem;display:grid}input,select,textarea{border:1px solid var(--border);border-radius:var(--radius-sm);font:inherit;background:var(--bg-surface);color:var(--text-primary);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:.6rem .75rem}input:focus,select:focus,textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--purple-50);outline:none}button{border:1px solid var(--color-primary);border-radius:var(--radius-sm);background:var(--color-primary);color:#fff;min-height:44px;font:inherit;cursor:pointer;transition:background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);padding:.65rem 1rem;font-weight:500}button:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover)}button:disabled{opacity:.6;cursor:not-allowed}button.secondary{border-color:var(--border-strong);color:var(--text-primary);background:0 0}button.secondary:hover:not(:disabled){background:var(--bg-page);border-color:var(--border-strong);color:var(--text-primary)}button.accent{background:var(--color-accent);border-color:var(--color-accent);color:#fff}button.accent:hover:not(:disabled){background:var(--color-accent-hover);border-color:var(--color-accent-hover)}.status{color:var(--text-primary);word-break:break-word;margin:1rem 0 0;font-size:.9rem}.page-nav{margin:0 0 1.25rem}.page-nav--inline{flex-wrap:wrap;gap:.85rem 1rem;margin:0;display:flex}.text-link{color:var(--color-primary);text-underline-offset:2px;font-weight:500;text-decoration:underline}.flashcards-page{width:min(100%,640px)}.flashcard-stats{border:1px solid var(--border);background:var(--bg-page);border-radius:8px;grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1.25rem;padding:.85rem 1rem;display:grid}.flashcard-stats div{gap:.15rem;display:grid}.flashcard-stats__label{color:var(--text-secondary);font-size:.8rem}.flashcard-controls{grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1.25rem;display:grid}.flashcard-controls--stack{grid-template-columns:1fr}.flashcard-levels{margin-bottom:1.25rem}.flashcard-levels__heading{margin:0 0 .65rem;font-size:.9rem;font-weight:600}.flashcard-levels__row{grid-template-columns:repeat(6,minmax(0,1fr));gap:.65rem;display:grid}.level-chip{border:2px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-surface);min-height:3.25rem;color:var(--text-primary);font:inherit;cursor:pointer;transition:border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast), opacity var(--transition-fast);flex-direction:column;justify-content:center;align-items:center;gap:.2rem;margin:0;padding:.45rem .35rem;font-weight:500;display:flex}.level-chip:hover:not(:disabled){border-color:var(--color-primary);background:var(--purple-50);color:var(--text-primary)}.level-chip--selected{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--bg-surface), 0 0 0 4px var(--color-primary)}.level-chip--empty{opacity:.4;cursor:not-allowed;background:var(--bg-page);color:var(--text-muted)}.level-chip:disabled:not(.level-chip--empty){cursor:wait;opacity:.7}.level-chip__label{font-size:.95rem;font-weight:700;line-height:1}.level-chip__count{color:var(--text-secondary);font-size:.75rem;line-height:1}.level-chip--selected .level-chip__count,.level-chip--empty .level-chip__count{color:inherit}.flashcard-piles{margin-bottom:1.25rem}.flashcard-piles__heading{margin:0 0 .65rem;font-size:.9rem;font-weight:600}.flashcard-piles__row{grid-template-columns:repeat(6,minmax(0,1fr));align-items:stretch;gap:.85rem;display:grid}.pile-card{aspect-ratio:2/3.2;border-radius:var(--radius-md);color:#fff;min-height:96px;font:inherit;cursor:pointer;transition:transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast), margin var(--transition-fast);border:2px solid #0000;flex-direction:column;justify-content:space-between;align-items:center;gap:.75rem;margin:0;padding:.65rem .35rem;font-weight:500;display:flex;box-shadow:0 1px 2px #0000001f}.pile-card:hover:not(:disabled){color:#fff;border-color:#0000;transform:translateY(-2px)}.pile-card:disabled{opacity:.65;cursor:wait}.pile-card--selected{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--bg-surface), 0 0 0 4px var(--color-primary), 0 2px 6px #0000002e;margin:.2rem}.pile-card__label{letter-spacing:.01em;text-align:center;font-size:.68rem;font-weight:650;line-height:1.2}.pile-card__count{font-size:1.15rem;font-weight:700;line-height:1}.pile-card--unreviewed{background:var(--text-primary)}.pile-card--band-0-20{background:#c62828}.pile-card--band-20-40{background:#ef6c00}.pile-card--band-40-60{color:var(--text-primary);background:#f9a825}.pile-card--band-60-80{color:var(--text-primary);background:#9ccc65}.pile-card--band-80-100{background:#2e7d32}.count-stepper{gap:.45rem;display:grid}.count-stepper__label{font-size:.9rem;font-weight:600}.count-stepper__controls{grid-template-columns:auto 1fr auto;align-items:center;gap:.5rem;max-width:220px;display:grid}.count-stepper__btn{background:var(--bg-surface);border-color:var(--border-strong);width:2.5rem;height:2.5rem;min-height:2.5rem;color:var(--text-primary);padding:0;font-size:1.25rem;line-height:1}.count-stepper__btn:hover:not(:disabled){background:var(--purple-50);border-color:var(--color-primary);color:var(--text-primary)}.count-stepper__value{border:1px solid var(--border-strong);width:100%;min-width:0;font:inherit;text-align:center;background:var(--bg-surface);border-radius:6px;padding:.55rem .5rem}.count-stepper__value:disabled{background:var(--bg-page);color:var(--text-muted)}.count-stepper__hint{margin:0;font-size:.85rem}.button-link{border:1px solid var(--color-primary);border-radius:var(--radius-sm);background:var(--color-primary);color:#fff;min-height:44px;font:inherit;text-align:center;transition:background-color var(--transition-fast), border-color var(--transition-fast);padding:.65rem 1rem;font-weight:500;text-decoration:none;display:inline-block}.button-link:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.button-link.accent{background:var(--color-accent);border-color:var(--color-accent)}.button-link.accent:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}.button-link.secondary{border-color:var(--border-strong);color:var(--text-primary);background:0 0}.study-page{background:var(--bg-page);grid-template-rows:auto 1fr;min-height:100vh;padding:1rem 1.25rem 1.5rem;display:grid}.study-page__header{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.study-page__progress{margin:0;font-size:.95rem}.study-page__main{place-items:center;min-height:0;display:grid}.study-session{width:min(100%,560px)}.study-complete{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;justify-items:start;gap:1rem;width:min(100%,420px);padding:1.5rem;display:grid}.study-complete h1{margin:0}.flashcard{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-surface);width:100%;min-height:min(48vh,320px);color:var(--text-primary);cursor:pointer;text-align:center;place-items:center;gap:.75rem;margin:0 0 1.25rem;padding:1.5rem;font-weight:400;display:grid}.flashcard:hover:not(:disabled){border-color:var(--color-primary);background:var(--purple-50);color:var(--text-primary)}.flashcard--flipped{background:var(--purple-800);border-color:var(--purple-800);color:#fff}.flashcard--flipped:hover:not(:disabled){background:var(--purple-900);border-color:var(--purple-900);color:#fff}.flashcard__hint{opacity:.7;font-size:.8rem}.flashcard__word{word-break:break-word;font-size:1.75rem;font-weight:650}.difficulty-row{grid-template-columns:repeat(5,1fr);gap:.5rem;display:grid}.difficulty-btn{background:var(--bg-surface);border-color:var(--border-strong);min-height:44px;color:var(--text-primary);gap:.15rem;padding:.55rem .25rem;font-size:.85rem;display:grid}.difficulty-btn:hover:not(:disabled){background:var(--purple-50);border-color:var(--color-primary);color:var(--text-primary)}.difficulty-btn__value{font-weight:700}.difficulty-btn__label{opacity:.85;font-size:.75rem}.flashcards-stats-page{width:min(100%,640px)}.heatmap{gap:.75rem;margin-top:1rem;display:grid}.heatmap__grid{grid-template-columns:repeat(auto-fill,minmax(18px,1fr));gap:4px;display:grid}.heatmap__cell{aspect-ratio:1;border:1px solid var(--border);background:var(--bg-page);border-radius:3px;width:100%;min-width:14px;min-height:14px}.heatmap__cell--level-0{background:var(--bg-page)}.heatmap__cell--level-1{background:var(--purple-100);border-color:var(--purple-100)}.heatmap__cell--level-2{background:var(--purple-200);border-color:var(--purple-200)}.heatmap__cell--level-3{background:var(--purple-400);border-color:var(--purple-400)}.heatmap__cell--level-4{background:var(--purple-600);border-color:var(--purple-600)}.heatmap__legend{color:var(--text-secondary);justify-content:flex-end;align-items:center;gap:4px;font-size:.8rem;display:flex}.heatmap__legend .heatmap__cell{flex:0 0 12px;width:12px;min-width:12px;min-height:12px}.words-chart{gap:.75rem;margin-top:1rem;display:grid}.words-chart__plot{border-bottom:1px solid var(--border);align-items:flex-end;gap:.4rem;height:140px;padding:.5rem .25rem 0;display:flex}.words-chart__col{flex:1 1 0;grid-template-rows:1fr auto;justify-items:center;gap:.35rem;min-width:0;height:100%;display:grid}.words-chart__bar{background:var(--bg-page);border-radius:3px 3px 0 0;flex-direction:column-reverse;justify-content:flex-start;width:min(100%,28px);height:100%;display:flex;overflow:hidden}.words-chart__seg{width:100%;min-height:0;transition:height .2s}.words-chart__seg--spoken{background:var(--purple-600)}.words-chart__seg--heard{background:var(--coral-400)}.words-chart__label{color:var(--text-secondary);font-size:.7rem;line-height:1}.words-chart__legend{color:var(--text-secondary);flex-wrap:wrap;gap:.85rem;font-size:.8rem;display:flex}.words-chart__legend-item{align-items:center;gap:.35rem;display:inline-flex}.words-chart__swatch{border-radius:2px;width:.7rem;height:.7rem}.words-chart__swatch--spoken{background:var(--purple-600)}.words-chart__swatch--heard{background:var(--coral-400)}.flows-page{width:min(100%,720px)}.flows-search{margin-bottom:1rem;display:block}.flows-search input{width:100%}.filter-row{flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem;display:flex}.filter-pill{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);min-height:36px;color:var(--text-primary);font:inherit;cursor:pointer;padding:.4rem .75rem;font-size:.85rem;font-weight:500}.filter-pill:hover:not(:disabled){border-color:var(--color-primary);background:var(--purple-50);color:var(--text-primary)}.filter-pill--active{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.flow-list{border:1px solid var(--border);background:var(--bg-surface);border-radius:8px;margin-top:1rem;display:grid;overflow:hidden}.flow-list__empty{padding:1.25rem 1rem}.flow-row{border:none;border-bottom:1px solid var(--border);background:var(--bg-surface);width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:0;grid-template-columns:auto auto 1fr auto;align-items:center;gap:.85rem;margin:0;padding:.75rem 1rem;display:grid}.flow-row:last-child{border-bottom:none}.flow-row:hover:not(:disabled){background:var(--bg-page);color:inherit;border-color:#0000}.flow-row--busy{opacity:.75}.flow-row:disabled{opacity:inherit;cursor:not-allowed}.flow-row__main{gap:.15rem;min-width:0;display:grid}.flow-row__id{font-variant-numeric:tabular-nums;color:var(--text-muted);min-width:2.25rem;font-size:.85rem;font-weight:600}.flow-row__title{font-weight:600;line-height:1.3}.flow-row__theme{color:var(--text-secondary);font-size:.8rem}.flow-row__progress{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--text-primary);font-size:.85rem}.flow-row__progress--muted{color:var(--text-muted)}.flow-row__progress--done{color:var(--color-primary);font-weight:700}.flow-row__check{background:var(--purple-50);width:1.35rem;height:1.35rem;color:var(--purple-800);border-radius:999px;place-items:center;display:inline-grid}.level-badge{border-radius:var(--radius-sm);letter-spacing:.02em;place-items:center;min-width:2.1rem;padding:.2rem .4rem;font-size:.75rem;font-weight:600;display:inline-grid}.level-badge--beginner{background:var(--purple-100);color:var(--purple-900)}.level-badge--intermediate{background:var(--purple-400);color:#fff}.level-badge--advanced{background:var(--purple-800);color:#fff}.session-page{background:var(--bg-page);grid-template-rows:auto 1fr;min-height:100vh;padding:1rem 1.25rem 1.25rem;display:grid}.session-page__top{justify-content:flex-end;margin-bottom:.75rem;display:flex}.session-page__status{width:min(100%,720px);margin:0 auto}.session-layout{grid-template-columns:minmax(240px,38%) 1fr;gap:1rem;width:min(100%,1100px);height:calc(100vh - 4.5rem);min-height:0;margin:0 auto;display:grid}.session-side{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;align-content:start;gap:.85rem;padding:1.25rem;display:grid;overflow:auto}.session-side__header{align-items:center;gap:.65rem;display:flex}.session-side__id{font-variant-numeric:tabular-nums;color:var(--text-muted);font-size:.85rem;font-weight:600}.session-side__theme{color:var(--text-secondary);margin:0;font-size:.85rem}.session-side__title{margin:0;font-size:1.35rem;line-height:1.25}.session-side__scenario{color:var(--text-secondary);margin:0;font-size:.92rem;line-height:1.45}.session-side__section-label{color:var(--text-secondary);margin:.5rem 0 0;font-size:.8rem;font-weight:600}.session-milestones{gap:.55rem;margin:0;padding:0;list-style:none;display:grid}.session-milestone{color:var(--text-secondary);grid-template-columns:1.35rem 1fr;align-items:start;gap:.55rem;font-size:.92rem;display:grid}.session-milestone__mark{border:1.5px solid var(--border-strong);background:var(--bg-surface);color:#fff;border-radius:999px;place-items:center;width:1.35rem;height:1.35rem;font-size:.75rem;font-weight:700;line-height:1;display:inline-grid}.session-milestone--done{color:var(--text-primary)}.session-milestone--done .session-milestone__mark{border-color:var(--color-primary);background:var(--color-primary)}.session-chat{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;grid-template-rows:1fr auto;min-height:0;display:grid;overflow:hidden}.session-chat__messages{background:var(--bg-page);flex-direction:column;gap:.85rem;min-height:0;padding:1.25rem;display:flex;overflow-y:auto}.chat-msg{flex-direction:column;max-width:min(92%,480px);display:flex}.chat-msg--assistant{align-self:flex-start;align-items:flex-start}.chat-msg--user{align-self:flex-end;align-items:flex-end}.chat-msg__row{align-items:flex-end;gap:.4rem;max-width:100%;display:flex}.chat-msg--user .chat-msg__row{flex-direction:row-reverse}.chat-msg__bubble{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-surface);color:var(--text-primary);min-width:0;padding:.7rem .9rem}.chat-msg__speak{border:1px solid var(--border);background:var(--bg-surface);width:2rem;height:2rem;color:var(--text-secondary);border-radius:999px;flex:none;place-items:center;padding:0;display:inline-grid}.chat-msg__speak:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--bg-surface)}.chat-msg__speak--loading{opacity:.65;animation:1s ease-in-out infinite speak-pulse}.chat-msg__speak--playing{border-color:var(--color-primary);color:var(--color-primary);background:var(--purple-50);animation:1.2s ease-in-out infinite speak-pulse}@keyframes speak-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.chat-msg--assistant .chat-msg__bubble{background:var(--purple-50);border-color:var(--purple-100);color:var(--purple-900)}.chat-msg--user .chat-msg__bubble{background:var(--bg-surface);border-color:var(--border);color:var(--text-primary)}.chat-msg__bubble p{white-space:pre-wrap;word-break:break-word;margin:0}.chat-msg__bubble--thinking{min-width:3.25rem;padding-block:.85rem}.thinking-dots{align-items:center;gap:.3rem;display:inline-flex}.thinking-dots span{background:var(--text-muted);border-radius:999px;width:.4rem;height:.4rem;animation:1s ease-in-out infinite thinking-bounce}.thinking-dots span:nth-child(2){animation-delay:.15s}.thinking-dots span:nth-child(3){animation-delay:.3s}@keyframes thinking-bounce{0%,80%,to{opacity:.35;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.typewriter-caret{vertical-align:text-bottom;opacity:.55;background:currentColor;width:.45em;height:1em;margin-left:1px;animation:.8s step-end infinite typewriter-blink;display:inline-block}@keyframes typewriter-blink{50%{opacity:0}}.msg-feedback{max-width:100%;margin-top:.3rem}.msg-feedback__btn{min-height:auto;font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.75rem;font-weight:500;display:inline-flex}.msg-feedback__btn:hover:not(:disabled){background:0 0;border-color:#0000}.msg-feedback__btn:disabled{opacity:1;cursor:default}.msg-feedback--correct .msg-feedback__btn{color:var(--color-success)}.msg-feedback--minor_mistake .msg-feedback__btn{color:var(--coral-600)}.msg-feedback--incorrect .msg-feedback__btn{color:var(--color-error)}.msg-feedback__detail{border:1px solid var(--border);background:var(--bg-surface);color:var(--text-primary);border-radius:6px;margin:.35rem 0 0;padding:.55rem .7rem;font-size:.85rem}.session-chat__composer{border-top:1px solid var(--border);background:var(--bg-surface);gap:.65rem;padding:.85rem 1rem 1rem;display:grid}.session-complete-banner{border:1px solid var(--purple-200);border-radius:var(--radius-sm);background:var(--purple-50);color:var(--purple-900);margin:0;padding:.65rem .85rem;font-size:.9rem;font-weight:600}.session-complete-panel{gap:.85rem;display:grid}.session-next{gap:.65rem;display:grid}.session-next__title{margin:0;font-size:.95rem;font-weight:600}.session-next__list{gap:.4rem;margin:0;padding:0;list-style:none;display:grid}.session-next__item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-surface);width:100%;min-height:44px;color:var(--text-primary);font:inherit;text-align:left;cursor:pointer;grid-template-columns:auto auto 1fr;align-items:center;gap:.65rem;margin:0;padding:.65rem .75rem;font-weight:400;display:grid}.session-next__item:hover:not(:disabled){background:var(--purple-50);border-color:var(--purple-200);color:var(--text-primary)}.session-next__id{font-variant-numeric:tabular-nums;color:var(--text-muted);font-size:.8rem;font-weight:600}.session-next__main{gap:.1rem;min-width:0;display:grid}.session-next__flow-title{font-weight:600;line-height:1.3}.session-next__theme{color:var(--text-secondary);font-size:.8rem}.session-next__back{justify-self:start}.session-skeleton-line{background:linear-gradient(90deg,#ececec 0%,#f7f7f7 50%,#ececec 100%) 0 0/200% 100%;border-radius:4px;height:.7rem;animation:1.2s ease-in-out infinite session-skeleton-pulse;display:block}.chat-msg__bubble--skeleton{gap:.45rem;min-width:12rem;display:grid}@keyframes session-skeleton-pulse{0%{background-position:100% 0}to{background-position:-100% 0}}.session-compose{grid-template-columns:auto 1fr auto;align-items:center;gap:.5rem;display:grid}.session-compose input{min-width:0}.session-compose__mic{background:var(--bg-surface);width:2.5rem;height:2.5rem;min-height:2.5rem;color:var(--text-primary);border-color:var(--border-strong);place-items:center;padding:0;display:inline-grid}.session-compose__mic:hover:not(:disabled){background:var(--purple-50);border-color:var(--color-primary);color:var(--text-primary)}.session-compose__mic:disabled{opacity:.45}.session-compose__mic--recording{color:#b91c1c;background:#fee2e2;border-color:#b91c1c;animation:1.1s ease-in-out infinite mic-pulse}.session-compose__voice-status{margin:0;font-size:.85rem}@keyframes mic-pulse{0%,to{box-shadow:0 0 #b91c1c59}50%{box-shadow:0 0 0 6px #b91c1c00}}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width<=520px){.flashcard-controls,.difficulty-row,.feature-cards,.dashboard-section__header{grid-template-columns:1fr}.flashcard-piles__row{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.flashcard-levels__row{grid-template-columns:repeat(3,minmax(0,1fr))}.dashboard-section__header{flex-direction:column}.difficulty-row{grid-template-columns:repeat(5,minmax(0,1fr))}.flow-row{grid-template-rows:auto auto;grid-template-columns:auto auto 1fr}.flow-row__progress{grid-column:3;justify-self:end}.session-layout{grid-template-columns:1fr;height:auto}.session-chat{min-height:60vh}.session-compose{grid-template-columns:auto 1fr}.session-compose button[type=submit]{grid-column:1/-1}}.header-actions{flex-wrap:wrap;align-items:center;gap:.65rem;display:flex}.header-actions a.secondary{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:44px;color:var(--text-primary);font:inherit;background:0 0;align-items:center;padding:.65rem 1rem;font-weight:500;text-decoration:none;display:inline-flex}.form--inline{grid-template-columns:1fr auto;align-items:end}.teacher-nav{flex-wrap:wrap;align-items:center;gap:1rem;margin-top:.75rem;display:flex}.teacher-nav a,.teacher-nav__current{color:var(--color-primary);align-items:center;gap:.35rem;font-weight:500;text-decoration:none;display:inline-flex}.teacher-nav a:hover{text-decoration:underline}.teacher-nav__current{color:var(--color-primary);text-underline-offset:3px;font-weight:600;text-decoration:underline}.teacher-filters{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:1rem 0;display:grid}.teacher-student-list,.teacher-homework-list,.homework-list,.homework-flows,.notifications__list{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.teacher-student-row{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 0;display:flex}.teacher-student-row:first-child{border-top:none}.teacher-student-row a{color:var(--text-primary);font-weight:600}.teacher-checklist{border:1px solid var(--border);border-radius:8px;gap:.5rem;padding:.85rem 1rem;display:grid}.teacher-check{align-items:center;gap:.5rem;display:flex}.teacher-check input{width:auto}textarea{resize:vertical}.homework-card{border-top:1px solid var(--border);padding:.85rem 0}.homework-card:first-child{border-top:none;padding-top:0}.homework-card__header{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.homework-card__instructions{margin:.35rem 0 .5rem}.homework-badge{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:999px;padding:.2rem .5rem;font-size:.75rem}.homework-badge--done{border-color:var(--color-success);color:var(--color-success)}.homework-flows a,.homework-flow-link{color:var(--color-primary);min-height:auto;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;padding:0;font-weight:500;text-decoration:underline}.homework-flow-link:hover:not(:disabled){color:var(--color-primary-hover);background:0 0;border-color:#0000}.homework-flow-link:disabled{opacity:.6;cursor:wait}.notifications{position:relative}.notifications__bell{border-color:var(--border-strong);color:var(--text-primary);font-size:var(--font-size-caption);background:0 0;min-height:36px;padding:.4rem .75rem;position:relative}.notifications__bell:hover:not(:disabled){background:var(--purple-50);border-color:var(--border-strong);color:var(--text-primary)}.notifications__badge{min-width:1.15rem;height:1.15rem;color:var(--bg-surface);text-align:center;background:#c62828;border-radius:999px;padding:0 .25rem;font-size:.7rem;line-height:1.15rem;position:absolute;top:-.35rem;right:-.35rem}.notifications__pane{z-index:20;border:1px solid var(--border);background:var(--bg-surface);border-radius:10px;width:min(22rem,85vw);max-height:24rem;padding:.85rem;position:absolute;top:calc(100% + .4rem);right:0;overflow:auto;box-shadow:0 8px 24px #00000014}.notifications__pane-header{justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.75rem;display:flex}.notifications__pane-actions{gap:.35rem;display:flex}.notifications__item--unread{background:var(--bg-surface)5f5;border-radius:8px}.notifications__item-btn{text-align:left;width:100%;color:inherit;background:0 0;border:none;gap:.2rem;padding:.55rem .45rem;display:grid}.notifications__item-title{font-weight:600}.notifications__item-time{font-size:.8rem}@media (width<=520px){.form--inline,.teacher-filters{grid-template-columns:1fr}.teacher-student-row{flex-direction:column;align-items:flex-start}.teacher-homework-detail__cols{grid-template-columns:1fr}.teacher-flow-progress__row{flex-direction:column;align-items:flex-start}}.teacher-homework-list a{color:var(--text-primary);text-decoration:none}.teacher-homework-list a:hover strong{text-decoration:underline}.teacher-homework-required{margin-top:1.25rem}.teacher-homework-detail__cols{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:1.5rem;display:grid}.teacher-assignee-btn{text-align:left;background:var(--bg-surface);width:100%;color:var(--text-primary);border:1px solid var(--border);border-radius:8px;gap:.2rem;margin-bottom:.5rem;padding:.75rem .85rem;display:grid}.teacher-assignee-btn--active{border-color:var(--color-primary);background:var(--purple-50)}.teacher-assignee-btn__name{font-weight:600}.teacher-flow-progress{gap:.75rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.teacher-flow-progress__row{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 0;display:flex}.teacher-flow-progress__row:first-child{border-top:none;padding-top:0}.teacher-flow-progress__row a.secondary{border:1px solid var(--text-primary);background:var(--bg-surface);color:var(--text-primary);font:inherit;white-space:nowrap;border-radius:6px;align-items:center;padding:.5rem .75rem;text-decoration:none;display:inline-flex}.teacher-milestones{gap:.25rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.teacher-transcript{gap:.85rem;margin-top:1rem;display:grid}.teacher-transcript__msg{border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem}.teacher-transcript__msg--student{background:#f5f8ff}.teacher-transcript__msg--ai{background:var(--bg-page)}.teacher-transcript__meta{flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-bottom:.35rem;display:flex}.teacher-transcript__body{white-space:pre-wrap;margin:0}.teacher-transcript__feedback-detail{margin:.45rem 0 0;font-size:.9rem}.teacher-feedback{border:1px solid var(--border-strong);border-radius:999px;padding:.15rem .45rem;font-size:.75rem}.teacher-feedback--correct{border-color:var(--color-success);color:var(--color-success)}.teacher-feedback--minor_mistake{border-color:var(--coral-600);color:var(--coral-600)}.teacher-feedback--incorrect{border-color:var(--color-error);color:var(--color-error)}.chat-thread__session{min-height:min(60vh,520px);margin-top:.75rem}.chat-thread__time{margin-top:.25rem;font-size:.75rem}.chat-inbox__row a{color:inherit;flex:1;gap:.2rem;text-decoration:none;display:grid}.chat-inbox__name{align-items:center;gap:.4rem;font-weight:600;display:inline-flex}.chat-inbox__preview{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chat-inbox__time{font-size:.8rem}.app-shell{background:var(--bg-page);grid-template-rows:auto 1fr auto;min-height:100vh;display:grid}.app-shell--immersive{grid-template-rows:auto 1fr}.app-shell__top{z-index:40;background:var(--bg-surface);border-bottom:1px solid var(--border);position:sticky;top:0}.app-shell__top-inner{align-items:center;gap:var(--space-md);max-width:960px;padding:var(--space-sm) var(--space-md);min-height:56px;margin:0 auto;display:flex}.app-shell__brand{font-size:var(--font-size-heading-sm);color:var(--color-primary);flex-shrink:0;font-weight:600;text-decoration:none}.app-shell__nav--desktop{align-items:center;gap:var(--space-sm);flex:1;min-width:0;display:none}.app-shell__nav-link{color:var(--text-secondary);border-radius:var(--radius-sm);transition:color var(--transition-fast), background-color var(--transition-fast);padding:.4rem .65rem;font-weight:500;text-decoration:none}.app-shell__nav-link:hover{color:var(--color-primary);background:var(--purple-50)}.app-shell__nav-link--active{color:var(--color-primary);text-underline-offset:4px;text-decoration:underline}.app-shell__actions{align-items:center;gap:var(--space-sm);margin-left:auto;display:flex}.app-shell__teacher-link{color:var(--color-primary);font-weight:500;font-size:var(--font-size-caption);text-decoration:none}.app-shell__teacher-link:hover{text-decoration:underline}.app-shell__sign-out{min-height:36px;font-size:var(--font-size-caption);padding:.4rem .75rem}.app-shell__content{min-width:0}.app-shell__content .page{min-height:auto;padding:var(--space-md)}.app-shell__content .page--dashboard{place-items:start center}.app-shell__bottom{z-index:40;background:var(--bg-surface);border-top:1px solid var(--border);padding:var(--space-xs) var(--space-sm) calc(var(--space-xs) + env(safe-area-inset-bottom));gap:2px;display:flex;position:sticky;bottom:0}.app-shell__tab{min-height:48px;color:var(--text-secondary);text-align:center;border-radius:var(--radius-sm);transition:color var(--transition-fast), background-color var(--transition-fast);flex:1;justify-content:center;align-items:center;padding:.35rem .25rem;font-size:11px;font-weight:500;text-decoration:none;display:flex}.app-shell__tab--active{color:var(--color-primary);background:var(--purple-50)}.settings-card{gap:var(--space-md);display:grid}.settings-card__title{font-size:var(--font-size-heading-sm);margin:0;font-weight:600}.settings-profile-header{align-items:center;gap:var(--space-md);display:flex}.settings-avatar-actions{gap:.35rem;min-width:0;display:grid}.settings-avatar-buttons{flex-wrap:wrap;gap:.5rem;margin-top:.35rem;display:flex}.avatar{object-fit:cover;background:var(--purple-100);border-radius:50%;flex-shrink:0;display:block}.avatar--sm{width:36px;height:36px}.avatar--md{width:56px;height:56px}.avatar--lg{width:112px;height:112px}.avatar--initials{color:var(--purple-900);font-weight:600;font-size:var(--font-size-heading-sm);place-items:center;display:grid}.avatar--sm.avatar--initials{font-size:.75rem}.avatar--lg.avatar--initials{font-size:1.75rem}.avatar-initials{background:var(--purple-100);width:56px;height:56px;color:var(--purple-900);font-weight:600;font-size:var(--font-size-heading-sm);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.avatar-crop-modal{z-index:80;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.avatar-crop-modal__backdrop{background:#0f0f148c;position:absolute;inset:0}.avatar-crop-modal__panel{z-index:1;background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;gap:.75rem;width:min(100%,420px);padding:1.25rem;display:grid;position:relative;box-shadow:0 16px 40px #0000002e}.avatar-crop-modal__title{font-size:var(--font-size-heading-sm);margin:0}.avatar-crop-modal__stage{background:#111;border-radius:10px;width:100%;height:min(55vh,320px);position:relative;overflow:hidden}.avatar-crop-modal__zoom{gap:.35rem;font-size:.9rem;display:grid}.avatar-crop-modal__actions{flex-wrap:wrap;justify-content:flex-end;gap:.5rem;display:flex}.teacher-student-row__main{align-items:center;gap:.75rem;min-width:0;display:flex}.teacher-assignee-btn__row{align-items:center;gap:.65rem;display:flex}.teacher-student-detail__identity{align-items:center;gap:1rem;display:flex}.settings-language{gap:.35rem;font-size:.9rem;display:grid}.settings-toggle{cursor:pointer;align-items:center;gap:.6rem;font-size:.95rem;display:flex}.settings-toggle input{width:1.1rem;height:1.1rem;accent-color:var(--color-primary)}.leaderboard-panel{gap:var(--space-md);display:grid}.leaderboard-tabs{flex-wrap:wrap;gap:.5rem;display:flex}.leaderboard-tabs__tab{border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:8px;padding:.45rem .85rem;font-size:.9rem}.leaderboard-tabs__tab--active{border-color:var(--color-primary);color:var(--color-primary);background:var(--purple-50);font-weight:600}.leaderboard-header{border-bottom:1px solid var(--border);text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);grid-template-columns:2.5rem 1fr auto;align-items:center;gap:.75rem;padding:0 0 .35rem;font-size:.8rem;display:grid}.leaderboard-header__rank{text-align:center}.leaderboard-header__score{text-align:right}.leaderboard-list{margin:0;padding:0;list-style:none}.leaderboard-row{border-top:1px solid var(--border);grid-template-columns:2.5rem 1fr auto;align-items:center;gap:.75rem;padding:.75rem 0;display:grid}.leaderboard-row:first-child{border-top:none}.leaderboard-row--me{background:var(--purple-50);border-radius:8px;margin:0 -.75rem;padding-left:.75rem;padding-right:.75rem}.leaderboard-row__rank{text-align:center;color:var(--text-secondary);font-weight:600}.leaderboard-row__main{align-items:center;gap:.65rem;min-width:0;display:flex}.leaderboard-row__identity{gap:.1rem;min-width:0;display:grid}.leaderboard-row__name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.leaderboard-row__lang{font-size:.85rem}.leaderboard-row__score{font-variant-numeric:tabular-nums;text-align:right;font-weight:700}.leaderboard-me{border-top:1px dashed var(--border);margin-top:.5rem;padding-top:.75rem}.leaderboard-me__label{margin:0 0 .35rem;font-size:.85rem}.login-brand{color:var(--color-primary)}@media (width>=769px){.app-shell__nav--desktop{display:flex}.app-shell__bottom{display:none}.app-shell__content .page{padding:var(--space-lg)}}@media (width<=768px){.app-shell__sign-out{display:none}.feature-cards{grid-template-columns:1fr}.dashboard{gap:var(--space-md);width:min(100%,720px)}.header-row{flex-direction:column;align-items:stretch}.session-layout{grid-template-columns:1fr;height:auto}.session-chat{min-height:55vh}.flashcard-levels__row{grid-template-columns:repeat(3,minmax(0,1fr))}.dashboard-section__header{flex-direction:column}}
