[data-tone-colours=on] .tc1{color:var(--t1)}[data-tone-colours=on] .tc2{color:var(--t2)}[data-tone-colours=on] .tc3{color:var(--t3)}[data-tone-colours=on] .tc4{color:var(--t4)}[data-tone-colours=on] .tc5{color:var(--t5)}[data-tone-colours=on] .contour-model.tc1{stroke:var(--t1)}[data-tone-colours=on] .contour-model.tc2{stroke:var(--t2)}[data-tone-colours=on] .contour-model.tc3{stroke:var(--t3)}[data-tone-colours=on] .contour-model.tc4{stroke:var(--t4)}[data-tone-colours=on] .contour-model.tc5{stroke:var(--t5)}.contour-model{stroke:var(--fg)}.session-head{justify-content:space-between;align-items:center;gap:8px;margin-left:-8px;display:flex}.session-head .back{padding:0 12px}.row-gap{align-items:center;gap:8px;display:flex}.list.plain li{padding:4px 0}.small-icon{min-width:48px;min-height:48px}.icon-btn{border-radius:50%;flex:none;width:48px;min-width:48px;height:48px;padding:0}.icon-btn.big{align-self:center;width:72px;height:72px;font-size:1.6rem}.icon-btn[aria-pressed=true]{border-color:var(--accent)}.miss,.choice.miss{border:2px solid var(--fg)}.miss-badge{border:2px solid var(--fg);vertical-align:middle;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;margin-left:8px;font-size:.7rem;font-weight:700;line-height:1;display:inline-flex}.focus-card,.reader,.end,.focus-main{flex-direction:column;flex:1;gap:16px;display:flex}.prompt{color:var(--muted);font-size:1rem}.meaning-big{font-size:1.6rem;font-weight:600;line-height:1.25}.bottombar{background:var(--bg);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex;position:sticky;bottom:0}.bottombar button.primary:only-child{flex:1}.answer-field{width:100%;min-height:56px;font:inherit;color:var(--fg);background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:0 16px;font-size:1.4rem}.answer-field.miss{border:2px solid var(--fg)}.context{flex-direction:column;gap:4px;display:flex}.hanzi-lg{font-size:2.4rem;line-height:1.2}.hanzi-md{font-size:1.35rem;line-height:1.4}.pinyin-lg{font-size:1.3rem}.pinyin-md{font-size:1rem}.reading{font-family:var(--font-read)}.choice.miss{justify-content:space-between}.tone-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.tone-grid .choice{justify-content:center;min-height:56px}.sheet{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.sheet[data-verdict=wrong]{border:2px solid var(--fg)}.verdict{font-weight:600}.answer{flex-direction:column;gap:2px;display:flex}.syllables{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.syl{border:1px solid var(--line);border-radius:10px;flex-direction:column;align-items:center;min-width:56px;padding:6px 10px;display:flex}.syl.miss{border:2px solid var(--fg)}.syl-main{font-size:1.3rem;font-weight:600}.syl-note{color:var(--muted);font-size:.8rem}.reader-page{flex-direction:column;flex:1;gap:20px;padding-bottom:8px;display:flex}.reader-page h1{font-family:var(--font-read)}.situation{font-size:1.1rem}.question{font-size:1.3rem;font-weight:600}.explanation{font-size:1.1rem;line-height:1.55}.speaker-label{color:var(--muted);font-size:.85rem}.rline{border-radius:12px;flex-direction:column;gap:4px;margin:0 -10px;padding:8px 10px;display:flex}.rline.active{background:var(--surface)}.rline-head{justify-content:space-between;align-items:center;min-height:28px;display:flex}.ruby-line{flex-wrap:wrap;align-items:flex-end;column-gap:2px;font-size:1.5rem;line-height:2.4;display:flex}.ruby-line ruby{ruby-position:over}.ruby-line rt{font-size:.5em;font-family:var(--font-ui)}button.wg{all:unset;cursor:pointer;border-radius:6px;display:inline-block}button.wg:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.wg.new{text-underline-offset:6px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;text-decoration-thickness:2px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.example{border-bottom:1px solid var(--line);flex-direction:column;gap:4px;padding:12px 0;display:flex}.player{padding:12px 16px max(12px, env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);flex-direction:column;gap:10px;margin:0 -16px -24px;display:flex;position:sticky;bottom:0}.player-row{gap:8px;display:flex}.player-row .primary{margin-left:auto}.player button[aria-pressed=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.gloss{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.small-seg label{min-height:48px;font-size:.85rem}.thread-wrap{flex-direction:column;flex:1;min-height:0;display:flex}.thread{flex-direction:column;flex:1;gap:10px;padding-bottom:12px;display:flex}.thread-label{text-align:center;margin-top:8px}.bubble{border-radius:18px;flex-direction:column;gap:6px;max-width:88%;padding:10px 14px;display:flex}.bubble.partner{background:var(--surface);border-bottom-left-radius:6px;align-self:flex-start}.bubble.me{background:var(--surface-me);border-bottom-right-radius:6px;align-self:flex-end;max-width:94%}.bubble.me.miss{border:2px solid var(--fg)}.voice-row{align-items:center;gap:8px;display:flex}.small-btn{min-height:44px;padding:0 10px;font-size:.85rem;font-weight:400}.dock{padding:12px 16px max(12px, env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);flex-direction:column;gap:8px;margin:0 -16px -24px;display:flex;position:sticky;bottom:0}.dock-slot:empty{display:none}.mic-row{justify-content:center;align-items:center;gap:12px;display:flex}.mic{background:var(--accent);border-color:var(--accent);width:72px;height:72px;min-height:72px;color:var(--on-accent);border-radius:50%;padding:0}.mic.recording{color:var(--accent);border:3px solid var(--accent);background:0 0}.mic:disabled{opacity:.5}.type-row{gap:8px;display:flex}.type-row .answer-field{min-height:48px;font-size:1.1rem}.speak-compare{gap:12px}.model-row{align-items:center;gap:10px;display:flex}.pitch{flex-direction:column;gap:4px;margin:0;display:flex}.pitch svg{background:var(--surface);border:1px solid var(--line);border-radius:12px;width:100%}.rate{gap:8px;display:flex}.rate button{flex:1}.rate button[aria-pressed=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.focus-card .speak-compare{background:0 0;align-self:stretch;max-width:none;padding:0}@media (prefers-reduced-motion:no-preference){.mic.recording{animation:1.4s ease-in-out infinite breathe}@keyframes breathe{50%{opacity:.6}}}.contents{display:contents}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-next-latin-ext-400-normal-BalHKn7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-next-latin-400-normal-FfmJh7DR.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/atkinson-hyperlegible-next-latin-ext-600-normal-kZZEtAc7.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/atkinson-hyperlegible-next-latin-600-normal-BBuhw47K.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-next-latin-ext-700-normal-CBw-mJf_.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-next-latin-700-normal-Dpiyiu63.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-serif-4-latin-ext-400-normal-B5LksYz5.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-serif-4-latin-400-normal-DJ5YJwmz.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-serif-4-latin-ext-600-normal-pa-C5Dkf.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-serif-4-latin-600-normal-DouSKlru.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101418;--surface:#1b232c;--surface-me:#2a2440;--fg:#e5eaee;--muted:#8e99a3;--line:#26303a;--accent:#b394f2;--on-accent:#101418;--t1:#ff6b7a;--t2:#f5a442;--t3:#6cc865;--t4:#62a6ff;--t5:#9aa4ad;--font-ui:"Atkinson Hyperlegible Next", system-ui, sans-serif;--font-read:"Source Serif 4", Georgia, serif;--font-hanzi:"Noto Sans SC", "Microsoft YaHei", "PingFang SC", system-ui, sans-serif}@media (prefers-color-scheme:light){:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f3f5f7;--surface:#fff;--surface-me:#e9e1fa;--fg:#141a20;--muted:#56616c;--line:#d6dce2;--accent:#6a3fb0;--on-accent:#fff;--t1:#c8102e;--t2:#a35a00;--t3:#26781f;--t4:#1f62c4;--t5:#58626a}}*{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font-ui);margin:0;font-size:17px;line-height:1.45}:lang(zh){font-family:var(--font-hanzi)}.column{max-width:480px;min-height:100dvh;padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(24px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));flex-direction:column;gap:16px;margin:0 auto;display:flex}h1{margin:8px 0 0;font-size:1.6rem;font-weight:700;line-height:1.2}h2{margin:0;font-size:1.1rem;font-weight:600}p{margin:0}.muted{color:var(--muted)}.small{font-size:.9rem}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.row{justify-content:space-between;align-items:center;gap:12px;display:flex}button,.button{font:inherit;border:1px solid var(--line);background:var(--surface);min-height:48px;color:var(--fg);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;padding:0 20px;font-weight:600;text-decoration:none;display:inline-flex}button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}button.quiet{background:0 0}button.block,.button.block{width:100%}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}a{color:var(--accent)}.topbar{align-items:center;gap:8px;margin-left:-8px;display:flex}.list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.choice{text-align:left;justify-content:space-between;gap:12px;width:100%;min-height:64px;padding:12px 16px;font-weight:400}.choice .title{font-weight:600;display:block}.choice[aria-pressed=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.banner{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 16px}.switch{justify-content:space-between;align-items:center;gap:12px;min-height:48px;display:flex}.switch input{appearance:none;background:var(--line);cursor:pointer;border-radius:16px;flex:none;width:52px;height:32px;margin:0;position:relative}.switch input:after{content:"";background:var(--fg);border-radius:50%;width:24px;height:24px;position:absolute;top:4px;left:4px}.switch input:checked{background:var(--accent)}.switch input:checked:after{background:var(--on-accent);left:24px}@media (prefers-reduced-motion:no-preference){.switch input:after{transition:left .12s}}.segments{border:1px solid var(--line);border-radius:12px;display:flex;overflow:hidden}.segments label{text-align:center;cursor:pointer;border-left:1px solid var(--line);flex:1;justify-content:center;align-items:center;min-height:48px;padding:4px 6px;font-size:.95rem;display:flex}.segments label:first-child{border-left:0}.segments input{opacity:0;pointer-events:none;position:absolute}.segments label:has(input:checked){background:var(--accent);color:var(--on-accent);font-weight:600}.segments label:has(input:focus-visible){outline:3px solid var(--accent);outline-offset:-3px}fieldset{border:0;flex-direction:column;gap:8px;margin:0;padding:0;display:flex}legend{margin-bottom:8px;padding:0;font-weight:600}.tones{gap:16px;font-weight:700;display:flex}.tones span{color:var(--fg)}[data-tone-colours=on] .tones .t1{color:var(--t1)}[data-tone-colours=on] .tones .t2{color:var(--t2)}[data-tone-colours=on] .tones .t3{color:var(--t3)}[data-tone-colours=on] .tones .t4{color:var(--t4)}[data-tone-colours=on] .tones .t5{color:var(--t5)}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.choice>span:last-child{white-space:nowrap}
