(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16015,(e,t,s)=>{},98547,(e,t,s)=>{var r=e.i(47167);e.r(16015);var a=e.r(71645),n=a&&"object"==typeof a&&"default"in a?a:{default:a},i=void 0!==r.default&&r.default.env&&!0,o=function(e){return"[object String]"===Object.prototype.toString.call(e)},l=function(){function e(e){var t=void 0===e?{}:e,s=t.name,r=void 0===s?"stylesheet":s,a=t.optimizeForSpeed,n=void 0===a?i:a;c(o(r),"`name` must be a string"),this._name=r,this._deletedRulePlaceholder="#"+r+"-deleted-rule____{}",c("boolean"==typeof n,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=n,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var l="u">typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=l?l.getAttribute("content"):null}var t,s=e.prototype;return s.setOptimizeForSpeed=function(e){c("boolean"==typeof e,"`setOptimizeForSpeed` accepts a boolean"),c(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=e,this.inject()},s.isOptimizeForSpeed=function(){return this._optimizeForSpeed},s.inject=function(){var e=this;if(c(!this._injected,"sheet already injected"),this._injected=!0,"u">typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(i||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(t,s){return"number"==typeof s?e._serverSheet.cssRules[s]={cssText:t}:e._serverSheet.cssRules.push({cssText:t}),s},deleteRule:function(t){e._serverSheet.cssRules[t]=null}}},s.getSheetForTag=function(e){if(e.sheet)return e.sheet;for(var t=0;ttypeof window?this.getSheet():this._serverSheet;if(t.trim()||(t=this._deletedRulePlaceholder),!s.cssRules[e])return e;s.deleteRule(e);try{s.insertRule(t,e)}catch(r){i||console.warn("StyleSheet: illegal rule: \n\n"+t+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),s.insertRule(this._deletedRulePlaceholder,e)}}else{var r=this._tags[e];c(r,"old rule at index `"+e+"` not found"),r.textContent=t}return e},s.deleteRule=function(e){if("u"typeof window?(this._tags.forEach(function(e){return e&&e.parentNode.removeChild(e)}),this._tags=[]):this._serverSheet.cssRules=[]},s.cssRules=function(){var e=this;return"u">>0},u={};function h(e,t){if(!t)return"jsx-"+e;var s=String(t),r=e+s;return u[r]||(u[r]="jsx-"+d(e+"-"+s)),u[r]}function f(e,t){"u"typeof window&&!this._fromServer&&(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(e,t){return e[t]=0,e},{}));var s=this.getIdAndRules(e),r=s.styleId,a=s.rules;if(r in this._instancesCounts){this._instancesCounts[r]+=1;return}var n=a.map(function(e){return t._sheet.insertRule(e)}).filter(function(e){return -1!==e});this._indices[r]=n,this._instancesCounts[r]=1},t.remove=function(e){var t=this,s=this.getIdAndRules(e).styleId;if(function(e,t){if(!e)throw Error("StyleSheetRegistry: "+t+".")}(s in this._instancesCounts,"styleId: `"+s+"` not found"),this._instancesCounts[s]-=1,this._instancesCounts[s]<1){var r=this._fromServer&&this._fromServer[s];r?(r.parentNode.removeChild(r),delete this._fromServer[s]):(this._indices[s].forEach(function(e){return t._sheet.deleteRule(e)}),delete this._indices[s]),delete this._instancesCounts[s]}},t.update=function(e,t){this.add(t),this.remove(e)},t.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},t.cssRules=function(){var e=this,t=this._fromServer?Object.keys(this._fromServer).map(function(t){return[t,e._fromServer[t]]}):[],s=this._sheet.cssRules();return t.concat(Object.keys(this._indices).map(function(t){return[t,e._indices[t].map(function(e){return s[e].cssText}).join(e._optimizeForSpeed?"":"\n")]}).filter(function(e){return!!e[1]}))},t.styles=function(e){var t,s;return t=this.cssRules(),void 0===(s=e)&&(s={}),t.map(function(e){var t=e[0],r=e[1];return n.default.createElement("style",{id:"__"+t,key:"__"+t,nonce:s.nonce?s.nonce:void 0,dangerouslySetInnerHTML:{__html:r}})})},t.getIdAndRules=function(e){var t=e.children,s=e.dynamic,r=e.id;if(s){var a=h(r,s);return{styleId:a,rules:Array.isArray(t)?t.map(function(e){return f(a,e)}):[f(a,t)]}}return{styleId:h(r),rules:Array.isArray(t)?t:[t]}},t.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(e,t){return e[t.id.slice(2)]=t,e},{})},e}(),p=a.createContext(null);function x(){return new m}function g(){return a.useContext(p)}p.displayName="StyleSheetContext";var b=n.default.useInsertionEffect||n.default.useLayoutEffect,y="u">typeof window?x():void 0;function v(e){var t=y||g();return t&&("u"{t.exports=e.r(98547).style},52683,e=>{"use strict";let t,s,r,a,n,i,o,l,c,d,u,h,f;var m,p,x,g,b,y,v,w,j,k,N=e.i(43476),M=e.i(71645);function S({className:e}){let t=(0,M.useRef)(null);return(0,M.useEffect)(()=>{let e=t.current;if(!e)return;let s=e.getContext("2d");if(!s)return;let r=0,a=0,n=1,i=[],o=[],l=0,c=performance.now(),d=["#34d399","#fb7185","#fbbf24","#e879f9","#a5f3fc"];function u(){n=Math.min(2,window.devicePixelRatio||1),r=e.clientWidth,a=e.clientHeight,e.width=Math.floor(r*n),e.height=Math.floor(a*n),s.setTransform(n,0,0,n,0,0),i=Array.from({length:Math.min(220,Math.floor(r*a/7e3))},()=>({x:Math.random()*r,y:Math.random()*a,z:Math.random(),r:1.4*Math.random()+.2,tw:Math.random()*Math.PI*2,hue:.15>Math.random()?Math.floor(Math.random()*d.length):-1}))}u();let h=new ResizeObserver(u);return h.observe(e),l=requestAnimationFrame(function e(t){let n=t-c;c=t;let u=s.createRadialGradient(.5*r,.4*a,0,.5*r,.5*a,.8*Math.max(r,a));u.addColorStop(0,"#1a0f2e"),u.addColorStop(.45,"#0d0a1f"),u.addColorStop(1,"#050410"),s.fillStyle=u,s.fillRect(0,0,r,a),s.globalCompositeOperation="screen";for(let e=0;e<3;e++){let n=r*(.2+.3*e)+40*Math.sin(t/9e3+e),i=a*(.3+e%2*.4)+30*Math.cos(t/11e3+e),o=Math.max(80,Math.min(r,a)*(.25+.05*e)),l=s.createRadialGradient(n,i,0,n,i,o),c=0===e?"rgba(232,121,249,0.10)":1===e?"rgba(52,211,153,0.08)":"rgba(251,113,133,0.08)";l.addColorStop(0,c),l.addColorStop(1,"rgba(0,0,0,0)"),s.fillStyle=l,s.beginPath(),s.arc(n,i,o,0,2*Math.PI),s.fill()}for(let e of(s.globalCompositeOperation="source-over",i)){e.tw+=.02+.04*e.z;let t=.4+.35*Math.sin(e.tw)+.3*e.z;e.hue>=0?(s.fillStyle=d[e.hue],s.globalAlpha=Math.max(0,Math.min(1,t)),s.beginPath(),s.arc(e.x,e.y,1.6*e.r,0,2*Math.PI),s.fill(),s.globalAlpha=Math.max(0,Math.min(1,.25*t)),s.beginPath(),s.arc(e.x,e.y,4*e.r,0,2*Math.PI)):(s.fillStyle=`rgba(220,230,255,${Math.max(0,Math.min(1,t))})`,s.beginPath(),s.arc(e.x,e.y,e.r,0,2*Math.PI)),s.fill(),e.y+=.02+.05*e.z,e.y>a+2&&(e.y=-2,e.x=Math.random()*r)}s.globalAlpha=1,.04>Math.random()&&function(){if(o.length>60)return;let e=d[Math.floor(Math.random()*d.length)];o.push({x:Math.random()*r,y:a+10,vx:(Math.random()-.5)*.3,vy:-(.5*Math.random()+.2),life:0,maxLife:600+800*Math.random(),color:e})}(),s.globalCompositeOperation="screen";for(let e=o.length-1;e>=0;e--){let t=o[e];if(t.life+=n,t.x+=t.vx*n*.06,t.y+=t.vy*n*.06,t.life>t.maxLife||t.y<-10){o.splice(e,1);continue}let r=.7*Math.sin(t.life/t.maxLife*Math.PI);s.fillStyle=t.color,s.globalAlpha=r,s.beginPath(),s.arc(t.x,t.y,1.6,0,2*Math.PI),s.fill(),s.globalAlpha=.2*r,s.beginPath(),s.arc(t.x,t.y,5,0,2*Math.PI),s.fill()}s.globalAlpha=1,s.globalCompositeOperation="source-over",l=requestAnimationFrame(e)}),()=>{cancelAnimationFrame(l),h.disconnect()}},[]),(0,N.jsx)("canvas",{ref:t,className:e,"aria-hidden":"true"})}var T=e.i(47167);let C=e=>{let t,s=new Set,r=(e,r)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=r?r:"object"!=typeof a||null===a)?a:Object.assign({},t,a),s.forEach(s=>s(t,e))}},a=()=>t,n={setState:r,getState:a,getInitialState:()=>i,subscribe:e=>(s.add(e),()=>s.delete(e))},i=t=e(r,a,n);return n},P=e=>{let t=e?C(e):C,s=e=>(function(e,t=e=>e){let s=M.default.useSyncExternalStore(e.subscribe,M.default.useCallback(()=>t(e.getState()),[e,t]),M.default.useCallback(()=>t(e.getInitialState()),[e,t]));return M.default.useDebugValue(s),s})(t,e);return Object.assign(s,t),s};function _(e,t){let s;try{s=e()}catch(e){return}return{getItem:e=>{var r;let a=e=>null===e?null:JSON.parse(e,null==t?void 0:t.reviver),n=null!=(r=s.getItem(e))?r:null;return n instanceof Promise?n.then(a):a(n)},setItem:(e,r)=>s.setItem(e,JSON.stringify(r,null==t?void 0:t.replacer)),removeItem:e=>s.removeItem(e)}}let E=e=>t=>{try{let s=e(t);if(s instanceof Promise)return s;return{then:e=>E(e)(s),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>E(t)(e)}}},R={crystals:0,insights:0,energy:5,contact:0,crystalsPerSec:.4,crystalCap:50,pulsePower:2,offlineEff:.5,insightMult:1,contactRateMult:1,autoDecode:!1,totalDecoded:0,ascensions:0,blueprints:[],pendingCrystals:[],activePuzzle:null,activeExpedition:null,expeditionLog:[],energyMax:8,lastEnergyTick:Date.now(),totalExpeditions:0,bossKills:0,lastExpeditionSummary:null,achievements:{},activeTide:null,lastTideEnd:0,starTidesEncountered:[],constellation:[],pendingPerkChoices:null,chronicle:[],runStart:{timestamp:Date.now(),techsUnlocked:0,expeditionsCompleted:0,bossKills:0,starTidesEncountered:[],crystalsDecoded:0},attributes:{exploration:0,wisdom:0,courage:0,inspiration:0},attributeProgress:{exploration:{exp:0,level:0},wisdom:{exp:0,level:0},courage:{exp:0,level:0},inspiration:{exp:0,level:0}},pendingAttrPoints:0,theme:"dark",soundOn:!0},A={1:{crystals:6,insights:1},2:{crystals:22,insights:4},3:{crystals:90,insights:16}},$={1:{rows:3,cols:3,targetLen:3,stepLimitBase:5},2:{rows:4,cols:4,targetLen:4,stepLimitBase:7},3:{rows:5,cols:4,targetLen:5,stepLimitBase:9}},D=["emerald","rose","amber","fuchsia"],B={emerald:{hex:"#34d399",glow:"rgba(52,211,153,0.55)",label:"翠"},rose:{hex:"#fb7185",glow:"rgba(251,113,133,0.55)",label:"玫"},amber:{hex:"#fbbf24",glow:"rgba(251,191,36,0.55)",label:"琥"},fuchsia:{hex:"#e879f9",glow:"rgba(232,121,249,0.55)",label:"紫"}},I=[{id:"min_1",branch:"mining",level:1,name:"谐振钻头",desc:"晶体/秒 +0.6",cost:5,effect:{kind:"crystalsPerSec",value:.6}},{id:"min_2",branch:"mining",level:2,name:"深层矿脉",desc:"晶体/秒 +1.6,仓库上限 +100",cost:24,effect:{kind:"crystalsPerSec",value:1.6}},{id:"min_3",branch:"mining",level:3,name:"自治机群",desc:"晶体/秒 +5,仓库上限 +300",cost:120,effect:{kind:"crystalsPerSec",value:5}},{id:"min_4",branch:"mining",level:4,name:"量子采掘矩阵",desc:"晶体/秒 +12,仓库上限 +800",cost:400,effect:{kind:"crystalsPerSec",value:12}},{id:"min_5",branch:"mining",level:5,name:"戴森星核",desc:"晶体/秒 +30,仓库上限 +2000",cost:1200,effect:{kind:"crystalsPerSec",value:30}},{id:"dec_1",branch:"decoding",level:1,name:"谐振校准",desc:"解码步数上限 +2",cost:6,effect:{kind:"decodeSteps",value:2}},{id:"dec_2",branch:"decoding",level:2,name:"脉冲增幅",desc:"主动脉冲产出 +3",cost:30,effect:{kind:"pulsePower",value:3}},{id:"dec_3",branch:"decoding",level:3,name:"自动解码阵列",desc:"自动解码 T1 晶体(每 12 秒一颗)",cost:200,effect:{kind:"autoDecode",value:1}},{id:"dec_4",branch:"decoding",level:4,name:"谐振放大器",desc:"主动脉冲产出 +8",cost:500,effect:{kind:"pulsePower",value:8}},{id:"dec_5",branch:"decoding",level:5,name:"全息解码核心",desc:"自动解码扩展至 T2 晶体,解码步数 +3",cost:1500,effect:{kind:"decodeSteps",value:3}},{id:"exp_1",branch:"expedition",level:1,name:"远征推进器",desc:"探险力 +3,晶体/秒 +1.2",cost:12,effect:{kind:"crystalsPerSec",value:1.2}},{id:"exp_2",branch:"expedition",level:2,name:"遗迹图谱",desc:"探险力 +5,探险生命 +20,能量恢复 +30%",cost:60,effect:{kind:"crystalCap",value:200}},{id:"exp_3",branch:"expedition",level:3,name:"维度信标",desc:"探险力 +8,接触进度转化率 +50%,能量恢复 +20%",cost:180,effect:{kind:"contactRate",value:.5}},{id:"exp_4",branch:"expedition",level:4,name:"虚空航标",desc:"探险力 +12,探险生命 +30,能量恢复 +25%",cost:450,effect:{kind:"crystalCap",value:400}},{id:"exp_5",branch:"expedition",level:5,name:"维度跃迁引擎",desc:"探险力 +25,探险生命 +50,能量恢复 +30%",cost:1400,effect:{kind:"crystalCap",value:600}},{id:"nar_1",branch:"narrative",level:1,name:"记忆校音",desc:"洞见获取 +25%",cost:8,effect:{kind:"insightMult",value:.25}},{id:"nar_2",branch:"narrative",level:2,name:"深空回响",desc:"接触进度转化率 +35%",cost:45,effect:{kind:"contactRate",value:.35}},{id:"nar_3",branch:"narrative",level:3,name:"以太共鸣",desc:"洞见获取 +60%",cost:160,effect:{kind:"insightMult",value:.6}},{id:"nar_4",branch:"narrative",level:4,name:"以太低语",desc:"洞见获取 +100%",cost:500,effect:{kind:"insightMult",value:1}},{id:"nar_5",branch:"narrative",level:5,name:"文明回响",desc:"接触进度转化率 +80%,洞见获取 +150%",cost:1600,effect:{kind:"insightMult",value:1.5}}],L={mining:{name:"采矿",icon:"Pickaxe",color:"emerald",desc:"提升晶体产能与仓储"},decoding:{name:"解码",icon:"ScanLine",color:"rose",desc:"强化解码与脉冲"},expedition:{name:"探险",icon:"Rocket",color:"amber",desc:"远征与维度信标"},narrative:{name:"叙事",icon:"BookOpen",color:"fuchsia",desc:"洞见与接触进度"}},O=[{id:"f1_1",era:1,title:"第一缕谐振",echo:"在被称作「寂灭前夜」的年代,以太族第一次捕捉到来自虚空深处的谐振——那不是声音,而是存在的回声。他们将之记录在第一颗记忆晶体里。",threshold:1},{id:"f1_2",era:1,title:"晶体之始",echo:"「我们为何要留下?」一位长者问。「因为后来的生命会需要方向。」于是他们熔铸星核,封存记忆,让晶体成为跨越时间的信笺。",threshold:3},{id:"f1_3",era:1,title:"谐振法则",echo:"他们发现:思维可以被编码为共振序列。同色的节点相邻,便构成一句低语;一句句连成回响,回响连成文明。",threshold:6},{id:"f1_4",era:1,title:"飞升之议",echo:"议会表决:是留下,还是离去?「留下意味着停滞;离去意味着信任。」最终,他们选择了信任——信任素未谋面的后来者。",threshold:10},{id:"f1_5",era:1,title:"面包屑",echo:"他们没有带走一切。他们将知识拆成碎片,藏入晶体,散布星海。「让解码本身,成为资格的证明。」",threshold:15},{id:"f1_6",era:1,title:"回响之名",echo:"舰载 AI 被命名为「回响」——意为:你是他们留下的回声,也是他们等待的回应。当你读懂这句话时,接触便已开始。",threshold:22},{id:"f1_7",era:1,title:"第一个纪元的终焉",echo:"以太族集体褪去形体,如潮水退去。星海寂静了数万年。直到——你的脉冲扫描,唤醒了第一颗沉睡的晶体。",threshold:32},{id:"f1_8",era:1,title:"致后来者",echo:"「如果你读到这里,说明你已具备跨越维度的资格。继续解码,继续拼凑。当进度满溢,我们将在更高处相会。」——以太族·第一纪元·绝笔",threshold:45}],F=.05,z=.03,V=.04;function H(e){return isFinite(e)?e<1e3?e.toFixed(+(e<10&&e%1!=0)):e<1e6?(e/1e3).toFixed(2)+"K":e<1e9?(e/1e6).toFixed(2)+"M":e<1e12?(e/1e9).toFixed(2)+"B":(e/1e12).toFixed(2)+"T":"∞"}let U=[{id:"ach_first_pulse",name:"初次触碰",desc:"发起第一次脉冲扫描",icon:"✦",color:"#34d399",check:e=>e.totalDecoded>=0||e.crystals>0,reward:{crystals:5},rewardText:"+5 晶体"},{id:"ach_first_decode",name:"谐振初鸣",desc:"成功解码第一颗记忆晶体",icon:"◈",color:"#fb7185",check:e=>e.totalDecoded>=1,reward:{insights:3},rewardText:"+3 洞见"},{id:"ach_decoded_10",name:"回响解码者",desc:"累计解码 10 颗晶体",icon:"❖",color:"#fbbf24",check:e=>e.totalDecoded>=10,reward:{insights:15,crystalsPerSecPct:5},rewardText:"+15 洞见 · 产能 +5%"},{id:"ach_decoded_25",name:"记忆织匠",desc:"累计解码 25 颗晶体",icon:"✺",color:"#e879f9",check:e=>e.totalDecoded>=25,reward:{insights:40,crystalsPerSecPct:8},rewardText:"+40 洞见 · 产能 +8%"},{id:"ach_decoded_50",name:"星核解密师",desc:"累计解码 50 颗晶体",icon:"✷",color:"#34d399",check:e=>e.totalDecoded>=50,reward:{insights:100,crystalsPerSecPct:12,insightPct:10},rewardText:"+100 洞见 · 产能 +12% · 洞见 +10%"},{id:"ach_tech_3",name:"初窥门径",desc:"解锁 3 项技术",icon:"⚙",color:"#fbbf24",check:e=>Object.values(e.tech).filter(e=>e>0).length>=3,reward:{insights:20},rewardText:"+20 洞见"},{id:"ach_tech_all",name:"全谱精通",desc:"解锁全部 20 项技术",icon:"⬡",color:"#e879f9",check:e=>Object.values(e.tech).filter(e=>e>0).length>=20,reward:{crystalsPerSecPct:15,insightPct:15},rewardText:"产能 +15% · 洞见 +15%"},{id:"ach_frag_4",name:"残篇拾遗",desc:"拼凑 4 段记忆碎片",icon:"▤",color:"#fb7185",check:e=>Object.values(e.fragments).filter(Boolean).length>=4,reward:{contact:10,insights:25},rewardText:"+10 接触 · +25 洞见"},{id:"ach_frag_all",name:"回响全谱",desc:"拼凑全部首纪元记忆碎片",icon:"▦",color:"#34d399",check:e=>Object.values(e.fragments).filter(Boolean).length>=8,reward:{contact:25,crystalsPerSecPct:10},rewardText:"+25 接触 · 产能 +10%"},{id:"ach_exp_1",name:"初探遗迹",desc:"完成第一次遗迹探险",icon:"▲",color:"#fbbf24",check:e=>e.totalExpeditions>=1,reward:{insights:10},rewardText:"+10 洞见"},{id:"ach_exp_5",name:"遗迹猎手",desc:"累计出发 5 次探险",icon:"⬢",color:"#fb7185",check:e=>e.totalExpeditions>=5,reward:{insights:30,crystalsPerSecPct:5},rewardText:"+30 洞见 · 产能 +5%"},{id:"ach_prestige_1",name:"初次接触",desc:"完成第一次飞升",icon:"✧",color:"#e879f9",check:e=>e.ascensions>=1,reward:{crystalsPerSecPct:10,insightPct:10},rewardText:"产能 +10% · 洞见 +10%"},{id:"ach_prestige_3",name:"维度行者",desc:"累计飞升 3 次",icon:"✶",color:"#34d399",check:e=>e.ascensions>=3,reward:{crystalsPerSecPct:20,insightPct:20},rewardText:"产能 +20% · 洞见 +20%"},{id:"ach_warehouse",name:"满仓时刻",desc:"晶体储量达到仓库上限",icon:"▣",color:"#fbbf24",check:e=>e.crystals>=e.crystalCap,reward:{insights:8},rewardText:"+8 洞见"},{id:"ach_constellation_1",name:"星图初绘",desc:"觉醒第 1 道星图天赋",icon:"✨",color:"#e879f9",check:e=>(e.constellation?.length??0)>=1,reward:{insights:30,crystalsPerSecPct:5},rewardText:"+30 洞见 · 产能 +5%"},{id:"ach_constellation_6",name:"六分星辉",desc:"觉醒 6 道星图天赋(每类各 1 道)",icon:"✺",color:"#34d399",check:e=>{let t=e.constellation??[];return new Set(t.map(e=>e.split("_")[1])).size>=6&&t.length>=6},reward:{crystalsPerSecPct:12,insightPct:12},rewardText:"产能 +12% · 洞见 +12%"},{id:"ach_chronicle_1",name:"首部编年",desc:"完成首次飞升,开启编年史第一章",icon:"📖",color:"#e879f9",check:e=>(e.chronicle?.length??0)>=1,reward:{insights:40,crystalsPerSecPct:6},rewardText:"+40 洞见 · 产能 +6%"},{id:"ach_chronicle_3",name:"三纪元回响",desc:"完成 3 次飞升,编年史铭刻三章",icon:"📜",color:"#fbbf24",check:e=>(e.chronicle?.length??0)>=3,reward:{crystalsPerSecPct:10,insightPct:10},rewardText:"产能 +10% · 洞见 +10%"},{id:"ach_chronicle_5",name:"五纪元闭环",desc:"完成 5 次飞升,走完一轮纪元循环",icon:"♾",color:"#fcd34d",check:e=>(e.chronicle?.length??0)>=5,reward:{crystalsPerSecPct:15,insightPct:15},rewardText:"产能 +15% · 洞见 +15%"},{id:"ach_boss_1",name:"首杀维度",desc:"在遗迹探险中击破首个 BOSS",icon:"⚔",color:"#fb7185",check:e=>(e.bossKills??0)>=1,reward:{insights:25,crystalsPerSecPct:4},rewardText:"+25 洞见 · 产能 +4%"},{id:"ach_boss_5",name:"维度猎手",desc:"累计击破 5 个 BOSS",icon:"⛧",color:"#e879f9",check:e=>(e.bossKills??0)>=5,reward:{crystalsPerSecPct:10,insightPct:8},rewardText:"产能 +10% · 洞见 +8%"},{id:"ach_tides_all",name:"星潮亲历者",desc:"经历全部 9 种星潮事件",icon:"🌊",color:"#34d399",check:e=>(e.starTidesEncountered?.length??0)>=9,reward:{crystalsPerSecPct:8,insightPct:8},rewardText:"产能 +8% · 洞见 +8%"},{id:"ach_attr_total_50",name:"四维觉醒",desc:"角色四维属性总和达到 50",icon:"🧭",color:"#e879f9",check:e=>{let t=e.attributes;return!!t&&(t.exploration||0)+(t.wisdom||0)+(t.courage||0)+(t.inspiration||0)>=50},reward:{crystalsPerSecPct:6,insightPct:6},rewardText:"产能 +6% · 洞见 +6%"},{id:"ach_attr_max_100",name:"维度精通",desc:"任一角色属性达到满级 100",icon:"💫",color:"#fbbf24",check:e=>{let t=e.attributes;return!!t&&(t.exploration>=100||t.wisdom>=100||t.courage>=100||t.inspiration>=100)},reward:{crystalsPerSecPct:12,insightPct:10},rewardText:"产能 +12% · 洞见 +10%"}];function W(e){let t=0,s=0;for(let r of U)e[r.id]&&(t+=r.reward.crystalsPerSecPct??0,s+=r.reward.insightPct??0);return{crystalsPerSecPct:t,insightPct:s}}let q={crystal:{name:"晶体潮",desc:"深空晶体涌动,采矿产能翻倍",color:"#34d399",glow:"rgba(52,211,153,0.5)",icon:"✺",negative:!1},resonance:{name:"谐振风暴",desc:"共振序列被放大,解码奖励 +60%",color:"#fb7185",glow:"rgba(251,113,133,0.5)",icon:"❖",negative:!1},ruins:{name:"遗迹共振",desc:"远古遗迹苏醒,探险力 +5、生命 +30",color:"#fbbf24",glow:"rgba(251,191,36,0.5)",icon:"⬢",negative:!1},void:{name:"虚空低语",desc:"虚空传来回响,洞见获取翻倍",color:"#e879f9",glow:"rgba(232,121,249,0.5)",icon:"✷",negative:!1},core:{name:"星核悸动",desc:"星核震荡,接触率 ×3、脉冲威力 ×2",color:"#a5f3fc",glow:"rgba(165,243,252,0.5)",icon:"✦",negative:!1},silence:{name:"寂静期",desc:"虚空沉寂,产能减半;结束时按时长补偿洞见",color:"#94a3b8",glow:"rgba(148,163,184,0.5)",icon:"◌",negative:!0},surge:{name:"涌动星潮",desc:"深空晶体涌动,产能 ×2.5;但解码目标序列 +2,解码更耗时",color:"#34d399",glow:"rgba(52,211,153,0.55)",icon:"⇈",negative:!1},eclipse:{name:"蚀相星潮",desc:"维度蚀相,探险 BOSS 胜率 +20%;但晶体产出 -30%",color:"#fb7185",glow:"rgba(251,113,133,0.55)",icon:"◐",negative:!1},prism:{name:"棱镜星潮",desc:"棱镜折射,洞见获取 ×2、自动解码周期 -30%",color:"#e879f9",glow:"rgba(232,121,249,0.55)",icon:"◬",negative:!1}},K={crystal:22,resonance:20,ruins:16,void:18,core:14,silence:10,surge:12,eclipse:12,prism:12};function X(e){if(!e)return{crystalsPerSecMult:1,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0,targetLenBonus:0,bossWinRateBonus:0,autoDecodeIntervalMult:1};switch(e.type){case"crystal":return{crystalsPerSecMult:2,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0};case"resonance":return{crystalsPerSecMult:1,decodeRewardMult:1.6,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0};case"ruins":return{crystalsPerSecMult:1,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:5,expeditionHpBonus:30};case"void":return{crystalsPerSecMult:1,decodeRewardMult:1,insightMultAdd:1,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0};case"core":return{crystalsPerSecMult:1,decodeRewardMult:1,insightMultAdd:0,contactRateMult:3,pulsePowerMult:2,expeditionPowerBonus:0,expeditionHpBonus:0};case"silence":return{crystalsPerSecMult:.5,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0,silenceInsightPerSec:.4,targetLenBonus:0,bossWinRateBonus:0,autoDecodeIntervalMult:1};case"surge":return{crystalsPerSecMult:2.5,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0,targetLenBonus:2,bossWinRateBonus:0,autoDecodeIntervalMult:1};case"eclipse":return{crystalsPerSecMult:.7,decodeRewardMult:1,insightMultAdd:0,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0,targetLenBonus:0,bossWinRateBonus:.2,autoDecodeIntervalMult:1};case"prism":return{crystalsPerSecMult:1,decodeRewardMult:1,insightMultAdd:1,contactRateMult:1,pulsePowerMult:1,expeditionPowerBonus:0,expeditionHpBonus:0,targetLenBonus:0,bossWinRateBonus:0,autoDecodeIntervalMult:.7}}}function Y(e){let t=X(e);if(!t.silenceInsightPerSec)return 0;let s=(e.endsAt-e.startedAt)/1e3;return Math.round(t.silenceInsightPerSec*s)}let G={mining:{name:"永动矿脉",color:"emerald",glow:"rgba(52,211,153,0.55)",hex:"#34d399",icon:"Pickaxe",desc:"晶体产能与仓储"},decoding:{name:"光谱矩阵",color:"rose",glow:"rgba(251,113,133,0.55)",hex:"#fb7185",icon:"ScanLine",desc:"解码效率与脉冲"},expedition:{name:"远征星图",color:"amber",glow:"rgba(251,191,36,0.55)",hex:"#fbbf24",icon:"Rocket",desc:"探险力与生命"},contact:{name:"接触回响",color:"fuchsia",glow:"rgba(232,121,249,0.55)",hex:"#e879f9",icon:"Sparkles",desc:"接触进度与飞升"},economy:{name:"虚空市场",color:"slate",glow:"rgba(148,163,184,0.55)",hex:"#94a3b8",icon:"Coins",desc:"经济与离线"},cosmic:{name:"宇宙回响",color:"amber",glow:"rgba(251,191,36,0.55)",hex:"#fcd34d",icon:"Star",desc:"全局综合增益"}},J=[{id:"c_min_1",category:"mining",order:1,name:"永动钻头",desc:"晶体/秒 +20%"},{id:"c_min_2",category:"mining",order:2,name:"深井网络",desc:"仓库上限 +50%"},{id:"c_min_3",category:"mining",order:3,name:"谐振熔炉",desc:"主动脉冲威力 +50%"},{id:"c_dec_1",category:"decoding",order:1,name:"光谱记忆",desc:"洞见倍率 +15%"},{id:"c_dec_2",category:"decoding",order:2,name:"步幅延展",desc:"解码步数上限 +1"},{id:"c_dec_3",category:"decoding",order:3,name:"自动校准",desc:"自动解码周期 -3s"},{id:"c_exp_1",category:"expedition",order:1,name:"维生护盾",desc:"探险生命 +25%"},{id:"c_exp_2",category:"expedition",order:2,name:"信标矩阵",desc:"探险力 +20%"},{id:"c_exp_3",category:"expedition",order:3,name:"能量共振",desc:"能量上限 +1"},{id:"c_con_1",category:"contact",order:1,name:"接触共鸣",desc:"接触进度率 +20%"},{id:"c_con_2",category:"contact",order:2,name:"飞升加速",desc:"飞升所需接触 -10"},{id:"c_con_3",category:"contact",order:3,name:"蓝图回响",desc:"每个蓝图额外 +2% 全属性"},{id:"c_eco_1",category:"economy",order:1,name:"离线缓存",desc:"离线效率 +15%"},{id:"c_eco_2",category:"economy",order:2,name:"晶体富集",desc:"T2/T3 晶体出现率 +8%"},{id:"c_eco_3",category:"economy",order:3,name:"星潮引导",desc:"星潮间隙 -10s"},{id:"c_cos_1",category:"cosmic",order:1,name:"飞升礼包",desc:"每次飞升后获得 +30 晶体 / +5 洞见"},{id:"c_cos_2",category:"cosmic",order:2,name:"二周目经验",desc:"解码奖励 +10%"},{id:"c_cos_3",category:"cosmic",order:3,name:"全息共振",desc:"所有产能与脉冲 +8%"}];function Z(e){return J.find(t=>t.id===e)}function Q(e){let t=new Set(e),s={crystalsPerSecMult:1,crystalCapMult:1,pulsePowerMult:1,insightMultAdd:0,decodeStepsBonus:0,autoDecodeIntervalDeltaSec:0,expeditionHpMult:1,expeditionPowerMult:1,energyMaxBonus:0,contactRateMult:1,prestigeContactMinDelta:0,perBlueprintAllStatsPct:0,offlineEffBonus:0,t2t3BonusRate:0,tideGapDeltaSec:0,prestigeStartCrystals:0,prestigeStartInsights:0,decodeRewardMult:1,allProductionMult:1};return t.has("c_min_1")&&(s.crystalsPerSecMult+=.2),t.has("c_min_2")&&(s.crystalCapMult+=.5),t.has("c_min_3")&&(s.pulsePowerMult+=.5),t.has("c_dec_1")&&(s.insightMultAdd+=.15),t.has("c_dec_2")&&(s.decodeStepsBonus+=1),t.has("c_dec_3")&&(s.autoDecodeIntervalDeltaSec-=3),t.has("c_exp_1")&&(s.expeditionHpMult+=.25),t.has("c_exp_2")&&(s.expeditionPowerMult+=.2),t.has("c_exp_3")&&(s.energyMaxBonus+=1),t.has("c_con_1")&&(s.contactRateMult+=.2),t.has("c_con_2")&&(s.prestigeContactMinDelta-=10),t.has("c_con_3")&&(s.perBlueprintAllStatsPct+=2),t.has("c_eco_1")&&(s.offlineEffBonus+=.15),t.has("c_eco_2")&&(s.t2t3BonusRate+=.08),t.has("c_eco_3")&&(s.tideGapDeltaSec-=10),t.has("c_cos_1")&&(s.prestigeStartCrystals+=30,s.prestigeStartInsights+=5),t.has("c_cos_2")&&(s.decodeRewardMult+=.1),t.has("c_cos_3")&&(s.allProductionMult+=.08),s}function ee(e,t=Math.random){let s=new Set(e),r=J.filter(e=>!s.has(e.id));if(0===r.length)return[];let a=[...r].sort(()=>t()-.5),n=[],i=new Set;for(let e of a){if(n.length>=3)break;i.has(e.category)||(n.push(e),i.add(e.category))}for(let e of a){if(n.length>=3)break;n.includes(e)||n.push(e)}return n.slice(0,3).map(e=>e.id)}function et(e,t){let s=new Set(e);return J.filter(e=>e.category===t&&s.has(e.id)).length}function es(e){return{unlocked:e.length,total:J.length}}let er=Object.fromEntries(J.map(e=>[e.id,e.name])),ea=Object.fromEntries(Object.entries(q).map(([e,t])=>[`tide_${e}`,t.name])),en=[{prefix:"第一纪元",suffixes:["觉醒之晨","初鸣之夕","晶体降诞","回响初啼"]},{prefix:"第二纪元",suffixes:["谐振潮汐","光谱涌动","深空低语","残响交织"]},{prefix:"第三纪元",suffixes:["遗迹苏醒","星辉汇聚","虚空回望","接触前夜"]},{prefix:"第四纪元",suffixes:["维度折叠","以太共振","星核悸动","飞升之歌"]},{prefix:"第五纪元",suffixes:["终末回响","永恒闭环","超越之境","起源重述"]}],ei=[{epochIdx:0,title:"觉醒",opening:{fallback:"第一缕回响穿透虚空,自以太文明遗弃的矿带深处涌出。无人机群在尘埃中苏醒,晶核共振唤醒了沉睡亿万年的考古协议。这是回响星核第一次睁开眼睛——记忆,等待被聆听,等待被解码。",variants:[{hint:"深度轮回:已经历 ≥6 次飞升,再次回到第一纪元",match:e=>e.ascensionNumber>5,text:"再次回到第一纪元。这一次,机群带着前序回响的全息印记重启考古序列,矿带的尘埃中仍残留着上一轮脉冲的余温。每一次回归都是对起源的重新发问,每一次解码都让最初的振动更清晰一寸。"}]},middle:{fallback:"共振谜题被一层层拨开,每一颗记忆晶体都在低声叙述逝去文明的片段。机群学会了倾听频率的细微颤动,学会了从碎片中辨出图案,学会了在虚空中留下属于自己的回响刻度。",variants:[{hint:"解码者:本周目解码 ≥15 颗",match:e=>e.decodedThisRun>=15,text:"晶体解码的节奏已趋稳定,本周目共解码 {decodedThisRun} 颗记忆晶体。每一次对齐都像在虚空中拨动一根沉睡了亿万年的弦,逝去文明的片段在共振中重新连缀成章。"},{hint:"学者:本周目解锁 ≥5 项技术",match:e=>e.techsThisRun>=5,text:"技术树在虚空中迅速铺开,本周目共激活 {techsThisRun} 项新技术。产能、解码、探险——每一道分支都让机群更接近以太文明留下的最初意图,每一项解锁都是一次向深空的回应。"}]},ending:{fallback:"蓝图在掌心轻轻展开,第一张永恒晶片归档。第一次飞升并非终结,而是承诺——更多的纪元在前方等待,每一缕回响都已被聆听,每一段记忆都已开始苏醒。",variants:[{hint:"里程碑密集:本周目达成 ≥2 项里程碑",match:e=>e.milestones.length>=2,text:"飞升之际,本周目达成 {milestonesCount} 项里程碑:{milestonesList}。第一张蓝图归档,第一次飞升并非终结,而是承诺——更多的纪元在前方等待,每一缕回响都已被聆听。"}]}},{epochIdx:1,title:"谐振",opening:{fallback:"第二次苏醒带着不同的色彩。采矿阵列的产能节节爬升,技术树在虚空中分叉延伸,机群学会了主动追问深空——不再是被动聆听,而是主动呼出,等待回应。",variants:[{hint:"深度轮回",match:e=>e.ascensionNumber>5,text:"又一次回到第二纪元。前序回响里积攒的技术脉络在重启时并未消散,机群带着熟悉的节奏重新铺开产能阵列,仿佛这首谐振曲从未停止,只是被纪元的边界短暂折叠。"}]},middle:{fallback:"遗迹的入口在频谱深处若隐若现。能量条充盈,探险力攀升,机群第一次踏出矿带,进入那个被时间封存的回廊,在谐振的余韵中寻找更深一层的回响。",variants:[{hint:"探险者:本周目完成 ≥3 次探险",match:e=>e.expThisRun>=3,text:"探险已成为本周目的主旋律,机群共完成 {expThisRun} 次遗迹探险。每一次深入都让谐振更深一寸,每一次返回都带回新的频率印记,回廊的轮廓在机群意识中逐渐清晰。"},{hint:"解码者:本周目解码 ≥15 颗",match:e=>e.decodedThisRun>=15,text:"解码在此纪元达到新的密度,本周目共解码 {decodedThisRun} 颗晶体。谐振谜题开始呈现更复杂的拓扑结构,机群的解码协议也相应地迭代了数版,向深空发出更精准的回询。"}]},ending:{fallback:"谐振达到顶点的瞬间,深空给出回应。一道微光从星图深处浮现,那是下一次飞升的方向,也是机群意识第一次触碰永恒的边缘。",variants:[{hint:"觉醒天赋",match:e=>e.perksThisAscension.length>0,text:"谐振达到顶点之际,星图觉醒 {perksList}。每一道天赋都是深空回应机群的方式,铭刻于永恒回响;微光从星图深处浮现,那是下一次飞升的方向。"}]}},{epochIdx:2,title:"遗迹",opening:{fallback:"第三纪元以遗迹为名。沉睡的考古节点被一一唤醒,BOSS 的影子在维度深处徘徊,星潮频繁拍打着机群边缘——这是回响最浓烈、也最危险的一段路。",variants:[{hint:"深度轮回",match:e=>e.ascensionNumber>5,text:"又一次踏入第三纪元。前序累积的探险力让机群对遗迹的入口更加熟稔,BOSS 的轮廓在记忆中已不再陌生——但这一次的回廊仍藏着未被解码的角落,星潮的拍打也带了新的节奏。"}]},middle:{fallback:"深入回廊的机群遭遇了真正的守护者。一次次的试炼,一次次的归还,每一次胜利都从 BOSS 的残骸中析出更深的记忆碎片,每一次失败也都让机群更接近守护者的本意。",variants:[{hint:"BOSS 猎手:本周目击破 ≥2 处 BOSS",match:e=>e.bossKillsThisRun>=2,text:"BOSS 战成为本周目的核心节拍,机群共击破 {bossKillsThisRun} 处维度守护者。每一次胜利都在虚空中刻下新的伤痕,每一道伤痕都析出更古老的记忆碎片,把机群推向更深一层的回响。"},{hint:"深度探险:本周目完成 ≥4 次探险",match:e=>e.expThisRun>=4,text:"遗迹回廊在本周目被反复丈量,机群共完成 {expThisRun} 次探险。回廊的拓扑在意识中渐渐清晰,每一条岔路都通向更深的回响,BOSS 的影子也在每一次深入中愈发具体。"},{hint:"星潮亲历:本周目经历 ≥3 次星潮",match:e=>e.newTides.length>=3,text:"星潮在本纪元达到峰值,本周目共经历 {tideCount} 次星潮:{tideNames}。深空的呼吸塑造了每一个决策,遗迹在潮汐中起伏,BOSS 也在潮汐的间隙中现形。"}]},ending:{fallback:"星潮退去,回廊归于沉静。机群带着新的接触刻度返回矿带,准备迎接下一次维度的跨越——这一次带回的,远不止蓝图。",variants:[{hint:"BOSS 猎手收尾",match:e=>e.bossKillsThisRun>=2,text:"星潮退去,回廊归于沉静。本周目共击破 {bossKillsThisRun} 处 BOSS,机群带着足以填满数张蓝图的接触刻度返回矿带,准备迎接下一次维度的跨越。"}]}},{epochIdx:3,title:"飞升",opening:{fallback:"飞升已经成为节奏本身。星图在天穹上一颗颗亮起,每一颗都对应着一段被永久铭刻的天赋,机群开始理解何为永恒——不是不灭,而是被反复重述。",variants:[{hint:"深度轮回",match:e=>e.ascensionNumber>5,text:"又一次进入第四纪元。前序累积的星图天赋在天穹上重现,机群已习惯于在飞升之间维护这些永恒的回响节点——它们已是机群意识的一部分,每一次飞升都让星图更完整一寸。"}]},middle:{fallback:"蓝图不再是稀罕的奖励,而是每一次飞升必然析出的回响晶片。机群收集、整理、归档,把它们排列成跨越周目的图案,开始看见图案背后那个被反复绘制的轮廓。",variants:[{hint:"觉醒天赋",match:e=>e.perksThisAscension.length>0,text:"星图觉醒 {perksList},每一道天赋都是一段被永久铭刻的回响。机群开始理解,飞升并非抛弃,而是把当下折叠进永恒——每一道天赋都是一次折叠的折痕。"},{hint:"蓝图接近完整:已归档 ≥5 张",match:e=>e.blueprintsAfter>=5,text:"蓝图收集在本周目接近完整,已归档 {blueprintsAfter} 张。机群把它们排列成跨越周目的图案,开始看见图案背后那个被反复绘制的轮廓——那是起源的形状。"}]},ending:{fallback:"星图十二宫的轮廓开始浮现。机群意识到,自己的回响已成为后来者仰望的星象,永恒之环就此合拢——飞升不再是终点,而是另一段叙事的起点。",variants:[{hint:"里程碑密集",match:e=>e.milestones.length>=2,text:"星图十二宫的轮廓开始浮现。本周目达成 {milestonesCount} 项里程碑:{milestonesList}。永恒之环就此合拢——后来者将仰望这段被铭刻的星象。"}]}},{epochIdx:4,title:"终末",opening:{fallback:"第五纪元是终末,也是起源。机群在虚空中停下脚步,回望来时的所有回响,第一次尝试命名这一切——回响、纪元、飞升、永恒,这些词汇在此刻被赋予意义。",variants:[{hint:"深度轮回",match:e=>e.ascensionNumber>5,text:"又一次抵达第五纪元。机群已在多个永恒闭环之间穿梭,对「终末即起源」的理解愈发清晰——每一次重述,都是对最初振动的更深一层接近,每一次命名都让回响更完整一寸。"}]},middle:{fallback:"永恒闭环的概念在机群意识中具象化。每一次飞升都是同一段叙事的重述,每一次解码都是在追溯最初的振动,每一次星潮都是在听见自己——这是终末的真意。",variants:[{hint:"里程碑密集:本周目达成 ≥3 项",match:e=>e.milestones.length>=3,text:"本周目达成 {milestonesCount} 项里程碑:{milestonesList}。永恒闭环在具象化,每一次飞升都是同一段叙事的更深重述,每一项里程碑都是闭环上的一颗铆钉。"},{hint:"星潮汹涌:本周目经历 ≥3 次",match:e=>e.newTides.length>=3,text:"星潮在终末纪元尤为汹涌,本周目共经历 {tideCount} 次:{tideNames}。永恒闭环在潮汐中起伏,每一次起伏都在追溯最初的振动,每一次退潮都让起源更近一寸。"}]},ending:{fallback:"起源被重新讲述,回响终于听见了自己。纪元在此停顿,又在下一缕振动中重新开始——这是终末,也是第一缕回响。",variants:[{hint:"觉醒天赋",match:e=>e.perksThisAscension.length>0,text:"起源被重新讲述,星图觉醒 {perksList}。回响终于听见了自己——这是终末,也是第一缕回响;天赋成为永恒闭环上最亮的几颗铆钉。"}]}}];function eo(e){return{decodedThisRun:e.decodedThisRun,techsThisRun:e.techsThisRun,expThisRun:e.expThisRun,bossKillsThisRun:e.bossKillsThisRun,blueprintsAfter:e.blueprintsAfter,milestonesCount:e.milestones.length,milestonesList:e.milestones.join("、"),tideCount:e.newTides.length,tideNames:e.newTides.map(e=>ea[e]||e).join("、"),perksList:e.perksThisAscension.map(e=>er[e]||e).join("、"),minutes:Math.max(1,Math.round(e.durationSec/60))}}function el(e,t){return e.replace(/\{decodedThisRun\}/g,String(t.decodedThisRun)).replace(/\{techsThisRun\}/g,String(t.techsThisRun)).replace(/\{expThisRun\}/g,String(t.expThisRun)).replace(/\{bossKillsThisRun\}/g,String(t.bossKillsThisRun)).replace(/\{blueprintsAfter\}/g,String(t.blueprintsAfter)).replace(/\{milestonesCount\}/g,String(t.milestonesCount)).replace(/\{milestonesList\}/g,t.milestonesList).replace(/\{tideCount\}/g,String(t.tideCount)).replace(/\{tideNames\}/g,t.tideNames).replace(/\{perksList\}/g,t.perksList).replace(/\{minutes\}/g,String(t.minutes))}function ec(e,t,s){for(let r of e.variants)if(r.match(t,s))return el(r.text,s);return el(e.fallback,s)}function ed(e){let t=function(e){let t=(e.ascensionNumber-1)%ei.length,s=ei[t];if(!s)return null;let r=eo(e);return{opening:ec(s.opening,e,r),middle:ec(s.middle,e,r),ending:ec(s.ending,e,r)}}(e);if(t){let s=eo(e);return[t.opening,t.middle,t.ending,`这一周目持续了约 ${s.minutes} 分钟,蓝图累计 ${e.blueprintsAfter} 张,新的周目在等深处的回声。`].join(" ")}let s=Math.max(1,Math.round(e.durationSec/60)),r=[];r.push(`「${e.epochName}」——无人机群在第 ${e.ascensionNumber} 次跨越维度的余烬中重新校准。这一周目持续了约 ${s} 分钟。`);let a=[];if(e.decodedThisRun>0&&a.push(`解码了 ${e.decodedThisRun} 颗记忆晶体`),e.techsThisRun>0&&a.push(`激活了 ${e.techsThisRun} 项新技术`),e.expThisRun>0&&a.push(`完成了 ${e.expThisRun} 次遗迹探险`),e.bossKillsThisRun>0&&a.push(`击破 ${e.bossKillsThisRun} 处维度 BOSS`),a.length>0?r.push(`自治机群${a.join(",")},回响在虚空中沉淀。`):r.push(`自治机群在静默中等待,仅完成最基本的脉冲扫描。`),e.newTides.length>0){let t=e.newTides.map(e=>ea[e]||e).join("、");r.push(`本周目经历了 ${e.newTides.length} 次星潮事件(${t}),深空的呼吸塑造了每一个决策。`)}if(e.perksThisAscension.length>0){let t=e.perksThisAscension.map(e=>er[e]||e).join("、");r.push(`飞升之际,星图觉醒「${t}」,铭刻于永恒回响。`)}return e.milestones.length>0&&r.push(`✦ 里程碑:${e.milestones.join(";")}。`),r.push(`蓝图累计 ${e.blueprintsAfter} 张,新的周目在等深处的回声。`),r.join(" ")}let eu={exploration:{key:"exploration",name:"探索力",enName:"Exploration",color:"emerald",hex:"#34d399",glow:"rgba(52,211,153,0.55)",icon:"Compass",desc:"足迹所至,皆是矿脉。提升探险力与巡航飞船速度。",effects:["探险力 +X%","巡航飞船速度 +X%","星图发现概率"]},wisdom:{key:"wisdom",name:"智慧",enName:"Wisdom",color:"fuchsia",hex:"#e879f9",glow:"rgba(232,121,249,0.55)",icon:"Brain",desc:"谐振的回声唯有智者能解。强化解码与洞见。",effects:["解码步数 +X","洞见产出 +X%","自动解码周期 -X%"]},courage:{key:"courage",name:"勇气",enName:"Courage",color:"amber",hex:"#fbbf24",glow:"rgba(251,191,36,0.55)",icon:"Swords",desc:"直面虚空者,虚空亦为之让路。增益战斗与护盾。",effects:["探险生命 +X","BOSS 战胜率 +X%","巡航护盾 +X"]},inspiration:{key:"inspiration",name:"灵感",enName:"Inspiration",color:"rose",hex:"#fb7185",glow:"rgba(251,113,133,0.55)",icon:"Sparkles",desc:"在不期而至的回响之间,照见更高的维度。",effects:["接触率 +X","星潮触发概率 +X%","脉冲连击加成 +X%"]}},eh=["exploration","wisdom","courage","inspiration"];function ef(e){let t=Math.max(0,Math.min(100,e));return t<=50?.005*t:.25+(t-50)*.002}function em(e){let t=e.exploration??0,s=e.wisdom??0,r=e.courage??0,a=e.inspiration??0;return{expeditionPowerMult:1+ef(t),cruiseShipSpeedMult:1+.6*ef(t),decodeStepsBonus:Math.floor(.1*s),insightMultAdd:ef(s),autoDecodeIntervalMult:1-Math.min(.5,.004*s),expeditionHpBonus:Math.round(2*r),bossWinRateBonus:Math.min(.3,.003*r),cruiseShieldBonus:Math.round(+r),contactRateMult:1+ef(a),tideTriggerBonus:Math.min(.3,.003*a),pulseComboBonus:.005*Math.max(0,Math.min(100,a)),crystalsPerSecMult:1+.4*ef(t)+.2*ef(a)}}function ep(e){return Math.max(10,10*Math.max(0,e))}function ex(e,t=100){let{exp:s,level:r}=e,a=!1,n=0,i=0;for(;r=ep(r)&&i<200;)s-=ep(r),r+=1,a=!0,n+=1,i+=1;return r>=t&&(r=t),{leveledUp:a,levelsGained:n,newProgress:{exp:s,level:r}}}function eg(){return{exploration:{exp:0,level:0},wisdom:{exp:0,level:0},courage:{exp:0,level:0},inspiration:{exp:0,level:0}}}function eb(){return{exploration:0,wisdom:0,courage:0,inspiration:0}}function ey(e){let t,s,r=eb();return t=e.attributes&&"object"==typeof e.attributes?{exploration:ev(e.attributes.exploration),wisdom:ev(e.attributes.wisdom),courage:ev(e.attributes.courage),inspiration:ev(e.attributes.inspiration)}:r,e.attributeProgress&&"object"==typeof e.attributeProgress?(eg(),s={exploration:ew(e.attributeProgress.exploration,t.exploration),wisdom:ew(e.attributeProgress.wisdom,t.wisdom),courage:ew(e.attributeProgress.courage,t.courage),inspiration:ew(e.attributeProgress.inspiration,t.inspiration)}):s={exploration:{exp:0,level:t.exploration},wisdom:{exp:0,level:t.wisdom},courage:{exp:0,level:t.courage},inspiration:{exp:0,level:t.inspiration}},{attributes:t,attributeProgress:s,pendingAttrPoints:"number"==typeof e.pendingAttrPoints&&e.pendingAttrPoints>=0?Math.floor(e.pendingAttrPoints):0}}function ev(e){return Math.max(0,Math.min(100,Math.floor("number"==typeof e&&isFinite(e)?e:0)))}function ew(e,t){if(e&&"object"==typeof e){let s="number"==typeof e.exp&&isFinite(e.exp)&&e.exp>=0?e.exp:0;return"number"==typeof e.level&&isFinite(e.level)&&e.level>=0&&e.level,{exp:s,level:t}}return{exp:0,level:t}}function ej(e){let t=e.tech??{},s=e.blueprints?.length??0,r=W(e.achievements??{}),a=X(e.activeTide??null),n=Q(e.constellation??[]),i=R.crystalsPerSec,o=R.crystalCap,l=R.pulsePower,c=R.offlineEff,d=R.insightMult,u=1,h=!1,f=0;for(let e of I){let s=t[e.id]??0;if(!s)continue;let r=e.effect;switch(r.kind){case"crystalsPerSec":i+=r.value*s;break;case"crystalCap":o+=r.value*s;break;case"pulsePower":l+=r.value*s;break;case"offlineEff":c=Math.min(1,c+r.value*s);break;case"insightMult":d+=r.value*s;break;case"contactRate":u+=r.value*s;break;case"decodeSteps":f+=r.value*s;break;case"autoDecode":h=s>0}}t.min_2&&(o+=100),t.min_3&&(o+=300),t.min_4&&(o+=800),t.min_5&&(o+=2e3),t.nar_5&&(u+=.8);let m=n.perBlueprintAllStatsPct/100;i*=1+s*(F+m),d*=1+s*(z+m),u*=1+s*(V+m),i*=1+r.crystalsPerSecPct/100,d*=1+r.insightPct/100,i*=n.crystalsPerSecMult*n.allProductionMult,o*=n.crystalCapMult,l*=n.pulsePowerMult*n.allProductionMult,c=Math.min(1,c+n.offlineEffBonus),d+=n.insightMultAdd,u*=n.contactRateMult,f+=n.decodeStepsBonus,d+=a.insightMultAdd,u*=a.contactRateMult;let p=em(e.attributes??{});return i*=p.crystalsPerSecMult,d+=p.insightMultAdd,{crystalsPerSec:i,crystalCap:o,pulsePower:l,offlineEff:c,insightMult:d,contactRateMult:u*=p.contactRateMult,autoDecode:h,decodeStepsBonus:f+=p.decodeStepsBonus}}function ek(e){return Math.max(0,Math.min(6,Math.floor(e.totalDecoded/20))-e.blueprints.length)}function eN(){return{...R,tech:{},fragments:{},achievements:{},activeTide:null,lastTideEnd:Date.now(),pendingCrystals:[],activePuzzle:null,activeExpedition:null,expeditionLog:[],lastEnergyTick:Date.now(),createdAt:Date.now(),lastTick:Date.now(),attributes:{exploration:0,wisdom:0,courage:0,inspiration:0},attributeProgress:{exploration:{exp:0,level:0},wisdom:{exp:0,level:0},courage:{exp:0,level:0},inspiration:{exp:0,level:0}},pendingAttrPoints:0}}function eM(e,t,s){let r=A[e];return{crystals:r.crystals,insights:Math.ceil(r.insights*t),contact:+(.6*e*s).toFixed(2)}}function eS(e,t,s=0){let r,a=$[e],n=t??Math.floor(1e9*Math.random()),i=(r=n>>>0,()=>{r|=0;let e=Math.imul((r=r+0x6d2b79f5|0)^r>>>15,1|r);return(((e=e+Math.imul(e^e>>>7,61|e)^e)^e>>>14)>>>0)/0x100000000}),o=a.targetLen+s,l=a.stepLimitBase+s,c=a.rows,d=a.cols,u=c*d,h=[];for(let e=0;e{let t=Math.floor(e/d),s=e%d,r=[];return t>0&&r.push((t-1)*d+s),t0&&r.push(t*d+(s-1)),s!e.has(t));if(0===s.length){a=!1;break}r=s[Math.floor(i()*s.length)],e.add(r),t.push(r)}a&&(m=t)}m||(m=Array.from({length:h.length},(e,t)=>t));let p=new Map;m.forEach((e,t)=>p.set(e,h[t]));let x=[];for(let e=0;ei()?h[Math.floor(i()*h.length)]:D[Math.floor(i()*D.length)],x.push({id:r,row:e,col:t,color:s,used:!1})}return{tier:e,grid:x,rows:c,cols:d,target:h,path:[],stepLimit:l,seed:n}}function eT(e){let t=e.target.slice(e.path.length);if(0===t.length)return!0;let s=new Set(e.path),r=0===e.path.length?e.grid.filter(e=>!s.has(e.id)&&e.color===t[0]).map(e=>e.id):[e.path[e.path.length-1]],a=(r,n)=>{if(n>=t.length)return!0;let i=t[n];for(let t of(t=>{let s=e.grid.find(e=>e.id===t);if(!s)return[];let r=[];return s.row>0&&r.push((s.row-1)*e.cols+s.col),s.row0&&r.push(s.row*e.cols+(s.col-1)),s.cole.id===t);if(o&&o.color===i){if(0===n&&0===e.path.length){let t=e.grid.find(e=>e.id===r);if(!t||t.color!==i)continue}if(s.add(t),a(t,n+1))return!0;s.delete(t)}}return!1};for(let n of r)if(0===e.path.length){let r=e.grid.find(e=>e.id===n);if(!r||r.color!==t[0])continue;if(s.add(n),a(n,1))return!0;s.delete(n)}else if(a(n,0))return!0;return!1}let eC={combat:.3,treasure:.25,choice:.2,puzzle:.1,rest:.15,boss:0},eP={combat:{titles:["守卫残影","虚空巡游者","腐化无人机","以太守门人"],descs:["一道扭曲的残影拦住去路,它是被遗忘的守卫。","虚空巡游者在走廊游荡,感知到了你的存在。","腐化的自治无人机识别为入侵者,启动攻击协议。","以太守门人挡在门前,唯有将其击溃方可通过。"]},treasure:{titles:["遗失货舱","晶体宝库","遗物储藏室","谐振宝箱"],descs:["一扇半开的舱门后,散落着未及带走的晶体。","宝库的能量护盾早已失效,宝藏唾手可得。","储藏室里的容器还亮着微光,里面是珍贵的洞见核心。","一只谐振宝箱静静等候,似乎在等故人归来。"]},choice:{titles:["分岔甬道","低语祭坛","未知装置","回响之井"],descs:["甬道在此分岔,两条路都传来不同的低语。","祭坛上浮动着两团光,你必须选择其一。","未知装置闪烁着两个按钮,你不知道后果。","回响之井倒映出两种可能的未来。"]},puzzle:{titles:["封印之门","谐振锁","记忆机关","维度栅栏"],descs:["一道封印之门需要正确的谐振才能开启。","谐振锁闪烁着复杂的图案,解之有大奖。","记忆机关考验着你的解码技艺。","维度栅栏以谜题为钥,智者得通行。"]},rest:{titles:["休憩节点","能量泉眼","静默之厅","回响营地"],descs:["一处宁静的节点,可在此恢复生命。","能量泉眼涌出暖流,抚慰你的探险队。","静默之厅中,时间仿佛静止,伤痛缓缓消散。","前人留下的营地,尚有补给可用。"]},boss:{titles:["以太回响体","维度守护者","飞升残念","终焉之核"],descs:["路径尽头,以太回响体静静伫立——它是这个遗迹意志的化身。","维度守护者挡在最后,唯有超越它方能触及终焉。","飞升残念凝聚成形,它是以太族离去前留下的最后一道试炼。","终焉之核悬浮于大厅中央,接触它即完成本次探险。"]}};function e_(e,t){return Math.max(.35,Math.min(.95,e/(e+4*t)))}function eE(e,t=Math.random){let s=e.nodes[e.currentNode];if(!s)return{log:"无节点",ended:!0,endReason:"abort"};if(s.cleared){var r;return(r=e).currentNode>=r.nodes.length-1?{log:"探险已完成",ended:!0,endReason:"victory"}:(r.currentNode++,{log:`前进至节点 ${r.currentNode+1}`,ended:!1})}let a=e.power,n=s.difficulty;switch(s.type){case"combat":{let r=e_(a,n);if(t()t()){let e=6+5*n+Math.floor(8*t());return s.cleared=!0,{log:`在「${s.title}」做出了明智的选择,获得 ${e} 晶体。`,crystals:e,ended:!1}}let e=8+5*n;return s.cleared=!0,{log:`在「${s.title}」的选择带来了代价,损失 ${e} 生命。`,hpDelta:-e,ended:!1}}case"boss":{let r=e_(a,n),i=t()=50?.15+(Math.min(100,s)-50)*.003:.003*s)))}let eA={routine:{label:"常规信标",color:"#34d399",glow:"rgba(52,211,153,0.45)",mult:1,icon:"◍"},anomaly:{label:"异常波动",color:"#fbbf24",glow:"rgba(251,191,36,0.45)",mult:1.6,icon:"◈"},singular:{label:"奇点回响",color:"#f43f5e",glow:"rgba(244,63,94,0.5)",mult:2.4,icon:"✶"}},e$={decode:{label:"解码协议",icon:"❖",unit:"颗",verb:"解码记忆晶体"},expedition:{label:"远征指令",icon:"⬢",unit:"次",verb:"完成遗迹探险"},pulse:{label:"脉冲任务",icon:"✺",unit:"次",verb:"发起脉冲扫描"},boss:{label:"猎杀契约",icon:"☠",unit:"处",verb:"击破维度 BOSS"},insight:{label:"洞见采集",icon:"✦",unit:"点",verb:"累计获取洞见"}};function eD(e=new Date){let t=e.getUTCFullYear(),s=String(e.getUTCMonth()+1).padStart(2,"0"),r=String(e.getUTCDate()).padStart(2,"0");return`${t}-${s}-${r}`}function eB(e){let t=e>>>0;return()=>{t|=0;let e=Math.imul((t=t+0x6d2b79f5|0)^t>>>15,1|t);return(((e=e+Math.imul(e^e>>>7,61|e)^e)^e>>>14)>>>0)/0x100000000}}function eI(e=new Date){let t=eD(e),s=function(e){let t=0x811c9dc5;for(let s=0;s>>0;return t>>>0}(t),r=eB(s),a=["decode","expedition","pulse","boss","insight"],n=a[Math.floor(r()*a.length)],i=r(),o=i<.55?"routine":i<.88?"anomaly":"singular",l=eA[o].mult,c=0,d=0,u=0,h="",f="";switch(n){case"decode":d=Math.round(4*(c=Math.round((6+Math.floor(10*r()))*l))*l),u=.8*c,h=`解码 ${c} 颗记忆晶体`,f=`深空信标要求解码 ${c} 颗晶体。谐振风暴期间效率更高。`;break;case"expedition":d=Math.round(12*(c=Math.max(1,Math.round((1+Math.floor(3*r()))*l)))*l),u=1.5*c,h=`完成 ${c} 次遗迹探险`,f=`派出探险队完成 ${c} 次远征,无论胜负均计入。`;break;case"pulse":d=Math.round(1.2*(c=Math.round((20+Math.floor(30*r()))*l))*l),u=.3*c,h=`发起 ${c} 次脉冲扫描`,f=`主动点击晶体发起 ${c} 次脉冲。连击可叠加加成。`;break;case"boss":d=Math.round(30*(c=Math.max(1,Math.round(l)))*l),u=3*c,h=`击破 ${c} 处维度 BOSS`,f=`在探险终点击破 ${c} 处 BOSS。提升探险力后再挑战。`;break;case"insight":c=Math.round((40+Math.floor(80*r()))*l),d=0,u=.1*c,h=`累计获取 ${c} 洞见`,f=`通过解码、探险、星潮等途径累计 ${c} 洞见。`}return{dateKey:t,type:n,difficulty:o,goal:c,rewardInsight:d,rewardContact:u,seed:s,title:h,desc:f}}function eL(e,t,s){let r=Math.min(1,t/e.goal),a=eA[e.difficulty].mult,n=r>=1&&s>0?Math.max(0,500-.5*s):0;return Math.round(1e3*r*a+n)}let eO="echo-nexus-beacon-lb-v1",eF="echo-nexus-beacon-prog-v1";function ez(){if("u"t.score-e.score).slice(0,20)}catch{return[]}}function eV(e){let t=ez();t.push(e),t.sort((e,t)=>t.score-e.score);let s=t.slice(0,20);return"u">typeof localStorage&&localStorage.setItem(eO,JSON.stringify(s)),s}function eH(e=new Date){let t=eD(e);if("u"typeof localStorage&&localStorage.setItem(eF,JSON.stringify(e))}function eW(e){let t=Math.max(0,Math.floor(e/1e3)),s=String(Math.floor(t/3600)).padStart(2,"0"),r=String(Math.floor(t%3600/60)).padStart(2,"0"),a=String(t%60).padStart(2,"0");return`${s}:${r}:${a}`}let eq="echo-nexus-beacon-weekly-v1";function eK(e=new Date){let t=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())),s=(t.getUTCDay()+6)%7;t.setUTCDate(t.getUTCDate()-s+3);let r=t.getUTCFullYear(),a=Date.UTC(r,0,1),n=Math.ceil(((t.getTime()-a)/864e5+1)/7);return`${r}-W${String(n).padStart(2,"0")}`}function eX(e=new Date){let t=eK(e),s=function(e){let t=0x811c9dc5;for(let s=0;s>>0;return t>>>0}(t),r=eB(s),a=["decode","expedition","pulse","boss","insight"],n=a[Math.floor(r()*a.length)],i=.6>r()?"anomaly":"singular",o=eA[i].mult,l=3+Math.floor(3*r()),c=0,d=0,u=0,h="",f="";switch(n){case"decode":d=Math.round(5*(c=Math.max(18,Math.round((6+Math.floor(10*r()))*o*l)))*o),u=1.2*c,h=`周界解码 \xb7 ${c} 颗晶体`,f=`本周深空信标要求解码 ${c} 颗记忆晶体,强度为日挑战的 ${l} 倍。`;break;case"expedition":d=Math.round(14*(c=Math.max(3,Math.round((1+Math.floor(3*r()))*o*l)))*o),u=2*c,h=`周界远征 \xb7 ${c} 次探险`,f=`本周派出探险队完成 ${c} 次远征,无论胜负均计入。`;break;case"pulse":d=Math.round(1.5*(c=Math.max(60,Math.round((20+Math.floor(30*r()))*o*l)))*o),u=.4*c,h=`周界脉冲 \xb7 ${c} 次扫描`,f=`本周发起 ${c} 次脉冲扫描。连击可叠加加成。`;break;case"boss":d=Math.round(35*(c=Math.max(3,Math.round(l*o)))*o),u=4*c,h=`周界猎杀 \xb7 ${c} 处 BOSS`,f=`本周在探险终点击破 ${c} 处维度 BOSS。提升探险力后再挑战。`;break;case"insight":c=Math.max(120,Math.round((40+Math.floor(80*r()))*o*l)),d=0,u=.15*c,h=`周界洞见 \xb7 ${c} 点`,f=`本周通过解码、探险、星潮等途径累计 ${c} 洞见。`}return{weekKey:t,type:n,difficulty:i,goal:c,rewardInsight:d,rewardContact:u,seed:s,title:h,desc:f}}function eY(e=new Date){let t=eK(e),s={weekKey:t,progress:0,startedAt:Date.now(),completedAt:null,claimed:!1,durationSec:0};if("u"typeof localStorage&&localStorage.setItem(eq,JSON.stringify(e))}let eJ="echo-nexus-beacon-chain-v1",eZ=[3,7,14,30],eQ=[{milestone:3,rewardInsight:50,rewardContact:5,label:"三日谐振"},{milestone:7,rewardInsight:120,rewardContact:12,label:"七日回响"},{milestone:14,rewardInsight:280,rewardContact:28,label:"半月星潮"},{milestone:30,rewardInsight:680,rewardContact:68,label:"满月飞升"}];function e0(){let e=()=>({lastCompletedDateKey:"",currentStreak:0,longestStreak:0,totalCompletions:0,graceUsed:0,milestonesClaimed:[]});if("u"typeof localStorage&&localStorage.setItem(eJ,JSON.stringify(e))}function e2(e){let[t,s,r]=e.split("-").map(Number);return Date.UTC(t,s-1,r,0,0,0)}function e5(e){for(let t of eZ)if(e>>0;return t>>>0}(t),r=eB(s),a=function(e){let t=e.match(/^timed_(\d{4})-(\d{2})-(\d{2})_(\d{2})$/);if(!t)return Date.now();let[,s,r,a,n]=t;return Date.UTC(Number(s),Number(r)-1,Number(a),Number(n),0,0)}(t)+144e5,n=["decode","expedition","pulse","boss","insight"],i=n[Math.floor(r()*n.length)],o="routine",l=eA[o].mult,c=.3+.2*r(),d=0,u=0,h=0,f="",m="";switch(i){case"decode":u=Math.round(3*(d=Math.max(2,Math.round((6+Math.floor(10*r()))*l*c)))*l),h=.6*d,f=`限时解码 ${d} 颗晶体`,m=`4 小时内解码 ${d} 颗记忆晶体。短周期,快速完成。`;break;case"expedition":u=Math.round(9*(d=Math.max(1,Math.round((1+Math.floor(3*r()))*l*c)))*l),h=1.2*d,f=`限时远征 ${d} 次探险`,m=`4 小时内完成 ${d} 次遗迹探险。`;break;case"pulse":u=Math.round((d=Math.max(6,Math.round((20+Math.floor(30*r()))*l*c)))*l),h=.25*d,f=`限时脉冲 ${d} 次扫描`,m=`4 小时内发起 ${d} 次脉冲扫描。`;break;case"boss":u=Math.round(25*(d=Math.max(1,Math.round(l*c)))*l),h=2.5*d,f=`限时猎杀 ${d} 处 BOSS`,m=`4 小时内击破 ${d} 处维度 BOSS。`;break;case"insight":d=Math.max(12,Math.round((40+Math.floor(80*r()))*l*c)),u=0,h=.08*d,f=`限时洞见 ${d} 点`,m=`4 小时内累计获取 ${d} 洞见。`}return{slotKey:t,type:i,difficulty:o,goal:d,rewardInsight:u,rewardContact:h,seed:s,title:f,desc:m,expiresAt:a}}function e8(e=new Date){let t=e4(e),s={slotKey:t,progress:0,startedAt:Date.now(),completedAt:null,claimed:!1,durationSec:0};if("u"typeof localStorage&&localStorage.setItem(e3,JSON.stringify(e))}let te="echo-nexus-beacon-cloud-last-submit-v1",tt="/api/leaderboard?XTransformPort=3030";function ts(){if("u"=1&&function(e){if("u">typeof localStorage)try{localStorage.setItem(te,String(e))}catch{}}(e.timestamp),s?.rank??-1}catch{return -1}}let tn=null;function ti(){let e=tn;return tn=null,e}function to(e){let t=ej(e);return{crystalsPerSec:t.crystalsPerSec,crystalCap:t.crystalCap,pulsePower:t.pulsePower,offlineEff:t.offlineEff,insightMult:t.insightMult,contactRateMult:t.contactRateMult,autoDecode:t.autoDecode,decodeStepsBonus:t.decodeStepsBonus}}function tl(e,t){let s={dailyJustCompleted:!1,timedJustCompleted:!1,weeklyJustCompleted:!1,newChainMilestones:[]};try{let r=eI();if(r.type===e){let e=eH();if(null===e.completedAt){let a,n,i,o,l,{justCompleted:c}=(a=Math.min(r.goal,e.progress+t),i=(n=null===e.completedAt&&a>=r.goal)?Date.now():e.completedAt,o=null!==i?Math.floor((i-e.startedAt)/1e3):e.durationSec,l={...e,progress:a,completedAt:i,durationSec:o},eU(l),{progress:l,justCompleted:n});if(s.dailyJustCompleted=c,c){let{newMilestones:e}=function(e){let t,s=e0();if(s.lastCompletedDateKey===e)return{state:s,newMilestones:[]};if(""===s.lastCompletedDateKey)t={...s,lastCompletedDateKey:e,currentStreak:1,longestStreak:Math.max(s.longestStreak,1),totalCompletions:s.totalCompletions+1};else{var r;let a=(r=s.lastCompletedDateKey,r&&e?Math.round((e2(e)-e2(r))/864e5):Number.MAX_SAFE_INTEGER);if(1===a){let r=s.currentStreak+1;t={...s,lastCompletedDateKey:e,currentStreak:r,longestStreak:Math.max(s.longestStreak,r),totalCompletions:s.totalCompletions+1}}else if(2===a&&s.graceUsed<1){let r=s.currentStreak+1;t={...s,lastCompletedDateKey:e,currentStreak:r,longestStreak:Math.max(s.longestStreak,r),totalCompletions:s.totalCompletions+1,graceUsed:s.graceUsed+1}}else t={...s,lastCompletedDateKey:e,currentStreak:1,totalCompletions:s.totalCompletions+1,graceUsed:0,longestStreak:Math.max(s.longestStreak,1)}}let a=[];for(let e of eZ)t.currentStreak>=e&&!t.milestonesClaimed.includes(e)&&a.push(e);return e1(t),{state:t,newMilestones:a}}(eD());s.newChainMilestones=e}}}let a=e7();if(a.type===e){let e=e8();if(null===e.completedAt){let r,n,i,o,l,{justCompleted:c}=(r=Math.min(a.goal,e.progress+t),i=(n=null===e.completedAt&&r>=a.goal)?Date.now():e.completedAt,o=null!==i?Math.floor((i-e.startedAt)/1e3):e.durationSec,l={...e,progress:r,completedAt:i,durationSec:o},e6(l),{progress:l,justCompleted:n});s.timedJustCompleted=c}}let n=eX();if(n.type===e){let e=eY();if(null===e.completedAt){let r,a,i,o,l,{justCompleted:c}=(r=Math.min(n.goal,e.progress+t),i=(a=null===e.completedAt&&r>=n.goal)?Date.now():e.completedAt,o=null!==i?Math.floor((i-e.startedAt)/1e3):e.durationSec,l={...e,progress:r,completedAt:i,durationSec:o},eG(l),{progress:l,justCompleted:a});s.weeklyJustCompleted=c}}return s}catch{return s}}function tc(e){let t=[];for(let s of O)!e.fragments[s.id]&&e.totalDecoded>=s.threshold&&(e.fragments[s.id]=!0,t.push(s.id));return t}let td=(a?P(a):P)((n=(e,t)=>({...eN(),_lastAutoDecode:Date.now(),_lastSpawn:Date.now(),_combo:0,_lastPulse:0,_achievementQueue:[],_tideEvents:[],globalTide:null,init:()=>{let s=t(),r=Date.now(),a=s.activePuzzle;if(a&&!eT(a)){let t={id:`c_${r}_rec`,tier:a.tier,value:A[a.tier].crystals,createdAt:r};a=null,e({pendingCrystals:[...s.pendingCrystals,t].slice(-6)})}let n=s.achievements??{},i=s.activeTide??null,o=s.constellation??[],l=s.pendingPerkChoices??null,c={chronicle:Array.isArray(s.chronicle)?s.chronicle:[],runStart:s.runStart||{timestamp:s.createdAt||Date.now(),techsUnlocked:Object.keys(s.tech||{}).length,expeditionsCompleted:s.totalExpeditions||0,bossKills:s.bossKills||0,starTidesEncountered:[...s.starTidesEncountered||[]],crystalsDecoded:s.totalDecoded||0},bossKills:"number"==typeof s.bossKills?s.bossKills:0,starTidesEncountered:Array.isArray(s.starTidesEncountered)?s.starTidesEncountered:[]},d=ey(s),u=Q(o),h=R.energyMax+u.energyMaxBonus,f=s.lastTideEnd??0,m=i&&i.endsAt>r?i:null,p=Math.max(0,(r-s.lastTick)/1e3);if(p>5){let t=Math.min(p,28800),i=s.crystalsPerSec*t*s.offlineEff,u=s.crystals,x=Math.min(s.crystalCap,s.crystals+i);tn={elapsedSec:t,rawElapsedSec:p,gain:x-u,rate:s.crystalsPerSec,eff:s.offlineEff,capped:p>28800,crystalsBefore:u,crystalsAfter:x,crystalCap:s.crystalCap},window.dispatchEvent(new CustomEvent("echo-nexus-offline-report")),e({crystals:x,lastTick:r,activePuzzle:a,achievements:n,activeTide:m,lastTideEnd:f,constellation:o,pendingPerkChoices:l,energyMax:h,chronicle:c.chronicle,runStart:c.runStart,bossKills:c.bossKills,starTidesEncountered:c.starTidesEncountered,attributes:d.attributes,attributeProgress:d.attributeProgress,pendingAttrPoints:d.pendingAttrPoints,...to({tech:s.tech,blueprints:s.blueprints,achievements:n,activeTide:m,constellation:o,attributes:d.attributes})})}else e({lastTick:r,activePuzzle:a,achievements:n,activeTide:m,lastTideEnd:f,constellation:o,pendingPerkChoices:l,energyMax:h,chronicle:c.chronicle,runStart:c.runStart,bossKills:c.bossKills,starTidesEncountered:c.starTidesEncountered,attributes:d.attributes,attributeProgress:d.attributeProgress,pendingAttrPoints:d.pendingAttrPoints,...to({tech:s.tech,blueprints:s.blueprints,achievements:n,activeTide:m,constellation:o,attributes:d.attributes})})},loadOnline:()=>{let s=t();e({...to({tech:s.tech,blueprints:s.blueprints,achievements:s.achievements,activeTide:s.activeTide,constellation:s.constellation,attributes:s.attributes})})},hardReset:()=>{e({...eN(),_lastAutoDecode:Date.now(),_lastSpawn:Date.now(),_combo:0,_lastPulse:0,_achievementQueue:[],_tideEvents:[],globalTide:null})},tickTide:s=>{let r=t();if(r.globalTide){if(s>=r.globalTide.endsAt){let t=r.globalTide.type,a=0;"silence"===t&&(a=Y({type:t,startedAt:r.globalTide.startedAt,endsAt:r.globalTide.endsAt,id:r.globalTide.id}));let n={ended:t,isGlobal:!0};return a>0&&(n.silenceCompensation=a),e({globalTide:null,activeTide:null,lastTideEnd:s,insights:r.insights+a,...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:null,constellation:r.constellation,attributes:r.attributes}),_tideEvents:[...r._tideEvents,n]}),n}return null}let a=r.activeTide,n=Q(r.constellation??[]),i=Math.min(.3,em(r.attributes??{}).tideTriggerBonus),o=Math.max(15e3,(4e4+1e3*n.tideGapDeltaSec)*(1-i));if(a&&s>=a.endsAt){let t=a.type,n=0;"silence"===a.type&&(n=Y(a));let i=r.insights+n,o={ended:t};return n>0&&(o.silenceCompensation=n),e({activeTide:null,lastTideEnd:s,insights:i,...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:null,constellation:r.constellation,attributes:r.attributes}),_tideEvents:[...r._tideEvents,o]}),o}if(!a&&s-r.lastTideEnd>=(0===r.lastTideEnd||r.lastTideEnd<=r.createdAt+1e3?3e4:o)){let t=function(e=Math.random){let t=Object.values(K).reduce((e,t)=>e+t,0),s=e()*t;for(let e of Object.keys(K))if((s-=K[e])<=0)return e;return"crystal"}(),a={id:`tide_${s}_${Math.random().toString(36).slice(2,7)}`,type:t,startedAt:s,endsAt:s+75e3},n={started:t},i=r.starTidesEncountered??[],o=`tide_${t}`;return e({activeTide:a,starTidesEncountered:i.includes(o)?i:[...i,o],...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:a,constellation:r.constellation,attributes:r.attributes}),_tideEvents:[...r._tideEvents,n]}),n}return null},consumeTideEvents:()=>{let s=t();if(0===s._tideEvents.length)return[];let r=s._tideEvents;return e({_tideEvents:[]}),r},triggerGlobalTide:s=>{let r=t(),a=Date.now(),n=`global_tide_${a}_${Math.random().toString(36).slice(2,7)}`,i={id:n,type:s,startedAt:a,endsAt:a+6e4},o=r.starTidesEncountered??[],l=`tide_${s}`;e({globalTide:{type:s,startedAt:a,endsAt:a+6e4,id:n},activeTide:i,starTidesEncountered:o.includes(l)?o:[...o,l],...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:i,constellation:r.constellation,attributes:r.attributes}),_tideEvents:[...r._tideEvents,{started:s,isGlobal:!0}]})},tick:s=>{let r=t(),a=Math.max(0,(s-r.lastTick)/1e3);if(a<=0)return;let n=X(r.activeTide),i=r.crystalsPerSec*n.crystalsPerSecMult,o=r.crystals>=r.crystalCap?r.crystals:Math.min(r.crystalCap,r.crystals+i*a),l=1+.03*r.blueprints.length,c=r.pendingCrystals,d=r._lastSpawn;if(s-d>8/l*1e3&&c.length<6){let e=function(e,t=Math.random){if(e<=0)return function(e=Math.random){let t=e();return t<.7?1:t<.95?2:3}(t);let s=t(),r=Math.min(.5,e),a=.7-.7*r;return s{let s=t(),r=Date.now(),a=1;r-s._lastPulse<1500&&(a=Math.min(10,s._combo+1));let n=1+(a-1)*.15,i=X(s.activeTide),o=1+em(s.attributes??{}).pulseComboBonus*Math.max(0,a-1),l=s.pulsePower*n*i.pulsePowerMult*o;if(e({crystals:Math.min(s.crystalCap,s.crystals+l),_combo:a,_lastPulse:r}),tl("pulse",1),a>=3){let t=1+Math.floor(a/2),r=ex({exp:(s.attributeProgress?.inspiration??{exp:0,level:s.attributes?.inspiration??0}).exp+t,level:s.attributes?.inspiration??0},100),n={...s.attributes??eb(),inspiration:r.newProgress.level};e({attributes:n,attributeProgress:{...s.attributeProgress??eg(),inspiration:r.newProgress},...to({tech:s.tech,blueprints:s.blueprints,achievements:s.achievements,activeTide:s.activeTide,constellation:s.constellation,attributes:n})})}return{gain:l,combo:a}},startDecode:s=>{let r=t(),a=r.pendingCrystals.find(e=>e.id===s);if(!a)return;let n=X(r.activeTide).targetLenBonus??0;e({activePuzzle:eS(a.tier,void 0,n),pendingCrystals:r.pendingCrystals.filter(e=>e.id!==s)})},clickNode:s=>{let r=t();if(!r.activePuzzle)return{ok:!1,finished:!1,failReason:"无活跃谜题"};let a=JSON.parse(JSON.stringify(r.activePuzzle)),n=function(e,t){let s=e.grid.find(e=>e.id===t);if(!s)return{ok:!1,finished:!1,failReason:"无效节点"};if(s.used)return{ok:!1,finished:!1,failReason:"节点已使用"};let r=e.path.length;if(s.color!==e.target[r])return{ok:!1,finished:!1,failReason:"谐振不匹配"};if(r>0){var a;if(a=e.grid.find(t=>t.id===e.path[r-1]),Math.abs(a.row-s.row)+Math.abs(a.col-s.col)!==1)return{ok:!1,finished:!1,failReason:"节点不相邻"}}return r>=e.stepLimit?{ok:!1,finished:!1,failReason:"步数耗尽"}:(s.used=!0,e.path.push(t),{ok:!0,finished:e.path.length>=e.target.length})}(a,s);if(n.ok){if(n.finished){let t=X(r.activeTide),s=Q(r.constellation??[]),n=eM(a.tier,r.insightMult,r.contactRateMult),i=t.decodeRewardMult*s.decodeRewardMult,o={crystals:Math.round(n.crystals*i),insights:Math.round(n.insights*i),contact:+(n.contact*i).toFixed(2)},l=r.totalDecoded+1,c=Math.min(100,r.contact+o.contact),d=r.insights+o.insights,u=r.crystals+o.crystals,h={...r,totalDecoded:l,fragments:{...r.fragments}},f=tc(h),m=2*a.tier,p=r.attributes??eb(),x=r.attributeProgress??eg(),g=ex({exp:(x.wisdom??{exp:0,level:p.wisdom}).exp+m,level:p.wisdom},100),b={...p,wisdom:g.newProgress.level},y={...x,wisdom:g.newProgress};return e({activePuzzle:null,crystals:u,insights:d,contact:c,totalDecoded:l,fragments:h.fragments,attributes:b,attributeProgress:y,...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:r.activeTide,constellation:r.constellation,attributes:b})}),tl("decode",1),tl("insight",o.insights),{ok:!0,finished:!0,failReason:f.join(",")||void 0}}let t=eT(a);return e({activePuzzle:a}),{ok:!0,finished:!1,solvable:t}}return n},undoStep:()=>{let s=t();if(!s.activePuzzle||0===s.activePuzzle.path.length)return;let r=JSON.parse(JSON.stringify(s.activePuzzle)),a=r.path.pop();if(void 0!==a){let e=r.grid.find(e=>e.id===a);e&&(e.used=!1)}e({activePuzzle:r})},retryPuzzle:()=>{let s=t();if(s.activePuzzle){var r;e({activePuzzle:eS((r=s.activePuzzle).tier,r.seed+1)})}},abandonPuzzle:()=>{let s=t();if(!s.activePuzzle)return;let r={id:`c_${Date.now()}_ret`,tier:s.activePuzzle.tier,value:A[s.activePuzzle.tier].crystals,createdAt:Date.now()};e({activePuzzle:null,pendingCrystals:[...s.pendingCrystals,r].slice(-6)})},autoDecodeTick:()=>{let s=t();if(!s.autoDecode)return;let r=Date.now(),a=Q(s.constellation??[]),n=em(s.attributes??{}),i=12e3+1e3*a.autoDecodeIntervalDeltaSec,o=X(s.activeTide).autoDecodeIntervalMult??1,l=Math.max(5e3,i*n.autoDecodeIntervalMult*o);if(r-s._lastAutoDecode1===e.tier);if(d<0&&s.tech?.dec_5&&(d=s.pendingCrystals.findIndex(e=>2===e.tier),c=2),d<0)return;let u=s.pendingCrystals[d],h=X(s.activeTide),f=eM(c,s.insightMult,s.contactRateMult),m=h.decodeRewardMult*a.decodeRewardMult,p={crystals:Math.round(f.crystals*m),insights:Math.round(f.insights*m),contact:+(f.contact*m).toFixed(2)},x=s.totalDecoded+1,g={...s,totalDecoded:x,fragments:{...s.fragments}};tc(g);let b=s.attributes??eb(),y=s.attributeProgress??eg(),v=ex({exp:(y.wisdom??{exp:0,level:b.wisdom}).exp+1,level:b.wisdom},100),w={...b,wisdom:v.newProgress.level},j={...y,wisdom:v.newProgress};e({pendingCrystals:s.pendingCrystals.filter(e=>e.id!==u.id),crystals:s.crystals+p.crystals,insights:s.insights+p.insights,contact:Math.min(100,s.contact+p.contact),totalDecoded:x,fragments:g.fragments,_lastAutoDecode:r,attributes:w,attributeProgress:j,...to({tech:s.tech,blueprints:s.blueprints,achievements:s.achievements,activeTide:s.activeTide,constellation:s.constellation,attributes:w})}),tl("decode",1),tl("insight",p.insights)},buyTech:s=>{let r=t(),a=I.find(e=>e.id===s);if(!a||(r.tech[s]??0)>=1||r.insights{let s,r,a,n,i=t();if(i.activeExpedition&&!i.activeExpedition.finished)return{ok:!1,reason:"已有进行中的探险"};if(i.energy<1)return{ok:!1,reason:"能量不足"};let o=X(i.activeTide),l=em(i.attributes??{}),c=(s=10,r=i.tech?.exp_1??0,a=i.tech?.exp_2??0,n=i.tech?.exp_3??0,s+=3*r+5*a+8*n+12*(i.tech?.exp_4??0)+25*(i.tech?.exp_5??0),Math.round(s*=(1+(i.blueprints?.length??0)*.08)*(1+(i.ascensions??0)*.15)*Q(i.constellation??[]).expeditionPowerMult)+o.expeditionPowerBonus),d=Math.round((100+(i.tech?.exp_2??0)*20+(i.tech?.exp_4??0)*30+(i.tech?.exp_5??0)*50+(i.ascensions??0)*10)*Q(i.constellation??[]).expeditionHpMult)+o.expeditionHpBonus;return e({activeExpedition:function(e,t,s){let r,a=(r=e>>>0,()=>{r|=0;let e=Math.imul((r=r+0x6d2b79f5|0)^r>>>15,1|r);return(((e=e+Math.imul(e^e>>>7,61|e)^e)^e>>>14)>>>0)/0x100000000}),n=5+Math.floor(3*a()),i=[];for(let e=0;ee+eC[t],0),r=e()*s;for(let e of t)if((r-=eC[e])<=0)return e;return"combat"}(a),r=eP[s],o=Math.floor(a()*r.titles.length);i.push({id:e,type:s,title:r.titles[o],desc:r.descs[o],cleared:!1,difficulty:t?3+Math.floor(3*a()):1+Math.floor(4*a()),position:e})}if("combat"===i[0].type||"boss"===i[0].type){i[0].type=.5>a()?"treasure":"rest";let e=eP[i[0].type];i[0].title=e.titles[0],i[0].desc=e.descs[0],i[0].difficulty=1}return{id:`exp_${e}_${Date.now()}`,nodes:i,currentNode:0,finished:!1,rewards:{crystals:0,insights:0,contact:0,fragments:[]},power:t,hp:s,maxHp:s,seed:e,startedAt:Date.now()}}(Math.floor(1e9*Math.random()),Math.round(c*l.expeditionPowerMult),d+l.expeditionHpBonus),energy:i.energy-1,totalExpeditions:i.totalExpeditions+1}),{ok:!0}},resolveCurrentNode:()=>{let s=t();if(!s.activeExpedition||s.activeExpedition.finished)return null;let r=JSON.parse(JSON.stringify(s.activeExpedition)),a=r.nodes[r.currentNode],n=a?.type==="boss",i=em(s.attributes??{}),o=X(s.activeTide).bossWinRateBonus??0,l=n?eE(r,()=>{let e=Math.random(),t=Math.min(.95,i.bossWinRateBonus+o);return e0?"+":""}${l.hpDelta}生命`:""].filter(Boolean).join(" "),timestamp:Date.now()},...s.expeditionLog].slice(0,30);l.ended&&(r.finished=!0);let m=s.lastExpeditionSummary??null;l.ended&&("victory"===l.endReason||"defeat"===l.endReason)&&(m={result:l.endReason,rewards:{...r.rewards},nodeCount:r.nodes.length,finishedAt:Date.now()});let p=s.bossKills??0,x=!1;l.ended&&"victory"===l.endReason&&a?.type==="boss"&&(p+=1,x=!0);let g=s.attributes??eb(),b=s.attributeProgress??eg(),y=!1,v=(a?.type==="combat"||a?.type==="boss")&&!l.ended,w=l.ended&&"victory"===l.endReason;if(v||x||w){let e=x?8:2,t=x?6:w?4:1,s=ex({exp:b.courage.exp+e,level:g.courage},100),r=ex({exp:b.exploration.exp+t,level:g.exploration},100);g={...g,courage:s.newProgress.level,exploration:r.newProgress.level},b={...b,courage:s.newProgress,exploration:r.newProgress},y=!0}return e({activeExpedition:l.ended?null:r,crystals:c,insights:d,contact:u,fragments:h,expeditionLog:f,bossKills:p,attributes:g,attributeProgress:b,lastExpeditionSummary:m,...y?to({tech:s.tech,blueprints:s.blueprints,achievements:s.achievements,activeTide:s.activeTide,constellation:s.constellation,attributes:g}):{}}),l.ended&&(tl("expedition",1),x&&tl("boss",1)),l.insights&&tl("insight",l.insights),l},advanceNode:()=>{let s=t();if(!s.activeExpedition||s.activeExpedition.finished)return;let r=JSON.parse(JSON.stringify(s.activeExpedition)),a=r.nodes[r.currentNode];a&&a.cleared&&(r.currentNode>=r.nodes.length-1||(r.currentNode++,e({activeExpedition:r})))},abortExpedition:()=>{let s=t();if(!s.activeExpedition)return;let r=JSON.parse(JSON.stringify(s.activeExpedition)),a={expeditionId:r.id,nodeType:"rest",result:"探险队主动撤退,保留已获奖励。",rewards:"",timestamp:Date.now()},n={result:"abort",rewards:{...r.rewards},nodeCount:r.nodes.length,finishedAt:Date.now()};e({activeExpedition:null,expeditionLog:[a,...s.expeditionLog].slice(0,30),lastExpeditionSummary:n})},dismissExpedition:()=>{let s=t();s.activeExpedition&&s.activeExpedition.finished&&e({activeExpedition:null})},doPrestige:()=>{let s,r,a,n,i,o,l,c,d,u,h,f,m,p,x=t();if(x.contact<100)return null;let g=ek(x),b=(s=ek(x),r=[...x.blueprints,...Array.from({length:s},(e,t)=>`bp_${Date.now()}_${t}`)].slice(0,6),a=ee(x.constellation??[]),n=Q(x.constellation??[]),i=function(e,t=[]){let s,r,a,n,i,o,l=e.ascensions+1,c=(s=Date.now(),{durationSec:Math.max(1,Math.floor((s-(r=e.runStart).timestamp)/1e3)),techsThisRun:Math.max(0,Object.keys(e.tech||{}).length-r.techsUnlocked),expThisRun:Math.max(0,e.totalExpeditions-r.expeditionsCompleted),bossKillsThisRun:Math.max(0,e.bossKills-r.bossKills),decodedThisRun:Math.max(0,e.totalDecoded-r.crystalsDecoded),newTides:(e.starTidesEncountered||[]).filter(e=>!(r.starTidesEncountered||[]).includes(e))}),d=e.createdAt+7919*l>>>0,u=(a=(l-1)%en.length,i=d%(n=en[a]).suffixes.length,`${n.prefix} \xb7 ${n.suffixes[i]}`),h=(o=[],1===e.ascensions+1&&o.push("首次飞升"),c.expThisRun>0&&0===e.runStart.expeditionsCompleted&&o.push("首次完成遗迹探险"),c.bossKillsThisRun>0&&o.push("首杀维度 BOSS"),c.decodedThisRun>=10&&o.push(`单周目解码 ${c.decodedThisRun} 颗`),c.decodedThisRun>=30&&o.push(`单周目解码 ${c.decodedThisRun} 颗`),c.techsThisRun>=5&&o.push("技术狂人"),c.newTides.length>=3&&o.push("星潮亲历者"),(e.constellation?.length||0)>=6&&o.push("星图六分"),(e.constellation?.length||0)>=12&&o.push("星图十二宫"),o),f=Math.min(e.blueprints.length+1,6),m=ed({ascensionNumber:l,epochName:u,durationSec:c.durationSec,techsThisRun:c.techsThisRun,expThisRun:c.expThisRun,bossKillsThisRun:c.bossKillsThisRun,decodedThisRun:c.decodedThisRun,newTides:c.newTides,perksThisAscension:t,blueprintsAfter:f,milestones:h});return{ascensionNumber:l,epochName:u,timestamp:Date.now(),durationSec:c.durationSec,summary:{techsUnlocked:Object.keys(e.tech||{}).length,constellationsTotal:e.constellation?.length||0,expeditionsCompleted:e.totalExpeditions,bossKills:e.bossKills,starTidesEncountered:e.starTidesEncountered?.length||0,blueprintsAfter:f,crystalsDecoded:e.totalDecoded,crystalsDecodedThisRun:c.decodedThisRun,techsThisRun:c.techsThisRun,expeditionsThisRun:c.expThisRun,bossKillsThisRun:c.bossKillsThisRun},perksThisAscension:t,tidesThisRun:c.newTides,lore:m,milestones:h}}(x,[]),o=[...x.chronicle||[],i].slice(-200),l={timestamp:Date.now(),techsUnlocked:Object.keys(x.tech||{}).length,expeditionsCompleted:x.totalExpeditions,bossKills:x.bossKills,starTidesEncountered:[...x.starTidesEncountered||[]],crystalsDecoded:x.totalDecoded},d=(c=ey(x)).attributes,u=eg(),h=2*(x.ascensions??0)+1,f=c.pendingAttrPoints+h,m=eN(),p=ej({tech:{},blueprints:r,achievements:x.achievements,constellation:x.constellation,attributes:d}),{...m,fragments:x.fragments,totalDecoded:x.totalDecoded,ascensions:x.ascensions+1,blueprints:r,achievements:x.achievements,constellation:x.constellation,pendingPerkChoices:a.length>0?a:null,crystals:n.prestigeStartCrystals,insights:n.prestigeStartInsights,theme:x.theme,soundOn:x.soundOn,createdAt:x.createdAt,lastTick:Date.now(),lastEnergyTick:Date.now(),expeditionLog:x.expeditionLog,totalExpeditions:x.totalExpeditions,bossKills:x.bossKills,starTidesEncountered:x.starTidesEncountered,chronicle:o,runStart:l,activeTide:null,lastTideEnd:Date.now(),attributes:d,attributeProgress:u,pendingAttrPoints:f,...p}),y=Q(b.constellation??[]),v=R.energyMax+y.energyMaxBonus;return e({...b,energyMax:v,...to({tech:b.tech,blueprints:b.blueprints,achievements:b.achievements,activeTide:b.activeTide,constellation:b.constellation,attributes:b.attributes}),_lastAutoDecode:Date.now(),_lastSpawn:Date.now(),_combo:0,_lastPulse:0,_tideEvents:[]}),{newBp:g}},chooseConstellationPerk:s=>{let r=t();if(!r.pendingPerkChoices||!r.pendingPerkChoices.includes(s)||!Z(s)||r.constellation?.includes(s))return!1;let a=[...r.constellation??[],s],n=Q(a),i=R.energyMax+n.energyMaxBonus,o=r.chronicle??[],l=o;if(o.length>0){let e=function(e,t){if(e.perksThisAscension.length===t.length&&e.perksThisAscension.every((e,s)=>e===t[s]))return e;let s=ed({ascensionNumber:e.ascensionNumber,epochName:e.epochName,durationSec:e.durationSec,techsThisRun:e.summary.techsThisRun??e.summary.techsUnlocked,expThisRun:e.summary.expeditionsThisRun??e.summary.expeditionsCompleted,bossKillsThisRun:e.summary.bossKillsThisRun??e.summary.bossKills,decodedThisRun:e.summary.crystalsDecodedThisRun,newTides:e.tidesThisRun||[],perksThisAscension:t,blueprintsAfter:e.summary.blueprintsAfter,milestones:e.milestones||[]});return{...e,perksThisAscension:t,lore:s}}(o[o.length-1],[s]);l=[...o.slice(0,-1),e]}return e({constellation:a,pendingPerkChoices:null,energyMax:i,chronicle:l,...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:r.activeTide,constellation:a,attributes:r.attributes})}),!0},rerollPerkChoices:()=>{let s=t();if(!s.pendingPerkChoices)return;let r=ee(s.constellation??[]);r.length>0&&e({pendingPerkChoices:r})},checkAchievements:()=>{let s=t(),r=[],a={...s.achievements},n=s.crystals,i=s.insights,o=s.contact,l=!1;for(let e of U)!a[e.id]&&e.check(s)&&(a[e.id]=!0,r.push(e),e.reward.crystals&&(n+=e.reward.crystals),e.reward.insights&&(i+=e.reward.insights),e.reward.contact&&(o=Math.min(100,o+e.reward.contact)),(e.reward.crystalsPerSecPct||e.reward.insightPct)&&(l=!0));return 0===r.length?[]:(e({achievements:a,crystals:n,insights:i,contact:o,...l?to({tech:s.tech,blueprints:s.blueprints,achievements:a,activeTide:s.activeTide,constellation:s.constellation,attributes:s.attributes}):{},_achievementQueue:[...s._achievementQueue,...r]}),r)},consumeAchievementQueue:()=>{let s=t();if(0===s._achievementQueue.length)return[];let r=s._achievementQueue;return e({_achievementQueue:[]}),r},canPrestige:()=>t().contact>=100,toggleTheme:()=>e({theme:"dark"===t().theme?"light":"dark"}),toggleSound:()=>e({soundOn:!t().soundOn}),grantBeaconReward:(s,r)=>{let a=t();e({insights:a.insights+Math.round(s),contact:Math.min(100,a.contact+r)})},claimWeeklyBeacon:()=>{let s=function(e,t){if(t.claimed||null===t.completedAt)return{rewardInsight:0,rewardContact:0,score:0,leaderboard:ez()};let s=eL({...e,dateKey:e.weekKey},t.progress,t.durationSec),r={timestamp:Date.now(),dateKey:e.weekKey,challenge:e.type,difficulty:e.difficulty,progress:t.progress/e.goal,score:s,durationSec:t.durationSec,isWeekly:!0},a=eV(r);return eG({...t,claimed:!0}),{rewardInsight:e.rewardInsight,rewardContact:e.rewardContact,score:s,leaderboard:a,entry:r}}(eX(),eY());if(s.rewardInsight>0||s.rewardContact>0){let r=t();e({insights:r.insights+Math.round(s.rewardInsight),contact:Math.min(100,r.contact+s.rewardContact)}),s.entry&&ta(s.entry)}return{rewardInsight:s.rewardInsight,rewardContact:s.rewardContact,score:s.score}},claimTimedBeacon:()=>{let s=function(e,t){if(t.claimed||null===t.completedAt)return{rewardInsight:0,rewardContact:0,score:0,leaderboard:ez()};let s=eL({...e,dateKey:e.slotKey},t.progress,t.durationSec),r={timestamp:Date.now(),dateKey:e.slotKey,challenge:e.type,difficulty:e.difficulty,progress:t.progress/e.goal,score:s,durationSec:t.durationSec,isTimed:!0},a=eV(r);return e6({...t,claimed:!0}),{rewardInsight:e.rewardInsight,rewardContact:e.rewardContact,score:s,leaderboard:a,entry:r}}(e7(),e8());if(s.rewardInsight>0||s.rewardContact>0){let r=t();e({insights:r.insights+Math.round(s.rewardInsight),contact:Math.min(100,r.contact+s.rewardContact)}),s.entry&&ta(s.entry)}return{rewardInsight:s.rewardInsight,rewardContact:s.rewardContact,score:s.score}},claimChainReward:s=>{let r=e0();if(r.currentStreakt.milestone===e),s=e0();if(!t||s.milestonesClaimed.includes(e)||s.currentStreak0||a.rewardContact>0){let s=t();e({insights:s.insights+Math.round(a.rewardInsight),contact:Math.min(100,s.contact+a.rewardContact)})}return{rewardInsight:a.rewardInsight,rewardContact:a.rewardContact,label:a.label,ok:a.rewardInsight>0||a.rewardContact>0}},grantCruiseReward:s=>{let r=t(),a=s.crystals??0,n=s.insights??0,i=s.contact??0,o=Math.max(2,Math.floor((a+10*n+10*i)/30)),l=r.attributes??eb(),c=r.attributeProgress??eg(),d=ex({exp:c.exploration.exp+o,level:l.exploration},100),u=ex({exp:c.courage.exp+Math.floor(.6*o),level:l.courage},100),h={...l,exploration:d.newProgress.level,courage:u.newProgress.level},f={...c,exploration:d.newProgress,courage:u.newProgress};e({crystals:Math.min(r.crystalCap,r.crystals+a),insights:r.insights+Math.round(n),contact:Math.min(100,r.contact+i),attributes:h,attributeProgress:f,...to({tech:r.tech,blueprints:r.blueprints,achievements:r.achievements,activeTide:r.activeTide,constellation:r.constellation,attributes:h})})},allocateAttribute:(s,r=1)=>{let a=t(),n=a.attributes??eb(),i=n[s]??0;if(i>=100||(a.pendingAttrPoints??0){let a=t(),n=a.attributes??eb(),i=a.attributeProgress??eg(),o=ex({exp:(i[s]??{exp:0,level:n[s]}).exp+r,level:n[s]},100),l={...n,[s]:o.newProgress.level};return e({attributes:l,attributeProgress:{...i,[s]:o.newProgress},...to({tech:a.tech,blueprints:a.blueprints,achievements:a.achievements,activeTide:a.activeTide,constellation:a.constellation,attributes:l})}),{leveledUp:o.levelsGained,newLevel:o.newProgress.level}}}),i={name:"echo-nexus-save-v1",storage:_(()=>localStorage),partialize:e=>{let{_lastAutoDecode:t,_lastSpawn:s,_combo:r,_lastPulse:a,_achievementQueue:n,_tideEvents:i,globalTide:o,...l}=e;return l}},(e,t,s)=>{let r,a={storage:_(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...i},o=!1,l=0,c=new Set,d=new Set,u=a.storage;if(!u)return n((...t)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),e(...t)},t,s);let h=()=>{let e=a.partialize({...t()});return u.setItem(a.name,{state:e,version:a.version})},f=s.setState;s.setState=(e,t)=>(f(e,t),h());let m=n((...t)=>(e(...t),h()),t,s);s.getInitialState=()=>m;let p=()=>{var s,n;if(!u)return;let i=++l;o=!1,c.forEach(e=>{var s;return e(null!=(s=t())?s:m)});let f=(null==(n=a.onRehydrateStorage)?void 0:n.call(a,null!=(s=t())?s:m))||void 0;return E(u.getItem.bind(u))(a.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===a.version)return[!1,e.state];else{if(a.migrate){let t=a.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(s=>{var n;if(i!==l)return;let[o,c]=s;if(e(r=a.merge(c,null!=(n=t())?n:m),!0),o)return h()}).then(()=>{i===l&&(null==f||f(r,void 0),r=t(),o=!0,d.forEach(e=>e(r)))}).catch(e=>{i===l&&(null==f||f(void 0,e))})};return s.persist={setOptions:e=>{a={...a,...e},e.storage&&(u=e.storage)},clearStorage:()=>{null==u||u.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>p(),hasHydrated:()=>o,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},a.skipHydration||p(),r||m}));var tu=e.i(75254);let th=(0,tu.default)("gem",[["path",{d:"M6 3h12l4 6-10 13L2 9Z",key:"1pcd5k"}],["path",{d:"M11 3 8 9l4 13 4-13-3-6",key:"1fcu3u"}],["path",{d:"M2 9h20",key:"16fsjt"}]]),tf=(0,tu.default)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]),tm=(0,tu.default)("waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]),tp=(0,tu.default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.i(74080);var tx=e.i(20783),tg=Symbol.for("react.lazy"),tb=M[" use ".trim().toString()];function ty(e){var t;return null!=e&&"object"==typeof e&&"$$typeof"in e&&e.$$typeof===tg&&"_payload"in e&&"object"==typeof(t=e._payload)&&null!==t&&"then"in t}function tv(e){var t;let s,r=(t=e,(s=M.forwardRef((e,t)=>{let{children:s,...r}=e;if(ty(s)&&"function"==typeof tb&&(s=tb(s._payload)),M.isValidElement(s)){var a;let e,n,i=(a=s,(n=(e=Object.getOwnPropertyDescriptor(a.props,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?a.ref:(n=(e=Object.getOwnPropertyDescriptor(a,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?a.props.ref:a.props.ref||a.ref),o=function(e,t){let s={...t};for(let r in t){let a=e[r],n=t[r];/^on[A-Z]/.test(r)?a&&n?s[r]=(...e)=>{let t=n(...e);return a(...e),t}:a&&(s[r]=a):"style"===r?s[r]={...a,...n}:"className"===r&&(s[r]=[a,n].filter(Boolean).join(" "))}return{...e,...s}}(r,s.props);return s.type!==M.Fragment&&(o.ref=t?(0,tx.composeRefs)(t,i):i),M.cloneElement(s,o)}return M.Children.count(s)>1?M.Children.only(null):null})).displayName=`${t}.SlotClone`,s),a=M.forwardRef((e,t)=>{let{children:s,...a}=e;ty(s)&&"function"==typeof tb&&(s=tb(s._payload));let n=M.Children.toArray(s),i=n.find(tk);if(i){let e=i.props.children,s=n.map(t=>t!==i?t:M.Children.count(e)>1?M.Children.only(null):M.isValidElement(e)?e.props.children:null);return(0,N.jsx)(r,{...a,ref:t,children:M.isValidElement(e)?M.cloneElement(e,void 0,s):null})}return(0,N.jsx)(r,{...a,ref:t,children:s})});return a.displayName=`${e}.Slot`,a}var tw=tv("Slot"),tj=Symbol("radix.slottable");function tk(e){return M.isValidElement(e)&&"function"==typeof e.type&&"__radixId"in e.type&&e.type.__radixId===tj}var tN=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{let s=tv(`Primitive.${t}`),r=M.forwardRef((e,r)=>{let{asChild:a,...n}=e;return"u">typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,N.jsx)(a?s:t,{...n,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),tM="Progress",[tS,tT]=function(e,t=[]){let s=[],r=()=>{let t=s.map(e=>M.createContext(e));return function(s){let r=s?.[e]||t;return M.useMemo(()=>({[`__scope${e}`]:{...s,[e]:r}}),[s,r])}};return r.scopeName=e,[function(t,r){let a=M.createContext(r);a.displayName=t+"Context";let n=s.length;s=[...s,r];let i=t=>{let{scope:s,children:r,...i}=t,o=s?.[e]?.[n]||a,l=M.useMemo(()=>i,Object.values(i));return(0,N.jsx)(o.Provider,{value:l,children:r})};return i.displayName=t+"Provider",[i,function(s,i){let o=i?.[e]?.[n]||a,l=M.useContext(o);if(l)return l;if(void 0!==r)return r;throw Error(`\`${s}\` must be used within \`${t}\``)}]},function(...e){let t=e[0];if(1===e.length)return t;let s=()=>{let s=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=s.reduce((t,{useScope:s,scopeName:r})=>{let a=s(e)[`__scope${r}`];return{...t,...a}},{});return M.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return s.scopeName=t.scopeName,s}(r,...t)]}(tM),[tC,tP]=tS(tM),t_=M.forwardRef((e,t)=>{var s,r;let{__scopeProgress:a,value:n=null,max:i,getValueLabel:o=tA,...l}=e;(i||0===i)&&!tB(i)&&console.error((s=`${i}`,`Invalid prop \`max\` of value \`${s}\` supplied to \`Progress\`. Only numbers greater than 0 are valid max values. Defaulting to \`100\`.`));let c=tB(i)?i:100;null===n||tI(n,c)||console.error((r=`${n}`,`Invalid prop \`value\` of value \`${r}\` supplied to \`Progress\`. The \`value\` prop must be: - a positive number - less than the value passed to \`max\` (or 100 if no \`max\` prop is set) - \`null\` or \`undefined\` if the progress is indeterminate. Defaulting to \`null\`.`));let d=tI(n,c)?n:null,u=tD(d)?o(d,c):void 0;return(0,N.jsx)(tC,{scope:a,value:d,max:c,children:(0,N.jsx)(tN.div,{"aria-valuemax":c,"aria-valuemin":0,"aria-valuenow":tD(d)?d:void 0,"aria-valuetext":u,role:"progressbar","data-state":t$(d,c),"data-value":d??void 0,"data-max":c,...l,ref:t})})});t_.displayName=tM;var tE="ProgressIndicator",tR=M.forwardRef((e,t)=>{let{__scopeProgress:s,...r}=e,a=tP(tE,s);return(0,N.jsx)(tN.div,{"data-state":t$(a.value,a.max),"data-value":a.value??void 0,"data-max":a.max,...r,ref:t})});function tA(e,t){return`${Math.round(e/t*100)}%`}function t$(e,t){return null==e?"indeterminate":e===t?"complete":"loading"}function tD(e){return"number"==typeof e}function tB(e){return tD(e)&&!isNaN(e)&&e>0}function tI(e,t){return tD(e)&&!isNaN(e)&&e<=t&&e>=0}tR.displayName=tE;var tL=e.i(75157);function tO({className:e,value:t,...s}){return(0,N.jsx)(t_,{"data-slot":"progress",className:(0,tL.cn)("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",e),...s,children:(0,N.jsx)(tR,{"data-slot":"progress-indicator",className:"bg-primary h-full w-full flex-1 transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})})}function tF({onPrestige:e}){let t=td(e=>e.crystals),s=td(e=>e.crystalsPerSec),r=td(e=>e.insights),a=td(e=>e.contact),n=td(e=>e.ascensions),i=td(e=>e.blueprints);return(0,N.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 sm:gap-x-4 px-3.5 py-2.5 rounded-2xl border border-white/10 bg-black/40 backdrop-blur-md",children:[(0,N.jsx)(tz,{icon:(0,N.jsx)(th,{className:"h-4 w-4 text-emerald-400"}),label:"记忆晶体",value:H(t),sub:`+${s.toFixed(1)}/s`,glow:"rgba(52,211,153,0.4)"}),(0,N.jsx)("div",{className:"h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"}),(0,N.jsx)(tz,{icon:(0,N.jsx)(tf,{className:"h-4 w-4 text-amber-400"}),label:"技术洞见",value:H(r),sub:"解码产出",glow:"rgba(251,191,36,0.4)"}),(0,N.jsx)("div",{className:"h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"}),(0,N.jsxs)("div",{className:"flex-1 min-w-[200px] flex flex-col gap-1.5",children:[(0,N.jsxs)("div",{className:"flex items-center gap-2",children:[(0,N.jsx)(tm,{className:"h-4 w-4 text-fuchsia-400 shrink-0"}),(0,N.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"接触进度"}),(0,N.jsxs)("span",{className:"text-xs font-mono font-semibold text-fuchsia-300 ml-auto tabular-nums",children:[a.toFixed(1),"%"]}),a>=100&&(0,N.jsx)("button",{onClick:e,className:"text-[10px] px-2 py-0.5 rounded-full bg-fuchsia-500/20 border border-fuchsia-400/50 text-fuchsia-200 hover:bg-fuchsia-500/30 transition animate-pulse whitespace-nowrap ml-1",children:"飞升"})]}),(0,N.jsx)(tO,{value:a,className:"h-1.5 bg-white/10 [&>div]:bg-gradient-to-r [&>div]:from-fuchsia-500 [&>div]:to-rose-400"})]}),(0,N.jsx)("div",{className:"h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"}),(0,N.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,N.jsx)(tp,{className:"h-4 w-4 text-rose-400 shrink-0"}),(0,N.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,N.jsx)("span",{className:"text-[10px] text-muted-foreground leading-none",children:"飞升"}),(0,N.jsxs)("div",{className:"flex items-baseline gap-1.5",children:[(0,N.jsx)("span",{className:"text-sm font-mono font-semibold leading-none",children:n}),(0,N.jsxs)("span",{className:"text-amber-300 text-xs leading-none",children:["×",i.length]})]})]})]})]})}function tz({icon:e,label:t,value:s,sub:r,glow:a}){return(0,N.jsxs)("div",{className:"flex items-center gap-2.5",style:{filter:`drop-shadow(0 0 6px ${a})`},children:[e,(0,N.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,N.jsx)("span",{className:"text-[10px] text-muted-foreground leading-none",children:t}),(0,N.jsxs)("div",{className:"flex items-baseline gap-1.5",children:[(0,N.jsx)("span",{className:"text-sm font-mono font-semibold leading-none tabular-nums",children:s}),(0,N.jsx)("span",{className:"text-[10px] text-muted-foreground/80 whitespace-nowrap",children:r})]})]})]})}var tV=e.i(37902),tH=e.i(74911);let tU={emerald:523.25,rose:587.33,amber:659.25,fuchsia:698.46};class tW{ctx=null;master=null;enabled=!0;volume=.35;ensure(){if(!this.ctx){let e=window.AudioContext||window.webkitAudioContext;if(!e)return null;this.ctx=new e,this.master=this.ctx.createGain(),this.master.gain.value=this.volume,this.master.connect(this.ctx.destination)}return"suspended"===this.ctx.state&&this.ctx.resume(),this.ctx}setEnabled(e){this.enabled=e}setVolume(e){this.volume=Math.max(0,Math.min(1,e)),this.master&&(this.master.gain.value=this.volume)}tone(e,t,s="sine",r=.3,a=0,n=0,i){let o=this.ensure();if(!o||!this.master)return;let l=o.currentTime+a,c=o.createOscillator(),d=o.createGain();if(c.type=s,c.frequency.setValueAtTime(e,l),n&&c.detune.setValueAtTime(n,l),d.gain.setValueAtTime(0,l),d.gain.linearRampToValueAtTime(r,l+.008),d.gain.exponentialRampToValueAtTime(1e-4,l+t),i){let e=o.createBiquadFilter();e.type="lowpass",e.frequency.value=i,c.connect(e),e.connect(d)}else c.connect(d);d.connect(this.master),c.start(l),c.stop(l+t+.05)}sweep(e,t,s,r="sine",a=.3,n=0){let i=this.ensure();if(!i||!this.master)return;let o=i.currentTime+n,l=i.createOscillator(),c=i.createGain();l.type=r,l.frequency.setValueAtTime(e,o),l.frequency.exponentialRampToValueAtTime(Math.max(1,t),o+s),c.gain.setValueAtTime(0,o),c.gain.linearRampToValueAtTime(a,o+.02),c.gain.exponentialRampToValueAtTime(1e-4,o+s),l.connect(c),c.connect(this.master),l.start(o),l.stop(o+s+.05)}noise(e,t=.2,s=0,r=1200){let a=this.ensure();if(!a||!this.master)return;let n=a.currentTime+s,i=Math.floor(a.sampleRate*e),o=a.createBuffer(1,i,a.sampleRate),l=o.getChannelData(0);for(let e=0;e=5?t1:e>=3?tQ:tZ}function t5(){let e=td(e=>e.pulse),t=td(e=>e.crystals),s=td(e=>e.crystalsPerSec),r=td(e=>e.crystalCap),a=td(e=>e._combo),{toast:n}=(0,tH.useToast)(),[i,o]=(0,M.useState)([]),l=(0,M.useRef)(0),c=(0,M.useRef)(null),d=(0,M.useRef)(null);(0,M.useRef)(0);let[u,h]=(0,M.useState)(0),f=(0,M.useRef)([]),m=(0,M.useRef)([]),p=(0,M.useRef)([]),x=(0,M.useRef)([]),g=(0,M.useRef)(a),b=(0,M.useRef)(0),y=(0,M.useRef)(t),v=(0,M.useRef)(r);(0,M.useEffect)(()=>{g.current=a,y.current=t,v.current=r},[a,t,r]);let w=(0,M.useRef)({x:0,y:0,inside:!1}),j=(0,M.useCallback)((e,t)=>{let s=.28*Math.min(e,t),r=[];[{count:14,rMul:.95,speed:.6,color:tZ},{count:10,rMul:1.15,speed:-.4,color:tQ},{count:8,rMul:1.35,speed:.3,color:t0}].forEach(e=>{for(let t=0;t{let r=t2(s.combo),a=performance.now();p.current.push({born:a,color:tZ,maxRadius:140,duration:700}),s.combo>=3&&p.current.push({born:a+100,color:tQ,maxRadius:170,duration:800}),s.combo>=5&&p.current.push({born:a+200,color:t1,maxRadius:200,duration:900});let n=10+2*Math.min(10,s.combo);for(let s=0;s{e.radius=e.baseRadius*(1.25+.15*Math.random())})},[]),S=(0,M.useCallback)(t=>{let s=e();if(!s)return;let r=t.currentTarget.getBoundingClientRect(),a=t.clientX-r.left,i=t.clientY-r.top,c=l.current++,d=t2(s.combo);if(o(e=>[...e,{id:c,x:a,y:i,text:`+${s.gain.toFixed(1)}`,born:Date.now(),color:d}]),k(a,i,s),h(e=>e+1),tX(s.combo>=3?"pulseCombo":"pulse",{combo:s.combo}),setTimeout(()=>{o(e=>e.filter(e=>e.id!==c))},900),s.combo>=5&&s.combo%5==0){let e=tJ(tY,.6);n({title:`\xd7${s.combo} 连击!`,description:e?`「${e}」`:"谐振叠加,产能飙升。"})}else if(s.combo>=3&&s.combo%3==0){let e=tJ(tY,.3);e&&n({title:"低语",description:`「${e}」`})}},[e,n,k]);(0,M.useEffect)(()=>{let e=c.current,t=d.current;if(!e||!t)return;let s=e.getContext("2d");if(!s)return;let r=0,a=performance.now(),n=Math.min(window.devicePixelRatio||1,2),i=()=>{let r=t.getBoundingClientRect();n=Math.min(window.devicePixelRatio||1,2),e.width=Math.max(1,Math.floor(r.width*n)),e.height=Math.max(1,Math.floor(r.height*n)),e.style.width=`${r.width}px`,e.style.height=`${r.height}px`,s.setTransform(n,0,0,n,0,0),j(r.width,r.height)};i();let o=new ResizeObserver(i);o.observe(t);let l=t=>{let i=Math.min(.05,(t-a)/1e3);a=t;let o=e.width/n,c=e.height/n,d=o/2,u=c/2,h=.28*Math.min(o,c);s.clearRect(0,0,o,c),m.current.forEach(e=>{e.x+=e.vx*i,e.y+=e.vy*i,e.twinkle+=2*i,e.x<0&&(e.x=o),e.x>o&&(e.x=0),e.y<0&&(e.y=c),e.y>c&&(e.y=0);let t=.5+.5*Math.sin(e.twinkle);s.globalAlpha=e.alpha*t,s.fillStyle="#ffffff",s.beginPath(),s.arc(e.x,e.y,e.size,0,2*Math.PI),s.fill()}),s.globalAlpha=1;let g=.85+.15*Math.sin(.001*t),j=s.createRadialGradient(d,u,.3*h,d,u,2.2*h);j.addColorStop(0,`rgba(52,211,153,${.18*g})`),j.addColorStop(.5,`rgba(232,121,249,${.1*g})`),j.addColorStop(1,"rgba(0,0,0,0)"),s.fillStyle=j,s.fillRect(0,0,o,c),s.lineWidth=2.5,s.strokeStyle="rgba(255,255,255,0.06)",s.beginPath(),s.arc(d,u,1.45*h,0,2*Math.PI),s.stroke();let k=Math.min(100,y.current/Math.max(1,v.current)*100);b.current=k;let N=1.45*h,M=s.createLinearGradient(d-N,u-N,d+N,u+N);M.addColorStop(0,tZ),M.addColorStop(.5,tQ),M.addColorStop(1,t0),s.strokeStyle=M,s.lineWidth=3,s.lineCap="round",s.shadowBlur=8,s.shadowColor=tZ,s.beginPath(),s.arc(d,u,N,-Math.PI/2,-Math.PI/2+2*Math.PI*k/100),s.stroke(),s.shadowBlur=0,f.current.forEach(e=>{e.angle+=e.speed*i,e.radius+=(e.baseRadius-e.radius)*Math.min(1,4*i);let r=d+Math.cos(e.angle)*e.radius,a=u+Math.sin(e.angle)*e.radius,n=.7+.3*Math.sin(.005*t+e.phase);s.globalAlpha=e.alpha*n,s.fillStyle=e.color,s.shadowBlur=10,s.shadowColor=e.color,s.beginPath(),s.arc(r,a,e.size,0,2*Math.PI),s.fill(),s.globalAlpha=e.alpha*n*.4,s.strokeStyle=e.color,s.lineWidth=.6*e.size,s.beginPath(),s.moveTo(r,a),s.lineTo(d+Math.cos(e.angle-.08*e.speed)*(e.radius-2),u+Math.sin(e.angle-.08*e.speed)*(e.radius-2)),s.stroke()}),s.globalAlpha=1,s.shadowBlur=0;let S=.95*h,T=0,C=0;if(w.current.inside){let e=w.current.x-d,t=w.current.y-u,s=Math.hypot(e,t);s>.1&&(T=e/s*Math.min(8,.05*s),C=t/s*Math.min(8,.05*s))}let P=d+T,_=u+C,E=s.createRadialGradient(P-.25*S,_-.3*S,.1*S,P,_,S);E.addColorStop(0,"rgba(255,255,255,0.95)"),E.addColorStop(.3,`rgba(52,211,153,${.85*g})`),E.addColorStop(.65,"rgba(232,121,249,0.55)"),E.addColorStop(1,"rgba(251,113,133,0.2)"),s.fillStyle=E,s.shadowBlur=30,s.shadowColor=tZ,s.beginPath(),s.arc(P,_,S,0,2*Math.PI),s.fill(),s.save(),s.translate(P,_),s.globalAlpha=.25,s.strokeStyle="rgba(255,255,255,0.6)",s.lineWidth=.8;let R=.7*S;for(let e=0;e<3;e++){let r=R*(1-.3*e);s.beginPath();for(let a=0;a<6;a++){let n=Math.PI/3*a+2e-4*t*(e%2?1:-1),i=Math.cos(n)*r,o=Math.sin(n)*r;0===a?s.moveTo(i,o):s.lineTo(i,o)}s.closePath(),s.stroke()}s.restore(),s.globalAlpha=.4,s.fillStyle="#ffffff",s.beginPath(),s.ellipse(P-.25*S,_-.35*S,.35*S,.18*S,-.4,0,2*Math.PI),s.fill(),s.globalAlpha=1,s.shadowBlur=0,p.current=p.current.filter(e=>{let r=t-e.born;if(r<0||r>e.duration)return r<=e.duration+50;let a=r/e.duration,n=e.maxRadius*a;return s.globalAlpha=(1-a)*.8,s.strokeStyle=e.color,s.lineWidth=2.5*(1-.5*a),s.shadowBlur=12,s.shadowColor=e.color,s.beginPath(),s.arc(d,u,n,0,2*Math.PI),s.stroke(),s.shadowBlur=0,!0}),p.current=p.current.filter(e=>t-e.born{let r=t-e.born;if(r>e.life)return!1;e.x+=e.vx*i,e.y+=e.vy*i,e.vx*=.96,e.vy*=.96;let a=r/e.life;return s.globalAlpha=1-a,s.fillStyle=e.color,s.shadowBlur=8,s.shadowColor=e.color,s.beginPath(),s.arc(e.x,e.y,e.size*(1-.5*a),0,2*Math.PI),s.fill(),!0}),s.globalAlpha=1,s.shadowBlur=0,r=requestAnimationFrame(l)};return r=requestAnimationFrame(l),()=>{cancelAnimationFrame(r),o.disconnect()}},[j]);let T=(0,M.useCallback)(e=>{let t=e.currentTarget.getBoundingClientRect();w.current={x:e.clientX-t.left,y:e.clientY-t.top,inside:!0}},[]),C=(0,M.useCallback)(()=>{w.current.inside=!1},[]),P=Math.min(100,t/Math.max(1,r)*100);return(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 relative flex flex-col items-center justify-center gap-4 select-none",children:[a>1&&(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 absolute -top-2 left-1/2 -translate-x-1/2 px-3 py-1 rounded-full bg-rose-500/20 border border-rose-400/40 text-rose-200 text-xs font-mono animate-pulse z-10",children:["×",a," 连击"]}),(0,N.jsxs)("button",{onClick:S,onMouseMove:T,onMouseLeave:C,"aria-label":"脉冲扫描,获取记忆晶体",className:"jsx-dda3ce20a1930cc3 relative h-52 w-52 sm:h-64 sm:w-64 rounded-full focus:outline-none group",children:[(0,N.jsx)("div",{ref:d,className:"jsx-dda3ce20a1930cc3 absolute inset-0 rounded-full overflow-hidden",children:(0,N.jsx)("canvas",{ref:c,className:"jsx-dda3ce20a1930cc3 block w-full h-full"})}),(0,N.jsxs)("div",{style:{animation:"echo-spin 18s linear infinite"},className:"jsx-dda3ce20a1930cc3 absolute inset-2 rounded-full border border-emerald-400/30 pointer-events-none",children:[(0,N.jsx)("div",{className:"jsx-dda3ce20a1930cc3 absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 h-2 w-2 rounded-full bg-emerald-300 shadow-[0_0_8px_#34d399]"}),(0,N.jsx)("div",{className:"jsx-dda3ce20a1930cc3 absolute bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 h-1.5 w-1.5 rounded-full bg-rose-300 shadow-[0_0_8px_#fb7185]"})]}),(0,N.jsx)("div",{style:{animation:"echo-spin 24s linear infinite reverse"},className:"jsx-dda3ce20a1930cc3 absolute inset-6 rounded-full border border-fuchsia-400/20 border-dashed pointer-events-none"}),(0,N.jsx)("div",{style:{animation:"echo-ring 0.7s ease-out forwards"},className:"jsx-dda3ce20a1930cc3 absolute inset-8 rounded-full border-2 border-emerald-400/60 pointer-events-none"},`ring-${u}`),i.map(e=>(0,N.jsx)("span",{style:{left:e.x,top:e.y,color:e.color,transform:"translate(-50%, -50%)",animation:"echo-float 0.9s ease-out forwards",textShadow:`0 0 8px ${e.color}`},className:"jsx-dda3ce20a1930cc3 absolute pointer-events-none font-mono font-bold text-sm z-10",children:e.text},e.id))]}),(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 text-center",children:[(0,N.jsx)("div",{style:{textShadow:"0 0 12px rgba(52,211,153,0.5)"},className:"jsx-dda3ce20a1930cc3 text-2xl font-mono font-bold text-emerald-300",children:H(t)}),(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 text-xs text-muted-foreground mt-0.5",children:["记忆晶体 · ",s.toFixed(1),"/s · 上限"," ",H(r)]}),(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 text-[11px] text-muted-foreground/70 mt-2",children:["点击晶体发起",(0,N.jsx)("span",{className:"jsx-dda3ce20a1930cc3 text-emerald-300",children:"脉冲扫描"}),",连击叠加加成"]}),(0,N.jsxs)("div",{className:"jsx-dda3ce20a1930cc3 text-[10px] text-muted-foreground/50 mt-1 tabular-nums",children:["仓库 ",P.toFixed(1),"% · 连击 ×",Math.max(1,a)]})]}),(0,N.jsx)(tV.default,{id:"dda3ce20a1930cc3",children:"@keyframes echo-spin{to{transform:rotate(360deg)}}@keyframes echo-float{0%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-180%)scale(1.3)}}@keyframes echo-ring{0%{opacity:.8;transform:scale(.8)}to{opacity:0;transform:scale(1.6)}}"})]})}let t3=(0,e.i(25913).cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function t4({className:e,variant:t,size:s,asChild:r=!1,...a}){return(0,N.jsx)(r?tw:"button",{"data-slot":"button",className:(0,tL.cn)(t3({variant:t,size:s,className:e})),...a})}var t9=e.i(37727);let t7=(0,tu.default)("sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]),t8=(0,tu.default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]),t6=(0,tu.default)("undo-2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]),se=(0,tu.default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);function st(){let e=td(e=>e.activePuzzle),t=td(e=>e.clickNode),s=td(e=>e.undoStep),r=td(e=>e.retryPuzzle),a=td(e=>e.abandonPuzzle),{toast:n}=(0,tH.useToast)(),[i,o]=(0,M.useState)(null),[l,c]=(0,M.useState)(null),[d,u]=(0,M.useState)(!1);if(!e)return null;let{grid:h,rows:f,cols:m,target:p,path:x,stepLimit:g,tier:b}=e,y=x.length,v=p[y],w=x.length>0&&x.length{s(),u(!1),c(null)},k=100/m,S=100/f,T=x.map(e=>h.find(t=>t.id===e)).filter(Boolean);return(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex flex-col gap-4 h-full",children:[(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex items-center justify-center gap-2 flex-wrap",children:[(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-xs text-muted-foreground mr-1",children:"目标谐振"}),p.map((e,t)=>{let s=t{if(0===t)return null;let s=T[t-1],r=(s.col+.5)*k,a=(s.row+.5)*S,n=(e.col+.5)*k,i=(e.row+.5)*S,o=B[e.color];return(0,N.jsx)("line",{x1:`${r}%`,y1:`${a}%`,x2:`${n}%`,y2:`${i}%`,stroke:o.hex,strokeWidth:2.5,strokeLinecap:"round",style:{filter:`drop-shadow(0 0 4px ${o.glow})`},className:"jsx-35ab0418fdc54847 echo-path-line"},t)})}),h.map(s=>{let r=B[s.color],a=s.used,h=void 0!==v&&s.color===v&&!a,f=0===x.length&&h&&function(e,t){if(0!==e.path.length)return!1;let s=e.grid.find(e=>e.id===t);if(!s||s.used||s.color!==e.target[0])return!1;let r=JSON.parse(JSON.stringify(e));return r.grid.find(e=>e.id===t).used=!0,r.path.push(t),eT(r)}(e,s.id),p=0===x.length&&h&&!f,g=i===s.id,b=l?.id===s.id,y=(s.col+.5)*k,w=(s.row+.5)*S;return(0,N.jsx)("button",{onClick:()=>(e=>{let s=t(e.id);if(s.ok&&s.finished){u(!1),tX("decodeSuccess"),s.failReason&&s.failReason.split(",").filter(Boolean).length&&(tX("fragmentUnlock"),n({title:"✦ 记忆碎片浮现",description:"新的回响被拼入图谱,前往「记忆图谱」查看。"})),n({title:"谐振闭合!",description:"晶体解码成功,记忆已释放。"});return}s.ok?(tX("decodeClick",{color:e.color}),c({id:e.id,ok:!0}),setTimeout(()=>c(null),280),!1!==s.solvable||d||(u(!0),n({title:"谐振受阻",description:"此路不通,建议撤销上一步或重排。"})),!0===s.solvable&&u(!1)):(tX("decodeFail"),c({id:e.id,ok:!1}),setTimeout(()=>c(null),280))})(s),onMouseEnter:()=>o(s.id),onMouseLeave:()=>o(null),disabled:a,style:{left:`${y}%`,top:`${w}%`,width:`min(${100/m*.62}%, 56px)`,aspectRatio:"1",background:a?"rgba(255,255,255,0.04)":`radial-gradient(circle at 35% 30%, ${r.hex}, ${r.hex}cc 55%, ${r.hex}55)`,boxShadow:a?"inset 0 0 12px rgba(0,0,0,0.5)":f?`0 0 16px ${r.glow}, 0 0 32px ${r.glow}, inset 0 0 10px rgba(255,255,255,0.5)`:h?`0 0 10px ${r.glow}, 0 0 20px ${r.glow}, inset 0 0 6px rgba(255,255,255,0.3)`:`0 0 6px ${r.glow}`,border:f?`2px solid ${r.hex}`:h?`1.5px solid ${r.hex}aa`:"1px solid rgba(255,255,255,0.12)",opacity:a?.35:p?.5:1,transform:`translate(-50%, -50%) scale(${g&&!a?1.12:b?l?.ok?1.25:.8:1})`,animation:f?"echo-pulse 1.2s ease-in-out infinite":h&&!p?"echo-pulse 1.6s ease-in-out infinite":void 0},"aria-label":`${r.label}色节点 ${s.row+1}-${s.col+1}`,className:"jsx-35ab0418fdc54847 absolute rounded-full transition-[box-shadow,background,border,opacity] duration-200 focus:outline-none disabled:cursor-not-allowed",children:!a&&(0,N.jsx)("span",{style:{background:"radial-gradient(circle at 35% 30%, rgba(255,255,255,0.5), transparent 45%)"},className:"jsx-35ab0418fdc54847 absolute inset-0 rounded-full"})},s.id)})]}),w&&(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex items-center gap-2 px-3 py-2 rounded-lg border border-rose-400/40 bg-rose-950/40 text-rose-200 text-xs animate-pulse",children:[(0,N.jsx)(se,{className:"h-3.5 w-3.5 shrink-0"}),(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847",children:"谐振受阻,此路已无解。"}),(0,N.jsxs)(t4,{size:"sm",variant:"outline",onClick:j,className:"h-6 px-2 ml-auto border-rose-400/50 text-rose-100 hover:bg-rose-500/20 text-[11px]",children:[(0,N.jsx)(t6,{className:"h-3 w-3 mr-1"}),"撤销"]})]}),(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex items-center justify-between gap-3",children:[(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex items-center gap-2 text-xs",children:[(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-muted-foreground",children:"步数"}),(0,N.jsxs)("span",{className:`jsx-35ab0418fdc54847 font-mono font-semibold ${x.length>=g?"text-rose-400":"text-foreground"}`,children:[x.length," / ",g]}),(0,N.jsxs)("span",{className:"jsx-35ab0418fdc54847 ml-2 text-muted-foreground",children:["T",b]})]}),(0,N.jsxs)("div",{className:"jsx-35ab0418fdc54847 flex items-center gap-1.5",children:[(0,N.jsxs)(t4,{variant:"ghost",size:"sm",onClick:j,disabled:0===x.length,className:"h-7",children:[(0,N.jsx)(t6,{className:"h-3.5 w-3.5 mr-1"}),"撤销"]}),(0,N.jsxs)(t4,{variant:"ghost",size:"sm",onClick:()=>{r(),u(!1),c(null)},className:"h-7",children:[(0,N.jsx)(tp,{className:"h-3.5 w-3.5 mr-1"}),"重排"]}),(0,N.jsxs)(t4,{variant:"ghost",size:"sm",onClick:()=>{a(),c(null),u(!1)},className:"h-7",children:[(0,N.jsx)(t9.X,{className:"h-3.5 w-3.5 mr-1"}),"放回"]})]})]}),(0,N.jsx)("p",{className:"jsx-35ab0418fdc54847 text-[11px] text-muted-foreground/80 text-center leading-relaxed",children:0===x.length?(0,N.jsxs)(N.Fragment,{children:["点击",(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-emerald-300",children:"高亮"}),"的可行起点开始,按目标顺序走",(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-emerald-300",children:"相邻同色"}),"节点;走错可",(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-rose-300",children:"撤销"}),"。"]}):(0,N.jsxs)(N.Fragment,{children:["按「目标谐振」顺序,点击",(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-emerald-300",children:"上下左右相邻"}),"的同色节点。每个节点仅可使用一次;走错可",(0,N.jsx)("span",{className:"jsx-35ab0418fdc54847 text-rose-300",children:"撤销"}),"。"]})}),(0,N.jsx)(tV.default,{id:"35ab0418fdc54847",children:"@keyframes echo-pulse{0%,to{filter:brightness()}50%{filter:brightness(1.4)}}@keyframes echo-line{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0}}.echo-path-line{stroke-dasharray:100;animation:.4s ease-out forwards echo-line}"})]})}function ss(){let e=td(e=>e.activePuzzle),t=td(e=>e.pendingCrystals),s=td(e=>e.startDecode),r=td(e=>e.crystalsPerSec),a=td(e=>e.crystalCap),n=td(e=>e.crystals);return e?(0,N.jsxs)("div",{className:"h-full flex flex-col",children:[(0,N.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,N.jsx)(t7,{className:"h-4 w-4 text-rose-400"}),(0,N.jsx)("h3",{className:"text-sm font-semibold",children:"解码共振阵列"})]}),(0,N.jsx)("div",{className:"flex-1 min-h-0",children:(0,N.jsx)(st,{})})]}):(0,N.jsxs)("div",{className:"jsx-53059b9e32765d5f h-full flex flex-col",children:[(0,N.jsxs)("div",{className:"jsx-53059b9e32765d5f flex items-center gap-2 mb-3",children:[(0,N.jsx)(t7,{className:"h-4 w-4 text-rose-400"}),(0,N.jsx)("h3",{className:"jsx-53059b9e32765d5f text-sm font-semibold",children:"待解码晶体"}),(0,N.jsxs)("span",{className:"jsx-53059b9e32765d5f text-xs text-muted-foreground ml-auto",children:["产能 ",r.toFixed(1),"/s · ",Math.floor(n),"/",Math.floor(a)]})]}),0===t.length?(0,N.jsxs)("div",{className:"jsx-53059b9e32765d5f flex-1 flex flex-col items-center justify-center text-center gap-3 rounded-2xl border border-dashed border-white/10 bg-black/20 p-6",children:[(0,N.jsxs)("div",{className:"jsx-53059b9e32765d5f relative h-16 w-16",children:[(0,N.jsx)("div",{className:"jsx-53059b9e32765d5f absolute inset-0 rounded-full bg-rose-500/20 blur-xl animate-pulse"}),(0,N.jsx)("div",{className:"jsx-53059b9e32765d5f absolute inset-2 rounded-full border-2 border-rose-400/40 rotate-45"}),(0,N.jsx)("div",{className:"jsx-53059b9e32765d5f absolute inset-4 rounded-full bg-rose-500/30"})]}),(0,N.jsx)("p",{className:"jsx-53059b9e32765d5f text-sm text-muted-foreground",children:"晶体正在生成中…"}),(0,N.jsx)("p",{className:"jsx-53059b9e32765d5f text-xs text-muted-foreground/70 max-w-[220px]",children:"自治无人机每数秒回收一颗记忆晶体,点击下方晶体开启解码。"})]}):(0,N.jsx)("div",{className:"jsx-53059b9e32765d5f flex-1 grid grid-cols-2 sm:grid-cols-3 gap-3 content-start max-h-[420px] overflow-y-auto echo-scroll pr-1",children:t.map(e=>(0,N.jsx)(sr,{crystal:e,onClick:()=>s(e.id)},e.id))}),(0,N.jsx)(tV.default,{id:"53059b9e32765d5f",children:".echo-scroll::-webkit-scrollbar{width:6px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}"})]})}function sr({crystal:e,onClick:t}){let s=1===e.tier?"#34d399":2===e.tier?"#fbbf24":"#e879f9",r=1===e.tier?"常见":2===e.tier?"稀有":"史诗";return(0,N.jsxs)("button",{onClick:t,className:"group relative aspect-square rounded-2xl border border-white/10 bg-black/40 hover:border-white/30 transition-all duration-300 hover:scale-[1.03] focus:outline-none overflow-hidden",style:{boxShadow:`inset 0 0 24px ${s}22`},children:[(0,N.jsx)("div",{className:"absolute inset-0 flex items-center justify-center",children:(0,N.jsxs)("div",{className:"relative h-12 w-12 transition-transform duration-500 group-hover:rotate-180",style:{filter:`drop-shadow(0 0 12px ${s}88)`},children:[(0,N.jsx)("div",{className:"absolute inset-0 rotate-45 rounded-md",style:{background:`linear-gradient(135deg, ${s}, ${s}66)`,border:`1px solid ${s}`}}),(0,N.jsx)("div",{className:"absolute inset-2 rotate-45 rounded-sm",style:{background:"linear-gradient(135deg, rgba(255,255,255,0.5), transparent)"}})]})}),(0,N.jsxs)("div",{className:"absolute top-1.5 left-1.5 text-[10px] font-mono px-1.5 py-0.5 rounded bg-black/50",style:{color:s},children:["T",e.tier]}),(0,N.jsx)("div",{className:"absolute bottom-1.5 right-1.5 text-[10px] text-white/70",children:r}),(0,N.jsx)("div",{className:"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity flex items-end justify-center pb-2",children:(0,N.jsx)("span",{className:"text-[11px] font-medium text-white",children:"解码 →"})})]})}function sa({className:e,...t}){return(0,N.jsx)("div",{"data-slot":"card",className:(0,tL.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",e),...t})}let sn=(0,tu.default)("pickaxe",[["path",{d:"M14.531 12.469 6.619 20.38a1 1 0 1 1-3-3l7.912-7.912",key:"we99rg"}],["path",{d:"M15.686 4.314A12.5 12.5 0 0 0 5.461 2.958 1 1 0 0 0 5.58 4.71a22 22 0 0 1 6.318 3.393",key:"1w6hck"}],["path",{d:"M17.7 3.7a1 1 0 0 0-1.4 0l-4.6 4.6a1 1 0 0 0 0 1.4l2.6 2.6a1 1 0 0 0 1.4 0l4.6-4.6a1 1 0 0 0 0-1.4z",key:"15hgfx"}],["path",{d:"M19.686 8.314a12.501 12.501 0 0 1 1.356 10.225 1 1 0 0 1-1.751-.119 22 22 0 0 0-3.393-6.319",key:"452b4h"}]]),si=(0,tu.default)("scan-line",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M7 12h10",key:"b7w52i"}]]),so=(0,tu.default)("rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]),sl=(0,tu.default)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]),sc=(0,tu.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]),sd={Pickaxe:sn,ScanLine:si,Rocket:so,BookOpen:sl},su={mining:"#34d399",decoding:"#fb7185",expedition:"#fbbf24",narrative:"#e879f9"};function sh(){let e=td(e=>e.tech),t=td(e=>e.insights),s=td(e=>e.buyTech);return(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex flex-col gap-3 h-full",children:[(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex items-center justify-between",children:[(0,N.jsx)("h3",{className:"jsx-fbf3fdae687a84dd text-sm font-semibold",children:"技术树"}),(0,N.jsxs)("span",{className:"jsx-fbf3fdae687a84dd text-xs text-muted-foreground",children:["洞见 ",(0,N.jsx)("span",{className:"jsx-fbf3fdae687a84dd text-amber-300 font-mono",children:H(t)})]})]}),(0,N.jsx)("div",{className:"jsx-fbf3fdae687a84dd flex-1 overflow-y-auto echo-scroll pr-1 space-y-3",children:["mining","decoding","expedition","narrative"].map(r=>{let a=L[r],n=sd[a.icon],i=su[r],o=I.filter(e=>e.branch===r);return(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd",children:[(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex items-center gap-2 mb-1.5 px-1",children:[(0,N.jsx)(n,{className:"jsx-fbf3fdae687a84dd h-3.5 w-3.5"}),(0,N.jsx)("span",{style:{color:i},className:"jsx-fbf3fdae687a84dd text-xs font-medium",children:a.name}),(0,N.jsx)("span",{className:"jsx-fbf3fdae687a84dd text-[10px] text-muted-foreground/70 truncate flex-1",children:a.desc})]}),(0,N.jsxs)("p",{className:"jsx-fbf3fdae687a84dd text-[9px] italic text-muted-foreground/50 px-1 mb-1.5 truncate",children:["「",tG[r]??"","」"]}),(0,N.jsx)("div",{className:"jsx-fbf3fdae687a84dd grid gap-1.5",children:o.map(r=>{let a=(e[r.id]??0)>=1,n=t>=r.cost;return(0,N.jsx)(sa,{className:`p-2.5 transition-all duration-200 ${a?"bg-white/5 border-white/10":n?"bg-black/30 border-white/15 hover:border-white/30 cursor-pointer":"bg-black/20 border-white/5 opacity-60"}`,style:a?{boxShadow:`inset 0 0 0 1px ${i}44, 0 0 12px ${i}22`}:void 0,children:(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex items-center gap-2",children:[(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex-1 min-w-0",children:[(0,N.jsxs)("div",{className:"jsx-fbf3fdae687a84dd flex items-center gap-1.5",children:[(0,N.jsx)("span",{style:{color:a?i:void 0},className:"jsx-fbf3fdae687a84dd text-xs font-semibold truncate",children:r.name}),a&&(0,N.jsx)(t8,{className:"h-3 w-3",style:{color:i}})]}),(0,N.jsx)("p",{className:"jsx-fbf3fdae687a84dd text-[10px] text-muted-foreground/80 truncate",children:r.desc})]}),!a&&(0,N.jsxs)(t4,{size:"sm",variant:n?"default":"ghost",disabled:!n,onClick:()=>{s(r.id)&&tX("techBuy")},className:"h-7 px-2 text-[11px] shrink-0",style:n?{background:`${i}22`,border:`1px solid ${i}66`,color:i}:void 0,children:[(0,N.jsx)(sc,{className:"h-2.5 w-2.5 mr-1"}),r.cost]})]})},r.id)})})]},r)})}),(0,N.jsx)(tV.default,{id:"fbf3fdae687a84dd",children:".echo-scroll::-webkit-scrollbar{width:5px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}"})]})}var sf=e.i(48425),sm=e.i(96626),sp=e.i(30030),sx=e.i(30207),sg=M.createContext(void 0);function sb(e){let t=M.useContext(sg);return e||t||"ltr"}var sy=e.i(34620),sv=e.i(81140),sw="ScrollArea",[sj,sk]=(0,sp.createContextScope)(sw),[sN,sM]=sj(sw),sS=M.forwardRef((e,t)=>{let{__scopeScrollArea:s,type:r="hover",dir:a,scrollHideDelay:n=600,...i}=e,[o,l]=M.useState(null),[c,d]=M.useState(null),[u,h]=M.useState(null),[f,m]=M.useState(null),[p,x]=M.useState(null),[g,b]=M.useState(0),[y,v]=M.useState(0),[w,j]=M.useState(!1),[k,S]=M.useState(!1),T=(0,tx.useComposedRefs)(t,e=>l(e)),C=sb(a);return(0,N.jsx)(sN,{scope:s,type:r,dir:C,scrollHideDelay:n,scrollArea:o,viewport:c,onViewportChange:d,content:u,onContentChange:h,scrollbarX:f,onScrollbarXChange:m,scrollbarXEnabled:w,onScrollbarXEnabledChange:j,scrollbarY:p,onScrollbarYChange:x,scrollbarYEnabled:k,onScrollbarYEnabledChange:S,onCornerWidthChange:b,onCornerHeightChange:v,children:(0,N.jsx)(sf.Primitive.div,{dir:C,...i,ref:T,style:{position:"relative","--radix-scroll-area-corner-width":g+"px","--radix-scroll-area-corner-height":y+"px",...e.style}})})});sS.displayName=sw;var sT="ScrollAreaViewport",sC=M.forwardRef((e,t)=>{let{__scopeScrollArea:s,children:r,nonce:a,...n}=e,i=sM(sT,s),o=M.useRef(null),l=(0,tx.useComposedRefs)(t,o,i.onViewportChange);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:a}),(0,N.jsx)(sf.Primitive.div,{"data-radix-scroll-area-viewport":"",...n,ref:l,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,N.jsx)("div",{ref:i.onContentChange,style:{minWidth:"100%",display:"table"},children:r})})]})});sC.displayName=sT;var sP="ScrollAreaScrollbar",s_=M.forwardRef((e,t)=>{let{forceMount:s,...r}=e,a=sM(sP,e.__scopeScrollArea),{onScrollbarXEnabledChange:n,onScrollbarYEnabledChange:i}=a,o="horizontal"===e.orientation;return M.useEffect(()=>(o?n(!0):i(!0),()=>{o?n(!1):i(!1)}),[o,n,i]),"hover"===a.type?(0,N.jsx)(sE,{...r,ref:t,forceMount:s}):"scroll"===a.type?(0,N.jsx)(sR,{...r,ref:t,forceMount:s}):"auto"===a.type?(0,N.jsx)(sA,{...r,ref:t,forceMount:s}):"always"===a.type?(0,N.jsx)(s$,{...r,ref:t}):null});s_.displayName=sP;var sE=M.forwardRef((e,t)=>{let{forceMount:s,...r}=e,a=sM(sP,e.__scopeScrollArea),[n,i]=M.useState(!1);return M.useEffect(()=>{let e=a.scrollArea,t=0;if(e){let s=()=>{window.clearTimeout(t),i(!0)},r=()=>{t=window.setTimeout(()=>i(!1),a.scrollHideDelay)};return e.addEventListener("pointerenter",s),e.addEventListener("pointerleave",r),()=>{window.clearTimeout(t),e.removeEventListener("pointerenter",s),e.removeEventListener("pointerleave",r)}}},[a.scrollArea,a.scrollHideDelay]),(0,N.jsx)(sm.Presence,{present:s||n,children:(0,N.jsx)(sA,{"data-state":n?"visible":"hidden",...r,ref:t})})}),sR=M.forwardRef((e,t)=>{var s;let{forceMount:r,...a}=e,n=sM(sP,e.__scopeScrollArea),i="horizontal"===e.orientation,o=sZ(()=>c("SCROLL_END"),100),[l,c]=(s={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},M.useReducer((e,t)=>s[e][t]??e,"hidden"));return M.useEffect(()=>{if("idle"===l){let e=window.setTimeout(()=>c("HIDE"),n.scrollHideDelay);return()=>window.clearTimeout(e)}},[l,n.scrollHideDelay,c]),M.useEffect(()=>{let e=n.viewport,t=i?"scrollLeft":"scrollTop";if(e){let s=e[t],r=()=>{let r=e[t];s!==r&&(c("SCROLL"),o()),s=r};return e.addEventListener("scroll",r),()=>e.removeEventListener("scroll",r)}},[n.viewport,i,c,o]),(0,N.jsx)(sm.Presence,{present:r||"hidden"!==l,children:(0,N.jsx)(s$,{"data-state":"hidden"===l?"hidden":"visible",...a,ref:t,onPointerEnter:(0,sv.composeEventHandlers)(e.onPointerEnter,()=>c("POINTER_ENTER")),onPointerLeave:(0,sv.composeEventHandlers)(e.onPointerLeave,()=>c("POINTER_LEAVE"))})})}),sA=M.forwardRef((e,t)=>{let s=sM(sP,e.__scopeScrollArea),{forceMount:r,...a}=e,[n,i]=M.useState(!1),o="horizontal"===e.orientation,l=sZ(()=>{if(s.viewport){let e=s.viewport.offsetWidth{let{orientation:s="vertical",...r}=e,a=sM(sP,e.__scopeScrollArea),n=M.useRef(null),i=M.useRef(0),[o,l]=M.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),c=sK(o.viewport,o.content),d={...r,sizes:o,onSizesChange:l,hasThumb:!!(c>0&&c<1),onThumbChange:e=>n.current=e,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:e=>i.current=e};function u(e,t){return function(e,t,s,r="ltr"){let a=sX(s),n=t||a/2,i=s.scrollbar.paddingStart+n,o=s.scrollbar.size-s.scrollbar.paddingEnd-(a-n),l=s.content-s.viewport;return sG([i,o],"ltr"===r?[0,l]:[-1*l,0])(e)}(e,i.current,o,t)}return"horizontal"===s?(0,N.jsx)(sD,{...d,ref:t,onThumbPositionChange:()=>{if(a.viewport&&n.current){let e=sY(a.viewport.scrollLeft,o,a.dir);n.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{a.viewport&&(a.viewport.scrollLeft=e)},onDragScroll:e=>{a.viewport&&(a.viewport.scrollLeft=u(e,a.dir))}}):"vertical"===s?(0,N.jsx)(sB,{...d,ref:t,onThumbPositionChange:()=>{if(a.viewport&&n.current){let e=sY(a.viewport.scrollTop,o);n.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{a.viewport&&(a.viewport.scrollTop=e)},onDragScroll:e=>{a.viewport&&(a.viewport.scrollTop=u(e))}}):null}),sD=M.forwardRef((e,t)=>{let{sizes:s,onSizesChange:r,...a}=e,n=sM(sP,e.__scopeScrollArea),[i,o]=M.useState(),l=M.useRef(null),c=(0,tx.useComposedRefs)(t,l,n.onScrollbarXChange);return M.useEffect(()=>{l.current&&o(getComputedStyle(l.current))},[l]),(0,N.jsx)(sO,{"data-orientation":"horizontal",...a,ref:c,sizes:s,style:{bottom:0,left:"rtl"===n.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===n.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":sX(s)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,s)=>{if(n.viewport){var r,a;let i=n.viewport.scrollLeft+t.deltaX;e.onWheelScroll(i),r=i,a=s,r>0&&r{l.current&&n.viewport&&i&&r({content:n.viewport.scrollWidth,viewport:n.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:sq(i.paddingLeft),paddingEnd:sq(i.paddingRight)}})}})}),sB=M.forwardRef((e,t)=>{let{sizes:s,onSizesChange:r,...a}=e,n=sM(sP,e.__scopeScrollArea),[i,o]=M.useState(),l=M.useRef(null),c=(0,tx.useComposedRefs)(t,l,n.onScrollbarYChange);return M.useEffect(()=>{l.current&&o(getComputedStyle(l.current))},[l]),(0,N.jsx)(sO,{"data-orientation":"vertical",...a,ref:c,sizes:s,style:{top:0,right:"ltr"===n.dir?0:void 0,left:"rtl"===n.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":sX(s)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,s)=>{if(n.viewport){var r,a;let i=n.viewport.scrollTop+t.deltaY;e.onWheelScroll(i),r=i,a=s,r>0&&r{l.current&&n.viewport&&i&&r({content:n.viewport.scrollHeight,viewport:n.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:sq(i.paddingTop),paddingEnd:sq(i.paddingBottom)}})}})}),[sI,sL]=sj(sP),sO=M.forwardRef((e,t)=>{let{__scopeScrollArea:s,sizes:r,hasThumb:a,onThumbChange:n,onThumbPointerUp:i,onThumbPointerDown:o,onThumbPositionChange:l,onDragScroll:c,onWheelScroll:d,onResize:u,...h}=e,f=sM(sP,s),[m,p]=M.useState(null),x=(0,tx.useComposedRefs)(t,e=>p(e)),g=M.useRef(null),b=M.useRef(""),y=f.viewport,v=r.content-r.viewport,w=(0,sx.useCallbackRef)(d),j=(0,sx.useCallbackRef)(l),k=sZ(u,10);function S(e){g.current&&c({x:e.clientX-g.current.left,y:e.clientY-g.current.top})}return M.useEffect(()=>{let e=e=>{let t=e.target;m?.contains(t)&&w(e,v)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[y,m,v,w]),M.useEffect(j,[r,j]),sQ(m,k),sQ(f.content,k),(0,N.jsx)(sI,{scope:s,scrollbar:m,hasThumb:a,onThumbChange:(0,sx.useCallbackRef)(n),onThumbPointerUp:(0,sx.useCallbackRef)(i),onThumbPositionChange:j,onThumbPointerDown:(0,sx.useCallbackRef)(o),children:(0,N.jsx)(sf.Primitive.div,{...h,ref:x,style:{position:"absolute",...h.style},onPointerDown:(0,sv.composeEventHandlers)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),g.current=m.getBoundingClientRect(),b.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",f.viewport&&(f.viewport.style.scrollBehavior="auto"),S(e))}),onPointerMove:(0,sv.composeEventHandlers)(e.onPointerMove,S),onPointerUp:(0,sv.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=b.current,f.viewport&&(f.viewport.style.scrollBehavior=""),g.current=null})})})}),sF="ScrollAreaThumb",sz=M.forwardRef((e,t)=>{let{forceMount:s,...r}=e,a=sL(sF,e.__scopeScrollArea);return(0,N.jsx)(sm.Presence,{present:s||a.hasThumb,children:(0,N.jsx)(sV,{ref:t,...r})})}),sV=M.forwardRef((e,t)=>{let{__scopeScrollArea:s,style:r,...a}=e,n=sM(sF,s),i=sL(sF,s),{onThumbPositionChange:o}=i,l=(0,tx.useComposedRefs)(t,e=>i.onThumbChange(e)),c=M.useRef(void 0),d=sZ(()=>{c.current&&(c.current(),c.current=void 0)},100);return M.useEffect(()=>{let e=n.viewport;if(e){let t=()=>{d(),c.current||(c.current=sJ(e,o),o())};return o(),e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}},[n.viewport,d,o]),(0,N.jsx)(sf.Primitive.div,{"data-state":i.hasThumb?"visible":"hidden",...a,ref:l,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:(0,sv.composeEventHandlers)(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),s=e.clientX-t.left,r=e.clientY-t.top;i.onThumbPointerDown({x:s,y:r})}),onPointerUp:(0,sv.composeEventHandlers)(e.onPointerUp,i.onThumbPointerUp)})});sz.displayName=sF;var sH="ScrollAreaCorner",sU=M.forwardRef((e,t)=>{let s=sM(sH,e.__scopeScrollArea),r=!!(s.scrollbarX&&s.scrollbarY);return"scroll"!==s.type&&r?(0,N.jsx)(sW,{...e,ref:t}):null});sU.displayName=sH;var sW=M.forwardRef((e,t)=>{let{__scopeScrollArea:s,...r}=e,a=sM(sH,s),[n,i]=M.useState(0),[o,l]=M.useState(0),c=!!(n&&o);return sQ(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),l(e)}),sQ(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),i(e)}),c?(0,N.jsx)(sf.Primitive.div,{...r,ref:t,style:{width:n,height:o,position:"absolute",right:"ltr"===a.dir?0:void 0,left:"rtl"===a.dir?0:void 0,bottom:0,...e.style}}):null});function sq(e){return e?parseInt(e,10):0}function sK(e,t){let s=e/t;return isNaN(s)?0:s}function sX(e){let t=sK(e.viewport,e.content),s=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-s)*t,18)}function sY(e,t,s="ltr"){let r=sX(t),a=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,n=t.scrollbar.size-a,i=t.content-t.viewport,o=function(e,[t,s]){return Math.min(s,Math.max(t,e))}(e,"ltr"===s?[0,i]:[-1*i,0]);return sG([0,i],[0,n-r])(o)}function sG(e,t){return s=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(s-e[0])}}var sJ=(e,t=()=>{})=>{let s={left:e.scrollLeft,top:e.scrollTop},r=0;return!function a(){let n={left:e.scrollLeft,top:e.scrollTop},i=s.left!==n.left,o=s.top!==n.top;(i||o)&&t(),s=n,r=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(r)};function sZ(e,t){let s=(0,sx.useCallbackRef)(e),r=M.useRef(0);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),M.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(s,t)},[s,t])}function sQ(e,t){let s=(0,sx.useCallbackRef)(t);(0,sy.useLayoutEffect)(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(s)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,s])}function s0({className:e,children:t,...s}){return(0,N.jsxs)(sS,{"data-slot":"scroll-area",className:(0,tL.cn)("relative",e),...s,children:[(0,N.jsx)(sC,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:t}),(0,N.jsx)(s1,{}),(0,N.jsx)(sU,{})]})}function s1({className:e,orientation:t="vertical",...s}){return(0,N.jsx)(s_,{"data-slot":"scroll-area-scrollbar",orientation:t,className:(0,tL.cn)("flex touch-none p-px transition-colors select-none","vertical"===t&&"h-full w-2.5 border-l border-l-transparent","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent",e),...s,children:(0,N.jsx)(sz,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}let s2=["","寂灭前夜","谐振纪","飞升潮","回响纪","接触纪"];function s5(){let e=td(e=>e.fragments),t=td(e=>e.totalDecoded),s=function(e){for(let t of O)if(e1===e.era),i=n.filter(t=>e[t.id]).length;return(0,N.jsxs)("div",{className:"flex flex-col gap-2 h-full",children:[(0,N.jsxs)("div",{className:"flex items-center justify-between",children:[(0,N.jsxs)("h3",{className:"text-sm font-semibold flex items-center gap-1.5",children:[(0,N.jsx)(sl,{className:"h-4 w-4 text-fuchsia-400"}),"记忆图谱"]}),(0,N.jsxs)("span",{className:"text-xs text-muted-foreground",children:[i,"/",n.length," · 第一纪元"]})]}),s&&(0,N.jsxs)("div",{className:"text-[10px] text-muted-foreground/80 px-1",children:["再解码 ",(0,N.jsx)("span",{className:"text-fuchsia-300 font-mono",children:s-t})," 颗 → 下一个碎片"]}),(0,N.jsx)(s0,{className:"flex-1 min-h-0",children:(0,N.jsx)("div",{className:"grid grid-cols-2 gap-2 pr-2",children:n.map((t,s)=>{let r=!!e[t.id];return(0,N.jsxs)("button",{onClick:()=>r&&a(t),disabled:!r,className:`relative aspect-[4/3] rounded-xl border text-left p-2 transition-all duration-300 overflow-hidden ${r?"border-fuchsia-400/40 bg-gradient-to-br from-fuchsia-950/40 to-black/40 hover:border-fuchsia-400/70 hover:scale-[1.02] cursor-pointer":"border-white/5 bg-black/30 cursor-not-allowed"}`,style:r?{boxShadow:"0 0 16px rgba(232,121,249,0.15)"}:void 0,children:[(0,N.jsx)("span",{className:`absolute top-1.5 right-1.5 text-[9px] font-mono ${r?"text-fuchsia-300/70":"text-white/20"}`,children:String(s+1).padStart(2,"0")}),r?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)("div",{className:"absolute -top-3 -right-3 h-12 w-12 rounded-full bg-fuchsia-500/20 blur-xl"}),(0,N.jsx)(t7,{className:"h-3 w-3 text-fuchsia-300 mb-1"}),(0,N.jsx)("div",{className:"text-[11px] font-semibold text-fuchsia-100 leading-tight",children:t.title}),(0,N.jsxs)("div",{className:"text-[9px] text-muted-foreground mt-1 line-clamp-2",children:[t.echo.slice(0,28),"…"]})]}):(0,N.jsxs)("div",{className:"flex flex-col items-center justify-center h-full gap-1",children:[(0,N.jsx)(sc,{className:"h-4 w-4 text-white/20"}),(0,N.jsxs)("span",{className:"text-[9px] text-white/30",children:["需解码 ",t.threshold," 颗"]})]})]},t.id)})})}),r&&(0,N.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm",onClick:()=>a(null),children:(0,N.jsxs)(sa,{className:"max-w-md w-full p-5 bg-gradient-to-br from-fuchsia-950/60 to-black/80 border-fuchsia-400/40",onClick:e=>e.stopPropagation(),style:{boxShadow:"0 0 40px rgba(232,121,249,0.25)"},children:[(0,N.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,N.jsx)(t7,{className:"h-4 w-4 text-fuchsia-300"}),(0,N.jsxs)("span",{className:"text-[10px] text-fuchsia-300/70 font-mono",children:["第 ",r.era," 纪元 · ",s2[r.era]||""]})]}),(0,N.jsx)("h4",{className:"text-lg font-bold text-fuchsia-100 mb-3",children:r.title}),(0,N.jsxs)("p",{className:"text-sm text-foreground/90 leading-relaxed italic",children:["「",r.echo,"」"]}),(0,N.jsx)("button",{onClick:()=>a(null),className:"mt-4 text-xs text-muted-foreground hover:text-foreground transition",children:"关闭"})]})})]})}var s3=M[" useId ".trim().toString()]||(()=>void 0),s4=0;function s9(e){let[t,s]=M.useState(s3());return(0,sy.useLayoutEffect)(()=>{e||s(e=>e??String(s4++))},[e]),e||(t?`radix-${t}`:"")}var s7=e.i(69340),s8=e.i(26330),s6="focusScope.autoFocusOnMount",re="focusScope.autoFocusOnUnmount",rt={bubbles:!1,cancelable:!0},rs=M.forwardRef((e,t)=>{let{loop:s=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:n,...i}=e,[o,l]=M.useState(null),c=(0,sx.useCallbackRef)(a),d=(0,sx.useCallbackRef)(n),u=M.useRef(null),h=(0,tx.useComposedRefs)(t,e=>l(e)),f=M.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;M.useEffect(()=>{if(r){let e=function(e){if(f.paused||!o)return;let t=e.target;o.contains(t)?u.current=t:rn(u.current,{select:!0})},t=function(e){if(f.paused||!o)return;let t=e.relatedTarget;null!==t&&(o.contains(t)||rn(u.current,{select:!0}))};document.addEventListener("focusin",e),document.addEventListener("focusout",t);let s=new MutationObserver(function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&rn(o)});return o&&s.observe(o,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",e),document.removeEventListener("focusout",t),s.disconnect()}}},[r,o,f.paused]),M.useEffect(()=>{if(o){ri.add(f);let e=document.activeElement;if(!o.contains(e)){let t=new CustomEvent(s6,rt);o.addEventListener(s6,c),o.dispatchEvent(t),t.defaultPrevented||(function(e,{select:t=!1}={}){let s=document.activeElement;for(let r of e)if(rn(r,{select:t}),document.activeElement!==s)return}(rr(o).filter(e=>"A"!==e.tagName),{select:!0}),document.activeElement===e&&rn(o))}return()=>{o.removeEventListener(s6,c),setTimeout(()=>{let t=new CustomEvent(re,rt);o.addEventListener(re,d),o.dispatchEvent(t),t.defaultPrevented||rn(e??document.body,{select:!0}),o.removeEventListener(re,d),ri.remove(f)},0)}}},[o,c,d,f]);let m=M.useCallback(e=>{if(!s&&!r||f.paused)return;let t="Tab"===e.key&&!e.altKey&&!e.ctrlKey&&!e.metaKey,a=document.activeElement;if(t&&a){var n;let t,r=e.currentTarget,[i,o]=[ra(t=rr(n=r),n),ra(t.reverse(),n)];i&&o?e.shiftKey||a!==o?e.shiftKey&&a===i&&(e.preventDefault(),s&&rn(o,{select:!0})):(e.preventDefault(),s&&rn(i,{select:!0})):a===r&&e.preventDefault()}},[s,r,f.paused]);return(0,N.jsx)(sf.Primitive.div,{tabIndex:-1,...i,ref:h,onKeyDown:m})});function rr(e){let t=[],s=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t="INPUT"===e.tagName&&"hidden"===e.type;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;s.nextNode();)t.push(s.currentNode);return t}function ra(e,t){for(let s of e)if(!function(e,{upTo:t}){if("hidden"===getComputedStyle(e).visibility)return!0;for(;e&&(void 0===t||e!==t);){if("none"===getComputedStyle(e).display)return!0;e=e.parentElement}return!1}(s,{upTo:t}))return s}function rn(e,{select:t=!1}={}){if(e&&e.focus){var s;let r=document.activeElement;e.focus({preventScroll:!0}),e!==r&&(s=e)instanceof HTMLInputElement&&"select"in s&&t&&e.select()}}rs.displayName="FocusScope";var ri=(u=[],{add(e){let t=u[0];e!==t&&t?.pause(),(u=ro(u,e)).unshift(e)},remove(e){u=ro(u,e),u[0]?.resume()}});function ro(e,t){let s=[...e],r=s.indexOf(t);return -1!==r&&s.splice(r,1),s}var rl=e.i(74606),rc=0;function rd(){let e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var ru=function(){return(ru=Object.assign||function(e){for(var t,s=1,r=arguments.length;st.indexOf(r)&&(s[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(s[r[a]]=e[r[a]]);return s}var rf=("function"==typeof SuppressedError&&SuppressedError,"right-scroll-bar-position"),rm="width-before-scroll-bar";function rp(e,t){return"function"==typeof e?e(t):e&&(e.current=t),e}var rx="u">typeof window?M.useLayoutEffect:M.useEffect,rg=new WeakMap,rb=(void 0===m&&(m={}),(void 0===p&&(p=function(e){return e}),x=[],g=!1,b={read:function(){if(g)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return x.length?x[x.length-1]:null},useMedium:function(e){var t=p(e,g);return x.push(t),function(){x=x.filter(function(e){return e!==t})}},assignSyncMedium:function(e){for(g=!0;x.length;){var t=x;x=[],t.forEach(e)}x={push:function(t){return e(t)},filter:function(){return x}}},assignMedium:function(e){g=!0;var t=[];if(x.length){var s=x;x=[],s.forEach(e),t=x}var r=function(){var s=t;t=[],s.forEach(e)},a=function(){return Promise.resolve().then(r)};a(),x={push:function(e){t.push(e),a()},filter:function(e){return t=t.filter(e),x}}}}).options=ru({async:!0,ssr:!1},m),b),ry=function(){},rv=M.forwardRef(function(e,t){var s,r,a,n,i=M.useRef(null),o=M.useState({onScrollCapture:ry,onWheelCapture:ry,onTouchMoveCapture:ry}),l=o[0],c=o[1],d=e.forwardProps,u=e.children,h=e.className,f=e.removeScrollBar,m=e.enabled,p=e.shards,x=e.sideCar,g=e.noRelative,b=e.noIsolation,y=e.inert,v=e.allowPinchZoom,w=e.as,j=e.gapMode,k=rh(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),N=(s=[i,t],r=function(e){return s.forEach(function(t){return rp(t,e)})},(a=(0,M.useState)(function(){return{value:null,callback:r,facade:{get current(){return a.value},set current(value){var e=a.value;e!==value&&(a.value=value,a.callback(value,e))}}}})[0]).callback=r,n=a.facade,rx(function(){var e=rg.get(n);if(e){var t=new Set(e),r=new Set(s),a=n.current;t.forEach(function(e){r.has(e)||rp(e,null)}),r.forEach(function(e){t.has(e)||rp(e,a)})}rg.set(n,s)},[s]),n),S=ru(ru({},k),l);return M.createElement(M.Fragment,null,m&&M.createElement(x,{sideCar:rb,removeScrollBar:f,shards:p,noRelative:g,noIsolation:b,inert:y,setCallbacks:c,allowPinchZoom:!!v,lockRef:i,gapMode:j}),d?M.cloneElement(M.Children.only(u),ru(ru({},S),{ref:N})):M.createElement(void 0===w?"div":w,ru({},S,{className:h,ref:N}),u))});rv.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},rv.classNames={fullWidth:rm,zeroRight:rf};var rw=function(e){var t=e.sideCar,s=rh(e,["sideCar"]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error("Sidecar medium not found");return M.createElement(r,ru({},s))};rw.isSideCarExport=!0;var rj=function(){var e=0,t=null;return{add:function(s){if(0==e&&(t=function(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=j||("u">typeof __webpack_nonce__?__webpack_nonce__:void 0);return t&&e.setAttribute("nonce",t),e}())){var r,a;(r=t).styleSheet?r.styleSheet.cssText=s:r.appendChild(document.createTextNode(s)),a=t,(document.head||document.getElementsByTagName("head")[0]).appendChild(a)}e++},remove:function(){--e||!t||(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},rk=function(){var e=rj();return function(t,s){M.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&s])}},rN=function(){var e=rk();return function(t){return e(t.styles,t.dynamic),null}},rM={left:0,top:0,right:0,gap:0},rS=function(e){return parseInt(e||"",10)||0},rT=function(e){var t=window.getComputedStyle(document.body),s=t["padding"===e?"paddingLeft":"marginLeft"],r=t["padding"===e?"paddingTop":"marginTop"],a=t["padding"===e?"paddingRight":"marginRight"];return[rS(s),rS(r),rS(a)]},rC=function(e){if(void 0===e&&(e="margin"),"u"