dsh-metaphysics 0.72.2 → 0.74.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.72.2",factory(mt){const Xa=(function(){try{return mt("react")}catch{return globalThis.React}})();if(!Xa)return{inject:[],apply(){}};const r=Xa.createElement,ni={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js",constitution:"client.constitution.js",wuyunliuqi:"client.wuyunliuqi.js",taiyi:"client.taiyi.js"},si=[{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.72.2",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次问事"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",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:"constitution",label:"体质",tip:"九种体质"},{k:"chenggu",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:"wuyunliuqi",label:"运气",tip:"一年大势"},{k:"taiyi",label:"太乙",tip:"积年推局"},{k:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]}],window.__MP_UNRELEASED=[];const X={};X.DIRECTIONS=si,X.compute=()=>{throw new Error("命理引擎尚未加载")};const oi=Object.create(null),_t=Object.create(null);function on(n){return ni[n]||ni.bazi||"client.chart.js"}const pi=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function pn(n){const s=on(n);let S=oi[s];const F=!!S,ee=pi();if(!S){if(!mt||typeof mt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let se=_t[s];se||(se=mt.async(`./${s}`).then(le=>{const re=le&&(le.Engine||le.default);if(!re||typeof re.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return oi[s]=re,re}),_t[s]=se,se.catch(()=>{}).then(()=>{delete _t[s]})),S=await se}for(const se of Object.keys(S))S[se]!==void 0&&(X[se]=S[se]);return Array.isArray(X.DIRECTIONS)||(X.DIRECTIONS=si),window.Engine=X,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:F,ms:Math.round((pi()-ee)*10)/10},X}window.__mpEnsureEngine=pn,window.Engine=X,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=Z=>!!n[Z],S={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},F=Z=>S[Z]||"other",ee="#ffffff",se="#1c1a15";function le(Z){const K=String(Z??"").match(/rgba?\(([^)]+)\)/i);if(!K)return null;const V=K[1].split(/[,\s/]+/).filter(Boolean).map(Number);return V.length<3||V.slice(0,3).some(G=>!Number.isFinite(G))||V.length>3&&Number.isFinite(V[3])&&V[3]<.95?null:[V[0],V[1],V[2]]}function re(Z){const K=String(Z||"").replace("#",""),V=K.length===3?K.split("").map(G=>G+G).join(""):K;return/^[0-9a-f]{6}$/i.test(V)?[0,2,4].map(G=>parseInt(V.slice(G,G+2),16)):null}function ye(Z){const K=V=>{const G=V/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*K(Z[0])+.7152*K(Z[1])+.0722*K(Z[2])}function t(Z,K){const V=ye(Z),G=ye(K),te=Math.max(V,G),Ne=Math.min(V,G);return(te+.05)/(Ne+.05)}function $e(Z){const K=typeof Z=="string"?le(Z):Z;return K?t(K,re(ee))>=t(K,re(se))?ee:se:""}function I(Z){const K=String(Z??"").trim();if(!K)return{lines:null,warning:""};const V=K.split(/[^0-9]+/).filter(Boolean).map(Number),G=V.filter(te=>![6,7,8,9].includes(te));return V.length===6&&G.length===0?{lines:V,warning:""}:{lines:null,warning:V.length!==6?`爻值需要正好 6 个数字(当前 ${V.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(Z){const K=String(Z??"").trim();if(!K)return null;const V=Number(K);return Number.isFinite(V)?V:null}function we(Z){const K=Z instanceof Date?Z:new Date,V=G=>String(G).padStart(2,"0");return`${K.getFullYear()}-${V(K.getMonth()+1)}-${V(K.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:I,toNumber:xe,parseRGB:le,hexToRGB:re,luminance:ye,contrastRatio:t,pickOnColor:$e,ON_DARK:ee,ON_LIGHT:se,kindOfDirection:F,todayStamp:we}})(),(function(){const n=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.74.0",factory(dt){const Ja=(function(){try{return dt("react")}catch{return globalThis.React}})();if(!Ja)return{inject:[],apply(){}};const r=Ja.createElement,ii={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js",constitution:"client.constitution.js",wuyunliuqi:"client.wuyunliuqi.js",taiyi:"client.taiyi.js"},ni=[{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.74.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次问事"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",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:"constitution",label:"体质",tip:"九种体质"},{k:"chenggu",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:"wuyunliuqi",label:"运气",tip:"一年大势"},{k:"taiyi",label:"太乙",tip:"积年推局"},{k:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]}],window.__MP_UNRELEASED=[];const X={};X.DIRECTIONS=ni,X.compute=()=>{throw new Error("命理引擎尚未加载")};const si=Object.create(null),Et=Object.create(null);function on(n){return ii[n]||ii.bazi||"client.chart.js"}const oi=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function pn(n){const s=on(n);let S=si[s];const F=!!S,ee=oi();if(!S){if(!dt||typeof dt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let se=Et[s];se||(se=dt.async(`./${s}`).then(le=>{const re=le&&(le.Engine||le.default);if(!re||typeof re.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return si[s]=re,re}),Et[s]=se,se.catch(()=>{}).then(()=>{delete Et[s]})),S=await se}for(const se of Object.keys(S))S[se]!==void 0&&(X[se]=S[se]);return Array.isArray(X.DIRECTIONS)||(X.DIRECTIONS=ni),window.Engine=X,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:F,ms:Math.round((oi()-ee)*10)/10},X}window.__mpEnsureEngine=pn,window.Engine=X,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=Z=>!!n[Z],S={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},F=Z=>S[Z]||"other",ee="#ffffff",se="#1c1a15";function le(Z){const K=String(Z??"").match(/rgba?\(([^)]+)\)/i);if(!K)return null;const V=K[1].split(/[,\s/]+/).filter(Boolean).map(Number);return V.length<3||V.slice(0,3).some(G=>!Number.isFinite(G))||V.length>3&&Number.isFinite(V[3])&&V[3]<.95?null:[V[0],V[1],V[2]]}function re(Z){const K=String(Z||"").replace("#",""),V=K.length===3?K.split("").map(G=>G+G).join(""):K;return/^[0-9a-f]{6}$/i.test(V)?[0,2,4].map(G=>parseInt(V.slice(G,G+2),16)):null}function ve(Z){const K=V=>{const G=V/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*K(Z[0])+.7152*K(Z[1])+.0722*K(Z[2])}function t(Z,K){const V=ve(Z),G=ve(K),te=Math.max(V,G),Me=Math.min(V,G);return(te+.05)/(Me+.05)}function $e(Z){const K=typeof Z=="string"?le(Z):Z;return K?t(K,re(ee))>=t(K,re(se))?ee:se:""}function I(Z){const K=String(Z??"").trim();if(!K)return{lines:null,warning:""};const V=K.split(/[^0-9]+/).filter(Boolean).map(Number),G=V.filter(te=>![6,7,8,9].includes(te));return V.length===6&&G.length===0?{lines:V,warning:""}:{lines:null,warning:V.length!==6?`爻值需要正好 6 个数字(当前 ${V.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(Z){const K=String(Z??"").trim();if(!K)return null;const V=Number(K);return Number.isFinite(V)?V:null}function we(Z){const K=Z instanceof Date?Z:new Date,V=G=>String(G).padStart(2,"0");return`${K.getFullYear()}-${V(K.getMonth()+1)}-${V(K.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:I,toNumber:xe,parseRGB:le,hexToRGB:re,luminance:ve,contrastRatio:t,pickOnColor:$e,ON_DARK:ee,ON_LIGHT:se,kindOfDirection:F,todayStamp:we}})(),(function(){const n=`
2
2
  .pp,.mp-it,.mp-al,.mp-cg,.mp-cl,.mp-cli,.mp-kline,.mp-mb,.mp-mb-paper,.mp-nm,.mp-quick,.mp-cdiff,.mp-shadow,.mp-trace-card,.mp-trace-layer,.mp-prof{--ink:#1b1b1b;--ink2:#3f3a33;--muted:#6f6a60;--label:#8a8378;--faint:#a9a296;
3
3
  --line:#c8c1b2;--dimline:#b9b2a4;--hair:#e9e2d3;
4
4
  /* 底色略沉作「桌面」,--card 跳到近白:原先 bg 与 card 只差 1/255,卡片感等于零。
@@ -167,7 +167,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
167
167
  #ppm-ben:checked~.pp-modes label[for="ppm-ben"],#ppm-da:checked~.pp-modes label[for="ppm-da"],#ppm-ln:checked~.pp-modes label[for="ppm-ln"]{background:var(--red);color:var(--on-accent)}
168
168
  .pp-tri{background:var(--tri)}
169
169
  .pp-soul{background:var(--soul)}
170
- /* 三视图切换(学文墨天机:飞星/三合/四化)——真分派,不是同一张盘的显隐开关:
170
+ /* 三视图切换(三视图:飞星/三合/四化)——真分派,不是同一张盘的显隐开关:
171
171
  四化派(默认):生年四化实心 + 大限/流年空心 + 自化 + 飞星链 chips;
172
172
  飞星派:每宫格内显示「宫干四化飞出」逐条(禄→某宫…),图例藏大限/流年四化;
173
173
  三合派:只看星曜庙旺与宫位结构,所有四化徽章(含生年)、自化、飞星链全部藏起。 */
@@ -200,7 +200,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
200
200
  #ppm-sc-sanhe:checked~.pp-body .pp-zha,
201
201
  #ppm-sc-sanhe:checked~.pp-body .pp-viewhua,
202
202
  #ppm-sc-sanhe:checked~.pp-flywrap{display:none}
203
- /* 自化箭头(学文墨天机):自化是「宫干化回本宫」,箭头画在星名左边、箭头尖顶住星名,
203
+ /* 自化箭头:自化是「宫干化回本宫」,箭头画在星名左边、箭头尖顶住星名,
204
204
  由左向右弧着落回这颗星——读成「这笔化飞出去又落回自己」。
205
205
  为什么必须放星名左边:放右边箭头就朝外,视觉上成了「从本宫飞出去」,意思正好反了。
206
206
  为什么 inline 在星名旁而不是绝对定位:宫格左侧会被满星曜的宫撞上(实测压住「紫微 庙」)。 */
@@ -212,7 +212,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
212
212
  .pp-zha.ke{color:var(--ke)}.pp-zha.ji{color:var(--ji)}
213
213
  #ppm-sc-sihe:checked~.pp-flywrap{display:block}
214
214
  #ppm-sc-feixing:checked~.pp-flywrap{display:block}
215
- /* 自化图示(文墨式图例行):箭头颜色跟四化色走 */
215
+ /* 自化图例行:箭头颜色跟四化色走 */
216
216
  .pp-zhlegend{display:flex;gap:10px;align-items:center;justify-content:center;font-size:12px;color:var(--muted);margin-top:4px}
217
217
  .pp-zhlegend i{font-style:normal;font-weight:600}
218
218
  .pp-zhlegend .z-lu{color:var(--lu)}.pp-zhlegend .z-quan{color:var(--quan)}
@@ -1516,7 +1516,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1516
1516
  /* 结果卡阴影分层:默认最轻,hover 时浮起一档(只对可交互的卡,避免整页抖动) */
1517
1517
  .pp{transition:box-shadow var(--dur) var(--ease)}
1518
1518
 
1519
- /* —— 文墨式「显示设置」14 项(学文墨天机 group_fxp / group_4hb / group_3hp)——
1519
+ /* —— 「显示设置」分组(group_fxp / group_4hb / group_3hp)——
1520
1520
  纯 CSS 显隐:勾了盘面立刻变,不重排盘、不进引擎、不进工具 schema。
1521
1521
  复选框必须是 .pp 的直接子元素,才能用 ~ 命中后面的 .pp-body / .pp-zhlegend。
1522
1522
  组1/组2 默认勾(:not(:checked) 才隐藏),组3 默认不勾(:checked 才增强,默认盘观感不变)。 */
@@ -1573,12 +1573,12 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1573
1573
  #ppm-d-bad-ink:checked~.pp-body .pp-st.bad{color:var(--ink)}
1574
1574
  #ppm-d-bad-ink:checked~.pp-body .pp-st.bad::before{content:none}
1575
1575
  #ppm-d-bold:checked~.pp-body .pp-st.main,#ppm-d-bold:checked~.pp-body .pp-st.good{font-weight:700}
1576
- `,s=window.__PP=window.__PP||{};s.CSS=n;const S={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},F={禄:"lu",权:"quan",科:"ke",忌:"ji"},ee=new Set(["三台","八座","恩光","天贵"]),se={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},le={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},re={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},ye=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),$e=(e,i,o)=>{const f=Math.round(43),b=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${f}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${f+18}" y="${2.5}" width="${104-f-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${o?" "+o:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${b}</svg>`},I={木:"M6 1.6V10.8M6 5.2 2.6 2.2M6 7.4 9.4 4.4",火:"M6 1.4C7.6 3.6 9.2 5.4 9.2 7.6A3.2 3.2 0 0 1 2.8 7.6C2.8 5.4 4.4 3.6 6 1.4Z",土:"M1.6 9.6h8.8M6 2.4v7.2M3.4 5.6h5.2",金:"M6 1.2 10.6 6 6 10.8 1.4 6Z",水:"M1.4 7.2C2.9 4.2 4.5 10.2 6 7.2 7.5 4.2 9.1 10.2 10.6 7.2"},xe=e=>{const i=I[e];return i?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${i}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},we=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(re[e]||[0,0,0]).slice().reverse().map((l,p)=>{const c=p*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=$e,s._wxIcon=xe,s._triGlyph=we;function Z(e,i,o){return!e||!e.length?"":e.map(l=>{const p=S[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${F[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${F[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${se[l.brightness]||"mid"}">${l.brightness}</em>`:"",f=l.inTemple?'<em class="pp-b good">庙</em>':"",b=o&&o[l.name]?ha(o[l.name],l.name):"",w=ee.has(l.name)?" st-sbg":"";return`<span class="pp-st ${p}${w}">${b}${l.name}${m}${f}${c}${u}</span>`}).join("")}function K(e){const i=[];for(let o=0;o<6;o++)i.push(e+o*12);return i.join(",")}const V=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],G=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],te=e=>(e%12+12)%12,Ne=(e,i)=>e!==i&&[te(i+4),te(i+8),te(i+6)].includes(e);function Le(e,i,o,l,p,c,d,u){const m=le[e.branch]||[1,1],f=G.indexOf(e.branch),b=["pp-cell"];f===i?b.push("pp-soul"):Ne(f,i)&&b.push("pp-tri"),e.isBody&&b.push("pp-shen"),u&&e.branch===u&&b.push("pp-laiyin"),m[0]===4&&b.push("pp-lastrow"),m[1]===4&&b.push("pp-lastcol");const w=e.shensha||{},$=V[te(i-f)];let A="";if(f===i&&l){const L=_=>(S[_.type]||"")==="main";if(!(e.stars||[]).some(L)){const _=l.find(D=>G.indexOf(D.branch)===te(f+6)),Q=_?(_.stars||[]).filter(L):[];Q.length&&(A=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${Q.map(D=>D.name).join(" ")}</div>`)}}return`<div class="${b.join(" ")}" data-pi="${f}" data-view="${o}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
1577
- <div class="pp-stars">${Z(e.stars,p,Ue(e))}</div>
1576
+ `,s=window.__PP=window.__PP||{};s.CSS=n;const S={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},F={禄:"lu",权:"quan",科:"ke",忌:"ji"},ee=new Set(["三台","八座","恩光","天贵"]),se={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},le={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},re={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},ve=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),$e=(e,i,o)=>{const f=Math.round(43),b=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${f}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${f+18}" y="${2.5}" width="${104-f-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${o?" "+o:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${b}</svg>`},I={木:"M6 1.6V10.8M6 5.2 2.6 2.2M6 7.4 9.4 4.4",火:"M6 1.4C7.6 3.6 9.2 5.4 9.2 7.6A3.2 3.2 0 0 1 2.8 7.6C2.8 5.4 4.4 3.6 6 1.4Z",土:"M1.6 9.6h8.8M6 2.4v7.2M3.4 5.6h5.2",金:"M6 1.2 10.6 6 6 10.8 1.4 6Z",水:"M1.4 7.2C2.9 4.2 4.5 10.2 6 7.2 7.5 4.2 9.1 10.2 10.6 7.2"},xe=e=>{const i=I[e];return i?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${i}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},we=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(re[e]||[0,0,0]).slice().reverse().map((l,p)=>{const c=p*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=$e,s._wxIcon=xe,s._triGlyph=we;function Z(e,i,o){return!e||!e.length?"":e.map(l=>{const p=S[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${F[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${F[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${se[l.brightness]||"mid"}">${l.brightness}</em>`:"",f=l.inTemple?'<em class="pp-b good">庙</em>':"",b=o&&o[l.name]?ga(o[l.name],l.name):"",w=ee.has(l.name)?" st-sbg":"";return`<span class="pp-st ${p}${w}">${b}${l.name}${m}${f}${c}${u}</span>`}).join("")}function K(e){const i=[];for(let o=0;o<6;o++)i.push(e+o*12);return i.join(",")}const V=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],G=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],te=e=>(e%12+12)%12,Me=(e,i)=>e!==i&&[te(i+4),te(i+8),te(i+6)].includes(e);function Le(e,i,o,l,p,c,d,u){const m=le[e.branch]||[1,1],f=G.indexOf(e.branch),b=["pp-cell"];f===i?b.push("pp-soul"):Me(f,i)&&b.push("pp-tri"),e.isBody&&b.push("pp-shen"),u&&e.branch===u&&b.push("pp-laiyin"),m[0]===4&&b.push("pp-lastrow"),m[1]===4&&b.push("pp-lastcol");const w=e.shensha||{},$=V[te(i-f)];let A="";if(f===i&&l){const L=_=>(S[_.type]||"")==="main";if(!(e.stars||[]).some(L)){const _=l.find(D=>G.indexOf(D.branch)===te(f+6)),Q=_?(_.stars||[]).filter(L):[];Q.length&&(A=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${Q.map(D=>D.name).join(" ")}</div>`)}}return`<div class="${b.join(" ")}" data-pi="${f}" data-view="${o}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
1577
+ <div class="pp-stars">${Z(e.stars,p,Ze(e))}</div>
1578
1578
  ${A}
1579
1579
  <div class="pp-ages">${K(e.xiaoxian.age)}</div>
1580
- ${xt(e,c)}
1581
- ${Ta(e,d)}
1580
+ ${ht(e,c)}
1581
+ ${La(e,d)}
1582
1582
  <div class="pp-foot">
1583
1583
  <div class="ft-l">
1584
1584
  <span class="ft-dx"><span class="pp-ss-txt">${w.boshi}</span> ${e.daxian.start}-${e.daxian.end}</span>
@@ -1591,14 +1591,14 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1591
1591
  <span class="ft-pn">${$}</span>
1592
1592
  </div>
1593
1593
  </div>
1594
- </div>`}function ha(e,i){return`<span class="pp-zha ${F[e]}" title="自化${t(e)}:${t(i)}·宫干化回本宫"><svg class="z-a" viewBox="0 0 22 9" role="img" aria-label="自化${t(e)}">
1594
+ </div>`}function ga(e,i){return`<span class="pp-zha ${F[e]}" title="自化${t(e)}:${t(i)}·宫干化回本宫"><svg class="z-a" viewBox="0 0 22 9" role="img" aria-label="自化${t(e)}">
1595
1595
  <path class="z-shaft" d="M1 7C6.6 7 11.4 5.6 17.2 3.2"/>
1596
1596
  <path class="z-head" d="M20.2 2 17.8 4.9 16.6 1.9Z"/>
1597
- </svg></span>`}s._zhaMark=ha;function Ue(e){const i={};for(const o of e.selfHua||[])!o||!o.star||!F[o.type]||i[o.star]||(i[o.star]=o.type);return i}function xt(e,i){const o=i&&i[e.branch]||[];if(!o.length)return"";const l=o.map(p=>`<i class="${F[p.type]||""}" title="${t(p.star)}化${t(p.type)}">${t(p.type)}<em>→${t(p.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function Ta(e,i){const o=i&&i[e.branch]||null;return o?`<div class="pp-hs">${Object.entries(o).map(([p,c])=>`<i>${t(p)}<em>${t(c)}</em></i>`).join("")}</div>`:""}function Wa(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const o=i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1});return["year","month","day","hour"].map(l=>o.pillars[l].ganzhi).join(" ")}catch{return""}}function Ea(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;return!i||!i.buildBazi||!e.input?null:i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1}).pillars.day.stem}catch{return null}}s.ziweiHTML=function(e){const i=G.indexOf(e.soul.branch),o=e.liunian&&e.liunian[0]||null,l=o?o.age:1,p=e.palaces.find(k=>l>=k.daxian.start&&l<=k.daxian.end)||e.palaces[0],c=G.indexOf(p.branch),d=o?G.indexOf(o.lifePalace.branch):i,u=k=>{const C={};for(const O of k||[])O&&O.star&&(C[O.star]=O.type);return C},m=(e.daxianList||[]).find(k=>k.branch===p.branch)||null,f={da:u(m&&m.mutagenHits),ln:u(o&&o.mutagenHits)},b={};for(const k of e.daxianList||[])b[k.branch]=k.mutagenHits||[];const w=(()=>{const k=Ea(e);if(!k)return null;const C=(e.daxianList||[]).find(oe=>oe.stem===k);if(!C)return null;const O={};for(const oe of e.palaces)for(const ge of oe.stars||[])ge.name in O||(O[ge.name]=oe.branch);return{stem:k,items:(C.mutagenHits||[]).map(oe=>({type:oe.type,star:oe.star,branch:O[oe.star]||null,palace:O[oe.star]?(e.palaces.find(ge=>ge.branch===O[oe.star])||{}).palace:null}))}})();let $=null;if(o){$={};for(const[k,C]of Object.entries(o))/^(流|年解)/.test(k)&&typeof C=="string"&&G.includes(C)&&($[C]=$[C]||{},$[C][k]=C)}const A={da:m&&m.yunStars?(()=>{const k={};for(const[C,O]of Object.entries(m.yunStars))(k[O]=k[O]||{})[C]=O;if(m.yunSuiqi)for(const[C,O]of Object.entries(m.yunSuiqi))(k[O]=k[O]||{})[C]=O;if(m.yunJiangqian)for(const[C,O]of Object.entries(m.yunJiangqian))(k[O]=k[O]||{})[C]=O;return k})():null,ln:$};if(e.liunian&&e.liunian.length){const k=e.liunian.find(C=>C.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(k.lnSuiqi)for(const[C,O]of Object.entries(k.lnSuiqi))($[O]=$[O]||{})[C]=O;if(k.lnJiangqian)for(const[C,O]of Object.entries(k.lnJiangqian))($[O]=$[O]||{})[C]=O}const L=(k,C)=>e.palaces.map(O=>Le(O,k,C,e.palaces,f[C]||null,b,A[C]||null,e.laiyin&&e.laiyin.branch)).join(""),_=(k,C)=>`<div class="pp-center">
1597
+ </svg></span>`}s._zhaMark=ga;function Ze(e){const i={};for(const o of e.selfHua||[])!o||!o.star||!F[o.type]||i[o.star]||(i[o.star]=o.type);return i}function ht(e,i){const o=i&&i[e.branch]||[];if(!o.length)return"";const l=o.map(p=>`<i class="${F[p.type]||""}" title="${t(p.star)}化${t(p.type)}">${t(p.type)}<em>→${t(p.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function La(e,i){const o=i&&i[e.branch]||null;return o?`<div class="pp-hs">${Object.entries(o).map(([p,c])=>`<i>${t(p)}<em>${t(c)}</em></i>`).join("")}</div>`:""}function Va(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const o=i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1});return["year","month","day","hour"].map(l=>o.pillars[l].ganzhi).join(" ")}catch{return""}}function Ta(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;return!i||!i.buildBazi||!e.input?null:i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1}).pillars.day.stem}catch{return null}}s.ziweiHTML=function(e){const i=G.indexOf(e.soul.branch),o=e.liunian&&e.liunian[0]||null,l=o?o.age:1,p=e.palaces.find(k=>l>=k.daxian.start&&l<=k.daxian.end)||e.palaces[0],c=G.indexOf(p.branch),d=o?G.indexOf(o.lifePalace.branch):i,u=k=>{const C={};for(const O of k||[])O&&O.star&&(C[O.star]=O.type);return C},m=(e.daxianList||[]).find(k=>k.branch===p.branch)||null,f={da:u(m&&m.mutagenHits),ln:u(o&&o.mutagenHits)},b={};for(const k of e.daxianList||[])b[k.branch]=k.mutagenHits||[];const w=(()=>{const k=Ta(e);if(!k)return null;const C=(e.daxianList||[]).find(oe=>oe.stem===k);if(!C)return null;const O={};for(const oe of e.palaces)for(const ge of oe.stars||[])ge.name in O||(O[ge.name]=oe.branch);return{stem:k,items:(C.mutagenHits||[]).map(oe=>({type:oe.type,star:oe.star,branch:O[oe.star]||null,palace:O[oe.star]?(e.palaces.find(ge=>ge.branch===O[oe.star])||{}).palace:null}))}})();let $=null;if(o){$={};for(const[k,C]of Object.entries(o))/^(流|年解)/.test(k)&&typeof C=="string"&&G.includes(C)&&($[C]=$[C]||{},$[C][k]=C)}const A={da:m&&m.yunStars?(()=>{const k={};for(const[C,O]of Object.entries(m.yunStars))(k[O]=k[O]||{})[C]=O;if(m.yunSuiqi)for(const[C,O]of Object.entries(m.yunSuiqi))(k[O]=k[O]||{})[C]=O;if(m.yunJiangqian)for(const[C,O]of Object.entries(m.yunJiangqian))(k[O]=k[O]||{})[C]=O;return k})():null,ln:$};if(e.liunian&&e.liunian.length){const k=e.liunian.find(C=>C.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(k.lnSuiqi)for(const[C,O]of Object.entries(k.lnSuiqi))($[O]=$[O]||{})[C]=O;if(k.lnJiangqian)for(const[C,O]of Object.entries(k.lnJiangqian))($[O]=$[O]||{})[C]=O}const L=(k,C)=>e.palaces.map(O=>Le(O,k,C,e.palaces,f[C]||null,b,A[C]||null,e.laiyin&&e.laiyin.branch)).join(""),_=(k,C)=>`<div class="pp-center">
1598
1598
  ${C==="da"?`<div class="ct-t1">大限 ${p.ganzhi} ${p.daxian.start}-${p.daxian.end}岁</div>`:C==="ln"&&o?`<div class="ct-t1">流年 ${o.ganzhi} ${o.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1599
1599
  <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>
1600
1600
  <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>
1601
- ${Wa(e)?`<div class="ct-t3">${Wa(e)}</div>`:""}
1601
+ ${Va(e)?`<div class="ct-t3">${Va(e)}</div>`:""}
1602
1602
  ${e.nonJieqi?`<div class="ct-t3 ct-t3nj" title="${t(e.nonJieqi.note)}">${e.nonJieqi.year} ${e.nonJieqi.month} ${e.nonJieqi.day} ${e.nonJieqi.hour}<em class="nj-tag">非节气</em></div>`:""}
1603
1603
  <div class="ct-t4">命主 ${e.lifeMaster}${e.lifeMasterNote?`<span class="pp-dim" title="${t(e.lifeMasterNote)}">*</span>`:""} 身主 ${e.bodyMaster}${e.bodyMasterNote?`<span class="pp-dim" title="${t(e.bodyMasterNote)}">*</span>`:""}</div>
1604
1604
  <div class="ct-t4">命宫 ${e.soul.branch} 身宫 ${e.body.branch} 五行局 ${e.bureau.name}</div>
@@ -1628,7 +1628,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1628
1628
  <input type="radio" name="ppm-sc" id="ppm-sc-sihe" class="pp-r" checked>
1629
1629
  <input type="radio" name="ppm-sc" id="ppm-sc-feixing" class="pp-r">
1630
1630
  <input type="radio" name="ppm-sc" id="ppm-sc-sanhe" class="pp-r">
1631
- <!-- 文墨式显示设置:14 个复选框必须与 .pp-body / .pp-zhlegend 同层(.pp 的直接子元素)。
1631
+ <!-- 显示设置:14 个复选框必须与 .pp-body / .pp-zhlegend 同层(.pp 的直接子元素)。
1632
1632
  组1/组2 默认勾(观感与旧版一致),组3 默认不勾(纯增强)。不重排盘、不进引擎。 -->
1633
1633
  <input type="checkbox" id="ppm-d-ss" class="pp-r" checked>
1634
1634
  <input type="checkbox" id="ppm-d-sbg" class="pp-r" checked>
@@ -1648,7 +1648,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1648
1648
  <input type="checkbox" id="ppm-d-njq" class="pp-r">
1649
1649
  <input type="checkbox" id="ppm-d-tjz" class="pp-r">
1650
1650
  <details class="pp-disp">
1651
- <summary>显示设置 · 17 项(学文墨天机)</summary>
1651
+ <summary>显示设置 · 17 项</summary>
1652
1652
  <div class="pp-disp-g"><span>飞星派显示</span>
1653
1653
  <label for="ppm-d-ss"><i class="pp-disp-box"></i>显示神煞</label>
1654
1654
  <label for="ppm-d-sbg"><i class="pp-disp-box"></i>三台八座恩光天贵</label>
@@ -1686,7 +1686,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1686
1686
  ${(()=>{if(!w)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},C=w.items.map(O=>`<i><em class="${k[O.type]||""}">${O.type}</em>${t(O.star)}<em>${t(O.branch||"?")}${O.palace?`·${t(O.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(w.stem)}四化</b>${C}</div>`})()} ${(()=>{if(!w)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},C=w.items.map(O=>`<i><em class="${k[O.type]||""}">${O.type}</em>${t(O.star)}<em>${t(O.branch||"?")}${O.palace?`·${t(O.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(w.stem)}四化</b>${C}</div>`})()}
1687
1687
  <div class="pp-zhlegend">自化图示 <span class="z-lu">${s._zhaMark("禄","本宫")}禄</span><span class="z-quan">${s._zhaMark("权","本宫")}权</span><span class="z-ke">${s._zhaMark("科","本宫")}科</span><span class="z-ji">${s._zhaMark("忌","本宫")}忌</span></div>
1688
1688
  <div class="pp-flywrap">${he}${W}</div>
1689
- </div>${j}${T}${H}${pe}${M}${y}`};function ba(e){return e.length?e.map(i=>{const o=S[i.type]||"aux",l=i.brightness?`<em class="dt-br ${se[i.brightness]||"mid"}">${i.brightness}</em>`:"",p=i.inTemple?'<em class="dt-br good">庙</em>':"",c=i.mutagen?`<i class="pp-m ${F[i.mutagen]}">${i.mutagen}</i>`:"";return`<span class="dt-st ${o}">${i.name}${l}${p}${c}</span>`}).join(""):'<span class="dt-empty">无</span>'}function xa(e,i){const o=s._zw;if(!o)return"";const l=M=>o.palaces.find(B=>G.indexOf(B.branch)===M),p=l(e)||o.palaces.find(M=>G.indexOf(M.branch)===e);if(!p)return"";const c=G.indexOf(p.branch),d=V[te(i-c)],u=p.shensha||{},m=p.stars.filter(M=>M.type==="主星"),f=p.stars.filter(M=>M.type==="吉星"||M.type==="辅星"),b=p.stars.filter(M=>M.type==="煞星"),w=p.stars.filter(M=>!["主星","吉星","辅星","煞星"].includes(M.type)),$=(p.selfHua||[]).length?p.selfHua.map(M=>`<span class="dt-self">${ha(M.type,M.star||"本宫")}${t(M.star||"")}</span>`).join(""):'<span class="dt-empty">无</span>',A=[te(c+4),te(c+8),te(c+6)].map(M=>{const B=l(M),y=V[te(i-M)],he=B?B.stars.filter(ie=>ie.type==="主星").map(ie=>ie.name).join("、"):"",W=M===te(c+6)?"对宫":"三合";return`<span class="dt-st">${y}[${G[M]}]<b>${he||"无主星"}</b><em>${W}</em></span>`}).join(""),L=l(te(c+6)),_=L?L.stars.filter(M=>M.type==="主星"):[],Q=m.length?ba(m):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${_.length?_.map(M=>M.name).join("、"):"亦无主星"}</b></span>`,D=(M,B)=>`<div class="dt-dr"><span class="dt-k">${M}</span><div class="dt-v">${B}</div></div>`,T=V.length,H=te(i-c),pe=V.map((M,B)=>{const y=te(c+(B-H+T)%T);return`<span class="dt-st">${V[B]}[${G[y]}]</span>`}).join("");return`<div class="dt-dh">
1689
+ </div>${j}${T}${H}${pe}${M}${y}`};function fa(e){return e.length?e.map(i=>{const o=S[i.type]||"aux",l=i.brightness?`<em class="dt-br ${se[i.brightness]||"mid"}">${i.brightness}</em>`:"",p=i.inTemple?'<em class="dt-br good">庙</em>':"",c=i.mutagen?`<i class="pp-m ${F[i.mutagen]}">${i.mutagen}</i>`:"";return`<span class="dt-st ${o}">${i.name}${l}${p}${c}</span>`}).join(""):'<span class="dt-empty">无</span>'}function ha(e,i){const o=s._zw;if(!o)return"";const l=M=>o.palaces.find(B=>G.indexOf(B.branch)===M),p=l(e)||o.palaces.find(M=>G.indexOf(M.branch)===e);if(!p)return"";const c=G.indexOf(p.branch),d=V[te(i-c)],u=p.shensha||{},m=p.stars.filter(M=>M.type==="主星"),f=p.stars.filter(M=>M.type==="吉星"||M.type==="辅星"),b=p.stars.filter(M=>M.type==="煞星"),w=p.stars.filter(M=>!["主星","吉星","辅星","煞星"].includes(M.type)),$=(p.selfHua||[]).length?p.selfHua.map(M=>`<span class="dt-self">${ga(M.type,M.star||"本宫")}${t(M.star||"")}</span>`).join(""):'<span class="dt-empty">无</span>',A=[te(c+4),te(c+8),te(c+6)].map(M=>{const B=l(M),y=V[te(i-M)],he=B?B.stars.filter(ie=>ie.type==="主星").map(ie=>ie.name).join("、"):"",W=M===te(c+6)?"对宫":"三合";return`<span class="dt-st">${y}[${G[M]}]<b>${he||"无主星"}</b><em>${W}</em></span>`}).join(""),L=l(te(c+6)),_=L?L.stars.filter(M=>M.type==="主星"):[],Q=m.length?fa(m):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${_.length?_.map(M=>M.name).join("、"):"亦无主星"}</b></span>`,D=(M,B)=>`<div class="dt-dr"><span class="dt-k">${M}</span><div class="dt-v">${B}</div></div>`,T=V.length,H=te(i-c),pe=V.map((M,B)=>{const y=te(c+(B-H+T)%T);return`<span class="dt-st">${V[B]}[${G[y]}]</span>`}).join("");return`<div class="dt-dh">
1690
1690
  <b>${d}</b><span>${p.branch}宫 · ${p.ganzhi}</span>
1691
1691
  <span>大限 ${p.daxian.start}-${p.daxian.end}</span>
1692
1692
  <span>小限起 ${p.xiaoxian.age} 岁</span>
@@ -1694,26 +1694,26 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1694
1694
  <span class="dt-x" data-pp-close="1">收起</span>
1695
1695
  </div>
1696
1696
  ${D("主星",Q)}
1697
- ${D("吉辅",ba(f))}
1698
- ${b.length?D("煞星",ba(b)):""}
1699
- ${w.length?D("杂曜",ba(w)):""}
1697
+ ${D("吉辅",fa(f))}
1698
+ ${b.length?D("煞星",fa(b)):""}
1699
+ ${w.length?D("杂曜",fa(w)):""}
1700
1700
  ${D("宫干四化",$)}
1701
1701
  ${D("十二神",`<span class="dt-tri">长生 ${u.changsheng||"—"} 博士 ${u.boshi||"—"} 将前 ${u.jiangqian||"—"} 岁前 ${u.suiqi||"—"}</span>`)}
1702
1702
  ${D("三方四正",`<span class="dt-tri">${A}</span>`)}
1703
1703
  ${D("太极转换",`<span class="dt-tri dt-taiji">以${d}[${p.branch}]立太极${pe}</span>`)}
1704
- <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function _a(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(i=>{i.classList.remove("pp-sel"),i.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(i=>i.setAttribute("aria-expanded","false"))}const Oa={};function vt(e,i){oa(e);const o=e.querySelector(".pp-grid");if(!o)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],p=m=>{const f=e.querySelector('.pp-cell[data-pi="'+m+'"]');if(!f)return null;const b=Number(f.style.gridRow),w=Number(f.style.gridColumn),$=Math.min(75,Math.max(25,(b-.5)*25));return w===1?[25,$]:[75,$]},c=l.map(p);if(c.some(m=>!m))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const u=(m,f,b,w)=>{const $=document.createElementNS("http://www.w3.org/2000/svg","line");$.setAttribute("x1",m),$.setAttribute("y1",f),$.setAttribute("x2",b),$.setAttribute("y2",w),d.appendChild($)};u(c[0][0],c[0][1],c[1][0],c[1][1]),u(c[1][0],c[1][1],c[2][0],c[2][1]),u(c[2][0],c[2][1],c[3][0],c[3][1]),u(c[3][0],c[3][1],c[0][0],c[0][1]);for(let m=0;m<4;m++){const f=document.createElementNS("http://www.w3.org/2000/svg","circle");f.setAttribute("cx",c[m][0]),f.setAttribute("cy",c[m][1]),f.setAttribute("r",m===0?.9:.7),m===0&&f.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(f)}o.style.position="relative",o.appendChild(d)}function oa(e){const i=e.querySelector("svg.pp-sf");i&&i.remove()}function va(){if(va.done||typeof document>"u"||!document.addEventListener)return;va.done=!0;const e=i=>{const o=i.closest(".pp-body");if(!o)return;const l=o.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){_a(o),oa(o),l.classList.remove("open"),l.innerHTML="";return}_a(o);const p=Number(i.dataset.pi),c=Number(o.dataset.soul);vt(o,p),o.querySelectorAll(".pp-cell").forEach(u=>{const m=Number(u.dataset.pi);(m===te(p+4)||m===te(p+8)||m===te(p+6))&&u.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=xa(p,c),l.classList.add("open")};document.addEventListener("click",i=>{const o=i.target;if(o&&o.closest&&o.closest("[data-pp-close]")){const p=o.closest(".pp-body");if(p){_a(p),oa(p);const c=p.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=o&&o.closest?o.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const o=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;o&&(i.preventDefault(),e(o))})}s.bindZiwei=va,s._palaceDetailHTML=xa,va();function Ze(e,i){const o=i||{},l=e.slice().sort((p,c)=>c.position-p.position);return o.plain?l.map(p=>`<div class="mp-hy-row hy-plain">
1705
- <span class="mp-hy-nm">${p.name||ye[p.position-1]}</span>
1704
+ <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function Ea(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(i=>{i.classList.remove("pp-sel"),i.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(i=>i.setAttribute("aria-expanded","false"))}const _a={};function bt(e,i){pa(e);const o=e.querySelector(".pp-grid");if(!o)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],p=m=>{const f=e.querySelector('.pp-cell[data-pi="'+m+'"]');if(!f)return null;const b=Number(f.style.gridRow),w=Number(f.style.gridColumn),$=Math.min(75,Math.max(25,(b-.5)*25));return w===1?[25,$]:[75,$]},c=l.map(p);if(c.some(m=>!m))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const u=(m,f,b,w)=>{const $=document.createElementNS("http://www.w3.org/2000/svg","line");$.setAttribute("x1",m),$.setAttribute("y1",f),$.setAttribute("x2",b),$.setAttribute("y2",w),d.appendChild($)};u(c[0][0],c[0][1],c[1][0],c[1][1]),u(c[1][0],c[1][1],c[2][0],c[2][1]),u(c[2][0],c[2][1],c[3][0],c[3][1]),u(c[3][0],c[3][1],c[0][0],c[0][1]);for(let m=0;m<4;m++){const f=document.createElementNS("http://www.w3.org/2000/svg","circle");f.setAttribute("cx",c[m][0]),f.setAttribute("cy",c[m][1]),f.setAttribute("r",m===0?.9:.7),m===0&&f.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(f)}o.style.position="relative",o.appendChild(d)}function pa(e){const i=e.querySelector("svg.pp-sf");i&&i.remove()}function ba(){if(ba.done||typeof document>"u"||!document.addEventListener)return;ba.done=!0;const e=i=>{const o=i.closest(".pp-body");if(!o)return;const l=o.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){Ea(o),pa(o),l.classList.remove("open"),l.innerHTML="";return}Ea(o);const p=Number(i.dataset.pi),c=Number(o.dataset.soul);bt(o,p),o.querySelectorAll(".pp-cell").forEach(u=>{const m=Number(u.dataset.pi);(m===te(p+4)||m===te(p+8)||m===te(p+6))&&u.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=ha(p,c),l.classList.add("open")};document.addEventListener("click",i=>{const o=i.target;if(o&&o.closest&&o.closest("[data-pp-close]")){const p=o.closest(".pp-body");if(p){Ea(p),pa(p);const c=p.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=o&&o.closest?o.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const o=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;o&&(i.preventDefault(),e(o))})}s.bindZiwei=ba,s._palaceDetailHTML=ha,ba();function Ye(e,i){const o=i||{},l=e.slice().sort((p,c)=>c.position-p.position);return o.plain?l.map(p=>`<div class="mp-hy-row hy-plain">
1705
+ <span class="mp-hy-nm">${p.name||ve[p.position-1]}</span>
1706
1706
  ${$e(p.yinYang==="阳",p.moving)}
1707
1707
  </div>`).join(""):l.map(p=>{const c=p.yinYang==="阳",d=o.shiYing?p.position===o.shi?'<span class="mp-hy-sy">世</span>':p.position===o.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",u=p.moving?`<i class="mp-hy-mv" title="动爻">${c?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1708
1708
  ${d}
1709
- <span class="mp-hy-nm">${p.name||ye[p.position-1]}</span>
1709
+ <span class="mp-hy-nm">${p.name||ve[p.position-1]}</span>
1710
1710
  <span class="mp-hy-ln">${$e(c,p.moving)}${u}</span>
1711
1711
  <span class="mp-hy-gz">${t(p.ganzhi||"")}</span>
1712
1712
  <span class="mp-hy-lq">${t(p.liuqin||"")}</span>
1713
1713
  <span class="mp-hy-ls">${t(p.liushen||"")}</span>
1714
1714
  </div>`}).join("")}s.liuyaoHTML=function(e){const i=(T,H,pe,M)=>`<div class="mp-hy-box">
1715
1715
  <div class="mp-hy-h"><b>${T}</b><span>${H}</span></div>
1716
- <div class="mp-hy">${Ze(M,{shiYing:!0,shi:pe.shi,ying:pe.ying})}</div>
1716
+ <div class="mp-hy">${Ye(M,{shiYing:!0,shi:pe.shi,ying:pe.ying})}</div>
1717
1717
  </div>`,o=i(`本卦 ${e.ben.name}`,`${e.ben.palace} · ${e.ben.palaceElement}`,e.ben,e.ben.lines),l=e.bian?i(`变卦 ${e.bian.name}`,`${e.bian.palace} · ${e.bian.palaceElement}`,e.bian,e.bian.lines):`<div class="mp-hy-box"><div class="mp-hy-h"><b>六爻安静</b><span>无动爻,不取变卦</span></div>
1718
1718
  <div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,p=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],c=p.length?`<div class="pp-chips">${p.map(T=>`<span class="pp-chip ${/伏吟/.test(T)||/反吟/.test(T)||/化退神/.test(T)?"warn":/六冲|散/.test(T)?"":"ok"}">${t(T)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',d=e.useGod&&e.useGod.liuqin?e.useGod:null,u=d?`<div class="pp-chips">${d.labels.map(T=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(T)?"warn":/持世|化进|六合|得飞神生/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',m=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,f=m&&m.labels.length?`<div class="pp-chips">${m.labels.map(T=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(T)?"warn":/旺|相|得日辰生|比和/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:"",b=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,w=b&&b.labels.length?`<div class="pp-chips">${b.labels.map(T=>`<span class="pp-chip ${/可出/.test(T)?"ok":/受压难出|有助有压/.test(T)?"warn":""}">伏神${t(T)}</span>`).join("")}</div>`:"",$=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,A=$&&$.labels.length?`<div class="pp-chips">${$.labels.map(T=>`<span class="pp-chip ${/应期偏速/.test(T)?"ok":/应期待解/.test(T)?"warn":""}" title="只列地支,不出日期">${t(T)}</span>`).join("")}</div>`:"",L=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,_=L&&L.labels.length?`<div class="pp-chips">${L.labels.map(T=>`<span class="pp-chip ${/后劲足|退得缓/.test(T)?"ok":/有限|进得虚|退得实|月破|未定/.test(T)?"warn":""}">${t(T)}</span>`).join("")}</div>`:"",Q=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,D=Q&&Q.labels.length?`<div class="pp-chips">${Q.labels.map(T=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(T)?"warn":/旺|相/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:"";return s.briefHTML(e)+`<div class="pp" style="padding:14px">
1719
1719
  <div class="mp-mh-head">起卦 ${e.cast.notation.join("、")}(自下而上) 日辰 ${e.dayGanZhi.name}</div>
@@ -1731,8 +1731,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1731
1731
  <div class="mp-mh-mini">${H}</div>
1732
1732
  <div class="hb-s">${D||`上${_} 下${Q}`}</div>
1733
1733
  </div>`},o=e.lines.slice().sort((A,L)=>L.position-A.position),l=o.slice(0,3),p=o.slice(3),c=e.moving>=4,d=(A,L,_,Q)=>`<div class="mp-trib">
1734
- <div class="mp-trib-h">${A} ${we(L)}${L}${Pa(L)}<span class="mp-tritag ${Q?"tritag-ti":"tritag-yong"}">${Q?"体":"用"}</span></div>
1735
- <div class="mp-hy" style="gap:5px">${Ze(_,{plain:!0})}</div>
1734
+ <div class="mp-trib-h">${A} ${we(L)}${L}${Ha(L)}<span class="mp-tritag ${Q?"tritag-ti":"tritag-yong"}">${Q?"体":"用"}</span></div>
1735
+ <div class="mp-hy" style="gap:5px">${Ye(_,{plain:!0})}</div>
1736
1736
  </div>`,u=`<div class="mp-hexbox">
1737
1737
  <div class="hb-h"><span>本卦</span><span>动 ${e.movingName}</span></div>
1738
1738
  <div class="hb-n">${e.ben.name}</div>
@@ -1742,7 +1742,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1742
1742
  </div>`,m=e.bodyUse.level,f=m.includes("凶")?"bad":m.includes("吉")?"good":"flat",b=`<div class="mp-mh-rel">
1743
1743
  <div><b>体</b>${e.bodyUse.body.trigram}(${e.bodyUse.body.element}) <b>用</b>${e.bodyUse.use.trigram}(${e.bodyUse.use.element})</div>
1744
1744
  <div><span class="mh-lv ${f}">${m}</span> ${e.bodyUse.relation}</div>
1745
- </div>`,w=Fa(e.cuo.name)||["",""],$=Fa(e.zong.name)||["",""];return s.briefHTML(e)+`<div class="pp mp-mh">
1745
+ </div>`,w=Pa(e.cuo.name)||["",""],$=Pa(e.zong.name)||["",""];return s.briefHTML(e)+`<div class="pp mp-mh">
1746
1746
  <div class="mp-mh-main">
1747
1747
  ${u}
1748
1748
  ${i("互卦",e.hu.name,e.hu.upper,e.hu.lower,"中藏之象")}
@@ -1751,7 +1751,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1751
1751
  ${i("综卦",e.zong.name,$[0],$[1],"整卦倒转")}
1752
1752
  </div>
1753
1753
  ${b}
1754
- </div>`};const Ha={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},pa={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},Pa=e=>pa[e]?` ${pa[e]}`:"",Fa=e=>Ha[e]||null;s.daliurenHTML=function(e){const i=e.sanChuan,o=(u,m)=>`<div class="mp-dl-sc-c">
1754
+ </div>`};const Oa={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},ra={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},Ha=e=>ra[e]?` ${ra[e]}`:"",Pa=e=>Oa[e]||null;s.daliurenHTML=function(e){const i=e.sanChuan,o=(u,m)=>`<div class="mp-dl-sc-c">
1755
1755
  <div class="mp-dl-sc-k">${m}</div>
1756
1756
  <div class="mp-dl-sc-z">${u.zhi}</div>
1757
1757
  <div class="mp-dl-sc-j">${u.jiangFull||u.jiang}</div>
@@ -1801,7 +1801,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1801
1801
  </div>
1802
1802
  ${e.systemNote?`<div class="mp-tt-tip">${e.systemNote}</div>`:""}
1803
1803
  <div class="mp-tt-tip">塔罗用于自我觉察与娱乐,不作确定性预言。</div>
1804
- </div>`};const Qa=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const o='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),p=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1804
+ </div>`};const Wa=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const o='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),p=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1805
1805
  <div class="mp-hp-ith">三方合盘 · 三对并列</div>
1806
1806
  <table><thead>${o}</thead><tbody>${l}</tbody></table>
1807
1807
  <p>${p}</p>${c}
@@ -1820,9 +1820,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1820
1820
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100</span></div>
1821
1821
  <div class="mp-hp-sides">${i(e.a,"你")}${i(e.b,"对方")}</div>
1822
1822
  <div class="mp-hp-dims">${o}</div>
1823
- ${Qa(e.triple)}
1823
+ ${Wa(e.triple)}
1824
1824
  <div class="mp-hp-notes">${e.notes.map(l=>`<p>${l}</p>`).join("")}</div>
1825
- </div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(p,c)=>`<div class="relation__row"><dt>${t(p)}</dt><dd>${t(c)}</dd></div>`,o=p=>p&&["旺","相","休","囚","死"].filter(d=>Array.isArray(p[d])&&p[d].length).map(d=>`${d} ${p[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",o(e.states&&e.states.gate)],["星旺衰",o(e.states&&e.states.star)],["干旺衰",o(e.states&&e.states.stem)],["干宫生克",(()=>{const p=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return p.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([p,c])=>i(p,c)).join("")}</dl>`};const et=[["4","9","2"],["3","5","7"],["8","1","6"]];s.qimenHTML=function(e){const i={};for(const l of e.palaces)i[l.palace]=l;const o=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1825
+ </div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(p,c)=>`<div class="relation__row"><dt>${t(p)}</dt><dd>${t(c)}</dd></div>`,o=p=>p&&["旺","相","休","囚","死"].filter(d=>Array.isArray(p[d])&&p[d].length).map(d=>`${d} ${p[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",o(e.states&&e.states.gate)],["星旺衰",o(e.states&&e.states.star)],["干旺衰",o(e.states&&e.states.stem)],["干宫生克",(()=>{const p=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return p.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([p,c])=>i(p,c)).join("")}</dl>`};const Qa=[["4","9","2"],["3","5","7"],["8","1","6"]];s.qimenHTML=function(e){const i={};for(const l of e.palaces)i[l.palace]=l;const o=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1826
1826
  <div class="pp-qm-ju">${e.ju}</div>
1827
1827
  <div class="pp-qm-kv">${e.siZhu.year} ${e.siZhu.month}</div>
1828
1828
  <div class="pp-qm-kv">${e.siZhu.day} ${e.siZhu.time}</div>
@@ -1842,7 +1842,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1842
1842
  <span>值符 ${e.zhiFu.star}(${e.zhiFu.gong}宫) 值使 ${e.zhiShi.gate}(${e.zhiShi.gong}宫)</span>
1843
1843
  <span>旬首 ${e.xunshou} 空亡 ${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}</span>
1844
1844
  </div>
1845
- <div class="mp-qm-grid">${et.map(l=>l.map(o).join("")).join("")}</div>
1845
+ <div class="mp-qm-grid">${Qa.map(l=>l.map(o).join("")).join("")}</div>
1846
1846
  <div class="mp-qm-legend">上=九星 中=天盘干/八门 下=地盘干/宫号 角落=八神</div>
1847
1847
  <div class="mp-qm-rules">${e.rules.map(l=>`<p>${l}</p>`).join("")}</div>
1848
1848
  </div>`},s.ziweiHepanHTML=function(e){const i=(p,c)=>`<div class="mp-hp-side">
@@ -1864,9 +1864,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1864
1864
  <div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${l("你")||"<li>无</li>"}</ul></div>
1865
1865
  <div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${l("对方")||"<li>无</li>"}</ul></div>
1866
1866
  </div>
1867
- ${Qa(e.triple)}
1867
+ ${Wa(e.triple)}
1868
1868
  <div class="mp-hp-notes">${e.notes.map(p=>`<p>${p}</p>`).join("")}</div>
1869
- </div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],o=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,p=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,u=l(e.dayun.startAge&&e.dayun.startAge.years),m=i.length?i[i.length-1].startAge+10:u+80,f=o.map(v=>l(v.age)).filter(v=>v>0),b=Math.min(u,...f.length?f:[u]),w=Math.max(m,...f.length?f:[m]),$=Math.max(1,w-b),A=640,L=190,_={t:14,r:16,b:26,l:30},Q=A-_.l-_.r,D=L-_.t-_.b,T=v=>_.l+(v-b)/$*Q,H=v=>_.t+D-(Math.max(d,Math.min(c,v))-d)/(c-d)*D,M=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${_.l}" y="${H(v.to).toFixed(1)}" width="${Q}" height="${(H(v.from)-H(v.to)).toFixed(1)}"/>`).join(""),B=10/$*Q,y=[];i.forEach((v,ce)=>{const me=l(v.startAge),Ce=p(v),je=Math.max(_.l,T(me)),ze=Math.min(_.l+Q,T(me+10));y.push(`${je.toFixed(1)},${H(Ce).toFixed(1)}`),y.push(`${ze.toFixed(1)},${H(Ce).toFixed(1)}`)});const he=y.length?`<polyline class="cv-dy" points="${y.join(" ")}"/>`:"",W=y.length?`<polygon class="cv-dyfill" points="${_.l},${(_.t+D).toFixed(1)} ${y.join(" ")} ${(_.l+Q).toFixed(1)},${(_.t+D).toFixed(1)}"/>`:"",ie=o.filter(v=>v.luck&&typeof v.luck.score=="number").map(v=>({x:T(l(v.age)),y:H(l(v.luck.score)),y0:l(v.year),gz:v.ganzhi,tier:v.luck.tier,v:l(v.luck.score),age:l(v.age)})),j=ie.length>1?`<polyline class="cv-ln" points="${ie.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" ")}"/>`:"",k={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},C=ie.length?Math.min(...ie.map(v=>v.y0)):null,O=ie.map(v=>`<circle class="cv-dot${v.y0===C?" now":""}" cx="${v.x.toFixed(1)}" cy="${v.y.toFixed(1)}" fill="${k[v.tier]||"var(--muted)"}"><title>${t(`${v.y0}年(${v.age}岁)${v.gz} ${v.tier} ${v.v}`)}</title></circle>`).join(""),oe=`<line class="cv-ax zero" x1="${_.l}" y1="${H(0).toFixed(1)}" x2="${_.l+Q}" y2="${H(0).toFixed(1)}"/><line class="cv-ax" x1="${_.l}" y1="${_.t}" x2="${_.l}" y2="${_.t+D}"/>`,ge=$>60?10:5,de=[];for(let v=Math.ceil(b/ge)*ge;v<=w;v+=ge)de.push(`<text class="cv-lbl age" x="${T(v).toFixed(1)}" y="${(_.t+D+13).toFixed(1)}" text-anchor="middle">${v}岁</text>`);const ke=`<text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,ve=i.slice().sort((v,ce)=>p(ce)-p(v)),P=ve[0],U=ve[ve.length-1],J=P&&p(P)>.55?`<text class="cv-lbl" x="${T(l(P.startAge)+5).toFixed(1)}" y="${(H(p(P))-5).toFixed(1)}" text-anchor="middle">▲${P.startAge}岁 ${P.luck.tier}</text>`:"",fe=U&&p(U)<-.8?`<text class="cv-lbl" x="${T(l(U.startAge)+5).toFixed(1)}" y="${(H(p(U))+11).toFixed(1)}" text-anchor="middle">▼${U.startAge}岁 ${U.luck.tier}</text>`:"",be=`<div class="cv-legend">
1869
+ </div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],o=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,p=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,u=l(e.dayun.startAge&&e.dayun.startAge.years),m=i.length?i[i.length-1].startAge+10:u+80,f=o.map(v=>l(v.age)).filter(v=>v>0),b=Math.min(u,...f.length?f:[u]),w=Math.max(m,...f.length?f:[m]),$=Math.max(1,w-b),A=640,L=190,_={t:14,r:16,b:26,l:30},Q=A-_.l-_.r,D=L-_.t-_.b,T=v=>_.l+(v-b)/$*Q,H=v=>_.t+D-(Math.max(d,Math.min(c,v))-d)/(c-d)*D,M=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${_.l}" y="${H(v.to).toFixed(1)}" width="${Q}" height="${(H(v.from)-H(v.to)).toFixed(1)}"/>`).join(""),B=10/$*Q,y=[];i.forEach((v,ce)=>{const me=l(v.startAge),Ce=p(v),Se=Math.max(_.l,T(me)),ze=Math.min(_.l+Q,T(me+10));y.push(`${Se.toFixed(1)},${H(Ce).toFixed(1)}`),y.push(`${ze.toFixed(1)},${H(Ce).toFixed(1)}`)});const he=y.length?`<polyline class="cv-dy" points="${y.join(" ")}"/>`:"",W=y.length?`<polygon class="cv-dyfill" points="${_.l},${(_.t+D).toFixed(1)} ${y.join(" ")} ${(_.l+Q).toFixed(1)},${(_.t+D).toFixed(1)}"/>`:"",ie=o.filter(v=>v.luck&&typeof v.luck.score=="number").map(v=>({x:T(l(v.age)),y:H(l(v.luck.score)),y0:l(v.year),gz:v.ganzhi,tier:v.luck.tier,v:l(v.luck.score),age:l(v.age)})),j=ie.length>1?`<polyline class="cv-ln" points="${ie.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" ")}"/>`:"",k={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},C=ie.length?Math.min(...ie.map(v=>v.y0)):null,O=ie.map(v=>`<circle class="cv-dot${v.y0===C?" now":""}" cx="${v.x.toFixed(1)}" cy="${v.y.toFixed(1)}" fill="${k[v.tier]||"var(--muted)"}"><title>${t(`${v.y0}年(${v.age}岁)${v.gz} ${v.tier} ${v.v}`)}</title></circle>`).join(""),oe=`<line class="cv-ax zero" x1="${_.l}" y1="${H(0).toFixed(1)}" x2="${_.l+Q}" y2="${H(0).toFixed(1)}"/><line class="cv-ax" x1="${_.l}" y1="${_.t}" x2="${_.l}" y2="${_.t+D}"/>`,ge=$>60?10:5,de=[];for(let v=Math.ceil(b/ge)*ge;v<=w;v+=ge)de.push(`<text class="cv-lbl age" x="${T(v).toFixed(1)}" y="${(_.t+D+13).toFixed(1)}" text-anchor="middle">${v}岁</text>`);const ke=`<text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,ye=i.slice().sort((v,ce)=>p(ce)-p(v)),P=ye[0],U=ye[ye.length-1],J=P&&p(P)>.55?`<text class="cv-lbl" x="${T(l(P.startAge)+5).toFixed(1)}" y="${(H(p(P))-5).toFixed(1)}" text-anchor="middle">▲${P.startAge}岁 ${P.luck.tier}</text>`:"",fe=U&&p(U)<-.8?`<text class="cv-lbl" x="${T(l(U.startAge)+5).toFixed(1)}" y="${(H(p(U))+11).toFixed(1)}" text-anchor="middle">▼${U.startAge}岁 ${U.luck.tier}</text>`:"",be=`<div class="cv-legend">
1870
1870
  <span><i style="background:var(--quan)"></i>大运(阶梯,一步十年)</span>
1871
1871
  <span><i style="background:var(--ke)"></i>流年(逐年折线)</span>
1872
1872
  <span>绿带=吉 灰带=平 红带=忌</span>
@@ -1876,7 +1876,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1876
1876
  ${M}${oe}${W}${he}${j}${O}${de.join("")}${ke}${J}${fe}
1877
1877
  </svg>
1878
1878
  ${be}${x}
1879
- </div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const o=e&&Array.isArray(e.segments)?e.segments:[],l=P=>typeof P=="number"&&isFinite(P)?P:0,p=720,c=322,d={t:34,r:46,b:66,l:36},u=p-d.l-d.r,m=c-d.t-d.b,f=i.length,b=u/f,w=P=>d.l+(P+.5)*b,$=P=>d.t+m-Math.max(0,Math.min(100,P))/100*m,A=Math.max(1.1,Math.min(10,b*.62)),L=P=>l(P.score),_=d.t+m,Q=_+20,D=22,H=`klclip${(()=>{let P=2166136261;const U=J=>{const fe=String(J??"");for(let be=0;be<fe.length;be++)P^=fe.charCodeAt(be),P=Math.imul(P,16777619)};U(f),U(i[0]&&i[0].age),U(i[f-1]&&i[f-1].age);for(const J of i)U(J&&J.score);return(P>>>0).toString(36)})()}`,pe=o.map((P,U)=>{const J=Math.max(0,P.startAge-1),fe=Math.min(f-1,P.endAge-1);if(fe<J)return"";const be=d.l+J*b,x=Math.max(.6,(fe-J+1)*b),ce=U%2===1?`<rect class="kl-band" x="${be.toFixed(1)}" y="${d.t}" width="${x.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${be.toFixed(1)}" y="${Q}" width="${x.toFixed(1)}" height="${D}"/>`:"",me=U===0?"":`<line class="kl-segline" x1="${be.toFixed(1)}" y1="${d.t}" x2="${be.toFixed(1)}" y2="${_}"/>`,Ce=Math.min(Math.max(d.l+(J+fe+1)/2*b,d.l+22),d.l+u-22);return ce+me+`<text class="kl-seg" x="${Ce.toFixed(1)}" y="${(Q+15).toFixed(1)}" text-anchor="middle">${t(P.ganZhi)}</text>`}).join(""),M=[0,25,50,75,100].map(P=>`<line class="kl-grid${P===50?" mid":""}" x1="${d.l}" y1="${$(P).toFixed(1)}" x2="${d.l+u}" y2="${$(P).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${($(P)+3).toFixed(1)}" text-anchor="end">${P}</text>`).join(""),B=i.map((P,U)=>{const J=P.kline||{},fe=l(J.open),be=l(J.close),x=Math.min(100,l(J.high)),v=Math.max(0,l(J.low)),ce=be>=fe,me=$(fe),Ce=$(be),je=Math.min(me,Ce),ze=Math.max(.8,Math.abs(me-Ce)),Ke=w(U),ca=`${P.age}岁(${P.year}年 ${P.ganZhi})${be}分${P.dayunGanZhi?` · ${P.dayunGanZhi}运`:""}`;return`<g class="kl-c${ce?" up":" down"}"><title>${t(ca)}</title><line x1="${Ke.toFixed(2)}" y1="${$(x).toFixed(1)}" x2="${Ke.toFixed(2)}" y2="${$(v).toFixed(1)}"/><rect x="${(Ke-A/2).toFixed(2)}" y="${je.toFixed(1)}" width="${A.toFixed(2)}" height="${ze.toFixed(1)}" rx="0.7"/></g>`}).join(""),y=P=>{const U=[];for(let J=0;J<f;J++){if(J+1<P)continue;let fe=0;for(let be=J+1-P;be<=J;be++)fe+=L(i[be]);U.push({i:J,v:fe/P})}return U},he=P=>y(P).map((U,J)=>`${J?"L":"M"}${w(U.i).toFixed(1)} ${$(U.v).toFixed(1)}`).join(" "),W=(P,U)=>{const J=y(P);if(!J.length)return"";const fe=J[J.length-1];return{cls:U,y:$(fe.v),text:`<text class="kl-ma-lbl ${U}" x="${d.l+u+5}" y="${$(fe.v).toFixed(1)}" text-anchor="start">${fe.v.toFixed(0)}</text>`}},ie=W(10,"m10"),j=W(5,"m5"),k=(()=>{if(!j||!ie)return`${ie?ie.text:""}${j?j.text:""}`;let P=j.y,U=ie.y;if(Math.abs(P-U)<10){const J=Math.min(P,U),fe=Math.max(P,U);P=J-6,U=fe+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${U.toFixed(1)}" text-anchor="start">${y(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${P.toFixed(1)}" text-anchor="start">${y(5).slice(-1)[0].v.toFixed(0)}</text>`})();let C=i[0],O=i[0];for(const P of i)L(P)>L(C)&&(C=P),L(P)<L(O)&&(O=P);const oe=(P,U,J)=>{const fe=i.indexOf(P),be=w(fe),x=$(L(P)),v=Math.min(Math.max(be,d.l+26),d.l+u-26),ce=U==="hi"?x-8<d.t+6?14:J:x+12>d.t+m-2?-8:J;return`<g class="kl-mark ${U}"><circle cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="2"/><circle class="ring" cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="4.6"/><text x="${v.toFixed(1)}" y="${(x+ce).toFixed(1)}" text-anchor="middle">${P.age}岁 ${L(P)}</text></g>`},ge=f>60?10:5,de=i.filter(P=>P.age%ge===0).map(P=>`<text class="kl-lbl age" x="${w(i.indexOf(P)).toFixed(1)}" y="${(_+14).toFixed(1)}" text-anchor="middle">${P.age}</text>`).join(""),ke=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+u}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1879
+ </div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const o=e&&Array.isArray(e.segments)?e.segments:[],l=P=>typeof P=="number"&&isFinite(P)?P:0,p=720,c=322,d={t:34,r:46,b:66,l:36},u=p-d.l-d.r,m=c-d.t-d.b,f=i.length,b=u/f,w=P=>d.l+(P+.5)*b,$=P=>d.t+m-Math.max(0,Math.min(100,P))/100*m,A=Math.max(1.1,Math.min(10,b*.62)),L=P=>l(P.score),_=d.t+m,Q=_+20,D=22,H=`klclip${(()=>{let P=2166136261;const U=J=>{const fe=String(J??"");for(let be=0;be<fe.length;be++)P^=fe.charCodeAt(be),P=Math.imul(P,16777619)};U(f),U(i[0]&&i[0].age),U(i[f-1]&&i[f-1].age);for(const J of i)U(J&&J.score);return(P>>>0).toString(36)})()}`,pe=o.map((P,U)=>{const J=Math.max(0,P.startAge-1),fe=Math.min(f-1,P.endAge-1);if(fe<J)return"";const be=d.l+J*b,x=Math.max(.6,(fe-J+1)*b),ce=U%2===1?`<rect class="kl-band" x="${be.toFixed(1)}" y="${d.t}" width="${x.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${be.toFixed(1)}" y="${Q}" width="${x.toFixed(1)}" height="${D}"/>`:"",me=U===0?"":`<line class="kl-segline" x1="${be.toFixed(1)}" y1="${d.t}" x2="${be.toFixed(1)}" y2="${_}"/>`,Ce=Math.min(Math.max(d.l+(J+fe+1)/2*b,d.l+22),d.l+u-22);return ce+me+`<text class="kl-seg" x="${Ce.toFixed(1)}" y="${(Q+15).toFixed(1)}" text-anchor="middle">${t(P.ganZhi)}</text>`}).join(""),M=[0,25,50,75,100].map(P=>`<line class="kl-grid${P===50?" mid":""}" x1="${d.l}" y1="${$(P).toFixed(1)}" x2="${d.l+u}" y2="${$(P).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${($(P)+3).toFixed(1)}" text-anchor="end">${P}</text>`).join(""),B=i.map((P,U)=>{const J=P.kline||{},fe=l(J.open),be=l(J.close),x=Math.min(100,l(J.high)),v=Math.max(0,l(J.low)),ce=be>=fe,me=$(fe),Ce=$(be),Se=Math.min(me,Ce),ze=Math.max(.8,Math.abs(me-Ce)),Je=w(U),ma=`${P.age}岁(${P.year}年 ${P.ganZhi})${be}分${P.dayunGanZhi?` · ${P.dayunGanZhi}运`:""}`;return`<g class="kl-c${ce?" up":" down"}"><title>${t(ma)}</title><line x1="${Je.toFixed(2)}" y1="${$(x).toFixed(1)}" x2="${Je.toFixed(2)}" y2="${$(v).toFixed(1)}"/><rect x="${(Je-A/2).toFixed(2)}" y="${Se.toFixed(1)}" width="${A.toFixed(2)}" height="${ze.toFixed(1)}" rx="0.7"/></g>`}).join(""),y=P=>{const U=[];for(let J=0;J<f;J++){if(J+1<P)continue;let fe=0;for(let be=J+1-P;be<=J;be++)fe+=L(i[be]);U.push({i:J,v:fe/P})}return U},he=P=>y(P).map((U,J)=>`${J?"L":"M"}${w(U.i).toFixed(1)} ${$(U.v).toFixed(1)}`).join(" "),W=(P,U)=>{const J=y(P);if(!J.length)return"";const fe=J[J.length-1];return{cls:U,y:$(fe.v),text:`<text class="kl-ma-lbl ${U}" x="${d.l+u+5}" y="${$(fe.v).toFixed(1)}" text-anchor="start">${fe.v.toFixed(0)}</text>`}},ie=W(10,"m10"),j=W(5,"m5"),k=(()=>{if(!j||!ie)return`${ie?ie.text:""}${j?j.text:""}`;let P=j.y,U=ie.y;if(Math.abs(P-U)<10){const J=Math.min(P,U),fe=Math.max(P,U);P=J-6,U=fe+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${U.toFixed(1)}" text-anchor="start">${y(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${P.toFixed(1)}" text-anchor="start">${y(5).slice(-1)[0].v.toFixed(0)}</text>`})();let C=i[0],O=i[0];for(const P of i)L(P)>L(C)&&(C=P),L(P)<L(O)&&(O=P);const oe=(P,U,J)=>{const fe=i.indexOf(P),be=w(fe),x=$(L(P)),v=Math.min(Math.max(be,d.l+26),d.l+u-26),ce=U==="hi"?x-8<d.t+6?14:J:x+12>d.t+m-2?-8:J;return`<g class="kl-mark ${U}"><circle cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="2"/><circle class="ring" cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="4.6"/><text x="${v.toFixed(1)}" y="${(x+ce).toFixed(1)}" text-anchor="middle">${P.age}岁 ${L(P)}</text></g>`},ge=f>60?10:5,de=i.filter(P=>P.age%ge===0).map(P=>`<text class="kl-lbl age" x="${w(i.indexOf(P)).toFixed(1)}" y="${(_+14).toFixed(1)}" text-anchor="middle">${P.age}</text>`).join(""),ke=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+u}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1880
1880
  <svg viewBox="0 0 ${p} ${c}" role="img" aria-label="人生K线:1 到 ${f} 岁的逐年评分蜡烛图">
1881
1881
  <defs><clipPath id="${H}"><rect x="${d.l}" y="${d.t}" width="${u}" height="${m}"/></clipPath></defs>
1882
1882
  ${pe}${M}
@@ -1937,18 +1937,18 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1937
1937
  <div class="pp-tl">喜 ${H.yongshen.favor.map(d).join("")} 忌 ${H.yongshen.avoid.map(d).join("")} <span class="pp-dim">${t(H.yongshen.method)}</span></div>
1938
1938
  <div class="pp-chips">${H.yongshen.favorTenGods.map(x=>`<span class="pp-chip ok">${t(x)}</span>`).join("")}${y}</div>
1939
1939
  ${(H.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${H.yongshen.disputed.map(x=>`${t(x.element)}(扶抑为${t(x.favorRole)}·${t(x.favorVerb)},${t(x.climate)}盘调候忌${t(x.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1940
- <div class="pp-tl pp-dim">${t(H.yongshen.detail)}</div>`:"",W=e.climate||H.yongshen&&H.yongshen.climate||null,ie=W?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(W.temp)||0)+3)/6*100))),v=W.need?`<em>调候取</em><b>${t(W.need.stem+W.need.element)}</b>`:"<em>气候平和</em>",ce=!!(H.yongshen&&Array.isArray(H.yongshen.disputed))&&H.yongshen.disputed.some(ca=>ca.element===W.avoidElement),me=W.need?`<em>忌</em><b>${t(W.avoidElement)}</b>${ce?'<span class="pp-dim">(有争议)</span>':""}`:"",Ce=(W.evidence||[]).length?`<em>依据</em><span>${t(W.evidence.join("、"))}</span>`:"",je=W.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',ze=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Ke=ze?`<div class="mp-qt">
1940
+ <div class="pp-tl pp-dim">${t(H.yongshen.detail)}</div>`:"",W=e.climate||H.yongshen&&H.yongshen.climate||null,ie=W?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(W.temp)||0)+3)/6*100))),v=W.need?`<em>调候取</em><b>${t(W.need.stem+W.need.element)}</b>`:"<em>气候平和</em>",ce=!!(H.yongshen&&Array.isArray(H.yongshen.disputed))&&H.yongshen.disputed.some(ma=>ma.element===W.avoidElement),me=W.need?`<em>忌</em><b>${t(W.avoidElement)}</b>${ce?'<span class="pp-dim">(有争议)</span>':""}`:"",Ce=(W.evidence||[]).length?`<em>依据</em><span>${t(W.evidence.join("、"))}</span>`:"",Se=W.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',ze=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Je=ze?`<div class="mp-qt">
1941
1941
  <div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(ze.label)}</span></div>
1942
- <div class="mp-qt-y"><em>用神</em>${ze.yong.map((ca,jt)=>`<b class="${jt===0?"first":""}">${t(ca)}</b>`).join("")}<em>首取 ${t(ze.primary)}</em></div>
1942
+ <div class="mp-qt-y"><em>用神</em>${ze.yong.map((ma,kt)=>`<b class="${kt===0?"first":""}">${t(ma)}</b>`).join("")}<em>首取 ${t(ze.primary)}</em></div>
1943
1943
  <div class="mp-qt-q" title="${t(ze.quote)}">「${t(ze.quote)}」<span>第 ${ze.chapter} 章${ze.truncated?" · 首段更长,摘句下略":""}${ze.note?" · "+t(ze.note):""}</span></div>
1944
1944
  </div>`:"";return`<section class="mp-cli" aria-label="寒暖燥湿">
1945
- <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(W.label||"")}</span>${je}</div>
1945
+ <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(W.label||"")}</span>${Se}</div>
1946
1946
  <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${x}%"></i></div>
1947
1947
  <div class="mp-cli-axis"><span>寒</span><span>平</span><span>热</span></div>
1948
1948
  <div class="mp-cli-row">${v}${me}${Ce}</div>
1949
1949
  <div class="mp-cli-narr">${t(W.narration||"")}</div>
1950
- ${Ke}
1951
- </section>`})():"",j=H.godStats?`<div class="pp-chips">${Object.entries(H.godStats.groups).map(([x,v])=>`<span class="pp-chip">${x} ${v}</span>`).join("")}</div>`:"",k=e.dayun.list.map(x=>{const v=x.luck||null;return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(`${x.fromDate?`${x.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),C=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const v=x.luck||null,ce=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],me=ce.length?`|${ce.map(Ce=>Ce.detail).join(";")}`:"";return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${me}`:me.replace(/^|/,""))}">${x.year} ${x.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",O=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),oe=e.suiyunClassic,ge=oe?`<div class="pp-dim pp-sy-src" title="${t(oe.plain||"")}">《${t(oe.bookName||"")}·${t(oe.chapter||"")}》「${t(oe.quote||"")}」</div>`:"",de=O.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${O.map(x=>`<span class="pp-chip" title="${t(`${x.suiyun.signals.map(v=>v.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${t(x.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${ge}`:"",ke=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",ve=e.strength&&e.strength.branchStructure,P=ve?(()=>{const x=ve.branches.map(je=>`${t(je.label)}${t(je.branch)}<i class="pp-drel">·${t(je.camp)}</i>${ve.placeholderHour&&je.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),v=ve.odd&&ve.odd.length?`<span class="pp-st-odd">异类 ${ve.odd.map(je=>`${t(je.label)}${t(je.branch)}(${je.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',ce=ve.congProb!=null?` 从格 ${t(ve.congRange)}`:" 不套从格概率",me=ve.balance||{},Ce=me.branch?` 支 ${me.branch.A}:${me.branch.B} 合干 ${me.total?`${me.total.A}:${me.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${ve.method};${ve.note}`)}"><span class="pp-st-code">${t(ve.code)}</span>${x} ${v}${ce}${Ce}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",U=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],J=U.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${U.map(x=>t(x)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${U.length===1?"只一对,按口径可忽略":`共 ${U.length} 对`}</span></div>`:"",fe=e.shensha&&e.shensha.groups||[],be=fe.length?`
1950
+ ${Je}
1951
+ </section>`})():"",j=H.godStats?`<div class="pp-chips">${Object.entries(H.godStats.groups).map(([x,v])=>`<span class="pp-chip">${x} ${v}</span>`).join("")}</div>`:"",k=e.dayun.list.map(x=>{const v=x.luck||null;return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(`${x.fromDate?`${x.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),C=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const v=x.luck||null,ce=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],me=ce.length?`|${ce.map(Ce=>Ce.detail).join(";")}`:"";return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${me}`:me.replace(/^|/,""))}">${x.year} ${x.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",O=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),oe=e.suiyunClassic,ge=oe?`<div class="pp-dim pp-sy-src" title="${t(oe.plain||"")}">《${t(oe.bookName||"")}·${t(oe.chapter||"")}》「${t(oe.quote||"")}」</div>`:"",de=O.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${O.map(x=>`<span class="pp-chip" title="${t(`${x.suiyun.signals.map(v=>v.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${t(x.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${ge}`:"",ke=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",ye=e.strength&&e.strength.branchStructure,P=ye?(()=>{const x=ye.branches.map(Se=>`${t(Se.label)}${t(Se.branch)}<i class="pp-drel">·${t(Se.camp)}</i>${ye.placeholderHour&&Se.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),v=ye.odd&&ye.odd.length?`<span class="pp-st-odd">异类 ${ye.odd.map(Se=>`${t(Se.label)}${t(Se.branch)}(${Se.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',ce=ye.congProb!=null?` 从格 ${t(ye.congRange)}`:" 不套从格概率",me=ye.balance||{},Ce=me.branch?` 支 ${me.branch.A}:${me.branch.B} 合干 ${me.total?`${me.total.A}:${me.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${ye.method};${ye.note}`)}"><span class="pp-st-code">${t(ye.code)}</span>${x} ${v}${ce}${Ce}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",U=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],J=U.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${U.map(x=>t(x)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${U.length===1?"只一对,按口径可忽略":`共 ${U.length} 对`}</span></div>`:"",fe=e.shensha&&e.shensha.groups||[],be=fe.length?`
1952
1952
  <div class="pp-ssx">
1953
1953
  <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${fe.length} 类 · 悬停看查法</span></div>
1954
1954
  ${fe.map(x=>`<div class="pp-ssg"><span class="ssg-gt">${x.cat}</span><span class="ssg-gi">${x.items.map(v=>`<span class="pp-ssi ${v.luck||"neutral"}" title="${t(`${v.via}查${v.target} | ${v.rule}`)}">${v.name}<em>${v.pillars.map(ce=>o[ce]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
@@ -1984,7 +1984,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
1984
1984
  </div>`):""}
1985
1985
  ${be}
1986
1986
  <div style="margin-top:8px;font-size:12px;color:var(--muted)">上一节 ${e.jieqi.previous.name} ${e.jieqi.previous.time} 下一节 ${e.jieqi.next.name} ${e.jieqi.next.time} ${e.dayun.rule},${e.dayun.startAge.years}岁起运${e.dayun.jiao&&e.dayun.jiao.at?`(交运 ${e.dayun.jiao.at},${e.dayun.jiao.frame})`:""}${e.dayun.startAgeExact&&Number.isInteger(e.dayun.startAgeExact.years)?` 精确 ${e.dayun.startAgeExact.years}年${e.dayun.startAgeExact.months}月${e.dayun.startAgeExact.days}天${e.dayun.startAgeExact.hours}时(截断到日时;上面是四舍五入到月)`:""}</div>
1987
- </div>`};const Bt={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},ra={同向:"good",有张力:"watch",互补:"alt"},Gt=e=>`<div class="mp-cross">${e.map(i=>{const o=ra[i.stance]||"plain";return`<div class="mp-cross-row">
1987
+ </div>`};const It={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},la={同向:"good",有张力:"watch",互补:"alt"},Bt=e=>`<div class="mp-cross">${e.map(i=>{const o=la[i.stance]||"plain";return`<div class="mp-cross-row">
1988
1988
  <div class="mp-cross-h"><span class="mp-cross-l">${t(i.label)}</span><span class="mp-cross-tag t-${o}">${t(i.stance||"—")}</span></div>
1989
1989
  <div class="mp-cross-b">
1990
1990
  <div class="mp-cross-cell"><b>八字</b><span>${t(i.bazi||"—")}</span></div>
@@ -2007,8 +2007,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2007
2007
  </div>`).join("")}</div>`:"",f=y=>String(y||"").split(`
2008
2008
  `).map(he=>`<div class="mp-it-p">${t(he).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),b=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map(y=>`<div class="mp-it-sec${y.tone?` tone-${t(y.tone)}`:""}" id="mp-sec-${t(y.key)}">
2009
2009
  <div class="mp-it-sh">${t(y.label)}</div>
2010
- <div class="mp-it-stext">${Array.isArray(y.items)&&y.items.length?Gt(y.items):f(y.text)}</div>
2011
- </div>`).join("")}</div>`:"",w=[e.systemLabel,Bt[e.moduleType]||e.moduleType].filter(Boolean),$=e.ask,A=$&&$.question?t($.question):"",L=$&&(A||$.direction&&$.direction!=="general")?`<div class="mp-it-ask">${A?`<span class="ask-q">问题:${A}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t($.directionLabel||"综合")}</span></div>`:"",_=e.answer?`<div class="mp-it-ans"><b>${A?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",Q=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(y=>`<li>${t(y)}</li>`).join("")}</ul></div>`:"",T=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map(y=>`<div><span>${t(y.term)}</span>${t(y.plain)}</div>`).join("")}</details>`:"",H=e.limits&&e.limits.length?`<details class="mp-it-limits"><summary>本插件不回答什么(${e.limits.length} 条)</summary>${e.limits.map(y=>`<div><b>${t(y.title)}</b>${t(y.text)}</div>`).join("")}</details>`:"",M=e.system&&/^(liuyao|meihua|daliuren|qimen|tarot|xiaoliuren)$/.test(e.system)?`<div class="mp-askcopy-row"><button type="button" class="mp-askcopy" data-mp-askcopy="${t(e.system)}">复制问事提示</button><span class="mp-askcopy-hint">把这张盘和你的问题打包成一段提示,粘到任何对话里都能用</span></div>`:"",B=e.guide?`<details class="mp-guide">
2010
+ <div class="mp-it-stext">${Array.isArray(y.items)&&y.items.length?Bt(y.items):f(y.text)}</div>
2011
+ </div>`).join("")}</div>`:"",w=[e.systemLabel,It[e.moduleType]||e.moduleType].filter(Boolean),$=e.ask,A=$&&$.question?t($.question):"",L=$&&(A||$.direction&&$.direction!=="general")?`<div class="mp-it-ask">${A?`<span class="ask-q">问题:${A}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t($.directionLabel||"综合")}</span></div>`:"",_=e.answer?`<div class="mp-it-ans"><b>${A?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",Q=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(y=>`<li>${t(y)}</li>`).join("")}</ul></div>`:"",T=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map(y=>`<div><span>${t(y.term)}</span>${t(y.plain)}</div>`).join("")}</details>`:"",H=e.limits&&e.limits.length?`<details class="mp-it-limits"><summary>本插件不回答什么(${e.limits.length} 条)</summary>${e.limits.map(y=>`<div><b>${t(y.title)}</b>${t(y.text)}</div>`).join("")}</details>`:"",M=e.system&&/^(liuyao|meihua|daliuren|qimen|tarot|xiaoliuren)$/.test(e.system)?`<div class="mp-askcopy-row"><button type="button" class="mp-askcopy" data-mp-askcopy="${t(e.system)}">复制问事提示</button><span class="mp-askcopy-hint">把这张盘和你的问题打包成一段提示,粘到任何对话里都能用</span></div>`:"",B=e.guide?`<details class="mp-guide">
2012
2012
  <summary><b>${t(e.guide.title)}</b><span class="mp-guide-sub">数 / 象 / 辞</span></summary>
2013
2013
  <div class="mp-guide-body">
2014
2014
  <p class="mp-guide-lead">${t(e.guide.lead)}</p>
@@ -2069,14 +2069,14 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2069
2069
  ${l.map(u=>`<div class="mp-shadow-warn">⚠ ${u}</div>`).join("")}
2070
2070
  ${p}
2071
2071
  ${d}
2072
- </section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let o=null;try{o=i.shadowSnapshot(e)}catch{return null}if(!o||!o.shadow||!o.shadow.baseId)return null;const l="mp-shadow-v1";let p={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(p=m)}catch{p={}}const c=p[o.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,o)}catch{d=null}o.at=Date.now(),p[o.shadow.baseId]=o;try{const u=Object.keys(p);if(u.length>24){u.sort((m,f)=>(Number(p[m]&&p[m].at)||0)-(Number(p[f]&&p[f].at)||0));for(const m of u.slice(0,u.length-24))delete p[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(p))}catch{}return d};const Da="dsh-metaphysics/profiles-v1",Te=24,Ra=16,at=40,tt=60,Ia=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=Da,s.PROF_MAX=Te,s.PROF_KINDS=Ia;const ya={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>ya[e]||String(e||"");const Se=e=>typeof e=="string";function We(e){if(!e||typeof e!="object"||Array.isArray(e)||!Se(e.id)||!e.id||e.id.length>40||!Se(e.kind)||Ia.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const o=Number(i[1]),l=Number(i[2]),p=Number(i[3]);if(l<1||l>12||p<1||p>new Date(o,l,0).getDate())return null;const c=Se(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:Se(e.label)?e.label.slice(0,Ra):"",date:e.date,time:e.hourUnknown===!0?"":c,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:Se(e.address)?e.address.slice(0,at):"",note:Se(e.note)?e.note.slice(0,tt):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function yt(){try{const e=window.localStorage?window.localStorage.getItem(Da):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function Fe(e){return e.slice().sort((i,o)=>(o.pinned?1:0)-(i.pinned?1:0)||(o.lastUsedAt||o.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(o.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const o of yt()){const l=We(o);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return Fe(e)},s.profilesSave=function(e){const i=Fe(Array.isArray(e)?e.slice(0,Te):[]);try{return window.localStorage?(window.localStorage.setItem(Da,JSON.stringify(i)),!0):!1}catch{return!1}};let it=0;s.profilesNewId=function(){const e=Object.create(null);for(const o of s.profilesLoad())e[o.id]=1;let i;do i=`p${Date.now().toString(36)}${(it++).toString(36)}`;while(e[i]);return i},s.profilesPut=function(e){const i=We(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const o=s.profilesLoad(),l=o.findIndex(p=>p.id===i.id);if(l>=0){const p=o[l];i.createdAt=p.createdAt||i.createdAt,i.lastUsedAt=p.lastUsedAt,i.uses=p.uses,i.pinned=p.pinned,o.splice(l,1,i)}else o.push(i);if(o.length>Te){const p=o.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=p.find(u=>u.id!==i.id)||p[0],d=o.indexOf(c);d>=0&&o.splice(d,1)}return s.profilesSave(o)?{ok:!0,list:Fe(o),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(o=>o.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(o=>o.id===e?Object.assign({},o,{pinned:!o.pinned}):o);return s.profilesSave(i)?Fe(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const o=s.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?s.profilesSave(o)?Fe(o):s.profilesLoad():o};const Ba=864e5;function nt(e){const i=Number(e)||0;if(!i)return"未排过";const o=Math.floor((Date.now()-i)/Ba);if(o<=0)return"今天排过";if(o===1)return"昨天排过";if(o<30)return`${o} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}s.profilesAgo=nt;const la="dsh-metaphysics/cases-v1",Ga=480,Ye=["pending","hit","miss","void"],st={pending:"待验",hit:"应验",miss:"未应",void:"作废"},wa=120;s.CASE_KEY=la,s.CASE_MAX=Ga,s.CASE_STATUS=Ye,s.caseStatusLabel=e=>st[e]||st.pending;function Qe(e){if(!e||typeof e!="object"||Array.isArray(e)||!Se(e.id)||!e.id||e.id.length>64)return null;const i=e.entry;if(!i||typeof i!="object"||Array.isArray(i)||!Se(i.kind)||Ia.indexOf(i.kind)<0||!Se(i.date)&&!Se(i.time)&&!Se(i.question))return null;const o=Number(e.at||i.at)||0;return o?{id:e.id,at:o,status:Ye.indexOf(e.status)>=0?e.status:"pending",note:Se(e.note)?e.note.slice(0,wa):"",question:Se(i.question)?i.question.slice(0,80):"",entry:i}:null}function Oe(){try{const e=window.localStorage?window.localStorage.getItem(la):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function ea(e){if(!window.localStorage)return!1;try{return window.localStorage.setItem(la,JSON.stringify(e.slice(0,Ga))),!0}catch{return!1}}s.casesSave=ea,s.casesLoad=function(){return Oe().map(Qe).filter(Boolean).sort((e,i)=>i.at-e.at||(e.id<i.id?1:-1))},s.casesNewId=function(){const e={};Oe().forEach(o=>{o&&o.id&&(e[o.id]=1)});let i="";for(let o=0;o<8&&(i="c"+Date.now().toString(36)+Math.floor(Math.random()*1296).toString(36),!!e[i]);o+=1);return i},s.casesAdd=function(e,i){const o=i||{};if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,list:s.casesLoad()};const l=s.casesLoad(),p=Number(e.at)||Date.now();if(l.some(m=>m.at>p-6e4&&m.entry.kind===e.kind&&m.entry.date===e.date&&m.entry.time===e.time&&(m.entry.question||"")===(e.question||"")&&(m.entry.lines||"")===(e.lines||"")))return{ok:!0,dup:!0,list:s.casesLoad()};const d=Qe({id:s.casesNewId(),at:p,status:o.status||"pending",note:o.note||"",entry:e});if(!d)return{ok:!1,list:s.casesLoad()};const u=[d].concat(l.filter(m=>m.id!==d.id)).slice(0,Ga);return ea(u)?{ok:!0,item:d,list:u}:{ok:!1,list:s.casesLoad()}},s.casesSetStatus=function(e,i){if(Ye.indexOf(i)<0)return s.casesLoad();const o=Oe().map(Qe).filter(Boolean).map(l=>l.id===e?Object.assign({},l,{status:i}):l);return ea(o)?o:s.casesLoad()},s.casesRemove=function(e){const i=Oe().map(Qe).filter(Boolean).filter(o=>o.id!==e);return ea(i)?i:s.casesLoad()},s.casesExport=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(o=>JSON.stringify({id:o.id,at:o.at,atISO:new Date(o.at).toISOString(),kind:o.entry.kind,label:Se(o.entry.label)?o.entry.label:"",question:o.question,status:o.status,note:o.note,params:o.entry})).join(`
2073
- `)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const o=Oe().map(Qe).filter(Boolean),l={};o.forEach(c=>{l[c.id]=1});let p=0;for(let c=0;c<i.length;c+=1){const d=i[c];if(!d||typeof d!="object"||!Se(d.kind))continue;const u=Number(d.at)||0,m=`h-${u||"0"}-${c}-${d.kind}`;if(l[m])continue;const f=Qe({id:m,at:u||Date.now(),status:"pending",entry:d});f&&(l[m]=1,o.push(f),p+=1)}return p&&ea(o.sort((c,d)=>d.at-c.at)),{added:p,list:s.casesLoad()}};const $a={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const o=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=We(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=o.editingId&&d.id===o.editingId,f=o.armedDel&&d.id===o.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
2072
+ </section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let o=null;try{o=i.shadowSnapshot(e)}catch{return null}if(!o||!o.shadow||!o.shadow.baseId)return null;const l="mp-shadow-v1";let p={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(p=m)}catch{p={}}const c=p[o.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,o)}catch{d=null}o.at=Date.now(),p[o.shadow.baseId]=o;try{const u=Object.keys(p);if(u.length>24){u.sort((m,f)=>(Number(p[m]&&p[m].at)||0)-(Number(p[f]&&p[f].at)||0));for(const m of u.slice(0,u.length-24))delete p[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(p))}catch{}return d};const Fa="dsh-metaphysics/profiles-v1",Te=24,Da=16,et=40,at=60,Ra=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=Fa,s.PROF_MAX=Te,s.PROF_KINDS=Ra;const xa={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>xa[e]||String(e||"");const qe=e=>typeof e=="string";function Qe(e){if(!e||typeof e!="object"||Array.isArray(e)||!qe(e.id)||!e.id||e.id.length>40||!qe(e.kind)||Ra.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const o=Number(i[1]),l=Number(i[2]),p=Number(i[3]);if(l<1||l>12||p<1||p>new Date(o,l,0).getDate())return null;const c=qe(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:qe(e.label)?e.label.slice(0,Da):"",date:e.date,time:e.hourUnknown===!0?"":c,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:qe(e.address)?e.address.slice(0,et):"",note:qe(e.note)?e.note.slice(0,at):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function xt(){try{const e=window.localStorage?window.localStorage.getItem(Fa):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function Fe(e){return e.slice().sort((i,o)=>(o.pinned?1:0)-(i.pinned?1:0)||(o.lastUsedAt||o.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(o.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const o of xt()){const l=Qe(o);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return Fe(e)},s.profilesSave=function(e){const i=Fe(Array.isArray(e)?e.slice(0,Te):[]);try{return window.localStorage?(window.localStorage.setItem(Fa,JSON.stringify(i)),!0):!1}catch{return!1}};let tt=0;s.profilesNewId=function(){const e=Object.create(null);for(const o of s.profilesLoad())e[o.id]=1;let i;do i=`p${Date.now().toString(36)}${(tt++).toString(36)}`;while(e[i]);return i},s.profilesPut=function(e){const i=Qe(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const o=s.profilesLoad(),l=o.findIndex(p=>p.id===i.id);if(l>=0){const p=o[l];i.createdAt=p.createdAt||i.createdAt,i.lastUsedAt=p.lastUsedAt,i.uses=p.uses,i.pinned=p.pinned,o.splice(l,1,i)}else o.push(i);if(o.length>Te){const p=o.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=p.find(u=>u.id!==i.id)||p[0],d=o.indexOf(c);d>=0&&o.splice(d,1)}return s.profilesSave(o)?{ok:!0,list:Fe(o),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(o=>o.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(o=>o.id===e?Object.assign({},o,{pinned:!o.pinned}):o);return s.profilesSave(i)?Fe(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const o=s.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?s.profilesSave(o)?Fe(o):s.profilesLoad():o};const Ia=864e5;function it(e){const i=Number(e)||0;if(!i)return"未排过";const o=Math.floor((Date.now()-i)/Ia);if(o<=0)return"今天排过";if(o===1)return"昨天排过";if(o<30)return`${o} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}s.profilesAgo=it;const da="dsh-metaphysics/cases-v1",Ba=480,Ke=["pending","hit","miss","void"],nt={pending:"待验",hit:"应验",miss:"未应",void:"作废"},va=120;s.CASE_KEY=da,s.CASE_MAX=Ba,s.CASE_STATUS=Ke,s.caseStatusLabel=e=>nt[e]||nt.pending;function ea(e){if(!e||typeof e!="object"||Array.isArray(e)||!qe(e.id)||!e.id||e.id.length>64)return null;const i=e.entry;if(!i||typeof i!="object"||Array.isArray(i)||!qe(i.kind)||Ra.indexOf(i.kind)<0||!qe(i.date)&&!qe(i.time)&&!qe(i.question))return null;const o=Number(e.at||i.at)||0;return o?{id:e.id,at:o,status:Ke.indexOf(e.status)>=0?e.status:"pending",note:qe(e.note)?e.note.slice(0,va):"",question:qe(i.question)?i.question.slice(0,80):"",entry:i}:null}function Oe(){try{const e=window.localStorage?window.localStorage.getItem(da):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function aa(e){if(!window.localStorage)return!1;try{return window.localStorage.setItem(da,JSON.stringify(e.slice(0,Ba))),!0}catch{return!1}}s.casesSave=aa,s.casesLoad=function(){return Oe().map(ea).filter(Boolean).sort((e,i)=>i.at-e.at||(e.id<i.id?1:-1))},s.casesNewId=function(){const e={};Oe().forEach(o=>{o&&o.id&&(e[o.id]=1)});let i="";for(let o=0;o<8&&(i="c"+Date.now().toString(36)+Math.floor(Math.random()*1296).toString(36),!!e[i]);o+=1);return i},s.casesAdd=function(e,i){const o=i||{};if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,list:s.casesLoad()};const l=s.casesLoad(),p=Number(e.at)||Date.now();if(l.some(m=>m.at>p-6e4&&m.entry.kind===e.kind&&m.entry.date===e.date&&m.entry.time===e.time&&(m.entry.question||"")===(e.question||"")&&(m.entry.lines||"")===(e.lines||"")))return{ok:!0,dup:!0,list:s.casesLoad()};const d=ea({id:s.casesNewId(),at:p,status:o.status||"pending",note:o.note||"",entry:e});if(!d)return{ok:!1,list:s.casesLoad()};const u=[d].concat(l.filter(m=>m.id!==d.id)).slice(0,Ba);return aa(u)?{ok:!0,item:d,list:u}:{ok:!1,list:s.casesLoad()}},s.casesSetStatus=function(e,i){if(Ke.indexOf(i)<0)return s.casesLoad();const o=Oe().map(ea).filter(Boolean).map(l=>l.id===e?Object.assign({},l,{status:i}):l);return aa(o)?o:s.casesLoad()},s.casesRemove=function(e){const i=Oe().map(ea).filter(Boolean).filter(o=>o.id!==e);return aa(i)?i:s.casesLoad()},s.casesExport=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(o=>JSON.stringify({id:o.id,at:o.at,atISO:new Date(o.at).toISOString(),kind:o.entry.kind,label:qe(o.entry.label)?o.entry.label:"",question:o.question,status:o.status,note:o.note,params:o.entry})).join(`
2073
+ `)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const o=Oe().map(ea).filter(Boolean),l={};o.forEach(c=>{l[c.id]=1});let p=0;for(let c=0;c<i.length;c+=1){const d=i[c];if(!d||typeof d!="object"||!qe(d.kind))continue;const u=Number(d.at)||0,m=`h-${u||"0"}-${c}-${d.kind}`;if(l[m])continue;const f=ea({id:m,at:u||Date.now(),status:"pending",entry:d});f&&(l[m]=1,o.push(f),p+=1)}return p&&aa(o.sort((c,d)=>d.at-c.at)),{added:p,list:s.casesLoad()}};const ya={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const o=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=Qe(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=o.editingId&&d.id===o.editingId,f=o.armedDel&&d.id===o.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
2074
2074
  <button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${t(d.id)}"
2075
2075
  title="${t(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
2076
- <span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${$a[d.gender]||""}</i>`:""}</span>
2076
+ <span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${ya[d.gender]||""}</i>`:""}</span>
2077
2077
  <span class="mp-prof-sys">${t(s.profKindLabel?s.profKindLabel(d.kind):d.kind)}</span>
2078
2078
  <span class="mp-prof-bd">${t(u)}</span>
2079
- <span class="mp-prof-at">${t(nt(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
2079
+ <span class="mp-prof-at">${t(it(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
2080
2080
  </button>
2081
2081
  <span class="mp-prof-ops">
2082
2082
  <button type="button" data-mp-prof="pin" data-id="${t(d.id)}" class="${d.pinned?"on":""}"
@@ -2090,11 +2090,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2090
2090
  ${p}
2091
2091
  ${o.bar||""}
2092
2092
  </section>`},s.profilesBarHTML=function(e){const i=e||{};return`<div class="mp-prof-bar">
2093
- <input class="mp-prof-name" type="text" maxlength="${Ra}" placeholder="称呼,如「我」「妈妈」" aria-label="档案称呼" value="${t(i.name||"")}">
2093
+ <input class="mp-prof-name" type="text" maxlength="${Da}" placeholder="称呼,如「我」「妈妈」" aria-label="档案称呼" value="${t(i.name||"")}">
2094
2094
  <button type="button" data-mp-prof="put"${i.canAdd===!1?" disabled":""}>${t(i.editingId?"更新这张档案":"存为我的命盘")}</button>
2095
2095
  ${i.editingId?'<button type="button" class="ghost" data-mp-prof="cancel">取消改名</button>':""}
2096
2096
  <span class="mp-prof-tip">${t(i.tip||(i.editingId?"改完出生信息或称呼,点「更新这张档案」覆盖原档。":"存的是出生时间与出生地这些输入,不是结果。"))}</span>
2097
- </div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const o=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:o,id:i.getAttribute("data-id")||"",name:i}};const wt=["bazi","trend"],Ua=["bazi","ziwei","liuyao","meihua","daliuren","qimen","hepan","chenggu","trend","fengshui","name","xiaoliuren"];s.profUsable=function(e){return!e||typeof e!="object"?!1:e.hourUnknown===!0||e.time?!0:Ua.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,o){const l=e||{},p=l.hourUnknown===!0&&wt.indexOf(String(l.kind||""))>=0;return!p&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:We(Object.assign({id:o||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Ra)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:p,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,o){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",p=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof o=="string"?o:"",d=(m,f)=>{const b=String(m??"");return b.length>f?`${b.slice(0,f)}…`:b},u=e.map((m,f)=>{const b=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${f===0?" open":""}>
2097
+ </div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const o=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:o,id:i.getAttribute("data-id")||"",name:i}};const vt=["bazi","trend"],Ga=["bazi","ziwei","liuyao","meihua","daliuren","qimen","hepan","chenggu","trend","fengshui","name","xiaoliuren"];s.profUsable=function(e){return!e||typeof e!="object"?!1:e.hourUnknown===!0||e.time?!0:Ga.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,o){const l=e||{},p=l.hourUnknown===!0&&vt.indexOf(String(l.kind||""))>=0;return!p&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:Qe(Object.assign({id:o||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Da)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:p,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,o){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",p=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof o=="string"?o:"",d=(m,f)=>{const b=String(m??"");return b.length>f?`${b.slice(0,f)}…`:b},u=e.map((m,f)=>{const b=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${f===0?" open":""}>
2098
2098
  <summary><span class="mp-trace-no">${f+1}</span><span class="mp-trace-field">${t(m.field)}</span><span class="mp-trace-res">${t(d(m.result,44))}</span></summary>
2099
2099
  <div class="mp-trace-detail">
2100
2100
  <div class="mp-trace-rule"><b>规则</b>${t(m.rule)}</div>
@@ -2129,7 +2129,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2129
2129
  <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${w.liuhe?`<span class="mp-al-chip">六合·${t(w.liuhe)}</span>`:""}${l(w.sanhe||[])}</div></div>
2130
2130
  ${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${t(e.dailyHexagram.name)}</b> ${t(e.dailyHexagram.meaning||"")}</div>`:""}
2131
2131
  <div class="mp-al-note">${t(e.meta&&e.meta.scope||"")}</div>
2132
- </section>`};const $t=" liuyao tarot meihua daliuren qimen xiaoliuren ",De=" almanac zeri convert star numerology wuyunliuqi ",ka={cast:"先看卦名或牌名——事情此刻的样子;再看动爻、正逆位,变化在那里。",person:"先找「你」那一格(日主、命宫或主质);再看被强调的字或星。",day:"先看今天值什么,再看宜忌那几栏。"};s.plainHTML=function(e){if(!e||e.system==="taiyi")return"";const i=e.brief&&e.brief.lead||"";if(!i)return"";const o=" "+String(e.system||"")+" ",l=$t.indexOf(o)>=0?ka.cast:De.indexOf(o)>=0?ka.day:ka.person;return'<div class="mp-pl"><p class="mp-pl-lead">'+t(i)+'</p><p class="mp-pl-how">'+t(l)+"</p></div>"},s.taiyiHTML=function(e){if(!e||!e.taiyi||!e.meta)return"";const i=e.taiyi,o=e.wenchang||{},l=e.shiji||{},p=e.jishen||{},c=e.suan||{},d=e.jiang||{},u=e.geju||{},f=[[9,"巽"],[2,"离"],[7,"坤"],[4,"震"],[5,"中"],[6,"兑"],[3,"艮"],[8,"坎"],[1,"乾"]].map(U=>{const J=U[0],fe=U[1],be=i.palace===J,x=o.num===J,v=l.palace===J,ce=(be?'<i class="mp-ty-mark">太乙</i>':"")+(v?'<i class="mp-ty-mark s">始击</i>':"")+(x?'<i class="mp-ty-mark w">文昌</i>':"");return`<div class="mp-ty-cell${be?" on":""}${fe==="中"?" mid":""}"><b>${t(fe)}</b><em>${J}</em>${ce}</div>`}).join(""),b=e.scope&&e.scope.notCovered||[],w=e.month||{},$=e.day||{},A=e.hour||{},L=w.taiyi&&w.taiyi.palaceName||"",_=String(w.taiyi&&w.taiyi.unitInPalace||""),Q=w.mu?w.mu.pos+"("+w.mu.god+")":"",D=w.jishen&&w.jishen.branch||"",T=$.taiyi&&$.taiyi.palaceName||"",H=String($.taiyi&&$.taiyi.unitInPalace||""),pe=$.mu?$.mu.pos+"("+$.mu.god+")":"",M=$.jishen&&$.jishen.branch||"",B=A.taiyi&&A.taiyi.palaceName||"",y=String(A.taiyi&&A.taiyi.unitInPalace||""),he=A.jishen&&A.jishen.branch||"",W=e.jixiong||{},ie=e.verdict||{},j=ie.grade||W.grade||"xiong",k=ie.label||W.label||"凶",C=e.shenjiang||{},O=C.rows?`${C.stem}日、${C.day?"昼贵":"夜贵"}起${C.startBranch}${C.dir>0?"顺":"逆"}行;吉神下:${(C.goods||[]).join("、")||"无"};凶神下:${(C.bads||[]).join("、")||"无"}`:"未排",oe=W.grade||"xiong",ge=W.label||"凶",de=e.gate&&e.gate.gate||"",ke={掩:"客方的目和太乙挤在同一格",击:"始击挨在太乙左右",格:"太乙和始击隔一格正面对上",对:"文昌从对面顶过来",提:"客大将和文昌挤在一格",迫:"有将贴得太近,就在太乙前后一格",囚:"有将被关在太乙那一格里",关:"主客两边的人撞在一处"},ve=(u.list||[]).map(U=>{const J=String(U).charAt(0);return ke[J]?J+"——"+ke[J]:String(U)}),P=oe==="xiong"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判凶:主客两边有几样撞到了一起。`:oe==="daji"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判大吉:位置和数都顺,门也在吉道上。`:oe==="buhe"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判不和:位置不冲突,但数上不合。`:`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判吉:位置不冲突。`;return`<section class="mp-ty" aria-label="太乙神数">
2132
+ </section>`};const yt=" liuyao tarot meihua daliuren qimen xiaoliuren ",De=" almanac zeri convert star numerology wuyunliuqi ",wa={cast:"先看卦名或牌名——事情此刻的样子;再看动爻、正逆位,变化在那里。",person:"先找「你」那一格(日主、命宫或主质);再看被强调的字或星。",day:"先看今天值什么,再看宜忌那几栏。"};s.plainHTML=function(e){if(!e||e.system==="taiyi")return"";const i=e.brief&&e.brief.lead||"";if(!i)return"";const o=" "+String(e.system||"")+" ",l=yt.indexOf(o)>=0?wa.cast:De.indexOf(o)>=0?wa.day:wa.person;return'<div class="mp-pl"><p class="mp-pl-lead">'+t(i)+'</p><p class="mp-pl-how">'+t(l)+"</p></div>"},s.taiyiHTML=function(e){if(!e||!e.taiyi||!e.meta)return"";const i=e.taiyi,o=e.wenchang||{},l=e.shiji||{},p=e.jishen||{},c=e.suan||{},d=e.jiang||{},u=e.geju||{},f=[[9,"巽"],[2,"离"],[7,"坤"],[4,"震"],[5,"中"],[6,"兑"],[3,"艮"],[8,"坎"],[1,"乾"]].map(U=>{const J=U[0],fe=U[1],be=i.palace===J,x=o.num===J,v=l.palace===J,ce=(be?'<i class="mp-ty-mark">太乙</i>':"")+(v?'<i class="mp-ty-mark s">始击</i>':"")+(x?'<i class="mp-ty-mark w">文昌</i>':"");return`<div class="mp-ty-cell${be?" on":""}${fe==="中"?" mid":""}"><b>${t(fe)}</b><em>${J}</em>${ce}</div>`}).join(""),b=e.scope&&e.scope.notCovered||[],w=e.month||{},$=e.day||{},A=e.hour||{},L=w.taiyi&&w.taiyi.palaceName||"",_=String(w.taiyi&&w.taiyi.unitInPalace||""),Q=w.mu?w.mu.pos+"("+w.mu.god+")":"",D=w.jishen&&w.jishen.branch||"",T=$.taiyi&&$.taiyi.palaceName||"",H=String($.taiyi&&$.taiyi.unitInPalace||""),pe=$.mu?$.mu.pos+"("+$.mu.god+")":"",M=$.jishen&&$.jishen.branch||"",B=A.taiyi&&A.taiyi.palaceName||"",y=String(A.taiyi&&A.taiyi.unitInPalace||""),he=A.jishen&&A.jishen.branch||"",W=e.jixiong||{},ie=e.verdict||{},j=ie.grade||W.grade||"xiong",k=ie.label||W.label||"凶",C=e.shenjiang||{},O=C.rows?`${C.stem}日、${C.day?"昼贵":"夜贵"}起${C.startBranch}${C.dir>0?"顺":"逆"}行;吉神下:${(C.goods||[]).join("、")||"无"};凶神下:${(C.bads||[]).join("、")||"无"}`:"未排",oe=W.grade||"xiong",ge=W.label||"凶",de=e.gate&&e.gate.gate||"",ke={掩:"客方的目和太乙挤在同一格",击:"始击挨在太乙左右",格:"太乙和始击隔一格正面对上",对:"文昌从对面顶过来",提:"客大将和文昌挤在一格",迫:"有将贴得太近,就在太乙前后一格",囚:"有将被关在太乙那一格里",关:"主客两边的人撞在一处"},ye=(u.list||[]).map(U=>{const J=String(U).charAt(0);return ke[J]?J+"——"+ke[J]:String(U)}),P=oe==="xiong"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判凶:主客两边有几样撞到了一起。`:oe==="daji"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判大吉:位置和数都顺,门也在吉道上。`:oe==="buhe"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判不和:位置不冲突,但数上不合。`:`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判吉:位置不冲突。`;return`<section class="mp-ty" aria-label="太乙神数">
2133
2133
  <div class="mp-ty-h">
2134
2134
  <span class="mp-ty-y">${t(String(e.meta.year))} 年</span>
2135
2135
  <span class="mp-ty-j">${t(e.meta.dunText||"")}${t(String(e.meta.ju))}局</span>
@@ -2141,7 +2141,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2141
2141
  <p class="mp-ty-lead">${t(P)}</p>
2142
2142
  <p>先看太乙落在哪一格——那是「主」这一年的位置,整张盘围着它转。</p>
2143
2143
  <p>${t(de)}门一值三十年,管的是这三十年的大环境,不是今年单一年的事。</p>
2144
- <p>判${t(ge)},是因为${t(ve.length?ve.join(";"):"八种位置关系一个都没犯")}。</p>
2144
+ <p>判${t(ge)},是因为${t(ye.length?ye.join(";"):"八种位置关系一个都没犯")}。</p>
2145
2145
  <p class="mp-ty-close">这一层只摆位置和数,不回答事情成不成;想看每一步怎么来的,展开下面的细目。</p>
2146
2146
  </div>
2147
2147
  <details class="mp-ty-det">
@@ -2231,7 +2231,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2231
2231
  <div class="mp-mb-sec"><em>课题</em>${t(o.growth||"")}</div>
2232
2232
  </div>
2233
2233
  <div class="mp-mb-note">${t(e.note||"")}</div>
2234
- </section>`};const za=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],kt={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},Za=["生气","延年","天医","伏位"],He=(e,i)=>`<span class="mp-fs-chip${i?" "+i:""}">${t(e)}</span>`,aa=(e,i,o)=>`<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(kt[e]||"")}</span>${i||""}</div>`+(o||"")+"</div>",Ya=e=>e.length?`<dl class="mp-fs-facts">${e.map(([i,o])=>`<div class="mp-fs-row"><dt>${t(i)}</dt><dd>${t(o)}</dd></div>`).join("")}</dl>`:"",da=(e,i,o,l,p,c)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${i?`<span class="mp-fs-sub">${t(i)}</span>`:""}</div>`+(o.length?`<div class="mp-fs-chips">${o.join("")}</div>`:"")+l+p+c.filter(Boolean).map(d=>`<div class="mp-fs-note">${t(d)}</div>`).join("")+"</section>",ot=(e,i)=>`<div class="mp-fs-grid" role="group" aria-label="${t(i)}">`+za.map(o=>o.map(l=>{const p=e.find(u=>u&&u.palace===l);if(!p)return aa(l,"","");const c=Za.includes(p.star),d=`<span class="mp-fs-star"${p.role?` title="${t(p.role)}"`:""}>${t(p.star)}<em class="${c?"ok":"bad"}">${c?"吉":"凶"}</em></span>`;return aa(l,d,"")}).join("")).join("")+"</div>";function Ut(e,i){const o=i.period,l={};for(const $ of e.palaces||[])l[$.palace]=$;const p=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(o)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+za.map($=>$.map(A=>{const L=l[A];if(!L)return aa(A,"","");const _=[["运",L.yun],["山",L.shan],["向",L.xiang]].map(([Q,D])=>`<span class="${D===o?"on":""}" title="${t(Q)}星 ${t(D)}">${t(D)}</span>`).join("");return aa(A,"",`<div class="mp-fs-nums">${_}</div>`)}).join("")).join("")+"</div>",c=e.wangShanWangXiang||{},d=i.jianXiang||{},u=e.timeFlying||null,m=[He(d.active?`兼${d.jian} ${d.offset}° · 替卦`:"正向 · 下卦",d.active?"ok":""),He(`山盘 ${i.shanCenter.star}${i.shanCenter.name} · ${i.shanCenter.fly}`),He(`向盘 ${i.xiangCenter.star}${i.xiangCenter.name} · ${i.xiangCenter.fly}`),He(c.byChart?"盘面:到山到向":"盘面:未到山到向",c.byChart?"ok":""),He(c.byTable===null?"表法:替卦不套":c.byTable?"表法:在列":"表法:未列",c.byTable?"ok":"")],f=($,A)=>`${A} ${$.star}${$.name}(${$.fly},${$.basis}${$.mode==="替卦"?`;原运星 ${$.original}${$.replaced?",已替":",用替而未替"}`:""})`,b=u?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([$])=>u[$]).map(([$,A])=>`${A}${u[$].centerName}(${u[$].fly})`).join(" "):"",w=Ya([...d.active?[["替卦",`${d.note}${c.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${f(i.shanCenter,"山盘")};${f(i.xiangCenter,"向盘")}`],["当运",`山星${o}落 ${e.dangYun.shan.text};向星${o}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${c.note||""}${(c.table||[]).length?` 本运所列:${c.table.join("、")}。`:" 本运表法无局。"}`],...b?[["年月日时",`${b}${u.meta&&u.meta.note?` ${u.meta.note}`:""}`]]:[]]);return da(d.active?"玄空替卦":"玄空下卦",`${i.periodLabel} · 坐${i.sitting} · 向${i.facing}`,m,p,w,[i.note,e.disclaimer])}function zt(e,i){const o=e.mingGua||{},l=ot([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),p=[He(o.compatible||"—"),He(`${i.gender}命 · ${i.guaYear} 年立春界`)],c=[];if(e.yearlyFlying){const d=e.yearlyFlying;c.push(["年紫白",`${d.centerName}入中;${d.palaces.filter(u=>u.palace!=="中").map(u=>`${u.palace}${u.name}`).join("、")}`])}return da("八宅命卦",`${o.num}${o.gua}(${o.group})· ${o.direction}`,p,l,Ya(c),[i.note,e.disclaimer])}function ja(e,i){const o=e.layout||{},l=ot(e.houseStars||[],"宅卦八向(吉凶)"),p=[He(`${i.houseGua}宅 · ${i.houseGroup}`),He(`坐${i.sitting}`),He(`向${i.facing}`)],c=[["门",o.door],["灶",o.stove],["床",o.bed],["厕",o.toilet]];return e.mingMatch&&c.push(["命宅配",e.mingMatch.text]),da("门主灶",`${i.houseGua}宅 · 坐${i.sitting} · 向${i.facing}`,p,l,Ya(c),[i.birthNote,e.disclaimer])}s.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return s.quickHTML(e);const i=e.meta||{};return i.action==="xuankong"?Ut(e,i):i.action==="advise"?ja(e,i):zt(e,i)},s.perfHTML=function(e){if(!e)return"";const i=u=>typeof u=="number"&&isFinite(u)?`${Math.max(0,Math.round(u))}ms`:"",o=e.cached===!0?"(已缓存)":e.cached===!1?"(首次加载)":"",l=[];i(e.engineMs)&&l.push(`引擎 ${i(e.engineMs)}${o}`),i(e.computeMs)&&l.push(`排盘 ${i(e.computeMs)}`),i(e.renderMs)&&l.push(`渲染 ${i(e.renderMs)}`);const p=i(e.totalMs);if(!l.length&&!p)return"";const c=p?`首屏 ${p}`:"耗时";return`<div class="mp-perf" title="本机这一次的实测耗时,不含网络与服务端;换机器、首次加载与已缓存会不同">${l.length?`${c}|${l.join(" · ")}`:c}</div>`},s.zeriHTML=function(e){if(!e||!e.compare||e.compare.mode!=="candidates"||!Array.isArray(e.days))return s.quickHTML(e);const i=e.meta||{},o=e.shenshaRef||{},l=e.compare.best?e.compare.best.date:"",p=e.days.map(u=>{const m=u.date===l,f=u.excluded||u.verdict==="回避"?"bad":u.verdict==="推荐"?"good":"",b=u.grade||{},w=b.label?`<b>${t(b.label)}</b><em>吉${t(b.ji)} / 凶${t(b.xiong)} ${t(b.decision||"")}</em>`:"—";return`<tr class="mp-zr-row${m?" top":""}${u.excluded?" off":""}">
2234
+ </section>`};const $a=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],wt={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},Ua=["生气","延年","天医","伏位"],He=(e,i)=>`<span class="mp-fs-chip${i?" "+i:""}">${t(e)}</span>`,ta=(e,i,o)=>`<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(wt[e]||"")}</span>${i||""}</div>`+(o||"")+"</div>",Za=e=>e.length?`<dl class="mp-fs-facts">${e.map(([i,o])=>`<div class="mp-fs-row"><dt>${t(i)}</dt><dd>${t(o)}</dd></div>`).join("")}</dl>`:"",ca=(e,i,o,l,p,c)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${i?`<span class="mp-fs-sub">${t(i)}</span>`:""}</div>`+(o.length?`<div class="mp-fs-chips">${o.join("")}</div>`:"")+l+p+c.filter(Boolean).map(d=>`<div class="mp-fs-note">${t(d)}</div>`).join("")+"</section>",st=(e,i)=>`<div class="mp-fs-grid" role="group" aria-label="${t(i)}">`+$a.map(o=>o.map(l=>{const p=e.find(u=>u&&u.palace===l);if(!p)return ta(l,"","");const c=Ua.includes(p.star),d=`<span class="mp-fs-star"${p.role?` title="${t(p.role)}"`:""}>${t(p.star)}<em class="${c?"ok":"bad"}">${c?"吉":"凶"}</em></span>`;return ta(l,d,"")}).join("")).join("")+"</div>";function Gt(e,i){const o=i.period,l={};for(const $ of e.palaces||[])l[$.palace]=$;const p=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(o)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+$a.map($=>$.map(A=>{const L=l[A];if(!L)return ta(A,"","");const _=[["运",L.yun],["山",L.shan],["向",L.xiang]].map(([Q,D])=>`<span class="${D===o?"on":""}" title="${t(Q)}星 ${t(D)}">${t(D)}</span>`).join("");return ta(A,"",`<div class="mp-fs-nums">${_}</div>`)}).join("")).join("")+"</div>",c=e.wangShanWangXiang||{},d=i.jianXiang||{},u=e.timeFlying||null,m=[He(d.active?`兼${d.jian} ${d.offset}° · 替卦`:"正向 · 下卦",d.active?"ok":""),He(`山盘 ${i.shanCenter.star}${i.shanCenter.name} · ${i.shanCenter.fly}`),He(`向盘 ${i.xiangCenter.star}${i.xiangCenter.name} · ${i.xiangCenter.fly}`),He(c.byChart?"盘面:到山到向":"盘面:未到山到向",c.byChart?"ok":""),He(c.byTable===null?"表法:替卦不套":c.byTable?"表法:在列":"表法:未列",c.byTable?"ok":"")],f=($,A)=>`${A} ${$.star}${$.name}(${$.fly},${$.basis}${$.mode==="替卦"?`;原运星 ${$.original}${$.replaced?",已替":",用替而未替"}`:""})`,b=u?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([$])=>u[$]).map(([$,A])=>`${A}${u[$].centerName}(${u[$].fly})`).join(" "):"",w=Za([...d.active?[["替卦",`${d.note}${c.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${f(i.shanCenter,"山盘")};${f(i.xiangCenter,"向盘")}`],["当运",`山星${o}落 ${e.dangYun.shan.text};向星${o}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${c.note||""}${(c.table||[]).length?` 本运所列:${c.table.join("、")}。`:" 本运表法无局。"}`],...b?[["年月日时",`${b}${u.meta&&u.meta.note?` ${u.meta.note}`:""}`]]:[]]);return ca(d.active?"玄空替卦":"玄空下卦",`${i.periodLabel} · 坐${i.sitting} · 向${i.facing}`,m,p,w,[i.note,e.disclaimer])}function $t(e,i){const o=e.mingGua||{},l=st([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),p=[He(o.compatible||"—"),He(`${i.gender}命 · ${i.guaYear} 年立春界`)],c=[];if(e.yearlyFlying){const d=e.yearlyFlying;c.push(["年紫白",`${d.centerName}入中;${d.palaces.filter(u=>u.palace!=="中").map(u=>`${u.palace}${u.name}`).join("、")}`])}return ca("八宅命卦",`${o.num}${o.gua}(${o.group})· ${o.direction}`,p,l,Za(c),[i.note,e.disclaimer])}function ka(e,i){const o=e.layout||{},l=st(e.houseStars||[],"宅卦八向(吉凶)"),p=[He(`${i.houseGua}宅 · ${i.houseGroup}`),He(`坐${i.sitting}`),He(`向${i.facing}`)],c=[["门",o.door],["灶",o.stove],["床",o.bed],["厕",o.toilet]];return e.mingMatch&&c.push(["命宅配",e.mingMatch.text]),ca("门主灶",`${i.houseGua}宅 · 坐${i.sitting} · 向${i.facing}`,p,l,Za(c),[i.birthNote,e.disclaimer])}s.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return s.quickHTML(e);const i=e.meta||{};return i.action==="xuankong"?Gt(e,i):i.action==="advise"?ka(e,i):$t(e,i)},s.perfHTML=function(e){if(!e)return"";const i=u=>typeof u=="number"&&isFinite(u)?`${Math.max(0,Math.round(u))}ms`:"",o=e.cached===!0?"(已缓存)":e.cached===!1?"(首次加载)":"",l=[];i(e.engineMs)&&l.push(`引擎 ${i(e.engineMs)}${o}`),i(e.computeMs)&&l.push(`排盘 ${i(e.computeMs)}`),i(e.renderMs)&&l.push(`渲染 ${i(e.renderMs)}`);const p=i(e.totalMs);if(!l.length&&!p)return"";const c=p?`首屏 ${p}`:"耗时";return`<div class="mp-perf" title="本机这一次的实测耗时,不含网络与服务端;换机器、首次加载与已缓存会不同">${l.length?`${c}|${l.join(" · ")}`:c}</div>`},s.zeriHTML=function(e){if(!e||!e.compare||e.compare.mode!=="candidates"||!Array.isArray(e.days))return s.quickHTML(e);const i=e.meta||{},o=e.shenshaRef||{},l=e.compare.best?e.compare.best.date:"",p=e.days.map(u=>{const m=u.date===l,f=u.excluded||u.verdict==="回避"?"bad":u.verdict==="推荐"?"good":"",b=u.grade||{},w=b.label?`<b>${t(b.label)}</b><em>吉${t(b.ji)} / 凶${t(b.xiong)} ${t(b.decision||"")}</em>`:"—";return`<tr class="mp-zr-row${m?" top":""}${u.excluded?" off":""}">
2235
2235
  <th scope="row"><b>${t(u.date)}</b>${m?'<i class="mp-zr-best">最优</i>':""}
2236
2236
  <em>${t(u.weekday)} ${t(u.lunar)}</em></th>
2237
2237
  <td><b>${t(u.dayGanZhi)}</b><em>${t(u.zhiXing)}日</em></td>
@@ -2257,7 +2257,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2257
2257
  </section>`},s.quickHTML=function(e){if(!e)return"";const o={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",l=e.summary||"",p=l?`<pre class="mp-quick-pre">${t(l)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(o)}结果">
2258
2258
  <div class="mp-quick-h"><b>${t(o)}</b></div>
2259
2259
  ${p}
2260
- </section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const o=i&&i.outline||[],l=(i&&i.tables||[]).filter(pe=>Array.isArray(pe.rows)&&pe.rows.length),p=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(pe,M)=>`${M?"600 ":""}${pe}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,f=document.createElement("canvas"),b=f.getContext?f.getContext("2d"):null;if(!b)return"";const w=(pe,M)=>{const B=[];let y="";for(const he of String(pe)){const W=y+he;b.measureText(W).width>M&&y?(B.push(y),y=he):y=W}return y&&B.push(y),B.length?B:[""]};b.font=m(15);let $=0;const A=o.map(pe=>{const M=w(pe.text,c-d*2-70);return $+=Math.min(M.length,2)*u+10,{o:pe,lines:M.slice(0,2)}}),L=l[0]||null,_=L?L.rows.slice(0,6):[],Q=L?54+_.length*34:0,D=150+$+(A.length?34:0)+Q+120;f.width=c,f.height=D,b.fillStyle="rgb(255,255,255)",b.fillRect(0,0,c,D),b.fillStyle="rgb(31,111,63)",b.fillRect(0,0,c,8);let T=52;b.fillStyle="rgb(27,27,27)",b.font=m(28,!0),b.fillText(`${p} · 摘要`,d,T),T+=30,b.fillStyle="rgb(111,106,96)",b.font=m(14);const H=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(b.fillText(H,d,T),T+=34,A.length){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText("一页读懂",d,T),T+=26;for(const{o:pe,lines:M}of A)b.fillStyle="rgb(138,131,120)",b.font=m(14,!0),b.fillText(pe.label,d,T),b.fillStyle="rgb(63,58,51)",b.font=m(15),M.forEach((B,y)=>b.fillText(B,d+70,T+y*u)),T+=M.length*u+10;T+=8}if(L){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText(L.title,d,T),T+=24,b.fillStyle="rgb(138,131,120)",b.font=m(13),b.fillText(L.columns.join(" · "),d,T),T+=8,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T),b.lineTo(c-d,T),b.stroke(),T+=22,b.fillStyle="rgb(63,58,51)",b.font=m(14);for(const pe of _){const M=pe.filter(Boolean).join(" · "),B=w(M,c-d*2)[0];b.fillText(B,d,T),T+=34}}return T=D-62,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T-18),b.lineTo(c-d,T-18),b.stroke(),b.fillStyle="rgb(138,131,120)",b.font=m(12),b.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,T+6),b.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,T+26),f.toDataURL?f.toDataURL("image/png"):""}catch{return""}}})();const ri="dsh-metaphysics/history-v1";function rn(){try{const n=window.localStorage&&window.localStorage.getItem(ri),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(S=>S&&typeof S=="object"&&typeof S.kind=="string").slice(0,20):[]}catch{return[]}}function li(n){try{window.localStorage&&window.localStorage.setItem(ri,JSON.stringify(n.slice(0,20)))}catch{}}const ln=(n,s)=>n.kind===s.kind&&n.date===s.date&&n.time===s.time&&n.gender===s.gender&&!!n.hourUnknown==!!s.hourUnknown&&n.trueSolar!==!1==(s.trueSolar!==!1)&&n.lateZi!==!1==(s.lateZi!==!1)&&n.address===s.address&&n.lines===s.lines&&n.question===s.question&&n.mhMode===s.mhMode&&n.upper===s.upper&&n.lower===s.lower&&n.direction===s.direction&&n.spread===s.spread&&n.changing===s.changing&&(n.kind!=="qimen"||n.qimenRule===s.qimenRule&&n.qLateZi===s.qLateZi)&&(n.kind!=="zeri"||n.task===s.task&&n.days===s.days&&n.shengXiao===s.shengXiao&&n.zCand===s.zCand)&&(n.kind!=="xiaoliuren"||n.xlrMode===s.xlrMode&&n.num1===s.num1&&n.num2===s.num2&&n.num3===s.num3)&&(n.kind!=="trend"||n.toAge===s.toAge)&&(n.kind!=="fengshui"||n.fsMode===s.fsMode&&n.fsPeriod===s.fsPeriod&&n.sitting===s.sitting&&n.facing===s.facing)&&(n.kind!=="name"||n.nnMode===s.nnMode&&n.surname===s.surname&&n.givenName===s.givenName&&n.limitN===s.limitN)&&(n.kind!=="convert"||n.convMode===s.convMode&&n.lunarDate===s.lunarDate&&!!n.leapMonth==!!s.leapMonth)&&(n.kind!=="hepan"||n.hpChart===s.hpChart&&n.partnerDate===s.partnerDate&&n.partnerTime===s.partnerTime&&n.partnerGender===s.partnerGender&&n.partnerAddress===s.partnerAddress&&!!n.thirdOn==!!s.thirdOn&&n.p2Date===s.p2Date&&n.p2Time===s.p2Time&&n.p2Gender===s.p2Gender&&n.p2Address===s.p2Address);function dn(n,s){if(n==="bazi"){const F=["year","month","day","hour"].map(ee=>s.pillars&&s.pillars[ee]).filter(Boolean).map(ee=>ee.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${F}(时柱暂缺)`:F}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const R=window.__PP,Va=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let _e=0;const ut=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,cn=`
2260
+ </section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const o=i&&i.outline||[],l=(i&&i.tables||[]).filter(pe=>Array.isArray(pe.rows)&&pe.rows.length),p=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(pe,M)=>`${M?"600 ":""}${pe}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,f=document.createElement("canvas"),b=f.getContext?f.getContext("2d"):null;if(!b)return"";const w=(pe,M)=>{const B=[];let y="";for(const he of String(pe)){const W=y+he;b.measureText(W).width>M&&y?(B.push(y),y=he):y=W}return y&&B.push(y),B.length?B:[""]};b.font=m(15);let $=0;const A=o.map(pe=>{const M=w(pe.text,c-d*2-70);return $+=Math.min(M.length,2)*u+10,{o:pe,lines:M.slice(0,2)}}),L=l[0]||null,_=L?L.rows.slice(0,6):[],Q=L?54+_.length*34:0,D=150+$+(A.length?34:0)+Q+120;f.width=c,f.height=D,b.fillStyle="rgb(255,255,255)",b.fillRect(0,0,c,D),b.fillStyle="rgb(31,111,63)",b.fillRect(0,0,c,8);let T=52;b.fillStyle="rgb(27,27,27)",b.font=m(28,!0),b.fillText(`${p} · 摘要`,d,T),T+=30,b.fillStyle="rgb(111,106,96)",b.font=m(14);const H=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(b.fillText(H,d,T),T+=34,A.length){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText("一页读懂",d,T),T+=26;for(const{o:pe,lines:M}of A)b.fillStyle="rgb(138,131,120)",b.font=m(14,!0),b.fillText(pe.label,d,T),b.fillStyle="rgb(63,58,51)",b.font=m(15),M.forEach((B,y)=>b.fillText(B,d+70,T+y*u)),T+=M.length*u+10;T+=8}if(L){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText(L.title,d,T),T+=24,b.fillStyle="rgb(138,131,120)",b.font=m(13),b.fillText(L.columns.join(" · "),d,T),T+=8,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T),b.lineTo(c-d,T),b.stroke(),T+=22,b.fillStyle="rgb(63,58,51)",b.font=m(14);for(const pe of _){const M=pe.filter(Boolean).join(" · "),B=w(M,c-d*2)[0];b.fillText(B,d,T),T+=34}}return T=D-62,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T-18),b.lineTo(c-d,T-18),b.stroke(),b.fillStyle="rgb(138,131,120)",b.font=m(12),b.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,T+6),b.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,T+26),f.toDataURL?f.toDataURL("image/png"):""}catch{return""}}})();const pi="dsh-metaphysics/history-v1";function rn(){try{const n=window.localStorage&&window.localStorage.getItem(pi),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(S=>S&&typeof S=="object"&&typeof S.kind=="string").slice(0,20):[]}catch{return[]}}function ri(n){try{window.localStorage&&window.localStorage.setItem(pi,JSON.stringify(n.slice(0,20)))}catch{}}const ln=(n,s)=>n.kind===s.kind&&n.date===s.date&&n.time===s.time&&n.gender===s.gender&&!!n.hourUnknown==!!s.hourUnknown&&n.trueSolar!==!1==(s.trueSolar!==!1)&&n.lateZi!==!1==(s.lateZi!==!1)&&n.address===s.address&&n.lines===s.lines&&n.question===s.question&&n.mhMode===s.mhMode&&n.upper===s.upper&&n.lower===s.lower&&n.direction===s.direction&&n.spread===s.spread&&n.changing===s.changing&&(n.kind!=="qimen"||n.qimenRule===s.qimenRule&&n.qLateZi===s.qLateZi)&&(n.kind!=="zeri"||n.task===s.task&&n.days===s.days&&n.shengXiao===s.shengXiao&&n.zCand===s.zCand)&&(n.kind!=="xiaoliuren"||n.xlrMode===s.xlrMode&&n.num1===s.num1&&n.num2===s.num2&&n.num3===s.num3)&&(n.kind!=="trend"||n.toAge===s.toAge)&&(n.kind!=="fengshui"||n.fsMode===s.fsMode&&n.fsPeriod===s.fsPeriod&&n.sitting===s.sitting&&n.facing===s.facing)&&(n.kind!=="name"||n.nnMode===s.nnMode&&n.surname===s.surname&&n.givenName===s.givenName&&n.limitN===s.limitN)&&(n.kind!=="convert"||n.convMode===s.convMode&&n.lunarDate===s.lunarDate&&!!n.leapMonth==!!s.leapMonth)&&(n.kind!=="hepan"||n.hpChart===s.hpChart&&n.partnerDate===s.partnerDate&&n.partnerTime===s.partnerTime&&n.partnerGender===s.partnerGender&&n.partnerAddress===s.partnerAddress&&!!n.thirdOn==!!s.thirdOn&&n.p2Date===s.p2Date&&n.p2Time===s.p2Time&&n.p2Gender===s.p2Gender&&n.p2Address===s.p2Address);function dn(n,s){if(n==="bazi"){const F=["year","month","day","hour"].map(ee=>s.pillars&&s.pillars[ee]).filter(Boolean).map(ee=>ee.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${F}(时柱暂缺)`:F}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const R=window.__PP,Xa=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let _e=0;const ct=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,cn=`
2261
2261
  /* 整个侧栏面板铺宣纸:暖白渐变为底 + feTurbulence 纤维噪点平铺。
2262
2262
  background-attachment:local 让纹理跟着滚动内容走,长页面不会下半截露白。
2263
2263
  噪点用 colorMatrix 压到很低的 alpha(0.09),只做纸感不糊字。 */
@@ -2602,11 +2602,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
2602
2602
  @media (prefers-reduced-motion:reduce){
2603
2603
  *,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important}
2604
2604
  }
2605
- `,{useState:N,useEffect:ga,useRef:mn}=Xa,di=n=>String(n).padStart(2,"0");function un(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const S=Number(s[1]),F=Number(s[2]),ee=Number(s[3]);if(F<1||F>12||ee<1)return!1;const le=[31,S%4===0&&S%100!==0||S%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return ee<=le[F-1]}function ci(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const S=`${s[1]}-${di(s[2])}-${di(s[3])}`;return un(S)?S:""}function gn(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const F=ci(s);if(F)return F}const S=s.replace(/\D/g,"").slice(0,8);return S.length<=4?S:S.length<=6?`${S.slice(0,4)}-${S.slice(4)}`:`${S.slice(0,4)}-${S.slice(4,6)}-${S.slice(6)}`}function Ot(n){const s=n.value||"",[S,F]=N(s),ee=mn(s);ga(()=>{ee.current=s,F(s)},[s]);const se=()=>{const le=S.trim();if(!le){F(ee.current),n.onInvalid&&n.onInvalid("");return}const re=ci(le);if(re){ee.current=re,F(re),re!==s&&n.onChange(re);return}F(ee.current),n.onInvalid&&n.onInvalid(le)};return r("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:S,onChange:le=>{F(gn(le.target.value))},onBlur:se,onKeyDown:le=>{le.key==="Enter"&&(le.preventDefault(),se())}})}const gt=4,ia=12,ft=5,na=27,Ht=45;let ht=null;function bt(){if(ht)return ht;let n=null;try{n=X.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(ht={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},ht):{total:0,questions:[],scale:{}}}function fn(n){const{answers:s,page:S,onPick:F,onPage:ee,onSubmit:se,onClear:le}=n,re=bt(),ye=Math.max(1,Math.ceil(re.total/gt)),t=S*gt,$e=re.questions.slice(t,t+gt),I=s.filter(K=>K!=null).length,xe=re.total?Math.round(I/re.total*100):0,we=S>=ye-1,Z=I>=ia;return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:xe+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${S+1} / ${ye} 页 · 已答 ${I} / ${re.total}`)),r("div",{className:"mp-quiz-list"},$e.map((K,V)=>{const G=t+V;return r("div",{key:K.id||G,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(G+1).padStart(2,"0")),r("span",null,K.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${G+1} 题`},[1,2,3,4,5].map(te=>r("label",{key:te,className:"mp-quiz-o"+(s[G]===te?" on":"")},r("input",{type:"radio",name:`mpmbq${G}`,value:String(te),checked:s[G]===te,onChange:()=>F(G,te)}),r("b",null,String(te)),r("span",null,re.scale[te]||"")))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:S<=0,onClick:()=>ee(-1)},"上一页"),we?null:r("button",{className:"mp-quiz-btn",onClick:()=>ee(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!Z,onClick:se},"看结果"),r("button",{className:"mp-quiz-btn",onClick:le},"清空"),r("span",{className:"mp-quiz-hint"},Z?`已够 ${ia} 题,可以看结果;答完 ${re.total} 题会更准。`:`答满 ${ia} 题可先看结果(还差 ${ia-I} 题)。`)))}function hn(n){const{paper:s,answers:S,page:F,onPick:ee,onPage:se,onSubmit:le,onClear:re}=n;if(!s||!Array.isArray(s.questions))return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-hint"},"正在加载问卷题面…"));const ye=s.questions.length,t=Math.max(1,Math.ceil(ye/ft)),$e=F*ft,I=s.questions.slice($e,$e+ft),xe=S.filter(G=>G!=null).length,we=ye?Math.round(xe/ye*100):0,Z=F>=t-1,K=xe>=na,V=G=>{const te=(s.scale||[]).filter(Ne=>Ne&&Ne.v===G)[0];return te?te.label:String(G)};return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:we+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${F+1} / ${t} 页 · 已答 ${xe} / ${ye}`)),r("div",{className:"mp-quiz-list"},I.map((G,te)=>{const Ne=$e+te;return r("div",{key:G.no||Ne,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(Ne+1).padStart(2,"0")),r("span",null,G.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Ne+1} 题`},[1,2,3,4,5].map(Le=>r("label",{key:Le,className:"mp-quiz-o"+(S[Ne]===Le?" on":"")},r("input",{type:"radio",name:`mpcsq${Ne}`,value:String(Le),checked:S[Ne]===Le,onChange:()=>ee(Ne,Le)}),r("b",null,String(Le)),r("span",null,V(Le))))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:F<=0,onClick:()=>se(-1)},"上一页"),Z?null:r("button",{className:"mp-quiz-btn",onClick:()=>se(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!K,onClick:le},"看结果"),r("button",{className:"mp-quiz-btn",onClick:re},"清空"),r("span",{className:"mp-quiz-hint"},K?`已够 ${na} 题,可以看结果;答完 ${ye} 题会更准。`:`答满 ${na} 题可先看结果(还差 ${na-xe} 题)。`)))}class bn extends(Xa.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,S){console.error("[metaphysics] 面板渲染异常",s,S)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,S=String(s&&s.stack||"").split(`
2605
+ `,{useState:q,useEffect:Ma,useRef:mn}=Ja,li=n=>String(n).padStart(2,"0");function un(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const S=Number(s[1]),F=Number(s[2]),ee=Number(s[3]);if(F<1||F>12||ee<1)return!1;const le=[31,S%4===0&&S%100!==0||S%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return ee<=le[F-1]}function di(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const S=`${s[1]}-${li(s[2])}-${li(s[3])}`;return un(S)?S:""}function gn(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const F=di(s);if(F)return F}const S=s.replace(/\D/g,"").slice(0,8);return S.length<=4?S:S.length<=6?`${S.slice(0,4)}-${S.slice(4)}`:`${S.slice(0,4)}-${S.slice(4,6)}-${S.slice(6)}`}function _t(n){const s=n.value||"",[S,F]=q(s),ee=mn(s);Ma(()=>{ee.current=s,F(s)},[s]);const se=()=>{const le=S.trim();if(!le){F(ee.current),n.onInvalid&&n.onInvalid("");return}const re=di(le);if(re){ee.current=re,F(re),re!==s&&n.onChange(re);return}F(ee.current),n.onInvalid&&n.onInvalid(le)};return r("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:S,onChange:le=>{F(gn(le.target.value))},onBlur:se,onKeyDown:le=>{le.key==="Enter"&&(le.preventDefault(),se())}})}const mt=4,na=12,ut=5,sa=27,Ot=45;let gt=null;function ft(){if(gt)return gt;let n=null;try{n=X.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(gt={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},gt):{total:0,questions:[],scale:{}}}function fn(n){const{answers:s,page:S,onPick:F,onPage:ee,onSubmit:se,onClear:le}=n,re=ft(),ve=Math.max(1,Math.ceil(re.total/mt)),t=S*mt,$e=re.questions.slice(t,t+mt),I=s.filter(K=>K!=null).length,xe=re.total?Math.round(I/re.total*100):0,we=S>=ve-1,Z=I>=na;return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:xe+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${S+1} / ${ve} 页 · 已答 ${I} / ${re.total}`)),r("div",{className:"mp-quiz-list"},$e.map((K,V)=>{const G=t+V;return r("div",{key:K.id||G,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(G+1).padStart(2,"0")),r("span",null,K.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${G+1} 题`},[1,2,3,4,5].map(te=>r("label",{key:te,className:"mp-quiz-o"+(s[G]===te?" on":"")},r("input",{type:"radio",name:`mpmbq${G}`,value:String(te),checked:s[G]===te,onChange:()=>F(G,te)}),r("b",null,String(te)),r("span",null,re.scale[te]||"")))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:S<=0,onClick:()=>ee(-1)},"上一页"),we?null:r("button",{className:"mp-quiz-btn",onClick:()=>ee(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!Z,onClick:se},"看结果"),r("button",{className:"mp-quiz-btn",onClick:le},"清空"),r("span",{className:"mp-quiz-hint"},Z?`已够 ${na} 题,可以看结果;答完 ${re.total} 题会更准。`:`答满 ${na} 题可先看结果(还差 ${na-I} 题)。`)))}function hn(n){const{paper:s,answers:S,page:F,onPick:ee,onPage:se,onSubmit:le,onClear:re}=n;if(!s||!Array.isArray(s.questions))return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-hint"},"正在加载问卷题面…"));const ve=s.questions.length,t=Math.max(1,Math.ceil(ve/ut)),$e=F*ut,I=s.questions.slice($e,$e+ut),xe=S.filter(G=>G!=null).length,we=ve?Math.round(xe/ve*100):0,Z=F>=t-1,K=xe>=sa,V=G=>{const te=(s.scale||[]).filter(Me=>Me&&Me.v===G)[0];return te?te.label:String(G)};return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:we+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${F+1} / ${t} 页 · 已答 ${xe} / ${ve}`)),r("div",{className:"mp-quiz-list"},I.map((G,te)=>{const Me=$e+te;return r("div",{key:G.no||Me,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(Me+1).padStart(2,"0")),r("span",null,G.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Me+1} 题`},[1,2,3,4,5].map(Le=>r("label",{key:Le,className:"mp-quiz-o"+(S[Me]===Le?" on":"")},r("input",{type:"radio",name:`mpcsq${Me}`,value:String(Le),checked:S[Me]===Le,onChange:()=>ee(Me,Le)}),r("b",null,String(Le)),r("span",null,V(Le))))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:F<=0,onClick:()=>se(-1)},"上一页"),Z?null:r("button",{className:"mp-quiz-btn",onClick:()=>se(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!K,onClick:le},"看结果"),r("button",{className:"mp-quiz-btn",onClick:re},"清空"),r("span",{className:"mp-quiz-hint"},K?`已够 ${sa} 题,可以看结果;答完 ${ve} 题会更准。`:`答满 ${sa} 题可先看结果(还差 ${sa-xe} 题)。`)))}class bn extends(Ja.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,S){console.error("[metaphysics] 面板渲染异常",s,S)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,S=String(s&&s.stack||"").split(`
2606
2606
  `).slice(0,14).join(`
2607
2607
  `);return r("div",{className:"mp-wrap"},r("div",{className:"mp-panel"},r("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),r("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(s&&s.message||s)+`
2608
2608
 
2609
- `+S),r("div",{className:"mp-lbl"},"环境:__PP "+typeof R+" · Engine "+typeof window.Engine+" · React "+typeof Xa+" · 版本 "+(typeof R=="object"&&R&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function xn(n){const s=n&&n.size?n.size:20,S=n&&n.active;return r("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:S?1:.72}},r("circle",{cx:12,cy:12,r:8.2}),r("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),r("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),r("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Ge=[{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:"constitution",label:"体质",timeLabel:"",hint:"中医体质是九种体质各 5 题的自评问卷(共 45 题,1 没有 / 5 总是),按转化分判主次体质并给调养方向;不是医学诊断。"},{k:"wuyunliuqi",label:"运气",timeLabel:"",hint:"五运六气按大寒分年:中运、司天在泉、六步。"},{k:"taiyi",label:"太乙",timeLabel:"",hint:"太乙神数按积年推局:太乙落宫、八门、文昌、计神、始击、主客算与四将。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function Aa(n){return String(n).padStart(2,"0")}const Pt=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],mi=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],ui="mp.cast.open",vn=Array.isArray(window.__MPGroups)?window.__MPGroups:[],gi="mp.recent.tabs",fi="mp.first.view",hi=3;function Ft(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Dt(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function yn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const S=ee=>new Date(ee.getFullYear(),ee.getMonth(),ee.getDate()).getTime(),F=Math.round((S(new Date)-S(s))/864e5);return F<=0?"今天":F===1?"昨天":`${Aa(s.getMonth()+1)}-${Aa(s.getDate())}`}function Rt(){const n=new Date;return{date:`${n.getFullYear()}-${Aa(n.getMonth()+1)}-${Aa(n.getDate())}`,time:`${Aa(n.getHours())}:${Aa(n.getMinutes())}`}}const wn={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",constitution:"none",wuyunliuqi:"date",taiyi:"date"},bi={date:"1990-05-12",time:"14:30"},La=n=>wn[n]||"none",Pe=window.__MPCore||{},Ve=Pe.needAsk||(n=>!1),ae={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},fa={r:null,q:"",it:null};let sa="";function xi(){const n=[];return n.push("inputActions "+(ae.ref?"已拿到":"未拿到")),n.push("渲染 "+ae.mounted+" 次"),n.push("注册 "+ae.regs+" 次"),n.push("inject "+(ae.injectType||"?")),n.push("槽位 "+(ae.spec||"?")),ae.contribution&&n.push("贡献 "+ae.contribution),ae.errs.length&&n.push("错误:"+ae.errs.join(" / ")),"桥自检:"+n.join(";")}function vi(n){if(ae.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);ae.errs.push(s.slice(0,90))}function $n(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const S=n.actions&&n.actions.input;return S&&typeof S.setDraft=="function"&&typeof S.submit=="function"?S:null}function yi(n,s){const S=$n(n);return ga(()=>{if(ae.seats.indexOf(s)<0&&ae.seats.push(s),ae.keys=n?Object.keys(n).join(","):"",S){ae.ref=S;try{window.__MPComposer=S}catch{}}return()=>{ae.ref===S&&(ae.ref=null)}},[S,s]),S}function kn(){const n=fa.r;if(!n)return"";try{const s=X.askPrompt?X.askPrompt(n,{question:fa.q,interpret:fa.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function wi(n){return ae.mounted+=1,yi(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:fa.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const S=kn();S&&ki(S)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function $i(n){return ae.mounted+=1,yi(n,"composer.dock"),null}function ki(n){let s=ae.ref;if(!s)try{s=window.__MPComposer||null}catch{s=null}return!s||typeof s.setDraft!="function"||typeof s.submit!="function"?!1:(s.setDraft(n),s.submit(),!0)}function zn(n){const s=n.kind==="ziwei"?R.ziweiHTML(n.r):n.kind==="bazi"?R.baziHTML(n.r)+(n.trend?R.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?R.meihuaHTML(n.r):n.kind==="daliuren"?R.daliurenHTML(n.r):n.kind==="qimen"?R.qimenHTML(n.r)+R.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?R.ziweiHepanHTML(n.r):R.hepanHTML(n.r):n.kind==="tarot"?R.tarotHTML(n.r):n.kind==="liuyao"?R.liuyaoHTML(n.r):n.kind==="chenggu"?R.chengguHTML(n.r):n.kind==="almanac"?R.almanacHTML(n.r):n.kind==="zeri"?R.zeriHTML(n.r):n.kind==="trend"?R.trendHTML(n.r):n.kind==="name"?R.nameHTML(n.r):n.kind==="mbti"?R.mbtiHTML(n.r):n.kind==="constitution"?R.constitutionHTML(n.r):n.kind==="wuyunliuqi"?R.wuyunliuqiHTML(n.r):n.kind==="taiyi"?R.taiyiHTML(n.r):n.kind==="fengshui"?R.fengshuiHTML(n.r):R.quickHTML(n.r),S=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,F=S<0?s:s.slice(S+10),ee=S<0?"":s.slice(0,S+10);return F+R.plainHTML(n.r)+ee}function jn(n){const s=!!n.open,S=r("button",{type:"button",className:"mp-castrow-h","aria-expanded":s?"true":"false","aria-controls":"mp-castlist",onClick:n.onToggle,title:"展开六个占卜体系的起卦入口:点一个就切过去,并用当前时刻起卦"},r("span",{className:"mp-castrow-t"},"起卦"),r("span",{className:"mp-castrow-l"},s?"六个占卜体系,点一下就起":mi.map(F=>F.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},S,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},mi.map(F=>r("button",{key:F.sys,type:"button",className:"mp-castchip"+(n.tab===F.sys?" on":""),"data-cast":F.sys,"aria-pressed":n.tab===F.sys?"true":"false",title:F.tip,onClick:()=>n.onCast(F.sys)},F.label))),n.hasResult?r("div",{key:"ask",className:"mp-castask"},r("button",{type:"button",className:"mp-castgo",onClick:n.onAsk,title:"把这张盘和所问之事发进 DSH 对话窗(与下面的「问进对话」同一个通路)"},"把这张盘问进对话")):null):r("div",{key:"cast",className:"mp-castrow"},S)}function Sn(){const[n,s]=N("ziwei"),[S,F]=N("1990-05-12"),[ee,se]=N("14:30"),[le,re]=N(!1),[ye,t]=N("female"),[$e,I]=N(""),[xe,we]=N("1992-08-15"),[Z,K]=N("10:00"),[V,G]=N("female"),[te,Ne]=N(""),[Le,ha]=N("bazi"),[Ue,xt]=N(!1),[Ta,Wa]=N("1990-01-01"),[Ea,ba]=N("12:00"),[xa,_a]=N("male"),[Oa,vt]=N(""),[oa,va]=N("chaibu"),[Ze,Ha]=N(!0),[pa,Pa]=N(!0),[Fa,Qa]=N("same-day"),[et,Bt]=N(!1),[ra,Gt]=N(""),[Da,Te]=N(""),[Ra,at]=N(null),[tt,Ia]=N({}),[ya,Se]=N(null),[We,yt]=N([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Fe,it]=N(null),[Ba,nt]=N("开业"),[la,Ga]=N("30"),[Ye,st]=N(""),[wa,Qe]=N(""),[Oe,ea]=N("solar2lunar"),[$a,wt]=N(""),[Ua,$t]=N(!1),[De,ka]=N("time"),[za,kt]=N(""),[Za,He]=N(""),[aa,Ya]=N(""),[da,ot]=N(()=>new Array(bt().total).fill(null)),[Ut,zt]=N(0),[ja,e]=N(null),[i,o]=N(()=>new Array(Ht).fill(null)),[l,p]=N(0),[c,d]=N("60"),[u,m]=N("natal"),[f,b]=N("9"),[w,$]=N("子"),[A,L]=N("午"),[_,Q]=N("assess"),[D,T]=N("李"),[H,pe]=N(""),[M,B]=N("6"),[y,he]=N(!1),[W,ie]=N(""),[j,k]=N(null),[C,O]=N(""),[oe,ge]=N(""),[de,ke]=N(null),[ve,P]=N(()=>rn()),[U,J]=N(()=>Ft(fi)==="flat"?"flat":"group"),[fe,be]=N(()=>{const a=Ft(gi);return Array.isArray(a)?a:[]}),[x,v]=N({}),[ce,me]=N(null),[Ce,je]=N(()=>R.profilesLoad()),[ze,Ke]=N(null),[ca,jt]=N(""),[Sa,Je]=N(""),[ji,Me]=N(""),[Cn,Ka]=N(!1),[Zt,Si]=N("three"),[ma,Yt]=N(""),[Re,qi]=N("general");function Kt(){return ra.trim()||(j&&Ve(j.kind)?String(ma||"").trim():"")}ga(()=>{j&&j.r&&(fa.r=j.r,fa.q=Kt(),fa.it=j.it||null)},[j,ra,ma]);const[Ni,An]=N(null),[Mi,Ln]=N(Ft(ui)===!0),[Tn,St]=N(!1),[qa,Ci]=N("time"),[qt,Ai]=N(""),[Nt,Li]=N(""),[Mt,Ti]=N(""),[En,Na]=N(""),[Jt,Ct]=N({birth:null,cast:null}),_n=Ge.find(a=>a.k===n)||Ge[0],pt=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ie=La(n),Ei=!(n==="meihua"&&qa==="number"),_i=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&Ei,Oi=_i&&Ie!=="date",Ss=Oi,Ae=async(a,g,z,q)=>{const h=a||n,ue=z||qa,qe=h==="bazi"||h==="trend",ta=q&&typeof q.hourUnknown=="boolean"?q.hourUnknown:le,Ee=g||(qe&&ta?{date:S,time:"12:00"}:{date:S,time:ee}),Be=q&&q.gender?q.gender:ye,Ma=q&&typeof q.address=="string"?q.address:$e,lt=q&&typeof q.trueSolar=="boolean"?q.trueSolar:Ze,dt=q&&typeof q.lateZi=="boolean"?q.lateZi:pa,Vi=q&&typeof q.lines=="string"?q.lines:W,Tt=q&&typeof q.question=="string"?q.question:ma,Wi=Va(),Qi=++_e,ct=()=>Qi!==_e;ke(null),Me("");try{let Ca=0,en=null;Ka(!0);try{await ut(h);const Y=window.__MP_LAST_LOAD;Ca=Y&&typeof Y.ms=="number"?Y.ms:Va()-Wi,en=Y&&typeof Y.cached=="boolean"?Y.cached:null}catch(Y){if(ct())return;Je(Y&&Y.message?Y.message:String(Y)),k(null);return}finally{ct()||Ka(!1)}if(ct())return;const an=`${Ee.date}T${Ee.time}`,E={system:h};if(E.shadow=h!=="mbti"&&h!=="constitution",E.trace=h==="liuyao"||h==="bazi"||h==="ziwei"||h==="qimen"||h==="daliuren",h!=="tarot"&&(E.datetime=an),h==="bazi"||h==="ziwei"||h==="hepan"||h==="trend"){if(E.gender=Be,E.trueSolar=lt,Ma.trim()){E.address=Ma.trim();try{const Y=await X.geocodeAddress(E.address,{online:y});Y&&typeof Y.lon=="number"&&(E.longitude=Y.lon,E.geo=Y)}catch(Y){console.error("[metaphysics] 地址解析失败,退回内置表",Y)}if(ct())return}(h==="bazi"||h==="ziwei")&&(E.cross=et),E.lateZi=dt,qe&&ta&&(E.hourUnknown=!0)}if(h==="liuyao"){const Y=Pe.parseLines(Vi);Y.lines?E.lines=Y.lines:Y.warning&&Me(Y.warning)}if(h==="qimen"&&(E.juMethod=oa,E.lateZiHourMode=Fa,E.direction=Re),h==="bazi"&&(E.verifyPast=6),h==="zeri"){E.startDate=Ee.date,E.task=Ba,E.days=Number(la)||30,Ye&&(E.shengXiao=Ye);const Y=wa.split(/[,,、\s]+/).filter(Boolean);Y.length&&(E.candidates=Y)}if(h==="xiaoliuren")if(E.mode=De,De==="number")E.num1=Number(za)||void 0,E.num2=Number(Za)||void 0,E.num3=Number(aa)||void 0;else{E.date=Ee.date;const Y=Number(String(Ee.time).split(":")[0]);E.hour=Number.isFinite(Y)?Y:12}if(h==="mbti"){delete E.datetime;const Y=da.slice();for(;Y.length&&Y[Y.length-1]==null;)Y.pop();Y.length&&(E.answers=Y)}if(h==="constitution"&&(delete E.datetime,E.answers=i.slice()),h==="trend"&&qe&&ta&&(E.hourUnknown=!0),h==="trend"&&(E.toAge=Number(c)||60),h==="fengshui"&&(E.action=u,u==="natal"?E.gender=Be:(E.sitting=w,E.facing=A,delete E.datetime,u==="xuankong"&&(E.period=Number(f)||9))),h==="name"&&(E.action=_,E.surname=D.trim(),_==="generate"?(E.gender=Be,E.limit=Number(M)||6,E.trueSolar=lt,E.lateZi=dt):(E.givenName=H.trim(),(!Ee.date||!Ee.time)&&delete E.datetime)),h==="convert")if(E.system="convert",Oe==="lunar2solar"){const Y=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String($a).trim());if(!Y){Je("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}E.mode="lunar2solar",E.lunarYear=Number(Y[1]),E.lunarMonth=Number(Y[2]),E.lunarDay=Number(Y[3]),E.isLeapMonth=Ua,delete E.datetime}else E.mode="solar2lunar";if(h==="tarot"&&(E.spread=Zt),h==="hepan"&&(E.chart=Le,E.partner={datetime:`${xe}T${Z}`,gender:V,address:te.trim()||void 0,trueSolar:Ze},Ue&&(E.partner2={datetime:`${Ta}T${Ea}`,gender:xa,address:Oa.trim()||void 0,trueSolar:Ze})),Ve(h)){if(!Tt.trim()){Je("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),St(!0),k(null);return}St(!1),E.question=Tt.trim(),h==="liuyao"&&(E.direction=Re)}if(h==="meihua"&&(E.mode=ue,ue==="number")){if(qt.trim()===""||Nt.trim()===""){Je("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),k(null);return}if(E.upper=Number(qt),E.lower=Number(Nt),!Number.isFinite(E.upper)||!Number.isFinite(E.lower)){Je("两个数都要是数字,例如 17 和 29。"),k(null);return}Mt!==""&&(E.changing=Number(Mt))}const ws=Va();h==="trend"&&!E.asOf&&Pe.todayStamp&&(E.asOf=Pe.todayStamp());const Ja=X.compute(E),$s=Va()-ws;let ei=null;try{ei=R.shadowTrack?R.shadowTrack(Ja):null}catch{ei=null}let ai=null;if(h==="bazi")try{ai=X.compute({system:"trend",datetime:an,gender:Be,toAge:100,trueSolar:lt,lateZi:dt,...Pe.todayStamp?{asOf:E.asOf||Pe.todayStamp()}:{},...E.dst!==void 0?{dst:E.dst}:{},...E.address?{address:E.address}:{},...typeof E.longitude=="number"?{longitude:E.longitude}:{},...E.geo?{geo:E.geo}:{}})}catch{ai=null}let ti=null;if(X.caliberCompare)try{ti=X.caliberCompare(E)}catch{ti=null}const ks=Ve(h)||h==="qimen"?{question:Ve(h)?Tt.trim():"",direction:Re}:void 0,Et=X.interpret?X.interpret(Ja,ks):null;Et&&Ja.cross&&X.crossSection&&(Et.sections=[...Et.sections||[],X.crossSection(Ja.cross)]);const zs=La(h)==="cast"&&(h!=="meihua"||ue==="time");k({kind:h,r:Ja,it:Et,at:Ee,timed:zs,trend:ai,caliber:ti,shadowDiff:ei,gender:Be,address:Ma,trueSolar:lt,lateZi:dt});const tn=Y=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Y>1?tn(Y-1):nn()):setTimeout(nn,0)},nn=()=>{Qi===_e&&ke({engineMs:Ca,computeMs:$s,cached:en,totalMs:Va()-Wi,renderMs:null})};if(tn(2),at(null),Se(null),Ia({}),it(null),Je(""),Na(""),h!=="tarot"&&h!=="mbti"&&h!=="constitution"){const Y=!!(qe&&ta),ii={kind:h,date:Ee.date,time:Y?"":Ee.time,hourUnknown:Y,gender:Be,address:Ma,trueSolar:lt,lateZi:dt,lines:h==="liuyao"?Vi:"",question:Ve(h)?Tt.trim():"",direction:Re,spread:Zt,mhMode:ue,upper:qt,lower:Nt,changing:Mt,...h==="qimen"?{qimenRule:oa,qLateZi:Fa}:{},...h==="zeri"?{task:Ba,days:la,shengXiao:Ye,zCand:wa}:{},...h==="xiaoliuren"?{xlrMode:De,num1:za,num2:Za,num3:aa}:{},...h==="trend"?{toAge:c}:{},...h==="fengshui"?{fsMode:u,fsPeriod:f,sitting:w,facing:A}:{},...h==="name"?{nnMode:_,surname:D,givenName:H,limitN:M}:{},...h==="convert"?{convMode:Oe,lunarDate:$a,leapMonth:Ua}:{},...h==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:Z,partnerGender:V,partnerAddress:te,thirdOn:Ue,p2Date:Ta,p2Time:Ea,p2Gender:xa,p2Address:Oa}:{},label:dn(h,Ja),at:Date.now()};P(ua=>{const sn=[ii,...ua.filter(js=>!ln(js,ii))].slice(0,20);return li(sn),sn});try{const ua=R.casesAdd(ii);ua&&ua.ok&&!ua.dup&&ua.list&&rt(ua.list)}catch{}}}catch(Ca){if(ct())return;Je(Ca&&Ca.message?Ca.message:String(Ca)),k(null)}},On=async a=>{const g=La(a),z=++_e;if(Je(""),a==="mbti"){Me(""),Ka(!0);try{await ut(a)}catch(h){z===_e&&Je(h&&h.message?h.message:String(h))}finally{z===_e&&Ka(!1)}if(z!==_e)return;s(a),da.filter(h=>h!=null).length>=ia?Ae(a):k(null);return}if(a==="constitution"){Me(""),Ka(!0);try{if(await ut(a),z===_e&&!ja){const h=X.compute({system:"constitution"});h&&h.paper&&e(h)}}catch(h){z===_e&&Je(h&&h.message?h.message:String(h))}finally{z===_e&&Ka(!1)}if(z!==_e)return;s(a),i.filter(h=>h!=null).length>=na?Ae(a):k(null);return}if(s(a),g==="none"){Ae(a);return}const q=Jt[g]||(g==="cast"||g==="date"?Rt():{date:bi.date,time:bi.time});F(q.date),se(q.time),Ae(a,q)},Hn=a=>{Ge.some(g=>g.k===a)&&be(g=>{const z=(g||[]).filter(h=>h&&h.tab&&h.tab!==a),q=[{tab:a,at:Date.now()}].concat(z).slice(0,hi);return Dt(gi,q),q})},Hi=a=>{const g=a==="flat"?"flat":"group";J(g),Dt(fi,g)},At=a=>{Hn(a),On(a)},Pn=()=>{const a=!Mi;Ln(a),Dt(ui,a)},Fn=a=>{At(a)},Dn=a=>{F(a),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:{date:a,time:ee}}))},Rn=a=>{se(a),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:{date:S,time:a}}))},qs=()=>{const a=Rt();F(a.date),se(a.time),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:null})),Ae(n,a)},Xt=()=>{if(n==="mbti"){const a=da.filter(g=>g!=null).length;if(a<ia){Me(`先答满 ${ia} 题再看结果(现答 ${a} 题,还差 ${ia-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=i.filter(g=>g!=null).length;if(a<na){Me(`先答满 ${na} 题再看结果(现答 ${a} 题,还差 ${na-a} 题)。`);return}Ae(n);return}if(Ie!=="none"&&!Jt[Ie]){const a=Rt();F(a.date),se(a.time),Ae(n,a);return}Ae(n)},In=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),I("河北石家庄"),Ct(g=>Object.assign({},g,{birth:a})),F(a.date),se(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Pi=a=>{Ci(a),Ae(n,{date:S,time:ee},a)},Bn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Gn=()=>Ni===null?Bn():Ni,Lt=(a,g,z)=>{if(!g)return;const q=ue=>{a.textContent=ue?"已复制":"复制失败",setTimeout(()=>{a.textContent=z},1400)},h=()=>{try{const ue=document.createElement("textarea");ue.value=g,ue.setAttribute("readonly",""),ue.style.position="fixed",ue.style.opacity="0",document.body.appendChild(ue),ue.select();const qe=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ue),qe}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>q(!0),()=>q(h()));return}}catch{}q(h())},Un=a=>Lt(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Zn=a=>Lt(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Yn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),z=g&&g.querySelector("[data-trace-md]");Lt(a,z?z.value:"","复制 Markdown")},Kn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Jn=()=>{if(!j||!j.r)return null;try{return X.askPackages?X.askPackages(j.r,{question:Kt(),interpret:j.it,base:Kn()}):null}catch{return null}},Fi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Xn=(a,g)=>{const z=Jn();if(!z){Te("还没有可以复制的盘:先排一张。");return}const q=a==="link"?z.link:z[a];if(!q){Te(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Lt(g,q,Fi.find(h=>h[0]===a)[1]),a==="link"&&Te("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Vn=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const g=a.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},Di=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},Wn=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Un(g);return}const z=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(z){Zn(z);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Vn();return}const h=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(h){Yn(h);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){as();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Di();return}const ta=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!ta)return;const Ee=ta.closest(".mp-it");if(!Ee)return;const Be=!Ee.classList.contains("folded");Ee.classList.toggle("folded",Be),ta.setAttribute("aria-expanded",Be?"false":"true");const Ma=ta.querySelector(".mp-it-hint");Ma&&(Ma.textContent=Be?"点击展开":"点击收起"),An(Be)},Ri=(a,g)=>{if(!j||!(Ve(n)||n==="qimen"))return;const z={question:Ve(n)?(g===void 0?ma:g).trim():"",direction:a===void 0?Re:a},q=X.interpret?X.interpret(j.r,z):null;let h=j.r;if((n==="liuyao"||n==="qimen")&&h&&h.trace&&X.buildTrace)try{const ue=n==="liuyao"?X.buildTrace(h,{direction:z.direction,gender:h.useGod&&h.useGod.gender||"male",refresh:!0}):X.buildTrace(h,{direction:z.direction});ue&&(h=Object.assign({},h,{trace:ue}))}catch{}k(Object.assign({},j,{r:h,it:q}))},Qn=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,es=()=>{try{const a=j&&j.r&&j.r.summary?j.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>Na("已复制"),()=>Na("复制失败"))}catch{Na("复制失败")}},as=()=>{if(!j||!j.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Pe&&Pe.kindOfDirection?Pe.kindOfDirection(Re):"other";let g;try{g=window.Engine.buildEventPrompt(j.r,{question:(ma||"").trim(),kind:a,gender:ye,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>Na("已复制问事提示"),()=>Na("复制失败"))},Ii=()=>{if(!(!j||!j.r||!ra.trim()))try{at(X.followup?X.followup(j.r,ra.trim()):null)}catch(a){at({question:ra.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Bi=()=>{if(!(!j||!j.r))try{const a=X.askPrompt?X.askPrompt(j.r,{question:Kt(),interpret:j.it}):null,g=a&&a.text?a.text:String(j.r.summary||"");if(ki(g)){Te("已发到对话窗,往下看回复。");return}const z="("+xi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Te("对话输入框还没就绪"+z+",已复制提问;粘进对话窗回车即可。"),()=>Te("对话输入框还没就绪"+z+",复制也没成功;先点「复制文字结果」再贴。")):Te("对话输入框还没就绪"+z+";先点「复制文字结果」再贴进对话窗。")}catch(a){Te("发到对话窗失败:"+(a&&a.message?a.message:a))}},ts=()=>{const a=[],g=window.__MP_VER||"未知";a.push("# 命理插件反馈"),a.push(""),a.push("## 我遇到的情况"),a.push(""),a.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),a.push(""),a.push("## 复现信息"),a.push(""),a.push("- 插件版本:v"+g);{const h=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];h.length&&a.push("- 未发版改动:"+h.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const z=Ge.find(h=>h.k===n)?.label||n;if(a.push("- 体系:"+z+(z===n?"":"("+n+")")),ma&&a.push("- 所问之事:"+ma),Re&&Re!=="general"){const h=(Array.isArray(X.DIRECTIONS)?X.DIRECTIONS:[]).find(ue=>ue.key===Re);a.push("- 询问方向:"+(h?h.label:Re))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(La(n)==="time"||La(n)==="date")&&(a.push(`日期:${S}`),La(n)==="time"&&a.push(`时刻:${le?"(未知,按三柱排)":ee}`),a.push(`性别:${ye==="male"?"男":"女"}`),$e&&a.push(`出生地:${$e}`),a.push(`真太阳时:${Ze?"开":"关"} 晚子时换日:${pa?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${oa}`),et&&a.push("交叉验证:开"));const q={合盘:()=>{a.push(`对方:${xe} ${Z} ${V==="male"?"男":"女"}${te?" "+te:""}(${Le} 盘)`),Ue&&a.push(`第三方:${Ta} ${Ea} ${xa==="male"?"男":"女"}${Oa?" "+Oa:""}`)},择日:()=>{a.push(`事项:${Ba} 起算:${S} 天数:${la}${Ye?" 属相:"+Ye:""}${wa?" 候选日:"+wa:""}`)},起名:()=>{a.push(`姓:${D||"(未填)"} 名:${H||"(未填)"} 模式:${_}${_==="generate"?" 候选数:"+(M||"默认"):""}`)},公农历:()=>{a.push(`模式:${Oe}${$a?" 农历输入:"+$a:""}${Ua?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${De}${De==="number"?` 报数:${za}/${Za}/${aa}`:""}`)},风水:()=>{a.push(`动作:${u}${u==="natal"?"":` 坐:${w} 向:${A}`}${u==="xuankong"?` 运:${f}`:""}`)}};if(q[z]&&q[z](),a.push("```"),a.push(""),Sa&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(Sa)),a.push("```"),a.push("")),j&&j.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const h=String(j.r.summary||(X.renderText?X.renderText(j.r):"")||"");a.push(h.split(`
2609
+ `+S),r("div",{className:"mp-lbl"},"环境:__PP "+typeof R+" · Engine "+typeof window.Engine+" · React "+typeof Ja+" · 版本 "+(typeof R=="object"&&R&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function xn(n){const s=n&&n.size?n.size:20,S=n&&n.active;return r("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:S?1:.72}},r("circle",{cx:12,cy:12,r:8.2}),r("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),r("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),r("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Ge=[{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:"constitution",label:"体质",timeLabel:"",hint:"中医体质是九种体质各 5 题的自评问卷(共 45 题,1 没有 / 5 总是),按转化分判主次体质并给调养方向;不是医学诊断。"},{k:"wuyunliuqi",label:"运气",timeLabel:"",hint:"五运六气按大寒分年:中运、司天在泉、六步。"},{k:"taiyi",label:"太乙",timeLabel:"",hint:"太乙神数按积年推局:太乙落宫、八门、文昌、计神、始击、主客算与四将。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function Ca(n){return String(n).padStart(2,"0")}const Ht=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],ci=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],mi="mp.cast.open",vn=Array.isArray(window.__MPGroups)?window.__MPGroups:[],ui="mp.recent.tabs",gi="mp.first.view",fi=3;function Pt(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Ft(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function yn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const S=ee=>new Date(ee.getFullYear(),ee.getMonth(),ee.getDate()).getTime(),F=Math.round((S(new Date)-S(s))/864e5);return F<=0?"今天":F===1?"昨天":`${Ca(s.getMonth()+1)}-${Ca(s.getDate())}`}function Dt(){const n=new Date;return{date:`${n.getFullYear()}-${Ca(n.getMonth()+1)}-${Ca(n.getDate())}`,time:`${Ca(n.getHours())}:${Ca(n.getMinutes())}`}}const wn={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",constitution:"none",wuyunliuqi:"date",taiyi:"date"},hi={date:"1990-05-12",time:"14:30"},Aa=n=>wn[n]||"none",Pe=window.__MPCore||{},We=Pe.needAsk||(n=>!1),ae={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Ue={r:null,q:"",it:null,entry:null};let oa="";function bi(){const n=[];return n.push("inputActions "+(ae.ref?"已拿到":"未拿到")),n.push("渲染 "+ae.mounted+" 次"),n.push("注册 "+ae.regs+" 次"),n.push("inject "+(ae.injectType||"?")),n.push("槽位 "+(ae.spec||"?")),ae.contribution&&n.push("贡献 "+ae.contribution),ae.errs.length&&n.push("错误:"+ae.errs.join(" / ")),"桥自检:"+n.join(";")}function xi(n){if(ae.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);ae.errs.push(s.slice(0,90))}function $n(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const S=n.actions&&n.actions.input;return S&&typeof S.setDraft=="function"&&typeof S.submit=="function"?S:null}function vi(n,s){const S=$n(n);return Ma(()=>{if(ae.seats.indexOf(s)<0&&ae.seats.push(s),ae.keys=n?Object.keys(n).join(","):"",S){ae.ref=S;try{window.__MPComposer=S}catch{}}return()=>{ae.ref===S&&(ae.ref=null)}},[S,s]),S}function kn(){const n=Ue.r;if(!n)return"";try{const s=X.askPrompt?X.askPrompt(n,{question:Ue.q,interpret:Ue.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function yi(n){return ae.mounted+=1,vi(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:Ue.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「烛微命盘」里排一张盘",onClick:()=>{const S=kn();S&&$i(S)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function wi(n){return ae.mounted+=1,vi(n,"composer.dock"),null}function $i(n){let s=ae.ref;if(!s)try{s=window.__MPComposer||null}catch{s=null}return!s||typeof s.setDraft!="function"||typeof s.submit!="function"?!1:(s.setDraft(n),s.submit(),!0)}function zn(n){const s=n.kind==="ziwei"?R.ziweiHTML(n.r):n.kind==="bazi"?R.baziHTML(n.r)+(n.trend?R.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?R.meihuaHTML(n.r):n.kind==="daliuren"?R.daliurenHTML(n.r):n.kind==="qimen"?R.qimenHTML(n.r)+R.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?R.ziweiHepanHTML(n.r):R.hepanHTML(n.r):n.kind==="tarot"?R.tarotHTML(n.r):n.kind==="liuyao"?R.liuyaoHTML(n.r):n.kind==="chenggu"?R.chengguHTML(n.r):n.kind==="almanac"?R.almanacHTML(n.r):n.kind==="zeri"?R.zeriHTML(n.r):n.kind==="trend"?R.trendHTML(n.r):n.kind==="name"?R.nameHTML(n.r):n.kind==="mbti"?R.mbtiHTML(n.r):n.kind==="constitution"?R.constitutionHTML(n.r):n.kind==="wuyunliuqi"?R.wuyunliuqiHTML(n.r):n.kind==="taiyi"?R.taiyiHTML(n.r):n.kind==="fengshui"?R.fengshuiHTML(n.r):R.quickHTML(n.r),S=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,F=S<0?s:s.slice(S+10),ee=S<0?"":s.slice(0,S+10);return F+R.plainHTML(n.r)+ee}function jn(n){const s=!!n.open,S=r("button",{type:"button",className:"mp-castrow-h","aria-expanded":s?"true":"false","aria-controls":"mp-castlist",onClick:n.onToggle,title:"展开六个占卜体系的起卦入口:点一个就切过去,并用当前时刻起卦"},r("span",{className:"mp-castrow-t"},"起卦"),r("span",{className:"mp-castrow-l"},s?"六个占卜体系,点一下就起":ci.map(F=>F.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},S,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},ci.map(F=>r("button",{key:F.sys,type:"button",className:"mp-castchip"+(n.tab===F.sys?" on":""),"data-cast":F.sys,"aria-pressed":n.tab===F.sys?"true":"false",title:F.tip,onClick:()=>n.onCast(F.sys)},F.label))),n.hasResult?r("div",{key:"ask",className:"mp-castask"},r("button",{type:"button",className:"mp-castgo",onClick:n.onAsk,title:"把这张盘和所问之事发进 DSH 对话窗(与下面的「问进对话」同一个通路)"},"把这张盘问进对话")):null):r("div",{key:"cast",className:"mp-castrow"},S)}function Sn(){const[n,s]=q("ziwei"),[S,F]=q("1990-05-12"),[ee,se]=q("14:30"),[le,re]=q(!1),[ve,t]=q("female"),[$e,I]=q(""),[xe,we]=q("1992-08-15"),[Z,K]=q("10:00"),[V,G]=q("female"),[te,Me]=q(""),[Le,ga]=q("bazi"),[Ze,ht]=q(!1),[La,Va]=q("1990-01-01"),[Ta,fa]=q("12:00"),[ha,Ea]=q("male"),[_a,bt]=q(""),[pa,ba]=q("chaibu"),[Ye,Oa]=q(!0),[ra,Ha]=q(!0),[Pa,Wa]=q("same-day"),[Qa,It]=q(!1),[la,Bt]=q(""),[Fa,Te]=q(""),[Da,et]=q(null),[at,Ra]=q({}),[xa,qe]=q(null),[Qe,xt]=q([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Fe,tt]=q(null),[Ia,it]=q("开业"),[da,Ba]=q("30"),[Ke,nt]=q(""),[va,ea]=q(""),[Oe,aa]=q("solar2lunar"),[ya,vt]=q(""),[Ga,yt]=q(!1),[De,wa]=q("time"),[$a,wt]=q(""),[Ua,He]=q(""),[ta,Za]=q(""),[ca,st]=q(()=>new Array(ft().total).fill(null)),[Gt,$t]=q(0),[ka,e]=q(null),[i,o]=q(()=>new Array(Ot).fill(null)),[l,p]=q(0),[c,d]=q("60"),[u,m]=q("natal"),[f,b]=q("9"),[w,$]=q("子"),[A,L]=q("午"),[_,Q]=q("assess"),[D,T]=q("李"),[H,pe]=q(""),[M,B]=q("6"),[y,he]=q(!1),[W,ie]=q(""),[j,k]=q(null),[C,O]=q(""),[oe,ge]=q(""),[de,ke]=q(null),[ye,P]=q(()=>rn()),[U,J]=q(()=>Pt(gi)==="flat"?"flat":"group"),[fe,be]=q(()=>{const a=Pt(ui);return Array.isArray(a)?a:[]}),[x,v]=q({}),[ce,me]=q(null),[Ce,Se]=q(()=>R.profilesLoad()),[ze,Je]=q(null),[ma,kt]=q(""),[za,Xe]=q(""),[zi,je]=q(""),[Cn,Ya]=q(!1),[Ut,ji]=q("three"),[ua,Zt]=q(""),[Re,Si]=q("general");function Yt(){return la.trim()||(j&&We(j.kind)?String(ua||"").trim():"")}Ma(()=>{j&&j.r&&(Ue.r=j.r,Ue.q=Yt(),Ue.it=j.it||null)},[j,la,ua]);const[qi,An]=q(null),[Ni,Ln]=q(Pt(mi)===!0),[Tn,zt]=q(!1),[ja,Mi]=q("time"),[jt,Ci]=q(""),[St,Ai]=q(""),[qt,Li]=q(""),[En,Sa]=q(""),[Kt,Nt]=q({birth:null,cast:null}),_n=Ge.find(a=>a.k===n)||Ge[0],ot=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ie=Aa(n),Ti=!(n==="meihua"&&ja==="number"),Ei=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&Ti,_i=Ei&&Ie!=="date",Ms=_i,Ae=async(a,g,z,N)=>{const h=a||n,ue=z||ja,Ne=h==="bazi"||h==="trend",ia=N&&typeof N.hourUnknown=="boolean"?N.hourUnknown:le,Ee=g||(Ne&&ia?{date:S,time:"12:00"}:{date:S,time:ee}),Be=N&&N.gender?N.gender:ve,qa=N&&typeof N.address=="string"?N.address:$e,pt=N&&typeof N.trueSolar=="boolean"?N.trueSolar:Ye,rt=N&&typeof N.lateZi=="boolean"?N.lateZi:ra,Vi=N&&typeof N.lines=="string"?N.lines:W,Lt=N&&typeof N.question=="string"?N.question:ua,Wi=Xa(),Qi=++_e,lt=()=>Qi!==_e;ke(null),je("");try{let Na=0,en=null;Ya(!0);try{await ct(h);const Y=window.__MP_LAST_LOAD;Na=Y&&typeof Y.ms=="number"?Y.ms:Xa()-Wi,en=Y&&typeof Y.cached=="boolean"?Y.cached:null}catch(Y){if(lt())return;Xe(Y&&Y.message?Y.message:String(Y)),k(null);return}finally{lt()||Ya(!1)}if(lt())return;const an=`${Ee.date}T${Ee.time}`,E={system:h};if(E.shadow=h!=="mbti"&&h!=="constitution",E.trace=h==="liuyao"||h==="bazi"||h==="ziwei"||h==="qimen"||h==="daliuren",h!=="tarot"&&(E.datetime=an),h==="bazi"||h==="ziwei"||h==="hepan"||h==="trend"){if(E.gender=Be,E.trueSolar=pt,qa.trim()){E.address=qa.trim();try{const Y=await X.geocodeAddress(E.address,{online:y});Y&&typeof Y.lon=="number"&&(E.longitude=Y.lon,E.geo=Y)}catch(Y){console.error("[metaphysics] 地址解析失败,退回内置表",Y)}if(lt())return}(h==="bazi"||h==="ziwei")&&(E.cross=Qa),E.lateZi=rt,Ne&&ia&&(E.hourUnknown=!0)}if(h==="liuyao"){const Y=Pe.parseLines(Vi);Y.lines?E.lines=Y.lines:Y.warning&&je(Y.warning)}if(h==="qimen"&&(E.juMethod=pa,E.lateZiHourMode=Pa,E.direction=Re),h==="bazi"&&(E.verifyPast=6),h==="zeri"){E.startDate=Ee.date,E.task=Ia,E.days=Number(da)||30,Ke&&(E.shengXiao=Ke);const Y=va.split(/[,,、\s]+/).filter(Boolean);Y.length&&(E.candidates=Y)}if(h==="xiaoliuren")if(E.mode=De,De==="number")E.num1=Number($a)||void 0,E.num2=Number(Ua)||void 0,E.num3=Number(ta)||void 0;else{E.date=Ee.date;const Y=Number(String(Ee.time).split(":")[0]);E.hour=Number.isFinite(Y)?Y:12}if(h==="mbti"){delete E.datetime;const Y=ca.slice();for(;Y.length&&Y[Y.length-1]==null;)Y.pop();Y.length&&(E.answers=Y)}if(h==="constitution"&&(delete E.datetime,E.answers=i.slice()),h==="trend"&&Ne&&ia&&(E.hourUnknown=!0),h==="trend"&&(E.toAge=Number(c)||60),h==="fengshui"&&(E.action=u,u==="natal"?E.gender=Be:(E.sitting=w,E.facing=A,delete E.datetime,u==="xuankong"&&(E.period=Number(f)||9))),h==="name"&&(E.action=_,E.surname=D.trim(),_==="generate"?(E.gender=Be,E.limit=Number(M)||6,E.trueSolar=pt,E.lateZi=rt):(E.givenName=H.trim(),(!Ee.date||!Ee.time)&&delete E.datetime)),h==="convert")if(E.system="convert",Oe==="lunar2solar"){const Y=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(ya).trim());if(!Y){Xe("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}E.mode="lunar2solar",E.lunarYear=Number(Y[1]),E.lunarMonth=Number(Y[2]),E.lunarDay=Number(Y[3]),E.isLeapMonth=Ga,delete E.datetime}else E.mode="solar2lunar";if(h==="tarot"&&(E.spread=Ut),h==="hepan"&&(E.chart=Le,E.partner={datetime:`${xe}T${Z}`,gender:V,address:te.trim()||void 0,trueSolar:Ye},Ze&&(E.partner2={datetime:`${La}T${Ta}`,gender:ha,address:_a.trim()||void 0,trueSolar:Ye})),We(h)){if(!Lt.trim()){Xe("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),zt(!0),k(null);return}zt(!1),E.question=Lt.trim(),h==="liuyao"&&(E.direction=Re)}if(h==="meihua"&&(E.mode=ue,ue==="number")){if(jt.trim()===""||St.trim()===""){Xe("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),k(null);return}if(E.upper=Number(jt),E.lower=Number(St),!Number.isFinite(E.upper)||!Number.isFinite(E.lower)){Xe("两个数都要是数字,例如 17 和 29。"),k(null);return}qt!==""&&(E.changing=Number(qt))}const ks=Xa();h==="trend"&&!E.asOf&&Pe.todayStamp&&(E.asOf=Pe.todayStamp());const Ka=X.compute(E),zs=Xa()-ks;let Qt=null;try{Qt=R.shadowTrack?R.shadowTrack(Ka):null}catch{Qt=null}let ei=null;if(h==="bazi")try{ei=X.compute({system:"trend",datetime:an,gender:Be,toAge:100,trueSolar:pt,lateZi:rt,...Pe.todayStamp?{asOf:E.asOf||Pe.todayStamp()}:{},...E.dst!==void 0?{dst:E.dst}:{},...E.address?{address:E.address}:{},...typeof E.longitude=="number"?{longitude:E.longitude}:{},...E.geo?{geo:E.geo}:{}})}catch{ei=null}let ai=null;if(X.caliberCompare)try{ai=X.caliberCompare(E)}catch{ai=null}const js=We(h)||h==="qimen"?{question:We(h)?Lt.trim():"",direction:Re}:void 0,Tt=X.interpret?X.interpret(Ka,js):null;Tt&&Ka.cross&&X.crossSection&&(Tt.sections=[...Tt.sections||[],X.crossSection(Ka.cross)]);const Ss=Aa(h)==="cast"&&(h!=="meihua"||ue==="time");k({kind:h,r:Ka,it:Tt,at:Ee,timed:Ss,trend:ei,caliber:ai,shadowDiff:Qt,gender:Be,address:qa,trueSolar:pt,lateZi:rt});const tn=Y=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Y>1?tn(Y-1):nn()):setTimeout(nn,0)},nn=()=>{Qi===_e&&ke({engineMs:Na,computeMs:zs,cached:en,totalMs:Xa()-Wi,renderMs:null})};if(tn(2),et(null),qe(null),Ra({}),tt(null),Xe(""),Sa(""),h!=="tarot"&&h!=="mbti"&&h!=="constitution"){const Y=!!(Ne&&ia),ti={kind:h,date:Ee.date,time:Y?"":Ee.time,hourUnknown:Y,gender:Be,address:qa,trueSolar:pt,lateZi:rt,lines:h==="liuyao"?Vi:"",question:We(h)?Lt.trim():"",direction:Re,spread:Ut,mhMode:ue,upper:jt,lower:St,changing:qt,...h==="qimen"?{qimenRule:pa,qLateZi:Pa}:{},...h==="zeri"?{task:Ia,days:da,shengXiao:Ke,zCand:va}:{},...h==="xiaoliuren"?{xlrMode:De,num1:$a,num2:Ua,num3:ta}:{},...h==="trend"?{toAge:c}:{},...h==="fengshui"?{fsMode:u,fsPeriod:f,sitting:w,facing:A}:{},...h==="name"?{nnMode:_,surname:D,givenName:H,limitN:M}:{},...h==="convert"?{convMode:Oe,lunarDate:ya,leapMonth:Ga}:{},...h==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:Z,partnerGender:V,partnerAddress:te,thirdOn:Ze,p2Date:La,p2Time:Ta,p2Gender:ha,p2Address:_a}:{},label:dn(h,Ka),at:Date.now()};P(qs=>{const sn=[ti,...qs.filter(Ns=>!ln(Ns,ti))].slice(0,20);return ri(sn),sn}),h!=="tarot"&&h!=="mbti"&&h!=="constitution"&&(Ue.entry=ti),Ki(!1)}}catch(Na){if(lt())return;Xe(Na&&Na.message?Na.message:String(Na)),k(null)}},On=async a=>{const g=Aa(a),z=++_e;if(Xe(""),a==="mbti"){je(""),Ya(!0);try{await ct(a)}catch(h){z===_e&&Xe(h&&h.message?h.message:String(h))}finally{z===_e&&Ya(!1)}if(z!==_e)return;s(a),ca.filter(h=>h!=null).length>=na?Ae(a):k(null);return}if(a==="constitution"){je(""),Ya(!0);try{if(await ct(a),z===_e&&!ka){const h=X.compute({system:"constitution"});h&&h.paper&&e(h)}}catch(h){z===_e&&Xe(h&&h.message?h.message:String(h))}finally{z===_e&&Ya(!1)}if(z!==_e)return;s(a),i.filter(h=>h!=null).length>=sa?Ae(a):k(null);return}if(s(a),g==="none"){Ae(a);return}const N=Kt[g]||(g==="cast"||g==="date"?Dt():{date:hi.date,time:hi.time});F(N.date),se(N.time),Ae(a,N)},Hn=a=>{Ge.some(g=>g.k===a)&&be(g=>{const z=(g||[]).filter(h=>h&&h.tab&&h.tab!==a),N=[{tab:a,at:Date.now()}].concat(z).slice(0,fi);return Ft(ui,N),N})},Oi=a=>{const g=a==="flat"?"flat":"group";J(g),Ft(gi,g)},Mt=a=>{Hn(a),On(a)},Pn=()=>{const a=!Ni;Ln(a),Ft(mi,a)},Fn=a=>{Mt(a)},Dn=a=>{F(a),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:{date:a,time:ee}}))},Rn=a=>{se(a),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:{date:S,time:a}}))},Cs=()=>{const a=Dt();F(a.date),se(a.time),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:null})),Ae(n,a)},Jt=()=>{if(n==="mbti"){const a=ca.filter(g=>g!=null).length;if(a<na){je(`先答满 ${na} 题再看结果(现答 ${a} 题,还差 ${na-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=i.filter(g=>g!=null).length;if(a<sa){je(`先答满 ${sa} 题再看结果(现答 ${a} 题,还差 ${sa-a} 题)。`);return}Ae(n);return}if(Ie!=="none"&&!Kt[Ie]){const a=Dt();F(a.date),se(a.time),Ae(n,a);return}Ae(n)},In=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),I("河北石家庄"),Nt(g=>Object.assign({},g,{birth:a})),F(a.date),se(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Hi=a=>{Mi(a),Ae(n,{date:S,time:ee},a)},Bn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Gn=()=>qi===null?Bn():qi,Ct=(a,g,z)=>{if(!g)return;const N=ue=>{a.textContent=ue?"已复制":"复制失败",setTimeout(()=>{a.textContent=z},1400)},h=()=>{try{const ue=document.createElement("textarea");ue.value=g,ue.setAttribute("readonly",""),ue.style.position="fixed",ue.style.opacity="0",document.body.appendChild(ue),ue.select();const Ne=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ue),Ne}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>N(!0),()=>N(h()));return}}catch{}N(h())},Un=a=>Ct(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Zn=a=>Ct(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Yn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),z=g&&g.querySelector("[data-trace-md]");Ct(a,z?z.value:"","复制 Markdown")},Kn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Jn=()=>{if(!j||!j.r)return null;try{return X.askPackages?X.askPackages(j.r,{question:Yt(),interpret:j.it,base:Kn()}):null}catch{return null}},Pi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Xn=(a,g)=>{const z=Jn();if(!z){Te("还没有可以复制的盘:先排一张。");return}const N=a==="link"?z.link:z[a];if(!N){Te(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Ct(g,N,Pi.find(h=>h[0]===a)[1]),a==="link"&&Te("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Vn=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const g=a.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},Fi=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},Wn=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Un(g);return}const z=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(z){Zn(z);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Vn();return}const h=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(h){Yn(h);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){as();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Fi();return}const ia=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!ia)return;const Ee=ia.closest(".mp-it");if(!Ee)return;const Be=!Ee.classList.contains("folded");Ee.classList.toggle("folded",Be),ia.setAttribute("aria-expanded",Be?"false":"true");const qa=ia.querySelector(".mp-it-hint");qa&&(qa.textContent=Be?"点击展开":"点击收起"),An(Be)},Di=(a,g)=>{if(!j||!(We(n)||n==="qimen"))return;const z={question:We(n)?(g===void 0?ua:g).trim():"",direction:a===void 0?Re:a},N=X.interpret?X.interpret(j.r,z):null;let h=j.r;if((n==="liuyao"||n==="qimen")&&h&&h.trace&&X.buildTrace)try{const ue=n==="liuyao"?X.buildTrace(h,{direction:z.direction,gender:h.useGod&&h.useGod.gender||"male",refresh:!0}):X.buildTrace(h,{direction:z.direction});ue&&(h=Object.assign({},h,{trace:ue}))}catch{}k(Object.assign({},j,{r:h,it:N}))},Qn=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,es=()=>{try{const a=j&&j.r&&j.r.summary?j.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>Sa("已复制"),()=>Sa("复制失败"))}catch{Sa("复制失败")}},as=()=>{if(!j||!j.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Pe&&Pe.kindOfDirection?Pe.kindOfDirection(Re):"other";let g;try{g=window.Engine.buildEventPrompt(j.r,{question:(ua||"").trim(),kind:a,gender:ve,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>Sa("已复制问事提示"),()=>Sa("复制失败"))},Ri=()=>{if(!(!j||!j.r||!la.trim()))try{et(X.followup?X.followup(j.r,la.trim()):null)}catch(a){et({question:la.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Ii=()=>{if(!(!j||!j.r))try{const a=X.askPrompt?X.askPrompt(j.r,{question:Yt(),interpret:j.it}):null,g=a&&a.text?a.text:String(j.r.summary||"");if($i(g)){Te("已发到对话窗,往下看回复。");return}const z="("+bi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Te("对话输入框还没就绪"+z+",已复制提问;粘进对话窗回车即可。"),()=>Te("对话输入框还没就绪"+z+",复制也没成功;先点「复制文字结果」再贴。")):Te("对话输入框还没就绪"+z+";先点「复制文字结果」再贴进对话窗。")}catch(a){Te("发到对话窗失败:"+(a&&a.message?a.message:a))}},ts=()=>{const a=[],g=window.__MP_VER||"未知";a.push("# 命理插件反馈"),a.push(""),a.push("## 我遇到的情况"),a.push(""),a.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),a.push(""),a.push("## 复现信息"),a.push(""),a.push("- 插件版本:v"+g);{const h=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];h.length&&a.push("- 未发版改动:"+h.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const z=Ge.find(h=>h.k===n)?.label||n;if(a.push("- 体系:"+z+(z===n?"":"("+n+")")),ua&&a.push("- 所问之事:"+ua),Re&&Re!=="general"){const h=(Array.isArray(X.DIRECTIONS)?X.DIRECTIONS:[]).find(ue=>ue.key===Re);a.push("- 询问方向:"+(h?h.label:Re))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(Aa(n)==="time"||Aa(n)==="date")&&(a.push(`日期:${S}`),Aa(n)==="time"&&a.push(`时刻:${le?"(未知,按三柱排)":ee}`),a.push(`性别:${ve==="male"?"男":"女"}`),$e&&a.push(`出生地:${$e}`),a.push(`真太阳时:${Ye?"开":"关"} 晚子时换日:${ra?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${pa}`),Qa&&a.push("交叉验证:开"));const N={合盘:()=>{a.push(`对方:${xe} ${Z} ${V==="male"?"男":"女"}${te?" "+te:""}(${Le} 盘)`),Ze&&a.push(`第三方:${La} ${Ta} ${ha==="male"?"男":"女"}${_a?" "+_a:""}`)},择日:()=>{a.push(`事项:${Ia} 起算:${S} 天数:${da}${Ke?" 属相:"+Ke:""}${va?" 候选日:"+va:""}`)},起名:()=>{a.push(`姓:${D||"(未填)"} 名:${H||"(未填)"} 模式:${_}${_==="generate"?" 候选数:"+(M||"默认"):""}`)},公农历:()=>{a.push(`模式:${Oe}${ya?" 农历输入:"+ya:""}${Ga?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${De}${De==="number"?` 报数:${$a}/${Ua}/${ta}`:""}`)},风水:()=>{a.push(`动作:${u}${u==="natal"?"":` 坐:${w} 向:${A}`}${u==="xuankong"?` 运:${f}`:""}`)}};if(N[z]&&N[z](),a.push("```"),a.push(""),za&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(za)),a.push("```"),a.push("")),j&&j.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const h=String(j.r.summary||(X.renderText?X.renderText(j.r):"")||"");a.push(h.split(`
2610
2610
  `).slice(0,40).join(`
2611
2611
  `)),a.push("```"),j.r.handle&&(a.push(""),a.push("排盘句柄(开发者可据此复现同一张盘):`"+j.r.handle+"`"))}else a.push("### 结果摘要"),a.push(""),a.push("(这次没有生成盘面——如果是在排盘过程中出错,上面的「报错原文」就是关键。)");return a.push(""),a.push("## 联系渠道"),a.push(""),a.push("- GitHub issue:https://github.com/xuanfu-web/dsh-metaphysics/issues"),a.push("- 邮件:1129440028@qq.com"),a.push("- 微信群:dsh-metaphysics"),a.join(`
2612
- `)},Gi=()=>{const a=ts();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{O("已复制"),ge("粘到 issue / 邮件 / 群里即可")}).catch(()=>{O("复制失败"),ge("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=a,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const z=document.execCommand&&document.execCommand("copy");g.remove(),O(z?"已复制":"复制失败"),ge(z?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{O("复制失败"),ge("可改用「导出 .md」")}setTimeout(()=>{O(""),ge("")},4e3)},is=()=>{try{Gi()}catch{}const a=encodeURIComponent("[反馈] "+(Ge.find(g=>g.k===n)?.label||n)+(Sa?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{ge("浏览器拦了弹窗,请手动打开 GitHub issues")}},ns=()=>{if(!(!j||!j.r))try{const a=X.renderText?X.renderText(j.r):j.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),z=document.createElement("a");z.href=URL.createObjectURL(g),z.download=`命理报告-${j.r.system}.md`,document.body.appendChild(z),z.click(),z.remove(),setTimeout(()=>URL.revokeObjectURL(z.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ss=()=>{if(!(!j||!j.r))try{const a=R.summaryCardPNG?R.summaryCardPNG(j.r,j.it):"";if(!a){Na("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`命理摘要-${j.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Ui={fontSize:12,padding:"5px 12px"},os=()=>{!j||!j.r||!j.r.past||Se(X.verifyFit?X.verifyFit(j.r.past.rows,tt):null)},ps=()=>{if(!(!j||j.kind!=="bazi"))try{const a=j.at||{date:S,time:ee},[g,z,q]=String(a.date).split("-").map(Number),[,h]=String(a.time).split(":").map(Number),ue=We.filter(qe=>Number(qe.year)).map(qe=>({year:Number(qe.year),kind:qe.kind}));it(X.rectifyBirth?X.rectifyBirth({base:{year:g,month:z,day:q,minute:Number.isFinite(h)?h:0},gender:j.gender||ye,events:ue,lateZi:typeof j.lateZi=="boolean"?j.lateZi:pa,trueSolar:typeof j.trueSolar=="boolean"?j.trueSolar:Ze,address:String(j.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){it({error:a&&a.message?a.message:String(a)})}},ne=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Zi=a=>{s(a.kind),a.date&&F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),typeof a.trueSolar=="boolean"&&Ha(a.trueSolar),typeof a.lateZi=="boolean"&&Pa(a.lateZi),ie(a.lines||""),Yt(a.question||""),qi(a.direction||"general"),Si(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Ci(a.mhMode||"time"),Ai(a.upper||""),Li(a.lower||""),Ti(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&va(a.qimenRule),typeof a.qLateZi=="string"&&Qa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&nt(a.task),a.days!=null&&Ga(String(a.days)),typeof a.shengXiao=="string"&&st(a.shengXiao),typeof a.zCand=="string"&&Qe(a.zCand)),a.kind==="xiaoliuren"&&(ka(a.xlrMode==="number"?"number":"time"),a.num1!=null&&kt(String(a.num1)),a.num2!=null&&He(String(a.num2)),a.num3!=null&&Ya(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&d(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&m(a.fsMode),a.fsPeriod!=null&&b(String(a.fsPeriod)),typeof a.sitting=="string"&&$(a.sitting),typeof a.facing=="string"&&L(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&Q(a.nnMode),typeof a.surname=="string"&&T(a.surname),typeof a.givenName=="string"&&pe(a.givenName),a.limitN!=null&&B(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&ea(a.convMode),typeof a.lunarDate=="string"&&wt(a.lunarDate),typeof a.leapMonth=="boolean"&&$t(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ha(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&K(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Ne(a.partnerAddress),typeof a.thirdOn=="boolean"&&xt(a.thirdOn),typeof a.p2Date=="string"&&Wa(a.p2Date),typeof a.p2Time=="string"&&ba(a.p2Time),typeof a.p2Gender=="string"&&_a(a.p2Gender),typeof a.p2Address=="string"&&vt(a.p2Address)),St(!1),me(a)},rs=()=>{P([]),li([])},[Xe,rt]=N(()=>{try{return R.casesLoad()}catch{return[]}}),[ls,Yi]=N(!1),[Vt,Ki]=N("all"),ds=()=>{try{rt(R.casesLoad())}catch{}Ki("all"),Yi(!0)},Wt=()=>Yi(!1),cs=a=>a==="all"?Xe.length:Xe.filter(g=>g.status===a).length,Qt=Vt==="all"?Xe:Xe.filter(a=>a.status===Vt),ms=()=>{const a=R.casesExport(Xe);if(!a){Me("还没有可导出的卦例");return}try{const g=new Blob([a],{type:"application/x-ndjson;charset=utf-8"}),z=URL.createObjectURL(g),q=document.createElement("a");q.href=z,q.download=`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(q),q.click(),q.remove(),setTimeout(()=>{try{URL.revokeObjectURL(z)}catch{}},1e3),Me(`已导出 ${Xe.length} 条卦例(JSONL)`)}catch(g){Me("导出失败:"+(g&&g.message?g.message:"当前环境不支持下载"))}};ga(()=>{try{const a=R.casesMigrate(ve);a&&a.added&&rt(a.list)}catch{}},[]);const us=a=>{const g=a.entry||{},z=new Date(a.at),q=h=>String(h).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Zi(Object.assign({},g)),Wt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,R.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${q(z.getMonth()+1)}-${q(z.getDate())} ${q(z.getHours())}:${q(z.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:h=>rt(R.casesSetStatus(a.id,h.target.value))},R.CASE_STATUS.map(h=>r("option",{key:h,value:h},R.caseStatusLabel(h)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>rt(R.casesRemove(a.id))},"删"))},gs=["bazi","ziwei","trend","chenggu"],Ji=a=>{s(a.kind),F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),Ha(a.trueSolar!==!1),Pa(a.lateZi!==!1)},fs=a=>{const g=R.profEvent(a.target);if(!g)return;const z=h=>Ce.find(ue=>ue.id===h),q=a.currentTarget.querySelector(".mp-prof-name");if(jt(""),g.action==="use"){const h=z(g.id);if(!h)return;if(!R.profUsable(h)){Me("这张档案没有出生时刻,先补上时刻再存一次。");return}sa="",je(R.profilesTouch(h.id)),Ji(h),Ae(h.kind,{date:h.date,time:h.hourUnknown?"12:00":h.time},void 0,{gender:h.gender||void 0,address:h.address||"",hourUnknown:!!h.hourUnknown,trueSolar:h.trueSolar!==!1,lateZi:h.lateZi!==!1});return}if(g.action==="edit"){const h=z(g.id);if(!h)return;Ji(h),sa=h.label,Ke(h.id);return}if(g.action==="cancel"){sa="",Ke(null);return}if(g.action==="pin"){je(R.profilesPin(g.id));return}if(g.action==="del"){if(ca!==g.id){jt(g.id);return}je(R.profilesRemove(g.id)),ze===g.id&&(sa="",Ke(null)),Me("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const h=ze,ue=R.profFromForm({kind:n,date:S,time:ee,hourUnknown:le,gender:ye,address:$e,trueSolar:Ze,lateZi:pa},q?q.value:sa,ze||void 0);if(!ue){Me("先填好出生日期(和时刻),再存档案。");return}const qe=R.profilesPut(ue);if(!qe.ok){Me("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}je(qe.list),sa="",Ke(null),q&&(q.value=""),Me(`${h?"已更新档案":"已存入我的命盘"}「${qe.item.label}」。`)}},hs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(sa=g.value)},bs=a=>{const g=X.formOf?X.formOf(a):null;if(!g){Ae("ziwei");return}const z=Ge.some(qe=>qe.k===g.tab)?g.tab:"ziwei",q={date:g.date||S,time:g.time||ee},h=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&F(g.date),g.time&&se(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&I(g.address),typeof g.trueSolar=="boolean"&&Ha(g.trueSolar),typeof g.lateZi=="boolean"&&Pa(g.lateZi),h!==void 0&&ie(h),g.question&&Yt(g.question),s(z);const ue=X.restNote?X.restNote(g):"";Te(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${ue?` ${ue}`:""}`),Ae(z,q,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:h,question:g.question})};ga(()=>{let a=!1;const g=_e;return(async()=>{let z=null;try{await ut(n);const q=typeof location<"u"?String(location.href):"";q&&q.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(z=window.Engine.parseAskLink(q))}catch{z=null}if(!(a||_e!==g)){if(z&&z.ok)try{bs(z);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),ga(()=>{if(!ce)return;const a=ce.kind;me(null),Ae(a)},[ce]),ga(()=>{const a=g=>{if(g.key!=="Escape")return;const z=document.getElementById("mp-trace-layer");z&&z.classList.contains("open")&&Di()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Xi=(fe||[]).filter(a=>a&&Ge.some(g=>g.k===a.tab)).slice(0,hi),xs=a=>(Ge.find(g=>g.k===a)||{}).label||a,vs=({k:a,label:g,tip:z,wide:q})=>r("button",{key:a,type:"button",title:z,className:"mp-tool"+(q?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>At(a)},r("b",null,g),r("span",null,z)),ys=[r("div",{key:"profiles",className:"mp-profwrap",onClick:fs,onInput:hs,dangerouslySetInnerHTML:{__html:R.profilesHTML(Ce,{editingId:ze,armedDel:ca,bar:gs.indexOf(n)>=0?R.profilesBarHTML({editingId:ze,name:sa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Xi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Xi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>At(a.tab)},xs(a.tab),r("i",null,yn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:U==="group"?"on":"","aria-pressed":U==="group"?"true":"false",onClick:()=>Hi("group")},"分组"),r("button",{type:"button",className:U==="flat"?"on":"","aria-pressed":U==="flat"?"true":"false",onClick:()=>Hi("flat")},"平铺"))),U==="group"?r("div",{className:"mp-groups"},vn.map(a=>{const g=!!x[a.title],z=Math.max(0,a.items.length-4);return r("section",{key:a.title,className:"mp-tgroup"+(g?" open":"")},r("div",{className:"mp-tgroup-head"},r("h2",null,a.title),r("p",null,a.hint)),r("div",{className:"mp-ttools"},a.items.map(vs),z>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>v(q=>Object.assign({},q,{[a.title]:!g}))},g?"收起":`还有 ${z} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(U==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ge.map(a=>r("button",{key:a.k,role:"tab","aria-selected":n===a.k?"true":"false",tabIndex:n===a.k?0:-1,className:"mp-tab"+(n===a.k?" on":""),onClick:()=>At(a.k)},a.label))),r("div",{key:"head",className:"mp-panel"},jn({tab:n,open:Mi,onToggle:Pn,onCast:Fn,onAsk:Bi,hasResult:!!j}),r("div",{className:"mp-row"},_i?ne(pt?"出生日期(公历)":Ie==="date"?"日期(公历)":"起卦日期(公历)",r(Ot,{value:S,onChange:Dn,onInvalid:()=>Me("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,Oi?ne(pt?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:ee,disabled:le&&(n==="bazi"||n==="trend"),onChange:a=>Rn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:le,onChange:a=>re(a.target.checked)})," 时辰未知"):null,pt?ne("性别",r("select",{className:"mp-input",value:ye,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,pt?ne("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:$e,onChange:a=>I(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:et,onChange:a=>Bt(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?ne("对方出生日期",r(Ot,{value:xe,onChange:we,onInvalid:()=>Me("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?ne("对方出生时刻",r("input",{className:"mp-input",type:"time",value:Z,onChange:a=>K(a.target.value)})):null,n==="hepan"?ne("对方性别",r("select",{className:"mp-input",value:V,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?ne("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ha("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ha("ziwei")},"紫微"))):null,n==="hepan"?ne("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:te,onChange:a=>Ne(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Ue,onChange:a=>xt(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Ue?ne("第三方出生日期",r(Ot,{value:Ta,onChange:Wa,onInvalid:()=>Me("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Ue?ne("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ea,onChange:a=>ba(a.target.value)})):null,n==="hepan"&&Ue?ne("第三方性别",r("select",{className:"mp-input",value:xa,onChange:a=>_a(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Ue?ne("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:Oa,onChange:a=>vt(a.target.value)})):null,n==="qimen"?r("fieldset",{key:"qmr",className:"mp-qmrule"},r("legend",{className:"mp-lbl"},"换局规则"),r("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,g])=>r("label",{key:a,className:"mp-qmopt"},r("input",{type:"radio",name:"qimen_rule",value:a,checked:oa===a,onChange:()=>va(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Fa,onChange:a=>Qa(a.target.value)},r("option",{value:"same-day"},"23:00 后归当日"),r("option",{value:"next-day"},"23:00 后归次日"))),r("details",{className:"mp-qmhelp"},r("summary",null,"三种规则有什么区别?"),r("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,Ve(n)||n==="qimen"?ne(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Re,onChange:a=>{qi(a.target.value),Ri(a.target.value)}},(X.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?ne("牌阵",r("select",{className:"mp-input",value:Zt,onChange:a=>Si(a.target.value)},r("option",{value:"one"},"1 张 · 单张指引"),r("option",{value:"three"},"3 张 · 过去现在未来"),r("option",{value:"five"},"5 张 · 五张局势"),r("option",{value:"celtic"},"10 张 · 凯尔特十字"),r("option",{value:"either"},"5 张 · 二选一"),r("option",{value:"relation"},"7 张 · 关系阵"),r("option",{value:"timeflow"},"3 张 · 时间流"))):null,n==="liuyao"?ne("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:W,onChange:a=>ie(a.target.value)})):null,n==="meihua"?ne("起卦方式",r("div",{className:"mp-seg"},r("button",{className:qa==="time"?"on":"",onClick:()=>Pi("time")},"时间"),r("button",{className:qa==="number"?"on":"",onClick:()=>Pi("number")},"数字"))):null,n==="meihua"&&qa==="number"?ne("第一个数",r("input",{className:"mp-input",value:qt,placeholder:"如 17",onChange:a=>Ai(a.target.value)})):null,n==="meihua"&&qa==="number"?ne("第二个数",r("input",{className:"mp-input",value:Nt,placeholder:"如 29",onChange:a=>Li(a.target.value)})):null,n==="meihua"&&qa==="number"?ne("动爻(可空)",r("input",{className:"mp-input",value:Mt,placeholder:"1-6",onChange:a=>Ti(a.target.value)})):null,n==="zeri"?ne("所办事项",r("select",{className:"mp-input",value:Ba,onChange:a=>nt(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map(z=>r("option",{key:`${a}-${z}`,value:z},z)))))):null,n==="convert"?ne("转换方向",r("div",{className:"mp-seg"},r("button",{className:Oe==="solar2lunar"?"on":"",onClick:()=>ea("solar2lunar")},"公历 → 农历"),r("button",{className:Oe==="lunar2solar"?"on":"",onClick:()=>ea("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&Oe==="lunar2solar"?ne("农历日期",r("input",{className:"mp-input",value:$a,placeholder:"如 2026-9-17",onChange:a=>wt(a.target.value)})):null,n==="convert"&&Oe==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Ua,onChange:a=>$t(a.target.checked)})," 闰月"):null,n==="zeri"?ne("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:la,onChange:a=>Ga(a.target.value)})):null,n==="zeri"?ne("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:wa,onChange:a=>Qe(a.target.value)})):null,n==="zeri"?ne("当事人属相(可空)",r("select",{className:"mp-input",value:Ye,onChange:a=>st(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?ne("起课方式",r("div",{className:"mp-seg"},r("button",{className:De==="time"?"on":"",onClick:()=>ka("time")},"时间"),r("button",{className:De==="number"?"on":"",onClick:()=>ka("number")},"报数"))):null,n==="xiaoliuren"&&De==="number"?ne("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:za,onChange:a=>kt(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Za,onChange:a=>He(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:aa,onChange:a=>Ya(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(fn,{answers:da,page:Ut,onPick:(a,g)=>ot(z=>{const q=z.slice();return q[a]=g,q}),onPage:a=>zt(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(bt().total/gt)-1)))),onSubmit:Xt,onClear:()=>{ot(new Array(bt().total).fill(null)),zt(0),k(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(hn,{paper:ja,answers:i,page:l,onPick:(a,g)=>o(z=>{const q=z.slice();return q[a]=g,q}),onPage:a=>p(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((ja&&ja.questions?ja.questions.length:Ht)/ft)-1)))),onSubmit:Xt,onClear:()=>{o(new Array(Ht).fill(null)),p(0),k(null)}})):null,n==="trend"?ne("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:c,onChange:a=>d(a.target.value)})):null,n==="fengshui"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:u==="natal"?"on":"",onClick:()=>m("natal")},"命卦"),r("button",{className:u==="advise"?"on":"",onClick:()=>m("advise")},"门主灶"),r("button",{className:u==="xuankong"?"on":"",onClick:()=>m("xuankong")},"玄空"))):null,n==="fengshui"&&u!=="natal"?ne("坐山(24 山)",r("input",{className:"mp-input",value:w,placeholder:"如 子 / 乾",onChange:a=>$(a.target.value)})):null,n==="fengshui"&&u!=="natal"?ne("朝向(24 山)",r("input",{className:"mp-input",value:A,placeholder:"如 午 / 巽",onChange:a=>L(a.target.value)})):null,n==="fengshui"&&u==="xuankong"?ne("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:f,onChange:a=>b(a.target.value)})):null,n==="name"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:_==="assess"?"on":"",onClick:()=>Q("assess")},"评名字"),r("button",{className:_==="generate"?"on":"",onClick:()=>Q("generate")},"生成候选"))):null,n==="name"?ne("姓",r("input",{className:"mp-input",value:D,placeholder:"如 李",onChange:a=>T(a.target.value)})):null,n==="name"&&_==="assess"?ne("名字",r("input",{className:"mp-input",value:H,placeholder:"如 沐宸",onChange:a=>pe(a.target.value)})):null,n==="name"&&_==="generate"?ne("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:M,onChange:a=>B(a.target.value)})):null),pt?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Ze,onChange:a=>Ha(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:pa,onChange:a=>Pa(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:y,onChange:a=>he(a.target.checked)}),"联网精确到区县")):null,Ve(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(Tn?" invalid":""),rows:2,value:ma,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Yt(a.target.value),St(!1)},onBlur:a=>Ri(void 0,a.target.value)})):null,n==="mbti"||n==="constitution"?null:r("div",{key:"actions",className:"mp-actions"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:In,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Xt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Pt.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},_n.hint),ve.length||Xe.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,ve.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},ve.length?r("button",{className:"mp-hist-clear",onClick:rs},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:ds},Xe.length?`卦例库 ${Xe.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},ve.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Zi(a)},r("b",null,(Ge.find(z=>z.k===a.kind)||{}).label||a.kind),r("span",null,a.label||"—"),r("i",null,`${String(a.date||"").slice(5)} ${a.hourUnknown?"时辰未知":String(a.time||"")}`))))):null,Ie==="cast"&&Ei?r("div",{key:"auto",className:"mp-auto"},Jt.cast?`起卦时刻用的是你手动填的(${ee});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${ee}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,Sa?r("div",{key:"err",className:"mp-err",role:"alert"},Sa):null,ji?r("div",{key:"ntc",className:"mp-note",role:"status"},ji):null,Cn?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!j&&!Sa?r("div",{key:"empty",className:"mp-empty"},r("b",null,n==="ziwei"||n==="bazi"?"填好出生信息,点「排盘」":n==="tarot"?"写下想问的事,点「抽牌」":n==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":n==="constitution"?"按 1–5 给题目打分,答满 27 题就能看结果":Pt.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Pt.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,j?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:Wn,dangerouslySetInnerHTML:{__html:zn(j)+Qn(j)+R.resultWithInterpret("",j.it,{folded:Gn()})+R.perfHTML(de)+R.revisionHTML(j.r.revision)+R.handleHTML(j.r.handle)+R.shadowHTML(j.r.shadow,j.shadowDiff)+R.traceHTML(j.r.trace,j.r.system,j.r.traceText)+R.caliberHTML(j.caliber)}}):null,j?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:es},En||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ns,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ss,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,j?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:ra,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Gt(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Ii()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Ii},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Bi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ae.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},xi()),Da?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Da):null):null,j?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},ae.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Fi.map(([a,g,z])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:z,onClick:q=>Xn(a,q.currentTarget)},g))):null,Ra?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:R.followupHTML(Ra)}}):null,j&&j.kind==="bazi"&&j.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),j.r.past.rows.map(a=>r("div",{key:a.year,className:"mp-verify-row"},r("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),r("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>r("button",{key:g,className:"mp-chip"+(tt[a.year]===g?" on":""),onClick:()=>Ia(Object.assign({},tt,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Ui,onClick:os},"算贴合度"),ya?r("span",{className:"mp-verify-fit"},`命中 ${ya.yes}/${ya.answered}(${ya.level}):${ya.advice}`):null)):null,j&&j.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),We.map((a,g)=>r("div",{key:g,className:"mp-rect-row"},r("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:z=>yt(We.map((q,h)=>h===g?Object.assign({},q,{year:z.target.value}):q))}),r("select",{className:"mp-input",value:a.kind,onChange:z=>yt(We.map((q,h)=>h===g?Object.assign({},q,{kind:z.target.value}):q))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([z,q])=>r("option",{key:z,value:z},q))))),r("button",{className:"mp-btn ghost",style:Ui,onClick:ps},"计算候选时辰"),Fe?Fe.error?r("div",{className:"mp-rect-err"},Fe.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},Fe.note),Fe.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===Fe.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!j&&!Sa?r("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,r("div",{key:"fb",className:"mp-fb"},r("div",{className:"mp-fb-h"},r("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:Gi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},C||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>is(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",oe?r("span",{className:"mp-fb-note"}," "+oe):null)),ls?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Wt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${Qt.length}/${Xe.length}`),r("button",{className:"mp-cases-x",onClick:Wt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(R.CASE_STATUS.map(a=>[a,R.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Vt===a[0]?" on":""),onClick:()=>Ki(a[0])},`${a[1]} ${cs(a[0])}`))),r("div",{className:"mp-cases-list"},Qt.length?Qt.map(a=>us(a)):r("div",{className:"mp-empty"},"这一栏还空着。排一次盘或起一卦就会自动记一条;过些天回来标应验。")),r("div",{className:"mp-cases-f"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:ms},"导出 JSONL"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},ys)}function qn(n){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(n)}catch(s){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",s)}try{const s=document.createElement("style");return s.setAttribute("data-plugin","@local/metaphysics"),s.textContent=n,document.head.appendChild(s),()=>s.remove()}catch(s){return console.error("[metaphysics] DOM 注入样式也失败",s),()=>{}}}let zi=!1;function It(){try{const n=document.documentElement;if(!n||!document.body)return;const s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(s);const S=getComputedStyle(s).backgroundColor;s.remove();const F=Pe&&typeof Pe.pickOnColor=="function"?Pe.pickOnColor(S):"";F&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==F&&n.style.setProperty("--mp-on-brand",F)}catch{}}function Nn(){if(!zi){zi=!0,It();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",It)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(It).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Mn(n){try{const I=qn(cn+(R&&R.CSS?R.CSS:""));typeof n.effect=="function"&&typeof I=="function"&&n.effect(()=>I)}catch(I){console.error("[metaphysics] 样式注入失败",I)}try{Nn()}catch(I){console.error("[metaphysics] 字色同步失败",I)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(I){console.error("[metaphysics] 取 slots 服务失败",I)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ae.injectType=typeof s.inject;const I=typeof s.spec=="function"?s.spec("conversation.input.right"):null;ae.spec=I?I.kind+"/"+I.scope:"未声明"}catch(I){ae.spec="取声明失败",vi(I)}const S=I=>{if(typeof I=="function")return I;if(I&&typeof I=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof I[xe]=="function")return()=>{try{I[xe]()}catch{}}}return()=>{}},F=(I,xe)=>{try{const we=s.register(I,xe);return ae.regs+=1,ae.seatOk[I.name]=!0,S(we)}catch(we){return vi(we),()=>{}}},ee=(I,xe)=>{const we=()=>{const Z=xe();return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I+(typeof Z=="function"?" 已挂上":" 未挂上")),Z};try{typeof s.inject=="function"?s.inject(I,we):we()}catch(Z){console.error("[metaphysics] 等待槽位失败:"+I,Z);try{we()}catch(K){console.error("[metaphysics] 直接注册也失败:"+I,K)}}};ee("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},xn)),ee("main",()=>F({name:"main",key:"metaphysics"},I=>r(bn,null,r(Sn,I))));const se=(I,xe)=>{const we=()=>{try{const K=s.inject(I,xe);return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I.replace("conversation.","")+(typeof K=="function"?" 已挂上":" 未挂上")),K}catch(K){console.error("[metaphysics] 槽位注册失败:"+I,K);try{return xe()}catch(V){console.error("[metaphysics] 直接注册也失败:"+I,V);return}}};let Z;try{typeof n.effect=="function"?Z=n.effect(we,"metaphysics: "+I):Z=we()}catch(K){console.error("[metaphysics] effect 包裹失败:"+I,K),Z=we()}typeof Z=="function"&&ae.seatDisposers.push(Z)};se("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},wi)),se("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},$i));let le=!1;const re=()=>{ae.ref||le||(le=!0,ae.seatOk["conversation.input.right"]||F({name:"conversation.input.right",id:"metaphysics-ask",order:40},wi),ae.seatOk["conversation.composer.dock"]||F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},$i))};let ye=20;const t=()=>!!(ae.seatOk["conversation.input.right"]&&ae.seatOk["conversation.composer.dock"]),$e=()=>{ae.ref||ye<=0||t()||(ye-=1,re(),!t()&&setTimeout($e,700))};try{setTimeout($e,700)}catch{}try{document.addEventListener("pointerdown",()=>{le=!1,re()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Mn(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});
2612
+ `)},Bi=()=>{const a=ts();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{O("已复制"),ge("粘到 issue / 邮件 / 群里即可")}).catch(()=>{O("复制失败"),ge("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=a,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const z=document.execCommand&&document.execCommand("copy");g.remove(),O(z?"已复制":"复制失败"),ge(z?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{O("复制失败"),ge("可改用「导出 .md」")}setTimeout(()=>{O(""),ge("")},4e3)},is=()=>{try{Bi()}catch{}const a=encodeURIComponent("[反馈] "+(Ge.find(g=>g.k===n)?.label||n)+(za?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{ge("浏览器拦了弹窗,请手动打开 GitHub issues")}},ns=()=>{if(!(!j||!j.r))try{const a=X.renderText?X.renderText(j.r):j.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),z=document.createElement("a");z.href=URL.createObjectURL(g),z.download=`烛微命盘报告-${j.r.system}.md`,document.body.appendChild(z),z.click(),z.remove(),setTimeout(()=>URL.revokeObjectURL(z.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ss=()=>{if(!(!j||!j.r))try{const a=R.summaryCardPNG?R.summaryCardPNG(j.r,j.it):"";if(!a){Sa("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`烛微命盘摘要-${j.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Gi={fontSize:12,padding:"5px 12px"},os=()=>{!j||!j.r||!j.r.past||qe(X.verifyFit?X.verifyFit(j.r.past.rows,at):null)},ps=()=>{if(!(!j||j.kind!=="bazi"))try{const a=j.at||{date:S,time:ee},[g,z,N]=String(a.date).split("-").map(Number),[,h]=String(a.time).split(":").map(Number),ue=Qe.filter(Ne=>Number(Ne.year)).map(Ne=>({year:Number(Ne.year),kind:Ne.kind}));tt(X.rectifyBirth?X.rectifyBirth({base:{year:g,month:z,day:N,minute:Number.isFinite(h)?h:0},gender:j.gender||ve,events:ue,lateZi:typeof j.lateZi=="boolean"?j.lateZi:ra,trueSolar:typeof j.trueSolar=="boolean"?j.trueSolar:Ye,address:String(j.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){tt({error:a&&a.message?a.message:String(a)})}},ne=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Ui=a=>{s(a.kind),a.date&&F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),typeof a.trueSolar=="boolean"&&Oa(a.trueSolar),typeof a.lateZi=="boolean"&&Ha(a.lateZi),ie(a.lines||""),Zt(a.question||""),Si(a.direction||"general"),ji(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Mi(a.mhMode||"time"),Ci(a.upper||""),Ai(a.lower||""),Li(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&ba(a.qimenRule),typeof a.qLateZi=="string"&&Wa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&it(a.task),a.days!=null&&Ba(String(a.days)),typeof a.shengXiao=="string"&&nt(a.shengXiao),typeof a.zCand=="string"&&ea(a.zCand)),a.kind==="xiaoliuren"&&(wa(a.xlrMode==="number"?"number":"time"),a.num1!=null&&wt(String(a.num1)),a.num2!=null&&He(String(a.num2)),a.num3!=null&&Za(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&d(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&m(a.fsMode),a.fsPeriod!=null&&b(String(a.fsPeriod)),typeof a.sitting=="string"&&$(a.sitting),typeof a.facing=="string"&&L(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&Q(a.nnMode),typeof a.surname=="string"&&T(a.surname),typeof a.givenName=="string"&&pe(a.givenName),a.limitN!=null&&B(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&aa(a.convMode),typeof a.lunarDate=="string"&&vt(a.lunarDate),typeof a.leapMonth=="boolean"&&yt(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ga(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&K(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Me(a.partnerAddress),typeof a.thirdOn=="boolean"&&ht(a.thirdOn),typeof a.p2Date=="string"&&Va(a.p2Date),typeof a.p2Time=="string"&&fa(a.p2Time),typeof a.p2Gender=="string"&&Ea(a.p2Gender),typeof a.p2Address=="string"&&bt(a.p2Address)),zt(!1),me(a)},rs=()=>{P([]),ri([])},[Ve,At]=q(()=>{try{return R.casesLoad()}catch{return[]}}),[ls,Zi]=q(!1),[Xt,Yi]=q("all"),[ds,Ki]=q(!1),cs=()=>{try{At(R.casesLoad())}catch{}Yi("all"),Zi(!0)},Vt=()=>Zi(!1),ms=a=>a==="all"?Ve.length:Ve.filter(g=>g.status===a).length,Wt=Xt==="all"?Ve:Ve.filter(a=>a.status===Xt),us=()=>{if(!Ue.entry){je("这张盘没有可存的参数,重排一次再存。");return}try{const a=R.casesAdd(Ue.entry);a&&a.ok?(At(a.list),Ki(!0)):je("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}catch{je("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}},gs=()=>{const a=R.casesExport(Ve);if(!a){je("还没有可导出的卦例");return}try{const g=new Blob([a],{type:"application/x-ndjson;charset=utf-8"}),z=URL.createObjectURL(g),N=document.createElement("a");N.href=z,N.download=`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(N),N.click(),N.remove(),setTimeout(()=>{try{URL.revokeObjectURL(z)}catch{}},1e3),je(`已导出 ${Ve.length} 条卦例(JSONL)`)}catch(g){je("导出失败:"+(g&&g.message?g.message:"当前环境不支持下载"))}},fs=a=>{const g=a.entry||{},z=new Date(a.at),N=h=>String(h).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Ui(Object.assign({},g)),Vt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,R.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${N(z.getMonth()+1)}-${N(z.getDate())} ${N(z.getHours())}:${N(z.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:h=>At(R.casesSetStatus(a.id,h.target.value))},R.CASE_STATUS.map(h=>r("option",{key:h,value:h},R.caseStatusLabel(h)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>At(R.casesRemove(a.id))},"删"))},hs=["bazi","ziwei","trend","chenggu"],Ji=a=>{s(a.kind),F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),Oa(a.trueSolar!==!1),Ha(a.lateZi!==!1)},bs=a=>{const g=R.profEvent(a.target);if(!g)return;const z=h=>Ce.find(ue=>ue.id===h),N=a.currentTarget.querySelector(".mp-prof-name");if(kt(""),g.action==="use"){const h=z(g.id);if(!h)return;if(!R.profUsable(h)){je("这张档案没有出生时刻,先补上时刻再存一次。");return}oa="",Se(R.profilesTouch(h.id)),Ji(h),Ae(h.kind,{date:h.date,time:h.hourUnknown?"12:00":h.time},void 0,{gender:h.gender||void 0,address:h.address||"",hourUnknown:!!h.hourUnknown,trueSolar:h.trueSolar!==!1,lateZi:h.lateZi!==!1});return}if(g.action==="edit"){const h=z(g.id);if(!h)return;Ji(h),oa=h.label,Je(h.id);return}if(g.action==="cancel"){oa="",Je(null);return}if(g.action==="pin"){Se(R.profilesPin(g.id));return}if(g.action==="del"){if(ma!==g.id){kt(g.id);return}Se(R.profilesRemove(g.id)),ze===g.id&&(oa="",Je(null)),je("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const h=ze,ue=R.profFromForm({kind:n,date:S,time:ee,hourUnknown:le,gender:ve,address:$e,trueSolar:Ye,lateZi:ra},N?N.value:oa,ze||void 0);if(!ue){je("先填好出生日期(和时刻),再存档案。");return}const Ne=R.profilesPut(ue);if(!Ne.ok){je("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}Se(Ne.list),oa="",Je(null),N&&(N.value=""),je(`${h?"已更新档案":"已存入我的命盘"}「${Ne.item.label}」。`)}},xs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(oa=g.value)},vs=a=>{const g=X.formOf?X.formOf(a):null;if(!g){Ae("ziwei");return}const z=Ge.some(Ne=>Ne.k===g.tab)?g.tab:"ziwei",N={date:g.date||S,time:g.time||ee},h=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&F(g.date),g.time&&se(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&I(g.address),typeof g.trueSolar=="boolean"&&Oa(g.trueSolar),typeof g.lateZi=="boolean"&&Ha(g.lateZi),h!==void 0&&ie(h),g.question&&Zt(g.question),s(z);const ue=X.restNote?X.restNote(g):"";Te(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${ue?` ${ue}`:""}`),Ae(z,N,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:h,question:g.question})};Ma(()=>{let a=!1;const g=_e;return(async()=>{let z=null;try{await ct(n);const N=typeof location<"u"?String(location.href):"";N&&N.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(z=window.Engine.parseAskLink(N))}catch{z=null}if(!(a||_e!==g)){if(z&&z.ok)try{vs(z);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),Ma(()=>{if(!ce)return;const a=ce.kind;me(null),Ae(a)},[ce]),Ma(()=>{const a=g=>{if(g.key!=="Escape")return;const z=document.getElementById("mp-trace-layer");z&&z.classList.contains("open")&&Fi()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Xi=(fe||[]).filter(a=>a&&Ge.some(g=>g.k===a.tab)).slice(0,fi),ys=a=>(Ge.find(g=>g.k===a)||{}).label||a,ws=({k:a,label:g,tip:z,wide:N})=>r("button",{key:a,type:"button",title:z,className:"mp-tool"+(N?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>Mt(a)},r("b",null,g),r("span",null,z)),$s=[r("div",{key:"profiles",className:"mp-profwrap",onClick:bs,onInput:xs,dangerouslySetInnerHTML:{__html:R.profilesHTML(Ce,{editingId:ze,armedDel:ma,bar:hs.indexOf(n)>=0?R.profilesBarHTML({editingId:ze,name:oa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Xi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Xi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>Mt(a.tab)},ys(a.tab),r("i",null,yn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:U==="group"?"on":"","aria-pressed":U==="group"?"true":"false",onClick:()=>Oi("group")},"分组"),r("button",{type:"button",className:U==="flat"?"on":"","aria-pressed":U==="flat"?"true":"false",onClick:()=>Oi("flat")},"平铺"))),U==="group"?r("div",{className:"mp-groups"},vn.map(a=>{const g=!!x[a.title],z=Math.max(0,a.items.length-4);return r("section",{key:a.title,className:"mp-tgroup"+(g?" open":"")},r("div",{className:"mp-tgroup-head"},r("h2",null,a.title),r("p",null,a.hint)),r("div",{className:"mp-ttools"},a.items.map(ws),z>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>v(N=>Object.assign({},N,{[a.title]:!g}))},g?"收起":`还有 ${z} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(U==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ge.map(a=>r("button",{key:a.k,role:"tab","aria-selected":n===a.k?"true":"false",tabIndex:n===a.k?0:-1,className:"mp-tab"+(n===a.k?" on":""),onClick:()=>Mt(a.k)},a.label))),r("div",{key:"head",className:"mp-panel"},jn({tab:n,open:Ni,onToggle:Pn,onCast:Fn,onAsk:Ii,hasResult:!!j}),r("div",{className:"mp-row"},Ei?ne(ot?"出生日期(公历)":Ie==="date"?"日期(公历)":"起卦日期(公历)",r(_t,{value:S,onChange:Dn,onInvalid:()=>je("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,_i?ne(ot?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:ee,disabled:le&&(n==="bazi"||n==="trend"),onChange:a=>Rn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:le,onChange:a=>re(a.target.checked)})," 时辰未知"):null,ot?ne("性别",r("select",{className:"mp-input",value:ve,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,ot?ne("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:$e,onChange:a=>I(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Qa,onChange:a=>It(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?ne("对方出生日期",r(_t,{value:xe,onChange:we,onInvalid:()=>je("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?ne("对方出生时刻",r("input",{className:"mp-input",type:"time",value:Z,onChange:a=>K(a.target.value)})):null,n==="hepan"?ne("对方性别",r("select",{className:"mp-input",value:V,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?ne("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ga("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ga("ziwei")},"紫微"))):null,n==="hepan"?ne("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:te,onChange:a=>Me(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Ze,onChange:a=>ht(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Ze?ne("第三方出生日期",r(_t,{value:La,onChange:Va,onInvalid:()=>je("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Ze?ne("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ta,onChange:a=>fa(a.target.value)})):null,n==="hepan"&&Ze?ne("第三方性别",r("select",{className:"mp-input",value:ha,onChange:a=>Ea(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Ze?ne("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:_a,onChange:a=>bt(a.target.value)})):null,n==="qimen"?r("fieldset",{key:"qmr",className:"mp-qmrule"},r("legend",{className:"mp-lbl"},"换局规则"),r("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,g])=>r("label",{key:a,className:"mp-qmopt"},r("input",{type:"radio",name:"qimen_rule",value:a,checked:pa===a,onChange:()=>ba(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Pa,onChange:a=>Wa(a.target.value)},r("option",{value:"same-day"},"23:00 后归当日"),r("option",{value:"next-day"},"23:00 后归次日"))),r("details",{className:"mp-qmhelp"},r("summary",null,"三种规则有什么区别?"),r("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,We(n)||n==="qimen"?ne(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Re,onChange:a=>{Si(a.target.value),Di(a.target.value)}},(X.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?ne("牌阵",r("select",{className:"mp-input",value:Ut,onChange:a=>ji(a.target.value)},r("option",{value:"one"},"1 张 · 单张指引"),r("option",{value:"three"},"3 张 · 过去现在未来"),r("option",{value:"five"},"5 张 · 五张局势"),r("option",{value:"celtic"},"10 张 · 凯尔特十字"),r("option",{value:"either"},"5 张 · 二选一"),r("option",{value:"relation"},"7 张 · 关系阵"),r("option",{value:"timeflow"},"3 张 · 时间流"))):null,n==="liuyao"?ne("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:W,onChange:a=>ie(a.target.value)})):null,n==="meihua"?ne("起卦方式",r("div",{className:"mp-seg"},r("button",{className:ja==="time"?"on":"",onClick:()=>Hi("time")},"时间"),r("button",{className:ja==="number"?"on":"",onClick:()=>Hi("number")},"数字"))):null,n==="meihua"&&ja==="number"?ne("第一个数",r("input",{className:"mp-input",value:jt,placeholder:"如 17",onChange:a=>Ci(a.target.value)})):null,n==="meihua"&&ja==="number"?ne("第二个数",r("input",{className:"mp-input",value:St,placeholder:"如 29",onChange:a=>Ai(a.target.value)})):null,n==="meihua"&&ja==="number"?ne("动爻(可空)",r("input",{className:"mp-input",value:qt,placeholder:"1-6",onChange:a=>Li(a.target.value)})):null,n==="zeri"?ne("所办事项",r("select",{className:"mp-input",value:Ia,onChange:a=>it(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map(z=>r("option",{key:`${a}-${z}`,value:z},z)))))):null,n==="convert"?ne("转换方向",r("div",{className:"mp-seg"},r("button",{className:Oe==="solar2lunar"?"on":"",onClick:()=>aa("solar2lunar")},"公历 → 农历"),r("button",{className:Oe==="lunar2solar"?"on":"",onClick:()=>aa("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&Oe==="lunar2solar"?ne("农历日期",r("input",{className:"mp-input",value:ya,placeholder:"如 2026-9-17",onChange:a=>vt(a.target.value)})):null,n==="convert"&&Oe==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Ga,onChange:a=>yt(a.target.checked)})," 闰月"):null,n==="zeri"?ne("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:da,onChange:a=>Ba(a.target.value)})):null,n==="zeri"?ne("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:va,onChange:a=>ea(a.target.value)})):null,n==="zeri"?ne("当事人属相(可空)",r("select",{className:"mp-input",value:Ke,onChange:a=>nt(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?ne("起课方式",r("div",{className:"mp-seg"},r("button",{className:De==="time"?"on":"",onClick:()=>wa("time")},"时间"),r("button",{className:De==="number"?"on":"",onClick:()=>wa("number")},"报数"))):null,n==="xiaoliuren"&&De==="number"?ne("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:$a,onChange:a=>wt(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ua,onChange:a=>He(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:ta,onChange:a=>Za(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(fn,{answers:ca,page:Gt,onPick:(a,g)=>st(z=>{const N=z.slice();return N[a]=g,N}),onPage:a=>$t(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(ft().total/mt)-1)))),onSubmit:Jt,onClear:()=>{st(new Array(ft().total).fill(null)),$t(0),k(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(hn,{paper:ka,answers:i,page:l,onPick:(a,g)=>o(z=>{const N=z.slice();return N[a]=g,N}),onPage:a=>p(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((ka&&ka.questions?ka.questions.length:Ot)/ut)-1)))),onSubmit:Jt,onClear:()=>{o(new Array(Ot).fill(null)),p(0),k(null)}})):null,n==="trend"?ne("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:c,onChange:a=>d(a.target.value)})):null,n==="fengshui"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:u==="natal"?"on":"",onClick:()=>m("natal")},"命卦"),r("button",{className:u==="advise"?"on":"",onClick:()=>m("advise")},"门主灶"),r("button",{className:u==="xuankong"?"on":"",onClick:()=>m("xuankong")},"玄空"))):null,n==="fengshui"&&u!=="natal"?ne("坐山(24 山)",r("input",{className:"mp-input",value:w,placeholder:"如 子 / 乾",onChange:a=>$(a.target.value)})):null,n==="fengshui"&&u!=="natal"?ne("朝向(24 山)",r("input",{className:"mp-input",value:A,placeholder:"如 午 / 巽",onChange:a=>L(a.target.value)})):null,n==="fengshui"&&u==="xuankong"?ne("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:f,onChange:a=>b(a.target.value)})):null,n==="name"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:_==="assess"?"on":"",onClick:()=>Q("assess")},"评名字"),r("button",{className:_==="generate"?"on":"",onClick:()=>Q("generate")},"生成候选"))):null,n==="name"?ne("姓",r("input",{className:"mp-input",value:D,placeholder:"如 李",onChange:a=>T(a.target.value)})):null,n==="name"&&_==="assess"?ne("名字",r("input",{className:"mp-input",value:H,placeholder:"如 沐宸",onChange:a=>pe(a.target.value)})):null,n==="name"&&_==="generate"?ne("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:M,onChange:a=>B(a.target.value)})):null),ot?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Ye,onChange:a=>Oa(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:ra,onChange:a=>Ha(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:y,onChange:a=>he(a.target.checked)}),"联网精确到区县")):null,We(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(Tn?" invalid":""),rows:2,value:ua,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Zt(a.target.value),zt(!1)},onBlur:a=>Di(void 0,a.target.value)})):null,n==="mbti"||n==="constitution"?null:r("div",{key:"actions",className:"mp-actions"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:In,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Jt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Ht.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},_n.hint),ye.length||Ve.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,ye.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},ye.length?r("button",{className:"mp-hist-clear",onClick:rs},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:cs},Ve.length?`卦例库 ${Ve.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},ye.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Ui(a)},r("b",null,(Ge.find(z=>z.k===a.kind)||{}).label||a.kind),r("span",null,a.label||"—"),r("i",null,`${String(a.date||"").slice(5)} ${a.hourUnknown?"时辰未知":String(a.time||"")}`))))):null,Ie==="cast"&&Ti?r("div",{key:"auto",className:"mp-auto"},Kt.cast?`起卦时刻用的是你手动填的(${ee});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${ee}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,za?r("div",{key:"err",className:"mp-err",role:"alert"},za):null,zi?r("div",{key:"ntc",className:"mp-note",role:"status"},zi):null,Cn?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!j&&!za?r("div",{key:"empty",className:"mp-empty"},r("b",null,n==="ziwei"||n==="bazi"?"填好出生信息,点「排盘」":n==="tarot"?"写下想问的事,点「抽牌」":n==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":n==="constitution"?"按 1–5 给题目打分,答满 27 题就能看结果":Ht.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Ht.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,j?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:Wn,dangerouslySetInnerHTML:{__html:zn(j)+Qn(j)+R.resultWithInterpret("",j.it,{folded:Gn()})+R.perfHTML(de)+R.revisionHTML(j.r.revision)+R.handleHTML(j.r.handle)+R.shadowHTML(j.r.shadow,j.shadowDiff)+R.traceHTML(j.r.trace,j.r.system,j.r.traceText)+R.caliberHTML(j.caliber)}}):null,j?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:es},En||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ns,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ss,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:us,title:"把这张盘的参数存进卦例库,日后可回填重排、标应验"},ds?"已存入卦例库":"存入卦例库")):null,j?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:la,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Bt(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Ri()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Ri},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Ii,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ae.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},bi()),Fa?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Fa):null):null,j?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},ae.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Pi.map(([a,g,z])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:z,onClick:N=>Xn(a,N.currentTarget)},g))):null,Da?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:R.followupHTML(Da)}}):null,j&&j.kind==="bazi"&&j.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),j.r.past.rows.map(a=>r("div",{key:a.year,className:"mp-verify-row"},r("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),r("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>r("button",{key:g,className:"mp-chip"+(at[a.year]===g?" on":""),onClick:()=>Ra(Object.assign({},at,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Gi,onClick:os},"算贴合度"),xa?r("span",{className:"mp-verify-fit"},`命中 ${xa.yes}/${xa.answered}(${xa.level}):${xa.advice}`):null)):null,j&&j.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),Qe.map((a,g)=>r("div",{key:g,className:"mp-rect-row"},r("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:z=>xt(Qe.map((N,h)=>h===g?Object.assign({},N,{year:z.target.value}):N))}),r("select",{className:"mp-input",value:a.kind,onChange:z=>xt(Qe.map((N,h)=>h===g?Object.assign({},N,{kind:z.target.value}):N))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([z,N])=>r("option",{key:z,value:z},N))))),r("button",{className:"mp-btn ghost",style:Gi,onClick:ps},"计算候选时辰"),Fe?Fe.error?r("div",{className:"mp-rect-err"},Fe.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},Fe.note),Fe.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===Fe.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!j&&!za?r("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,r("div",{key:"fb",className:"mp-fb"},r("div",{className:"mp-fb-h"},r("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:Bi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},C||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>is(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",oe?r("span",{className:"mp-fb-note"}," "+oe):null)),ls?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Vt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${Wt.length}/${Ve.length}`),r("button",{className:"mp-cases-x",onClick:Vt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(R.CASE_STATUS.map(a=>[a,R.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Xt===a[0]?" on":""),onClick:()=>Yi(a[0])},`${a[1]} ${ms(a[0])}`))),r("div",{className:"mp-cases-list"},Wt.length?Wt.map(a=>fs(a)):r("div",{className:"mp-empty"},"这一栏还空着。看结果时点「存入卦例库」,想要的盘才会记进来;过些天回来标应验。")),r("div",{className:"mp-cases-f"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:gs},"导出 JSONL"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},$s)}function qn(n){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(n)}catch(s){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",s)}try{const s=document.createElement("style");return s.setAttribute("data-plugin","@local/metaphysics"),s.textContent=n,document.head.appendChild(s),()=>s.remove()}catch(s){return console.error("[metaphysics] DOM 注入样式也失败",s),()=>{}}}let ki=!1;function Rt(){try{const n=document.documentElement;if(!n||!document.body)return;const s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(s);const S=getComputedStyle(s).backgroundColor;s.remove();const F=Pe&&typeof Pe.pickOnColor=="function"?Pe.pickOnColor(S):"";F&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==F&&n.style.setProperty("--mp-on-brand",F)}catch{}}function Nn(){if(!ki){ki=!0,Rt();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",Rt)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(Rt).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Mn(n){try{const I=qn(cn+(R&&R.CSS?R.CSS:""));typeof n.effect=="function"&&typeof I=="function"&&n.effect(()=>I)}catch(I){console.error("[metaphysics] 样式注入失败",I)}try{Nn()}catch(I){console.error("[metaphysics] 字色同步失败",I)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(I){console.error("[metaphysics] 取 slots 服务失败",I)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ae.injectType=typeof s.inject;const I=typeof s.spec=="function"?s.spec("conversation.input.right"):null;ae.spec=I?I.kind+"/"+I.scope:"未声明"}catch(I){ae.spec="取声明失败",xi(I)}const S=I=>{if(typeof I=="function")return I;if(I&&typeof I=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof I[xe]=="function")return()=>{try{I[xe]()}catch{}}}return()=>{}},F=(I,xe)=>{try{const we=s.register(I,xe);return ae.regs+=1,ae.seatOk[I.name]=!0,S(we)}catch(we){return xi(we),()=>{}}},ee=(I,xe)=>{const we=()=>{const Z=xe();return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I+(typeof Z=="function"?" 已挂上":" 未挂上")),Z};try{typeof s.inject=="function"?s.inject(I,we):we()}catch(Z){console.error("[metaphysics] 等待槽位失败:"+I,Z);try{we()}catch(K){console.error("[metaphysics] 直接注册也失败:"+I,K)}}};ee("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"烛微命盘 v"+(window.__MP_VER||"")},xn)),ee("main",()=>F({name:"main",key:"metaphysics"},I=>r(bn,null,r(Sn,I))));const se=(I,xe)=>{const we=()=>{try{const K=s.inject(I,xe);return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I.replace("conversation.","")+(typeof K=="function"?" 已挂上":" 未挂上")),K}catch(K){console.error("[metaphysics] 槽位注册失败:"+I,K);try{return xe()}catch(V){console.error("[metaphysics] 直接注册也失败:"+I,V);return}}};let Z;try{typeof n.effect=="function"?Z=n.effect(we,"metaphysics: "+I):Z=we()}catch(K){console.error("[metaphysics] effect 包裹失败:"+I,K),Z=we()}typeof Z=="function"&&ae.seatDisposers.push(Z)};se("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},yi)),se("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},wi));let le=!1;const re=()=>{ae.ref||le||(le=!0,ae.seatOk["conversation.input.right"]||F({name:"conversation.input.right",id:"metaphysics-ask",order:40},yi),ae.seatOk["conversation.composer.dock"]||F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},wi))};let ve=20;const t=()=>!!(ae.seatOk["conversation.input.right"]&&ae.seatOk["conversation.composer.dock"]),$e=()=>{ae.ref||ve<=0||t()||(ve-=1,re(),!t()&&setTimeout($e,700))};try{setTimeout($e,700)}catch{}try{document.addEventListener("pointerdown",()=>{le=!1,re()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Mn(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});