dsh-metaphysics 0.63.0 → 0.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client.js CHANGED
@@ -1,4 +1,4 @@
1
- window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){const Lt=(function(){try{return Wt("react")}catch{return globalThis.React}})();if(!Lt)return{inject:[],apply(){}};const p=Lt.createElement,La={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js"},Ea=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.63.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",label:"塔罗",tip:"抽牌,看关系与选择"},{k:"qimen",label:"奇门",tip:"看方位、时机与取舍"},{k:"daliuren",label:"六壬",tip:"占事,断来意与结果"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算,快速断"}]},{title:"看一个人",hint:"看自己或身边人的性情、格局与运程",items:[{k:"bazi",label:"八字",tip:"四柱看一生格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两个人合不合"},{k:"mbti",label:"人格",tip:"16 型性格问卷"},{k:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",label:"数字",tip:"生日数字看性格"},{k:"trend",label:"人生K",tip:"一生高低走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,顺带看看家里和名字",items:[{k:"almanac",label:"黄历",tip:"今天宜忌、时辰吉凶"},{k:"zeri",label:"择日",tip:"挑个办事的好日子"},{k:"convert",label:"农历",tip:"公历农历互转"},{k:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Ea,K.compute=()=>{throw new Error("命理引擎尚未加载")};const _a=Object.create(null),fa=Object.create(null);function _i(n){return La[n]||La.bazi||"client.chart.js"}const Ha=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Hi(n){const s=_i(n);let q=_a[s];const P=!!q,V=Ha();if(!q){if(!Wt||typeof Wt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let ee=fa[s];ee||(ee=Wt.async(`./${s}`).then(ae=>{const se=ae&&(ae.Engine||ae.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return _a[s]=se,se}),fa[s]=ee,ee.catch(()=>{}).then(()=>{delete fa[s]})),q=await ee}for(const ee of Object.keys(q))q[ee]!==void 0&&(K[ee]=q[ee]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Ea),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:P,ms:Math.round((Ha()-V)*10)/10},K}window.__mpEnsureEngine=Hi,window.Engine=K,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=G=>!!n[G],q={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},P=G=>q[G]||"other",V="#ffffff",ee="#1c1a15";function ae(G){const Z=String(G??"").match(/rgba?\(([^)]+)\)/i);if(!Z)return null;const R=Z[1].split(/[,\s/]+/).filter(Boolean).map(Number);return R.length<3||R.slice(0,3).some(Y=>!Number.isFinite(Y))||R.length>3&&Number.isFinite(R[3])&&R[3]<.95?null:[R[0],R[1],R[2]]}function se(G){const Z=String(G||"").replace("#",""),R=Z.length===3?Z.split("").map(Y=>Y+Y).join(""):Z;return/^[0-9a-f]{6}$/i.test(R)?[0,2,4].map(Y=>parseInt(R.slice(Y,Y+2),16)):null}function a(G){const Z=R=>{const Y=R/255;return Y<=.03928?Y/12.92:Math.pow((Y+.055)/1.055,2.4)};return .2126*Z(G[0])+.7152*Z(G[1])+.0722*Z(G[2])}function ge(G,Z){const R=a(G),Y=a(Z),ve=Math.max(R,Y),wt=Math.min(R,Y);return(ve+.05)/(wt+.05)}function ze(G){const Z=typeof G=="string"?ae(G):G;return Z?ge(Z,se(V))>=ge(Z,se(ee))?V:ee:""}function F(G){const Z=String(G??"").trim();if(!Z)return{lines:null,warning:""};const R=Z.split(/[^0-9]+/).filter(Boolean).map(Number),Y=R.filter(ve=>![6,7,8,9].includes(ve));return R.length===6&&Y.length===0?{lines:R,warning:""}:{lines:null,warning:R.length!==6?`爻值需要正好 6 个数字(当前 ${R.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${Y.join("/")}),本次按随机摇卦。`}}function fe(G){const Z=String(G??"").trim();if(!Z)return null;const R=Number(Z);return Number.isFinite(R)?R:null}function he(G){const Z=G instanceof Date?G:new Date,R=Y=>String(Y).padStart(2,"0");return`${Z.getFullYear()}-${R(Z.getMonth()+1)}-${R(Z.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:F,toNumber:fe,parseRGB:ae,hexToRGB:se,luminance:a,contrastRatio:ge,pickOnColor:ze,ON_DARK:V,ON_LIGHT:ee,kindOfDirection:P,todayStamp:he}})(),(function(){const n=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.65.0",factory(Qa){const Oa=(function(){try{return Qa("react")}catch{return globalThis.React}})();if(!Oa)return{inject:[],apply(){}};const p=Oa.createElement,Ht={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js"},Ft=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.65.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",label:"塔罗",tip:"抽牌,看关系与选择"},{k:"qimen",label:"奇门",tip:"看方位、时机与取舍"},{k:"daliuren",label:"六壬",tip:"占事,断来意与结果"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算,快速断"}]},{title:"看一个人",hint:"看自己或身边人的性情、格局与运程",items:[{k:"bazi",label:"八字",tip:"四柱看一生格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两个人合不合"},{k:"mbti",label:"人格",tip:"16 型性格问卷"},{k:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",label:"数字",tip:"生日数字看性格"},{k:"trend",label:"人生K",tip:"一生高低走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,顺带看看家里和名字",items:[{k:"almanac",label:"黄历",tip:"今天宜忌、时辰吉凶"},{k:"zeri",label:"择日",tip:"挑个办事的好日子"},{k:"convert",label:"农历",tip:"公历农历互转"},{k:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const U={};U.DIRECTIONS=Ft,U.compute=()=>{throw new Error("命理引擎尚未加载")};const Pt=Object.create(null),$t=Object.create(null);function Hi(s){return Ht[s]||Ht.bazi||"client.chart.js"}const Dt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Fi(s){const n=Hi(s);let j=Pt[n];const I=!!j,ae=Dt();if(!j){if(!Qa||typeof Qa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let oe=$t[n];oe||(oe=Qa.async(`./${n}`).then(ce=>{const le=ce&&(ce.Engine||ce.default);if(!le||typeof le.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return Pt[n]=le,le}),$t[n]=oe,oe.catch(()=>{}).then(()=>{delete $t[n]})),j=await oe}for(const oe of Object.keys(j))j[oe]!==void 0&&(U[oe]=j[oe]);return Array.isArray(U.DIRECTIONS)||(U.DIRECTIONS=Ft),window.Engine=U,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Dt()-ae)*10)/10},U}window.__mpEnsureEngine=Fi,window.Engine=U,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=G=>!!s[G],j={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=G=>j[G]||"other",ae="#ffffff",oe="#1c1a15";function ce(G){const Y=String(G??"").match(/rgba?\(([^)]+)\)/i);if(!Y)return null;const X=Y[1].split(/[,\s/]+/).filter(Boolean).map(Number);return X.length<3||X.slice(0,3).some(V=>!Number.isFinite(V))||X.length>3&&Number.isFinite(X[3])&&X[3]<.95?null:[X[0],X[1],X[2]]}function le(G){const Y=String(G||"").replace("#",""),X=Y.length===3?Y.split("").map(V=>V+V).join(""):Y;return/^[0-9a-f]{6}$/i.test(X)?[0,2,4].map(V=>parseInt(X.slice(V,V+2),16)):null}function ye(G){const Y=X=>{const V=X/255;return V<=.03928?V/12.92:Math.pow((V+.055)/1.055,2.4)};return .2126*Y(G[0])+.7152*Y(G[1])+.0722*Y(G[2])}function t(G,Y){const X=ye(G),V=ye(Y),se=Math.max(X,V),wa=Math.min(X,V);return(se+.05)/(wa+.05)}function ke(G){const Y=typeof G=="string"?ce(G):G;return Y?t(Y,le(ae))>=t(Y,le(oe))?ae:oe:""}function D(G){const Y=String(G??"").trim();if(!Y)return{lines:null,warning:""};const X=Y.split(/[^0-9]+/).filter(Boolean).map(Number),V=X.filter(se=>![6,7,8,9].includes(se));return X.length===6&&V.length===0?{lines:X,warning:""}:{lines:null,warning:X.length!==6?`爻值需要正好 6 个数字(当前 ${X.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${V.join("/")}),本次按随机摇卦。`}}function xe(G){const Y=String(G??"").trim();if(!Y)return null;const X=Number(Y);return Number.isFinite(X)?X:null}function ve(G){const Y=G instanceof Date?G:new Date,X=V=>String(V).padStart(2,"0");return`${Y.getFullYear()}-${X(Y.getMonth()+1)}-${X(Y.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:D,toNumber:xe,parseRGB:ce,hexToRGB:le,luminance:ye,contrastRatio:t,pickOnColor:ke,ON_DARK:ae,ON_LIGHT:oe,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
2
2
  .pp,.mp-it,.mp-al,.mp-cg,.mp-cl,.mp-cli,.mp-kline,.mp-mb,.mp-mb-paper,.mp-nm,.mp-quick,.mp-cdiff,.mp-shadow,.mp-trace-card,.mp-trace-layer,.mp-prof{--ink:#1b1b1b;--ink2:#3f3a33;--muted:#6f6a60;--label:#8a8378;--faint:#a9a296;
3
3
  --line:#c8c1b2;--dimline:#b9b2a4;--hair:#e9e2d3;
4
4
  /* 底色略沉作「桌面」,--card 跳到近白:原先 bg 与 card 只差 1/255,卡片感等于零。
@@ -73,9 +73,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
73
73
  /* 大限/流年四化:只留色框不填充,与生年四化的实心块区分 */
74
74
  .pp-m.view{background:transparent;box-shadow:inset 0 0 0 1px currentColor}
75
75
  .pp-m.view.lu{color:var(--lu)}.pp-m.view.quan{color:var(--quan)}.pp-m.view.ke{color:var(--ke)}.pp-m.view.ji{color:var(--ji)}
76
- /* 自化:宫干化回本宫。只留色字 + 虚下划线,与生年实心、大限/流年空心分三层 */
77
- .pp-m.self{background:transparent;box-shadow:none;padding:0;text-decoration:underline dotted;text-underline-offset:2px}
78
- .pp-m.self.lu{color:var(--lu)}.pp-m.self.quan{color:var(--quan)}.pp-m.self.ke{color:var(--ke)}.pp-m.self.ji{color:var(--ji)}
76
+ /* 自化:宫干化回本宫。0.64.0 起不再用徽章,改在星名后画彩色小箭头(见 .pp-zha),
77
+ 与生年实心块、大限/流年空心框分成三层——所以这里不再保留 .pp-m.self 样式 */
79
78
  /* 庙旺得利平不陷:星名后的等级小字。刻意压低视觉权重(灰为主、陷才微红),
80
79
  避免与四化的实心彩色方块抢层次 */
81
80
  .pp-b{font-style:normal;font-size:10px;margin-left:3px;padding:0 3px;border-radius:999px;color:var(--muted);letter-spacing:0;opacity:.92;background:var(--band)}
@@ -97,6 +96,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
97
96
  .pp-body 是 static 定位的整块视图容器,::after 却是 absolute,
98
97
  结果每次排盘都会在文档左上角飘出一个孤立的灰色「身」方块。已删除。 */
99
98
  .pp-shen::after{content:"身";position:absolute;top:4px;left:4px;font-size:12px;color:var(--on-accent);background:var(--muted);padding:0 3px;border-radius:2px;z-index:1}
99
+ /* 来因宫角标:右上角「因」,与身宫左上角对称;开关 ppm-d-laiyin 控显隐(默认勾) */
100
+ .pp-laiyin::after{content:"因";position:absolute;top:4px;right:4px;font-size:12px;color:var(--on-accent);background:var(--ji);padding:0 3px;border-radius:2px;z-index:1}
101
+ #ppm-d-laiyin:not(:checked)~.pp-body .pp-laiyin::after{display:none}
100
102
  .pp-legend{display:flex;gap:10px;align-items:center;justify-content:center;font-size:12px;color:var(--muted);margin-top:6px}
101
103
  .pp-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;font-family:system-ui,sans-serif}
102
104
  .pp-chip{font-size:12.5px;padding:3px 9px;border:1px solid var(--line);color:var(--muted);background:var(--bg)}
@@ -179,13 +181,35 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
179
181
  .pp-fx i{font-style:normal;white-space:nowrap;margin-right:4px}
180
182
  .pp-fx i em{font-style:normal;color:var(--faint)}
181
183
  #ppm-sc-feixing:checked~.pp-body .pp-fx{display:block}
184
+ /* 运曜/流曜行:默认隐藏,勾选「显示运曜和流曜」才显示(限流盘显示组,纯增强) */
185
+ .pp-hs{display:none;margin-top:3px;font-size:10.5px;line-height:1.55;color:var(--muted);border-top:1px dashed var(--hair);padding-top:2px}
186
+ .pp-hs i{font-style:normal;white-space:nowrap;margin-right:4px}
187
+ .pp-hs i em{font-style:normal;color:var(--faint)}
188
+ #ppm-d-hs:checked~.pp-body .pp-hs{display:block}
189
+ /* 日干四化:宫格下方一行小字(禄权科忌四颗化星落宫),默认隐藏,勾 ppm-d-rigan 才显示 */
190
+ .pp-rigan{display:none;margin-top:6px;padding:5px 11px;border:1px solid var(--line);background:var(--band);font-size:12px;line-height:1.7;color:var(--muted)}
191
+ .pp-rigan b{color:var(--ink);font-weight:600;margin-right:8px}
192
+ .pp-rigan i{font-style:normal;margin-right:10px;white-space:nowrap}
193
+ .pp-rigan i em{font-style:normal}
194
+ .pp-rigan i .rl{color:var(--lu)}.pp-rigan i .rq{color:var(--quan)}.pp-rigan i .rk{color:var(--ke)}.pp-rigan i .rj{color:var(--ji)}
195
+ #ppm-d-rigan:checked~.pp-rigan{display:block}
182
196
  #ppm-sc-feixing:checked~.pp-body .pp-m.view,
183
197
  #ppm-sc-feixing:checked~.pp-body .pp-viewhua{display:none}
184
- /* 三合派:四化信息整体退场(生年/自化/大限流年/图例/飞星链 chips) */
198
+ /* 三合派:四化信息整体退场(生年/自化/大限流年/图例/飞星链 chips/自化箭头) */
185
199
  #ppm-sc-sanhe:checked~.pp-body .pp-m,
186
- #ppm-sc-sanhe:checked~.pp-body .pp-zh,
200
+ #ppm-sc-sanhe:checked~.pp-body .pp-zha,
187
201
  #ppm-sc-sanhe:checked~.pp-body .pp-viewhua,
188
202
  #ppm-sc-sanhe:checked~.pp-flywrap{display:none}
203
+ /* 自化箭头(学文墨天机):自化是「宫干化回本宫」,箭头画在星名左边、箭头尖顶住星名,
204
+ 由左向右弧着落回这颗星——读成「这笔化飞出去又落回自己」。
205
+ 为什么必须放星名左边:放右边箭头就朝外,视觉上成了「从本宫飞出去」,意思正好反了。
206
+ 为什么 inline 在星名旁而不是绝对定位:宫格左侧会被满星曜的宫撞上(实测压住「紫微 庙」)。 */
207
+ .pp-zha{display:inline-block;margin-right:3px;vertical-align:-1px;line-height:0;cursor:help}
208
+ .pp-zha .z-a{width:19px;height:8px;display:block;overflow:visible}
209
+ .pp-zha .z-shaft{fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}
210
+ .pp-zha .z-head{fill:currentColor;stroke:none}
211
+ .pp-zha.lu{color:var(--lu)}.pp-zha.quan{color:var(--quan)}
212
+ .pp-zha.ke{color:var(--ke)}.pp-zha.ji{color:var(--ji)}
189
213
  #ppm-sc-sihe:checked~.pp-flywrap{display:block}
190
214
  #ppm-sc-feixing:checked~.pp-flywrap{display:block}
191
215
  /* 自化图示(文墨式图例行):箭头颜色跟四化色走 */
@@ -198,7 +222,6 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
198
222
  .pp::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.5;
199
223
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='2' seed='7'/%3E%3CfeColorMatrix values='0 0 0 0 0.32 0 0 0 0 0.29 0 0 0 0 0.24 0 0 0 0.10 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23p)'/%3E%3C/svg%3E")}
200
224
  .pp>*{position:relative;z-index:1}
201
- .pp-zh{margin-left:4px;white-space:nowrap}
202
225
  .pp-borrow{font-size:9.5px;color:var(--muted);margin-top:1px;letter-spacing:.02em}
203
226
 
204
227
  /* —— 宫位点击展开详情 + 三方四正联动 ——
@@ -239,6 +262,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
239
262
  .pp-detail .dt-tri em{font-style:normal;color:var(--muted);font-size:12px;margin-left:5px}
240
263
  .pp-detail .dt-tri em::before{content:"·";margin-right:3px}
241
264
  .pp-detail .dt-empty{color:var(--faint);font-size:12.5px}
265
+ .pp-detail .dt-self{margin-right:10px;white-space:nowrap}
242
266
  .pp-detail .hint{color:var(--faint);font-size:11.5px;margin-top:6px}
243
267
  .pp-ss{display:flex;flex-wrap:wrap;gap:0 7px;font-size:12.5px;line-height:1.6}
244
268
  .pp-bz .pp-ss{flex-direction:column;align-items:center;gap:0;font-size:11.5px;line-height:1.5}
@@ -1417,56 +1441,161 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1417
1441
  .pp table tbody tr:hover{background:var(--hover)}
1418
1442
  /* 结果卡阴影分层:默认最轻,hover 时浮起一档(只对可交互的卡,避免整页抖动) */
1419
1443
  .pp{transition:box-shadow var(--dur) var(--ease)}
1420
- `,s=window.__PP=window.__PP||{};s.CSS=n;const q={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},P={禄:"lu",权:"quan",科:"ke",忌:"ji"},V={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},ee={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},ae={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},se=["初爻","二爻","三爻","四爻","五爻","上爻"],a=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),ge=(e,i,r)=>{const h=Math.round(43),b=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${h}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${h+18}" y="${2.5}" width="${104-h-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${r?" "+r:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${b}</svg>`},ze={木:"M6 1.6V10.8M6 5.2 2.6 2.2M6 7.4 9.4 4.4",火:"M6 1.4C7.6 3.6 9.2 5.4 9.2 7.6A3.2 3.2 0 0 1 2.8 7.6C2.8 5.4 4.4 3.6 6 1.4Z",土:"M1.6 9.6h8.8M6 2.4v7.2M3.4 5.6h5.2",金:"M6 1.2 10.6 6 6 10.8 1.4 6Z",水:"M1.4 7.2C2.9 4.2 4.5 10.2 6 7.2 7.5 4.2 9.1 10.2 10.6 7.2"},F=e=>{const i=ze[e];return i?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${i}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},fe=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(ae[e]||[0,0,0]).slice().reverse().map((l,o)=>{const c=o*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=ge,s._wxIcon=F,s._triGlyph=fe;function he(e,i){return!e||!e.length?"":e.map(r=>{const l=q[r.type]||"aux",o=r.mutagen?`<i class="pp-m ${P[r.mutagen]}">${r.mutagen}</i>`:"",c=i&&i[r.name],d=c?`<i class="pp-m view ${P[c]}">${c}</i>`:"",m=r.brightness?`<em class="pp-b ${V[r.brightness]||"mid"}">${r.brightness}</em>`:"",u=r.inTemple?'<em class="pp-b good">庙</em>':"";return`<span class="pp-st ${l}">${r.name}${m}${u}${o}${d}</span>`}).join("")}function G(e){const i=[];for(let r=0;r<6;r++)i.push(e+r*12);return i.join(",")}const Z=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],R=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],Y=e=>(e%12+12)%12,ve=(e,i)=>e!==i&&[Y(i+4),Y(i+8),Y(i+6)].includes(e);function wt(e,i,r,l,o,c){const d=ee[e.branch]||[1,1],m=R.indexOf(e.branch),u=["pp-cell"];m===i?u.push("pp-soul"):ve(m,i)&&u.push("pp-tri"),e.isBody&&u.push("pp-shen"),d[0]===4&&u.push("pp-lastrow"),d[1]===4&&u.push("pp-lastcol");const h=e.shensha||{},b=Z[Y(i-m)],C=e.selfHua&&e.selfHua.length?`<span class="pp-zh">${e.selfHua.map(T=>`<i class="pp-m self ${P[T.type]}" title="自化:宫干化回本宫">${T.type}</i>`).join("")}</span>`:"";let S="";if(m===i&&l){const T=j=>(q[j.type]||"")==="main";if(!(e.stars||[]).some(T)){const j=l.find(X=>R.indexOf(X.branch)===Y(m+6)),_=j?(j.stars||[]).filter(T):[];_.length&&(S=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${_.map(X=>X.name).join(" ")}</div>`)}}return`<div class="${u.join(" ")}" data-pi="${m}" data-view="${r}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${d[0]};grid-column:${d[1]}">
1421
- <div class="pp-stars">${he(e.stars,o)}${C}</div>
1422
- ${S}
1423
- <div class="pp-ages">${G(e.xiaoxian.age)}</div>
1424
- ${nt(e,c)}
1444
+
1445
+ /* —— 文墨式「显示设置」14 项(学文墨天机 group_fxp / group_4hb / group_3hp)——
1446
+ 纯 CSS 显隐:勾了盘面立刻变,不重排盘、不进引擎、不进工具 schema。
1447
+ 复选框必须是 .pp 的直接子元素,才能用 ~ 命中后面的 .pp-body / .pp-zhlegend。
1448
+ 组1/组2 默认勾(:not(:checked) 才隐藏),组3 默认不勾(:checked 才增强,默认盘观感不变)。 */
1449
+ .pp-disp{font-family:var(--sans);border-bottom:1px solid var(--line);background:var(--band);font-size:12px}
1450
+ .pp-disp>summary{cursor:pointer;padding:5px 12px;color:var(--muted);user-select:none;list-style:none;min-height:32px;display:flex;align-items:center}
1451
+ .pp-disp>summary::-webkit-details-marker{display:none}
1452
+ .pp-disp>summary::before{content:"▸";margin-right:6px;font-size:10px;color:var(--label)}
1453
+ .pp-disp[open]>summary::before{content:"▾"}
1454
+ .pp-disp-g{display:flex;flex-wrap:wrap;gap:2px 14px;padding:3px 12px 8px;border-top:1px dashed var(--hair)}
1455
+ .pp-disp-g>span{width:100%;font-size:11px;color:var(--label);letter-spacing:.06em;margin-bottom:1px}
1456
+ .pp-disp label{display:inline-flex;align-items:center;gap:5px;cursor:pointer;color:var(--ink2);user-select:none;padding:2px 0;min-height:26px}
1457
+ .pp-disp-box{width:13px;height:13px;border:1px solid var(--line);border-radius:3px;background:var(--card);display:inline-block;flex:none}
1458
+ .pp-disp label:hover .pp-disp-box{border-color:var(--lu)}
1459
+ /* 勾选态:12 条 :checked 各自点亮自己 label 的方框(复选框与 .pp-disp 同为 .pp 直接子元素) */
1460
+ #ppm-d-ss:checked~.pp-disp label[for="ppm-d-ss"] .pp-disp-box,
1461
+ #ppm-d-sbg:checked~.pp-disp label[for="ppm-d-sbg"] .pp-disp-box,
1462
+ #ppm-d-zha:checked~.pp-disp label[for="ppm-d-zha"] .pp-disp-box,
1463
+ #ppm-d-ages:checked~.pp-disp label[for="ppm-d-ages"] .pp-disp-box,
1464
+ #ppm-d-sizhu:checked~.pp-disp label[for="ppm-d-sizhu"] .pp-disp-box,
1465
+ #ppm-d-small:checked~.pp-disp label[for="ppm-d-small"] .pp-disp-box,
1466
+ #ppm-d-shen:checked~.pp-disp label[for="ppm-d-shen"] .pp-disp-box,
1467
+ #ppm-d-hua:checked~.pp-disp label[for="ppm-d-hua"] .pp-disp-box,
1468
+ #ppm-d-sf:checked~.pp-disp label[for="ppm-d-sf"] .pp-disp-box,
1469
+ #ppm-d-laiyin:checked~.pp-disp label[for="ppm-d-laiyin"] .pp-disp-box,
1470
+ #ppm-d-zha-bold:checked~.pp-disp label[for="ppm-d-zha-bold"] .pp-disp-box,
1471
+ #ppm-d-bad-ink:checked~.pp-disp label[for="ppm-d-bad-ink"] .pp-disp-box,
1472
+ #ppm-d-bold:checked~.pp-disp label[for="ppm-d-bold"] .pp-disp-box,
1473
+ #ppm-d-hs:checked~.pp-disp label[for="ppm-d-hs"] .pp-disp-box{background:var(--lu);border-color:var(--lu);box-shadow:inset 0 0 0 2px var(--card)}
1474
+ /* 组1 飞星派显示(默认全勾,取消才隐藏) */
1475
+ #ppm-d-ss:not(:checked)~.pp-body .pp-ss-txt{display:none}
1476
+ #ppm-d-sbg:not(:checked)~.pp-body .pp-st.st-sbg{display:none}
1477
+ #ppm-d-zha:not(:checked)~.pp-body .pp-zha{display:none}
1478
+ #ppm-d-zha:not(:checked)~.pp-zhlegend{display:none}
1479
+ #ppm-d-ages:not(:checked)~.pp-body .pp-ages{display:none}
1480
+ #ppm-d-sizhu:not(:checked)~.pp-body .ct-t3{display:none}
1481
+ /* 非节气四柱行:默认隐藏,勾 ppm-d-njq 才显示(纯增强,不改默认观感) */
1482
+ .ct-t3nj{font-size:11.5px;letter-spacing:.2em;font-weight:500;color:var(--muted)}
1483
+ .ct-t3nj .nj-tag{font-style:normal;letter-spacing:.08em;font-size:10px;color:var(--lu);border:1px solid currentColor;border-radius:3px;padding:0 3px;margin-left:6px;vertical-align:1px}
1484
+ #ppm-d-njq:not(:checked)~.pp-body .ct-t3nj{display:none}
1485
+ /* 太极点转换信息:详情面板「太极转换」行,默认隐藏,勾 ppm-d-tjz 才显示 */
1486
+ #ppm-d-tjz:not(:checked)~.pp-body .pp-detail .dt-taiji{display:none}
1487
+ /* 组2 四化派显示(默认全勾,取消才隐藏) */
1488
+ #ppm-d-small:not(:checked)~.pp-body .pp-st.aux{display:none}
1489
+ #ppm-d-shen:not(:checked)~.pp-body .pp-shen::after{display:none}
1490
+ #ppm-d-hua:not(:checked)~.pp-body .pp-m{display:none}
1491
+ #ppm-d-sf:not(:checked)~.pp-body .pp-cell.pp-tri{background:var(--bg)}
1492
+ #ppm-d-sf:not(:checked)~.pp-body .pp-cell.pp-link{background:var(--bg);box-shadow:none}
1493
+ #ppm-d-sf:not(:checked)~.pp-body svg.pp-sf{display:none}
1494
+ /* 组3 限流盘增强(默认不勾,勾了才生效;不改默认盘观感) */
1495
+ #ppm-d-zha-bold:checked~.pp-body .pp-zha .z-shaft{stroke-width:2.8}
1496
+ #ppm-d-bad-ink:checked~.pp-body .pp-st.bad{color:var(--ink)}
1497
+ #ppm-d-bad-ink:checked~.pp-body .pp-st.bad::before{content:none}
1498
+ #ppm-d-bold:checked~.pp-body .pp-st.main,#ppm-d-bold:checked~.pp-body .pp-st.good{font-weight:700}
1499
+ `,n=window.__PP=window.__PP||{};n.CSS=s;const j={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},I={禄:"lu",权:"quan",科:"ke",忌:"ji"},ae=new Set(["三台","八座","恩光","天贵"]),oe={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},ce={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},le={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},ye=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),ke=(e,i,r)=>{const f=Math.round(43),h=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${f}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${f+18}" y="${2.5}" width="${104-f-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${r?" "+r:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${h}</svg>`},D={木:"M6 1.6V10.8M6 5.2 2.6 2.2M6 7.4 9.4 4.4",火:"M6 1.4C7.6 3.6 9.2 5.4 9.2 7.6A3.2 3.2 0 0 1 2.8 7.6C2.8 5.4 4.4 3.6 6 1.4Z",土:"M1.6 9.6h8.8M6 2.4v7.2M3.4 5.6h5.2",金:"M6 1.2 10.6 6 6 10.8 1.4 6Z",水:"M1.4 7.2C2.9 4.2 4.5 10.2 6 7.2 7.5 4.2 9.1 10.2 10.6 7.2"},xe=e=>{const i=D[e];return i?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${i}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},ve=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(le[e]||[0,0,0]).slice().reverse().map((l,o)=>{const c=o*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;n._hexBar=ke,n._wxIcon=xe,n._triGlyph=ve;function G(e,i,r){return!e||!e.length?"":e.map(l=>{const o=j[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${I[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${I[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${oe[l.brightness]||"mid"}">${l.brightness}</em>`:"",f=l.inTemple?'<em class="pp-b good">庙</em>':"",h=r&&r[l.name]?ra(r[l.name],l.name):"",z=ae.has(l.name)?" st-sbg":"";return`<span class="pp-st ${o}${z}">${h}${l.name}${m}${f}${c}${u}</span>`}).join("")}function Y(e){const i=[];for(let r=0;r<6;r++)i.push(e+r*12);return i.join(",")}const X=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],V=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],se=e=>(e%12+12)%12,wa=(e,i)=>e!==i&&[se(i+4),se(i+8),se(i+6)].includes(e);function oa(e,i,r,l,o,c,d,u){const m=ce[e.branch]||[1,1],f=V.indexOf(e.branch),h=["pp-cell"];f===i?h.push("pp-soul"):wa(f,i)&&h.push("pp-tri"),e.isBody&&h.push("pp-shen"),u&&e.branch===u&&h.push("pp-laiyin"),m[0]===4&&h.push("pp-lastrow"),m[1]===4&&h.push("pp-lastcol");const z=e.shensha||{},w=X[se(i-f)];let L="";if(f===i&&l){const N=F=>(j[F.type]||"")==="main";if(!(e.stars||[]).some(N)){const F=l.find(P=>V.indexOf(P.branch)===se(f+6)),J=F?(F.stars||[]).filter(N):[];J.length&&(L=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${J.map(P=>P.name).join(" ")}</div>`)}}return`<div class="${h.join(" ")}" data-pi="${f}" data-view="${r}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
1500
+ <div class="pp-stars">${G(e.stars,o,De(e))}</div>
1501
+ ${L}
1502
+ <div class="pp-ages">${Y(e.xiaoxian.age)}</div>
1503
+ ${it(e,c)}
1504
+ ${ka(e,d)}
1425
1505
  <div class="pp-foot">
1426
1506
  <div class="ft-l">
1427
- <span class="ft-dx">${h.boshi} ${e.daxian.start}-${e.daxian.end}</span>
1428
- <span>${h.jiangqian}</span>
1429
- <span>${h.suiqi}</span>
1507
+ <span class="ft-dx"><span class="pp-ss-txt">${z.boshi}</span> ${e.daxian.start}-${e.daxian.end}</span>
1508
+ <span class="pp-ss-txt">${z.jiangqian}</span>
1509
+ <span class="pp-ss-txt">${z.suiqi}</span>
1430
1510
  </div>
1431
1511
  <div class="ft-r">
1432
- <span>${h.changsheng}</span>
1512
+ <span class="pp-ss-txt">${z.changsheng}</span>
1433
1513
  <span>${e.ganzhi}</span>
1434
- <span class="ft-pn">${b}</span>
1514
+ <span class="ft-pn">${w}</span>
1435
1515
  </div>
1436
1516
  </div>
1437
- </div>`}function nt(e,i){const r=i&&i[e.branch]||[];if(!r.length)return"";const l=r.map(o=>`<i class="${P[o.type]||""}" title="${a(o.star)}化${a(o.type)}">${a(o.type)}<em>→${a(o.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${a(e.ganzhi)}宫干 ${l}</div>`}function kt(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const r=i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1});return["year","month","day","hour"].map(l=>r.pillars[l].ganzhi).join(" ")}catch{return""}}s.ziweiHTML=function(e){const i=R.indexOf(e.soul.branch),r=e.liunian&&e.liunian[0]||null,l=r?r.age:1,o=e.palaces.find(k=>l>=k.daxian.start&&l<=k.daxian.end)||e.palaces[0],c=R.indexOf(o.branch),d=r?R.indexOf(r.lifePalace.branch):i,m=k=>{const O={};for(const Q of k||[])Q&&Q.star&&(O[Q.star]=Q.type);return O},u=(e.daxianList||[]).find(k=>k.branch===o.branch)||null,h={da:m(u&&u.mutagenHits),ln:m(r&&r.mutagenHits)},b={};for(const k of e.daxianList||[])b[k.branch]=k.mutagenHits||[];const C=(k,O)=>e.palaces.map(Q=>wt(Q,k,O,e.palaces,h[O]||null,b)).join(""),S=(k,O)=>`<div class="pp-center">
1438
- ${O==="da"?`<div class="ct-t1">大限 ${o.ganzhi} ${o.daxian.start}-${o.daxian.end}岁</div>`:O==="ln"&&r?`<div class="ct-t1">流年 ${r.ganzhi} ${r.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1517
+ </div>`}function ra(e,i){return`<span class="pp-zha ${I[e]}" title="自化${t(e)}:${t(i)}·宫干化回本宫"><svg class="z-a" viewBox="0 0 22 9" role="img" aria-label="自化${t(e)}">
1518
+ <path class="z-shaft" d="M1 7C6.6 7 11.4 5.6 17.2 3.2"/>
1519
+ <path class="z-head" d="M20.2 2 17.8 4.9 16.6 1.9Z"/>
1520
+ </svg></span>`}n._zhaMark=ra;function De(e){const i={};for(const r of e.selfHua||[])!r||!r.star||!I[r.type]||i[r.star]||(i[r.star]=r.type);return i}function it(e,i){const r=i&&i[e.branch]||[];if(!r.length)return"";const l=r.map(o=>`<i class="${I[o.type]||""}" title="${t(o.star)}化${t(o.type)}">${t(o.type)}<em>→${t(o.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function ka(e,i){const r=i&&i[e.branch]||null;return r?`<div class="pp-hs">${Object.entries(r).map(([o,c])=>`<i>${t(o)}<em>${t(c)}</em></i>`).join("")}</div>`:""}function Fa(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const r=i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1});return["year","month","day","hour"].map(l=>r.pillars[l].ganzhi).join(" ")}catch{return""}}function za(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;return!i||!i.buildBazi||!e.input?null:i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1}).pillars.day.stem}catch{return null}}n.ziweiHTML=function(e){const i=V.indexOf(e.soul.branch),r=e.liunian&&e.liunian[0]||null,l=r?r.age:1,o=e.palaces.find(k=>l>=k.daxian.start&&l<=k.daxian.end)||e.palaces[0],c=V.indexOf(o.branch),d=r?V.indexOf(r.lifePalace.branch):i,u=k=>{const T={};for(const E of k||[])E&&E.star&&(T[E.star]=E.type);return T},m=(e.daxianList||[]).find(k=>k.branch===o.branch)||null,f={da:u(m&&m.mutagenHits),ln:u(r&&r.mutagenHits)},h={};for(const k of e.daxianList||[])h[k.branch]=k.mutagenHits||[];const z=(()=>{const k=za(e);if(!k)return null;const T=(e.daxianList||[]).find(re=>re.stem===k);if(!T)return null;const E={};for(const re of e.palaces)for(const x of re.stars||[])x.name in E||(E[x.name]=re.branch);return{stem:k,items:(T.mutagenHits||[]).map(re=>({type:re.type,star:re.star,branch:E[re.star]||null,palace:E[re.star]?(e.palaces.find(x=>x.branch===E[re.star])||{}).palace:null}))}})();let w=null;if(r){w={};for(const[k,T]of Object.entries(r))/^(流|年解)/.test(k)&&typeof T=="string"&&V.includes(T)&&(w[T]=w[T]||{},w[T][k]=T)}const L={da:m&&m.yunStars?(()=>{const k={};for(const[T,E]of Object.entries(m.yunStars))(k[E]=k[E]||{})[T]=E;if(m.yunSuiqi)for(const[T,E]of Object.entries(m.yunSuiqi))(k[E]=k[E]||{})[T]=E;if(m.yunJiangqian)for(const[T,E]of Object.entries(m.yunJiangqian))(k[E]=k[E]||{})[T]=E;return k})():null,ln:w};if(e.liunian&&e.liunian.length){const k=e.liunian.find(T=>T.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(k.lnSuiqi)for(const[T,E]of Object.entries(k.lnSuiqi))(w[E]=w[E]||{})[T]=E;if(k.lnJiangqian)for(const[T,E]of Object.entries(k.lnJiangqian))(w[E]=w[E]||{})[T]=E}const N=(k,T)=>e.palaces.map(E=>oa(E,k,T,e.palaces,f[T]||null,h,L[T]||null,e.laiyin&&e.laiyin.branch)).join(""),F=(k,T)=>`<div class="pp-center">
1521
+ ${T==="da"?`<div class="ct-t1">大限 ${o.ganzhi} ${o.daxian.start}-${o.daxian.end}岁</div>`:T==="ln"&&r?`<div class="ct-t1">流年 ${r.ganzhi} ${r.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1439
1522
  <div class="ct-t2">公历 ${e.input.year}-${String(e.input.month).padStart(2,"0")}-${String(e.input.day).padStart(2,"0")} ${String(e.input.hour).padStart(2,"0")}:${String(e.input.minute).padStart(2,"0")}</div>
1440
1523
  <div class="ct-t2">农历 ${e.lunar.year}年${e.lunar.isLeap?`闰${e.lunar.monthRaw||e.lunar.month}`:e.lunar.month}月${e.lunar.day}日${e.hourBranch}时${e.lunar.isLeap&&e.lunar.monthRaw&&e.lunar.month!==e.lunar.monthRaw?`(按${e.lunar.month}月起盘)`:""}</div>
1441
- ${kt(e)?`<div class="ct-t3">${kt(e)}</div>`:""}
1442
- <div class="ct-t4">命主 ${e.lifeMaster} 身主 ${e.bodyMaster}${e.bodyMasterNote?`<span class="pp-dim" title="${a(e.bodyMasterNote)}">*</span>`:""}</div>
1524
+ ${Fa(e)?`<div class="ct-t3">${Fa(e)}</div>`:""}
1525
+ ${e.nonJieqi?`<div class="ct-t3 ct-t3nj" title="${t(e.nonJieqi.note)}">${e.nonJieqi.year} ${e.nonJieqi.month} ${e.nonJieqi.day} ${e.nonJieqi.hour}<em class="nj-tag">非节气</em></div>`:""}
1526
+ <div class="ct-t4">命主 ${e.lifeMaster}${e.lifeMasterNote?`<span class="pp-dim" title="${t(e.lifeMasterNote)}">*</span>`:""} 身主 ${e.bodyMaster}${e.bodyMasterNote?`<span class="pp-dim" title="${t(e.bodyMasterNote)}">*</span>`:""}</div>
1443
1527
  <div class="ct-t4">命宫 ${e.soul.branch} 身宫 ${e.body.branch} 五行局 ${e.bureau.name}</div>
1444
1528
  <div class="ct-t4">子年斗君 ${e.doujun?e.doujun.zinian:"—"} 流年斗君 ${r&&r.doujun?r.doujun:"—"}</div>
1445
- <div class="ct-t4">紫微 ${e.ziwei} 天府 ${e.tianfu} ${O==="da"?"大限命宫 "+R[c]:O==="ln"?"流年命宫 "+R[d]:"本命命宫 "+e.soul.branch}</div>
1446
- ${O==="da"||O==="ln"?`<div class="ct-t4 pp-viewhua">${O==="da"?"大限":"流年"}四化 ${(O==="da"?h.da:h.ln)&&Object.keys(O==="da"?h.da:h.ln).length?Object.entries(O==="da"?h.da:h.ln).map(([$e,ue])=>`${$e}化${ue}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1447
- <div class="pp-legend"><span class="pp-m lu">禄</span><span class="pp-m quan">权</span><span class="pp-m ke">科</span><span class="pp-m ji">忌</span><span>实心=生年四化 空心=大限/流年四化 虚下划线=自化 红框=命宫 浅底=三方四正</span></div>
1448
- </div>`,T=(k,O,Q)=>`<div class="pp-body ${k}" data-view="${Q}" data-soul="${O}"><div class="pp-grid">${C(O,Q)}${S(O,Q)}</div><div class="pp-detail"></div></div>`,j=e.changqu,_=j?`<div class="pp-chips">
1449
- <span class="pp-chip">昌 ${j.wenchang.branch}(${j.wenchang.palace})</span>
1450
- <span class="pp-chip">曲 ${j.wenqu.branch}(${j.wenqu.palace})</span>
1451
- <span class="pp-chip">${j.relation}</span>
1452
- <span class="pp-chip">入命三方 ${j.inSoulSanfang?"是":"否"}</span>
1453
- <span class="pp-chip ${j.absorb.label==="杂"?"warn":"ok"}">吸收·${j.absorb.label}</span>
1454
- </div>`:"",X=(e.patterns||[]).length?`<div class="pp-chips">${e.patterns.map(k=>{const O=k.status==="broken"&&Array.isArray(k.breaks)&&k.breaks.length,Q=`${k.evidence||""}${O?`;破格:${k.breaks.join(";")}`:""}`;return`<span class="pp-chip ${O?"broken":k.tone==="good"?"ok":k.tone==="bad"?"warn":""}" title="${a(Q)}">${k.name}${O?"(破格)":""}</span>`}).join("")}</div>`:"",H=(e.daxianList||[]).length?`<div class="pp-chips">${e.daxianList.slice(0,8).map(k=>`<span class="pp-chip" title="${a(`${k.ganzhi} 宫干四化:`+k.mutagenHits.map(O=>`${O.star}化${O.type}→${O.palace||"未上盘"}`).join("、"))}">${k.branch} ${k.ages[0]}-${k.ages[1]}</span>`).join("")}</div>`:"",w=r&&r.mutagenHits&&r.mutagenHits.length?`<div class="pp-chips">${r.mutagenHits.map(k=>`<span class="pp-chip ${k.type==="忌"?"warn":k.type==="禄"?"ok":""}">${k.star}化${k.type}→${k.palace||"未上盘"}</span>`).join("")}</div>`:"",z=e.zuoyao,te=z?z.placed&&z.placed.length?`<div class="pp-sec"><div class="pp-sec-h">杂曜全表 · 已排 ${z.placed.length} 颗(${z.starTotal} 颗盘)</div>
1455
- <div class="pp-chips">${z.placed.map(k=>`<span class="pp-chip${k.inTemple?" ok":""}" title="${a(k.meaning||"")}">${a(k.name)} ${a(k.branch)}(${a(k.palace)})${k.inTemple?"·庙":""}</span>`).join("")}</div>
1456
- <details class="pp-zy"><summary>逐颗安星诀(${z.placed.length} 条 · 出多处近代通行辑本并核,属通行说,不是《全书》原文)</summary><div class="pp-zy-v">${a(z.verses).replace(/\n/g,"<br>")}</div></div></details>
1457
- ${z.skipped&&z.skipped.length?`<div class="pp-zy-s">${z.skipped.map(k=>a(k)).join("")}</div>`:""}</div>`:`<div class="pp-sec"><div class="pp-sec-h">杂曜 · 本盘 ${z.starTotal} 颗(通行简盘)</div>
1458
- <div class="pp-zy-s">开「杂曜全表」追加十二颗:解神·天巫·天月·阴煞(生月)/天官·天福·天厨(生年干)/蜚廉·天德·年解(生年支)/天才(命宫+生年支)·天寿(身宫+生年支)。${z.skipped&&z.skipped.length?`不另立:${z.skipped.map(k=>a(k)).join("")}`:""}</div></div>`:"",D=e.flyChains?(()=>{const k=["禄","权","科","忌"].map(O=>{const Q=e.flyChains[O];if(!Q||!Q.steps.length)return"";const $e=Q.path.map(me=>String(me).replace(/宫$/,"")).join("→"),ue=Q.steps.map(me=>`${me.from}(${me.fromStem})化${O}${me.star}→${me.to}`).join(";");return`<span class="pp-chip ${O==="忌"?"warn":O==="禄"?"ok":""}" title="${a(ue)}">飞${O} ${a($e)}${Q.closed?"↺":""}</span>`}).join("");return k?`<div class="pp-chips">${k}</div>`:""})():"",oe=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(k=>{const O=/忌/.test(k)?"warn":/自化/.test(k)?"":"ok",Q=pe=>String(pe).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),$e=(e.flyComposite.targets||[]).find(pe=>pe.palace===Q(k)),ue=$e?$e.incoming.map(pe=>`${pe.from}化${pe.type}${pe.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${O}" title="${a(ue)}">三方四正 ${a(k)}</span>`}).join("")}</div>`:"",$=e.flow,ce=$?(()=>{const k=ue=>(ue.mutagenHits||[]).length?ue.mutagenHits.map(pe=>`<i>${pe.star}化${pe.type}<em>→${pe.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',O=(ue,pe,me)=>`<div class="flow-row"><b>${ue}</b><span class="flow-p"><span class="flow-k">${pe.ganzhi||"—"} 落${pe.palace||"未上盘"}(${pe.branch})</span>${me?`<em class="flow-same">${me}</em>`:""}</span><span class="flow-m">${k(pe)}</span></div>`,$e=$.day.branch===$.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1459
- <div class="flow-row"><b>基准</b><span class="flow-p">${$.asOf.solar}</span><span class="flow-m">农历 ${$.asOf.lunar} 流年 ${$.asOf.yearGanzhi}(斗君 ${$.year.doujun})</span></div>
1460
- ${O(`流月 ${$.month.index} 月`,$.month)}
1461
- ${O(`流日 ${$.day.index} 日`,$.day,$e)}
1462
- ${O(`流时 ${R[$.hour.hourIndex]}时`,$.hour)}
1463
- </div>`})():"";return s._zw=e,s.briefHTML(e)+`<div class="pp">
1529
+ <div class="ct-t4">紫微 ${e.ziwei} 天府 ${e.tianfu} ${T==="da"?"大限命宫 "+V[c]:T==="ln"?"流年命宫 "+V[d]:"本命命宫 "+e.soul.branch}</div>
1530
+ ${T==="da"||T==="ln"?`<div class="ct-t4 pp-viewhua">${T==="da"?"大限":"流年"}四化 ${(T==="da"?f.da:f.ln)&&Object.keys(T==="da"?f.da:f.ln).length?Object.entries(T==="da"?f.da:f.ln).map(([re,x])=>`${re}化${x}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1531
+ <div class="pp-legend"><span class="pp-m lu">禄</span><span class="pp-m quan">权</span><span class="pp-m ke">科</span><span class="pp-m ji">忌</span><span>实心=生年四化 空心=大限/流年四化 箭头=自化 红框=命宫 浅底=三方四正</span></div>
1532
+ </div>`,J=(k,T,E)=>`<div class="pp-body ${k}" data-view="${E}" data-soul="${T}"><div class="pp-grid">${N(T,E)}${F(T,E)}</div><div class="pp-detail"></div></div>`,P=e.changqu,M=P?`<div class="pp-chips">
1533
+ <span class="pp-chip">昌 ${P.wenchang.branch}(${P.wenchang.palace})</span>
1534
+ <span class="pp-chip">曲 ${P.wenqu.branch}(${P.wenqu.palace})</span>
1535
+ <span class="pp-chip">${P.relation}</span>
1536
+ <span class="pp-chip">入命三方 ${P.inSoulSanfang?"是":"否"}</span>
1537
+ <span class="pp-chip ${P.absorb.label==="杂"?"warn":"ok"}">吸收·${P.absorb.label}</span>
1538
+ </div>`:"",O=(e.patterns||[]).length?`<div class="pp-chips">${e.patterns.map(k=>{const T=k.status==="broken"&&Array.isArray(k.breaks)&&k.breaks.length,E=`${k.evidence||""}${T?`;破格:${k.breaks.join(";")}`:""}`;return`<span class="pp-chip ${T?"broken":k.tone==="good"?"ok":k.tone==="bad"?"warn":""}" title="${t(E)}">${k.name}${T?"(破格)":""}</span>`}).join("")}</div>`:"",W=(e.daxianList||[]).length?`<div class="pp-chips">${e.daxianList.slice(0,8).map(k=>`<span class="pp-chip" title="${t(`${k.ganzhi} 宫干四化:`+k.mutagenHits.map(T=>`${T.star}化${T.type}→${T.palace||"未上盘"}`).join("、"))}">${k.branch} ${k.ages[0]}-${k.ages[1]}</span>`).join("")}</div>`:"",q=r&&r.mutagenHits&&r.mutagenHits.length?`<div class="pp-chips">${r.mutagenHits.map(k=>`<span class="pp-chip ${k.type==="忌"?"warn":k.type==="禄"?"ok":""}">${k.star}化${k.type}→${k.palace||"未上盘"}</span>`).join("")}</div>`:"",R=e.zuoyao,$=R?R.placed&&R.placed.length?`<div class="pp-sec"><div class="pp-sec-h">杂曜全表 · 已排 ${R.placed.length} 颗(${R.starTotal} 颗盘)</div>
1539
+ <div class="pp-chips">${R.placed.map(k=>`<span class="pp-chip${k.inTemple?" ok":""}" title="${t(k.meaning||"")}">${t(k.name)} ${t(k.branch)}(${t(k.palace)})${k.inTemple?"·庙":""}</span>`).join("")}</div>
1540
+ <details class="pp-zy"><summary>逐颗安星诀(${R.placed.length} 条 · 出多处近代通行辑本并核,属通行说,不是《全书》原文)</summary><div class="pp-zy-v">${t(R.verses).replace(/\n/g,"<br>")}</div></div></details>
1541
+ ${R.skipped&&R.skipped.length?`<div class="pp-zy-s">${R.skipped.map(k=>t(k)).join("")}</div>`:""}</div>`:`<div class="pp-sec"><div class="pp-sec-h">杂曜 · 本盘 ${R.starTotal} 颗(通行简盘)</div>
1542
+ <div class="pp-zy-s">开「杂曜全表」追加十二颗:解神·天巫·天月·阴煞(生月)/天官·天福·天厨(生年干)/蜚廉·天德·年解(生年支)/天才(命宫+生年支)·天寿(身宫+生年支)。${R.skipped&&R.skipped.length?`不另立:${R.skipped.map(k=>t(k)).join("")}`:""}</div></div>`:"",ue=e.flyChains?(()=>{const k=["禄","权","科","忌"].map(T=>{const E=e.flyChains[T];if(!E||!E.steps.length)return"";const re=E.path.map(ze=>String(ze).replace(/宫$/,"")).join("→"),x=E.steps.map(ze=>`${ze.from}(${ze.fromStem})化${T}${ze.star}→${ze.to}`).join(";");return`<span class="pp-chip ${T==="忌"?"warn":T==="禄"?"ok":""}" title="${t(x)}">飞${T} ${t(re)}${E.closed?"↺":""}</span>`}).join("");return k?`<div class="pp-chips">${k}</div>`:""})():"",Q=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(k=>{const T=/忌/.test(k)?"warn":/自化/.test(k)?"":"ok",E=pe=>String(pe).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),re=(e.flyComposite.targets||[]).find(pe=>pe.palace===E(k)),x=re?re.incoming.map(pe=>`${pe.from}化${pe.type}${pe.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${T}" title="${t(x)}">三方四正 ${t(k)}</span>`}).join("")}</div>`:"",ne=e.flow,Ae=ne?(()=>{const k=x=>(x.mutagenHits||[]).length?x.mutagenHits.map(pe=>`<i>${pe.star}化${pe.type}<em>→${pe.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',T=(x,pe,ze)=>`<div class="flow-row"><b>${x}</b><span class="flow-p"><span class="flow-k">${pe.ganzhi||"—"} 落${pe.palace||"未上盘"}(${pe.branch})</span>${ze?`<em class="flow-same">${ze}</em>`:""}</span><span class="flow-m">${k(pe)}</span></div>`,re=ne.day.branch===ne.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1543
+ <div class="flow-row"><b>基准</b><span class="flow-p">${ne.asOf.solar}</span><span class="flow-m">农历 ${ne.asOf.lunar} 流年 ${ne.asOf.yearGanzhi}(斗君 ${ne.year.doujun})</span></div>
1544
+ ${T(`流月 ${ne.month.index} 月`,ne.month)}
1545
+ ${T(`流日 ${ne.day.index} 日`,ne.day,re)}
1546
+ ${T(`流时 ${V[ne.hour.hourIndex]}时`,ne.hour)}
1547
+ </div>`})():"";return n._zw=e,n.briefHTML(e)+`<div class="pp">
1464
1548
  <input type="radio" name="ppm" id="ppm-ben" class="pp-r" checked>
1465
1549
  <input type="radio" name="ppm" id="ppm-da" class="pp-r">
1466
1550
  <input type="radio" name="ppm" id="ppm-ln" class="pp-r">
1467
1551
  <input type="radio" name="ppm-sc" id="ppm-sc-sihe" class="pp-r" checked>
1468
1552
  <input type="radio" name="ppm-sc" id="ppm-sc-feixing" class="pp-r">
1469
1553
  <input type="radio" name="ppm-sc" id="ppm-sc-sanhe" class="pp-r">
1554
+ <!-- 文墨式显示设置:14 个复选框必须与 .pp-body / .pp-zhlegend 同层(.pp 的直接子元素)。
1555
+ 组1/组2 默认勾(观感与旧版一致),组3 默认不勾(纯增强)。不重排盘、不进引擎。 -->
1556
+ <input type="checkbox" id="ppm-d-ss" class="pp-r" checked>
1557
+ <input type="checkbox" id="ppm-d-sbg" class="pp-r" checked>
1558
+ <input type="checkbox" id="ppm-d-zha" class="pp-r" checked>
1559
+ <input type="checkbox" id="ppm-d-ages" class="pp-r" checked>
1560
+ <input type="checkbox" id="ppm-d-sizhu" class="pp-r" checked>
1561
+ <input type="checkbox" id="ppm-d-small" class="pp-r" checked>
1562
+ <input type="checkbox" id="ppm-d-shen" class="pp-r" checked>
1563
+ <input type="checkbox" id="ppm-d-hua" class="pp-r" checked>
1564
+ <input type="checkbox" id="ppm-d-sf" class="pp-r" checked>
1565
+ <input type="checkbox" id="ppm-d-laiyin" class="pp-r" checked>
1566
+ <input type="checkbox" id="ppm-d-zha-bold" class="pp-r">
1567
+ <input type="checkbox" id="ppm-d-bad-ink" class="pp-r">
1568
+ <input type="checkbox" id="ppm-d-bold" class="pp-r">
1569
+ <input type="checkbox" id="ppm-d-hs" class="pp-r">
1570
+ <input type="checkbox" id="ppm-d-rigan" class="pp-r">
1571
+ <input type="checkbox" id="ppm-d-njq" class="pp-r">
1572
+ <input type="checkbox" id="ppm-d-tjz" class="pp-r">
1573
+ <details class="pp-disp">
1574
+ <summary>显示设置 · 17 项(学文墨天机)</summary>
1575
+ <div class="pp-disp-g"><span>飞星派显示</span>
1576
+ <label for="ppm-d-ss"><i class="pp-disp-box"></i>显示神煞</label>
1577
+ <label for="ppm-d-sbg"><i class="pp-disp-box"></i>三台八座恩光天贵</label>
1578
+ <label for="ppm-d-zha"><i class="pp-disp-box"></i>彩色箭头标识自化</label>
1579
+ <label for="ppm-d-ages"><i class="pp-disp-box"></i>流年虚岁年龄</label>
1580
+ <label for="ppm-d-sizhu"><i class="pp-disp-box"></i>中宫八字</label>
1581
+ <label for="ppm-d-rigan"><i class="pp-disp-box"></i>显示日干四化</label>
1582
+ <label for="ppm-d-njq"><i class="pp-disp-box"></i>显示非节气四柱</label>
1583
+ <label for="ppm-d-tjz"><i class="pp-disp-box"></i>显示太极点转换信息</label>
1584
+ </div>
1585
+ <div class="pp-disp-g"><span>四化派显示</span>
1586
+ <label for="ppm-d-small"><i class="pp-disp-box"></i>显示小星</label>
1587
+ <label for="ppm-d-shen"><i class="pp-disp-box"></i>显示身宫</label>
1588
+ <label for="ppm-d-hua"><i class="pp-disp-box"></i>显示命宫四化</label>
1589
+ <label for="ppm-d-sf"><i class="pp-disp-box"></i>显示三方四正</label>
1590
+ <label for="ppm-d-laiyin"><i class="pp-disp-box"></i>显示来因宫</label>
1591
+ </div>
1592
+ <div class="pp-disp-g"><span>限流盘显示</span>
1593
+ <label for="ppm-d-zha-bold"><i class="pp-disp-box"></i>自化箭头加粗</label>
1594
+ <label for="ppm-d-bad-ink"><i class="pp-disp-box"></i>六煞星黑字</label>
1595
+ <label for="ppm-d-bold"><i class="pp-disp-box"></i>主辅星加粗</label>
1596
+ <label for="ppm-d-hs"><i class="pp-disp-box"></i>显示运曜和流曜</label>
1597
+ </div>
1598
+ </details>
1470
1599
  <div class="pp-modes">
1471
1600
  <label for="ppm-ben">本命</label><label for="ppm-da">大限</label><label for="ppm-ln">流年</label>
1472
1601
  <span class="pp-soon">点任一宫位看详情</span>
@@ -1474,108 +1603,110 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1474
1603
  <div class="pp-modes pp-schools">
1475
1604
  <label for="ppm-sc-sihe">四化</label><label for="ppm-sc-feixing">飞星</label><label for="ppm-sc-sanhe">三合</label>
1476
1605
  </div>
1477
- ${T("ben",i,"ben")}
1478
- ${T("da",c,"da")}
1479
- ${T("ln",d,"ln")}
1480
- <div class="pp-zhlegend">自化图示 <i class="z-lu">→禄</i><i class="z-quan">→权</i><i class="z-ke">→科</i><i class="z-ji">→忌</i></div>
1481
- <div class="pp-flywrap">${D}${oe}</div>
1482
- </div>${ce}${_}${X}${H}${w}${te}`};function Se(e){return e.length?e.map(i=>{const r=q[i.type]||"aux",l=i.brightness?`<em class="dt-br ${V[i.brightness]||"mid"}">${i.brightness}</em>`:"",o=i.inTemple?'<em class="dt-br good">庙</em>':"",c=i.mutagen?`<i class="pp-m ${P[i.mutagen]}">${i.mutagen}</i>`:"";return`<span class="dt-st ${r}">${i.name}${l}${o}${c}</span>`}).join(""):'<span class="dt-empty">无</span>'}function _t(e,i){const r=s._zw;if(!r)return"";const l=w=>r.palaces.find(z=>R.indexOf(z.branch)===w),o=l(e)||r.palaces.find(w=>R.indexOf(w.branch)===e);if(!o)return"";const c=R.indexOf(o.branch),d=Z[Y(i-c)],m=o.shensha||{},u=o.stars.filter(w=>w.type==="主星"),h=o.stars.filter(w=>w.type==="吉星"||w.type==="辅星"),b=o.stars.filter(w=>w.type==="煞星"),C=o.stars.filter(w=>!["主星","吉星","辅星","煞星"].includes(w.type)),S=(o.selfHua||[]).length?o.selfHua.map(w=>`<i class="pp-m self ${P[w.type]}" title="自化:宫干化回本宫">${w.type}</i>`).join(""):'<span class="dt-empty">无</span>',T=[Y(c+4),Y(c+8),Y(c+6)].map(w=>{const z=l(w),te=Z[Y(i-w)],D=z?z.stars.filter($=>$.type==="主星").map($=>$.name).join("、"):"",oe=w===Y(c+6)?"对宫":"三合";return`<span class="dt-st">${te}[${R[w]}]<b>${D||"无主星"}</b><em>${oe}</em></span>`}).join(""),j=l(Y(c+6)),_=j?j.stars.filter(w=>w.type==="主星"):[],X=u.length?Se(u):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${_.length?_.map(w=>w.name).join("、"):"亦无主星"}</b></span>`,H=(w,z)=>`<div class="dt-dr"><span class="dt-k">${w}</span><div class="dt-v">${z}</div></div>`;return`<div class="dt-dh">
1606
+ ${J("ben",i,"ben")}
1607
+ ${J("da",c,"da")}
1608
+ ${J("ln",d,"ln")}
1609
+ ${(()=>{if(!z)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},T=z.items.map(E=>`<i><em class="${k[E.type]||""}">${E.type}</em>${t(E.star)}<em>${t(E.branch||"?")}${E.palace?`·${t(E.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(z.stem)}四化</b>${T}</div>`})()} ${(()=>{if(!z)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},T=z.items.map(E=>`<i><em class="${k[E.type]||""}">${E.type}</em>${t(E.star)}<em>${t(E.branch||"?")}${E.palace?`·${t(E.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(z.stem)}四化</b>${T}</div>`})()}
1610
+ <div class="pp-zhlegend">自化图示 <span class="z-lu">${n._zhaMark("禄","本宫")}禄</span><span class="z-quan">${n._zhaMark("权","本宫")}权</span><span class="z-ke">${n._zhaMark("科","本宫")}科</span><span class="z-ji">${n._zhaMark("忌","本宫")}忌</span></div>
1611
+ <div class="pp-flywrap">${ue}${Q}</div>
1612
+ </div>${Ae}${M}${O}${W}${q}${$}`};function pa(e){return e.length?e.map(i=>{const r=j[i.type]||"aux",l=i.brightness?`<em class="dt-br ${oe[i.brightness]||"mid"}">${i.brightness}</em>`:"",o=i.inTemple?'<em class="dt-br good">庙</em>':"",c=i.mutagen?`<i class="pp-m ${I[i.mutagen]}">${i.mutagen}</i>`:"";return`<span class="dt-st ${r}">${i.name}${l}${o}${c}</span>`}).join(""):'<span class="dt-empty">无</span>'}function la(e,i){const r=n._zw;if(!r)return"";const l=q=>r.palaces.find(R=>V.indexOf(R.branch)===q),o=l(e)||r.palaces.find(q=>V.indexOf(q.branch)===e);if(!o)return"";const c=V.indexOf(o.branch),d=X[se(i-c)],u=o.shensha||{},m=o.stars.filter(q=>q.type==="主星"),f=o.stars.filter(q=>q.type==="吉星"||q.type==="辅星"),h=o.stars.filter(q=>q.type==="煞星"),z=o.stars.filter(q=>!["主星","吉星","辅星","煞星"].includes(q.type)),w=(o.selfHua||[]).length?o.selfHua.map(q=>`<span class="dt-self">${ra(q.type,q.star||"本宫")}${t(q.star||"")}</span>`).join(""):'<span class="dt-empty">无</span>',L=[se(c+4),se(c+8),se(c+6)].map(q=>{const R=l(q),$=X[se(i-q)],ue=R?R.stars.filter(ne=>ne.type==="主星").map(ne=>ne.name).join("、"):"",Q=q===se(c+6)?"对宫":"三合";return`<span class="dt-st">${$}[${V[q]}]<b>${ue||"无主星"}</b><em>${Q}</em></span>`}).join(""),N=l(se(c+6)),F=N?N.stars.filter(q=>q.type==="主星"):[],J=m.length?pa(m):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${F.length?F.map(q=>q.name).join("、"):"亦无主星"}</b></span>`,P=(q,R)=>`<div class="dt-dr"><span class="dt-k">${q}</span><div class="dt-v">${R}</div></div>`,M=X.length,O=se(i-c),W=X.map((q,R)=>{const $=se(c+(R-O+M)%M);return`<span class="dt-st">${X[R]}[${V[$]}]</span>`}).join("");return`<div class="dt-dh">
1483
1613
  <b>${d}</b><span>${o.branch}宫 · ${o.ganzhi}</span>
1484
1614
  <span>大限 ${o.daxian.start}-${o.daxian.end}</span>
1485
1615
  <span>小限起 ${o.xiaoxian.age} 岁</span>
1486
1616
  ${o.isBody?"<span>· 身宫</span>":""}
1487
1617
  <span class="dt-x" data-pp-close="1">收起</span>
1488
1618
  </div>
1489
- ${H("主星",X)}
1490
- ${H("吉辅",Se(h))}
1491
- ${b.length?H("煞星",Se(b)):""}
1492
- ${C.length?H("杂曜",Se(C)):""}
1493
- ${H("宫干四化",S)}
1494
- ${H("十二神",`<span class="dt-tri">长生 ${m.changsheng||"—"} 博士 ${m.boshi||"—"} 将前 ${m.jiangqian||"—"} 岁前 ${m.suiqi||"—"}</span>`)}
1495
- ${H("三方四正",`<span class="dt-tri">${T}</span>`)}
1496
- <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function Xe(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(i=>{i.classList.remove("pp-sel"),i.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(i=>i.setAttribute("aria-expanded","false"))}const $a={};function zt(e,i){jt(e);const r=e.querySelector(".pp-grid");if(!r)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],o=u=>{const h=e.querySelector('.pp-cell[data-pi="'+u+'"]');if(!h)return null;const b=Number(h.style.gridRow),C=Number(h.style.gridColumn),S=Math.min(75,Math.max(25,(b-.5)*25));return C===1?[25,S]:[75,S]},c=l.map(o);if(c.some(u=>!u))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const m=(u,h,b,C)=>{const S=document.createElementNS("http://www.w3.org/2000/svg","line");S.setAttribute("x1",u),S.setAttribute("y1",h),S.setAttribute("x2",b),S.setAttribute("y2",C),d.appendChild(S)};m(c[0][0],c[0][1],c[1][0],c[1][1]),m(c[1][0],c[1][1],c[2][0],c[2][1]),m(c[2][0],c[2][1],c[3][0],c[3][1]),m(c[3][0],c[3][1],c[0][0],c[0][1]);for(let u=0;u<4;u++){const h=document.createElementNS("http://www.w3.org/2000/svg","circle");h.setAttribute("cx",c[u][0]),h.setAttribute("cy",c[u][1]),h.setAttribute("r",u===0?.9:.7),u===0&&h.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(h)}r.style.position="relative",r.appendChild(d)}function jt(e){const i=e.querySelector("svg.pp-sf");i&&i.remove()}function Re(){if(Re.done||typeof document>"u"||!document.addEventListener)return;Re.done=!0;const e=i=>{const r=i.closest(".pp-body");if(!r)return;const l=r.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){Xe(r),jt(r),l.classList.remove("open"),l.innerHTML="";return}Xe(r);const o=Number(i.dataset.pi),c=Number(r.dataset.soul);zt(r,o),r.querySelectorAll(".pp-cell").forEach(m=>{const u=Number(m.dataset.pi);(u===Y(o+4)||u===Y(o+8)||u===Y(o+6))&&m.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=_t(o,c),l.classList.add("open")};document.addEventListener("click",i=>{const r=i.target;if(r&&r.closest&&r.closest("[data-pp-close]")){const o=r.closest(".pp-body");if(o){Xe(o),jt(o);const c=o.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=r&&r.closest?r.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const r=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;r&&(i.preventDefault(),e(r))})}s.bindZiwei=Re,s._palaceDetailHTML=_t,Re();function Ht(e,i){const r=i||{},l=e.slice().sort((o,c)=>c.position-o.position);return r.plain?l.map(o=>`<div class="mp-hy-row hy-plain">
1497
- <span class="mp-hy-nm">${o.name||se[o.position-1]}</span>
1498
- ${ge(o.yinYang==="阳",o.moving)}
1499
- </div>`).join(""):l.map(o=>{const c=o.yinYang==="阳",d=r.shiYing?o.position===r.shi?'<span class="mp-hy-sy">世</span>':o.position===r.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",m=o.moving?`<i class="mp-hy-mv" title="动爻">${c?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1619
+ ${P("主星",J)}
1620
+ ${P("吉辅",pa(f))}
1621
+ ${h.length?P("煞星",pa(h)):""}
1622
+ ${z.length?P("杂曜",pa(z)):""}
1623
+ ${P("宫干四化",w)}
1624
+ ${P("十二神",`<span class="dt-tri">长生 ${u.changsheng||"—"} 博士 ${u.boshi||"—"} 将前 ${u.jiangqian||"—"} 岁前 ${u.suiqi||"—"}</span>`)}
1625
+ ${P("三方四正",`<span class="dt-tri">${L}</span>`)}
1626
+ ${P("太极转换",`<span class="dt-tri dt-taiji">以${d}[${o.branch}]立太极${W}</span>`)}
1627
+ <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function ja(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(i=>{i.classList.remove("pp-sel"),i.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(i=>i.setAttribute("aria-expanded","false"))}const qa={};function nt(e,i){We(e);const r=e.querySelector(".pp-grid");if(!r)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],o=m=>{const f=e.querySelector('.pp-cell[data-pi="'+m+'"]');if(!f)return null;const h=Number(f.style.gridRow),z=Number(f.style.gridColumn),w=Math.min(75,Math.max(25,(h-.5)*25));return z===1?[25,w]:[75,w]},c=l.map(o);if(c.some(m=>!m))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const u=(m,f,h,z)=>{const w=document.createElementNS("http://www.w3.org/2000/svg","line");w.setAttribute("x1",m),w.setAttribute("y1",f),w.setAttribute("x2",h),w.setAttribute("y2",z),d.appendChild(w)};u(c[0][0],c[0][1],c[1][0],c[1][1]),u(c[1][0],c[1][1],c[2][0],c[2][1]),u(c[2][0],c[2][1],c[3][0],c[3][1]),u(c[3][0],c[3][1],c[0][0],c[0][1]);for(let m=0;m<4;m++){const f=document.createElementNS("http://www.w3.org/2000/svg","circle");f.setAttribute("cx",c[m][0]),f.setAttribute("cy",c[m][1]),f.setAttribute("r",m===0?.9:.7),m===0&&f.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(f)}r.style.position="relative",r.appendChild(d)}function We(e){const i=e.querySelector("svg.pp-sf");i&&i.remove()}function da(){if(da.done||typeof document>"u"||!document.addEventListener)return;da.done=!0;const e=i=>{const r=i.closest(".pp-body");if(!r)return;const l=r.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){ja(r),We(r),l.classList.remove("open"),l.innerHTML="";return}ja(r);const o=Number(i.dataset.pi),c=Number(r.dataset.soul);nt(r,o),r.querySelectorAll(".pp-cell").forEach(u=>{const m=Number(u.dataset.pi);(m===se(o+4)||m===se(o+8)||m===se(o+6))&&u.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=la(o,c),l.classList.add("open")};document.addEventListener("click",i=>{const r=i.target;if(r&&r.closest&&r.closest("[data-pp-close]")){const o=r.closest(".pp-body");if(o){ja(o),We(o);const c=o.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=r&&r.closest?r.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const r=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;r&&(i.preventDefault(),e(r))})}n.bindZiwei=da,n._palaceDetailHTML=la,da();function Re(e,i){const r=i||{},l=e.slice().sort((o,c)=>c.position-o.position);return r.plain?l.map(o=>`<div class="mp-hy-row hy-plain">
1628
+ <span class="mp-hy-nm">${o.name||ye[o.position-1]}</span>
1629
+ ${ke(o.yinYang==="阳",o.moving)}
1630
+ </div>`).join(""):l.map(o=>{const c=o.yinYang==="阳",d=r.shiYing?o.position===r.shi?'<span class="mp-hy-sy">世</span>':o.position===r.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",u=o.moving?`<i class="mp-hy-mv" title="动爻">${c?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1500
1631
  ${d}
1501
- <span class="mp-hy-nm">${o.name||se[o.position-1]}</span>
1502
- <span class="mp-hy-ln">${ge(c,o.moving)}${m}</span>
1503
- <span class="mp-hy-gz">${a(o.ganzhi||"")}</span>
1504
- <span class="mp-hy-lq">${a(o.liuqin||"")}</span>
1505
- <span class="mp-hy-ls">${a(o.liushen||"")}</span>
1506
- </div>`}).join("")}s.liuyaoHTML=function(e){const i=(w,z,te,D)=>`<div class="mp-hy-box">
1507
- <div class="mp-hy-h"><b>${w}</b><span>${z}</span></div>
1508
- <div class="mp-hy">${Ht(D,{shiYing:!0,shi:te.shi,ying:te.ying})}</div>
1632
+ <span class="mp-hy-nm">${o.name||ye[o.position-1]}</span>
1633
+ <span class="mp-hy-ln">${ke(c,o.moving)}${u}</span>
1634
+ <span class="mp-hy-gz">${t(o.ganzhi||"")}</span>
1635
+ <span class="mp-hy-lq">${t(o.liuqin||"")}</span>
1636
+ <span class="mp-hy-ls">${t(o.liushen||"")}</span>
1637
+ </div>`}).join("")}n.liuyaoHTML=function(e){const i=(M,O,W,q)=>`<div class="mp-hy-box">
1638
+ <div class="mp-hy-h"><b>${M}</b><span>${O}</span></div>
1639
+ <div class="mp-hy">${Re(q,{shiYing:!0,shi:W.shi,ying:W.ying})}</div>
1509
1640
  </div>`,r=i(`本卦 ${e.ben.name}`,`${e.ben.palace} · ${e.ben.palaceElement}`,e.ben,e.ben.lines),l=e.bian?i(`变卦 ${e.bian.name}`,`${e.bian.palace} · ${e.bian.palaceElement}`,e.bian,e.bian.lines):`<div class="mp-hy-box"><div class="mp-hy-h"><b>六爻安静</b><span>无动爻,不取变卦</span></div>
1510
- <div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,o=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],c=o.length?`<div class="pp-chips">${o.map(w=>`<span class="pp-chip ${/伏吟/.test(w)||/反吟/.test(w)||/化退神/.test(w)?"warn":/六冲|散/.test(w)?"":"ok"}">${a(w)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',d=e.useGod&&e.useGod.liuqin?e.useGod:null,m=d?`<div class="pp-chips">${d.labels.map(w=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(w)?"warn":/持世|化进|六合|得飞神生/.test(w)?"ok":""}">${a(w)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',u=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,h=u&&u.labels.length?`<div class="pp-chips">${u.labels.map(w=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(w)?"warn":/旺|相|得日辰生|比和/.test(w)?"ok":""}">${a(w)}</span>`).join("")}</div>`:"",b=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,C=b&&b.labels.length?`<div class="pp-chips">${b.labels.map(w=>`<span class="pp-chip ${/可出/.test(w)?"ok":/受压难出|有助有压/.test(w)?"warn":""}">伏神${a(w)}</span>`).join("")}</div>`:"",S=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,T=S&&S.labels.length?`<div class="pp-chips">${S.labels.map(w=>`<span class="pp-chip ${/应期偏速/.test(w)?"ok":/应期待解/.test(w)?"warn":""}" title="只列地支,不出日期">${a(w)}</span>`).join("")}</div>`:"",j=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,_=j&&j.labels.length?`<div class="pp-chips">${j.labels.map(w=>`<span class="pp-chip ${/后劲足|退得缓/.test(w)?"ok":/有限|进得虚|退得实|月破|未定/.test(w)?"warn":""}">${a(w)}</span>`).join("")}</div>`:"",X=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,H=X&&X.labels.length?`<div class="pp-chips">${X.labels.map(w=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(w)?"warn":/旺|相/.test(w)?"ok":""}">${a(w)}</span>`).join("")}</div>`:"";return s.briefHTML(e)+`<div class="pp" style="padding:14px">
1641
+ <div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,o=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],c=o.length?`<div class="pp-chips">${o.map(M=>`<span class="pp-chip ${/伏吟/.test(M)||/反吟/.test(M)||/化退神/.test(M)?"warn":/六冲|散/.test(M)?"":"ok"}">${t(M)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',d=e.useGod&&e.useGod.liuqin?e.useGod:null,u=d?`<div class="pp-chips">${d.labels.map(M=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(M)?"warn":/持世|化进|六合|得飞神生/.test(M)?"ok":""}">${t(M)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',m=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,f=m&&m.labels.length?`<div class="pp-chips">${m.labels.map(M=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(M)?"warn":/旺|相|得日辰生|比和/.test(M)?"ok":""}">${t(M)}</span>`).join("")}</div>`:"",h=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,z=h&&h.labels.length?`<div class="pp-chips">${h.labels.map(M=>`<span class="pp-chip ${/可出/.test(M)?"ok":/受压难出|有助有压/.test(M)?"warn":""}">伏神${t(M)}</span>`).join("")}</div>`:"",w=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,L=w&&w.labels.length?`<div class="pp-chips">${w.labels.map(M=>`<span class="pp-chip ${/应期偏速/.test(M)?"ok":/应期待解/.test(M)?"warn":""}" title="只列地支,不出日期">${t(M)}</span>`).join("")}</div>`:"",N=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,F=N&&N.labels.length?`<div class="pp-chips">${N.labels.map(M=>`<span class="pp-chip ${/后劲足|退得缓/.test(M)?"ok":/有限|进得虚|退得实|月破|未定/.test(M)?"warn":""}">${t(M)}</span>`).join("")}</div>`:"",J=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,P=J&&J.labels.length?`<div class="pp-chips">${J.labels.map(M=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(M)?"warn":/旺|相/.test(M)?"ok":""}">${t(M)}</span>`).join("")}</div>`:"";return n.briefHTML(e)+`<div class="pp" style="padding:14px">
1511
1642
  <div class="mp-mh-head">起卦 ${e.cast.notation.join("、")}(自下而上) 日辰 ${e.dayGanZhi.name}</div>
1512
1643
  <div class="mp-hy-wrap">${r}${l}</div>
1513
1644
  ${c}
1514
- ${m}
1515
- ${h}
1516
- ${C}
1517
- ${T}
1518
- ${_}
1519
- ${H}
1520
- </div>`},s.meihuaHTML=function(e){const i=(T,j,_,X,H)=>{const z=[...ae[X]||[0,0,0],...ae[_]||[0,0,0]].slice().reverse().map(te=>ge(!!te,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1521
- <div class="hb-h">${T}</div>
1522
- <div class="hb-n">${j}</div>
1523
- <div class="mp-mh-mini">${z}</div>
1524
- <div class="hb-s">${H||`上${_} 下${X}`}</div>
1525
- </div>`},r=e.lines.slice().sort((T,j)=>j.position-T.position),l=r.slice(0,3),o=r.slice(3),c=e.moving>=4,d=(T,j,_,X)=>`<div class="mp-trib">
1526
- <div class="mp-trib-h">${T} ${fe(j)}${j}${qt(j)}<span class="mp-tritag ${X?"tritag-ti":"tritag-yong"}">${X?"体":"用"}</span></div>
1527
- <div class="mp-hy" style="gap:5px">${Ht(_,{plain:!0})}</div>
1528
- </div>`,m=`<div class="mp-hexbox">
1645
+ ${u}
1646
+ ${f}
1647
+ ${z}
1648
+ ${L}
1649
+ ${F}
1650
+ ${P}
1651
+ </div>`},n.meihuaHTML=function(e){const i=(L,N,F,J,P)=>{const O=[...le[J]||[0,0,0],...le[F]||[0,0,0]].slice().reverse().map(W=>ke(!!W,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1652
+ <div class="hb-h">${L}</div>
1653
+ <div class="hb-n">${N}</div>
1654
+ <div class="mp-mh-mini">${O}</div>
1655
+ <div class="hb-s">${P||`上${F} 下${J}`}</div>
1656
+ </div>`},r=e.lines.slice().sort((L,N)=>N.position-L.position),l=r.slice(0,3),o=r.slice(3),c=e.moving>=4,d=(L,N,F,J)=>`<div class="mp-trib">
1657
+ <div class="mp-trib-h">${L} ${ve(N)}${N}${Na(N)}<span class="mp-tritag ${J?"tritag-ti":"tritag-yong"}">${J?"体":"用"}</span></div>
1658
+ <div class="mp-hy" style="gap:5px">${Re(F,{plain:!0})}</div>
1659
+ </div>`,u=`<div class="mp-hexbox">
1529
1660
  <div class="hb-h"><span>本卦</span><span>动 ${e.movingName}</span></div>
1530
1661
  <div class="hb-n">${e.ben.name}</div>
1531
1662
  ${d("上卦",e.ben.upper,l,!c)}
1532
1663
  ${d("下卦",e.ben.lower,o,c)}
1533
1664
  <div class="hb-s">${e.source}</div>
1534
- </div>`,u=e.bodyUse.level,h=u.includes("凶")?"bad":u.includes("吉")?"good":"flat",b=`<div class="mp-mh-rel">
1665
+ </div>`,m=e.bodyUse.level,f=m.includes("凶")?"bad":m.includes("吉")?"good":"flat",h=`<div class="mp-mh-rel">
1535
1666
  <div><b>体</b>${e.bodyUse.body.trigram}(${e.bodyUse.body.element}) <b>用</b>${e.bodyUse.use.trigram}(${e.bodyUse.use.element})</div>
1536
- <div><span class="mh-lv ${h}">${u}</span> ${e.bodyUse.relation}</div>
1537
- </div>`,C=Ft(e.cuo.name)||["",""],S=Ft(e.zong.name)||["",""];return s.briefHTML(e)+`<div class="pp mp-mh">
1667
+ <div><span class="mh-lv ${f}">${m}</span> ${e.bodyUse.relation}</div>
1668
+ </div>`,z=Ma(e.cuo.name)||["",""],w=Ma(e.zong.name)||["",""];return n.briefHTML(e)+`<div class="pp mp-mh">
1538
1669
  <div class="mp-mh-main">
1539
- ${m}
1670
+ ${u}
1540
1671
  ${i("互卦",e.hu.name,e.hu.upper,e.hu.lower,"中藏之象")}
1541
1672
  ${i("变卦",e.bian.name,e.bian.upper,e.bian.lower,`动 ${e.movingName} 后`)}
1542
- ${i("错卦",e.cuo.name,C[0],C[1],"六爻全变")}
1543
- ${i("综卦",e.zong.name,S[0],S[1],"整卦倒转")}
1673
+ ${i("错卦",e.cuo.name,z[0],z[1],"六爻全变")}
1674
+ ${i("综卦",e.zong.name,w[0],w[1],"整卦倒转")}
1544
1675
  </div>
1545
- ${b}
1546
- </div>`};const st={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},Ot={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},qt=e=>Ot[e]?` ${Ot[e]}`:"",Ft=e=>st[e]||null;s.daliurenHTML=function(e){const i=e.sanChuan,r=(m,u)=>`<div class="mp-dl-sc-c">
1547
- <div class="mp-dl-sc-k">${u}</div>
1548
- <div class="mp-dl-sc-z">${m.zhi}</div>
1549
- <div class="mp-dl-sc-j">${m.jiangFull||m.jiang}</div>
1550
- <div class="mp-dl-sc-l">${m.liuQin}${m.xunKong?" · 空":""}</div>
1676
+ ${h}
1677
+ </div>`};const Sa={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},Qe={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},Na=e=>Qe[e]?` ${Qe[e]}`:"",Ma=e=>Sa[e]||null;n.daliurenHTML=function(e){const i=e.sanChuan,r=(u,m)=>`<div class="mp-dl-sc-c">
1678
+ <div class="mp-dl-sc-k">${m}</div>
1679
+ <div class="mp-dl-sc-z">${u.zhi}</div>
1680
+ <div class="mp-dl-sc-j">${u.jiangFull||u.jiang}</div>
1681
+ <div class="mp-dl-sc-l">${u.liuQin}${u.xunKong?" · 空":""}</div>
1551
1682
  </div>`,l=`<div class="mp-dl-sc-c ge">
1552
1683
  <div class="mp-dl-sc-k">格局</div>
1553
1684
  <div class="mp-dl-sc-gn">${e.geJu.name}</div>
1554
1685
  <div class="mp-dl-sc-l">${e.geJu.detail}</div>
1555
- </div>`,o=e.siKe.slice().map(m=>`<div class="mp-dl-sk-c">
1556
- <div class="mp-dl-sk-k">${["一课","二课","三课","四课"][m.position-1]||m.position+"课"}</div>
1557
- <div class="mp-dl-sk-s">${m.shang}</div>
1558
- <div class="mp-dl-sk-x">${m.xia}</div>
1559
- <div class="mp-dl-sk-r">${m.relation} · ${m.jiangFull||m.jiang}</div>
1560
- </div>`).join(""),c=e.pan.map(m=>{const u=ee[m.di]||[1,1];return`<div class="mp-dl-pc" style="grid-row:${u[0]};grid-column:${u[1]}">
1561
- <div class="tz">${m.tian}</div>
1562
- <div class="dz">地盘 ${m.di}</div>
1563
- <div class="jz">${m.jiangFull}</div>
1686
+ </div>`,o=e.siKe.slice().map(u=>`<div class="mp-dl-sk-c">
1687
+ <div class="mp-dl-sk-k">${["一课","二课","三课","四课"][u.position-1]||u.position+"课"}</div>
1688
+ <div class="mp-dl-sk-s">${u.shang}</div>
1689
+ <div class="mp-dl-sk-x">${u.xia}</div>
1690
+ <div class="mp-dl-sk-r">${u.relation} · ${u.jiangFull||u.jiang}</div>
1691
+ </div>`).join(""),c=e.pan.map(u=>{const m=ce[u.di]||[1,1];return`<div class="mp-dl-pc" style="grid-row:${m[0]};grid-column:${m[1]}">
1692
+ <div class="tz">${u.tian}</div>
1693
+ <div class="dz">地盘 ${u.di}</div>
1694
+ <div class="jz">${u.jiangFull}</div>
1564
1695
  </div>`}).join(""),d=`<div class="mp-dl-c">
1565
1696
  <div class="dl-t1">${e.dayGanZhi}日 ${e.hourZhi}时</div>
1566
1697
  <div class="dl-t2">${e.dayNight}贵 · 月将 ${e.yueJiang.name}${e.yueJiang.zhi} · 贵人${e.guiren.reverse?"逆":"顺"}行</div>
1567
1698
  <div class="dl-t3">${i.chu.zhi} → ${i.zhong.zhi} → ${i.mo.zhi}</div>
1568
1699
  <div class="dl-t2">节气 ${e.jieqi.name}${e.jieqi.time?" "+e.jieqi.time:""}</div>
1569
- </div>`;return s.briefHTML(e)+`<div class="pp mp-dl">
1700
+ </div>`;return n.briefHTML(e)+`<div class="pp mp-dl">
1570
1701
  <div class="mp-dl-head">日 ${e.dayGanZhi} 时 ${e.hourZhi}(${e.dayNight}贵) 月将 ${e.yueJiang.name}${e.yueJiang.zhi} 节气 ${e.jieqi.name} 贵人${e.guiren.reverse?"逆":"顺"}行</div>
1571
1702
  <div class="mp-dl-sc">${r(i.chu,"初传")}${r(i.zhong,"中传")}${r(i.mo,"末传")}${l}</div>
1572
1703
  <div class="mp-dl-sk">${o}</div>
1573
1704
  <div class="mp-dl-pan2">${c}${d}</div>
1574
- ${(e.shensha||[]).length?`<div class="mp-dl-ss"><b>神煞</b>${e.shensha.map(m=>`<span title="${a(m.note||"")}">${m.name}<i>${m.branch}</i></span>`).join("")}</div>`:""}
1705
+ ${(e.shensha||[]).length?`<div class="mp-dl-ss"><b>神煞</b>${e.shensha.map(u=>`<span title="${t(u.note||"")}">${u.name}<i>${u.branch}</i></span>`).join("")}</div>`:""}
1575
1706
  <div class="mp-dl-legend"><span>大字=天盘支</span><span>小字=地盘(固定十二支)</span><span>右下=天将</span></div>
1576
- </div>`},s.tarotHTML=function(e){const i=e.cards.map(o=>`
1707
+ </div>`},n.tarotHTML=function(e){const i=e.cards.map(o=>`
1577
1708
  <div class="mp-tt-card ${o.upright?"tt-up":"tt-rev"}">
1578
- <div class="mp-tt-pos" title="${a(o.positionHint||"")}">${o.position}</div>
1709
+ <div class="mp-tt-pos" title="${t(o.positionHint||"")}">${o.position}</div>
1579
1710
  <div class="mp-tt-name">${o.name}${o.number?`<span class="mp-tt-no">${o.number}</span>`:""}</div>
1580
1711
  ${o.en?`<div class="mp-tt-en">${o.en}</div>`:""}
1581
1712
  <div class="mp-tt-ori">${o.orientation}</div>
@@ -1583,7 +1714,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1583
1714
  ${o.core?`<div class="mp-tt-core">${o.core}</div>`:""}
1584
1715
  <div class="mp-tt-kw">${o.keywords.map(c=>`<span>${c}</span>`).join("")}</div>
1585
1716
  <div class="mp-tt-el">${o.arcana} · ${o.element}${o.suit?" · "+o.suit+(o.rankCn?o.rankCn:""):""}${o.domain?" · "+o.domain:""}${o.astro?` · ${o.astro}`:o.role?` · ${o.role}`:""}</div>
1586
- </div>`).join(""),r=e.question?a(e.question):'<span class="pp-dim">(未填写,可在上方输入后重抽)</span>',l=(e.reading||[]).map(o=>`<p>${a(o)}</p>`).join("");return s.briefHTML(e)+`<div class="pp mp-tt">
1717
+ </div>`).join(""),r=e.question?t(e.question):'<span class="pp-dim">(未填写,可在上方输入后重抽)</span>',l=(e.reading||[]).map(o=>`<p>${t(o)}</p>`).join("");return n.briefHTML(e)+`<div class="pp mp-tt">
1587
1718
  <div class="mp-tt-q"><b>所问</b>${r}</div>
1588
1719
  <div class="mp-tt-head">${e.spread}${e.castAt?` · 抽牌于 ${e.castAt}`:""}</div>
1589
1720
  <div class="mp-tt-grid">${i}</div>
@@ -1593,12 +1724,12 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1593
1724
  </div>
1594
1725
  ${e.systemNote?`<div class="mp-tt-tip">${e.systemNote}</div>`:""}
1595
1726
  <div class="mp-tt-tip">塔罗用于自我觉察与娱乐,不作确定性预言。</div>
1596
- </div>`};const Oe=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const r='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${a(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${a(d.a)} × ${a(d.b)}</th><td>${d.total==null?"—":`${a(d.total)}/100`}<span class="mp-hp-lv">${a(d.level||"")}</span></td>`+(d.dimensions||[]).map(m=>`<td>${m.score>=0?"+":""}${a(m.score)}</td>`).join("")+"</tr>").join(""),o=e.spread>=3&&e.best?`最顺:<b>${a(e.best.a)} × ${a(e.best.b)}</b>(${a(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${a(e.hardest.a)} × ${a(e.hardest.b)}</b>(${a(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${a(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${a(e.focus.label)}</b>(三对相差 ${a(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1727
+ </div>`};const Pa=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const r='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),o=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1597
1728
  <div class="mp-hp-ith">三方合盘 · 三对并列</div>
1598
1729
  <table><thead>${r}</thead><tbody>${l}</tbody></table>
1599
1730
  <p>${o}</p>${c}
1600
- <p>${a(e.note||"")}</p>
1601
- </div>`};s.hepanHTML=function(e){const i=(l,o)=>`<div class="mp-hp-side">
1731
+ <p>${t(e.note||"")}</p>
1732
+ </div>`};n.hepanHTML=function(e){const i=(l,o)=>`<div class="mp-hp-side">
1602
1733
  <div class="mp-hp-who">${o}</div>
1603
1734
  <div class="mp-hp-gz">${l.pillars.join(" ")}</div>
1604
1735
  <div class="mp-hp-kv"><span>日主</span><b>${l.dayMaster}</b></div>
@@ -1608,13 +1739,13 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1608
1739
  </div>`,r=e.dimensions.map(l=>`<div class="mp-hp-dim">
1609
1740
  <div class="mp-hp-dimh"><span>${l.label}</span><b class="${l.score>=10?"good":l.score<0?"bad":""}">${l.score>=0?"+":""}${l.score}</b></div>
1610
1741
  <div class="mp-hp-dimt">${l.text}</div>
1611
- </div>`).join("");return s.briefHTML(e)+`<div class="pp mp-hp">
1742
+ </div>`).join("");return n.briefHTML(e)+`<div class="pp mp-hp">
1612
1743
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100</span></div>
1613
1744
  <div class="mp-hp-sides">${i(e.a,"你")}${i(e.b,"对方")}</div>
1614
1745
  <div class="mp-hp-dims">${r}</div>
1615
- ${Oe(e.triple)}
1746
+ ${Pa(e.triple)}
1616
1747
  <div class="mp-hp-notes">${e.notes.map(l=>`<p>${l}</p>`).join("")}</div>
1617
- </div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(o,c)=>`<div class="relation__row"><dt>${a(o)}</dt><dd>${a(c)}</dd></div>`,r=o=>o&&["旺","相","休","囚","死"].filter(d=>Array.isArray(o[d])&&o[d].length).map(d=>`${d} ${o[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",r(e.states&&e.states.gate)],["星旺衰",r(e.states&&e.states.star)],["干旺衰",r(e.states&&e.states.stem)],["干宫生克",(()=>{const o=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const m=d.stemRelation||null;!m||m.type==="unknown"||!d.tianPan||(c[m.type]=c[m.type]||[]).push(d.tianPan)}return o.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([o,c])=>i(o,c)).join("")}</dl>`};const St=[["4","9","2"],["3","5","7"],["8","1","6"]];s.qimenHTML=function(e){const i={};for(const l of e.palaces)i[l.palace]=l;const r=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1748
+ </div>`},n.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(o,c)=>`<div class="relation__row"><dt>${t(o)}</dt><dd>${t(c)}</dd></div>`,r=o=>o&&["旺","相","休","囚","死"].filter(d=>Array.isArray(o[d])&&o[d].length).map(d=>`${d} ${o[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",r(e.states&&e.states.gate)],["星旺衰",r(e.states&&e.states.star)],["干旺衰",r(e.states&&e.states.stem)],["干宫生克",(()=>{const o=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return o.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([o,c])=>i(o,c)).join("")}</dl>`};const Da=[["4","9","2"],["3","5","7"],["8","1","6"]];n.qimenHTML=function(e){const i={};for(const l of e.palaces)i[l.palace]=l;const r=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1618
1749
  <div class="pp-qm-ju">${e.ju}</div>
1619
1750
  <div class="pp-qm-kv">${e.siZhu.year} ${e.siZhu.month}</div>
1620
1751
  <div class="pp-qm-kv">${e.siZhu.day} ${e.siZhu.time}</div>
@@ -1625,8 +1756,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1625
1756
  <div class="pp-qm-mid"><span class="dp">${o.diPan||""}</span><span class="gate">${o.gate||""}</span></div>
1626
1757
  <div class="pp-qm-bot"><span>${o.anGan||""}</span><span class="no">${l}</span></div>
1627
1758
  <div class="pp-qm-bot"><span class="dim">${o.stemRelation&&o.stemRelation.type!=="unknown"?o.stemRelation.type:""}</span><span class="dim">${o.stemState||""}</span></div>
1628
- <div class="pp-qm-bot"><span class="dim">${o.ganYing?a(`${o.ganYing.tian}加${o.ganYing.di} ${o.ganYing.name}`):""}</span></div>
1629
- </div>`};return s.briefHTML(e)+`<div class="pp mp-qm">
1759
+ <div class="pp-qm-bot"><span class="dim">${o.ganYing?t(`${o.ganYing.tian}加${o.ganYing.di} ${o.ganYing.name}`):""}</span></div>
1760
+ </div>`};return n.briefHTML(e)+`<div class="pp mp-qm">
1630
1761
  <div class="mp-qm-head">
1631
1762
  <b>${e.ju}</b>
1632
1763
  <span>${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}</span>
@@ -1634,10 +1765,10 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1634
1765
  <span>值符 ${e.zhiFu.star}(${e.zhiFu.gong}宫) 值使 ${e.zhiShi.gate}(${e.zhiShi.gong}宫)</span>
1635
1766
  <span>旬首 ${e.xunshou} 空亡 ${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}</span>
1636
1767
  </div>
1637
- <div class="mp-qm-grid">${St.map(l=>l.map(r).join("")).join("")}</div>
1768
+ <div class="mp-qm-grid">${Da.map(l=>l.map(r).join("")).join("")}</div>
1638
1769
  <div class="mp-qm-legend">上=九星 中=天盘干/八门 下=地盘干/宫号 角落=八神</div>
1639
1770
  <div class="mp-qm-rules">${e.rules.map(l=>`<p>${l}</p>`).join("")}</div>
1640
- </div>`},s.ziweiHepanHTML=function(e){const i=(o,c)=>`<div class="mp-hp-side">
1771
+ </div>`},n.ziweiHepanHTML=function(e){const i=(o,c)=>`<div class="mp-hp-side">
1641
1772
  <div class="mp-hp-who">${c}</div>
1642
1773
  <div class="mp-hp-gz">命宫 ${o.soul.branch} 夫妻 ${o.soul.branch,""}${o.spouseStars.length,""}</div>
1643
1774
  <div class="mp-hp-kv"><span>命宫主星</span><b>${o.soulStars.join("、")||"无正曜"}</b></div>
@@ -1648,7 +1779,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1648
1779
  </div>`,r=e.dimensions.map(o=>`<div class="mp-hp-dim">
1649
1780
  <div class="mp-hp-dimh"><span>${o.label}</span><b class="${o.score>=10?"good":o.score<0?"bad":""}">${o.score>=0?"+":""}${o.score}</b></div>
1650
1781
  <div class="mp-hp-dimt">${o.text}</div>
1651
- </div>`).join(""),l=o=>(e.interactions||[]).filter(c=>c.who===o).map(c=>`<li><b class="m-${c.mutagen}">${c.mutagen}</b>${c.star}:本命${c.ownPalace} → 对方${c.landingPalace||"盘外"}${c.strong?"<i>(强)</i>":""}</li>`).join("");return s.briefHTML(e)+`<div class="pp mp-hp">
1782
+ </div>`).join(""),l=o=>(e.interactions||[]).filter(c=>c.who===o).map(c=>`<li><b class="m-${c.mutagen}">${c.mutagen}</b>${c.star}:本命${c.ownPalace} → 对方${c.landingPalace||"盘外"}${c.strong?"<i>(强)</i>":""}</li>`).join("");return n.briefHTML(e)+`<div class="pp mp-hp">
1652
1783
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100 紫微合盘</span></div>
1653
1784
  <div class="mp-hp-sides">${i(e.a,"你")}${i(e.b,"对方")}</div>
1654
1785
  <div class="mp-hp-dims">${r}</div>
@@ -1656,313 +1787,313 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1656
1787
  <div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${l("你")||"<li>无</li>"}</ul></div>
1657
1788
  <div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${l("对方")||"<li>无</li>"}</ul></div>
1658
1789
  </div>
1659
- ${Oe(e.triple)}
1790
+ ${Pa(e.triple)}
1660
1791
  <div class="mp-hp-notes">${e.notes.map(o=>`<p>${o}</p>`).join("")}</div>
1661
- </div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],r=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,o=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,m=l(e.dayun.startAge&&e.dayun.startAge.years),u=i.length?i[i.length-1].startAge+10:m+80,h=r.map(v=>l(v.age)).filter(v=>v>0),b=Math.min(m,...h.length?h:[m]),C=Math.max(u,...h.length?h:[u]),S=Math.max(1,C-b),T=640,j=190,_={t:14,r:16,b:26,l:30},X=T-_.l-_.r,H=j-_.t-_.b,w=v=>_.l+(v-b)/S*X,z=v=>_.t+H-(Math.max(d,Math.min(c,v))-d)/(c-d)*H,D=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${_.l}" y="${z(v.to).toFixed(1)}" width="${X}" height="${(z(v.from)-z(v.to)).toFixed(1)}"/>`).join(""),oe=10/S*X,$=[];i.forEach((v,le)=>{const ie=l(v.startAge),ke=o(v),we=Math.max(_.l,w(ie)),xe=Math.min(_.l+X,w(ie+10));$.push(`${we.toFixed(1)},${z(ke).toFixed(1)}`),$.push(`${xe.toFixed(1)},${z(ke).toFixed(1)}`)});const ce=$.length?`<polyline class="cv-dy" points="${$.join(" ")}"/>`:"",k=$.length?`<polygon class="cv-dyfill" points="${_.l},${(_.t+H).toFixed(1)} ${$.join(" ")} ${(_.l+X).toFixed(1)},${(_.t+H).toFixed(1)}"/>`:"",O=r.filter(v=>v.luck&&typeof v.luck.score=="number").map(v=>({x:w(l(v.age)),y:z(l(v.luck.score)),y0:l(v.year),gz:v.ganzhi,tier:v.luck.tier,v:l(v.luck.score),age:l(v.age)})),Q=O.length>1?`<polyline class="cv-ln" points="${O.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" ")}"/>`:"",$e={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},ue=O.length?Math.min(...O.map(v=>v.y0)):null,pe=O.map(v=>`<circle class="cv-dot${v.y0===ue?" now":""}" cx="${v.x.toFixed(1)}" cy="${v.y.toFixed(1)}" fill="${$e[v.tier]||"var(--muted)"}"><title>${a(`${v.y0}年(${v.age}岁)${v.gz} ${v.tier} ${v.v}`)}</title></circle>`).join(""),me=`<line class="cv-ax zero" x1="${_.l}" y1="${z(0).toFixed(1)}" x2="${_.l+X}" y2="${z(0).toFixed(1)}"/><line class="cv-ax" x1="${_.l}" y1="${_.t}" x2="${_.l}" y2="${_.t+H}"/>`,Fe=S>60?10:5,Ze=[];for(let v=Math.ceil(b/Fe)*Fe;v<=C;v+=Fe)Ze.push(`<text class="cv-lbl age" x="${w(v).toFixed(1)}" y="${(_.t+H+13).toFixed(1)}" text-anchor="middle">${v}岁</text>`);const ct=`<text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(z(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(z(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(z(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,be=i.slice().sort((v,le)=>o(le)-o(v)),L=be[0],f=be[be.length-1],U=L&&o(L)>.55?`<text class="cv-lbl" x="${w(l(L.startAge)+5).toFixed(1)}" y="${(z(o(L))-5).toFixed(1)}" text-anchor="middle">▲${L.startAge}岁 ${L.luck.tier}</text>`:"",de=f&&o(f)<-.8?`<text class="cv-lbl" x="${w(l(f.startAge)+5).toFixed(1)}" y="${(z(o(f))+11).toFixed(1)}" text-anchor="middle">▼${f.startAge}岁 ${f.luck.tier}</text>`:"",re=`<div class="cv-legend">
1792
+ </div>`},n.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],r=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,o=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,u=l(e.dayun.startAge&&e.dayun.startAge.years),m=i.length?i[i.length-1].startAge+10:u+80,f=r.map(v=>l(v.age)).filter(v=>v>0),h=Math.min(u,...f.length?f:[u]),z=Math.max(m,...f.length?f:[m]),w=Math.max(1,z-h),L=640,N=190,F={t:14,r:16,b:26,l:30},J=L-F.l-F.r,P=N-F.t-F.b,M=v=>F.l+(v-h)/w*J,O=v=>F.t+P-(Math.max(d,Math.min(c,v))-d)/(c-d)*P,q=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${F.l}" y="${O(v.to).toFixed(1)}" width="${J}" height="${(O(v.from)-O(v.to)).toFixed(1)}"/>`).join(""),R=10/w*J,$=[];i.forEach((v,fe)=>{const me=l(v.startAge),Se=o(v),je=Math.max(F.l,M(me)),qe=Math.min(F.l+J,M(me+10));$.push(`${je.toFixed(1)},${O(Se).toFixed(1)}`),$.push(`${qe.toFixed(1)},${O(Se).toFixed(1)}`)});const ue=$.length?`<polyline class="cv-dy" points="${$.join(" ")}"/>`:"",Q=$.length?`<polygon class="cv-dyfill" points="${F.l},${(F.t+P).toFixed(1)} ${$.join(" ")} ${(F.l+J).toFixed(1)},${(F.t+P).toFixed(1)}"/>`:"",ne=r.filter(v=>v.luck&&typeof v.luck.score=="number").map(v=>({x:M(l(v.age)),y:O(l(v.luck.score)),y0:l(v.year),gz:v.ganzhi,tier:v.luck.tier,v:l(v.luck.score),age:l(v.age)})),Ae=ne.length>1?`<polyline class="cv-ln" points="${ne.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" ")}"/>`:"",k={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},T=ne.length?Math.min(...ne.map(v=>v.y0)):null,E=ne.map(v=>`<circle class="cv-dot${v.y0===T?" now":""}" cx="${v.x.toFixed(1)}" cy="${v.y.toFixed(1)}" fill="${k[v.tier]||"var(--muted)"}"><title>${t(`${v.y0}年(${v.age}岁)${v.gz} ${v.tier} ${v.v}`)}</title></circle>`).join(""),re=`<line class="cv-ax zero" x1="${F.l}" y1="${O(0).toFixed(1)}" x2="${F.l+J}" y2="${O(0).toFixed(1)}"/><line class="cv-ax" x1="${F.l}" y1="${F.t}" x2="${F.l}" y2="${F.t+P}"/>`,x=w>60?10:5,pe=[];for(let v=Math.ceil(h/x)*x;v<=z;v+=x)pe.push(`<text class="cv-lbl age" x="${M(v).toFixed(1)}" y="${(F.t+P+13).toFixed(1)}" text-anchor="middle">${v}岁</text>`);const ze=`<text class="cv-lbl" x="${(F.l-5).toFixed(1)}" y="${(O(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(F.l-5).toFixed(1)}" y="${(O(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(F.l-5).toFixed(1)}" y="${(O(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,be=i.slice().sort((v,fe)=>o(fe)-o(v)),H=be[0],K=be[be.length-1],te=H&&o(H)>.55?`<text class="cv-lbl" x="${M(l(H.startAge)+5).toFixed(1)}" y="${(O(o(H))-5).toFixed(1)}" text-anchor="middle">▲${H.startAge}岁 ${H.luck.tier}</text>`:"",ge=K&&o(K)<-.8?`<text class="cv-lbl" x="${M(l(K.startAge)+5).toFixed(1)}" y="${(O(o(K))+11).toFixed(1)}" text-anchor="middle">▼${K.startAge}岁 ${K.luck.tier}</text>`:"",he=`<div class="cv-legend">
1662
1793
  <span><i style="background:var(--quan)"></i>大运(阶梯,一步十年)</span>
1663
1794
  <span><i style="background:var(--ke)"></i>流年(逐年折线)</span>
1664
1795
  <span>绿带=吉 灰带=平 红带=忌</span>
1665
- </div>`,x=`<div class="cv-tip">曲线只呈现引擎已给出的行运评分(${d} ~ ${c}),不预测具体事件;档位与依据见下方「大运 / 流年」各节。悬停看逐年详情。</div>`;return`<div class="mp-curve">
1666
- <div class="mp-curve-h"><b>人生运势曲线</b><span>${b}–${C} 岁 ${e.dayun.rule},${m} 岁起运${e.dayun.jiao&&e.dayun.jiao.at?`,交运 ${e.dayun.jiao.at}`:""}</span></div>
1667
- <svg viewBox="0 0 ${T} ${j}" role="img" aria-label="人生运势曲线:${b} 到 ${C} 岁的大运与流年评分走势">
1668
- ${D}${me}${k}${ce}${Q}${pe}${Ze.join("")}${ct}${U}${de}
1796
+ </div>`,b=`<div class="cv-tip">曲线只呈现引擎已给出的行运评分(${d} ~ ${c}),不预测具体事件;档位与依据见下方「大运 / 流年」各节。悬停看逐年详情。</div>`;return`<div class="mp-curve">
1797
+ <div class="mp-curve-h"><b>人生运势曲线</b><span>${h}–${z} 岁 ${e.dayun.rule},${u} 岁起运${e.dayun.jiao&&e.dayun.jiao.at?`,交运 ${e.dayun.jiao.at}`:""}</span></div>
1798
+ <svg viewBox="0 0 ${L} ${N}" role="img" aria-label="人生运势曲线:${h} 到 ${z} 岁的大运与流年评分走势">
1799
+ ${q}${re}${Q}${ue}${Ae}${E}${pe.join("")}${ze}${te}${ge}
1669
1800
  </svg>
1670
- ${re}${x}
1671
- </div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const r=e&&Array.isArray(e.segments)?e.segments:[],l=L=>typeof L=="number"&&isFinite(L)?L:0,o=720,c=322,d={t:34,r:46,b:66,l:36},m=o-d.l-d.r,u=c-d.t-d.b,h=i.length,b=m/h,C=L=>d.l+(L+.5)*b,S=L=>d.t+u-Math.max(0,Math.min(100,L))/100*u,T=Math.max(1.1,Math.min(10,b*.62)),j=L=>l(L.score),_=d.t+u,X=_+20,H=22,z=`klclip${(()=>{let L=2166136261;const f=U=>{const de=String(U??"");for(let re=0;re<de.length;re++)L^=de.charCodeAt(re),L=Math.imul(L,16777619)};f(h),f(i[0]&&i[0].age),f(i[h-1]&&i[h-1].age);for(const U of i)f(U&&U.score);return(L>>>0).toString(36)})()}`,te=r.map((L,f)=>{const U=Math.max(0,L.startAge-1),de=Math.min(h-1,L.endAge-1);if(de<U)return"";const re=d.l+U*b,x=Math.max(.6,(de-U+1)*b),le=f%2===1?`<rect class="kl-band" x="${re.toFixed(1)}" y="${d.t}" width="${x.toFixed(1)}" height="${u}"/><rect class="kl-stripband" x="${re.toFixed(1)}" y="${X}" width="${x.toFixed(1)}" height="${H}"/>`:"",ie=f===0?"":`<line class="kl-segline" x1="${re.toFixed(1)}" y1="${d.t}" x2="${re.toFixed(1)}" y2="${_}"/>`,ke=Math.min(Math.max(d.l+(U+de+1)/2*b,d.l+22),d.l+m-22);return le+ie+`<text class="kl-seg" x="${ke.toFixed(1)}" y="${(X+15).toFixed(1)}" text-anchor="middle">${a(L.ganZhi)}</text>`}).join(""),D=[0,25,50,75,100].map(L=>`<line class="kl-grid${L===50?" mid":""}" x1="${d.l}" y1="${S(L).toFixed(1)}" x2="${d.l+m}" y2="${S(L).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${(S(L)+3).toFixed(1)}" text-anchor="end">${L}</text>`).join(""),oe=i.map((L,f)=>{const U=L.kline||{},de=l(U.open),re=l(U.close),x=Math.min(100,l(U.high)),v=Math.max(0,l(U.low)),le=re>=de,ie=S(de),ke=S(re),we=Math.min(ie,ke),xe=Math.max(.8,Math.abs(ie-ke)),mt=C(f),ut=`${L.age}岁(${L.year}年 ${L.ganZhi})${re}分${L.dayunGanZhi?` · ${L.dayunGanZhi}运`:""}`;return`<g class="kl-c${le?" up":" down"}"><title>${a(ut)}</title><line x1="${mt.toFixed(2)}" y1="${S(x).toFixed(1)}" x2="${mt.toFixed(2)}" y2="${S(v).toFixed(1)}"/><rect x="${(mt-T/2).toFixed(2)}" y="${we.toFixed(1)}" width="${T.toFixed(2)}" height="${xe.toFixed(1)}" rx="0.7"/></g>`}).join(""),$=L=>{const f=[];for(let U=0;U<h;U++){if(U+1<L)continue;let de=0;for(let re=U+1-L;re<=U;re++)de+=j(i[re]);f.push({i:U,v:de/L})}return f},ce=L=>$(L).map((f,U)=>`${U?"L":"M"}${C(f.i).toFixed(1)} ${S(f.v).toFixed(1)}`).join(" "),k=(L,f)=>{const U=$(L);if(!U.length)return"";const de=U[U.length-1];return{cls:f,y:S(de.v),text:`<text class="kl-ma-lbl ${f}" x="${d.l+m+5}" y="${S(de.v).toFixed(1)}" text-anchor="start">${de.v.toFixed(0)}</text>`}},O=k(10,"m10"),Q=k(5,"m5"),$e=(()=>{if(!Q||!O)return`${O?O.text:""}${Q?Q.text:""}`;let L=Q.y,f=O.y;if(Math.abs(L-f)<10){const U=Math.min(L,f),de=Math.max(L,f);L=U-6,f=de+6}return`<text class="kl-ma-lbl m10" x="${d.l+m+5}" y="${f.toFixed(1)}" text-anchor="start">${$(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+m+5}" y="${L.toFixed(1)}" text-anchor="start">${$(5).slice(-1)[0].v.toFixed(0)}</text>`})();let ue=i[0],pe=i[0];for(const L of i)j(L)>j(ue)&&(ue=L),j(L)<j(pe)&&(pe=L);const me=(L,f,U)=>{const de=i.indexOf(L),re=C(de),x=S(j(L)),v=Math.min(Math.max(re,d.l+26),d.l+m-26),le=f==="hi"?x-8<d.t+6?14:U:x+12>d.t+u-2?-8:U;return`<g class="kl-mark ${f}"><circle cx="${re.toFixed(1)}" cy="${x.toFixed(1)}" r="2"/><circle class="ring" cx="${re.toFixed(1)}" cy="${x.toFixed(1)}" r="4.6"/><text x="${v.toFixed(1)}" y="${(x+le).toFixed(1)}" text-anchor="middle">${L.age}岁 ${j(L)}</text></g>`},Fe=h>60?10:5,Ze=i.filter(L=>L.age%Fe===0).map(L=>`<text class="kl-lbl age" x="${C(i.indexOf(L)).toFixed(1)}" y="${(_+14).toFixed(1)}" text-anchor="middle">${L.age}</text>`).join(""),ct=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+m}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1672
- <svg viewBox="0 0 ${o} ${c}" role="img" aria-label="人生K线:1 到 ${h} 岁的逐年评分蜡烛图">
1673
- <defs><clipPath id="${z}"><rect x="${d.l}" y="${d.t}" width="${m}" height="${u}"/></clipPath></defs>
1674
- ${te}${D}
1675
- <g clip-path="url(#${z})">
1676
- ${oe}
1677
- <path class="kl-ma m10" d="${ce(10)}"/><path class="kl-ma m5" d="${ce(5)}"/>
1801
+ ${he}${b}
1802
+ </div>`},n.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const r=e&&Array.isArray(e.segments)?e.segments:[],l=H=>typeof H=="number"&&isFinite(H)?H:0,o=720,c=322,d={t:34,r:46,b:66,l:36},u=o-d.l-d.r,m=c-d.t-d.b,f=i.length,h=u/f,z=H=>d.l+(H+.5)*h,w=H=>d.t+m-Math.max(0,Math.min(100,H))/100*m,L=Math.max(1.1,Math.min(10,h*.62)),N=H=>l(H.score),F=d.t+m,J=F+20,P=22,O=`klclip${(()=>{let H=2166136261;const K=te=>{const ge=String(te??"");for(let he=0;he<ge.length;he++)H^=ge.charCodeAt(he),H=Math.imul(H,16777619)};K(f),K(i[0]&&i[0].age),K(i[f-1]&&i[f-1].age);for(const te of i)K(te&&te.score);return(H>>>0).toString(36)})()}`,W=r.map((H,K)=>{const te=Math.max(0,H.startAge-1),ge=Math.min(f-1,H.endAge-1);if(ge<te)return"";const he=d.l+te*h,b=Math.max(.6,(ge-te+1)*h),fe=K%2===1?`<rect class="kl-band" x="${he.toFixed(1)}" y="${d.t}" width="${b.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${he.toFixed(1)}" y="${J}" width="${b.toFixed(1)}" height="${P}"/>`:"",me=K===0?"":`<line class="kl-segline" x1="${he.toFixed(1)}" y1="${d.t}" x2="${he.toFixed(1)}" y2="${F}"/>`,Se=Math.min(Math.max(d.l+(te+ge+1)/2*h,d.l+22),d.l+u-22);return fe+me+`<text class="kl-seg" x="${Se.toFixed(1)}" y="${(J+15).toFixed(1)}" text-anchor="middle">${t(H.ganZhi)}</text>`}).join(""),q=[0,25,50,75,100].map(H=>`<line class="kl-grid${H===50?" mid":""}" x1="${d.l}" y1="${w(H).toFixed(1)}" x2="${d.l+u}" y2="${w(H).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${(w(H)+3).toFixed(1)}" text-anchor="end">${H}</text>`).join(""),R=i.map((H,K)=>{const te=H.kline||{},ge=l(te.open),he=l(te.close),b=Math.min(100,l(te.high)),v=Math.max(0,l(te.low)),fe=he>=ge,me=w(ge),Se=w(he),je=Math.min(me,Se),qe=Math.max(.8,Math.abs(me-Se)),Ke=z(K),ia=`${H.age}岁(${H.year}年 ${H.ganZhi})${he}分${H.dayunGanZhi?` · ${H.dayunGanZhi}运`:""}`;return`<g class="kl-c${fe?" up":" down"}"><title>${t(ia)}</title><line x1="${Ke.toFixed(2)}" y1="${w(b).toFixed(1)}" x2="${Ke.toFixed(2)}" y2="${w(v).toFixed(1)}"/><rect x="${(Ke-L/2).toFixed(2)}" y="${je.toFixed(1)}" width="${L.toFixed(2)}" height="${qe.toFixed(1)}" rx="0.7"/></g>`}).join(""),$=H=>{const K=[];for(let te=0;te<f;te++){if(te+1<H)continue;let ge=0;for(let he=te+1-H;he<=te;he++)ge+=N(i[he]);K.push({i:te,v:ge/H})}return K},ue=H=>$(H).map((K,te)=>`${te?"L":"M"}${z(K.i).toFixed(1)} ${w(K.v).toFixed(1)}`).join(" "),Q=(H,K)=>{const te=$(H);if(!te.length)return"";const ge=te[te.length-1];return{cls:K,y:w(ge.v),text:`<text class="kl-ma-lbl ${K}" x="${d.l+u+5}" y="${w(ge.v).toFixed(1)}" text-anchor="start">${ge.v.toFixed(0)}</text>`}},ne=Q(10,"m10"),Ae=Q(5,"m5"),k=(()=>{if(!Ae||!ne)return`${ne?ne.text:""}${Ae?Ae.text:""}`;let H=Ae.y,K=ne.y;if(Math.abs(H-K)<10){const te=Math.min(H,K),ge=Math.max(H,K);H=te-6,K=ge+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${K.toFixed(1)}" text-anchor="start">${$(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${H.toFixed(1)}" text-anchor="start">${$(5).slice(-1)[0].v.toFixed(0)}</text>`})();let T=i[0],E=i[0];for(const H of i)N(H)>N(T)&&(T=H),N(H)<N(E)&&(E=H);const re=(H,K,te)=>{const ge=i.indexOf(H),he=z(ge),b=w(N(H)),v=Math.min(Math.max(he,d.l+26),d.l+u-26),fe=K==="hi"?b-8<d.t+6?14:te:b+12>d.t+m-2?-8:te;return`<g class="kl-mark ${K}"><circle cx="${he.toFixed(1)}" cy="${b.toFixed(1)}" r="2"/><circle class="ring" cx="${he.toFixed(1)}" cy="${b.toFixed(1)}" r="4.6"/><text x="${v.toFixed(1)}" y="${(b+fe).toFixed(1)}" text-anchor="middle">${H.age}岁 ${N(H)}</text></g>`},x=f>60?10:5,pe=i.filter(H=>H.age%x===0).map(H=>`<text class="kl-lbl age" x="${z(i.indexOf(H)).toFixed(1)}" y="${(F+14).toFixed(1)}" text-anchor="middle">${H.age}</text>`).join(""),ze=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+u}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1803
+ <svg viewBox="0 0 ${o} ${c}" role="img" aria-label="人生K线:1 到 ${f} 岁的逐年评分蜡烛图">
1804
+ <defs><clipPath id="${O}"><rect x="${d.l}" y="${d.t}" width="${u}" height="${m}"/></clipPath></defs>
1805
+ ${W}${q}
1806
+ <g clip-path="url(#${O})">
1807
+ ${R}
1808
+ <path class="kl-ma m10" d="${ue(10)}"/><path class="kl-ma m5" d="${ue(5)}"/>
1678
1809
  </g>
1679
- ${$e}
1680
- ${me(ue,"hi",-8)}${me(pe,"lo",12)}
1681
- ${Ze}${ct}
1682
- </svg><div class="kl-legend"><span><i class="up"></i>阳线:比上一岁高</span><span><i class="down"></i>阴线:比上一岁低</span><span><i class="m5"></i>5 年均线</span><span><i class="m10"></i>10 年均线</span><span>虚线=大运交界</span></div></div>`},s.trendHTML=function(e,i){if(!e)return"";const r=!(i&&i.brief===!1),l=s.trendChart(e);if(!l)return s.quickHTML(e);const o=Array.isArray(e.segments)?e.segments:[],c=e.highlights&&typeof e.highlights=="object"?e.highlights:{},d=e.meta||{},m=d.strength||{},u=o.map(D=>`<span class="kl-chip">${a(D.ganZhi)}<em>${D.startAge}–${D.endAge}</em></span>`).join(""),h=(Array.isArray(c.best)?c.best:[]).map(D=>`<div class="kl-hl hi">${a(D)}</div>`).join(""),b=(Array.isArray(c.worst)?c.worst:[]).map(D=>`<div class="kl-hl lo">${a(D)}</div>`).join(""),C=d.boundaryNote?`<div class="mp-kline-note">${a(d.boundaryNote)}</div>`:c.suppressed?`<div class="mp-kline-note">${a(c.suppressed)}</div>`:"",S=Array.isArray(e.points)?e.points:[],T=D=>typeof D.score=="number"&&isFinite(D.score)?D.score:0,j=S.map(T),_=j.length?j.reduce((D,oe)=>D+oe,0)/j.length:0,X=j.length?Math.max(...j)-Math.min(...j):0,H=o.map(D=>{const oe=S.filter($=>$.age>=D.startAge&&$.age<=D.endAge).map(T);return{ganZhi:D.ganZhi,v:oe.length?oe.reduce(($,ce)=>$+ce,0)/oe.length:0}}).filter(D=>D.v>0).sort((D,oe)=>oe.v-D.v),w=!!(m.boundary||c.suppressed),z=[`<span><em>全段均值</em><b>${_.toFixed(0)}</b></span>`];!w&&H.length&&(z.push(`<span><em>最好大运</em><b class="hi">${a(H[0].ganZhi)} ${H[0].v.toFixed(0)}</b></span>`),z.push(`<span><em>最差大运</em><b class="lo">${a(H[H.length-1].ganZhi)} ${H[H.length-1].v.toFixed(0)}</b></span>`)),z.push(`<span><em>波动幅度</em><b>${X.toFixed(0)}</b></span>`);const te=`<div class="kl-stats">${z.join("")}</div>`;return(r?s.briefHTML(e):"")+`<section class="mp-kline" aria-label="人生K线结果">
1683
- <div class="mp-kline-h"><b>人生 K 线</b><span>${a(d.birth||"")} 日主 ${a(d.dayMaster||"")} ${a(m.level||"")}${m.score?`(${m.score})`:""}</span></div>
1810
+ ${k}
1811
+ ${re(T,"hi",-8)}${re(E,"lo",12)}
1812
+ ${pe}${ze}
1813
+ </svg><div class="kl-legend"><span><i class="up"></i>阳线:比上一岁高</span><span><i class="down"></i>阴线:比上一岁低</span><span><i class="m5"></i>5 年均线</span><span><i class="m10"></i>10 年均线</span><span>虚线=大运交界</span></div></div>`},n.trendHTML=function(e,i){if(!e)return"";const r=!(i&&i.brief===!1),l=n.trendChart(e);if(!l)return n.quickHTML(e);const o=Array.isArray(e.segments)?e.segments:[],c=e.highlights&&typeof e.highlights=="object"?e.highlights:{},d=e.meta||{},u=d.strength||{},m=o.map(q=>`<span class="kl-chip">${t(q.ganZhi)}<em>${q.startAge}–${q.endAge}</em></span>`).join(""),f=(Array.isArray(c.best)?c.best:[]).map(q=>`<div class="kl-hl hi">${t(q)}</div>`).join(""),h=(Array.isArray(c.worst)?c.worst:[]).map(q=>`<div class="kl-hl lo">${t(q)}</div>`).join(""),z=d.boundaryNote?`<div class="mp-kline-note">${t(d.boundaryNote)}</div>`:c.suppressed?`<div class="mp-kline-note">${t(c.suppressed)}</div>`:"",w=Array.isArray(e.points)?e.points:[],L=q=>typeof q.score=="number"&&isFinite(q.score)?q.score:0,N=w.map(L),F=N.length?N.reduce((q,R)=>q+R,0)/N.length:0,J=N.length?Math.max(...N)-Math.min(...N):0,P=o.map(q=>{const R=w.filter($=>$.age>=q.startAge&&$.age<=q.endAge).map(L);return{ganZhi:q.ganZhi,v:R.length?R.reduce(($,ue)=>$+ue,0)/R.length:0}}).filter(q=>q.v>0).sort((q,R)=>R.v-q.v),M=!!(u.boundary||c.suppressed),O=[`<span><em>全段均值</em><b>${F.toFixed(0)}</b></span>`];!M&&P.length&&(O.push(`<span><em>最好大运</em><b class="hi">${t(P[0].ganZhi)} ${P[0].v.toFixed(0)}</b></span>`),O.push(`<span><em>最差大运</em><b class="lo">${t(P[P.length-1].ganZhi)} ${P[P.length-1].v.toFixed(0)}</b></span>`)),O.push(`<span><em>波动幅度</em><b>${J.toFixed(0)}</b></span>`);const W=`<div class="kl-stats">${O.join("")}</div>`;return(r?n.briefHTML(e):"")+`<section class="mp-kline" aria-label="人生K线结果">
1814
+ <div class="mp-kline-h"><b>人生 K 线</b><span>${t(d.birth||"")} 日主 ${t(d.dayMaster||"")} ${t(u.level||"")}${u.score?`(${u.score})`:""}</span></div>
1684
1815
  ${l}
1685
- ${te}
1686
- ${u?`<div class="kl-segs">${u}</div>`:""}
1687
- ${h||b?`<div class="kl-hls">${h}${b}</div>`:""}
1688
- ${C}
1816
+ ${W}
1817
+ ${m?`<div class="kl-segs">${m}</div>`:""}
1818
+ ${f||h?`<div class="kl-hls">${f}${h}</div>`:""}
1819
+ ${z}
1689
1820
  <div class="mp-kline-tip">逐岁分数由大运与流年十神按固定表确定性计分(1–100),只表五行力量的顺逆,不预测具体事件;旺衰落在换档阈值附近时,不出高低年份结论。</div>
1690
- </section>`},s.chengguHTML=function(e){if(!e)return"";const i=e.weights||{},r=e.song||{},l=["year","month","day","hour"].map(m=>{const u=i[m]||{label:"",qian:0},h=String(u.label||"").split(" ")[0]||"",b=String(u.label||"").split(" ")[1]||"";return`<div class="cg-cell"><em>${a(h)}</em><b>${a(b)}</b></div>`}).join(""),o=String(r.text||""),c=o?o.replace(/[。]$/,"").split(";").map((m,u)=>`<span>${a(m)}${u===0?";":"。"}</span>`).join(""):"",d=e.verdict&&e.verdict.band?e.verdict.band:"";return`<section class="mp-cg" aria-label="称骨结果">
1691
- <div class="mp-cg-h"><b>称骨</b><span>${a(e.lunar&&e.lunar.text?e.lunar.text:"")}</span></div>
1821
+ </section>`},n.chengguHTML=function(e){if(!e)return"";const i=e.weights||{},r=e.song||{},l=["year","month","day","hour"].map(u=>{const m=i[u]||{label:"",qian:0},f=String(m.label||"").split(" ")[0]||"",h=String(m.label||"").split(" ")[1]||"";return`<div class="cg-cell"><em>${t(f)}</em><b>${t(h)}</b></div>`}).join(""),o=String(r.text||""),c=o?o.replace(/[。]$/,"").split(";").map((u,m)=>`<span>${t(u)}${m===0?";":"。"}</span>`).join(""):"",d=e.verdict&&e.verdict.band?e.verdict.band:"";return`<section class="mp-cg" aria-label="称骨结果">
1822
+ <div class="mp-cg-h"><b>称骨</b><span>${t(e.lunar&&e.lunar.text?e.lunar.text:"")}</span></div>
1692
1823
  <div class="mp-cg-w">${l}</div>
1693
- <div class="mp-cg-tot"><em>骨重合计</em><b>${a(e.total&&e.total.label?e.total.label:"")}</b>${d?`<i>${a(d)}</i>`:""}</div>
1694
- <div class="mp-cg-song"><div class="mp-cg-song-h">称骨歌 · ${a(e.total&&e.total.label?e.total.label:"")}</div>
1824
+ <div class="mp-cg-tot"><em>骨重合计</em><b>${t(e.total&&e.total.label?e.total.label:"")}</b>${d?`<i>${t(d)}</i>`:""}</div>
1825
+ <div class="mp-cg-song"><div class="mp-cg-song-h">称骨歌 · ${t(e.total&&e.total.label?e.total.label:"")}</div>
1695
1826
  <div class="mp-cg-verse">${c||'<span class="mp-cg-miss">该骨重未见通行本歌诀</span>'}</div>
1696
- <div class="mp-cg-plain"><em>释义</em>${a(r.plain||"")}</div></div>
1697
- ${e.verdict&&e.verdict.text?`<div class="mp-cg-band"><em>分档</em>${a(e.verdict.text)}</div>`:""}
1827
+ <div class="mp-cg-plain"><em>释义</em>${t(r.plain||"")}</div></div>
1828
+ ${e.verdict&&e.verdict.text?`<div class="mp-cg-band"><em>分档</em>${t(e.verdict.text)}</div>`:""}
1698
1829
  <div class="mp-cg-note">骨重与歌诀为通行本口径(各版本歌诀有异文,断句标点已统一);释义为白话自撰,只作字面直解,属民俗娱乐参考,不构成命运断言。</div>
1699
- </section>`},s.nameHTML=function(e){if(!e)return"";const i={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},r=h=>h==="未收录"?'<span class="mp-nm-el">未收录</span>':`<span class="mp-nm-el wx-${i[h]||"earth"}">${a(h)}</span>`,l=(h,b)=>`<div class="mp-nm-h"><b>${a(h)}</b>${b?`<i>${a(b)}</i>`:""}</div>`;if(e.action==="generate"){const h=e.bazi&&e.bazi.favorable?e.bazi.favorable.join("、"):"",b=(e.candidates||[]).map(C=>{const S=C.wuge&&C.wuge.available?(()=>{const j=C.wuge.rows.filter(H=>H.level==="吉").length,_=C.wuge.rows.filter(H=>H.level==="凶").length;return`<span class="mp-nm-fit${_===0&&j>=4?" ok":_>=2?" no":""}" title="${a(C.wuge.summary)}">五格 ${j}/5 吉</span>`})():"",T=C.phonetics&&C.phonetics.available?`<span class="mp-nm-fit${C.phonetics.level==="拗口"?" no":C.phonetics.level==="顺口"?" ok":""}" title="${a((C.phonetics.issues||[]).map(j=>j.text).join(";"))}">${a(C.phonetics.level)}</span>`:"";return`<div class="mp-nm-c"><b>${a(C.name)}</b><span class="mp-nm-els">${C.chars.map(j=>r(j.element)).join("")}${S}${T}</span><em>${a(C.chars.map(j=>j.char+"·"+j.meaning).join(" "))}</em></div>`}).join("");return`<section class="mp-nm" aria-label="候选名">
1700
- ${l("候选名",`姓 ${e.surname}(${e.gender})${h?` 喜用 ${h}`:""}`)}
1701
- <div class="mp-nm-cand">${b}</div>
1702
- <div class="mp-nm-note">${(e.notes||[]).map(C=>"※ "+a(C)).join("<br>")}</div>
1703
- </section>`}const o=(e.chars||[]).map(h=>{const b=h.favorable===!0?'<span class="mp-nm-fit ok">合喜用</span>':h.favorable===!1?'<span class="mp-nm-fit no">不合喜用</span>':'<span class="mp-nm-fit">不判</span>',C=h.source==="user"?"用户指定":h.source==="lib"?"字库":"未收录",S=h.suggest&&h.suggest.length?`<div class="mp-nm-sug"><b>可换</b>${h.suggest.map(T=>`<span class="wx-${i[T.element]||"earth"}">${a(T.char)}(${a(T.element)})</span>`).join("")}</div>`:"";return`<div class="mp-nm-row"><div class="mp-nm-ch">${a(h.char)}</div>
1704
- <div class="mp-nm-b"><div class="mp-nm-t">${r(h.element)}<span>${a(C)}</span>${b}</div>
1705
- <div class="mp-nm-m">${a(h.meaning)}</div>${S}</div></div>`}).join(""),c=e.bazi?`<div class="mp-nm-m">八字:${a(e.bazi.dayMaster&&e.bazi.dayMaster.stem?`${e.bazi.dayMaster.stem}(${e.bazi.dayMaster.element})`:String(e.bazi.dayMaster||""))} ${a(e.bazi.strength?`${e.bazi.strength.level}(${e.bazi.strength.score})`:"")} 喜用 ${a((e.bazi.favorable||[]).join("、"))}</div>
1706
- <div class="mp-nm-m">${a(e.bazi.basis||"")}</div>`:"",d=h=>h==="吉"?"is-ok":h==="半吉"?"is-half":"is-bad",m=e.wuge&&e.wuge.available?`<div class="mp-nm-wu">
1830
+ </section>`},n.nameHTML=function(e){if(!e)return"";const i={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},r=f=>f==="未收录"?'<span class="mp-nm-el">未收录</span>':`<span class="mp-nm-el wx-${i[f]||"earth"}">${t(f)}</span>`,l=(f,h)=>`<div class="mp-nm-h"><b>${t(f)}</b>${h?`<i>${t(h)}</i>`:""}</div>`;if(e.action==="generate"){const f=e.bazi&&e.bazi.favorable?e.bazi.favorable.join("、"):"",h=(e.candidates||[]).map(z=>{const w=z.wuge&&z.wuge.available?(()=>{const N=z.wuge.rows.filter(P=>P.level==="吉").length,F=z.wuge.rows.filter(P=>P.level==="凶").length;return`<span class="mp-nm-fit${F===0&&N>=4?" ok":F>=2?" no":""}" title="${t(z.wuge.summary)}">五格 ${N}/5 吉</span>`})():"",L=z.phonetics&&z.phonetics.available?`<span class="mp-nm-fit${z.phonetics.level==="拗口"?" no":z.phonetics.level==="顺口"?" ok":""}" title="${t((z.phonetics.issues||[]).map(N=>N.text).join(";"))}">${t(z.phonetics.level)}</span>`:"";return`<div class="mp-nm-c"><b>${t(z.name)}</b><span class="mp-nm-els">${z.chars.map(N=>r(N.element)).join("")}${w}${L}</span><em>${t(z.chars.map(N=>N.char+"·"+N.meaning).join(" "))}</em></div>`}).join("");return`<section class="mp-nm" aria-label="候选名">
1831
+ ${l("候选名",`姓 ${e.surname}(${e.gender})${f?` 喜用 ${f}`:""}`)}
1832
+ <div class="mp-nm-cand">${h}</div>
1833
+ <div class="mp-nm-note">${(e.notes||[]).map(z=>"※ "+t(z)).join("<br>")}</div>
1834
+ </section>`}const o=(e.chars||[]).map(f=>{const h=f.favorable===!0?'<span class="mp-nm-fit ok">合喜用</span>':f.favorable===!1?'<span class="mp-nm-fit no">不合喜用</span>':'<span class="mp-nm-fit">不判</span>',z=f.source==="user"?"用户指定":f.source==="lib"?"字库":"未收录",w=f.suggest&&f.suggest.length?`<div class="mp-nm-sug"><b>可换</b>${f.suggest.map(L=>`<span class="wx-${i[L.element]||"earth"}">${t(L.char)}(${t(L.element)})</span>`).join("")}</div>`:"";return`<div class="mp-nm-row"><div class="mp-nm-ch">${t(f.char)}</div>
1835
+ <div class="mp-nm-b"><div class="mp-nm-t">${r(f.element)}<span>${t(z)}</span>${h}</div>
1836
+ <div class="mp-nm-m">${t(f.meaning)}</div>${w}</div></div>`}).join(""),c=e.bazi?`<div class="mp-nm-m">八字:${t(e.bazi.dayMaster&&e.bazi.dayMaster.stem?`${e.bazi.dayMaster.stem}(${e.bazi.dayMaster.element})`:String(e.bazi.dayMaster||""))} ${t(e.bazi.strength?`${e.bazi.strength.level}(${e.bazi.strength.score})`:"")} 喜用 ${t((e.bazi.favorable||[]).join("、"))}</div>
1837
+ <div class="mp-nm-m">${t(e.bazi.basis||"")}</div>`:"",d=f=>f==="吉"?"is-ok":f==="半吉"?"is-half":"is-bad",u=e.wuge&&e.wuge.available?`<div class="mp-nm-wu">
1707
1838
  <div class="mp-nm-wu-h"><b>五格</b><i>康熙笔画 · 通行本 81 数理</i></div>
1708
- <div class="mp-nm-wu-rows">${e.wuge.rows.map(h=>`<div class="mp-nm-wu-c ${d(h.level)}"><em>${a(h.key)}</em><b>${h.strokes}</b><i>${a(`${h.level} · ${h.name}`)}</i></div>`).join("")}</div>
1709
- <div class="mp-nm-m">笔画:${e.wuge.strokes.map(h=>`${a(h.char)}${h.strokes}${h.source==="user"?"(指定)":""}`).join(" + ")}</div>
1710
- <div class="mp-nm-m">三才:${a(e.wuge.sancai.text)}</div>
1711
- </div>`:`<div class="mp-nm-wu"><div class="mp-nm-wu-h"><b>五格</b><i>这一版算不了</i></div><div class="mp-nm-m">${a(e.wuge?e.wuge.reason:"未算")}</div></div>`,u=e.phonetics&&e.phonetics.available?`<div class="mp-nm-ph"><b>音韵</b><span class="mp-nm-ph-lv${e.phonetics.level==="顺口"?" ok":e.phonetics.level==="拗口"?" bad":" warn"}">${a(e.phonetics.level)}</span><em>${a(e.phonetics.chars.map(h=>`${h.py}${h.tone}`).join(" "))} 声调 ${a(e.phonetics.tonePattern)}${(e.phonetics.alt||[]).length?` 又读 ${a(e.phonetics.alt.map(h=>`${h.char} ${h.py}${h.tone}`).join("、"))}`:""}</em>${(e.phonetics.issues||[]).map(h=>`<span class="mp-nm-ph-i">${a(h.text)}</span>`).join("")}</div>`:`<div class="mp-nm-ph"><b>音韵</b><em>${a(e.phonetics?e.phonetics.reason:"未算")}</em></div>`;return`<section class="mp-nm" aria-label="名字评估">
1839
+ <div class="mp-nm-wu-rows">${e.wuge.rows.map(f=>`<div class="mp-nm-wu-c ${d(f.level)}"><em>${t(f.key)}</em><b>${f.strokes}</b><i>${t(`${f.level} · ${f.name}`)}</i></div>`).join("")}</div>
1840
+ <div class="mp-nm-m">笔画:${e.wuge.strokes.map(f=>`${t(f.char)}${f.strokes}${f.source==="user"?"(指定)":""}`).join(" + ")}</div>
1841
+ <div class="mp-nm-m">三才:${t(e.wuge.sancai.text)}</div>
1842
+ </div>`:`<div class="mp-nm-wu"><div class="mp-nm-wu-h"><b>五格</b><i>这一版算不了</i></div><div class="mp-nm-m">${t(e.wuge?e.wuge.reason:"未算")}</div></div>`,m=e.phonetics&&e.phonetics.available?`<div class="mp-nm-ph"><b>音韵</b><span class="mp-nm-ph-lv${e.phonetics.level==="顺口"?" ok":e.phonetics.level==="拗口"?" bad":" warn"}">${t(e.phonetics.level)}</span><em>${t(e.phonetics.chars.map(f=>`${f.py}${f.tone}`).join(" "))} 声调 ${t(e.phonetics.tonePattern)}${(e.phonetics.alt||[]).length?` 又读 ${t(e.phonetics.alt.map(f=>`${f.char} ${f.py}${f.tone}`).join("、"))}`:""}</em>${(e.phonetics.issues||[]).map(f=>`<span class="mp-nm-ph-i">${t(f.text)}</span>`).join("")}</div>`:`<div class="mp-nm-ph"><b>音韵</b><em>${t(e.phonetics?e.phonetics.reason:"未算")}</em></div>`;return`<section class="mp-nm" aria-label="名字评估">
1712
1843
  ${l(e.fullName||"",`字库 ${e.stats&&e.stats.libSize?e.stats.libSize:""} 字${e.stats&&e.stats.unknown?` 未收录 ${e.stats.unknown}`:""}`)}
1713
1844
  ${o}
1714
1845
  ${c}
1715
- ${m}
1716
1846
  ${u}
1717
- <div class="mp-nm-verd">${a(e.verdict||"")}</div>
1718
- <div class="mp-nm-note">${(e.notes||[]).map(h=>"※ "+a(h)).join("<br>")}</div>
1719
- </section>`},s.briefHTML=function(e){return e&&e.brief?s.summaryHTML(e.brief):""},s.summaryHTML=function(e){if(!e||!e.lead)return"";const i=(e.sections||[]).map(o=>`<div class="mp-br-sec"><b>${a(o.h)}</b><p>${a(o.t)}</p></div>`).join(""),r=e.advice&&e.advice.length?`<div class="mp-br-adv"><b>可以试着做的</b><ul>${e.advice.map(o=>`<li>${a(o)}</li>`).join("")}</ul></div>`:"",l=e.chips&&e.chips.length?`<div class="mp-br-chips">${e.chips.map(o=>`<span>${a(o)}</span>`).join("")}</div>`:"";return`<section class="mp-br" aria-label="先说结论">
1720
- <div class="mp-br-h"><b>${a(e.title||"先看这一张")}</b>${l}</div>
1721
- <p class="mp-br-lead">${a(e.lead)}</p>
1847
+ ${m}
1848
+ <div class="mp-nm-verd">${t(e.verdict||"")}</div>
1849
+ <div class="mp-nm-note">${(e.notes||[]).map(f=>"※ "+t(f)).join("<br>")}</div>
1850
+ </section>`},n.briefHTML=function(e){return e&&e.brief?n.summaryHTML(e.brief):""},n.summaryHTML=function(e){if(!e||!e.lead)return"";const i=(e.sections||[]).map(o=>`<div class="mp-br-sec"><b>${t(o.h)}</b><p>${t(o.t)}</p></div>`).join(""),r=e.advice&&e.advice.length?`<div class="mp-br-adv"><b>可以试着做的</b><ul>${e.advice.map(o=>`<li>${t(o)}</li>`).join("")}</ul></div>`:"",l=e.chips&&e.chips.length?`<div class="mp-br-chips">${e.chips.map(o=>`<span>${t(o)}</span>`).join("")}</div>`:"";return`<section class="mp-br" aria-label="先说结论">
1851
+ <div class="mp-br-h"><b>${t(e.title||"先看这一张")}</b>${l}</div>
1852
+ <p class="mp-br-lead">${t(e.lead)}</p>
1722
1853
  ${i}
1723
1854
  ${r}
1724
- ${e.caveat?`<p class="mp-br-cav">※ ${a(e.caveat)}</p>`:""}
1725
- ${e.footer?`<p class="mp-br-foot">${a(e.footer)}</p>`:""}
1726
- </section>`},s.baziHTML=function(e){const i=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]].filter(([x])=>e.pillars[x]),r={year:"年",month:"月",day:"日",hour:"时"},l={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},o={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},c=x=>`<span class="tg ${o[x]||""}">${x}</span>`,d=x=>`<span class="wx-${l[x]||"earth"}">${F(x)}${x}</span>`,m=x=>`<span class="ss-s ${x.luck||"neutral"}" title="${a(`${x.cat} · ${x.via}查${x.target} | ${x.rule}`)}">${x.name}</span>`,u=(x,v)=>`<tr><td class="bz-lbl">${x}</td>${i.map(([le])=>`<td data-c="${r[le]}">${v(e.pillars[le],le)}</td>`).join("")}</tr>`,h=`<thead><tr><th></th>${i.map(([x,v])=>`<th${x==="day"?' class="bz-hdr-day"':""}>${v}</th>`).join("")}</tr></thead>`,b={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},C={木:"火",火:"土",土:"金",金:"水",水:"木"},S={木:"土",土:"水",水:"火",火:"金",金:"木"},T=b[e.pillars.month.branch]||"土",j=["木","火","土","金","水"],_=x=>x===T?"旺":C[T]===x?"相":C[x]===T?"休":S[x]===T?"囚":"死",X=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="${i.length}">${["旺","相","休","囚","死"].map(x=>{const v=j.find(le=>_(le)===x)||T;return`<i><b class="wx-${l[v]}">${v}</b><em>${x}</em></i>`}).join("")}</td></tr>`,H=[u("十神",(x,v)=>v==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:x.stemTenGod?c(x.stemTenGod):'<span class="pp-dim">—</span>'),u("天干",x=>`<span class="bz-big ${"wx-"+l[x.stemElement]}">${x.stem}</span>`),u("地支",x=>`<span class="bz-big ${"wx-"+l[x.branchElement]}">${x.branch}</span>`),u("藏干",x=>x.hidden.map(v=>`<i class="bz-cg wx-${l[v.element]}">${v.stem}·${v.element}</i>`).join("")),u("支神",x=>x.hidden.map(v=>c(v.tenGod)).join("<br>")),u("纳音",x=>x.nayin),u("空亡",x=>`<span class="pp-dim">${x.kongwang.join("")}</span>`),u("地势",x=>x.dishi),u("自坐",x=>x.zizuo),u("神煞",x=>x.shenshaDetail&&x.shenshaDetail.length?`<span class="pp-ss">${x.shenshaDetail.map(m).join("")}</span>`:'<span class="pp-dim">—</span>'),X].join(""),w=Object.entries(e.wuxing).map(([x,v])=>`<span class="pp-chip wx-${l[x]}">${F(x)}${x} ${v}</span>`).join(""),z=e.frame||{},te=x=>x==="大吉"||x==="吉"?"ok":x==="大忌"||x==="忌"?"warn":"",D=(x,v)=>v?`<div class="pp-sec"><div class="pp-sec-h">${x}</div>${v}</div>`:"",oe=z.geju&&z.geju.length?`
1727
- <div class="pp-tl">${z.primary?`主格 <b>${a(z.primary.name)}</b> ${a(z.primary.evidence)}`:""}</div>
1728
- <div class="pp-chips">${z.geju.map(x=>{const v=x.status==="破格",le=x.status==="待定"||x.status==="假从",ie=`${x.evidence||""}${Array.isArray(x.breaks)&&x.breaks.length?`;破:${x.breaks.join(";")}`:""}`;return`<span class="pp-chip ${v?"broken":le?"warn":""}" title="${a(ie)}">${a(x.name)}<i class="pp-drel">${a(x.kind)}${x.status?`·${a(x.status)}`:""}</i></span>`}).join("")}</div>`:"",$=(()=>{const x=Array.isArray(z.yongshen&&z.yongshen.neutral)?z.yongshen.neutral:[],v=new Set(z.yongshen&&z.yongshen.neutralTenGods||[]);return`${(z.yongshen&&z.yongshen.avoidTenGods||[]).filter(ie=>!v.has(ie)).map(ie=>`<span class="pp-chip warn">${a(ie)}</span>`).join("")}${[...v].map(ie=>`<span class="pp-chip neu" title="局中分量近零,按中性偏忌看">${a(ie)}</span>`).join("")}${x.length?`<span class="pp-chip neu" title="忌神中全局不足 0.5 分的那几行;仍在忌里参与行运评分">中性偏忌 ${x.map(ie=>`${a(ie.element)} ${a(ie.weight)} 分`).join("、")}</span>`:""}`})(),ce=z.yongshen?`
1729
- <div class="pp-tl">喜 ${z.yongshen.favor.map(d).join("")} 忌 ${z.yongshen.avoid.map(d).join("")} <span class="pp-dim">${a(z.yongshen.method)}</span></div>
1730
- <div class="pp-chips">${z.yongshen.favorTenGods.map(x=>`<span class="pp-chip ok">${a(x)}</span>`).join("")}${$}</div>
1731
- ${(z.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${z.yongshen.disputed.map(x=>`${a(x.element)}(扶抑为${a(x.favorRole)}·${a(x.favorVerb)},${a(x.climate)}盘调候忌${a(x.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1732
- <div class="pp-tl pp-dim">${a(z.yongshen.detail)}</div>`:"",k=e.climate||z.yongshen&&z.yongshen.climate||null,O=k?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(k.temp)||0)+3)/6*100))),v=k.need?`<em>调候取</em><b>${a(k.need.stem+k.need.element)}</b>`:"<em>气候平和</em>",le=!!(z.yongshen&&Array.isArray(z.yongshen.disputed))&&z.yongshen.disputed.some(ut=>ut.element===k.avoidElement),ie=k.need?`<em>忌</em><b>${a(k.avoidElement)}</b>${le?'<span class="pp-dim">(有争议)</span>':""}`:"",ke=(k.evidence||[]).length?`<em>依据</em><span>${a(k.evidence.join("、"))}</span>`:"",we=k.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',xe=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,mt=xe?`<div class="mp-qt">
1733
- <div class="mp-qt-h"><b>穷通宝鉴</b><span>${a(xe.label)}</span></div>
1734
- <div class="mp-qt-y"><em>用神</em>${xe.yong.map((ut,ka)=>`<b class="${ka===0?"first":""}">${a(ut)}</b>`).join("")}<em>首取 ${a(xe.primary)}</em></div>
1735
- <div class="mp-qt-q" title="${a(xe.quote)}">「${a(xe.quote)}」<span>第 ${xe.chapter} 章${xe.truncated?" · 首段更长,摘句下略":""}${xe.note?" · "+a(xe.note):""}</span></div>
1855
+ ${e.caveat?`<p class="mp-br-cav">※ ${t(e.caveat)}</p>`:""}
1856
+ ${e.footer?`<p class="mp-br-foot">${t(e.footer)}</p>`:""}
1857
+ </section>`},n.baziHTML=function(e){const i=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]].filter(([b])=>e.pillars[b]),r={year:"年",month:"月",day:"日",hour:"时"},l={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},o={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},c=b=>`<span class="tg ${o[b]||""}">${b}</span>`,d=b=>`<span class="wx-${l[b]||"earth"}">${xe(b)}${b}</span>`,u=b=>`<span class="ss-s ${b.luck||"neutral"}" title="${t(`${b.cat} · ${b.via}查${b.target} | ${b.rule}`)}">${b.name}</span>`,m=(b,v)=>`<tr><td class="bz-lbl">${b}</td>${i.map(([fe])=>`<td data-c="${r[fe]}">${v(e.pillars[fe],fe)}</td>`).join("")}</tr>`,f=`<thead><tr><th></th>${i.map(([b,v])=>`<th${b==="day"?' class="bz-hdr-day"':""}>${v}</th>`).join("")}</tr></thead>`,h={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},z={木:"火",火:"土",土:"金",金:"水",水:"木"},w={木:"土",土:"水",水:"火",火:"金",金:"木"},L=h[e.pillars.month.branch]||"土",N=["木","火","土","金","水"],F=b=>b===L?"旺":z[L]===b?"相":z[b]===L?"休":w[b]===L?"囚":"死",J=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="${i.length}">${["旺","相","休","囚","死"].map(b=>{const v=N.find(fe=>F(fe)===b)||L;return`<i><b class="wx-${l[v]}">${v}</b><em>${b}</em></i>`}).join("")}</td></tr>`,P=[m("十神",(b,v)=>v==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:b.stemTenGod?c(b.stemTenGod):'<span class="pp-dim">—</span>'),m("天干",b=>`<span class="bz-big ${"wx-"+l[b.stemElement]}">${b.stem}</span>`),m("地支",b=>`<span class="bz-big ${"wx-"+l[b.branchElement]}">${b.branch}</span>`),m("藏干",b=>b.hidden.map(v=>`<i class="bz-cg wx-${l[v.element]}">${v.stem}·${v.element}</i>`).join("")),m("支神",b=>b.hidden.map(v=>c(v.tenGod)).join("<br>")),m("纳音",b=>b.nayin),m("空亡",b=>`<span class="pp-dim">${b.kongwang.join("")}</span>`),m("地势",b=>b.dishi),m("自坐",b=>b.zizuo),m("神煞",b=>b.shenshaDetail&&b.shenshaDetail.length?`<span class="pp-ss">${b.shenshaDetail.map(u).join("")}</span>`:'<span class="pp-dim">—</span>'),J].join(""),M=Object.entries(e.wuxing).map(([b,v])=>`<span class="pp-chip wx-${l[b]}">${xe(b)}${b} ${v}</span>`).join(""),O=e.frame||{},W=b=>b==="大吉"||b==="吉"?"ok":b==="大忌"||b==="忌"?"warn":"",q=(b,v)=>v?`<div class="pp-sec"><div class="pp-sec-h">${b}</div>${v}</div>`:"",R=O.geju&&O.geju.length?`
1858
+ <div class="pp-tl">${O.primary?`主格 <b>${t(O.primary.name)}</b> ${t(O.primary.evidence)}`:""}</div>
1859
+ <div class="pp-chips">${O.geju.map(b=>{const v=b.status==="破格",fe=b.status==="待定"||b.status==="假从",me=`${b.evidence||""}${Array.isArray(b.breaks)&&b.breaks.length?`;破:${b.breaks.join(";")}`:""}`;return`<span class="pp-chip ${v?"broken":fe?"warn":""}" title="${t(me)}">${t(b.name)}<i class="pp-drel">${t(b.kind)}${b.status?`·${t(b.status)}`:""}</i></span>`}).join("")}</div>`:"",$=(()=>{const b=Array.isArray(O.yongshen&&O.yongshen.neutral)?O.yongshen.neutral:[],v=new Set(O.yongshen&&O.yongshen.neutralTenGods||[]);return`${(O.yongshen&&O.yongshen.avoidTenGods||[]).filter(me=>!v.has(me)).map(me=>`<span class="pp-chip warn">${t(me)}</span>`).join("")}${[...v].map(me=>`<span class="pp-chip neu" title="局中分量近零,按中性偏忌看">${t(me)}</span>`).join("")}${b.length?`<span class="pp-chip neu" title="忌神中全局不足 0.5 分的那几行;仍在忌里参与行运评分">中性偏忌 ${b.map(me=>`${t(me.element)} ${t(me.weight)} 分`).join("、")}</span>`:""}`})(),ue=O.yongshen?`
1860
+ <div class="pp-tl">喜 ${O.yongshen.favor.map(d).join("")} 忌 ${O.yongshen.avoid.map(d).join("")} <span class="pp-dim">${t(O.yongshen.method)}</span></div>
1861
+ <div class="pp-chips">${O.yongshen.favorTenGods.map(b=>`<span class="pp-chip ok">${t(b)}</span>`).join("")}${$}</div>
1862
+ ${(O.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${O.yongshen.disputed.map(b=>`${t(b.element)}(扶抑为${t(b.favorRole)}·${t(b.favorVerb)},${t(b.climate)}盘调候忌${t(b.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1863
+ <div class="pp-tl pp-dim">${t(O.yongshen.detail)}</div>`:"",Q=e.climate||O.yongshen&&O.yongshen.climate||null,ne=Q?(()=>{const b=Math.max(2,Math.min(98,Math.round(((Number(Q.temp)||0)+3)/6*100))),v=Q.need?`<em>调候取</em><b>${t(Q.need.stem+Q.need.element)}</b>`:"<em>气候平和</em>",fe=!!(O.yongshen&&Array.isArray(O.yongshen.disputed))&&O.yongshen.disputed.some(ia=>ia.element===Q.avoidElement),me=Q.need?`<em>忌</em><b>${t(Q.avoidElement)}</b>${fe?'<span class="pp-dim">(有争议)</span>':""}`:"",Se=(Q.evidence||[]).length?`<em>依据</em><span>${t(Q.evidence.join("、"))}</span>`:"",je=Q.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',qe=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Ke=qe?`<div class="mp-qt">
1864
+ <div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(qe.label)}</span></div>
1865
+ <div class="mp-qt-y"><em>用神</em>${qe.yong.map((ia,lt)=>`<b class="${lt===0?"first":""}">${t(ia)}</b>`).join("")}<em>首取 ${t(qe.primary)}</em></div>
1866
+ <div class="mp-qt-q" title="${t(qe.quote)}">「${t(qe.quote)}」<span>第 ${qe.chapter} 章${qe.truncated?" · 首段更长,摘句下略":""}${qe.note?" · "+t(qe.note):""}</span></div>
1736
1867
  </div>`:"";return`<section class="mp-cli" aria-label="寒暖燥湿">
1737
- <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${a(k.label||"")}</span>${we}</div>
1738
- <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${x}%"></i></div>
1868
+ <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(Q.label||"")}</span>${je}</div>
1869
+ <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${b}%"></i></div>
1739
1870
  <div class="mp-cli-axis"><span>寒</span><span>平</span><span>热</span></div>
1740
- <div class="mp-cli-row">${v}${ie}${ke}</div>
1741
- <div class="mp-cli-narr">${a(k.narration||"")}</div>
1742
- ${mt}
1743
- </section>`})():"",Q=z.godStats?`<div class="pp-chips">${Object.entries(z.godStats.groups).map(([x,v])=>`<span class="pp-chip">${x} ${v}</span>`).join("")}</div>`:"",$e=e.dayun.list.map(x=>{const v=x.luck||null;return`<span class="pp-chip ${v?te(v.tier):""}" title="${a(`${x.fromDate?`${x.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),ue=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const v=x.luck||null,le=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],ie=le.length?`|${le.map(ke=>ke.detail).join(";")}`:"";return`<span class="pp-chip ${v?te(v.tier):""}" title="${a(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${ie}`:ie.replace(/^|/,""))}">${x.year} ${x.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",pe=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),me=e.suiyunClassic,Fe=me?`<div class="pp-dim pp-sy-src" title="${a(me.plain||"")}">《${a(me.bookName||"")}·${a(me.chapter||"")}》「${a(me.quote||"")}」</div>`:"",Ze=pe.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${pe.map(x=>`<span class="pp-chip" title="${a(`${x.suiyun.signals.map(v=>v.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${a(x.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${Fe}`:"",ct=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",be=e.strength&&e.strength.branchStructure,L=be?(()=>{const x=be.branches.map(we=>`${a(we.label)}${a(we.branch)}<i class="pp-drel">·${a(we.camp)}</i>${be.placeholderHour&&we.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),v=be.odd&&be.odd.length?`<span class="pp-st-odd">异类 ${be.odd.map(we=>`${a(we.label)}${a(we.branch)}(${we.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',le=be.congProb!=null?` 从格 ${a(be.congRange)}`:" 不套从格概率",ie=be.balance||{},ke=ie.branch?` 支 ${ie.branch.A}:${ie.branch.B} 合干 ${ie.total?`${ie.total.A}:${ie.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${a(`${be.method};${be.note}`)}"><span class="pp-st-code">${a(be.code)}</span>${x} ${v}${le}${ke}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",f=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],U=f.length?`<div class="pp-anhe" title="${a(e.relations.anheNote||"")}"><b>暗合</b>${f.map(x=>a(x)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${f.length===1?"只一对,按口径可忽略":`共 ${f.length} 对`}</span></div>`:"",de=e.shensha&&e.shensha.groups||[],re=de.length?`
1871
+ <div class="mp-cli-row">${v}${me}${Se}</div>
1872
+ <div class="mp-cli-narr">${t(Q.narration||"")}</div>
1873
+ ${Ke}
1874
+ </section>`})():"",Ae=O.godStats?`<div class="pp-chips">${Object.entries(O.godStats.groups).map(([b,v])=>`<span class="pp-chip">${b} ${v}</span>`).join("")}</div>`:"",k=e.dayun.list.map(b=>{const v=b.luck||null;return`<span class="pp-chip ${v?W(v.tier):""}" title="${t(`${b.fromDate?`${b.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${b.startAge} ${b.ganzhi}${b.relations&&b.relations.length?` <i class="pp-drel">${b.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),T=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(b=>{const v=b.luck||null,fe=b.suiyun&&Array.isArray(b.suiyun.signals)?b.suiyun.signals:[],me=fe.length?`|${fe.map(Se=>Se.detail).join(";")}`:"";return`<span class="pp-chip ${v?W(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${me}`:me.replace(/^|/,""))}">${b.year} ${b.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",E=(e.liunian||[]).filter(b=>b.suiyun&&Array.isArray(b.suiyun.signals)&&b.suiyun.signals.length),re=e.suiyunClassic,x=re?`<div class="pp-dim pp-sy-src" title="${t(re.plain||"")}">《${t(re.bookName||"")}·${t(re.chapter||"")}》「${t(re.quote||"")}」</div>`:"",pe=E.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${E.map(b=>`<span class="pp-chip" title="${t(`${b.suiyun.signals.map(v=>v.detail).join(";")}|${b.suiyun.note||""}`)}">${b.year} ${t(b.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${x}`:"",ze=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",be=e.strength&&e.strength.branchStructure,H=be?(()=>{const b=be.branches.map(je=>`${t(je.label)}${t(je.branch)}<i class="pp-drel">·${t(je.camp)}</i>${be.placeholderHour&&je.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),v=be.odd&&be.odd.length?`<span class="pp-st-odd">异类 ${be.odd.map(je=>`${t(je.label)}${t(je.branch)}(${je.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',fe=be.congProb!=null?` 从格 ${t(be.congRange)}`:" 不套从格概率",me=be.balance||{},Se=me.branch?` 支 ${me.branch.A}:${me.branch.B} 合干 ${me.total?`${me.total.A}:${me.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${be.method};${be.note}`)}"><span class="pp-st-code">${t(be.code)}</span>${b} ${v}${fe}${Se}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",K=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],te=K.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${K.map(b=>t(b)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${K.length===1?"只一对,按口径可忽略":`共 ${K.length} 对`}</span></div>`:"",ge=e.shensha&&e.shensha.groups||[],he=ge.length?`
1744
1875
  <div class="pp-ssx">
1745
- <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${de.length} 类 · 悬停看查法</span></div>
1746
- ${de.map(x=>`<div class="pp-ssg"><span class="ssg-gt">${x.cat}</span><span class="ssg-gi">${x.items.map(v=>`<span class="pp-ssi ${v.luck||"neutral"}" title="${a(`${v.via}查${v.target} | ${v.rule}`)}">${v.name}<em>${v.pillars.map(le=>r[le]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1876
+ <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${ge.length} 类 · 悬停看查法</span></div>
1877
+ ${ge.map(b=>`<div class="pp-ssg"><span class="ssg-gt">${b.cat}</span><span class="ssg-gi">${b.items.map(v=>`<span class="pp-ssi ${v.luck||"neutral"}" title="${t(`${v.via}查${v.target} | ${v.rule}`)}">${v.name}<em>${v.pillars.map(fe=>r[fe]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1747
1878
  <div class="ssx-h" style="border-top:none;padding-top:4px;margin-top:4px">神煞只作参考,吉凶仍须看格局、旺衰与行运。</div>
1748
- </div>`:"";return s.briefHTML(e)+`<div class="pp" style="padding:12px">
1749
- <table class="pp-bz">${h}<tbody>${H}</tbody></table>
1879
+ </div>`:"";return n.briefHTML(e)+`<div class="pp" style="padding:12px">
1880
+ <table class="pp-bz">${f}<tbody>${P}</tbody></table>
1750
1881
  ${e.hourUnknown?'<div class="pp-warn" role="note">时柱暂缺:只排年/月/日三柱,起运与交运按日估算。时柱按正午暂算,涉及时柱的结论仅供参考。</div>':""}
1751
1882
  <div class="pp-rel"><div><b>天干</b>${e.relations&&e.relations.stems.length?e.relations.stems.join(" · "):"—"}</div>
1752
1883
  <div><b>地支</b>${e.relations&&e.relations.branches.length?e.relations.branches.join(" · "):"—"}</div></div>
1753
- ${ct}
1754
- ${L}
1755
- ${U}
1756
- ${D("格局",oe)}
1757
- ${D("用神",ce)}
1758
- ${O}
1884
+ ${ze}
1885
+ ${H}
1886
+ ${te}
1887
+ ${q("格局",R)}
1888
+ ${q("用神",ue)}
1889
+ ${ne}
1759
1890
  ${Array.isArray(e.classics)&&e.classics.length?`<section class="mp-cl" aria-label="古籍原文">
1760
1891
  <div class="mp-cl-h"><b>古籍原文</b><span>照录通行本,释义为白话自撰</span></div>
1761
- ${e.classics.map(x=>`<div class="mp-cl-e">
1762
- <div class="mp-cl-t"><b>${a(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[x.book]||x.book)+"·"+x.chapter)}</b></div>
1763
- <div class="mp-cl-q">「${a(x.quote)}」</div>
1764
- <div class="mp-cl-p">${a(x.plain)}</div>
1892
+ ${e.classics.map(b=>`<div class="mp-cl-e">
1893
+ <div class="mp-cl-t"><b>${t(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[b.book]||b.book)+"·"+b.chapter)}</b></div>
1894
+ <div class="mp-cl-q">「${t(b.quote)}」</div>
1895
+ <div class="mp-cl-p">${t(b.plain)}</div>
1765
1896
  </div>`).join("")}
1766
1897
  </section>`:""}
1767
- ${D("五行与十神",`<div class="pp-chips">${w}</div>${Q}`)}
1768
- ${D("大运",`${s.curveHTML(e)}<div class="pp-chips">${$e}</div>`)}
1769
- ${ue?D("流年",ue+Ze):""}
1770
- ${e.palaces?D("胎命身",`<div class="pp-chips">
1771
- <span class="pp-chip" title="${a(e.palaces.taiyuan.note)}">胎元 ${a(e.palaces.taiyuan.ganzhi)}</span>
1772
- ${e.palaces.taixi?`<span class="pp-chip" title="${a(e.palaces.taixi.note)}">胎息 ${a(e.palaces.taixi.ganzhi)}</span>`:""}
1773
- ${e.palaces.minggong?`<span class="pp-chip" title="${a(e.palaces.minggong.note)}">命宫 ${a(e.palaces.minggong.ganzhi)}</span>`:""}
1774
- ${e.palaces.shengong?`<span class="pp-chip" title="${a(e.palaces.shengong.note)}">身宫 ${a(e.palaces.shengong.ganzhi)}</span>`:""}
1898
+ ${q("五行与十神",`<div class="pp-chips">${M}</div>${Ae}`)}
1899
+ ${q("大运",`${n.curveHTML(e)}<div class="pp-chips">${k}</div>`)}
1900
+ ${T?q("流年",T+pe):""}
1901
+ ${e.palaces?q("胎命身",`<div class="pp-chips">
1902
+ <span class="pp-chip" title="${t(e.palaces.taiyuan.note)}">胎元 ${t(e.palaces.taiyuan.ganzhi)}</span>
1903
+ ${e.palaces.taixi?`<span class="pp-chip" title="${t(e.palaces.taixi.note)}">胎息 ${t(e.palaces.taixi.ganzhi)}</span>`:""}
1904
+ ${e.palaces.minggong?`<span class="pp-chip" title="${t(e.palaces.minggong.note)}">命宫 ${t(e.palaces.minggong.ganzhi)}</span>`:""}
1905
+ ${e.palaces.shengong?`<span class="pp-chip" title="${t(e.palaces.shengong.note)}">身宫 ${t(e.palaces.shengong.ganzhi)}</span>`:""}
1775
1906
  ${!e.palaces.minggong||!e.palaces.shengong?'<span class="pp-chip" title="命宫与身宫由生月与生时支合数定宫;时柱暂缺,这两宫不排">命宫·身宫 时柱暂缺不排</span>':""}
1776
1907
  </div>`):""}
1777
- ${re}
1908
+ ${he}
1778
1909
  <div style="margin-top:8px;font-size:12px;color:var(--muted)">上一节 ${e.jieqi.previous.name} ${e.jieqi.previous.time} 下一节 ${e.jieqi.next.name} ${e.jieqi.next.time} ${e.dayun.rule},${e.dayun.startAge.years}岁起运${e.dayun.jiao&&e.dayun.jiao.at?`(交运 ${e.dayun.jiao.at},${e.dayun.jiao.frame})`:""}${e.dayun.startAgeExact&&Number.isInteger(e.dayun.startAgeExact.years)?` 精确 ${e.dayun.startAgeExact.years}年${e.dayun.startAgeExact.months}月${e.dayun.startAgeExact.days}天${e.dayun.startAgeExact.hours}时(截断到日时;上面是四舍五入到月)`:""}</div>
1779
- </div>`};const ot={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},Nt={同向:"good",有张力:"watch",互补:"alt"},Dt=e=>`<div class="mp-cross">${e.map(i=>{const r=Nt[i.stance]||"plain";return`<div class="mp-cross-row">
1780
- <div class="mp-cross-h"><span class="mp-cross-l">${a(i.label)}</span><span class="mp-cross-tag t-${r}">${a(i.stance||"—")}</span></div>
1910
+ </div>`};const St={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},ea={同向:"good",有张力:"watch",互补:"alt"},Nt=e=>`<div class="mp-cross">${e.map(i=>{const r=ea[i.stance]||"plain";return`<div class="mp-cross-row">
1911
+ <div class="mp-cross-h"><span class="mp-cross-l">${t(i.label)}</span><span class="mp-cross-tag t-${r}">${t(i.stance||"—")}</span></div>
1781
1912
  <div class="mp-cross-b">
1782
- <div class="mp-cross-cell"><b>八字</b><span>${a(i.bazi||"—")}</span></div>
1783
- <div class="mp-cross-cell"><b>紫微</b><span>${a(i.ziwei||"—")}</span></div>
1913
+ <div class="mp-cross-cell"><b>八字</b><span>${t(i.bazi||"—")}</span></div>
1914
+ <div class="mp-cross-cell"><b>紫微</b><span>${t(i.ziwei||"—")}</span></div>
1784
1915
  </div>
1785
- ${i.note?`<div class="mp-cross-note">${a(i.note)}</div>`:""}
1786
- </div>`}).join("")}</div>`;s.interpretHTML=function(e,i){if(!e||!(e.dimensions&&e.dimensions.length||e.sections&&e.sections.length)&&!e.error&&!e.answer)return"";const l=!!(i&&i.folded);let o=-1;(e.dimensions||[]).forEach(($,ce)=>{$.knowledge&&$.knowledge.length&&(o=ce)});const c=(e.dimensions||[]).map(($,ce)=>`<div class="mp-it-dim${$.focused?" focus":""}">
1787
- <div class="mp-it-dh"><span class="mp-it-dno">${ce+1}</span><span class="mp-it-dlabel">${a($.label)}</span>${$.focused?'<span class="mp-it-focus">最贴近你的问题</span>':""}${$.confidence?`<span class="mp-it-conf c-${a($.confidence)}">置信度 ${a($.confidence)}</span>`:""}</div>
1788
- ${$.plain?`<div class="mp-it-dplain">${a($.plain)}</div>`:""}
1789
- <div class="mp-it-dtext">${a($.text)}</div>
1790
- ${$.evidence&&$.evidence.length?`<details class="mp-it-ev"><summary>依据 · ${a($.evidence.length)} 条盘面事实</summary><div class="mp-it-ev-body">${$.evidence.map(k=>`<span class="mp-it-ev-item">${a(k)}</span>`).join("")}<span class="mp-it-ev-tech">技法:${a(e.technique||e.systemLabel||"")}</span></div></details>`:""}
1791
- ${$.knowledge&&$.knowledge.length?`<div class="mp-it-know">${$.knowledge.map(k=>`<div class="know-row"><span class="know-status ${k.status}">${a(k.statusLabel)}</span><span class="know-body"><b>${a(k.gist)}</b>${a(k.detail)}${k.source?`<i>出处:${a(k.source)}</i>`:""}${k.note?`<em>注:${a(k.note)}</em>`:""}</span></div>`).join("")}${ce===o&&e.knowledgeNote?`<div class="know-disc">${a(e.knowledgeNote)}</div>`:""}</div>`:""}
1792
- ${$.advice?`<div class="mp-it-adv"><b>建议</b>${a($.advice)}</div>`:""}
1793
- </div>`).join(""),d=e.outline&&e.outline.length?`<div class="mp-outline"><div class="mp-outline-h">一页读懂</div>${e.outline.map($=>`<div class="mp-outline-row"><b>${a($.label)}</b><span>${a($.text)}</span></div>`).join("")}</div>`:"",m=e.sections&&e.sections.length?`<nav class="mp-toc" aria-label="报告目录">${e.sections.map($=>`<a href="#mp-sec-${a($.key)}">${a($.label)}</a>`).join("")}</nav>`:"",u=e.tables&&e.tables.length?`<div class="mp-tables">${e.tables.filter($=>Array.isArray($.rows)&&$.rows.length).map($=>`<div class="mp-table-wrap">
1794
- <div class="mp-table-h">${a($.title)}</div>
1916
+ ${i.note?`<div class="mp-cross-note">${t(i.note)}</div>`:""}
1917
+ </div>`}).join("")}</div>`;n.interpretHTML=function(e,i){if(!e||!(e.dimensions&&e.dimensions.length||e.sections&&e.sections.length)&&!e.error&&!e.answer)return"";const l=!!(i&&i.folded);let o=-1;(e.dimensions||[]).forEach(($,ue)=>{$.knowledge&&$.knowledge.length&&(o=ue)});const c=(e.dimensions||[]).map(($,ue)=>`<div class="mp-it-dim${$.focused?" focus":""}">
1918
+ <div class="mp-it-dh"><span class="mp-it-dno">${ue+1}</span><span class="mp-it-dlabel">${t($.label)}</span>${$.focused?'<span class="mp-it-focus">最贴近你的问题</span>':""}${$.confidence?`<span class="mp-it-conf c-${t($.confidence)}">置信度 ${t($.confidence)}</span>`:""}</div>
1919
+ ${$.plain?`<div class="mp-it-dplain">${t($.plain)}</div>`:""}
1920
+ <div class="mp-it-dtext">${t($.text)}</div>
1921
+ ${$.evidence&&$.evidence.length?`<details class="mp-it-ev"><summary>依据 · ${t($.evidence.length)} 条盘面事实</summary><div class="mp-it-ev-body">${$.evidence.map(Q=>`<span class="mp-it-ev-item">${t(Q)}</span>`).join("")}<span class="mp-it-ev-tech">技法:${t(e.technique||e.systemLabel||"")}</span></div></details>`:""}
1922
+ ${$.knowledge&&$.knowledge.length?`<div class="mp-it-know">${$.knowledge.map(Q=>`<div class="know-row"><span class="know-status ${Q.status}">${t(Q.statusLabel)}</span><span class="know-body"><b>${t(Q.gist)}</b>${t(Q.detail)}${Q.source?`<i>出处:${t(Q.source)}</i>`:""}${Q.note?`<em>注:${t(Q.note)}</em>`:""}</span></div>`).join("")}${ue===o&&e.knowledgeNote?`<div class="know-disc">${t(e.knowledgeNote)}</div>`:""}</div>`:""}
1923
+ ${$.advice?`<div class="mp-it-adv"><b>建议</b>${t($.advice)}</div>`:""}
1924
+ </div>`).join(""),d=e.outline&&e.outline.length?`<div class="mp-outline"><div class="mp-outline-h">一页读懂</div>${e.outline.map($=>`<div class="mp-outline-row"><b>${t($.label)}</b><span>${t($.text)}</span></div>`).join("")}</div>`:"",u=e.sections&&e.sections.length?`<nav class="mp-toc" aria-label="报告目录">${e.sections.map($=>`<a href="#mp-sec-${t($.key)}">${t($.label)}</a>`).join("")}</nav>`:"",m=e.tables&&e.tables.length?`<div class="mp-tables">${e.tables.filter($=>Array.isArray($.rows)&&$.rows.length).map($=>`<div class="mp-table-wrap">
1925
+ <div class="mp-table-h">${t($.title)}</div>
1795
1926
  <div class="mp-table-scroll"><table class="mp-table">
1796
- <thead><tr>${$.columns.map(ce=>`<th scope="col">${a(ce)}</th>`).join("")}</tr></thead>
1797
- <tbody>${$.rows.map(ce=>`<tr>${ce.map((k,O)=>`<td data-label="${a($.columns[O]||"")}">${a(k)}</td>`).join("")}</tr>`).join("")}</tbody>
1927
+ <thead><tr>${$.columns.map(ue=>`<th scope="col">${t(ue)}</th>`).join("")}</tr></thead>
1928
+ <tbody>${$.rows.map(ue=>`<tr>${ue.map((Q,ne)=>`<td data-label="${t($.columns[ne]||"")}">${t(Q)}</td>`).join("")}</tr>`).join("")}</tbody>
1798
1929
  </table></div>
1799
- </div>`).join("")}</div>`:"",h=$=>String($||"").split(`
1800
- `).map(ce=>`<div class="mp-it-p">${a(ce).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),b=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map($=>`<div class="mp-it-sec${$.tone?` tone-${a($.tone)}`:""}" id="mp-sec-${a($.key)}">
1801
- <div class="mp-it-sh">${a($.label)}</div>
1802
- <div class="mp-it-stext">${Array.isArray($.items)&&$.items.length?Dt($.items):h($.text)}</div>
1803
- </div>`).join("")}</div>`:"",C=[e.systemLabel,ot[e.moduleType]||e.moduleType].filter(Boolean),S=e.ask,T=S&&S.question?a(S.question):"",j=S&&(T||S.direction&&S.direction!=="general")?`<div class="mp-it-ask">${T?`<span class="ask-q">问题:${T}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${a(S.directionLabel||"综合")}</span></div>`:"",_=e.answer?`<div class="mp-it-ans"><b>${T?"先答所问":"先看结论"}</b>${a(e.answer)}</div>`:"",X=e.plain?`<div class="mp-it-plain"><b>说人话</b>${a(e.plain)}</div>`:"",H=e.followups&&e.followups.length?`<div class="mp-it-fu"><b>还可以这样追问</b><ul>${e.followups.map($=>`<li>${a($)}</li>`).join("")}</ul></div>`:"",w=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map($=>`<div><span>${a($.term)}</span>${a($.plain)}</div>`).join("")}</details>`:"",z=e.limits&&e.limits.length?`<details class="mp-it-limits"><summary>本插件不回答什么(${e.limits.length} 条)</summary>${e.limits.map($=>`<div><b>${a($.title)}</b>${a($.text)}</div>`).join("")}</details>`:"",D=e.system&&/^(liuyao|meihua|daliuren|qimen|tarot|xiaoliuren)$/.test(e.system)?`<div class="mp-askcopy-row"><button type="button" class="mp-askcopy" data-mp-askcopy="${a(e.system)}">复制问事提示</button><span class="mp-askcopy-hint">把这张盘和你的问题打包成一段提示,粘到任何对话里都能用</span></div>`:"",oe=e.guide?`<details class="mp-guide">
1804
- <summary><b>${a(e.guide.title)}</b><span class="mp-guide-sub">数 / 象 / 辞</span></summary>
1930
+ </div>`).join("")}</div>`:"",f=$=>String($||"").split(`
1931
+ `).map(ue=>`<div class="mp-it-p">${t(ue).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),h=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map($=>`<div class="mp-it-sec${$.tone?` tone-${t($.tone)}`:""}" id="mp-sec-${t($.key)}">
1932
+ <div class="mp-it-sh">${t($.label)}</div>
1933
+ <div class="mp-it-stext">${Array.isArray($.items)&&$.items.length?Nt($.items):f($.text)}</div>
1934
+ </div>`).join("")}</div>`:"",z=[e.systemLabel,St[e.moduleType]||e.moduleType].filter(Boolean),w=e.ask,L=w&&w.question?t(w.question):"",N=w&&(L||w.direction&&w.direction!=="general")?`<div class="mp-it-ask">${L?`<span class="ask-q">问题:${L}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t(w.directionLabel||"综合")}</span></div>`:"",F=e.answer?`<div class="mp-it-ans"><b>${L?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",J=e.plain?`<div class="mp-it-plain"><b>说人话</b>${t(e.plain)}</div>`:"",P=e.followups&&e.followups.length?`<div class="mp-it-fu"><b>还可以这样追问</b><ul>${e.followups.map($=>`<li>${t($)}</li>`).join("")}</ul></div>`:"",M=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map($=>`<div><span>${t($.term)}</span>${t($.plain)}</div>`).join("")}</details>`:"",O=e.limits&&e.limits.length?`<details class="mp-it-limits"><summary>本插件不回答什么(${e.limits.length} 条)</summary>${e.limits.map($=>`<div><b>${t($.title)}</b>${t($.text)}</div>`).join("")}</details>`:"",q=e.system&&/^(liuyao|meihua|daliuren|qimen|tarot|xiaoliuren)$/.test(e.system)?`<div class="mp-askcopy-row"><button type="button" class="mp-askcopy" data-mp-askcopy="${t(e.system)}">复制问事提示</button><span class="mp-askcopy-hint">把这张盘和你的问题打包成一段提示,粘到任何对话里都能用</span></div>`:"",R=e.guide?`<details class="mp-guide">
1935
+ <summary><b>${t(e.guide.title)}</b><span class="mp-guide-sub">数 / 象 / 辞</span></summary>
1805
1936
  <div class="mp-guide-body">
1806
- <p class="mp-guide-lead">${a(e.guide.lead)}</p>
1807
- <ol class="mp-guide-layers">${(e.guide.layers||[]).map($=>`<li><b>${a($.name)}<i>${a($.sub)}</i></b><span>${a($.text)}</span><em>${a($.hint)}</em></li>`).join("")}</ol>
1808
- <div class="mp-guide-check"><b>${a(e.guide.check.title)}</b><ol>${(e.guide.check.items||[]).map($=>`<li>${a($)}</li>`).join("")}</ol><p>${a(e.guide.check.tail)}</p></div>
1809
- <div class="mp-guide-parts"><b>${a(e.guide.parts.title)}</b><ul>${(e.guide.parts.rows||[]).map($=>`<li><span>${a($[0])}</span>${a($[1])}</li>`).join("")}</ul><p>${a(e.guide.parts.tail)}</p></div>
1810
- <p class="mp-guide-close">${a(e.guide.closing)}</p>
1937
+ <p class="mp-guide-lead">${t(e.guide.lead)}</p>
1938
+ <ol class="mp-guide-layers">${(e.guide.layers||[]).map($=>`<li><b>${t($.name)}<i>${t($.sub)}</i></b><span>${t($.text)}</span><em>${t($.hint)}</em></li>`).join("")}</ol>
1939
+ <div class="mp-guide-check"><b>${t(e.guide.check.title)}</b><ol>${(e.guide.check.items||[]).map($=>`<li>${t($)}</li>`).join("")}</ol><p>${t(e.guide.check.tail)}</p></div>
1940
+ <div class="mp-guide-parts"><b>${t(e.guide.parts.title)}</b><ul>${(e.guide.parts.rows||[]).map($=>`<li><span>${t($[0])}</span>${t($[1])}</li>`).join("")}</ul><p>${t(e.guide.parts.tail)}</p></div>
1941
+ <p class="mp-guide-close">${t(e.guide.closing)}</p>
1811
1942
  </div></details>`:"";return`<div class="mp-it${l?" folded":""}">
1812
1943
  <button type="button" class="mp-it-head" aria-expanded="${l?"false":"true"}">
1813
1944
  <span class="mp-it-arrow" aria-hidden="true">▾</span>
1814
- <span class="mp-it-title">解析与详解</span>${C.map($=>`<span class="mp-it-tag">${a($)}</span>`).join("")}
1945
+ <span class="mp-it-title">解析与详解</span>${z.map($=>`<span class="mp-it-tag">${t($)}</span>`).join("")}
1815
1946
  <span class="mp-it-hint">${l?"点击展开":"点击收起"}</span>
1816
1947
  </button>
1817
1948
  <div class="mp-it-wrap">
1818
- ${D}
1819
- ${j}
1820
- ${_}
1821
- ${X}
1822
- ${e.lead?`<div class="mp-it-lead">${a(e.lead)}</div>`:""}
1823
- ${e.error?`<div class="mp-it-err"><b>⚠ 解析生成失败</b>${a(e.error)}——上方盘面数据本身可用</div>`:""}
1824
- ${oe}
1949
+ ${q}
1950
+ ${N}
1951
+ ${F}
1952
+ ${J}
1953
+ ${e.lead?`<div class="mp-it-lead">${t(e.lead)}</div>`:""}
1954
+ ${e.error?`<div class="mp-it-err"><b>⚠ 解析生成失败</b>${t(e.error)}——上方盘面数据本身可用</div>`:""}
1955
+ ${R}
1825
1956
  ${d}
1826
- ${m}
1827
- <div class="mp-it-body">${c}</div>
1828
- ${b}
1829
1957
  ${u}
1830
- ${H}
1831
- ${w}
1832
- ${z}
1833
- <div class="mp-it-dis">${a(e.disclaimer)}</div>
1958
+ <div class="mp-it-body">${c}</div>
1959
+ ${h}
1960
+ ${m}
1961
+ ${P}
1962
+ ${M}
1963
+ ${O}
1964
+ <div class="mp-it-dis">${t(e.disclaimer)}</div>
1834
1965
  </div>
1835
- </div>`},s.followupHTML=function(e){if(!e)return"";const i=e.evidence&&e.evidence.length?`<div class="mp-fu-ev">依据:${e.evidence.map(r=>a(r)).join(";")} 置信度:${a(e.confidence||"弱")}</div>`:"";return`<div class="mp-fu${e.ok?"":" miss"}">
1836
- <div class="mp-fu-h">追问 · ${a(e.question)}</div>
1837
- <div class="mp-fu-a">${a(e.answer)}</div>
1966
+ </div>`},n.followupHTML=function(e){if(!e)return"";const i=e.evidence&&e.evidence.length?`<div class="mp-fu-ev">依据:${e.evidence.map(r=>t(r)).join(";")} 置信度:${t(e.confidence||"弱")}</div>`:"";return`<div class="mp-fu${e.ok?"":" miss"}">
1967
+ <div class="mp-fu-h">追问 · ${t(e.question)}</div>
1968
+ <div class="mp-fu-a">${t(e.answer)}</div>
1838
1969
  ${i}
1839
- </div>`},s.resultWithInterpret=function(e,i,r){return(e||"")+s.interpretHTML(i,r)},s.caliberHTML=function(e){const i=e&&Array.isArray(e.switches)?e.switches.filter(u=>u&&u.key):[];if(!i.length)return"";const r=i.filter(u=>!u.error&&u.total>0),l=r.length?`${i.length} 组开关中 ${r.length} 组影响此盘:${r.map(u=>u.short||u.title).join("、")}。`:`本盘对 ${i.length} 组开关都不敏感:换成另一档也不变。`,o=u=>{if(u.error)return`<div class="mp-cdiff-same">未能对照:${a(u.error)}</div>`;if(!u.total)return'<div class="mp-cdiff-same">无变化 · 此盘不受这一开关影响</div>';const h=Array.isArray(u.roots)?u.roots:[];return h.length?`<div class="mp-cdiff-roots">${h.map(b=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${a(b.label)}</span><span class="mp-cdiff-from">${a(b.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${a(b.to)}</span></div>`).join("")}</div>`:`<div class="mp-cdiff-same">无单一根因;逐字段差异 ${Number(u.total)||0} 处</div>`},c=u=>{const h=(Array.isArray(u.views)?u.views:[]).filter(b=>b&&b.changed);return u.error||!u.total||!h.length?"":`<table class="mp-cview"><thead><tr><th scope="col">项</th><th scope="col">${a(u.currentLabel)}</th><th scope="col">${a(u.altLabel)}</th></tr></thead><tbody>`+h.map(b=>`<tr><th scope="row">${a(b.label)}</th><td>${a(b.current)}</td><td>${a(b.alt)}</td></tr>`).join("")+"</tbody></table>"},d=u=>{const h=Array.isArray(u.categories)?u.categories:[];if(u.error||!u.total||!h.length)return"";const b=h.slice(0,6);return`<div class="mp-cdiff-cats">${b.map(C=>`<span class="mp-cdiff-cat">${a(C.name)} ${Number(C.count)||0} 处</span>`).join("")}`+(h.length>b.length?`<span class="mp-cdiff-cat">另 ${h.length-b.length} 类</span>`:"")+"</div>"},m=i.map(u=>`<div class="mp-cdiff-row"><div class="mp-cdiff-h"><b>${a(u.title)}</b><span class="mp-cdiff-count${u.total>0?" on":""}">${u.error?"未能对照":u.total?`${Number(u.total)||0} 处`:"无变化"}</span></div><div class="mp-cdiff-ab"><span class="mp-cdiff-pill now">当前 · ${a(u.currentLabel)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-pill alt">换成 · ${a(u.altLabel)}</span></div>${o(u)}${c(u)}${d(u)}</div>`).join("");return`<details class="mp-cdiff" aria-label="口径对照">
1840
- <summary><span class="mp-cdiff-title">口径对照</span><span class="mp-cdiff-lead">${a(l)}</span><span class="mp-cdiff-more">展开逐字差异</span></summary>
1841
- <div class="mp-cdiff-body">${m}
1970
+ </div>`},n.resultWithInterpret=function(e,i,r){return(e||"")+n.interpretHTML(i,r)},n.caliberHTML=function(e){const i=e&&Array.isArray(e.switches)?e.switches.filter(m=>m&&m.key):[];if(!i.length)return"";const r=i.filter(m=>!m.error&&m.total>0),l=r.length?`${i.length} 组开关中 ${r.length} 组影响此盘:${r.map(m=>m.short||m.title).join("、")}。`:`本盘对 ${i.length} 组开关都不敏感:换成另一档也不变。`,o=m=>{if(m.error)return`<div class="mp-cdiff-same">未能对照:${t(m.error)}</div>`;if(!m.total)return'<div class="mp-cdiff-same">无变化 · 此盘不受这一开关影响</div>';const f=Array.isArray(m.roots)?m.roots:[];return f.length?`<div class="mp-cdiff-roots">${f.map(h=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(h.label)}</span><span class="mp-cdiff-from">${t(h.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(h.to)}</span></div>`).join("")}</div>`:`<div class="mp-cdiff-same">无单一根因;逐字段差异 ${Number(m.total)||0} 处</div>`},c=m=>{const f=(Array.isArray(m.views)?m.views:[]).filter(h=>h&&h.changed);return m.error||!m.total||!f.length?"":`<table class="mp-cview"><thead><tr><th scope="col">项</th><th scope="col">${t(m.currentLabel)}</th><th scope="col">${t(m.altLabel)}</th></tr></thead><tbody>`+f.map(h=>`<tr><th scope="row">${t(h.label)}</th><td>${t(h.current)}</td><td>${t(h.alt)}</td></tr>`).join("")+"</tbody></table>"},d=m=>{const f=Array.isArray(m.categories)?m.categories:[];if(m.error||!m.total||!f.length)return"";const h=f.slice(0,6);return`<div class="mp-cdiff-cats">${h.map(z=>`<span class="mp-cdiff-cat">${t(z.name)} ${Number(z.count)||0} 处</span>`).join("")}`+(f.length>h.length?`<span class="mp-cdiff-cat">另 ${f.length-h.length} 类</span>`:"")+"</div>"},u=i.map(m=>`<div class="mp-cdiff-row"><div class="mp-cdiff-h"><b>${t(m.title)}</b><span class="mp-cdiff-count${m.total>0?" on":""}">${m.error?"未能对照":m.total?`${Number(m.total)||0} 处`:"无变化"}</span></div><div class="mp-cdiff-ab"><span class="mp-cdiff-pill now">当前 · ${t(m.currentLabel)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-pill alt">换成 · ${t(m.altLabel)}</span></div>${o(m)}${c(m)}${d(m)}</div>`).join("");return`<details class="mp-cdiff" aria-label="口径对照">
1971
+ <summary><span class="mp-cdiff-title">口径对照</span><span class="mp-cdiff-lead">${t(l)}</span><span class="mp-cdiff-more">展开逐字差异</span></summary>
1972
+ <div class="mp-cdiff-body">${u}
1842
1973
  <div class="mp-cdiff-note">同一组输入、只换一个开关;只列变化字段与根因,不判哪套口径更准,也不改上方盘面。</div>
1843
1974
  </div>
1844
- </details>`},s.handleHTML=function(e){return typeof e!="string"||!e?"":`<section class="mp-handle" aria-label="排盘句柄">
1975
+ </details>`},n.handleHTML=function(e){return typeof e!="string"||!e?"":`<section class="mp-handle" aria-label="排盘句柄">
1845
1976
  <span class="mp-handle-title">排盘句柄</span>
1846
- <code class="mp-handle-code" title="${a(e)}">${a(e)}</code>
1847
- <button type="button" class="mp-handle-copy" data-handle-copy="${a(e)}" aria-label="复制排盘句柄">复制句柄</button>
1977
+ <code class="mp-handle-code" title="${t(e)}">${t(e)}</code>
1978
+ <button type="button" class="mp-handle-copy" data-handle-copy="${t(e)}" aria-label="复制排盘句柄">复制句柄</button>
1848
1979
  <span class="mp-handle-hint">追问同一张盘时把它连同增量参数(年份、方向、所问之事)一并交给助手,不必重报出生信息。句柄是编码不是加密,含出生时间与出生地,别公开贴出。</span>
1849
- </section>`},s.revisionHTML=function(e){if(!e||typeof e!="object")return"";const i=Array.isArray(e.applied)?e.applied:[],r=Array.isArray(e.ignored)?e.ignored:[];if(!i.length&&!r.length)return"";const l=i.map(o=>{const c=o.fromDisplay==null?"(未设)":o.fromDisplay;return`<li><span class="k">${a(o.label||o.key)}</span><span class="v"><span class="old">${a(c)}</span> → <span class="new">${a(o.display)}</span></span></li>`}).join("");return`<section class="mp-revise" aria-label="一句话改参">
1850
- <div class="mp-revise-head"><span class="mp-revise-title">一句话改参</span><span class="mp-revise-text">「${a(e.text||"")}」</span></div>
1980
+ </section>`},n.revisionHTML=function(e){if(!e||typeof e!="object")return"";const i=Array.isArray(e.applied)?e.applied:[],r=Array.isArray(e.ignored)?e.ignored:[];if(!i.length&&!r.length)return"";const l=i.map(o=>{const c=o.fromDisplay==null?"(未设)":o.fromDisplay;return`<li><span class="k">${t(o.label||o.key)}</span><span class="v"><span class="old">${t(c)}</span> → <span class="new">${t(o.display)}</span></span></li>`}).join("");return`<section class="mp-revise" aria-label="一句话改参">
1981
+ <div class="mp-revise-head"><span class="mp-revise-title">一句话改参</span><span class="mp-revise-text">「${t(e.text||"")}」</span></div>
1851
1982
  ${l?`<ul class="mp-revise-list">${l}</ul>`:'<p class="mp-revise-ignored">没有识别到可改的参数,仍按原参数排盘。</p>'}
1852
- ${r.length?`<p class="mp-revise-ignored">未处理:${a(r.join(";"))}</p>`:""}
1853
- </section>`},s.shadowHTML=function(e,i){if(!e||!e.id)return"";const r=[];e.version&&r.push(`版本 <b>${a(e.version)}</b>`),e.baseId&&r.push(`基础指纹 <b>${a(e.baseId)}</b>`),r.push("同参数同 ID");const l=[];e.reproducible===!1&&l.push(`不可复算:${a(e.reason||"参数不足")}`);const o=e.reproducible===!0&&e.asOfPinned===!1&&(e.system==="bazi"||e.system==="ziwei")?'<div class="mp-shadow-hint">未固定 asOf:流年 / 流月随「此刻」变化;要逐字比对请在输入里固定 asOf。</div>':"",c=i&&i.sameId!==!1&&(i.versionChanged||Number(i.total)>0);let d="";if(c){const m=Number(i.total)||0,u=a(i.fromVersion||"—"),h=a(i.toVersion||e.version||"—"),b=Array.isArray(i.roots)?i.roots:[],C=b.slice(0,8),S=C.length?`<div class="mp-cdiff-roots">${C.map(_=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${a(_.label)}</span><span class="mp-cdiff-from">${a(_.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${a(_.to)}</span></div>`).join("")}`+(b.length>C.length?`<div class="same">另 ${b.length-C.length} 处根因</div>`:"")+"</div>":`<div class="same">${m?"无单一根因;逐字段变化 "+m+" 处":"字段 0 处变化:同一张盘跨版本逐字一致"}</div>`,T=Array.isArray(i.categories)?i.categories:[],j=T.length?`<div class="mp-cdiff-cats">${T.slice(0,6).map(_=>`<span class="mp-cdiff-cat">${a(_.name)} ${Number(_.count)||0} 处</span>`).join("")}`+(T.length>6?`<span class="mp-cdiff-cat">另 ${T.length-6} 类</span>`:"")+"</div>":"";d=`<details class="mp-shadow-diff"${m>0?" open":""}>
1854
- <summary><b>与上次同盘比对</b><span class="tag">${u} → ${h} · ${m?`${m} 处变化`:"0 处变化"}</span></summary>
1855
- ${S}${j}
1983
+ ${r.length?`<p class="mp-revise-ignored">未处理:${t(r.join(";"))}</p>`:""}
1984
+ </section>`},n.shadowHTML=function(e,i){if(!e||!e.id)return"";const r=[];e.version&&r.push(`版本 <b>${t(e.version)}</b>`),e.baseId&&r.push(`基础指纹 <b>${t(e.baseId)}</b>`),r.push("同参数同 ID");const l=[];e.reproducible===!1&&l.push(`不可复算:${t(e.reason||"参数不足")}`);const o=e.reproducible===!0&&e.asOfPinned===!1&&(e.system==="bazi"||e.system==="ziwei")?'<div class="mp-shadow-hint">未固定 asOf:流年 / 流月随「此刻」变化;要逐字比对请在输入里固定 asOf。</div>':"",c=i&&i.sameId!==!1&&(i.versionChanged||Number(i.total)>0);let d="";if(c){const u=Number(i.total)||0,m=t(i.fromVersion||"—"),f=t(i.toVersion||e.version||"—"),h=Array.isArray(i.roots)?i.roots:[],z=h.slice(0,8),w=z.length?`<div class="mp-cdiff-roots">${z.map(F=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(F.label)}</span><span class="mp-cdiff-from">${t(F.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(F.to)}</span></div>`).join("")}`+(h.length>z.length?`<div class="same">另 ${h.length-z.length} 处根因</div>`:"")+"</div>":`<div class="same">${u?"无单一根因;逐字段变化 "+u+" 处":"字段 0 处变化:同一张盘跨版本逐字一致"}</div>`,L=Array.isArray(i.categories)?i.categories:[],N=L.length?`<div class="mp-cdiff-cats">${L.slice(0,6).map(F=>`<span class="mp-cdiff-cat">${t(F.name)} ${Number(F.count)||0} 处</span>`).join("")}`+(L.length>6?`<span class="mp-cdiff-cat">另 ${L.length-6} 类</span>`:"")+"</div>":"";d=`<details class="mp-shadow-diff"${u>0?" open":""}>
1985
+ <summary><b>与上次同盘比对</b><span class="tag">${m} → ${f} · ${u?`${u} 处变化`:"0 处变化"}</span></summary>
1986
+ ${w}${N}
1856
1987
  <div class="note">同一 baseId(同一组归一化参数)的两次结果;只比盘面字段,不含摘要、解析与古籍等文本层。</div>
1857
1988
  </details>`}return`<section class="mp-shadow" aria-label="影子盘">
1858
- <div class="mp-shadow-head"><span class="mp-shadow-title">影子盘</span><code class="mp-shadow-id">${a(e.id)}</code>
1859
- <button type="button" class="mp-shadow-copy" data-shadow-copy="${a(e.id)}" aria-label="复制影子盘 ID">复制 ID</button></div>
1989
+ <div class="mp-shadow-head"><span class="mp-shadow-title">影子盘</span><code class="mp-shadow-id">${t(e.id)}</code>
1990
+ <button type="button" class="mp-shadow-copy" data-shadow-copy="${t(e.id)}" aria-label="复制影子盘 ID">复制 ID</button></div>
1860
1991
  <div class="mp-shadow-meta">${r.join('<span aria-hidden="true">·</span>')}</div>
1861
- ${l.map(m=>`<div class="mp-shadow-warn">⚠ ${m}</div>`).join("")}
1992
+ ${l.map(u=>`<div class="mp-shadow-warn">⚠ ${u}</div>`).join("")}
1862
1993
  ${o}
1863
1994
  ${d}
1864
- </section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let r=null;try{r=i.shadowSnapshot(e)}catch{return null}if(!r||!r.shadow||!r.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const m=window.localStorage?window.localStorage.getItem(l):null,u=m?JSON.parse(m):{};u&&typeof u=="object"&&!Array.isArray(u)&&(o=u)}catch{o={}}const c=o[r.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,r)}catch{d=null}r.at=Date.now(),o[r.shadow.baseId]=r;try{const m=Object.keys(o);if(m.length>24){m.sort((u,h)=>(Number(o[u]&&o[u].at)||0)-(Number(o[h]&&o[h].at)||0));for(const u of m.slice(0,m.length-24))delete o[u]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const Mt="dsh-metaphysics/profiles-v1",We=24,Pt=16,Je=40,wa=60,Rt=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=Mt,s.PROF_MAX=We,s.PROF_KINDS=Rt;const Ce={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>Ce[e]||String(e||"");const Ie=e=>typeof e=="string";function Qe(e){if(!e||typeof e!="object"||Array.isArray(e)||!Ie(e.id)||!e.id||e.id.length>40||!Ie(e.kind)||Rt.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const r=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(r,l,0).getDate())return null;const c=Ie(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:Ie(e.label)?e.label.slice(0,Pt):"",date:e.date,time:e.hourUnknown===!0?"":c,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:Ie(e.address)?e.address.slice(0,Je):"",note:Ie(e.note)?e.note.slice(0,wa):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function It(){try{const e=window.localStorage?window.localStorage.getItem(Mt):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function et(e){return e.slice().sort((i,r)=>(r.pinned?1:0)-(i.pinned?1:0)||(r.lastUsedAt||r.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(r.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const r of It()){const l=Qe(r);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return et(e)},s.profilesSave=function(e){const i=et(Array.isArray(e)?e.slice(0,We):[]);try{return window.localStorage?(window.localStorage.setItem(Mt,JSON.stringify(i)),!0):!1}catch{return!1}};let rt=0;s.profilesNewId=function(){const e=Object.create(null);for(const r of s.profilesLoad())e[r.id]=1;let i;do i=`p${Date.now().toString(36)}${(rt++).toString(36)}`;while(e[i]);return i},s.profilesPut=function(e){const i=Qe(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const r=s.profilesLoad(),l=r.findIndex(o=>o.id===i.id);if(l>=0){const o=r[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,r.splice(l,1,i)}else r.push(i);if(r.length>We){const o=r.slice().sort((m,u)=>(m.lastUsedAt||m.createdAt)-(u.lastUsedAt||u.createdAt)),c=o.find(m=>m.id!==i.id)||o[0],d=r.indexOf(c);d>=0&&r.splice(d,1)}return s.profilesSave(r)?{ok:!0,list:et(r),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(r=>r.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(r=>r.id===e?Object.assign({},r,{pinned:!r.pinned}):r);return s.profilesSave(i)?et(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const r=s.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?s.profilesSave(r)?et(r):s.profilesLoad():r};const ta=864e5;function pt(e){const i=Number(e)||0;if(!i)return"未排过";const r=Math.floor((Date.now()-i)/ta);if(r<=0)return"今天排过";if(r===1)return"昨天排过";if(r<30)return`${r} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}s.profilesAgo=pt;const aa={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const r=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=Qe(c);if(!d)return"";const m=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),u=r.editingId&&d.id===r.editingId,h=r.armedDel&&d.id===r.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${u?" editing":""}" data-id="${a(d.id)}">
1865
- <button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${a(d.id)}"
1866
- title="${a(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
1867
- <span class="mp-prof-nm">${a(d.label||"未命名")}${d.gender?`<i class="sx">${aa[d.gender]||""}</i>`:""}</span>
1868
- <span class="mp-prof-sys">${a(s.profKindLabel?s.profKindLabel(d.kind):d.kind)}</span>
1869
- <span class="mp-prof-bd">${a(m)}</span>
1870
- <span class="mp-prof-at">${a(pt(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
1995
+ </section>`},n.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let r=null;try{r=i.shadowSnapshot(e)}catch{return null}if(!r||!r.shadow||!r.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(o=m)}catch{o={}}const c=o[r.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,r)}catch{d=null}r.at=Date.now(),o[r.shadow.baseId]=r;try{const u=Object.keys(o);if(u.length>24){u.sort((m,f)=>(Number(o[m]&&o[m].at)||0)-(Number(o[f]&&o[f].at)||0));for(const m of u.slice(0,u.length-24))delete o[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const Ca="dsh-metaphysics/profiles-v1",Ne=24,Aa=16,Ra=40,Ia=60,Ba=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];n.PROF_KEY=Ca,n.PROF_MAX=Ne,n.PROF_KINDS=Ba;const ca={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};n.profKindLabel=e=>ca[e]||String(e||"");const Ge=e=>typeof e=="string";function Ze(e){if(!e||typeof e!="object"||Array.isArray(e)||!Ge(e.id)||!e.id||e.id.length>40||!Ge(e.kind)||Ba.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const r=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(r,l,0).getDate())return null;const c=Ge(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:Ge(e.label)?e.label.slice(0,Aa):"",date:e.date,time:e.hourUnknown===!0?"":c,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:Ge(e.address)?e.address.slice(0,Ra):"",note:Ge(e.note)?e.note.slice(0,Ia):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function st(){try{const e=window.localStorage?window.localStorage.getItem(Ca):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function Le(e){return e.slice().sort((i,r)=>(r.pinned?1:0)-(i.pinned?1:0)||(r.lastUsedAt||r.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(r.createdAt||0)-(i.createdAt||0))}n.profilesLoad=function(){const e=[],i=Object.create(null);for(const r of st()){const l=Ze(r);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return Le(e)},n.profilesSave=function(e){const i=Le(Array.isArray(e)?e.slice(0,Ne):[]);try{return window.localStorage?(window.localStorage.setItem(Ca,JSON.stringify(i)),!0):!1}catch{return!1}};let Ga=0;n.profilesNewId=function(){const e=Object.create(null);for(const r of n.profilesLoad())e[r.id]=1;let i;do i=`p${Date.now().toString(36)}${(Ga++).toString(36)}`;while(e[i]);return i},n.profilesPut=function(e){const i=Ze(Object.assign({id:n.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:n.profilesLoad()};const r=n.profilesLoad(),l=r.findIndex(o=>o.id===i.id);if(l>=0){const o=r[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,r.splice(l,1,i)}else r.push(i);if(r.length>Ne){const o=r.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=o.find(u=>u.id!==i.id)||o[0],d=r.indexOf(c);d>=0&&r.splice(d,1)}return n.profilesSave(r)?{ok:!0,list:Le(r),item:i}:{ok:!1,list:n.profilesLoad()}},n.profilesRemove=function(e){const i=n.profilesLoad().filter(r=>r.id!==e);return n.profilesSave(i)?i:n.profilesLoad()},n.profilesPin=function(e){const i=n.profilesLoad().map(r=>r.id===e?Object.assign({},r,{pinned:!r.pinned}):r);return n.profilesSave(i)?Le(i):n.profilesLoad()},n.profilesTouch=function(e){let i=!1;const r=n.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?n.profilesSave(r)?Le(r):n.profilesLoad():r};const Ta=864e5;function Za(e){const i=Number(e)||0;if(!i)return"未排过";const r=Math.floor((Date.now()-i)/Ta);if(r<=0)return"今天排过";if(r===1)return"昨天排过";if(r<30)return`${r} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}n.profilesAgo=Za;const La={male:"♂",female:"♀"};n.profilesHTML=function(e,i){const r=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=Ze(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=r.editingId&&d.id===r.editingId,f=r.armedDel&&d.id===r.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
1996
+ <button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${t(d.id)}"
1997
+ title="${t(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
1998
+ <span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${La[d.gender]||""}</i>`:""}</span>
1999
+ <span class="mp-prof-sys">${t(n.profKindLabel?n.profKindLabel(d.kind):d.kind)}</span>
2000
+ <span class="mp-prof-bd">${t(u)}</span>
2001
+ <span class="mp-prof-at">${t(Za(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
1871
2002
  </button>
1872
2003
  <span class="mp-prof-ops">
1873
- <button type="button" data-mp-prof="pin" data-id="${a(d.id)}" class="${d.pinned?"on":""}"
2004
+ <button type="button" data-mp-prof="pin" data-id="${t(d.id)}" class="${d.pinned?"on":""}"
1874
2005
  aria-pressed="${d.pinned?"true":"false"}" title="置顶这张档案">${d.pinned?"已置顶":"置顶"}</button>
1875
- <button type="button" data-mp-prof="edit" data-id="${a(d.id)}" title="把这张档案读回输入框,改完再存">改名</button>
1876
- <button type="button" data-mp-prof="del" data-id="${a(d.id)}" class="${h?"on":""}"
1877
- title="${h?"再点一次就从本机删除这张档案":"从本机删除这张档案(点两次确认)"}">${h?"确认删除":"删除"}</button>
2006
+ <button type="button" data-mp-prof="edit" data-id="${t(d.id)}" title="把这张档案读回输入框,改完再存">改名</button>
2007
+ <button type="button" data-mp-prof="del" data-id="${t(d.id)}" class="${f?"on":""}"
2008
+ title="${f?"再点一次就从本机删除这张档案":"从本机删除这张档案(点两次确认)"}">${f?"确认删除":"删除"}</button>
1878
2009
  </span>
1879
2010
  </div>`}).join(""),o=l?`<div class="mp-prof-list">${l}</div>`:'<p class="mp-prof-empty">还没有存过命盘。填好出生信息,给这张盘起个称呼,点「存为我的命盘」——下次进来一点就出盘,不必重报。</p>';return`<section class="mp-prof" aria-label="我的命盘">
1880
- <div class="mp-prof-h"><b>我的命盘</b><span class="mp-prof-sub">只存本机 · 不上传${e&&e.length?` · ${e.length}/${We}`:""}</span></div>
2011
+ <div class="mp-prof-h"><b>我的命盘</b><span class="mp-prof-sub">只存本机 · 不上传${e&&e.length?` · ${e.length}/${Ne}`:""}</span></div>
1881
2012
  ${o}
1882
2013
  ${r.bar||""}
1883
- </section>`},s.profilesBarHTML=function(e){const i=e||{};return`<div class="mp-prof-bar">
1884
- <input class="mp-prof-name" type="text" maxlength="${Pt}" placeholder="称呼,如「我」「妈妈」" aria-label="档案称呼" value="${a(i.name||"")}">
1885
- <button type="button" data-mp-prof="put"${i.canAdd===!1?" disabled":""}>${a(i.editingId?"更新这张档案":"存为我的命盘")}</button>
2014
+ </section>`},n.profilesBarHTML=function(e){const i=e||{};return`<div class="mp-prof-bar">
2015
+ <input class="mp-prof-name" type="text" maxlength="${Aa}" placeholder="称呼,如「我」「妈妈」" aria-label="档案称呼" value="${t(i.name||"")}">
2016
+ <button type="button" data-mp-prof="put"${i.canAdd===!1?" disabled":""}>${t(i.editingId?"更新这张档案":"存为我的命盘")}</button>
1886
2017
  ${i.editingId?'<button type="button" class="ghost" data-mp-prof="cancel">取消改名</button>':""}
1887
- <span class="mp-prof-tip">${a(i.tip||(i.editingId?"改完出生信息或称呼,点「更新这张档案」覆盖原档。":"存的是出生时间与出生地这些输入,不是结果。"))}</span>
1888
- </div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const r=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:r,id:i.getAttribute("data-id")||"",name:i}};const tt=["bazi","trend"],Gt=["bazi","ziwei","liuyao","meihua","daliuren","qimen","hepan","chenggu","trend","fengshui","name","xiaoliuren"];s.profUsable=function(e){return!e||typeof e!="object"?!1:e.hourUnknown===!0||e.time?!0:Gt.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,r){const l=e||{},o=l.hourUnknown===!0&&tt.indexOf(String(l.kind||""))>=0;return!o&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:Qe(Object.assign({id:r||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Pt)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:o,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,r){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",o=e.map(u=>u&&u.field).filter(Boolean).join(" → "),c=typeof r=="string"?r:"",d=(u,h)=>{const b=String(u??"");return b.length>h?`${b.slice(0,h)}…`:b},m=e.map((u,h)=>{const b=Array.isArray(u.inputs)?u.inputs:[];return`<details class="mp-trace-step"${h===0?" open":""}>
1889
- <summary><span class="mp-trace-no">${h+1}</span><span class="mp-trace-field">${a(u.field)}</span><span class="mp-trace-res">${a(d(u.result,44))}</span></summary>
2018
+ <span class="mp-prof-tip">${t(i.tip||(i.editingId?"改完出生信息或称呼,点「更新这张档案」覆盖原档。":"存的是出生时间与出生地这些输入,不是结果。"))}</span>
2019
+ </div>`},n.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const r=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:r,id:i.getAttribute("data-id")||"",name:i}};const ot=["bazi","trend"],aa=["bazi","ziwei","liuyao","meihua","daliuren","qimen","hepan","chenggu","trend","fengshui","name","xiaoliuren"];n.profUsable=function(e){return!e||typeof e!="object"?!1:e.hourUnknown===!0||e.time?!0:aa.indexOf(String(e.kind||""))<0},n.profFromForm=function(e,i,r){const l=e||{},o=l.hourUnknown===!0&&ot.indexOf(String(l.kind||""))>=0;return!o&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:Ze(Object.assign({id:r||n.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Aa)||(n.profKindLabel?n.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:o,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},n.traceHTML=function(e,i,r){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",o=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof r=="string"?r:"",d=(m,f)=>{const h=String(m??"");return h.length>f?`${h.slice(0,f)}…`:h},u=e.map((m,f)=>{const h=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${f===0?" open":""}>
2020
+ <summary><span class="mp-trace-no">${f+1}</span><span class="mp-trace-field">${t(m.field)}</span><span class="mp-trace-res">${t(d(m.result,44))}</span></summary>
1890
2021
  <div class="mp-trace-detail">
1891
- <div class="mp-trace-rule"><b>规则</b>${a(u.rule)}</div>
1892
- ${b.length?`<dl class="mp-trace-inputs">${b.map(C=>`<dt>${a(C.label)}</dt><dd>${a(C.value)}</dd>`).join("")}</dl>`:""}
1893
- <div class="mp-trace-result"><b>结果</b>${a(u.result)}</div>
1894
- ${u.source?`<div class="mp-trace-src"><b>出处</b>${a(u.source)}</div>`:""}
2022
+ <div class="mp-trace-rule"><b>规则</b>${t(m.rule)}</div>
2023
+ ${h.length?`<dl class="mp-trace-inputs">${h.map(z=>`<dt>${t(z.label)}</dt><dd>${t(z.value)}</dd>`).join("")}</dl>`:""}
2024
+ <div class="mp-trace-result"><b>结果</b>${t(m.result)}</div>
2025
+ ${m.source?`<div class="mp-trace-src"><b>出处</b>${t(m.source)}</div>`:""}
1895
2026
  </div>
1896
2027
  </details>`}).join("");return`<button type="button" class="mp-trace-card" data-trace-open aria-haspopup="dialog" aria-controls="mp-trace-layer">
1897
- <span class="mp-trace-title">推导链</span><span class="mp-trace-flow">${a(o)}</span><span class="mp-trace-count">${e.length} 层 · 查看</span>
2028
+ <span class="mp-trace-title">推导链</span><span class="mp-trace-flow">${t(o)}</span><span class="mp-trace-count">${e.length} 层 · 查看</span>
1898
2029
  </button>
1899
2030
  <div class="mp-trace-layer" id="mp-trace-layer" data-trace-layer aria-hidden="true">
1900
2031
  <div class="mp-trace-back" data-trace-close></div>
1901
2032
  <aside class="mp-trace-drawer" role="dialog" aria-modal="true" aria-labelledby="mp-trace-title">
1902
2033
  <div class="mp-trace-head">
1903
- <div><b id="mp-trace-title">推导链 · ${a(l)}</b><span>${e.length} 层 · 每层给出规则、输入、结果与出处;只读,不重算</span></div>
2034
+ <div><b id="mp-trace-title">推导链 · ${t(l)}</b><span>${e.length} 层 · 每层给出规则、输入、结果与出处;只读,不重算</span></div>
1904
2035
  ${c?'<button type="button" class="mp-trace-copy" data-trace-copy aria-label="复制整条推导链的 Markdown">复制 Markdown</button>':""}
1905
2036
  <button type="button" class="mp-trace-close" data-trace-close aria-label="关闭推导链">✕</button>
1906
2037
  </div>
1907
- <div class="mp-trace-body">${m}</div>
1908
- ${c?`<textarea class="mp-trace-md" data-trace-md readonly hidden>${a(c)}</textarea>`:""}
2038
+ <div class="mp-trace-body">${u}</div>
2039
+ ${c?`<textarea class="mp-trace-md" data-trace-md readonly hidden>${t(c)}</textarea>`:""}
1909
2040
  </aside>
1910
- </div>`},s.almanacHTML=function(e){if(!e||!e.meta)return s.quickHTML(e);const i=e.ganzhi||{},r=e.dayGod||null,l=(T,j)=>(T||[]).map(_=>`<span class="mp-al-chip${j?` ${j}`:""}">${a(_)}</span>`).join(""),o=(T,j)=>j?`<div class="mp-al-cell"><em>${a(T)}</em><b>${a(j)}</b></div>`:"",c=e.xiu?`${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",d=e.nayin&&e.nayin.day?e.nayin.day.name:"",m=e.chong?`${e.chong.text}${e.chong.sha?` ${e.chong.sha}`:""}`:"",u=(e.hours||[]).map(T=>`<span class="mp-al-hour ${T.luck==="吉"?"good":"bad"}"><i>${a(T.zhi)}</i><em>${a((T.ganZhi||"").slice(0,1))}</em><b>${a(T.shen||"")}</b><u>${a(T.luck||"")}</u></span>`).join(""),h=e.positions||{},b=(T,j)=>j?`<span class="mp-al-chip">${a(T)}·${a(typeof j=="string"?j:j.dir||"")}</span>`:"",C=e.lucky||{},S=r?`<span class="mp-al-badge ${r.luck==="吉"?"good":"bad"}">${a(r.name)}·${a(r.type)}·${a(r.luck)}</span>`:"";return`<section class="mp-al" aria-label="黄历">
1911
- <div class="mp-al-h"><b>${a(e.meta.date||"")}</b><i>${a(e.meta.weekday||"")} ${a((e.lunar||{}).text||"")}</i></div>
1912
- <div class="mp-al-gz">${a(i.year||"")}年 ${a(i.month||"")}月 ${a(i.day||"")}日 属${a(i.shengXiao||"")} 建除 ${a(e.zhiXing||"")}日 ${S}</div>
2041
+ </div>`},n.almanacHTML=function(e){if(!e||!e.meta)return n.quickHTML(e);const i=e.ganzhi||{},r=e.dayGod||null,l=(L,N)=>(L||[]).map(F=>`<span class="mp-al-chip${N?` ${N}`:""}">${t(F)}</span>`).join(""),o=(L,N)=>N?`<div class="mp-al-cell"><em>${t(L)}</em><b>${t(N)}</b></div>`:"",c=e.xiu?`${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",d=e.nayin&&e.nayin.day?e.nayin.day.name:"",u=e.chong?`${e.chong.text}${e.chong.sha?` ${e.chong.sha}`:""}`:"",m=(e.hours||[]).map(L=>`<span class="mp-al-hour ${L.luck==="吉"?"good":"bad"}"><i>${t(L.zhi)}</i><em>${t((L.ganZhi||"").slice(0,1))}</em><b>${t(L.shen||"")}</b><u>${t(L.luck||"")}</u></span>`).join(""),f=e.positions||{},h=(L,N)=>N?`<span class="mp-al-chip">${t(L)}·${t(typeof N=="string"?N:N.dir||"")}</span>`:"",z=e.lucky||{},w=r?`<span class="mp-al-badge ${r.luck==="吉"?"good":"bad"}">${t(r.name)}·${t(r.type)}·${t(r.luck)}</span>`:"";return`<section class="mp-al" aria-label="黄历">
2042
+ <div class="mp-al-h"><b>${t(e.meta.date||"")}</b><i>${t(e.meta.weekday||"")} ${t((e.lunar||{}).text||"")}</i></div>
2043
+ <div class="mp-al-gz">${t(i.year||"")}年 ${t(i.month||"")}月 ${t(i.day||"")}日 属${t(i.shengXiao||"")} 建除 ${t(e.zhiXing||"")}日 ${w}</div>
1913
2044
  <div class="mp-al-yiji">
1914
2045
  <div class="mp-al-col"><em>宜</em><div class="mp-al-chips">${l(e.yi)}</div></div>
1915
2046
  <div class="mp-al-col"><em>忌</em><div class="mp-al-chips">${l(e.ji)}</div></div>
1916
2047
  </div>
1917
- <div class="mp-al-grid">${o("二十八宿",c)}${o("日柱纳音",d)}${o("胎神",e.taiShen)}${o("冲煞",m)}</div>
1918
- <div class="mp-al-row"><em>吉神方位</em><div class="mp-al-chips">${b("喜神",h.xiShen)}${b("财神",h.caiShen)}${b("福神",h.fuShen)}${b("阳贵",h.yangGui)}${b("阴贵",h.yinGui)}</div></div>
1919
- <div class="mp-al-row"><em>时刻吉凶</em><div class="mp-al-hours">${u}</div></div>
1920
- <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${C.liuhe?`<span class="mp-al-chip">六合·${a(C.liuhe)}</span>`:""}${l(C.sanhe||[])}</div></div>
1921
- ${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${a(e.dailyHexagram.name)}</b> ${a(e.dailyHexagram.meaning||"")}</div>`:""}
1922
- <div class="mp-al-note">${a(e.meta&&e.meta.scope||"")}</div>
1923
- </section>`},s.mbtiHTML=function(e){if(!e)return"";if(e.needAnswers&&Array.isArray(e.questions)){const o=e.questions.map(c=>`<li>${a(c.text)}</li>`).join("");return`<section class="mp-mb-paper" aria-label="十六型人格问卷">
2048
+ <div class="mp-al-grid">${o("二十八宿",c)}${o("日柱纳音",d)}${o("胎神",e.taiShen)}${o("冲煞",u)}</div>
2049
+ <div class="mp-al-row"><em>吉神方位</em><div class="mp-al-chips">${h("喜神",f.xiShen)}${h("财神",f.caiShen)}${h("福神",f.fuShen)}${h("阳贵",f.yangGui)}${h("阴贵",f.yinGui)}</div></div>
2050
+ <div class="mp-al-row"><em>时刻吉凶</em><div class="mp-al-hours">${m}</div></div>
2051
+ <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${z.liuhe?`<span class="mp-al-chip">六合·${t(z.liuhe)}</span>`:""}${l(z.sanhe||[])}</div></div>
2052
+ ${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${t(e.dailyHexagram.name)}</b> ${t(e.dailyHexagram.meaning||"")}</div>`:""}
2053
+ <div class="mp-al-note">${t(e.meta&&e.meta.scope||"")}</div>
2054
+ </section>`},n.mbtiHTML=function(e){if(!e)return"";if(e.needAnswers&&Array.isArray(e.questions)){const o=e.questions.map(c=>`<li>${t(c.text)}</li>`).join("");return`<section class="mp-mb-paper" aria-label="十六型人格问卷">
1924
2055
  <div class="mp-mb-h">
1925
2056
  <span class="mp-mb-meta"><b>十六型人格问卷</b><i>${e.total} 题 · 每题 1 完全不像 / 5 很像我</i></span>
1926
2057
  <span class="mp-mb-count">填完分数再看结果</span>
1927
2058
  </div>
1928
2059
  <ol>${o}</ol>
1929
- <div class="mp-mb-note">${a(e.note||"")}</div>
1930
- </section>`}const i=(e.dims||[]).map(o=>{const c=Math.round((o.pct||0)*100),d=o.picked===o.left,m=Math.max(2,c),u=d?o.leftSay:o.rightSay;return`<div class="mp-mb-dim">
1931
- <div class="mp-mb-dh"><b class="${d?"on":""}">${a(o.left)}</b><em>${a(o.name)}</em><b class="${d?"":"on"}">${a(o.right)}</b></div>
1932
- <div class="mp-mb-bar ${d?"l":"r"}"><em style="width:${m}%"></em></div>
1933
- <div class="mp-mb-df">取 ${a(o.picked)} · ${a(o.strength)} ${c}%</div>
1934
- <div class="mp-mb-ds">${a(u)}</div>
1935
- </div>`}).join(""),r=e.profile||{},l=(r.stack||[]).map((o,c)=>`<span class="${c===0?"lead":""}"><b>${a(o.code)}</b>${a(o.say)}</span>`).join("");return`<section class="mp-mb" aria-label="十六型人格结果">
2060
+ <div class="mp-mb-note">${t(e.note||"")}</div>
2061
+ </section>`}const i=(e.dims||[]).map(o=>{const c=Math.round((o.pct||0)*100),d=o.picked===o.left,u=Math.max(2,c),m=d?o.leftSay:o.rightSay;return`<div class="mp-mb-dim">
2062
+ <div class="mp-mb-dh"><b class="${d?"on":""}">${t(o.left)}</b><em>${t(o.name)}</em><b class="${d?"":"on"}">${t(o.right)}</b></div>
2063
+ <div class="mp-mb-bar ${d?"l":"r"}"><em style="width:${u}%"></em></div>
2064
+ <div class="mp-mb-df">取 ${t(o.picked)} · ${t(o.strength)} ${c}%</div>
2065
+ <div class="mp-mb-ds">${t(m)}</div>
2066
+ </div>`}).join(""),r=e.profile||{},l=(r.stack||[]).map((o,c)=>`<span class="${c===0?"lead":""}"><b>${t(o.code)}</b>${t(o.say)}</span>`).join("");return`<section class="mp-mb" aria-label="十六型人格结果">
1936
2067
  <div class="mp-mb-h">
1937
- <span class="mp-mb-code">${a(e.type||"")}</span>
1938
- <span class="mp-mb-meta"><b>${a(r.title||"")}</b><i>${a(r.keywords||"")}</i></span>
2068
+ <span class="mp-mb-code">${t(e.type||"")}</span>
2069
+ <span class="mp-mb-meta"><b>${t(r.title||"")}</b><i>${t(r.keywords||"")}</i></span>
1939
2070
  <span class="mp-mb-count">已答 ${e.answered||0}/${e.total||0} 题</span>
1940
2071
  </div>
1941
2072
  <div class="mp-mb-body">
1942
2073
  <div class="mp-mb-dims">${i}</div>
1943
- <div class="mp-mb-sec"><em>一句</em>${a(r.oneLine||"")}</div>
2074
+ <div class="mp-mb-sec"><em>一句</em>${t(r.oneLine||"")}</div>
1944
2075
  <div class="mp-mb-two">
1945
- <div><b>优势</b>${(r.strengths||[]).map(o=>a(o)).join(";")}</div>
1946
- <div><b>留意</b>${(r.blindspots||[]).map(o=>a(o)).join(";")}</div>
2076
+ <div><b>优势</b>${(r.strengths||[]).map(o=>t(o)).join(";")}</div>
2077
+ <div><b>留意</b>${(r.blindspots||[]).map(o=>t(o)).join(";")}</div>
1947
2078
  </div>
1948
- ${l?`<div class="mp-mb-sec"><em>认知功能</em>主导 ${a((r.stack[0]||{}).code||"")} → 依次展开</div><div class="mp-mb-fn">${l}</div>`:""}
1949
- <div class="mp-mb-sec"><em>工作</em>${a(r.work||"")}</div>
1950
- <div class="mp-mb-sec"><em>关系</em>${a(r.love||"")}</div>
1951
- <div class="mp-mb-sec"><em>学习</em>${a(r.study||"")}</div>
1952
- <div class="mp-mb-sec"><em>课题</em>${a(r.growth||"")}</div>
2079
+ ${l?`<div class="mp-mb-sec"><em>认知功能</em>主导 ${t((r.stack[0]||{}).code||"")} → 依次展开</div><div class="mp-mb-fn">${l}</div>`:""}
2080
+ <div class="mp-mb-sec"><em>工作</em>${t(r.work||"")}</div>
2081
+ <div class="mp-mb-sec"><em>关系</em>${t(r.love||"")}</div>
2082
+ <div class="mp-mb-sec"><em>学习</em>${t(r.study||"")}</div>
2083
+ <div class="mp-mb-sec"><em>课题</em>${t(r.growth||"")}</div>
1953
2084
  </div>
1954
- <div class="mp-mb-note">${a(e.note||"")}</div>
1955
- </section>`};const lt=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],ia={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},At=["生气","延年","天医","伏位"],Ne=(e,i)=>`<span class="mp-fs-chip${i?" "+i:""}">${a(e)}</span>`,Te=(e,i,r)=>`<div class="mp-fs-cell${e==="中"?" center":""}"><div class="mp-fs-top"><span class="mp-fs-gua">${a(e)}</span><span class="mp-fs-dir">${a(ia[e]||"")}</span>${i||""}</div>`+(r||"")+"</div>",Ct=e=>e.length?`<dl class="mp-fs-facts">${e.map(([i,r])=>`<div class="mp-fs-row"><dt>${a(i)}</dt><dd>${a(r)}</dd></div>`).join("")}</dl>`:"",Ge=(e,i,r,l,o,c)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${a(e)}</b>${i?`<span class="mp-fs-sub">${a(i)}</span>`:""}</div>`+(r.length?`<div class="mp-fs-chips">${r.join("")}</div>`:"")+l+o+c.filter(Boolean).map(d=>`<div class="mp-fs-note">${a(d)}</div>`).join("")+"</section>",Bt=(e,i)=>`<div class="mp-fs-grid" role="group" aria-label="${a(i)}">`+lt.map(r=>r.map(l=>{const o=e.find(m=>m&&m.palace===l);if(!o)return Te(l,"","");const c=At.includes(o.star),d=`<span class="mp-fs-star"${o.role?` title="${a(o.role)}"`:""}>${a(o.star)}<em class="${c?"ok":"bad"}">${c?"吉":"凶"}</em></span>`;return Te(l,d,"")}).join("")).join("")+"</div>";function Be(e,i){const r=i.period,l={};for(const S of e.palaces||[])l[S.palace]=S;const o=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${a(r)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+lt.map(S=>S.map(T=>{const j=l[T];if(!j)return Te(T,"","");const _=[["运",j.yun],["山",j.shan],["向",j.xiang]].map(([X,H])=>`<span class="${H===r?"on":""}" title="${a(X)}星 ${a(H)}">${a(H)}</span>`).join("");return Te(T,"",`<div class="mp-fs-nums">${_}</div>`)}).join("")).join("")+"</div>",c=e.wangShanWangXiang||{},d=i.jianXiang||{},m=e.timeFlying||null,u=[Ne(d.active?`兼${d.jian} ${d.offset}° · 替卦`:"正向 · 下卦",d.active?"ok":""),Ne(`山盘 ${i.shanCenter.star}${i.shanCenter.name} · ${i.shanCenter.fly}`),Ne(`向盘 ${i.xiangCenter.star}${i.xiangCenter.name} · ${i.xiangCenter.fly}`),Ne(c.byChart?"盘面:到山到向":"盘面:未到山到向",c.byChart?"ok":""),Ne(c.byTable===null?"表法:替卦不套":c.byTable?"表法:在列":"表法:未列",c.byTable?"ok":"")],h=(S,T)=>`${T} ${S.star}${S.name}(${S.fly},${S.basis}${S.mode==="替卦"?`;原运星 ${S.original}${S.replaced?",已替":",用替而未替"}`:""})`,b=m?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([S])=>m[S]).map(([S,T])=>`${T}${m[S].centerName}(${m[S].fly})`).join(" "):"",C=Ct([...d.active?[["替卦",`${d.note}${c.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${h(i.shanCenter,"山盘")};${h(i.xiangCenter,"向盘")}`],["当运",`山星${r}落 ${e.dangYun.shan.text};向星${r}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${c.note||""}${(c.table||[]).length?` 本运所列:${c.table.join("、")}。`:" 本运表法无局。"}`],...b?[["年月日时",`${b}${m.meta&&m.meta.note?` ${m.meta.note}`:""}`]]:[]]);return Ge(d.active?"玄空替卦":"玄空下卦",`${i.periodLabel} · 坐${i.sitting} · 向${i.facing}`,u,o,C,[i.note,e.disclaimer])}function Zt(e,i){const r=e.mingGua||{},l=Bt([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),o=[Ne(r.compatible||"—"),Ne(`${i.gender}命 · ${i.guaYear} 年立春界`)],c=[];if(e.yearlyFlying){const d=e.yearlyFlying;c.push(["年紫白",`${d.centerName}入中;${d.palaces.filter(m=>m.palace!=="中").map(m=>`${m.palace}${m.name}`).join("、")}`])}return Ge("八宅命卦",`${r.num}${r.gua}(${r.group})· ${r.direction}`,o,l,Ct(c),[i.note,e.disclaimer])}function dt(e,i){const r=e.layout||{},l=Bt(e.houseStars||[],"宅卦八向(吉凶)"),o=[Ne(`${i.houseGua}宅 · ${i.houseGroup}`),Ne(`坐${i.sitting}`),Ne(`向${i.facing}`)],c=[["门",r.door],["灶",r.stove],["床",r.bed],["厕",r.toilet]];return e.mingMatch&&c.push(["命宅配",e.mingMatch.text]),Ge("门主灶",`${i.houseGua}宅 · 坐${i.sitting} · 向${i.facing}`,o,l,Ct(c),[i.birthNote,e.disclaimer])}s.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return s.quickHTML(e);const i=e.meta||{};return i.action==="xuankong"?Be(e,i):i.action==="advise"?dt(e,i):Zt(e,i)},s.perfHTML=function(e){if(!e)return"";const i=m=>typeof m=="number"&&isFinite(m)?`${Math.max(0,Math.round(m))}ms`:"",r=e.cached===!0?"(已缓存)":e.cached===!1?"(首次加载)":"",l=[];i(e.engineMs)&&l.push(`引擎 ${i(e.engineMs)}${r}`),i(e.computeMs)&&l.push(`排盘 ${i(e.computeMs)}`),i(e.renderMs)&&l.push(`渲染 ${i(e.renderMs)}`);const o=i(e.totalMs);if(!l.length&&!o)return"";const c=o?`首屏 ${o}`:"耗时";return`<div class="mp-perf" title="本机这一次的实测耗时,不含网络与服务端;换机器、首次加载与已缓存会不同">${l.length?`${c}|${l.join(" · ")}`:c}</div>`},s.zeriHTML=function(e){if(!e||!e.compare||e.compare.mode!=="candidates"||!Array.isArray(e.days))return s.quickHTML(e);const i=e.meta||{},r=e.shenshaRef||{},l=e.compare.best?e.compare.best.date:"",o=e.days.map(m=>{const u=m.date===l,h=m.excluded||m.verdict==="回避"?"bad":m.verdict==="推荐"?"good":"",b=m.grade||{},C=b.label?`<b>${a(b.label)}</b><em>吉${a(b.ji)} / 凶${a(b.xiong)} ${a(b.decision||"")}</em>`:"—";return`<tr class="mp-zr-row${u?" top":""}${m.excluded?" off":""}">
1956
- <th scope="row"><b>${a(m.date)}</b>${u?'<i class="mp-zr-best">最优</i>':""}
1957
- <em>${a(m.weekday)} ${a(m.lunar)}</em></th>
1958
- <td><b>${a(m.dayGanZhi)}</b><em>${a(m.zhiXing)}日</em></td>
1959
- <td class="mp-zr-score">${a(m.score)}</td>
1960
- <td class="mp-zr-grade">${C}</td>
1961
- <td><span class="mp-zr-v ${h}">${a(m.verdict)}</span></td>
1962
- <td class="mp-zr-why">${a(m.reasons.join(";")||"无特别加减分")}</td>
1963
- </tr>`}).join(""),c=(m,u)=>`<span><em>${a(m)}</em>${u.length?a(u.join("、")):"无"}</span>`,d=e.compare.best?`这一组最优:<b>${a(e.compare.best.date)}</b>(${a(e.compare.best.score)} 分 · ${a(e.compare.best.verdict)})`+(e.compare.best.ties.length>1?`;同分 ${a(e.compare.best.ties.filter(m=>m!==e.compare.best.date).join("、"))}`:""):"这一组都因冲属相被排除,没有可用的日子";return`<section class="mp-zr" aria-label="择日候选比较">
1964
- <div class="mp-zr-h"><b>择日 · ${a(i.task||"")}</b>
1965
- <span>候选 ${a(i.days)} 天${i.shengXiao?` 当事人属${a(i.shengXiao)}`:"(未给属相,未做冲煞排除)"}</span></div>
2085
+ <div class="mp-mb-note">${t(e.note||"")}</div>
2086
+ </section>`};const Ua=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],ma={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},rt=["生气","延年","天医","伏位"],$e=(e,i)=>`<span class="mp-fs-chip${i?" "+i:""}">${t(e)}</span>`,ta=(e,i,r)=>`<div class="mp-fs-cell${e==="中"?" center":""}"><div class="mp-fs-top"><span class="mp-fs-gua">${t(e)}</span><span class="mp-fs-dir">${t(ma[e]||"")}</span>${i||""}</div>`+(r||"")+"</div>",Ue=e=>e.length?`<dl class="mp-fs-facts">${e.map(([i,r])=>`<div class="mp-fs-row"><dt>${t(i)}</dt><dd>${t(r)}</dd></div>`).join("")}</dl>`:"",Ea=(e,i,r,l,o,c)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${i?`<span class="mp-fs-sub">${t(i)}</span>`:""}</div>`+(r.length?`<div class="mp-fs-chips">${r.join("")}</div>`:"")+l+o+c.filter(Boolean).map(d=>`<div class="mp-fs-note">${t(d)}</div>`).join("")+"</section>",ua=(e,i)=>`<div class="mp-fs-grid" role="group" aria-label="${t(i)}">`+Ua.map(r=>r.map(l=>{const o=e.find(u=>u&&u.palace===l);if(!o)return ta(l,"","");const c=rt.includes(o.star),d=`<span class="mp-fs-star"${o.role?` title="${t(o.role)}"`:""}>${t(o.star)}<em class="${c?"ok":"bad"}">${c?"吉":"凶"}</em></span>`;return ta(l,d,"")}).join("")).join("")+"</div>";function pt(e,i){const r=i.period,l={};for(const w of e.palaces||[])l[w.palace]=w;const o=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(r)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+Ua.map(w=>w.map(L=>{const N=l[L];if(!N)return ta(L,"","");const F=[["运",N.yun],["山",N.shan],["向",N.xiang]].map(([J,P])=>`<span class="${P===r?"on":""}" title="${t(J)}星 ${t(P)}">${t(P)}</span>`).join("");return ta(L,"",`<div class="mp-fs-nums">${F}</div>`)}).join("")).join("")+"</div>",c=e.wangShanWangXiang||{},d=i.jianXiang||{},u=e.timeFlying||null,m=[$e(d.active?`兼${d.jian} ${d.offset}° · 替卦`:"正向 · 下卦",d.active?"ok":""),$e(`山盘 ${i.shanCenter.star}${i.shanCenter.name} · ${i.shanCenter.fly}`),$e(`向盘 ${i.xiangCenter.star}${i.xiangCenter.name} · ${i.xiangCenter.fly}`),$e(c.byChart?"盘面:到山到向":"盘面:未到山到向",c.byChart?"ok":""),$e(c.byTable===null?"表法:替卦不套":c.byTable?"表法:在列":"表法:未列",c.byTable?"ok":"")],f=(w,L)=>`${L} ${w.star}${w.name}(${w.fly},${w.basis}${w.mode==="替卦"?`;原运星 ${w.original}${w.replaced?",已替":",用替而未替"}`:""})`,h=u?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([w])=>u[w]).map(([w,L])=>`${L}${u[w].centerName}(${u[w].fly})`).join(" "):"",z=Ue([...d.active?[["替卦",`${d.note}${c.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${f(i.shanCenter,"山盘")};${f(i.xiangCenter,"向盘")}`],["当运",`山星${r}落 ${e.dangYun.shan.text};向星${r}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${c.note||""}${(c.table||[]).length?` 本运所列:${c.table.join("、")}。`:" 本运表法无局。"}`],...h?[["年月日时",`${h}${u.meta&&u.meta.note?` ${u.meta.note}`:""}`]]:[]]);return Ea(d.active?"玄空替卦":"玄空下卦",`${i.periodLabel} · 坐${i.sitting} · 向${i.facing}`,m,o,z,[i.note,e.disclaimer])}function Ee(e,i){const r=e.mingGua||{},l=ua([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),o=[$e(r.compatible||"—"),$e(`${i.gender}命 · ${i.guaYear} 年立春界`)],c=[];if(e.yearlyFlying){const d=e.yearlyFlying;c.push(["年紫白",`${d.centerName}入中;${d.palaces.filter(u=>u.palace!=="中").map(u=>`${u.palace}${u.name}`).join("、")}`])}return Ea("八宅命卦",`${r.num}${r.gua}(${r.group})· ${r.direction}`,o,l,Ue(c),[i.note,e.disclaimer])}function Ka(e,i){const r=e.layout||{},l=ua(e.houseStars||[],"宅卦八向(吉凶)"),o=[$e(`${i.houseGua}宅 · ${i.houseGroup}`),$e(`坐${i.sitting}`),$e(`向${i.facing}`)],c=[["门",r.door],["灶",r.stove],["床",r.bed],["厕",r.toilet]];return e.mingMatch&&c.push(["命宅配",e.mingMatch.text]),Ea("门主灶",`${i.houseGua}宅 · 坐${i.sitting} · 向${i.facing}`,o,l,Ue(c),[i.birthNote,e.disclaimer])}n.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return n.quickHTML(e);const i=e.meta||{};return i.action==="xuankong"?pt(e,i):i.action==="advise"?Ka(e,i):Ee(e,i)},n.perfHTML=function(e){if(!e)return"";const i=u=>typeof u=="number"&&isFinite(u)?`${Math.max(0,Math.round(u))}ms`:"",r=e.cached===!0?"(已缓存)":e.cached===!1?"(首次加载)":"",l=[];i(e.engineMs)&&l.push(`引擎 ${i(e.engineMs)}${r}`),i(e.computeMs)&&l.push(`排盘 ${i(e.computeMs)}`),i(e.renderMs)&&l.push(`渲染 ${i(e.renderMs)}`);const o=i(e.totalMs);if(!l.length&&!o)return"";const c=o?`首屏 ${o}`:"耗时";return`<div class="mp-perf" title="本机这一次的实测耗时,不含网络与服务端;换机器、首次加载与已缓存会不同">${l.length?`${c}|${l.join(" · ")}`:c}</div>`},n.zeriHTML=function(e){if(!e||!e.compare||e.compare.mode!=="candidates"||!Array.isArray(e.days))return n.quickHTML(e);const i=e.meta||{},r=e.shenshaRef||{},l=e.compare.best?e.compare.best.date:"",o=e.days.map(u=>{const m=u.date===l,f=u.excluded||u.verdict==="回避"?"bad":u.verdict==="推荐"?"good":"",h=u.grade||{},z=h.label?`<b>${t(h.label)}</b><em>吉${t(h.ji)} / 凶${t(h.xiong)} ${t(h.decision||"")}</em>`:"—";return`<tr class="mp-zr-row${m?" top":""}${u.excluded?" off":""}">
2087
+ <th scope="row"><b>${t(u.date)}</b>${m?'<i class="mp-zr-best">最优</i>':""}
2088
+ <em>${t(u.weekday)} ${t(u.lunar)}</em></th>
2089
+ <td><b>${t(u.dayGanZhi)}</b><em>${t(u.zhiXing)}日</em></td>
2090
+ <td class="mp-zr-score">${t(u.score)}</td>
2091
+ <td class="mp-zr-grade">${z}</td>
2092
+ <td><span class="mp-zr-v ${f}">${t(u.verdict)}</span></td>
2093
+ <td class="mp-zr-why">${t(u.reasons.join(";")||"无特别加减分")}</td>
2094
+ </tr>`}).join(""),c=(u,m)=>`<span><em>${t(u)}</em>${m.length?t(m.join("、")):"无"}</span>`,d=e.compare.best?`这一组最优:<b>${t(e.compare.best.date)}</b>(${t(e.compare.best.score)} 分 · ${t(e.compare.best.verdict)})`+(e.compare.best.ties.length>1?`;同分 ${t(e.compare.best.ties.filter(u=>u!==e.compare.best.date).join("、"))}`:""):"这一组都因冲属相被排除,没有可用的日子";return`<section class="mp-zr" aria-label="择日候选比较">
2095
+ <div class="mp-zr-h"><b>择日 · ${t(i.task||"")}</b>
2096
+ <span>候选 ${t(i.days)} 天${i.shengXiao?` 当事人属${t(i.shengXiao)}`:"(未给属相,未做冲煞排除)"}</span></div>
1966
2097
  <div class="mp-zr-lead">${d}</div>
1967
2098
  <table class="mp-zr-t"><thead><tr>
1968
2099
  <th scope="col">日期</th><th scope="col">日干支 / 建除</th><th scope="col">分</th><th scope="col">卷十等第</th><th scope="col">结论</th><th scope="col">理由</th>
@@ -1970,15 +2101,15 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
1970
2101
  <div class="mp-zr-lists">
1971
2102
  ${c("推荐",e.best)}${c("可用",e.usable)}${c("回避",e.avoid)}
1972
2103
  </div>
1973
- <p class="mp-zr-note">${a(e.compare.note||"")}</p>
1974
- ${r.text?`<p class="mp-zr-note">神煞依据:${a(r.text)}(${a(r.edition||"")});起法 ${a((r.volumes||[]).join("、"))}。未实现起法:${a((r.unsupported||[]).join("、"))}(不计分)。</p>`:""}
1975
- ${r.juan10?`<p class="mp-zr-note">卷十依据:${a(r.juan10.text)}(${a(r.juan10.corpusLines||"")});${a(r.juan10.thresholdsNote||"")}${a(r.juan10.note||"")}</p>`:""}
1976
- <p class="mp-zr-note">${a(i.scope||"")}</p>
1977
- <p class="mp-zr-note">${a(e.disclaimer||"")}</p>
1978
- </section>`},s.quickHTML=function(e){if(!e)return"";const r={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",l=e.summary||"",o=l?`<pre class="mp-quick-pre">${a(l)}</pre>`:"";return`<section class="mp-quick" aria-label="${a(r)}结果">
1979
- <div class="mp-quick-h"><b>${a(r)}</b></div>
2104
+ <p class="mp-zr-note">${t(e.compare.note||"")}</p>
2105
+ ${r.text?`<p class="mp-zr-note">神煞依据:${t(r.text)}(${t(r.edition||"")});起法 ${t((r.volumes||[]).join("、"))}。未实现起法:${t((r.unsupported||[]).join("、"))}(不计分)。</p>`:""}
2106
+ ${r.juan10?`<p class="mp-zr-note">卷十依据:${t(r.juan10.text)}(${t(r.juan10.corpusLines||"")});${t(r.juan10.thresholdsNote||"")}${t(r.juan10.note||"")}</p>`:""}
2107
+ <p class="mp-zr-note">${t(i.scope||"")}</p>
2108
+ <p class="mp-zr-note">${t(e.disclaimer||"")}</p>
2109
+ </section>`},n.quickHTML=function(e){if(!e)return"";const r={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",l=e.summary||"",o=l?`<pre class="mp-quick-pre">${t(l)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(r)}结果">
2110
+ <div class="mp-quick-h"><b>${t(r)}</b></div>
1980
2111
  ${o}
1981
- </section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const r=i&&i.outline||[],l=(i&&i.tables||[]).filter(te=>Array.isArray(te.rows)&&te.rows.length),o=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,m=26,u=(te,D)=>`${D?"600 ":""}${te}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,h=document.createElement("canvas"),b=h.getContext?h.getContext("2d"):null;if(!b)return"";const C=(te,D)=>{const oe=[];let $="";for(const ce of String(te)){const k=$+ce;b.measureText(k).width>D&&$?(oe.push($),$=ce):$=k}return $&&oe.push($),oe.length?oe:[""]};b.font=u(15);let S=0;const T=r.map(te=>{const D=C(te.text,c-d*2-70);return S+=Math.min(D.length,2)*m+10,{o:te,lines:D.slice(0,2)}}),j=l[0]||null,_=j?j.rows.slice(0,6):[],X=j?54+_.length*34:0,H=150+S+(T.length?34:0)+X+120;h.width=c,h.height=H,b.fillStyle="rgb(255,255,255)",b.fillRect(0,0,c,H),b.fillStyle="rgb(31,111,63)",b.fillRect(0,0,c,8);let w=52;b.fillStyle="rgb(27,27,27)",b.font=u(28,!0),b.fillText(`${o} · 摘要`,d,w),w+=30,b.fillStyle="rgb(111,106,96)",b.font=u(14);const z=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(b.fillText(z,d,w),w+=34,T.length){b.fillStyle="rgb(31,111,63)",b.font=u(16,!0),b.fillText("一页读懂",d,w),w+=26;for(const{o:te,lines:D}of T)b.fillStyle="rgb(138,131,120)",b.font=u(14,!0),b.fillText(te.label,d,w),b.fillStyle="rgb(63,58,51)",b.font=u(15),D.forEach((oe,$)=>b.fillText(oe,d+70,w+$*m)),w+=D.length*m+10;w+=8}if(j){b.fillStyle="rgb(31,111,63)",b.font=u(16,!0),b.fillText(j.title,d,w),w+=24,b.fillStyle="rgb(138,131,120)",b.font=u(13),b.fillText(j.columns.join(" · "),d,w),w+=8,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,w),b.lineTo(c-d,w),b.stroke(),w+=22,b.fillStyle="rgb(63,58,51)",b.font=u(14);for(const te of _){const D=te.filter(Boolean).join(" · "),oe=C(D,c-d*2)[0];b.fillText(oe,d,w),w+=34}}return w=H-62,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,w-18),b.lineTo(c-d,w-18),b.stroke(),b.fillStyle="rgb(138,131,120)",b.font=u(12),b.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,w+6),b.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,w+26),h.toDataURL?h.toDataURL("image/png"):""}catch{return""}}})();const Oa="dsh-metaphysics/history-v1";function Oi(){try{const n=window.localStorage&&window.localStorage.getItem(Oa),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(q=>q&&typeof q=="object"&&typeof q.kind=="string").slice(0,20):[]}catch{return[]}}function Fa(n){try{window.localStorage&&window.localStorage.setItem(Oa,JSON.stringify(n.slice(0,20)))}catch{}}const Fi=(n,s)=>n.kind===s.kind&&n.date===s.date&&n.time===s.time&&n.gender===s.gender&&!!n.hourUnknown==!!s.hourUnknown&&n.trueSolar!==!1==(s.trueSolar!==!1)&&n.lateZi!==!1==(s.lateZi!==!1)&&n.address===s.address&&n.lines===s.lines&&n.question===s.question&&n.mhMode===s.mhMode&&n.upper===s.upper&&n.lower===s.lower&&n.direction===s.direction&&n.count===s.count&&n.changing===s.changing&&(n.kind!=="qimen"||n.qimenRule===s.qimenRule&&n.qLateZi===s.qLateZi)&&(n.kind!=="zeri"||n.task===s.task&&n.days===s.days&&n.shengXiao===s.shengXiao&&n.zCand===s.zCand)&&(n.kind!=="xiaoliuren"||n.xlrMode===s.xlrMode&&n.num1===s.num1&&n.num2===s.num2&&n.num3===s.num3)&&(n.kind!=="trend"||n.toAge===s.toAge)&&(n.kind!=="fengshui"||n.fsMode===s.fsMode&&n.fsPeriod===s.fsPeriod&&n.sitting===s.sitting&&n.facing===s.facing)&&(n.kind!=="name"||n.nnMode===s.nnMode&&n.surname===s.surname&&n.givenName===s.givenName&&n.limitN===s.limitN)&&(n.kind!=="convert"||n.convMode===s.convMode&&n.lunarDate===s.lunarDate&&!!n.leapMonth==!!s.leapMonth)&&(n.kind!=="hepan"||n.hpChart===s.hpChart&&n.partnerDate===s.partnerDate&&n.partnerTime===s.partnerTime&&n.partnerGender===s.partnerGender&&n.partnerAddress===s.partnerAddress&&!!n.thirdOn==!!s.thirdOn&&n.p2Date===s.p2Date&&n.p2Time===s.p2Time&&n.p2Gender===s.p2Gender&&n.p2Address===s.p2Address);function Di(n,s){if(n==="bazi"){const P=["year","month","day","hour"].map(V=>s.pillars&&s.pillars[V]).filter(Boolean).map(V=>V.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${P}(时柱暂缺)`:P}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const B=window.__PP,Et=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let De=0;const ha=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,Pi=`
2112
+ </section>`},n.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const r=i&&i.outline||[],l=(i&&i.tables||[]).filter(W=>Array.isArray(W.rows)&&W.rows.length),o=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(W,q)=>`${q?"600 ":""}${W}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,f=document.createElement("canvas"),h=f.getContext?f.getContext("2d"):null;if(!h)return"";const z=(W,q)=>{const R=[];let $="";for(const ue of String(W)){const Q=$+ue;h.measureText(Q).width>q&&$?(R.push($),$=ue):$=Q}return $&&R.push($),R.length?R:[""]};h.font=m(15);let w=0;const L=r.map(W=>{const q=z(W.text,c-d*2-70);return w+=Math.min(q.length,2)*u+10,{o:W,lines:q.slice(0,2)}}),N=l[0]||null,F=N?N.rows.slice(0,6):[],J=N?54+F.length*34:0,P=150+w+(L.length?34:0)+J+120;f.width=c,f.height=P,h.fillStyle="rgb(255,255,255)",h.fillRect(0,0,c,P),h.fillStyle="rgb(31,111,63)",h.fillRect(0,0,c,8);let M=52;h.fillStyle="rgb(27,27,27)",h.font=m(28,!0),h.fillText(`${o} · 摘要`,d,M),M+=30,h.fillStyle="rgb(111,106,96)",h.font=m(14);const O=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(h.fillText(O,d,M),M+=34,L.length){h.fillStyle="rgb(31,111,63)",h.font=m(16,!0),h.fillText("一页读懂",d,M),M+=26;for(const{o:W,lines:q}of L)h.fillStyle="rgb(138,131,120)",h.font=m(14,!0),h.fillText(W.label,d,M),h.fillStyle="rgb(63,58,51)",h.font=m(15),q.forEach((R,$)=>h.fillText(R,d+70,M+$*u)),M+=q.length*u+10;M+=8}if(N){h.fillStyle="rgb(31,111,63)",h.font=m(16,!0),h.fillText(N.title,d,M),M+=24,h.fillStyle="rgb(138,131,120)",h.font=m(13),h.fillText(N.columns.join(" · "),d,M),M+=8,h.strokeStyle="rgb(229,225,216)",h.beginPath(),h.moveTo(d,M),h.lineTo(c-d,M),h.stroke(),M+=22,h.fillStyle="rgb(63,58,51)",h.font=m(14);for(const W of F){const q=W.filter(Boolean).join(" · "),R=z(q,c-d*2)[0];h.fillText(R,d,M),M+=34}}return M=P-62,h.strokeStyle="rgb(229,225,216)",h.beginPath(),h.moveTo(d,M-18),h.lineTo(c-d,M-18),h.stroke(),h.fillStyle="rgb(138,131,120)",h.font=m(12),h.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,M+6),h.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,M+26),f.toDataURL?f.toDataURL("image/png"):""}catch{return""}}})();const Rt="dsh-metaphysics/history-v1";function Pi(){try{const s=window.localStorage&&window.localStorage.getItem(Rt),n=s?JSON.parse(s):[];return Array.isArray(n)?n.filter(j=>j&&typeof j=="object"&&typeof j.kind=="string").slice(0,20):[]}catch{return[]}}function It(s){try{window.localStorage&&window.localStorage.setItem(Rt,JSON.stringify(s.slice(0,20)))}catch{}}const Di=(s,n)=>s.kind===n.kind&&s.date===n.date&&s.time===n.time&&s.gender===n.gender&&!!s.hourUnknown==!!n.hourUnknown&&s.trueSolar!==!1==(n.trueSolar!==!1)&&s.lateZi!==!1==(n.lateZi!==!1)&&s.address===n.address&&s.lines===n.lines&&s.question===n.question&&s.mhMode===n.mhMode&&s.upper===n.upper&&s.lower===n.lower&&s.direction===n.direction&&s.count===n.count&&s.changing===n.changing&&(s.kind!=="qimen"||s.qimenRule===n.qimenRule&&s.qLateZi===n.qLateZi)&&(s.kind!=="zeri"||s.task===n.task&&s.days===n.days&&s.shengXiao===n.shengXiao&&s.zCand===n.zCand)&&(s.kind!=="xiaoliuren"||s.xlrMode===n.xlrMode&&s.num1===n.num1&&s.num2===n.num2&&s.num3===n.num3)&&(s.kind!=="trend"||s.toAge===n.toAge)&&(s.kind!=="fengshui"||s.fsMode===n.fsMode&&s.fsPeriod===n.fsPeriod&&s.sitting===n.sitting&&s.facing===n.facing)&&(s.kind!=="name"||s.nnMode===n.nnMode&&s.surname===n.surname&&s.givenName===n.givenName&&s.limitN===n.limitN)&&(s.kind!=="convert"||s.convMode===n.convMode&&s.lunarDate===n.lunarDate&&!!s.leapMonth==!!n.leapMonth)&&(s.kind!=="hepan"||s.hpChart===n.hpChart&&s.partnerDate===n.partnerDate&&s.partnerTime===n.partnerTime&&s.partnerGender===n.partnerGender&&s.partnerAddress===n.partnerAddress&&!!s.thirdOn==!!n.thirdOn&&s.p2Date===n.p2Date&&s.p2Time===n.p2Time&&s.p2Gender===n.p2Gender&&s.p2Address===n.p2Address);function Ri(s,n){if(s==="bazi"){const I=["year","month","day","hour"].map(ae=>n.pillars&&n.pillars[ae]).filter(Boolean).map(ae=>ae.ganzhi).join(" ");return n.hourUnknown||n.pillars&&!n.pillars.hour?`${I}(时柱暂缺)`:I}return s==="ziwei"?`${n.soul?n.soul.branch:""}宫 ${n.bureau?n.bureau.name:""} ${n.lunar?n.lunar.year+"年":""}`.trim():s==="liuyao"?n.ben&&n.ben.name?n.ben.name:"":s==="meihua"?n.ben&&n.ben.name?`${n.ben.name} 动${n.moving}`:"":s==="daliuren"?`${n.dayGanZhi||""} ${n.geJu?n.geJu.name:""}`:""}const Z=window.__PP,Ha=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let Ie=0;const wt=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,Ii=`
1982
2113
  /* 整个侧栏面板铺宣纸:暖白渐变为底 + feTurbulence 纤维噪点平铺。
1983
2114
  background-attachment:local 让纹理跟着滚动内容走,长页面不会下半截露白。
1984
2115
  噪点用 colorMatrix 压到很低的 alpha(0.09),只做纸感不糊字。 */
@@ -2216,11 +2347,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.63.0",factory(Wt){
2216
2347
  @media (prefers-reduced-motion:reduce){
2217
2348
  *,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important}
2218
2349
  }
2219
- `,{useState:M,useEffect:vt,useRef:Ri}=Lt,Da=n=>String(n).padStart(2,"0");function Ii(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const q=Number(s[1]),P=Number(s[2]),V=Number(s[3]);if(P<1||P>12||V<1)return!1;const ae=[31,q%4===0&&q%100!==0||q%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return V<=ae[P-1]}function Pa(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const q=`${s[1]}-${Da(s[2])}-${Da(s[3])}`;return Ii(q)?q:""}function Gi(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const P=Pa(s);if(P)return P}const q=s.replace(/\D/g,"").slice(0,8);return q.length<=4?q:q.length<=6?`${q.slice(0,4)}-${q.slice(4)}`:`${q.slice(0,4)}-${q.slice(4,6)}-${q.slice(6)}`}function xa(n){const s=n.value||"",[q,P]=M(s),V=Ri(s);vt(()=>{V.current=s,P(s)},[s]);const ee=()=>{const ae=q.trim();if(!ae){P(V.current),n.onInvalid&&n.onInvalid("");return}const se=Pa(ae);if(se){V.current=se,P(se),se!==s&&n.onChange(se);return}P(V.current),n.onInvalid&&n.onInvalid(ae)};return p("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:q,onChange:ae=>{P(Gi(ae.target.value))},onBlur:ee,onKeyDown:ae=>{ae.key==="Enter"&&(ae.preventDefault(),ee())}})}const Jt=4,Ye=12;let Qt=null;function ea(){if(Qt)return Qt;let n=null;try{n=K.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(Qt={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},Qt):{total:0,questions:[],scale:{}}}function Bi(n){const{answers:s,page:q,onPick:P,onPage:V,onSubmit:ee,onClear:ae}=n,se=ea(),a=Math.max(1,Math.ceil(se.total/Jt)),ge=q*Jt,ze=se.questions.slice(ge,ge+Jt),F=s.filter(Z=>Z!=null).length,fe=se.total?Math.round(F/se.total*100):0,he=q>=a-1,G=F>=Ye;return p("div",{className:"mp-quiz"},p("div",{className:"mp-quiz-top"},p("div",{className:"mp-quiz-bar","aria-hidden":"true"},p("i",{style:{width:fe+"%"}})),p("span",{className:"mp-quiz-count"},`第 ${q+1} / ${a} 页 · 已答 ${F} / ${se.total}`)),p("div",{className:"mp-quiz-list"},ze.map((Z,R)=>{const Y=ge+R;return p("div",{key:Z.id||Y,className:"mp-quiz-q"},p("div",{className:"mp-quiz-qt"},p("b",null,String(Y+1).padStart(2,"0")),p("span",null,Z.text)),p("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Y+1} 题`},[1,2,3,4,5].map(ve=>p("label",{key:ve,className:"mp-quiz-o"+(s[Y]===ve?" on":"")},p("input",{type:"radio",name:`mpmbq${Y}`,value:String(ve),checked:s[Y]===ve,onChange:()=>P(Y,ve)}),p("b",null,String(ve)),p("span",null,se.scale[ve]||"")))))})),p("div",{className:"mp-quiz-nav"},p("button",{className:"mp-quiz-btn",disabled:q<=0,onClick:()=>V(-1)},"上一页"),he?null:p("button",{className:"mp-quiz-btn",onClick:()=>V(1)},"下一页"),p("button",{className:"mp-quiz-btn primary",disabled:!G,onClick:ee},"看结果"),p("button",{className:"mp-quiz-btn",onClick:ae},"清空"),p("span",{className:"mp-quiz-hint"},G?`已够 ${Ye} 题,可以看结果;答完 ${se.total} 题会更准。`:`答满 ${Ye} 题可先看结果(还差 ${Ye-F} 题)。`)))}class Zi extends(Lt.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,q){console.error("[metaphysics] 面板渲染异常",s,q)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,q=String(s&&s.stack||"").split(`
2350
+ `,{useState:C,useEffect:va,useRef:Bi}=Oa,Bt=s=>String(s).padStart(2,"0");function Gi(s){const n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(s||""));if(!n)return!1;const j=Number(n[1]),I=Number(n[2]),ae=Number(n[3]);if(I<1||I>12||ae<1)return!1;const ce=[31,j%4===0&&j%100!==0||j%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return ae<=ce[I-1]}function Gt(s){const n=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(s||"").trim());if(!n)return"";const j=`${n[1]}-${Bt(n[2])}-${Bt(n[3])}`;return Gi(j)?j:""}function Zi(s){const n=String(s||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(n))return n;if(/[年月日/.]/.test(n)){const I=Gt(n);if(I)return I}const j=n.replace(/\D/g,"").slice(0,8);return j.length<=4?j:j.length<=6?`${j.slice(0,4)}-${j.slice(4)}`:`${j.slice(0,4)}-${j.slice(4,6)}-${j.slice(6)}`}function kt(s){const n=s.value||"",[j,I]=C(n),ae=Bi(n);va(()=>{ae.current=n,I(n)},[n]);const oe=()=>{const ce=j.trim();if(!ce){I(ae.current),s.onInvalid&&s.onInvalid("");return}const le=Gt(ce);if(le){ae.current=le,I(le),le!==n&&s.onChange(le);return}I(ae.current),s.onInvalid&&s.onInvalid(ce)};return p("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:j,onChange:ce=>{I(Zi(ce.target.value))},onBlur:oe,onKeyDown:ce=>{ce.key==="Enter"&&(ce.preventDefault(),oe())}})}const et=4,Xe=12;let at=null;function tt(){if(at)return at;let s=null;try{s=U.compute({system:"mbti"})}catch{s=null}const n=s&&s.questions||[];return n.length?(at={total:s&&s.total||n.length,questions:n,scale:s&&s.scale||{}},at):{total:0,questions:[],scale:{}}}function Ui(s){const{answers:n,page:j,onPick:I,onPage:ae,onSubmit:oe,onClear:ce}=s,le=tt(),ye=Math.max(1,Math.ceil(le.total/et)),t=j*et,ke=le.questions.slice(t,t+et),D=n.filter(Y=>Y!=null).length,xe=le.total?Math.round(D/le.total*100):0,ve=j>=ye-1,G=D>=Xe;return p("div",{className:"mp-quiz"},p("div",{className:"mp-quiz-top"},p("div",{className:"mp-quiz-bar","aria-hidden":"true"},p("i",{style:{width:xe+"%"}})),p("span",{className:"mp-quiz-count"},`第 ${j+1} / ${ye} 页 · 已答 ${D} / ${le.total}`)),p("div",{className:"mp-quiz-list"},ke.map((Y,X)=>{const V=t+X;return p("div",{key:Y.id||V,className:"mp-quiz-q"},p("div",{className:"mp-quiz-qt"},p("b",null,String(V+1).padStart(2,"0")),p("span",null,Y.text)),p("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${V+1} 题`},[1,2,3,4,5].map(se=>p("label",{key:se,className:"mp-quiz-o"+(n[V]===se?" on":"")},p("input",{type:"radio",name:`mpmbq${V}`,value:String(se),checked:n[V]===se,onChange:()=>I(V,se)}),p("b",null,String(se)),p("span",null,le.scale[se]||"")))))})),p("div",{className:"mp-quiz-nav"},p("button",{className:"mp-quiz-btn",disabled:j<=0,onClick:()=>ae(-1)},"上一页"),ve?null:p("button",{className:"mp-quiz-btn",onClick:()=>ae(1)},"下一页"),p("button",{className:"mp-quiz-btn primary",disabled:!G,onClick:oe},"看结果"),p("button",{className:"mp-quiz-btn",onClick:ce},"清空"),p("span",{className:"mp-quiz-hint"},G?`已够 ${Xe} 题,可以看结果;答完 ${le.total} 题会更准。`:`答满 ${Xe} 题可先看结果(还差 ${Xe-D} 题)。`)))}class Ki extends(Oa.Component||Object){constructor(n){super(n),this.state={err:null}}static getDerivedStateFromError(n){return{err:n}}componentDidCatch(n,j){console.error("[metaphysics] 面板渲染异常",n,j)}render(){if(!this.state.err)return this.props.children;const n=this.state.err,j=String(n&&n.stack||"").split(`
2220
2351
  `).slice(0,14).join(`
2221
- `);return p("div",{className:"mp-wrap"},p("div",{className:"mp-panel"},p("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),p("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(s&&s.message||s)+`
2352
+ `);return p("div",{className:"mp-wrap"},p("div",{className:"mp-panel"},p("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),p("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(n&&n.message||n)+`
2222
2353
 
2223
- `+q),p("div",{className:"mp-lbl"},"环境:__PP "+typeof B+" · Engine "+typeof window.Engine+" · React "+typeof Lt+" · 版本 "+(typeof B=="object"&&B&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function Ui(n){const s=n&&n.size?n.size:20,q=n&&n.active;return p("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:q?1:.72}},p("circle",{cx:12,cy:12,r:8.2}),p("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),p("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),p("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const He=[{k:"ziwei",label:"紫微",timeLabel:"出生时刻",hint:"紫微斗数需要出生日期、时刻与性别;出生地只影响真太阳时修正。"},{k:"bazi",label:"八字",timeLabel:"出生时刻",hint:"四柱八字按节气与真太阳时定时柱,出生地越准,时柱越稳。"},{k:"liuyao",label:"六爻",timeLabel:"起卦时刻",hint:"六爻不需要出生时间:只用起卦当下的日辰定六神、月建定旺衰,卦由摇出。"},{k:"meihua",label:"梅花",timeLabel:"起卦时刻",hint:"梅花用起卦时刻的年月日时数成卦,也可直接给两个数字起卦;与出生时间无关。"},{k:"daliuren",label:"六壬",timeLabel:"起卦时刻",hint:"大六壬用起卦时刻的日干支、时支与月将起天地盘;同样与出生时间无关。"},{k:"qimen",label:"奇门",timeLabel:"起局时刻",hint:"奇门时家转盘:用起局时刻定节气、三元与局数;换局规则决定符头与节气如何对齐。"},{k:"hepan",label:"合盘",timeLabel:"你的出生时刻",hint:"合盘按「日主 + 夫妻宫 + 五行互补」看两个人的相处与互补,需要双方出生信息。"},{k:"tarot",label:"塔罗",timeLabel:"",hint:"塔罗不看时间,只记录抽牌时刻与你的提问。"},{k:"almanac",label:"黄历",timeLabel:"",hint:"黄历按公历日期查农历、干支、宜忌、时辰吉凶、二十八宿与吉神方位;只做本地计算。"},{k:"convert",label:"农历",timeLabel:"",hint:"公农历互转:公历生日可反查农历;只知道农历生日时,可转成公历再排盘。"},{k:"zeri",label:"择日",timeLabel:"",hint:"择日把区间内每天的建除宜忌与事项适配打分排序,并按属相排除冲煞日。"},{k:"chenggu",label:"称骨",timeLabel:"出生时刻",hint:"称骨按农历年、月、日、时的骨重求和;时辰必填。"},{k:"xiaoliuren",label:"小六壬",timeLabel:"起课时刻",hint:"小六壬用农历月/日/时掐指,也可用三个随机数起课。"},{k:"star",label:"星座",timeLabel:"",hint:"星座按公历日期给出太阳星座与当日基调;同日同星座结果固定。"},{k:"numerology",label:"生命数字",timeLabel:"",hint:"生命数字按公历生日归约出生命路径数、生日数与态度数。"},{k:"mbti",label:"人格",timeLabel:"",hint:"十六型人格是 24 道自我报告题的 MBTI 风格测算:4 题一页,按 1–5 打分,答满 12 题即可看结果;只作自我参照,不是官方量表。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function yt(n){return String(n).padStart(2,"0")}const ba=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name"],Ki=Array.isArray(window.__MPGroups)?window.__MPGroups:[],Ra="mp.recent.tabs",Ia="mp.first.view",Ga=3;function Ba(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Za(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function Yi(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const q=V=>new Date(V.getFullYear(),V.getMonth(),V.getDate()).getTime(),P=Math.round((q(new Date)-q(s))/864e5);return P<=0?"今天":P===1?"昨天":`${yt(s.getMonth()+1)}-${yt(s.getDate())}`}function va(){const n=new Date;return{date:`${n.getFullYear()}-${yt(n.getMonth()+1)}-${yt(n.getDate())}`,time:`${yt(n.getHours())}:${yt(n.getMinutes())}`}}const Vi={ziwei:"birth",bazi:"birth",hepan:"birth",liuyao:"cast",meihua:"cast",daliuren:"cast",qimen:"cast",tarot:"none",almanac:"date",zeri:"date",star:"date",numerology:"date",convert:"date",chenggu:"birth",trend:"birth",fengshui:"birth",name:"birth",xiaoliuren:"cast",mbti:"none"},Ua={date:"1990-05-12",time:"14:30"},$t=n=>Vi[n]||"none",Me=window.__MPCore||{},Pe=Me.needAsk||(n=>!1),W={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},it={r:null,q:"",it:null};let Ve="";function Ka(){const n=[];return n.push("inputActions "+(W.ref?"已拿到":"未拿到")),n.push("渲染 "+W.mounted+" 次"),n.push("注册 "+W.regs+" 次"),n.push("inject "+(W.injectType||"?")),n.push("槽位 "+(W.spec||"?")),W.contribution&&n.push("贡献 "+W.contribution),W.errs.length&&n.push("错误:"+W.errs.join(" / ")),"桥自检:"+n.join(";")}function Ya(n){if(W.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);W.errs.push(s.slice(0,90))}function Xi(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const q=n.actions&&n.actions.input;return q&&typeof q.setDraft=="function"&&typeof q.submit=="function"?q:null}function Va(n,s){const q=Xi(n);return vt(()=>{if(W.seats.indexOf(s)<0&&W.seats.push(s),W.keys=n?Object.keys(n).join(","):"",q){W.ref=q;try{window.__MPComposer=q}catch{}}return()=>{W.ref===q&&(W.ref=null)}},[q,s]),q}function Wi(){const n=it.r;if(!n)return"";try{const s=K.askPrompt?K.askPrompt(n,{question:it.q,interpret:it.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function Xa(n){return W.mounted+=1,Va(n,"input.right")?p("button",{type:"button",className:"mp-chip ok",title:it.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const q=Wi();q&&Ja(q)}},"命理·问"):p("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function Wa(n){return W.mounted+=1,Va(n,"composer.dock"),null}function Ja(n){let s=W.ref;if(!s)try{s=window.__MPComposer||null}catch{s=null}return!s||typeof s.setDraft!="function"||typeof s.submit!="function"?!1:(s.setDraft(n),s.submit(),!0)}function Ji(){const[n,s]=M("ziwei"),[q,P]=M("1990-05-12"),[V,ee]=M("14:30"),[ae,se]=M(!1),[a,ge]=M("female"),[ze,F]=M(""),[fe,he]=M("1992-08-15"),[G,Z]=M("10:00"),[R,Y]=M("female"),[ve,wt]=M(""),[nt,kt]=M("bazi"),[Se,_t]=M(!1),[Xe,$a]=M("1990-01-01"),[zt,jt]=M("12:00"),[Re,Ht]=M("male"),[st,Ot]=M(""),[qt,Ft]=M("chaibu"),[Oe,St]=M(!0),[ot,Nt]=M(!0),[Dt,Mt]=M("same-day"),[We,Pt]=M(!1),[Je,wa]=M(""),[Rt,Ce]=M(""),[Ie,Qe]=M(null),[It,et]=M({}),[rt,ta]=M(null),[pt,aa]=M([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[tt,Gt]=M(null),[lt,ia]=M("开业"),[At,Ne]=M("30"),[Te,Ct]=M(""),[Ge,Bt]=M(""),[Be,Zt]=M("solar2lunar"),[dt,e]=M(""),[i,r]=M(!1),[l,o]=M("time"),[c,d]=M(""),[m,u]=M(""),[h,b]=M(""),[C,S]=M(()=>new Array(ea().total).fill(null)),[T,j]=M(0),[_,X]=M("60"),[H,w]=M("natal"),[z,te]=M("9"),[D,oe]=M("子"),[$,ce]=M("午"),[k,O]=M("assess"),[Q,$e]=M("李"),[ue,pe]=M(""),[me,Fe]=M("6"),[Ze,ct]=M(!1),[be,L]=M(""),[f,U]=M(null),[de,re]=M(""),[x,v]=M(""),[le,ie]=M(null),[ke,we]=M(()=>Oi()),[xe,mt]=M(()=>Ba(Ia)==="flat"?"flat":"group"),[ut,ka]=M(()=>{const t=Ba(Ra);return Array.isArray(t)?t:[]}),[an,nn]=M({}),[za,ei]=M(null),[ti,na]=M(()=>B.profilesLoad()),[Ut,sa]=M(null),[ai,ii]=M(""),[gt,Ue]=M(""),[ni,Ae]=M(""),[sn,oa]=M(!1),[ja,si]=M("3"),[at,qa]=M(""),[Le,oi]=M("general");function Sa(){return Je.trim()||(f&&Pe(f.kind)?String(at||"").trim():"")}vt(()=>{f&&f.r&&(it.r=f.r,it.q=Sa(),it.it=f.it||null)},[f,Je,at]);const[ri,on]=M(null),[rn,ra]=M(!1),[ft,pi]=M("time"),[pa,li]=M(""),[la,di]=M(""),[da,ci]=M(""),[pn,ht]=M(""),[Na,ca]=M({birth:null,cast:null}),ln=He.find(t=>t.k===n)||He[0],Kt=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ee=$t(n),mi=!(n==="meihua"&&ft==="number"),ui=n!=="tarot"&&n!=="mbti"&&mi,gi=ui&&Ee!=="date",Xn=gi,je=async(t,g,N,E)=>{const y=t||n,ne=N||ft,ye=y==="bazi"||y==="trend",Ke=E&&typeof E.hourUnknown=="boolean"?E.hourUnknown:ae,qe=g||(ye&&Ke?{date:q,time:"12:00"}:{date:q,time:V}),_e=E&&E.gender?E.gender:a,xt=E&&typeof E.address=="string"?E.address:ze,Yt=E&&typeof E.trueSolar=="boolean"?E.trueSolar:Oe,Vt=E&&typeof E.lateZi=="boolean"?E.lateZi:ot,qi=E&&typeof E.lines=="string"?E.lines:be,ua=E&&typeof E.question=="string"?E.question:at,Si=Et(),Ni=++De,Xt=()=>Ni!==De;ie(null),Ae("");try{let bt=0,Mi=null;oa(!0);try{await ha(y);const I=window.__MP_LAST_LOAD;bt=I&&typeof I.ms=="number"?I.ms:Et()-Si,Mi=I&&typeof I.cached=="boolean"?I.cached:null}catch(I){if(Xt())return;Ue(I&&I.message?I.message:String(I)),U(null);return}finally{Xt()||oa(!1)}if(Xt())return;const Ai=`${qe.date}T${qe.time}`,A={system:y};if(A.shadow=y!=="mbti",A.trace=y==="liuyao"||y==="bazi"||y==="ziwei"||y==="qimen"||y==="daliuren",y!=="tarot"&&(A.datetime=Ai),y==="bazi"||y==="ziwei"||y==="hepan"||y==="trend"){if(A.gender=_e,A.trueSolar=Yt,xt.trim()){A.address=xt.trim();try{const I=await K.geocodeAddress(A.address,{online:Ze});I&&typeof I.lon=="number"&&(A.longitude=I.lon,A.geo=I)}catch(I){console.error("[metaphysics] 地址解析失败,退回内置表",I)}if(Xt())return}(y==="bazi"||y==="ziwei")&&(A.cross=We),A.lateZi=Vt,ye&&Ke&&(A.hourUnknown=!0)}if(y==="liuyao"){const I=Me.parseLines(qi);I.lines?A.lines=I.lines:I.warning&&Ae(I.warning)}if(y==="qimen"&&(A.juMethod=qt,A.lateZiHourMode=Dt,A.direction=Le),y==="bazi"&&(A.verifyPast=6),y==="zeri"){A.startDate=qe.date,A.task=lt,A.days=Number(At)||30,Te&&(A.shengXiao=Te);const I=Ge.split(/[,,、\s]+/).filter(Boolean);I.length&&(A.candidates=I)}if(y==="xiaoliuren")if(A.mode=l,l==="number")A.num1=Number(c)||void 0,A.num2=Number(m)||void 0,A.num3=Number(h)||void 0;else{A.date=qe.date;const I=Number(String(qe.time).split(":")[0]);A.hour=Number.isFinite(I)?I:12}if(y==="mbti"){delete A.datetime;const I=C.slice();for(;I.length&&I[I.length-1]==null;)I.pop();I.length&&(A.answers=I)}if(y==="trend"&&ye&&Ke&&(A.hourUnknown=!0),y==="trend"&&(A.toAge=Number(_)||60),y==="fengshui"&&(A.action=H,H==="natal"?A.gender=_e:(A.sitting=D,A.facing=$,delete A.datetime,H==="xuankong"&&(A.period=Number(z)||9))),y==="name"&&(A.action=k,A.surname=Q.trim(),k==="generate"?(A.gender=_e,A.limit=Number(me)||6,A.trueSolar=Yt,A.lateZi=Vt):(A.givenName=ue.trim(),(!qe.date||!qe.time)&&delete A.datetime)),y==="convert")if(A.system="convert",Be==="lunar2solar"){const I=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(dt).trim());if(!I){Ue("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}A.mode="lunar2solar",A.lunarYear=Number(I[1]),A.lunarMonth=Number(I[2]),A.lunarDay=Number(I[3]),A.isLeapMonth=i,delete A.datetime}else A.mode="solar2lunar";if(y==="tarot"&&(A.count=Number(ja)),y==="hepan"&&(A.chart=nt,A.partner={datetime:`${fe}T${G}`,gender:R,address:ve.trim()||void 0,trueSolar:Oe},Se&&(A.partner2={datetime:`${Xe}T${zt}`,gender:Re,address:st.trim()||void 0,trueSolar:Oe})),Pe(y)){if(!ua.trim()){Ue("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),ra(!0),U(null);return}ra(!1),A.question=ua.trim(),y==="liuyao"&&(A.direction=Le)}if(y==="meihua"&&(A.mode=ne,ne==="number")){if(pa.trim()===""||la.trim()===""){Ue("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),U(null);return}if(A.upper=Number(pa),A.lower=Number(la),!Number.isFinite(A.upper)||!Number.isFinite(A.lower)){Ue("两个数都要是数字,例如 17 和 29。"),U(null);return}da!==""&&(A.changing=Number(da))}const Bn=Et();y==="trend"&&!A.asOf&&Me.todayStamp&&(A.asOf=Me.todayStamp());const Tt=K.compute(A),Zn=Et()-Bn;let Aa=null;try{Aa=B.shadowTrack?B.shadowTrack(Tt):null}catch{Aa=null}let Ca=null;if(y==="bazi")try{Ca=K.compute({system:"trend",datetime:Ai,gender:_e,toAge:100,trueSolar:Yt,lateZi:Vt,...Me.todayStamp?{asOf:A.asOf||Me.todayStamp()}:{},...A.dst!==void 0?{dst:A.dst}:{},...A.address?{address:A.address}:{},...typeof A.longitude=="number"?{longitude:A.longitude}:{},...A.geo?{geo:A.geo}:{}})}catch{Ca=null}let Ta=null;if(K.caliberCompare)try{Ta=K.caliberCompare(A)}catch{Ta=null}const Un=Pe(y)||y==="qimen"?{question:Pe(y)?ua.trim():"",direction:Le}:void 0,ga=K.interpret?K.interpret(Tt,Un):null;ga&&Tt.cross&&K.crossSection&&(ga.sections=[...ga.sections||[],K.crossSection(Tt.cross)]);const Kn=$t(y)==="cast"&&(y!=="meihua"||ne==="time");U({kind:y,r:Tt,it:ga,at:qe,timed:Kn,trend:Ca,caliber:Ta,shadowDiff:Aa,gender:_e,address:xt,trueSolar:Yt,lateZi:Vt});const Ci=I=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>I>1?Ci(I-1):Ti()):setTimeout(Ti,0)},Ti=()=>{Ni===De&&ie({engineMs:bt,computeMs:Zn,cached:Mi,totalMs:Et()-Si,renderMs:null})};if(Ci(2),Qe(null),ta(null),et({}),Gt(null),Ue(""),ht(""),y!=="tarot"&&y!=="mbti"){const I=!!(ye&&Ke),Li={kind:y,date:qe.date,time:I?"":qe.time,hourUnknown:I,gender:_e,address:xt,trueSolar:Yt,lateZi:Vt,lines:y==="liuyao"?qi:"",question:Pe(y)?ua.trim():"",direction:Le,count:ja,mhMode:ne,upper:pa,lower:la,changing:da,...y==="qimen"?{qimenRule:qt,qLateZi:Dt}:{},...y==="zeri"?{task:lt,days:At,shengXiao:Te,zCand:Ge}:{},...y==="xiaoliuren"?{xlrMode:l,num1:c,num2:m,num3:h}:{},...y==="trend"?{toAge:_}:{},...y==="fengshui"?{fsMode:H,fsPeriod:z,sitting:D,facing:$}:{},...y==="name"?{nnMode:k,surname:Q,givenName:ue,limitN:me}:{},...y==="convert"?{convMode:Be,lunarDate:dt,leapMonth:i}:{},...y==="hepan"?{hpChart:nt,partnerDate:fe,partnerTime:G,partnerGender:R,partnerAddress:ve,thirdOn:Se,p2Date:Xe,p2Time:zt,p2Gender:Re,p2Address:st}:{},label:Di(y,Tt),at:Date.now()};we(Yn=>{const Ei=[Li,...Yn.filter(Vn=>!Fi(Vn,Li))].slice(0,20);return Fa(Ei),Ei})}}catch(bt){if(Xt())return;Ue(bt&&bt.message?bt.message:String(bt)),U(null)}},dn=async t=>{const g=$t(t),N=++De;if(Ue(""),t==="mbti"){Ae(""),oa(!0);try{await ha(t)}catch(y){N===De&&Ue(y&&y.message?y.message:String(y))}finally{N===De&&oa(!1)}if(N!==De)return;s(t),C.filter(y=>y!=null).length>=Ye?je(t):U(null);return}if(s(t),g==="none"){je(t);return}const E=Na[g]||(g==="cast"||g==="date"?va():{date:Ua.date,time:Ua.time});P(E.date),ee(E.time),je(t,E)},cn=t=>{He.some(g=>g.k===t)&&ka(g=>{const N=(g||[]).filter(y=>y&&y.tab&&y.tab!==t),E=[{tab:t,at:Date.now()}].concat(N).slice(0,Ga);return Za(Ra,E),E})},fi=t=>{const g=t==="flat"?"flat":"group";mt(g),Za(Ia,g)},Ma=t=>{cn(t),dn(t)},mn=t=>{P(t),Ee!=="none"&&ca(g=>Object.assign({},g,{[Ee]:{date:t,time:V}}))},un=t=>{ee(t),Ee!=="none"&&ca(g=>Object.assign({},g,{[Ee]:{date:q,time:t}}))},Wn=()=>{const t=va();P(t.date),ee(t.time),Ee!=="none"&&ca(g=>Object.assign({},g,{[Ee]:null})),je(n,t)},hi=()=>{if(n==="mbti"){const t=C.filter(g=>g!=null).length;if(t<Ye){Ae(`先答满 ${Ye} 题再看结果(现答 ${t} 题,还差 ${Ye-t} 题)。`);return}je(n);return}if(Ee!=="none"&&!Na[Ee]){const t=va();P(t.date),ee(t.time),je(n,t);return}je(n)},gn=()=>{const t={date:"1990-05-12",time:"14:30"};s("bazi"),ge("male"),F("河北石家庄"),ca(g=>Object.assign({},g,{birth:t})),P(t.date),ee(t.time),je("bazi",t,null,{gender:"male",address:"河北石家庄"})},xi=t=>{pi(t),je(n,{date:q,time:V},t)},fn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),hn=()=>ri===null?fn():ri,ma=(t,g,N)=>{if(!g)return;const E=ne=>{t.textContent=ne?"已复制":"复制失败",setTimeout(()=>{t.textContent=N},1400)},y=()=>{try{const ne=document.createElement("textarea");ne.value=g,ne.setAttribute("readonly",""),ne.style.position="fixed",ne.style.opacity="0",document.body.appendChild(ne),ne.select();const ye=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ne),ye}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>E(!0),()=>E(y()));return}}catch{}E(y())},xn=t=>ma(t,t.getAttribute("data-shadow-copy")||"","复制 ID"),bn=t=>ma(t,t.getAttribute("data-handle-copy")||"","复制句柄"),vn=t=>{const g=t.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),N=g&&g.querySelector("[data-trace-md]");ma(t,N?N.value:"","复制 Markdown")},yn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},$n=()=>{if(!f||!f.r)return null;try{return K.askPackages?K.askPackages(f.r,{question:Sa(),interpret:f.it,base:yn()}):null}catch{return null}},bi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],wn=(t,g)=>{const N=$n();if(!N){Ce("还没有可以复制的盘:先排一张。");return}const E=t==="link"?N.link:N[t];if(!E){Ce(t==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}ma(g,E,bi.find(y=>y[0]===t)[1]),t==="link"&&Ce("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},kn=()=>{const t=document.getElementById("mp-trace-layer");if(!t)return;t.classList.add("open"),t.setAttribute("aria-hidden","false");const g=t.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},vi=()=>{const t=document.getElementById("mp-trace-layer");if(!t)return;t.classList.remove("open"),t.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},zn=t=>{const g=t.target&&t.target.closest?t.target.closest("[data-shadow-copy]"):null;if(g){xn(g);return}const N=t.target&&t.target.closest?t.target.closest("[data-handle-copy]"):null;if(N){bn(N);return}if(t.target&&t.target.closest?t.target.closest("[data-trace-open]"):null){kn();return}const y=t.target&&t.target.closest?t.target.closest("[data-trace-copy]"):null;if(y){vn(y);return}if(t.target&&t.target.closest?t.target.closest("[data-mp-askcopy]"):null){Sn();return}if(t.target&&t.target.closest?t.target.closest("[data-trace-close]"):null){vi();return}const Ke=t.target&&t.target.closest?t.target.closest(".mp-it-head"):null;if(!Ke)return;const qe=Ke.closest(".mp-it");if(!qe)return;const _e=!qe.classList.contains("folded");qe.classList.toggle("folded",_e),Ke.setAttribute("aria-expanded",_e?"false":"true");const xt=Ke.querySelector(".mp-it-hint");xt&&(xt.textContent=_e?"点击展开":"点击收起"),on(_e)},yi=(t,g)=>{if(!f||!(Pe(n)||n==="qimen"))return;const N={question:Pe(n)?(g===void 0?at:g).trim():"",direction:t===void 0?Le:t},E=K.interpret?K.interpret(f.r,N):null;let y=f.r;if((n==="liuyao"||n==="qimen")&&y&&y.trace&&K.buildTrace)try{const ne=n==="liuyao"?K.buildTrace(y,{direction:N.direction,gender:y.useGod&&y.useGod.gender||"male",refresh:!0}):K.buildTrace(y,{direction:N.direction});ne&&(y=Object.assign({},y,{trace:ne}))}catch{}U(Object.assign({},f,{r:y,it:E}))},jn=t=>!t||!t.timed||!t.at?"":`<div class="mp-cast">起卦时刻:<b>${t.at.date} ${t.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,qn=()=>{try{const t=f&&f.r&&f.r.summary?f.r.summary:"";if(!t)return;navigator.clipboard.writeText(t).then(()=>ht("已复制"),()=>ht("复制失败"))}catch{ht("复制失败")}},Sn=()=>{if(!f||!f.r||!window.Engine||!window.Engine.buildEventPrompt)return;const t=Me&&Me.kindOfDirection?Me.kindOfDirection(Le):"other";let g;try{g=window.Engine.buildEventPrompt(f.r,{question:(at||"").trim(),kind:t,gender:a,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>ht("已复制问事提示"),()=>ht("复制失败"))},$i=()=>{if(!(!f||!f.r||!Je.trim()))try{Qe(K.followup?K.followup(f.r,Je.trim()):null)}catch(t){Qe({question:Je.trim(),ok:!1,answer:"追问失败:"+(t&&t.message?t.message:t),evidence:[],confidence:"弱"})}},Nn=()=>{if(!(!f||!f.r))try{const t=K.askPrompt?K.askPrompt(f.r,{question:Sa(),interpret:f.it}):null,g=t&&t.text?t.text:String(f.r.summary||"");if(Ja(g)){Ce("已发到对话窗,往下看回复。");return}const N="("+Ka()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Ce("对话输入框还没就绪"+N+",已复制提问;粘进对话窗回车即可。"),()=>Ce("对话输入框还没就绪"+N+",复制也没成功;先点「复制文字结果」再贴。")):Ce("对话输入框还没就绪"+N+";先点「复制文字结果」再贴进对话窗。")}catch(t){Ce("发到对话窗失败:"+(t&&t.message?t.message:t))}},Mn=()=>{const t=[],g=window.__MP_VER||"未知";t.push("# 命理插件反馈"),t.push(""),t.push("## 我遇到的情况"),t.push(""),t.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),t.push(""),t.push("## 复现信息"),t.push(""),t.push("- 插件版本:v"+g);{const y=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];y.length&&t.push("- 未发版改动:"+y.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const N=He.find(y=>y.k===n)?.label||n;if(t.push("- 体系:"+N+(N===n?"":"("+n+")")),at&&t.push("- 所问之事:"+at),Le&&Le!=="general"){const y=(Array.isArray(K.DIRECTIONS)?K.DIRECTIONS:[]).find(ne=>ne.key===Le);t.push("- 询问方向:"+(y?y.label:Le))}t.push(""),t.push("### 输入"),t.push(""),t.push("```"),($t(n)==="time"||$t(n)==="date")&&(t.push(`日期:${q}`),$t(n)==="time"&&t.push(`时刻:${ae?"(未知,按三柱排)":V}`),t.push(`性别:${a==="male"?"男":"女"}`),ze&&t.push(`出生地:${ze}`),t.push(`真太阳时:${Oe?"开":"关"} 晚子时换日:${ot?"开":"关"}`),n==="qimen"&&t.push(`奇门取局:${qt}`),We&&t.push("交叉验证:开"));const E={合盘:()=>{t.push(`对方:${fe} ${G} ${R==="male"?"男":"女"}${ve?" "+ve:""}(${nt} 盘)`),Se&&t.push(`第三方:${Xe} ${zt} ${Re==="male"?"男":"女"}${st?" "+st:""}`)},择日:()=>{t.push(`事项:${lt} 起算:${q} 天数:${At}${Te?" 属相:"+Te:""}${Ge?" 候选日:"+Ge:""}`)},起名:()=>{t.push(`姓:${Q||"(未填)"} 名:${ue||"(未填)"} 模式:${k}${k==="generate"?" 候选数:"+(me||"默认"):""}`)},公农历:()=>{t.push(`模式:${Be}${dt?" 农历输入:"+dt:""}${i?"(闰月)":""}`)},小六壬:()=>{t.push(`模式:${l}${l==="number"?` 报数:${c}/${m}/${h}`:""}`)},风水:()=>{t.push(`动作:${H}${H==="natal"?"":` 坐:${D} 向:${$}`}${H==="xuankong"?` 运:${z}`:""}`)}};if(E[N]&&E[N](),t.push("```"),t.push(""),gt&&(t.push("### 报错原文"),t.push(""),t.push("```"),t.push(String(gt)),t.push("```"),t.push("")),f&&f.r){t.push("### 结果摘要(引擎原文,前 40 行)"),t.push(""),t.push("```");const y=String(f.r.summary||(K.renderText?K.renderText(f.r):"")||"");t.push(y.split(`
2354
+ `+j),p("div",{className:"mp-lbl"},"环境:__PP "+typeof Z+" · Engine "+typeof window.Engine+" · React "+typeof Oa+" · 版本 "+(typeof Z=="object"&&Z&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function Yi(s){const n=s&&s.size?s.size:20,j=s&&s.active;return p("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:j?1:.72}},p("circle",{cx:12,cy:12,r:8.2}),p("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),p("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),p("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Pe=[{k:"ziwei",label:"紫微",timeLabel:"出生时刻",hint:"紫微斗数需要出生日期、时刻与性别;出生地只影响真太阳时修正。"},{k:"bazi",label:"八字",timeLabel:"出生时刻",hint:"四柱八字按节气与真太阳时定时柱,出生地越准,时柱越稳。"},{k:"liuyao",label:"六爻",timeLabel:"起卦时刻",hint:"六爻不需要出生时间:只用起卦当下的日辰定六神、月建定旺衰,卦由摇出。"},{k:"meihua",label:"梅花",timeLabel:"起卦时刻",hint:"梅花用起卦时刻的年月日时数成卦,也可直接给两个数字起卦;与出生时间无关。"},{k:"daliuren",label:"六壬",timeLabel:"起卦时刻",hint:"大六壬用起卦时刻的日干支、时支与月将起天地盘;同样与出生时间无关。"},{k:"qimen",label:"奇门",timeLabel:"起局时刻",hint:"奇门时家转盘:用起局时刻定节气、三元与局数;换局规则决定符头与节气如何对齐。"},{k:"hepan",label:"合盘",timeLabel:"你的出生时刻",hint:"合盘按「日主 + 夫妻宫 + 五行互补」看两个人的相处与互补,需要双方出生信息。"},{k:"tarot",label:"塔罗",timeLabel:"",hint:"塔罗不看时间,只记录抽牌时刻与你的提问。"},{k:"almanac",label:"黄历",timeLabel:"",hint:"黄历按公历日期查农历、干支、宜忌、时辰吉凶、二十八宿与吉神方位;只做本地计算。"},{k:"convert",label:"农历",timeLabel:"",hint:"公农历互转:公历生日可反查农历;只知道农历生日时,可转成公历再排盘。"},{k:"zeri",label:"择日",timeLabel:"",hint:"择日把区间内每天的建除宜忌与事项适配打分排序,并按属相排除冲煞日。"},{k:"chenggu",label:"称骨",timeLabel:"出生时刻",hint:"称骨按农历年、月、日、时的骨重求和;时辰必填。"},{k:"xiaoliuren",label:"小六壬",timeLabel:"起课时刻",hint:"小六壬用农历月/日/时掐指,也可用三个随机数起课。"},{k:"star",label:"星座",timeLabel:"",hint:"星座按公历日期给出太阳星座与当日基调;同日同星座结果固定。"},{k:"numerology",label:"生命数字",timeLabel:"",hint:"生命数字按公历生日归约出生命路径数、生日数与态度数。"},{k:"mbti",label:"人格",timeLabel:"",hint:"十六型人格是 24 道自我报告题的 MBTI 风格测算:4 题一页,按 1–5 打分,答满 12 题即可看结果;只作自我参照,不是官方量表。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function ya(s){return String(s).padStart(2,"0")}const zt=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name"],Vi=Array.isArray(window.__MPGroups)?window.__MPGroups:[],Zt="mp.recent.tabs",Ut="mp.first.view",Kt=3;function Yt(s){try{return JSON.parse(window.localStorage.getItem(s)||"null")}catch{return null}}function Vt(s,n){try{window.localStorage.setItem(s,JSON.stringify(n))}catch{}}function Xi(s){const n=new Date(s);if(Number.isNaN(n.getTime()))return"";const j=ae=>new Date(ae.getFullYear(),ae.getMonth(),ae.getDate()).getTime(),I=Math.round((j(new Date)-j(n))/864e5);return I<=0?"今天":I===1?"昨天":`${ya(n.getMonth()+1)}-${ya(n.getDate())}`}function jt(){const s=new Date;return{date:`${s.getFullYear()}-${ya(s.getMonth()+1)}-${ya(s.getDate())}`,time:`${ya(s.getHours())}:${ya(s.getMinutes())}`}}const Ji={ziwei:"birth",bazi:"birth",hepan:"birth",liuyao:"cast",meihua:"cast",daliuren:"cast",qimen:"cast",tarot:"none",almanac:"date",zeri:"date",star:"date",numerology:"date",convert:"date",chenggu:"birth",trend:"birth",fengshui:"birth",name:"birth",xiaoliuren:"cast",mbti:"none"},Xt={date:"1990-05-12",time:"14:30"},$a=s=>Ji[s]||"none",Te=window.__MPCore||{},Be=Te.needAsk||(s=>!1),ee={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},sa={r:null,q:"",it:null};let Je="";function Jt(){const s=[];return s.push("inputActions "+(ee.ref?"已拿到":"未拿到")),s.push("渲染 "+ee.mounted+" 次"),s.push("注册 "+ee.regs+" 次"),s.push("inject "+(ee.injectType||"?")),s.push("槽位 "+(ee.spec||"?")),ee.contribution&&s.push("贡献 "+ee.contribution),ee.errs.length&&s.push("错误:"+ee.errs.join(" / ")),"桥自检:"+s.join(";")}function Wt(s){if(ee.errs.length>=3)return;const n=s&&s.message?String(s.message):String(s);ee.errs.push(n.slice(0,90))}function Wi(s){if(!s)return null;const n=s.inputActions;if(n&&typeof n.setDraft=="function"&&typeof n.submit=="function")return n;const j=s.actions&&s.actions.input;return j&&typeof j.setDraft=="function"&&typeof j.submit=="function"?j:null}function Qt(s,n){const j=Wi(s);return va(()=>{if(ee.seats.indexOf(n)<0&&ee.seats.push(n),ee.keys=s?Object.keys(s).join(","):"",j){ee.ref=j;try{window.__MPComposer=j}catch{}}return()=>{ee.ref===j&&(ee.ref=null)}},[j,n]),j}function Qi(){const s=sa.r;if(!s)return"";try{const n=U.askPrompt?U.askPrompt(s,{question:sa.q,interpret:sa.it}):null;return n&&n.text||String(s.summary||"")}catch{return String(s.summary||"")}}function ei(s){return ee.mounted+=1,Qt(s,"input.right")?p("button",{type:"button",className:"mp-chip ok",title:sa.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const j=Qi();j&&ti(j)}},"命理·问"):p("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function ai(s){return ee.mounted+=1,Qt(s,"composer.dock"),null}function ti(s){let n=ee.ref;if(!n)try{n=window.__MPComposer||null}catch{n=null}return!n||typeof n.setDraft!="function"||typeof n.submit!="function"?!1:(n.setDraft(s),n.submit(),!0)}function en(){const[s,n]=C("ziwei"),[j,I]=C("1990-05-12"),[ae,oe]=C("14:30"),[ce,le]=C(!1),[ye,t]=C("female"),[ke,D]=C(""),[xe,ve]=C("1992-08-15"),[G,Y]=C("10:00"),[X,V]=C("female"),[se,wa]=C(""),[oa,ra]=C("bazi"),[De,it]=C(!1),[ka,Fa]=C("1990-01-01"),[za,pa]=C("12:00"),[la,ja]=C("male"),[qa,nt]=C(""),[We,da]=C("chaibu"),[Re,Sa]=C(!0),[Qe,Na]=C(!0),[Ma,Pa]=C("same-day"),[Da,St]=C(!1),[ea,Nt]=C(""),[Ca,Ne]=C(""),[Aa,Ra]=C(null),[Ia,Ba]=C({}),[ca,Ge]=C(null),[Ze,st]=C([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Le,Ga]=C(null),[Ta,Za]=C("开业"),[La,ot]=C("30"),[aa,Ua]=C(""),[ma,rt]=C(""),[$e,ta]=C("solar2lunar"),[Ue,Ea]=C(""),[ua,pt]=C(!1),[Ee,Ka]=C("time"),[e,i]=C(""),[r,l]=C(""),[o,c]=C(""),[d,u]=C(()=>new Array(tt().total).fill(null)),[m,f]=C(0),[h,z]=C("60"),[w,L]=C("natal"),[N,F]=C("9"),[J,P]=C("子"),[M,O]=C("午"),[W,q]=C("assess"),[R,$]=C("李"),[ue,Q]=C(""),[ne,Ae]=C("6"),[k,T]=C(!1),[E,re]=C(""),[x,pe]=C(null),[ze,be]=C(""),[H,K]=C(""),[te,ge]=C(null),[he,b]=C(()=>Pi()),[v,fe]=C(()=>Yt(Ut)==="flat"?"flat":"group"),[me,Se]=C(()=>{const a=Yt(Zt);return Array.isArray(a)?a:[]}),[je,qe]=C({}),[Ke,ia]=C(null),[lt,dt]=C(()=>Z.profilesLoad()),[Ya,ct]=C(null),[ni,si]=C(""),[ga,Ye]=C(""),[oi,_e]=C(""),[sn,mt]=C(!1),[Mt,ri]=C("3"),[na,Ct]=C(""),[Oe,pi]=C("general");function At(){return ea.trim()||(x&&Be(x.kind)?String(na||"").trim():"")}va(()=>{x&&x.r&&(sa.r=x.r,sa.q=At(),sa.it=x.it||null)},[x,ea,na]);const[li,on]=C(null),[rn,ut]=C(!1),[fa,di]=C("time"),[gt,ci]=C(""),[ft,mi]=C(""),[ht,ui]=C(""),[pn,ha]=C(""),[Tt,bt]=C({birth:null,cast:null}),ln=Pe.find(a=>a.k===s)||Pe[0],Va=s==="bazi"||s==="ziwei"||s==="hepan"||s==="chenggu"||s==="trend"||s==="fengshui"||s==="name",He=$a(s),gi=!(s==="meihua"&&fa==="number"),fi=s!=="tarot"&&s!=="mbti"&&gi,hi=fi&&He!=="date",Xn=hi,Me=async(a,g,S,_)=>{const y=a||s,de=S||fa,we=y==="bazi"||y==="trend",Ve=_&&typeof _.hourUnknown=="boolean"?_.hourUnknown:ce,Ce=g||(we&&Ve?{date:j,time:"12:00"}:{date:j,time:ae}),Fe=_&&_.gender?_.gender:ye,ba=_&&typeof _.address=="string"?_.address:ke,Xa=_&&typeof _.trueSolar=="boolean"?_.trueSolar:Re,Ja=_&&typeof _.lateZi=="boolean"?_.lateZi:Qe,Ni=_&&typeof _.lines=="string"?_.lines:E,vt=_&&typeof _.question=="string"?_.question:na,Mi=Ha(),Ci=++Ie,Wa=()=>Ci!==Ie;ge(null),_e("");try{let xa=0,Ai=null;mt(!0);try{await wt(y);const B=window.__MP_LAST_LOAD;xa=B&&typeof B.ms=="number"?B.ms:Ha()-Mi,Ai=B&&typeof B.cached=="boolean"?B.cached:null}catch(B){if(Wa())return;Ye(B&&B.message?B.message:String(B)),pe(null);return}finally{Wa()||mt(!1)}if(Wa())return;const Ti=`${Ce.date}T${Ce.time}`,A={system:y};if(A.shadow=y!=="mbti",A.trace=y==="liuyao"||y==="bazi"||y==="ziwei"||y==="qimen"||y==="daliuren",y!=="tarot"&&(A.datetime=Ti),y==="bazi"||y==="ziwei"||y==="hepan"||y==="trend"){if(A.gender=Fe,A.trueSolar=Xa,ba.trim()){A.address=ba.trim();try{const B=await U.geocodeAddress(A.address,{online:k});B&&typeof B.lon=="number"&&(A.longitude=B.lon,A.geo=B)}catch(B){console.error("[metaphysics] 地址解析失败,退回内置表",B)}if(Wa())return}(y==="bazi"||y==="ziwei")&&(A.cross=Da),A.lateZi=Ja,we&&Ve&&(A.hourUnknown=!0)}if(y==="liuyao"){const B=Te.parseLines(Ni);B.lines?A.lines=B.lines:B.warning&&_e(B.warning)}if(y==="qimen"&&(A.juMethod=We,A.lateZiHourMode=Ma,A.direction=Oe),y==="bazi"&&(A.verifyPast=6),y==="zeri"){A.startDate=Ce.date,A.task=Ta,A.days=Number(La)||30,aa&&(A.shengXiao=aa);const B=ma.split(/[,,、\s]+/).filter(Boolean);B.length&&(A.candidates=B)}if(y==="xiaoliuren")if(A.mode=Ee,Ee==="number")A.num1=Number(e)||void 0,A.num2=Number(r)||void 0,A.num3=Number(o)||void 0;else{A.date=Ce.date;const B=Number(String(Ce.time).split(":")[0]);A.hour=Number.isFinite(B)?B:12}if(y==="mbti"){delete A.datetime;const B=d.slice();for(;B.length&&B[B.length-1]==null;)B.pop();B.length&&(A.answers=B)}if(y==="trend"&&we&&Ve&&(A.hourUnknown=!0),y==="trend"&&(A.toAge=Number(h)||60),y==="fengshui"&&(A.action=w,w==="natal"?A.gender=Fe:(A.sitting=J,A.facing=M,delete A.datetime,w==="xuankong"&&(A.period=Number(N)||9))),y==="name"&&(A.action=W,A.surname=R.trim(),W==="generate"?(A.gender=Fe,A.limit=Number(ne)||6,A.trueSolar=Xa,A.lateZi=Ja):(A.givenName=ue.trim(),(!Ce.date||!Ce.time)&&delete A.datetime)),y==="convert")if(A.system="convert",$e==="lunar2solar"){const B=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(Ue).trim());if(!B){Ye("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}A.mode="lunar2solar",A.lunarYear=Number(B[1]),A.lunarMonth=Number(B[2]),A.lunarDay=Number(B[3]),A.isLeapMonth=ua,delete A.datetime}else A.mode="solar2lunar";if(y==="tarot"&&(A.count=Number(Mt)),y==="hepan"&&(A.chart=oa,A.partner={datetime:`${xe}T${G}`,gender:X,address:se.trim()||void 0,trueSolar:Re},De&&(A.partner2={datetime:`${ka}T${za}`,gender:la,address:qa.trim()||void 0,trueSolar:Re})),Be(y)){if(!vt.trim()){Ye("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),ut(!0),pe(null);return}ut(!1),A.question=vt.trim(),y==="liuyao"&&(A.direction=Oe)}if(y==="meihua"&&(A.mode=de,de==="number")){if(gt.trim()===""||ft.trim()===""){Ye("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),pe(null);return}if(A.upper=Number(gt),A.lower=Number(ft),!Number.isFinite(A.upper)||!Number.isFinite(A.lower)){Ye("两个数都要是数字,例如 17 和 29。"),pe(null);return}ht!==""&&(A.changing=Number(ht))}const Gn=Ha();y==="trend"&&!A.asOf&&Te.todayStamp&&(A.asOf=Te.todayStamp());const _a=U.compute(A),Zn=Ha()-Gn;let Et=null;try{Et=Z.shadowTrack?Z.shadowTrack(_a):null}catch{Et=null}let _t=null;if(y==="bazi")try{_t=U.compute({system:"trend",datetime:Ti,gender:Fe,toAge:100,trueSolar:Xa,lateZi:Ja,...Te.todayStamp?{asOf:A.asOf||Te.todayStamp()}:{},...A.dst!==void 0?{dst:A.dst}:{},...A.address?{address:A.address}:{},...typeof A.longitude=="number"?{longitude:A.longitude}:{},...A.geo?{geo:A.geo}:{}})}catch{_t=null}let Ot=null;if(U.caliberCompare)try{Ot=U.caliberCompare(A)}catch{Ot=null}const Un=Be(y)||y==="qimen"?{question:Be(y)?vt.trim():"",direction:Oe}:void 0,yt=U.interpret?U.interpret(_a,Un):null;yt&&_a.cross&&U.crossSection&&(yt.sections=[...yt.sections||[],U.crossSection(_a.cross)]);const Kn=$a(y)==="cast"&&(y!=="meihua"||de==="time");pe({kind:y,r:_a,it:yt,at:Ce,timed:Kn,trend:_t,caliber:Ot,shadowDiff:Et,gender:Fe,address:ba,trueSolar:Xa,lateZi:Ja});const Li=B=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>B>1?Li(B-1):Ei()):setTimeout(Ei,0)},Ei=()=>{Ci===Ie&&ge({engineMs:xa,computeMs:Zn,cached:Ai,totalMs:Ha()-Mi,renderMs:null})};if(Li(2),Ra(null),Ge(null),Ba({}),Ga(null),Ye(""),ha(""),y!=="tarot"&&y!=="mbti"){const B=!!(we&&Ve),_i={kind:y,date:Ce.date,time:B?"":Ce.time,hourUnknown:B,gender:Fe,address:ba,trueSolar:Xa,lateZi:Ja,lines:y==="liuyao"?Ni:"",question:Be(y)?vt.trim():"",direction:Oe,count:Mt,mhMode:de,upper:gt,lower:ft,changing:ht,...y==="qimen"?{qimenRule:We,qLateZi:Ma}:{},...y==="zeri"?{task:Ta,days:La,shengXiao:aa,zCand:ma}:{},...y==="xiaoliuren"?{xlrMode:Ee,num1:e,num2:r,num3:o}:{},...y==="trend"?{toAge:h}:{},...y==="fengshui"?{fsMode:w,fsPeriod:N,sitting:J,facing:M}:{},...y==="name"?{nnMode:W,surname:R,givenName:ue,limitN:ne}:{},...y==="convert"?{convMode:$e,lunarDate:Ue,leapMonth:ua}:{},...y==="hepan"?{hpChart:oa,partnerDate:xe,partnerTime:G,partnerGender:X,partnerAddress:se,thirdOn:De,p2Date:ka,p2Time:za,p2Gender:la,p2Address:qa}:{},label:Ri(y,_a),at:Date.now()};b(Yn=>{const Oi=[_i,...Yn.filter(Vn=>!Di(Vn,_i))].slice(0,20);return It(Oi),Oi})}}catch(xa){if(Wa())return;Ye(xa&&xa.message?xa.message:String(xa)),pe(null)}},dn=async a=>{const g=$a(a),S=++Ie;if(Ye(""),a==="mbti"){_e(""),mt(!0);try{await wt(a)}catch(y){S===Ie&&Ye(y&&y.message?y.message:String(y))}finally{S===Ie&&mt(!1)}if(S!==Ie)return;n(a),d.filter(y=>y!=null).length>=Xe?Me(a):pe(null);return}if(n(a),g==="none"){Me(a);return}const _=Tt[g]||(g==="cast"||g==="date"?jt():{date:Xt.date,time:Xt.time});I(_.date),oe(_.time),Me(a,_)},cn=a=>{Pe.some(g=>g.k===a)&&Se(g=>{const S=(g||[]).filter(y=>y&&y.tab&&y.tab!==a),_=[{tab:a,at:Date.now()}].concat(S).slice(0,Kt);return Vt(Zt,_),_})},bi=a=>{const g=a==="flat"?"flat":"group";fe(g),Vt(Ut,g)},Lt=a=>{cn(a),dn(a)},mn=a=>{I(a),He!=="none"&&bt(g=>Object.assign({},g,{[He]:{date:a,time:ae}}))},un=a=>{oe(a),He!=="none"&&bt(g=>Object.assign({},g,{[He]:{date:j,time:a}}))},Jn=()=>{const a=jt();I(a.date),oe(a.time),He!=="none"&&bt(g=>Object.assign({},g,{[He]:null})),Me(s,a)},xi=()=>{if(s==="mbti"){const a=d.filter(g=>g!=null).length;if(a<Xe){_e(`先答满 ${Xe} 题再看结果(现答 ${a} 题,还差 ${Xe-a} 题)。`);return}Me(s);return}if(He!=="none"&&!Tt[He]){const a=jt();I(a.date),oe(a.time),Me(s,a);return}Me(s)},gn=()=>{const a={date:"1990-05-12",time:"14:30"};n("bazi"),t("male"),D("河北石家庄"),bt(g=>Object.assign({},g,{birth:a})),I(a.date),oe(a.time),Me("bazi",a,null,{gender:"male",address:"河北石家庄"})},vi=a=>{di(a),Me(s,{date:j,time:ae},a)},fn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),hn=()=>li===null?fn():li,xt=(a,g,S)=>{if(!g)return;const _=de=>{a.textContent=de?"已复制":"复制失败",setTimeout(()=>{a.textContent=S},1400)},y=()=>{try{const de=document.createElement("textarea");de.value=g,de.setAttribute("readonly",""),de.style.position="fixed",de.style.opacity="0",document.body.appendChild(de),de.select();const we=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(de),we}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>_(!0),()=>_(y()));return}}catch{}_(y())},bn=a=>xt(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),xn=a=>xt(a,a.getAttribute("data-handle-copy")||"","复制句柄"),vn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),S=g&&g.querySelector("[data-trace-md]");xt(a,S?S.value:"","复制 Markdown")},yn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},$n=()=>{if(!x||!x.r)return null;try{return U.askPackages?U.askPackages(x.r,{question:At(),interpret:x.it,base:yn()}):null}catch{return null}},yi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],wn=(a,g)=>{const S=$n();if(!S){Ne("还没有可以复制的盘:先排一张。");return}const _=a==="link"?S.link:S[a];if(!_){Ne(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}xt(g,_,yi.find(y=>y[0]===a)[1]),a==="link"&&Ne("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},kn=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const g=a.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},$i=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},zn=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){bn(g);return}const S=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(S){xn(S);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){kn();return}const y=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(y){vn(y);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){Sn();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){$i();return}const Ve=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!Ve)return;const Ce=Ve.closest(".mp-it");if(!Ce)return;const Fe=!Ce.classList.contains("folded");Ce.classList.toggle("folded",Fe),Ve.setAttribute("aria-expanded",Fe?"false":"true");const ba=Ve.querySelector(".mp-it-hint");ba&&(ba.textContent=Fe?"点击展开":"点击收起"),on(Fe)},wi=(a,g)=>{if(!x||!(Be(s)||s==="qimen"))return;const S={question:Be(s)?(g===void 0?na:g).trim():"",direction:a===void 0?Oe:a},_=U.interpret?U.interpret(x.r,S):null;let y=x.r;if((s==="liuyao"||s==="qimen")&&y&&y.trace&&U.buildTrace)try{const de=s==="liuyao"?U.buildTrace(y,{direction:S.direction,gender:y.useGod&&y.useGod.gender||"male",refresh:!0}):U.buildTrace(y,{direction:S.direction});de&&(y=Object.assign({},y,{trace:de}))}catch{}pe(Object.assign({},x,{r:y,it:_}))},jn=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,qn=()=>{try{const a=x&&x.r&&x.r.summary?x.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>ha("已复制"),()=>ha("复制失败"))}catch{ha("复制失败")}},Sn=()=>{if(!x||!x.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Te&&Te.kindOfDirection?Te.kindOfDirection(Oe):"other";let g;try{g=window.Engine.buildEventPrompt(x.r,{question:(na||"").trim(),kind:a,gender:ye,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>ha("已复制问事提示"),()=>ha("复制失败"))},ki=()=>{if(!(!x||!x.r||!ea.trim()))try{Ra(U.followup?U.followup(x.r,ea.trim()):null)}catch(a){Ra({question:ea.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Nn=()=>{if(!(!x||!x.r))try{const a=U.askPrompt?U.askPrompt(x.r,{question:At(),interpret:x.it}):null,g=a&&a.text?a.text:String(x.r.summary||"");if(ti(g)){Ne("已发到对话窗,往下看回复。");return}const S="("+Jt()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Ne("对话输入框还没就绪"+S+",已复制提问;粘进对话窗回车即可。"),()=>Ne("对话输入框还没就绪"+S+",复制也没成功;先点「复制文字结果」再贴。")):Ne("对话输入框还没就绪"+S+";先点「复制文字结果」再贴进对话窗。")}catch(a){Ne("发到对话窗失败:"+(a&&a.message?a.message:a))}},Mn=()=>{const a=[],g=window.__MP_VER||"未知";a.push("# 命理插件反馈"),a.push(""),a.push("## 我遇到的情况"),a.push(""),a.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),a.push(""),a.push("## 复现信息"),a.push(""),a.push("- 插件版本:v"+g);{const y=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];y.length&&a.push("- 未发版改动:"+y.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const S=Pe.find(y=>y.k===s)?.label||s;if(a.push("- 体系:"+S+(S===s?"":"("+s+")")),na&&a.push("- 所问之事:"+na),Oe&&Oe!=="general"){const y=(Array.isArray(U.DIRECTIONS)?U.DIRECTIONS:[]).find(de=>de.key===Oe);a.push("- 询问方向:"+(y?y.label:Oe))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),($a(s)==="time"||$a(s)==="date")&&(a.push(`日期:${j}`),$a(s)==="time"&&a.push(`时刻:${ce?"(未知,按三柱排)":ae}`),a.push(`性别:${ye==="male"?"男":"女"}`),ke&&a.push(`出生地:${ke}`),a.push(`真太阳时:${Re?"开":"关"} 晚子时换日:${Qe?"开":"关"}`),s==="qimen"&&a.push(`奇门取局:${We}`),Da&&a.push("交叉验证:开"));const _={合盘:()=>{a.push(`对方:${xe} ${G} ${X==="male"?"男":"女"}${se?" "+se:""}(${oa} 盘)`),De&&a.push(`第三方:${ka} ${za} ${la==="male"?"男":"女"}${qa?" "+qa:""}`)},择日:()=>{a.push(`事项:${Ta} 起算:${j} 天数:${La}${aa?" 属相:"+aa:""}${ma?" 候选日:"+ma:""}`)},起名:()=>{a.push(`姓:${R||"(未填)"} 名:${ue||"(未填)"} 模式:${W}${W==="generate"?" 候选数:"+(ne||"默认"):""}`)},公农历:()=>{a.push(`模式:${$e}${Ue?" 农历输入:"+Ue:""}${ua?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${Ee}${Ee==="number"?` 报数:${e}/${r}/${o}`:""}`)},风水:()=>{a.push(`动作:${w}${w==="natal"?"":` 坐:${J} 向:${M}`}${w==="xuankong"?` 运:${N}`:""}`)}};if(_[S]&&_[S](),a.push("```"),a.push(""),ga&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(ga)),a.push("```"),a.push("")),x&&x.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const y=String(x.r.summary||(U.renderText?U.renderText(x.r):"")||"");a.push(y.split(`
2224
2355
  `).slice(0,40).join(`
2225
- `)),t.push("```"),f.r.handle&&(t.push(""),t.push("排盘句柄(开发者可据此复现同一张盘):`"+f.r.handle+"`"))}else t.push("### 结果摘要"),t.push(""),t.push("(这次没有生成盘面——如果是在排盘过程中出错,上面的「报错原文」就是关键。)");return t.push(""),t.push("## 联系渠道"),t.push(""),t.push("- GitHub issue:https://github.com/xuanfu-web/dsh-metaphysics/issues"),t.push("- 邮件:1129440028@qq.com"),t.push("- 微信群:dsh-metaphysics"),t.join(`
2226
- `)},wi=()=>{const t=Mn();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t).then(()=>{re("已复制"),v("粘到 issue / 邮件 / 群里即可")}).catch(()=>{re("复制失败"),v("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=t,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const N=document.execCommand&&document.execCommand("copy");g.remove(),re(N?"已复制":"复制失败"),v(N?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{re("复制失败"),v("可改用「导出 .md」")}setTimeout(()=>{re(""),v("")},4e3)},An=()=>{try{wi()}catch{}const t=encodeURIComponent("[反馈] "+(He.find(g=>g.k===n)?.label||n)+(gt?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+t,"_blank","noopener")}catch{v("浏览器拦了弹窗,请手动打开 GitHub issues")}},Cn=()=>{if(!(!f||!f.r))try{const t=K.renderText?K.renderText(f.r):f.r.summary||"",g=new Blob([t],{type:"text/markdown;charset=utf-8"}),N=document.createElement("a");N.href=URL.createObjectURL(g),N.download=`命理报告-${f.r.system}.md`,document.body.appendChild(N),N.click(),N.remove(),setTimeout(()=>URL.revokeObjectURL(N.href),2e3)}catch(t){console.error("[metaphysics] 导出失败",t)}},Tn=()=>{if(!(!f||!f.r))try{const t=B.summaryCardPNG?B.summaryCardPNG(f.r,f.it):"";if(!t){ht("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=t,g.download=`命理摘要-${f.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(t){console.error("[metaphysics] 长图导出失败",t)}},ki={fontSize:12,padding:"5px 12px"},Ln=()=>{!f||!f.r||!f.r.past||ta(K.verifyFit?K.verifyFit(f.r.past.rows,It):null)},En=()=>{if(!(!f||f.kind!=="bazi"))try{const t=f.at||{date:q,time:V},[g,N,E]=String(t.date).split("-").map(Number),[,y]=String(t.time).split(":").map(Number),ne=pt.filter(ye=>Number(ye.year)).map(ye=>({year:Number(ye.year),kind:ye.kind}));Gt(K.rectifyBirth?K.rectifyBirth({base:{year:g,month:N,day:E,minute:Number.isFinite(y)?y:0},gender:f.gender||a,events:ne,lateZi:typeof f.lateZi=="boolean"?f.lateZi:ot,trueSolar:typeof f.trueSolar=="boolean"?f.trueSolar:Oe,address:String(f.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(t){Gt({error:t&&t.message?t.message:String(t)})}},J=(t,g)=>p("label",{className:"mp-field"},p("span",{className:"mp-lbl"},t),g),_n=t=>{s(t.kind),t.date&&P(t.date),t.time&&ee(t.time),se(!!t.hourUnknown),t.gender&&ge(t.gender),F(t.address||""),typeof t.trueSolar=="boolean"&&St(t.trueSolar),typeof t.lateZi=="boolean"&&Nt(t.lateZi),L(t.lines||""),qa(t.question||""),oi(t.direction||"general"),si(t.count||"3"),pi(t.mhMode||"time"),li(t.upper||""),di(t.lower||""),ci(t.changing||""),t.kind==="qimen"&&(typeof t.qimenRule=="string"&&Ft(t.qimenRule),typeof t.qLateZi=="string"&&Mt(t.qLateZi)),t.kind==="zeri"&&(typeof t.task=="string"&&ia(t.task),t.days!=null&&Ne(String(t.days)),typeof t.shengXiao=="string"&&Ct(t.shengXiao),typeof t.zCand=="string"&&Bt(t.zCand)),t.kind==="xiaoliuren"&&(o(t.xlrMode==="number"?"number":"time"),t.num1!=null&&d(String(t.num1)),t.num2!=null&&u(String(t.num2)),t.num3!=null&&b(String(t.num3))),t.kind==="trend"&&t.toAge!=null&&X(String(t.toAge)),t.kind==="fengshui"&&(typeof t.fsMode=="string"&&w(t.fsMode),t.fsPeriod!=null&&te(String(t.fsPeriod)),typeof t.sitting=="string"&&oe(t.sitting),typeof t.facing=="string"&&ce(t.facing)),t.kind==="name"&&(typeof t.nnMode=="string"&&O(t.nnMode),typeof t.surname=="string"&&$e(t.surname),typeof t.givenName=="string"&&pe(t.givenName),t.limitN!=null&&Fe(String(t.limitN))),t.kind==="convert"&&(typeof t.convMode=="string"&&Zt(t.convMode),typeof t.lunarDate=="string"&&e(t.lunarDate),typeof t.leapMonth=="boolean"&&r(t.leapMonth)),t.kind==="hepan"&&(t.hpChart&&kt(t.hpChart),typeof t.partnerDate=="string"&&he(t.partnerDate),typeof t.partnerTime=="string"&&Z(t.partnerTime),typeof t.partnerGender=="string"&&Y(t.partnerGender),typeof t.partnerAddress=="string"&&wt(t.partnerAddress),typeof t.thirdOn=="boolean"&&_t(t.thirdOn),typeof t.p2Date=="string"&&$a(t.p2Date),typeof t.p2Time=="string"&&jt(t.p2Time),typeof t.p2Gender=="string"&&Ht(t.p2Gender),typeof t.p2Address=="string"&&Ot(t.p2Address)),ra(!1),ei(t)},Hn=()=>{we([]),Fa([])},On=["bazi","ziwei","trend","chenggu"],zi=t=>{s(t.kind),P(t.date),t.time&&ee(t.time),se(!!t.hourUnknown),t.gender&&ge(t.gender),F(t.address||""),St(t.trueSolar!==!1),Nt(t.lateZi!==!1)},Fn=t=>{const g=B.profEvent(t.target);if(!g)return;const N=y=>ti.find(ne=>ne.id===y),E=t.currentTarget.querySelector(".mp-prof-name");if(ii(""),g.action==="use"){const y=N(g.id);if(!y)return;if(!B.profUsable(y)){Ae("这张档案没有出生时刻,先补上时刻再存一次。");return}Ve="",na(B.profilesTouch(y.id)),zi(y),je(y.kind,{date:y.date,time:y.hourUnknown?"12:00":y.time},void 0,{gender:y.gender||void 0,address:y.address||"",hourUnknown:!!y.hourUnknown,trueSolar:y.trueSolar!==!1,lateZi:y.lateZi!==!1});return}if(g.action==="edit"){const y=N(g.id);if(!y)return;zi(y),Ve=y.label,sa(y.id);return}if(g.action==="cancel"){Ve="",sa(null);return}if(g.action==="pin"){na(B.profilesPin(g.id));return}if(g.action==="del"){if(ai!==g.id){ii(g.id);return}na(B.profilesRemove(g.id)),Ut===g.id&&(Ve="",sa(null)),Ae("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const y=Ut,ne=B.profFromForm({kind:n,date:q,time:V,hourUnknown:ae,gender:a,address:ze,trueSolar:Oe,lateZi:ot},E?E.value:Ve,Ut||void 0);if(!ne){Ae("先填好出生日期(和时刻),再存档案。");return}const ye=B.profilesPut(ne);if(!ye.ok){Ae("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}na(ye.list),Ve="",sa(null),E&&(E.value=""),Ae(`${y?"已更新档案":"已存入我的命盘"}「${ye.item.label}」。`)}},Dn=t=>{const g=t.target&&t.target.closest?t.target.closest(".mp-prof-name"):null;g&&(Ve=g.value)},Pn=t=>{const g=K.formOf?K.formOf(t):null;if(!g){je("ziwei");return}const N=He.some(ye=>ye.k===g.tab)?g.tab:"ziwei",E={date:g.date||q,time:g.time||V},y=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&P(g.date),g.time&&ee(g.time),g.gender&&ge(g.gender),typeof g.address=="string"&&F(g.address),typeof g.trueSolar=="boolean"&&St(g.trueSolar),typeof g.lateZi=="boolean"&&Nt(g.lateZi),y!==void 0&&L(y),g.question&&qa(g.question),s(N);const ne=K.restNote?K.restNote(g):"";Ce(`已按深链还原:${t.label}${g.question?`|${g.question}`:""}${ne?` ${ne}`:""}`),je(N,E,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:y,question:g.question})};vt(()=>{let t=!1;const g=De;return(async()=>{let N=null;try{await ha(n);const E=typeof location<"u"?String(location.href):"";E&&E.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(N=window.Engine.parseAskLink(E))}catch{N=null}if(!(t||De!==g)){if(N&&N.ok)try{Pn(N);return}catch{}je("ziwei")}})(),()=>{t=!0}},[]),vt(()=>{if(!za)return;const t=za.kind;ei(null),je(t)},[za]),vt(()=>{const t=g=>{if(g.key!=="Escape")return;const N=document.getElementById("mp-trace-layer");N&&N.classList.contains("open")&&vi()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[]);const ji=(ut||[]).filter(t=>t&&He.some(g=>g.k===t.tab)).slice(0,Ga),Rn=t=>(He.find(g=>g.k===t)||{}).label||t,In=({k:t,label:g,tip:N,wide:E})=>p("button",{key:t,type:"button",className:"mp-tool"+(E?" wide":"")+(n===t?" on":""),"data-tab":t,onClick:()=>Ma(t)},p("b",null,g),p("span",null,N)),Gn=[p("div",{key:"profiles",className:"mp-profwrap",onClick:Fn,onInput:Dn,dangerouslySetInnerHTML:{__html:B.profilesHTML(ti,{editingId:Ut,armedDel:ai,bar:On.indexOf(n)>=0?B.profilesBarHTML({editingId:Ut,name:Ve}):""})}}),p("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},p("div",{className:"mp-start-top"},p("div",{className:"mp-recent",hidden:ji.length===0},p("span",{className:"mp-recent-lbl"},"最近用过"),p("span",{className:"mp-recent-list"},ji.map(t=>p("button",{key:t.tab,type:"button",className:"mp-rc",onClick:()=>Ma(t.tab)},Rn(t.tab),p("i",null,Yi(t.at)))))),p("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},p("button",{type:"button",className:xe==="group"?"on":"","aria-pressed":xe==="group"?"true":"false",onClick:()=>fi("group")},"分组"),p("button",{type:"button",className:xe==="flat"?"on":"","aria-pressed":xe==="flat"?"true":"false",onClick:()=>fi("flat")},"平铺"))),xe==="group"?p("div",{className:"mp-groups"},Ki.map(t=>{const g=!!an[t.title],N=Math.max(0,t.items.length-4);return p("section",{key:t.title,className:"mp-tgroup"+(g?" open":"")},p("div",{className:"mp-tgroup-head"},p("h2",null,t.title),p("p",null,t.hint)),p("div",{className:"mp-ttools"},t.items.map(In),N>0?p("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>nn(E=>Object.assign({},E,{[t.title]:!g}))},g?"收起":`还有 ${N} 个`):null))})):null),p("div",{key:"tabs",className:"mp-tabs"+(xe==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},He.map(t=>p("button",{key:t.k,role:"tab","aria-selected":n===t.k?"true":"false",tabIndex:n===t.k?0:-1,className:"mp-tab"+(n===t.k?" on":""),onClick:()=>Ma(t.k)},t.label))),p("div",{key:"head",className:"mp-panel"},p("div",{className:"mp-row"},ui?J(Kt?"出生日期(公历)":Ee==="date"?"日期(公历)":"起卦日期(公历)",p(xa,{value:q,onChange:mn,onInvalid:()=>Ae("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,gi?J(Kt?"出生时刻":"起卦时刻",p("input",{className:"mp-input",type:"time",value:V,disabled:ae&&(n==="bazi"||n==="trend"),onChange:t=>un(t.target.value)})):null,n==="bazi"||n==="trend"?p("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},p("input",{type:"checkbox",checked:ae,onChange:t=>se(t.target.checked)})," 时辰未知"):null,Kt?J("性别",p("select",{className:"mp-input",value:a,onChange:t=>ge(t.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,Kt?J("出生地(省/市即可)",p("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:ze,onChange:t=>F(t.target.value)})):null,n==="bazi"||n==="ziwei"?p("label",{className:"mp-field mp-checks"},p("input",{type:"checkbox",checked:We,onChange:t=>Pt(t.target.checked)}),p("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?J("对方出生日期",p(xa,{value:fe,onChange:he,onInvalid:()=>Ae("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?J("对方出生时刻",p("input",{className:"mp-input",type:"time",value:G,onChange:t=>Z(t.target.value)})):null,n==="hepan"?J("对方性别",p("select",{className:"mp-input",value:R,onChange:t=>Y(t.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,n==="hepan"?J("合盘方式",p("div",{className:"mp-seg"},p("button",{className:nt==="bazi"?"on":"",onClick:()=>kt("bazi")},"八字"),p("button",{className:nt==="ziwei"?"on":"",onClick:()=>kt("ziwei")},"紫微"))):null,n==="hepan"?J("对方出生地(可空)",p("input",{className:"mp-input",placeholder:"如 四川成都",value:ve,onChange:t=>wt(t.target.value)})):null,n==="hepan"?p("label",{className:"mp-field mp-checks"},p("input",{type:"checkbox",checked:Se,onChange:t=>_t(t.target.checked)}),p("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Se?J("第三方出生日期",p(xa,{value:Xe,onChange:$a,onInvalid:()=>Ae("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Se?J("第三方出生时刻",p("input",{className:"mp-input",type:"time",value:zt,onChange:t=>jt(t.target.value)})):null,n==="hepan"&&Se?J("第三方性别",p("select",{className:"mp-input",value:Re,onChange:t=>Ht(t.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,n==="hepan"&&Se?J("第三方出生地(可空)",p("input",{className:"mp-input",placeholder:"如 广东广州",value:st,onChange:t=>Ot(t.target.value)})):null,n==="qimen"?p("fieldset",{key:"qmr",className:"mp-qmrule"},p("legend",{className:"mp-lbl"},"换局规则"),p("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([t,g])=>p("label",{key:t,className:"mp-qmopt"},p("input",{type:"radio",name:"qimen_rule",value:t,checked:qt===t,onChange:()=>Ft(t)}),p("span",null,g)))),p("div",{className:"mp-field"},p("span",{className:"mp-lbl"},"晚子时"),p("select",{className:"mp-input",value:Dt,onChange:t=>Mt(t.target.value)},p("option",{value:"same-day"},"23:00 后归当日"),p("option",{value:"next-day"},"23:00 后归次日"))),p("details",{className:"mp-qmhelp"},p("summary",null,"三种规则有什么区别?"),p("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,Pe(n)||n==="qimen"?J(n==="qimen"?"询问方向(定用神)":"询问方向",p("select",{className:"mp-input",value:Le,onChange:t=>{oi(t.target.value),yi(t.target.value)}},(K.DIRECTIONS||[]).map(t=>p("option",{key:t.key,value:t.key},t.label)))):null,n==="tarot"?J("张数",p("select",{className:"mp-input",value:ja,onChange:t=>si(t.target.value)},p("option",{value:"1"},"1 张 · 指引"),p("option",{value:"3"},"3 张 · 过去现在未来"),p("option",{value:"5"},"5 张 · 十字牌阵"))):null,n==="liuyao"?J("六爻(可空)",p("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:be,onChange:t=>L(t.target.value)})):null,n==="meihua"?J("起卦方式",p("div",{className:"mp-seg"},p("button",{className:ft==="time"?"on":"",onClick:()=>xi("time")},"时间"),p("button",{className:ft==="number"?"on":"",onClick:()=>xi("number")},"数字"))):null,n==="meihua"&&ft==="number"?J("第一个数",p("input",{className:"mp-input",value:pa,placeholder:"如 17",onChange:t=>li(t.target.value)})):null,n==="meihua"&&ft==="number"?J("第二个数",p("input",{className:"mp-input",value:la,placeholder:"如 29",onChange:t=>di(t.target.value)})):null,n==="meihua"&&ft==="number"?J("动爻(可空)",p("input",{className:"mp-input",value:da,placeholder:"1-6",onChange:t=>ci(t.target.value)})):null,n==="zeri"?J("所办事项",p("select",{className:"mp-input",value:lt,onChange:t=>ia(t.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([t,g])=>p("optgroup",{key:t,label:t},g.map(N=>p("option",{key:`${t}-${N}`,value:N},N)))))):null,n==="convert"?J("转换方向",p("div",{className:"mp-seg"},p("button",{className:Be==="solar2lunar"?"on":"",onClick:()=>Zt("solar2lunar")},"公历 → 农历"),p("button",{className:Be==="lunar2solar"?"on":"",onClick:()=>Zt("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&Be==="lunar2solar"?J("农历日期",p("input",{className:"mp-input",value:dt,placeholder:"如 2026-9-17",onChange:t=>e(t.target.value)})):null,n==="convert"&&Be==="lunar2solar"?p("label",{className:"mp-check"},p("input",{type:"checkbox",checked:i,onChange:t=>r(t.target.checked)})," 闰月"):null,n==="zeri"?J("看多少天",p("input",{className:"mp-input",type:"number",min:1,max:60,value:At,onChange:t=>Ne(t.target.value)})):null,n==="zeri"?J("候选日(可空,只比这几天)",p("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:Ge,onChange:t=>Bt(t.target.value)})):null,n==="zeri"?J("当事人属相(可空)",p("select",{className:"mp-input",value:Te,onChange:t=>Ct(t.target.value)},p("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(t=>p("option",{key:t,value:t},t)))):null,n==="xiaoliuren"?J("起课方式",p("div",{className:"mp-seg"},p("button",{className:l==="time"?"on":"",onClick:()=>o("time")},"时间"),p("button",{className:l==="number"?"on":"",onClick:()=>o("number")},"报数"))):null,n==="xiaoliuren"&&l==="number"?J("第一个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:c,onChange:t=>d(t.target.value)})):null,n==="xiaoliuren"&&l==="number"?J("第二个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:m,onChange:t=>u(t.target.value)})):null,n==="xiaoliuren"&&l==="number"?J("第三个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:h,onChange:t=>b(t.target.value)})):null,n==="mbti"?p("div",{className:"mp-quiz-wrap"},p("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),p(Bi,{answers:C,page:T,onPick:(t,g)=>S(N=>{const E=N.slice();return E[t]=g,E}),onPage:t=>j(g=>Math.max(0,Math.min(g+t,Math.max(0,Math.ceil(ea().total/Jt)-1)))),onSubmit:hi,onClear:()=>{S(new Array(ea().total).fill(null)),j(0),U(null)}})):null,n==="trend"?J("算到几岁",p("input",{className:"mp-input",type:"number",min:10,max:100,value:_,onChange:t=>X(t.target.value)})):null,n==="fengshui"?J("看什么",p("div",{className:"mp-seg"},p("button",{className:H==="natal"?"on":"",onClick:()=>w("natal")},"命卦"),p("button",{className:H==="advise"?"on":"",onClick:()=>w("advise")},"门主灶"),p("button",{className:H==="xuankong"?"on":"",onClick:()=>w("xuankong")},"玄空"))):null,n==="fengshui"&&H!=="natal"?J("坐山(24 山)",p("input",{className:"mp-input",value:D,placeholder:"如 子 / 乾",onChange:t=>oe(t.target.value)})):null,n==="fengshui"&&H!=="natal"?J("朝向(24 山)",p("input",{className:"mp-input",value:$,placeholder:"如 午 / 巽",onChange:t=>ce(t.target.value)})):null,n==="fengshui"&&H==="xuankong"?J("运(1–9)",p("input",{className:"mp-input",type:"number",min:1,max:9,value:z,onChange:t=>te(t.target.value)})):null,n==="name"?J("看什么",p("div",{className:"mp-seg"},p("button",{className:k==="assess"?"on":"",onClick:()=>O("assess")},"评名字"),p("button",{className:k==="generate"?"on":"",onClick:()=>O("generate")},"生成候选"))):null,n==="name"?J("姓",p("input",{className:"mp-input",value:Q,placeholder:"如 李",onChange:t=>$e(t.target.value)})):null,n==="name"&&k==="assess"?J("名字",p("input",{className:"mp-input",value:ue,placeholder:"如 沐宸",onChange:t=>pe(t.target.value)})):null,n==="name"&&k==="generate"?J("候选个数",p("input",{className:"mp-input",type:"number",min:1,max:20,value:me,onChange:t=>Fe(t.target.value)})):null),Kt?p("div",{className:"mp-checks"},p("label",{title:"按出生地经度把钟表时间换算成真太阳时"},p("input",{type:"checkbox",checked:Oe,onChange:t=>St(t.target.checked)}),"真太阳时"),p("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},p("input",{type:"checkbox",checked:ot,onChange:t=>Nt(t.target.checked)}),"晚子时换日"),p("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},p("input",{type:"checkbox",checked:Ze,onChange:t=>ct(t.target.checked)}),"联网精确到区县")):null,Pe(n)?p("div",{className:"mp-askblock"},p("span",{className:"mp-lbl"},"所问之事(必填)"),p("textarea",{className:"mp-textarea"+(rn?" invalid":""),rows:2,value:at,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:t=>{qa(t.target.value),ra(!1)},onBlur:t=>yi(void 0,t.target.value)})):null,n==="mbti"?null:p("div",{key:"actions",className:"mp-actions"},p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:gn,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),p("button",{className:"mp-btn",onClick:hi,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":ba.indexOf(n)>=0?"看结果":"起卦"))),p("div",{key:"hint",className:"mp-hint"},ln.hint),ke.length?p("div",{key:"hist",className:"mp-hist"},p("div",{className:"mp-hist-h"},p("span",null,"最近排过"),p("button",{className:"mp-hist-clear",onClick:Hn},"清空")),p("div",{className:"mp-hist-list"},ke.map((t,g)=>p("button",{key:g,className:"mp-hist-item",title:`${String(t.date||"")} ${t.hourUnknown?"时辰未知":String(t.time||"")}`,onClick:()=>_n(t)},p("b",null,(He.find(N=>N.k===t.kind)||{}).label||t.kind),p("span",null,t.label||"—"),p("i",null,`${String(t.date||"").slice(5)} ${t.hourUnknown?"时辰未知":String(t.time||"")}`))))):null,Ee==="cast"&&mi?p("div",{key:"auto",className:"mp-auto"},Na.cast?`起卦时刻用的是你手动填的(${V});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${V}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,gt?p("div",{key:"err",className:"mp-err",role:"alert"},gt):null,ni?p("div",{key:"ntc",className:"mp-note",role:"status"},ni):null,sn?p("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!f&&!gt?p("div",{key:"empty",className:"mp-empty"},p("b",null,n==="ziwei"||n==="bazi"?"填好出生信息,点「排盘」":n==="tarot"?"写下想问的事,点「抽牌」":n==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":ba.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":ba.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,f?p("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:zn,dangerouslySetInnerHTML:{__html:jn(f)+B.perfHTML(le)+B.revisionHTML(f.r.revision)+B.handleHTML(f.r.handle)+B.shadowHTML(f.r.shadow,f.shadowDiff)+B.traceHTML(f.r.trace,f.r.system,f.r.traceText)+B.resultWithInterpret(f.kind==="ziwei"?B.ziweiHTML(f.r):f.kind==="bazi"?B.baziHTML(f.r)+(f.trend?B.trendHTML(f.trend,{brief:!1}):""):f.kind==="meihua"?B.meihuaHTML(f.r):f.kind==="daliuren"?B.daliurenHTML(f.r):f.kind==="qimen"?B.qimenHTML(f.r)+B.qimenFactsHTML(f.r):f.kind==="hepan"?f.r.chart==="ziwei"?B.ziweiHepanHTML(f.r):B.hepanHTML(f.r):f.kind==="tarot"?B.tarotHTML(f.r):f.kind==="liuyao"?B.liuyaoHTML(f.r):f.kind==="chenggu"?B.chengguHTML(f.r):f.kind==="almanac"?B.almanacHTML(f.r):f.kind==="zeri"?B.zeriHTML(f.r):f.kind==="trend"?B.trendHTML(f.r):f.kind==="name"?B.nameHTML(f.r):f.kind==="mbti"?B.mbtiHTML(f.r):f.kind==="fengshui"?B.fengshuiHTML(f.r):B.quickHTML(f.r),f.it,{folded:hn()})+B.caliberHTML(f.caliber)}}):null,f?p("div",{key:"bar",className:"mp-bar"},p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:qn},pn||"复制文字结果"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Cn,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Tn,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,f?p("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},p("input",{className:"mp-input",value:Je,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:t=>wa(t.target.value),onKeyDown:t=>{t.key==="Enter"&&$i()}}),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:$i},"追问"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Nn,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),W.ref?null:p("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},Ka()),Rt?p("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Rt):null):null,f?p("div",{key:"bridge",className:"mp-bridge"},p("span",{className:"mp-bridge-lbl"},W.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),bi.map(([t,g,N])=>p("button",{key:t,type:"button",className:"mp-chip","data-bridge-copy":t,title:N,onClick:E=>wn(t,E.currentTarget)},g))):null,Ie?p("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:B.followupHTML(Ie)}}):null,f&&f.kind==="bazi"&&f.r.past?p("div",{key:"verify",className:"mp-verify"},p("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),f.r.past.rows.map(t=>p("div",{key:t.year,className:"mp-verify-row"},p("span",{className:"mp-verify-txt"},`${t.year} ${t.ganzhi} · ${t.theme}`),p("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>p("button",{key:g,className:"mp-chip"+(It[t.year]===g?" on":""),onClick:()=>et(Object.assign({},It,{[t.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),p("div",{className:"mp-verify-foot"},p("button",{className:"mp-btn ghost",style:ki,onClick:Ln},"算贴合度"),rt?p("span",{className:"mp-verify-fit"},`命中 ${rt.yes}/${rt.answered}(${rt.level}):${rt.advice}`):null)):null,f&&f.kind==="bazi"?p("div",{key:"rect",className:"mp-rect"},p("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),pt.map((t,g)=>p("div",{key:g,className:"mp-rect-row"},p("input",{className:"mp-input",type:"number",min:1900,max:2100,value:t.year,onChange:N=>aa(pt.map((E,y)=>y===g?Object.assign({},E,{year:N.target.value}):E))}),p("select",{className:"mp-input",value:t.kind,onChange:N=>aa(pt.map((E,y)=>y===g?Object.assign({},E,{kind:N.target.value}):E))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([N,E])=>p("option",{key:N,value:N},E))))),p("button",{className:"mp-btn ghost",style:ki,onClick:En},"计算候选时辰"),tt?tt.error?p("div",{className:"mp-rect-err"},tt.error):p("div",{className:"mp-rect-out"},p("div",{className:"mp-verify-fit"},tt.note),tt.candidates.slice(0,6).map(t=>p("div",{key:t.hour,className:"mp-rect-cand"+(t===tt.best?" best":"")},`${t.label} · 时柱 ${t.hourGanzhi} · 日柱 ${t.dayGanzhi} · 命中 ${t.hits}/${t.total}`))):null):null,!f&&!gt?p("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,p("div",{key:"fb",className:"mp-fb"},p("div",{className:"mp-fb-h"},p("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:wi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},de||"复制反馈报告"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>An(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),p("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",x?p("span",{className:"mp-fb-note"}," "+x):null))];return p("div",{className:"mp-wrap"},Gn)}function Qi(n){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(n)}catch(s){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",s)}try{const s=document.createElement("style");return s.setAttribute("data-plugin","@local/metaphysics"),s.textContent=n,document.head.appendChild(s),()=>s.remove()}catch(s){return console.error("[metaphysics] DOM 注入样式也失败",s),()=>{}}}let Qa=!1;function ya(){try{const n=document.documentElement;if(!n||!document.body)return;const s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(s);const q=getComputedStyle(s).backgroundColor;s.remove();const P=Me&&typeof Me.pickOnColor=="function"?Me.pickOnColor(q):"";P&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==P&&n.style.setProperty("--mp-on-brand",P)}catch{}}function en(){if(!Qa){Qa=!0,ya();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",ya)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(ya).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function tn(n){try{const F=Qi(Pi+(B&&B.CSS?B.CSS:""));typeof n.effect=="function"&&typeof F=="function"&&n.effect(()=>F)}catch(F){console.error("[metaphysics] 样式注入失败",F)}try{en()}catch(F){console.error("[metaphysics] 字色同步失败",F)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(F){console.error("[metaphysics] 取 slots 服务失败",F)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{W.injectType=typeof s.inject;const F=typeof s.spec=="function"?s.spec("conversation.input.right"):null;W.spec=F?F.kind+"/"+F.scope:"未声明"}catch(F){W.spec="取声明失败",Ya(F)}const q=F=>{if(typeof F=="function")return F;if(F&&typeof F=="object"){for(const fe of["dispose","off","cancel","unregister"])if(typeof F[fe]=="function")return()=>{try{F[fe]()}catch{}}}return()=>{}},P=(F,fe)=>{try{const he=s.register(F,fe);return W.regs+=1,W.seatOk[F.name]=!0,q(he)}catch(he){return Ya(he),()=>{}}},V=(F,fe)=>{const he=()=>{const G=fe();return W.contribution=(W.contribution?W.contribution+",":"")+(F+(typeof G=="function"?" 已挂上":" 未挂上")),G};try{typeof s.inject=="function"?s.inject(F,he):he()}catch(G){console.error("[metaphysics] 等待槽位失败:"+F,G);try{he()}catch(Z){console.error("[metaphysics] 直接注册也失败:"+F,Z)}}};V("sidebar.panellist",()=>P({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},Ui)),V("main",()=>P({name:"main",key:"metaphysics"},F=>p(Zi,null,p(Ji,F))));const ee=(F,fe)=>{const he=()=>{try{const Z=s.inject(F,fe);return W.contribution=(W.contribution?W.contribution+",":"")+(F.replace("conversation.","")+(typeof Z=="function"?" 已挂上":" 未挂上")),Z}catch(Z){console.error("[metaphysics] 槽位注册失败:"+F,Z);try{return fe()}catch(R){console.error("[metaphysics] 直接注册也失败:"+F,R);return}}};let G;try{typeof n.effect=="function"?G=n.effect(he,"metaphysics: "+F):G=he()}catch(Z){console.error("[metaphysics] effect 包裹失败:"+F,Z),G=he()}typeof G=="function"&&W.seatDisposers.push(G)};ee("conversation.input.right",()=>P({name:"conversation.input.right",id:"metaphysics-ask",order:40},Xa)),ee("conversation.composer.dock",()=>P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},Wa));let ae=!1;const se=()=>{W.ref||ae||(ae=!0,W.seatOk["conversation.input.right"]||P({name:"conversation.input.right",id:"metaphysics-ask",order:40},Xa),W.seatOk["conversation.composer.dock"]||P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},Wa))};let a=20;const ge=()=>!!(W.seatOk["conversation.input.right"]&&W.seatOk["conversation.composer.dock"]),ze=()=>{W.ref||a<=0||ge()||(a-=1,se(),!ge()&&setTimeout(ze,700))};try{setTimeout(ze,700)}catch{}try{document.addEventListener("pointerdown",()=>{ae=!1,se()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{tn(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});
2356
+ `)),a.push("```"),x.r.handle&&(a.push(""),a.push("排盘句柄(开发者可据此复现同一张盘):`"+x.r.handle+"`"))}else a.push("### 结果摘要"),a.push(""),a.push("(这次没有生成盘面——如果是在排盘过程中出错,上面的「报错原文」就是关键。)");return a.push(""),a.push("## 联系渠道"),a.push(""),a.push("- GitHub issue:https://github.com/xuanfu-web/dsh-metaphysics/issues"),a.push("- 邮件:1129440028@qq.com"),a.push("- 微信群:dsh-metaphysics"),a.join(`
2357
+ `)},zi=()=>{const a=Mn();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{be("已复制"),K("粘到 issue / 邮件 / 群里即可")}).catch(()=>{be("复制失败"),K("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=a,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const S=document.execCommand&&document.execCommand("copy");g.remove(),be(S?"已复制":"复制失败"),K(S?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{be("复制失败"),K("可改用「导出 .md」")}setTimeout(()=>{be(""),K("")},4e3)},Cn=()=>{try{zi()}catch{}const a=encodeURIComponent("[反馈] "+(Pe.find(g=>g.k===s)?.label||s)+(ga?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{K("浏览器拦了弹窗,请手动打开 GitHub issues")}},An=()=>{if(!(!x||!x.r))try{const a=U.renderText?U.renderText(x.r):x.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),S=document.createElement("a");S.href=URL.createObjectURL(g),S.download=`命理报告-${x.r.system}.md`,document.body.appendChild(S),S.click(),S.remove(),setTimeout(()=>URL.revokeObjectURL(S.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},Tn=()=>{if(!(!x||!x.r))try{const a=Z.summaryCardPNG?Z.summaryCardPNG(x.r,x.it):"";if(!a){ha("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`命理摘要-${x.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},ji={fontSize:12,padding:"5px 12px"},Ln=()=>{!x||!x.r||!x.r.past||Ge(U.verifyFit?U.verifyFit(x.r.past.rows,Ia):null)},En=()=>{if(!(!x||x.kind!=="bazi"))try{const a=x.at||{date:j,time:ae},[g,S,_]=String(a.date).split("-").map(Number),[,y]=String(a.time).split(":").map(Number),de=Ze.filter(we=>Number(we.year)).map(we=>({year:Number(we.year),kind:we.kind}));Ga(U.rectifyBirth?U.rectifyBirth({base:{year:g,month:S,day:_,minute:Number.isFinite(y)?y:0},gender:x.gender||ye,events:de,lateZi:typeof x.lateZi=="boolean"?x.lateZi:Qe,trueSolar:typeof x.trueSolar=="boolean"?x.trueSolar:Re,address:String(x.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){Ga({error:a&&a.message?a.message:String(a)})}},ie=(a,g)=>p("label",{className:"mp-field"},p("span",{className:"mp-lbl"},a),g),_n=a=>{n(a.kind),a.date&&I(a.date),a.time&&oe(a.time),le(!!a.hourUnknown),a.gender&&t(a.gender),D(a.address||""),typeof a.trueSolar=="boolean"&&Sa(a.trueSolar),typeof a.lateZi=="boolean"&&Na(a.lateZi),re(a.lines||""),Ct(a.question||""),pi(a.direction||"general"),ri(a.count||"3"),di(a.mhMode||"time"),ci(a.upper||""),mi(a.lower||""),ui(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&da(a.qimenRule),typeof a.qLateZi=="string"&&Pa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&Za(a.task),a.days!=null&&ot(String(a.days)),typeof a.shengXiao=="string"&&Ua(a.shengXiao),typeof a.zCand=="string"&&rt(a.zCand)),a.kind==="xiaoliuren"&&(Ka(a.xlrMode==="number"?"number":"time"),a.num1!=null&&i(String(a.num1)),a.num2!=null&&l(String(a.num2)),a.num3!=null&&c(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&z(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&L(a.fsMode),a.fsPeriod!=null&&F(String(a.fsPeriod)),typeof a.sitting=="string"&&P(a.sitting),typeof a.facing=="string"&&O(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&q(a.nnMode),typeof a.surname=="string"&&$(a.surname),typeof a.givenName=="string"&&Q(a.givenName),a.limitN!=null&&Ae(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&ta(a.convMode),typeof a.lunarDate=="string"&&Ea(a.lunarDate),typeof a.leapMonth=="boolean"&&pt(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ra(a.hpChart),typeof a.partnerDate=="string"&&ve(a.partnerDate),typeof a.partnerTime=="string"&&Y(a.partnerTime),typeof a.partnerGender=="string"&&V(a.partnerGender),typeof a.partnerAddress=="string"&&wa(a.partnerAddress),typeof a.thirdOn=="boolean"&&it(a.thirdOn),typeof a.p2Date=="string"&&Fa(a.p2Date),typeof a.p2Time=="string"&&pa(a.p2Time),typeof a.p2Gender=="string"&&ja(a.p2Gender),typeof a.p2Address=="string"&&nt(a.p2Address)),ut(!1),ia(a)},On=()=>{b([]),It([])},Hn=["bazi","ziwei","trend","chenggu"],qi=a=>{n(a.kind),I(a.date),a.time&&oe(a.time),le(!!a.hourUnknown),a.gender&&t(a.gender),D(a.address||""),Sa(a.trueSolar!==!1),Na(a.lateZi!==!1)},Fn=a=>{const g=Z.profEvent(a.target);if(!g)return;const S=y=>lt.find(de=>de.id===y),_=a.currentTarget.querySelector(".mp-prof-name");if(si(""),g.action==="use"){const y=S(g.id);if(!y)return;if(!Z.profUsable(y)){_e("这张档案没有出生时刻,先补上时刻再存一次。");return}Je="",dt(Z.profilesTouch(y.id)),qi(y),Me(y.kind,{date:y.date,time:y.hourUnknown?"12:00":y.time},void 0,{gender:y.gender||void 0,address:y.address||"",hourUnknown:!!y.hourUnknown,trueSolar:y.trueSolar!==!1,lateZi:y.lateZi!==!1});return}if(g.action==="edit"){const y=S(g.id);if(!y)return;qi(y),Je=y.label,ct(y.id);return}if(g.action==="cancel"){Je="",ct(null);return}if(g.action==="pin"){dt(Z.profilesPin(g.id));return}if(g.action==="del"){if(ni!==g.id){si(g.id);return}dt(Z.profilesRemove(g.id)),Ya===g.id&&(Je="",ct(null)),_e("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const y=Ya,de=Z.profFromForm({kind:s,date:j,time:ae,hourUnknown:ce,gender:ye,address:ke,trueSolar:Re,lateZi:Qe},_?_.value:Je,Ya||void 0);if(!de){_e("先填好出生日期(和时刻),再存档案。");return}const we=Z.profilesPut(de);if(!we.ok){_e("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}dt(we.list),Je="",ct(null),_&&(_.value=""),_e(`${y?"已更新档案":"已存入我的命盘"}「${we.item.label}」。`)}},Pn=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(Je=g.value)},Dn=a=>{const g=U.formOf?U.formOf(a):null;if(!g){Me("ziwei");return}const S=Pe.some(we=>we.k===g.tab)?g.tab:"ziwei",_={date:g.date||j,time:g.time||ae},y=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&I(g.date),g.time&&oe(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&D(g.address),typeof g.trueSolar=="boolean"&&Sa(g.trueSolar),typeof g.lateZi=="boolean"&&Na(g.lateZi),y!==void 0&&re(y),g.question&&Ct(g.question),n(S);const de=U.restNote?U.restNote(g):"";Ne(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${de?` ${de}`:""}`),Me(S,_,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:y,question:g.question})};va(()=>{let a=!1;const g=Ie;return(async()=>{let S=null;try{await wt(s);const _=typeof location<"u"?String(location.href):"";_&&_.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(S=window.Engine.parseAskLink(_))}catch{S=null}if(!(a||Ie!==g)){if(S&&S.ok)try{Dn(S);return}catch{}Me("ziwei")}})(),()=>{a=!0}},[]),va(()=>{if(!Ke)return;const a=Ke.kind;ia(null),Me(a)},[Ke]),va(()=>{const a=g=>{if(g.key!=="Escape")return;const S=document.getElementById("mp-trace-layer");S&&S.classList.contains("open")&&$i()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Si=(me||[]).filter(a=>a&&Pe.some(g=>g.k===a.tab)).slice(0,Kt),Rn=a=>(Pe.find(g=>g.k===a)||{}).label||a,In=({k:a,label:g,tip:S,wide:_})=>p("button",{key:a,type:"button",className:"mp-tool"+(_?" wide":"")+(s===a?" on":""),"data-tab":a,onClick:()=>Lt(a)},p("b",null,g),p("span",null,S)),Bn=[p("div",{key:"profiles",className:"mp-profwrap",onClick:Fn,onInput:Pn,dangerouslySetInnerHTML:{__html:Z.profilesHTML(lt,{editingId:Ya,armedDel:ni,bar:Hn.indexOf(s)>=0?Z.profilesBarHTML({editingId:Ya,name:Je}):""})}}),p("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},p("div",{className:"mp-start-top"},p("div",{className:"mp-recent",hidden:Si.length===0},p("span",{className:"mp-recent-lbl"},"最近用过"),p("span",{className:"mp-recent-list"},Si.map(a=>p("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>Lt(a.tab)},Rn(a.tab),p("i",null,Xi(a.at)))))),p("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},p("button",{type:"button",className:v==="group"?"on":"","aria-pressed":v==="group"?"true":"false",onClick:()=>bi("group")},"分组"),p("button",{type:"button",className:v==="flat"?"on":"","aria-pressed":v==="flat"?"true":"false",onClick:()=>bi("flat")},"平铺"))),v==="group"?p("div",{className:"mp-groups"},Vi.map(a=>{const g=!!je[a.title],S=Math.max(0,a.items.length-4);return p("section",{key:a.title,className:"mp-tgroup"+(g?" open":"")},p("div",{className:"mp-tgroup-head"},p("h2",null,a.title),p("p",null,a.hint)),p("div",{className:"mp-ttools"},a.items.map(In),S>0?p("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>qe(_=>Object.assign({},_,{[a.title]:!g}))},g?"收起":`还有 ${S} 个`):null))})):null),p("div",{key:"tabs",className:"mp-tabs"+(v==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Pe.map(a=>p("button",{key:a.k,role:"tab","aria-selected":s===a.k?"true":"false",tabIndex:s===a.k?0:-1,className:"mp-tab"+(s===a.k?" on":""),onClick:()=>Lt(a.k)},a.label))),p("div",{key:"head",className:"mp-panel"},p("div",{className:"mp-row"},fi?ie(Va?"出生日期(公历)":He==="date"?"日期(公历)":"起卦日期(公历)",p(kt,{value:j,onChange:mn,onInvalid:()=>_e("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,hi?ie(Va?"出生时刻":"起卦时刻",p("input",{className:"mp-input",type:"time",value:ae,disabled:ce&&(s==="bazi"||s==="trend"),onChange:a=>un(a.target.value)})):null,s==="bazi"||s==="trend"?p("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},p("input",{type:"checkbox",checked:ce,onChange:a=>le(a.target.checked)})," 时辰未知"):null,Va?ie("性别",p("select",{className:"mp-input",value:ye,onChange:a=>t(a.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,Va?ie("出生地(省/市即可)",p("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:ke,onChange:a=>D(a.target.value)})):null,s==="bazi"||s==="ziwei"?p("label",{className:"mp-field mp-checks"},p("input",{type:"checkbox",checked:Da,onChange:a=>St(a.target.checked)}),p("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,s==="hepan"?ie("对方出生日期",p(kt,{value:xe,onChange:ve,onInvalid:()=>_e("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,s==="hepan"?ie("对方出生时刻",p("input",{className:"mp-input",type:"time",value:G,onChange:a=>Y(a.target.value)})):null,s==="hepan"?ie("对方性别",p("select",{className:"mp-input",value:X,onChange:a=>V(a.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,s==="hepan"?ie("合盘方式",p("div",{className:"mp-seg"},p("button",{className:oa==="bazi"?"on":"",onClick:()=>ra("bazi")},"八字"),p("button",{className:oa==="ziwei"?"on":"",onClick:()=>ra("ziwei")},"紫微"))):null,s==="hepan"?ie("对方出生地(可空)",p("input",{className:"mp-input",placeholder:"如 四川成都",value:se,onChange:a=>wa(a.target.value)})):null,s==="hepan"?p("label",{className:"mp-field mp-checks"},p("input",{type:"checkbox",checked:De,onChange:a=>it(a.target.checked)}),p("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,s==="hepan"&&De?ie("第三方出生日期",p(kt,{value:ka,onChange:Fa,onInvalid:()=>_e("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,s==="hepan"&&De?ie("第三方出生时刻",p("input",{className:"mp-input",type:"time",value:za,onChange:a=>pa(a.target.value)})):null,s==="hepan"&&De?ie("第三方性别",p("select",{className:"mp-input",value:la,onChange:a=>ja(a.target.value)},p("option",{value:"female"},"女"),p("option",{value:"male"},"男"))):null,s==="hepan"&&De?ie("第三方出生地(可空)",p("input",{className:"mp-input",placeholder:"如 广东广州",value:qa,onChange:a=>nt(a.target.value)})):null,s==="qimen"?p("fieldset",{key:"qmr",className:"mp-qmrule"},p("legend",{className:"mp-lbl"},"换局规则"),p("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,g])=>p("label",{key:a,className:"mp-qmopt"},p("input",{type:"radio",name:"qimen_rule",value:a,checked:We===a,onChange:()=>da(a)}),p("span",null,g)))),p("div",{className:"mp-field"},p("span",{className:"mp-lbl"},"晚子时"),p("select",{className:"mp-input",value:Ma,onChange:a=>Pa(a.target.value)},p("option",{value:"same-day"},"23:00 后归当日"),p("option",{value:"next-day"},"23:00 后归次日"))),p("details",{className:"mp-qmhelp"},p("summary",null,"三种规则有什么区别?"),p("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,Be(s)||s==="qimen"?ie(s==="qimen"?"询问方向(定用神)":"询问方向",p("select",{className:"mp-input",value:Oe,onChange:a=>{pi(a.target.value),wi(a.target.value)}},(U.DIRECTIONS||[]).map(a=>p("option",{key:a.key,value:a.key},a.label)))):null,s==="tarot"?ie("张数",p("select",{className:"mp-input",value:Mt,onChange:a=>ri(a.target.value)},p("option",{value:"1"},"1 张 · 指引"),p("option",{value:"3"},"3 张 · 过去现在未来"),p("option",{value:"5"},"5 张 · 十字牌阵"))):null,s==="liuyao"?ie("六爻(可空)",p("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:E,onChange:a=>re(a.target.value)})):null,s==="meihua"?ie("起卦方式",p("div",{className:"mp-seg"},p("button",{className:fa==="time"?"on":"",onClick:()=>vi("time")},"时间"),p("button",{className:fa==="number"?"on":"",onClick:()=>vi("number")},"数字"))):null,s==="meihua"&&fa==="number"?ie("第一个数",p("input",{className:"mp-input",value:gt,placeholder:"如 17",onChange:a=>ci(a.target.value)})):null,s==="meihua"&&fa==="number"?ie("第二个数",p("input",{className:"mp-input",value:ft,placeholder:"如 29",onChange:a=>mi(a.target.value)})):null,s==="meihua"&&fa==="number"?ie("动爻(可空)",p("input",{className:"mp-input",value:ht,placeholder:"1-6",onChange:a=>ui(a.target.value)})):null,s==="zeri"?ie("所办事项",p("select",{className:"mp-input",value:Ta,onChange:a=>Za(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>p("optgroup",{key:a,label:a},g.map(S=>p("option",{key:`${a}-${S}`,value:S},S)))))):null,s==="convert"?ie("转换方向",p("div",{className:"mp-seg"},p("button",{className:$e==="solar2lunar"?"on":"",onClick:()=>ta("solar2lunar")},"公历 → 农历"),p("button",{className:$e==="lunar2solar"?"on":"",onClick:()=>ta("lunar2solar")},"农历 → 公历"))):null,s==="convert"&&$e==="lunar2solar"?ie("农历日期",p("input",{className:"mp-input",value:Ue,placeholder:"如 2026-9-17",onChange:a=>Ea(a.target.value)})):null,s==="convert"&&$e==="lunar2solar"?p("label",{className:"mp-check"},p("input",{type:"checkbox",checked:ua,onChange:a=>pt(a.target.checked)})," 闰月"):null,s==="zeri"?ie("看多少天",p("input",{className:"mp-input",type:"number",min:1,max:60,value:La,onChange:a=>ot(a.target.value)})):null,s==="zeri"?ie("候选日(可空,只比这几天)",p("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:ma,onChange:a=>rt(a.target.value)})):null,s==="zeri"?ie("当事人属相(可空)",p("select",{className:"mp-input",value:aa,onChange:a=>Ua(a.target.value)},p("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>p("option",{key:a,value:a},a)))):null,s==="xiaoliuren"?ie("起课方式",p("div",{className:"mp-seg"},p("button",{className:Ee==="time"?"on":"",onClick:()=>Ka("time")},"时间"),p("button",{className:Ee==="number"?"on":"",onClick:()=>Ka("number")},"报数"))):null,s==="xiaoliuren"&&Ee==="number"?ie("第一个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:e,onChange:a=>i(a.target.value)})):null,s==="xiaoliuren"&&Ee==="number"?ie("第二个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:r,onChange:a=>l(a.target.value)})):null,s==="xiaoliuren"&&Ee==="number"?ie("第三个数",p("input",{className:"mp-input",type:"number",min:1,max:99,value:o,onChange:a=>c(a.target.value)})):null,s==="mbti"?p("div",{className:"mp-quiz-wrap"},p("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),p(Ui,{answers:d,page:m,onPick:(a,g)=>u(S=>{const _=S.slice();return _[a]=g,_}),onPage:a=>f(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(tt().total/et)-1)))),onSubmit:xi,onClear:()=>{u(new Array(tt().total).fill(null)),f(0),pe(null)}})):null,s==="trend"?ie("算到几岁",p("input",{className:"mp-input",type:"number",min:10,max:100,value:h,onChange:a=>z(a.target.value)})):null,s==="fengshui"?ie("看什么",p("div",{className:"mp-seg"},p("button",{className:w==="natal"?"on":"",onClick:()=>L("natal")},"命卦"),p("button",{className:w==="advise"?"on":"",onClick:()=>L("advise")},"门主灶"),p("button",{className:w==="xuankong"?"on":"",onClick:()=>L("xuankong")},"玄空"))):null,s==="fengshui"&&w!=="natal"?ie("坐山(24 山)",p("input",{className:"mp-input",value:J,placeholder:"如 子 / 乾",onChange:a=>P(a.target.value)})):null,s==="fengshui"&&w!=="natal"?ie("朝向(24 山)",p("input",{className:"mp-input",value:M,placeholder:"如 午 / 巽",onChange:a=>O(a.target.value)})):null,s==="fengshui"&&w==="xuankong"?ie("运(1–9)",p("input",{className:"mp-input",type:"number",min:1,max:9,value:N,onChange:a=>F(a.target.value)})):null,s==="name"?ie("看什么",p("div",{className:"mp-seg"},p("button",{className:W==="assess"?"on":"",onClick:()=>q("assess")},"评名字"),p("button",{className:W==="generate"?"on":"",onClick:()=>q("generate")},"生成候选"))):null,s==="name"?ie("姓",p("input",{className:"mp-input",value:R,placeholder:"如 李",onChange:a=>$(a.target.value)})):null,s==="name"&&W==="assess"?ie("名字",p("input",{className:"mp-input",value:ue,placeholder:"如 沐宸",onChange:a=>Q(a.target.value)})):null,s==="name"&&W==="generate"?ie("候选个数",p("input",{className:"mp-input",type:"number",min:1,max:20,value:ne,onChange:a=>Ae(a.target.value)})):null),Va?p("div",{className:"mp-checks"},p("label",{title:"按出生地经度把钟表时间换算成真太阳时"},p("input",{type:"checkbox",checked:Re,onChange:a=>Sa(a.target.checked)}),"真太阳时"),p("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},p("input",{type:"checkbox",checked:Qe,onChange:a=>Na(a.target.checked)}),"晚子时换日"),p("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},p("input",{type:"checkbox",checked:k,onChange:a=>T(a.target.checked)}),"联网精确到区县")):null,Be(s)?p("div",{className:"mp-askblock"},p("span",{className:"mp-lbl"},"所问之事(必填)"),p("textarea",{className:"mp-textarea"+(rn?" invalid":""),rows:2,value:na,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Ct(a.target.value),ut(!1)},onBlur:a=>wi(void 0,a.target.value)})):null,s==="mbti"?null:p("div",{key:"actions",className:"mp-actions"},p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:gn,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),p("button",{className:"mp-btn",onClick:xi,title:"时间仍为自动时,点它会取当下再起卦"},s==="tarot"?"抽牌":s==="bazi"||s==="ziwei"?"排盘":s==="hepan"?"合盘":s==="qimen"?"起局":zt.indexOf(s)>=0?"看结果":"起卦"))),p("div",{key:"hint",className:"mp-hint"},ln.hint),he.length?p("div",{key:"hist",className:"mp-hist"},p("div",{className:"mp-hist-h"},p("span",null,"最近排过"),p("button",{className:"mp-hist-clear",onClick:On},"清空")),p("div",{className:"mp-hist-list"},he.map((a,g)=>p("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>_n(a)},p("b",null,(Pe.find(S=>S.k===a.kind)||{}).label||a.kind),p("span",null,a.label||"—"),p("i",null,`${String(a.date||"").slice(5)} ${a.hourUnknown?"时辰未知":String(a.time||"")}`))))):null,He==="cast"&&gi?p("div",{key:"auto",className:"mp-auto"},Tt.cast?`起卦时刻用的是你手动填的(${ae});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${ae}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,ga?p("div",{key:"err",className:"mp-err",role:"alert"},ga):null,oi?p("div",{key:"ntc",className:"mp-note",role:"status"},oi):null,sn?p("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!x&&!ga?p("div",{key:"empty",className:"mp-empty"},p("b",null,s==="ziwei"||s==="bazi"?"填好出生信息,点「排盘」":s==="tarot"?"写下想问的事,点「抽牌」":s==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":zt.indexOf(s)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),s==="ziwei"||s==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":s==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":zt.indexOf(s)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,x?p("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:zn,dangerouslySetInnerHTML:{__html:jn(x)+Z.perfHTML(te)+Z.revisionHTML(x.r.revision)+Z.handleHTML(x.r.handle)+Z.shadowHTML(x.r.shadow,x.shadowDiff)+Z.traceHTML(x.r.trace,x.r.system,x.r.traceText)+Z.resultWithInterpret(x.kind==="ziwei"?Z.ziweiHTML(x.r):x.kind==="bazi"?Z.baziHTML(x.r)+(x.trend?Z.trendHTML(x.trend,{brief:!1}):""):x.kind==="meihua"?Z.meihuaHTML(x.r):x.kind==="daliuren"?Z.daliurenHTML(x.r):x.kind==="qimen"?Z.qimenHTML(x.r)+Z.qimenFactsHTML(x.r):x.kind==="hepan"?x.r.chart==="ziwei"?Z.ziweiHepanHTML(x.r):Z.hepanHTML(x.r):x.kind==="tarot"?Z.tarotHTML(x.r):x.kind==="liuyao"?Z.liuyaoHTML(x.r):x.kind==="chenggu"?Z.chengguHTML(x.r):x.kind==="almanac"?Z.almanacHTML(x.r):x.kind==="zeri"?Z.zeriHTML(x.r):x.kind==="trend"?Z.trendHTML(x.r):x.kind==="name"?Z.nameHTML(x.r):x.kind==="mbti"?Z.mbtiHTML(x.r):x.kind==="fengshui"?Z.fengshuiHTML(x.r):Z.quickHTML(x.r),x.it,{folded:hn()})+Z.caliberHTML(x.caliber)}}):null,x?p("div",{key:"bar",className:"mp-bar"},p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:qn},pn||"复制文字结果"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:An,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Tn,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,x?p("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},p("input",{className:"mp-input",value:ea,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Nt(a.target.value),onKeyDown:a=>{a.key==="Enter"&&ki()}}),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:ki},"追问"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Nn,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ee.ref?null:p("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},Jt()),Ca?p("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Ca):null):null,x?p("div",{key:"bridge",className:"mp-bridge"},p("span",{className:"mp-bridge-lbl"},ee.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),yi.map(([a,g,S])=>p("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:S,onClick:_=>wn(a,_.currentTarget)},g))):null,Aa?p("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:Z.followupHTML(Aa)}}):null,x&&x.kind==="bazi"&&x.r.past?p("div",{key:"verify",className:"mp-verify"},p("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),x.r.past.rows.map(a=>p("div",{key:a.year,className:"mp-verify-row"},p("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),p("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>p("button",{key:g,className:"mp-chip"+(Ia[a.year]===g?" on":""),onClick:()=>Ba(Object.assign({},Ia,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),p("div",{className:"mp-verify-foot"},p("button",{className:"mp-btn ghost",style:ji,onClick:Ln},"算贴合度"),ca?p("span",{className:"mp-verify-fit"},`命中 ${ca.yes}/${ca.answered}(${ca.level}):${ca.advice}`):null)):null,x&&x.kind==="bazi"?p("div",{key:"rect",className:"mp-rect"},p("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),Ze.map((a,g)=>p("div",{key:g,className:"mp-rect-row"},p("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:S=>st(Ze.map((_,y)=>y===g?Object.assign({},_,{year:S.target.value}):_))}),p("select",{className:"mp-input",value:a.kind,onChange:S=>st(Ze.map((_,y)=>y===g?Object.assign({},_,{kind:S.target.value}):_))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([S,_])=>p("option",{key:S,value:S},_))))),p("button",{className:"mp-btn ghost",style:ji,onClick:En},"计算候选时辰"),Le?Le.error?p("div",{className:"mp-rect-err"},Le.error):p("div",{className:"mp-rect-out"},p("div",{className:"mp-verify-fit"},Le.note),Le.candidates.slice(0,6).map(a=>p("div",{key:a.hour,className:"mp-rect-cand"+(a===Le.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!x&&!ga?p("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,p("div",{key:"fb",className:"mp-fb"},p("div",{className:"mp-fb-h"},p("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:zi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},ze||"复制反馈报告"),p("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>Cn(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),p("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",H?p("span",{className:"mp-fb-note"}," "+H):null))];return p("div",{className:"mp-wrap"},Bn)}function an(s){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(s)}catch(n){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",n)}try{const n=document.createElement("style");return n.setAttribute("data-plugin","@local/metaphysics"),n.textContent=s,document.head.appendChild(n),()=>n.remove()}catch(n){return console.error("[metaphysics] DOM 注入样式也失败",n),()=>{}}}let ii=!1;function qt(){try{const s=document.documentElement;if(!s||!document.body)return;const n=document.createElement("span");n.setAttribute("aria-hidden","true"),n.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(n);const j=getComputedStyle(n).backgroundColor;n.remove();const I=Te&&typeof Te.pickOnColor=="function"?Te.pickOnColor(j):"";I&&s.style&&s.style.getPropertyValue("--mp-on-brand")!==I&&s.style.setProperty("--mp-on-brand",I)}catch{}}function tn(){if(!ii){ii=!0,qt();try{const s=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");s&&typeof s.addEventListener=="function"&&s.addEventListener("change",qt)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(qt).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function nn(s){try{const D=an(Ii+(Z&&Z.CSS?Z.CSS:""));typeof s.effect=="function"&&typeof D=="function"&&s.effect(()=>D)}catch(D){console.error("[metaphysics] 样式注入失败",D)}try{tn()}catch(D){console.error("[metaphysics] 字色同步失败",D)}let n=null;try{n=s&&s.slots||(s&&typeof s.get=="function"?s.get("slots"):null)}catch(D){console.error("[metaphysics] 取 slots 服务失败",D)}if(!n||typeof n.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ee.injectType=typeof n.inject;const D=typeof n.spec=="function"?n.spec("conversation.input.right"):null;ee.spec=D?D.kind+"/"+D.scope:"未声明"}catch(D){ee.spec="取声明失败",Wt(D)}const j=D=>{if(typeof D=="function")return D;if(D&&typeof D=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof D[xe]=="function")return()=>{try{D[xe]()}catch{}}}return()=>{}},I=(D,xe)=>{try{const ve=n.register(D,xe);return ee.regs+=1,ee.seatOk[D.name]=!0,j(ve)}catch(ve){return Wt(ve),()=>{}}},ae=(D,xe)=>{const ve=()=>{const G=xe();return ee.contribution=(ee.contribution?ee.contribution+",":"")+(D+(typeof G=="function"?" 已挂上":" 未挂上")),G};try{typeof n.inject=="function"?n.inject(D,ve):ve()}catch(G){console.error("[metaphysics] 等待槽位失败:"+D,G);try{ve()}catch(Y){console.error("[metaphysics] 直接注册也失败:"+D,Y)}}};ae("sidebar.panellist",()=>I({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},Yi)),ae("main",()=>I({name:"main",key:"metaphysics"},D=>p(Ki,null,p(en,D))));const oe=(D,xe)=>{const ve=()=>{try{const Y=n.inject(D,xe);return ee.contribution=(ee.contribution?ee.contribution+",":"")+(D.replace("conversation.","")+(typeof Y=="function"?" 已挂上":" 未挂上")),Y}catch(Y){console.error("[metaphysics] 槽位注册失败:"+D,Y);try{return xe()}catch(X){console.error("[metaphysics] 直接注册也失败:"+D,X);return}}};let G;try{typeof s.effect=="function"?G=s.effect(ve,"metaphysics: "+D):G=ve()}catch(Y){console.error("[metaphysics] effect 包裹失败:"+D,Y),G=ve()}typeof G=="function"&&ee.seatDisposers.push(G)};oe("conversation.input.right",()=>I({name:"conversation.input.right",id:"metaphysics-ask",order:40},ei)),oe("conversation.composer.dock",()=>I({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},ai));let ce=!1;const le=()=>{ee.ref||ce||(ce=!0,ee.seatOk["conversation.input.right"]||I({name:"conversation.input.right",id:"metaphysics-ask",order:40},ei),ee.seatOk["conversation.composer.dock"]||I({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},ai))};let ye=20;const t=()=>!!(ee.seatOk["conversation.input.right"]&&ee.seatOk["conversation.composer.dock"]),ke=()=>{ee.ref||ye<=0||t()||(ye-=1,le(),!t()&&setTimeout(ke,700))};try{setTimeout(ke,700)}catch{}try{document.addEventListener("pointerdown",()=>{ce=!1,le()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(s){try{nn(s)}catch(n){console.error("[metaphysics] apply 异常",n)}}}}});