: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: "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Noto Sans JP", 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-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}.message.assistant .bubble,.phrase-trou-bubble,.novel-segment,.novel-detail-text{font-size:18px}.bubble ruby,.novel-segment ruby,.novel-detail-text ruby{font-size:1.04em}.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.active{border-color:color-mix(in srgb,var(--blue),transparent 55%)}.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-jp{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-reading{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-jp-fr{color:var(--blue)}.review-format-badge.format-audio{color:var(--amber)}.review-format-badge.format-fr-jp{color:var(--green)}.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-jp{font-size:1.1em;color:var(--text0);line-height:1.6}.dialogue-jp 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}.hide-furigana rt{display: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}}.furigana-btn{font-family:var(--font);font-size:15px;font-weight:700}.furigana-btn.furigana-off{opacity:.38}.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-jp{font-size:15px;font-weight:600;color:var(--text0);word-break:break-all}.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-reading{color:var(--text2);font-size:.95em}.vocab-detail-meaning{font-size:1.25em;font-weight:600;color:var(--text0)}.vocab-detail-custom-btn{margin-top:4px;font-size:11px;padding:3px 8px;height:auto;gap:4px}.vocab-detail-custom-form{margin-top:6px;display:flex;flex-direction:column;gap:6px}.vocab-detail-custom-input{border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:13px;background:var(--bg2);color:var(--text0);width:100%}.vocab-detail-custom-input:focus{outline:none;border-color:var(--purple)}.vocab-detail-custom-actions{display:flex;gap:6px;justify-content:flex-end}.vocab-detail-custom-actions .button{font-size:12px;padding:4px 10px;height:auto;gap:4px}.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-jp{display:flex;align-items:center;gap:8px;font-size:1.05em;color:var(--text0)}.vocab-detail-example-fr{font-style:italic;color:var(--text2);font-size:.9em}.vocab-detail-strokes{width:100%;margin-top:12px;display:flex;flex-direction:column;gap:12px}.vocab-detail-section-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text2)}.vocab-detail-no-kanji{margin-top:12px;font-size:12px;color:var(--text2);font-style:italic}.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-reading{color:var(--text2);font-size:12px}.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}.graded-library-lesson-header{font-size:11px;font-weight:700;color:var(--text2);padding:8px 12px 4px;text-transform:uppercase;letter-spacing:.5px}.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-reading{font-size:16px;font-weight:400;color:var(--text2);margin-left:4px}.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.jlpt{background:var(--blue);color:#fff}.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-strokes{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}.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-jp{display:block;font-size:12px;color:var(--text0);font-weight:500}.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)}}.kanji-stroke-container{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px;border:1px solid var(--line1);border-radius:10px;background:var(--bg0)}.kanji-stroke-label{font-size:1.3em;font-weight:700;color:var(--text0)}.kanji-stroke-svg{width:120px;height:120px}.kanji-stroke-svg svg{width:100%;height:100%}.kanji-stroke-svg path[d]{stroke:var(--text0);fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.kanji-stroke-path{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:draw-stroke .5s ease forwards;animation-delay:var(--delay)}@keyframes draw-stroke{to{stroke-dashoffset:0}}.kanji-stroke-replay{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--text2);font-size:11px;cursor:pointer;font-family:inherit}.kanji-stroke-replay:hover{background:var(--bg2);color:var(--text0)}.kanji-stroke-loading,.kanji-stroke-error{font-size:12px;color:var(--text2);padding:16px;text-align:center}.vocab-detail-kanji-sens{margin:12px 0;border:1px solid var(--line1);border-radius:8px;overflow:hidden}.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)}.kanji-sens-row{display:flex;align-items:flex-start;gap:10px;padding:8px 10px;border-top:1px solid var(--line1)}.kanji-sens-char{font-size:24px;font-weight:700;min-width:32px;text-align:center;line-height:1.2;color:var(--accent)}.kanji-sens-info{flex:1;min-width:0}.kanji-sens-reading{display:block;font-size:11px;color:var(--text2);margin-bottom:2px}.kanji-sens-meaning{display:block;font-size:13px;font-weight:600;color:var(--text0)}.kanji-sens-words{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px}.kanji-sens-word{font-size:11px;color:var(--text2)}.kanji-family-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.kanji-family-chip{padding:2px 8px;border:1px solid var(--line2);border-radius:12px;background:var(--bg1);font-size:13px;font-family:inherit;cursor:pointer;color:var(--text0);transition:background .12s,border-color .12s}.kanji-family-chip:hover{background:var(--accent-light, #e8f0fe);border-color:var(--accent);color:var(--accent)}.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-particle{background:#fde68a;color:#92400e}.error-type-conjugation{background:#dbeafe;color:#1e40af}.error-type-vocabulary{background:#d1fae5;color:#065f46}.error-type-reading{background:#ede9fe;color:#5b21b6}.error-type-word_order{background:#fee2e2;color:#991b1b}.error-type-meaning{background:#ffedd5;color:#9a3412}.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}.mastery-modal{max-height:min(92vh,700px);display:flex;flex-direction:column}.mastery-grid{display:flex;flex-wrap:wrap;gap:3px;padding:12px 16px;justify-content:flex-start;flex-shrink:0}.mastery-cell{width:36px;height:28px;border-radius:4px;border:none;font-size:10px;font-weight:600;font-family:inherit;cursor:pointer;transition:opacity .12s,transform .1s}.mastery-cell:hover{opacity:.8}.mastery-cell.selected{outline:2px solid var(--accent);outline-offset:1px}.mastery-none{background:var(--bg3, #e5e7eb);color:var(--text2)}.mastery-strong{background:#bbf7d0;color:#065f46}.mastery-fragile{background:#fef9c3;color:#854d0e}.mastery-weak{background:#fecaca;color:#991b1b}.mastery-legend{display:flex;gap:12px;padding:0 16px 10px;flex-wrap:wrap;border-bottom:1px solid var(--line1);flex-shrink:0}.mastery-legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--text2)}.mastery-dot{width:10px;height:10px;border-radius:2px;display:inline-block}.mastery-detail{flex:1;overflow-y:auto;padding:10px 16px}.mastery-detail h4{font-size:13px;font-weight:700;margin:0 0 10px;color:var(--text0)}.mastery-empty{font-size:13px;color:var(--text2);font-style:italic}.mastery-concept-row{display:flex;align-items:center;gap:8px;margin-bottom:7px}.mastery-concept-tag{font-size:11px;color:var(--text1);min-width:120px;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mastery-bar-track{flex:1;height:8px;background:var(--bg2);border-radius:4px;overflow:hidden}.mastery-bar-fill{height:100%;border-radius:4px;transition:width .3s ease}.mastery-bar-fill.mastery-strong{background:#22c55e}.mastery-bar-fill.mastery-fragile{background:#eab308}.mastery-bar-fill.mastery-weak{background:#ef4444}.mastery-bar-fill.mastery-none{background:var(--bg3, #e5e7eb)}.mastery-pct{font-size:11px;font-weight:600;min-width:28px;text-align:right;color:var(--text1)}.mastery-counts{font-size:10px;color:var(--text2);min-width:48px;text-align:right}.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-particle-sentence{font-size:20px;text-align:center;padding:12px 0}.det-particle-blank{display:inline-block;min-width:28px;text-align:center;border-bottom:2px solid var(--blue);color:var(--blue);margin:0 2px}.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-kanji{font-weight:700}.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)}.graded-modal{max-width:560px;width:95vw;max-height:88vh;overflow-y:auto;padding:0 18px 18px}.graded-modal .review-header{margin:0 -18px;padding-left:18px;padding-right:18px}.graded-title{font-size:18px;font-weight:700;text-align:center;margin:0 0 14px;color:var(--text0)}.graded-passage-wrap{position:relative;background:var(--bg0);border:1px solid var(--line1);border-radius:10px;padding:16px 40px 16px 16px;margin-bottom:16px;line-height:2}.graded-passage{font-size:16px;color:var(--text0)}.graded-passage ruby rt{font-size:10px}.graded-tts-btn{position:absolute;top:10px;right:10px;background:none;border:none;cursor:pointer;color:var(--text2);padding:4px;border-radius:6px;display:flex}.graded-tts-btn:hover{color:var(--blue);background:var(--blue-bg)}.reading-ctx-menu{position:fixed;z-index:9999;background:var(--bg1);border:1px solid var(--line2);border-radius:8px;padding:4px;box-shadow:0 4px 20px #00000040;min-width:190px}.reading-ctx-label{padding:5px 10px 4px;font-size:11px;color:var(--text2);border-bottom:1px solid var(--line1);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reading-ctx-menu button{display:flex;align-items:center;gap:7px;width:100%;padding:7px 10px;background:none;border:none;border-radius:5px;font-size:13px;color:var(--text0);cursor:pointer;font-family:inherit;text-align:left}.reading-ctx-menu button:hover{background:var(--bg2)}.graded-questions-title{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text2);margin:0 0 10px}.graded-question-block{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--line1)}.graded-question-block:last-child{border-bottom:none}.graded-question-text{font-size:14px;color:var(--text0);margin:0 0 8px}.graded-input-row{display:flex;gap:8px}.graded-input{flex:1;padding:8px 12px;border:1.5px solid var(--line2);border-radius:8px;font-size:15px;font-family:var(--font);background:var(--bg1);color:var(--text0);outline:none}.graded-input:focus{border-color:var(--blue)}.graded-input-ok{border-color:var(--green)!important;background:var(--green-bg)!important}.graded-input-ko{border-color:#d9534f!important;background:#fde8e8!important}.graded-check-btn{white-space:nowrap}.graded-result{margin-top:6px;font-size:13px;font-weight:600}.graded-result-ok{color:var(--green)}.graded-result-ko{color:#c0392b}.graded-footer{display:flex;gap:8px;justify-content:flex-end;padding-top:10px;border-top:1px solid var(--line1);margin-top:8px;flex-wrap:wrap}.graded-meta{font-size:11px;color:var(--text2);margin:6px 0 0}.graded-back-btn{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--blue);background:none;border:none;padding:0 0 8px;cursor:pointer;font-family:inherit}.graded-back-btn:hover{text-decoration:underline}.graded-history-list{display:flex;flex-direction:column;gap:0;margin:8px 0;border:1px solid var(--line1);border-radius:8px;overflow:hidden}.graded-history-item{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:var(--bg1);border:none;border-bottom:1px solid var(--line1);cursor:pointer;text-align:left;font-family:inherit;transition:background .12s}.graded-history-item:last-child{border-bottom:none}.graded-history-item:hover{background:var(--bg2)}.graded-history-title{font-size:13px;color:var(--text0);font-weight:500}.graded-history-date{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--text2);white-space:nowrap;margin-left:12px}.graded-history-empty{text-align:center;color:var(--text2);font-size:13px;padding:24px 0}.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)}.placement-container{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:18px;background:var(--bg0)}.placement-card{display:flex;flex-direction:column;align-items:center;gap:16px;width:min(480px,100%);padding:28px 24px;border:1px solid var(--line2);border-radius:12px;background:var(--bg1);box-shadow:0 20px 60px #0000001f}.placement-card .mark{font-size:28px}.placement-card h2{margin:0;text-align:center;font-size:18px}.placement-intro-text{margin:0;color:var(--text1);font-size:13px;line-height:1.6;text-align:center;max-width:380px}.placement-sections-preview{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.placement-section-tag{font-size:11px;padding:3px 10px;border-radius:12px;background:var(--bg2);color:var(--text1)}.placement-start-btn{width:100%;max-width:260px;margin-top:4px}.placement-loading{color:var(--text1);font-size:14px;text-align:center}.placement-test-card{gap:12px;width:min(520px,100%)}.placement-test-header{display:flex;justify-content:space-between;align-items:center;width:100%}.placement-section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text2)}.placement-counter{font-size:12px;color:var(--text2);font-variant-numeric:tabular-nums}.placement-progress-bar{width:100%;height:4px;border-radius:2px;background:var(--bg2);overflow:hidden}.placement-progress-fill{height:100%;background:var(--blue);border-radius:2px;transition:width .3s ease}.placement-question-body{width:100%;display:flex;flex-direction:column;gap:14px}.placement-question-text{margin:0;font-size:15px;line-height:1.6;text-align:center;color:var(--text0)}.placement-sentence{margin:0;font-size:17px;line-height:1.7;text-align:center;color:var(--text0)}.placement-blank{display:inline-block;min-width:32px;padding:1px 6px;margin:0 2px;border-bottom:2px solid var(--blue);text-align:center;font-weight:600;color:var(--blue)}.placement-options{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.placement-option-btn{padding:10px 14px;border:1px solid var(--line2);border-radius:8px;background:var(--bg0);color:var(--text0);font:inherit;font-size:14px;cursor:pointer;text-align:center;transition:all .15s ease}.placement-option-btn:hover:not(:disabled){border-color:var(--blue);background:var(--blue-bg, rgba(59, 130, 246, .06))}.placement-option-selected{border-color:var(--blue);background:var(--blue-bg, rgba(59, 130, 246, .1));color:var(--blue);font-weight:500}.placement-option-disabled{opacity:.4}.placement-result-card{gap:12px}.placement-result-icon{font-size:36px}.placement-result-lesson{margin:0;font-size:14px;color:var(--text1);text-align:center}.placement-scores{width:100%;display:flex;flex-direction:column;gap:8px;margin:4px 0}.placement-score-item{display:flex;align-items:center;gap:8px}.placement-score-label{font-size:12px;font-weight:600;width:24px;text-align:right;color:var(--text2)}.placement-score-bar{flex:1;height:8px;border-radius:4px;background:var(--bg2);overflow:hidden}.placement-score-fill{height:100%;background:var(--blue);border-radius:4px;transition:width .5s ease}.placement-score-pct{font-size:12px;font-variant-numeric:tabular-nums;width:32px;text-align:right;color:var(--text1)}.placement-vocab-count{margin:0;font-size:12px;color:var(--text2);text-align:center}.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}.topbar-tool-btn{display:inline-flex;align-items:center;gap:6px}.rules-panel{width:min(760px,calc(100vw - 24px))}.rules-editor{width:100%;min-height:320px;resize:vertical;border:1px solid var(--border);border-radius:8px;padding:14px;font:14px/1.7 ui-monospace,SFMono-Regular,Consolas,Liberation Mono,monospace;background:var(--bg);color:var(--text)}.rules-warning,.rules-saved{margin-top:10px;padding:10px 12px;border-radius:8px;font-size:13px}.rules-warning{background:#fff7ed;color:#9a3412}.rules-saved{background:#f0fdf4;color:#166534}.novel-browser{width:min(1180px,calc(100vw - 24px));height:min(820px,calc(100vh - 24px))}.novel-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;flex:1;min-height:0;overflow:hidden}.novel-pages{overflow-y:auto;padding:24px 28px}.novel-page{padding:18px 0;border-bottom:1px solid var(--line1)}.novel-page:first-child{padding-top:0}.novel-page:last-child{border-bottom:none}.novel-page-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;color:var(--text2);font-size:13px}.novel-page-head span{font-weight:700;color:var(--text0)}.novel-segments{display:grid;gap:6px}.novel-segment{width:100%;text-align:left;border:1px solid transparent;border-radius:10px;padding:12px 16px;background:var(--bg0);color:var(--text2);line-height:1.9;cursor:pointer;transition:background .12s,border-color .12s}.novel-segment.worked{color:#7c3aed;background:color-mix(in srgb,#7c3aed 5%,var(--bg0))}.novel-segment.translated{color:#276749;font-weight:700;background:color-mix(in srgb,#38a169 8%,var(--bg0));border-color:color-mix(in srgb,#38a169 30%,transparent)}.novel-segment.current{border-color:#c4b5fd;background:#f5f3ff}.novel-segment:hover{background:var(--bg2);border-color:var(--line2)}.novel-locked,.novel-empty{color:var(--text2);font-size:14px;padding:20px;border:1px dashed var(--line1);border-radius:10px;line-height:1.6}.novel-detail{border-left:1px solid var(--line1);padding:24px 22px;overflow-y:auto}.novel-detail-head{margin-bottom:16px}.novel-status-pill{border-radius:999px;padding:4px 10px;font-size:11px;font-weight:600;background:var(--bg2);color:var(--text2)}.novel-status-pill.worked{background:#f5f3ff;color:#7c3aed}.novel-status-pill.translated{background:#ede9fe;color:#5b21b6}.novel-detail-text{line-height:1.9;margin-bottom:16px}.novel-correction{border:1px solid var(--line1);border-radius:10px;padding:12px 14px;margin-bottom:14px;background:var(--bg2)}.novel-correction span{display:block;margin-bottom:4px;font-size:11px;font-weight:600;color:var(--text2);text-transform:uppercase}.novel-user-translation{margin-top:16px;padding:12px 14px;border-radius:8px;background:var(--bg2);border:1px solid var(--line1);color:var(--text1);font-size:14px;line-height:1.7;font-style:italic}.novel-suggested{border-style:dashed;color:var(--text2)}.novel-suggest-btn{display:inline-flex;align-items:center;gap:6px;margin-top:16px;padding:7px 12px;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--text2);font:inherit;font-size:12px;cursor:pointer;transition:background .12s,color .12s}.novel-suggest-btn:hover:not(:disabled){background:var(--bg2);color:var(--text0)}.novel-suggest-btn:disabled{opacity:.6;cursor:default}.novel-translation-block{position:relative;margin-top:16px}.novel-edit-btn{position:absolute;top:8px;right:8px;background:transparent;border:1px solid var(--line1);border-radius:6px;padding:4px 6px;cursor:pointer;color:var(--text2);transition:background .12s,color .12s}.novel-edit-btn:hover{background:var(--bg2);color:var(--text0)}.novel-edit-area{margin-top:16px}.novel-edit-textarea{width:100%;padding:12px 14px;border-radius:8px;border:1px solid var(--line2);background:var(--bg0);color:var(--text0);font:inherit;font-size:14px;line-height:1.7;resize:vertical;min-height:80px;box-sizing:border-box}.novel-edit-textarea:focus{outline:none;border-color:#7c3aed}.novel-edit-actions{display:flex;gap:8px;margin-top:8px}.novel-edit-save,.novel-edit-cancel{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:6px;font:inherit;font-size:12px;cursor:pointer;border:1px solid var(--line2);transition:background .12s}.novel-edit-save{background:#7c3aed;color:#fff;border-color:#7c3aed}.novel-edit-save:hover:not(:disabled){background:#6d28d9}.novel-edit-save:disabled{opacity:.6;cursor:default}.novel-edit-cancel{background:transparent;color:var(--text2)}.novel-edit-cancel:hover:not(:disabled){background:var(--bg2)}@media(max-width:820px){.novel-layout{grid-template-columns:1fr}.novel-pages{padding:14px 16px}.novel-detail{border-left:0;border-top:1px solid var(--line1);padding:14px 16px}}.passage-banner{flex-shrink:0;border-bottom:2px solid var(--line2);background:linear-gradient(135deg,#f5f0e8,#ece4d8)}.passage-banner-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.passage-banner-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:#8b7355}.passage-banner-toggle{background:transparent;border:none;color:#8b7355;cursor:pointer;padding:2px 4px;display:flex;align-items:center}.passage-banner-segments{padding:4px 16px 12px;font-family:"Noto Serif JP",Hiragino Mincho Pro,Yu Mincho,serif;font-size:20px;line-height:2;color:var(--text1)}.passage-segment{cursor:pointer;border-radius:3px;transition:background .12s,color .12s;padding:0 2px}.passage-segment.worked{color:#7c3aed}.passage-segment.translated{color:#6d28d9;font-weight:700}.passage-segment.active{background:color-mix(in srgb,#c0392b 14%,transparent);border-bottom:2px solid #c0392b;color:#c0392b;padding-bottom:0}.passage-segment:hover{background:color-mix(in srgb,#8b7355 10%,transparent)}.passage-detail{position:relative;display:flex;align-items:center;gap:12px;background:#fff;border-top:1px solid #d4c5a9;padding:12px 16px}.passage-detail-info{flex:1;min-width:0}.passage-detail-status{font-size:10px;text-transform:uppercase;letter-spacing:.8px;color:#8b7355;font-weight:600;display:block;margin-bottom:4px}.passage-detail-text{font-family:"Noto Serif JP",Hiragino Mincho Pro,Yu Mincho,serif;font-size:17px;line-height:1.8;color:var(--text1)}.passage-detail-translation{font-size:13px;color:var(--text2);margin-top:4px;font-style:italic}.passage-detail-translation.empty{color:var(--text3, #aaa)}.passage-activate-btn{white-space:nowrap;flex-shrink:0}.passage-detail-actions{display:flex;flex-direction:column;align-items:center;gap:6px;flex-shrink:0}.passage-close-btn{display:grid;width:26px;height:26px;place-items:center;border:1px solid var(--line2);border-radius:6px;background:transparent;color:var(--text2);cursor:pointer}.passage-close-btn:hover{background:var(--bg2);color:var(--text1)}@media(max-width:720px){.passage-banner{max-height:45vh;overflow-y:auto}.passage-banner-segments{font-size:18px}.passage-detail{flex-direction:column;align-items:flex-start;gap:8px}}
