:root{--bg: #efe8dc;--paper: #f6f1e8;--surface: #fffdf9;--ink: #1c1917;--muted: #6a6258;--line: rgba(28, 25, 23, .1);--hairline: rgba(28, 25, 23, .08);--teal: #0f4c5c;--teal-soft: #e4eef0;--sand: #e8dcc0;--terracotta: #c45c26;--ok: #2f6f4e;--danger: #b42318;--shadow: 0 1px 2px rgba(28, 25, 23, .04);--radius: 14px;--nav: 56px;--ease: cubic-bezier(.32, .72, 0, 1);--dur: .24s;--dur-out: .18s;color:var(--ink);background:var(--bg);line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,PingFang SC,Hiragino Sans GB,Microsoft YaHei UI,system-ui,sans-serif;font-feature-settings:"kern" 1,"liga" 1;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:clip}html,body,#root{min-height:100dvh;margin:0}body{background:var(--bg);overscroll-behavior-y:none}button,a{font:inherit}button{cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--teal);outline-offset:2px}.app-shell{min-height:100dvh;max-width:430px;margin:0 auto;background:var(--paper);display:flex;flex-direction:column}.page{flex:1;padding:20px 20px calc(var(--nav) + 24px + env(safe-area-inset-bottom,0px));animation:page-in var(--dur) var(--ease)}.page-head{margin-bottom:20px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.today-ident{display:flex;align-items:center;gap:12px;margin-bottom:10px}.buddy{flex:none;width:48px;height:48px;border-radius:50%;object-fit:cover;background:#f3ead8}.today-ident-copy{min-width:0;flex:1}.today-head .hint{margin-top:0}.lesson-switch{display:inline-flex;align-items:center;gap:4px;max-width:100%;min-height:36px;margin:0 0 0 -8px;padding:4px 8px;border:0;border-radius:10px;background:transparent;color:var(--ink);font-size:1.25rem;font-weight:700;letter-spacing:-.022em;line-height:1.2;text-align:left;transition:background-color var(--dur-out) var(--ease),opacity var(--dur-out) var(--ease)}.lesson-switch span{min-width:0}.lesson-switch svg{flex:none;color:var(--muted);transition:transform var(--dur) var(--ease)}.lesson-switch[aria-expanded=true] svg{transform:rotate(-180deg)}.lesson-switch:active{background:#1c19170f}.lesson-meta{margin:0;color:var(--muted);font-size:.8125rem;font-weight:600;font-variant-numeric:tabular-nums}.page-status{display:flex;flex-direction:column;justify-content:center;min-height:calc(100dvh - 96px)}.eyebrow{margin:0;color:var(--teal);font-size:.8125rem;font-weight:600;letter-spacing:.01em}h1,h2{margin:6px 0 8px;font-weight:700;letter-spacing:-.022em;line-height:1.15}h1{font-size:clamp(1.75rem,6vw,2.125rem)}h2{font-size:1.25rem;margin-top:28px}.scene,.hint,.empty,.caption{color:var(--muted);font-size:.9375rem}.scene{margin:0 0 8px}.hint{margin:0 0 12px}.caption{font-size:.8125rem;margin:8px 0 12px;line-height:1.45}.empty{margin:8px 0 0;line-height:1.55}.hero,.guide,.panel{background:var(--surface);border:.5px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 16px 18px;margin:12px 0}.hero .eyebrow,.guide .eyebrow{margin:0 0 10px}.guide h2{font-size:1.05rem;margin:0 0 12px;letter-spacing:-.015em}.guide-frame{position:relative;aspect-ratio:16 / 9;background:#1c1917;border-radius:12px;overflow:hidden}.guide-frame iframe,.guide-frame video{position:absolute;inset:0;width:100%;height:100%;border:0}.guide-frame video::cue{display:none}.guide-cues{position:absolute;left:10px;right:10px;bottom:48px;margin:0;padding:7px 10px;border-radius:8px;background:#1c1917b8;color:#fff;text-align:center;font-size:.95rem;line-height:1.4;white-space:pre-line;pointer-events:none}.caption-modes{display:flex;gap:2px;margin-top:10px;padding:3px;border-radius:10px;background:#0f4c5c14}.caption-modes button{flex:1;min-height:38px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-weight:600;transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),transform var(--dur-out) var(--ease)}.caption-modes button:active{transform:scale(.98)}.caption-modes button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px #1c19171f}.speak-frame{background:#1c1917}.speak-scene{position:absolute;inset:0;width:100%;height:100%}.speak-cast{position:absolute;top:8px;left:8px;right:8px;display:flex;justify-content:space-between;pointer-events:none}.speak-cast span{padding:3px 9px;border-radius:999px;background:#1c19178c;color:#fffaf2;font-size:.72rem;font-weight:600}.speak-cast .on{outline:1.5px solid #e8dcc0}.speak-meta{position:absolute;top:8px;left:50%;transform:translate(-50%);margin:0;padding:3px 9px;border-radius:999px;background:#1c19178c;color:#fffaf2;font-size:.68rem;font-weight:600;pointer-events:none;white-space:nowrap}.speak-cues{position:absolute;left:8px;right:8px;bottom:8px;max-height:48%;overflow:auto;margin:0;padding:8px 10px;border-radius:10px;background:#1c1917c7;color:#fff;text-align:center}.speak-cues .en{margin:0;font-size:clamp(.95rem,4.1vw,1.28rem);font-weight:700;letter-spacing:-.02em;line-height:1.3}.speak-cues .zh{margin:4px 0 0;color:#e8dcc0;font-size:.82rem;line-height:1.35}.speak-overlay{position:absolute;inset:0;border:0;background:#1c191747;color:#fff;font-size:1.1rem;font-weight:650}.speak-controls{margin-top:10px}.cta{width:100%}.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:16px 0 4px}.toolbar .caption-modes{flex:1 1 160px;margin-top:0}.read-progress{margin:10px 0 4px}.read-bar{height:4px;border-radius:99px;background:var(--sand);overflow:hidden}.read-bar i{display:block;height:100%;border-radius:inherit;background:var(--teal);transition:width var(--dur) var(--ease)}.read-progress p{margin:6px 0 0;color:var(--muted);font-size:.8125rem;font-weight:650;font-variant-numeric:tabular-nums}.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.btn{min-height:44px;border:0;border-radius:12px;padding:0 16px;background:var(--teal);color:#fff;font-weight:600;transition:transform var(--dur-out) var(--ease),filter var(--dur) var(--ease),background-color var(--dur) var(--ease),opacity var(--dur) var(--ease)}.btn:hover{filter:brightness(1.06)}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.38;cursor:not-allowed;transform:none;filter:none}.btn-lg{min-height:52px;border-radius:14px;font-size:1.0625rem}.btn-ghost{background:var(--teal-soft);color:var(--teal)}.btn-warn{background:var(--terracotta)}.btn-ok{background:var(--ok)}.btn-line{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 .5px var(--line)}.btn-plain{background:transparent;color:var(--teal);padding:0 10px}.chip{min-height:44px;border:.5px solid var(--line);background:var(--surface);border-radius:999px;padding:0 12px;color:var(--ink);font-weight:550;transition:background-color var(--dur) var(--ease),transform var(--dur-out) var(--ease)}.chip:active{transform:scale(.97)}.chip.on{background:var(--teal-soft);border-color:transparent;color:var(--teal)}.chip.listen{display:inline-flex;align-items:center;gap:6px;background:var(--teal-soft);border:1.5px solid var(--teal);color:var(--teal);font-weight:650}.btn.is-playing,.chip.listen.is-playing{gap:8px}.btn.is-playing{display:inline-flex;align-items:center}.sound-bars{display:inline-flex;align-items:flex-end;gap:2px;width:12px;height:13px}.sound-bars i{display:block;width:2.5px;border-radius:1px;background:currentColor;transform-origin:center bottom;animation:sound-bar .72s var(--ease) infinite}.sound-bars i:nth-child(1){height:5px;animation-delay:0s}.sound-bars i:nth-child(2){height:13px;animation-delay:.14s}.sound-bars i:nth-child(3){height:8px;animation-delay:.28s}@keyframes sound-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}.line.is-reading{margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:10px;background:var(--teal-soft)}.line{display:grid;gap:6px;padding:14px 0;border-bottom:.5px solid var(--hairline)}.line:first-child{padding-top:2px}.line:last-child{border-bottom:0;padding-bottom:2px}.speaker{margin:0;font-size:.75rem;font-weight:650;color:var(--teal)}.line.you .speaker{color:var(--terracotta)}.line-card>p:not(.speaker):not(.hint){margin:8px 0 0;font-size:1.35rem;font-weight:600;letter-spacing:-.02em;line-height:1.35}.chunk{display:inline;border:0;padding:0 1px;background:linear-gradient(transparent 64%,#0f4c5c29 64%);color:inherit;font:inherit;font-weight:650;border-radius:2px;min-height:auto}.chunk:hover{background:linear-gradient(transparent 58%,#0f4c5c38 58%)}.sheet-back{position:fixed;inset:0;background:#1c191766;z-index:80;isolation:isolate;display:flex;align-items:flex-end;justify-content:center;animation:fade-in var(--dur) var(--ease)}body:has(.sheet-back) .guide-frame iframe,body:has(.sheet-back) .guide-frame video{visibility:hidden}.sheet{width:min(430px,100%);background:var(--surface);border-radius:20px 20px 0 0;padding:8px 20px calc(20px + env(safe-area-inset-bottom,0px));box-shadow:0 -8px 32px #1c19171f;animation:sheet-up .28s var(--ease)}.sheet-grab{width:36px;height:5px;margin:4px auto 14px;border-radius:999px;background:#1c19172e}.sheet p{margin:8px 0;color:var(--muted)}.sheet h2{margin:4px 0 10px}.sheet .btn{width:100%;margin-top:12px}.nav{position:fixed;left:50%;bottom:0;transform:translate(-50%);width:min(430px,100%);height:calc(var(--nav) + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);background:#f6f1e8c7;border-top:.5px solid var(--hairline);display:grid;grid-template-columns:repeat(5,1fr);z-index:10;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.nav button{border:0;background:transparent;color:#8a8278;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:.625rem;font-weight:500;letter-spacing:.01em;min-height:44px;transition:color var(--dur) var(--ease),opacity var(--dur-out) var(--ease)}.nav button:active{opacity:.55}.nav button.on{color:var(--teal);font-weight:650}.grade{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.grade button{min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 10px}.grade .hint{margin:0;font-size:.75rem;font-weight:500}.check{display:flex;gap:12px;align-items:flex-start;min-height:44px;padding:12px 0;border-bottom:.5px solid var(--hairline)}.check:last-of-type{border-bottom:0}.check input{appearance:none;width:22px;height:22px;margin:1px 0 0;flex:none;border:1.5px solid rgba(28,25,23,.28);border-radius:6px;background:var(--surface)}.check input:checked{background:var(--teal);border-color:var(--teal);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fffdf9' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8.5 6.5 11.5 12.5 4.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center}.check input:disabled{opacity:.38}.check span{line-height:1.45}.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}.cal b,.cal span{min-height:36px;display:grid;place-items:center;font-size:.8125rem;font-variant-numeric:tabular-nums;border-radius:999px}.cal b{color:var(--muted);font-weight:600;font-size:.72rem}.cal .done{background:var(--teal);color:#fff}.cal .today{box-shadow:inset 0 0 0 1.5px var(--terracotta)}.cal .done.today{box-shadow:inset 0 0 0 1.5px #fff}.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0 8px}.stats .panel,.stats .hint{margin:0}.timer{margin:4px 0 16px;font-size:3rem;font-weight:700;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--teal);line-height:1}.stats .timer{margin:8px 0 0;font-size:2.25rem}.err,.oknote{border-radius:12px;padding:12px 14px;margin:12px 0}.err{color:var(--danger);background:#f8e8e6}.oknote{color:var(--ok);background:#e7f2eb}.sheet-pick{max-height:min(86dvh,720px);padding:4px 0 calc(10px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;background:var(--paper)}.sheet-pick.is-drag{animation:none;transition:none}.sheet-grab-hit{flex:none;display:flex;align-items:center;justify-content:center;min-height:28px;padding-top:6px;touch-action:none}.pick-list{flex:1;min-height:0;overflow:auto;padding:4px 16px 8px;overscroll-behavior:contain}.pick-group{margin:0 0 16px}.pick-group h3{margin:0;padding:10px 4px 8px;color:var(--muted);font-size:.8125rem;font-weight:650;letter-spacing:.01em}.pick-card{background:var(--surface);border:.5px solid var(--hairline);border-radius:12px;overflow:hidden}.pick-row{width:100%;min-height:44px;border:0;border-bottom:.5px solid var(--hairline);background:transparent;padding:8px 12px;display:grid;grid-template-columns:28px 1fr 18px;gap:8px;align-items:center;text-align:left;transition:background-color var(--dur-out) var(--ease)}.pick-row:last-child{border-bottom:0}.pick-row:active{background:#1c19170d}.pick-row.on .pick-title{color:var(--teal);font-weight:650}.pick-row.dim{opacity:.48}.pick-day{color:var(--muted);font-size:.8125rem;font-variant-numeric:tabular-nums;font-weight:600}.pick-copy{display:grid;gap:2px;min-width:0}.pick-title{font-weight:550;letter-spacing:-.015em}.pick-meta{color:var(--muted);font-size:.75rem;line-height:1.35}.pick-check{display:grid;place-items:center;color:var(--teal)}.rec-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:56px;border:0;border-radius:16px;padding:0 18px;font-weight:650;font-size:1.0625rem;transition:transform var(--dur-out) var(--ease),background-color var(--dur) var(--ease),color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.rec-btn:active{transform:scale(.97)}.rec-core{width:14px;height:14px;border-radius:50%;background:currentColor}.rec-btn.is-idle{background:var(--teal);color:#fff}.rec-btn.is-rec{background:var(--terracotta);color:#fff;animation:rec-pulse 1.2s var(--ease) infinite}.rec-btn.is-rec .rec-core{width:12px;height:12px;border-radius:3px}.rec-btn.is-done{background:var(--teal-soft);color:var(--teal)}.rec-btn.is-done .rec-core{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor}.rec-dock{margin:16px 0 10px}audio{width:100%;margin-top:8px}@keyframes page-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes sheet-up{0%{opacity:.64;transform:translateY(16%)}to{opacity:1;transform:none}}@keyframes rec-pulse{0%,to{box-shadow:0 0 #c45c2647}50%{box-shadow:0 0 0 8px #c45c2600}}@media(prefers-reduced-motion:reduce){.page,.sheet-back,.sheet,.rec-btn.is-rec,.btn,.rec-btn,.chip,.caption-modes button,.nav button,.lesson-switch,.sound-bars i{animation:none!important;transition:none!important}.btn:active,.rec-btn:active,.chip:active,.caption-modes button:active{transform:none}}@media(min-width:768px){.app-shell{box-shadow:0 0 0 .5px var(--hairline)}}@media(min-width:1280px){body{background:#e8e0d2}.app-shell{box-shadow:0 0 0 .5px var(--hairline),0 0 80px #1c191714}.page{padding:28px 24px calc(var(--nav) + 28px)}}
