:root{--bg0: #faf9f7;--bg1: #ffffff;--bg2: #f2f0ec;--bg3: #e8e5de;--text0: #1a1918;--text1: #5a5755;--text2: #767270;--line1: rgba(0, 0, 0, .08);--line2: rgba(0, 0, 0, .15);--blue-bg: #e8f1fb;--blue: #1a5fa8;--green-bg: #eaf4e0;--green: #3a6d12;--amber-bg: #fef3e2;--amber: #92520a;--font: "Segoe UI", system-ui, sans-serif}@media(prefers-color-scheme:dark)and (min-width:721px){:root{--bg0: #181716;--bg1: #1f1e1d;--bg2: #272624;--bg3: #302e2c;--text0: #f0ede8;--text1: #b8b2ad;--text2: #807a75;--line1: rgba(255, 255, 255, .07);--line2: rgba(255, 255, 255, .14);--blue-bg: #173451;--blue: #89c3ef;--green-bg: #203418;--green: #91c96b;--amber-bg: #3d2a0a;--amber: #f0a84a}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;overflow:hidden;background:var(--bg0);color:var(--text0);font-family:var(--font);font-size:15px;line-height:1.55}button,textarea{font:inherit}button{border:0}.app-shell{display:flex;flex-direction:column;height:100%;min-width:320px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:58px;padding:9px 14px;border-bottom:1px solid var(--line1);background:var(--bg1)}.brand,.top-actions{display:flex;align-items:center;gap:10px;min-width:0}.brand h1{margin:0;font-size:15px;font-weight:700}.brand p{margin:1px 0 0;color:var(--text1);font-size:11px}.mark{display:grid;width:32px;height:32px;place-items:center;border:1px solid var(--line1);border-radius:8px;background:var(--bg2);color:var(--blue);font-weight:800}.top-actions{justify-content:flex-end;flex-wrap:wrap}.badge{display:inline-flex;align-items:center;min-height:22px;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;white-space:nowrap}.badge.info{background:var(--blue-bg);color:var(--blue)}.badge.success{background:var(--green-bg);color:var(--green)}.badge.warn{background:var(--amber-bg);color:var(--amber)}.badge.badge-model{background:transparent;color:var(--text2);border:1px solid var(--line2);border-radius:8px;font-size:10px;font-weight:700;letter-spacing:.02em}.icon-button{display:grid;width:30px;height:30px;place-items:center;cursor:pointer;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--text1)}.tts-rate-btn{width:auto;padding:0 8px;font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--text2)}.tts-rate-btn:hover{color:var(--text0)}.cost-chip{font-size:10px;color:var(--text2);white-space:nowrap;letter-spacing:.02em;padding:0 2px}.export-btn-wrap{position:relative;display:inline-flex;flex-shrink:0}.export-count-badge{position:absolute;top:-5px;right:-5px;background:var(--amber);color:#fff;font-size:9px;font-weight:700;line-height:1;padding:2px 4px;border-radius:999px;pointer-events:none}.icon-button:hover,.button:hover{background:var(--bg2)}.mobile-only{display:none}.topbar-secondary{display:flex;align-items:center;gap:10px}.options-menu-wrap{position:relative}.options-backdrop{position:fixed;inset:0;z-index:49}.options-dropdown{position:absolute;top:calc(100% + 6px);right:0;z-index:50;min-width:180px;padding:6px 0;border:1px solid var(--line2);border-radius:10px;background:var(--bg1);box-shadow:0 8px 24px #0000002e}.options-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;border:none;background:none;color:var(--text0);font-size:13px;cursor:pointer;white-space:nowrap}.options-item:hover{background:var(--bg2)}.options-item.danger{color:#c53030}.options-sep{height:1px;margin:4px 10px;background:var(--line1)}.options-badge{margin-left:auto;font-size:10px;font-weight:700;color:var(--text2)}.topbar-tools{display:flex;gap:4px;align-items:center}.topbar-tool-btn{padding:5px 12px;background:var(--bg2);border:1px solid var(--line1);border-radius:6px;color:var(--text1);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:background .15s,color .15s,border-color .15s;display:flex;align-items:center;gap:5px;white-space:nowrap}.topbar-tool-btn:hover{background:var(--bg3);color:var(--text0);border-color:var(--text3)}.topbar-tool-btn.tab-required{border-color:var(--amber);color:var(--amber);background:var(--amber-bg)}.topbar-tool-btn.tab-done{border-color:var(--green);color:var(--green);background:var(--green-bg)}.settings-menu-wrap{position:relative}.settings-btn{color:var(--text2)}.settings-btn:hover{color:var(--text0)}.settings-dropdown{min-width:220px}.settings-status-row{display:flex;align-items:center;gap:6px}.settings-label{color:var(--text2);font-size:12px}.tool-btn{padding:5px 10px;background:var(--bg2);border:1px solid var(--line1);border-radius:6px;color:var(--text2);font-size:11px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s;text-align:center}.tool-btn:hover{background:var(--bg3);color:var(--text0)}.tool-btn.tab-required{border-color:var(--amber);color:var(--amber);background:var(--amber-bg)}.tool-btn.tab-done{border-color:var(--green);color:var(--green);background:var(--green-bg)}.progress-strip{flex-shrink:0;padding:6px 14px 8px;border-bottom:1px solid var(--line1);background:var(--bg1)}.progress-track{height:4px;overflow:hidden;border-radius:4px;background:var(--bg3)}.progress-fill{height:100%;border-radius:inherit;background:var(--blue);transition:width .24s ease}.progress-fill-correct{position:absolute;left:0;height:100%;border-radius:inherit;background:var(--green, #22c55e);transition:width .3s ease}.progress-fill-incorrect{position:absolute;height:100%;border-radius:0 4px 4px 0;background:var(--red, #ef4444);transition:width .3s ease,left .3s ease}.progress-track{position:relative}.progress-correct{color:var(--green, #22c55e);font-weight:600}.progress-incorrect{color:var(--red, #ef4444);font-weight:600}.progress-target{color:var(--text2)}.progress-labels{display:flex;justify-content:space-between;gap:12px;margin-top:4px;color:var(--text2);font-size:10px}.lesson-progress-label{font-weight:600;color:var(--text1);white-space:nowrap}.lesson-progress-detail{font-weight:400;color:var(--text2)}.main-layout{display:flex;flex:1;min-height:0}.chat-panel{display:flex;flex:1;min-width:0;flex-direction:column;border-right:1px solid var(--line1)}.messages{display:flex;flex:1;min-height:0;flex-direction:column;gap:10px;overflow-y:auto;padding:12px;position:relative}.selection-buttons{position:absolute;z-index:10;display:flex;gap:4px}.selection-speak-btn,.selection-dict-btn{display:grid;place-items:center;width:32px;height:32px;border:none;border-radius:8px;background:var(--bg0);color:var(--text1);box-shadow:0 2px 8px #0000002e;cursor:pointer;transition:opacity .15s}.selection-speak-btn:hover{background:var(--amber);color:#fff}.selection-dict-btn:hover{background:var(--blue);color:#fff}.message{display:flex;max-width:92%;gap:8px}.message.user{align-self:flex-end;flex-direction:row-reverse}.avatar{display:grid;width:28px;height:28px;flex-shrink:0;place-items:center;margin-top:1px;border:1px solid var(--line1);border-radius:999px;background:var(--bg2);color:var(--text1);font-size:10px;font-weight:700}.bubble-wrap{display:flex;flex-direction:column;gap:4px;min-width:0}.exercise-badge{display:inline-block;align-self:flex-start;font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--blue);background:var(--blue-bg);padding:2px 8px;border-radius:999px}.bubble{padding:9px 12px;border:1px solid var(--line1);border-radius:12px;background:var(--bg1);color:var(--text0);font-size:16px;line-height:1.9;word-break:break-word}.bubble ruby{ruby-align:center}.bubble rt{font-size:.6em;color:var(--text2)}.bubble p{margin:0 0 8px}.bubble p:last-child{margin-bottom:0}.bubble ul,.bubble ol{margin:2px 0 8px;padding-left:22px}.bubble li{margin-bottom:3px}.bubble hr{border:none;border-top:1px solid var(--line1);margin:10px 0}.bubble h1,.bubble h2,.bubble h3{margin:6px 0 4px;font-size:1em;font-weight:700}.speak-inline-btn{display:inline-flex;align-items:flex-start;gap:5px;margin:4px 0;padding:6px 10px;border:1px solid color-mix(in srgb,var(--blue),transparent 60%);border-radius:8px;background:var(--blue-bg);color:var(--text0);cursor:pointer;font:inherit;font-size:.9em;line-height:1.7;white-space:normal;text-align:left;vertical-align:top}.speak-inline-btn:hover{background:color-mix(in srgb,var(--blue-bg),var(--bg3) 30%)}.qcm-options{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.qcm-btn{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid var(--line2);border-radius:8px;background:var(--bg0);color:var(--text0);cursor:pointer;font:inherit;font-size:12px;transition:background .12s,border-color .12s,color .12s}.qcm-btn:hover:not(:disabled){background:var(--blue-bg);border-color:var(--blue);color:var(--blue)}.qcm-btn:disabled{opacity:.45;cursor:not-allowed}.qcm-letter{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0;border-radius:50%;background:var(--bg3);font-size:10px;font-weight:700}.message.user .bubble{background:var(--bg2)}.typing{display:inline-flex;align-items:center;gap:7px;color:var(--text1)}.typing svg{animation:spin .8s linear infinite}.composer{display:flex;flex-shrink:0;gap:7px;padding:9px 10px;border-top:1px solid var(--line1);background:var(--bg1)}.composer textarea{flex:1;height:38px;min-width:0;resize:none;border:1px solid var(--line2);border-radius:8px;background:var(--bg0);color:var(--text0);padding:8px 10px}.composer textarea:focus{outline:none;border-color:var(--blue)}.button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;min-width:38px;padding:0 12px;cursor:pointer;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--text0);white-space:nowrap}.button.primary{border-color:transparent;background:var(--blue);color:#fff}.button.soft{border-color:transparent;background:var(--amber-bg);color:var(--amber)}.button.danger{border-color:transparent;background:#a83a2a;color:#fff}.button:disabled{cursor:not-allowed;opacity:.42}.vocab-panel{display:flex;width:320px;flex-shrink:0;flex-direction:column;background:var(--bg1);order:-1}.chat-panel{border-right:0;border-left:1px solid var(--line1)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border-bottom:1px solid var(--line1);color:var(--text1)}.panel-head span{display:block;color:var(--text2);font-size:10px;letter-spacing:0;text-transform:uppercase}.panel-head strong{display:block;margin-top:1px;color:var(--text0);font-size:13px}.panel-tabs{display:flex;border-bottom:1px solid var(--line1);flex-shrink:0}.panel-tab{flex:1;padding:8px 0;border:none;background:none;color:var(--text2);font-size:12px;font-weight:600;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.panel-tab:hover{color:var(--text0)}.panel-tab.active{color:var(--blue);border-bottom-color:var(--blue)}.lesson-box{flex-shrink:0;padding:9px 12px;border-bottom:1px solid var(--line1);color:var(--text1)}.lesson-box span,.section-label{display:block;color:var(--text2);font-size:10px;letter-spacing:0;text-transform:uppercase}.lesson-box ul{margin:5px 0 9px 16px;padding:0;font-size:11px;line-height:1.45}.target-vocab{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}.target-vocab span{padding:2px 7px;border:1px solid var(--line1);border-radius:999px;background:var(--bg0);color:var(--text0);font-size:12px}.vocab-list{display:flex;flex:1;min-height:0;flex-direction:column;gap:6px;overflow-y:auto;padding:7px}.section-label{padding:3px 3px 1px;flex-shrink:0}.empty{padding:22px 10px;color:var(--text2);font-size:12px;line-height:1.7;text-align:center}.vocab-card{padding:8px 9px;border:1px solid var(--line1);border-radius:8px;background:var(--bg0)}.vocab-card strong{display:block;font-size:17px}.vocab-card em{display:block;margin-top:1px;color:var(--text2);font-size:10px}.vocab-card span{display:block;margin-top:4px;color:var(--text1);font-size:12px}.memory-box{flex-shrink:0;padding:9px 12px;border-top:1px solid var(--line1);color:var(--text1)}.collapsible-head{display:flex;align-items:center;justify-content:space-between;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text2);font-size:10px;letter-spacing:0;text-transform:uppercase;padding:2px 0 4px}.collapsible-head:hover{color:var(--text1)}.collapsible-head svg{flex-shrink:0}.memory-box span{display:block;margin-bottom:4px;color:var(--text2);font-size:10px;letter-spacing:0;text-transform:uppercase}.memory-box p,.memory-box ul{margin:0;padding:0;overflow-y:auto;font-size:11px;line-height:1.55;white-space:pre-wrap}.memory-box p{max-height:72px;margin-bottom:8px}.memory-box ul{max-height:78px;margin:0 0 8px 16px}.status-line{min-height:34px;margin:0;padding:0 12px 10px;color:var(--text2);font-size:10px;line-height:1.5;text-align:center}.modal-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:18px;background:#00000047}.confirm-dialog{display:grid;grid-template-columns:34px 1fr;gap:12px;width:min(440px,100%);padding:16px;border:1px solid var(--line2);border-radius:8px;background:var(--bg1);box-shadow:0 20px 60px #00000038}.confirm-icon{display:grid;width:34px;height:34px;place-items:center;border-radius:8px;background:var(--amber-bg);color:var(--amber)}.confirm-dialog h2{margin:0;font-size:15px}.confirm-dialog p{margin:6px 0 14px;color:var(--text1);font-size:12px;line-height:1.6}.confirm-actions{display:flex;justify-content:flex-end;gap:8px}.login-dialog{display:flex;width:min(360px,100%);flex-direction:column;align-items:stretch;gap:10px;padding:18px;border:1px solid var(--line2);border-radius:8px;background:var(--bg1);box-shadow:0 20px 60px #00000038}.login-dialog .mark{align-self:center}.login-dialog h2{margin:0;text-align:center;font-size:16px}.login-dialog p{margin:0 0 4px;color:var(--text1);font-size:12px;line-height:1.55;text-align:center}.login-dialog input{height:38px;border:1px solid var(--line2);border-radius:8px;background:var(--bg0);color:var(--text0);padding:0 10px;font:inherit}.login-dialog input:focus{outline:none;border-color:var(--blue)}.login-error{color:#a83a2a;font-size:11px;text-align:center}.toast-container{position:fixed;top:12px;right:12px;z-index:100;display:flex;flex-direction:column;gap:8px;max-width:min(340px,calc(100vw - 24px));pointer-events:none}.toast{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;border:1px solid var(--line2);background:var(--bg1);box-shadow:0 4px 16px #00000024;font-size:12px;pointer-events:all;animation:toast-in .2s ease}@keyframes toast-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.toast span{flex:1}.toast-close{display:grid;place-items:center;width:20px;height:20px;flex-shrink:0;cursor:pointer;border:0;border-radius:4px;background:transparent;color:var(--text2)}.toast-info{color:var(--text0)}.toast-success{border-color:color-mix(in srgb,var(--green),transparent 50%);color:var(--green)}.toast-warn{border-color:color-mix(in srgb,var(--amber),transparent 50%);color:var(--amber)}.toast-error{border-color:color-mix(in srgb,#a83a2a,transparent 50%);color:#a83a2a}.offline-banner{display:flex;align-items:center;justify-content:center;gap:6px;padding:5px 14px;background:var(--amber-bg);color:var(--amber);font-size:11px;font-weight:600}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot.ok{background:var(--green)}.status-dot.partial{background:var(--amber)}.status-dot.off{background:#a83a2a}.progress-stats{display:inline;color:var(--text2);font-size:11px}.sheet-handle{display:none}.grammar-active{border-color:var(--blue)!important;background:var(--blue-bg)!important;color:var(--blue)!important}.vocab-card-head{display:flex;align-items:center;justify-content:space-between;gap:4px}.speak-btn{display:grid;width:24px;height:24px;flex-shrink:0;place-items:center;cursor:pointer;border:1px solid var(--line1);border-radius:6px;background:transparent;color:var(--text2)}.speak-btn:hover{background:var(--bg2);color:var(--text0)}.usage-box{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin:0 8px 4px;padding:6px 9px;border:1px solid var(--line1);border-radius:8px;background:var(--bg0);color:var(--text2);font-size:10px}.usage-box svg{flex-shrink:0;color:var(--text2)}.usage-total{margin-left:auto;color:var(--text2)}.chevron-icon{transition:transform .2s ease;flex-shrink:0;color:var(--text2)}.sheet-chevron-half{transform:rotate(0)}.sheet-chevron-full{transform:rotate(180deg)}.sheet-chevron-closed{transform:rotate(0)}@media(max-width:720px){.desktop-only,.topbar-tools{display:none}.main-layout{flex-direction:column;position:relative}.chat-panel{flex:1;min-height:0;border-right:0}.vocab-panel{position:fixed;bottom:0;left:0;right:0;width:100%;z-index:30;border-top:1px solid var(--line2);border-radius:14px 14px 0 0;box-shadow:0 -4px 20px #0000001f;transition:max-height .3s cubic-bezier(.32,.72,0,1);overflow:hidden}.vocab-panel.bottom-sheet-closed{max-height:44px}.vocab-panel.bottom-sheet-half{max-height:45vh;overflow-y:auto}.vocab-panel.bottom-sheet-full{max-height:90vh;overflow-y:auto}.sheet-handle{display:flex;align-items:center;gap:8px;padding:10px 14px;cursor:pointer;background:var(--bg1);flex-shrink:0;min-height:44px}.handle-bar{width:32px;height:4px;border-radius:2px;background:var(--bg3);position:absolute;top:6px;left:50%;transform:translate(-50%)}.handle-summary{display:flex;gap:8px;flex:1;font-size:12px;color:var(--text1)}.handle-summary span:last-child{color:var(--text2)}.panel-head{display:none}.composer{position:relative;z-index:31}.composer textarea{min-height:44px}.composer-focused .button:not(.primary){display:none}.btn-label{display:none}.mobile-only{display:flex}.topbar-secondary{display:none}.vocab-list{flex-direction:row;overflow-x:auto;overflow-y:hidden}.vocab-card{min-width:150px}}@media(max-width:520px){.topbar{flex-direction:row;align-items:center;min-height:44px;padding:6px 10px}.brand p{display:none}.top-actions{justify-content:flex-end}.badge.badge-model{display:inline-flex}.progress-labels{flex-wrap:wrap;gap:4px 12px}.button{padding:0 10px}.composer .button{min-width:38px;padding:0}}@supports (padding: env(safe-area-inset-bottom)){.composer{padding-bottom:calc(9px + env(safe-area-inset-bottom))}.vocab-panel.bottom-sheet-closed{padding-bottom:env(safe-area-inset-bottom)}}.review-overlay{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:18px;background:#0000006b}.review-modal{display:flex;width:min(420px,100%);max-height:90vh;flex-direction:column;border:1px solid var(--line2);border-radius:14px;background:var(--bg1);box-shadow:0 24px 64px #00000047;overflow:hidden}.review-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--line1);color:var(--text2);font-size:11px}.review-card{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:28px 20px;cursor:pointer;min-height:200px;text-align:center}.review-it{display:flex;align-items:center;gap:8px;font-size:2.4em;font-weight:700;color:var(--text0)}.review-answer{display:flex;flex-direction:column;align-items:center;gap:6px;animation:review-fade .18s ease}@keyframes review-fade{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.review-pronunciation{color:var(--text2);font-size:.95em}.review-meaning{font-size:1.25em;font-weight:600;color:var(--text0)}.review-example{color:var(--text1);font-size:.85em;font-style:italic;max-width:90%}.review-tap{color:var(--text2);font-size:.85em}.review-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px;border-top:1px solid var(--line1)}.review-actions .button{justify-content:center}.review-done{display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 24px;text-align:center}.review-score{font-size:3em;font-weight:800;color:var(--blue)}.review-done p{margin:0;color:var(--text1);font-size:13px}.review-btn{display:flex;align-items:center;gap:6px;margin:6px 0 4px;padding:7px 10px;border:1px solid var(--line1);border-radius:8px;background:var(--bg0);color:var(--text1);cursor:pointer;font-size:12px;justify-content:center;width:100%}.review-progress-bar{height:3px;background:var(--bg3);flex-shrink:0}.review-progress-fill{height:100%;background:var(--blue);transition:width .2s ease}.review-streak-badge{flex:1;text-align:center;font-size:11px;font-weight:700;color:var(--green);background:var(--green-bg);padding:2px 8px;border-radius:999px;max-width:60px}.review-nextdue{color:var(--text2);font-size:11px;margin:0}.review-format-badge{font-size:10px;font-weight:600;padding:2px 7px;border-radius:999px;border:1px solid currentColor}.review-format-badge.format-audio{color:var(--amber)}.review-format-badge.format-phrase{color:var(--text2)}.review-header{display:flex;align-items:center;gap:8px;justify-content:flex-start}.review-header .icon-button{margin-left:auto}.review-header .review-streak-badge{flex:none;text-align:left}.review-fr{font-size:2em;font-weight:600;color:var(--text0);text-align:center}.review-audio-front{display:flex;flex-direction:column;align-items:center;gap:14px}.review-audio-big-btn{display:flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:50%;border:none;background:var(--amber-bg);color:var(--amber);cursor:pointer;transition:transform .1s,background .12s}.review-audio-big-btn:hover{background:var(--amber);color:#fff;transform:scale(1.06)}.review-audio-hint{color:var(--text2);font-size:.9em}.review-phrase-front{font-size:1.4em;color:var(--text0);text-align:center;line-height:1.8}.review-phrase-front ruby rt{font-size:.45em;color:var(--text2)}.review-replay-btn{display:flex;align-items:center;gap:5px;padding:5px 12px;border:1px solid var(--line1);border-radius:8px;background:var(--bg2);color:var(--text1);cursor:pointer;font-size:12px;margin-top:6px}.review-replay-btn:hover{background:var(--bg3)}.dialogue-modal{display:flex;width:min(480px,100%);max-height:88vh;flex-direction:column;border:1px solid var(--line2);border-radius:14px;background:var(--bg1);box-shadow:0 24px 64px #00000047;overflow:hidden}.dialogue-modal-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--line1);flex-shrink:0}.dialogue-modal-title{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text0)}.dialogue-lines-container{flex:1;overflow-y:auto;padding:16px 14px;display:flex;flex-direction:column;gap:12px}.dialogue-line{display:flex;flex-direction:column;gap:4px;max-width:80%;animation:review-fade .2s ease}.dialogue-line.other{align-self:flex-start}.dialogue-line.self{align-self:flex-end;align-items:flex-end}.dialogue-speaker{font-size:10px;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.05em;padding-left:4px}.dialogue-bubble{padding:10px 13px;border-radius:12px;background:var(--bg2);border:1px solid var(--line1)}.dialogue-line.self .dialogue-bubble{background:var(--blue-bg);border-color:color-mix(in srgb,var(--blue) 30%,transparent)}.dialogue-it{font-size:1.1em;color:var(--text0);line-height:1.6}.dialogue-it ruby rt{font-size:.5em;color:var(--text2)}.dialogue-fr{font-size:.82em;color:var(--text2);margin-top:4px;font-style:italic}.dialogue-tts-btn{display:flex;align-items:center;gap:4px;padding:3px 7px;border:1px solid var(--line1);border-radius:6px;background:transparent;color:var(--text2);cursor:pointer;font-size:11px;margin-top:2px;align-self:flex-start}.dialogue-line.self .dialogue-tts-btn{align-self:flex-end}.dialogue-tts-btn:hover{background:var(--bg3);color:var(--text0)}.dialogue-cultural-note{margin:0 14px 8px;padding:10px 12px;border-radius:8px;background:var(--amber-bg);color:var(--amber);font-size:12px;line-height:1.5;flex-shrink:0}.dialogue-controls{padding:10px 14px;border-top:1px solid var(--line1);flex-shrink:0}.dialogue-next-btn{width:100%;justify-content:center}.dialogue-done-actions{display:flex;gap:8px}.dialogue-done-actions .button{flex:1;justify-content:center}.active-toggle{background:var(--blue-bg);border-color:var(--blue);color:var(--blue)}.dialogue-selector-list{display:flex;flex-direction:column;padding:8px;gap:4px;overflow-y:auto}.dialogue-selector-item{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line1);border-radius:10px;background:var(--bg0);cursor:pointer;text-align:left;transition:background .12s}.dialogue-selector-item:hover{background:var(--bg2)}.dialogue-selector-item.listened{opacity:.55}.dialogue-selector-item.listened:hover{opacity:.8}.dialogue-selector-title{flex:1;font-size:14px;font-weight:500;color:var(--text0)}.dialogue-selector-meta{display:flex;flex-direction:column;align-items:flex-end;gap:2px}.dialogue-selector-lesson{font-size:11px;color:var(--blue);font-weight:500}.dialogue-selector-count{font-size:11px;color:var(--text2)}.dialogue-open-btn{background:var(--bg0);border-color:color-mix(in srgb,var(--blue) 40%,transparent);color:var(--blue)}.dialogue-open-btn:hover{background:var(--blue-bg)}.mobile-drawer-overlay{position:fixed;inset:0;z-index:40;background:#0000006b}.mobile-drawer{position:absolute;top:0;left:0;right:0;max-height:80vh;overflow-y:auto;background:var(--bg1);border-radius:0 0 14px 14px;box-shadow:0 8px 32px #0003;animation:drawer-slide-in .22s cubic-bezier(.32,.72,0,1)}@keyframes drawer-slide-in{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.mobile-drawer-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line1);font-weight:600;font-size:14px;position:sticky;top:0;background:var(--bg1);z-index:1}.mobile-drawer-section{padding:12px 14px;border-bottom:1px solid var(--line1)}.mobile-drawer-label{color:var(--text2);font-size:10px;text-transform:uppercase;letter-spacing:0;margin-bottom:8px}.mobile-drawer-goals{margin:0 0 8px 16px;padding:0;font-size:12px;line-height:1.5;color:var(--text1)}.mobile-vocab-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-top:8px}.mobile-menu-trigger{cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}.mic-btn.recording{background:#e53e3e;color:#fff;border-color:#e53e3e}.mic-overlay{display:flex;align-items:center;gap:10px;padding:8px 14px;margin:0 12px 6px;background:var(--bg2);border:1px solid var(--line2);border-radius:10px;font-size:13px;color:var(--text1)}.mic-dot{width:10px;height:10px;border-radius:50%;background:#e53e3e;flex-shrink:0;animation:mic-pulse 1s ease infinite}@keyframes mic-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.75)}}.mic-overlay-label{flex:1;font-variant-numeric:tabular-nums}.mic-stop-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid var(--line2);border-radius:7px;background:transparent;color:var(--text1);font-size:12px;font-family:inherit;cursor:pointer}.mic-stop-btn:hover{background:var(--bg3)}.mic-spinner{animation:spin 1s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.mic-error{margin:0 12px 6px;padding:6px 12px;background:#fff5f5;color:#c53030;border:1px solid #feb2b2;border-radius:8px;font-size:12px;cursor:pointer}@media(prefers-color-scheme:dark)and (min-width:721px){.mic-error{background:#2d1b1b;color:#fc8181;border-color:#742a2a}}.phrase-trou-form{display:flex;flex-direction:column;gap:8px}.phrase-trou-bubble{display:inline;line-height:1.9}.phrase-trou-input{display:inline-block;width:90px;height:26px;padding:0 6px;border:0;border-bottom:2px solid var(--blue);border-radius:0;background:transparent;color:var(--text0);font:inherit;font-size:.95em;vertical-align:baseline;margin:0 2px}.phrase-trou-input:focus{outline:none;background:var(--blue-bg);border-radius:4px 4px 0 0}.phrase-trou-input:disabled{opacity:.45}.phrase-trou-submit{align-self:flex-start;gap:5px;font-size:12px;padding:0 10px;min-height:30px}.assoc-widget{margin-top:8px;display:flex;flex-direction:column;gap:8px}.assoc-rows{display:flex;flex-direction:column;gap:5px}.assoc-row{display:flex;align-items:center;gap:8px}.assoc-question{display:flex;align-items:center;gap:4px;min-width:70px;max-width:130px}.assoc-num{font-size:11px;color:var(--text2);min-width:14px;flex-shrink:0}.assoc-slot{flex:1;min-height:32px;padding:4px 9px;border:1.5px dashed var(--line2);border-radius:7px;display:flex;align-items:center;gap:5px;font-size:13px;color:var(--text2);cursor:pointer;transition:border-color .12s,background .12s;-webkit-user-select:none;user-select:none}.assoc-slot.droppable{border-color:var(--blue);background:var(--blue-bg)}.assoc-slot.drag-over{border-style:solid;border-color:var(--blue);background:var(--blue-bg)}.assoc-slot.filled{border-style:solid;border-color:var(--green);background:var(--green-bg);color:var(--text0);font-weight:500;cursor:grab}.assoc-slot.filled:active{cursor:grabbing}.assoc-slot-placeholder{color:var(--text2);font-size:11px;letter-spacing:3px}.assoc-chip-id{font-size:10px;font-weight:700;color:var(--blue);background:var(--blue-bg);padding:1px 4px;border-radius:3px;min-width:16px;text-align:center;flex-shrink:0}.assoc-slot.filled .assoc-chip-id{color:var(--green);background:transparent;padding:0}.assoc-pool{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px;border-top:1px dashed var(--line1)}.assoc-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:var(--bg2);border:1.5px solid var(--line2);border-radius:7px;font:inherit;font-size:12px;color:var(--text0);cursor:grab;transition:border-color .12s,background .12s,box-shadow .12s}.assoc-chip:hover:not(:disabled){border-color:var(--blue);background:var(--bg3)}.assoc-chip.selected{border-color:var(--blue);background:var(--blue-bg);color:var(--blue);box-shadow:0 0 0 2px var(--blue-bg)}.assoc-chip:disabled{opacity:.4;cursor:not-allowed}.assoc-chip:active:not(:disabled){transform:scale(.97)}.assoc-submit{margin-top:2px}.vocab-search-bar{display:flex;gap:6px;padding:0 0 8px}.vocab-search-input{flex:1;min-width:0;padding:6px 10px;border:1px solid var(--line2);border-radius:8px;background:var(--bg0);color:var(--text0);font-size:13px;font-family:inherit}.vocab-search-input:focus{outline:none;border-color:var(--blue)}.vocab-search-clear{width:28px;height:28px;flex-shrink:0}.vocab-search-btn{gap:4px}.vocab-detail-modal{display:flex;width:min(440px,100%);max-height:90vh;flex-direction:column;border:1px solid var(--line2);border-radius:14px;background:var(--bg1);box-shadow:0 24px 64px #00000047;overflow:hidden}.vocab-detail-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--line1);color:var(--text2);font-size:11px}.vocab-detail-content{flex:1;overflow-y:auto;padding:24px 20px;display:flex;flex-direction:column;align-items:center;gap:10px}.vocab-detail-word{display:flex;align-items:center;gap:10px;font-size:2.4em;font-weight:700;color:var(--text0)}.vocab-detail-speak{width:36px;height:36px;border-radius:50%;border:1px solid var(--line2);display:grid;place-items:center;cursor:pointer;background:transparent;color:var(--text1)}.vocab-detail-speak:hover{background:var(--bg2)}.vocab-detail-pronunciation{color:var(--text2);font-size:.95em}.vocab-detail-meaning{font-size:1.25em;font-weight:600;color:var(--text0)}.vocab-detail-example{width:100%;margin-top:8px;padding:12px;border:1px solid var(--line1);border-radius:10px;background:var(--bg2);display:flex;flex-direction:column;gap:6px}.vocab-detail-example-fr{font-style:italic;color:var(--text2);font-size:.9em}.vocab-detail-section-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text2)}.grammar-panel{display:flex;flex-direction:column;gap:2px;padding:4px 0}.grammar-loading,.grammar-empty{padding:16px;text-align:center;color:var(--text2);font-size:13px}.grammar-lesson-header{display:flex;align-items:center;gap:8px;width:100%;padding:8px 4px;border:none;background:none;color:var(--text0);font-size:13px;cursor:pointer;text-align:left;border-radius:6px;transition:background .1s}.grammar-lesson-header:hover:not(:disabled){background:var(--bg2)}.grammar-lesson-header:disabled{cursor:default;opacity:.5}.grammar-lesson-title{flex:1;font-weight:500}.grammar-status-icon.completed{color:var(--green)}.grammar-status-icon.current{color:var(--blue)}.grammar-status-icon.locked{color:var(--text2)}.grammar-points{list-style:none;padding:0 0 6px 30px;margin:0}.grammar-point{font-size:12px;color:var(--text1);padding:3px 0;line-height:1.4}.grammar-point:before{content:"・";margin-right:4px;color:var(--text2)}.vocab-delete-btn{color:var(--text2)}.vocab-delete-btn:hover,.vocab-delete-confirm-btn{color:var(--red, #c0392b)}.vocab-detail-dict-btn{margin-top:4px;display:inline-flex;align-items:center;gap:6px;font-size:12px}.vocab-detail-jisho{margin:6px 0 4px;display:flex;flex-direction:column;gap:3px}.vocab-detail-jisho-sense{display:flex;align-items:baseline;gap:5px;font-size:12px;line-height:1.4}.vocab-detail-jisho-num{color:var(--text3);min-width:14px;font-size:11px}.vocab-detail-jisho-def{color:var(--text1);flex:1}.vocab-detail-jisho-tag{font-size:10px;color:var(--text3);background:var(--bg2);border:1px solid var(--line1);border-radius:3px;padding:1px 4px;white-space:nowrap}.dict-add-btn{color:var(--blue)}.dict-add-btn.added{color:var(--green, #22c55e);opacity:.7}.vocab-action-bar{display:flex;gap:6px}.vocab-dict-btn.active-toggle{background:var(--bg3);color:var(--text0)}.inline-dict-panel{padding:6px 0}.inline-dict-form{display:flex}.inline-dict-input{width:100%;padding:6px 8px;border:1px solid var(--line1);border-radius:6px;font-size:13px;font-family:inherit;background:var(--bg0);color:var(--text0)}.inline-dict-input:focus{outline:none;border-color:var(--blue)}.inline-dict-loading{padding:8px 0;font-size:12px;color:var(--text2)}.inline-dict-empty{padding:8px 0;font-size:12px;color:var(--text3)}.inline-dict-results{max-height:300px;overflow-y:auto}.inline-dict-entry{padding:6px 0;border-bottom:1px solid var(--line1)}.inline-dict-entry:last-child{border-bottom:none}.inline-dict-entry-head{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.inline-dict-word{font-weight:600;font-size:14px}.inline-dict-def{font-size:12px;color:var(--text1);margin-top:2px}.inline-dict-add-btn{color:var(--blue)}.inline-dict-add-btn.added{color:var(--green, #22c55e);opacity:.7}.dictionary-popup{display:flex;width:min(500px,95vw);max-height:85vh;flex-direction:column;border:1px solid var(--line2);border-radius:14px;background:var(--bg1);box-shadow:0 24px 64px #00000047;overflow:hidden}.dictionary-content{flex:1;overflow-y:auto;padding:16px 20px}.dictionary-loading{display:flex;align-items:center;gap:8px;color:var(--text2);padding:24px 0;justify-content:center}.dictionary-error{color:var(--red, #c0392b);padding:16px 0;text-align:center}.dictionary-empty{color:var(--text2);padding:24px 0;text-align:center;font-style:italic}.dictionary-entry{margin-bottom:8px}.dictionary-entry-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.dictionary-word{font-size:24px;font-weight:600;color:var(--text0)}.dictionary-tags{display:flex;gap:6px;margin:6px 0}.dictionary-tag{font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;text-transform:uppercase}.dictionary-tag.common{background:var(--green);color:#fff}.dictionary-sense{display:flex;gap:6px;margin:6px 0;font-size:14px}.dictionary-sense-num{color:var(--text2);font-weight:600;min-width:18px}.dictionary-pos{font-size:11px;color:var(--text2);font-style:italic;margin-bottom:2px}.dictionary-def{color:var(--text0)}.dictionary-separator{border:none;border-top:1px solid var(--line1);margin:12px 0}.conjugation-panel{padding:4px 0}.verb-type-badge{display:inline-block;padding:3px 10px;border-radius:10px;background:var(--blue);color:#fff;font-size:11px;font-weight:600;margin-bottom:12px}.conjugation-table{width:100%;border-collapse:collapse;font-size:13px}.conjugation-table th{text-align:left;padding:6px 8px;font-size:11px;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.3px;border-bottom:2px solid var(--line1)}.conjugation-group-row td{padding:10px 8px 4px;font-size:11px;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.3px}.conjugation-label{padding:5px 8px;vertical-align:middle}.conjugation-label-fr{display:block;font-size:10px;color:var(--text2)}.conjugation-cell{padding:5px 8px;font-size:14px;color:var(--text0);cursor:pointer;border-radius:4px;transition:background .1s;position:relative}.conjugation-cell:hover{background:var(--bg2)}.conjugation-cell.conjugation-na{color:var(--text2);cursor:default}.conjugation-cell.conjugation-na:hover{background:none}.conjugation-speak{opacity:0;margin-left:4px;color:var(--text2);vertical-align:middle;transition:opacity .15s}.conjugation-cell:hover .conjugation-speak{opacity:1}.conjugation-empty{padding:24px 0;text-align:center;color:var(--text2);font-style:italic}.spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.vocab-detail-section-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:6px 10px;background:var(--bg2);border:none;cursor:pointer;font-family:inherit;color:var(--text2);gap:6px}.vocab-detail-section-toggle:hover{background:var(--bg3, var(--bg2));color:var(--text0)}.error-drill-modal{max-height:min(92vh,700px);display:flex;flex-direction:column}.error-tabs{display:flex;border-bottom:1px solid var(--line1)}.error-tab{flex:1;padding:8px 12px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text2);font-size:12px;font-family:inherit;cursor:pointer;transition:color .15s,border-color .15s}.error-tab:hover{color:var(--text0)}.error-tab.active{color:var(--text0);border-bottom-color:var(--blue);font-weight:600}.error-date{font-size:10px;color:var(--text3);margin-left:auto}.error-drill-loading{padding:32px;text-align:center;color:var(--text2);font-size:14px}.error-filter-bar{display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;border-bottom:1px solid var(--line1);flex-shrink:0}.error-filter-btn{padding:3px 10px;border:1px solid var(--line2);border-radius:12px;background:transparent;font-size:11px;font-family:inherit;cursor:pointer;color:var(--text1);transition:background .12s,border-color .12s}.error-filter-btn.active,.error-filter-btn:hover{background:var(--accent);border-color:var(--accent);color:#fff}.error-list{flex:1;overflow-y:auto;padding:10px 16px;display:flex;flex-direction:column;gap:10px}.error-card{border:1px solid var(--line1);border-radius:8px;padding:10px 12px;background:var(--bg1)}.error-card-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;flex-wrap:wrap}.error-type-badge{padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:var(--bg2);color:var(--text1)}.error-type-article{background:#fde68a;color:#92400e}.error-type-preposition{background:#fef3c7;color:#92400e}.error-type-conjugation{background:#dbeafe;color:#1e40af}.error-type-agreement{background:#e0e7ff;color:#3730a3}.error-type-vocabulary{background:#d1fae5;color:#065f46}.error-type-word_order{background:#fee2e2;color:#991b1b}.error-type-meaning{background:#ffedd5;color:#9a3412}.error-type-spelling{background:#fce7f3;color:#9d174d}.error-type-pronunciation{background:#ede9fe;color:#5b21b6}.error-concept-tag{font-size:10px;color:var(--text2)}.error-lesson{margin-left:auto;font-size:10px;color:var(--text2)}.error-card-body{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.error-line{display:flex;align-items:center;gap:6px;font-size:13px}.error-wrong{color:var(--err, #dc2626);text-decoration:line-through;text-decoration-color:var(--err, #dc2626)}.error-expected{color:var(--ok, #16a34a);font-weight:600}.error-correction{font-size:12px;color:var(--text2);font-style:italic;margin-top:4px}.error-resolve-btn{font-size:11px;padding:3px 10px}.error-empty-filter{text-align:center;color:var(--text2);font-size:13px;padding:20px 0}.det-modal{max-width:520px;width:95vw;padding:0 18px 18px}.det-modal .review-header{margin:0 -18px;padding-left:18px;padding-right:18px}.det-progress-bar{height:4px;background:var(--bg3);border-radius:2px;margin:0 0 6px;overflow:hidden}.det-progress-fill{height:100%;background:var(--blue);border-radius:2px;transition:width .35s ease}.det-counter{font-size:11px;color:var(--text2);text-align:right;margin-bottom:10px}.det-question{margin-bottom:14px}.det-question-text{font-size:14px;color:var(--text1);margin:0}.det-exercise-body{display:flex;flex-direction:column;gap:12px}.det-answer-zone{min-height:48px;background:var(--bg0);border:1.5px dashed var(--line2);border-radius:10px;padding:8px 10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}.det-answer-placeholder{color:var(--text2);font-size:13px;font-style:italic}.det-pool-zone{display:flex;flex-wrap:wrap;gap:6px}.det-chip{padding:6px 12px;border-radius:8px;border:none;cursor:pointer;font-family:var(--font);font-size:15px;transition:opacity .15s,transform .1s}.det-chip ruby rt{font-size:10px}.det-chip-pool{background:var(--bg2);color:var(--text0)}.det-chip-pool:hover:not(:disabled){background:var(--blue-bg);color:var(--blue)}.det-chip-pool:disabled{opacity:.45;cursor:default}.det-chip-selected{background:var(--blue);color:#fff}.det-chip-selected:hover:not(.det-chip-locked){background:#1448a0}.det-chip-locked{cursor:default}.det-exercise-actions{display:flex;align-items:center;gap:8px;justify-content:flex-end}.det-reset-btn{background:none;border:none;cursor:pointer;color:var(--text2);padding:4px;display:flex;align-items:center}.det-reset-btn:hover{color:var(--text0)}.det-exercise-sentence{font-size:20px;text-align:center;padding:12px 0}.det-options-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.det-option-btn{padding:10px 0;border-radius:8px;border:1.5px solid var(--line2);background:var(--bg1);font-size:18px;cursor:pointer;transition:background .15s,border-color .15s}.det-option-btn:hover:not(:disabled){background:var(--blue-bg);border-color:var(--blue)}.det-option-correct{background:var(--green-bg)!important;border-color:var(--green)!important;color:var(--green);font-weight:700}.det-option-wrong{background:#fde8e8!important;border-color:#d9534f!important;color:#d9534f;text-decoration:line-through}.det-option-disabled{opacity:.45;cursor:default}.det-conjugaison-verb{display:flex;align-items:center;gap:10px;font-size:20px;padding:8px 0}.det-verb-arrow{color:var(--text2)}.det-verb-form{color:var(--blue);font-size:14px;background:var(--blue-bg);padding:2px 8px;border-radius:6px}.det-conjugaison-input-row{display:flex;gap:8px}.det-conj-input{flex:1;padding:9px 12px;border:1.5px solid var(--line2);border-radius:8px;font-size:17px;font-family:var(--font);background:var(--bg1);color:var(--text0);outline:none}.det-conj-input:focus{border-color:var(--blue)}.det-input-correct{border-color:var(--green)!important;background:var(--green-bg)!important}.det-input-wrong{border-color:#d9534f!important;background:#fde8e8!important}.det-expected-answer{font-size:13px;color:var(--text1)}.det-expected-text{font-weight:600;color:var(--green)}.det-feedback{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border-radius:10px;font-size:14px;font-weight:600;align-items:flex-start}.det-feedback svg{vertical-align:middle;margin-right:4px}.det-feedback-correct{background:var(--green-bg);color:var(--green)}.det-feedback-wrong{background:#fde8e8;color:#c0392b}.det-hint{font-size:12px;font-weight:400;color:var(--text1);margin:0;font-style:italic}.det-next-btn{align-self:flex-end;margin-top:4px;display:flex;align-items:center;gap:4px}.det-summary{display:flex;flex-direction:column;align-items:center;gap:14px;padding:24px 16px;text-align:center}.det-summary-score{font-size:3rem;font-weight:800;color:var(--text0)}.det-summary-label{font-size:1.2rem;font-weight:400;color:var(--text1)}.det-summary-perfect{font-size:16px;color:var(--green);font-weight:600;margin:0}.det-summary-retry{font-size:14px;color:var(--text1);margin:0}.det-summary-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.det-loading,.det-error{padding:32px;text-align:center;color:var(--text2)}.roleplay-trigger-btn{display:inline-flex;align-items:center;gap:5px}.roleplay-container{display:flex;flex-direction:column;flex:1;min-height:0}.roleplay-header-note{font-size:12px;color:var(--text2);padding:6px 14px;background:var(--blue-bg);border-radius:8px;margin:0 0 8px;display:flex;align-items:center;gap:6px}.roleplay-back-btn{margin-left:auto;background:none;border:none;cursor:pointer;color:var(--blue);font-size:12px;padding:2px 6px}.roleplay-lines{flex:1;overflow-y:auto}.roleplay-input-line .dialogue-bubble{background:var(--blue-bg)!important}.roleplay-bubble{width:100%}.roleplay-input-wrap{display:flex;gap:6px}.roleplay-input{flex:1;padding:8px 12px;border:1.5px solid var(--blue);border-radius:8px;font-size:15px;font-family:var(--font);background:var(--bg1);color:var(--text0);outline:none}.roleplay-check-btn{white-space:nowrap}.roleplay-result-correct{color:var(--green);font-weight:600}.roleplay-result-wrong{color:#c0392b;text-decoration:line-through;margin-bottom:4px}.roleplay-revealed{font-size:14px;line-height:1.5}.roleplay-oral-prompt{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.roleplay-oral-hint{font-size:13px;color:var(--text2);font-style:italic}.roleplay-reveal-btn{background:none;border:1px solid var(--line2);border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;color:var(--text1);white-space:nowrap}.roleplay-reveal-btn:hover{background:var(--bg2)}.roleplay-done{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;font-size:14px;font-weight:600;color:var(--green);border-top:1px solid var(--line1);margin-top:8px}.roleplay-picker{display:flex;flex-direction:column;align-items:center;gap:14px;padding:24px 16px;text-align:center}.roleplay-picker-label{font-size:14px;color:var(--text1);margin:0}.roleplay-picker-btns{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.roleplay-speaker-btn{font-size:16px;padding:10px 20px}.roleplay-cancel-btn{font-size:13px;color:var(--text2)}.login-switch-link{background:none;border:none;color:var(--blue);font-size:12px;cursor:pointer;text-align:center;padding:4px 0}.login-switch-link:hover{text-decoration:underline}.register-dialog{width:min(400px,100%)}.invitation-code-input{font-family:SF Mono,Fira Code,monospace;font-size:15px!important}.settings-user-row{display:flex;align-items:center;gap:8px;padding-bottom:6px!important;border-bottom:1px solid var(--line1);margin-bottom:2px}.settings-user-avatar{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--blue);color:#fff;font-size:12px;font-weight:600}.settings-user-name{font-size:12px;font-weight:500;color:var(--text0)}.admin-modal{width:min(700px,96vw);max-height:80vh;display:flex;flex-direction:column}.admin-tabs{display:flex;gap:2px;padding:0 16px;border-bottom:1px solid var(--line1)}.admin-tab{padding:8px 14px;font-size:13px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text2);cursor:pointer;margin-bottom:-1px}.admin-tab.active{color:var(--text0);border-bottom-color:var(--blue);font-weight:500}.admin-content{flex:1;overflow-y:auto;padding:16px}.admin-loading{text-align:center;color:var(--text2);padding:24px;font-size:13px}.admin-error{padding:8px 12px;border-radius:6px;background:var(--red-bg, rgba(220,38,38,.08));color:var(--red, #dc2626);font-size:12px;margin-bottom:12px}.admin-table{width:100%;border-collapse:collapse;font-size:13px}.admin-table th{text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--text2);padding:0 8px 8px;border-bottom:1px solid var(--line1)}.admin-table td{padding:10px 8px;border-bottom:1px solid var(--line1);vertical-align:middle}.admin-table tr:last-child td{border-bottom:none}.admin-row-self td{background:#3b82f608}.admin-row-dim td{opacity:.45}.admin-member-cell{display:flex;align-items:center;gap:10px}.admin-avatar{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--bg2);color:var(--text0);font-size:12px;font-weight:600;flex-shrink:0}.admin-member-name{font-weight:500;font-size:13px}.admin-member-email{font-size:11px;color:var(--text2)}.admin-level-tag{font-size:12px;font-weight:600}.admin-level-pending{font-size:11px;color:var(--text2);font-style:italic}.admin-time{font-size:12px;color:var(--text2);white-space:nowrap}.admin-role-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:2px 6px;border-radius:4px;background:var(--bg2);color:var(--text1)}.admin-role-badge.admin{background:#3b82f61f;color:var(--blue)}.admin-row-actions{display:flex;gap:4px;justify-content:flex-end}.admin-action-btn{display:inline-grid;place-items:center;width:28px;height:28px;border:1px solid var(--line2);border-radius:6px;background:var(--bg0);color:var(--text1);cursor:pointer}.admin-action-btn:hover{background:var(--bg2);color:var(--text0)}.admin-action-btn.danger:hover{border-color:var(--red, #dc2626);color:var(--red, #dc2626);background:var(--red-bg, rgba(220,38,38,.06))}.admin-modal-backdrop{position:absolute;inset:0;background:#0000004d;display:grid;place-items:center;z-index:10;border-radius:inherit}.admin-confirm{background:var(--bg1);border:1px solid var(--line2);border-radius:8px;padding:20px;width:min(320px,90%);display:flex;flex-direction:column;gap:10px}.admin-confirm p{margin:0;font-size:14px}.admin-confirm-sub{font-size:12px!important;color:var(--text2)!important}.admin-confirm-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.admin-input{height:36px;border:1px solid var(--line2);border-radius:6px;background:var(--bg0);color:var(--text0);padding:0 10px;font:inherit;font-size:13px}.admin-input:focus{outline:none;border-color:var(--blue)}.admin-generate-card{border:1px solid var(--line2);border-radius:8px;padding:16px;margin-bottom:20px;display:flex;flex-direction:column;gap:12px}.admin-section-title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--text0)}.admin-generate-row{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap}.admin-label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.4px}.admin-select{height:32px;border:1px solid var(--line2);border-radius:6px;background:var(--bg0);color:var(--text0);padding:0 8px;font:inherit;font-size:13px;cursor:pointer}.admin-generate-btn{height:32px;padding:0 14px;font-size:13px;display:flex;align-items:center;gap:6px}.admin-code-display{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:8px;background:var(--bg0);border:1px dashed var(--blue)}.admin-code-value{font-family:SF Mono,Fira Code,monospace;font-size:22px;font-weight:700;letter-spacing:4px;color:var(--blue);flex:1;text-align:center}.admin-code-mono{font-family:SF Mono,Fira Code,monospace;font-size:13px;letter-spacing:2px;font-weight:600}.admin-copy-btn{display:inline-grid;place-items:center;width:22px;height:22px;border:1px solid var(--line2);border-radius:4px;background:var(--bg1);color:var(--text2);cursor:pointer;margin-left:6px;font-size:11px}.admin-copy-btn:hover{background:var(--bg2);color:var(--text0)}.admin-invite-hint{margin:0;font-size:12px;color:var(--text2);flex:1;line-height:1.5}.admin-code-status{font-size:11px;font-weight:600;padding:2px 7px;border-radius:4px}.admin-code-status.available{background:#22c55e1a;color:#16a34a}.admin-code-status.used{background:var(--bg2);color:var(--text2)}.admin-cost{overflow-x:auto}.admin-cost-col{text-align:right;white-space:nowrap}.admin-cost-val{text-align:right;font-variant-numeric:tabular-nums;font-size:13px;padding-right:16px!important;white-space:nowrap}.admin-cost-dim{color:var(--text2);font-size:12px}.admin-cost-warn{margin-left:5px;color:#f59e0b;font-size:12px}.admin-row-warn td{background:#f59e0b0a}.admin-cost-totals td{border-top:1px solid var(--border);padding-top:8px;padding-bottom:4px}
