:root{color:#18233a;font-synthesis:none;text-rendering:optimizelegibility;--ink:#18233a;--muted:#65728b;--paper:#f4f7fb;--surface:#fff;--blue:#2258d6;--blue-soft:#dce7ff;--coral:#f06449;--mint:#cfeee5;--line:#dbe2ed;background:#f4f7fb;font-family:Avenir Next,Avenir,Segoe UI,PingFang SC,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;height:100%}body{background:radial-gradient(circle at 90% 8%, #2258d61a, transparent 27rem), var(--paper);min-width:320px;height:100%;margin:0;overflow:hidden}#root{height:100%}button,input,textarea{font:inherit}button{color:inherit}button:focus-visible,a:focus-visible,textarea:focus-visible{outline-offset:3px;outline:3px solid #f0644980}.app-shell{grid-template-rows:auto auto minmax(0,1fr);width:min(1180px,100% - 40px);height:100dvh;margin:0 auto;display:grid;overflow:hidden}.topbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-width:0;height:78px;display:flex}.wordmark{color:var(--ink);letter-spacing:-.02em;align-items:center;gap:10px;font-weight:750;text-decoration:none;display:inline-flex}.wordmark-dot{background:var(--coral);border-radius:50% 50% 50% 2px;width:14px;height:14px;transform:rotate(-20deg)}.eyebrow{color:var(--blue);letter-spacing:.13em;margin:0 0 12px;font-size:11px;font-weight:800;line-height:1.3}.story-strip{border:1px solid var(--line);background:#ffffffad;border-radius:20px;grid-template-columns:repeat(4,1fr);display:grid;overflow:hidden}.story-step{text-align:left;border:0;border-right:1px solid var(--line);cursor:pointer;background:0 0;gap:8px;min-height:124px;padding:24px;transition:background .18s,color .18s;display:grid;position:relative}.story-step:last-child{border-right:0}.story-step:hover{background:var(--surface)}.story-step.is-active{color:#fff;background:var(--blue)}.step-index{letter-spacing:.1em;opacity:.7;font-size:11px;font-weight:800}.step-title{align-self:end;font-size:17px;font-weight:700}.step-meta{opacity:.7;font-size:12px}.sentence-rail,.listening-stage{border:1px solid var(--line);background:var(--surface);border-radius:24px;box-shadow:0 18px 50px #18233a0f}.sentence-rail{overflow:hidden}.rail-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-end;min-height:98px;padding:22px 24px 18px;display:flex}.rail-heading h2{letter-spacing:-.03em;margin:0;font-size:20px}.rail-heading>span{color:var(--muted);font-size:12px}.sentence-list{scrollbar-width:thin;min-height:0;overflow:auto}.sentence-row{text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #edf0f5;grid-template-columns:28px 1fr 8px;align-items:center;gap:10px;width:100%;min-height:58px;padding:12px 18px;display:grid}.sentence-row:hover{background:#f8faff}.sentence-row.is-selected{background:var(--blue-soft)}.sentence-number{color:#95a0b4;font-size:10px;font-weight:800}.sentence-preview{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.depth-mark{background:#aab4c5;border-radius:50%;width:7px;height:7px}.depth-core{background:var(--blue)}.depth-transfer{background:var(--coral)}.listening-stage{grid-template-rows:auto minmax(0,1fr) auto auto;min-height:0;padding:clamp(28px,5vw,62px);display:grid}.stage-meta{color:var(--muted);align-items:center;gap:12px;font-size:12px;display:flex}.stage-meta span+span{border-left:1px solid var(--line);padding-left:12px}.depth-pill{color:var(--ink);background:#e9edf3;border-radius:999px;padding:6px 10px;font-weight:750}.depth-pill.depth-core{color:#fff;background:var(--blue)}.depth-pill.depth-transfer{color:#fff;background:var(--coral)}.depth-pill.depth-passage{color:#17483d;background:var(--mint)}blockquote{letter-spacing:-.04em;max-width:760px;margin:auto 0 18px;font-family:Georgia,Times New Roman,serif;font-size:clamp(32px,4.4vw,58px);line-height:1.12}.translation{color:var(--muted);margin:0 0 auto;font-size:15px;line-height:1.7}.audio-control{grid-template-columns:58px 1fr 44px;align-items:center;gap:18px;margin:42px 0 32px;display:grid}.play-button{color:#fff;background:var(--ink);cursor:pointer;border:0;border-radius:50%;place-items:center;width:58px;height:58px;transition:transform .15s,background .15s;display:grid}.play-button:hover{background:var(--blue);transform:scale(1.04)}.play-button svg{fill:currentColor;width:23px;height:23px}.audio-track{justify-content:space-between;align-items:center;height:44px;display:flex;position:relative;overflow:hidden}.audio-track:after{content:"";background:var(--line);height:1px;position:absolute;inset:50% 0 auto}.audio-track-fill{z-index:2;transform-origin:0;background:#2258d626;transition:transform 50ms linear;position:absolute;inset:0}.audio-track i{z-index:1;background:#9ca9bf;border-radius:4px;width:2px}.timecode{color:var(--muted);font:12px/1 ui-monospace,SFMono-Regular,Menlo,monospace}.next-button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;flex:none;padding:12px 16px;font-weight:700}.next-button:hover{border-color:var(--blue);color:var(--blue)}@media (width<=760px){.app-shell{width:min(100% - 24px,560px)}.topbar{height:64px}.story-strip{border-radius:16px;grid-template-columns:1fr 1fr}.story-step{border-bottom:1px solid var(--line);min-height:96px;padding:16px}.story-step:nth-child(2){border-right:0}.story-step:nth-child(n+3){border-bottom:0}.sentence-rail{border-radius:18px;order:2}.listening-stage{border-radius:18px;min-height:520px;padding:28px 22px}blockquote{font-size:clamp(31px,9vw,44px)}.audio-control{grid-template-columns:52px 1fr 38px;gap:12px;margin:34px 0 26px}.play-button{width:52px;height:52px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important}}.compact-topbar{height:66px}.material-button{border:1px solid var(--line);cursor:pointer;background:#ffffffb8;border-radius:10px;padding:9px 13px;font-size:12px;font-weight:750}.material-button:hover{color:var(--blue);border-color:var(--blue)}.header-actions{align-items:center;gap:12px;display:flex}.save-status{color:var(--muted);font-size:10px;font-weight:700}.save-status.is-error{color:var(--coral)}.compact-context{justify-content:space-between;align-items:end;gap:24px;width:min(760px,100%);min-width:0;margin:0 auto;padding:34px 4px 20px;display:flex}.compact-context>div:first-child{min-width:0}.compact-context h1{letter-spacing:-.045em;margin:0;font-size:clamp(27px,4vw,38px);line-height:1}.sentence-position{color:var(--muted);flex:none;align-items:baseline;display:flex}.sentence-position strong{color:var(--ink);font-size:27px;line-height:1}.sentence-position span{font-size:13px}.focus-wrap{width:min(760px,100%);min-width:0;height:100%;min-height:0;margin:0 auto;padding-bottom:20px}.focus-stage{width:100%;min-width:0;height:100%;min-height:0;padding:clamp(24px,4vh,42px) clamp(28px,5vw,54px);overflow:hidden;box-shadow:0 26px 70px #18233a14}.blind-prompt{overscroll-behavior:contain;scrollbar-width:thin;align-items:center;min-height:0;padding:clamp(18px,4vh,40px) 4px clamp(14px,3vh,24px) 0;display:flex;overflow:auto}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.blind-copy{width:100%}.listen-kicker{color:var(--coral);letter-spacing:.16em;margin-bottom:15px;font-size:10px;font-weight:850;display:block}.blind-prompt h2{letter-spacing:-.06em;margin:0;font-size:clamp(35px,6vw,58px);line-height:1.05}.blind-prompt h2 span{white-space:nowrap;width:fit-content;display:block}.blind-copy>p{color:var(--muted);margin:18px 0 0;line-height:1.7}.revealed-copy{width:100%}.revealed-copy blockquote{margin:0;font-size:clamp(30px,4.4vw,47px)}.revealed-copy.is-medium blockquote{font-size:clamp(29px,3.8vw,41px)}.revealed-copy.is-long blockquote{font-size:clamp(27px,3.25vw,35px)}.revealed-copy .translation{margin-top:22px}.stage-name{color:var(--blue);margin-left:auto;font-weight:800}.dictation-panel,.correction-panel,.shadow-panel,.memorize-panel,.passage-panel,.complete-panel{width:100%}.dictation-panel h2,.shadow-panel h2,.memorize-panel.revealed-copy h2,.complete-panel h2{letter-spacing:-.045em;margin:0;font-size:clamp(28px,4vw,40px)}.dictation-panel>p{color:var(--muted);margin:10px 0 18px;font-size:13px}.dictation-input{resize:vertical;border:1px solid var(--line);width:100%;min-height:118px;color:var(--ink);background:#f8faff;border-radius:14px;padding:16px 18px;font-size:18px;line-height:1.55}.dictation-input:focus{border-color:var(--blue);background:#fff}.answer-block{margin-bottom:24px}.answer-label{color:var(--muted);letter-spacing:.11em;margin-bottom:7px;font-size:9px;font-weight:850;display:block}.submitted-answer{color:var(--ink);margin:0;font-size:15px;line-height:1.55}.submitted-answer.is-empty{color:#9aa5b8}.word-diff{letter-spacing:-.035em;margin:0;font-family:Georgia,Times New Roman,serif;font-size:clamp(28px,4vw,43px);line-height:1.2}.word-matched{color:var(--ink)}.word-missing{color:var(--coral);text-underline-offset:.12em;text-decoration:underline;text-decoration-thickness:.12em}.correction-details{border-top:1px solid var(--line);gap:14px;margin-top:24px;padding-top:18px;display:grid}.correction-details p{color:var(--muted);margin:0;font-size:13px;line-height:1.6}.relisten-copy h2{font-size:clamp(31px,5vw,48px)}.shadow-panel blockquote{margin:18px 0 0;font-size:clamp(29px,4vw,43px)}.memorize-panel>p{color:var(--muted);margin:18px 0 0;line-height:1.7}.memorize-panel.revealed-copy blockquote{margin:18px 0 0;font-size:clamp(29px,4vw,43px)}.passage-panel h2{letter-spacing:-.045em;margin:0;font-size:clamp(28px,4vw,40px)}.passage-guidance{color:var(--muted);margin:10px 0 20px;font-size:13px;line-height:1.6}.passage-lines{gap:16px;margin:0;padding:0;list-style:none;display:grid}.passage-lines li{border-left:2px solid var(--blue-soft);padding-left:14px}.passage-lines span{color:var(--muted);letter-spacing:.08em;font-size:9px;font-weight:800}.passage-lines p{margin:4px 0 0;font-family:Georgia,Times New Roman,serif;font-size:clamp(20px,2.8vw,27px);line-height:1.28}.material-script-section+.material-script-section{border-top:1px solid var(--line);margin-top:28px;padding-top:24px}.material-script-section h3{color:var(--blue);letter-spacing:.04em;margin:0 0 16px;font-size:13px}.complete-panel{grid-template-columns:auto 1fr;align-items:center;gap:18px;display:grid}.complete-mark{color:#fff;background:var(--blue);border-radius:50%;place-items:center;width:52px;height:52px;font-size:25px;font-weight:850;display:grid}.result-grid{grid-column:1/-1;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0 0;display:grid}.result-grid div{background:var(--paper);border-radius:12px;padding:12px}.result-grid dt{color:var(--muted);font-size:10px}.result-grid dd{margin:5px 0 0;font-size:13px;font-weight:750}.audio-zone{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.rate-control{gap:7px;padding-top:18px;display:flex}.rate-control button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:baseline;gap:5px;padding:8px 11px;display:inline-flex}.rate-control button:hover{background:var(--paper)}.rate-control button.is-active{color:#fff;background:var(--blue)}.rate-control button:disabled{color:#aab3c2;cursor:not-allowed;opacity:.55;background:0 0}.rate-control small{opacity:.72;font-size:9px}.audio-zone .audio-control{margin:15px 0 24px}.reveal-actions{justify-content:space-between;align-items:center;gap:20px;min-height:83px;padding-top:24px;display:flex}.reveal-button{border:1px solid var(--ink);color:#fff;background:var(--ink);cursor:pointer;border-radius:12px;padding:12px 17px;font-weight:750}.reveal-button:hover{background:var(--blue);border-color:var(--blue)}.reveal-button.secondary{color:var(--blue);background:var(--blue-soft);border-color:#0000}.reveal-button:disabled{cursor:not-allowed;opacity:.42}.text-action{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:11px 2px;font-size:12px;font-weight:750}.text-action:hover{color:var(--blue)}.choice-actions{justify-content:space-between;align-items:center;gap:16px;width:100%;display:flex}.memorize-actions{justify-content:space-between;align-items:center;gap:14px;width:100%;display:flex}.memorize-actions>div{align-items:center;gap:12px;display:flex}.keyword-note{min-width:0}.keyword-note span{color:var(--muted);letter-spacing:.12em;font-size:10px;font-weight:800}.keyword-note p{text-overflow:ellipsis;white-space:nowrap;margin:6px 0 0;font-size:13px;overflow:hidden}.material-browser{grid-template-rows:auto minmax(0,1fr);min-height:0;padding:18px 0 20px;display:grid;overflow:hidden}.material-browser .story-strip{margin-bottom:20px}.material-browser .sentence-rail{grid-template-rows:auto minmax(0,1fr);width:min(760px,100%);height:100%;min-height:0;margin:0 auto;display:grid}@media (width<=760px){.compact-topbar{height:58px}.compact-context{padding:25px 2px 16px}.compact-context h1{font-size:27px}.focus-wrap{padding-bottom:12px}.focus-stage{height:100%;min-height:0;padding:22px 20px}.blind-prompt{min-height:0;padding:20px 2px 16px 0}.blind-prompt h2{font-size:clamp(34px,10vw,48px)}.revealed-copy blockquote{font-size:clamp(28px,8.4vw,38px)}.revealed-copy.is-medium blockquote{font-size:clamp(26px,7.5vw,34px)}.revealed-copy.is-long blockquote{font-size:clamp(24px,6.7vw,30px)}.save-status{display:none}.stage-meta{gap:8px}.stage-meta span+span{padding-left:8px}.dictation-panel h2,.shadow-panel h2,.memorize-panel.revealed-copy h2,.passage-panel h2,.complete-panel h2{font-size:27px}.dictation-input{min-height:104px;padding:14px;font-size:16px}.word-diff{font-size:clamp(27px,8vw,35px)}.correction-details{margin-top:20px}.relisten-copy h2{font-size:clamp(29px,8.5vw,38px)}.shadow-panel blockquote,.memorize-panel.revealed-copy blockquote{font-size:clamp(27px,7.8vw,34px)}.passage-lines{gap:13px}.passage-lines p{font-size:21px}.memorize-actions{gap:8px}.memorize-actions>div{gap:7px}.memorize-actions .reveal-button{padding-inline:13px}.result-grid{grid-template-columns:1fr 1fr 1fr}.result-grid div{padding:10px 8px}.rate-control{overflow-x:auto}.rate-control button{padding-inline:9px}.reveal-actions{align-items:center}.material-browser{padding-top:8px}.material-browser .story-strip{grid-template-columns:1fr 1fr}}@media (height<=540px){html,body,#root{height:auto;min-height:100%}body{overflow:auto}.app-shell{height:auto;min-height:620px;overflow:visible}.focus-wrap{min-height:470px}}
