*{box-sizing:border-box;margin:0}:root{--bg: #f0fdfa;--card: #ffffff;--ink: #134e4a;--muted: #4a635f;--primary: #0d9488;--primary-dark: #0f766e;--primary-soft: #ccfbf1;--secondary: #2dd4bf;--cta: #ea580c;--cta-dark: #c2410c;--cta-soft: #fff7ed;--line: rgba(19, 78, 74, .14);--shadow-clay: 0 10px 22px -10px rgba(13, 148, 136, .28), inset 0 -5px 10px rgba(13, 148, 136, .05), inset 0 2px 6px rgba(255, 255, 255, .9);--font-display: "Baloo 2", "Nunito", -apple-system, sans-serif;--font-body: "Nunito", -apple-system, "Segoe UI", Roboto, sans-serif}body{font-family:var(--font-body);font-size:16px;background:radial-gradient(1200px 500px at 85% -10%,rgba(45,212,191,.18),transparent 60%),radial-gradient(900px 420px at -10% 110%,rgba(234,88,12,.08),transparent 55%),var(--bg);background-attachment:fixed;color:var(--ink);line-height:1.6}h1,h2,h3{font-family:var(--font-display);line-height:1.25}h1{font-size:30px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}a{color:var(--primary-dark);font-weight:700;text-decoration-thickness:2px;text-underline-offset:3px}a:hover{color:var(--cta)}:focus-visible{outline:3px solid rgba(13,148,136,.55);outline-offset:2px;border-radius:8px}.app{max-width:1100px;margin:0 auto;padding:16px}.topbar{position:sticky;top:0;z-index:50;background:#f0fdfae0;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:2px solid var(--line);padding:10px 16px}.topbarInner{max-width:1100px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.brand{font-family:var(--font-display);font-weight:700;font-size:20px;color:var(--ink);text-decoration:none;display:inline-flex;align-items:baseline;gap:8px}.brand:hover{color:var(--primary-dark)}.brand .zh-title{color:var(--cta);font-size:16px;font-weight:600}.topnav{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.topnav .navBtn{min-height:38px;padding:6px 13px;font-size:14px}.profileMenu{position:relative}button.userChip{font-family:var(--font-body);font-weight:700;font-size:14px;color:var(--muted);border-radius:999px;padding:6px 13px;min-height:38px;box-shadow:0 3px 0 var(--line);gap:6px}button.userChip:active{transform:translateY(2px);box-shadow:0 1px 0 var(--line)}.userChip svg{color:var(--primary)}.userChip .chev{transition:transform .2s;color:var(--muted)}.userChip .chev.open{transform:rotate(180deg)}.dropdown{position:absolute;right:0;top:calc(100% + 8px);z-index:60;min-width:180px;background:var(--card);border:2px solid var(--line);border-radius:14px;box-shadow:var(--shadow-clay);padding:6px;display:flex;flex-direction:column;gap:2px}.dropdownName{display:flex;align-items:center;gap:7px;padding:8px 12px;font-size:13px;font-weight:700;color:var(--muted);border-bottom:1.5px solid var(--line);margin-bottom:4px}.dropdownName svg{color:var(--primary)}.dropdownItem{border:none;box-shadow:none;background:none;justify-content:flex-start;width:100%;border-radius:10px;min-height:42px;font-size:14px}.dropdownItem:hover{background:var(--primary-soft)}.dropdownItem:active{transform:none;box-shadow:none}.sectionTitle{font-size:20px}.introBar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.langToggle{font-family:var(--font-body)}.filterRow{display:flex;gap:8px;flex-wrap:wrap}.chip{border-radius:999px;min-height:38px;padding:5px 15px;font-size:14px;box-shadow:0 3px 0 var(--line)}.chip:active{transform:translateY(2px);box-shadow:0 1px 0 var(--line)}.chip.active{background:var(--ink);color:#fff;border-color:var(--ink);box-shadow:0 3px #0000004d}.chip.hsk1.active{background:#16a34a;border-color:#15803d;box-shadow:0 3px #15803d}.chip.hsk2.active{background:#0d9488;border-color:#0f766e;box-shadow:0 3px #0f766e}.chip.hsk3.active{background:#2563eb;border-color:#1e40af;box-shadow:0 3px #1e40af}.chip.hsk4.active{background:#7c3aed;border-color:#5b21b6;box-shadow:0 3px #5b21b6}.chip.hsk5.active{background:#ea580c;border-color:#c2410c;box-shadow:0 3px #c2410c}.chip.hsk6.active{background:#dc2626;border-color:#991b1b;box-shadow:0 3px #991b1b}.badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:700;font-family:var(--font-body);padding:3px 10px;border-radius:999px}.badge.hsk1{background:#dcfce7;color:#166534}.badge.hsk2{background:#ccfbf1;color:#115e59}.badge.hsk3{background:#dbeafe;color:#1e40af}.badge.hsk4{background:#ede9fe;color:#5b21b6}.badge.hsk5{background:#ffedd5;color:#9a3412}.badge.hsk6{background:#fee2e2;color:#991b1b}.badge.time{background:#e8f0ee;color:var(--muted)}.badge.done{background:var(--primary);color:#fff}button{cursor:pointer;font-family:var(--font-display);font-weight:600;font-size:15px;color:var(--ink);background:var(--card);border:2px solid var(--line);border-radius:14px;padding:9px 16px;min-height:44px;box-shadow:0 4px 0 var(--line);transition:background-color .2s,color .2s,border-color .2s,transform .15s ease,box-shadow .15s ease;display:inline-flex;align-items:center;justify-content:center;gap:7px}button:hover{background:var(--primary-soft);border-color:#0d948866}button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}button:disabled{opacity:.55;cursor:not-allowed;transform:none}button.primary{background:var(--cta);color:#fff;border-color:var(--cta-dark);box-shadow:0 4px 0 var(--cta-dark)}button.primary:hover{background:var(--cta-dark);border-color:var(--cta-dark)}button.primary:active{box-shadow:0 1px 0 var(--cta-dark)}button[aria-pressed=true]{background:var(--primary);color:#fff;border-color:var(--primary-dark);box-shadow:0 4px 0 var(--primary-dark)}.drop{max-width:660px;padding-top:44px;padding-bottom:44px;display:flex;flex-direction:column;gap:18px}.drop .zh-title{color:var(--cta);font-weight:600;margin-left:6px}.drop .tag{color:var(--muted);display:flex;align-items:center;gap:6px;flex-wrap:wrap}.drop .narrative{line-height:1.65;font-size:17px}.mission,.recap,.card{background:var(--card);border:2px solid var(--line);border-radius:20px;padding:18px 20px;box-shadow:var(--shadow-clay)}.mission h2,.recap h2{font-size:14px;color:var(--muted);margin-bottom:10px;text-transform:uppercase;letter-spacing:.06em}.mission ul,.recap ul{list-style:none;display:flex;flex-direction:column;gap:8px;padding:0}.mission li{display:flex;align-items:baseline;gap:8px}.mission li svg{flex:none;transform:translateY(2px);color:var(--cta)}.recap h2+ul{margin-bottom:14px}.howto{padding-left:0;display:flex;flex-direction:column;gap:10px;line-height:1.55;list-style:none;counter-reset:step}.howto li{counter-increment:step;display:flex;gap:10px;align-items:baseline}.howto li:before{content:counter(step);flex:none;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary-dark);border-radius:50%;font-family:var(--font-display);font-weight:700;font-size:14px;transform:translateY(5px)}.result-icon{color:var(--cta)}.result-icon.sad{color:var(--muted)}.gameShell{display:flex;flex-direction:column;height:100dvh;overflow:hidden}.gameShell .topbar{position:static;flex:none}.play{display:flex;flex-direction:column;align-items:center;gap:10px;flex:1;min-height:0;width:100%;padding:12px;overflow-y:auto}.left{display:flex;flex-direction:column;gap:10px;min-height:0;width:100%;max-width:1000px}.app.play .scene{width:min(100%,calc(62dvh * 16 / 9));align-self:center;flex:none}.hud{display:flex;align-items:center;gap:14px;background:var(--card);border:2px solid var(--line);border-radius:16px;padding:8px 12px;box-shadow:var(--shadow-clay)}.patience{flex:1;display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700}.patience .bar{flex:1;height:12px;min-width:48px;background:#d7ece8;border-radius:6px;overflow:hidden;box-shadow:inset 0 2px 3px #134e4a26}.patience .bar div{height:100%;transition:width .3s,background-color .3s;border-radius:6px}.patience .bar div.pHigh{background:#22c55e}.patience .bar div.pMid{background:#f59e0b}.patience .bar div.pLow{background:#dc2626;animation:pat-blink 1s ease-in-out infinite}@keyframes pat-blink{50%{opacity:.5}}.pHeart{flex:none}.patienceNum{font-variant-numeric:tabular-nums;font-weight:800;font-size:13px}.pHeart.pHigh,.patienceNum.pHigh{color:#15803d}.pHeart.pMid,.patienceNum.pMid{color:#b45309}.pHeart.pLow,.patienceNum.pLow{color:#dc2626}.timer{font-variant-numeric:tabular-nums;font-weight:700;display:inline-flex;align-items:center;gap:5px}.timer svg{color:var(--primary)}.scene{position:relative;aspect-ratio:16 / 9;border-radius:20px;overflow:hidden;border:2px solid var(--line);background:linear-gradient(160deg,#d9c8a9,#a9855c);box-shadow:var(--shadow-clay)}.scene img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.hotspot{position:absolute;border:2px dashed rgba(255,255,255,.8);border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.hotspot:hover,.hotspot:focus-visible{background:#ffffff38;z-index:2}.hotspotTag{font-size:12px;font-weight:700;background:#134e4acc;color:#fff;min-width:26px;height:26px;padding:6px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;gap:0;line-height:1;white-space:nowrap}.hotspotNum{font-size:13px;font-family:var(--font-display)}.hotspotLabel{display:none}.hotspot:hover .hotspotLabel,.hotspot:focus-visible .hotspotLabel{display:inline;margin-left:5px}.hotspot:hover .hotspotTag,.hotspot:focus-visible .hotspotTag{padding:6px 10px}.hotspot.done{border-style:solid;opacity:.55;cursor:default}.play .hotspot:not(.done){animation:hs-pulse 2s ease-in-out infinite}@keyframes hs-pulse{0%,to{border-color:#fffc;box-shadow:none}50%{border-color:#2dd4bf;box-shadow:0 0 14px #2dd4bf99}}.sceneTip{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:6px;background:var(--card);border:2px solid var(--line);border-radius:16px;padding:10px 16px;box-shadow:var(--shadow-clay);margin:0}.sceneTip svg{flex:none;color:var(--cta)}.sceneHint{position:absolute;left:8px;right:8px;bottom:8px;z-index:3;background:#134e4ae6;color:#fff;border-radius:12px;padding:8px 12px;font-size:14px;font-weight:600;line-height:1.45;animation:fab-hint-in .25s ease-out}.trayLabel{width:100%;font-size:12px;color:var(--muted);font-weight:700}.panelSec{display:flex;flex-direction:column;gap:8px;background:var(--card);border:2px solid var(--line);border-radius:16px;padding:12px 16px;box-shadow:var(--shadow-clay)}.secTitle{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:6px}.secTitle svg{color:var(--cta)}.objectives{list-style:none;display:flex;flex-direction:column;gap:5px;font-size:14px;padding:0}.objectives li{display:flex;align-items:center;gap:7px;font-weight:600}.objectives li svg{flex:none;color:var(--cta)}.objectives .done{color:var(--primary-dark);text-decoration:line-through}.objectives .done svg{color:var(--primary)}.hotspotLegend{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:6px 8px}.hotspotLegend li{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1.5px solid var(--line);border-radius:999px;padding:3px 12px 3px 4px;font-size:13px;font-weight:600}.hotspotLegend .legendNum{width:22px;height:22px;flex:none;display:inline-flex;align-items:center;justify-content:center;background:var(--ink);color:#fff;border-radius:50%;font-size:12px;font-weight:800;font-family:var(--font-display)}.hotspotLegend li.done{color:var(--muted);text-decoration:line-through}.hotspotLegend li.done .legendNum{background:var(--primary)}.finishBtn{background:var(--primary);color:#fff;border-color:var(--primary-dark);box-shadow:0 4px 0 var(--primary-dark);min-height:40px;font-size:14px}.finishBtn:hover{background:var(--primary-dark);border-color:var(--primary-dark)}.finishBtn:active{box-shadow:0 1px 0 var(--primary-dark)}.chatPanel{position:fixed;right:14px;bottom:14px;z-index:45;width:min(430px,calc(100vw - 28px));height:min(620px,calc(100dvh - 88px));display:flex;flex-direction:column;gap:8px;background:var(--bg);border:2px solid var(--line);border-radius:20px;padding:10px;box-shadow:0 6px 0 var(--line),0 24px 48px -12px #134e4a59}.chatHead{display:flex;align-items:center;gap:8px;padding:0 4px}.chatHead .zh-title{color:var(--cta);font-weight:600;font-size:14px}.chatHead .chatClose{margin-left:auto}.chatDock{position:fixed;right:14px;bottom:14px;z-index:45;display:flex;flex-direction:column;align-items:flex-end;gap:10px}.chatFab{position:relative;width:62px;height:62px;min-height:0;padding:0;border-radius:50%;background:var(--cta);color:#fff;border-color:var(--cta-dark);box-shadow:0 5px 0 var(--cta-dark),var(--shadow-clay)}.chatFab:hover{background:var(--cta-dark);border-color:var(--cta-dark)}.fabBadge{position:absolute;top:-4px;right:-4px;min-width:22px;height:22px;padding:0 5px;background:#dc2626;color:#fff;border-radius:999px;border:2px solid #fff;font-size:12px;font-weight:800;line-height:1;display:inline-flex;align-items:center;justify-content:center}.fabHint{background:var(--ink);color:#fff;border-radius:12px 12px 4px;padding:7px 12px;font-size:13px;font-weight:700;max-width:min(260px,calc(100vw - 100px));animation:fab-hint-in .3s ease-out;box-shadow:0 8px 20px -8px #134e4a80}@keyframes fab-hint-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.chatPreview{display:flex;flex-direction:column;align-items:flex-start;gap:2px;max-width:min(320px,calc(100vw - 100px));text-align:left;border-radius:16px 16px 6px;padding:10px 14px;min-height:0;font-family:var(--font-body)}.chatPreview .zh{font-size:17px;font-weight:700}.chatPreview .vi{font-size:13px;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.chat{flex:1;overflow-y:auto;background:var(--card);border:2px solid var(--line);border-radius:20px;padding:14px;display:flex;flex-direction:column;gap:10px;box-shadow:var(--shadow-clay)}.msg{max-width:92%;padding:9px 14px;border-radius:16px;line-height:1.5}.msg.npc{background:#eef7f5;border:1.5px solid rgba(13,148,136,.15);align-self:flex-start;border-bottom-left-radius:6px}.msg.npc .zh{font-size:19px}.msg.player{background:var(--primary);color:#fff;align-self:flex-end;font-size:17px;border:1.5px solid var(--primary-dark);border-bottom-right-radius:6px}.msg.system{background:var(--cta-soft);border:1.5px dashed rgba(194,65,12,.35);color:#9a3412;align-self:center;font-size:13px;max-width:95%;border-radius:12px}.msg .vi{font-size:12px;color:var(--muted);margin-top:2px}.speak{border:none;background:none;padding:0 4px;box-shadow:none;min-height:0;display:inline-flex;align-items:center;vertical-align:middle;color:var(--primary)}.speak:hover{color:var(--cta);background:none}.speak:active{transform:none}.iconBtn{padding:6px 10px}.py{font-size:12px;color:var(--cta-dark);font-weight:700;visibility:hidden}.show-py .py,.msg.npc:hover .py,.block:hover .py{visibility:visible}.tray{display:flex;flex-wrap:wrap;gap:7px}.block{display:flex;flex-direction:column;align-items:center;padding:6px 12px;border-radius:12px;gap:0;min-height:48px}.block .hanzi{font-size:20px;font-family:var(--font-body);font-weight:600}.inputRow{display:flex;gap:7px}.inputRow input,.field input{flex:1;min-width:0;padding:9px 14px;font-size:16px;font-family:var(--font-body);color:var(--ink);border:2px solid var(--line);border-radius:14px;background:var(--card);box-shadow:inset 0 2px 4px #134e4a14}.inputRow input::placeholder,.field input::placeholder{color:#7d938f}.inputRow input:focus,.field input:focus{outline:none;border-color:var(--primary);box-shadow:inset 0 2px 4px #134e4a14,0 0 0 3px #0d948833}.login{max-width:480px;padding-top:9vh}.login h1{justify-content:center}.loginCard{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-weight:700;font-size:14px;color:var(--muted)}.field label em{font-style:normal;font-weight:400}.field input{flex:none;width:100%}.loginCard button.primary{width:100%;margin-top:4px}.actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.levelBtn{text-align:left;padding:14px 18px;font-size:16px;flex-direction:row;align-items:center;justify-content:flex-start;gap:14px;border-radius:16px;box-shadow:0 4px 0 var(--line),var(--shadow-clay)}.levelThumb{width:96px;aspect-ratio:16 / 10;object-fit:cover;flex:none;border-radius:12px;border:2px solid var(--line)}.levelBody{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0;flex:1}.levelTitle{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.levelTitle .zh-title{color:var(--cta);font-weight:600}.levelTitle svg{color:var(--muted);flex:none}.badges{display:flex;gap:6px;flex-wrap:wrap}.portrait{width:34px;height:34px;border-radius:50%;object-fit:cover;border:2px solid var(--primary-soft)}.portrait-fallback{color:var(--primary);display:inline-flex}.linkBtn{background:none;border:none;box-shadow:none;min-height:0;padding:2px 4px;color:var(--primary-dark);font-weight:700;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.linkBtn:hover{background:none;color:var(--cta)}.linkBtn:active{transform:none}a.navBtn{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-display);font-weight:600;font-size:15px;color:var(--ink);text-decoration:none;background:var(--card);border:2px solid var(--line);border-radius:14px;padding:9px 16px;min-height:44px;box-shadow:0 4px 0 var(--line);transition:background-color .2s,border-color .2s,transform .15s ease,box-shadow .15s ease}a.navBtn:hover{background:var(--primary-soft);border-color:#0d948866;color:var(--ink)}a.navBtn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}a.navBtn svg{color:var(--primary)}.admin{display:flex;flex-direction:column;gap:16px;max-width:780px;padding-top:24px;padding-bottom:44px}.adminHead{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}.card{display:flex;flex-direction:column;gap:10px}.cardHead{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:4px}.cardHead h2{font-size:18px}.cardHead .zh-title{color:var(--cta);font-weight:600}.taskRow{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px;flex-wrap:wrap}.taskRow>span{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.taskRow code{background:var(--primary-soft);color:var(--primary-dark);padding:1px 6px;border-radius:6px;font-size:12px}.taskRow em{color:var(--muted);font-style:normal;font-size:12px}.thumbPreview{width:64px;aspect-ratio:16 / 10;object-fit:cover;border-radius:8px;border:2px solid var(--line)}.taskRow.check{justify-content:flex-start;cursor:pointer}.taskRow input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer}details.taskRow{display:block}details.taskRow summary{cursor:pointer;display:flex;align-items:center;gap:6px;flex-wrap:wrap}details.taskRow ul{list-style:none;margin-top:8px;display:flex;flex-direction:column;gap:6px;padding:0}.ok{color:var(--primary)}.bad{color:#dc2626}.pending{color:var(--muted)}.loot{margin-top:8px;font-size:12px;color:#9a3412;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.lootChip{padding:2px 10px;font-size:15px;min-height:32px;border:2px dashed var(--cta);background:var(--cta-soft);color:#9a3412;border-radius:10px;box-shadow:none;font-family:var(--font-body);font-weight:600}.lootChip:hover{background:var(--cta);border-style:solid;color:#fff}.lootChip:active{transform:translateY(1px)}.nbGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}button.nbCard{background:var(--card);border-radius:16px;padding:14px;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:2px;box-shadow:0 4px 0 var(--line),var(--shadow-clay);font-family:var(--font-body);font-weight:400;text-align:left;min-height:0}.nbHanzi{font-size:26px;line-height:1.3}.nbPinyin{color:var(--cta-dark);font-size:13px;font-weight:700}.nbMeaning{font-size:13px}.nbUse{font-size:11px;color:var(--muted);margin-top:4px}.checkpoint{border:2px solid var(--cta);display:flex;flex-direction:column;gap:12px}.checkpoint .tag{display:flex;align-items:center;gap:6px;color:var(--cta-dark);font-weight:700}.cpRight{color:#15803d;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.cpWrong{color:#dc2626;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.adminPage{padding:20px 28px 44px;display:flex;flex-direction:column;gap:16px}.adminGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(620px,1fr));gap:16px;align-items:start}@media(max-width:700px){.adminGrid{grid-template-columns:1fr}}.assetRow{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}.assetBox{display:flex;flex-direction:column;gap:6px}.assetLabel{display:inline-flex;align-items:center;gap:5px;font-size:13px;font-weight:700;color:var(--muted)}.assetHint{font-size:12px;color:var(--muted)}.assetThumb{width:280px;aspect-ratio:16 / 9;object-fit:cover;border:2px solid var(--line);border-radius:12px}.assetEmpty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;border-style:dashed;background:#f6fbfa;color:var(--muted);font-size:13px}.assetActions{display:inline-flex;gap:6px}button.iconOnly{padding:6px 10px;min-height:36px}.taskCol{flex:1;min-width:260px;display:flex;flex-direction:column;gap:10px}.audioSection{display:flex;flex-direction:column;gap:6px}.audioToggle{background:none;border:none;box-shadow:none;padding:0;min-height:0;justify-content:flex-start;font-family:var(--font-body);font-size:13px;font-weight:700;color:var(--muted);gap:5px}.audioToggle:hover{background:none;color:var(--primary-dark)}.audioToggle:active{transform:none;box-shadow:none}.audioToggle .chev{transition:transform .2s}.audioToggle .chev.open{transform:rotate(180deg)}.audioList{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px;max-height:240px;overflow-y:auto}.audioList li{display:flex;justify-content:space-between;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:10px;padding:6px 10px}.audioText{display:flex;flex-direction:column;min-width:0}.audioZh{font-size:16px}.audioPy{font-size:12px;color:var(--cta-dark);font-weight:700}.editorBody{display:flex;flex-direction:column;gap:10px}.editorTitle{font-size:16px;display:flex;align-items:center;gap:7px}.modal.modalWide{max-width:960px}.modalOverlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#134e4a73;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:16px}.modal{background:var(--card);border:2px solid var(--line);border-radius:20px;box-shadow:var(--shadow-clay);padding:22px;max-width:420px;width:100%;display:flex;flex-direction:column;gap:12px}.modal h2{font-size:20px}.modal .actions{justify-content:flex-end;margin-top:4px}.scene.editor{touch-action:none;-webkit-user-select:none;user-select:none}.hotspot.edit{cursor:move}.hotspot.edit .handle{position:absolute;right:-7px;bottom:-7px;width:14px;height:14px;background:#fff;border:2px solid var(--cta);border-radius:3px;cursor:nwse-resize}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(max-width:520px){.topbar{padding:8px 12px}.brand{font-size:17px}.brand .zh-title{font-size:14px}.topnav{gap:8px}.topnav .btnLabel{display:none}.topnav .navBtn,button.userChip{padding:6px 10px}.levelBtn{gap:10px;padding:12px 14px}.levelThumb{width:76px}}@media(max-width:1024px){h1{font-size:24px}.app.play{padding:8px;gap:6px}.left{flex:none;gap:6px}.chat{min-height:0;padding:10px}.chatPanel{left:8px;right:8px;bottom:8px;width:auto;height:min(76dvh,600px)}.chatDock{right:12px;bottom:12px}.hud{font-size:13px;padding:6px 10px;gap:10px}.app.play .npcName{display:none}.app.play .scene{width:100%}.sceneTip{font-size:11px}.app.play .objectives{font-size:13px}.msg{padding:7px 11px}.msg.npc .zh{font-size:16px}.tray{max-height:88px;overflow-y:auto;flex:none}.block{padding:4px 10px;min-height:42px}.block .hanzi{font-size:17px}.inputRow{flex:none}.inputRow button{padding:9px 12px}}.chatBackdrop{display:none}@media(max-width:640px){.chatBackdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:44;background:#134e4a40;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}.chatPanel{left:10px;right:10px;bottom:10px;top:auto;width:auto;height:calc(100dvh - 128px)}.app.play .hud{position:relative;z-index:46}.chatPanel .tray{max-height:min(38dvh,300px)}}.chapterSec{display:flex;flex-direction:column;gap:10px;margin-top:10px}.chapterHead{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}.chapterTitle{font-size:19px;display:flex;align-items:center;gap:9px}.chapterTitle .zh-title{color:var(--cta);font-size:15px;font-weight:600}.chapterNum{flex:none;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:var(--primary);color:#fff;border-radius:50%;font-size:15px;font-weight:700;box-shadow:0 3px 0 var(--primary-dark)}.chapterDesc{font-size:14px;color:var(--muted);margin-top:-4px}.comingSoon{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--muted);background:var(--card);border:2px dashed var(--line);border-radius:12px;padding:8px 14px;align-self:flex-start}.brand{align-items:center}.brandLogo{width:38px;height:38px;object-fit:contain}.loginLogo{width:110px;height:110px;align-self:center;object-fit:contain;filter:drop-shadow(0 8px 14px rgba(13,148,136,.3))}.home{max-width:980px;margin:0 auto;padding:28px 16px 44px;display:flex;flex-direction:column;gap:18px}.home .zh-title{color:var(--cta);font-weight:600}.journey{position:relative;display:flex;flex-direction:column;gap:20px}.journey:before{content:"";position:absolute;left:36px;top:24px;bottom:24px;border-left:3px dashed rgba(13,148,136,.3);z-index:0}.chapterCard{position:relative;z-index:1;background:var(--card);border:2px solid var(--line);border-radius:20px;padding:18px 20px;box-shadow:var(--shadow-clay);display:flex;flex-direction:column;gap:14px}.chapterCard.soon{background:#ffffff8c;border-style:dashed;box-shadow:none}.chapterCard.allDone{border-color:#16a34a;background:#f4fdf6;box-shadow:0 10px 22px -10px #16a34a4d,inset 0 -5px 10px #16a34a0d,inset 0 2px 6px #ffffffe6}.chapterCard .chapterHead{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}.chapterCard .chapterNum{width:34px;height:34px;font-size:16px;margin-top:2px;flex:none}.chapterCard.allDone .chapterNum{background:#16a34a;box-shadow:0 3px #15803d}.chapterCard.soon .chapterNum{background:var(--muted);box-shadow:0 3px #00000040}.chapterMeta{flex:1;min-width:220px}.chapterCard .chapterDesc{margin-top:2px}.chapterProg{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.progLabel{font-size:13px;font-weight:700;color:var(--muted)}.progBar{width:130px;height:10px;background:#d7ece8;border-radius:5px;overflow:hidden;box-shadow:inset 0 2px 3px #134e4a26}.progBar div{height:100%;background:var(--primary);border-radius:5px;transition:width .3s}.chapterCard.allDone .progBar div{background:#16a34a}.levelGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:12px}.levelCard{padding:0;overflow:hidden;text-align:left;display:flex;flex-direction:column;align-items:stretch;gap:0;border-radius:16px}.levelCard:hover:not(:disabled){background:var(--card);border-color:var(--primary)}.levelCard.locked{opacity:.6}.levelCard.next{border-color:var(--cta);box-shadow:0 4px 0 var(--cta-dark)}.levelCard.next:active{box-shadow:0 1px 0 var(--cta-dark)}.thumbWrap{position:relative;aspect-ratio:16 / 9;display:block;background:linear-gradient(150deg,var(--primary-soft),#a7dcd4)}.thumbWrap img{width:100%;height:100%;object-fit:cover;display:block}.thumbPh{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:26px;font-weight:700;color:var(--primary-dark);opacity:.6}.lockOverlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#f0fdfa8c;color:var(--muted)}.nextTag{position:absolute;left:8px;bottom:8px;background:var(--cta);color:#fff;font-family:var(--font-display);font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;box-shadow:0 2px 0 var(--cta-dark)}.doneTag{position:absolute;right:8px;top:8px;width:24px;height:24px;border-radius:50%;background:#16a34a;color:#fff;display:flex;align-items:center;justify-content:center}.levelCard .levelBody{display:flex;flex-direction:column;gap:7px;padding:10px 12px 12px}.levelCard .levelTitle{font-size:15px;line-height:1.35;display:block}.levelCard .levelTitle .zh-title{font-size:13px}@media(max-width:640px){.journey:before{display:none}.chapterProg{align-items:flex-start}.progBar{width:110px}.levelGrid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}}
