dsh-metaphysics 0.56.0 → 0.57.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.56.0",factory(ra){const ea=(function(){try{return ra("react")}catch{return globalThis.React}})();if(!ea)return{inject:[],apply(){}};const s=ea.createElement,Ga={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.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"},Ba=[{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.56.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:"按八字选字"}]}];const Z={};Z.DIRECTIONS=Ba,Z.compute=()=>{throw new Error("命理引擎尚未加载")};const Za=Object.create(null);function Lt(o){return Ga[o]||Ga.bazi||"client.bazi.js"}async function Tt(o){const l=Lt(o);let F=Za[l];if(!F){if(!ra||typeof ra.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");const V=await ra.async(`./${l}`);if(F=V&&(V.Engine||V.default),!F||typeof F.compute!="function")throw new Error(`命理引擎分块 ${l} 未返回 Engine`);Za[l]=F}for(const V of Object.keys(F))F[V]!==void 0&&(Z[V]=F[V]);return Array.isArray(Z.DIRECTIONS)||(Z.DIRECTIONS=Ba),window.Engine=Z,window.__MP_ENGINE_READY__=!0,Z}window.__mpEnsureEngine=Tt,window.Engine=Z,(function(){const o={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},l=W=>!!o[W];function F(W){const ne=String(W??"").trim();if(!ne)return{lines:null,warning:""};const te=ne.split(/[^0-9]+/).filter(Boolean).map(Number),se=te.filter(t=>![6,7,8,9].includes(t));return te.length===6&&se.length===0?{lines:te,warning:""}:{lines:null,warning:te.length!==6?`爻值需要正好 6 个数字(当前 ${te.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${se.join("/")}),本次按随机摇卦。`}}function V(W){const ne=String(W??"").trim();if(!ne)return null;const te=Number(ne);return Number.isFinite(te)?te:null}window.__MPCore={NEED_ASK:o,needAsk:l,parseLines:F,toNumber:V}})(),(function(){const o=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.57.0",factory(la){const aa=(function(){try{return la("react")}catch{return globalThis.React}})();if(!aa)return{inject:[],apply(){}};const s=aa.createElement,Za={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.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"},Ya=[{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.57.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:"按八字选字"}]}];const B={};B.DIRECTIONS=Ya,B.compute=()=>{throw new Error("命理引擎尚未加载")};const Ka=Object.create(null);function Lt(o){return Za[o]||Za.bazi||"client.bazi.js"}async function At(o){const r=Lt(o);let F=Ka[r];if(!F){if(!la||typeof la.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");const U=await la.async(`./${r}`);if(F=U&&(U.Engine||U.default),!F||typeof F.compute!="function")throw new Error(`命理引擎分块 ${r} 未返回 Engine`);Ka[r]=F}for(const U of Object.keys(F))F[U]!==void 0&&(B[U]=F[U]);return Array.isArray(B.DIRECTIONS)||(B.DIRECTIONS=Ya),window.Engine=B,window.__MP_ENGINE_READY__=!0,B}window.__mpEnsureEngine=At,window.Engine=B,(function(){const o={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},r=J=>!!o[J];function F(J){const oe=String(J??"").trim();if(!oe)return{lines:null,warning:""};const ne=oe.split(/[^0-9]+/).filter(Boolean).map(Number),pe=ne.filter(t=>![6,7,8,9].includes(t));return ne.length===6&&pe.length===0?{lines:ne,warning:""}:{lines:null,warning:ne.length!==6?`爻值需要正好 6 个数字(当前 ${ne.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${pe.join("/")}),本次按随机摇卦。`}}function U(J){const oe=String(J??"").trim();if(!oe)return null;const ne=Number(oe);return Number.isFinite(ne)?ne:null}window.__MPCore={NEED_ASK:o,needAsk:r,parseLines:F,toNumber:U}})(),(function(){const o=`
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{--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,卡片感等于零。
@@ -81,6 +81,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
81
81
  .pp-chip.ok{color:var(--lu);border-color:var(--lu)}
82
82
  .pp-chip.warn{color:var(--quan);border-color:var(--quan)}
83
83
  .pp-chip.broken{color:var(--quan);border-color:var(--quan);border-style:dashed}
84
+ .pp-chip.neu{color:var(--muted);border-style:dashed}
84
85
  .pp-sec{margin-top:10px}
85
86
  /* 流月/流日/流时:一层层往外推的三级时间盘 */
86
87
  .pp-flow{margin-top:9px;border:1px solid var(--line);background:var(--card);font-family:system-ui,sans-serif}
@@ -620,6 +621,39 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
620
621
  .mp-shadow-diff .tag{margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}
621
622
  .mp-shadow-diff .same{margin-top:4px;font-size:12px;color:var(--muted)}
622
623
  .mp-shadow-diff .note{margin-top:8px;padding-top:6px;border-top:1px dashed var(--line);font-size:11.5px;line-height:1.7;color:var(--muted)}
624
+ /* 排盘句柄:追问同一张盘时复制给助手;本体是编码,提示不要公开贴出 */
625
+ .mp-handle{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0 0;padding:8px 13px;border:1px dashed var(--line);border-radius:10px;background:var(--band);font-family:system-ui,sans-serif}
626
+ .mp-handle-title{font-size:12.5px;font-weight:700;letter-spacing:.06em;color:var(--ink2)}
627
+ .mp-handle-code{flex:1 1 220px;min-width:0;font:12px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--muted);overflow-wrap:anywhere}
628
+ .mp-handle-copy{flex:0 0 auto;min-height:40px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink2);font:inherit;font-size:12px;cursor:pointer}
629
+ .mp-handle-copy:hover{border-color:var(--ke);color:var(--ke)}
630
+ .mp-handle-copy:focus-visible{outline:2px solid var(--ke);outline-offset:2px}
631
+ .mp-handle-hint{flex-basis:100%;font-size:11.5px;line-height:1.6;color:var(--muted)}
632
+ .mp-revise{margin:12px 0 0;padding:9px 13px;border:1px solid var(--line);border-radius:10px;background:var(--band);font-family:system-ui,sans-serif}
633
+ .mp-revise-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
634
+ .mp-revise-title{font-size:12.5px;font-weight:700;letter-spacing:.06em;color:var(--ke)}
635
+ .mp-revise-text{font-size:12px;line-height:1.6;color:var(--muted);overflow-wrap:anywhere}
636
+ .mp-revise-list{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:3px}
637
+ .mp-revise-list li{display:flex;gap:8px;font-size:12.5px;line-height:1.6}
638
+ .mp-revise-list .k{flex:0 0 5.5em;color:var(--muted)}
639
+ .mp-revise-list .old{color:var(--muted)}
640
+ .mp-revise-list .new{color:var(--ink2);font-weight:600}
641
+ .mp-revise-ignored{margin:6px 0 0;font-size:11.5px;line-height:1.6;color:var(--muted)}
642
+ @media (max-width:640px){
643
+ .mp-revise{padding:8px 11px}
644
+ .mp-revise-list .k{flex-basis:4.5em}
645
+ }
646
+ @media print{
647
+ .mp-revise{break-inside:avoid}
648
+ }
649
+ @media (max-width:640px){
650
+ .mp-handle{padding:8px 11px}
651
+ .mp-handle-copy{margin-left:0;min-height:44px}
652
+ }
653
+ @media print{
654
+ .mp-handle-copy{display:none}
655
+ .mp-handle{break-inside:avoid}
656
+ }
623
657
  @media (max-width:640px){
624
658
  .mp-shadow{padding:8px 11px}
625
659
  .mp-shadow-copy{margin-left:0;min-height:44px}
@@ -648,6 +682,10 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
648
682
  .mp-trace-close{margin-left:auto;flex:0 0 auto;min-width:44px;min-height:44px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink2);font:inherit;font-size:16px;cursor:pointer}
649
683
  .mp-trace-close:hover{border-color:var(--ke);color:var(--ke)}
650
684
  .mp-trace-close:focus-visible{outline:2px solid var(--ke);outline-offset:2px}
685
+ .mp-trace-copy{margin-left:auto;flex:0 0 auto;min-height:44px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink2);font:inherit;font-size:12px;cursor:pointer}
686
+ .mp-trace-copy:hover{border-color:var(--ke);color:var(--ke)}
687
+ .mp-trace-copy:focus-visible{outline:2px solid var(--ke);outline-offset:2px}
688
+ .mp-trace-copy+.mp-trace-close{margin-left:0}
651
689
  .mp-trace-body{flex:1;overflow:auto;padding:10px 14px 24px;overscroll-behavior:contain}
652
690
  .mp-trace-step{margin:0 0 8px;border:1px solid var(--line);border-radius:10px;background:var(--bg);overflow:hidden}
653
691
  .mp-trace-step>summary{display:flex;align-items:center;gap:8px;min-height:44px;padding:8px 11px;cursor:pointer;list-style:none}
@@ -1155,45 +1193,45 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1155
1193
  .mp-hy-row{grid-template-columns:12px 30px minmax(56px,1fr) 42px 38px 28px;gap:4px;font-size:11.5px}
1156
1194
  .mp-hy-row.hy-plain{grid-template-columns:28px minmax(56px,1fr);gap:6px}
1157
1195
  }
1158
- `,l=window.__PP=window.__PP||{};l.CSS=o;const F={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},V={禄:"lu",权:"quan",科:"ke",忌:"ji"},W={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},ne={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},te={乾:[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=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),O=(e,n,p)=>{const x=Math.round(43),f=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${x}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${x+18}" y="${2.5}" width="${104-x-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${n?" hex-on":""}${p?" "+p:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${f}</svg>`},me={木:"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"},oe=e=>{const n=me[e];return n?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${n}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},ue=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(te[e]||[0,0,0]).slice().reverse().map((g,i)=>{const u=i*4;return g?`<rect x="0" y="${u}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${u}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${u}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;l._hexBar=O,l._wxIcon=oe,l._triGlyph=ue;function Re(e,n){return!e||!e.length?"":e.map(p=>{const g=F[p.type]||"aux",i=p.mutagen?`<i class="pp-m ${V[p.mutagen]}">${p.mutagen}</i>`:"",u=n&&n[p.name],m=u?`<i class="pp-m view ${V[u]}">${u}</i>`:"",r=p.brightness?`<em class="pp-b ${W[p.brightness]||"mid"}">${p.brightness}</em>`:"";return`<span class="pp-st ${g}">${p.name}${r}${i}${m}</span>`}).join("")}function Ie(e){const n=[];for(let p=0;p<6;p++)n.push(e+p*12);return n.join(",")}const we=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],le=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],Q=e=>(e%12+12)%12,xe=(e,n)=>e!==n&&[Q(n+4),Q(n+8),Q(n+6)].includes(e);function ma(e,n,p,g,i){const u=ne[e.branch]||[1,1],m=le.indexOf(e.branch),r=["pp-cell"];m===n?r.push("pp-soul"):xe(m,n)&&r.push("pp-tri"),e.isBody&&r.push("pp-shen"),u[0]===4&&r.push("pp-lastrow"),u[1]===4&&r.push("pp-lastcol");const b=e.shensha||{},x=we[Q(n-m)],f=e.selfHua&&e.selfHua.length?`<span class="pp-zh">${e.selfHua.map(w=>`<i class="pp-m self ${V[w.type]}" title="自化:宫干化回本宫">${w.type}</i>`).join("")}</span>`:"";let S="";if(m===n&&g){const w=z=>(F[z.type]||"")==="main";if(!(e.stars||[]).some(w)){const z=g.find(M=>le.indexOf(M.branch)===Q(m+6)),N=z?(z.stars||[]).filter(w):[];N.length&&(S=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${N.map(M=>M.name).join(" ")}</div>`)}}return`<div class="${r.join(" ")}" data-pi="${m}" data-view="${p}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${u[0]};grid-column:${u[1]}">
1159
- <div class="pp-stars">${Re(e.stars,i)}${f}</div>
1160
- ${S}
1161
- <div class="pp-ages">${Ie(e.xiaoxian.age)}</div>
1196
+ `,r=window.__PP=window.__PP||{};r.CSS=o;const F={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},U={禄:"lu",权:"quan",科:"ke",忌:"ji"},J={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},oe={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},ne={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},pe=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),P=(e,n,p)=>{const b=Math.round(43),x=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${b}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${b+18}" y="${2.5}" width="${104-b-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${n?" hex-on":""}${p?" "+p:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${x}</svg>`},ge={木:"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"},re=e=>{const n=ge[e];return n?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${n}" 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">${(ne[e]||[0,0,0]).slice().reverse().map((m,i)=>{const g=i*4;return m?`<rect x="0" y="${g}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${g}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${g}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;r._hexBar=P,r._wxIcon=re,r._triGlyph=fe;function De(e,n){return!e||!e.length?"":e.map(p=>{const m=F[p.type]||"aux",i=p.mutagen?`<i class="pp-m ${U[p.mutagen]}">${p.mutagen}</i>`:"",g=n&&n[p.name],u=g?`<i class="pp-m view ${U[g]}">${g}</i>`:"",l=p.brightness?`<em class="pp-b ${J[p.brightness]||"mid"}">${p.brightness}</em>`:"";return`<span class="pp-st ${m}">${p.name}${l}${i}${u}</span>`}).join("")}function Ge(e){const n=[];for(let p=0;p<6;p++)n.push(e+p*12);return n.join(",")}const ke=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],ce=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],ae=e=>(e%12+12)%12,be=(e,n)=>e!==n&&[ae(n+4),ae(n+8),ae(n+6)].includes(e);function ga(e,n,p,m,i){const g=oe[e.branch]||[1,1],u=ce.indexOf(e.branch),l=["pp-cell"];u===n?l.push("pp-soul"):be(u,n)&&l.push("pp-tri"),e.isBody&&l.push("pp-shen"),g[0]===4&&l.push("pp-lastrow"),g[1]===4&&l.push("pp-lastcol");const f=e.shensha||{},b=ke[ae(n-u)],x=e.selfHua&&e.selfHua.length?`<span class="pp-zh">${e.selfHua.map(w=>`<i class="pp-m self ${U[w.type]}" title="自化:宫干化回本宫">${w.type}</i>`).join("")}</span>`:"";let z="";if(u===n&&m){const w=k=>(F[k.type]||"")==="main";if(!(e.stars||[]).some(w)){const k=m.find(N=>ce.indexOf(N.branch)===ae(u+6)),q=k?(k.stars||[]).filter(w):[];q.length&&(z=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${q.map(N=>N.name).join(" ")}</div>`)}}return`<div class="${l.join(" ")}" data-pi="${u}" data-view="${p}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${g[0]};grid-column:${g[1]}">
1197
+ <div class="pp-stars">${De(e.stars,i)}${x}</div>
1198
+ ${z}
1199
+ <div class="pp-ages">${Ge(e.xiaoxian.age)}</div>
1162
1200
  <div class="pp-foot">
1163
1201
  <div class="ft-l">
1164
- <span class="ft-dx">${b.boshi} ${e.daxian.start}-${e.daxian.end}</span>
1165
- <span>${b.jiangqian}</span>
1166
- <span>${b.suiqi}</span>
1202
+ <span class="ft-dx">${f.boshi} ${e.daxian.start}-${e.daxian.end}</span>
1203
+ <span>${f.jiangqian}</span>
1204
+ <span>${f.suiqi}</span>
1167
1205
  </div>
1168
1206
  <div class="ft-r">
1169
- <span>${b.changsheng}</span>
1207
+ <span>${f.changsheng}</span>
1170
1208
  <span>${e.ganzhi}</span>
1171
- <span class="ft-pn">${x}</span>
1209
+ <span class="ft-pn">${b}</span>
1172
1210
  </div>
1173
1211
  </div>
1174
- </div>`}function ta(e){try{const n=window.Engine||window.__PP&&window.__PP.Engine;if(!n||!n.buildBazi||!e.input)return"";const p=n.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(g=>p.pillars[g].ganzhi).join(" ")}catch{return""}}l.ziweiHTML=function(e){const n=le.indexOf(e.soul.branch),p=e.liunian&&e.liunian[0]||null,g=p?p.age:1,i=e.palaces.find(L=>g>=L.daxian.start&&g<=L.daxian.end)||e.palaces[0],u=le.indexOf(i.branch),m=p?le.indexOf(p.lifePalace.branch):n,r=L=>{const C={};for(const _ of L||[])_&&_.star&&(C[_.star]=_.type);return C},b=(e.daxianList||[]).find(L=>L.branch===i.branch)||null,x={da:r(b&&b.mutagenHits),ln:r(p&&p.mutagenHits)},f=(L,C)=>e.palaces.map(_=>ma(_,L,C,e.palaces,x[C]||null)).join(""),S=(L,C)=>`<div class="pp-center">
1175
- ${C==="da"?`<div class="ct-t1">大限 ${i.ganzhi} ${i.daxian.start}-${i.daxian.end}岁</div>`:C==="ln"&&p?`<div class="ct-t1">流年 ${p.ganzhi} ${p.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1212
+ </div>`}function ia(e){try{const n=window.Engine||window.__PP&&window.__PP.Engine;if(!n||!n.buildBazi||!e.input)return"";const p=n.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(m=>p.pillars[m].ganzhi).join(" ")}catch{return""}}r.ziweiHTML=function(e){const n=ce.indexOf(e.soul.branch),p=e.liunian&&e.liunian[0]||null,m=p?p.age:1,i=e.palaces.find(T=>m>=T.daxian.start&&m<=T.daxian.end)||e.palaces[0],g=ce.indexOf(i.branch),u=p?ce.indexOf(p.lifePalace.branch):n,l=T=>{const M={};for(const R of T||[])R&&R.star&&(M[R.star]=R.type);return M},f=(e.daxianList||[]).find(T=>T.branch===i.branch)||null,b={da:l(f&&f.mutagenHits),ln:l(p&&p.mutagenHits)},x=(T,M)=>e.palaces.map(R=>ga(R,T,M,e.palaces,b[M]||null)).join(""),z=(T,M)=>`<div class="pp-center">
1213
+ ${M==="da"?`<div class="ct-t1">大限 ${i.ganzhi} ${i.daxian.start}-${i.daxian.end}岁</div>`:M==="ln"&&p?`<div class="ct-t1">流年 ${p.ganzhi} ${p.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1176
1214
  <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>
1177
1215
  <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>
1178
- ${ta(e)?`<div class="ct-t3">${ta(e)}</div>`:""}
1216
+ ${ia(e)?`<div class="ct-t3">${ia(e)}</div>`:""}
1179
1217
  <div class="ct-t4">命主 ${e.lifeMaster} 身主 ${e.bodyMaster}${e.bodyMasterNote?`<span class="pp-dim" title="${t(e.bodyMasterNote)}">*</span>`:""}</div>
1180
1218
  <div class="ct-t4">命宫 ${e.soul.branch} 身宫 ${e.body.branch} 五行局 ${e.bureau.name}</div>
1181
1219
  <div class="ct-t4">子年斗君 ${e.doujun?e.doujun.zinian:"—"} 流年斗君 ${p&&p.doujun?p.doujun:"—"}</div>
1182
- <div class="ct-t4">紫微 ${e.ziwei} 天府 ${e.tianfu} ${C==="da"?"大限命宫 "+le[u]:C==="ln"?"流年命宫 "+le[m]:"本命命宫 "+e.soul.branch}</div>
1183
- ${C==="da"||C==="ln"?`<div class="ct-t4 pp-viewhua">${C==="da"?"大限":"流年"}四化 ${(C==="da"?x.da:x.ln)&&Object.keys(C==="da"?x.da:x.ln).length?Object.entries(C==="da"?x.da:x.ln).map(([ae,X])=>`${ae}化${X}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1220
+ <div class="ct-t4">紫微 ${e.ziwei} 天府 ${e.tianfu} ${M==="da"?"大限命宫 "+ce[g]:M==="ln"?"流年命宫 "+ce[u]:"本命命宫 "+e.soul.branch}</div>
1221
+ ${M==="da"||M==="ln"?`<div class="ct-t4 pp-viewhua">${M==="da"?"大限":"流年"}四化 ${(M==="da"?b.da:b.ln)&&Object.keys(M==="da"?b.da:b.ln).length?Object.entries(M==="da"?b.da:b.ln).map(([Z,Q])=>`${Z}化${Q}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1184
1222
  <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>
1185
- </div>`,w=(L,C,_)=>`<div class="pp-body ${L}" data-view="${_}" data-soul="${C}"><div class="pp-grid">${f(C,_)}${S(C,_)}</div><div class="pp-detail"></div></div>`,z=e.changqu,N=z?`<div class="pp-chips">
1186
- <span class="pp-chip">昌 ${z.wenchang.branch}(${z.wenchang.palace})</span>
1187
- <span class="pp-chip">曲 ${z.wenqu.branch}(${z.wenqu.palace})</span>
1188
- <span class="pp-chip">${z.relation}</span>
1189
- <span class="pp-chip">入命三方 ${z.inSoulSanfang?"是":"否"}</span>
1190
- <span class="pp-chip ${z.absorb.label==="杂"?"warn":"ok"}">吸收·${z.absorb.label}</span>
1191
- </div>`:"",M=(e.patterns||[]).length?`<div class="pp-chips">${e.patterns.map(L=>{const C=L.status==="broken"&&Array.isArray(L.breaks)&&L.breaks.length,_=`${L.evidence||""}${C?`;破格:${L.breaks.join(";")}`:""}`;return`<span class="pp-chip ${C?"broken":L.tone==="good"?"ok":L.tone==="bad"?"warn":""}" title="${t(_)}">${L.name}${C?"(破格)":""}</span>`}).join("")}</div>`:"",D=(e.daxianList||[]).length?`<div class="pp-chips">${e.daxianList.slice(0,8).map(L=>`<span class="pp-chip" title="${t(`${L.ganzhi} 宫干四化:`+L.mutagenHits.map(C=>`${C.star}化${C.type}→${C.palace||"未上盘"}`).join("、"))}">${L.branch} ${L.ages[0]}-${L.ages[1]}</span>`).join("")}</div>`:"",P=p&&p.mutagenHits&&p.mutagenHits.length?`<div class="pp-chips">${p.mutagenHits.map(L=>`<span class="pp-chip ${L.type==="忌"?"warn":L.type==="禄"?"ok":""}">${L.star}化${L.type}→${L.palace||"未上盘"}</span>`).join("")}</div>`:"",d=e.flyChains?(()=>{const L=["禄","权","科","忌"].map(C=>{const _=e.flyChains[C];if(!_||!_.steps.length)return"";const ae=_.path.map(ie=>String(ie).replace(/宫$/,"")).join("→"),X=_.steps.map(ie=>`${ie.from}(${ie.fromStem})化${C}${ie.star}→${ie.to}`).join(";");return`<span class="pp-chip ${C==="忌"?"warn":C==="禄"?"ok":""}" title="${t(X)}">飞${C} ${t(ae)}${_.closed?"↺":""}</span>`}).join("");return L?`<div class="pp-chips">${L}</div>`:""})():"",y=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(L=>{const C=/忌/.test(L)?"warn":/自化/.test(L)?"":"ok",_=ee=>String(ee).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),ae=(e.flyComposite.targets||[]).find(ee=>ee.palace===_(L)),X=ae?ae.incoming.map(ee=>`${ee.from}化${ee.type}${ee.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${C}" title="${t(X)}">三方四正 ${t(L)}</span>`}).join("")}</div>`:"",A=e.flow,I=A?(()=>{const L=X=>(X.mutagenHits||[]).length?X.mutagenHits.map(ee=>`<i>${ee.star}化${ee.type}<em>→${ee.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',C=(X,ee,ie)=>`<div class="flow-row"><b>${X}</b><span class="flow-p"><span class="flow-k">${ee.ganzhi||"—"} 落${ee.palace||"未上盘"}(${ee.branch})</span>${ie?`<em class="flow-same">${ie}</em>`:""}</span><span class="flow-m">${L(ee)}</span></div>`,ae=A.day.branch===A.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1192
- <div class="flow-row"><b>基准</b><span class="flow-p">${A.asOf.solar}</span><span class="flow-m">农历 ${A.asOf.lunar} 流年 ${A.asOf.yearGanzhi}(斗君 ${A.year.doujun})</span></div>
1193
- ${C(`流月 ${A.month.index} 月`,A.month)}
1194
- ${C(`流日 ${A.day.index} 日`,A.day,ae)}
1195
- ${C(`流时 ${le[A.hour.hourIndex]}时`,A.hour)}
1196
- </div>`})():"";return l._zw=e,`<div class="pp">
1223
+ </div>`,w=(T,M,R)=>`<div class="pp-body ${T}" data-view="${R}" data-soul="${M}"><div class="pp-grid">${x(M,R)}${z(M,R)}</div><div class="pp-detail"></div></div>`,k=e.changqu,q=k?`<div class="pp-chips">
1224
+ <span class="pp-chip">昌 ${k.wenchang.branch}(${k.wenchang.palace})</span>
1225
+ <span class="pp-chip">曲 ${k.wenqu.branch}(${k.wenqu.palace})</span>
1226
+ <span class="pp-chip">${k.relation}</span>
1227
+ <span class="pp-chip">入命三方 ${k.inSoulSanfang?"是":"否"}</span>
1228
+ <span class="pp-chip ${k.absorb.label==="杂"?"warn":"ok"}">吸收·${k.absorb.label}</span>
1229
+ </div>`:"",N=(e.patterns||[]).length?`<div class="pp-chips">${e.patterns.map(T=>{const M=T.status==="broken"&&Array.isArray(T.breaks)&&T.breaks.length,R=`${T.evidence||""}${M?`;破格:${T.breaks.join(";")}`:""}`;return`<span class="pp-chip ${M?"broken":T.tone==="good"?"ok":T.tone==="bad"?"warn":""}" title="${t(R)}">${T.name}${M?"(破格)":""}</span>`}).join("")}</div>`:"",D=(e.daxianList||[]).length?`<div class="pp-chips">${e.daxianList.slice(0,8).map(T=>`<span class="pp-chip" title="${t(`${T.ganzhi} 宫干四化:`+T.mutagenHits.map(M=>`${M.star}化${M.type}→${M.palace||"未上盘"}`).join("、"))}">${T.branch} ${T.ages[0]}-${T.ages[1]}</span>`).join("")}</div>`:"",E=p&&p.mutagenHits&&p.mutagenHits.length?`<div class="pp-chips">${p.mutagenHits.map(T=>`<span class="pp-chip ${T.type==="忌"?"warn":T.type==="禄"?"ok":""}">${T.star}化${T.type}→${T.palace||"未上盘"}</span>`).join("")}</div>`:"",c=e.flyChains?(()=>{const T=["禄","权","科","忌"].map(M=>{const R=e.flyChains[M];if(!R||!R.steps.length)return"";const Z=R.path.map(le=>String(le).replace(/宫$/,"")).join("→"),Q=R.steps.map(le=>`${le.from}(${le.fromStem})化${M}${le.star}→${le.to}`).join(";");return`<span class="pp-chip ${M==="忌"?"warn":M==="禄"?"ok":""}" title="${t(Q)}">飞${M} ${t(Z)}${R.closed?"↺":""}</span>`}).join("");return T?`<div class="pp-chips">${T}</div>`:""})():"",v=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(T=>{const M=/忌/.test(T)?"warn":/自化/.test(T)?"":"ok",R=te=>String(te).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),Z=(e.flyComposite.targets||[]).find(te=>te.palace===R(T)),Q=Z?Z.incoming.map(te=>`${te.from}化${te.type}${te.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${M}" title="${t(Q)}">三方四正 ${t(T)}</span>`}).join("")}</div>`:"",H=e.flow,I=H?(()=>{const T=Q=>(Q.mutagenHits||[]).length?Q.mutagenHits.map(te=>`<i>${te.star}化${te.type}<em>→${te.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',M=(Q,te,le)=>`<div class="flow-row"><b>${Q}</b><span class="flow-p"><span class="flow-k">${te.ganzhi||"—"} 落${te.palace||"未上盘"}(${te.branch})</span>${le?`<em class="flow-same">${le}</em>`:""}</span><span class="flow-m">${T(te)}</span></div>`,Z=H.day.branch===H.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1230
+ <div class="flow-row"><b>基准</b><span class="flow-p">${H.asOf.solar}</span><span class="flow-m">农历 ${H.asOf.lunar} 流年 ${H.asOf.yearGanzhi}(斗君 ${H.year.doujun})</span></div>
1231
+ ${M(`流月 ${H.month.index} 月`,H.month)}
1232
+ ${M(`流日 ${H.day.index} 日`,H.day,Z)}
1233
+ ${M(`流时 ${ce[H.hour.hourIndex]}时`,H.hour)}
1234
+ </div>`})():"";return r._zw=e,`<div class="pp">
1197
1235
  <input type="radio" name="ppm" id="ppm-ben" class="pp-r" checked>
1198
1236
  <input type="radio" name="ppm" id="ppm-da" class="pp-r">
1199
1237
  <input type="radio" name="ppm" id="ppm-ln" class="pp-r">
@@ -1202,145 +1240,145 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1202
1240
  <span class="pp-soon">点任一宫位看详情</span>
1203
1241
  </div>
1204
1242
  ${w("ben",n,"ben")}
1205
- ${w("da",u,"da")}
1206
- ${w("ln",m,"ln")}
1207
- </div>${I}${N}${d}${y}${M}${D}${P}`};function Ke(e){return e.length?e.map(n=>{const p=F[n.type]||"aux",g=n.brightness?`<em class="dt-br ${W[n.brightness]||"mid"}">${n.brightness}</em>`:"",i=n.mutagen?`<i class="pp-m ${V[n.mutagen]}">${n.mutagen}</i>`:"";return`<span class="dt-st ${p}">${n.name}${g}${i}</span>`}).join(""):'<span class="dt-empty">无</span>'}function ke(e,n){const p=l._zw;if(!p)return"";const g=d=>p.palaces.find(y=>le.indexOf(y.branch)===d),i=g(e)||p.palaces.find(d=>le.indexOf(d.branch)===e);if(!i)return"";const u=le.indexOf(i.branch),m=we[Q(n-u)],r=i.shensha||{},b=i.stars.filter(d=>d.type==="主星"),x=i.stars.filter(d=>d.type==="吉星"||d.type==="辅星"),f=i.stars.filter(d=>d.type==="煞星"),S=i.stars.filter(d=>!["主星","吉星","辅星","煞星"].includes(d.type)),w=(i.selfHua||[]).length?i.selfHua.map(d=>`<i class="pp-m self ${V[d.type]}" title="自化:宫干化回本宫">${d.type}</i>`).join(""):'<span class="dt-empty">无</span>',z=[Q(u+4),Q(u+8),Q(u+6)].map(d=>{const y=g(d),A=we[Q(n-d)],I=y?y.stars.filter(C=>C.type==="主星").map(C=>C.name).join("、"):"",L=d===Q(u+6)?"对宫":"三合";return`<span class="dt-st">${A}[${le[d]}]<b>${I||"无主星"}</b><em>${L}</em></span>`}).join(""),N=g(Q(u+6)),M=N?N.stars.filter(d=>d.type==="主星"):[],D=b.length?Ke(b):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${M.length?M.map(d=>d.name).join("、"):"亦无主星"}</b></span>`,P=(d,y)=>`<div class="dt-dr"><span class="dt-k">${d}</span><div class="dt-v">${y}</div></div>`;return`<div class="dt-dh">
1208
- <b>${m}</b><span>${i.branch}宫 · ${i.ganzhi}</span>
1243
+ ${w("da",g,"da")}
1244
+ ${w("ln",u,"ln")}
1245
+ </div>${I}${q}${c}${v}${N}${D}${E}`};function We(e){return e.length?e.map(n=>{const p=F[n.type]||"aux",m=n.brightness?`<em class="dt-br ${J[n.brightness]||"mid"}">${n.brightness}</em>`:"",i=n.mutagen?`<i class="pp-m ${U[n.mutagen]}">${n.mutagen}</i>`:"";return`<span class="dt-st ${p}">${n.name}${m}${i}</span>`}).join(""):'<span class="dt-empty">无</span>'}function ze(e,n){const p=r._zw;if(!p)return"";const m=c=>p.palaces.find(v=>ce.indexOf(v.branch)===c),i=m(e)||p.palaces.find(c=>ce.indexOf(c.branch)===e);if(!i)return"";const g=ce.indexOf(i.branch),u=ke[ae(n-g)],l=i.shensha||{},f=i.stars.filter(c=>c.type==="主星"),b=i.stars.filter(c=>c.type==="吉星"||c.type==="辅星"),x=i.stars.filter(c=>c.type==="煞星"),z=i.stars.filter(c=>!["主星","吉星","辅星","煞星"].includes(c.type)),w=(i.selfHua||[]).length?i.selfHua.map(c=>`<i class="pp-m self ${U[c.type]}" title="自化:宫干化回本宫">${c.type}</i>`).join(""):'<span class="dt-empty">无</span>',k=[ae(g+4),ae(g+8),ae(g+6)].map(c=>{const v=m(c),H=ke[ae(n-c)],I=v?v.stars.filter(M=>M.type==="主星").map(M=>M.name).join("、"):"",T=c===ae(g+6)?"对宫":"三合";return`<span class="dt-st">${H}[${ce[c]}]<b>${I||"无主星"}</b><em>${T}</em></span>`}).join(""),q=m(ae(g+6)),N=q?q.stars.filter(c=>c.type==="主星"):[],D=f.length?We(f):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${N.length?N.map(c=>c.name).join("、"):"亦无主星"}</b></span>`,E=(c,v)=>`<div class="dt-dr"><span class="dt-k">${c}</span><div class="dt-v">${v}</div></div>`;return`<div class="dt-dh">
1246
+ <b>${u}</b><span>${i.branch}宫 · ${i.ganzhi}</span>
1209
1247
  <span>大限 ${i.daxian.start}-${i.daxian.end}</span>
1210
1248
  <span>小限起 ${i.xiaoxian.age} 岁</span>
1211
1249
  ${i.isBody?"<span>· 身宫</span>":""}
1212
1250
  <span class="dt-x" data-pp-close="1">收起</span>
1213
1251
  </div>
1214
- ${P("主星",D)}
1215
- ${P("吉辅",Ke(x))}
1216
- ${f.length?P("煞星",Ke(f)):""}
1217
- ${S.length?P("杂曜",Ke(S)):""}
1218
- ${P("宫干四化",w)}
1219
- ${P("十二神",`<span class="dt-tri">长生 ${r.changsheng||"—"} 博士 ${r.boshi||"—"} 将前 ${r.jiangqian||"—"} 岁前 ${r.suiqi||"—"}</span>`)}
1220
- ${P("三方四正",`<span class="dt-tri">${z}</span>`)}
1221
- <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function ia(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(n=>{n.classList.remove("pp-sel"),n.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(n=>n.setAttribute("aria-expanded","false"))}function ve(){if(ve.done||typeof document>"u"||!document.addEventListener)return;ve.done=!0;const e=n=>{const p=n.closest(".pp-body");if(!p)return;const g=p.querySelector(".pp-detail");if(!g)return;if(n.classList.contains("pp-sel")){ia(p),g.classList.remove("open"),g.innerHTML="";return}ia(p);const i=Number(n.dataset.pi),u=Number(p.dataset.soul);p.querySelectorAll(".pp-cell").forEach(r=>{const b=Number(r.dataset.pi);(b===Q(i+4)||b===Q(i+8)||b===Q(i+6))&&r.classList.add("pp-link")}),n.classList.add("pp-sel"),n.setAttribute("aria-expanded","true"),g.innerHTML=ke(i,u),g.classList.add("open")};document.addEventListener("click",n=>{const p=n.target;if(p&&p.closest&&p.closest("[data-pp-close]")){const i=p.closest(".pp-body");if(i){ia(i);const u=i.querySelector(".pp-detail");u&&(u.classList.remove("open"),u.innerHTML="");return}}const g=p&&p.closest?p.closest(".pp-cell[data-pi]"):null;g&&e(g)}),document.addEventListener("keydown",n=>{if(n.key!=="Enter"&&n.key!==" ")return;const p=n.target&&n.target.closest?n.target.closest(".pp-cell[data-pi]"):null;p&&(n.preventDefault(),e(p))})}l.bindZiwei=ve,l._palaceDetailHTML=ke,ve();function ga(e,n){const p=n||{},g=e.slice().sort((i,u)=>u.position-i.position);return p.plain?g.map(i=>`<div class="mp-hy-row hy-plain">
1222
- <span class="mp-hy-nm">${i.name||se[i.position-1]}</span>
1223
- ${O(i.yinYang==="阳",i.moving)}
1224
- </div>`).join(""):g.map(i=>{const u=i.yinYang==="阳",m=p.shiYing?i.position===p.shi?'<span class="mp-hy-sy">世</span>':i.position===p.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",r=i.moving?`<i class="mp-hy-mv" title="动爻">${u?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1225
- ${m}
1226
- <span class="mp-hy-nm">${i.name||se[i.position-1]}</span>
1227
- <span class="mp-hy-ln">${O(u,i.moving)}${r}</span>
1252
+ ${E("主星",D)}
1253
+ ${E("吉辅",We(b))}
1254
+ ${x.length?E("煞星",We(x)):""}
1255
+ ${z.length?E("杂曜",We(z)):""}
1256
+ ${E("宫干四化",w)}
1257
+ ${E("十二神",`<span class="dt-tri">长生 ${l.changsheng||"—"} 博士 ${l.boshi||"—"} 将前 ${l.jiangqian||"—"} 岁前 ${l.suiqi||"—"}</span>`)}
1258
+ ${E("三方四正",`<span class="dt-tri">${k}</span>`)}
1259
+ <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function na(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(n=>{n.classList.remove("pp-sel"),n.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(n=>n.setAttribute("aria-expanded","false"))}function ve(){if(ve.done||typeof document>"u"||!document.addEventListener)return;ve.done=!0;const e=n=>{const p=n.closest(".pp-body");if(!p)return;const m=p.querySelector(".pp-detail");if(!m)return;if(n.classList.contains("pp-sel")){na(p),m.classList.remove("open"),m.innerHTML="";return}na(p);const i=Number(n.dataset.pi),g=Number(p.dataset.soul);p.querySelectorAll(".pp-cell").forEach(l=>{const f=Number(l.dataset.pi);(f===ae(i+4)||f===ae(i+8)||f===ae(i+6))&&l.classList.add("pp-link")}),n.classList.add("pp-sel"),n.setAttribute("aria-expanded","true"),m.innerHTML=ze(i,g),m.classList.add("open")};document.addEventListener("click",n=>{const p=n.target;if(p&&p.closest&&p.closest("[data-pp-close]")){const i=p.closest(".pp-body");if(i){na(i);const g=i.querySelector(".pp-detail");g&&(g.classList.remove("open"),g.innerHTML="");return}}const m=p&&p.closest?p.closest(".pp-cell[data-pi]"):null;m&&e(m)}),document.addEventListener("keydown",n=>{if(n.key!=="Enter"&&n.key!==" ")return;const p=n.target&&n.target.closest?n.target.closest(".pp-cell[data-pi]"):null;p&&(n.preventDefault(),e(p))})}r.bindZiwei=ve,r._palaceDetailHTML=ze,ve();function ua(e,n){const p=n||{},m=e.slice().sort((i,g)=>g.position-i.position);return p.plain?m.map(i=>`<div class="mp-hy-row hy-plain">
1260
+ <span class="mp-hy-nm">${i.name||pe[i.position-1]}</span>
1261
+ ${P(i.yinYang==="阳",i.moving)}
1262
+ </div>`).join(""):m.map(i=>{const g=i.yinYang==="阳",u=p.shiYing?i.position===p.shi?'<span class="mp-hy-sy">世</span>':i.position===p.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",l=i.moving?`<i class="mp-hy-mv" title="动爻">${g?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1263
+ ${u}
1264
+ <span class="mp-hy-nm">${i.name||pe[i.position-1]}</span>
1265
+ <span class="mp-hy-ln">${P(g,i.moving)}${l}</span>
1228
1266
  <span class="mp-hy-gz">${t(i.ganzhi||"")}</span>
1229
1267
  <span class="mp-hy-lq">${t(i.liuqin||"")}</span>
1230
1268
  <span class="mp-hy-ls">${t(i.liushen||"")}</span>
1231
- </div>`}).join("")}l.liuyaoHTML=function(e){const n=(d,y,A,I)=>`<div class="mp-hy-box">
1232
- <div class="mp-hy-h"><b>${d}</b><span>${y}</span></div>
1233
- <div class="mp-hy">${ga(I,{shiYing:!0,shi:A.shi,ying:A.ying})}</div>
1234
- </div>`,p=n(`本卦 ${e.ben.name}`,`${e.ben.palace} · ${e.ben.palaceElement}`,e.ben,e.ben.lines),g=e.bian?n(`变卦 ${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>
1235
- <div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,i=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],u=i.length?`<div class="pp-chips">${i.map(d=>`<span class="pp-chip ${/伏吟/.test(d)||/反吟/.test(d)||/化退神/.test(d)?"warn":/六冲|散/.test(d)?"":"ok"}">${t(d)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',m=e.useGod&&e.useGod.liuqin?e.useGod:null,r=m?`<div class="pp-chips">${m.labels.map(d=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(d)?"warn":/持世|化进|六合|得飞神生/.test(d)?"ok":""}">${t(d)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',b=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,x=b&&b.labels.length?`<div class="pp-chips">${b.labels.map(d=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(d)?"warn":/旺|相|得日辰生|比和/.test(d)?"ok":""}">${t(d)}</span>`).join("")}</div>`:"",f=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,S=f&&f.labels.length?`<div class="pp-chips">${f.labels.map(d=>`<span class="pp-chip ${/可出/.test(d)?"ok":/受压难出|有助有压/.test(d)?"warn":""}">伏神${t(d)}</span>`).join("")}</div>`:"",w=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,z=w&&w.labels.length?`<div class="pp-chips">${w.labels.map(d=>`<span class="pp-chip ${/应期偏速/.test(d)?"ok":/应期待解/.test(d)?"warn":""}" title="只列地支,不出日期">${t(d)}</span>`).join("")}</div>`:"",N=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,M=N&&N.labels.length?`<div class="pp-chips">${N.labels.map(d=>`<span class="pp-chip ${/后劲足|退得缓/.test(d)?"ok":/有限|进得虚|退得实|月破|未定/.test(d)?"warn":""}">${t(d)}</span>`).join("")}</div>`:"",D=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,P=D&&D.labels.length?`<div class="pp-chips">${D.labels.map(d=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(d)?"warn":/旺|相/.test(d)?"ok":""}">${t(d)}</span>`).join("")}</div>`:"";return`<div class="pp" style="padding:14px">
1269
+ </div>`}).join("")}r.liuyaoHTML=function(e){const n=(c,v,H,I)=>`<div class="mp-hy-box">
1270
+ <div class="mp-hy-h"><b>${c}</b><span>${v}</span></div>
1271
+ <div class="mp-hy">${ua(I,{shiYing:!0,shi:H.shi,ying:H.ying})}</div>
1272
+ </div>`,p=n(`本卦 ${e.ben.name}`,`${e.ben.palace} · ${e.ben.palaceElement}`,e.ben,e.ben.lines),m=e.bian?n(`变卦 ${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>
1273
+ <div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,i=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],g=i.length?`<div class="pp-chips">${i.map(c=>`<span class="pp-chip ${/伏吟/.test(c)||/反吟/.test(c)||/化退神/.test(c)?"warn":/六冲|散/.test(c)?"":"ok"}">${t(c)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',u=e.useGod&&e.useGod.liuqin?e.useGod:null,l=u?`<div class="pp-chips">${u.labels.map(c=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(c)?"warn":/持世|化进|六合|得飞神生/.test(c)?"ok":""}">${t(c)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',f=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,b=f&&f.labels.length?`<div class="pp-chips">${f.labels.map(c=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(c)?"warn":/旺|相|得日辰生|比和/.test(c)?"ok":""}">${t(c)}</span>`).join("")}</div>`:"",x=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,z=x&&x.labels.length?`<div class="pp-chips">${x.labels.map(c=>`<span class="pp-chip ${/可出/.test(c)?"ok":/受压难出|有助有压/.test(c)?"warn":""}">伏神${t(c)}</span>`).join("")}</div>`:"",w=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,k=w&&w.labels.length?`<div class="pp-chips">${w.labels.map(c=>`<span class="pp-chip ${/应期偏速/.test(c)?"ok":/应期待解/.test(c)?"warn":""}" title="只列地支,不出日期">${t(c)}</span>`).join("")}</div>`:"",q=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,N=q&&q.labels.length?`<div class="pp-chips">${q.labels.map(c=>`<span class="pp-chip ${/后劲足|退得缓/.test(c)?"ok":/有限|进得虚|退得实|月破|未定/.test(c)?"warn":""}">${t(c)}</span>`).join("")}</div>`:"",D=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,E=D&&D.labels.length?`<div class="pp-chips">${D.labels.map(c=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(c)?"warn":/旺|相/.test(c)?"ok":""}">${t(c)}</span>`).join("")}</div>`:"";return`<div class="pp" style="padding:14px">
1236
1274
  <div class="mp-mh-head">起卦 ${e.cast.notation.join("、")}(自下而上) 日辰 ${e.dayGanZhi.name}</div>
1237
- <div class="mp-hy-wrap">${p}${g}</div>
1238
- ${u}
1239
- ${r}
1240
- ${x}
1241
- ${S}
1275
+ <div class="mp-hy-wrap">${p}${m}</div>
1276
+ ${g}
1277
+ ${l}
1278
+ ${b}
1242
1279
  ${z}
1243
- ${M}
1244
- ${P}
1245
- </div>`},l.meihuaHTML=function(e){const n=(z,N,M,D,P)=>{const y=[...te[D]||[0,0,0],...te[M]||[0,0,0]].slice().reverse().map(A=>O(!!A,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1246
- <div class="hb-h">${z}</div>
1247
- <div class="hb-n">${N}</div>
1248
- <div class="mp-mh-mini">${y}</div>
1249
- <div class="hb-s">${P||`上${M} 下${D}`}</div>
1250
- </div>`},p=e.lines.slice().sort((z,N)=>N.position-z.position),g=p.slice(0,3),i=p.slice(3),u=e.moving>=4,m=(z,N,M,D)=>`<div class="mp-trib">
1251
- <div class="mp-trib-h">${z} ${ue(N)}${N}${fa(N)}<span class="mp-tritag ${D?"tritag-ti":"tritag-yong"}">${D?"体":"用"}</span></div>
1252
- <div class="mp-hy" style="gap:5px">${ga(M,{plain:!0})}</div>
1253
- </div>`,r=`<div class="mp-hexbox">
1280
+ ${k}
1281
+ ${N}
1282
+ ${E}
1283
+ </div>`},r.meihuaHTML=function(e){const n=(k,q,N,D,E)=>{const v=[...ne[D]||[0,0,0],...ne[N]||[0,0,0]].slice().reverse().map(H=>P(!!H,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1284
+ <div class="hb-h">${k}</div>
1285
+ <div class="hb-n">${q}</div>
1286
+ <div class="mp-mh-mini">${v}</div>
1287
+ <div class="hb-s">${E||`上${N} 下${D}`}</div>
1288
+ </div>`},p=e.lines.slice().sort((k,q)=>q.position-k.position),m=p.slice(0,3),i=p.slice(3),g=e.moving>=4,u=(k,q,N,D)=>`<div class="mp-trib">
1289
+ <div class="mp-trib-h">${k} ${fe(q)}${q}${ba(q)}<span class="mp-tritag ${D?"tritag-ti":"tritag-yong"}">${D?"体":"用"}</span></div>
1290
+ <div class="mp-hy" style="gap:5px">${ua(N,{plain:!0})}</div>
1291
+ </div>`,l=`<div class="mp-hexbox">
1254
1292
  <div class="hb-h"><span>本卦</span><span>动 ${e.movingName}</span></div>
1255
1293
  <div class="hb-n">${e.ben.name}</div>
1256
- ${m("上卦",e.ben.upper,g,!u)}
1257
- ${m("下卦",e.ben.lower,i,u)}
1294
+ ${u("上卦",e.ben.upper,m,!g)}
1295
+ ${u("下卦",e.ben.lower,i,g)}
1258
1296
  <div class="hb-s">${e.source}</div>
1259
- </div>`,b=e.bodyUse.level,x=b.includes("凶")?"bad":b.includes("吉")?"good":"flat",f=`<div class="mp-mh-rel">
1297
+ </div>`,f=e.bodyUse.level,b=f.includes("凶")?"bad":f.includes("吉")?"good":"flat",x=`<div class="mp-mh-rel">
1260
1298
  <div><b>体</b>${e.bodyUse.body.trigram}(${e.bodyUse.body.element}) <b>用</b>${e.bodyUse.use.trigram}(${e.bodyUse.use.element})</div>
1261
- <div><span class="mh-lv ${x}">${b}</span> ${e.bodyUse.relation}</div>
1262
- </div>`,S=ba(e.cuo.name)||["",""],w=ba(e.zong.name)||["",""];return`<div class="pp mp-mh">
1299
+ <div><span class="mh-lv ${b}">${f}</span> ${e.bodyUse.relation}</div>
1300
+ </div>`,z=ha(e.cuo.name)||["",""],w=ha(e.zong.name)||["",""];return`<div class="pp mp-mh">
1263
1301
  <div class="mp-mh-main">
1264
- ${r}
1302
+ ${l}
1265
1303
  ${n("互卦",e.hu.name,e.hu.upper,e.hu.lower,"中藏之象")}
1266
1304
  ${n("变卦",e.bian.name,e.bian.upper,e.bian.lower,`动 ${e.movingName} 后`)}
1267
- ${n("错卦",e.cuo.name,S[0],S[1],"六爻全变")}
1305
+ ${n("错卦",e.cuo.name,z[0],z[1],"六爻全变")}
1268
1306
  ${n("综卦",e.zong.name,w[0],w[1],"整卦倒转")}
1269
1307
  </div>
1270
- ${f}
1271
- </div>`};const ua={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},xa={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},fa=e=>xa[e]?` ${xa[e]}`:"",ba=e=>ua[e]||null;l.daliurenHTML=function(e){const n=e.sanChuan,p=(r,b)=>`<div class="mp-dl-sc-c">
1272
- <div class="mp-dl-sc-k">${b}</div>
1273
- <div class="mp-dl-sc-z">${r.zhi}</div>
1274
- <div class="mp-dl-sc-j">${r.jiangFull||r.jiang}</div>
1275
- <div class="mp-dl-sc-l">${r.liuQin}${r.xunKong?" · 空":""}</div>
1276
- </div>`,g=`<div class="mp-dl-sc-c ge">
1308
+ ${x}
1309
+ </div>`};const xa={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},fa={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},ba=e=>fa[e]?` ${fa[e]}`:"",ha=e=>xa[e]||null;r.daliurenHTML=function(e){const n=e.sanChuan,p=(l,f)=>`<div class="mp-dl-sc-c">
1310
+ <div class="mp-dl-sc-k">${f}</div>
1311
+ <div class="mp-dl-sc-z">${l.zhi}</div>
1312
+ <div class="mp-dl-sc-j">${l.jiangFull||l.jiang}</div>
1313
+ <div class="mp-dl-sc-l">${l.liuQin}${l.xunKong?" · 空":""}</div>
1314
+ </div>`,m=`<div class="mp-dl-sc-c ge">
1277
1315
  <div class="mp-dl-sc-k">格局</div>
1278
1316
  <div class="mp-dl-sc-gn">${e.geJu.name}</div>
1279
1317
  <div class="mp-dl-sc-l">${e.geJu.detail}</div>
1280
- </div>`,i=e.siKe.slice().map(r=>`<div class="mp-dl-sk-c">
1281
- <div class="mp-dl-sk-k">${["一课","二课","三课","四课"][r.position-1]||r.position+"课"}</div>
1282
- <div class="mp-dl-sk-s">${r.shang}</div>
1283
- <div class="mp-dl-sk-x">${r.xia}</div>
1284
- <div class="mp-dl-sk-r">${r.relation} · ${r.jiangFull||r.jiang}</div>
1285
- </div>`).join(""),u=e.pan.map(r=>{const b=ne[r.di]||[1,1];return`<div class="mp-dl-pc" style="grid-row:${b[0]};grid-column:${b[1]}">
1286
- <div class="tz">${r.tian}</div>
1287
- <div class="dz">地盘 ${r.di}</div>
1288
- <div class="jz">${r.jiangFull}</div>
1289
- </div>`}).join(""),m=`<div class="mp-dl-c">
1318
+ </div>`,i=e.siKe.slice().map(l=>`<div class="mp-dl-sk-c">
1319
+ <div class="mp-dl-sk-k">${["一课","二课","三课","四课"][l.position-1]||l.position+"课"}</div>
1320
+ <div class="mp-dl-sk-s">${l.shang}</div>
1321
+ <div class="mp-dl-sk-x">${l.xia}</div>
1322
+ <div class="mp-dl-sk-r">${l.relation} · ${l.jiangFull||l.jiang}</div>
1323
+ </div>`).join(""),g=e.pan.map(l=>{const f=oe[l.di]||[1,1];return`<div class="mp-dl-pc" style="grid-row:${f[0]};grid-column:${f[1]}">
1324
+ <div class="tz">${l.tian}</div>
1325
+ <div class="dz">地盘 ${l.di}</div>
1326
+ <div class="jz">${l.jiangFull}</div>
1327
+ </div>`}).join(""),u=`<div class="mp-dl-c">
1290
1328
  <div class="dl-t1">${e.dayGanZhi}日 ${e.hourZhi}时</div>
1291
1329
  <div class="dl-t2">${e.dayNight}贵 · 月将 ${e.yueJiang.name}${e.yueJiang.zhi} · 贵人${e.guiren.reverse?"逆":"顺"}行</div>
1292
1330
  <div class="dl-t3">${n.chu.zhi} → ${n.zhong.zhi} → ${n.mo.zhi}</div>
1293
1331
  <div class="dl-t2">节气 ${e.jieqi.name}${e.jieqi.time?" "+e.jieqi.time:""}</div>
1294
1332
  </div>`;return`<div class="pp mp-dl">
1295
1333
  <div class="mp-dl-head">日 ${e.dayGanZhi} 时 ${e.hourZhi}(${e.dayNight}贵) 月将 ${e.yueJiang.name}${e.yueJiang.zhi} 节气 ${e.jieqi.name} 贵人${e.guiren.reverse?"逆":"顺"}行</div>
1296
- <div class="mp-dl-sc">${p(n.chu,"初传")}${p(n.zhong,"中传")}${p(n.mo,"末传")}${g}</div>
1334
+ <div class="mp-dl-sc">${p(n.chu,"初传")}${p(n.zhong,"中传")}${p(n.mo,"末传")}${m}</div>
1297
1335
  <div class="mp-dl-sk">${i}</div>
1298
- <div class="mp-dl-pan2">${u}${m}</div>
1299
- ${(e.shensha||[]).length?`<div class="mp-dl-ss"><b>神煞</b>${e.shensha.map(r=>`<span title="${t(r.note||"")}">${r.name}<i>${r.branch}</i></span>`).join("")}</div>`:""}
1336
+ <div class="mp-dl-pan2">${g}${u}</div>
1337
+ ${(e.shensha||[]).length?`<div class="mp-dl-ss"><b>神煞</b>${e.shensha.map(l=>`<span title="${t(l.note||"")}">${l.name}<i>${l.branch}</i></span>`).join("")}</div>`:""}
1300
1338
  <div class="mp-dl-legend"><span>大字=天盘支</span><span>小字=地盘(固定十二支)</span><span>右下=天将</span></div>
1301
- </div>`},l.tarotHTML=function(e){const n=e.cards.map(i=>`
1339
+ </div>`},r.tarotHTML=function(e){const n=e.cards.map(i=>`
1302
1340
  <div class="mp-tt-card ${i.upright?"tt-up":"tt-rev"}">
1303
1341
  <div class="mp-tt-pos" title="${t(i.positionHint||"")}">${i.position}</div>
1304
1342
  <div class="mp-tt-name">${i.name}${i.number?`<span class="mp-tt-no">${i.number}</span>`:""}</div>
1305
1343
  <div class="mp-tt-ori">${i.orientation}</div>
1306
1344
  ${i.core?`<div class="mp-tt-core">${i.core}</div>`:""}
1307
- <div class="mp-tt-kw">${i.keywords.map(u=>`<span>${u}</span>`).join("")}</div>
1345
+ <div class="mp-tt-kw">${i.keywords.map(g=>`<span>${g}</span>`).join("")}</div>
1308
1346
  <div class="mp-tt-el">${i.arcana} · ${i.element}${i.suit?" · "+i.suit+(i.rankCn?i.rankCn:""):""}${i.domain?" · "+i.domain:""}</div>
1309
- </div>`).join(""),p=e.question?t(e.question):'<span class="pp-dim">(未填写,可在上方输入后重抽)</span>',g=(e.reading||[]).map(i=>`<p>${t(i)}</p>`).join("");return`<div class="pp mp-tt">
1347
+ </div>`).join(""),p=e.question?t(e.question):'<span class="pp-dim">(未填写,可在上方输入后重抽)</span>',m=(e.reading||[]).map(i=>`<p>${t(i)}</p>`).join("");return`<div class="pp mp-tt">
1310
1348
  <div class="mp-tt-q"><b>所问</b>${p}</div>
1311
1349
  <div class="mp-tt-head">${e.spread}${e.castAt?` · 抽牌于 ${e.castAt}`:""}</div>
1312
1350
  <div class="mp-tt-grid">${n}</div>
1313
- <div class="mp-tt-read"><div class="mp-tt-rt">牌面解读</div>${g}</div>
1351
+ <div class="mp-tt-read"><div class="mp-tt-rt">牌面解读</div>${m}</div>
1314
1352
  <div class="mp-tt-note"><div class="mp-tt-rt">你的记录</div>
1315
1353
  <textarea class="mp-tt-ta" rows="4" placeholder="写下判断或对照后的想法……(仅本页可见,不保存)"></textarea>
1316
1354
  </div>
1317
1355
  ${e.systemNote?`<div class="mp-tt-tip">${e.systemNote}</div>`:""}
1318
1356
  <div class="mp-tt-tip">塔罗用于自我觉察与娱乐,不作确定性预言。</div>
1319
- </div>`},l.hepanHTML=function(e){const n=(g,i)=>`<div class="mp-hp-side">
1357
+ </div>`},r.hepanHTML=function(e){const n=(m,i)=>`<div class="mp-hp-side">
1320
1358
  <div class="mp-hp-who">${i}</div>
1321
- <div class="mp-hp-gz">${g.pillars.join(" ")}</div>
1322
- <div class="mp-hp-kv"><span>日主</span><b>${g.dayMaster}</b></div>
1323
- <div class="mp-hp-kv"><span>日支</span><b>${g.dayBranch}</b></div>
1324
- <div class="mp-hp-kv"><span>强弱</span><b>${g.strength||"—"}</b></div>
1325
- <div class="mp-hp-kv"><span>喜用</span><b>${g.favor||"—"}</b></div>
1326
- </div>`,p=e.dimensions.map(g=>`<div class="mp-hp-dim">
1327
- <div class="mp-hp-dimh"><span>${g.label}</span><b class="${g.score>=10?"good":g.score<0?"bad":""}">${g.score>=0?"+":""}${g.score}</b></div>
1328
- <div class="mp-hp-dimt">${g.text}</div>
1359
+ <div class="mp-hp-gz">${m.pillars.join(" ")}</div>
1360
+ <div class="mp-hp-kv"><span>日主</span><b>${m.dayMaster}</b></div>
1361
+ <div class="mp-hp-kv"><span>日支</span><b>${m.dayBranch}</b></div>
1362
+ <div class="mp-hp-kv"><span>强弱</span><b>${m.strength||"—"}</b></div>
1363
+ <div class="mp-hp-kv"><span>喜用</span><b>${m.favor||"—"}</b></div>
1364
+ </div>`,p=e.dimensions.map(m=>`<div class="mp-hp-dim">
1365
+ <div class="mp-hp-dimh"><span>${m.label}</span><b class="${m.score>=10?"good":m.score<0?"bad":""}">${m.score>=0?"+":""}${m.score}</b></div>
1366
+ <div class="mp-hp-dimt">${m.text}</div>
1329
1367
  </div>`).join("");return`<div class="pp mp-hp">
1330
1368
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100</span></div>
1331
1369
  <div class="mp-hp-sides">${n(e.a,"你")}${n(e.b,"对方")}</div>
1332
1370
  <div class="mp-hp-dims">${p}</div>
1333
- <div class="mp-hp-notes">${e.notes.map(g=>`<p>${g}</p>`).join("")}</div>
1334
- </div>`},l.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const n=(i,u)=>`<div class="relation__row"><dt>${t(i)}</dt><dd>${t(u)}</dd></div>`,p=i=>i&&["旺","相","休","囚","死"].filter(m=>Array.isArray(i[m])&&i[m].length).map(m=>`${m} ${i[m].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(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(u=>u&&u.ganYing).map(u=>`${u.palace}宫 ${u.ganYing.tian}加${u.ganYing.di}「${u.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",p(e.states&&e.states.gate)],["星旺衰",p(e.states&&e.states.star)],["干旺衰",p(e.states&&e.states.stem)],["干宫生克",(()=>{const i=["干克宫","宫克干","干生宫","宫生干","比和"],u={};for(const m of e.palaces||[]){const r=m.stemRelation||null;!r||r.type==="unknown"||!m.tianPan||(u[r.type]=u[r.type]||[]).push(m.tianPan)}return i.filter(m=>u[m]).map(m=>m+" "+u[m].join("、")).join(";")||"—"})()]].map(([i,u])=>n(i,u)).join("")}</dl>`};const qe=[["4","9","2"],["3","5","7"],["8","1","6"]];l.qimenHTML=function(e){const n={};for(const g of e.palaces)n[g.palace]=g;const p=g=>{if(g==="5")return`<div class="pp-qm-cell center">
1371
+ <div class="mp-hp-notes">${e.notes.map(m=>`<p>${m}</p>`).join("")}</div>
1372
+ </div>`},r.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const n=(i,g)=>`<div class="relation__row"><dt>${t(i)}</dt><dd>${t(g)}</dd></div>`,p=i=>i&&["旺","相","休","囚","死"].filter(u=>Array.isArray(i[u])&&i[u].length).map(u=>`${u} ${i[u].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(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(i=>`${i.palace}宫${i.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(g=>g&&g.ganYing).map(g=>`${g.palace}宫 ${g.ganYing.tian}加${g.ganYing.di}「${g.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",p(e.states&&e.states.gate)],["星旺衰",p(e.states&&e.states.star)],["干旺衰",p(e.states&&e.states.stem)],["干宫生克",(()=>{const i=["干克宫","宫克干","干生宫","宫生干","比和"],g={};for(const u of e.palaces||[]){const l=u.stemRelation||null;!l||l.type==="unknown"||!u.tianPan||(g[l.type]=g[l.type]||[]).push(u.tianPan)}return i.filter(u=>g[u]).map(u=>u+" "+g[u].join("、")).join(";")||"—"})()]].map(([i,g])=>n(i,g)).join("")}</dl>`};const Me=[["4","9","2"],["3","5","7"],["8","1","6"]];r.qimenHTML=function(e){const n={};for(const m of e.palaces)n[m.palace]=m;const p=m=>{if(m==="5")return`<div class="pp-qm-cell center">
1335
1373
  <div class="pp-qm-ju">${e.ju}</div>
1336
1374
  <div class="pp-qm-kv">${e.siZhu.year} ${e.siZhu.month}</div>
1337
1375
  <div class="pp-qm-kv">${e.siZhu.day} ${e.siZhu.time}</div>
1338
1376
  <div class="pp-qm-kv dim">${e.jieqi} ${e.yuan}</div>
1339
- </div>`;const i=n[g]||{};return`<div class="pp-qm-cell">
1377
+ </div>`;const i=n[m]||{};return`<div class="pp-qm-cell">
1340
1378
  <div class="pp-qm-top"><span class="god">${i.god||""}</span><span class="mk">${i.kong?"空":""}${i.ma?"马":""}</span></div>
1341
1379
  <div class="pp-qm-mid"><span class="tp">${i.tianPan||""}</span><span class="star">${i.star||""}</span></div>
1342
1380
  <div class="pp-qm-mid"><span class="dp">${i.diPan||""}</span><span class="gate">${i.gate||""}</span></div>
1343
- <div class="pp-qm-bot"><span>${i.anGan||""}</span><span class="no">${g}</span></div>
1381
+ <div class="pp-qm-bot"><span>${i.anGan||""}</span><span class="no">${m}</span></div>
1344
1382
  <div class="pp-qm-bot"><span class="dim">${i.stemRelation&&i.stemRelation.type!=="unknown"?i.stemRelation.type:""}</span><span class="dim">${i.stemState||""}</span></div>
1345
1383
  <div class="pp-qm-bot"><span class="dim">${i.ganYing?t(`${i.ganYing.tian}加${i.ganYing.di} ${i.ganYing.name}`):""}</span></div>
1346
1384
  </div>`};return`<div class="pp mp-qm">
@@ -1351,11 +1389,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1351
1389
  <span>值符 ${e.zhiFu.star}(${e.zhiFu.gong}宫) 值使 ${e.zhiShi.gate}(${e.zhiShi.gong}宫)</span>
1352
1390
  <span>旬首 ${e.xunshou} 空亡 ${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}</span>
1353
1391
  </div>
1354
- <div class="mp-qm-grid">${qe.map(g=>g.map(p).join("")).join("")}</div>
1392
+ <div class="mp-qm-grid">${Me.map(m=>m.map(p).join("")).join("")}</div>
1355
1393
  <div class="mp-qm-legend">上=九星 中=天盘干/八门 下=地盘干/宫号 角落=八神</div>
1356
- <div class="mp-qm-rules">${e.rules.map(g=>`<p>${g}</p>`).join("")}</div>
1357
- </div>`},l.ziweiHepanHTML=function(e){const n=(i,u)=>`<div class="mp-hp-side">
1358
- <div class="mp-hp-who">${u}</div>
1394
+ <div class="mp-qm-rules">${e.rules.map(m=>`<p>${m}</p>`).join("")}</div>
1395
+ </div>`},r.ziweiHepanHTML=function(e){const n=(i,g)=>`<div class="mp-hp-side">
1396
+ <div class="mp-hp-who">${g}</div>
1359
1397
  <div class="mp-hp-gz">命宫 ${i.soul.branch} 夫妻 ${i.soul.branch,""}${i.spouseStars.length,""}</div>
1360
1398
  <div class="mp-hp-kv"><span>命宫主星</span><b>${i.soulStars.join("、")||"无正曜"}</b></div>
1361
1399
  <div class="mp-hp-kv"><span>夫妻宫主星</span><b>${i.spouseStars.join("、")||"无正曜"}</b></div>
@@ -1365,233 +1403,244 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1365
1403
  </div>`,p=e.dimensions.map(i=>`<div class="mp-hp-dim">
1366
1404
  <div class="mp-hp-dimh"><span>${i.label}</span><b class="${i.score>=10?"good":i.score<0?"bad":""}">${i.score>=0?"+":""}${i.score}</b></div>
1367
1405
  <div class="mp-hp-dimt">${i.text}</div>
1368
- </div>`).join(""),g=i=>(e.interactions||[]).filter(u=>u.who===i).map(u=>`<li><b class="m-${u.mutagen}">${u.mutagen}</b>${u.star}:本命${u.ownPalace} → 对方${u.landingPalace||"盘外"}${u.strong?"<i>(强)</i>":""}</li>`).join("");return`<div class="pp mp-hp">
1406
+ </div>`).join(""),m=i=>(e.interactions||[]).filter(g=>g.who===i).map(g=>`<li><b class="m-${g.mutagen}">${g.mutagen}</b>${g.star}:本命${g.ownPalace} → 对方${g.landingPalace||"盘外"}${g.strong?"<i>(强)</i>":""}</li>`).join("");return`<div class="pp mp-hp">
1369
1407
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100 紫微合盘</span></div>
1370
1408
  <div class="mp-hp-sides">${n(e.a,"你")}${n(e.b,"对方")}</div>
1371
1409
  <div class="mp-hp-dims">${p}</div>
1372
1410
  <div class="mp-hp-inter">
1373
- <div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${g("你")||"<li>无</li>"}</ul></div>
1374
- <div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${g("对方")||"<li>无</li>"}</ul></div>
1411
+ <div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${m("你")||"<li>无</li>"}</ul></div>
1412
+ <div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${m("对方")||"<li>无</li>"}</ul></div>
1375
1413
  </div>
1376
1414
  <div class="mp-hp-notes">${e.notes.map(i=>`<p>${i}</p>`).join("")}</div>
1377
- </div>`},l.curveHTML=function(e){const n=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],p=e&&Array.isArray(e.liunian)?e.liunian:[];if(n.length<2)return"";const g=j=>typeof j=="number"&&isFinite(j)?j:0,i=j=>j.luck?g(j.luck.score):0,u=4.2,m=-2.2,r=g(e.dayun.startAge&&e.dayun.startAge.years),b=n.length?n[n.length-1].startAge+10:r+80,x=p.map(j=>g(j.age)).filter(j=>j>0),f=Math.min(r,...x.length?x:[r]),S=Math.max(b,...x.length?x:[b]),w=Math.max(1,S-f),z=640,N=190,M={t:14,r:16,b:26,l:30},D=z-M.l-M.r,P=N-M.t-M.b,d=j=>M.l+(j-f)/w*D,y=j=>M.t+P-(Math.max(m,Math.min(u,j))-m)/(u-m)*P,I=[{from:1.2,to:u,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:m,to:-1.45,cls:"b-bad"}].map(j=>`<rect class="cv-band ${j.cls}" x="${M.l}" y="${y(j.to).toFixed(1)}" width="${D}" height="${(y(j.from)-y(j.to)).toFixed(1)}"/>`).join(""),L=10/w*D,C=[];n.forEach((j,be)=>{const h=g(j.startAge),ce=i(j),Ue=Math.max(M.l,d(h)),He=Math.min(M.l+D,d(h+10));C.push(`${Ue.toFixed(1)},${y(ce).toFixed(1)}`),C.push(`${He.toFixed(1)},${y(ce).toFixed(1)}`)});const _=C.length?`<polyline class="cv-dy" points="${C.join(" ")}"/>`:"",ae=C.length?`<polygon class="cv-dyfill" points="${M.l},${(M.t+P).toFixed(1)} ${C.join(" ")} ${(M.l+D).toFixed(1)},${(M.t+P).toFixed(1)}"/>`:"",X=p.filter(j=>j.luck&&typeof j.luck.score=="number").map(j=>({x:d(g(j.age)),y:y(g(j.luck.score)),y0:g(j.year),gz:j.ganzhi,tier:j.luck.tier,v:g(j.luck.score),age:g(j.age)})),ee=X.length>1?`<polyline class="cv-ln" points="${X.map(j=>`${j.x.toFixed(1)},${j.y.toFixed(1)}`).join(" ")}"/>`:"",ie={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},ze=X.length?Math.min(...X.map(j=>j.y0)):null,fe=X.map(j=>`<circle class="cv-dot${j.y0===ze?" now":""}" cx="${j.x.toFixed(1)}" cy="${j.y.toFixed(1)}" fill="${ie[j.tier]||"var(--muted)"}"><title>${t(`${j.y0}年(${j.age}岁)${j.gz} ${j.tier} ${j.v}`)}</title></circle>`).join(""),Be=`<line class="cv-ax zero" x1="${M.l}" y1="${y(0).toFixed(1)}" x2="${M.l+D}" y2="${y(0).toFixed(1)}"/><line class="cv-ax" x1="${M.l}" y1="${M.t}" x2="${M.l}" y2="${M.t+P}"/>`,ge=w>60?10:5,Me=[];for(let j=Math.ceil(f/ge)*ge;j<=S;j+=ge)Me.push(`<text class="cv-lbl age" x="${d(j).toFixed(1)}" y="${(M.t+P+13).toFixed(1)}" text-anchor="middle">${j}岁</text>`);const Se=`<text class="cv-lbl" x="${(M.l-5).toFixed(1)}" y="${(y(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(M.l-5).toFixed(1)}" y="${(y(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(M.l-5).toFixed(1)}" y="${(y(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,H=n.slice().sort((j,be)=>i(be)-i(j)),c=H[0],v=H[H.length-1],G=c&&i(c)>.55?`<text class="cv-lbl" x="${d(g(c.startAge)+5).toFixed(1)}" y="${(y(i(c))-5).toFixed(1)}" text-anchor="middle">▲${c.startAge}岁 ${c.luck.tier}</text>`:"",U=v&&i(v)<-.8?`<text class="cv-lbl" x="${d(g(v.startAge)+5).toFixed(1)}" y="${(y(i(v))+11).toFixed(1)}" text-anchor="middle">▼${v.startAge}岁 ${v.luck.tier}</text>`:"",pe=`<div class="cv-legend">
1415
+ </div>`},r.curveHTML=function(e){const n=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],p=e&&Array.isArray(e.liunian)?e.liunian:[];if(n.length<2)return"";const m=S=>typeof S=="number"&&isFinite(S)?S:0,i=S=>S.luck?m(S.luck.score):0,g=4.2,u=-2.2,l=m(e.dayun.startAge&&e.dayun.startAge.years),f=n.length?n[n.length-1].startAge+10:l+80,b=p.map(S=>m(S.age)).filter(S=>S>0),x=Math.min(l,...b.length?b:[l]),z=Math.max(f,...b.length?b:[f]),w=Math.max(1,z-x),k=640,q=190,N={t:14,r:16,b:26,l:30},D=k-N.l-N.r,E=q-N.t-N.b,c=S=>N.l+(S-x)/w*D,v=S=>N.t+E-(Math.max(u,Math.min(g,S))-u)/(g-u)*E,I=[{from:1.2,to:g,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:u,to:-1.45,cls:"b-bad"}].map(S=>`<rect class="cv-band ${S.cls}" x="${N.l}" y="${v(S.to).toFixed(1)}" width="${D}" height="${(v(S.from)-v(S.to)).toFixed(1)}"/>`).join(""),T=10/w*D,M=[];n.forEach((S,se)=>{const h=m(S.startAge),de=i(S),_e=Math.max(N.l,c(h)),Ee=Math.min(N.l+D,c(h+10));M.push(`${_e.toFixed(1)},${v(de).toFixed(1)}`),M.push(`${Ee.toFixed(1)},${v(de).toFixed(1)}`)});const R=M.length?`<polyline class="cv-dy" points="${M.join(" ")}"/>`:"",Z=M.length?`<polygon class="cv-dyfill" points="${N.l},${(N.t+E).toFixed(1)} ${M.join(" ")} ${(N.l+D).toFixed(1)},${(N.t+E).toFixed(1)}"/>`:"",Q=p.filter(S=>S.luck&&typeof S.luck.score=="number").map(S=>({x:c(m(S.age)),y:v(m(S.luck.score)),y0:m(S.year),gz:S.ganzhi,tier:S.luck.tier,v:m(S.luck.score),age:m(S.age)})),te=Q.length>1?`<polyline class="cv-ln" points="${Q.map(S=>`${S.x.toFixed(1)},${S.y.toFixed(1)}`).join(" ")}"/>`:"",le={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},je=Q.length?Math.min(...Q.map(S=>S.y0)):null,qe=Q.map(S=>`<circle class="cv-dot${S.y0===je?" now":""}" cx="${S.x.toFixed(1)}" cy="${S.y.toFixed(1)}" fill="${le[S.tier]||"var(--muted)"}"><title>${t(`${S.y0}年(${S.age}岁)${S.gz} ${S.tier} ${S.v}`)}</title></circle>`).join(""),ye=`<line class="cv-ax zero" x1="${N.l}" y1="${v(0).toFixed(1)}" x2="${N.l+D}" y2="${v(0).toFixed(1)}"/><line class="cv-ax" x1="${N.l}" y1="${N.t}" x2="${N.l}" y2="${N.t+E}"/>`,xe=w>60?10:5,Ce=[];for(let S=Math.ceil(x/xe)*xe;S<=z;S+=xe)Ce.push(`<text class="cv-lbl age" x="${c(S).toFixed(1)}" y="${(N.t+E+13).toFixed(1)}" text-anchor="middle">${S}岁</text>`);const Ye=`<text class="cv-lbl" x="${(N.l-5).toFixed(1)}" y="${(v(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(N.l-5).toFixed(1)}" y="${(v(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(N.l-5).toFixed(1)}" y="${(v(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,A=n.slice().sort((S,se)=>i(se)-i(S)),V=A[0],d=A[A.length-1],$=V&&i(V)>.55?`<text class="cv-lbl" x="${c(m(V.startAge)+5).toFixed(1)}" y="${(v(i(V))-5).toFixed(1)}" text-anchor="middle">▲${V.startAge}岁 ${V.luck.tier}</text>`:"",Y=d&&i(d)<-.8?`<text class="cv-lbl" x="${c(m(d.startAge)+5).toFixed(1)}" y="${(v(i(d))+11).toFixed(1)}" text-anchor="middle">▼${d.startAge}岁 ${d.luck.tier}</text>`:"",X=`<div class="cv-legend">
1378
1416
  <span><i style="background:var(--quan)"></i>大运(阶梯,一步十年)</span>
1379
1417
  <span><i style="background:var(--ke)"></i>流年(逐年折线)</span>
1380
1418
  <span>绿带=吉 灰带=平 红带=忌</span>
1381
- </div>`,je=`<div class="cv-tip">曲线只呈现引擎已给出的行运评分(${m} ~ ${u}),不预测具体事件;档位与依据见下方「大运 / 流年」各节。悬停看逐年详情。</div>`;return`<div class="mp-curve">
1382
- <div class="mp-curve-h"><b>人生运势曲线</b><span>${f}–${S} 岁 ${e.dayun.rule},${r} 岁起运${e.dayun.jiao&&e.dayun.jiao.at?`,交运 ${e.dayun.jiao.at}`:""}</span></div>
1383
- <svg viewBox="0 0 ${z} ${N}" role="img" aria-label="人生运势曲线:${f} 到 ${S} 岁的大运与流年评分走势">
1384
- ${I}${Be}${ae}${_}${ee}${fe}${Me.join("")}${Se}${G}${U}
1419
+ </div>`,he=`<div class="cv-tip">曲线只呈现引擎已给出的行运评分(${u} ~ ${g}),不预测具体事件;档位与依据见下方「大运 / 流年」各节。悬停看逐年详情。</div>`;return`<div class="mp-curve">
1420
+ <div class="mp-curve-h"><b>人生运势曲线</b><span>${x}–${z} 岁 ${e.dayun.rule},${l} 岁起运${e.dayun.jiao&&e.dayun.jiao.at?`,交运 ${e.dayun.jiao.at}`:""}</span></div>
1421
+ <svg viewBox="0 0 ${k} ${q}" role="img" aria-label="人生运势曲线:${x} 到 ${z} 岁的大运与流年评分走势">
1422
+ ${I}${ye}${Z}${R}${te}${qe}${Ce.join("")}${Ye}${$}${Y}
1385
1423
  </svg>
1386
- ${pe}${je}
1387
- </div>`};let Ha=0;l.trendChart=function(e){const n=e&&Array.isArray(e.points)?e.points:[];if(n.length<2)return"";const p=e&&Array.isArray(e.segments)?e.segments:[],g=H=>typeof H=="number"&&isFinite(H)?H:0,i=720,u=322,m={t:34,r:46,b:66,l:36},r=i-m.l-m.r,b=u-m.t-m.b,x=n.length,f=r/x,S=H=>m.l+(H+.5)*f,w=H=>m.t+b-Math.max(0,Math.min(100,H))/100*b,z=Math.max(1.1,Math.min(10,f*.62)),N=H=>g(H.score),M=m.t+b,D=M+20,P=22,d=`klclip${Ha+=1}`,y=p.map((H,c)=>{const v=Math.max(0,H.startAge-1),G=Math.min(x-1,H.endAge-1);if(G<v)return"";const U=m.l+v*f,pe=Math.max(.6,(G-v+1)*f),j=c%2===1?`<rect class="kl-band" x="${U.toFixed(1)}" y="${m.t}" width="${pe.toFixed(1)}" height="${b}"/><rect class="kl-stripband" x="${U.toFixed(1)}" y="${D}" width="${pe.toFixed(1)}" height="${P}"/>`:"",be=c===0?"":`<line class="kl-segline" x1="${U.toFixed(1)}" y1="${m.t}" x2="${U.toFixed(1)}" y2="${M}"/>`,h=Math.min(Math.max(m.l+(v+G+1)/2*f,m.l+22),m.l+r-22);return j+be+`<text class="kl-seg" x="${h.toFixed(1)}" y="${(D+15).toFixed(1)}" text-anchor="middle">${t(H.ganZhi)}</text>`}).join(""),A=[0,25,50,75,100].map(H=>`<line class="kl-grid${H===50?" mid":""}" x1="${m.l}" y1="${w(H).toFixed(1)}" x2="${m.l+r}" y2="${w(H).toFixed(1)}"/><text class="kl-lbl" x="${m.l-6}" y="${(w(H)+3).toFixed(1)}" text-anchor="end">${H}</text>`).join(""),I=n.map((H,c)=>{const v=H.kline||{},G=g(v.open),U=g(v.close),pe=Math.min(100,g(v.high)),je=Math.max(0,g(v.low)),j=U>=G,be=w(G),h=w(U),ce=Math.min(be,h),Ue=Math.max(.8,Math.abs(be-h)),He=S(c),Fe=`${H.age}岁(${H.year}年 ${H.ganZhi})${U}分${H.dayunGanZhi?` · ${H.dayunGanZhi}运`:""}`;return`<g class="kl-c${j?" up":" down"}"><title>${t(Fe)}</title><line x1="${He.toFixed(2)}" y1="${w(pe).toFixed(1)}" x2="${He.toFixed(2)}" y2="${w(je).toFixed(1)}"/><rect x="${(He-z/2).toFixed(2)}" y="${ce.toFixed(1)}" width="${z.toFixed(2)}" height="${Ue.toFixed(1)}" rx="0.7"/></g>`}).join(""),L=H=>{const c=[];for(let v=0;v<x;v++){if(v+1<H)continue;let G=0;for(let U=v+1-H;U<=v;U++)G+=N(n[U]);c.push({i:v,v:G/H})}return c},C=H=>L(H).map((c,v)=>`${v?"L":"M"}${S(c.i).toFixed(1)} ${w(c.v).toFixed(1)}`).join(" "),_=(H,c)=>{const v=L(H);if(!v.length)return"";const G=v[v.length-1];return{cls:c,y:w(G.v),text:`<text class="kl-ma-lbl ${c}" x="${m.l+r+5}" y="${w(G.v).toFixed(1)}" text-anchor="start">${G.v.toFixed(0)}</text>`}},ae=_(10,"m10"),X=_(5,"m5"),ee=(()=>{if(!X||!ae)return`${ae?ae.text:""}${X?X.text:""}`;let H=X.y,c=ae.y;if(Math.abs(H-c)<10){const v=Math.min(H,c),G=Math.max(H,c);H=v-6,c=G+6}return`<text class="kl-ma-lbl m10" x="${m.l+r+5}" y="${c.toFixed(1)}" text-anchor="start">${L(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${m.l+r+5}" y="${H.toFixed(1)}" text-anchor="start">${L(5).slice(-1)[0].v.toFixed(0)}</text>`})();let ie=n[0],ze=n[0];for(const H of n)N(H)>N(ie)&&(ie=H),N(H)<N(ze)&&(ze=H);const fe=(H,c,v)=>{const G=n.indexOf(H),U=S(G),pe=w(N(H)),je=Math.min(Math.max(U,m.l+26),m.l+r-26),j=c==="hi"?pe-8<m.t+6?14:v:pe+12>m.t+b-2?-8:v;return`<g class="kl-mark ${c}"><circle cx="${U.toFixed(1)}" cy="${pe.toFixed(1)}" r="2"/><circle class="ring" cx="${U.toFixed(1)}" cy="${pe.toFixed(1)}" r="4.6"/><text x="${je.toFixed(1)}" y="${(pe+j).toFixed(1)}" text-anchor="middle">${H.age}岁 ${N(H)}</text></g>`},Be=x>60?10:5,ge=n.filter(H=>H.age%Be===0).map(H=>`<text class="kl-lbl age" x="${S(n.indexOf(H)).toFixed(1)}" y="${(M+14).toFixed(1)}" text-anchor="middle">${H.age}</text>`).join(""),Me=`<text class="kl-lbl axis" x="${m.l}" y="${(u-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${m.l+r}" y="${(u-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1388
- <svg viewBox="0 0 ${i} ${u}" role="img" aria-label="人生K线:1 到 ${x} 岁的逐年评分蜡烛图">
1389
- <defs><clipPath id="${d}"><rect x="${m.l}" y="${m.t}" width="${r}" height="${b}"/></clipPath></defs>
1390
- ${y}${A}
1391
- <g clip-path="url(#${d})">
1424
+ ${X}${he}
1425
+ </div>`};let Fa=0;r.trendChart=function(e){const n=e&&Array.isArray(e.points)?e.points:[];if(n.length<2)return"";const p=e&&Array.isArray(e.segments)?e.segments:[],m=A=>typeof A=="number"&&isFinite(A)?A:0,i=720,g=322,u={t:34,r:46,b:66,l:36},l=i-u.l-u.r,f=g-u.t-u.b,b=n.length,x=l/b,z=A=>u.l+(A+.5)*x,w=A=>u.t+f-Math.max(0,Math.min(100,A))/100*f,k=Math.max(1.1,Math.min(10,x*.62)),q=A=>m(A.score),N=u.t+f,D=N+20,E=22,c=`klclip${Fa+=1}`,v=p.map((A,V)=>{const d=Math.max(0,A.startAge-1),$=Math.min(b-1,A.endAge-1);if($<d)return"";const Y=u.l+d*x,X=Math.max(.6,($-d+1)*x),S=V%2===1?`<rect class="kl-band" x="${Y.toFixed(1)}" y="${u.t}" width="${X.toFixed(1)}" height="${f}"/><rect class="kl-stripband" x="${Y.toFixed(1)}" y="${D}" width="${X.toFixed(1)}" height="${E}"/>`:"",se=V===0?"":`<line class="kl-segline" x1="${Y.toFixed(1)}" y1="${u.t}" x2="${Y.toFixed(1)}" y2="${N}"/>`,h=Math.min(Math.max(u.l+(d+$+1)/2*x,u.l+22),u.l+l-22);return S+se+`<text class="kl-seg" x="${h.toFixed(1)}" y="${(D+15).toFixed(1)}" text-anchor="middle">${t(A.ganZhi)}</text>`}).join(""),H=[0,25,50,75,100].map(A=>`<line class="kl-grid${A===50?" mid":""}" x1="${u.l}" y1="${w(A).toFixed(1)}" x2="${u.l+l}" y2="${w(A).toFixed(1)}"/><text class="kl-lbl" x="${u.l-6}" y="${(w(A)+3).toFixed(1)}" text-anchor="end">${A}</text>`).join(""),I=n.map((A,V)=>{const d=A.kline||{},$=m(d.open),Y=m(d.close),X=Math.min(100,m(d.high)),he=Math.max(0,m(d.low)),S=Y>=$,se=w($),h=w(Y),de=Math.min(se,h),_e=Math.max(.8,Math.abs(se-h)),Ee=z(V),Pe=`${A.age}岁(${A.year}年 ${A.ganZhi})${Y}分${A.dayunGanZhi?` · ${A.dayunGanZhi}运`:""}`;return`<g class="kl-c${S?" up":" down"}"><title>${t(Pe)}</title><line x1="${Ee.toFixed(2)}" y1="${w(X).toFixed(1)}" x2="${Ee.toFixed(2)}" y2="${w(he).toFixed(1)}"/><rect x="${(Ee-k/2).toFixed(2)}" y="${de.toFixed(1)}" width="${k.toFixed(2)}" height="${_e.toFixed(1)}" rx="0.7"/></g>`}).join(""),T=A=>{const V=[];for(let d=0;d<b;d++){if(d+1<A)continue;let $=0;for(let Y=d+1-A;Y<=d;Y++)$+=q(n[Y]);V.push({i:d,v:$/A})}return V},M=A=>T(A).map((V,d)=>`${d?"L":"M"}${z(V.i).toFixed(1)} ${w(V.v).toFixed(1)}`).join(" "),R=(A,V)=>{const d=T(A);if(!d.length)return"";const $=d[d.length-1];return{cls:V,y:w($.v),text:`<text class="kl-ma-lbl ${V}" x="${u.l+l+5}" y="${w($.v).toFixed(1)}" text-anchor="start">${$.v.toFixed(0)}</text>`}},Z=R(10,"m10"),Q=R(5,"m5"),te=(()=>{if(!Q||!Z)return`${Z?Z.text:""}${Q?Q.text:""}`;let A=Q.y,V=Z.y;if(Math.abs(A-V)<10){const d=Math.min(A,V),$=Math.max(A,V);A=d-6,V=$+6}return`<text class="kl-ma-lbl m10" x="${u.l+l+5}" y="${V.toFixed(1)}" text-anchor="start">${T(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${u.l+l+5}" y="${A.toFixed(1)}" text-anchor="start">${T(5).slice(-1)[0].v.toFixed(0)}</text>`})();let le=n[0],je=n[0];for(const A of n)q(A)>q(le)&&(le=A),q(A)<q(je)&&(je=A);const qe=(A,V,d)=>{const $=n.indexOf(A),Y=z($),X=w(q(A)),he=Math.min(Math.max(Y,u.l+26),u.l+l-26),S=V==="hi"?X-8<u.t+6?14:d:X+12>u.t+f-2?-8:d;return`<g class="kl-mark ${V}"><circle cx="${Y.toFixed(1)}" cy="${X.toFixed(1)}" r="2"/><circle class="ring" cx="${Y.toFixed(1)}" cy="${X.toFixed(1)}" r="4.6"/><text x="${he.toFixed(1)}" y="${(X+S).toFixed(1)}" text-anchor="middle">${A.age}岁 ${q(A)}</text></g>`},ye=b>60?10:5,xe=n.filter(A=>A.age%ye===0).map(A=>`<text class="kl-lbl age" x="${z(n.indexOf(A)).toFixed(1)}" y="${(N+14).toFixed(1)}" text-anchor="middle">${A.age}</text>`).join(""),Ce=`<text class="kl-lbl axis" x="${u.l}" y="${(g-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${u.l+l}" y="${(g-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1426
+ <svg viewBox="0 0 ${i} ${g}" role="img" aria-label="人生K线:1 到 ${b} 岁的逐年评分蜡烛图">
1427
+ <defs><clipPath id="${c}"><rect x="${u.l}" y="${u.t}" width="${l}" height="${f}"/></clipPath></defs>
1428
+ ${v}${H}
1429
+ <g clip-path="url(#${c})">
1392
1430
  ${I}
1393
- <path class="kl-ma m10" d="${C(10)}"/><path class="kl-ma m5" d="${C(5)}"/>
1431
+ <path class="kl-ma m10" d="${M(10)}"/><path class="kl-ma m5" d="${M(5)}"/>
1394
1432
  </g>
1395
- ${ee}
1396
- ${fe(ie,"hi",-8)}${fe(ze,"lo",12)}
1397
- ${ge}${Me}
1398
- </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>`},l.trendHTML=function(e){if(!e)return"";const n=l.trendChart(e);if(!n)return l.quickHTML(e);const p=Array.isArray(e.segments)?e.segments:[],g=e.highlights&&typeof e.highlights=="object"?e.highlights:{},i=e.meta||{},u=i.strength||{},m=p.map(y=>`<span class="kl-chip">${t(y.ganZhi)}<em>${y.startAge}–${y.endAge}</em></span>`).join(""),r=(Array.isArray(g.best)?g.best:[]).map(y=>`<div class="kl-hl hi">${t(y)}</div>`).join(""),b=(Array.isArray(g.worst)?g.worst:[]).map(y=>`<div class="kl-hl lo">${t(y)}</div>`).join(""),x=i.boundaryNote?`<div class="mp-kline-note">${t(i.boundaryNote)}</div>`:g.suppressed?`<div class="mp-kline-note">${t(g.suppressed)}</div>`:"",f=Array.isArray(e.points)?e.points:[],S=y=>typeof y.score=="number"&&isFinite(y.score)?y.score:0,w=f.map(S),z=w.length?w.reduce((y,A)=>y+A,0)/w.length:0,N=w.length?Math.max(...w)-Math.min(...w):0,M=p.map(y=>{const A=f.filter(I=>I.age>=y.startAge&&I.age<=y.endAge).map(S);return{ganZhi:y.ganZhi,v:A.length?A.reduce((I,L)=>I+L,0)/A.length:0}}).filter(y=>y.v>0).sort((y,A)=>A.v-y.v),D=!!(u.boundary||g.suppressed),P=[`<span><em>全段均值</em><b>${z.toFixed(0)}</b></span>`];!D&&M.length&&(P.push(`<span><em>最好大运</em><b class="hi">${t(M[0].ganZhi)} ${M[0].v.toFixed(0)}</b></span>`),P.push(`<span><em>最差大运</em><b class="lo">${t(M[M.length-1].ganZhi)} ${M[M.length-1].v.toFixed(0)}</b></span>`)),P.push(`<span><em>波动幅度</em><b>${N.toFixed(0)}</b></span>`);const d=`<div class="kl-stats">${P.join("")}</div>`;return`<section class="mp-kline" aria-label="人生K线结果">
1399
- <div class="mp-kline-h"><b>人生 K 线</b><span>${t(i.birth||"")} 日主 ${t(i.dayMaster||"")} ${t(u.level||"")}${u.score?`(${u.score})`:""}</span></div>
1433
+ ${te}
1434
+ ${qe(le,"hi",-8)}${qe(je,"lo",12)}
1435
+ ${xe}${Ce}
1436
+ </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>`},r.trendHTML=function(e){if(!e)return"";const n=r.trendChart(e);if(!n)return r.quickHTML(e);const p=Array.isArray(e.segments)?e.segments:[],m=e.highlights&&typeof e.highlights=="object"?e.highlights:{},i=e.meta||{},g=i.strength||{},u=p.map(v=>`<span class="kl-chip">${t(v.ganZhi)}<em>${v.startAge}–${v.endAge}</em></span>`).join(""),l=(Array.isArray(m.best)?m.best:[]).map(v=>`<div class="kl-hl hi">${t(v)}</div>`).join(""),f=(Array.isArray(m.worst)?m.worst:[]).map(v=>`<div class="kl-hl lo">${t(v)}</div>`).join(""),b=i.boundaryNote?`<div class="mp-kline-note">${t(i.boundaryNote)}</div>`:m.suppressed?`<div class="mp-kline-note">${t(m.suppressed)}</div>`:"",x=Array.isArray(e.points)?e.points:[],z=v=>typeof v.score=="number"&&isFinite(v.score)?v.score:0,w=x.map(z),k=w.length?w.reduce((v,H)=>v+H,0)/w.length:0,q=w.length?Math.max(...w)-Math.min(...w):0,N=p.map(v=>{const H=x.filter(I=>I.age>=v.startAge&&I.age<=v.endAge).map(z);return{ganZhi:v.ganZhi,v:H.length?H.reduce((I,T)=>I+T,0)/H.length:0}}).filter(v=>v.v>0).sort((v,H)=>H.v-v.v),D=!!(g.boundary||m.suppressed),E=[`<span><em>全段均值</em><b>${k.toFixed(0)}</b></span>`];!D&&N.length&&(E.push(`<span><em>最好大运</em><b class="hi">${t(N[0].ganZhi)} ${N[0].v.toFixed(0)}</b></span>`),E.push(`<span><em>最差大运</em><b class="lo">${t(N[N.length-1].ganZhi)} ${N[N.length-1].v.toFixed(0)}</b></span>`)),E.push(`<span><em>波动幅度</em><b>${q.toFixed(0)}</b></span>`);const c=`<div class="kl-stats">${E.join("")}</div>`;return`<section class="mp-kline" aria-label="人生K线结果">
1437
+ <div class="mp-kline-h"><b>人生 K 线</b><span>${t(i.birth||"")} 日主 ${t(i.dayMaster||"")} ${t(g.level||"")}${g.score?`(${g.score})`:""}</span></div>
1400
1438
  ${n}
1401
- ${d}
1402
- ${m?`<div class="kl-segs">${m}</div>`:""}
1403
- ${r||b?`<div class="kl-hls">${r}${b}</div>`:""}
1404
- ${x}
1439
+ ${c}
1440
+ ${u?`<div class="kl-segs">${u}</div>`:""}
1441
+ ${l||f?`<div class="kl-hls">${l}${f}</div>`:""}
1442
+ ${b}
1405
1443
  <div class="mp-kline-tip">逐岁分数由大运与流年十神按固定表确定性计分(1–100),只表五行力量的顺逆,不预测具体事件;旺衰落在换档阈值附近时,不出高低年份结论。</div>
1406
- </section>`},l.chengguHTML=function(e){if(!e)return"";const n=e.weights||{},p=e.song||{},g=["year","month","day","hour"].map(r=>{const b=n[r]||{label:"",qian:0},x=String(b.label||"").split(" ")[0]||"",f=String(b.label||"").split(" ")[1]||"";return`<div class="cg-cell"><em>${t(x)}</em><b>${t(f)}</b></div>`}).join(""),i=String(p.text||""),u=i?i.replace(/[。]$/,"").split(";").map((r,b)=>`<span>${t(r)}${b===0?";":"。"}</span>`).join(""):"",m=e.verdict&&e.verdict.band?e.verdict.band:"";return`<section class="mp-cg" aria-label="称骨结果">
1444
+ </section>`},r.chengguHTML=function(e){if(!e)return"";const n=e.weights||{},p=e.song||{},m=["year","month","day","hour"].map(l=>{const f=n[l]||{label:"",qian:0},b=String(f.label||"").split(" ")[0]||"",x=String(f.label||"").split(" ")[1]||"";return`<div class="cg-cell"><em>${t(b)}</em><b>${t(x)}</b></div>`}).join(""),i=String(p.text||""),g=i?i.replace(/[。]$/,"").split(";").map((l,f)=>`<span>${t(l)}${f===0?";":"。"}</span>`).join(""):"",u=e.verdict&&e.verdict.band?e.verdict.band:"";return`<section class="mp-cg" aria-label="称骨结果">
1407
1445
  <div class="mp-cg-h"><b>称骨</b><span>${t(e.lunar&&e.lunar.text?e.lunar.text:"")}</span></div>
1408
- <div class="mp-cg-w">${g}</div>
1409
- <div class="mp-cg-tot"><em>骨重合计</em><b>${t(e.total&&e.total.label?e.total.label:"")}</b>${m?`<i>${t(m)}</i>`:""}</div>
1446
+ <div class="mp-cg-w">${m}</div>
1447
+ <div class="mp-cg-tot"><em>骨重合计</em><b>${t(e.total&&e.total.label?e.total.label:"")}</b>${u?`<i>${t(u)}</i>`:""}</div>
1410
1448
  <div class="mp-cg-song"><div class="mp-cg-song-h">称骨歌 · ${t(e.total&&e.total.label?e.total.label:"")}</div>
1411
- <div class="mp-cg-verse">${u||'<span class="mp-cg-miss">该骨重未见通行本歌诀</span>'}</div>
1449
+ <div class="mp-cg-verse">${g||'<span class="mp-cg-miss">该骨重未见通行本歌诀</span>'}</div>
1412
1450
  <div class="mp-cg-plain"><em>释义</em>${t(p.plain||"")}</div></div>
1413
1451
  ${e.verdict&&e.verdict.text?`<div class="mp-cg-band"><em>分档</em>${t(e.verdict.text)}</div>`:""}
1414
1452
  <div class="mp-cg-note">骨重与歌诀为通行本口径(各版本歌诀有异文,断句标点已统一);释义为白话自撰,只作字面直解,属民俗娱乐参考,不构成命运断言。</div>
1415
- </section>`},l.nameHTML=function(e){if(!e)return"";const n={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},p=x=>x==="未收录"?'<span class="mp-nm-el">未收录</span>':`<span class="mp-nm-el wx-${n[x]||"earth"}">${t(x)}</span>`,g=(x,f)=>`<div class="mp-nm-h"><b>${t(x)}</b>${f?`<i>${t(f)}</i>`:""}</div>`;if(e.action==="generate"){const x=e.bazi&&e.bazi.favorable?e.bazi.favorable.join("、"):"",f=(e.candidates||[]).map(S=>{const w=S.wuge&&S.wuge.available?(()=>{const N=S.wuge.rows.filter(P=>P.level==="吉").length,M=S.wuge.rows.filter(P=>P.level==="凶").length;return`<span class="mp-nm-fit${M===0&&N>=4?" ok":M>=2?" no":""}" title="${t(S.wuge.summary)}">五格 ${N}/5 吉</span>`})():"",z=S.phonetics&&S.phonetics.available?`<span class="mp-nm-fit${S.phonetics.level==="拗口"?" no":S.phonetics.level==="顺口"?" ok":""}" title="${t((S.phonetics.issues||[]).map(N=>N.text).join(";"))}">${t(S.phonetics.level)}</span>`:"";return`<div class="mp-nm-c"><b>${t(S.name)}</b><span class="mp-nm-els">${S.chars.map(N=>p(N.element)).join("")}${w}${z}</span><em>${t(S.chars.map(N=>N.char+"·"+N.meaning).join(" "))}</em></div>`}).join("");return`<section class="mp-nm" aria-label="候选名">
1416
- ${g("候选名",`姓 ${e.surname}(${e.gender})${x?` 喜用 ${x}`:""}`)}
1417
- <div class="mp-nm-cand">${f}</div>
1418
- <div class="mp-nm-note">${(e.notes||[]).map(S=>"※ "+t(S)).join("<br>")}</div>
1419
- </section>`}const i=(e.chars||[]).map(x=>{const f=x.favorable===!0?'<span class="mp-nm-fit ok">合喜用</span>':x.favorable===!1?'<span class="mp-nm-fit no">不合喜用</span>':'<span class="mp-nm-fit">不判</span>',S=x.source==="user"?"用户指定":x.source==="lib"?"字库":"未收录",w=x.suggest&&x.suggest.length?`<div class="mp-nm-sug"><b>可换</b>${x.suggest.map(z=>`<span class="wx-${n[z.element]||"earth"}">${t(z.char)}(${t(z.element)})</span>`).join("")}</div>`:"";return`<div class="mp-nm-row"><div class="mp-nm-ch">${t(x.char)}</div>
1420
- <div class="mp-nm-b"><div class="mp-nm-t">${p(x.element)}<span>${t(S)}</span>${f}</div>
1421
- <div class="mp-nm-m">${t(x.meaning)}</div>${w}</div></div>`}).join(""),u=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>
1422
- <div class="mp-nm-m">${t(e.bazi.basis||"")}</div>`:"",m=x=>x==="吉"?"is-ok":x==="半吉"?"is-half":"is-bad",r=e.wuge&&e.wuge.available?`<div class="mp-nm-wu">
1453
+ </section>`},r.nameHTML=function(e){if(!e)return"";const n={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},p=b=>b==="未收录"?'<span class="mp-nm-el">未收录</span>':`<span class="mp-nm-el wx-${n[b]||"earth"}">${t(b)}</span>`,m=(b,x)=>`<div class="mp-nm-h"><b>${t(b)}</b>${x?`<i>${t(x)}</i>`:""}</div>`;if(e.action==="generate"){const b=e.bazi&&e.bazi.favorable?e.bazi.favorable.join("、"):"",x=(e.candidates||[]).map(z=>{const w=z.wuge&&z.wuge.available?(()=>{const q=z.wuge.rows.filter(E=>E.level==="吉").length,N=z.wuge.rows.filter(E=>E.level==="凶").length;return`<span class="mp-nm-fit${N===0&&q>=4?" ok":N>=2?" no":""}" title="${t(z.wuge.summary)}">五格 ${q}/5 吉</span>`})():"",k=z.phonetics&&z.phonetics.available?`<span class="mp-nm-fit${z.phonetics.level==="拗口"?" no":z.phonetics.level==="顺口"?" ok":""}" title="${t((z.phonetics.issues||[]).map(q=>q.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(q=>p(q.element)).join("")}${w}${k}</span><em>${t(z.chars.map(q=>q.char+"·"+q.meaning).join(" "))}</em></div>`}).join("");return`<section class="mp-nm" aria-label="候选名">
1454
+ ${m("候选名",`姓 ${e.surname}(${e.gender})${b?` 喜用 ${b}`:""}`)}
1455
+ <div class="mp-nm-cand">${x}</div>
1456
+ <div class="mp-nm-note">${(e.notes||[]).map(z=>"※ "+t(z)).join("<br>")}</div>
1457
+ </section>`}const i=(e.chars||[]).map(b=>{const x=b.favorable===!0?'<span class="mp-nm-fit ok">合喜用</span>':b.favorable===!1?'<span class="mp-nm-fit no">不合喜用</span>':'<span class="mp-nm-fit">不判</span>',z=b.source==="user"?"用户指定":b.source==="lib"?"字库":"未收录",w=b.suggest&&b.suggest.length?`<div class="mp-nm-sug"><b>可换</b>${b.suggest.map(k=>`<span class="wx-${n[k.element]||"earth"}">${t(k.char)}(${t(k.element)})</span>`).join("")}</div>`:"";return`<div class="mp-nm-row"><div class="mp-nm-ch">${t(b.char)}</div>
1458
+ <div class="mp-nm-b"><div class="mp-nm-t">${p(b.element)}<span>${t(z)}</span>${x}</div>
1459
+ <div class="mp-nm-m">${t(b.meaning)}</div>${w}</div></div>`}).join(""),g=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>
1460
+ <div class="mp-nm-m">${t(e.bazi.basis||"")}</div>`:"",u=b=>b==="吉"?"is-ok":b==="半吉"?"is-half":"is-bad",l=e.wuge&&e.wuge.available?`<div class="mp-nm-wu">
1423
1461
  <div class="mp-nm-wu-h"><b>五格</b><i>康熙笔画 · 通行本 81 数理</i></div>
1424
- <div class="mp-nm-wu-rows">${e.wuge.rows.map(x=>`<div class="mp-nm-wu-c ${m(x.level)}"><em>${t(x.key)}</em><b>${x.strokes}</b><i>${t(`${x.level} · ${x.name}`)}</i></div>`).join("")}</div>
1425
- <div class="mp-nm-m">笔画:${e.wuge.strokes.map(x=>`${t(x.char)}${x.strokes}${x.source==="user"?"(指定)":""}`).join(" + ")}</div>
1462
+ <div class="mp-nm-wu-rows">${e.wuge.rows.map(b=>`<div class="mp-nm-wu-c ${u(b.level)}"><em>${t(b.key)}</em><b>${b.strokes}</b><i>${t(`${b.level} · ${b.name}`)}</i></div>`).join("")}</div>
1463
+ <div class="mp-nm-m">笔画:${e.wuge.strokes.map(b=>`${t(b.char)}${b.strokes}${b.source==="user"?"(指定)":""}`).join(" + ")}</div>
1426
1464
  <div class="mp-nm-m">三才:${t(e.wuge.sancai.text)}</div>
1427
- </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>`,b=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(x=>`${x.py}${x.tone}`).join(" "))} 声调 ${t(e.phonetics.tonePattern)}</em>${(e.phonetics.issues||[]).map(x=>`<span class="mp-nm-ph-i">${t(x.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="名字评估">
1428
- ${g(e.fullName||"",`字库 ${e.stats&&e.stats.libSize?e.stats.libSize:""} 字${e.stats&&e.stats.unknown?` 未收录 ${e.stats.unknown}`:""}`)}
1465
+ </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>`,f=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(b=>`${b.py}${b.tone}`).join(" "))} 声调 ${t(e.phonetics.tonePattern)}</em>${(e.phonetics.issues||[]).map(b=>`<span class="mp-nm-ph-i">${t(b.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="名字评估">
1466
+ ${m(e.fullName||"",`字库 ${e.stats&&e.stats.libSize?e.stats.libSize:""} 字${e.stats&&e.stats.unknown?` 未收录 ${e.stats.unknown}`:""}`)}
1429
1467
  ${i}
1430
- ${u}
1431
- ${r}
1432
- ${b}
1468
+ ${g}
1469
+ ${l}
1470
+ ${f}
1433
1471
  <div class="mp-nm-verd">${t(e.verdict||"")}</div>
1434
- <div class="mp-nm-note">${(e.notes||[]).map(x=>"※ "+t(x)).join("<br>")}</div>
1435
- </section>`},l.baziHTML=function(e){const n=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]],p={year:"年",month:"月",day:"日",hour:"时"},g={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},i={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},u=c=>`<span class="tg ${i[c]||""}">${c}</span>`,m=c=>`<span class="wx-${g[c]||"earth"}">${oe(c)}${c}</span>`,r=c=>`<span class="ss-s ${c.luck||"neutral"}" title="${t(`${c.cat} · ${c.via}查${c.target} | ${c.rule}`)}">${c.name}</span>`,b=(c,v)=>`<tr><td class="bz-lbl">${c}</td>${n.map(([G])=>`<td data-c="${p[G]}">${v(e.pillars[G],G)}</td>`).join("")}</tr>`,x=`<thead><tr><th></th>${n.map(([c,v])=>`<th${c==="day"?' class="bz-hdr-day"':""}>${v}</th>`).join("")}</tr></thead>`,f={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},S={木:"火",火:"土",土:"金",金:"水",水:"木"},w={木:"土",土:"水",水:"火",火:"金",金:"木"},z=f[e.pillars.month.branch]||"土",N=["木","火","土","金","水"],M=c=>c===z?"旺":S[z]===c?"相":S[c]===z?"休":w[c]===z?"囚":"死",D=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="4">${["旺","相","休","囚","死"].map(c=>{const v=N.find(G=>M(G)===c)||z;return`<i><b class="wx-${g[v]}">${v}</b><em>${c}</em></i>`}).join("")}</td></tr>`,P=[b("十神",(c,v)=>v==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:c.stemTenGod?u(c.stemTenGod):'<span class="pp-dim">—</span>'),b("天干",c=>`<span class="bz-big ${"wx-"+g[c.stemElement]}">${c.stem}</span>`),b("地支",c=>`<span class="bz-big ${"wx-"+g[c.branchElement]}">${c.branch}</span>`),b("藏干",c=>c.hidden.map(v=>`<i class="bz-cg wx-${g[v.element]}">${v.stem}·${v.element}</i>`).join("")),b("支神",c=>c.hidden.map(v=>u(v.tenGod)).join("<br>")),b("纳音",c=>c.nayin),b("空亡",c=>`<span class="pp-dim">${c.kongwang.join("")}</span>`),b("地势",c=>c.dishi),b("自坐",c=>c.zizuo),b("神煞",c=>c.shenshaDetail&&c.shenshaDetail.length?`<span class="pp-ss">${c.shenshaDetail.map(r).join("")}</span>`:'<span class="pp-dim">—</span>'),D].join(""),d=Object.entries(e.wuxing).map(([c,v])=>`<span class="pp-chip wx-${g[c]}">${oe(c)}${c} ${v}</span>`).join(""),y=e.frame||{},A=c=>c==="大吉"||c==="吉"?"ok":c==="大忌"||c==="忌"?"warn":"",I=(c,v)=>v?`<div class="pp-sec"><div class="pp-sec-h">${c}</div>${v}</div>`:"",L=y.geju&&y.geju.length?`
1436
- <div class="pp-tl">${y.primary?`主格 <b>${t(y.primary.name)}</b> ${t(y.primary.evidence)}`:""}</div>
1437
- <div class="pp-chips">${y.geju.map(c=>{const v=c.status==="破格",G=c.status==="待定"||c.status==="假从",U=`${c.evidence||""}${Array.isArray(c.breaks)&&c.breaks.length?`;破:${c.breaks.join(";")}`:""}`;return`<span class="pp-chip ${v?"broken":G?"warn":""}" title="${t(U)}">${t(c.name)}<i class="pp-drel">${t(c.kind)}${c.status?`·${t(c.status)}`:""}</i></span>`}).join("")}</div>`:"",C=y.yongshen?`
1438
- <div class="pp-tl">喜 ${y.yongshen.favor.map(m).join("")} 忌 ${y.yongshen.avoid.map(m).join("")} <span class="pp-dim">${t(y.yongshen.method)}</span></div>
1439
- <div class="pp-chips">${y.yongshen.favorTenGods.map(c=>`<span class="pp-chip ok">${t(c)}</span>`).join("")}${y.yongshen.avoidTenGods?y.yongshen.avoidTenGods.map(c=>`<span class="pp-chip warn">${t(c)}</span>`).join(""):""}</div>
1440
- ${(y.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${y.yongshen.disputed.map(c=>`${t(c.element)}(扶抑为${t(c.favorRole)}·${t(c.favorVerb)},${t(c.climate)}盘调候忌${t(c.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1441
- <div class="pp-tl pp-dim">${t(y.yongshen.detail)}</div>`:"",_=e.climate||y.yongshen&&y.yongshen.climate||null,ae=_?(()=>{const c=Math.max(2,Math.min(98,Math.round(((Number(_.temp)||0)+3)/6*100))),v=_.need?`<em>调候取</em><b>${t(_.need.stem+_.need.element)}</b>`:"<em>气候平和</em>",G=!!(y.yongshen&&Array.isArray(y.yongshen.disputed))&&y.yongshen.disputed.some(h=>h.element===_.avoidElement),U=_.need?`<em>忌</em><b>${t(_.avoidElement)}</b>${G?'<span class="pp-dim">(有争议)</span>':""}`:"",pe=(_.evidence||[]).length?`<em>依据</em><span>${t(_.evidence.join("、"))}</span>`:"",je=_.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',j=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,be=j?`<div class="mp-qt">
1442
- <div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(j.label)}</span></div>
1443
- <div class="mp-qt-y"><em>用神</em>${j.yong.map((h,ce)=>`<b class="${ce===0?"first":""}">${t(h)}</b>`).join("")}<em>首取 ${t(j.primary)}</em></div>
1444
- <div class="mp-qt-q" title="${t(j.quote)}">「${t(j.quote)}」<span>第 ${j.chapter} 章${j.note?" · "+t(j.note):""}</span></div>
1472
+ <div class="mp-nm-note">${(e.notes||[]).map(b=>"※ "+t(b)).join("<br>")}</div>
1473
+ </section>`},r.baziHTML=function(e){const n=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]],p={year:"年",month:"月",day:"日",hour:"时"},m={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},i={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},g=d=>`<span class="tg ${i[d]||""}">${d}</span>`,u=d=>`<span class="wx-${m[d]||"earth"}">${re(d)}${d}</span>`,l=d=>`<span class="ss-s ${d.luck||"neutral"}" title="${t(`${d.cat} · ${d.via}查${d.target} | ${d.rule}`)}">${d.name}</span>`,f=(d,$)=>`<tr><td class="bz-lbl">${d}</td>${n.map(([Y])=>`<td data-c="${p[Y]}">${$(e.pillars[Y],Y)}</td>`).join("")}</tr>`,b=`<thead><tr><th></th>${n.map(([d,$])=>`<th${d==="day"?' class="bz-hdr-day"':""}>${$}</th>`).join("")}</tr></thead>`,x={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},z={木:"火",火:"土",土:"金",金:"水",水:"木"},w={木:"土",土:"水",水:"火",火:"金",金:"木"},k=x[e.pillars.month.branch]||"土",q=["木","火","土","金","水"],N=d=>d===k?"旺":z[k]===d?"相":z[d]===k?"休":w[d]===k?"囚":"死",D=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="4">${["旺","相","休","囚","死"].map(d=>{const $=q.find(Y=>N(Y)===d)||k;return`<i><b class="wx-${m[$]}">${$}</b><em>${d}</em></i>`}).join("")}</td></tr>`,E=[f("十神",(d,$)=>$==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:d.stemTenGod?g(d.stemTenGod):'<span class="pp-dim">—</span>'),f("天干",d=>`<span class="bz-big ${"wx-"+m[d.stemElement]}">${d.stem}</span>`),f("地支",d=>`<span class="bz-big ${"wx-"+m[d.branchElement]}">${d.branch}</span>`),f("藏干",d=>d.hidden.map($=>`<i class="bz-cg wx-${m[$.element]}">${$.stem}·${$.element}</i>`).join("")),f("支神",d=>d.hidden.map($=>g($.tenGod)).join("<br>")),f("纳音",d=>d.nayin),f("空亡",d=>`<span class="pp-dim">${d.kongwang.join("")}</span>`),f("地势",d=>d.dishi),f("自坐",d=>d.zizuo),f("神煞",d=>d.shenshaDetail&&d.shenshaDetail.length?`<span class="pp-ss">${d.shenshaDetail.map(l).join("")}</span>`:'<span class="pp-dim">—</span>'),D].join(""),c=Object.entries(e.wuxing).map(([d,$])=>`<span class="pp-chip wx-${m[d]}">${re(d)}${d} ${$}</span>`).join(""),v=e.frame||{},H=d=>d==="大吉"||d==="吉"?"ok":d==="大忌"||d==="忌"?"warn":"",I=(d,$)=>$?`<div class="pp-sec"><div class="pp-sec-h">${d}</div>${$}</div>`:"",T=v.geju&&v.geju.length?`
1474
+ <div class="pp-tl">${v.primary?`主格 <b>${t(v.primary.name)}</b> ${t(v.primary.evidence)}`:""}</div>
1475
+ <div class="pp-chips">${v.geju.map(d=>{const $=d.status==="破格",Y=d.status==="待定"||d.status==="假从",X=`${d.evidence||""}${Array.isArray(d.breaks)&&d.breaks.length?`;破:${d.breaks.join(";")}`:""}`;return`<span class="pp-chip ${$?"broken":Y?"warn":""}" title="${t(X)}">${t(d.name)}<i class="pp-drel">${t(d.kind)}${d.status?`·${t(d.status)}`:""}</i></span>`}).join("")}</div>`:"",M=(()=>{const d=Array.isArray(v.yongshen&&v.yongshen.neutral)?v.yongshen.neutral:[],$=new Set(v.yongshen&&v.yongshen.neutralTenGods||[]);return`${(v.yongshen&&v.yongshen.avoidTenGods||[]).filter(X=>!$.has(X)).map(X=>`<span class="pp-chip warn">${t(X)}</span>`).join("")}${[...$].map(X=>`<span class="pp-chip neu" title="局中分量近零,按中性偏忌看">${t(X)}</span>`).join("")}${d.length?`<span class="pp-chip neu" title="忌神中全局不足 0.5 分的那几行;仍在忌里参与行运评分">中性偏忌 ${d.map(X=>`${t(X.element)} ${t(X.weight)} 分`).join("、")}</span>`:""}`})(),R=v.yongshen?`
1476
+ <div class="pp-tl">喜 ${v.yongshen.favor.map(u).join("")} 忌 ${v.yongshen.avoid.map(u).join("")} <span class="pp-dim">${t(v.yongshen.method)}</span></div>
1477
+ <div class="pp-chips">${v.yongshen.favorTenGods.map(d=>`<span class="pp-chip ok">${t(d)}</span>`).join("")}${M}</div>
1478
+ ${(v.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${v.yongshen.disputed.map(d=>`${t(d.element)}(扶抑为${t(d.favorRole)}·${t(d.favorVerb)},${t(d.climate)}盘调候忌${t(d.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1479
+ <div class="pp-tl pp-dim">${t(v.yongshen.detail)}</div>`:"",Z=e.climate||v.yongshen&&v.yongshen.climate||null,Q=Z?(()=>{const d=Math.max(2,Math.min(98,Math.round(((Number(Z.temp)||0)+3)/6*100))),$=Z.need?`<em>调候取</em><b>${t(Z.need.stem+Z.need.element)}</b>`:"<em>气候平和</em>",Y=!!(v.yongshen&&Array.isArray(v.yongshen.disputed))&&v.yongshen.disputed.some(de=>de.element===Z.avoidElement),X=Z.need?`<em>忌</em><b>${t(Z.avoidElement)}</b>${Y?'<span class="pp-dim">(有争议)</span>':""}`:"",he=(Z.evidence||[]).length?`<em>依据</em><span>${t(Z.evidence.join("、"))}</span>`:"",S=Z.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',se=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,h=se?`<div class="mp-qt">
1480
+ <div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(se.label)}</span></div>
1481
+ <div class="mp-qt-y"><em>用神</em>${se.yong.map((de,_e)=>`<b class="${_e===0?"first":""}">${t(de)}</b>`).join("")}<em>首取 ${t(se.primary)}</em></div>
1482
+ <div class="mp-qt-q" title="${t(se.quote)}">「${t(se.quote)}」<span>第 ${se.chapter} 章${se.note?" · "+t(se.note):""}</span></div>
1445
1483
  </div>`:"";return`<section class="mp-cli" aria-label="寒暖燥湿">
1446
- <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(_.label||"")}</span>${je}</div>
1447
- <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${c}%"></i></div>
1484
+ <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(Z.label||"")}</span>${S}</div>
1485
+ <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${d}%"></i></div>
1448
1486
  <div class="mp-cli-axis"><span>寒</span><span>平</span><span>热</span></div>
1449
- <div class="mp-cli-row">${v}${U}${pe}</div>
1450
- <div class="mp-cli-narr">${t(_.narration||"")}</div>
1451
- ${be}
1452
- </section>`})():"",X=y.godStats?`<div class="pp-chips">${Object.entries(y.godStats.groups).map(([c,v])=>`<span class="pp-chip">${c} ${v}</span>`).join("")}</div>`:"",ee=e.dayun.list.map(c=>{const v=c.luck||null;return`<span class="pp-chip ${v?A(v.tier):""}" title="${t(`${c.fromDate?`${c.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${c.startAge} ${c.ganzhi}${c.relations&&c.relations.length?` <i class="pp-drel">${c.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),ie=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(c=>{const v=c.luck||null,G=c.suiyun&&Array.isArray(c.suiyun.signals)?c.suiyun.signals:[],U=G.length?`|${G.map(pe=>pe.detail).join(";")}`:"";return`<span class="pp-chip ${v?A(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${U}`:U.replace(/^|/,""))}">${c.year} ${c.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",ze=(e.liunian||[]).filter(c=>c.suiyun&&Array.isArray(c.suiyun.signals)&&c.suiyun.signals.length),fe=e.suiyunClassic,Be=fe?`<div class="pp-dim pp-sy-src" title="${t(fe.plain||"")}">《${t(fe.bookName||"")}·${t(fe.chapter||"")}》「${t(fe.quote||"")}」</div>`:"",ge=ze.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${ze.map(c=>`<span class="pp-chip" title="${t(`${c.suiyun.signals.map(v=>v.detail).join(";")}|${c.suiyun.note||""}`)}">${c.year} ${t(c.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${Be}`:"",Me=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",Se=e.shensha&&e.shensha.groups||[],H=Se.length?`
1487
+ <div class="mp-cli-row">${$}${X}${he}</div>
1488
+ <div class="mp-cli-narr">${t(Z.narration||"")}</div>
1489
+ ${h}
1490
+ </section>`})():"",te=v.godStats?`<div class="pp-chips">${Object.entries(v.godStats.groups).map(([d,$])=>`<span class="pp-chip">${d} ${$}</span>`).join("")}</div>`:"",le=e.dayun.list.map(d=>{const $=d.luck||null;return`<span class="pp-chip ${$?H($.tier):""}" title="${t(`${d.fromDate?`${d.fromDate} 交运;`:""}${$?`${$.tier} ${$.score}|${($.reasons||[]).join(";")}`:""}`)}">${d.startAge} ${d.ganzhi}${d.relations&&d.relations.length?` <i class="pp-drel">${d.relations.join("")}</i>`:""}${$?` ${$.tier}`:""}</span>`}).join(""),je=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(d=>{const $=d.luck||null,Y=d.suiyun&&Array.isArray(d.suiyun.signals)?d.suiyun.signals:[],X=Y.length?`|${Y.map(he=>he.detail).join(";")}`:"";return`<span class="pp-chip ${$?H($.tier):""}" title="${t($?`${$.tier} ${$.score}|${($.reasons||[]).join(";")}${X}`:X.replace(/^|/,""))}">${d.year} ${d.ganzhi}${$?` ${$.tier}`:""}</span>`}).join("")}</div>`:"",qe=(e.liunian||[]).filter(d=>d.suiyun&&Array.isArray(d.suiyun.signals)&&d.suiyun.signals.length),ye=e.suiyunClassic,xe=ye?`<div class="pp-dim pp-sy-src" title="${t(ye.plain||"")}">《${t(ye.bookName||"")}·${t(ye.chapter||"")}》「${t(ye.quote||"")}」</div>`:"",Ce=qe.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${qe.map(d=>`<span class="pp-chip" title="${t(`${d.suiyun.signals.map($=>$.detail).join(";")}|${d.suiyun.note||""}`)}">${d.year} ${t(d.suiyun.signals.map($=>`${$.type}${($.type.startsWith("流年")||$.type.startsWith("大运"))&&$.target?`·${$.target}`:""}`).join("/"))}</span>`).join("")}</div>${xe}`:"",Ye=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",A=e.shensha&&e.shensha.groups||[],V=A.length?`
1453
1491
  <div class="pp-ssx">
1454
- <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${Se.length} 类 · 悬停看查法</span></div>
1455
- ${Se.map(c=>`<div class="pp-ssg"><span class="ssg-gt">${c.cat}</span><span class="ssg-gi">${c.items.map(v=>`<span class="pp-ssi ${v.luck||"neutral"}" title="${t(`${v.via}查${v.target} | ${v.rule}`)}">${v.name}<em>${v.pillars.map(G=>p[G]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1492
+ <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${A.length} 类 · 悬停看查法</span></div>
1493
+ ${A.map(d=>`<div class="pp-ssg"><span class="ssg-gt">${d.cat}</span><span class="ssg-gi">${d.items.map($=>`<span class="pp-ssi ${$.luck||"neutral"}" title="${t(`${$.via}查${$.target} | ${$.rule}`)}">${$.name}<em>${$.pillars.map(Y=>p[Y]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1456
1494
  <div class="ssx-h" style="border-top:none;padding-top:4px;margin-top:4px">神煞只作参考,吉凶仍须看格局、旺衰与行运。</div>
1457
1495
  </div>`:"";return`<div class="pp" style="padding:12px">
1458
- <table class="pp-bz">${x}<tbody>${P}</tbody></table>
1496
+ <table class="pp-bz">${b}<tbody>${E}</tbody></table>
1459
1497
  <div class="pp-rel"><div><b>天干</b>${e.relations&&e.relations.stems.length?e.relations.stems.join(" · "):"—"}</div>
1460
1498
  <div><b>地支</b>${e.relations&&e.relations.branches.length?e.relations.branches.join(" · "):"—"}</div></div>
1461
- ${Me}
1462
- ${I("格局",L)}
1463
- ${I("用神",C)}
1464
- ${ae}
1499
+ ${Ye}
1500
+ ${I("格局",T)}
1501
+ ${I("用神",R)}
1502
+ ${Q}
1465
1503
  ${Array.isArray(e.classics)&&e.classics.length?`<section class="mp-cl" aria-label="古籍原文">
1466
1504
  <div class="mp-cl-h"><b>古籍原文</b><span>照录通行本,释义为白话自撰</span></div>
1467
- ${e.classics.map(c=>`<div class="mp-cl-e">
1468
- <div class="mp-cl-t"><b>${t(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[c.book]||c.book)+"·"+c.chapter)}</b></div>
1469
- <div class="mp-cl-q">「${t(c.quote)}」</div>
1470
- <div class="mp-cl-p">${t(c.plain)}</div>
1505
+ ${e.classics.map(d=>`<div class="mp-cl-e">
1506
+ <div class="mp-cl-t"><b>${t(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[d.book]||d.book)+"·"+d.chapter)}</b></div>
1507
+ <div class="mp-cl-q">「${t(d.quote)}」</div>
1508
+ <div class="mp-cl-p">${t(d.plain)}</div>
1471
1509
  </div>`).join("")}
1472
1510
  </section>`:""}
1473
- ${I("五行与十神",`<div class="pp-chips">${d}</div>${X}`)}
1474
- ${I("大运",`${l.curveHTML(e)}<div class="pp-chips">${ee}</div>`)}
1475
- ${ie?I("流年",ie+ge):""}
1511
+ ${I("五行与十神",`<div class="pp-chips">${c}</div>${te}`)}
1512
+ ${I("大运",`${r.curveHTML(e)}<div class="pp-chips">${le}</div>`)}
1513
+ ${je?I("流年",je+Ce):""}
1476
1514
  ${e.palaces?I("胎命身",`<div class="pp-chips">
1477
1515
  <span class="pp-chip" title="${t(e.palaces.taiyuan.note)}">胎元 ${t(e.palaces.taiyuan.ganzhi)}</span>
1478
1516
  ${e.palaces.taixi?`<span class="pp-chip" title="${t(e.palaces.taixi.note)}">胎息 ${t(e.palaces.taixi.ganzhi)}</span>`:""}
1479
1517
  <span class="pp-chip" title="${t(e.palaces.minggong.note)}">命宫 ${t(e.palaces.minggong.ganzhi)}</span>
1480
1518
  <span class="pp-chip" title="${t(e.palaces.shengong.note)}">身宫 ${t(e.palaces.shengong.ganzhi)}</span>
1481
1519
  </div>`):""}
1482
- ${H}
1520
+ ${V}
1483
1521
  <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})`:""}</div>
1484
- </div>`};const ha={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},De={同向:"good",有张力:"watch",互补:"alt"},va=e=>`<div class="mp-cross">${e.map(n=>{const p=De[n.stance]||"plain";return`<div class="mp-cross-row">
1522
+ </div>`};const va={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},Be={同向:"good",有张力:"watch",互补:"alt"},ya=e=>`<div class="mp-cross">${e.map(n=>{const p=Be[n.stance]||"plain";return`<div class="mp-cross-row">
1485
1523
  <div class="mp-cross-h"><span class="mp-cross-l">${t(n.label)}</span><span class="mp-cross-tag t-${p}">${t(n.stance||"—")}</span></div>
1486
1524
  <div class="mp-cross-b">
1487
1525
  <div class="mp-cross-cell"><b>八字</b><span>${t(n.bazi||"—")}</span></div>
1488
1526
  <div class="mp-cross-cell"><b>紫微</b><span>${t(n.ziwei||"—")}</span></div>
1489
1527
  </div>
1490
1528
  ${n.note?`<div class="mp-cross-note">${t(n.note)}</div>`:""}
1491
- </div>`}).join("")}</div>`;l.interpretHTML=function(e,n){if(!e||!(e.dimensions&&e.dimensions.length||e.sections&&e.sections.length)&&!e.error&&!e.answer)return"";const g=!!(n&&n.folded),i=(e.dimensions||[]).map((d,y)=>`<div class="mp-it-dim${d.focused?" focus":""}">
1492
- <div class="mp-it-dh"><span class="mp-it-dno">${y+1}</span><span class="mp-it-dlabel">${t(d.label)}</span>${d.focused?'<span class="mp-it-focus">最贴近你的问题</span>':""}${d.confidence?`<span class="mp-it-conf c-${t(d.confidence)}">置信度 ${t(d.confidence)}</span>`:""}</div>
1493
- ${d.plain?`<div class="mp-it-dplain">${t(d.plain)}</div>`:""}
1494
- <div class="mp-it-dtext">${t(d.text)}</div>
1495
- ${d.evidence&&d.evidence.length?`<details class="mp-it-ev"><summary>依据 · ${t(d.evidence.length)} 条盘面事实</summary><div class="mp-it-ev-body">${d.evidence.map(A=>`<span class="mp-it-ev-item">${t(A)}</span>`).join("")}<span class="mp-it-ev-tech">技法:${t(e.technique||e.systemLabel||"")}</span></div></details>`:""}
1496
- ${d.knowledge&&d.knowledge.length?`<div class="mp-it-know">${d.knowledge.map(A=>`<div class="know-row"><span class="know-status ${A.status}">${t(A.statusLabel)}</span><span class="know-body"><b>${t(A.gist)}</b>${t(A.detail)}${A.source?`<i>出处:${t(A.source)}</i>`:""}${A.note?`<em>注:${t(A.note)}</em>`:""}</span></div>`).join("")}</div>`:""}
1497
- ${d.advice?`<div class="mp-it-adv"><b>建议</b>${t(d.advice)}</div>`:""}
1498
- </div>`).join(""),u=e.outline&&e.outline.length?`<div class="mp-outline"><div class="mp-outline-h">一页读懂</div>${e.outline.map(d=>`<div class="mp-outline-row"><b>${t(d.label)}</b><span>${t(d.text)}</span></div>`).join("")}</div>`:"",m=e.sections&&e.sections.length?`<nav class="mp-toc" aria-label="报告目录">${e.sections.map(d=>`<a href="#mp-sec-${t(d.key)}">${t(d.label)}</a>`).join("")}</nav>`:"",r=e.tables&&e.tables.length?`<div class="mp-tables">${e.tables.filter(d=>Array.isArray(d.rows)&&d.rows.length).map(d=>`<div class="mp-table-wrap">
1499
- <div class="mp-table-h">${t(d.title)}</div>
1529
+ </div>`}).join("")}</div>`;r.interpretHTML=function(e,n){if(!e||!(e.dimensions&&e.dimensions.length||e.sections&&e.sections.length)&&!e.error&&!e.answer)return"";const m=!!(n&&n.folded),i=(e.dimensions||[]).map((c,v)=>`<div class="mp-it-dim${c.focused?" focus":""}">
1530
+ <div class="mp-it-dh"><span class="mp-it-dno">${v+1}</span><span class="mp-it-dlabel">${t(c.label)}</span>${c.focused?'<span class="mp-it-focus">最贴近你的问题</span>':""}${c.confidence?`<span class="mp-it-conf c-${t(c.confidence)}">置信度 ${t(c.confidence)}</span>`:""}</div>
1531
+ ${c.plain?`<div class="mp-it-dplain">${t(c.plain)}</div>`:""}
1532
+ <div class="mp-it-dtext">${t(c.text)}</div>
1533
+ ${c.evidence&&c.evidence.length?`<details class="mp-it-ev"><summary>依据 · ${t(c.evidence.length)} 条盘面事实</summary><div class="mp-it-ev-body">${c.evidence.map(H=>`<span class="mp-it-ev-item">${t(H)}</span>`).join("")}<span class="mp-it-ev-tech">技法:${t(e.technique||e.systemLabel||"")}</span></div></details>`:""}
1534
+ ${c.knowledge&&c.knowledge.length?`<div class="mp-it-know">${c.knowledge.map(H=>`<div class="know-row"><span class="know-status ${H.status}">${t(H.statusLabel)}</span><span class="know-body"><b>${t(H.gist)}</b>${t(H.detail)}${H.source?`<i>出处:${t(H.source)}</i>`:""}${H.note?`<em>注:${t(H.note)}</em>`:""}</span></div>`).join("")}</div>`:""}
1535
+ ${c.advice?`<div class="mp-it-adv"><b>建议</b>${t(c.advice)}</div>`:""}
1536
+ </div>`).join(""),g=e.outline&&e.outline.length?`<div class="mp-outline"><div class="mp-outline-h">一页读懂</div>${e.outline.map(c=>`<div class="mp-outline-row"><b>${t(c.label)}</b><span>${t(c.text)}</span></div>`).join("")}</div>`:"",u=e.sections&&e.sections.length?`<nav class="mp-toc" aria-label="报告目录">${e.sections.map(c=>`<a href="#mp-sec-${t(c.key)}">${t(c.label)}</a>`).join("")}</nav>`:"",l=e.tables&&e.tables.length?`<div class="mp-tables">${e.tables.filter(c=>Array.isArray(c.rows)&&c.rows.length).map(c=>`<div class="mp-table-wrap">
1537
+ <div class="mp-table-h">${t(c.title)}</div>
1500
1538
  <div class="mp-table-scroll"><table class="mp-table">
1501
- <thead><tr>${d.columns.map(y=>`<th scope="col">${t(y)}</th>`).join("")}</tr></thead>
1502
- <tbody>${d.rows.map(y=>`<tr>${y.map((A,I)=>`<td data-label="${t(d.columns[I]||"")}">${t(A)}</td>`).join("")}</tr>`).join("")}</tbody>
1539
+ <thead><tr>${c.columns.map(v=>`<th scope="col">${t(v)}</th>`).join("")}</tr></thead>
1540
+ <tbody>${c.rows.map(v=>`<tr>${v.map((H,I)=>`<td data-label="${t(c.columns[I]||"")}">${t(H)}</td>`).join("")}</tr>`).join("")}</tbody>
1503
1541
  </table></div>
1504
- </div>`).join("")}</div>`:"",b=d=>String(d||"").split(`
1505
- `).map(y=>`<div class="mp-it-p">${t(y).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),x=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map(d=>`<div class="mp-it-sec${d.tone?` tone-${t(d.tone)}`:""}" id="mp-sec-${t(d.key)}">
1506
- <div class="mp-it-sh">${t(d.label)}</div>
1507
- <div class="mp-it-stext">${Array.isArray(d.items)&&d.items.length?va(d.items):b(d.text)}</div>
1508
- </div>`).join("")}</div>`:"",f=[e.systemLabel,ha[e.moduleType]||e.moduleType].filter(Boolean),S=e.ask,w=S&&S.question?t(S.question):"",z=S&&(w||S.direction&&S.direction!=="general")?`<div class="mp-it-ask">${w?`<span class="ask-q">问题:${w}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t(S.directionLabel||"综合")}</span></div>`:"",N=e.answer?`<div class="mp-it-ans"><b>${w?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",M=e.plain?`<div class="mp-it-plain"><b>说人话</b>${t(e.plain)}</div>`:"",D=e.followups&&e.followups.length?`<div class="mp-it-fu"><b>还可以这样追问</b><ul>${e.followups.map(d=>`<li>${t(d)}</li>`).join("")}</ul></div>`:"",P=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map(d=>`<div><span>${t(d.term)}</span>${t(d.plain)}</div>`).join("")}</details>`:"";return`<div class="mp-it${g?" folded":""}">
1509
- <button type="button" class="mp-it-head" aria-expanded="${g?"false":"true"}">
1542
+ </div>`).join("")}</div>`:"",f=c=>String(c||"").split(`
1543
+ `).map(v=>`<div class="mp-it-p">${t(v).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),b=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map(c=>`<div class="mp-it-sec${c.tone?` tone-${t(c.tone)}`:""}" id="mp-sec-${t(c.key)}">
1544
+ <div class="mp-it-sh">${t(c.label)}</div>
1545
+ <div class="mp-it-stext">${Array.isArray(c.items)&&c.items.length?ya(c.items):f(c.text)}</div>
1546
+ </div>`).join("")}</div>`:"",x=[e.systemLabel,va[e.moduleType]||e.moduleType].filter(Boolean),z=e.ask,w=z&&z.question?t(z.question):"",k=z&&(w||z.direction&&z.direction!=="general")?`<div class="mp-it-ask">${w?`<span class="ask-q">问题:${w}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t(z.directionLabel||"综合")}</span></div>`:"",q=e.answer?`<div class="mp-it-ans"><b>${w?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",N=e.plain?`<div class="mp-it-plain"><b>说人话</b>${t(e.plain)}</div>`:"",D=e.followups&&e.followups.length?`<div class="mp-it-fu"><b>还可以这样追问</b><ul>${e.followups.map(c=>`<li>${t(c)}</li>`).join("")}</ul></div>`:"",E=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map(c=>`<div><span>${t(c.term)}</span>${t(c.plain)}</div>`).join("")}</details>`:"";return`<div class="mp-it${m?" folded":""}">
1547
+ <button type="button" class="mp-it-head" aria-expanded="${m?"false":"true"}">
1510
1548
  <span class="mp-it-arrow" aria-hidden="true">▾</span>
1511
- <span class="mp-it-title">解析与详解</span>${f.map(d=>`<span class="mp-it-tag">${t(d)}</span>`).join("")}
1512
- <span class="mp-it-hint">${g?"点击展开":"点击收起"}</span>
1549
+ <span class="mp-it-title">解析与详解</span>${x.map(c=>`<span class="mp-it-tag">${t(c)}</span>`).join("")}
1550
+ <span class="mp-it-hint">${m?"点击展开":"点击收起"}</span>
1513
1551
  </button>
1514
1552
  <div class="mp-it-wrap">
1515
- ${z}
1553
+ ${k}
1554
+ ${q}
1516
1555
  ${N}
1517
- ${M}
1518
1556
  ${e.lead?`<div class="mp-it-lead">${t(e.lead)}</div>`:""}
1519
1557
  ${e.error?`<div class="mp-it-err"><b>⚠ 解析生成失败</b>${t(e.error)}——上方盘面数据本身可用</div>`:""}
1558
+ ${g}
1520
1559
  ${u}
1521
- ${m}
1522
1560
  <div class="mp-it-body">${i}</div>
1523
- ${x}
1524
- ${r}
1561
+ ${b}
1562
+ ${l}
1525
1563
  ${D}
1526
- ${P}
1564
+ ${E}
1527
1565
  <div class="mp-it-dis">${t(e.disclaimer)}</div>
1528
1566
  </div>
1529
- </div>`},l.followupHTML=function(e){if(!e)return"";const n=e.evidence&&e.evidence.length?`<div class="mp-fu-ev">依据:${e.evidence.map(p=>t(p)).join(";")} 置信度:${t(e.confidence||"弱")}</div>`:"";return`<div class="mp-fu${e.ok?"":" miss"}">
1567
+ </div>`},r.followupHTML=function(e){if(!e)return"";const n=e.evidence&&e.evidence.length?`<div class="mp-fu-ev">依据:${e.evidence.map(p=>t(p)).join(";")} 置信度:${t(e.confidence||"弱")}</div>`:"";return`<div class="mp-fu${e.ok?"":" miss"}">
1530
1568
  <div class="mp-fu-h">追问 · ${t(e.question)}</div>
1531
1569
  <div class="mp-fu-a">${t(e.answer)}</div>
1532
1570
  ${n}
1533
- </div>`},l.resultWithInterpret=function(e,n,p){return(e||"")+l.interpretHTML(n,p)},l.caliberHTML=function(e){const n=e&&Array.isArray(e.switches)?e.switches.filter(r=>r&&r.key):[];if(!n.length)return"";const p=n.filter(r=>!r.error&&r.total>0),g=p.length?`${n.length} 组开关中 ${p.length} 组影响此盘:${p.map(r=>r.short||r.title).join("、")}。`:`本盘对 ${n.length} 组开关都不敏感:换成另一档也不变。`,i=r=>{if(r.error)return`<div class="mp-cdiff-same">未能对照:${t(r.error)}</div>`;if(!r.total)return'<div class="mp-cdiff-same">无变化 · 此盘不受这一开关影响</div>';const b=Array.isArray(r.roots)?r.roots:[];return b.length?`<div class="mp-cdiff-roots">${b.map(x=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(x.label)}</span><span class="mp-cdiff-from">${t(x.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(x.to)}</span></div>`).join("")}</div>`:`<div class="mp-cdiff-same">无单一根因;逐字段差异 ${Number(r.total)||0} 处</div>`},u=r=>{const b=Array.isArray(r.categories)?r.categories:[];if(r.error||!r.total||!b.length)return"";const x=b.slice(0,6);return`<div class="mp-cdiff-cats">${x.map(f=>`<span class="mp-cdiff-cat">${t(f.name)} ${Number(f.count)||0} 处</span>`).join("")}`+(b.length>x.length?`<span class="mp-cdiff-cat">另 ${b.length-x.length} 类</span>`:"")+"</div>"},m=n.map(r=>`<div class="mp-cdiff-row"><div class="mp-cdiff-h"><b>${t(r.title)}</b><span class="mp-cdiff-count${r.total>0?" on":""}">${r.error?"未能对照":r.total?`${Number(r.total)||0} 处`:"无变化"}</span></div><div class="mp-cdiff-ab"><span class="mp-cdiff-pill now">当前 · ${t(r.currentLabel)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-pill alt">换成 · ${t(r.altLabel)}</span></div>${i(r)}${u(r)}</div>`).join("");return`<details class="mp-cdiff" aria-label="口径对照">
1534
- <summary><span class="mp-cdiff-title">口径对照</span><span class="mp-cdiff-lead">${t(g)}</span><span class="mp-cdiff-more">展开逐字差异</span></summary>
1535
- <div class="mp-cdiff-body">${m}
1571
+ </div>`},r.resultWithInterpret=function(e,n,p){return(e||"")+r.interpretHTML(n,p)},r.caliberHTML=function(e){const n=e&&Array.isArray(e.switches)?e.switches.filter(l=>l&&l.key):[];if(!n.length)return"";const p=n.filter(l=>!l.error&&l.total>0),m=p.length?`${n.length} 组开关中 ${p.length} 组影响此盘:${p.map(l=>l.short||l.title).join("、")}。`:`本盘对 ${n.length} 组开关都不敏感:换成另一档也不变。`,i=l=>{if(l.error)return`<div class="mp-cdiff-same">未能对照:${t(l.error)}</div>`;if(!l.total)return'<div class="mp-cdiff-same">无变化 · 此盘不受这一开关影响</div>';const f=Array.isArray(l.roots)?l.roots:[];return f.length?`<div class="mp-cdiff-roots">${f.map(b=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(b.label)}</span><span class="mp-cdiff-from">${t(b.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(b.to)}</span></div>`).join("")}</div>`:`<div class="mp-cdiff-same">无单一根因;逐字段差异 ${Number(l.total)||0} 处</div>`},g=l=>{const f=Array.isArray(l.categories)?l.categories:[];if(l.error||!l.total||!f.length)return"";const b=f.slice(0,6);return`<div class="mp-cdiff-cats">${b.map(x=>`<span class="mp-cdiff-cat">${t(x.name)} ${Number(x.count)||0} 处</span>`).join("")}`+(f.length>b.length?`<span class="mp-cdiff-cat">另 ${f.length-b.length} 类</span>`:"")+"</div>"},u=n.map(l=>`<div class="mp-cdiff-row"><div class="mp-cdiff-h"><b>${t(l.title)}</b><span class="mp-cdiff-count${l.total>0?" on":""}">${l.error?"未能对照":l.total?`${Number(l.total)||0} 处`:"无变化"}</span></div><div class="mp-cdiff-ab"><span class="mp-cdiff-pill now">当前 · ${t(l.currentLabel)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-pill alt">换成 · ${t(l.altLabel)}</span></div>${i(l)}${g(l)}</div>`).join("");return`<details class="mp-cdiff" aria-label="口径对照">
1572
+ <summary><span class="mp-cdiff-title">口径对照</span><span class="mp-cdiff-lead">${t(m)}</span><span class="mp-cdiff-more">展开逐字差异</span></summary>
1573
+ <div class="mp-cdiff-body">${u}
1536
1574
  <div class="mp-cdiff-note">同一组输入、只换一个开关;只列变化字段与根因,不判哪套口径更准,也不改上方盘面。</div>
1537
1575
  </div>
1538
- </details>`},l.shadowHTML=function(e,n){if(!e||!e.id)return"";const p=[];e.version&&p.push(`版本 <b>${t(e.version)}</b>`),e.baseId&&p.push(`基础指纹 <b>${t(e.baseId)}</b>`),p.push("同参数同 ID");const g=[];e.reproducible===!1&&g.push(`不可复算:${t(e.reason||"参数不足")}`);const i=e.reproducible===!0&&e.asOfPinned===!1&&(e.system==="bazi"||e.system==="ziwei")?'<div class="mp-shadow-hint">未固定 asOf:流年 / 流月随「此刻」变化;要逐字比对请在输入里固定 asOf。</div>':"",u=n&&n.sameId!==!1&&(n.versionChanged||Number(n.total)>0);let m="";if(u){const r=Number(n.total)||0,b=t(n.fromVersion||"—"),x=t(n.toVersion||e.version||"—"),f=Array.isArray(n.roots)?n.roots:[],S=f.slice(0,8),w=S.length?`<div class="mp-cdiff-roots">${S.map(M=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(M.label)}</span><span class="mp-cdiff-from">${t(M.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(M.to)}</span></div>`).join("")}`+(f.length>S.length?`<div class="same">另 ${f.length-S.length} 处根因</div>`:"")+"</div>":`<div class="same">${r?"无单一根因;逐字段变化 "+r+" 处":"字段 0 处变化:同一张盘跨版本逐字一致"}</div>`,z=Array.isArray(n.categories)?n.categories:[],N=z.length?`<div class="mp-cdiff-cats">${z.slice(0,6).map(M=>`<span class="mp-cdiff-cat">${t(M.name)} ${Number(M.count)||0} 处</span>`).join("")}`+(z.length>6?`<span class="mp-cdiff-cat">另 ${z.length-6} 类</span>`:"")+"</div>":"";m=`<details class="mp-shadow-diff"${r>0?" open":""}>
1539
- <summary><b>与上次同盘比对</b><span class="tag">${b} → ${x} · ${r?`${r} 处变化`:"0 处变化"}</span></summary>
1540
- ${w}${N}
1576
+ </details>`},r.handleHTML=function(e){return typeof e!="string"||!e?"":`<section class="mp-handle" aria-label="排盘句柄">
1577
+ <span class="mp-handle-title">排盘句柄</span>
1578
+ <code class="mp-handle-code" title="${t(e)}">${t(e)}</code>
1579
+ <button type="button" class="mp-handle-copy" data-handle-copy="${t(e)}" aria-label="复制排盘句柄">复制句柄</button>
1580
+ <span class="mp-handle-hint">追问同一张盘时把它连同增量参数(年份、方向、所问之事)一并交给助手,不必重报出生信息。句柄是编码不是加密,含出生时间与出生地,别公开贴出。</span>
1581
+ </section>`},r.revisionHTML=function(e){if(!e||typeof e!="object")return"";const n=Array.isArray(e.applied)?e.applied:[],p=Array.isArray(e.ignored)?e.ignored:[];if(!n.length&&!p.length)return"";const m=n.map(i=>{const g=i.fromDisplay==null?"(未设)":i.fromDisplay;return`<li><span class="k">${t(i.label||i.key)}</span><span class="v"><span class="old">${t(g)}</span> → <span class="new">${t(i.display)}</span></span></li>`}).join("");return`<section class="mp-revise" aria-label="一句话改参">
1582
+ <div class="mp-revise-head"><span class="mp-revise-title">一句话改参</span><span class="mp-revise-text">「${t(e.text||"")}」</span></div>
1583
+ ${m?`<ul class="mp-revise-list">${m}</ul>`:'<p class="mp-revise-ignored">没有识别到可改的参数,仍按原参数排盘。</p>'}
1584
+ ${p.length?`<p class="mp-revise-ignored">未处理:${t(p.join(";"))}</p>`:""}
1585
+ </section>`},r.shadowHTML=function(e,n){if(!e||!e.id)return"";const p=[];e.version&&p.push(`版本 <b>${t(e.version)}</b>`),e.baseId&&p.push(`基础指纹 <b>${t(e.baseId)}</b>`),p.push("同参数同 ID");const m=[];e.reproducible===!1&&m.push(`不可复算:${t(e.reason||"参数不足")}`);const i=e.reproducible===!0&&e.asOfPinned===!1&&(e.system==="bazi"||e.system==="ziwei")?'<div class="mp-shadow-hint">未固定 asOf:流年 / 流月随「此刻」变化;要逐字比对请在输入里固定 asOf。</div>':"",g=n&&n.sameId!==!1&&(n.versionChanged||Number(n.total)>0);let u="";if(g){const l=Number(n.total)||0,f=t(n.fromVersion||"—"),b=t(n.toVersion||e.version||"—"),x=Array.isArray(n.roots)?n.roots:[],z=x.slice(0,8),w=z.length?`<div class="mp-cdiff-roots">${z.map(N=>`<div class="mp-cdiff-root"><span class="mp-cdiff-k">${t(N.label)}</span><span class="mp-cdiff-from">${t(N.from)}</span><span class="mp-cdiff-arrow" aria-hidden="true">→</span><span class="mp-cdiff-to">${t(N.to)}</span></div>`).join("")}`+(x.length>z.length?`<div class="same">另 ${x.length-z.length} 处根因</div>`:"")+"</div>":`<div class="same">${l?"无单一根因;逐字段变化 "+l+" 处":"字段 0 处变化:同一张盘跨版本逐字一致"}</div>`,k=Array.isArray(n.categories)?n.categories:[],q=k.length?`<div class="mp-cdiff-cats">${k.slice(0,6).map(N=>`<span class="mp-cdiff-cat">${t(N.name)} ${Number(N.count)||0} 处</span>`).join("")}`+(k.length>6?`<span class="mp-cdiff-cat">另 ${k.length-6} 类</span>`:"")+"</div>":"";u=`<details class="mp-shadow-diff"${l>0?" open":""}>
1586
+ <summary><b>与上次同盘比对</b><span class="tag">${f} → ${b} · ${l?`${l} 处变化`:"0 处变化"}</span></summary>
1587
+ ${w}${q}
1541
1588
  <div class="note">同一 baseId(同一组归一化参数)的两次结果;只比盘面字段,不含摘要、解析与古籍等文本层。</div>
1542
1589
  </details>`}return`<section class="mp-shadow" aria-label="影子盘">
1543
1590
  <div class="mp-shadow-head"><span class="mp-shadow-title">影子盘</span><code class="mp-shadow-id">${t(e.id)}</code>
1544
1591
  <button type="button" class="mp-shadow-copy" data-shadow-copy="${t(e.id)}" aria-label="复制影子盘 ID">复制 ID</button></div>
1545
1592
  <div class="mp-shadow-meta">${p.join('<span aria-hidden="true">·</span>')}</div>
1546
- ${g.map(r=>`<div class="mp-shadow-warn">⚠ ${r}</div>`).join("")}
1593
+ ${m.map(l=>`<div class="mp-shadow-warn">⚠ ${l}</div>`).join("")}
1547
1594
  ${i}
1548
- ${m}
1549
- </section>`},l.shadowTrack=function(e){const n=window.Engine||window.__PP&&window.__PP.Engine;if(!n||!n.shadowSnapshot||!n.shadowDiff)return null;let p=null;try{p=n.shadowSnapshot(e)}catch{return null}if(!p||!p.shadow||!p.shadow.baseId)return null;const g="mp-shadow-v1";let i={};try{const r=window.localStorage?window.localStorage.getItem(g):null,b=r?JSON.parse(r):{};b&&typeof b=="object"&&!Array.isArray(b)&&(i=b)}catch{i={}}const u=i[p.shadow.baseId];let m=null;if(u)try{m=n.shadowDiff(u,p)}catch{m=null}p.at=Date.now(),i[p.shadow.baseId]=p;try{const r=Object.keys(i);if(r.length>24){r.sort((b,x)=>(Number(i[b]&&i[b].at)||0)-(Number(i[x]&&i[x].at)||0));for(const b of r.slice(0,r.length-24))delete i[b]}window.localStorage&&window.localStorage.setItem(g,JSON.stringify(i))}catch{}return m},l.traceHTML=function(e,n){if(!Array.isArray(e)||!e.length)return"";const p={liuyao:"六爻",bazi:"八字",ziwei:"紫微"}[n]||"命盘",g=e.map(m=>m&&m.field).filter(Boolean).join(" → "),i=(m,r)=>{const b=String(m??"");return b.length>r?`${b.slice(0,r)}…`:b},u=e.map((m,r)=>{const b=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${r===0?" open":""}>
1550
- <summary><span class="mp-trace-no">${r+1}</span><span class="mp-trace-field">${t(m.field)}</span><span class="mp-trace-res">${t(i(m.result,44))}</span></summary>
1595
+ ${u}
1596
+ </section>`},r.shadowTrack=function(e){const n=window.Engine||window.__PP&&window.__PP.Engine;if(!n||!n.shadowSnapshot||!n.shadowDiff)return null;let p=null;try{p=n.shadowSnapshot(e)}catch{return null}if(!p||!p.shadow||!p.shadow.baseId)return null;const m="mp-shadow-v1";let i={};try{const l=window.localStorage?window.localStorage.getItem(m):null,f=l?JSON.parse(l):{};f&&typeof f=="object"&&!Array.isArray(f)&&(i=f)}catch{i={}}const g=i[p.shadow.baseId];let u=null;if(g)try{u=n.shadowDiff(g,p)}catch{u=null}p.at=Date.now(),i[p.shadow.baseId]=p;try{const l=Object.keys(i);if(l.length>24){l.sort((f,b)=>(Number(i[f]&&i[f].at)||0)-(Number(i[b]&&i[b].at)||0));for(const f of l.slice(0,l.length-24))delete i[f]}window.localStorage&&window.localStorage.setItem(m,JSON.stringify(i))}catch{}return u},r.traceHTML=function(e,n,p){if(!Array.isArray(e)||!e.length)return"";const m={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[n]||"命盘",i=e.map(f=>f&&f.field).filter(Boolean).join(" → "),g=typeof p=="string"?p:"",u=(f,b)=>{const x=String(f??"");return x.length>b?`${x.slice(0,b)}…`:x},l=e.map((f,b)=>{const x=Array.isArray(f.inputs)?f.inputs:[];return`<details class="mp-trace-step"${b===0?" open":""}>
1597
+ <summary><span class="mp-trace-no">${b+1}</span><span class="mp-trace-field">${t(f.field)}</span><span class="mp-trace-res">${t(u(f.result,44))}</span></summary>
1551
1598
  <div class="mp-trace-detail">
1552
- <div class="mp-trace-rule"><b>规则</b>${t(m.rule)}</div>
1553
- ${b.length?`<dl class="mp-trace-inputs">${b.map(x=>`<dt>${t(x.label)}</dt><dd>${t(x.value)}</dd>`).join("")}</dl>`:""}
1554
- <div class="mp-trace-result"><b>结果</b>${t(m.result)}</div>
1555
- ${m.source?`<div class="mp-trace-src"><b>出处</b>${t(m.source)}</div>`:""}
1599
+ <div class="mp-trace-rule"><b>规则</b>${t(f.rule)}</div>
1600
+ ${x.length?`<dl class="mp-trace-inputs">${x.map(z=>`<dt>${t(z.label)}</dt><dd>${t(z.value)}</dd>`).join("")}</dl>`:""}
1601
+ <div class="mp-trace-result"><b>结果</b>${t(f.result)}</div>
1602
+ ${f.source?`<div class="mp-trace-src"><b>出处</b>${t(f.source)}</div>`:""}
1556
1603
  </div>
1557
1604
  </details>`}).join("");return`<button type="button" class="mp-trace-card" data-trace-open aria-haspopup="dialog" aria-controls="mp-trace-layer">
1558
- <span class="mp-trace-title">推导链</span><span class="mp-trace-flow">${t(g)}</span><span class="mp-trace-count">${e.length} 层 · 查看</span>
1605
+ <span class="mp-trace-title">推导链</span><span class="mp-trace-flow">${t(i)}</span><span class="mp-trace-count">${e.length} 层 · 查看</span>
1559
1606
  </button>
1560
1607
  <div class="mp-trace-layer" id="mp-trace-layer" data-trace-layer aria-hidden="true">
1561
1608
  <div class="mp-trace-back" data-trace-close></div>
1562
1609
  <aside class="mp-trace-drawer" role="dialog" aria-modal="true" aria-labelledby="mp-trace-title">
1563
1610
  <div class="mp-trace-head">
1564
- <div><b id="mp-trace-title">推导链 · ${t(p)}</b><span>${e.length} 层 · 每层给出规则、输入、结果与出处;只读,不重算</span></div>
1611
+ <div><b id="mp-trace-title">推导链 · ${t(m)}</b><span>${e.length} 层 · 每层给出规则、输入、结果与出处;只读,不重算</span></div>
1612
+ ${g?'<button type="button" class="mp-trace-copy" data-trace-copy aria-label="复制整条推导链的 Markdown">复制 Markdown</button>':""}
1565
1613
  <button type="button" class="mp-trace-close" data-trace-close aria-label="关闭推导链">✕</button>
1566
1614
  </div>
1567
- <div class="mp-trace-body">${u}</div>
1615
+ <div class="mp-trace-body">${l}</div>
1616
+ ${g?`<textarea class="mp-trace-md" data-trace-md readonly hidden>${t(g)}</textarea>`:""}
1568
1617
  </aside>
1569
- </div>`},l.almanacHTML=function(e){if(!e||!e.meta)return l.quickHTML(e);const n=e.ganzhi||{},p=e.dayGod||null,g=(z,N)=>(z||[]).map(M=>`<span class="mp-al-chip${N?` ${N}`:""}">${t(M)}</span>`).join(""),i=(z,N)=>N?`<div class="mp-al-cell"><em>${t(z)}</em><b>${t(N)}</b></div>`:"",u=e.xiu?`${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",m=e.nayin&&e.nayin.day?e.nayin.day.name:"",r=e.chong?`${e.chong.text}${e.chong.sha?` ${e.chong.sha}`:""}`:"",b=(e.hours||[]).map(z=>`<span class="mp-al-hour ${z.luck==="吉"?"good":"bad"}"><i>${t(z.zhi)}</i><em>${t((z.ganZhi||"").slice(0,1))}</em><b>${t(z.shen||"")}</b><u>${t(z.luck||"")}</u></span>`).join(""),x=e.positions||{},f=(z,N)=>N?`<span class="mp-al-chip">${t(z)}·${t(typeof N=="string"?N:N.dir||"")}</span>`:"",S=e.lucky||{},w=p?`<span class="mp-al-badge ${p.luck==="吉"?"good":"bad"}">${t(p.name)}·${t(p.type)}·${t(p.luck)}</span>`:"";return`<section class="mp-al" aria-label="黄历">
1618
+ </div>`},r.almanacHTML=function(e){if(!e||!e.meta)return r.quickHTML(e);const n=e.ganzhi||{},p=e.dayGod||null,m=(k,q)=>(k||[]).map(N=>`<span class="mp-al-chip${q?` ${q}`:""}">${t(N)}</span>`).join(""),i=(k,q)=>q?`<div class="mp-al-cell"><em>${t(k)}</em><b>${t(q)}</b></div>`:"",g=e.xiu?`${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",u=e.nayin&&e.nayin.day?e.nayin.day.name:"",l=e.chong?`${e.chong.text}${e.chong.sha?` ${e.chong.sha}`:""}`:"",f=(e.hours||[]).map(k=>`<span class="mp-al-hour ${k.luck==="吉"?"good":"bad"}"><i>${t(k.zhi)}</i><em>${t((k.ganZhi||"").slice(0,1))}</em><b>${t(k.shen||"")}</b><u>${t(k.luck||"")}</u></span>`).join(""),b=e.positions||{},x=(k,q)=>q?`<span class="mp-al-chip">${t(k)}·${t(typeof q=="string"?q:q.dir||"")}</span>`:"",z=e.lucky||{},w=p?`<span class="mp-al-badge ${p.luck==="吉"?"good":"bad"}">${t(p.name)}·${t(p.type)}·${t(p.luck)}</span>`:"";return`<section class="mp-al" aria-label="黄历">
1570
1619
  <div class="mp-al-h"><b>${t(e.meta.date||"")}</b><i>${t(e.meta.weekday||"")} ${t((e.lunar||{}).text||"")}</i></div>
1571
1620
  <div class="mp-al-gz">${t(n.year||"")}年 ${t(n.month||"")}月 ${t(n.day||"")}日 属${t(n.shengXiao||"")} 建除 ${t(e.zhiXing||"")}日 ${w}</div>
1572
1621
  <div class="mp-al-yiji">
1573
- <div class="mp-al-col"><em>宜</em><div class="mp-al-chips">${g(e.yi)}</div></div>
1574
- <div class="mp-al-col"><em>忌</em><div class="mp-al-chips">${g(e.ji)}</div></div>
1622
+ <div class="mp-al-col"><em>宜</em><div class="mp-al-chips">${m(e.yi)}</div></div>
1623
+ <div class="mp-al-col"><em>忌</em><div class="mp-al-chips">${m(e.ji)}</div></div>
1575
1624
  </div>
1576
- <div class="mp-al-grid">${i("二十八宿",u)}${i("日柱纳音",m)}${i("胎神",e.taiShen)}${i("冲煞",r)}</div>
1577
- <div class="mp-al-row"><em>吉神方位</em><div class="mp-al-chips">${f("喜神",x.xiShen)}${f("财神",x.caiShen)}${f("福神",x.fuShen)}${f("阳贵",x.yangGui)}${f("阴贵",x.yinGui)}</div></div>
1578
- <div class="mp-al-row"><em>时刻吉凶</em><div class="mp-al-hours">${b}</div></div>
1579
- <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${S.liuhe?`<span class="mp-al-chip">六合·${t(S.liuhe)}</span>`:""}${g(S.sanhe||[])}</div></div>
1625
+ <div class="mp-al-grid">${i("二十八宿",g)}${i("日柱纳音",u)}${i("胎神",e.taiShen)}${i("冲煞",l)}</div>
1626
+ <div class="mp-al-row"><em>吉神方位</em><div class="mp-al-chips">${x("喜神",b.xiShen)}${x("财神",b.caiShen)}${x("福神",b.fuShen)}${x("阳贵",b.yangGui)}${x("阴贵",b.yinGui)}</div></div>
1627
+ <div class="mp-al-row"><em>时刻吉凶</em><div class="mp-al-hours">${f}</div></div>
1628
+ <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${z.liuhe?`<span class="mp-al-chip">六合·${t(z.liuhe)}</span>`:""}${m(z.sanhe||[])}</div></div>
1580
1629
  ${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${t(e.dailyHexagram.name)}</b> ${t(e.dailyHexagram.meaning||"")}</div>`:""}
1581
1630
  <div class="mp-al-note">${t(e.meta&&e.meta.scope||"")}</div>
1582
- </section>`},l.mbtiHTML=function(e){if(!e)return"";if(e.needAnswers&&Array.isArray(e.questions)){const i=e.questions.map(u=>`<li>${t(u.text)}</li>`).join("");return`<section class="mp-mb-paper" aria-label="十六型人格问卷">
1631
+ </section>`},r.mbtiHTML=function(e){if(!e)return"";if(e.needAnswers&&Array.isArray(e.questions)){const i=e.questions.map(g=>`<li>${t(g.text)}</li>`).join("");return`<section class="mp-mb-paper" aria-label="十六型人格问卷">
1583
1632
  <div class="mp-mb-h">
1584
1633
  <span class="mp-mb-meta"><b>十六型人格问卷</b><i>${e.total} 题 · 每题 1 完全不像 / 5 很像我</i></span>
1585
1634
  <span class="mp-mb-count">填完分数再看结果</span>
1586
1635
  </div>
1587
1636
  <ol>${i}</ol>
1588
1637
  <div class="mp-mb-note">${t(e.note||"")}</div>
1589
- </section>`}const n=(e.dims||[]).map(i=>{const u=Math.round((i.pct||0)*100),m=i.picked===i.left,r=Math.max(2,u),b=m?i.leftSay:i.rightSay;return`<div class="mp-mb-dim">
1590
- <div class="mp-mb-dh"><b class="${m?"on":""}">${t(i.left)}</b><em>${t(i.name)}</em><b class="${m?"":"on"}">${t(i.right)}</b></div>
1591
- <div class="mp-mb-bar ${m?"l":"r"}"><em style="width:${r}%"></em></div>
1592
- <div class="mp-mb-df">取 ${t(i.picked)} · ${t(i.strength)} ${u}%</div>
1593
- <div class="mp-mb-ds">${t(b)}</div>
1594
- </div>`}).join(""),p=e.profile||{},g=(p.stack||[]).map((i,u)=>`<span class="${u===0?"lead":""}"><b>${t(i.code)}</b>${t(i.say)}</span>`).join("");return`<section class="mp-mb" aria-label="十六型人格结果">
1638
+ </section>`}const n=(e.dims||[]).map(i=>{const g=Math.round((i.pct||0)*100),u=i.picked===i.left,l=Math.max(2,g),f=u?i.leftSay:i.rightSay;return`<div class="mp-mb-dim">
1639
+ <div class="mp-mb-dh"><b class="${u?"on":""}">${t(i.left)}</b><em>${t(i.name)}</em><b class="${u?"":"on"}">${t(i.right)}</b></div>
1640
+ <div class="mp-mb-bar ${u?"l":"r"}"><em style="width:${l}%"></em></div>
1641
+ <div class="mp-mb-df">取 ${t(i.picked)} · ${t(i.strength)} ${g}%</div>
1642
+ <div class="mp-mb-ds">${t(f)}</div>
1643
+ </div>`}).join(""),p=e.profile||{},m=(p.stack||[]).map((i,g)=>`<span class="${g===0?"lead":""}"><b>${t(i.code)}</b>${t(i.say)}</span>`).join("");return`<section class="mp-mb" aria-label="十六型人格结果">
1595
1644
  <div class="mp-mb-h">
1596
1645
  <span class="mp-mb-code">${t(e.type||"")}</span>
1597
1646
  <span class="mp-mb-meta"><b>${t(p.title||"")}</b><i>${t(p.keywords||"")}</i></span>
@@ -1604,17 +1653,17 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1604
1653
  <div><b>优势</b>${(p.strengths||[]).map(i=>t(i)).join(";")}</div>
1605
1654
  <div><b>留意</b>${(p.blindspots||[]).map(i=>t(i)).join(";")}</div>
1606
1655
  </div>
1607
- ${g?`<div class="mp-mb-sec"><em>认知功能</em>主导 ${t((p.stack[0]||{}).code||"")} → 依次展开</div><div class="mp-mb-fn">${g}</div>`:""}
1656
+ ${m?`<div class="mp-mb-sec"><em>认知功能</em>主导 ${t((p.stack[0]||{}).code||"")} → 依次展开</div><div class="mp-mb-fn">${m}</div>`:""}
1608
1657
  <div class="mp-mb-sec"><em>工作</em>${t(p.work||"")}</div>
1609
1658
  <div class="mp-mb-sec"><em>关系</em>${t(p.love||"")}</div>
1610
1659
  <div class="mp-mb-sec"><em>学习</em>${t(p.study||"")}</div>
1611
1660
  <div class="mp-mb-sec"><em>课题</em>${t(p.growth||"")}</div>
1612
1661
  </div>
1613
1662
  <div class="mp-mb-note">${t(e.note||"")}</div>
1614
- </section>`};const Ve=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],na={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},ya=["生气","延年","天医","伏位"],de=(e,n)=>`<span class="mp-fs-chip${n?" "+n:""}">${t(e)}</span>`,Ge=(e,n,p)=>`<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(na[e]||"")}</span>${n||""}</div>`+(p||"")+"</div>",Ae=e=>e.length?`<dl class="mp-fs-facts">${e.map(([n,p])=>`<div class="mp-fs-row"><dt>${t(n)}</dt><dd>${t(p)}</dd></div>`).join("")}</dl>`:"",We=(e,n,p,g,i,u)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${n?`<span class="mp-fs-sub">${t(n)}</span>`:""}</div>`+(p.length?`<div class="mp-fs-chips">${p.join("")}</div>`:"")+g+i+u.filter(Boolean).map(m=>`<div class="mp-fs-note">${t(m)}</div>`).join("")+"</section>",Ne=(e,n)=>`<div class="mp-fs-grid" role="group" aria-label="${t(n)}">`+Ve.map(p=>p.map(g=>{const i=e.find(r=>r&&r.palace===g);if(!i)return Ge(g,"","");const u=ya.includes(i.star),m=`<span class="mp-fs-star"${i.role?` title="${t(i.role)}"`:""}>${t(i.star)}<em class="${u?"ok":"bad"}">${u?"吉":"凶"}</em></span>`;return Ge(g,m,"")}).join("")).join("")+"</div>";function sa(e,n){const p=n.period,g={};for(const w of e.palaces||[])g[w.palace]=w;const i=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(p)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+Ve.map(w=>w.map(z=>{const N=g[z];if(!N)return Ge(z,"","");const M=[["运",N.yun],["山",N.shan],["向",N.xiang]].map(([D,P])=>`<span class="${P===p?"on":""}" title="${t(D)}星 ${t(P)}">${t(P)}</span>`).join("");return Ge(z,"",`<div class="mp-fs-nums">${M}</div>`)}).join("")).join("")+"</div>",u=e.wangShanWangXiang||{},m=n.jianXiang||{},r=e.timeFlying||null,b=[de(m.active?`兼${m.jian} ${m.offset}° · 替卦`:"正向 · 下卦",m.active?"ok":""),de(`山盘 ${n.shanCenter.star}${n.shanCenter.name} · ${n.shanCenter.fly}`),de(`向盘 ${n.xiangCenter.star}${n.xiangCenter.name} · ${n.xiangCenter.fly}`),de(u.byChart?"盘面:到山到向":"盘面:未到山到向",u.byChart?"ok":""),de(u.byTable===null?"表法:替卦不套":u.byTable?"表法:在列":"表法:未列",u.byTable?"ok":"")],x=(w,z)=>`${z} ${w.star}${w.name}(${w.fly},${w.basis}${w.mode==="替卦"?`;原运星 ${w.original}${w.replaced?",已替":",用替而未替"}`:""})`,f=r?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([w])=>r[w]).map(([w,z])=>`${z}${r[w].centerName}(${r[w].fly})`).join(" "):"",S=Ae([...m.active?[["替卦",`${m.note}${u.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${x(n.shanCenter,"山盘")};${x(n.xiangCenter,"向盘")}`],["当运",`山星${p}落 ${e.dangYun.shan.text};向星${p}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${u.note||""}${(u.table||[]).length?` 本运所列:${u.table.join("、")}。`:" 本运表法无局。"}`],...f?[["年月日时",`${f}${r.meta&&r.meta.note?` ${r.meta.note}`:""}`]]:[]]);return We(m.active?"玄空替卦":"玄空下卦",`${n.periodLabel} · 坐${n.sitting} · 向${n.facing}`,b,i,S,[n.note,e.disclaimer])}function $a(e,n){const p=e.mingGua||{},g=Ne([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),i=[de(p.compatible||"—"),de(`${n.gender}命 · ${n.guaYear} 年立春界`)],u=[];if(e.yearlyFlying){const m=e.yearlyFlying;u.push(["年紫白",`${m.centerName}入中;${m.palaces.filter(r=>r.palace!=="中").map(r=>`${r.palace}${r.name}`).join("、")}`])}return We("八宅命卦",`${p.num}${p.gua}(${p.group})· ${p.direction}`,i,g,Ae(u),[n.note,e.disclaimer])}function Fa(e,n){const p=e.layout||{},g=Ne(e.houseStars||[],"宅卦八向(吉凶)"),i=[de(`${n.houseGua}宅 · ${n.houseGroup}`),de(`坐${n.sitting}`),de(`向${n.facing}`)],u=[["门",p.door],["灶",p.stove],["床",p.bed],["厕",p.toilet]];return e.mingMatch&&u.push(["命宅配",e.mingMatch.text]),We("门主灶",`${n.houseGua}宅 · 坐${n.sitting} · 向${n.facing}`,i,g,Ae(u),[n.birthNote,e.disclaimer])}l.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return l.quickHTML(e);const n=e.meta||{};return n.action==="xuankong"?sa(e,n):n.action==="advise"?Fa(e,n):$a(e,n)},l.quickHTML=function(e){if(!e)return"";const p={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",g=e.summary||"",i=g?`<pre class="mp-quick-pre">${t(g)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(p)}结果">
1663
+ </section>`};const Ue=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],sa={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},$a=["生气","延年","天医","伏位"],me=(e,n)=>`<span class="mp-fs-chip${n?" "+n:""}">${t(e)}</span>`,Ze=(e,n,p)=>`<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(sa[e]||"")}</span>${n||""}</div>`+(p||"")+"</div>",Fe=e=>e.length?`<dl class="mp-fs-facts">${e.map(([n,p])=>`<div class="mp-fs-row"><dt>${t(n)}</dt><dd>${t(p)}</dd></div>`).join("")}</dl>`:"",Xe=(e,n,p,m,i,g)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${n?`<span class="mp-fs-sub">${t(n)}</span>`:""}</div>`+(p.length?`<div class="mp-fs-chips">${p.join("")}</div>`:"")+m+i+g.filter(Boolean).map(u=>`<div class="mp-fs-note">${t(u)}</div>`).join("")+"</section>",Se=(e,n)=>`<div class="mp-fs-grid" role="group" aria-label="${t(n)}">`+Ue.map(p=>p.map(m=>{const i=e.find(l=>l&&l.palace===m);if(!i)return Ze(m,"","");const g=$a.includes(i.star),u=`<span class="mp-fs-star"${i.role?` title="${t(i.role)}"`:""}>${t(i.star)}<em class="${g?"ok":"bad"}">${g?"吉":"凶"}</em></span>`;return Ze(m,u,"")}).join("")).join("")+"</div>";function oa(e,n){const p=n.period,m={};for(const w of e.palaces||[])m[w.palace]=w;const i=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(p)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+Ue.map(w=>w.map(k=>{const q=m[k];if(!q)return Ze(k,"","");const N=[["运",q.yun],["山",q.shan],["向",q.xiang]].map(([D,E])=>`<span class="${E===p?"on":""}" title="${t(D)}星 ${t(E)}">${t(E)}</span>`).join("");return Ze(k,"",`<div class="mp-fs-nums">${N}</div>`)}).join("")).join("")+"</div>",g=e.wangShanWangXiang||{},u=n.jianXiang||{},l=e.timeFlying||null,f=[me(u.active?`兼${u.jian} ${u.offset}° · 替卦`:"正向 · 下卦",u.active?"ok":""),me(`山盘 ${n.shanCenter.star}${n.shanCenter.name} · ${n.shanCenter.fly}`),me(`向盘 ${n.xiangCenter.star}${n.xiangCenter.name} · ${n.xiangCenter.fly}`),me(g.byChart?"盘面:到山到向":"盘面:未到山到向",g.byChart?"ok":""),me(g.byTable===null?"表法:替卦不套":g.byTable?"表法:在列":"表法:未列",g.byTable?"ok":"")],b=(w,k)=>`${k} ${w.star}${w.name}(${w.fly},${w.basis}${w.mode==="替卦"?`;原运星 ${w.original}${w.replaced?",已替":",用替而未替"}`:""})`,x=l?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([w])=>l[w]).map(([w,k])=>`${k}${l[w].centerName}(${l[w].fly})`).join(" "):"",z=Fe([...u.active?[["替卦",`${u.note}${g.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${b(n.shanCenter,"山盘")};${b(n.xiangCenter,"向盘")}`],["当运",`山星${p}落 ${e.dangYun.shan.text};向星${p}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${g.note||""}${(g.table||[]).length?` 本运所列:${g.table.join("、")}。`:" 本运表法无局。"}`],...x?[["年月日时",`${x}${l.meta&&l.meta.note?` ${l.meta.note}`:""}`]]:[]]);return Xe(u.active?"玄空替卦":"玄空下卦",`${n.periodLabel} · 坐${n.sitting} · 向${n.facing}`,f,i,z,[n.note,e.disclaimer])}function wa(e,n){const p=e.mingGua||{},m=Se([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),i=[me(p.compatible||"—"),me(`${n.gender}命 · ${n.guaYear} 年立春界`)],g=[];if(e.yearlyFlying){const u=e.yearlyFlying;g.push(["年紫白",`${u.centerName}入中;${u.palaces.filter(l=>l.palace!=="中").map(l=>`${l.palace}${l.name}`).join("、")}`])}return Xe("八宅命卦",`${p.num}${p.gua}(${p.group})· ${p.direction}`,i,m,Fe(g),[n.note,e.disclaimer])}function _a(e,n){const p=e.layout||{},m=Se(e.houseStars||[],"宅卦八向(吉凶)"),i=[me(`${n.houseGua}宅 · ${n.houseGroup}`),me(`坐${n.sitting}`),me(`向${n.facing}`)],g=[["门",p.door],["灶",p.stove],["床",p.bed],["厕",p.toilet]];return e.mingMatch&&g.push(["命宅配",e.mingMatch.text]),Xe("门主灶",`${n.houseGua}宅 · 坐${n.sitting} · 向${n.facing}`,i,m,Fe(g),[n.birthNote,e.disclaimer])}r.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return r.quickHTML(e);const n=e.meta||{};return n.action==="xuankong"?oa(e,n):n.action==="advise"?_a(e,n):wa(e,n)},r.quickHTML=function(e){if(!e)return"";const p={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",m=e.summary||"",i=m?`<pre class="mp-quick-pre">${t(m)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(p)}结果">
1615
1664
  <div class="mp-quick-h"><b>${t(p)}</b></div>
1616
1665
  ${i}
1617
- </section>`},l.summaryCardPNG=function(e,n){try{if(typeof document>"u"||!document.createElement)return"";const p=n&&n.outline||[],g=(n&&n.tables||[]).filter(A=>Array.isArray(A.rows)&&A.rows.length),i=n&&n.systemLabel||e&&e.system||"命理报告",u=900,m=44,r=26,b=(A,I)=>`${I?"600 ":""}${A}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,x=document.createElement("canvas"),f=x.getContext?x.getContext("2d"):null;if(!f)return"";const S=(A,I)=>{const L=[];let C="";for(const _ of String(A)){const ae=C+_;f.measureText(ae).width>I&&C?(L.push(C),C=_):C=ae}return C&&L.push(C),L.length?L:[""]};f.font=b(15);let w=0;const z=p.map(A=>{const I=S(A.text,u-m*2-70);return w+=Math.min(I.length,2)*r+10,{o:A,lines:I.slice(0,2)}}),N=g[0]||null,M=N?N.rows.slice(0,6):[],D=N?54+M.length*34:0,P=150+w+(z.length?34:0)+D+120;x.width=u,x.height=P,f.fillStyle="rgb(255,255,255)",f.fillRect(0,0,u,P),f.fillStyle="rgb(31,111,63)",f.fillRect(0,0,u,8);let d=52;f.fillStyle="rgb(27,27,27)",f.font=b(28,!0),f.fillText(`${i} · 摘要`,m,d),d+=30,f.fillStyle="rgb(111,106,96)",f.font=b(14);const y=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(f.fillText(y,m,d),d+=34,z.length){f.fillStyle="rgb(31,111,63)",f.font=b(16,!0),f.fillText("一页读懂",m,d),d+=26;for(const{o:A,lines:I}of z)f.fillStyle="rgb(138,131,120)",f.font=b(14,!0),f.fillText(A.label,m,d),f.fillStyle="rgb(63,58,51)",f.font=b(15),I.forEach((L,C)=>f.fillText(L,m+70,d+C*r)),d+=I.length*r+10;d+=8}if(N){f.fillStyle="rgb(31,111,63)",f.font=b(16,!0),f.fillText(N.title,m,d),d+=24,f.fillStyle="rgb(138,131,120)",f.font=b(13),f.fillText(N.columns.join(" · "),m,d),d+=8,f.strokeStyle="rgb(229,225,216)",f.beginPath(),f.moveTo(m,d),f.lineTo(u-m,d),f.stroke(),d+=22,f.fillStyle="rgb(63,58,51)",f.font=b(14);for(const A of M){const I=A.filter(Boolean).join(" · "),L=S(I,u-m*2)[0];f.fillText(L,m,d),d+=34}}return d=P-62,f.strokeStyle="rgb(229,225,216)",f.beginPath(),f.moveTo(m,d-18),f.lineTo(u-m,d-18),f.stroke(),f.fillStyle="rgb(138,131,120)",f.font=b(12),f.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",m,d+6),f.fillText("dsh-metaphysics · 本机计算,未上传任何数据",m,d+26),x.toDataURL?x.toDataURL("image/png"):""}catch{return""}}})();const Ya="dsh-metaphysics/history-v1";function At(){try{const o=window.localStorage&&window.localStorage.getItem(Ya),l=o?JSON.parse(o):[];return Array.isArray(l)?l.slice(0,20):[]}catch{return[]}}function Ka(o){try{window.localStorage&&window.localStorage.setItem(Ya,JSON.stringify(o.slice(0,20)))}catch{}}const Ht=(o,l)=>o.kind===l.kind&&o.date===l.date&&o.time===l.time&&o.gender===l.gender&&o.address===l.address&&o.lines===l.lines&&o.question===l.question&&o.mhMode===l.mhMode&&o.upper===l.upper&&o.lower===l.lower;function Ft(o,l){return o==="bazi"?Object.values(l.pillars||{}).map(F=>F.ganzhi).join(" "):o==="ziwei"?`${l.soul?l.soul.branch:""}宫 ${l.bureau?l.bureau.name:""} ${l.lunar?l.lunar.year+"年":""}`.trim():o==="liuyao"?l.ben&&l.ben.name?l.ben.name:"":o==="meihua"?l.ben&&l.ben.name?`${l.ben.name} 动${l.moving}`:"":o==="daliuren"?`${l.dayGanZhi||""} ${l.geJu?l.geJu.name:""}`:""}const K=window.__PP,Va=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,_t=`
1666
+ </section>`},r.summaryCardPNG=function(e,n){try{if(typeof document>"u"||!document.createElement)return"";const p=n&&n.outline||[],m=(n&&n.tables||[]).filter(H=>Array.isArray(H.rows)&&H.rows.length),i=n&&n.systemLabel||e&&e.system||"命理报告",g=900,u=44,l=26,f=(H,I)=>`${I?"600 ":""}${H}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,b=document.createElement("canvas"),x=b.getContext?b.getContext("2d"):null;if(!x)return"";const z=(H,I)=>{const T=[];let M="";for(const R of String(H)){const Z=M+R;x.measureText(Z).width>I&&M?(T.push(M),M=R):M=Z}return M&&T.push(M),T.length?T:[""]};x.font=f(15);let w=0;const k=p.map(H=>{const I=z(H.text,g-u*2-70);return w+=Math.min(I.length,2)*l+10,{o:H,lines:I.slice(0,2)}}),q=m[0]||null,N=q?q.rows.slice(0,6):[],D=q?54+N.length*34:0,E=150+w+(k.length?34:0)+D+120;b.width=g,b.height=E,x.fillStyle="rgb(255,255,255)",x.fillRect(0,0,g,E),x.fillStyle="rgb(31,111,63)",x.fillRect(0,0,g,8);let c=52;x.fillStyle="rgb(27,27,27)",x.font=f(28,!0),x.fillText(`${i} · 摘要`,u,c),c+=30,x.fillStyle="rgb(111,106,96)",x.font=f(14);const v=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(x.fillText(v,u,c),c+=34,k.length){x.fillStyle="rgb(31,111,63)",x.font=f(16,!0),x.fillText("一页读懂",u,c),c+=26;for(const{o:H,lines:I}of k)x.fillStyle="rgb(138,131,120)",x.font=f(14,!0),x.fillText(H.label,u,c),x.fillStyle="rgb(63,58,51)",x.font=f(15),I.forEach((T,M)=>x.fillText(T,u+70,c+M*l)),c+=I.length*l+10;c+=8}if(q){x.fillStyle="rgb(31,111,63)",x.font=f(16,!0),x.fillText(q.title,u,c),c+=24,x.fillStyle="rgb(138,131,120)",x.font=f(13),x.fillText(q.columns.join(" · "),u,c),c+=8,x.strokeStyle="rgb(229,225,216)",x.beginPath(),x.moveTo(u,c),x.lineTo(g-u,c),x.stroke(),c+=22,x.fillStyle="rgb(63,58,51)",x.font=f(14);for(const H of N){const I=H.filter(Boolean).join(" · "),T=z(I,g-u*2)[0];x.fillText(T,u,c),c+=34}}return c=E-62,x.strokeStyle="rgb(229,225,216)",x.beginPath(),x.moveTo(u,c-18),x.lineTo(g-u,c-18),x.stroke(),x.fillStyle="rgb(138,131,120)",x.font=f(12),x.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",u,c+6),x.fillText("dsh-metaphysics · 本机计算,未上传任何数据",u,c+26),b.toDataURL?b.toDataURL("image/png"):""}catch{return""}}})();const Va="dsh-metaphysics/history-v1";function Ht(){try{const o=window.localStorage&&window.localStorage.getItem(Va),r=o?JSON.parse(o):[];return Array.isArray(r)?r.slice(0,20):[]}catch{return[]}}function Wa(o){try{window.localStorage&&window.localStorage.setItem(Va,JSON.stringify(o.slice(0,20)))}catch{}}const Ft=(o,r)=>o.kind===r.kind&&o.date===r.date&&o.time===r.time&&o.gender===r.gender&&o.address===r.address&&o.lines===r.lines&&o.question===r.question&&o.mhMode===r.mhMode&&o.upper===r.upper&&o.lower===r.lower;function _t(o,r){return o==="bazi"?Object.values(r.pillars||{}).map(F=>F.ganzhi).join(" "):o==="ziwei"?`${r.soul?r.soul.branch:""}宫 ${r.bureau?r.bureau.name:""} ${r.lunar?r.lunar.year+"年":""}`.trim():o==="liuyao"?r.ben&&r.ben.name?r.ben.name:"":o==="meihua"?r.ben&&r.ben.name?`${r.ben.name} 动${r.moving}`:"":o==="daliuren"?`${r.dayGanZhi||""} ${r.geJu?r.geJu.name:""}`:""}const K=window.__PP,Ua=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,Et=`
1618
1667
  .mp-wrap{height:100%;width:100%;box-sizing:border-box;overflow:auto;padding:20px 24px 40px;color:var(--dsw-alias-label-primary);font-size:14px;container-type:inline-size}
1619
1668
  /* 内容统一收在同一列居中,避免宽屏下输入框拉成一条 */
1620
1669
  .mp-wrap>*{max-width:940px;margin-left:auto;margin-right:auto}
@@ -1824,8 +1873,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.56.0",factory(ra){
1824
1873
  @media (prefers-reduced-motion:reduce){
1825
1874
  *,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important}
1826
1875
  }
1827
- `,{useState:T,useEffect:aa}=ea,la=4,Le=12;let da=null;function ca(){if(da)return da;let o=null;try{o=Z.compute({system:"mbti"})}catch{o=null}const l=o&&o.questions||[];return l.length?(da={total:o&&o.total||l.length,questions:l,scale:o&&o.scale||{}},da):{total:0,questions:[],scale:{}}}function Et(o){const{answers:l,page:F,onPick:V,onPage:W,onSubmit:ne,onClear:te}=o,se=ca(),t=Math.max(1,Math.ceil(se.total/la)),O=F*la,me=se.questions.slice(O,O+la),oe=l.filter(we=>we!=null).length,ue=se.total?Math.round(oe/se.total*100):0,Re=F>=t-1,Ie=oe>=Le;return s("div",{className:"mp-quiz"},s("div",{className:"mp-quiz-top"},s("div",{className:"mp-quiz-bar","aria-hidden":"true"},s("i",{style:{width:ue+"%"}})),s("span",{className:"mp-quiz-count"},`第 ${F+1} / ${t} 页 · 已答 ${oe} / ${se.total}`)),s("div",{className:"mp-quiz-list"},me.map((we,le)=>{const Q=O+le;return s("div",{key:we.id||Q,className:"mp-quiz-q"},s("div",{className:"mp-quiz-qt"},s("b",null,String(Q+1).padStart(2,"0")),s("span",null,we.text)),s("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Q+1} 题`},[1,2,3,4,5].map(xe=>s("label",{key:xe,className:"mp-quiz-o"+(l[Q]===xe?" on":"")},s("input",{type:"radio",name:`mpmbq${Q}`,value:String(xe),checked:l[Q]===xe,onChange:()=>V(Q,xe)}),s("b",null,String(xe)),s("span",null,se.scale[xe]||"")))))})),s("div",{className:"mp-quiz-nav"},s("button",{className:"mp-quiz-btn",disabled:F<=0,onClick:()=>W(-1)},"上一页"),Re?null:s("button",{className:"mp-quiz-btn",onClick:()=>W(1)},"下一页"),s("button",{className:"mp-quiz-btn primary",disabled:!Ie,onClick:ne},"看结果"),s("button",{className:"mp-quiz-btn",onClick:te},"清空"),s("span",{className:"mp-quiz-hint"},Ie?`已够 ${Le} 题,可以看结果;答完 ${se.total} 题会更准。`:`答满 ${Le} 题可先看结果(还差 ${Le-oe} 题)。`)))}class Pt extends(ea.Component||Object){constructor(l){super(l),this.state={err:null}}static getDerivedStateFromError(l){return{err:l}}componentDidCatch(l,F){console.error("[metaphysics] 面板渲染异常",l,F)}render(){if(!this.state.err)return this.props.children;const l=this.state.err,F=String(l&&l.stack||"").split(`
1876
+ `,{useState:L,useEffect:ta}=aa,da=4,Ae=12;let ca=null;function ma(){if(ca)return ca;let o=null;try{o=B.compute({system:"mbti"})}catch{o=null}const r=o&&o.questions||[];return r.length?(ca={total:o&&o.total||r.length,questions:r,scale:o&&o.scale||{}},ca):{total:0,questions:[],scale:{}}}function Pt(o){const{answers:r,page:F,onPick:U,onPage:J,onSubmit:oe,onClear:ne}=o,pe=ma(),t=Math.max(1,Math.ceil(pe.total/da)),P=F*da,ge=pe.questions.slice(P,P+da),re=r.filter(ke=>ke!=null).length,fe=pe.total?Math.round(re/pe.total*100):0,De=F>=t-1,Ge=re>=Ae;return s("div",{className:"mp-quiz"},s("div",{className:"mp-quiz-top"},s("div",{className:"mp-quiz-bar","aria-hidden":"true"},s("i",{style:{width:fe+"%"}})),s("span",{className:"mp-quiz-count"},`第 ${F+1} / ${t} 页 · 已答 ${re} / ${pe.total}`)),s("div",{className:"mp-quiz-list"},ge.map((ke,ce)=>{const ae=P+ce;return s("div",{key:ke.id||ae,className:"mp-quiz-q"},s("div",{className:"mp-quiz-qt"},s("b",null,String(ae+1).padStart(2,"0")),s("span",null,ke.text)),s("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${ae+1} 题`},[1,2,3,4,5].map(be=>s("label",{key:be,className:"mp-quiz-o"+(r[ae]===be?" on":"")},s("input",{type:"radio",name:`mpmbq${ae}`,value:String(be),checked:r[ae]===be,onChange:()=>U(ae,be)}),s("b",null,String(be)),s("span",null,pe.scale[be]||"")))))})),s("div",{className:"mp-quiz-nav"},s("button",{className:"mp-quiz-btn",disabled:F<=0,onClick:()=>J(-1)},"上一页"),De?null:s("button",{className:"mp-quiz-btn",onClick:()=>J(1)},"下一页"),s("button",{className:"mp-quiz-btn primary",disabled:!Ge,onClick:oe},"看结果"),s("button",{className:"mp-quiz-btn",onClick:ne},"清空"),s("span",{className:"mp-quiz-hint"},Ge?`已够 ${Ae} 题,可以看结果;答完 ${pe.total} 题会更准。`:`答满 ${Ae} 题可先看结果(还差 ${Ae-re} 题)。`)))}class Rt extends(aa.Component||Object){constructor(r){super(r),this.state={err:null}}static getDerivedStateFromError(r){return{err:r}}componentDidCatch(r,F){console.error("[metaphysics] 面板渲染异常",r,F)}render(){if(!this.state.err)return this.props.children;const r=this.state.err,F=String(r&&r.stack||"").split(`
1828
1877
  `).slice(0,14).join(`
1829
- `);return s("div",{className:"mp-wrap"},s("div",{className:"mp-panel"},s("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),s("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(l&&l.message||l)+`
1878
+ `);return s("div",{className:"mp-wrap"},s("div",{className:"mp-panel"},s("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),s("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(r&&r.message||r)+`
1830
1879
 
1831
- `+F),s("div",{className:"mp-lbl"},"环境:__PP "+typeof K+" · Engine "+typeof window.Engine+" · React "+typeof ea+" · 版本 "+(typeof K=="object"&&K&&(window.__MP_VER||"?")))))}}function Ot(o){const l=o&&o.size?o.size:20,F=o&&o.active;return s("svg",{width:l,height:l,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:F?1:.72}},s("circle",{cx:12,cy:12,r:8.2}),s("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),s("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),s("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 Ye(o){return String(o).padStart(2,"0")}const La=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name"],Rt=Array.isArray(window.__MPGroups)?window.__MPGroups:[],Wa="mp.recent.tabs",Ua="mp.first.view",Xa=3;function Ja(o){try{return JSON.parse(window.localStorage.getItem(o)||"null")}catch{return null}}function Qa(o,l){try{window.localStorage.setItem(o,JSON.stringify(l))}catch{}}function It(o){const l=new Date(o);if(Number.isNaN(l.getTime()))return"";const F=W=>new Date(W.getFullYear(),W.getMonth(),W.getDate()).getTime(),V=Math.round((F(new Date)-F(l))/864e5);return V<=0?"今天":V===1?"昨天":`${Ye(l.getMonth()+1)}-${Ye(l.getDate())}`}function Ta(){const o=new Date;return{date:`${o.getFullYear()}-${Ye(o.getMonth()+1)}-${Ye(o.getDate())}`,time:`${Ye(o.getHours())}:${Ye(o.getMinutes())}`}}const Dt={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"},et={date:"1990-05-12",time:"14:30"},Aa=o=>Dt[o]||"none",at=window.__MPCore||{},Te=at.needAsk||(o=>!1),J={ref:null,seats:[],keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Oe={r:null,q:"",it:null};function tt(){const o=[];return o.push("inputActions "+(J.ref?"已拿到":"未拿到")),o.push("渲染 "+J.mounted+" 次"),o.push("注册 "+J.regs+" 次"),o.push("inject "+(J.injectType||"?")),o.push("槽位 "+(J.spec||"?")),J.errs.length&&o.push("错误:"+J.errs.join(" / ")),"桥自检:"+o.join(";")}function it(o){if(J.errs.length>=3)return;const l=o&&o.message?String(o.message):String(o);J.errs.push(l.slice(0,90))}function Gt(o){if(!o)return null;const l=o.inputActions;if(l&&typeof l.setDraft=="function"&&typeof l.submit=="function")return l;const F=o.actions&&o.actions.input;return F&&typeof F.setDraft=="function"&&typeof F.submit=="function"?F:null}function nt(o,l){const F=Gt(o);return aa(()=>{if(J.seats.indexOf(l)<0&&J.seats.push(l),J.keys=o?Object.keys(o).join(","):"",F){J.ref=F;try{window.__MPComposer=F}catch{}}return()=>{J.ref===F&&(J.ref=null)}},[F,l]),F}function Bt(){const o=Oe.r;if(!o)return"";try{const l=Z.askPrompt?Z.askPrompt(o,{question:Oe.q,interpret:Oe.it}):null;return l&&l.text||String(o.summary||"")}catch{return String(o.summary||"")}}function st(o){return J.mounted+=1,nt(o,"input.right")?s("button",{type:"button",className:"mp-chip ok",title:Oe.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const F=Bt();F&&pt(F)}},"命理·问"):s("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function ot(o){return J.mounted+=1,nt(o,"composer.dock"),null}function pt(o){let l=J.ref;if(!l)try{l=window.__MPComposer||null}catch{l=null}return!l||typeof l.setDraft!="function"||typeof l.submit!="function"?!1:(l.setDraft(o),l.submit(),!0)}function Zt(){const[o,l]=T("ziwei"),[F,V]=T("1990-05-12"),[W,ne]=T("14:30"),[te,se]=T("female"),[t,O]=T(""),[me,oe]=T("1992-08-15"),[ue,Re]=T("10:00"),[Ie,we]=T("female"),[le,Q]=T(""),[xe,ma]=T("bazi"),[ta,Ke]=T("chaibu"),[ke,ia]=T(!0),[ve,ga]=T(!0),[ua,xa]=T("same-day"),[fa,ba]=T(!1),[qe,Ha]=T(""),[ha,De]=T(""),[va,Ve]=T(null),[na,ya]=T({}),[de,Ge]=T(null),[Ae,We]=T([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Ne,sa]=T(null),[$a,Fa]=T("开业"),[e,n]=T("30"),[p,g]=T(""),[i,u]=T("solar2lunar"),[m,r]=T(""),[b,x]=T(!1),[f,S]=T("time"),[w,z]=T(""),[N,M]=T(""),[D,P]=T(""),[d,y]=T(()=>new Array(ca().total).fill(null)),[A,I]=T(0),[L,C]=T("60"),[_,ae]=T("natal"),[X,ee]=T("9"),[ie,ze]=T("子"),[fe,Be]=T("午"),[ge,Me]=T("assess"),[Se,H]=T("李"),[c,v]=T(""),[G,U]=T("6"),[pe,je]=T(!1),[j,be]=T(""),[h,ce]=T(null);aa(()=>{h&&h.r&&(Oe.r=h.r,Oe.q=qe.trim(),Oe.it=h.it||null)},[h,qe]);const[Ue,He]=T(()=>At()),[Fe,Vt]=T(()=>Ja(Ua)==="flat"?"flat":"group"),[Wt,Ut]=T(()=>{const a=Ja(Wa);return Array.isArray(a)?a:[]}),[Xt,Jt]=T({}),[_a,rt]=T(null),[wa,Ce]=T(""),[lt,ka]=T(""),[Qt,za]=T(!1),[Ea,dt]=T("3"),[Xe,ct]=T(""),[Je,mt]=T("general"),[gt,ei]=T(null),[ai,ja]=T(!1),[_e,ut]=T("time"),[qa,xt]=T(""),[Na,ft]=T(""),[Ma,bt]=T(""),[ti,oa]=T(""),[Pa,Sa]=T({birth:null,cast:null}),ii=Pe.find(a=>a.k===o)||Pe[0],pa=o==="bazi"||o==="ziwei"||o==="hepan"||o==="chenggu"||o==="trend"||o==="fengshui"||o==="name",ye=Aa(o),ht=!(o==="meihua"&&_e==="number"),vt=o!=="tarot"&&o!=="mbti"&&ht,yt=vt&&ye!=="date",Ci=yt,$e=async(a,$,E,R)=>{const k=a||o,re=E||_e,he=$||{date:F,time:W},Ee=R&&R.gender?R.gender:te,St=R&&typeof R.address=="string"?R.address:t;ka("");try{za(!0);try{await Va(k)}catch(B){Ce(B&&B.message?B.message:String(B)),ce(null);return}finally{za(!1)}const Ze=`${he.date}T${he.time}`,q={system:k};if(q.shadow=k!=="mbti",q.trace=k==="liuyao"||k==="bazi"||k==="ziwei"||k==="qimen"||k==="daliuren",k!=="tarot"&&(q.datetime=Ze),k==="bazi"||k==="ziwei"||k==="hepan"){if(q.gender=Ee,q.trueSolar=ke,St.trim()){q.address=St.trim();try{const B=await Z.geocodeAddress(q.address,{online:pe});B&&typeof B.lon=="number"&&(q.longitude=B.lon,q.geo=B)}catch(B){console.error("[metaphysics] 地址解析失败,退回内置表",B)}}k!=="hepan"&&(q.cross=fa),q.lateZi=ve}if(k==="liuyao"){const B=at.parseLines(j);B.lines?q.lines=B.lines:B.warning&&ka(B.warning)}if(k==="qimen"&&(q.juMethod=ta,q.lateZiHourMode=ua,q.direction=Je),k==="bazi"&&(q.verifyPast=6),k==="zeri"&&(q.startDate=he.date,q.task=$a,q.days=Number(e)||30,p&&(q.shengXiao=p)),k==="xiaoliuren")if(q.mode=f,f==="number")q.num1=Number(w)||void 0,q.num2=Number(N)||void 0,q.num3=Number(D)||void 0;else{q.date=he.date;const B=Number(String(he.time).split(":")[0]);q.hour=Number.isFinite(B)?B:12}if(k==="mbti"){delete q.datetime;const B=d.slice();for(;B.length&&B[B.length-1]==null;)B.pop();B.length&&(q.answers=B)}if(k==="trend"&&(q.gender=Ee,q.toAge=Number(L)||60,q.trueSolar=ke,q.lateZi=ve),k==="fengshui"&&(q.action=_,_==="natal"?q.gender=Ee:(q.sitting=ie,q.facing=fe,delete q.datetime,_==="xuankong"&&(q.period=Number(X)||9))),k==="name"&&(q.action=ge,q.surname=Se.trim(),ge==="generate"?(q.gender=Ee,q.limit=Number(G)||6,q.trueSolar=ke,q.lateZi=ve):(q.givenName=c.trim(),(!he.date||!he.time)&&delete q.datetime)),k==="convert")if(q.system="convert",i==="lunar2solar"){const B=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(m).trim());if(!B){Ce("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}q.mode="lunar2solar",q.lunarYear=Number(B[1]),q.lunarMonth=Number(B[2]),q.lunarDay=Number(B[3]),q.isLeapMonth=b,delete q.datetime}else q.mode="solar2lunar";if(k==="tarot"&&(q.count=Number(Ea)),k==="hepan"&&(q.chart=xe,q.partner={datetime:`${me}T${ue}`,gender:Ie,address:le.trim()||void 0,trueSolar:ke}),Te(k)){if(!Xe.trim()){Ce("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),ja(!0),ce(null);return}ja(!1),q.question=Xe.trim(),k==="liuyao"&&(q.direction=Je)}if(k==="meihua"&&(q.mode=re,re==="number")){if(qa.trim()===""||Na.trim()===""){Ce("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),ce(null);return}if(q.upper=Number(qa),q.lower=Number(Na),!Number.isFinite(q.upper)||!Number.isFinite(q.lower)){Ce("两个数都要是数字,例如 17 和 29。"),ce(null);return}Ma!==""&&(q.changing=Number(Ma))}const Qe=Z.compute(q);let Ra=null;try{Ra=K.shadowTrack?K.shadowTrack(Qe):null}catch{Ra=null}let Ia=null;if(k==="bazi")try{Ia=Z.compute({system:"trend",datetime:Ze,gender:Ee,toAge:100,trueSolar:ke,lateZi:ve,...q.dst!==void 0?{dst:q.dst}:{},...q.address?{address:q.address}:{},...typeof q.longitude=="number"?{longitude:q.longitude}:{},...q.geo?{geo:q.geo}:{}})}catch{Ia=null}let Da=null;if(Z.caliberCompare)try{Da=Z.caliberCompare(q)}catch{Da=null}const qi=Te(k)||k==="qimen"?{question:Te(k)?Xe.trim():"",direction:Je}:void 0,Ca=Z.interpret?Z.interpret(Qe,qi):null;Ca&&Qe.cross&&Z.crossSection&&(Ca.sections=[...Ca.sections||[],Z.crossSection(Qe.cross)]);const Ni=Aa(k)==="cast"&&(k!=="meihua"||re==="time");if(ce({kind:k,r:Qe,it:Ca,at:he,timed:Ni,trend:Ia,caliber:Da,shadowDiff:Ra}),Ve(null),Ge(null),ya({}),sa(null),Ce(""),oa(""),k!=="tarot"&&k!=="mbti"){const B={kind:k,date:F,time:W,gender:te,address:t,lines:k==="liuyao"?j:"",question:Te(k)?Xe.trim():"",direction:Je,count:Ea,mhMode:_e,upper:qa,lower:Na,changing:Ma,label:Ft(k,Qe),at:Date.now()};He(Mi=>{const Ct=[B,...Mi.filter(Si=>!Ht(Si,B))].slice(0,20);return Ka(Ct),Ct})}}catch(Ze){Ce(Ze&&Ze.message?Ze.message:String(Ze)),ce(null)}},ni=async a=>{const $=Aa(a);if(Ce(""),a==="mbti"){ka(""),za(!0);try{await Va(a)}catch(R){Ce(R&&R.message?R.message:String(R))}finally{za(!1)}l(a),d.filter(R=>R!=null).length>=Le?$e(a):ce(null);return}if(l(a),$==="none"){$e(a);return}const E=Pa[$]||($==="cast"?Ta():{date:et.date,time:et.time});V(E.date),ne(E.time),$e(a,E)},si=a=>{Pe.some($=>$.k===a)&&Ut($=>{const E=($||[]).filter(k=>k&&k.tab&&k.tab!==a),R=[{tab:a,at:Date.now()}].concat(E).slice(0,Xa);return Qa(Wa,R),R})},$t=a=>{const $=a==="flat"?"flat":"group";Vt($),Qa(Ua,$)},Oa=a=>{si(a),ni(a)},oi=a=>{V(a),ye!=="none"&&Sa($=>Object.assign({},$,{[ye]:{date:a,time:W}}))},pi=a=>{ne(a),ye!=="none"&&Sa($=>Object.assign({},$,{[ye]:{date:F,time:a}}))},Li=()=>{const a=Ta();V(a.date),ne(a.time),ye!=="none"&&Sa($=>Object.assign({},$,{[ye]:null})),$e(o,a)},wt=()=>{if(o==="mbti"){const a=d.filter($=>$!=null).length;if(a<Le){ka(`先答满 ${Le} 题再看结果(现答 ${a} 题,还差 ${Le-a} 题)。`);return}$e(o);return}if(ye!=="none"&&!Pa[ye]){const a=Ta();V(a.date),ne(a.time),$e(o,a);return}$e(o)},ri=()=>{const a={date:"1990-05-12",time:"14:30"};l("bazi"),se("male"),O("河北石家庄"),Sa($=>Object.assign({},$,{birth:a})),V(a.date),ne(a.time),$e("bazi",a,null,{gender:"male",address:"河北石家庄"})},kt=a=>{ut(a),$e(o,{date:F,time:W},a)},li=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),di=()=>gt===null?li():gt,ci=a=>{const $=a.getAttribute("data-shadow-copy")||"";if(!$)return;const E=k=>{a.textContent=k?"已复制":"复制失败",setTimeout(()=>{a.textContent="复制 ID"},1400)},R=()=>{try{const k=document.createElement("textarea");k.value=$,k.setAttribute("readonly",""),k.style.position="fixed",k.style.opacity="0",document.body.appendChild(k),k.select();const re=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(k),re}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText($).then(()=>E(!0),()=>E(R()));return}}catch{}E(R())},mi=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const $=a.querySelector("[data-trace-close]");$&&$.focus&&$.focus()},zt=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const $=document.querySelector("[data-trace-open]");$&&$.focus&&$.focus()},gi=a=>{const $=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if($){ci($);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){mi();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){zt();return}const k=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!k)return;const re=k.closest(".mp-it");if(!re)return;const he=!re.classList.contains("folded");re.classList.toggle("folded",he),k.setAttribute("aria-expanded",he?"false":"true");const Ee=k.querySelector(".mp-it-hint");Ee&&(Ee.textContent=he?"点击展开":"点击收起"),ei(he)},jt=(a,$)=>{if(!h||!(Te(o)||o==="qimen"))return;const E={question:Te(o)?($===void 0?Xe:$).trim():"",direction:a===void 0?Je:a},R=Z.interpret?Z.interpret(h.r,E):null;let k=h.r;if((o==="liuyao"||o==="qimen")&&k&&k.trace&&Z.buildTrace)try{const re=o==="liuyao"?Z.buildTrace(k,{direction:E.direction,gender:k.useGod&&k.useGod.gender||"male",refresh:!0}):Z.buildTrace(k,{direction:E.direction});re&&(k=Object.assign({},k,{trace:re}))}catch{}ce(Object.assign({},h,{r:k,it:R}))},ui=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,xi=()=>{try{const a=h&&h.r&&h.r.summary?h.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>oa("已复制"),()=>oa("复制失败"))}catch{oa("复制失败")}},qt=()=>{if(!(!h||!h.r||!qe.trim()))try{Ve(Z.followup?Z.followup(h.r,qe.trim()):null)}catch(a){Ve({question:qe.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},fi=()=>{if(!(!h||!h.r))try{const a=Z.askPrompt?Z.askPrompt(h.r,{question:qe.trim(),interpret:h.it}):null,$=a&&a.text?a.text:String(h.r.summary||"");if(pt($)){De("已发到对话窗,往下看回复。");return}const E="("+tt()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText($).then(()=>De("对话输入框还没就绪"+E+",已复制提问;粘进对话窗回车即可。"),()=>De("对话输入框还没就绪"+E+",复制也没成功;先点「复制文字结果」再贴。")):De("对话输入框还没就绪"+E+";先点「复制文字结果」再贴进对话窗。")}catch(a){De("发到对话窗失败:"+(a&&a.message?a.message:a))}},bi=()=>{if(!(!h||!h.r))try{const a=Z.renderText?Z.renderText(h.r):h.r.summary||"",$=new Blob([a],{type:"text/markdown;charset=utf-8"}),E=document.createElement("a");E.href=URL.createObjectURL($),E.download=`命理报告-${h.r.system}.md`,document.body.appendChild(E),E.click(),E.remove(),setTimeout(()=>URL.revokeObjectURL(E.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},hi=()=>{if(!(!h||!h.r))try{const a=K.summaryCardPNG?K.summaryCardPNG(h.r,h.it):"";if(!a){oa("当前环境不支持 Canvas 导出");return}const $=document.createElement("a");$.href=a,$.download=`命理摘要-${h.r.system}.png`,document.body.appendChild($),$.click(),$.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Nt={fontSize:12,padding:"5px 12px"},vi=()=>{!h||!h.r||!h.r.past||Ge(Z.verifyFit?Z.verifyFit(h.r.past.rows,na):null)},yi=()=>{if(!(!h||h.kind!=="bazi"))try{const[a,$,E]=String(F).split("-").map(Number),[,R]=String(W).split(":").map(Number),k=Ae.filter(re=>Number(re.year)).map(re=>({year:Number(re.year),kind:re.kind}));sa(Z.rectifyBirth?Z.rectifyBirth({base:{year:a,month:$,day:E,minute:Number.isFinite(R)?R:0},gender:te,events:k,lateZi:ve,trueSolar:ke,address:t.trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){sa({error:a&&a.message?a.message:String(a)})}},Y=(a,$)=>s("label",{className:"mp-field"},s("span",{className:"mp-lbl"},a),$),$i=a=>{l(a.kind),a.date&&V(a.date),a.time&&ne(a.time),a.gender&&se(a.gender),O(a.address||""),be(a.lines||""),ct(a.question||""),mt(a.direction||"general"),dt(a.count||"3"),ut(a.mhMode||"time"),xt(a.upper||""),ft(a.lower||""),bt(a.changing||""),ja(!1),rt(a)},wi=()=>{He([]),Ka([])};aa(()=>{$e("ziwei")},[]),aa(()=>{if(!_a)return;const a=_a.kind;rt(null),$e(a)},[_a]),aa(()=>{const a=$=>{if($.key!=="Escape")return;const E=document.getElementById("mp-trace-layer");E&&E.classList.contains("open")&&zt()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Mt=(Wt||[]).filter(a=>a&&Pe.some($=>$.k===a.tab)).slice(0,Xa),ki=a=>(Pe.find($=>$.k===a)||{}).label||a,zi=({k:a,label:$,tip:E,wide:R})=>s("button",{key:a,type:"button",className:"mp-tool"+(R?" wide":"")+(o===a?" on":""),"data-tab":a,onClick:()=>Oa(a)},s("b",null,$),s("span",null,E)),ji=[s("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},s("div",{className:"mp-start-top"},s("div",{className:"mp-recent",hidden:Mt.length===0},s("span",{className:"mp-recent-lbl"},"最近用过"),s("span",{className:"mp-recent-list"},Mt.map(a=>s("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>Oa(a.tab)},ki(a.tab),s("i",null,It(a.at)))))),s("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},s("button",{type:"button",className:Fe==="group"?"on":"","aria-pressed":Fe==="group"?"true":"false",onClick:()=>$t("group")},"分组"),s("button",{type:"button",className:Fe==="flat"?"on":"","aria-pressed":Fe==="flat"?"true":"false",onClick:()=>$t("flat")},"平铺"))),Fe==="group"?s("div",{className:"mp-groups"},Rt.map(a=>{const $=!!Xt[a.title],E=Math.max(0,a.items.length-4);return s("section",{key:a.title,className:"mp-tgroup"+($?" open":"")},s("div",{className:"mp-tgroup-head"},s("h2",null,a.title),s("p",null,a.hint)),s("div",{className:"mp-ttools"},a.items.map(zi),E>0?s("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":$?"true":"false",onClick:()=>Jt(R=>Object.assign({},R,{[a.title]:!$}))},$?"收起":`还有 ${E} 个`):null))})):null),s("div",{key:"tabs",className:"mp-tabs"+(Fe==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Pe.map(a=>s("button",{key:a.k,role:"tab","aria-selected":o===a.k?"true":"false",tabIndex:o===a.k?0:-1,className:"mp-tab"+(o===a.k?" on":""),onClick:()=>Oa(a.k)},a.label))),s("div",{key:"head",className:"mp-panel"},s("div",{className:"mp-row"},vt?Y(pa?"出生日期(公历)":ye==="date"?"日期(公历)":"起卦日期(公历)",s("input",{className:"mp-input",type:"date",value:F,onChange:a=>oi(a.target.value)})):null,yt?Y(pa?"出生时刻":"起卦时刻",s("input",{className:"mp-input",type:"time",value:W,onChange:a=>pi(a.target.value)})):null,pa?Y("性别",s("select",{className:"mp-input",value:te,onChange:a=>se(a.target.value)},s("option",{value:"female"},"女"),s("option",{value:"male"},"男"))):null,pa?Y("出生地(省/市即可)",s("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:t,onChange:a=>O(a.target.value)})):null,o==="bazi"||o==="ziwei"?s("label",{className:"mp-field mp-checks"},s("input",{type:"checkbox",checked:fa,onChange:a=>ba(a.target.checked)}),s("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,o==="hepan"?Y("对方出生日期",s("input",{className:"mp-input",type:"date",value:me,onChange:a=>oe(a.target.value)})):null,o==="hepan"?Y("对方出生时刻",s("input",{className:"mp-input",type:"time",value:ue,onChange:a=>Re(a.target.value)})):null,o==="hepan"?Y("对方性别",s("select",{className:"mp-input",value:Ie,onChange:a=>we(a.target.value)},s("option",{value:"female"},"女"),s("option",{value:"male"},"男"))):null,o==="hepan"?Y("合盘方式",s("div",{className:"mp-seg"},s("button",{className:xe==="bazi"?"on":"",onClick:()=>ma("bazi")},"八字"),s("button",{className:xe==="ziwei"?"on":"",onClick:()=>ma("ziwei")},"紫微"))):null,o==="hepan"?Y("对方出生地(可空)",s("input",{className:"mp-input",placeholder:"如 四川成都",value:le,onChange:a=>Q(a.target.value)})):null,o==="qimen"?s("fieldset",{key:"qmr",className:"mp-qmrule"},s("legend",{className:"mp-lbl"},"换局规则"),s("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,$])=>s("label",{key:a,className:"mp-qmopt"},s("input",{type:"radio",name:"qimen_rule",value:a,checked:ta===a,onChange:()=>Ke(a)}),s("span",null,$)))),s("div",{className:"mp-field"},s("span",{className:"mp-lbl"},"晚子时"),s("select",{className:"mp-input",value:ua,onChange:a=>xa(a.target.value)},s("option",{value:"same-day"},"23:00 后归当日"),s("option",{value:"next-day"},"23:00 后归次日"))),s("details",{className:"mp-qmhelp"},s("summary",null,"三种规则有什么区别?"),s("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,Te(o)||o==="qimen"?Y(o==="qimen"?"询问方向(定用神)":"询问方向",s("select",{className:"mp-input",value:Je,onChange:a=>{mt(a.target.value),jt(a.target.value)}},(Z.DIRECTIONS||[]).map(a=>s("option",{key:a.key,value:a.key},a.label)))):null,o==="tarot"?Y("张数",s("select",{className:"mp-input",value:Ea,onChange:a=>dt(a.target.value)},s("option",{value:"1"},"1 张 · 指引"),s("option",{value:"3"},"3 张 · 过去现在未来"),s("option",{value:"5"},"5 张 · 十字牌阵"))):null,o==="liuyao"?Y("六爻(可空)",s("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:j,onChange:a=>be(a.target.value)})):null,o==="meihua"?Y("起卦方式",s("div",{className:"mp-seg"},s("button",{className:_e==="time"?"on":"",onClick:()=>kt("time")},"时间"),s("button",{className:_e==="number"?"on":"",onClick:()=>kt("number")},"数字"))):null,o==="meihua"&&_e==="number"?Y("第一个数",s("input",{className:"mp-input",value:qa,placeholder:"如 17",onChange:a=>xt(a.target.value)})):null,o==="meihua"&&_e==="number"?Y("第二个数",s("input",{className:"mp-input",value:Na,placeholder:"如 29",onChange:a=>ft(a.target.value)})):null,o==="meihua"&&_e==="number"?Y("动爻(可空)",s("input",{className:"mp-input",value:Ma,placeholder:"1-6",onChange:a=>bt(a.target.value)})):null,o==="zeri"?Y("所办事项",s("select",{className:"mp-input",value:$a,onChange:a=>Fa(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,$])=>s("optgroup",{key:a,label:a},$.map(E=>s("option",{key:`${a}-${E}`,value:E},E)))))):null,o==="convert"?Y("转换方向",s("div",{className:"mp-seg"},s("button",{className:i==="solar2lunar"?"on":"",onClick:()=>u("solar2lunar")},"公历 → 农历"),s("button",{className:i==="lunar2solar"?"on":"",onClick:()=>u("lunar2solar")},"农历 → 公历"))):null,o==="convert"&&i==="lunar2solar"?Y("农历日期",s("input",{className:"mp-input",value:m,placeholder:"如 2026-9-17",onChange:a=>r(a.target.value)})):null,o==="convert"&&i==="lunar2solar"?s("label",{className:"mp-check"},s("input",{type:"checkbox",checked:b,onChange:a=>x(a.target.checked)})," 闰月"):null,o==="zeri"?Y("看多少天",s("input",{className:"mp-input",type:"number",min:1,max:60,value:e,onChange:a=>n(a.target.value)})):null,o==="zeri"?Y("当事人属相(可空)",s("select",{className:"mp-input",value:p,onChange:a=>g(a.target.value)},s("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>s("option",{key:a,value:a},a)))):null,o==="xiaoliuren"?Y("起课方式",s("div",{className:"mp-seg"},s("button",{className:f==="time"?"on":"",onClick:()=>S("time")},"时间"),s("button",{className:f==="number"?"on":"",onClick:()=>S("number")},"报数"))):null,o==="xiaoliuren"&&f==="number"?Y("第一个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:w,onChange:a=>z(a.target.value)})):null,o==="xiaoliuren"&&f==="number"?Y("第二个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:N,onChange:a=>M(a.target.value)})):null,o==="xiaoliuren"&&f==="number"?Y("第三个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:D,onChange:a=>P(a.target.value)})):null,o==="mbti"?s("div",{className:"mp-quiz-wrap"},s("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),s(Et,{answers:d,page:A,onPick:(a,$)=>y(E=>{const R=E.slice();return R[a]=$,R}),onPage:a=>I($=>Math.max(0,Math.min($+a,Math.max(0,Math.ceil(ca().total/la)-1)))),onSubmit:wt,onClear:()=>{y(new Array(ca().total).fill(null)),I(0),ce(null)}})):null,o==="trend"?Y("算到几岁",s("input",{className:"mp-input",type:"number",min:10,max:100,value:L,onChange:a=>C(a.target.value)})):null,o==="fengshui"?Y("看什么",s("div",{className:"mp-seg"},s("button",{className:_==="natal"?"on":"",onClick:()=>ae("natal")},"命卦"),s("button",{className:_==="advise"?"on":"",onClick:()=>ae("advise")},"门主灶"),s("button",{className:_==="xuankong"?"on":"",onClick:()=>ae("xuankong")},"玄空"))):null,o==="fengshui"&&_!=="natal"?Y("坐山(24 山)",s("input",{className:"mp-input",value:ie,placeholder:"如 子 / 乾",onChange:a=>ze(a.target.value)})):null,o==="fengshui"&&_!=="natal"?Y("朝向(24 山)",s("input",{className:"mp-input",value:fe,placeholder:"如 午 / 巽",onChange:a=>Be(a.target.value)})):null,o==="fengshui"&&_==="xuankong"?Y("运(1–9)",s("input",{className:"mp-input",type:"number",min:1,max:9,value:X,onChange:a=>ee(a.target.value)})):null,o==="name"?Y("看什么",s("div",{className:"mp-seg"},s("button",{className:ge==="assess"?"on":"",onClick:()=>Me("assess")},"评名字"),s("button",{className:ge==="generate"?"on":"",onClick:()=>Me("generate")},"生成候选"))):null,o==="name"?Y("姓",s("input",{className:"mp-input",value:Se,placeholder:"如 李",onChange:a=>H(a.target.value)})):null,o==="name"&&ge==="assess"?Y("名字",s("input",{className:"mp-input",value:c,placeholder:"如 沐宸",onChange:a=>v(a.target.value)})):null,o==="name"&&ge==="generate"?Y("候选个数",s("input",{className:"mp-input",type:"number",min:1,max:20,value:G,onChange:a=>U(a.target.value)})):null),pa?s("div",{className:"mp-checks"},s("label",{title:"按出生地经度把钟表时间换算成真太阳时"},s("input",{type:"checkbox",checked:ke,onChange:a=>ia(a.target.checked)}),"真太阳时"),s("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},s("input",{type:"checkbox",checked:ve,onChange:a=>ga(a.target.checked)}),"晚子时换日"),s("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},s("input",{type:"checkbox",checked:pe,onChange:a=>je(a.target.checked)}),"联网精确到区县")):null,Te(o)?s("div",{className:"mp-askblock"},s("span",{className:"mp-lbl"},"所问之事(必填)"),s("textarea",{className:"mp-textarea"+(ai?" invalid":""),rows:2,value:Xe,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{ct(a.target.value),ja(!1)},onBlur:a=>jt(void 0,a.target.value)})):null,o==="mbti"?null:s("div",{key:"actions",className:"mp-actions"},s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:ri,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),s("button",{className:"mp-btn",onClick:wt,title:"时间仍为自动时,点它会取当下再起卦"},o==="tarot"?"抽牌":o==="bazi"||o==="ziwei"?"排盘":o==="hepan"?"合盘":o==="qimen"?"起局":La.indexOf(o)>=0?"看结果":"起卦"))),s("div",{key:"hint",className:"mp-hint"},ii.hint),Ue.length?s("div",{key:"hist",className:"mp-hist"},s("div",{className:"mp-hist-h"},s("span",null,"最近排过"),s("button",{className:"mp-hist-clear",onClick:wi},"清空")),s("div",{className:"mp-hist-list"},Ue.map((a,$)=>s("button",{key:$,className:"mp-hist-item",title:`${a.date} ${a.time}`,onClick:()=>$i(a)},s("b",null,(Pe.find(E=>E.k===a.kind)||{}).label||a.kind),s("span",null,a.label||"—"),s("i",null,`${a.date.slice(5)} ${a.time}`))))):null,ye==="cast"&&ht?s("div",{key:"auto",className:"mp-auto"},Pa.cast?`起卦时刻用的是你手动填的(${W});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${W}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,wa?s("div",{key:"err",className:"mp-err",role:"alert"},wa):null,lt?s("div",{key:"ntc",className:"mp-note",role:"status"},lt):null,Qt?s("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!h&&!wa?s("div",{key:"empty",className:"mp-empty"},s("b",null,o==="ziwei"||o==="bazi"?"填好出生信息,点「排盘」":o==="tarot"?"写下想问的事,点「抽牌」":o==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":La.indexOf(o)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),o==="ziwei"||o==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":o==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":La.indexOf(o)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,h?s("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:gi,dangerouslySetInnerHTML:{__html:ui(h)+K.shadowHTML(h.r.shadow,h.shadowDiff)+K.traceHTML(h.r.trace,h.r.system)+K.resultWithInterpret(h.kind==="ziwei"?K.ziweiHTML(h.r):h.kind==="bazi"?K.baziHTML(h.r)+(h.trend?K.trendHTML(h.trend):""):h.kind==="meihua"?K.meihuaHTML(h.r):h.kind==="daliuren"?K.daliurenHTML(h.r):h.kind==="qimen"?K.qimenHTML(h.r)+K.qimenFactsHTML(h.r):h.kind==="hepan"?h.r.chart==="ziwei"?K.ziweiHepanHTML(h.r):K.hepanHTML(h.r):h.kind==="tarot"?K.tarotHTML(h.r):h.kind==="liuyao"?K.liuyaoHTML(h.r):h.kind==="chenggu"?K.chengguHTML(h.r):h.kind==="almanac"?K.almanacHTML(h.r):h.kind==="trend"?K.trendHTML(h.r):h.kind==="name"?K.nameHTML(h.r):h.kind==="mbti"?K.mbtiHTML(h.r):h.kind==="fengshui"?K.fengshuiHTML(h.r):K.quickHTML(h.r),h.it,{folded:di()})+K.caliberHTML(h.caliber)}}):null,h?s("div",{key:"bar",className:"mp-bar"},s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:xi},ti||"复制文字结果"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:bi,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:hi,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,h?s("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},s("input",{className:"mp-input",value:qe,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Ha(a.target.value),onKeyDown:a=>{a.key==="Enter"&&qt()}}),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:qt},"追问"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:fi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),J.ref?null:s("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},tt()),ha?s("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},ha):null):null,va?s("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:K.followupHTML(va)}}):null,h&&h.kind==="bazi"&&h.r.past?s("div",{key:"verify",className:"mp-verify"},s("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),h.r.past.rows.map(a=>s("div",{key:a.year,className:"mp-verify-row"},s("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),s("span",{className:"mp-verify-btns"},["yes","no","unsure"].map($=>s("button",{key:$,className:"mp-chip"+(na[a.year]===$?" on":""),onClick:()=>ya(Object.assign({},na,{[a.year]:$}))},$==="yes"?"准":$==="no"?"不准":"不确定"))))),s("div",{className:"mp-verify-foot"},s("button",{className:"mp-btn ghost",style:Nt,onClick:vi},"算贴合度"),de?s("span",{className:"mp-verify-fit"},`命中 ${de.yes}/${de.answered}(${de.level}):${de.advice}`):null)):null,h&&h.kind==="bazi"?s("div",{key:"rect",className:"mp-rect"},s("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),Ae.map((a,$)=>s("div",{key:$,className:"mp-rect-row"},s("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:E=>We(Ae.map((R,k)=>k===$?Object.assign({},R,{year:E.target.value}):R))}),s("select",{className:"mp-input",value:a.kind,onChange:E=>We(Ae.map((R,k)=>k===$?Object.assign({},R,{kind:E.target.value}):R))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([E,R])=>s("option",{key:E,value:E},R))))),s("button",{className:"mp-btn ghost",style:Nt,onClick:yi},"计算候选时辰"),Ne?Ne.error?s("div",{className:"mp-rect-err"},Ne.error):s("div",{className:"mp-rect-out"},s("div",{className:"mp-verify-fit"},Ne.note),Ne.candidates.slice(0,6).map(a=>s("div",{key:a.hour,className:"mp-rect-cand"+(a===Ne.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!h&&!wa?s("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null];return s("div",{className:"mp-wrap"},ji)}function Yt(o){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(o)}catch(l){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",l)}try{const l=document.createElement("style");return l.setAttribute("data-plugin","@local/metaphysics"),l.textContent=o,document.head.appendChild(l),()=>l.remove()}catch(l){return console.error("[metaphysics] DOM 注入样式也失败",l),()=>{}}}function Kt(o){try{const O=Yt(_t+(K&&K.CSS?K.CSS:""));typeof o.effect=="function"&&typeof O=="function"&&o.effect(()=>O)}catch(O){console.error("[metaphysics] 样式注入失败",O)}let l=null;try{l=o&&o.slots||(o&&typeof o.get=="function"?o.get("slots"):null)}catch(O){console.error("[metaphysics] 取 slots 服务失败",O)}if(!l||typeof l.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{J.injectType=typeof l.inject;const O=typeof l.spec=="function"?l.spec("conversation.input.right"):null;J.spec=O?O.kind+"/"+O.scope:"未声明"}catch(O){J.spec="取声明失败",it(O)}const F=(O,me)=>{try{const oe=l.register(O,me);return J.regs+=1,oe}catch(oe){return it(oe),null}},V=(O,me)=>{try{typeof l.inject=="function"?l.inject(O,me):me()}catch(oe){console.error("[metaphysics] 等待槽位失败:"+O,oe);try{me()}catch(ue){console.error("[metaphysics] 直接注册也失败:"+O,ue)}}};V("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},Ot)),V("main",()=>F({name:"main",key:"metaphysics"},O=>s(Pt,null,s(Zt,O))));const W=(O,me)=>{const oe=()=>{try{l.inject(O,me)}catch(ue){console.error("[metaphysics] 槽位注册失败:"+O,ue);try{me()}catch(Re){console.error("[metaphysics] 直接注册也失败:"+O,Re)}}};try{typeof o.effect=="function"?o.effect(oe,"metaphysics: "+O):oe()}catch(ue){console.error("[metaphysics] effect 包裹失败:"+O,ue),oe()}};W("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},st)),W("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},ot));let ne=0;const te=()=>{if(J.ref)return;ne+=1;const O="-"+ne;F({name:"conversation.input.right",id:"metaphysics-ask"+O,order:40},st),F({name:"conversation.composer.dock",id:"metaphysics-dock"+O,order:60},ot)};let se=20;const t=()=>{J.ref||se<=0||(se-=1,te(),setTimeout(t,700))};try{setTimeout(t,700)}catch{}try{document.addEventListener("pointerdown",()=>te(),{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(o){try{Kt(o)}catch(l){console.error("[metaphysics] apply 异常",l)}}}}});
1880
+ `+F),s("div",{className:"mp-lbl"},"环境:__PP "+typeof K+" · Engine "+typeof window.Engine+" · React "+typeof aa+" · 版本 "+(typeof K=="object"&&K&&(window.__MP_VER||"?")))))}}function Ot(o){const r=o&&o.size?o.size:20,F=o&&o.active;return s("svg",{width:r,height:r,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:F?1:.72}},s("circle",{cx:12,cy:12,r:8.2}),s("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),s("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),s("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Oe=[{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 Ve(o){return String(o).padStart(2,"0")}const La=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name"],It=Array.isArray(window.__MPGroups)?window.__MPGroups:[],Xa="mp.recent.tabs",Ja="mp.first.view",Qa=3;function et(o){try{return JSON.parse(window.localStorage.getItem(o)||"null")}catch{return null}}function at(o,r){try{window.localStorage.setItem(o,JSON.stringify(r))}catch{}}function Dt(o){const r=new Date(o);if(Number.isNaN(r.getTime()))return"";const F=J=>new Date(J.getFullYear(),J.getMonth(),J.getDate()).getTime(),U=Math.round((F(new Date)-F(r))/864e5);return U<=0?"今天":U===1?"昨天":`${Ve(r.getMonth()+1)}-${Ve(r.getDate())}`}function Aa(){const o=new Date;return{date:`${o.getFullYear()}-${Ve(o.getMonth()+1)}-${Ve(o.getDate())}`,time:`${Ve(o.getHours())}:${Ve(o.getMinutes())}`}}const Gt={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"},tt={date:"1990-05-12",time:"14:30"},Ha=o=>Gt[o]||"none",it=window.__MPCore||{},He=it.needAsk||(o=>!1),ee={ref:null,seats:[],keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Ie={r:null,q:"",it:null};function nt(){const o=[];return o.push("inputActions "+(ee.ref?"已拿到":"未拿到")),o.push("渲染 "+ee.mounted+" 次"),o.push("注册 "+ee.regs+" 次"),o.push("inject "+(ee.injectType||"?")),o.push("槽位 "+(ee.spec||"?")),ee.errs.length&&o.push("错误:"+ee.errs.join(" / ")),"桥自检:"+o.join(";")}function st(o){if(ee.errs.length>=3)return;const r=o&&o.message?String(o.message):String(o);ee.errs.push(r.slice(0,90))}function Bt(o){if(!o)return null;const r=o.inputActions;if(r&&typeof r.setDraft=="function"&&typeof r.submit=="function")return r;const F=o.actions&&o.actions.input;return F&&typeof F.setDraft=="function"&&typeof F.submit=="function"?F:null}function ot(o,r){const F=Bt(o);return ta(()=>{if(ee.seats.indexOf(r)<0&&ee.seats.push(r),ee.keys=o?Object.keys(o).join(","):"",F){ee.ref=F;try{window.__MPComposer=F}catch{}}return()=>{ee.ref===F&&(ee.ref=null)}},[F,r]),F}function Zt(){const o=Ie.r;if(!o)return"";try{const r=B.askPrompt?B.askPrompt(o,{question:Ie.q,interpret:Ie.it}):null;return r&&r.text||String(o.summary||"")}catch{return String(o.summary||"")}}function pt(o){return ee.mounted+=1,ot(o,"input.right")?s("button",{type:"button",className:"mp-chip ok",title:Ie.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const F=Zt();F&&lt(F)}},"命理·问"):s("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function rt(o){return ee.mounted+=1,ot(o,"composer.dock"),null}function lt(o){let r=ee.ref;if(!r)try{r=window.__MPComposer||null}catch{r=null}return!r||typeof r.setDraft!="function"||typeof r.submit!="function"?!1:(r.setDraft(o),r.submit(),!0)}function Yt(){const[o,r]=L("ziwei"),[F,U]=L("1990-05-12"),[J,oe]=L("14:30"),[ne,pe]=L("female"),[t,P]=L(""),[ge,re]=L("1992-08-15"),[fe,De]=L("10:00"),[Ge,ke]=L("female"),[ce,ae]=L(""),[be,ga]=L("bazi"),[ia,We]=L("chaibu"),[ze,na]=L(!0),[ve,ua]=L(!0),[xa,fa]=L("same-day"),[ba,ha]=L(!1),[Me,Fa]=L(""),[va,Be]=L(""),[ya,Ue]=L(null),[sa,$a]=L({}),[me,Ze]=L(null),[Fe,Xe]=L([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Se,oa]=L(null),[wa,_a]=L("开业"),[e,n]=L("30"),[p,m]=L(""),[i,g]=L("solar2lunar"),[u,l]=L(""),[f,b]=L(!1),[x,z]=L("time"),[w,k]=L(""),[q,N]=L(""),[D,E]=L(""),[c,v]=L(()=>new Array(ma().total).fill(null)),[H,I]=L(0),[T,M]=L("60"),[R,Z]=L("natal"),[Q,te]=L("9"),[le,je]=L("子"),[qe,ye]=L("午"),[xe,Ce]=L("assess"),[Ye,A]=L("李"),[V,d]=L(""),[$,Y]=L("6"),[X,he]=L(!1),[S,se]=L(""),[h,de]=L(null);ta(()=>{h&&h.r&&(Ie.r=h.r,Ie.q=Me.trim(),Ie.it=h.it||null)},[h,Me]);const[_e,Ee]=L(()=>Ht()),[Pe,Wt]=L(()=>et(Ja)==="flat"?"flat":"group"),[Ut,Xt]=L(()=>{const a=et(Xa);return Array.isArray(a)?a:[]}),[Jt,Qt]=L({}),[Ea,dt]=L(null),[ka,Te]=L(""),[ct,za]=L(""),[ei,ja]=L(!1),[Pa,mt]=L("3"),[Je,gt]=L(""),[Qe,ut]=L("general"),[xt,ai]=L(null),[ti,qa]=L(!1),[Re,ft]=L("time"),[Na,bt]=L(""),[Ma,ht]=L(""),[Sa,vt]=L(""),[ii,pa]=L(""),[Ra,Ca]=L({birth:null,cast:null}),ni=Oe.find(a=>a.k===o)||Oe[0],ra=o==="bazi"||o==="ziwei"||o==="hepan"||o==="chenggu"||o==="trend"||o==="fengshui"||o==="name",$e=Ha(o),yt=!(o==="meihua"&&Re==="number"),$t=o!=="tarot"&&o!=="mbti"&&yt,wt=$t&&$e!=="date",Ai=wt,we=async(a,y,_,O)=>{const C=a||o,ie=_||Re,ue=y||{date:F,time:J},Le=O&&O.gender?O.gender:ne,Ke=O&&typeof O.address=="string"?O.address:t;za("");try{ja(!0);try{await Ua(C)}catch(G){Te(G&&G.message?G.message:String(G)),de(null);return}finally{ja(!1)}const Ne=`${ue.date}T${ue.time}`,j={system:C};if(j.shadow=C!=="mbti",j.trace=C==="liuyao"||C==="bazi"||C==="ziwei"||C==="qimen"||C==="daliuren",C!=="tarot"&&(j.datetime=Ne),C==="bazi"||C==="ziwei"||C==="hepan"){if(j.gender=Le,j.trueSolar=ze,Ke.trim()){j.address=Ke.trim();try{const G=await B.geocodeAddress(j.address,{online:X});G&&typeof G.lon=="number"&&(j.longitude=G.lon,j.geo=G)}catch(G){console.error("[metaphysics] 地址解析失败,退回内置表",G)}}C!=="hepan"&&(j.cross=ba),j.lateZi=ve}if(C==="liuyao"){const G=it.parseLines(S);G.lines?j.lines=G.lines:G.warning&&za(G.warning)}if(C==="qimen"&&(j.juMethod=ia,j.lateZiHourMode=xa,j.direction=Qe),C==="bazi"&&(j.verifyPast=6),C==="zeri"&&(j.startDate=ue.date,j.task=wa,j.days=Number(e)||30,p&&(j.shengXiao=p)),C==="xiaoliuren")if(j.mode=x,x==="number")j.num1=Number(w)||void 0,j.num2=Number(q)||void 0,j.num3=Number(D)||void 0;else{j.date=ue.date;const G=Number(String(ue.time).split(":")[0]);j.hour=Number.isFinite(G)?G:12}if(C==="mbti"){delete j.datetime;const G=c.slice();for(;G.length&&G[G.length-1]==null;)G.pop();G.length&&(j.answers=G)}if(C==="trend"&&(j.gender=Le,j.toAge=Number(T)||60,j.trueSolar=ze,j.lateZi=ve),C==="fengshui"&&(j.action=R,R==="natal"?j.gender=Le:(j.sitting=le,j.facing=qe,delete j.datetime,R==="xuankong"&&(j.period=Number(Q)||9))),C==="name"&&(j.action=xe,j.surname=Ye.trim(),xe==="generate"?(j.gender=Le,j.limit=Number($)||6,j.trueSolar=ze,j.lateZi=ve):(j.givenName=V.trim(),(!ue.date||!ue.time)&&delete j.datetime)),C==="convert")if(j.system="convert",i==="lunar2solar"){const G=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(u).trim());if(!G){Te("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}j.mode="lunar2solar",j.lunarYear=Number(G[1]),j.lunarMonth=Number(G[2]),j.lunarDay=Number(G[3]),j.isLeapMonth=f,delete j.datetime}else j.mode="solar2lunar";if(C==="tarot"&&(j.count=Number(Pa)),C==="hepan"&&(j.chart=be,j.partner={datetime:`${ge}T${fe}`,gender:Ge,address:ce.trim()||void 0,trueSolar:ze}),He(C)){if(!Je.trim()){Te("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),qa(!0),de(null);return}qa(!1),j.question=Je.trim(),C==="liuyao"&&(j.direction=Qe)}if(C==="meihua"&&(j.mode=ie,ie==="number")){if(Na.trim()===""||Ma.trim()===""){Te("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),de(null);return}if(j.upper=Number(Na),j.lower=Number(Ma),!Number.isFinite(j.upper)||!Number.isFinite(j.lower)){Te("两个数都要是数字,例如 17 和 29。"),de(null);return}Sa!==""&&(j.changing=Number(Sa))}const ea=B.compute(j);let Da=null;try{Da=K.shadowTrack?K.shadowTrack(ea):null}catch{Da=null}let Ga=null;if(C==="bazi")try{Ga=B.compute({system:"trend",datetime:Ne,gender:Le,toAge:100,trueSolar:ze,lateZi:ve,...j.dst!==void 0?{dst:j.dst}:{},...j.address?{address:j.address}:{},...typeof j.longitude=="number"?{longitude:j.longitude}:{},...j.geo?{geo:j.geo}:{}})}catch{Ga=null}let Ba=null;if(B.caliberCompare)try{Ba=B.caliberCompare(j)}catch{Ba=null}const Si=He(C)||C==="qimen"?{question:He(C)?Je.trim():"",direction:Qe}:void 0,Ta=B.interpret?B.interpret(ea,Si):null;Ta&&ea.cross&&B.crossSection&&(Ta.sections=[...Ta.sections||[],B.crossSection(ea.cross)]);const Ci=Ha(C)==="cast"&&(C!=="meihua"||ie==="time");if(de({kind:C,r:ea,it:Ta,at:ue,timed:Ci,trend:Ga,caliber:Ba,shadowDiff:Da}),Ue(null),Ze(null),$a({}),oa(null),Te(""),pa(""),C!=="tarot"&&C!=="mbti"){const G={kind:C,date:F,time:J,gender:ne,address:t,lines:C==="liuyao"?S:"",question:He(C)?Je.trim():"",direction:Qe,count:Pa,mhMode:Re,upper:Na,lower:Ma,changing:Sa,label:_t(C,ea),at:Date.now()};Ee(Ti=>{const Tt=[G,...Ti.filter(Li=>!Ft(Li,G))].slice(0,20);return Wa(Tt),Tt})}}catch(Ne){Te(Ne&&Ne.message?Ne.message:String(Ne)),de(null)}},si=async a=>{const y=Ha(a);if(Te(""),a==="mbti"){za(""),ja(!0);try{await Ua(a)}catch(O){Te(O&&O.message?O.message:String(O))}finally{ja(!1)}r(a),c.filter(O=>O!=null).length>=Ae?we(a):de(null);return}if(r(a),y==="none"){we(a);return}const _=Ra[y]||(y==="cast"?Aa():{date:tt.date,time:tt.time});U(_.date),oe(_.time),we(a,_)},oi=a=>{Oe.some(y=>y.k===a)&&Xt(y=>{const _=(y||[]).filter(C=>C&&C.tab&&C.tab!==a),O=[{tab:a,at:Date.now()}].concat(_).slice(0,Qa);return at(Xa,O),O})},kt=a=>{const y=a==="flat"?"flat":"group";Wt(y),at(Ja,y)},Oa=a=>{oi(a),si(a)},pi=a=>{U(a),$e!=="none"&&Ca(y=>Object.assign({},y,{[$e]:{date:a,time:J}}))},ri=a=>{oe(a),$e!=="none"&&Ca(y=>Object.assign({},y,{[$e]:{date:F,time:a}}))},Hi=()=>{const a=Aa();U(a.date),oe(a.time),$e!=="none"&&Ca(y=>Object.assign({},y,{[$e]:null})),we(o,a)},zt=()=>{if(o==="mbti"){const a=c.filter(y=>y!=null).length;if(a<Ae){za(`先答满 ${Ae} 题再看结果(现答 ${a} 题,还差 ${Ae-a} 题)。`);return}we(o);return}if($e!=="none"&&!Ra[$e]){const a=Aa();U(a.date),oe(a.time),we(o,a);return}we(o)},li=()=>{const a={date:"1990-05-12",time:"14:30"};r("bazi"),pe("male"),P("河北石家庄"),Ca(y=>Object.assign({},y,{birth:a})),U(a.date),oe(a.time),we("bazi",a,null,{gender:"male",address:"河北石家庄"})},jt=a=>{ft(a),we(o,{date:F,time:J},a)},di=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),ci=()=>xt===null?di():xt,Ia=(a,y,_)=>{if(!y)return;const O=ie=>{a.textContent=ie?"已复制":"复制失败",setTimeout(()=>{a.textContent=_},1400)},C=()=>{try{const ie=document.createElement("textarea");ie.value=y,ie.setAttribute("readonly",""),ie.style.position="fixed",ie.style.opacity="0",document.body.appendChild(ie),ie.select();const ue=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ie),ue}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(y).then(()=>O(!0),()=>O(C()));return}}catch{}O(C())},mi=a=>Ia(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),gi=a=>Ia(a,a.getAttribute("data-handle-copy")||"","复制句柄"),ui=a=>{const y=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),_=y&&y.querySelector("[data-trace-md]");Ia(a,_?_.value:"","复制 Markdown")},xi=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const y=a.querySelector("[data-trace-close]");y&&y.focus&&y.focus()},qt=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const y=document.querySelector("[data-trace-open]");y&&y.focus&&y.focus()},fi=a=>{const y=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(y){mi(y);return}const _=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(_){gi(_);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){xi();return}const C=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(C){ui(C);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){qt();return}const ue=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!ue)return;const Le=ue.closest(".mp-it");if(!Le)return;const Ke=!Le.classList.contains("folded");Le.classList.toggle("folded",Ke),ue.setAttribute("aria-expanded",Ke?"false":"true");const Ne=ue.querySelector(".mp-it-hint");Ne&&(Ne.textContent=Ke?"点击展开":"点击收起"),ai(Ke)},Nt=(a,y)=>{if(!h||!(He(o)||o==="qimen"))return;const _={question:He(o)?(y===void 0?Je:y).trim():"",direction:a===void 0?Qe:a},O=B.interpret?B.interpret(h.r,_):null;let C=h.r;if((o==="liuyao"||o==="qimen")&&C&&C.trace&&B.buildTrace)try{const ie=o==="liuyao"?B.buildTrace(C,{direction:_.direction,gender:C.useGod&&C.useGod.gender||"male",refresh:!0}):B.buildTrace(C,{direction:_.direction});ie&&(C=Object.assign({},C,{trace:ie}))}catch{}de(Object.assign({},h,{r:C,it:O}))},bi=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,hi=()=>{try{const a=h&&h.r&&h.r.summary?h.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>pa("已复制"),()=>pa("复制失败"))}catch{pa("复制失败")}},Mt=()=>{if(!(!h||!h.r||!Me.trim()))try{Ue(B.followup?B.followup(h.r,Me.trim()):null)}catch(a){Ue({question:Me.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},vi=()=>{if(!(!h||!h.r))try{const a=B.askPrompt?B.askPrompt(h.r,{question:Me.trim(),interpret:h.it}):null,y=a&&a.text?a.text:String(h.r.summary||"");if(lt(y)){Be("已发到对话窗,往下看回复。");return}const _="("+nt()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(y).then(()=>Be("对话输入框还没就绪"+_+",已复制提问;粘进对话窗回车即可。"),()=>Be("对话输入框还没就绪"+_+",复制也没成功;先点「复制文字结果」再贴。")):Be("对话输入框还没就绪"+_+";先点「复制文字结果」再贴进对话窗。")}catch(a){Be("发到对话窗失败:"+(a&&a.message?a.message:a))}},yi=()=>{if(!(!h||!h.r))try{const a=B.renderText?B.renderText(h.r):h.r.summary||"",y=new Blob([a],{type:"text/markdown;charset=utf-8"}),_=document.createElement("a");_.href=URL.createObjectURL(y),_.download=`命理报告-${h.r.system}.md`,document.body.appendChild(_),_.click(),_.remove(),setTimeout(()=>URL.revokeObjectURL(_.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},$i=()=>{if(!(!h||!h.r))try{const a=K.summaryCardPNG?K.summaryCardPNG(h.r,h.it):"";if(!a){pa("当前环境不支持 Canvas 导出");return}const y=document.createElement("a");y.href=a,y.download=`命理摘要-${h.r.system}.png`,document.body.appendChild(y),y.click(),y.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},St={fontSize:12,padding:"5px 12px"},wi=()=>{!h||!h.r||!h.r.past||Ze(B.verifyFit?B.verifyFit(h.r.past.rows,sa):null)},ki=()=>{if(!(!h||h.kind!=="bazi"))try{const[a,y,_]=String(F).split("-").map(Number),[,O]=String(J).split(":").map(Number),C=Fe.filter(ie=>Number(ie.year)).map(ie=>({year:Number(ie.year),kind:ie.kind}));oa(B.rectifyBirth?B.rectifyBirth({base:{year:a,month:y,day:_,minute:Number.isFinite(O)?O:0},gender:ne,events:C,lateZi:ve,trueSolar:ze,address:t.trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){oa({error:a&&a.message?a.message:String(a)})}},W=(a,y)=>s("label",{className:"mp-field"},s("span",{className:"mp-lbl"},a),y),zi=a=>{r(a.kind),a.date&&U(a.date),a.time&&oe(a.time),a.gender&&pe(a.gender),P(a.address||""),se(a.lines||""),gt(a.question||""),ut(a.direction||"general"),mt(a.count||"3"),ft(a.mhMode||"time"),bt(a.upper||""),ht(a.lower||""),vt(a.changing||""),qa(!1),dt(a)},ji=()=>{Ee([]),Wa([])};ta(()=>{we("ziwei")},[]),ta(()=>{if(!Ea)return;const a=Ea.kind;dt(null),we(a)},[Ea]),ta(()=>{const a=y=>{if(y.key!=="Escape")return;const _=document.getElementById("mp-trace-layer");_&&_.classList.contains("open")&&qt()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Ct=(Ut||[]).filter(a=>a&&Oe.some(y=>y.k===a.tab)).slice(0,Qa),qi=a=>(Oe.find(y=>y.k===a)||{}).label||a,Ni=({k:a,label:y,tip:_,wide:O})=>s("button",{key:a,type:"button",className:"mp-tool"+(O?" wide":"")+(o===a?" on":""),"data-tab":a,onClick:()=>Oa(a)},s("b",null,y),s("span",null,_)),Mi=[s("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},s("div",{className:"mp-start-top"},s("div",{className:"mp-recent",hidden:Ct.length===0},s("span",{className:"mp-recent-lbl"},"最近用过"),s("span",{className:"mp-recent-list"},Ct.map(a=>s("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>Oa(a.tab)},qi(a.tab),s("i",null,Dt(a.at)))))),s("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},s("button",{type:"button",className:Pe==="group"?"on":"","aria-pressed":Pe==="group"?"true":"false",onClick:()=>kt("group")},"分组"),s("button",{type:"button",className:Pe==="flat"?"on":"","aria-pressed":Pe==="flat"?"true":"false",onClick:()=>kt("flat")},"平铺"))),Pe==="group"?s("div",{className:"mp-groups"},It.map(a=>{const y=!!Jt[a.title],_=Math.max(0,a.items.length-4);return s("section",{key:a.title,className:"mp-tgroup"+(y?" open":"")},s("div",{className:"mp-tgroup-head"},s("h2",null,a.title),s("p",null,a.hint)),s("div",{className:"mp-ttools"},a.items.map(Ni),_>0?s("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":y?"true":"false",onClick:()=>Qt(O=>Object.assign({},O,{[a.title]:!y}))},y?"收起":`还有 ${_} 个`):null))})):null),s("div",{key:"tabs",className:"mp-tabs"+(Pe==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Oe.map(a=>s("button",{key:a.k,role:"tab","aria-selected":o===a.k?"true":"false",tabIndex:o===a.k?0:-1,className:"mp-tab"+(o===a.k?" on":""),onClick:()=>Oa(a.k)},a.label))),s("div",{key:"head",className:"mp-panel"},s("div",{className:"mp-row"},$t?W(ra?"出生日期(公历)":$e==="date"?"日期(公历)":"起卦日期(公历)",s("input",{className:"mp-input",type:"date",value:F,onChange:a=>pi(a.target.value)})):null,wt?W(ra?"出生时刻":"起卦时刻",s("input",{className:"mp-input",type:"time",value:J,onChange:a=>ri(a.target.value)})):null,ra?W("性别",s("select",{className:"mp-input",value:ne,onChange:a=>pe(a.target.value)},s("option",{value:"female"},"女"),s("option",{value:"male"},"男"))):null,ra?W("出生地(省/市即可)",s("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:t,onChange:a=>P(a.target.value)})):null,o==="bazi"||o==="ziwei"?s("label",{className:"mp-field mp-checks"},s("input",{type:"checkbox",checked:ba,onChange:a=>ha(a.target.checked)}),s("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,o==="hepan"?W("对方出生日期",s("input",{className:"mp-input",type:"date",value:ge,onChange:a=>re(a.target.value)})):null,o==="hepan"?W("对方出生时刻",s("input",{className:"mp-input",type:"time",value:fe,onChange:a=>De(a.target.value)})):null,o==="hepan"?W("对方性别",s("select",{className:"mp-input",value:Ge,onChange:a=>ke(a.target.value)},s("option",{value:"female"},"女"),s("option",{value:"male"},"男"))):null,o==="hepan"?W("合盘方式",s("div",{className:"mp-seg"},s("button",{className:be==="bazi"?"on":"",onClick:()=>ga("bazi")},"八字"),s("button",{className:be==="ziwei"?"on":"",onClick:()=>ga("ziwei")},"紫微"))):null,o==="hepan"?W("对方出生地(可空)",s("input",{className:"mp-input",placeholder:"如 四川成都",value:ce,onChange:a=>ae(a.target.value)})):null,o==="qimen"?s("fieldset",{key:"qmr",className:"mp-qmrule"},s("legend",{className:"mp-lbl"},"换局规则"),s("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,y])=>s("label",{key:a,className:"mp-qmopt"},s("input",{type:"radio",name:"qimen_rule",value:a,checked:ia===a,onChange:()=>We(a)}),s("span",null,y)))),s("div",{className:"mp-field"},s("span",{className:"mp-lbl"},"晚子时"),s("select",{className:"mp-input",value:xa,onChange:a=>fa(a.target.value)},s("option",{value:"same-day"},"23:00 后归当日"),s("option",{value:"next-day"},"23:00 后归次日"))),s("details",{className:"mp-qmhelp"},s("summary",null,"三种规则有什么区别?"),s("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,He(o)||o==="qimen"?W(o==="qimen"?"询问方向(定用神)":"询问方向",s("select",{className:"mp-input",value:Qe,onChange:a=>{ut(a.target.value),Nt(a.target.value)}},(B.DIRECTIONS||[]).map(a=>s("option",{key:a.key,value:a.key},a.label)))):null,o==="tarot"?W("张数",s("select",{className:"mp-input",value:Pa,onChange:a=>mt(a.target.value)},s("option",{value:"1"},"1 张 · 指引"),s("option",{value:"3"},"3 张 · 过去现在未来"),s("option",{value:"5"},"5 张 · 十字牌阵"))):null,o==="liuyao"?W("六爻(可空)",s("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:S,onChange:a=>se(a.target.value)})):null,o==="meihua"?W("起卦方式",s("div",{className:"mp-seg"},s("button",{className:Re==="time"?"on":"",onClick:()=>jt("time")},"时间"),s("button",{className:Re==="number"?"on":"",onClick:()=>jt("number")},"数字"))):null,o==="meihua"&&Re==="number"?W("第一个数",s("input",{className:"mp-input",value:Na,placeholder:"如 17",onChange:a=>bt(a.target.value)})):null,o==="meihua"&&Re==="number"?W("第二个数",s("input",{className:"mp-input",value:Ma,placeholder:"如 29",onChange:a=>ht(a.target.value)})):null,o==="meihua"&&Re==="number"?W("动爻(可空)",s("input",{className:"mp-input",value:Sa,placeholder:"1-6",onChange:a=>vt(a.target.value)})):null,o==="zeri"?W("所办事项",s("select",{className:"mp-input",value:wa,onChange:a=>_a(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,y])=>s("optgroup",{key:a,label:a},y.map(_=>s("option",{key:`${a}-${_}`,value:_},_)))))):null,o==="convert"?W("转换方向",s("div",{className:"mp-seg"},s("button",{className:i==="solar2lunar"?"on":"",onClick:()=>g("solar2lunar")},"公历 → 农历"),s("button",{className:i==="lunar2solar"?"on":"",onClick:()=>g("lunar2solar")},"农历 → 公历"))):null,o==="convert"&&i==="lunar2solar"?W("农历日期",s("input",{className:"mp-input",value:u,placeholder:"如 2026-9-17",onChange:a=>l(a.target.value)})):null,o==="convert"&&i==="lunar2solar"?s("label",{className:"mp-check"},s("input",{type:"checkbox",checked:f,onChange:a=>b(a.target.checked)})," 闰月"):null,o==="zeri"?W("看多少天",s("input",{className:"mp-input",type:"number",min:1,max:60,value:e,onChange:a=>n(a.target.value)})):null,o==="zeri"?W("当事人属相(可空)",s("select",{className:"mp-input",value:p,onChange:a=>m(a.target.value)},s("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>s("option",{key:a,value:a},a)))):null,o==="xiaoliuren"?W("起课方式",s("div",{className:"mp-seg"},s("button",{className:x==="time"?"on":"",onClick:()=>z("time")},"时间"),s("button",{className:x==="number"?"on":"",onClick:()=>z("number")},"报数"))):null,o==="xiaoliuren"&&x==="number"?W("第一个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:w,onChange:a=>k(a.target.value)})):null,o==="xiaoliuren"&&x==="number"?W("第二个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:q,onChange:a=>N(a.target.value)})):null,o==="xiaoliuren"&&x==="number"?W("第三个数",s("input",{className:"mp-input",type:"number",min:1,max:99,value:D,onChange:a=>E(a.target.value)})):null,o==="mbti"?s("div",{className:"mp-quiz-wrap"},s("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),s(Pt,{answers:c,page:H,onPick:(a,y)=>v(_=>{const O=_.slice();return O[a]=y,O}),onPage:a=>I(y=>Math.max(0,Math.min(y+a,Math.max(0,Math.ceil(ma().total/da)-1)))),onSubmit:zt,onClear:()=>{v(new Array(ma().total).fill(null)),I(0),de(null)}})):null,o==="trend"?W("算到几岁",s("input",{className:"mp-input",type:"number",min:10,max:100,value:T,onChange:a=>M(a.target.value)})):null,o==="fengshui"?W("看什么",s("div",{className:"mp-seg"},s("button",{className:R==="natal"?"on":"",onClick:()=>Z("natal")},"命卦"),s("button",{className:R==="advise"?"on":"",onClick:()=>Z("advise")},"门主灶"),s("button",{className:R==="xuankong"?"on":"",onClick:()=>Z("xuankong")},"玄空"))):null,o==="fengshui"&&R!=="natal"?W("坐山(24 山)",s("input",{className:"mp-input",value:le,placeholder:"如 子 / 乾",onChange:a=>je(a.target.value)})):null,o==="fengshui"&&R!=="natal"?W("朝向(24 山)",s("input",{className:"mp-input",value:qe,placeholder:"如 午 / 巽",onChange:a=>ye(a.target.value)})):null,o==="fengshui"&&R==="xuankong"?W("运(1–9)",s("input",{className:"mp-input",type:"number",min:1,max:9,value:Q,onChange:a=>te(a.target.value)})):null,o==="name"?W("看什么",s("div",{className:"mp-seg"},s("button",{className:xe==="assess"?"on":"",onClick:()=>Ce("assess")},"评名字"),s("button",{className:xe==="generate"?"on":"",onClick:()=>Ce("generate")},"生成候选"))):null,o==="name"?W("姓",s("input",{className:"mp-input",value:Ye,placeholder:"如 李",onChange:a=>A(a.target.value)})):null,o==="name"&&xe==="assess"?W("名字",s("input",{className:"mp-input",value:V,placeholder:"如 沐宸",onChange:a=>d(a.target.value)})):null,o==="name"&&xe==="generate"?W("候选个数",s("input",{className:"mp-input",type:"number",min:1,max:20,value:$,onChange:a=>Y(a.target.value)})):null),ra?s("div",{className:"mp-checks"},s("label",{title:"按出生地经度把钟表时间换算成真太阳时"},s("input",{type:"checkbox",checked:ze,onChange:a=>na(a.target.checked)}),"真太阳时"),s("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},s("input",{type:"checkbox",checked:ve,onChange:a=>ua(a.target.checked)}),"晚子时换日"),s("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},s("input",{type:"checkbox",checked:X,onChange:a=>he(a.target.checked)}),"联网精确到区县")):null,He(o)?s("div",{className:"mp-askblock"},s("span",{className:"mp-lbl"},"所问之事(必填)"),s("textarea",{className:"mp-textarea"+(ti?" invalid":""),rows:2,value:Je,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{gt(a.target.value),qa(!1)},onBlur:a=>Nt(void 0,a.target.value)})):null,o==="mbti"?null:s("div",{key:"actions",className:"mp-actions"},s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:li,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),s("button",{className:"mp-btn",onClick:zt,title:"时间仍为自动时,点它会取当下再起卦"},o==="tarot"?"抽牌":o==="bazi"||o==="ziwei"?"排盘":o==="hepan"?"合盘":o==="qimen"?"起局":La.indexOf(o)>=0?"看结果":"起卦"))),s("div",{key:"hint",className:"mp-hint"},ni.hint),_e.length?s("div",{key:"hist",className:"mp-hist"},s("div",{className:"mp-hist-h"},s("span",null,"最近排过"),s("button",{className:"mp-hist-clear",onClick:ji},"清空")),s("div",{className:"mp-hist-list"},_e.map((a,y)=>s("button",{key:y,className:"mp-hist-item",title:`${a.date} ${a.time}`,onClick:()=>zi(a)},s("b",null,(Oe.find(_=>_.k===a.kind)||{}).label||a.kind),s("span",null,a.label||"—"),s("i",null,`${a.date.slice(5)} ${a.time}`))))):null,$e==="cast"&&yt?s("div",{key:"auto",className:"mp-auto"},Ra.cast?`起卦时刻用的是你手动填的(${J});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${J}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,ka?s("div",{key:"err",className:"mp-err",role:"alert"},ka):null,ct?s("div",{key:"ntc",className:"mp-note",role:"status"},ct):null,ei?s("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!h&&!ka?s("div",{key:"empty",className:"mp-empty"},s("b",null,o==="ziwei"||o==="bazi"?"填好出生信息,点「排盘」":o==="tarot"?"写下想问的事,点「抽牌」":o==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":La.indexOf(o)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),o==="ziwei"||o==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":o==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":La.indexOf(o)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,h?s("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:fi,dangerouslySetInnerHTML:{__html:bi(h)+K.revisionHTML(h.r.revision)+K.handleHTML(h.r.handle)+K.shadowHTML(h.r.shadow,h.shadowDiff)+K.traceHTML(h.r.trace,h.r.system,h.r.traceText)+K.resultWithInterpret(h.kind==="ziwei"?K.ziweiHTML(h.r):h.kind==="bazi"?K.baziHTML(h.r)+(h.trend?K.trendHTML(h.trend):""):h.kind==="meihua"?K.meihuaHTML(h.r):h.kind==="daliuren"?K.daliurenHTML(h.r):h.kind==="qimen"?K.qimenHTML(h.r)+K.qimenFactsHTML(h.r):h.kind==="hepan"?h.r.chart==="ziwei"?K.ziweiHepanHTML(h.r):K.hepanHTML(h.r):h.kind==="tarot"?K.tarotHTML(h.r):h.kind==="liuyao"?K.liuyaoHTML(h.r):h.kind==="chenggu"?K.chengguHTML(h.r):h.kind==="almanac"?K.almanacHTML(h.r):h.kind==="trend"?K.trendHTML(h.r):h.kind==="name"?K.nameHTML(h.r):h.kind==="mbti"?K.mbtiHTML(h.r):h.kind==="fengshui"?K.fengshuiHTML(h.r):K.quickHTML(h.r),h.it,{folded:ci()})+K.caliberHTML(h.caliber)}}):null,h?s("div",{key:"bar",className:"mp-bar"},s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:hi},ii||"复制文字结果"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:yi,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:$i,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,h?s("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},s("input",{className:"mp-input",value:Me,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Fa(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Mt()}}),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Mt},"追问"),s("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:vi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ee.ref?null:s("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},nt()),va?s("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},va):null):null,ya?s("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:K.followupHTML(ya)}}):null,h&&h.kind==="bazi"&&h.r.past?s("div",{key:"verify",className:"mp-verify"},s("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),h.r.past.rows.map(a=>s("div",{key:a.year,className:"mp-verify-row"},s("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),s("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(y=>s("button",{key:y,className:"mp-chip"+(sa[a.year]===y?" on":""),onClick:()=>$a(Object.assign({},sa,{[a.year]:y}))},y==="yes"?"准":y==="no"?"不准":"不确定"))))),s("div",{className:"mp-verify-foot"},s("button",{className:"mp-btn ghost",style:St,onClick:wi},"算贴合度"),me?s("span",{className:"mp-verify-fit"},`命中 ${me.yes}/${me.answered}(${me.level}):${me.advice}`):null)):null,h&&h.kind==="bazi"?s("div",{key:"rect",className:"mp-rect"},s("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),Fe.map((a,y)=>s("div",{key:y,className:"mp-rect-row"},s("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:_=>Xe(Fe.map((O,C)=>C===y?Object.assign({},O,{year:_.target.value}):O))}),s("select",{className:"mp-input",value:a.kind,onChange:_=>Xe(Fe.map((O,C)=>C===y?Object.assign({},O,{kind:_.target.value}):O))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([_,O])=>s("option",{key:_,value:_},O))))),s("button",{className:"mp-btn ghost",style:St,onClick:ki},"计算候选时辰"),Se?Se.error?s("div",{className:"mp-rect-err"},Se.error):s("div",{className:"mp-rect-out"},s("div",{className:"mp-verify-fit"},Se.note),Se.candidates.slice(0,6).map(a=>s("div",{key:a.hour,className:"mp-rect-cand"+(a===Se.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!h&&!ka?s("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null];return s("div",{className:"mp-wrap"},Mi)}function Kt(o){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(o)}catch(r){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",r)}try{const r=document.createElement("style");return r.setAttribute("data-plugin","@local/metaphysics"),r.textContent=o,document.head.appendChild(r),()=>r.remove()}catch(r){return console.error("[metaphysics] DOM 注入样式也失败",r),()=>{}}}function Vt(o){try{const P=Kt(Et+(K&&K.CSS?K.CSS:""));typeof o.effect=="function"&&typeof P=="function"&&o.effect(()=>P)}catch(P){console.error("[metaphysics] 样式注入失败",P)}let r=null;try{r=o&&o.slots||(o&&typeof o.get=="function"?o.get("slots"):null)}catch(P){console.error("[metaphysics] 取 slots 服务失败",P)}if(!r||typeof r.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ee.injectType=typeof r.inject;const P=typeof r.spec=="function"?r.spec("conversation.input.right"):null;ee.spec=P?P.kind+"/"+P.scope:"未声明"}catch(P){ee.spec="取声明失败",st(P)}const F=(P,ge)=>{try{const re=r.register(P,ge);return ee.regs+=1,re}catch(re){return st(re),null}},U=(P,ge)=>{try{typeof r.inject=="function"?r.inject(P,ge):ge()}catch(re){console.error("[metaphysics] 等待槽位失败:"+P,re);try{ge()}catch(fe){console.error("[metaphysics] 直接注册也失败:"+P,fe)}}};U("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},Ot)),U("main",()=>F({name:"main",key:"metaphysics"},P=>s(Rt,null,s(Yt,P))));const J=(P,ge)=>{const re=()=>{try{r.inject(P,ge)}catch(fe){console.error("[metaphysics] 槽位注册失败:"+P,fe);try{ge()}catch(De){console.error("[metaphysics] 直接注册也失败:"+P,De)}}};try{typeof o.effect=="function"?o.effect(re,"metaphysics: "+P):re()}catch(fe){console.error("[metaphysics] effect 包裹失败:"+P,fe),re()}};J("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},pt)),J("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},rt));let oe=0;const ne=()=>{if(ee.ref)return;oe+=1;const P="-"+oe;F({name:"conversation.input.right",id:"metaphysics-ask"+P,order:40},pt),F({name:"conversation.composer.dock",id:"metaphysics-dock"+P,order:60},rt)};let pe=20;const t=()=>{ee.ref||pe<=0||(pe-=1,ne(),setTimeout(t,700))};try{setTimeout(t,700)}catch{}try{document.addEventListener("pointerdown",()=>ne(),{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(o){try{Vt(o)}catch(r){console.error("[metaphysics] apply 异常",r)}}}}});