
:root{--ink:#173b3f;--ink2:#274e55;--jade:#667f70;--jade2:#9bad98;--gold:#b59a61;--paper:#f4f0e5;--paper2:#ebe4d4;--card:#fffdf7;--text:#172d31;--muted:#6c7774;--line:#d9d0bc;--danger:#8a544d;--shadow:0 18px 50px rgba(26,49,48,.12);--radius:18px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--text);font-family:"Noto Sans Thai","Leelawadee UI","Tahoma",sans-serif;min-height:100vh}body:before{content:"";position:fixed;inset:0;z-index:-2;background:radial-gradient(circle at 15% 10%,rgba(102,127,112,.13),transparent 24%),radial-gradient(circle at 86% 18%,rgba(181,154,97,.12),transparent 22%),linear-gradient(180deg,var(--paper),#eee8da)}body:after{content:"山 水 云";position:fixed;right:-1vw;bottom:-5vh;z-index:-1;color:rgba(23,59,63,.035);font:900 24vw/1 "Songti SC","STSong",serif;letter-spacing:-.08em;pointer-events:none}.dark{--paper:#112629;--paper2:#173237;--card:#183438;--text:#eff4eb;--muted:#b3c0b9;--line:#315056;--ink:#aac5b1;--ink2:#c4d6c8;--jade:#97b3a0;--gold:#d2bc83;--shadow:0 18px 50px rgba(0,0,0,.28)}button,input,textarea,select{font:inherit}.topbar{height:66px;position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:14px;padding:0 18px;background:rgba(244,240,229,.92);border-bottom:1px solid var(--line);backdrop-filter:blur(16px)}.dark .topbar{background:rgba(17,38,41,.92)}.brand{display:flex;align-items:baseline;gap:10px;flex:1}.brand span{font:700 22px "Songti SC","STSong","Noto Serif SC",serif;color:var(--ink)}.brand b{font-size:15px}.top-actions{display:flex;gap:7px}.icon-btn{width:40px;height:40px;border:1px solid var(--line);border-radius:50%;background:var(--card);color:var(--ink);cursor:pointer}.shell{display:flex;min-height:calc(100vh - 66px)}.sidebar{width:245px;position:sticky;top:66px;height:calc(100vh - 66px);padding:20px 14px;border-right:1px solid var(--line);background:rgba(255,253,247,.58);backdrop-filter:blur(10px);overflow:auto}.dark .sidebar{background:rgba(24,52,56,.5)}.nav-title{font:700 13px "Songti SC",serif;letter-spacing:.18em;color:var(--muted);padding:3px 12px 10px}.nav-item{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;background:transparent;color:var(--text);padding:12px;border-radius:12px;margin:3px 0;font:700 18px "Songti SC","STSong",serif;cursor:pointer;text-align:left}.nav-item span{font:500 12px "Noto Sans Thai",sans-serif;color:var(--muted)}.nav-item:hover,.nav-item.active{background:var(--ink);color:#f7f1df}.nav-item.active span,.nav-item:hover span{color:#dce5db}.sidebar-note{margin:24px 8px;padding:16px;border-top:1px solid var(--line);font:600 14px "Songti SC",serif;color:var(--jade)}.main{flex:1;min-width:0;padding:32px max(24px,4vw) 80px}.page-head{display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:24px}.page-head h1{margin:0;color:var(--ink);font:800 clamp(30px,4vw,52px)/1.05 "Songti SC","STSong","Noto Serif SC",serif}.page-head p{margin:8px 0 0;color:var(--muted)}.page-kicker{letter-spacing:.16em;color:var(--gold);font-weight:800;font-size:12px}.grid{display:grid;gap:18px}.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px;position:relative;overflow:hidden}.card:before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,var(--jade),var(--gold),transparent)}.stat strong{display:block;font:800 34px "Songti SC",serif;color:var(--ink)}.stat span{color:var(--muted);font-size:13px}.plan-row{display:grid;grid-template-columns:100px 1fr auto;align-items:center;gap:12px;margin:13px 0}.bar{height:9px;border-radius:999px;background:var(--paper2);overflow:hidden}.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--jade),var(--gold));border-radius:999px}.primary-btn,.secondary-btn,.ghost-btn,.danger-btn{border:0;border-radius:999px;padding:11px 18px;cursor:pointer;font-weight:800}.primary-btn{background:var(--ink);color:#fff}.secondary-btn{background:var(--jade);color:#fff}.ghost-btn{background:transparent;border:1px solid var(--line);color:var(--text)}.danger-btn{background:var(--danger);color:#fff}.button-row{display:flex;gap:10px;flex-wrap:wrap}.study-shell{max-width:860px;margin:auto}.study-card{min-height:480px;display:flex;flex-direction:column;justify-content:space-between;padding:clamp(24px,5vw,52px)}.study-top{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:13px}.prompt-label{color:var(--gold);font-weight:800;letter-spacing:.08em}.prompt-main{margin:30px 0;text-align:center;font:800 clamp(42px,9vw,88px)/1.15 "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;color:var(--ink);word-break:break-word}.prompt-main.thai{font:800 clamp(27px,5vw,48px)/1.35 "Noto Sans Thai",sans-serif}.prompt-context{font:600 clamp(20px,3vw,29px)/1.6 "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;text-align:center}.answer-box{width:100%;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--paper);color:var(--text);font-size:18px;outline:none}.answer-box:focus{border-color:var(--jade);box-shadow:0 0 0 4px rgba(102,127,112,.15)}.answer-reveal{display:none;margin:16px 0;padding:18px;border-radius:14px;background:var(--paper2)}.answer-reveal.show{display:block}.answer-reveal .answer-cn{font:800 36px "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;color:var(--ink)}.rating-row{display:none;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px}.rating-row.show{display:grid}.rating-row button{border:1px solid var(--line);background:var(--card);color:var(--text);padding:11px 5px;border-radius:12px;cursor:pointer}.rating-row button:hover{background:var(--ink);color:#fff}.filter-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}.filter-row input,.filter-row select{padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--text)}.browse-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.browse-item{padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--card)}.browse-item b{font:800 23px "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;color:var(--ink)}.browse-item small{display:block;color:var(--muted);margin-top:5px}.hanzi-canvas{width:100%;max-width:360px;height:300px;margin:16px auto;background:linear-gradient(90deg,transparent 49.8%,rgba(181,154,97,.25) 50%,transparent 50.2%),linear-gradient(transparent 49.8%,rgba(181,154,97,.25) 50%,transparent 50.2%),var(--card);border:2px solid var(--gold);touch-action:none}.grammar-pattern{font:800 clamp(32px,6vw,58px) "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;text-align:center;color:var(--ink)}.mic-status{padding:12px;border-radius:12px;background:var(--paper2);margin:12px 0;min-height:48px}.exam-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}.exam-tab{border:1px solid var(--line);background:var(--card);padding:10px 15px;border-radius:999px;cursor:pointer}.exam-tab.active{background:var(--ink);color:#fff}.audio-panel{position:sticky;top:78px;z-index:15;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;margin-bottom:18px;box-shadow:var(--shadow)}audio{width:100%;margin:8px 0}.question{padding:18px 0;border-bottom:1px dashed var(--line)}.question h4{font:700 18px/1.6 "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;margin:0 0 10px}.option{display:block;padding:10px 12px;margin:6px 0;border:1px solid var(--line);border-radius:11px;cursor:pointer}.option:has(input:checked){border-color:var(--jade);background:rgba(102,127,112,.12)}.passage{padding:20px;background:var(--paper2);border-radius:14px;font:500 18px/1.9 "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;white-space:pre-line}.writing-area{width:100%;min-height:300px;border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--paper);color:var(--text);font:500 18px/1.8 "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif}.timer{font:800 24px ui-monospace,monospace;color:var(--ink)}.welcome-overlay{position:fixed;inset:0;z-index:100;background:radial-gradient(circle at 50% 25%,rgba(155,173,152,.3),transparent 30%),linear-gradient(145deg,#eee7d5,#dae2d7);display:flex;align-items:center;justify-content:center;padding:20px}.welcome-overlay.hidden{display:none}.welcome-panel{max-width:560px;text-align:center;padding:42px;background:rgba(255,253,247,.88);border:1px solid rgba(181,154,97,.5);border-radius:26px;box-shadow:0 30px 80px rgba(23,59,63,.2)}.welcome-panel h1{font:900 clamp(38px,7vw,68px)/1.12 "Songti SC","STSong",serif;color:var(--ink);margin:14px 0}.welcome-panel button{display:block;margin:10px auto;width:min(100%,390px)}.welcome-panel small{display:block;color:#66716e;margin-top:16px}.seal{width:64px;height:64px;border:2px solid var(--gold);display:grid;place-items:center;margin:auto;transform:rotate(-3deg);font:900 38px "Songti SC",serif;color:var(--ink)}.eyebrow{letter-spacing:.16em;font-weight:800;color:var(--jade)}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,30px);opacity:0;z-index:120;background:var(--ink);color:#fff;padding:11px 18px;border-radius:999px;transition:.25s;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%,0)}.source-links a{display:inline-flex;margin:6px;padding:10px 14px;border:1px solid var(--line);border-radius:12px;color:var(--ink);text-decoration:none;background:var(--card)}.tag{display:inline-block;padding:4px 9px;border-radius:999px;background:var(--paper2);font-size:12px;color:var(--muted)}.notice{padding:14px 16px;border-left:4px solid var(--gold);background:var(--paper2);border-radius:10px;margin:14px 0}.search-result{max-height:58vh;overflow:auto}.hidden{display:none!important}
@media(max-width:950px){.grid.cols-4{grid-template-columns:repeat(2,1fr)}.grid.cols-3{grid-template-columns:1fr}.sidebar{position:fixed;left:-270px;z-index:50;transition:.25s;background:var(--card);box-shadow:var(--shadow)}.sidebar.open{left:0}.main{padding:24px 16px 70px}.browse-list{grid-template-columns:1fr}.page-head{align-items:start;flex-direction:column}.audio-panel{top:72px}}
@media(max-width:560px){.grid.cols-4,.grid.cols-2{grid-template-columns:1fr}.rating-row{grid-template-columns:repeat(2,1fr)}.brand b{display:none}.study-card{min-height:510px}.prompt-main{font-size:54px}.welcome-panel{padding:28px 20px}.plan-row{grid-template-columns:76px 1fr auto}}

/* ===== V2 polish: warm ancient-China scene + cross-device fixes ===== */
:root{
  --ink:#17352f;--ink2:#2c5147;--jade:#6f8a76;--jade2:#aab9a2;--gold:#b79862;
  --paper:#eee8d9;--paper2:#e5ddca;--card:rgba(255,252,244,.92);--text:#1f302c;--muted:#6a746e;
  --line:#d2c6ac;--danger:#8a5147;--shadow:0 18px 52px rgba(26,48,42,.13);--radius:20px;
  --thai:"Sukhumvit Set","Thonburi","Noto Sans Thai","Leelawadee UI",Tahoma,sans-serif;
  --cn:"PingFang SC","Microsoft YaHei","Noto Sans CJK SC","Noto Sans SC",sans-serif;
  --cn-serif:"Songti SC","STSong","Noto Serif CJK SC","Noto Serif SC",serif;
}
body{font-family:var(--thai);background:#e7e0cf;color:var(--text);overflow-x:hidden;isolation:isolate}
body:before{content:"";position:fixed;inset:0;z-index:-6;background-image:linear-gradient(rgba(245,240,226,.18),rgba(245,240,226,.18)),url('assets/scene-day.svg');background-size:cover;background-position:center;background-attachment:fixed;transition:filter .35s ease,opacity .35s ease}
body:after{content:"";position:fixed;inset:0;z-index:-5;background:linear-gradient(90deg,rgba(241,235,219,.68) 0%,rgba(241,235,219,.30) 45%,rgba(241,235,219,.18) 100%);pointer-events:none}
body.dark{--paper:#10231f;--paper2:#192f29;--card:rgba(20,42,36,.91);--text:#f0ead9;--muted:#b8c0b5;--line:#40564d;--ink:#e6ddc6;--ink2:#ccb989;--jade:#9caf97;--jade2:#bcc9b7;--gold:#d3b877;--shadow:0 22px 56px rgba(0,0,0,.34)}
body.dark:before{background-image:linear-gradient(rgba(5,16,14,.08),rgba(5,16,14,.08)),url('assets/scene-night.svg')}
body.dark:after{background:linear-gradient(90deg,rgba(8,22,19,.48),rgba(8,22,19,.20) 55%,rgba(8,22,19,.10))}
#ambientScene{position:fixed;inset:0;z-index:-4;pointer-events:none;overflow:hidden}.scene-branch{position:absolute;right:-60px;top:70px;width:min(32vw,430px);height:78vh;background:url('assets/branch-foreground.svg') right top/contain no-repeat;opacity:.36;filter:drop-shadow(-16px 18px 22px rgba(18,38,31,.18));transform:translateZ(0);transition:.35s}.dark .scene-branch{opacity:.66;filter:brightness(.72) saturate(.82) drop-shadow(-20px 24px 26px rgba(0,0,0,.48))}.scene-fog{position:absolute;left:18%;right:-10%;bottom:2%;height:34vh;background:radial-gradient(ellipse at center,rgba(255,255,245,.5),transparent 65%);filter:blur(28px);opacity:.55}.dark .scene-fog{opacity:.12}
.topbar{background:rgba(241,235,220,.86);border-color:rgba(123,112,87,.22);box-shadow:0 10px 28px rgba(42,54,47,.06)}.dark .topbar{background:rgba(11,29,25,.90)}
.sidebar{background:rgba(248,244,232,.76);border-color:rgba(123,112,87,.22)}.dark .sidebar{background:rgba(13,34,29,.76)}
.main{position:relative;z-index:1}.page-head h1,.brand span,.nav-item,.stat strong,.welcome-panel h1,.seal{font-family:var(--cn-serif)}
.page-head h1{color:var(--ink)}.page-head p{max-width:740px}.card{color:var(--text);background:var(--card);backdrop-filter:blur(15px) saturate(1.05);-webkit-backdrop-filter:blur(15px) saturate(1.05);transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}.card h2,.card h3,.card b,.browse-item b{color:var(--ink)}button.card{appearance:none;-webkit-appearance:none;text-align:left;color:var(--text);width:100%;cursor:pointer}button.card:hover{transform:translateY(-3px);border-color:rgba(183,152,98,.55);box-shadow:0 22px 58px rgba(25,47,40,.16)}button.card h2{font-family:var(--cn);font-weight:800;color:var(--ink)!important}button.card p{color:var(--muted)!important}
.dark button.card h2,.dark .browse-item b,.dark .grammar-pattern,.dark .prompt-main,.dark .answer-reveal .answer-cn{color:#efe6d2!important}
.icon-btn{display:grid;place-items:center;min-width:42px;min-height:42px}.icon-btn svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}.primary-btn,.secondary-btn,.ghost-btn,.danger-btn{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.primary-btn{background:#17352f;color:#f8f2e3}.dark .primary-btn{background:#d0b777;color:#14231f}.secondary-btn{background:#708a78;color:#fff}.dark .secondary-btn{background:#879c8b;color:#13231f}.ghost-btn{background:rgba(255,255,255,.10)}
.prompt-main,.prompt-context,.answer-reveal .answer-cn,.grammar-pattern,.browse-item b,.question h4,.passage,.writing-area{font-family:var(--cn)}.prompt-main.thai,.prompt-context.thai{font-family:var(--thai)}.prompt-main.thai{font-weight:700;letter-spacing:-.02em}.answer-box{font-family:var(--thai);background:rgba(255,252,244,.78);min-height:50px}.dark .answer-box{background:rgba(4,17,14,.28)}
.study-card{background:color-mix(in srgb,var(--card) 94%,transparent);box-shadow:0 28px 70px rgba(27,45,40,.16)}.study-next-row{display:none;gap:10px;flex-wrap:wrap;margin-top:14px}.study-next-row.show{display:flex}.study-next-row .secondary-btn{min-width:150px}.study-helper{padding:12px 14px;border-radius:14px;background:rgba(183,152,98,.11);border:1px solid rgba(183,152,98,.25);margin-top:12px;color:var(--text)}.study-helper strong{color:var(--gold)}
.ai-panel{display:none;margin:14px 0;padding:16px;border-radius:15px;background:rgba(111,138,118,.12);border:1px solid rgba(111,138,118,.28)}.ai-panel.show{display:block}.ai-score{display:flex;align-items:center;gap:12px;margin-bottom:8px}.ai-score strong{font-size:28px;color:var(--ink)}.score-pill{display:inline-flex;padding:5px 10px;border-radius:999px;background:var(--ink);color:#fff;font-weight:800}.dark .score-pill{background:var(--gold);color:#1b2a25}.diff-miss{color:#a45448;font-weight:800}.diff-hit{color:#4f7b61;font-weight:800}.dark .diff-hit{color:#b5cfad}.transcript-box{padding:12px 14px;border-radius:12px;background:var(--paper2);font-family:var(--cn);font-size:20px;margin-top:8px}
.record-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.mic-status.error{border:1px solid rgba(138,81,71,.55);background:rgba(138,81,71,.12)}.mic-status.ok{border:1px solid rgba(95,132,101,.42);background:rgba(95,132,101,.12)}audio{accent-color:var(--gold)}
.exam-feedback{margin-top:10px;padding:12px 14px;border-radius:12px;background:var(--paper2);font-size:14px;line-height:1.65}.question.correct{border-left:4px solid #5f8465;padding-left:14px}.question.wrong{border-left:4px solid #a55f53;padding-left:14px}.option.correct-answer{border-color:#5f8465;background:rgba(95,132,101,.14)}.option.user-wrong{border-color:#a55f53;background:rgba(165,95,83,.12)}.mistake-deck{display:grid;gap:10px;margin-top:14px}.mistake-card{padding:14px;border:1px solid var(--line);border-radius:13px;background:var(--card)}.mistake-card b{font-family:var(--cn)}.writing-check{margin-top:12px;padding:14px;border-radius:13px;background:var(--paper2)}
.audio-panel{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.music-dock{position:fixed;right:18px;bottom:18px;z-index:75;width:210px;padding:10px;border:1px solid rgba(183,152,98,.38);border-radius:15px;background:rgba(19,42,36,.94);box-shadow:0 18px 50px rgba(0,0,0,.28);color:#eee4cf;transition:.2s}.music-dock iframe{width:190px;height:107px;border:0;border-radius:9px;display:block}.music-dock-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px;font-family:var(--cn-serif)}.music-dock-meta{font-size:10px;line-height:1.35;opacity:.68;margin-top:6px}.mini-btn{border:1px solid rgba(255,255,255,.18);background:transparent;color:inherit;border-radius:8px;width:28px;height:28px;cursor:pointer}.music-dock.minimized{width:154px}.music-dock.minimized iframe,.music-dock.minimized .music-dock-meta{display:none}
.welcome-overlay{background:linear-gradient(rgba(237,229,209,.34),rgba(237,229,209,.38)),url('assets/scene-day.svg') center/cover no-repeat}.dark .welcome-overlay{background:linear-gradient(rgba(4,15,13,.28),rgba(4,15,13,.38)),url('assets/scene-night.svg') center/cover no-repeat}.welcome-panel{background:rgba(255,252,242,.84);backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.dark .welcome-panel{background:rgba(17,37,31,.88);color:#efe8d8}.dark .welcome-panel small{color:#b6beb4}
.toast{max-width:min(86vw,560px);text-align:center}

@media(max-width:1100px){.scene-branch{width:350px;right:-95px;opacity:.25}.dark .scene-branch{opacity:.48}.main{padding-left:28px;padding-right:28px}}
@media(max-width:950px){.sidebar{width:270px;left:-285px}.sidebar.open{left:0}.main{padding:24px 20px 88px}.study-shell{max-width:820px}.study-card{min-height:auto}.music-dock{right:12px;bottom:12px}.scene-branch{width:300px;right:-110px;top:110px}}
@media(max-width:700px){body:before{background-position:62% center}.topbar{height:62px;padding:0 12px}.shell{min-height:calc(100vh - 62px)}.sidebar{top:62px;height:calc(100vh - 62px)}.main{padding:18px 12px calc(92px + env(safe-area-inset-bottom))}.page-head{margin-bottom:16px}.page-head h1{font-size:34px}.card{padding:17px;border-radius:17px}.prompt-main{font-size:48px;margin:22px 0}.prompt-main.thai{font-size:31px}.prompt-context{font-size:20px}.study-card{padding:20px 16px 82px;min-height:calc(100dvh - 120px)}.button-row.study-actions{position:sticky;bottom:calc(10px + env(safe-area-inset-bottom));z-index:12;padding:10px;border-radius:16px;background:color-mix(in srgb,var(--card) 92%,transparent);backdrop-filter:blur(14px);box-shadow:0 10px 38px rgba(0,0,0,.12)}.button-row.study-actions>*{flex:1;min-width:120px}.rating-row{grid-template-columns:repeat(2,1fr)}.music-dock{width:174px}.music-dock iframe{width:154px;height:87px}.scene-branch{width:240px;right:-105px;top:150px;opacity:.18}.dark .scene-branch{opacity:.34}.passage{font-size:17px;line-height:1.75;padding:16px}.question h4{font-size:17px}.option{padding:12px}.audio-panel{top:68px}.browse-list{grid-template-columns:1fr}}
@media(max-width:430px){.brand span{font-size:19px}.brand b{display:none}.page-head h1{font-size:31px}.prompt-main{font-size:44px}.prompt-main.thai{font-size:28px}.study-top{align-items:flex-start;gap:6px;flex-direction:column}.button-row.study-actions>*{width:100%}.music-dock{left:10px;right:10px;width:auto}.music-dock iframe{width:100%;height:110px}.scene-branch{display:none}.grid.cols-4,.grid.cols-3,.grid.cols-2{grid-template-columns:1fr}}
.btn-svg{display:inline-grid;place-items:center;width:18px;height:18px}.btn-svg svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.cn-inline{font-family:var(--cn);font-weight:800;color:var(--ink)}

/* ==========================================================
   顺序自习 — additive vocabulary self-study module
   ========================================================== */
.ss-page{max-width:1040px;margin:0 auto;padding-bottom:110px}.ss-toolbar{margin-bottom:18px}.ss-toolbar-top{display:flex;justify-content:space-between;gap:18px;align-items:flex-start}.ss-progress-label{font-size:26px;font-family:var(--cn-serif);color:var(--ink);margin-top:3px}.ss-mini-stats{display:flex;gap:8px;flex-wrap:wrap}.ss-mini-stats span,.ss-status{border:1px solid var(--line);border-radius:999px;padding:7px 11px;font-size:13px;background:color-mix(in srgb,var(--card) 88%,transparent)}.ss-status.learned{border-color:rgba(80,125,90,.45);background:rgba(80,125,90,.12)}.ss-status.hard{border-color:rgba(170,115,74,.48);background:rgba(170,115,74,.12)}.ss-progress{height:8px;border-radius:999px;background:rgba(90,105,92,.14);overflow:hidden;margin:15px 0}.ss-progress i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--jade),var(--gold));transition:width .3s ease}.ss-jump-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ss-jump-row label{display:flex;align-items:center;gap:8px;color:var(--muted)}.ss-jump-input{width:104px;border:1px solid var(--line);border-radius:11px;padding:10px 12px;background:var(--paper2);color:var(--text);font:inherit}.ss-word-card{position:relative;overflow:hidden}.ss-word-card:after{content:"词";position:absolute;right:-15px;bottom:-75px;font:220px/1 var(--cn-serif);color:var(--ink);opacity:.025;pointer-events:none}.ss-word-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.ss-id{font-size:13px;color:var(--muted);letter-spacing:.04em}.ss-word{font:800 clamp(58px,7vw,92px)/1.1 var(--cn);color:var(--ink);margin-top:7px;letter-spacing:.04em}.ss-pinyin{font-size:23px;color:var(--gold);font-weight:700;letter-spacing:.02em;margin-top:4px}.ss-meaning,.ss-example{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}.ss-meaning span,.ss-example>span{display:block;font-size:12px;letter-spacing:.08em;color:var(--muted);margin-bottom:7px}.ss-meaning b{font-size:22px}.ss-cn-sentence{font:600 25px/1.7 var(--cn);color:var(--ink)}.ss-th-sentence{font-size:16px;color:var(--muted);margin-top:4px}.ss-word-mark{background:rgba(190,153,87,.18);color:inherit;border-radius:5px;padding:0 3px}.ss-audio-row{margin-top:20px}.ss-step-title{display:flex;gap:11px;align-items:center;margin-bottom:7px}.ss-step-title span{font:700 12px var(--cn);letter-spacing:.08em;color:var(--gold)}.ss-step-title b{font-size:18px;color:var(--ink)}.ss-recall,.ss-copy-card,.ss-hand-card,.ss-use-card,.ss-note-card{margin-top:18px}.ss-recall-thai{font-size:25px;font-weight:750;margin:14px 0}.ss-cloze{font:600 24px/1.7 var(--cn);padding:15px 17px;border-radius:13px;background:var(--paper2);margin-bottom:12px}.ss-blank{color:var(--gold)}.ss-recall-input{font-family:var(--cn);font-size:26px}.ss-feedback{margin-top:14px;padding:14px 16px;border-radius:14px;display:grid;gap:4px;border:1px solid var(--line);background:var(--paper2)}.ss-feedback b{font-size:16px}.ss-feedback.good{border-color:rgba(75,130,88,.42);background:rgba(75,130,88,.10)}.ss-feedback.bad{border-color:rgba(165,94,70,.42);background:rgba(165,94,70,.10)}.ss-feedback.reveal{border-color:rgba(183,152,98,.42)}.ss-feedback strong{font:800 25px var(--cn);color:var(--ink)}.ss-copy-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0}.ss-copy-input{min-width:0;border:1px solid var(--line);border-radius:12px;background:var(--paper2);color:var(--ink);padding:14px 15px;font:700 25px var(--cn);text-align:center}.ss-inline-feedback{color:var(--muted);align-self:center}.ss-inline-feedback.good{color:var(--jade)}.ss-canvas{display:block;width:100%;height:auto;aspect-ratio:1200/390;border:1px solid var(--line);border-radius:16px;margin:14px 0;touch-action:none;box-shadow:inset 0 0 25px rgba(0,0,0,.04)}.ss-model{font:800 34px var(--cn);color:var(--ink);letter-spacing:.15em}.ss-my-sentence{font-family:var(--cn);font-size:20px}.ss-bottom-actions{position:sticky;bottom:calc(12px + env(safe-area-inset-bottom));z-index:20;display:flex;justify-content:flex-end;gap:10px;margin-top:20px;padding:11px;border:1px solid color-mix(in srgb,var(--line) 82%,transparent);border-radius:17px;background:color-mix(in srgb,var(--card) 93%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 16px 44px rgba(0,0,0,.14)}.ss-bottom-actions .primary-btn{min-width:220px}
@media(max-width:700px){.ss-page{padding-bottom:128px}.ss-toolbar-top,.ss-word-top{gap:10px}.ss-progress-label{font-size:22px}.ss-word{font-size:60px}.ss-pinyin{font-size:21px}.ss-cn-sentence,.ss-cloze{font-size:21px}.ss-copy-grid{grid-template-columns:1fr}.ss-copy-input{text-align:left}.ss-bottom-actions{flex-direction:column}.ss-bottom-actions>*{width:100%}.ss-jump-row .ghost-btn{flex:1}.ss-jump-row label{width:100%;justify-content:space-between}.ss-jump-input{flex:1}}
@media(max-width:430px){.ss-word{font-size:54px}.ss-meaning b{font-size:20px}.ss-toolbar{padding:15px}.ss-mini-stats{justify-content:flex-end}.ss-canvas{min-height:210px;object-fit:contain}}

/* V3.1 — self-study only: Apple Pencil stability + sentence pinyin + smart word peek */
.ss-hand-card,.ss-canvas{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.ss-hand-card{overscroll-behavior:contain}
.ss-canvas{touch-action:none!important;cursor:crosshair;-webkit-tap-highlight-color:transparent}
body.ss-drawing-active,body.ss-drawing-active *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
.ss-example>span{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ss-tap-hint{font:600 11px/1.2 var(--thai);letter-spacing:0;color:var(--gold);opacity:.82}
.ss-cn-sentence{position:relative}
.ss-token{display:inline;border-radius:7px;padding:1px 2px;margin:0 -1px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .16s ease,color .16s ease;outline:none}
.ss-token:hover,.ss-token:focus-visible{background:color-mix(in srgb,var(--gold) 14%,transparent)}
.ss-token-target{background:rgba(190,153,87,.16)}
.ss-example-pinyin{font:600 15px/1.65 var(--thai);color:var(--gold);margin-top:5px;letter-spacing:.01em;opacity:.92}
.ss-word-popover{position:fixed;z-index:160;min-width:150px;max-width:min(300px,calc(100vw - 20px));padding:11px 14px;border:1px solid color-mix(in srgb,var(--gold) 42%,var(--line));border-radius:14px;background:color-mix(in srgb,var(--card) 97%,transparent);color:var(--text);box-shadow:0 16px 42px rgba(0,0,0,.18);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);opacity:0;transform:translateY(4px) scale(.98);transition:opacity .14s ease,transform .14s ease;pointer-events:none}
.ss-word-popover.show{opacity:1;transform:translateY(0) scale(1)}
.ss-word-popover:after{content:"";position:absolute;left:50%;bottom:-6px;width:11px;height:11px;background:inherit;border-right:1px solid color-mix(in srgb,var(--gold) 42%,var(--line));border-bottom:1px solid color-mix(in srgb,var(--gold) 42%,var(--line));transform:translateX(-50%) rotate(45deg)}
.ss-word-popover.below:after{top:-6px;bottom:auto;border:0;border-left:1px solid color-mix(in srgb,var(--gold) 42%,var(--line));border-top:1px solid color-mix(in srgb,var(--gold) 42%,var(--line))}
.ss-pop-word{font:800 25px/1.2 var(--cn);color:var(--ink)}
.ss-pop-pinyin{font:700 14px/1.4 var(--thai);color:var(--gold);margin-top:3px}
.ss-pop-meaning{font:600 14px/1.45 var(--thai);margin-top:6px;color:var(--text)}
.ss-pop-target{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;margin-top:9px;padding-top:8px;border-top:1px solid var(--line)}
.ss-pop-target small{grid-column:1/-1;color:var(--muted);font-size:10px}.ss-pop-target b{font:800 19px var(--cn);color:var(--ink)}.ss-pop-target span{align-self:center;color:var(--gold);font-weight:700}.ss-pop-target em{grid-column:1/-1;font-style:normal;font-size:12px;color:var(--muted)}
@media(max-width:700px){.ss-example-pinyin{font-size:14px}.ss-token{padding:2px 3px}.ss-word-popover{max-width:260px}}


/* V3.2 — requested-only patch: stable handwriting + compact music categories */
.music-dock{width:min(350px,calc(100vw - 24px));padding:13px 14px;background:color-mix(in srgb,#17352f 96%,transparent)}
.music-dock-head{align-items:flex-start;gap:12px}.music-dock-head>div{display:grid;gap:2px}.music-dock-head small{font:600 11px/1.3 var(--thai);opacity:.72}
.music-dock iframe,.music-player-hidden{position:absolute!important;left:-9999px!important;top:-9999px!important;width:1px!important;height:1px!important;opacity:.001!important;pointer-events:none!important}
.music-categories{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:10px 0}.music-cat,.music-control{border:1px solid rgba(238,228,207,.20);background:rgba(255,255,255,.055);color:#eee4cf;border-radius:10px;padding:8px 9px;font:700 12px var(--thai);cursor:pointer}.music-cat.active{background:#d6c6a2;color:#17352f;border-color:#d6c6a2}.music-controls{display:grid;grid-template-columns:1fr 1.15fr 1fr;gap:6px}.music-control.primary{background:#496c61;border-color:#6f9187}.music-volume{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:11px;opacity:.86}.music-volume input{flex:1;accent-color:#d6c6a2}.music-dock-meta{margin-top:8px}.music-dock.minimized{width:min(350px,calc(100vw - 24px))}.music-dock.minimized .music-categories,.music-dock.minimized .music-controls,.music-dock.minimized .music-volume,.music-dock.minimized .music-dock-meta{display:none}

.ss-hand-toggle{margin-top:8px}.ss-hand-area{margin-top:12px}.ss-draw-toolbar{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:8px}.ss-tool{border:1px solid var(--line);border-radius:999px;padding:8px 12px;background:var(--paper2);color:var(--text);font:700 12px var(--thai);cursor:pointer}.ss-tool.active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.ss-canvas.eraser-active{cursor:cell}.ss-draw-help{font-size:12px;color:var(--muted);margin-top:-4px}.ss-model{display:inline-block;margin-top:9px;padding:7px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper2)}
body.ss-drawing-active{overflow:hidden!important;overscroll-behavior:none!important;-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
body.ss-drawing-active .ss-page,body.ss-drawing-active .ss-page *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
.ss-canvas{touch-action:none!important;-ms-touch-action:none!important;-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
.ss-pop-meaning.loading{opacity:.62;font-weight:500}.ss-pop-meaning{min-height:1.4em}
@media(max-width:700px){.music-dock{left:10px;right:10px;width:auto;bottom:calc(10px + env(safe-area-inset-bottom))}.music-categories{grid-template-columns:repeat(2,1fr)}.ss-draw-toolbar{position:sticky;top:68px;z-index:4;padding:7px;border-radius:12px;background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(12px)}}


/* V3.2 — iPad Pencil hardening */
.ss-page.ss-hand-open,
.ss-page.ss-hand-open *:not(input):not(textarea){
  -webkit-user-select:none!important;
  user-select:none!important;
  -webkit-touch-callout:none!important;
}
html.ss-pencil-lock,html.ss-pencil-lock body{overscroll-behavior:none!important}
html.ss-pencil-lock body,html.ss-pencil-lock body *{-webkit-touch-callout:none!important}
.ss-hand-area{contain:layout paint style}
.ss-canvas{
  -webkit-user-drag:none!important;
  overscroll-behavior:contain!important;
}
.ss-tool{touch-action:manipulation}
.ss-word-popover .ss-pop-meaning{max-width:240px;line-height:1.45}

/* V3.3 music-only patch */
.music-head-actions{display:flex;gap:6px}
.mini-btn.danger{border-color:rgba(224,164,150,.35)}
.mini-btn.danger:hover{background:rgba(180,77,61,.20)}
.music-dock.minimized{
  width:190px!important;
  padding:9px 10px!important;
  right:14px!important;
  bottom:14px!important;
}
.music-dock.minimized .music-dock-head{margin:0;align-items:center}
.music-dock.minimized .music-dock-head small{display:none}
.music-dock.minimized .music-categories,
.music-dock.minimized .music-controls,
.music-dock.minimized .music-volume,
.music-dock.minimized .music-dock-meta,
.music-dock.minimized #stopMusicDock{display:none!important}
.music-dock.minimized #hideMusicDock{display:block}
@media(max-width:700px){
  .music-dock.minimized{
    left:auto!important;right:10px!important;width:178px!important;
    bottom:calc(10px + env(safe-area-inset-bottom))!important
  }
}

/* V3.5 — exact YouTube streams behind the existing music dock. */
#ytMusicPlayer,#ytMusicPlayer iframe{
  position:fixed!important;
  width:2px!important;height:2px!important;
  left:-120px!important;bottom:-120px!important;
  opacity:.001!important;
  pointer-events:none!important;
  border:0!important;
  z-index:-1!important;
}

/* V3.6 — Step 02/04 long Apple Pencil areas */
.ss-mini-draw-toolbar{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0 10px}
.ss-copy-hand-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:10px 0 14px}
.ss-copy-pad{min-width:0}.ss-copy-pad>span{display:block;font-size:12px;color:var(--muted);margin:0 0 5px 4px}
.ss-writing-canvas{
 display:block;width:100%;background:var(--paper2);border:1px solid var(--line);border-radius:13px;
 touch-action:none!important;-ms-touch-action:none!important;-webkit-user-select:none!important;user-select:none!important;
 -webkit-touch-callout:none!important;-webkit-user-drag:none!important;overscroll-behavior:contain!important;
 box-shadow:inset 0 0 18px rgba(0,0,0,.025)
}
.ss-copy-canvas{aspect-ratio:760/190;min-height:105px}
.ss-sentence-canvas{aspect-ratio:1200/340;min-height:220px;margin:10px 0 12px}
.ss-writing-canvas.eraser-active{cursor:cell}
html.ss-pencil-lock body,html.ss-pencil-lock body *{-webkit-touch-callout:none!important}
@media(max-width:820px){.ss-copy-hand-grid{grid-template-columns:1fr}.ss-copy-canvas{aspect-ratio:980/190;min-height:120px}}
@media(max-width:430px){.ss-sentence-canvas{min-height:250px}}
