:root{--ink: #0b1026;--paper: rgba(13, 18, 40, .86);--paper-lite: rgba(22, 28, 58, .72);--gold: #e8c886;--gold-hi: #ffe9b0;--gold-dim: #a98f5c;--cyan: #7fe0ff;--rose: #ff9db8;--text: #f4edda;--text-dim: #b9b29b;--font-title: "Ma Shan Zheng", "Kaiti SC", "STKaiti", "KaiTi", serif;--font-body: "Noto Serif SC", "Songti SC", "SimSun", serif;--font-accent: "ZCOOL XiaoWei", "Kaiti SC", "STKaiti", serif}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{width:100%;height:100%;overflow:hidden;background:var(--ink);font-family:var(--font-body);color:var(--text);user-select:none;-webkit-user-select:none;touch-action:none}#app{position:fixed;inset:0}#app canvas{display:block;width:100%;height:100%}#ui{position:fixed;inset:0;pointer-events:none;z-index:10}#ui>*{pointer-events:none}#boot{position:fixed;inset:0;z-index:100;background:radial-gradient(ellipse at 50% 40%,#1a2350,#0b1026 70%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;transition:opacity .6s ease}#boot.hidden{opacity:0;pointer-events:none}.boot-mark{position:relative;width:90px;height:90px}.boot-ring{position:absolute;inset:0;border-radius:50%;border:2px solid rgba(232,200,134,.25);border-top-color:var(--gold);animation:spin 1.1s linear infinite}.boot-glyph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-title);font-size:40px;color:var(--gold)}.boot-text{color:var(--text-dim);letter-spacing:.3em;font-size:14px}@keyframes spin{to{transform:rotate(360deg)}}.screen{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;opacity:0;visibility:hidden;transform:scale(1.02);transition:opacity .45s ease,transform .45s ease,visibility .45s}.screen.active{opacity:1;visibility:visible;transform:none;pointer-events:auto}.screen.active>*{pointer-events:auto}#ui>#splash.active{pointer-events:auto}.vignette-panel{background:var(--paper);border:1px solid rgba(232,200,134,.35);border-radius:18px;box-shadow:0 18px 60px #0000008c,inset 0 0 40px #7fe0ff0a;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}#splash{cursor:pointer}.splash-title{font-family:var(--font-title);font-size:clamp(56px,13vw,128px);letter-spacing:.08em;background:linear-gradient(180deg,#fff6dd 0%,var(--gold) 55%,#c89a4e 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 4px 26px rgba(232,200,134,.45));animation:titleFloat 5s ease-in-out infinite}@keyframes titleFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.splash-sub{margin-top:6px;font-family:var(--font-accent);font-size:clamp(18px,4vw,30px);color:var(--cyan);letter-spacing:.55em;text-indent:.55em;text-shadow:0 0 18px rgba(127,224,255,.6)}.splash-tag{margin-top:18px;color:var(--text-dim);font-size:13px;letter-spacing:.25em}.splash-cta{margin-top:8vh;font-family:var(--font-accent);font-size:20px;letter-spacing:.4em;text-indent:.4em;color:var(--gold-hi);padding:12px 34px;border:1px solid rgba(232,200,134,.55);border-radius:40px;animation:ctaPulse 2s ease-in-out infinite}@keyframes ctaPulse{0%,to{opacity:.65;box-shadow:0 0 #e8c88600}50%{opacity:1;box-shadow:0 0 26px #e8c88659}}.menu-title{font-family:var(--font-title);font-size:clamp(44px,9vw,84px);color:var(--gold-hi);text-shadow:0 4px 30px rgba(232,200,134,.4);margin-bottom:6px}.menu-sub{color:var(--cyan);font-family:var(--font-accent);letter-spacing:.5em;text-indent:.5em;margin-bottom:7vh}.menu-buttons{display:flex;flex-direction:column;gap:16px;width:min(320px,78vw)}.btn{font-family:var(--font-accent);font-size:19px;letter-spacing:.35em;text-indent:.35em;color:var(--text);background:var(--paper-lite);border:1px solid rgba(232,200,134,.4);border-radius:14px;padding:14px 22px;cursor:pointer;transition:all .22s ease;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.btn:hover{border-color:var(--gold-hi);color:var(--gold-hi);box-shadow:0 0 22px #e8c88640;transform:translateY(-2px)}.btn:active{transform:translateY(0) scale(.97)}.btn-primary{background:linear-gradient(135deg,#e8c886eb,#c89a4eeb);color:#241a08;font-weight:600;border-color:transparent}.btn-primary:hover{color:#241a08;box-shadow:0 0 30px #e8c88680}.btn-ghost{background:transparent;border-color:#f4edda40}.menu-credit{position:absolute;bottom:3.5vh;color:var(--text-dim);font-size:12px;letter-spacing:.2em}#levels{justify-content:flex-start}.levels-head{margin-top:max(4vh,env(safe-area-inset-top));display:flex;align-items:center;gap:18px;width:min(520px,92vw)}.levels-title{font-family:var(--font-title);font-size:34px;color:var(--gold-hi);flex:1;text-align:center}.icon-btn{width:44px;height:44px;border-radius:50%;border:1px solid rgba(232,200,134,.4);background:var(--paper-lite);color:var(--gold);font-size:19px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;font-family:var(--font-body)}.icon-btn:hover{border-color:var(--gold-hi);box-shadow:0 0 16px #e8c8864d}.path-wrap{position:relative;width:min(520px,92vw);flex:1;margin:10px 0 2vh;overflow-y:auto;overflow-x:hidden;mask-image:linear-gradient(180deg,transparent,#000 4%,#000 96%,transparent);-webkit-mask-image:linear-gradient(180deg,transparent,#000 4%,#000 96%,transparent)}.path-inner{position:relative;width:100%}.path-svg{position:absolute;inset:0;width:100%;height:100%}.path-svg path{fill:none;stroke:#e8c88666;stroke-width:3;stroke-dasharray:2 12;stroke-linecap:round}.lvl-node{position:absolute;width:92px;height:92px;margin:-46px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(circle at 32% 28%,#465aa0f2,#141c42f2);border:2px solid rgba(232,200,134,.55);box-shadow:0 8px 26px #00000080,0 0 18px #7fe0ff1f;cursor:pointer;transition:transform .2s,box-shadow .2s}.lvl-node:hover{transform:scale(1.08);box-shadow:0 10px 30px #0000008c,0 0 26px #e8c88666}.lvl-node.locked{filter:grayscale(.9) brightness(.55);cursor:not-allowed}.lvl-node .n{font-family:var(--font-title);font-size:30px;color:var(--gold-hi);line-height:1}.lvl-node .nm{font-size:11px;color:var(--text-dim);margin-top:2px;white-space:nowrap}.lvl-node .stars{font-size:11px;letter-spacing:2px;color:var(--gold);margin-top:1px;height:13px}.lvl-node .stars .off{opacity:.25}.lvl-node.current{animation:nodePulse 2.2s ease-in-out infinite}.lvl-node.current:after{content:"当前";position:absolute;top:-12px;left:50%;transform:translate(-50%);background:var(--gold);color:#241a08;font-size:10px;font-weight:700;border-radius:9px;padding:1px 8px;letter-spacing:.1em;white-space:nowrap}.lvl-node.done{border-color:#7fe0ff8c}.lvl-node.done .n{color:var(--cyan)}.lvl-node.s3{border-color:var(--gold-hi);box-shadow:0 8px 26px #00000080,0 0 24px #ffe9b066}.lvl-node.s3 .n{color:var(--gold-hi)}@keyframes nodePulse{0%,to{box-shadow:0 8px 26px #00000080,0 0 14px #e8c88640}50%{box-shadow:0 8px 26px #00000080,0 0 34px #e8c88699}}#codex{justify-content:flex-start}.codex-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;width:min(680px,92vw);overflow-y:auto;padding:6px 2px 30px;flex:1;margin-bottom:2vh}.codex-card{background:var(--paper-lite);border:1px solid rgba(232,200,134,.3);border-radius:14px;padding:12px 10px 14px;display:flex;flex-direction:column;align-items:center;text-align:center;transition:transform .2s,box-shadow .2s}.codex-card:hover{transform:translateY(-4px);box-shadow:0 12px 30px #0006,0 0 20px #7fe0ff1f}.codex-card img{width:92px;height:92px;object-fit:contain;filter:drop-shadow(0 6px 14px rgba(0,0,0,.5))}.codex-card .cn{font-family:var(--font-accent);font-size:18px;color:var(--gold-hi);margin-top:6px}.codex-card .cnt{font-size:11px;color:var(--cyan);margin:2px 0 6px}.codex-card .lore{font-size:11.5px;line-height:1.65;color:var(--text-dim)}.codex-card.special-card .cn{color:var(--cyan)}.codex-card.locked-card img{filter:grayscale(1) brightness(.4) drop-shadow(0 6px 14px rgba(0,0,0,.5));opacity:.85}.codex-card.locked-card .cn,.codex-card.locked-card .cnt{color:var(--text-dim)}.codex-card.locked-card{border-style:dashed}.codex-sect{grid-column:1 / -1;font-family:var(--font-title);font-size:22px;color:var(--gold);margin-top:8px;text-align:center;letter-spacing:.3em}#hud{position:absolute;inset:0;display:none}#hud.active{display:block}#hud>*{pointer-events:auto}.hud-top{position:absolute;top:max(10px,env(safe-area-inset-top));left:0;right:0;display:flex;align-items:flex-start;justify-content:center;gap:12px;padding:0 12px}.hud-moves{min-width:86px;text-align:center;background:var(--paper);border:1px solid rgba(232,200,134,.4);border-radius:16px;padding:8px 16px 10px;box-shadow:0 8px 24px #0006}.hud-moves .val{font-family:var(--font-title);font-size:34px;line-height:1;color:var(--gold-hi)}.hud-moves .lbl{font-size:11px;color:var(--text-dim);letter-spacing:.3em;text-indent:.3em}.hud-moves.low .val{color:var(--rose);animation:lowPulse 1s ease-in-out infinite}@keyframes lowPulse{0%,to{opacity:1}50%{opacity:.45}}.hud-score{background:var(--paper);border:1px solid rgba(232,200,134,.3);border-radius:16px;padding:8px 16px 10px;min-width:108px;text-align:center;box-shadow:0 8px 24px #0006}.hud-score .val{font-family:var(--font-accent);font-size:24px;line-height:1.3;color:var(--cyan)}.hud-score .lbl{font-size:11px;color:var(--text-dim);letter-spacing:.3em;text-indent:.3em}.hud-score.tick{animation:scoreTick .5s ease}@keyframes scoreTick{25%{transform:scale(1.07);box-shadow:0 8px 24px #0006,0 0 22px #7fe0ff66}}.hud-objectives{position:absolute;top:calc(max(10px,env(safe-area-inset-top)) + 74px);left:50%;transform:translate(-50%);display:flex;gap:8px;flex-wrap:wrap;justify-content:center;max-width:94vw}.obj-chip{display:flex;align-items:center;gap:7px;background:var(--paper-lite);border:1px solid rgba(232,200,134,.28);border-radius:24px;padding:5px 13px 5px 7px;font-size:13px;transition:all .3s}.obj-chip .dot{width:20px;height:20px;border-radius:50%;box-shadow:0 0 10px currentColor;flex:none}.obj-chip .txt b{color:var(--gold-hi);font-weight:600}.obj-chip.done{border-color:#7fe0ffb3;box-shadow:0 0 14px #7fe0ff40;animation:objDone .8s cubic-bezier(.22,1.4,.36,1)}.obj-chip.done .txt{color:var(--cyan)}@keyframes objDone{0%{transform:scale(1)}35%{transform:scale(1.18);box-shadow:0 0 34px #7fe0ffd9}to{transform:scale(1)}}.obj-chip.bump{animation:chipBump .35s ease}@keyframes chipBump{30%{transform:scale(1.14)}}.hud-corner-tl{position:absolute;top:max(10px,env(safe-area-inset-top));left:12px;display:flex;gap:8px}.hud-corner-tr{position:absolute;top:max(10px,env(safe-area-inset-top));right:12px;display:flex;gap:8px;align-items:center}.wind-compass{display:none;width:58px;height:58px;border-radius:50%;background:var(--paper);border:1px solid rgba(127,224,255,.45);position:relative;box-shadow:0 0 18px #7fe0ff33;align-items:center;justify-content:center}.wind-compass.on{display:flex}.wind-compass .arrow{font-size:22px;color:var(--cyan);transition:transform .6s cubic-bezier(.34,1.56,.64,1)}.wind-compass .cnt{position:absolute;bottom:-7px;left:50%;transform:translate(-50%);background:var(--paper);border:1px solid rgba(127,224,255,.4);border-radius:10px;font-size:10px;padding:0 7px;color:var(--cyan);white-space:nowrap}.wind-compass .next{position:absolute;top:3px;right:3px;font-size:11px;color:var(--gold);opacity:.75;transition:transform .5s cubic-bezier(.34,1.56,.64,1);line-height:1}.wind-compass.blow{animation:windBlow .7s ease}@keyframes windBlow{30%{box-shadow:0 0 34px #7fe0ffcc}}.wind-compass.imminent{border-color:#ffc878e6;animation:windWarn .8s ease-in-out infinite}.wind-compass.imminent .cnt{color:var(--gold-hi);border-color:#e8c88699}@keyframes windWarn{0%,to{box-shadow:0 0 10px #ffbe6440}50%{box-shadow:0 0 30px #ffbe64bf}}.hud-bottom{position:absolute;bottom:max(14px,env(safe-area-inset-bottom));left:0;right:0;display:flex;justify-content:center;gap:14px}.pow-btn{position:relative;width:62px;height:62px;border-radius:18px;background:var(--paper);border:1px solid rgba(232,200,134,.45);color:var(--gold-hi);font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;box-shadow:0 8px 22px #0006}.pow-btn .cnt{position:absolute;top:-6px;right:-6px;background:var(--gold);color:#241a08;font-size:11px;font-weight:700;border-radius:10px;padding:1px 6px}.pow-btn .pl{position:absolute;bottom:-16px;font-size:10px;color:var(--text-dim);letter-spacing:.1em;white-space:nowrap}.pow-btn:hover{border-color:var(--gold-hi);box-shadow:0 0 20px #e8c88659}.pow-btn.armed{border-color:var(--rose);box-shadow:0 0 24px #ff9db899;animation:armedPulse .9s ease-in-out infinite}@keyframes armedPulse{50%{transform:scale(1.08)}}.pow-btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}#fxlayer{position:absolute;inset:0;overflow:hidden;pointer-events:none!important}#fxlayer>*{pointer-events:none!important}.score-pop{position:absolute;transform:translate(-50%,-50%);font-family:var(--font-accent);font-weight:700;color:var(--gold-hi);text-shadow:0 0 12px rgba(232,200,134,.8),0 2px 4px rgba(0,0,0,.6);animation:popRise .9s ease-out forwards;white-space:nowrap}@keyframes popRise{0%{opacity:0;transform:translate(-50%,-30%) scale(.6)}18%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}to{opacity:0;transform:translate(-50%,-160%) scale(1)}}.combo-banner{position:absolute;left:50%;top:30%;transform:translate(-50%,-50%);font-family:var(--font-title);font-size:clamp(38px,8vw,72px);color:var(--gold-hi);text-shadow:0 0 30px rgba(232,200,134,.9),0 4px 10px rgba(0,0,0,.6);animation:bannerIn 1.15s cubic-bezier(.22,1.4,.36,1) forwards;white-space:nowrap;padding:.08em .55em}.combo-banner:before{content:"";position:absolute;inset:-6% -4%;z-index:-1;background:radial-gradient(ellipse 55% 46% at 30% 52%,rgba(12,16,40,.62),transparent 70%),radial-gradient(ellipse 60% 40% at 68% 46%,rgba(12,16,40,.52),transparent 72%);filter:blur(2px);transform:rotate(-2deg)}.combo-banner:after{content:"";position:absolute;left:8%;right:8%;bottom:.34em;height:3px;z-index:-1;background:linear-gradient(90deg,transparent,var(--gold) 22%,var(--gold-hi) 55%,transparent);border-radius:3px;transform-origin:left center;animation:brushSweep .6s cubic-bezier(.3,1,.4,1) .12s both}@keyframes brushSweep{0%{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:.95}}.combo-banner small{display:block;text-align:center;font-size:.34em;color:var(--cyan);letter-spacing:.5em;text-indent:.5em}@keyframes bannerIn{0%{opacity:0;transform:translate(-50%,-50%) scale(.4) rotate(-4deg)}22%{opacity:1;transform:translate(-50%,-50%) scale(1.08) rotate(1deg)}34%{transform:translate(-50%,-50%) scale(1)}78%{opacity:1}to{opacity:0;transform:translate(-50%,-66%) scale(1.02)}}.mascot-pop{position:absolute;bottom:8vh;width:clamp(120px,22vw,190px);animation:mascotIn 1.9s cubic-bezier(.22,1.3,.36,1) forwards;filter:drop-shadow(0 10px 24px rgba(0,0,0,.5))}.mascot-pop.left{left:2vw}.mascot-pop.right{right:2vw;transform:scaleX(-1)}.mascot-pop img{width:100%}.mascot-pop .say{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:var(--paper);border:1px solid rgba(232,200,134,.5);border-radius:20px;padding:5px 14px;font-family:var(--font-accent);font-size:15px;color:var(--gold-hi);white-space:nowrap}.mascot-pop.right .say{transform:translate(-50%) scaleX(-1)}@keyframes mascotIn{0%{opacity:0;transform:translateY(120%)}16%{opacity:1;transform:translateY(0)}24%{transform:translateY(-4%)}32%{transform:translateY(0)}80%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(120%)}}.mascot-pop.right{animation-name:mascotInR}@keyframes mascotInR{0%{opacity:0;transform:scaleX(-1) translateY(120%)}16%{opacity:1;transform:scaleX(-1) translateY(0)}24%{transform:scaleX(-1) translateY(-4%)}32%{transform:scaleX(-1) translateY(0)}80%{opacity:1;transform:scaleX(-1) translateY(0)}to{opacity:0;transform:scaleX(-1) translateY(120%)}}.toast{position:absolute;left:50%;top:20%;transform:translate(-50%);background:var(--paper);border:1px solid rgba(232,200,134,.4);border-radius:16px;padding:13px 26px;font-size:15.5px;line-height:1.7;color:var(--text);max-width:min(480px,86vw);text-align:center;box-shadow:0 14px 40px #00000080;animation:toastIn 4.2s ease forwards}.toast b{color:var(--gold-hi)}@keyframes toastIn{0%{opacity:0;transform:translate(-50%) translateY(-14px)}8%{opacity:1;transform:translate(-50%) translateY(0)}86%{opacity:1}to{opacity:0;transform:translate(-50%) translateY(-10px)}}.level-intro-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;animation:introCard 3.4s ease forwards;pointer-events:none}.level-intro-card .place{font-family:var(--font-accent);color:var(--cyan);letter-spacing:.6em;text-indent:.6em;font-size:15px}.level-intro-card .nm{font-family:var(--font-title);font-size:clamp(40px,9vw,68px);color:var(--gold-hi);text-shadow:0 0 34px rgba(232,200,134,.65);margin:4px 0 10px}.level-intro-card .tip{color:var(--text);font-size:14.5px;max-width:min(440px,84vw);line-height:1.8;margin:0 auto}@keyframes introCard{0%{opacity:0;transform:translate(-50%,-46%) scale(.94)}12%{opacity:1;transform:translate(-50%,-50%) scale(1)}82%{opacity:1}to{opacity:0;transform:translate(-50%,-54%) scale(1.02)}}.panel{position:relative;background:var(--paper);border:1px solid rgba(232,200,134,.35);border-radius:22px;padding:30px 34px;width:min(400px,90vw);max-height:86vh;overflow-y:auto;box-shadow:0 24px 80px #0009;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;flex-direction:column;gap:14px;text-align:center}.panel:before,.panel:after{content:"";position:absolute;width:24px;height:24px;pointer-events:none;border:2px solid rgba(232,200,134,.6)}.panel:before{top:9px;left:9px;border-right:none;border-bottom:none;border-top-left-radius:14px}.panel:after{top:9px;right:9px;border-left:none;border-bottom:none;border-top-right-radius:14px}.panel h2{font-family:var(--font-title);font-size:36px;color:var(--gold-hi);letter-spacing:.15em}.panel .sub{color:var(--text-dim);font-size:13px;margin-top:-8px}.result-bonus{font-size:12.5px;color:var(--gold);margin-top:-10px}.dim{position:absolute;inset:0;background:#0508148c;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}.stars-row{font-size:40px;letter-spacing:10px;color:var(--gold);height:52px}.stars-row .s{display:inline-block;opacity:0;transform:scale(.2)}.stars-row .s.on{animation:starPop .5s cubic-bezier(.22,1.6,.36,1) forwards}.stars-row .s.dim2{opacity:.18!important;transform:none;animation:none}@keyframes starPop{to{opacity:1;transform:scale(1)}}.result-score{font-family:var(--font-accent);font-size:40px;color:var(--cyan)}.result-best{font-size:13px;color:var(--text-dim);margin-top:-10px}.result-objs{display:flex;flex-direction:column;gap:5px;font-size:14px;color:var(--text-dim)}.result-objs .ok{color:var(--cyan)}.set-row{display:flex;align-items:center;gap:12px;text-align:left}.set-row label{flex:1;font-size:15px;letter-spacing:.1em}.set-row input[type=range]{flex:1.4;appearance:none;-webkit-appearance:none;height:4px;border-radius:2px;background:#e8c88640;outline:none}.set-row input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--gold);box-shadow:0 0 10px #e8c88699;cursor:pointer}.seg{display:flex;flex:1.4;gap:4px}.seg button{flex:1;padding:7px 0;font-family:var(--font-body);font-size:13px;background:transparent;color:var(--text-dim);border:1px solid rgba(232,200,134,.3);border-radius:8px;cursor:pointer;transition:all .15s}.seg button.on{background:#e8c886e6;color:#241a08;font-weight:700;border-color:transparent}.switch{position:relative;width:46px;height:24px;flex:none}.switch input{opacity:0;width:0;height:0}.switch .track{position:absolute;inset:0;border-radius:12px;cursor:pointer;background:#e8c88633;transition:background .2s}.switch .track:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--text-dim);transition:all .2s}.switch input:checked+.track{background:#7fe0ff8c}.switch input:checked+.track:after{left:25px;background:#fff}@media (max-width: 620px){.hud-moves .val{font-size:27px}.hud-score{min-width:88px}.hud-score .val{font-size:18px}.obj-chip{font-size:12px;padding:4px 10px 4px 6px}.obj-chip .dot{width:16px;height:16px}.pow-btn{width:54px;height:54px;font-size:20px}.panel{padding:22px 20px}.lvl-node{width:78px;height:78px;margin:-39px}.lvl-node .n{font-size:25px}}@media (prefers-reduced-motion: reduce){*{animation-duration:.01s!important;transition-duration:.1s!important}}
