dsh-metaphysics 0.76.0 → 0.77.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.76.0",factory(ct){const Xa=(function(){try{return ct("react")}catch{return globalThis.React}})();if(!Xa)return{inject:[],apply(){}};const r=Xa.createElement,oi={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"},pi=[{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.76.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"问一件具体事,最接地气"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",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:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]},{title:"古籍考据",hint:"古法三式与整年气运:偏研究向,日常咨询少用",items:[{k:"qimen",label:"奇门",tip:"看方位时机"},{k:"daliuren",label:"六壬",tip:"占事断来意"},{k:"taiyi",label:"太乙",tip:"积年推局"}]}],window.__MP_UNRELEASED=[];const J={};J.DIRECTIONS=pi,J.compute=()=>{throw new Error("命理引擎尚未加载")};const ri=Object.create(null),Ot=Object.create(null);function ln(n){return oi[n]||oi.bazi||"client.chart.js"}const li=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function dn(n){const s=ln(n);let k=ri[s];const P=!!k,Q=li();if(!k){if(!ct||typeof ct.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let pe=Ot[s];pe||(pe=ct.async(`./${s}`).then(ce=>{const de=ce&&(ce.Engine||ce.default);if(!de||typeof de.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return ri[s]=de,de}),Ot[s]=pe,pe.catch(()=>{}).then(()=>{delete Ot[s]})),k=await pe}for(const pe of Object.keys(k))k[pe]!==void 0&&(J[pe]=k[pe]);return Array.isArray(J.DIRECTIONS)||(J.DIRECTIONS=pi),window.Engine=J,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:P,ms:Math.round((li()-Q)*10)/10},J}window.__mpEnsureEngine=dn,window.Engine=J,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=K=>!!n[K],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},P=K=>k[K]||"other",Q="#ffffff",pe="#1c1a15";function ce(K){const X=String(K??"").match(/rgba?\(([^)]+)\)/i);if(!X)return null;const W=X[1].split(/[,\s/]+/).filter(Boolean).map(Number);return W.length<3||W.slice(0,3).some(G=>!Number.isFinite(G))||W.length>3&&Number.isFinite(W[3])&&W[3]<.95?null:[W[0],W[1],W[2]]}function de(K){const X=String(K||"").replace("#",""),W=X.length===3?X.split("").map(G=>G+G).join(""):X;return/^[0-9a-f]{6}$/i.test(W)?[0,2,4].map(G=>parseInt(W.slice(G,G+2),16)):null}function ye(K){const X=W=>{const G=W/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*X(K[0])+.7152*X(K[1])+.0722*X(K[2])}function t(K,X){const W=ye(K),G=ye(X),ie=Math.max(W,G),Ce=Math.min(W,G);return(ie+.05)/(Ce+.05)}function $e(K){const X=typeof K=="string"?ce(K):K;return X?t(X,de(Q))>=t(X,de(pe))?Q:pe:""}function B(K){const X=String(K??"").trim();if(!X)return{lines:null,warning:""};const W=X.split(/[^0-9]+/).filter(Boolean).map(Number),G=W.filter(ie=>![6,7,8,9].includes(ie));return W.length===6&&G.length===0?{lines:W,warning:""}:{lines:null,warning:W.length!==6?`爻值需要正好 6 个数字(当前 ${W.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(K){const X=String(K??"").trim();if(!X)return null;const W=Number(X);return Number.isFinite(W)?W:null}function we(K){const X=K instanceof Date?K:new Date,W=G=>String(G).padStart(2,"0");return`${X.getFullYear()}-${W(X.getMonth()+1)}-${W(X.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:B,toNumber:xe,parseRGB:ce,hexToRGB:de,luminance:ye,contrastRatio:t,pickOnColor:$e,ON_DARK:Q,ON_LIGHT:pe,kindOfDirection:P,todayStamp:we}})(),(function(){const n=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.77.0",factory(mt){const Va=(function(){try{return mt("react")}catch{return globalThis.React}})();if(!Va)return{inject:[],apply(){}};const r=Va.createElement,oi={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"},pi=[{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.77.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"问一件具体事,最接地气"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",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:"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:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]},{title:"古籍考据",hint:"古法三式与整年气运:偏研究向,日常咨询少用",items:[{k:"qimen",label:"奇门",tip:"看方位时机"},{k:"daliuren",label:"六壬",tip:"占事断来意"},{k:"taiyi",label:"太乙",tip:"积年推局"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=pi,K.compute=()=>{throw new Error("命理引擎尚未加载")};const ri=Object.create(null),Ot=Object.create(null);function ln(n){return oi[n]||oi.bazi||"client.chart.js"}const li=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function dn(n){const s=ln(n);let k=ri[s];const P=!!k,Q=li();if(!k){if(!mt||typeof mt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let pe=Ot[s];pe||(pe=mt.async(`./${s}`).then(ce=>{const de=ce&&(ce.Engine||ce.default);if(!de||typeof de.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return ri[s]=de,de}),Ot[s]=pe,pe.catch(()=>{}).then(()=>{delete Ot[s]})),k=await pe}for(const pe of Object.keys(k))k[pe]!==void 0&&(K[pe]=k[pe]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=pi),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:P,ms:Math.round((li()-Q)*10)/10},K}window.__mpEnsureEngine=dn,window.Engine=K,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=J=>!!n[J],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},P=J=>k[J]||"other",Q="#ffffff",pe="#1c1a15";function ce(J){const X=String(J??"").match(/rgba?\(([^)]+)\)/i);if(!X)return null;const W=X[1].split(/[,\s/]+/).filter(Boolean).map(Number);return W.length<3||W.slice(0,3).some(G=>!Number.isFinite(G))||W.length>3&&Number.isFinite(W[3])&&W[3]<.95?null:[W[0],W[1],W[2]]}function de(J){const X=String(J||"").replace("#",""),W=X.length===3?X.split("").map(G=>G+G).join(""):X;return/^[0-9a-f]{6}$/i.test(W)?[0,2,4].map(G=>parseInt(W.slice(G,G+2),16)):null}function ye(J){const X=W=>{const G=W/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*X(J[0])+.7152*X(J[1])+.0722*X(J[2])}function t(J,X){const W=ye(J),G=ye(X),ie=Math.max(W,G),Ce=Math.min(W,G);return(ie+.05)/(Ce+.05)}function ke(J){const X=typeof J=="string"?ce(J):J;return X?t(X,de(Q))>=t(X,de(pe))?Q:pe:""}function B(J){const X=String(J??"").trim();if(!X)return{lines:null,warning:""};const W=X.split(/[^0-9]+/).filter(Boolean).map(Number),G=W.filter(ie=>![6,7,8,9].includes(ie));return W.length===6&&G.length===0?{lines:W,warning:""}:{lines:null,warning:W.length!==6?`爻值需要正好 6 个数字(当前 ${W.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(J){const X=String(J??"").trim();if(!X)return null;const W=Number(X);return Number.isFinite(W)?W:null}function we(J){const X=J instanceof Date?J:new Date,W=G=>String(G).padStart(2,"0");return`${X.getFullYear()}-${W(X.getMonth()+1)}-${W(X.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:B,toNumber:xe,parseRGB:ce,hexToRGB:de,luminance:ye,contrastRatio:t,pickOnColor:ke,ON_DARK:Q,ON_LIGHT:pe,kindOfDirection:P,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,卡片感等于零。
@@ -18,6 +18,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
18
18
  reduced-motion 时整体关停,见文件尾的全局 @media。 */
19
19
  --dur:150ms;--dur-fast:100ms;--ease:cubic-bezier(.32,.72,.24,1);
20
20
  --r-sm:6px;--r-md:10px;--r-lg:14px;
21
+ /* 称骨分档徽章五档色(0.77.0 嵌入段显眼化):亮色渐变两端 */
22
+ --cg-top-a:#c9a227;--cg-top-b:#e6b84c;--cg-good-a:#2e7d5b;--cg-good-b:#4caf87;--cg-mid-a:#5b6b9d;--cg-mid-b:#7d8fc4;--cg-weak-a:#a1702d;--cg-weak-b:#c9924f;--cg-low-a:#8a4a4a;--cg-low-b:#b06a6a;
21
23
  --glow:0 0 0 1px rgba(var(--lu-rgb),.25),0 0 12px rgba(var(--lu-rgb),.12)}
22
24
  /* 变量与 .mp-it 共享 —— 「解析与详解」是 .pp 的兄弟节点、不在 .pp 内部,
23
25
  变量只挂在 .pp 上时它拿不到 --card/--muted/--red,头部底色会变透明、边框会退回黑色。 */
@@ -1085,18 +1087,26 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1085
1087
  .mp-cg-plain{margin-top:7px;font-size:12.5px;line-height:1.85;color:var(--ink2)}
1086
1088
  .mp-cg-plain em,.mp-cg-band em{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 4px;margin-right:6px;vertical-align:1px}
1087
1089
  .mp-cg-band{margin-top:8px;font-size:12.5px;line-height:1.8;color:var(--ink2)}
1088
- /* 八字卡内嵌的折叠称骨:summary 一行低调,展开才见骨重/歌诀/释义 */
1089
- .mp-bzcg{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}
1090
- .mp-bzcg summary{cursor:pointer;font-size:12px;color:var(--muted);list-style:none}
1091
- .mp-bzcg summary::before{content:'▸ ';color:var(--lu)}
1092
- .mp-bzcg[open] summary::before{content:'▾ '}
1093
- .mp-bzcg-lunar{font-size:11px;color:var(--muted);margin-top:6px}
1094
- .mp-bzcg-ws{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:4px;font-size:12.5px;color:var(--ink2)}
1095
- .mp-bzcg-ws b{color:var(--ink);font-weight:600}
1096
- .mp-bzcg-song{margin-top:7px;padding:8px 11px;border-left:3px solid var(--quan);background:var(--band);border-radius:0 6px 6px 0;font-family:var(--kai,system-ui),serif;font-size:14px;line-height:1.9;color:var(--ink)}
1090
+ /* 八字卡内嵌称骨:常开亮色卡,金色系压过周围的灰调盘面 */
1091
+ .mp-bzcg{margin-top:12px;border:2px solid color-mix(in srgb,var(--gold) 72%,var(--lu));border-radius:10px;padding:12px 14px;background:linear-gradient(135deg,color-mix(in srgb,var(--gold) 13%,var(--card)),var(--card) 58%);box-shadow:0 2px 10px color-mix(in srgb,var(--gold) 30%,transparent)}
1092
+ .mp-bzcg-h{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-direction:row}
1093
+ .mp-bzcg-h b{font-size:14px;color:var(--gold);font-weight:700;letter-spacing:.04em}
1094
+ .mp-bzcg-tag{font-style:normal;font-size:10px;color:var(--on-accent);border:none;background:color-mix(in srgb,var(--gold) 78%,var(--lu));border-radius:99px;padding:1px 8px}
1095
+ .mp-bzcg-hero{display:flex;align-items:baseline;gap:10px;margin:2px 0 4px}
1096
+ .mp-bzcg-hero b{font-size:30px;color:var(--gold);font-weight:700;letter-spacing:.02em}
1097
+ .mp-bzcg-bandchip{font-style:normal;font-size:12px;font-weight:700;color:var(--on-accent);border-radius:99px;padding:3px 12px}
1098
+ .mp-bzcg-bandchip.band-top{background:linear-gradient(135deg,var(--cg-top-a),var(--cg-top-b))}
1099
+ .mp-bzcg-bandchip.band-good{background:linear-gradient(135deg,var(--cg-good-a),var(--cg-good-b))}
1100
+ .mp-bzcg-bandchip.band-mid{background:linear-gradient(135deg,var(--cg-mid-a),var(--cg-mid-b))}
1101
+ .mp-bzcg-bandchip.band-weak{background:linear-gradient(135deg,var(--cg-weak-a),var(--cg-weak-b))}
1102
+ .mp-bzcg-bandchip.band-low{background:linear-gradient(135deg,var(--cg-low-a),var(--cg-low-b))}
1103
+ .mp-bzcg-lunar{font-size:11px;color:var(--muted);margin-top:4px}
1104
+ .mp-bzcg-ws{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:5px;font-size:12.5px;color:var(--ink2)}
1105
+ .mp-bzcg-ws b{color:var(--gold);font-weight:700}
1106
+ .mp-bzcg-song{margin-top:8px;padding:8px 11px;border-left:3px solid var(--gold);background:color-mix(in srgb,var(--gold) 12%,var(--band));border-radius:0 6px 6px 0;font-family:var(--kai,system-ui),serif;font-size:14px;line-height:1.9;color:var(--ink)}
1097
1107
  .mp-bzcg-plain{margin-top:6px;font-size:12px;line-height:1.8;color:var(--ink2)}
1098
- .mp-bzcg-plain em{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 4px;margin-right:6px}
1099
- .mp-bzcg-band{margin-top:6px;font-size:12px;line-height:1.8;color:var(--ink2)}
1108
+ .mp-bzcg-plain em{font-style:normal;font-size:10.5px;color:var(--gold);border:1px solid var(--gold);border-radius:99px;padding:1px 7px;margin-right:6px;opacity:.9}
1109
+ .mp-bzcg-band{margin-top:7px;font-size:12.5px;line-height:1.8;color:var(--ink);font-weight:500}
1100
1110
  .mp-bzcg-note{margin-top:7px;font-size:11px;color:var(--muted)}
1101
1111
  .mp-cg-note{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line);font-size:11px;line-height:1.7;color:var(--muted)}
1102
1112
  @media print{.mp-cg{break-inside:avoid}}
@@ -1586,8 +1596,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1586
1596
  #ppm-d-bad-ink:checked~.pp-body .pp-st.bad{color:var(--ink)}
1587
1597
  #ppm-d-bad-ink:checked~.pp-body .pp-st.bad::before{content:none}
1588
1598
  #ppm-d-bold:checked~.pp-body .pp-st.main,#ppm-d-bold:checked~.pp-body .pp-st.good{font-weight:700}
1589
- `,s=window.__PP=window.__PP||{};s.CSS=n;const k={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},P={禄:"lu",权:"quan",科:"ke",忌:"ji"},Q=new Set(["三台","八座","恩光","天贵"]),pe={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},ce={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},de={乾:[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,p)=>{const b=Math.round(43),v=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${b}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${b+18}" y="${2.5}" width="${104-b-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${p?" "+p:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${v}</svg>`},B={木:"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=B[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">${(de[e]||[0,0,0]).slice().reverse().map((l,o)=>{const c=o*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=$e,s._wxIcon=xe,s._triGlyph=we;function K(e,i,p){return!e||!e.length?"":e.map(l=>{const o=k[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${P[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${P[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${pe[l.brightness]||"mid"}">${l.brightness}</em>`:"",b=l.inTemple?'<em class="pp-b good">庙</em>':"",v=p&&p[l.name]?ua(p[l.name],l.name):"",y=Q.has(l.name)?" st-sbg":"";return`<span class="pp-st ${o}${y}">${v}${l.name}${m}${b}${c}${u}</span>`}).join("")}function X(e){const i=[];for(let p=0;p<6;p++)i.push(e+p*12);return i.join(",")}const W=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],G=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],ie=e=>(e%12+12)%12,Ce=(e,i)=>e!==i&&[ie(i+4),ie(i+8),ie(i+6)].includes(e);function Le(e,i,p,l,o,c,d,u){const m=ce[e.branch]||[1,1],b=G.indexOf(e.branch),v=["pp-cell"];b===i?v.push("pp-soul"):Ce(b,i)&&v.push("pp-tri"),e.isBody&&v.push("pp-shen"),u&&e.branch===u&&v.push("pp-laiyin"),m[0]===4&&v.push("pp-lastrow"),m[1]===4&&v.push("pp-lastcol");const y=e.shensha||{},w=W[ie(i-b)];let T="";if(b===i&&l){const S=O=>(k[O.type]||"")==="main";if(!(e.stars||[]).some(S)){const O=l.find(F=>G.indexOf(F.branch)===ie(b+6)),ee=O?(O.stars||[]).filter(S):[];ee.length&&(T=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${ee.map(F=>F.name).join(" ")}</div>`)}}return`<div class="${v.join(" ")}" data-pi="${b}" data-view="${p}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
1590
- <div class="pp-stars">${K(e.stars,o,Je(e))}</div>
1599
+ `,s=window.__PP=window.__PP||{};s.CSS=n;const k={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},P={禄:"lu",权:"quan",科:"ke",忌:"ji"},Q=new Set(["三台","八座","恩光","天贵"]),pe={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},ce={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},de={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},ye=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),ke=(e,i,p)=>{const b=Math.round(43),v=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${b}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${b+18}" y="${2.5}" width="${104-b-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${p?" "+p:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${v}</svg>`},B={木:"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=B[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">${(de[e]||[0,0,0]).slice().reverse().map((l,o)=>{const c=o*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=ke,s._wxIcon=xe,s._triGlyph=we;function J(e,i,p){return!e||!e.length?"":e.map(l=>{const o=k[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${P[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${P[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${pe[l.brightness]||"mid"}">${l.brightness}</em>`:"",b=l.inTemple?'<em class="pp-b good">庙</em>':"",v=p&&p[l.name]?ua(p[l.name],l.name):"",y=Q.has(l.name)?" st-sbg":"";return`<span class="pp-st ${o}${y}">${v}${l.name}${m}${b}${c}${u}</span>`}).join("")}function X(e){const i=[];for(let p=0;p<6;p++)i.push(e+p*12);return i.join(",")}const W=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],G=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],ie=e=>(e%12+12)%12,Ce=(e,i)=>e!==i&&[ie(i+4),ie(i+8),ie(i+6)].includes(e);function Le(e,i,p,l,o,c,d,u){const m=ce[e.branch]||[1,1],b=G.indexOf(e.branch),v=["pp-cell"];b===i?v.push("pp-soul"):Ce(b,i)&&v.push("pp-tri"),e.isBody&&v.push("pp-shen"),u&&e.branch===u&&v.push("pp-laiyin"),m[0]===4&&v.push("pp-lastrow"),m[1]===4&&v.push("pp-lastcol");const y=e.shensha||{},w=W[ie(i-b)];let T="";if(b===i&&l){const S=O=>(k[O.type]||"")==="main";if(!(e.stars||[]).some(S)){const O=l.find(F=>G.indexOf(F.branch)===ie(b+6)),ee=O?(O.stars||[]).filter(S):[];ee.length&&(T=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${ee.map(F=>F.name).join(" ")}</div>`)}}return`<div class="${v.join(" ")}" data-pi="${b}" data-view="${p}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
1600
+ <div class="pp-stars">${J(e.stars,o,Je(e))}</div>
1591
1601
  ${T}
1592
1602
  <div class="pp-ages">${X(e.xiaoxian.age)}</div>
1593
1603
  ${ht(e,c)}
@@ -1607,17 +1617,17 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1607
1617
  </div>`}function ua(e,i){return`<span class="pp-zha ${P[e]}" title="自化${t(e)}:${t(i)}·宫干化回本宫"><svg class="z-a" viewBox="0 0 22 9" role="img" aria-label="自化${t(e)}">
1608
1618
  <path class="z-shaft" d="M1 7C6.6 7 11.4 5.6 17.2 3.2"/>
1609
1619
  <path class="z-head" d="M20.2 2 17.8 4.9 16.6 1.9Z"/>
1610
- </svg></span>`}s._zhaMark=ua;function Je(e){const i={};for(const p of e.selfHua||[])!p||!p.star||!P[p.type]||i[p.star]||(i[p.star]=p.type);return i}function ht(e,i){const p=i&&i[e.branch]||[];if(!p.length)return"";const l=p.map(o=>`<i class="${P[o.type]||""}" title="${t(o.star)}化${t(o.type)}">${t(o.type)}<em>→${t(o.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function qa(e,i){const p=i&&i[e.branch]||null;return p?`<div class="pp-hs">${Object.entries(p).map(([o,c])=>`<i>${t(o)}<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 p=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=>p.pillars[l].ganzhi).join(" ")}catch{return""}}function Ma(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),p=e.liunian&&e.liunian[0]||null,l=p?p.age:1,o=e.palaces.find(z=>l>=z.daxian.start&&l<=z.daxian.end)||e.palaces[0],c=G.indexOf(o.branch),d=p?G.indexOf(p.lifePalace.branch):i,u=z=>{const N={};for(const E of z||[])E&&E.star&&(N[E.star]=E.type);return N},m=(e.daxianList||[]).find(z=>z.branch===o.branch)||null,b={da:u(m&&m.mutagenHits),ln:u(p&&p.mutagenHits)},v={};for(const z of e.daxianList||[])v[z.branch]=z.mutagenHits||[];const y=(()=>{const z=Ma(e);if(!z)return null;const N=(e.daxianList||[]).find(le=>le.stem===z);if(!N)return null;const E={};for(const le of e.palaces)for(const ge of le.stars||[])ge.name in E||(E[ge.name]=le.branch);return{stem:z,items:(N.mutagenHits||[]).map(le=>({type:le.type,star:le.star,branch:E[le.star]||null,palace:E[le.star]?(e.palaces.find(ge=>ge.branch===E[le.star])||{}).palace:null}))}})();let w=null;if(p){w={};for(const[z,N]of Object.entries(p))/^(流|年解)/.test(z)&&typeof N=="string"&&G.includes(N)&&(w[N]=w[N]||{},w[N][z]=N)}const T={da:m&&m.yunStars?(()=>{const z={};for(const[N,E]of Object.entries(m.yunStars))(z[E]=z[E]||{})[N]=E;if(m.yunSuiqi)for(const[N,E]of Object.entries(m.yunSuiqi))(z[E]=z[E]||{})[N]=E;if(m.yunJiangqian)for(const[N,E]of Object.entries(m.yunJiangqian))(z[E]=z[E]||{})[N]=E;return z})():null,ln:w};if(e.liunian&&e.liunian.length){const z=e.liunian.find(N=>N.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(z.lnSuiqi)for(const[N,E]of Object.entries(z.lnSuiqi))(w[E]=w[E]||{})[N]=E;if(z.lnJiangqian)for(const[N,E]of Object.entries(z.lnJiangqian))(w[E]=w[E]||{})[N]=E}const S=(z,N)=>e.palaces.map(E=>Le(E,z,N,e.palaces,b[N]||null,v,T[N]||null,e.laiyin&&e.laiyin.branch)).join(""),O=(z,N)=>`<div class="pp-center">
1620
+ </svg></span>`}s._zhaMark=ua;function Je(e){const i={};for(const p of e.selfHua||[])!p||!p.star||!P[p.type]||i[p.star]||(i[p.star]=p.type);return i}function ht(e,i){const p=i&&i[e.branch]||[];if(!p.length)return"";const l=p.map(o=>`<i class="${P[o.type]||""}" title="${t(o.star)}化${t(o.type)}">${t(o.type)}<em>→${t(o.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function qa(e,i){const p=i&&i[e.branch]||null;return p?`<div class="pp-hs">${Object.entries(p).map(([o,c])=>`<i>${t(o)}<em>${t(c)}</em></i>`).join("")}</div>`:""}function et(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const p=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=>p.pillars[l].ganzhi).join(" ")}catch{return""}}function Ma(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),p=e.liunian&&e.liunian[0]||null,l=p?p.age:1,o=e.palaces.find(z=>l>=z.daxian.start&&l<=z.daxian.end)||e.palaces[0],c=G.indexOf(o.branch),d=p?G.indexOf(p.lifePalace.branch):i,u=z=>{const N={};for(const E of z||[])E&&E.star&&(N[E.star]=E.type);return N},m=(e.daxianList||[]).find(z=>z.branch===o.branch)||null,b={da:u(m&&m.mutagenHits),ln:u(p&&p.mutagenHits)},v={};for(const z of e.daxianList||[])v[z.branch]=z.mutagenHits||[];const y=(()=>{const z=Ma(e);if(!z)return null;const N=(e.daxianList||[]).find(re=>re.stem===z);if(!N)return null;const E={};for(const re of e.palaces)for(const ge of re.stars||[])ge.name in E||(E[ge.name]=re.branch);return{stem:z,items:(N.mutagenHits||[]).map(re=>({type:re.type,star:re.star,branch:E[re.star]||null,palace:E[re.star]?(e.palaces.find(ge=>ge.branch===E[re.star])||{}).palace:null}))}})();let w=null;if(p){w={};for(const[z,N]of Object.entries(p))/^(流|年解)/.test(z)&&typeof N=="string"&&G.includes(N)&&(w[N]=w[N]||{},w[N][z]=N)}const T={da:m&&m.yunStars?(()=>{const z={};for(const[N,E]of Object.entries(m.yunStars))(z[E]=z[E]||{})[N]=E;if(m.yunSuiqi)for(const[N,E]of Object.entries(m.yunSuiqi))(z[E]=z[E]||{})[N]=E;if(m.yunJiangqian)for(const[N,E]of Object.entries(m.yunJiangqian))(z[E]=z[E]||{})[N]=E;return z})():null,ln:w};if(e.liunian&&e.liunian.length){const z=e.liunian.find(N=>N.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(z.lnSuiqi)for(const[N,E]of Object.entries(z.lnSuiqi))(w[E]=w[E]||{})[N]=E;if(z.lnJiangqian)for(const[N,E]of Object.entries(z.lnJiangqian))(w[E]=w[E]||{})[N]=E}const S=(z,N)=>e.palaces.map(E=>Le(E,z,N,e.palaces,b[N]||null,v,T[N]||null,e.laiyin&&e.laiyin.branch)).join(""),O=(z,N)=>`<div class="pp-center">
1611
1621
  ${N==="da"?`<div class="ct-t1">大限 ${o.ganzhi} ${o.daxian.start}-${o.daxian.end}岁</div>`:N==="ln"&&p?`<div class="ct-t1">流年 ${p.ganzhi} ${p.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
1612
1622
  <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>
1613
1623
  <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>
1614
- ${Wa(e)?`<div class="ct-t3">${Wa(e)}</div>`:""}
1624
+ ${et(e)?`<div class="ct-t3">${et(e)}</div>`:""}
1615
1625
  ${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>`:""}
1616
1626
  <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>
1617
1627
  <div class="ct-t4">命宫 ${e.soul.branch} 身宫 ${e.body.branch} 五行局 ${e.bureau.name}</div>
1618
1628
  <div class="ct-t4">子年斗君 ${e.doujun?e.doujun.zinian:"—"} 流年斗君 ${p&&p.doujun?p.doujun:"—"}</div>
1619
1629
  <div class="ct-t4">紫微 ${e.ziwei} 天府 ${e.tianfu} ${N==="da"?"大限命宫 "+G[c]:N==="ln"?"流年命宫 "+G[d]:"本命命宫 "+e.soul.branch}</div>
1620
- ${N==="da"||N==="ln"?`<div class="ct-t4 pp-viewhua">${N==="da"?"大限":"流年"}四化 ${(N==="da"?b.da:b.ln)&&Object.keys(N==="da"?b.da:b.ln).length?Object.entries(N==="da"?b.da:b.ln).map(([le,ge])=>`${le}化${ge}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1630
+ ${N==="da"||N==="ln"?`<div class="ct-t4 pp-viewhua">${N==="da"?"大限":"流年"}四化 ${(N==="da"?b.da:b.ln)&&Object.keys(N==="da"?b.da:b.ln).length?Object.entries(N==="da"?b.da:b.ln).map(([re,ge])=>`${re}化${ge}`).join(" "):'<span class="pp-dim">未飞四化</span>'}</div>`:""}
1621
1631
  <div class="pp-legend"><span class="pp-m lu">禄</span><span class="pp-m quan">权</span><span class="pp-m ke">科</span><span class="pp-m ji">忌</span><span>实心=生年四化 空心=大限/流年四化 箭头=自化 红框=命宫 浅底=三方四正</span></div>
1622
1632
  </div>`,ee=(z,N,E)=>`<div class="pp-body ${z}" data-view="${E}" data-soul="${N}"><div class="pp-grid">${S(N,E)}${O(N,E)}</div><div class="pp-detail"></div></div>`,F=e.changqu,C=F?`<div class="pp-chips">
1623
1633
  <span class="pp-chip">昌 ${F.wenchang.branch}(${F.wenchang.palace})</span>
@@ -1629,10 +1639,10 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1629
1639
  <div class="pp-chips">${I.placed.map(z=>`<span class="pp-chip${z.inTemple?" ok":""}" title="${t(z.meaning||"")}">${t(z.name)} ${t(z.branch)}(${t(z.palace)})${z.inTemple?"·庙":""}</span>`).join("")}</div>
1630
1640
  <details class="pp-zy"><summary>逐颗安星诀(${I.placed.length} 条 · 出多处近代通行辑本并核,属通行说,不是《全书》原文)</summary><div class="pp-zy-v">${t(I.verses).replace(/\n/g,"<br>")}</div></div></details>
1631
1641
  ${I.skipped&&I.skipped.length?`<div class="pp-zy-s">${I.skipped.map(z=>t(z)).join("")}</div>`:""}</div>`:`<div class="pp-sec"><div class="pp-sec-h">杂曜 · 本盘 ${I.starTotal} 颗(通行简盘)</div>
1632
- <div class="pp-zy-s">开「杂曜全表」追加十二颗:解神·天巫·天月·阴煞(生月)/天官·天福·天厨(生年干)/蜚廉·天德·年解(生年支)/天才(命宫+生年支)·天寿(身宫+生年支)。${I.skipped&&I.skipped.length?`不另立:${I.skipped.map(z=>t(z)).join("")}`:""}</div></div>`:"",ne=e.flyChains?(()=>{const z=["禄","权","科","忌"].map(N=>{const E=e.flyChains[N];if(!E||!E.steps.length)return"";const le=E.path.map(ze=>String(ze).replace(/宫$/,"")).join("→"),ge=E.steps.map(ze=>`${ze.from}(${ze.fromStem})化${N}${ze.star}→${ze.to}`).join(";");return`<span class="pp-chip ${N==="忌"?"warn":N==="禄"?"ok":""}" title="${t(ge)}">飞${N} ${t(le)}${E.closed?"↺":""}</span>`}).join("");return z?`<div class="pp-chips">${z}</div>`:""})():"",ue=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(z=>{const N=/忌/.test(z)?"warn":/自化/.test(z)?"":"ok",E=se=>String(se).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),le=(e.flyComposite.targets||[]).find(se=>se.palace===E(z)),ge=le?le.incoming.map(se=>`${se.from}化${se.type}${se.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${N}" title="${t(ge)}">三方四正 ${t(z)}</span>`}).join("")}</div>`:"",U=e.flow,Te=U?(()=>{const z=ge=>(ge.mutagenHits||[]).length?ge.mutagenHits.map(se=>`<i>${se.star}化${se.type}<em>→${se.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',N=(ge,se,ze)=>`<div class="flow-row"><b>${ge}</b><span class="flow-p"><span class="flow-k">${se.ganzhi||"—"} 落${se.palace||"未上盘"}(${se.branch})</span>${ze?`<em class="flow-same">${ze}</em>`:""}</span><span class="flow-m">${z(se)}</span></div>`,le=U.day.branch===U.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1642
+ <div class="pp-zy-s">开「杂曜全表」追加十二颗:解神·天巫·天月·阴煞(生月)/天官·天福·天厨(生年干)/蜚廉·天德·年解(生年支)/天才(命宫+生年支)·天寿(身宫+生年支)。${I.skipped&&I.skipped.length?`不另立:${I.skipped.map(z=>t(z)).join("")}`:""}</div></div>`:"",ne=e.flyChains?(()=>{const z=["禄","权","科","忌"].map(N=>{const E=e.flyChains[N];if(!E||!E.steps.length)return"";const re=E.path.map(je=>String(je).replace(/宫$/,"")).join("→"),ge=E.steps.map(je=>`${je.from}(${je.fromStem})化${N}${je.star}→${je.to}`).join(";");return`<span class="pp-chip ${N==="忌"?"warn":N==="禄"?"ok":""}" title="${t(ge)}">飞${N} ${t(re)}${E.closed?"↺":""}</span>`}).join("");return z?`<div class="pp-chips">${z}</div>`:""})():"",ue=e.flyComposite&&Array.isArray(e.flyComposite.labels)&&e.flyComposite.labels.length?`<div class="pp-chips">${e.flyComposite.labels.map(z=>{const N=/忌/.test(z)?"warn":/自化/.test(z)?"":"ok",E=se=>String(se).replace(/^.*?会/,"").replace(/^禄忌同宫/,"").replace(/自化$/,""),re=(e.flyComposite.targets||[]).find(se=>se.palace===E(z)),ge=re?re.incoming.map(se=>`${se.from}化${se.type}${se.star}`).join("、"):e.flyComposite.note;return`<span class="pp-chip ${N}" title="${t(ge)}">三方四正 ${t(z)}</span>`}).join("")}</div>`:"",U=e.flow,Te=U?(()=>{const z=ge=>(ge.mutagenHits||[]).length?ge.mutagenHits.map(se=>`<i>${se.star}化${se.type}<em>→${se.palace||"未上盘"}</em></i>`).join(""):'<i class="dim">宫干无四化</i>',N=(ge,se,je)=>`<div class="flow-row"><b>${ge}</b><span class="flow-p"><span class="flow-k">${se.ganzhi||"—"} 落${se.palace||"未上盘"}(${se.branch})</span>${je?`<em class="flow-same">${je}</em>`:""}</span><span class="flow-m">${z(se)}</span></div>`,re=U.day.branch===U.month.branch?"(日数走满一圈,故同宫)":"";return`<div class="pp-flow">
1633
1643
  <div class="flow-row"><b>基准</b><span class="flow-p">${U.asOf.solar}</span><span class="flow-m">农历 ${U.asOf.lunar} 流年 ${U.asOf.yearGanzhi}(斗君 ${U.year.doujun})</span></div>
1634
1644
  ${N(`流月 ${U.month.index} 月`,U.month)}
1635
- ${N(`流日 ${U.day.index} 日`,U.day,le)}
1645
+ ${N(`流日 ${U.day.index} 日`,U.day,re)}
1636
1646
  ${N(`流时 ${G[U.hour.hourIndex]}时`,U.hour)}
1637
1647
  </div>`})():"";return s._zw=e,s.briefHTML(e)+`<div class="pp">
1638
1648
  <input type="radio" name="ppm" id="ppm-ben" class="pp-r" checked>
@@ -1716,11 +1726,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1716
1726
  ${F("太极转换",`<span class="dt-tri dt-taiji">以${d}[${o.branch}]立太极${R}</span>`)}
1717
1727
  <div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function Ca(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 Aa={};function xt(e,i){ra(e);const p=e.querySelector(".pp-grid");if(!p)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],o=m=>{const b=e.querySelector('.pp-cell[data-pi="'+m+'"]');if(!b)return null;const v=Number(b.style.gridRow),y=Number(b.style.gridColumn),w=Math.min(75,Math.max(25,(v-.5)*25));return y===1?[25,w]:[75,w]},c=l.map(o);if(c.some(m=>!m))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const u=(m,b,v,y)=>{const w=document.createElementNS("http://www.w3.org/2000/svg","line");w.setAttribute("x1",m),w.setAttribute("y1",b),w.setAttribute("x2",v),w.setAttribute("y2",y),d.appendChild(w)};u(c[0][0],c[0][1],c[1][0],c[1][1]),u(c[1][0],c[1][1],c[2][0],c[2][1]),u(c[2][0],c[2][1],c[3][0],c[3][1]),u(c[3][0],c[3][1],c[0][0],c[0][1]);for(let m=0;m<4;m++){const b=document.createElementNS("http://www.w3.org/2000/svg","circle");b.setAttribute("cx",c[m][0]),b.setAttribute("cy",c[m][1]),b.setAttribute("r",m===0?.9:.7),m===0&&b.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(b)}p.style.position="relative",p.appendChild(d)}function ra(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 p=i.closest(".pp-body");if(!p)return;const l=p.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){Ca(p),ra(p),l.classList.remove("open"),l.innerHTML="";return}Ca(p);const o=Number(i.dataset.pi),c=Number(p.dataset.soul);xt(p,o),p.querySelectorAll(".pp-cell").forEach(u=>{const m=Number(u.dataset.pi);(m===ie(o+4)||m===ie(o+8)||m===ie(o+6))&&u.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=fa(o,c),l.classList.add("open")};document.addEventListener("click",i=>{const p=i.target;if(p&&p.closest&&p.closest("[data-pp-close]")){const o=p.closest(".pp-body");if(o){Ca(o),ra(o);const c=o.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=p&&p.closest?p.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const p=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;p&&(i.preventDefault(),e(p))})}s.bindZiwei=ba,s._palaceDetailHTML=fa,ba();function Xe(e,i){const p=i||{},l=e.slice().sort((o,c)=>c.position-o.position);return p.plain?l.map(o=>`<div class="mp-hy-row hy-plain">
1718
1728
  <span class="mp-hy-nm">${o.name||ye[o.position-1]}</span>
1719
- ${$e(o.yinYang==="阳",o.moving)}
1729
+ ${ke(o.yinYang==="阳",o.moving)}
1720
1730
  </div>`).join(""):l.map(o=>{const c=o.yinYang==="阳",d=p.shiYing?o.position===p.shi?'<span class="mp-hy-sy">世</span>':o.position===p.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",u=o.moving?`<i class="mp-hy-mv" title="动爻">${c?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
1721
1731
  ${d}
1722
1732
  <span class="mp-hy-nm">${o.name||ye[o.position-1]}</span>
1723
- <span class="mp-hy-ln">${$e(c,o.moving)}${u}</span>
1733
+ <span class="mp-hy-ln">${ke(c,o.moving)}${u}</span>
1724
1734
  <span class="mp-hy-gz">${t(o.ganzhi||"")}</span>
1725
1735
  <span class="mp-hy-lq">${t(o.liuqin||"")}</span>
1726
1736
  <span class="mp-hy-ls">${t(o.liushen||"")}</span>
@@ -1738,7 +1748,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1738
1748
  ${T}
1739
1749
  ${O}
1740
1750
  ${F}
1741
- </div>`},s.meihuaHTML=function(e){const i=(T,S,O,ee,F)=>{const V=[...de[ee]||[0,0,0],...de[O]||[0,0,0]].slice().reverse().map(R=>$e(!!R,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1751
+ </div>`},s.meihuaHTML=function(e){const i=(T,S,O,ee,F)=>{const V=[...de[ee]||[0,0,0],...de[O]||[0,0,0]].slice().reverse().map(R=>ke(!!R,!1,"sm")).join("");return`<div class="mp-hexbox hb-mini">
1742
1752
  <div class="hb-h">${T}</div>
1743
1753
  <div class="hb-n">${S}</div>
1744
1754
  <div class="mp-mh-mini">${V}</div>
@@ -1814,7 +1824,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1814
1824
  </div>
1815
1825
  ${e.systemNote?`<div class="mp-tt-tip">${e.systemNote}</div>`:""}
1816
1826
  <div class="mp-tt-tip">塔罗用于自我觉察与娱乐,不作确定性预言。</div>
1817
- </div>`};const Qa=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const p='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),o=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1827
+ </div>`};const at=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const p='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),o=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
1818
1828
  <div class="mp-hp-ith">三方合盘 · 三对并列</div>
1819
1829
  <table><thead>${p}</thead><tbody>${l}</tbody></table>
1820
1830
  <p>${o}</p>${c}
@@ -1833,9 +1843,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1833
1843
  <div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100</span></div>
1834
1844
  <div class="mp-hp-sides">${i(e.a,"你")}${i(e.b,"对方")}</div>
1835
1845
  <div class="mp-hp-dims">${p}</div>
1836
- ${Qa(e.triple)}
1846
+ ${at(e.triple)}
1837
1847
  <div class="mp-hp-notes">${e.notes.map(l=>`<p>${l}</p>`).join("")}</div>
1838
- </div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(o,c)=>`<div class="relation__row"><dt>${t(o)}</dt><dd>${t(c)}</dd></div>`,p=o=>o&&["旺","相","休","囚","死"].filter(d=>Array.isArray(o[d])&&o[d].length).map(d=>`${d} ${o[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",p(e.states&&e.states.gate)],["星旺衰",p(e.states&&e.states.star)],["干旺衰",p(e.states&&e.states.stem)],["干宫生克",(()=>{const o=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return o.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([o,c])=>i(o,c)).join("")}</dl>`};const 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 p=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1848
+ </div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(o,c)=>`<div class="relation__row"><dt>${t(o)}</dt><dd>${t(c)}</dd></div>`,p=o=>o&&["旺","相","休","囚","死"].filter(d=>Array.isArray(o[d])&&o[d].length).map(d=>`${d} ${o[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(o=>`${o.palace}宫${o.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",p(e.states&&e.states.gate)],["星旺衰",p(e.states&&e.states.star)],["干旺衰",p(e.states&&e.states.stem)],["干宫生克",(()=>{const o=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return o.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([o,c])=>i(o,c)).join("")}</dl>`};const tt=[["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 p=l=>{if(l==="5")return`<div class="pp-qm-cell center">
1839
1849
  <div class="pp-qm-ju">${e.ju}</div>
1840
1850
  <div class="pp-qm-kv">${e.siZhu.year} ${e.siZhu.month}</div>
1841
1851
  <div class="pp-qm-kv">${e.siZhu.day} ${e.siZhu.time}</div>
@@ -1855,7 +1865,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1855
1865
  <span>值符 ${e.zhiFu.star}(${e.zhiFu.gong}宫) 值使 ${e.zhiShi.gate}(${e.zhiShi.gong}宫)</span>
1856
1866
  <span>旬首 ${e.xunshou} 空亡 ${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}</span>
1857
1867
  </div>
1858
- <div class="mp-qm-grid">${et.map(l=>l.map(p).join("")).join("")}</div>
1868
+ <div class="mp-qm-grid">${tt.map(l=>l.map(p).join("")).join("")}</div>
1859
1869
  <div class="mp-qm-legend">上=九星 中=天盘干/八门 下=地盘干/宫号 角落=八神</div>
1860
1870
  <div class="mp-qm-rules">${e.rules.map(l=>`<p>${l}</p>`).join("")}</div>
1861
1871
  </div>`},s.ziweiHepanHTML=function(e){const i=(o,c)=>`<div class="mp-hp-side">
@@ -1877,19 +1887,19 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1877
1887
  <div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${l("你")||"<li>无</li>"}</ul></div>
1878
1888
  <div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${l("对方")||"<li>无</li>"}</ul></div>
1879
1889
  </div>
1880
- ${Qa(e.triple)}
1890
+ ${at(e.triple)}
1881
1891
  <div class="mp-hp-notes">${e.notes.map(o=>`<p>${o}</p>`).join("")}</div>
1882
- </div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],p=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=H=>typeof H=="number"&&isFinite(H)?H:0,o=H=>H.luck?l(H.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,b=p.map(H=>l(H.age)).filter(H=>H>0),v=Math.min(u,...b.length?b:[u]),y=Math.max(m,...b.length?b:[m]),w=Math.max(1,y-v),T=640,S=190,O={t:14,r:16,b:26,l:30},ee=T-O.l-O.r,F=S-O.t-O.b,C=H=>O.l+(H-v)/w*ee,V=H=>O.t+F-(Math.max(d,Math.min(c,H))-d)/(c-d)*F,L=[{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(H=>`<rect class="cv-band ${H.cls}" x="${O.l}" y="${V(H.to).toFixed(1)}" width="${ee}" height="${(V(H.from)-V(H.to)).toFixed(1)}"/>`).join(""),I=10/w*ee,f=[];i.forEach((H,Ne)=>{const x=l(H.startAge),_=o(H),ve=Math.max(O.l,C(x)),re=Math.min(O.l+ee,C(x+10));f.push(`${ve.toFixed(1)},${V(_).toFixed(1)}`),f.push(`${re.toFixed(1)},${V(_).toFixed(1)}`)});const ne=f.length?`<polyline class="cv-dy" points="${f.join(" ")}"/>`:"",ue=f.length?`<polygon class="cv-dyfill" points="${O.l},${(O.t+F).toFixed(1)} ${f.join(" ")} ${(O.l+ee).toFixed(1)},${(O.t+F).toFixed(1)}"/>`:"",U=p.filter(H=>H.luck&&typeof H.luck.score=="number").map(H=>({x:C(l(H.age)),y:V(l(H.luck.score)),y0:l(H.year),gz:H.ganzhi,tier:H.luck.tier,v:l(H.luck.score),age:l(H.age)})),Te=U.length>1?`<polyline class="cv-ln" points="${U.map(H=>`${H.x.toFixed(1)},${H.y.toFixed(1)}`).join(" ")}"/>`:"",z={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},N=U.length?Math.min(...U.map(H=>H.y0)):null,E=U.map(H=>`<circle class="cv-dot${H.y0===N?" now":""}" cx="${H.x.toFixed(1)}" cy="${H.y.toFixed(1)}" fill="${z[H.tier]||"var(--muted)"}"><title>${t(`${H.y0}年(${H.age}岁)${H.gz} ${H.tier} ${H.v}`)}</title></circle>`).join(""),le=`<line class="cv-ax zero" x1="${O.l}" y1="${V(0).toFixed(1)}" x2="${O.l+ee}" y2="${V(0).toFixed(1)}"/><line class="cv-ax" x1="${O.l}" y1="${O.t}" x2="${O.l}" y2="${O.t+F}"/>`,ge=w>60?10:5,se=[];for(let H=Math.ceil(v/ge)*ge;H<=y;H+=ge)se.push(`<text class="cv-lbl age" x="${C(H).toFixed(1)}" y="${(O.t+F+13).toFixed(1)}" text-anchor="middle">${H}岁</text>`);const ze=`<text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,Be=i.slice().sort((H,Ne)=>o(Ne)-o(H)),q=Be[0],ae=Be[Be.length-1],Z=q&&o(q)>.55?`<text class="cv-lbl" x="${C(l(q.startAge)+5).toFixed(1)}" y="${(V(o(q))-5).toFixed(1)}" text-anchor="middle">▲${q.startAge}岁 ${q.luck.tier}</text>`:"",be=ae&&o(ae)<-.8?`<text class="cv-lbl" x="${C(l(ae.startAge)+5).toFixed(1)}" y="${(V(o(ae))+11).toFixed(1)}" text-anchor="middle">▼${ae.startAge}岁 ${ae.luck.tier}</text>`:"",fe=`<div class="cv-legend">
1892
+ </div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],p=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=H=>typeof H=="number"&&isFinite(H)?H:0,o=H=>H.luck?l(H.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,b=p.map(H=>l(H.age)).filter(H=>H>0),v=Math.min(u,...b.length?b:[u]),y=Math.max(m,...b.length?b:[m]),w=Math.max(1,y-v),T=640,S=190,O={t:14,r:16,b:26,l:30},ee=T-O.l-O.r,F=S-O.t-O.b,C=H=>O.l+(H-v)/w*ee,V=H=>O.t+F-(Math.max(d,Math.min(c,H))-d)/(c-d)*F,L=[{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(H=>`<rect class="cv-band ${H.cls}" x="${O.l}" y="${V(H.to).toFixed(1)}" width="${ee}" height="${(V(H.from)-V(H.to)).toFixed(1)}"/>`).join(""),I=10/w*ee,f=[];i.forEach((H,Ne)=>{const h=l(H.startAge),_=o(H),ve=Math.max(O.l,C(h)),le=Math.min(O.l+ee,C(h+10));f.push(`${ve.toFixed(1)},${V(_).toFixed(1)}`),f.push(`${le.toFixed(1)},${V(_).toFixed(1)}`)});const ne=f.length?`<polyline class="cv-dy" points="${f.join(" ")}"/>`:"",ue=f.length?`<polygon class="cv-dyfill" points="${O.l},${(O.t+F).toFixed(1)} ${f.join(" ")} ${(O.l+ee).toFixed(1)},${(O.t+F).toFixed(1)}"/>`:"",U=p.filter(H=>H.luck&&typeof H.luck.score=="number").map(H=>({x:C(l(H.age)),y:V(l(H.luck.score)),y0:l(H.year),gz:H.ganzhi,tier:H.luck.tier,v:l(H.luck.score),age:l(H.age)})),Te=U.length>1?`<polyline class="cv-ln" points="${U.map(H=>`${H.x.toFixed(1)},${H.y.toFixed(1)}`).join(" ")}"/>`:"",z={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},N=U.length?Math.min(...U.map(H=>H.y0)):null,E=U.map(H=>`<circle class="cv-dot${H.y0===N?" now":""}" cx="${H.x.toFixed(1)}" cy="${H.y.toFixed(1)}" fill="${z[H.tier]||"var(--muted)"}"><title>${t(`${H.y0}年(${H.age}岁)${H.gz} ${H.tier} ${H.v}`)}</title></circle>`).join(""),re=`<line class="cv-ax zero" x1="${O.l}" y1="${V(0).toFixed(1)}" x2="${O.l+ee}" y2="${V(0).toFixed(1)}"/><line class="cv-ax" x1="${O.l}" y1="${O.t}" x2="${O.l}" y2="${O.t+F}"/>`,ge=w>60?10:5,se=[];for(let H=Math.ceil(v/ge)*ge;H<=y;H+=ge)se.push(`<text class="cv-lbl age" x="${C(H).toFixed(1)}" y="${(O.t+F+13).toFixed(1)}" text-anchor="middle">${H}岁</text>`);const je=`<text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(O.l-5).toFixed(1)}" y="${(V(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,Be=i.slice().sort((H,Ne)=>o(Ne)-o(H)),q=Be[0],ae=Be[Be.length-1],Y=q&&o(q)>.55?`<text class="cv-lbl" x="${C(l(q.startAge)+5).toFixed(1)}" y="${(V(o(q))-5).toFixed(1)}" text-anchor="middle">▲${q.startAge}岁 ${q.luck.tier}</text>`:"",be=ae&&o(ae)<-.8?`<text class="cv-lbl" x="${C(l(ae.startAge)+5).toFixed(1)}" y="${(V(o(ae))+11).toFixed(1)}" text-anchor="middle">▼${ae.startAge}岁 ${ae.luck.tier}</text>`:"",fe=`<div class="cv-legend">
1883
1893
  <span><i style="background:var(--quan)"></i>大运(阶梯,一步十年)</span>
1884
1894
  <span><i style="background:var(--ke)"></i>流年(逐年折线)</span>
1885
1895
  <span>绿带=吉 灰带=平 红带=忌</span>
1886
1896
  </div>`,Se=`<div class="cv-tip">曲线只呈现引擎已给出的行运评分(${d} ~ ${c}),不预测具体事件;档位与依据见下方「大运 / 流年」各节。悬停看逐年详情。</div>`;return`<div class="mp-curve">
1887
1897
  <div class="mp-curve-h"><b>人生运势曲线</b><span>${v}–${y} 岁 ${e.dayun.rule},${u} 岁起运${e.dayun.jiao&&e.dayun.jiao.at?`,交运 ${e.dayun.jiao.at}`:""}</span></div>
1888
1898
  <svg viewBox="0 0 ${T} ${S}" role="img" aria-label="人生运势曲线:${v} 到 ${y} 岁的大运与流年评分走势">
1889
- ${L}${le}${ue}${ne}${Te}${E}${se.join("")}${ze}${Z}${be}
1899
+ ${L}${re}${ue}${ne}${Te}${E}${se.join("")}${je}${Y}${be}
1890
1900
  </svg>
1891
1901
  ${fe}${Se}
1892
- </div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const p=e&&Array.isArray(e.segments)?e.segments:[],l=q=>typeof q=="number"&&isFinite(q)?q:0,o=720,c=322,d={t:34,r:46,b:66,l:36},u=o-d.l-d.r,m=c-d.t-d.b,b=i.length,v=u/b,y=q=>d.l+(q+.5)*v,w=q=>d.t+m-Math.max(0,Math.min(100,q))/100*m,T=Math.max(1.1,Math.min(10,v*.62)),S=q=>l(q.score),O=d.t+m,ee=O+20,F=22,V=`klclip${(()=>{let q=2166136261;const ae=Z=>{const be=String(Z??"");for(let fe=0;fe<be.length;fe++)q^=be.charCodeAt(fe),q=Math.imul(q,16777619)};ae(b),ae(i[0]&&i[0].age),ae(i[b-1]&&i[b-1].age);for(const Z of i)ae(Z&&Z.score);return(q>>>0).toString(36)})()}`,R=p.map((q,ae)=>{const Z=Math.max(0,q.startAge-1),be=Math.min(b-1,q.endAge-1);if(be<Z)return"";const fe=d.l+Z*v,Se=Math.max(.6,(be-Z+1)*v),Ne=ae%2===1?`<rect class="kl-band" x="${fe.toFixed(1)}" y="${d.t}" width="${Se.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${fe.toFixed(1)}" y="${ee}" width="${Se.toFixed(1)}" height="${F}"/>`:"",x=ae===0?"":`<line class="kl-segline" x1="${fe.toFixed(1)}" y1="${d.t}" x2="${fe.toFixed(1)}" y2="${O}"/>`,_=Math.min(Math.max(d.l+(Z+be+1)/2*v,d.l+22),d.l+u-22);return Ne+x+`<text class="kl-seg" x="${_.toFixed(1)}" y="${(ee+15).toFixed(1)}" text-anchor="middle">${t(q.ganZhi)}</text>`}).join(""),L=[0,25,50,75,100].map(q=>`<line class="kl-grid${q===50?" mid":""}" x1="${d.l}" y1="${w(q).toFixed(1)}" x2="${d.l+u}" y2="${w(q).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${(w(q)+3).toFixed(1)}" text-anchor="end">${q}</text>`).join(""),I=i.map((q,ae)=>{const Z=q.kline||{},be=l(Z.open),fe=l(Z.close),Se=Math.min(100,l(Z.high)),H=Math.max(0,l(Z.low)),Ne=fe>=be,x=w(be),_=w(fe),ve=Math.min(x,_),re=Math.max(.8,Math.abs(x-_)),je=y(ae),Ee=`${q.age}岁(${q.year}年 ${q.ganZhi})${fe}分${q.dayunGanZhi?` · ${q.dayunGanZhi}运`:""}`;return`<g class="kl-c${Ne?" up":" down"}"><title>${t(Ee)}</title><line x1="${je.toFixed(2)}" y1="${w(Se).toFixed(1)}" x2="${je.toFixed(2)}" y2="${w(H).toFixed(1)}"/><rect x="${(je-T/2).toFixed(2)}" y="${ve.toFixed(1)}" width="${T.toFixed(2)}" height="${re.toFixed(1)}" rx="0.7"/></g>`}).join(""),f=q=>{const ae=[];for(let Z=0;Z<b;Z++){if(Z+1<q)continue;let be=0;for(let fe=Z+1-q;fe<=Z;fe++)be+=S(i[fe]);ae.push({i:Z,v:be/q})}return ae},ne=q=>f(q).map((ae,Z)=>`${Z?"L":"M"}${y(ae.i).toFixed(1)} ${w(ae.v).toFixed(1)}`).join(" "),ue=(q,ae)=>{const Z=f(q);if(!Z.length)return"";const be=Z[Z.length-1];return{cls:ae,y:w(be.v),text:`<text class="kl-ma-lbl ${ae}" x="${d.l+u+5}" y="${w(be.v).toFixed(1)}" text-anchor="start">${be.v.toFixed(0)}</text>`}},U=ue(10,"m10"),Te=ue(5,"m5"),z=(()=>{if(!Te||!U)return`${U?U.text:""}${Te?Te.text:""}`;let q=Te.y,ae=U.y;if(Math.abs(q-ae)<10){const Z=Math.min(q,ae),be=Math.max(q,ae);q=Z-6,ae=be+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${ae.toFixed(1)}" text-anchor="start">${f(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${q.toFixed(1)}" text-anchor="start">${f(5).slice(-1)[0].v.toFixed(0)}</text>`})();let N=i[0],E=i[0];for(const q of i)S(q)>S(N)&&(N=q),S(q)<S(E)&&(E=q);const le=(q,ae,Z)=>{const be=i.indexOf(q),fe=y(be),Se=w(S(q)),H=Math.min(Math.max(fe,d.l+26),d.l+u-26),Ne=ae==="hi"?Se-8<d.t+6?14:Z:Se+12>d.t+m-2?-8:Z;return`<g class="kl-mark ${ae}"><circle cx="${fe.toFixed(1)}" cy="${Se.toFixed(1)}" r="2"/><circle class="ring" cx="${fe.toFixed(1)}" cy="${Se.toFixed(1)}" r="4.6"/><text x="${H.toFixed(1)}" y="${(Se+Ne).toFixed(1)}" text-anchor="middle">${q.age}岁 ${S(q)}</text></g>`},ge=b>60?10:5,se=i.filter(q=>q.age%ge===0).map(q=>`<text class="kl-lbl age" x="${y(i.indexOf(q)).toFixed(1)}" y="${(O+14).toFixed(1)}" text-anchor="middle">${q.age}</text>`).join(""),ze=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+u}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
1902
+ </div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const p=e&&Array.isArray(e.segments)?e.segments:[],l=q=>typeof q=="number"&&isFinite(q)?q:0,o=720,c=322,d={t:34,r:46,b:66,l:36},u=o-d.l-d.r,m=c-d.t-d.b,b=i.length,v=u/b,y=q=>d.l+(q+.5)*v,w=q=>d.t+m-Math.max(0,Math.min(100,q))/100*m,T=Math.max(1.1,Math.min(10,v*.62)),S=q=>l(q.score),O=d.t+m,ee=O+20,F=22,V=`klclip${(()=>{let q=2166136261;const ae=Y=>{const be=String(Y??"");for(let fe=0;fe<be.length;fe++)q^=be.charCodeAt(fe),q=Math.imul(q,16777619)};ae(b),ae(i[0]&&i[0].age),ae(i[b-1]&&i[b-1].age);for(const Y of i)ae(Y&&Y.score);return(q>>>0).toString(36)})()}`,R=p.map((q,ae)=>{const Y=Math.max(0,q.startAge-1),be=Math.min(b-1,q.endAge-1);if(be<Y)return"";const fe=d.l+Y*v,Se=Math.max(.6,(be-Y+1)*v),Ne=ae%2===1?`<rect class="kl-band" x="${fe.toFixed(1)}" y="${d.t}" width="${Se.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${fe.toFixed(1)}" y="${ee}" width="${Se.toFixed(1)}" height="${F}"/>`:"",h=ae===0?"":`<line class="kl-segline" x1="${fe.toFixed(1)}" y1="${d.t}" x2="${fe.toFixed(1)}" y2="${O}"/>`,_=Math.min(Math.max(d.l+(Y+be+1)/2*v,d.l+22),d.l+u-22);return Ne+h+`<text class="kl-seg" x="${_.toFixed(1)}" y="${(ee+15).toFixed(1)}" text-anchor="middle">${t(q.ganZhi)}</text>`}).join(""),L=[0,25,50,75,100].map(q=>`<line class="kl-grid${q===50?" mid":""}" x1="${d.l}" y1="${w(q).toFixed(1)}" x2="${d.l+u}" y2="${w(q).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${(w(q)+3).toFixed(1)}" text-anchor="end">${q}</text>`).join(""),I=i.map((q,ae)=>{const Y=q.kline||{},be=l(Y.open),fe=l(Y.close),Se=Math.min(100,l(Y.high)),H=Math.max(0,l(Y.low)),Ne=fe>=be,h=w(be),_=w(fe),ve=Math.min(h,_),le=Math.max(.8,Math.abs(h-_)),$e=y(ae),Ee=`${q.age}岁(${q.year}年 ${q.ganZhi})${fe}分${q.dayunGanZhi?` · ${q.dayunGanZhi}运`:""}`;return`<g class="kl-c${Ne?" up":" down"}"><title>${t(Ee)}</title><line x1="${$e.toFixed(2)}" y1="${w(Se).toFixed(1)}" x2="${$e.toFixed(2)}" y2="${w(H).toFixed(1)}"/><rect x="${($e-T/2).toFixed(2)}" y="${ve.toFixed(1)}" width="${T.toFixed(2)}" height="${le.toFixed(1)}" rx="0.7"/></g>`}).join(""),f=q=>{const ae=[];for(let Y=0;Y<b;Y++){if(Y+1<q)continue;let be=0;for(let fe=Y+1-q;fe<=Y;fe++)be+=S(i[fe]);ae.push({i:Y,v:be/q})}return ae},ne=q=>f(q).map((ae,Y)=>`${Y?"L":"M"}${y(ae.i).toFixed(1)} ${w(ae.v).toFixed(1)}`).join(" "),ue=(q,ae)=>{const Y=f(q);if(!Y.length)return"";const be=Y[Y.length-1];return{cls:ae,y:w(be.v),text:`<text class="kl-ma-lbl ${ae}" x="${d.l+u+5}" y="${w(be.v).toFixed(1)}" text-anchor="start">${be.v.toFixed(0)}</text>`}},U=ue(10,"m10"),Te=ue(5,"m5"),z=(()=>{if(!Te||!U)return`${U?U.text:""}${Te?Te.text:""}`;let q=Te.y,ae=U.y;if(Math.abs(q-ae)<10){const Y=Math.min(q,ae),be=Math.max(q,ae);q=Y-6,ae=be+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${ae.toFixed(1)}" text-anchor="start">${f(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${q.toFixed(1)}" text-anchor="start">${f(5).slice(-1)[0].v.toFixed(0)}</text>`})();let N=i[0],E=i[0];for(const q of i)S(q)>S(N)&&(N=q),S(q)<S(E)&&(E=q);const re=(q,ae,Y)=>{const be=i.indexOf(q),fe=y(be),Se=w(S(q)),H=Math.min(Math.max(fe,d.l+26),d.l+u-26),Ne=ae==="hi"?Se-8<d.t+6?14:Y:Se+12>d.t+m-2?-8:Y;return`<g class="kl-mark ${ae}"><circle cx="${fe.toFixed(1)}" cy="${Se.toFixed(1)}" r="2"/><circle class="ring" cx="${fe.toFixed(1)}" cy="${Se.toFixed(1)}" r="4.6"/><text x="${H.toFixed(1)}" y="${(Se+Ne).toFixed(1)}" text-anchor="middle">${q.age}岁 ${S(q)}</text></g>`},ge=b>60?10:5,se=i.filter(q=>q.age%ge===0).map(q=>`<text class="kl-lbl age" x="${y(i.indexOf(q)).toFixed(1)}" y="${(O+14).toFixed(1)}" text-anchor="middle">${q.age}</text>`).join(""),je=`<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">
1893
1903
  <svg viewBox="0 0 ${o} ${c}" role="img" aria-label="人生K线:1 到 ${b} 岁的逐年评分蜡烛图">
1894
1904
  <defs><clipPath id="${V}"><rect x="${d.l}" y="${d.t}" width="${u}" height="${m}"/></clipPath></defs>
1895
1905
  ${R}${L}
@@ -1898,8 +1908,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1898
1908
  <path class="kl-ma m10" d="${ne(10)}"/><path class="kl-ma m5" d="${ne(5)}"/>
1899
1909
  </g>
1900
1910
  ${z}
1901
- ${le(N,"hi",-8)}${le(E,"lo",12)}
1902
- ${se}${ze}
1911
+ ${re(N,"hi",-8)}${re(E,"lo",12)}
1912
+ ${se}${je}
1903
1913
  </svg><div class="kl-legend"><span><i class="up"></i>阳线:比上一岁高</span><span><i class="down"></i>阴线:比上一岁低</span><span><i class="m5"></i>5 年均线</span><span><i class="m10"></i>10 年均线</span><span>虚线=大运交界</span></div></div>`},s.trendHTML=function(e,i){if(!e)return"";const p=!(i&&i.brief===!1),l=s.trendChart(e);if(!l)return s.quickHTML(e);const o=Array.isArray(e.segments)?e.segments:[],c=e.highlights&&typeof e.highlights=="object"?e.highlights:{},d=e.meta||{},u=d.strength||{},m=o.map(L=>`<span class="kl-chip">${t(L.ganZhi)}<em>${L.startAge}–${L.endAge}</em></span>`).join(""),b=(Array.isArray(c.best)?c.best:[]).map(L=>`<div class="kl-hl hi">${t(L)}</div>`).join(""),v=(Array.isArray(c.worst)?c.worst:[]).map(L=>`<div class="kl-hl lo">${t(L)}</div>`).join(""),y=d.boundaryNote?`<div class="mp-kline-note">${t(d.boundaryNote)}</div>`:c.suppressed?`<div class="mp-kline-note">${t(c.suppressed)}</div>`:"",w=Array.isArray(e.points)?e.points:[],T=L=>typeof L.score=="number"&&isFinite(L.score)?L.score:0,S=w.map(T),O=S.length?S.reduce((L,I)=>L+I,0)/S.length:0,ee=S.length?Math.max(...S)-Math.min(...S):0,F=o.map(L=>{const I=w.filter(f=>f.age>=L.startAge&&f.age<=L.endAge).map(T);return{ganZhi:L.ganZhi,v:I.length?I.reduce((f,ne)=>f+ne,0)/I.length:0}}).filter(L=>L.v>0).sort((L,I)=>I.v-L.v),C=!!(u.boundary||c.suppressed),V=[`<span><em>全段均值</em><b>${O.toFixed(0)}</b></span>`];!C&&F.length&&(V.push(`<span><em>最好大运</em><b class="hi">${t(F[0].ganZhi)} ${F[0].v.toFixed(0)}</b></span>`),V.push(`<span><em>最差大运</em><b class="lo">${t(F[F.length-1].ganZhi)} ${F[F.length-1].v.toFixed(0)}</b></span>`)),V.push(`<span><em>波动幅度</em><b>${ee.toFixed(0)}</b></span>`);const R=`<div class="kl-stats">${V.join("")}</div>`;return(p?s.briefHTML(e):"")+`<section class="mp-kline" aria-label="人生K线结果">
1904
1914
  <div class="mp-kline-h"><b>人生 K 线</b><span>${t(d.birth||"")} 日主 ${t(d.dayMaster||"")} ${t(u.level||"")}${u.score?`(${u.score})`:""}</span></div>
1905
1915
  ${l}
@@ -1944,36 +1954,38 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1944
1954
  ${p}
1945
1955
  ${e.caveat?`<p class="mp-br-cav">※ ${t(e.caveat)}</p>`:""}
1946
1956
  ${e.footer?`<p class="mp-br-foot">${t(e.footer)}</p>`:""}
1947
- </section>`},s.baziHTML=function(e,i){const p=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]].filter(([x])=>e.pillars[x]),l={year:"年",month:"月",day:"日",hour:"时"},o={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},c={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},d=x=>`<span class="tg ${c[x]||""}">${x}</span>`,u=x=>`<span class="wx-${o[x]||"earth"}">${xe(x)}${x}</span>`,m=x=>`<span class="ss-s ${x.luck||"neutral"}" title="${t(`${x.cat} · ${x.via}查${x.target} | ${x.rule}`)}">${x.name}</span>`,b=(x,_)=>`<tr><td class="bz-lbl">${x}</td>${p.map(([ve])=>`<td data-c="${l[ve]}">${_(e.pillars[ve],ve)}</td>`).join("")}</tr>`,v=`<thead><tr><th></th>${p.map(([x,_])=>`<th${x==="day"?' class="bz-hdr-day"':""}>${_}</th>`).join("")}</tr></thead>`,y={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},w={木:"火",火:"土",土:"金",金:"水",水:"木"},T={木:"土",土:"水",水:"火",火:"金",金:"木"},S=y[e.pillars.month.branch]||"土",O=["木","火","土","金","水"],ee=x=>x===S?"旺":w[S]===x?"相":w[x]===S?"休":T[x]===S?"囚":"死",F=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="${p.length}">${["旺","相","休","囚","死"].map(x=>{const _=O.find(ve=>ee(ve)===x)||S;return`<i><b class="wx-${o[_]}">${_}</b><em>${x}</em></i>`}).join("")}</td></tr>`,C=[b("十神",(x,_)=>_==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:x.stemTenGod?d(x.stemTenGod):'<span class="pp-dim">—</span>'),b("天干",x=>`<span class="bz-big ${"wx-"+o[x.stemElement]}">${x.stem}</span>`),b("地支",x=>`<span class="bz-big ${"wx-"+o[x.branchElement]}">${x.branch}</span>`),b("藏干",x=>x.hidden.map(_=>`<i class="bz-cg wx-${o[_.element]}">${_.stem}·${_.element}</i>`).join("")),b("支神",x=>x.hidden.map(_=>d(_.tenGod)).join("<br>")),b("纳音",x=>x.nayin),b("空亡",x=>`<span class="pp-dim">${x.kongwang.join("")}</span>`),b("地势",x=>x.dishi),b("自坐",x=>x.zizuo),b("神煞",x=>x.shenshaDetail&&x.shenshaDetail.length?`<span class="pp-ss">${x.shenshaDetail.map(m).join("")}</span>`:'<span class="pp-dim">—</span>'),F].join(""),V=Object.entries(e.wuxing).map(([x,_])=>`<span class="pp-chip wx-${o[x]}">${xe(x)}${x} ${_}</span>`).join(""),R=e.frame||{},L=x=>x==="大吉"||x==="吉"?"ok":x==="大忌"||x==="忌"?"warn":"",I=(x,_)=>_?`<div class="pp-sec"><div class="pp-sec-h">${x}</div>${_}</div>`:"",f=R.geju&&R.geju.length?`
1957
+ </section>`},s.baziHTML=function(e,i){const p=[["year","年柱"],["month","月柱"],["day","日柱"],["hour","时柱"]].filter(([h])=>e.pillars[h]),l={year:"年",month:"月",day:"日",hour:"时"},o={木:"wood",火:"fire",土:"earth",金:"metal",水:"water"},c={比肩:"tg-bi",劫财:"tg-bi",食神:"tg-shi",伤官:"tg-shi",偏财:"tg-cai",正财:"tg-cai",七杀:"tg-guan",正官:"tg-guan",偏印:"tg-yin",正印:"tg-yin"},d=h=>`<span class="tg ${c[h]||""}">${h}</span>`,u=h=>`<span class="wx-${o[h]||"earth"}">${xe(h)}${h}</span>`,m=h=>`<span class="ss-s ${h.luck||"neutral"}" title="${t(`${h.cat} · ${h.via}查${h.target} | ${h.rule}`)}">${h.name}</span>`,b=(h,_)=>`<tr><td class="bz-lbl">${h}</td>${p.map(([ve])=>`<td data-c="${l[ve]}">${_(e.pillars[ve],ve)}</td>`).join("")}</tr>`,v=`<thead><tr><th></th>${p.map(([h,_])=>`<th${h==="day"?' class="bz-hdr-day"':""}>${_}</th>`).join("")}</tr></thead>`,y={寅:"木",卯:"木",巳:"火",午:"火",申:"金",酉:"金",亥:"水",子:"水",辰:"土",戌:"土",丑:"土",未:"土"},w={木:"火",火:"土",土:"金",金:"水",水:"木"},T={木:"土",土:"水",水:"火",火:"金",金:"木"},S=y[e.pillars.month.branch]||"土",O=["木","火","土","金","水"],ee=h=>h===S?"旺":w[S]===h?"相":w[h]===S?"休":T[h]===S?"囚":"死",F=`<tr><td class="bz-lbl">五行</td><td class="bz-wxs" colspan="${p.length}">${["旺","相","休","囚","死"].map(h=>{const _=O.find(ve=>ee(ve)===h)||S;return`<i><b class="wx-${o[_]}">${_}</b><em>${h}</em></i>`}).join("")}</td></tr>`,C=[b("十神",(h,_)=>_==="day"?`<span class="bz-zhuri">${e.input.gender==="male"?"元男":"元女"}</span>`:h.stemTenGod?d(h.stemTenGod):'<span class="pp-dim">—</span>'),b("天干",h=>`<span class="bz-big ${"wx-"+o[h.stemElement]}">${h.stem}</span>`),b("地支",h=>`<span class="bz-big ${"wx-"+o[h.branchElement]}">${h.branch}</span>`),b("藏干",h=>h.hidden.map(_=>`<i class="bz-cg wx-${o[_.element]}">${_.stem}·${_.element}</i>`).join("")),b("支神",h=>h.hidden.map(_=>d(_.tenGod)).join("<br>")),b("纳音",h=>h.nayin),b("空亡",h=>`<span class="pp-dim">${h.kongwang.join("")}</span>`),b("地势",h=>h.dishi),b("自坐",h=>h.zizuo),b("神煞",h=>h.shenshaDetail&&h.shenshaDetail.length?`<span class="pp-ss">${h.shenshaDetail.map(m).join("")}</span>`:'<span class="pp-dim">—</span>'),F].join(""),V=Object.entries(e.wuxing).map(([h,_])=>`<span class="pp-chip wx-${o[h]}">${xe(h)}${h} ${_}</span>`).join(""),R=e.frame||{},L=h=>h==="大吉"||h==="吉"?"ok":h==="大忌"||h==="忌"?"warn":"",I=(h,_)=>_?`<div class="pp-sec"><div class="pp-sec-h">${h}</div>${_}</div>`:"",f=R.geju&&R.geju.length?`
1948
1958
  <div class="pp-tl">${R.primary?`主格 <b>${t(R.primary.name)}</b> ${t(R.primary.evidence)}`:""}</div>
1949
- <div class="pp-chips">${R.geju.map(x=>{const _=x.status==="破格",ve=x.status==="待定"||x.status==="假从",re=`${x.evidence||""}${Array.isArray(x.breaks)&&x.breaks.length?`;破:${x.breaks.join(";")}`:""}`;return`<span class="pp-chip ${_?"broken":ve?"warn":""}" title="${t(re)}">${t(x.name)}<i class="pp-drel">${t(x.kind)}${x.status?`·${t(x.status)}`:""}</i></span>`}).join("")}</div>`:"",ne=(()=>{const x=Array.isArray(R.yongshen&&R.yongshen.neutral)?R.yongshen.neutral:[],_=new Set(R.yongshen&&R.yongshen.neutralTenGods||[]);return`${(R.yongshen&&R.yongshen.avoidTenGods||[]).filter(re=>!_.has(re)).map(re=>`<span class="pp-chip warn">${t(re)}</span>`).join("")}${[..._].map(re=>`<span class="pp-chip neu" title="局中分量近零,按中性偏忌看">${t(re)}</span>`).join("")}${x.length?`<span class="pp-chip neu" title="忌神中全局不足 0.5 分的那几行;仍在忌里参与行运评分">中性偏忌 ${x.map(re=>`${t(re.element)} ${t(re.weight)} 分`).join("、")}</span>`:""}`})(),ue=R.yongshen?`
1959
+ <div class="pp-chips">${R.geju.map(h=>{const _=h.status==="破格",ve=h.status==="待定"||h.status==="假从",le=`${h.evidence||""}${Array.isArray(h.breaks)&&h.breaks.length?`;破:${h.breaks.join(";")}`:""}`;return`<span class="pp-chip ${_?"broken":ve?"warn":""}" title="${t(le)}">${t(h.name)}<i class="pp-drel">${t(h.kind)}${h.status?`·${t(h.status)}`:""}</i></span>`}).join("")}</div>`:"",ne=(()=>{const h=Array.isArray(R.yongshen&&R.yongshen.neutral)?R.yongshen.neutral:[],_=new Set(R.yongshen&&R.yongshen.neutralTenGods||[]);return`${(R.yongshen&&R.yongshen.avoidTenGods||[]).filter(le=>!_.has(le)).map(le=>`<span class="pp-chip warn">${t(le)}</span>`).join("")}${[..._].map(le=>`<span class="pp-chip neu" title="局中分量近零,按中性偏忌看">${t(le)}</span>`).join("")}${h.length?`<span class="pp-chip neu" title="忌神中全局不足 0.5 分的那几行;仍在忌里参与行运评分">中性偏忌 ${h.map(le=>`${t(le.element)} ${t(le.weight)} 分`).join("、")}</span>`:""}`})(),ue=R.yongshen?`
1950
1960
  <div class="pp-tl">喜 ${R.yongshen.favor.map(u).join("")} 忌 ${R.yongshen.avoid.map(u).join("")} <span class="pp-dim">${t(R.yongshen.method)}</span></div>
1951
- <div class="pp-chips">${R.yongshen.favorTenGods.map(x=>`<span class="pp-chip ok">${t(x)}</span>`).join("")}${ne}</div>
1952
- ${(R.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${R.yongshen.disputed.map(x=>`${t(x.element)}(扶抑为${t(x.favorRole)}·${t(x.favorVerb)},${t(x.climate)}盘调候忌${t(x.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1953
- <div class="pp-tl pp-dim">${t(R.yongshen.detail)}</div>`:"",U=e.climate||R.yongshen&&R.yongshen.climate||null,Te=U?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(U.temp)||0)+3)/6*100))),_=U.need?`<em>调候取</em><b>${t(U.need.stem+U.need.element)}</b>`:"<em>气候平和</em>",ve=!!(R.yongshen&&Array.isArray(R.yongshen.disputed))&&R.yongshen.disputed.some(We=>We.element===U.avoidElement),re=U.need?`<em>忌</em><b>${t(U.avoidElement)}</b>${ve?'<span class="pp-dim">(有争议)</span>':""}`:"",je=(U.evidence||[]).length?`<em>依据</em><span>${t(U.evidence.join("、"))}</span>`:"",Ee=U.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',he=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Yt=he?`<div class="mp-qt">
1961
+ <div class="pp-chips">${R.yongshen.favorTenGods.map(h=>`<span class="pp-chip ok">${t(h)}</span>`).join("")}${ne}</div>
1962
+ ${(R.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${R.yongshen.disputed.map(h=>`${t(h.element)}(扶抑为${t(h.favorRole)}·${t(h.favorVerb)},${t(h.climate)}盘调候忌${t(h.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
1963
+ <div class="pp-tl pp-dim">${t(R.yongshen.detail)}</div>`:"",U=e.climate||R.yongshen&&R.yongshen.climate||null,Te=U?(()=>{const h=Math.max(2,Math.min(98,Math.round(((Number(U.temp)||0)+3)/6*100))),_=U.need?`<em>调候取</em><b>${t(U.need.stem+U.need.element)}</b>`:"<em>气候平和</em>",ve=!!(R.yongshen&&Array.isArray(R.yongshen.disputed))&&R.yongshen.disputed.some(We=>We.element===U.avoidElement),le=U.need?`<em>忌</em><b>${t(U.avoidElement)}</b>${ve?'<span class="pp-dim">(有争议)</span>':""}`:"",$e=(U.evidence||[]).length?`<em>依据</em><span>${t(U.evidence.join("、"))}</span>`:"",Ee=U.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',he=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Yt=he?`<div class="mp-qt">
1954
1964
  <div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(he.label)}</span></div>
1955
- <div class="mp-qt-y"><em>用神</em>${he.yong.map((We,pt)=>`<b class="${pt===0?"first":""}">${t(We)}</b>`).join("")}<em>首取 ${t(he.primary)}</em></div>
1965
+ <div class="mp-qt-y"><em>用神</em>${he.yong.map((We,lt)=>`<b class="${lt===0?"first":""}">${t(We)}</b>`).join("")}<em>首取 ${t(he.primary)}</em></div>
1956
1966
  <div class="mp-qt-q" title="${t(he.quote)}">「${t(he.quote)}」<span>第 ${he.chapter} 章${he.truncated?" · 首段更长,摘句下略":""}${he.note?" · "+t(he.note):""}</span></div>
1957
1967
  </div>`:"";return`<section class="mp-cli" aria-label="寒暖燥湿">
1958
1968
  <div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(U.label||"")}</span>${Ee}</div>
1959
- <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${x}%"></i></div>
1969
+ <div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${h}%"></i></div>
1960
1970
  <div class="mp-cli-axis"><span>寒</span><span>平</span><span>热</span></div>
1961
- <div class="mp-cli-row">${_}${re}${je}</div>
1971
+ <div class="mp-cli-row">${_}${le}${$e}</div>
1962
1972
  <div class="mp-cli-narr">${t(U.narration||"")}</div>
1963
1973
  ${Yt}
1964
- </section>`})():"",z=R.godStats?`<div class="pp-chips">${Object.entries(R.godStats.groups).map(([x,_])=>`<span class="pp-chip">${x} ${_}</span>`).join("")}</div>`:"",N=e.dayun.list.map(x=>{const _=x.luck||null;return`<span class="pp-chip ${_?L(_.tier):""}" title="${t(`${x.fromDate?`${x.fromDate} 交运;`:""}${_?`${_.tier} ${_.score}|${(_.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${_?` ${_.tier}`:""}</span>`}).join(""),E=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const _=x.luck||null,ve=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],re=ve.length?`|${ve.map(je=>je.detail).join(";")}`:"";return`<span class="pp-chip ${_?L(_.tier):""}" title="${t(_?`${_.tier} ${_.score}|${(_.reasons||[]).join(";")}${re}`:re.replace(/^|/,""))}">${x.year} ${x.ganzhi}${_?` ${_.tier}`:""}</span>`}).join("")}</div>`:"",le=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),ge=e.suiyunClassic,se=ge?`<div class="pp-dim pp-sy-src" title="${t(ge.plain||"")}">《${t(ge.bookName||"")}·${t(ge.chapter||"")}》「${t(ge.quote||"")}」</div>`:"",ze=le.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${le.map(x=>`<span class="pp-chip" title="${t(`${x.suiyun.signals.map(_=>_.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${t(x.suiyun.signals.map(_=>`${_.type}${(_.type.startsWith("流年")||_.type.startsWith("大运"))&&_.target?`·${_.target}`:""}`).join("/"))}</span>`).join("")}</div>${se}`:"",Be=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",q=e.strength&&e.strength.branchStructure,ae=q?(()=>{const x=q.branches.map(Ee=>`${t(Ee.label)}${t(Ee.branch)}<i class="pp-drel">·${t(Ee.camp)}</i>${q.placeholderHour&&Ee.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),_=q.odd&&q.odd.length?`<span class="pp-st-odd">异类 ${q.odd.map(Ee=>`${t(Ee.label)}${t(Ee.branch)}(${Ee.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',ve=q.congProb!=null?` 从格 ${t(q.congRange)}`:" 不套从格概率",re=q.balance||{},je=re.branch?` 支 ${re.branch.A}:${re.branch.B} 合干 ${re.total?`${re.total.A}:${re.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${q.method};${q.note}`)}"><span class="pp-st-code">${t(q.code)}</span>${x} ${_}${ve}${je}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",Z=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],be=Z.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${Z.map(x=>t(x)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${Z.length===1?"只一对,按口径可忽略":`共 ${Z.length} 对`}</span></div>`:"",fe=e.shensha&&e.shensha.groups||[],Se=fe.length?`
1974
+ </section>`})():"",z=R.godStats?`<div class="pp-chips">${Object.entries(R.godStats.groups).map(([h,_])=>`<span class="pp-chip">${h} ${_}</span>`).join("")}</div>`:"",N=e.dayun.list.map(h=>{const _=h.luck||null;return`<span class="pp-chip ${_?L(_.tier):""}" title="${t(`${h.fromDate?`${h.fromDate} 交运;`:""}${_?`${_.tier} ${_.score}|${(_.reasons||[]).join(";")}`:""}`)}">${h.startAge} ${h.ganzhi}${h.relations&&h.relations.length?` <i class="pp-drel">${h.relations.join("")}</i>`:""}${_?` ${_.tier}`:""}</span>`}).join(""),E=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(h=>{const _=h.luck||null,ve=h.suiyun&&Array.isArray(h.suiyun.signals)?h.suiyun.signals:[],le=ve.length?`|${ve.map($e=>$e.detail).join(";")}`:"";return`<span class="pp-chip ${_?L(_.tier):""}" title="${t(_?`${_.tier} ${_.score}|${(_.reasons||[]).join(";")}${le}`:le.replace(/^|/,""))}">${h.year} ${h.ganzhi}${_?` ${_.tier}`:""}</span>`}).join("")}</div>`:"",re=(e.liunian||[]).filter(h=>h.suiyun&&Array.isArray(h.suiyun.signals)&&h.suiyun.signals.length),ge=e.suiyunClassic,se=ge?`<div class="pp-dim pp-sy-src" title="${t(ge.plain||"")}">《${t(ge.bookName||"")}·${t(ge.chapter||"")}》「${t(ge.quote||"")}」</div>`:"",je=re.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${re.map(h=>`<span class="pp-chip" title="${t(`${h.suiyun.signals.map(_=>_.detail).join(";")}|${h.suiyun.note||""}`)}">${h.year} ${t(h.suiyun.signals.map(_=>`${_.type}${(_.type.startsWith("流年")||_.type.startsWith("大运"))&&_.target?`·${_.target}`:""}`).join("/"))}</span>`).join("")}</div>${se}`:"",Be=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",q=e.strength&&e.strength.branchStructure,ae=q?(()=>{const h=q.branches.map(Ee=>`${t(Ee.label)}${t(Ee.branch)}<i class="pp-drel">·${t(Ee.camp)}</i>${q.placeholderHour&&Ee.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),_=q.odd&&q.odd.length?`<span class="pp-st-odd">异类 ${q.odd.map(Ee=>`${t(Ee.label)}${t(Ee.branch)}(${Ee.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',ve=q.congProb!=null?` 从格 ${t(q.congRange)}`:" 不套从格概率",le=q.balance||{},$e=le.branch?` 支 ${le.branch.A}:${le.branch.B} 合干 ${le.total?`${le.total.A}:${le.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${q.method};${q.note}`)}"><span class="pp-st-code">${t(q.code)}</span>${h} ${_}${ve}${$e}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",Y=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],be=Y.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${Y.map(h=>t(h)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${Y.length===1?"只一对,按口径可忽略":`共 ${Y.length} 对`}</span></div>`:"",fe=e.shensha&&e.shensha.groups||[],Se=fe.length?`
1965
1975
  <div class="pp-ssx">
1966
1976
  <div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${fe.length} 类 · 悬停看查法</span></div>
1967
- ${fe.map(x=>`<div class="pp-ssg"><span class="ssg-gt">${x.cat}</span><span class="ssg-gi">${x.items.map(_=>`<span class="pp-ssi ${_.luck||"neutral"}" title="${t(`${_.via}查${_.target} | ${_.rule}`)}">${_.name}<em>${_.pillars.map(ve=>l[ve]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1977
+ ${fe.map(h=>`<div class="pp-ssg"><span class="ssg-gt">${h.cat}</span><span class="ssg-gi">${h.items.map(_=>`<span class="pp-ssi ${_.luck||"neutral"}" title="${t(`${_.via}查${_.target} | ${_.rule}`)}">${_.name}<em>${_.pillars.map(ve=>l[ve]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
1968
1978
  <div class="ssx-h" style="border-top:none;padding-top:4px;margin-top:4px">神煞只作参考,吉凶仍须看格局、旺衰与行运。</div>
1969
- </div>`:"",H=i&&i.chenggu,Ne=H?(()=>{const x=H,_=["year","month","day","hour"].map(ve=>{const re=x.weights&&x.weights[ve]||{label:""};return`<span class="mp-bzcg-w">${t(String(re.label).split(" ")[0])} <b>${t(String(re.label).split(" ")[1]||"")}</b></span>`}).join("");return`<details class="mp-bzcg"><summary>袁天罡称骨 · ${t(x.total&&x.total.label||"")}(${t(x.verdict&&x.verdict.band||"")})</summary>
1970
- <div class="mp-bzcg-lunar">${t(x.lunar&&x.lunar.text||"")}</div>
1979
+ </div>`:"",H=i&&i.chenggu,Ne=H?(()=>{const h=H,_=["year","month","day","hour"].map(le=>{const $e=h.weights&&h.weights[le]||{label:""};return`<span class="mp-bzcg-w">${t(String($e.label).split(" ")[0])} <b>${t(String($e.label).split(" ")[1]||"")}</b></span>`}).join(""),ve={上上:"band-top",中上:"band-good",中平:"band-mid",中下:"band-weak",下下:"band-low"}[h.verdict&&h.verdict.band]||"band-mid";return`<section class="mp-bzcg open" aria-label="袁天罡称骨">
1980
+ <div class="mp-bzcg-h"><b>袁天罡称骨</b><i class="mp-bzcg-tag">民俗参考</i></div>
1981
+ <div class="mp-bzcg-hero"><b>${t(h.total&&h.total.label||"")}</b><span class="mp-bzcg-bandchip ${ve}">${t(h.verdict&&h.verdict.band||"")}</span></div>
1982
+ <div class="mp-bzcg-lunar">${t(h.lunar&&h.lunar.text||"")}</div>
1971
1983
  <div class="mp-bzcg-ws">${_}</div>
1972
- ${x.song&&x.song.text?`<div class="mp-bzcg-song">「${t(x.song.text)}」</div>`:""}
1973
- ${x.song&&x.song.plain?`<div class="mp-bzcg-plain"><em>释义</em>${t(x.song.plain)}</div>`:""}
1974
- ${x.verdict&&x.verdict.text?`<div class="mp-bzcg-band">${t(x.verdict.text)}</div>`:""}
1984
+ ${h.song&&h.song.text?`<div class="mp-bzcg-song">「${t(h.song.text)}」</div>`:""}
1985
+ ${h.song&&h.song.plain?`<div class="mp-bzcg-plain"><em>释义</em>${t(h.song.plain)}</div>`:""}
1986
+ ${h.verdict&&h.verdict.text?`<div class="mp-bzcg-band">${t(h.verdict.text)}</div>`:""}
1975
1987
  <div class="mp-bzcg-note">称骨为通行本口径的民俗参考,与上方四柱旺衰是两套独立口径,互不推导。</div>
1976
- </details>`})():"";return s.briefHTML(e)+`<div class="pp" style="padding:12px">
1988
+ </section>`})():"";return s.briefHTML(e)+`<div class="pp" style="padding:12px">
1977
1989
  <table class="pp-bz">${v}<tbody>${C}</tbody></table>
1978
1990
  ${e.hourUnknown?'<div class="pp-warn" role="note">时柱暂缺:只排年/月/日三柱,起运与交运按日估算。时柱按正午暂算,涉及时柱的结论仅供参考。</div>':""}
1979
1991
  <div class="pp-rel"><div><b>天干</b>${e.relations&&e.relations.stems.length?e.relations.stems.join(" · "):"—"}</div>
@@ -1986,15 +1998,15 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
1986
1998
  ${Te}
1987
1999
  ${Array.isArray(e.classics)&&e.classics.length?`<section class="mp-cl" aria-label="古籍原文">
1988
2000
  <div class="mp-cl-h"><b>古籍原文</b><span>照录通行本,释义为白话自撰</span></div>
1989
- ${e.classics.map(x=>`<div class="mp-cl-e">
1990
- <div class="mp-cl-t"><b>${t(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[x.book]||x.book)+"·"+x.chapter)}</b></div>
1991
- <div class="mp-cl-q">「${t(x.quote)}」</div>
1992
- <div class="mp-cl-p">${t(x.plain)}</div>
2001
+ ${e.classics.map(h=>`<div class="mp-cl-e">
2002
+ <div class="mp-cl-t"><b>${t(({ziping:"子平真诠",ditian:"滴天髓",sanming:"三命通会"}[h.book]||h.book)+"·"+h.chapter)}</b></div>
2003
+ <div class="mp-cl-q">「${t(h.quote)}」</div>
2004
+ <div class="mp-cl-p">${t(h.plain)}</div>
1993
2005
  </div>`).join("")}
1994
2006
  </section>`:""}
1995
2007
  ${I("五行与十神",`<div class="pp-chips">${V}</div>${z}`)}
1996
2008
  ${I("大运",`${s.curveHTML(e)}<div class="pp-chips">${N}</div>`)}
1997
- ${E?I("流年",E+ze):""}
2009
+ ${E?I("流年",E+je):""}
1998
2010
  ${e.palaces?I("胎命身",`<div class="pp-chips">
1999
2011
  <span class="pp-chip" title="${t(e.palaces.taiyuan.note)}">胎元 ${t(e.palaces.taiyuan.ganzhi)}</span>
2000
2012
  ${e.palaces.taixi?`<span class="pp-chip" title="${t(e.palaces.taixi.note)}">胎息 ${t(e.palaces.taixi.ganzhi)}</span>`:""}
@@ -2090,15 +2102,15 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
2090
2102
  ${l.map(u=>`<div class="mp-shadow-warn">⚠ ${u}</div>`).join("")}
2091
2103
  ${o}
2092
2104
  ${d}
2093
- </section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let p=null;try{p=i.shadowSnapshot(e)}catch{return null}if(!p||!p.shadow||!p.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(o=m)}catch{o={}}const c=o[p.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,p)}catch{d=null}p.at=Date.now(),o[p.shadow.baseId]=p;try{const u=Object.keys(o);if(u.length>24){u.sort((m,b)=>(Number(o[m]&&o[m].at)||0)-(Number(o[b]&&o[b].at)||0));for(const m of u.slice(0,u.length-24))delete o[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const _a="dsh-metaphysics/profiles-v1",_e=24,Oa=16,at=40,tt=60,Ha=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=_a,s.PROF_MAX=_e,s.PROF_KINDS=Ha;const ha={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>ha[e]||String(e||"");const ke=e=>typeof e=="string";function aa(e){if(!e||typeof e!="object"||Array.isArray(e)||!ke(e.id)||!e.id||e.id.length>40||!ke(e.kind)||Ha.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const p=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(p,l,0).getDate())return null;const c=ke(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:ke(e.label)?e.label.slice(0,Oa):"",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:ke(e.address)?e.address.slice(0,at):"",note:ke(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 vt(){try{const e=window.localStorage?window.localStorage.getItem(_a):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function De(e){return e.slice().sort((i,p)=>(p.pinned?1:0)-(i.pinned?1:0)||(p.lastUsedAt||p.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(p.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const p of vt()){const l=aa(p);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return De(e)},s.profilesSave=function(e){const i=De(Array.isArray(e)?e.slice(0,_e):[]);try{return window.localStorage?(window.localStorage.setItem(_a,JSON.stringify(i)),!0):!1}catch{return!1}};let it=0;s.profilesNewId=function(){const e=Object.create(null);for(const p of s.profilesLoad())e[p.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=aa(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const p=s.profilesLoad(),l=p.findIndex(o=>o.id===i.id);if(l>=0){const o=p[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,p.splice(l,1,i)}else p.push(i);if(p.length>_e){const o=p.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=o.find(u=>u.id!==i.id)||o[0],d=p.indexOf(c);d>=0&&p.splice(d,1)}return s.profilesSave(p)?{ok:!0,list:De(p),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(p=>p.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(p=>p.id===e?Object.assign({},p,{pinned:!p.pinned}):p);return s.profilesSave(i)?De(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const p=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(p)?De(p):s.profilesLoad():p};const Pa=864e5;function nt(e){const i=Number(e)||0;if(!i)return"未排过";const p=Math.floor((Date.now()-i)/Pa);if(p<=0)return"今天排过";if(p===1)return"昨天排过";if(p<30)return`${p} 天前排过`;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 ca="dsh-metaphysics/cases-v1",Fa=480,Ve=["pending","hit","miss","void"],st={pending:"待验",hit:"应验",miss:"未应",void:"作废"},xa=120;s.CASE_KEY=ca,s.CASE_MAX=Fa,s.CASE_STATUS=Ve,s.caseStatusLabel=e=>st[e]||st.pending;function ta(e){if(!e||typeof e!="object"||Array.isArray(e)||!ke(e.id)||!e.id||e.id.length>64)return null;const i=e.entry;if(!i||typeof i!="object"||Array.isArray(i)||!ke(i.kind)||Ha.indexOf(i.kind)<0||!ke(i.date)&&!ke(i.time)&&!ke(i.question))return null;const p=Number(e.at||i.at)||0;return p?{id:e.id,at:p,status:Ve.indexOf(e.status)>=0?e.status:"pending",note:ke(e.note)?e.note.slice(0,xa):"",question:ke(i.question)?i.question.slice(0,80):"",entry:i}:null}function He(){try{const e=window.localStorage?window.localStorage.getItem(ca):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function ia(e){if(!window.localStorage)return!1;try{return window.localStorage.setItem(ca,JSON.stringify(e.slice(0,Fa))),!0}catch{return!1}}s.casesSave=ia,s.casesLoad=function(){return He().map(ta).filter(Boolean).sort((e,i)=>i.at-e.at||(e.id<i.id?1:-1))},s.casesNewId=function(){const e={};He().forEach(p=>{p&&p.id&&(e[p.id]=1)});let i="";for(let p=0;p<8&&(i="c"+Date.now().toString(36)+Math.floor(Math.random()*1296).toString(36),!!e[i]);p+=1);return i},s.casesAdd=function(e,i){const p=i||{};if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,list:s.casesLoad()};const l=s.casesLoad(),o=Number(e.at)||Date.now();if(l.some(m=>m.at>o-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=ta({id:s.casesNewId(),at:o,status:p.status||"pending",note:p.note||"",entry:e});if(!d)return{ok:!1,list:s.casesLoad()};const u=[d].concat(l.filter(m=>m.id!==d.id)).slice(0,Fa);return ia(u)?{ok:!0,item:d,list:u}:{ok:!1,list:s.casesLoad()}},s.casesSetStatus=function(e,i){if(Ve.indexOf(i)<0)return s.casesLoad();const p=He().map(ta).filter(Boolean).map(l=>l.id===e?Object.assign({},l,{status:i}):l);return ia(p)?p:s.casesLoad()},s.casesRemove=function(e){const i=He().map(ta).filter(Boolean).filter(p=>p.id!==e);return ia(i)?i:s.casesLoad()},s.casesExport=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(p=>JSON.stringify({id:p.id,at:p.at,atISO:new Date(p.at).toISOString(),kind:p.entry.kind,label:ke(p.entry.label)?p.entry.label:"",question:p.question,status:p.status,note:p.note,params:p.entry})).join(`
2094
- `)};const va=/^(\d{4})-(\d{2})-(\d{2})$/,yt=/^(\d{1,2}):(\d{2})(:\d{2})?$/;function Da(e){const i=ke(e)&&va.exec(e.trim());return i?i[2]+"-"+i[3]:""}function wt(e){const i=ke(e)&&yt.exec(e.trim());return i?i[1]+":00":""}s.casesExportMasked=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(p=>{const l=p.entry||{},o={};return Object.keys(l).forEach(c=>{if(c!=="address"){if(c==="date"){const d=Da(l[c]);d&&(o.date=d);return}if(c==="time"){const d=wt(l[c]);d&&(o.time=d);return}c!=="question"&&(o[c]=l[c])}}),JSON.stringify({id:p.id,kind:l.kind||"",label:ke(l.label)?l.label:"",status:p.status,note:"",params:o})}).join(`
2095
- `)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const p=He().map(ta).filter(Boolean),l={};p.forEach(c=>{l[c.id]=1});let o=0;for(let c=0;c<i.length;c+=1){const d=i[c];if(!d||typeof d!="object"||!ke(d.kind))continue;const u=Number(d.at)||0,m=`h-${u||"0"}-${c}-${d.kind}`;if(l[m])continue;const b=ta({id:m,at:u||Date.now(),status:"pending",entry:d});b&&(l[m]=1,p.push(b),o+=1)}return o&&ia(p.sort((c,d)=>d.at-c.at)),{added:o,list:s.casesLoad()}};const Re={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const p=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=aa(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=p.editingId&&d.id===p.editingId,b=p.armedDel&&d.id===p.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
2105
+ </section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let p=null;try{p=i.shadowSnapshot(e)}catch{return null}if(!p||!p.shadow||!p.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(o=m)}catch{o={}}const c=o[p.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,p)}catch{d=null}p.at=Date.now(),o[p.shadow.baseId]=p;try{const u=Object.keys(o);if(u.length>24){u.sort((m,b)=>(Number(o[m]&&o[m].at)||0)-(Number(o[b]&&o[b].at)||0));for(const m of u.slice(0,u.length-24))delete o[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const _a="dsh-metaphysics/profiles-v1",_e=24,Oa=16,it=40,nt=60,Ha=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=_a,s.PROF_MAX=_e,s.PROF_KINDS=Ha;const ha={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>ha[e]||String(e||"");const ze=e=>typeof e=="string";function aa(e){if(!e||typeof e!="object"||Array.isArray(e)||!ze(e.id)||!e.id||e.id.length>40||!ze(e.kind)||Ha.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const p=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(p,l,0).getDate())return null;const c=ze(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:ze(e.label)?e.label.slice(0,Oa):"",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:ze(e.address)?e.address.slice(0,it):"",note:ze(e.note)?e.note.slice(0,nt):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function vt(){try{const e=window.localStorage?window.localStorage.getItem(_a):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function De(e){return e.slice().sort((i,p)=>(p.pinned?1:0)-(i.pinned?1:0)||(p.lastUsedAt||p.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(p.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const p of vt()){const l=aa(p);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return De(e)},s.profilesSave=function(e){const i=De(Array.isArray(e)?e.slice(0,_e):[]);try{return window.localStorage?(window.localStorage.setItem(_a,JSON.stringify(i)),!0):!1}catch{return!1}};let st=0;s.profilesNewId=function(){const e=Object.create(null);for(const p of s.profilesLoad())e[p.id]=1;let i;do i=`p${Date.now().toString(36)}${(st++).toString(36)}`;while(e[i]);return i},s.profilesPut=function(e){const i=aa(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const p=s.profilesLoad(),l=p.findIndex(o=>o.id===i.id);if(l>=0){const o=p[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,p.splice(l,1,i)}else p.push(i);if(p.length>_e){const o=p.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=o.find(u=>u.id!==i.id)||o[0],d=p.indexOf(c);d>=0&&p.splice(d,1)}return s.profilesSave(p)?{ok:!0,list:De(p),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(p=>p.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(p=>p.id===e?Object.assign({},p,{pinned:!p.pinned}):p);return s.profilesSave(i)?De(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const p=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(p)?De(p):s.profilesLoad():p};const Pa=864e5;function ot(e){const i=Number(e)||0;if(!i)return"未排过";const p=Math.floor((Date.now()-i)/Pa);if(p<=0)return"今天排过";if(p===1)return"昨天排过";if(p<30)return`${p} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}s.profilesAgo=ot;const ca="dsh-metaphysics/cases-v1",Fa=480,Ve=["pending","hit","miss","void"],pt={pending:"待验",hit:"应验",miss:"未应",void:"作废"},xa=120;s.CASE_KEY=ca,s.CASE_MAX=Fa,s.CASE_STATUS=Ve,s.caseStatusLabel=e=>pt[e]||pt.pending;function ta(e){if(!e||typeof e!="object"||Array.isArray(e)||!ze(e.id)||!e.id||e.id.length>64)return null;const i=e.entry;if(!i||typeof i!="object"||Array.isArray(i)||!ze(i.kind)||Ha.indexOf(i.kind)<0||!ze(i.date)&&!ze(i.time)&&!ze(i.question))return null;const p=Number(e.at||i.at)||0;return p?{id:e.id,at:p,status:Ve.indexOf(e.status)>=0?e.status:"pending",note:ze(e.note)?e.note.slice(0,xa):"",question:ze(i.question)?i.question.slice(0,80):"",entry:i}:null}function He(){try{const e=window.localStorage?window.localStorage.getItem(ca):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function ia(e){if(!window.localStorage)return!1;try{return window.localStorage.setItem(ca,JSON.stringify(e.slice(0,Fa))),!0}catch{return!1}}s.casesSave=ia,s.casesLoad=function(){return He().map(ta).filter(Boolean).sort((e,i)=>i.at-e.at||(e.id<i.id?1:-1))},s.casesNewId=function(){const e={};He().forEach(p=>{p&&p.id&&(e[p.id]=1)});let i="";for(let p=0;p<8&&(i="c"+Date.now().toString(36)+Math.floor(Math.random()*1296).toString(36),!!e[i]);p+=1);return i},s.casesAdd=function(e,i){const p=i||{};if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,list:s.casesLoad()};const l=s.casesLoad(),o=Number(e.at)||Date.now();if(l.some(m=>m.at>o-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=ta({id:s.casesNewId(),at:o,status:p.status||"pending",note:p.note||"",entry:e});if(!d)return{ok:!1,list:s.casesLoad()};const u=[d].concat(l.filter(m=>m.id!==d.id)).slice(0,Fa);return ia(u)?{ok:!0,item:d,list:u}:{ok:!1,list:s.casesLoad()}},s.casesSetStatus=function(e,i){if(Ve.indexOf(i)<0)return s.casesLoad();const p=He().map(ta).filter(Boolean).map(l=>l.id===e?Object.assign({},l,{status:i}):l);return ia(p)?p:s.casesLoad()},s.casesRemove=function(e){const i=He().map(ta).filter(Boolean).filter(p=>p.id!==e);return ia(i)?i:s.casesLoad()},s.casesExport=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(p=>JSON.stringify({id:p.id,at:p.at,atISO:new Date(p.at).toISOString(),kind:p.entry.kind,label:ze(p.entry.label)?p.entry.label:"",question:p.question,status:p.status,note:p.note,params:p.entry})).join(`
2106
+ `)};const va=/^(\d{4})-(\d{2})-(\d{2})$/,yt=/^(\d{1,2}):(\d{2})(:\d{2})?$/;function Da(e){const i=ze(e)&&va.exec(e.trim());return i?i[2]+"-"+i[3]:""}function wt(e){const i=ze(e)&&yt.exec(e.trim());return i?i[1]+":00":""}s.casesExportMasked=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(p=>{const l=p.entry||{},o={};return Object.keys(l).forEach(c=>{if(c!=="address"){if(c==="date"){const d=Da(l[c]);d&&(o.date=d);return}if(c==="time"){const d=wt(l[c]);d&&(o.time=d);return}c!=="question"&&(o[c]=l[c])}}),JSON.stringify({id:p.id,kind:l.kind||"",label:ze(l.label)?l.label:"",status:p.status,note:"",params:o})}).join(`
2107
+ `)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const p=He().map(ta).filter(Boolean),l={};p.forEach(c=>{l[c.id]=1});let o=0;for(let c=0;c<i.length;c+=1){const d=i[c];if(!d||typeof d!="object"||!ze(d.kind))continue;const u=Number(d.at)||0,m=`h-${u||"0"}-${c}-${d.kind}`;if(l[m])continue;const b=ta({id:m,at:u||Date.now(),status:"pending",entry:d});b&&(l[m]=1,p.push(b),o+=1)}return o&&ia(p.sort((c,d)=>d.at-c.at)),{added:o,list:s.casesLoad()}};const Re={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const p=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=aa(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=p.editingId&&d.id===p.editingId,b=p.armedDel&&d.id===p.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
2096
2108
  <button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${t(d.id)}"
2097
2109
  title="${t(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
2098
2110
  <span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${Re[d.gender]||""}</i>`:""}</span>
2099
2111
  <span class="mp-prof-sys">${t(s.profKindLabel?s.profKindLabel(d.kind):d.kind)}</span>
2100
2112
  <span class="mp-prof-bd">${t(u)}</span>
2101
- <span class="mp-prof-at">${t(nt(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
2113
+ <span class="mp-prof-at">${t(ot(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
2102
2114
  </button>
2103
2115
  <span class="mp-prof-ops">
2104
2116
  <button type="button" data-mp-prof="pin" data-id="${t(d.id)}" class="${d.pinned?"on":""}"
@@ -2116,7 +2128,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
2116
2128
  <button type="button" data-mp-prof="put"${i.canAdd===!1?" disabled":""}>${t(i.editingId?"更新这张档案":"存为我的命盘")}</button>
2117
2129
  ${i.editingId?'<button type="button" class="ghost" data-mp-prof="cancel">取消改名</button>':""}
2118
2130
  <span class="mp-prof-tip">${t(i.tip||(i.editingId?"改完出生信息或称呼,点「更新这张档案」覆盖原档。":"存的是出生时间与出生地这些输入,不是结果。"))}</span>
2119
- </div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const p=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:p,id:i.getAttribute("data-id")||"",name:i}};const ot=["bazi","trend"],Ra=["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:Ra.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,p){const l=e||{},o=l.hourUnknown===!0&&ot.indexOf(String(l.kind||""))>=0;return!o&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:aa(Object.assign({id:p||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Oa)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:o,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,p){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",o=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof p=="string"?p:"",d=(m,b)=>{const v=String(m??"");return v.length>b?`${v.slice(0,b)}…`:v},u=e.map((m,b)=>{const v=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${b===0?" open":""}>
2131
+ </div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const p=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:p,id:i.getAttribute("data-id")||"",name:i}};const rt=["bazi","trend"],Ra=["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:Ra.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,p){const l=e||{},o=l.hourUnknown===!0&&rt.indexOf(String(l.kind||""))>=0;return!o&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:aa(Object.assign({id:p||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Oa)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:o,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,p){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",o=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof p=="string"?p:"",d=(m,b)=>{const v=String(m??"");return v.length>b?`${v.slice(0,b)}…`:v},u=e.map((m,b)=>{const v=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${b===0?" open":""}>
2120
2132
  <summary><span class="mp-trace-no">${b+1}</span><span class="mp-trace-field">${t(m.field)}</span><span class="mp-trace-res">${t(d(m.result,44))}</span></summary>
2121
2133
  <div class="mp-trace-detail">
2122
2134
  <div class="mp-trace-rule"><b>规则</b>${t(m.rule)}</div>
@@ -2151,7 +2163,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
2151
2163
  <div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${y.liuhe?`<span class="mp-al-chip">六合·${t(y.liuhe)}</span>`:""}${l(y.sanhe||[])}</div></div>
2152
2164
  ${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${t(e.dailyHexagram.name)}</b> ${t(e.dailyHexagram.meaning||"")}</div>`:""}
2153
2165
  <div class="mp-al-note">${t(e.meta&&e.meta.scope||"")}</div>
2154
- </section>`};const $t=" liuyao tarot meihua daliuren qimen xiaoliuren ",Ia=" almanac zeri convert star numerology wuyunliuqi ",Ba={cast:"先看卦名或牌名——事情此刻的样子;再看动爻、正逆位,变化在那里。",person:"先找「你」那一格(日主、命宫或主质);再看被强调的字或星。",day:"先看今天值什么,再看宜忌那几栏。"};s.plainHTML=function(e){if(!e||e.system==="taiyi")return"";const i=e.brief&&e.brief.lead||"";if(!i)return"";const p=" "+String(e.system||"")+" ",l=$t.indexOf(p)>=0?Ba.cast:Ia.indexOf(p)>=0?Ba.day:Ba.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,p=e.wenchang||{},l=e.shiji||{},o=e.jishen||{},c=e.suan||{},d=e.jiang||{},u=e.geju||{},b=[[9,"巽"],[2,"离"],[7,"坤"],[4,"震"],[5,"中"],[6,"兑"],[3,"艮"],[8,"坎"],[1,"乾"]].map(ae=>{const Z=ae[0],be=ae[1],fe=i.palace===Z,Se=p.num===Z,H=l.palace===Z,Ne=(fe?'<i class="mp-ty-mark">太乙</i>':"")+(H?'<i class="mp-ty-mark s">始击</i>':"")+(Se?'<i class="mp-ty-mark w">文昌</i>':"");return`<div class="mp-ty-cell${fe?" on":""}${be==="中"?" mid":""}"><b>${t(be)}</b><em>${Z}</em>${Ne}</div>`}).join(""),v=e.scope&&e.scope.notCovered||[],y=e.month||{},w=e.day||{},T=e.hour||{},S=y.taiyi&&y.taiyi.palaceName||"",O=String(y.taiyi&&y.taiyi.unitInPalace||""),ee=y.mu?y.mu.pos+"("+y.mu.god+")":"",F=y.jishen&&y.jishen.branch||"",C=w.taiyi&&w.taiyi.palaceName||"",V=String(w.taiyi&&w.taiyi.unitInPalace||""),R=w.mu?w.mu.pos+"("+w.mu.god+")":"",L=w.jishen&&w.jishen.branch||"",I=T.taiyi&&T.taiyi.palaceName||"",f=String(T.taiyi&&T.taiyi.unitInPalace||""),ne=T.jishen&&T.jishen.branch||"",ue=e.jixiong||{},U=e.verdict||{},Te=U.grade||ue.grade||"xiong",z=U.label||ue.label||"凶",N=e.shenjiang||{},E=N.rows?`${N.stem}日、${N.day?"昼贵":"夜贵"}起${N.startBranch}${N.dir>0?"顺":"逆"}行;吉神下:${(N.goods||[]).join("、")||"无"};凶神下:${(N.bads||[]).join("、")||"无"}`:"未排",le=ue.grade||"xiong",ge=ue.label||"凶",se=e.gate&&e.gate.gate||"",ze={掩:"客方的目和太乙挤在同一格",击:"始击挨在太乙左右",格:"太乙和始击隔一格正面对上",对:"文昌从对面顶过来",提:"客大将和文昌挤在一格",迫:"有将贴得太近,就在太乙前后一格",囚:"有将被关在太乙那一格里",关:"主客两边的人撞在一处"},Be=(u.list||[]).map(ae=>{const Z=String(ae).charAt(0);return ze[Z]?Z+"——"+ze[Z]:String(ae)}),q=le==="xiong"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判凶:主客两边有几样撞到了一起。`:le==="daji"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判大吉:位置和数都顺,门也在吉道上。`:le==="buhe"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判不和:位置不冲突,但数上不合。`:`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判吉:位置不冲突。`;return`<section class="mp-ty" aria-label="太乙神数">
2166
+ </section>`};const $t=" liuyao tarot meihua daliuren qimen xiaoliuren ",Ia=" almanac zeri convert star numerology wuyunliuqi ",Ba={cast:"先看卦名或牌名——事情此刻的样子;再看动爻、正逆位,变化在那里。",person:"先找「你」那一格(日主、命宫或主质);再看被强调的字或星。",day:"先看今天值什么,再看宜忌那几栏。"};s.plainHTML=function(e){if(!e||e.system==="taiyi")return"";const i=e.brief&&e.brief.lead||"";if(!i)return"";const p=" "+String(e.system||"")+" ",l=$t.indexOf(p)>=0?Ba.cast:Ia.indexOf(p)>=0?Ba.day:Ba.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,p=e.wenchang||{},l=e.shiji||{},o=e.jishen||{},c=e.suan||{},d=e.jiang||{},u=e.geju||{},b=[[9,"巽"],[2,"离"],[7,"坤"],[4,"震"],[5,"中"],[6,"兑"],[3,"艮"],[8,"坎"],[1,"乾"]].map(ae=>{const Y=ae[0],be=ae[1],fe=i.palace===Y,Se=p.num===Y,H=l.palace===Y,Ne=(fe?'<i class="mp-ty-mark">太乙</i>':"")+(H?'<i class="mp-ty-mark s">始击</i>':"")+(Se?'<i class="mp-ty-mark w">文昌</i>':"");return`<div class="mp-ty-cell${fe?" on":""}${be==="中"?" mid":""}"><b>${t(be)}</b><em>${Y}</em>${Ne}</div>`}).join(""),v=e.scope&&e.scope.notCovered||[],y=e.month||{},w=e.day||{},T=e.hour||{},S=y.taiyi&&y.taiyi.palaceName||"",O=String(y.taiyi&&y.taiyi.unitInPalace||""),ee=y.mu?y.mu.pos+"("+y.mu.god+")":"",F=y.jishen&&y.jishen.branch||"",C=w.taiyi&&w.taiyi.palaceName||"",V=String(w.taiyi&&w.taiyi.unitInPalace||""),R=w.mu?w.mu.pos+"("+w.mu.god+")":"",L=w.jishen&&w.jishen.branch||"",I=T.taiyi&&T.taiyi.palaceName||"",f=String(T.taiyi&&T.taiyi.unitInPalace||""),ne=T.jishen&&T.jishen.branch||"",ue=e.jixiong||{},U=e.verdict||{},Te=U.grade||ue.grade||"xiong",z=U.label||ue.label||"凶",N=e.shenjiang||{},E=N.rows?`${N.stem}日、${N.day?"昼贵":"夜贵"}起${N.startBranch}${N.dir>0?"顺":"逆"}行;吉神下:${(N.goods||[]).join("、")||"无"};凶神下:${(N.bads||[]).join("、")||"无"}`:"未排",re=ue.grade||"xiong",ge=ue.label||"凶",se=e.gate&&e.gate.gate||"",je={掩:"客方的目和太乙挤在同一格",击:"始击挨在太乙左右",格:"太乙和始击隔一格正面对上",对:"文昌从对面顶过来",提:"客大将和文昌挤在一格",迫:"有将贴得太近,就在太乙前后一格",囚:"有将被关在太乙那一格里",关:"主客两边的人撞在一处"},Be=(u.list||[]).map(ae=>{const Y=String(ae).charAt(0);return je[Y]?Y+"——"+je[Y]:String(ae)}),q=re==="xiong"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判凶:主客两边有几样撞到了一起。`:re==="daji"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判大吉:位置和数都顺,门也在吉道上。`:re==="buhe"?`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判不和:位置不冲突,但数上不合。`:`太乙站在${i.palaceName}宫(${i.dir}),值${se}门,判吉:位置不冲突。`;return`<section class="mp-ty" aria-label="太乙神数">
2155
2167
  <div class="mp-ty-h">
2156
2168
  <span class="mp-ty-y">${t(String(e.meta.year))} 年</span>
2157
2169
  <span class="mp-ty-j">${t(e.meta.dunText||"")}${t(String(e.meta.ju))}局</span>
@@ -2279,7 +2291,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
2279
2291
  </section>`},s.quickHTML=function(e){if(!e)return"";const p={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",l=e.summary||"",o=l?`<pre class="mp-quick-pre">${t(l)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(p)}结果">
2280
2292
  <div class="mp-quick-h"><b>${t(p)}</b></div>
2281
2293
  ${o}
2282
- </section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const p=i&&i.outline||[],l=(i&&i.tables||[]).filter(R=>Array.isArray(R.rows)&&R.rows.length),o=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(R,L)=>`${L?"600 ":""}${R}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,b=document.createElement("canvas"),v=b.getContext?b.getContext("2d"):null;if(!v)return"";const y=(R,L)=>{const I=[];let f="";for(const ne of String(R)){const ue=f+ne;v.measureText(ue).width>L&&f?(I.push(f),f=ne):f=ue}return f&&I.push(f),I.length?I:[""]};v.font=m(15);let w=0;const T=p.map(R=>{const L=y(R.text,c-d*2-70);return w+=Math.min(L.length,2)*u+10,{o:R,lines:L.slice(0,2)}}),S=l[0]||null,O=S?S.rows.slice(0,6):[],ee=S?54+O.length*34:0,F=150+w+(T.length?34:0)+ee+120;b.width=c,b.height=F,v.fillStyle="rgb(255,255,255)",v.fillRect(0,0,c,F),v.fillStyle="rgb(31,111,63)",v.fillRect(0,0,c,8);let C=52;v.fillStyle="rgb(27,27,27)",v.font=m(28,!0),v.fillText(`${o} · 摘要`,d,C),C+=30,v.fillStyle="rgb(111,106,96)",v.font=m(14);const V=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(v.fillText(V,d,C),C+=34,T.length){v.fillStyle="rgb(31,111,63)",v.font=m(16,!0),v.fillText("一页读懂",d,C),C+=26;for(const{o:R,lines:L}of T)v.fillStyle="rgb(138,131,120)",v.font=m(14,!0),v.fillText(R.label,d,C),v.fillStyle="rgb(63,58,51)",v.font=m(15),L.forEach((I,f)=>v.fillText(I,d+70,C+f*u)),C+=L.length*u+10;C+=8}if(S){v.fillStyle="rgb(31,111,63)",v.font=m(16,!0),v.fillText(S.title,d,C),C+=24,v.fillStyle="rgb(138,131,120)",v.font=m(13),v.fillText(S.columns.join(" · "),d,C),C+=8,v.strokeStyle="rgb(229,225,216)",v.beginPath(),v.moveTo(d,C),v.lineTo(c-d,C),v.stroke(),C+=22,v.fillStyle="rgb(63,58,51)",v.font=m(14);for(const R of O){const L=R.filter(Boolean).join(" · "),I=y(L,c-d*2)[0];v.fillText(I,d,C),C+=34}}return C=F-62,v.strokeStyle="rgb(229,225,216)",v.beginPath(),v.moveTo(d,C-18),v.lineTo(c-d,C-18),v.stroke(),v.fillStyle="rgb(138,131,120)",v.font=m(12),v.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,C+6),v.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,C+26),b.toDataURL?b.toDataURL("image/png"):""}catch{return""}}})();const di="dsh-metaphysics/history-v1";function cn(){try{const n=window.localStorage&&window.localStorage.getItem(di),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(k=>k&&typeof k=="object"&&typeof k.kind=="string").slice(0,20):[]}catch{return[]}}function ci(n){try{window.localStorage&&window.localStorage.setItem(di,JSON.stringify(n.slice(0,20)))}catch{}}const mn=(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 un(n,s){if(n==="bazi"){const P=["year","month","day","hour"].map(Q=>s.pillars&&s.pillars[Q]).filter(Boolean).map(Q=>Q.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${P}(时柱暂缺)`:P}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const D=window.__PP,Va=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let Oe=0;const mt=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,gn=`
2294
+ </section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const p=i&&i.outline||[],l=(i&&i.tables||[]).filter(R=>Array.isArray(R.rows)&&R.rows.length),o=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(R,L)=>`${L?"600 ":""}${R}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,b=document.createElement("canvas"),v=b.getContext?b.getContext("2d"):null;if(!v)return"";const y=(R,L)=>{const I=[];let f="";for(const ne of String(R)){const ue=f+ne;v.measureText(ue).width>L&&f?(I.push(f),f=ne):f=ue}return f&&I.push(f),I.length?I:[""]};v.font=m(15);let w=0;const T=p.map(R=>{const L=y(R.text,c-d*2-70);return w+=Math.min(L.length,2)*u+10,{o:R,lines:L.slice(0,2)}}),S=l[0]||null,O=S?S.rows.slice(0,6):[],ee=S?54+O.length*34:0,F=150+w+(T.length?34:0)+ee+120;b.width=c,b.height=F,v.fillStyle="rgb(255,255,255)",v.fillRect(0,0,c,F),v.fillStyle="rgb(31,111,63)",v.fillRect(0,0,c,8);let C=52;v.fillStyle="rgb(27,27,27)",v.font=m(28,!0),v.fillText(`${o} · 摘要`,d,C),C+=30,v.fillStyle="rgb(111,106,96)",v.font=m(14);const V=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(v.fillText(V,d,C),C+=34,T.length){v.fillStyle="rgb(31,111,63)",v.font=m(16,!0),v.fillText("一页读懂",d,C),C+=26;for(const{o:R,lines:L}of T)v.fillStyle="rgb(138,131,120)",v.font=m(14,!0),v.fillText(R.label,d,C),v.fillStyle="rgb(63,58,51)",v.font=m(15),L.forEach((I,f)=>v.fillText(I,d+70,C+f*u)),C+=L.length*u+10;C+=8}if(S){v.fillStyle="rgb(31,111,63)",v.font=m(16,!0),v.fillText(S.title,d,C),C+=24,v.fillStyle="rgb(138,131,120)",v.font=m(13),v.fillText(S.columns.join(" · "),d,C),C+=8,v.strokeStyle="rgb(229,225,216)",v.beginPath(),v.moveTo(d,C),v.lineTo(c-d,C),v.stroke(),C+=22,v.fillStyle="rgb(63,58,51)",v.font=m(14);for(const R of O){const L=R.filter(Boolean).join(" · "),I=y(L,c-d*2)[0];v.fillText(I,d,C),C+=34}}return C=F-62,v.strokeStyle="rgb(229,225,216)",v.beginPath(),v.moveTo(d,C-18),v.lineTo(c-d,C-18),v.stroke(),v.fillStyle="rgb(138,131,120)",v.font=m(12),v.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,C+6),v.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,C+26),b.toDataURL?b.toDataURL("image/png"):""}catch{return""}}})();const di="dsh-metaphysics/history-v1";function cn(){try{const n=window.localStorage&&window.localStorage.getItem(di),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(k=>k&&typeof k=="object"&&typeof k.kind=="string").slice(0,20):[]}catch{return[]}}function ci(n){try{window.localStorage&&window.localStorage.setItem(di,JSON.stringify(n.slice(0,20)))}catch{}}const mn=(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 un(n,s){if(n==="bazi"){const P=["year","month","day","hour"].map(Q=>s.pillars&&s.pillars[Q]).filter(Boolean).map(Q=>Q.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${P}(时柱暂缺)`:P}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const D=window.__PP,Wa=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let Oe=0;const Qa=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,gn=`
2283
2295
  /* 整个侧栏面板铺宣纸:暖白渐变为底 + feTurbulence 纤维噪点平铺。
2284
2296
  background-attachment:local 让纹理跟着滚动内容走,长页面不会下半截露白。
2285
2297
  噪点用 colorMatrix 压到很低的 alpha(0.09),只做纸感不糊字。 */
@@ -2624,11 +2636,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.76.0",factory(ct){
2624
2636
  @media (prefers-reduced-motion:reduce){
2625
2637
  *,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important}
2626
2638
  }
2627
- `,{useState:j,useEffect:ja,useRef:fn}=Xa,mi=n=>String(n).padStart(2,"0");function bn(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const k=Number(s[1]),P=Number(s[2]),Q=Number(s[3]);if(P<1||P>12||Q<1)return!1;const ce=[31,k%4===0&&k%100!==0||k%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return Q<=ce[P-1]}function ui(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const k=`${s[1]}-${mi(s[2])}-${mi(s[3])}`;return bn(k)?k:""}function hn(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const P=ui(s);if(P)return P}const k=s.replace(/\D/g,"").slice(0,8);return k.length<=4?k:k.length<=6?`${k.slice(0,4)}-${k.slice(4)}`:`${k.slice(0,4)}-${k.slice(4,6)}-${k.slice(6)}`}function Ht(n){const s=n.value||"",[k,P]=j(s),Q=fn(s);ja(()=>{Q.current=s,P(s)},[s]);const pe=()=>{const ce=k.trim();if(!ce){P(Q.current),n.onInvalid&&n.onInvalid("");return}const de=ui(ce);if(de){Q.current=de,P(de),de!==s&&n.onChange(de);return}P(Q.current),n.onInvalid&&n.onInvalid(ce)};return r("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:k,onChange:ce=>{P(hn(ce.target.value))},onBlur:pe,onKeyDown:ce=>{ce.key==="Enter"&&(ce.preventDefault(),pe())}})}const ut=4,sa=12,gt=5,oa=27,Pt=45;let ft=null;function bt(){if(ft)return ft;let n=null;try{n=J.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(ft={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},ft):{total:0,questions:[],scale:{}}}function xn(n){const{answers:s,page:k,onPick:P,onPage:Q,onSubmit:pe,onClear:ce}=n,de=bt(),ye=Math.max(1,Math.ceil(de.total/ut)),t=k*ut,$e=de.questions.slice(t,t+ut),B=s.filter(X=>X!=null).length,xe=de.total?Math.round(B/de.total*100):0,we=k>=ye-1,K=B>=sa;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"},`第 ${k+1} / ${ye} 页 · 已答 ${B} / ${de.total}`)),r("div",{className:"mp-quiz-list"},$e.map((X,W)=>{const G=t+W;return r("div",{key:X.id||G,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(G+1).padStart(2,"0")),r("span",null,X.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${G+1} 题`},[1,2,3,4,5].map(ie=>r("label",{key:ie,className:"mp-quiz-o"+(s[G]===ie?" on":"")},r("input",{type:"radio",name:`mpmbq${G}`,value:String(ie),checked:s[G]===ie,onChange:()=>P(G,ie)}),r("b",null,String(ie)),r("span",null,de.scale[ie]||"")))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:k<=0,onClick:()=>Q(-1)},"上一页"),we?null:r("button",{className:"mp-quiz-btn",onClick:()=>Q(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!K,onClick:pe},"看结果"),r("button",{className:"mp-quiz-btn",onClick:ce},"清空"),r("span",{className:"mp-quiz-hint"},K?`已够 ${sa} 题,可以看结果;答完 ${de.total} 题会更准。`:`答满 ${sa} 题可先看结果(还差 ${sa-B} 题)。`)))}function vn(n){const{paper:s,answers:k,page:P,onPick:Q,onPage:pe,onSubmit:ce,onClear:de}=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/gt)),$e=P*gt,B=s.questions.slice($e,$e+gt),xe=k.filter(G=>G!=null).length,we=ye?Math.round(xe/ye*100):0,K=P>=t-1,X=xe>=oa,W=G=>{const ie=(s.scale||[]).filter(Ce=>Ce&&Ce.v===G)[0];return ie?ie.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"},`第 ${P+1} / ${t} 页 · 已答 ${xe} / ${ye}`)),r("div",{className:"mp-quiz-list"},B.map((G,ie)=>{const Ce=$e+ie;return r("div",{key:G.no||Ce,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(Ce+1).padStart(2,"0")),r("span",null,G.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Ce+1} 题`},[1,2,3,4,5].map(Le=>r("label",{key:Le,className:"mp-quiz-o"+(k[Ce]===Le?" on":"")},r("input",{type:"radio",name:`mpcsq${Ce}`,value:String(Le),checked:k[Ce]===Le,onChange:()=>Q(Ce,Le)}),r("b",null,String(Le)),r("span",null,W(Le))))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:P<=0,onClick:()=>pe(-1)},"上一页"),K?null:r("button",{className:"mp-quiz-btn",onClick:()=>pe(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!X,onClick:ce},"看结果"),r("button",{className:"mp-quiz-btn",onClick:de},"清空"),r("span",{className:"mp-quiz-hint"},X?`已够 ${oa} 题,可以看结果;答完 ${ye} 题会更准。`:`答满 ${oa} 题可先看结果(还差 ${oa-xe} 题)。`)))}class yn extends(Xa.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,k){console.error("[metaphysics] 面板渲染异常",s,k)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,k=String(s&&s.stack||"").split(`
2639
+ `,{useState:j,useEffect:ja,useRef:fn}=Va,mi=n=>String(n).padStart(2,"0");function bn(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const k=Number(s[1]),P=Number(s[2]),Q=Number(s[3]);if(P<1||P>12||Q<1)return!1;const ce=[31,k%4===0&&k%100!==0||k%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return Q<=ce[P-1]}function ui(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const k=`${s[1]}-${mi(s[2])}-${mi(s[3])}`;return bn(k)?k:""}function hn(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const P=ui(s);if(P)return P}const k=s.replace(/\D/g,"").slice(0,8);return k.length<=4?k:k.length<=6?`${k.slice(0,4)}-${k.slice(4)}`:`${k.slice(0,4)}-${k.slice(4,6)}-${k.slice(6)}`}function Ht(n){const s=n.value||"",[k,P]=j(s),Q=fn(s);ja(()=>{Q.current=s,P(s)},[s]);const pe=()=>{const ce=k.trim();if(!ce){P(Q.current),n.onInvalid&&n.onInvalid("");return}const de=ui(ce);if(de){Q.current=de,P(de),de!==s&&n.onChange(de);return}P(Q.current),n.onInvalid&&n.onInvalid(ce)};return r("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:k,onChange:ce=>{P(hn(ce.target.value))},onBlur:pe,onKeyDown:ce=>{ce.key==="Enter"&&(ce.preventDefault(),pe())}})}const ut=4,sa=12,gt=5,oa=27,Pt=45;let ft=null;function bt(){if(ft)return ft;let n=null;try{n=K.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(ft={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},ft):{total:0,questions:[],scale:{}}}function xn(n){const{answers:s,page:k,onPick:P,onPage:Q,onSubmit:pe,onClear:ce}=n,de=bt(),ye=Math.max(1,Math.ceil(de.total/ut)),t=k*ut,ke=de.questions.slice(t,t+ut),B=s.filter(X=>X!=null).length,xe=de.total?Math.round(B/de.total*100):0,we=k>=ye-1,J=B>=sa;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"},`第 ${k+1} / ${ye} 页 · 已答 ${B} / ${de.total}`)),r("div",{className:"mp-quiz-list"},ke.map((X,W)=>{const G=t+W;return r("div",{key:X.id||G,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(G+1).padStart(2,"0")),r("span",null,X.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${G+1} 题`},[1,2,3,4,5].map(ie=>r("label",{key:ie,className:"mp-quiz-o"+(s[G]===ie?" on":"")},r("input",{type:"radio",name:`mpmbq${G}`,value:String(ie),checked:s[G]===ie,onChange:()=>P(G,ie)}),r("b",null,String(ie)),r("span",null,de.scale[ie]||"")))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:k<=0,onClick:()=>Q(-1)},"上一页"),we?null:r("button",{className:"mp-quiz-btn",onClick:()=>Q(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!J,onClick:pe},"看结果"),r("button",{className:"mp-quiz-btn",onClick:ce},"清空"),r("span",{className:"mp-quiz-hint"},J?`已够 ${sa} 题,可以看结果;答完 ${de.total} 题会更准。`:`答满 ${sa} 题可先看结果(还差 ${sa-B} 题)。`)))}function vn(n){const{paper:s,answers:k,page:P,onPick:Q,onPage:pe,onSubmit:ce,onClear:de}=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/gt)),ke=P*gt,B=s.questions.slice(ke,ke+gt),xe=k.filter(G=>G!=null).length,we=ye?Math.round(xe/ye*100):0,J=P>=t-1,X=xe>=oa,W=G=>{const ie=(s.scale||[]).filter(Ce=>Ce&&Ce.v===G)[0];return ie?ie.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"},`第 ${P+1} / ${t} 页 · 已答 ${xe} / ${ye}`)),r("div",{className:"mp-quiz-list"},B.map((G,ie)=>{const Ce=ke+ie;return r("div",{key:G.no||Ce,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(Ce+1).padStart(2,"0")),r("span",null,G.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Ce+1} 题`},[1,2,3,4,5].map(Le=>r("label",{key:Le,className:"mp-quiz-o"+(k[Ce]===Le?" on":"")},r("input",{type:"radio",name:`mpcsq${Ce}`,value:String(Le),checked:k[Ce]===Le,onChange:()=>Q(Ce,Le)}),r("b",null,String(Le)),r("span",null,W(Le))))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:P<=0,onClick:()=>pe(-1)},"上一页"),J?null:r("button",{className:"mp-quiz-btn",onClick:()=>pe(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!X,onClick:ce},"看结果"),r("button",{className:"mp-quiz-btn",onClick:de},"清空"),r("span",{className:"mp-quiz-hint"},X?`已够 ${oa} 题,可以看结果;答完 ${ye} 题会更准。`:`答满 ${oa} 题可先看结果(还差 ${oa-xe} 题)。`)))}class yn extends(Va.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,k){console.error("[metaphysics] 面板渲染异常",s,k)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,k=String(s&&s.stack||"").split(`
2628
2640
  `).slice(0,14).join(`
2629
2641
  `);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)+`
2630
2642
 
2631
- `+k),r("div",{className:"mp-lbl"},"环境:__PP "+typeof D+" · Engine "+typeof window.Engine+" · React "+typeof Xa+" · 版本 "+(typeof D=="object"&&D&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function wn(n){const s=n&&n.size?n.size:20,k=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:k?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 Ye=[{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 Sa(n){return String(n).padStart(2,"0")}const Ft=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],gi=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],fi="mp.cast.open",$n=Array.isArray(window.__MPGroups)?window.__MPGroups:[],bi="mp.recent.tabs",hi="mp.first.view",xi=3;function Dt(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Rt(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function kn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const k=Q=>new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()).getTime(),P=Math.round((k(new Date)-k(s))/864e5);return P<=0?"今天":P===1?"昨天":`${Sa(s.getMonth()+1)}-${Sa(s.getDate())}`}function It(){const n=new Date;return{date:`${n.getFullYear()}-${Sa(n.getMonth()+1)}-${Sa(n.getDate())}`,time:`${Sa(n.getHours())}:${Sa(n.getMinutes())}`}}const zn={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"},vi={date:"1990-05-12",time:"14:30"},Na=n=>zn[n]||"none",Fe=window.__MPCore||{},ea=Fe.needAsk||(n=>!1),te={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Ke={r:null,q:"",it:null,entry:null};let pa="";function yi(){const n=[];return n.push("inputActions "+(te.ref?"已拿到":"未拿到")),n.push("渲染 "+te.mounted+" 次"),n.push("注册 "+te.regs+" 次"),n.push("inject "+(te.injectType||"?")),n.push("槽位 "+(te.spec||"?")),te.contribution&&n.push("贡献 "+te.contribution),te.errs.length&&n.push("错误:"+te.errs.join(" / ")),"桥自检:"+n.join(";")}function wi(n){if(te.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);te.errs.push(s.slice(0,90))}function jn(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const k=n.actions&&n.actions.input;return k&&typeof k.setDraft=="function"&&typeof k.submit=="function"?k:null}function $i(n,s){const k=jn(n);return ja(()=>{if(te.seats.indexOf(s)<0&&te.seats.push(s),te.keys=n?Object.keys(n).join(","):"",k){te.ref=k;try{window.__MPComposer=k}catch{}}return()=>{te.ref===k&&(te.ref=null)}},[k,s]),k}function Sn(){const n=Ke.r;if(!n)return"";try{const s=J.askPrompt?J.askPrompt(n,{question:Ke.q,interpret:Ke.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function ki(n){return te.mounted+=1,$i(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:Ke.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「烛微命盘」里排一张盘",onClick:()=>{const k=Sn();k&&ji(k)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function zi(n){return te.mounted+=1,$i(n,"composer.dock"),null}function ji(n){let s=te.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 Nn(n){const s=n.kind==="ziwei"?D.ziweiHTML(n.r):n.kind==="bazi"?D.baziHTML(n.r,{chenggu:n.chenggu})+(n.trend?D.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?D.meihuaHTML(n.r):n.kind==="daliuren"?D.daliurenHTML(n.r):n.kind==="qimen"?D.qimenHTML(n.r)+D.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?D.ziweiHepanHTML(n.r):D.hepanHTML(n.r):n.kind==="tarot"?D.tarotHTML(n.r):n.kind==="liuyao"?D.liuyaoHTML(n.r):n.kind==="chenggu"?D.chengguHTML(n.r):n.kind==="almanac"?D.almanacHTML(n.r):n.kind==="zeri"?D.zeriHTML(n.r):n.kind==="trend"?D.trendHTML(n.r):n.kind==="name"?D.nameHTML(n.r):n.kind==="mbti"?D.mbtiHTML(n.r):n.kind==="constitution"?D.constitutionHTML(n.r):n.kind==="wuyunliuqi"?D.wuyunliuqiHTML(n.r):n.kind==="taiyi"?D.taiyiHTML(n.r):n.kind==="fengshui"?D.fengshuiHTML(n.r):D.quickHTML(n.r),k=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,P=k<0?s:s.slice(k+10),Q=k<0?"":s.slice(0,k+10);return P+D.plainHTML(n.r)+Q}function qn(n){const s=!!n.open,k=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?"六个占卜体系,点一下就起":gi.map(P=>P.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},k,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},gi.map(P=>r("button",{key:P.sys,type:"button",className:"mp-castchip"+(n.tab===P.sys?" on":""),"data-cast":P.sys,"aria-pressed":n.tab===P.sys?"true":"false",title:P.tip,onClick:()=>n.onCast(P.sys)},P.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"},k)}function Mn(){const[n,s]=j("ziwei"),[k,P]=j("1990-05-12"),[Q,pe]=j("14:30"),[ce,de]=j(!1),[ye,t]=j("female"),[$e,B]=j(""),[xe,we]=j("1992-08-15"),[K,X]=j("10:00"),[W,G]=j("female"),[ie,Ce]=j(""),[Le,ua]=j("bazi"),[Je,ht]=j(!1),[qa,Wa]=j("1990-01-01"),[Ma,ga]=j("12:00"),[fa,Ca]=j("male"),[Aa,xt]=j(""),[ra,ba]=j("chaibu"),[Xe,La]=j(!0),[la,Ta]=j(!0),[Ea,Qa]=j("same-day"),[et,Gt]=j(!1),[da,Ut]=j(""),[_a,_e]=j(""),[Oa,at]=j(null),[tt,Ha]=j({}),[ha,ke]=j(null),[aa,vt]=j([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[De,it]=j(null),[Pa,nt]=j("开业"),[ca,Fa]=j("30"),[Ve,st]=j(""),[xa,ta]=j(""),[He,ia]=j("solar2lunar"),[va,yt]=j(""),[Da,wt]=j(!1),[Re,ot]=j("time"),[Ra,$t]=j(""),[Ia,Ba]=j(""),[ya,kt]=j(""),[Ga,Pe]=j(()=>new Array(bt().total).fill(null)),[Ua,Za]=j(0),[na,zt]=j(null),[Ya,jt]=j(()=>new Array(Pt).fill(null)),[Zt,e]=j(0),[i,p]=j("60"),[l,o]=j("natal"),[c,d]=j("9"),[u,m]=j("子"),[b,v]=j("午"),[y,w]=j("assess"),[T,S]=j("李"),[O,ee]=j(""),[F,C]=j("6"),[V,R]=j(!1),[L,I]=j(""),[f,ne]=j(null),[ue,U]=j(""),[Te,z]=j(""),[N,E]=j(null),[le,ge]=j(()=>cn()),[se,ze]=j(()=>Dt(hi)==="flat"?"flat":"group"),[Be,q]=j(()=>{const a=Dt(bi);return Array.isArray(a)?a:[]}),[ae,Z]=j({}),[be,fe]=j(null),[Se,H]=j(()=>D.profilesLoad()),[Ne,x]=j(null),[_,ve]=j(""),[re,je]=j(""),[Ee,he]=j(""),[Yt,We]=j(!1),[pt,Ni]=j("three"),[ma,Kt]=j(""),[Ge,qi]=j("general");function Jt(){return da.trim()||(f&&ea(f.kind)?String(ma||"").trim():"")}ja(()=>{f&&f.r&&(Ke.r=f.r,Ke.q=Jt(),Ke.it=f.it||null)},[f,da,ma]);const[Mi,Tn]=j(null),[Ci,En]=j(Dt(fi)===!0),[_n,St]=j(!1),[wa,Ai]=j("time"),[Nt,Li]=j(""),[qt,Ti]=j(""),[Mt,Ei]=j(""),[On,$a]=j(""),[Xt,Ct]=j({birth:null,cast:null}),Hn=Ye.find(a=>a.k===n)||Ye[0],rt=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ue=Na(n),_i=!(n==="meihua"&&wa==="number"),Oi=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&_i,Hi=Oi&&Ue!=="date",Cs=Hi,Ae=async(a,g,$,M)=>{const h=a||n,me=$||wa,Me=h==="bazi"||h==="trend",Qe=M&&typeof M.hourUnknown=="boolean"?M.hourUnknown:ce,qe=g||(Me&&Qe?{date:k,time:"12:00"}:{date:k,time:Q}),Ze=M&&M.gender?M.gender:ye,ka=M&&typeof M.address=="string"?M.address:$e,lt=M&&typeof M.trueSolar=="boolean"?M.trueSolar:Xe,Ka=M&&typeof M.lateZi=="boolean"?M.lateZi:la,en=M&&typeof M.lines=="string"?M.lines:L,Et=M&&typeof M.question=="string"?M.question:ma,an=Va(),tn=++Oe,dt=()=>tn!==Oe;E(null),he("");try{let za=0,nn=null;We(!0);try{await mt(h);const Y=window.__MP_LAST_LOAD;za=Y&&typeof Y.ms=="number"?Y.ms:Va()-an,nn=Y&&typeof Y.cached=="boolean"?Y.cached:null}catch(Y){if(dt())return;je(Y&&Y.message?Y.message:String(Y)),ne(null);return}finally{dt()||We(!1)}if(dt())return;const sn=`${qe.date}T${qe.time}`,A={system:h};if(A.shadow=h!=="mbti"&&h!=="constitution",A.trace=h==="liuyao"||h==="bazi"||h==="ziwei"||h==="qimen"||h==="daliuren",h!=="tarot"&&(A.datetime=sn),h==="bazi"||h==="ziwei"||h==="hepan"||h==="trend"){if(A.gender=Ze,A.trueSolar=lt,ka.trim()){A.address=ka.trim();try{const Y=await J.geocodeAddress(A.address,{online:V});Y&&typeof Y.lon=="number"&&(A.longitude=Y.lon,A.geo=Y)}catch(Y){console.error("[metaphysics] 地址解析失败,退回内置表",Y)}if(dt())return}(h==="bazi"||h==="ziwei")&&(A.cross=et),A.lateZi=Ka,Me&&Qe&&(A.hourUnknown=!0)}if(h==="liuyao"){const Y=Fe.parseLines(en);Y.lines?A.lines=Y.lines:Y.warning&&he(Y.warning)}if(h==="qimen"&&(A.juMethod=ra,A.lateZiHourMode=Ea,A.direction=Ge),h==="bazi"&&(A.verifyPast=6),h==="zeri"){A.startDate=qe.date,A.task=Pa,A.days=Number(ca)||30,Ve&&(A.shengXiao=Ve);const Y=xa.split(/[,,、\s]+/).filter(Boolean);Y.length&&(A.candidates=Y)}if(h==="xiaoliuren")if(A.mode=Re,Re==="number")A.num1=Number(Ra)||void 0,A.num2=Number(Ia)||void 0,A.num3=Number(ya)||void 0;else{A.date=qe.date;const Y=Number(String(qe.time).split(":")[0]);A.hour=Number.isFinite(Y)?Y:12}if(h==="mbti"){delete A.datetime;const Y=Ga.slice();for(;Y.length&&Y[Y.length-1]==null;)Y.pop();Y.length&&(A.answers=Y)}if(h==="constitution"&&(delete A.datetime,A.answers=Ya.slice()),h==="trend"&&Me&&Qe&&(A.hourUnknown=!0),h==="trend"&&(A.toAge=Number(i)||60),h==="fengshui"&&(A.action=l,l==="natal"?A.gender=Ze:(A.sitting=u,A.facing=b,delete A.datetime,l==="xuankong"&&(A.period=Number(c)||9))),h==="name"&&(A.action=y,A.surname=T.trim(),y==="generate"?(A.gender=Ze,A.limit=Number(F)||6,A.trueSolar=lt,A.lateZi=Ka):(A.givenName=O.trim(),(!qe.date||!qe.time)&&delete A.datetime)),h==="convert")if(A.system="convert",He==="lunar2solar"){const Y=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(va).trim());if(!Y){je("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}A.mode="lunar2solar",A.lunarYear=Number(Y[1]),A.lunarMonth=Number(Y[2]),A.lunarDay=Number(Y[3]),A.isLeapMonth=Da,delete A.datetime}else A.mode="solar2lunar";if(h==="tarot"&&(A.spread=pt),h==="hepan"&&(A.chart=Le,A.partner={datetime:`${xe}T${K}`,gender:W,address:ie.trim()||void 0,trueSolar:Xe},Je&&(A.partner2={datetime:`${qa}T${Ma}`,gender:fa,address:Aa.trim()||void 0,trueSolar:Xe})),ea(h)){if(!Et.trim()){je("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),St(!0),ne(null);return}St(!1),A.question=Et.trim(),h==="liuyao"&&(A.direction=Ge)}if(h==="meihua"&&(A.mode=me,me==="number")){if(Nt.trim()===""||qt.trim()===""){je("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),ne(null);return}if(A.upper=Number(Nt),A.lower=Number(qt),!Number.isFinite(A.upper)||!Number.isFinite(A.lower)){je("两个数都要是数字,例如 17 和 29。"),ne(null);return}Mt!==""&&(A.changing=Number(Mt))}const zs=Va();h==="trend"&&!A.asOf&&Fe.todayStamp&&(A.asOf=Fe.todayStamp());const Ja=J.compute(A),js=Va()-zs;let ai=null;try{ai=D.shadowTrack?D.shadowTrack(Ja):null}catch{ai=null}let ti=null;if(h==="bazi"&&!Qe&&J.buildChenggu)try{ti=J.buildChenggu({year:Number(qe.date.slice(0,4)),month:Number(qe.date.slice(5,7)),day:Number(qe.date.slice(8,10)),hour:Number(qe.time.slice(0,2)),minute:Number(qe.time.slice(3,5)),lateZi:Ka})}catch{ti=null}let ii=null;if(h==="bazi")try{ii=J.compute({system:"trend",datetime:sn,gender:Ze,toAge:100,trueSolar:lt,lateZi:Ka,...Fe.todayStamp?{asOf:A.asOf||Fe.todayStamp()}:{},...A.dst!==void 0?{dst:A.dst}:{},...A.address?{address:A.address}:{},...typeof A.longitude=="number"?{longitude:A.longitude}:{},...A.geo?{geo:A.geo}:{}})}catch{ii=null}let ni=null;if(J.caliberCompare)try{ni=J.caliberCompare(A)}catch{ni=null}const Ss=ea(h)||h==="qimen"?{question:ea(h)?Et.trim():"",direction:Ge}:void 0,_t=J.interpret?J.interpret(Ja,Ss):null;_t&&Ja.cross&&J.crossSection&&(_t.sections=[..._t.sections||[],J.crossSection(Ja.cross)]);const Ns=Na(h)==="cast"&&(h!=="meihua"||me==="time");ne({kind:h,r:Ja,it:_t,at:qe,timed:Ns,trend:ii,caliber:ni,shadowDiff:ai,chenggu:ti,gender:Ze,address:ka,trueSolar:lt,lateZi:Ka});const on=Y=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Y>1?on(Y-1):pn()):setTimeout(pn,0)},pn=()=>{tn===Oe&&E({engineMs:za,computeMs:js,cached:nn,totalMs:Va()-an,renderMs:null})};if(on(2),at(null),ke(null),Ha({}),it(null),je(""),$a(""),h!=="tarot"&&h!=="mbti"&&h!=="constitution"){const Y=!!(Me&&Qe),si={kind:h,date:qe.date,time:Y?"":qe.time,hourUnknown:Y,gender:Ze,address:ka,trueSolar:lt,lateZi:Ka,lines:h==="liuyao"?en:"",question:ea(h)?Et.trim():"",direction:Ge,spread:pt,mhMode:me,upper:Nt,lower:qt,changing:Mt,...h==="qimen"?{qimenRule:ra,qLateZi:Ea}:{},...h==="zeri"?{task:Pa,days:ca,shengXiao:Ve,zCand:xa}:{},...h==="xiaoliuren"?{xlrMode:Re,num1:Ra,num2:Ia,num3:ya}:{},...h==="trend"?{toAge:i}:{},...h==="fengshui"?{fsMode:l,fsPeriod:c,sitting:u,facing:b}:{},...h==="name"?{nnMode:y,surname:T,givenName:O,limitN:F}:{},...h==="convert"?{convMode:He,lunarDate:va,leapMonth:Da}:{},...h==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:K,partnerGender:W,partnerAddress:ie,thirdOn:Je,p2Date:qa,p2Time:Ma,p2Gender:fa,p2Address:Aa}:{},label:un(h,Ja),at:Date.now()};ge(qs=>{const rn=[si,...qs.filter(Ms=>!mn(Ms,si))].slice(0,20);return ci(rn),rn}),h!=="tarot"&&h!=="mbti"&&h!=="constitution"&&(Ke.entry=si),Xi(!1)}}catch(za){if(dt())return;je(za&&za.message?za.message:String(za)),ne(null)}},Pn=async a=>{const g=Na(a),$=++Oe;if(je(""),a==="mbti"){he(""),We(!0);try{await mt(a)}catch(h){$===Oe&&je(h&&h.message?h.message:String(h))}finally{$===Oe&&We(!1)}if($!==Oe)return;s(a),Ga.filter(h=>h!=null).length>=sa?Ae(a):ne(null);return}if(a==="constitution"){he(""),We(!0);try{if(await mt(a),$===Oe&&!na){const h=J.compute({system:"constitution"});h&&h.paper&&zt(h)}}catch(h){$===Oe&&je(h&&h.message?h.message:String(h))}finally{$===Oe&&We(!1)}if($!==Oe)return;s(a),Ya.filter(h=>h!=null).length>=oa?Ae(a):ne(null);return}if(s(a),g==="none"){Ae(a);return}const M=Xt[g]||(g==="cast"||g==="date"?It():{date:vi.date,time:vi.time});P(M.date),pe(M.time),Ae(a,M)},Fn=a=>{Ye.some(g=>g.k===a)&&q(g=>{const $=(g||[]).filter(h=>h&&h.tab&&h.tab!==a),M=[{tab:a,at:Date.now()}].concat($).slice(0,xi);return Rt(bi,M),M})},Pi=a=>{const g=a==="flat"?"flat":"group";ze(g),Rt(hi,g)},At=a=>{Fn(a),Pn(a)},Dn=()=>{const a=!Ci;En(a),Rt(fi,a)},Rn=a=>{At(a)},In=a=>{P(a),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:{date:a,time:Q}}))},Bn=a=>{pe(a),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:{date:k,time:a}}))},As=()=>{const a=It();P(a.date),pe(a.time),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:null})),Ae(n,a)},Vt=()=>{if(n==="mbti"){const a=Ga.filter(g=>g!=null).length;if(a<sa){he(`先答满 ${sa} 题再看结果(现答 ${a} 题,还差 ${sa-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=Ya.filter(g=>g!=null).length;if(a<oa){he(`先答满 ${oa} 题再看结果(现答 ${a} 题,还差 ${oa-a} 题)。`);return}Ae(n);return}if(Ue!=="none"&&!Xt[Ue]){const a=It();P(a.date),pe(a.time),Ae(n,a);return}Ae(n)},Gn=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),B("河北石家庄"),Ct(g=>Object.assign({},g,{birth:a})),P(a.date),pe(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Fi=a=>{Ai(a),Ae(n,{date:k,time:Q},a)},Un=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Zn=()=>Mi===null?Un():Mi,Lt=(a,g,$)=>{if(!g)return;const M=me=>{a.textContent=me?"已复制":"复制失败",setTimeout(()=>{a.textContent=$},1400)},h=()=>{try{const me=document.createElement("textarea");me.value=g,me.setAttribute("readonly",""),me.style.position="fixed",me.style.opacity="0",document.body.appendChild(me),me.select();const Me=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(me),Me}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>M(!0),()=>M(h()));return}}catch{}M(h())},Yn=a=>Lt(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Kn=a=>Lt(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Jn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),$=g&&g.querySelector("[data-trace-md]");Lt(a,$?$.value:"","复制 Markdown")},Xn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Vn=()=>{if(!f||!f.r)return null;try{return J.askPackages?J.askPackages(f.r,{question:Jt(),interpret:f.it,base:Xn()}):null}catch{return null}},Di=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Wn=(a,g)=>{const $=Vn();if(!$){_e("还没有可以复制的盘:先排一张。");return}const M=a==="link"?$.link:$[a];if(!M){_e(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Lt(g,M,Di.find(h=>h[0]===a)[1]),a==="link"&&_e("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Qn=()=>{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()},Ri=()=>{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()},es=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Yn(g);return}const $=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if($){Kn($);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Qn();return}const h=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(h){Jn(h);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){is();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Ri();return}const Qe=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!Qe)return;const qe=Qe.closest(".mp-it");if(!qe)return;const Ze=!qe.classList.contains("folded");qe.classList.toggle("folded",Ze),Qe.setAttribute("aria-expanded",Ze?"false":"true");const ka=Qe.querySelector(".mp-it-hint");ka&&(ka.textContent=Ze?"点击展开":"点击收起"),Tn(Ze)},Ii=(a,g)=>{if(!f||!(ea(n)||n==="qimen"))return;const $={question:ea(n)?(g===void 0?ma:g).trim():"",direction:a===void 0?Ge:a},M=J.interpret?J.interpret(f.r,$):null;let h=f.r;if((n==="liuyao"||n==="qimen")&&h&&h.trace&&J.buildTrace)try{const me=n==="liuyao"?J.buildTrace(h,{direction:$.direction,gender:h.useGod&&h.useGod.gender||"male",refresh:!0}):J.buildTrace(h,{direction:$.direction});me&&(h=Object.assign({},h,{trace:me}))}catch{}ne(Object.assign({},f,{r:h,it:M}))},as=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,ts=()=>{try{const a=f&&f.r&&f.r.summary?f.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>$a("已复制"),()=>$a("复制失败"))}catch{$a("复制失败")}},is=()=>{if(!f||!f.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Fe&&Fe.kindOfDirection?Fe.kindOfDirection(Ge):"other";let g;try{g=window.Engine.buildEventPrompt(f.r,{question:(ma||"").trim(),kind:a,gender:ye,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>$a("已复制问事提示"),()=>$a("复制失败"))},Bi=()=>{if(!(!f||!f.r||!da.trim()))try{at(J.followup?J.followup(f.r,da.trim()):null)}catch(a){at({question:da.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Gi=()=>{if(!(!f||!f.r))try{const a=J.askPrompt?J.askPrompt(f.r,{question:Jt(),interpret:f.it}):null,g=a&&a.text?a.text:String(f.r.summary||"");if(ji(g)){_e("已发到对话窗,往下看回复。");return}const $="("+yi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>_e("对话输入框还没就绪"+$+",已复制提问;粘进对话窗回车即可。"),()=>_e("对话输入框还没就绪"+$+",复制也没成功;先点「复制文字结果」再贴。")):_e("对话输入框还没就绪"+$+";先点「复制文字结果」再贴进对话窗。")}catch(a){_e("发到对话窗失败:"+(a&&a.message?a.message:a))}},ns=()=>{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 $=Ye.find(h=>h.k===n)?.label||n;if(a.push("- 体系:"+$+($===n?"":"("+n+")")),ma&&a.push("- 所问之事:"+ma),Ge&&Ge!=="general"){const h=(Array.isArray(J.DIRECTIONS)?J.DIRECTIONS:[]).find(me=>me.key===Ge);a.push("- 询问方向:"+(h?h.label:Ge))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(Na(n)==="time"||Na(n)==="date")&&(a.push(`日期:${k}`),Na(n)==="time"&&a.push(`时刻:${ce?"(未知,按三柱排)":Q}`),a.push(`性别:${ye==="male"?"男":"女"}`),$e&&a.push(`出生地:${$e}`),a.push(`真太阳时:${Xe?"开":"关"} 晚子时换日:${la?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${ra}`),et&&a.push("交叉验证:开"));const M={合盘:()=>{a.push(`对方:${xe} ${K} ${W==="male"?"男":"女"}${ie?" "+ie:""}(${Le} 盘)`),Je&&a.push(`第三方:${qa} ${Ma} ${fa==="male"?"男":"女"}${Aa?" "+Aa:""}`)},择日:()=>{a.push(`事项:${Pa} 起算:${k} 天数:${ca}${Ve?" 属相:"+Ve:""}${xa?" 候选日:"+xa:""}`)},起名:()=>{a.push(`姓:${T||"(未填)"} 名:${O||"(未填)"} 模式:${y}${y==="generate"?" 候选数:"+(F||"默认"):""}`)},公农历:()=>{a.push(`模式:${He}${va?" 农历输入:"+va:""}${Da?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${Re}${Re==="number"?` 报数:${Ra}/${Ia}/${ya}`:""}`)},风水:()=>{a.push(`动作:${l}${l==="natal"?"":` 坐:${u} 向:${b}`}${l==="xuankong"?` 运:${c}`:""}`)}};if(M[$]&&M[$](),a.push("```"),a.push(""),re&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(re)),a.push("```"),a.push("")),f&&f.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const h=String(f.r.summary||(J.renderText?J.renderText(f.r):"")||"");a.push(h.split(`
2643
+ `+k),r("div",{className:"mp-lbl"},"环境:__PP "+typeof D+" · Engine "+typeof window.Engine+" · React "+typeof Va+" · 版本 "+(typeof D=="object"&&D&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function wn(n){const s=n&&n.size?n.size:20,k=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:k?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 Ye=[{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:"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 Sa(n){return String(n).padStart(2,"0")}const Ft=["almanac","convert","zeri","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],gi=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],fi="mp.cast.open",$n=Array.isArray(window.__MPGroups)?window.__MPGroups:[],bi="mp.recent.tabs",hi="mp.first.view",xi=3;function Dt(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Rt(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function kn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const k=Q=>new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()).getTime(),P=Math.round((k(new Date)-k(s))/864e5);return P<=0?"今天":P===1?"昨天":`${Sa(s.getMonth()+1)}-${Sa(s.getDate())}`}function It(){const n=new Date;return{date:`${n.getFullYear()}-${Sa(n.getMonth()+1)}-${Sa(n.getDate())}`,time:`${Sa(n.getHours())}:${Sa(n.getMinutes())}`}}const zn={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",trend:"birth",fengshui:"birth",name:"birth",xiaoliuren:"cast",mbti:"none",constitution:"none",wuyunliuqi:"date",taiyi:"date"},vi={date:"1990-05-12",time:"14:30"},Na=n=>zn[n]||"none",Fe=window.__MPCore||{},ea=Fe.needAsk||(n=>!1),te={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Ke={r:null,q:"",it:null,entry:null};let pa="";function yi(){const n=[];return n.push("inputActions "+(te.ref?"已拿到":"未拿到")),n.push("渲染 "+te.mounted+" 次"),n.push("注册 "+te.regs+" 次"),n.push("inject "+(te.injectType||"?")),n.push("槽位 "+(te.spec||"?")),te.contribution&&n.push("贡献 "+te.contribution),te.errs.length&&n.push("错误:"+te.errs.join(" / ")),"桥自检:"+n.join(";")}function wi(n){if(te.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);te.errs.push(s.slice(0,90))}function jn(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const k=n.actions&&n.actions.input;return k&&typeof k.setDraft=="function"&&typeof k.submit=="function"?k:null}function $i(n,s){const k=jn(n);return ja(()=>{if(te.seats.indexOf(s)<0&&te.seats.push(s),te.keys=n?Object.keys(n).join(","):"",k){te.ref=k;try{window.__MPComposer=k}catch{}}return()=>{te.ref===k&&(te.ref=null)}},[k,s]),k}function Sn(){const n=Ke.r;if(!n)return"";try{const s=K.askPrompt?K.askPrompt(n,{question:Ke.q,interpret:Ke.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function ki(n){return te.mounted+=1,$i(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:Ke.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「烛微命盘」里排一张盘",onClick:()=>{const k=Sn();k&&ji(k)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function zi(n){return te.mounted+=1,$i(n,"composer.dock"),null}function ji(n){let s=te.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 Nn(n){const s=n.kind==="ziwei"?D.ziweiHTML(n.r):n.kind==="bazi"?D.baziHTML(n.r,{chenggu:n.chenggu})+(n.trend?D.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?D.meihuaHTML(n.r):n.kind==="daliuren"?D.daliurenHTML(n.r):n.kind==="qimen"?D.qimenHTML(n.r)+D.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?D.ziweiHepanHTML(n.r):D.hepanHTML(n.r):n.kind==="tarot"?D.tarotHTML(n.r):n.kind==="liuyao"?D.liuyaoHTML(n.r):n.kind==="almanac"?D.almanacHTML(n.r):n.kind==="zeri"?D.zeriHTML(n.r):n.kind==="trend"?D.trendHTML(n.r):n.kind==="name"?D.nameHTML(n.r):n.kind==="mbti"?D.mbtiHTML(n.r):n.kind==="constitution"?D.constitutionHTML(n.r):n.kind==="wuyunliuqi"?D.wuyunliuqiHTML(n.r):n.kind==="taiyi"?D.taiyiHTML(n.r):n.kind==="fengshui"?D.fengshuiHTML(n.r):D.quickHTML(n.r),k=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,P=k<0?s:s.slice(k+10),Q=k<0?"":s.slice(0,k+10);return P+D.plainHTML(n.r)+Q}function qn(n){const s=!!n.open,k=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?"六个占卜体系,点一下就起":gi.map(P=>P.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},k,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},gi.map(P=>r("button",{key:P.sys,type:"button",className:"mp-castchip"+(n.tab===P.sys?" on":""),"data-cast":P.sys,"aria-pressed":n.tab===P.sys?"true":"false",title:P.tip,onClick:()=>n.onCast(P.sys)},P.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"},k)}function Mn(){const[n,s]=j("ziwei"),[k,P]=j("1990-05-12"),[Q,pe]=j("14:30"),[ce,de]=j(!1),[ye,t]=j("female"),[ke,B]=j(""),[xe,we]=j("1992-08-15"),[J,X]=j("10:00"),[W,G]=j("female"),[ie,Ce]=j(""),[Le,ua]=j("bazi"),[Je,ht]=j(!1),[qa,et]=j("1990-01-01"),[Ma,ga]=j("12:00"),[fa,Ca]=j("male"),[Aa,xt]=j(""),[ra,ba]=j("chaibu"),[Xe,La]=j(!0),[la,Ta]=j(!0),[Ea,at]=j("same-day"),[tt,Gt]=j(!1),[da,Ut]=j(""),[_a,_e]=j(""),[Oa,it]=j(null),[nt,Ha]=j({}),[ha,ze]=j(null),[aa,vt]=j([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[De,st]=j(null),[Pa,ot]=j("开业"),[ca,Fa]=j("30"),[Ve,pt]=j(""),[xa,ta]=j(""),[He,ia]=j("solar2lunar"),[va,yt]=j(""),[Da,wt]=j(!1),[Re,rt]=j("time"),[Ra,$t]=j(""),[Ia,Ba]=j(""),[ya,kt]=j(""),[Ga,Pe]=j(()=>new Array(bt().total).fill(null)),[Ua,Za]=j(0),[na,zt]=j(null),[Ya,jt]=j(()=>new Array(Pt).fill(null)),[Zt,e]=j(0),[i,p]=j("60"),[l,o]=j("natal"),[c,d]=j("9"),[u,m]=j("子"),[b,v]=j("午"),[y,w]=j("assess"),[T,S]=j("李"),[O,ee]=j(""),[F,C]=j("6"),[V,R]=j(!1),[L,I]=j(""),[f,ne]=j(null),[ue,U]=j(""),[Te,z]=j(""),[N,E]=j(null),[re,ge]=j(()=>cn()),[se,je]=j(()=>Dt(hi)==="flat"?"flat":"group"),[Be,q]=j(()=>{const a=Dt(bi);return Array.isArray(a)?a:[]}),[ae,Y]=j({}),[be,fe]=j(null),[Se,H]=j(()=>D.profilesLoad()),[Ne,h]=j(null),[_,ve]=j(""),[le,$e]=j(""),[Ee,he]=j(""),[Yt,We]=j(!1),[lt,Ni]=j("three"),[ma,Kt]=j(""),[Ge,qi]=j("general");function Jt(){return da.trim()||(f&&ea(f.kind)?String(ma||"").trim():"")}ja(()=>{f&&f.r&&(Ke.r=f.r,Ke.q=Jt(),Ke.it=f.it||null)},[f,da,ma]);const[Mi,Tn]=j(null),[Ci,En]=j(Dt(fi)===!0),[_n,St]=j(!1),[wa,Ai]=j("time"),[Nt,Li]=j(""),[qt,Ti]=j(""),[Mt,Ei]=j(""),[On,$a]=j(""),[Xt,Ct]=j({birth:null,cast:null}),Hn=Ye.find(a=>a.k===n)||Ye[0],dt=n==="bazi"||n==="ziwei"||n==="hepan"||n==="trend"||n==="fengshui"||n==="name",Ue=Na(n),_i=!(n==="meihua"&&wa==="number"),Oi=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&_i,Hi=Oi&&Ue!=="date",Cs=Hi,Ae=async(a,g,$,M)=>{const x=a||n,me=$||wa,Me=x==="bazi"||x==="trend",Qe=M&&typeof M.hourUnknown=="boolean"?M.hourUnknown:ce,qe=g||(Me&&Qe?{date:k,time:"12:00"}:{date:k,time:Q}),Ze=M&&M.gender?M.gender:ye,ka=M&&typeof M.address=="string"?M.address:ke,ct=M&&typeof M.trueSolar=="boolean"?M.trueSolar:Xe,Ka=M&&typeof M.lateZi=="boolean"?M.lateZi:la,en=M&&typeof M.lines=="string"?M.lines:L,Et=M&&typeof M.question=="string"?M.question:ma,an=Wa(),tn=++Oe,Ja=()=>tn!==Oe;E(null),he("");try{let za=0,nn=null;We(!0);try{await Qa(x);const Z=window.__MP_LAST_LOAD;za=Z&&typeof Z.ms=="number"?Z.ms:Wa()-an,nn=Z&&typeof Z.cached=="boolean"?Z.cached:null}catch(Z){if(Ja())return;$e(Z&&Z.message?Z.message:String(Z)),ne(null);return}finally{Ja()||We(!1)}if(Ja())return;const sn=`${qe.date}T${qe.time}`,A={system:x};if(A.shadow=x!=="mbti"&&x!=="constitution",A.trace=x==="liuyao"||x==="bazi"||x==="ziwei"||x==="qimen"||x==="daliuren",x!=="tarot"&&(A.datetime=sn),x==="bazi"||x==="ziwei"||x==="hepan"||x==="trend"){if(A.gender=Ze,A.trueSolar=ct,ka.trim()){A.address=ka.trim();try{const Z=await K.geocodeAddress(A.address,{online:V});Z&&typeof Z.lon=="number"&&(A.longitude=Z.lon,A.geo=Z)}catch(Z){console.error("[metaphysics] 地址解析失败,退回内置表",Z)}if(Ja())return}(x==="bazi"||x==="ziwei")&&(A.cross=tt),A.lateZi=Ka,Me&&Qe&&(A.hourUnknown=!0)}if(x==="liuyao"){const Z=Fe.parseLines(en);Z.lines?A.lines=Z.lines:Z.warning&&he(Z.warning)}if(x==="qimen"&&(A.juMethod=ra,A.lateZiHourMode=Ea,A.direction=Ge),x==="bazi"&&(A.verifyPast=6),x==="zeri"){A.startDate=qe.date,A.task=Pa,A.days=Number(ca)||30,Ve&&(A.shengXiao=Ve);const Z=xa.split(/[,,、\s]+/).filter(Boolean);Z.length&&(A.candidates=Z)}if(x==="xiaoliuren")if(A.mode=Re,Re==="number")A.num1=Number(Ra)||void 0,A.num2=Number(Ia)||void 0,A.num3=Number(ya)||void 0;else{A.date=qe.date;const Z=Number(String(qe.time).split(":")[0]);A.hour=Number.isFinite(Z)?Z:12}if(x==="mbti"){delete A.datetime;const Z=Ga.slice();for(;Z.length&&Z[Z.length-1]==null;)Z.pop();Z.length&&(A.answers=Z)}if(x==="constitution"&&(delete A.datetime,A.answers=Ya.slice()),x==="trend"&&Me&&Qe&&(A.hourUnknown=!0),x==="trend"&&(A.toAge=Number(i)||60),x==="fengshui"&&(A.action=l,l==="natal"?A.gender=Ze:(A.sitting=u,A.facing=b,delete A.datetime,l==="xuankong"&&(A.period=Number(c)||9))),x==="name"&&(A.action=y,A.surname=T.trim(),y==="generate"?(A.gender=Ze,A.limit=Number(F)||6,A.trueSolar=ct,A.lateZi=Ka):(A.givenName=O.trim(),(!qe.date||!qe.time)&&delete A.datetime)),x==="convert")if(A.system="convert",He==="lunar2solar"){const Z=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(va).trim());if(!Z){$e("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}A.mode="lunar2solar",A.lunarYear=Number(Z[1]),A.lunarMonth=Number(Z[2]),A.lunarDay=Number(Z[3]),A.isLeapMonth=Da,delete A.datetime}else A.mode="solar2lunar";if(x==="tarot"&&(A.spread=lt),x==="hepan"&&(A.chart=Le,A.partner={datetime:`${xe}T${J}`,gender:W,address:ie.trim()||void 0,trueSolar:Xe},Je&&(A.partner2={datetime:`${qa}T${Ma}`,gender:fa,address:Aa.trim()||void 0,trueSolar:Xe})),ea(x)){if(!Et.trim()){$e("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),St(!0),ne(null);return}St(!1),A.question=Et.trim(),x==="liuyao"&&(A.direction=Ge)}if(x==="meihua"&&(A.mode=me,me==="number")){if(Nt.trim()===""||qt.trim()===""){$e("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),ne(null);return}if(A.upper=Number(Nt),A.lower=Number(qt),!Number.isFinite(A.upper)||!Number.isFinite(A.lower)){$e("两个数都要是数字,例如 17 和 29。"),ne(null);return}Mt!==""&&(A.changing=Number(Mt))}const zs=Wa();x==="trend"&&!A.asOf&&Fe.todayStamp&&(A.asOf=Fe.todayStamp());const Xa=K.compute(A),js=Wa()-zs;let ai=null;try{ai=D.shadowTrack?D.shadowTrack(Xa):null}catch{ai=null}let ti=null;if(x==="bazi"&&!Qe){if(!K.buildChenggu){try{await Qa("chenggu")}catch{}if(Ja())return}if(K.buildChenggu)try{ti=K.buildChenggu({year:Number(qe.date.slice(0,4)),month:Number(qe.date.slice(5,7)),day:Number(qe.date.slice(8,10)),hour:Number(qe.time.slice(0,2)),minute:Number(qe.time.slice(3,5)),lateZi:Ka})}catch{ti=null}}let ii=null;if(x==="bazi")try{ii=K.compute({system:"trend",datetime:sn,gender:Ze,toAge:100,trueSolar:ct,lateZi:Ka,...Fe.todayStamp?{asOf:A.asOf||Fe.todayStamp()}:{},...A.dst!==void 0?{dst:A.dst}:{},...A.address?{address:A.address}:{},...typeof A.longitude=="number"?{longitude:A.longitude}:{},...A.geo?{geo:A.geo}:{}})}catch{ii=null}let ni=null;if(K.caliberCompare)try{ni=K.caliberCompare(A)}catch{ni=null}const Ss=ea(x)||x==="qimen"?{question:ea(x)?Et.trim():"",direction:Ge}:void 0,_t=K.interpret?K.interpret(Xa,Ss):null;_t&&Xa.cross&&K.crossSection&&(_t.sections=[..._t.sections||[],K.crossSection(Xa.cross)]);const Ns=Na(x)==="cast"&&(x!=="meihua"||me==="time");ne({kind:x,r:Xa,it:_t,at:qe,timed:Ns,trend:ii,caliber:ni,shadowDiff:ai,chenggu:ti,gender:Ze,address:ka,trueSolar:ct,lateZi:Ka});const on=Z=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Z>1?on(Z-1):pn()):setTimeout(pn,0)},pn=()=>{tn===Oe&&E({engineMs:za,computeMs:js,cached:nn,totalMs:Wa()-an,renderMs:null})};if(on(2),it(null),ze(null),Ha({}),st(null),$e(""),$a(""),x!=="tarot"&&x!=="mbti"&&x!=="constitution"){const Z=!!(Me&&Qe),si={kind:x,date:qe.date,time:Z?"":qe.time,hourUnknown:Z,gender:Ze,address:ka,trueSolar:ct,lateZi:Ka,lines:x==="liuyao"?en:"",question:ea(x)?Et.trim():"",direction:Ge,spread:lt,mhMode:me,upper:Nt,lower:qt,changing:Mt,...x==="qimen"?{qimenRule:ra,qLateZi:Ea}:{},...x==="zeri"?{task:Pa,days:ca,shengXiao:Ve,zCand:xa}:{},...x==="xiaoliuren"?{xlrMode:Re,num1:Ra,num2:Ia,num3:ya}:{},...x==="trend"?{toAge:i}:{},...x==="fengshui"?{fsMode:l,fsPeriod:c,sitting:u,facing:b}:{},...x==="name"?{nnMode:y,surname:T,givenName:O,limitN:F}:{},...x==="convert"?{convMode:He,lunarDate:va,leapMonth:Da}:{},...x==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:J,partnerGender:W,partnerAddress:ie,thirdOn:Je,p2Date:qa,p2Time:Ma,p2Gender:fa,p2Address:Aa}:{},label:un(x,Xa),at:Date.now()};ge(qs=>{const rn=[si,...qs.filter(Ms=>!mn(Ms,si))].slice(0,20);return ci(rn),rn}),x!=="tarot"&&x!=="mbti"&&x!=="constitution"&&(Ke.entry=si),Xi(!1)}}catch(za){if(Ja())return;$e(za&&za.message?za.message:String(za)),ne(null)}},Pn=async a=>{const g=Na(a),$=++Oe;if($e(""),a==="mbti"){he(""),We(!0);try{await Qa(a)}catch(x){$===Oe&&$e(x&&x.message?x.message:String(x))}finally{$===Oe&&We(!1)}if($!==Oe)return;s(a),Ga.filter(x=>x!=null).length>=sa?Ae(a):ne(null);return}if(a==="constitution"){he(""),We(!0);try{if(await Qa(a),$===Oe&&!na){const x=K.compute({system:"constitution"});x&&x.paper&&zt(x)}}catch(x){$===Oe&&$e(x&&x.message?x.message:String(x))}finally{$===Oe&&We(!1)}if($!==Oe)return;s(a),Ya.filter(x=>x!=null).length>=oa?Ae(a):ne(null);return}if(s(a),g==="none"){Ae(a);return}const M=Xt[g]||(g==="cast"||g==="date"?It():{date:vi.date,time:vi.time});P(M.date),pe(M.time),Ae(a,M)},Fn=a=>{Ye.some(g=>g.k===a)&&q(g=>{const $=(g||[]).filter(x=>x&&x.tab&&x.tab!==a),M=[{tab:a,at:Date.now()}].concat($).slice(0,xi);return Rt(bi,M),M})},Pi=a=>{const g=a==="flat"?"flat":"group";je(g),Rt(hi,g)},At=a=>{Fn(a),Pn(a)},Dn=()=>{const a=!Ci;En(a),Rt(fi,a)},Rn=a=>{At(a)},In=a=>{P(a),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:{date:a,time:Q}}))},Bn=a=>{pe(a),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:{date:k,time:a}}))},As=()=>{const a=It();P(a.date),pe(a.time),Ue!=="none"&&Ct(g=>Object.assign({},g,{[Ue]:null})),Ae(n,a)},Vt=()=>{if(n==="mbti"){const a=Ga.filter(g=>g!=null).length;if(a<sa){he(`先答满 ${sa} 题再看结果(现答 ${a} 题,还差 ${sa-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=Ya.filter(g=>g!=null).length;if(a<oa){he(`先答满 ${oa} 题再看结果(现答 ${a} 题,还差 ${oa-a} 题)。`);return}Ae(n);return}if(Ue!=="none"&&!Xt[Ue]){const a=It();P(a.date),pe(a.time),Ae(n,a);return}Ae(n)},Gn=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),B("河北石家庄"),Ct(g=>Object.assign({},g,{birth:a})),P(a.date),pe(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Fi=a=>{Ai(a),Ae(n,{date:k,time:Q},a)},Un=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Zn=()=>Mi===null?Un():Mi,Lt=(a,g,$)=>{if(!g)return;const M=me=>{a.textContent=me?"已复制":"复制失败",setTimeout(()=>{a.textContent=$},1400)},x=()=>{try{const me=document.createElement("textarea");me.value=g,me.setAttribute("readonly",""),me.style.position="fixed",me.style.opacity="0",document.body.appendChild(me),me.select();const Me=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(me),Me}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>M(!0),()=>M(x()));return}}catch{}M(x())},Yn=a=>Lt(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Kn=a=>Lt(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Jn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),$=g&&g.querySelector("[data-trace-md]");Lt(a,$?$.value:"","复制 Markdown")},Xn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Vn=()=>{if(!f||!f.r)return null;try{return K.askPackages?K.askPackages(f.r,{question:Jt(),interpret:f.it,base:Xn()}):null}catch{return null}},Di=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Wn=(a,g)=>{const $=Vn();if(!$){_e("还没有可以复制的盘:先排一张。");return}const M=a==="link"?$.link:$[a];if(!M){_e(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Lt(g,M,Di.find(x=>x[0]===a)[1]),a==="link"&&_e("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Qn=()=>{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()},Ri=()=>{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()},es=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Yn(g);return}const $=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if($){Kn($);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Qn();return}const x=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(x){Jn(x);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){is();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Ri();return}const Qe=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!Qe)return;const qe=Qe.closest(".mp-it");if(!qe)return;const Ze=!qe.classList.contains("folded");qe.classList.toggle("folded",Ze),Qe.setAttribute("aria-expanded",Ze?"false":"true");const ka=Qe.querySelector(".mp-it-hint");ka&&(ka.textContent=Ze?"点击展开":"点击收起"),Tn(Ze)},Ii=(a,g)=>{if(!f||!(ea(n)||n==="qimen"))return;const $={question:ea(n)?(g===void 0?ma:g).trim():"",direction:a===void 0?Ge:a},M=K.interpret?K.interpret(f.r,$):null;let x=f.r;if((n==="liuyao"||n==="qimen")&&x&&x.trace&&K.buildTrace)try{const me=n==="liuyao"?K.buildTrace(x,{direction:$.direction,gender:x.useGod&&x.useGod.gender||"male",refresh:!0}):K.buildTrace(x,{direction:$.direction});me&&(x=Object.assign({},x,{trace:me}))}catch{}ne(Object.assign({},f,{r:x,it:M}))},as=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,ts=()=>{try{const a=f&&f.r&&f.r.summary?f.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>$a("已复制"),()=>$a("复制失败"))}catch{$a("复制失败")}},is=()=>{if(!f||!f.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Fe&&Fe.kindOfDirection?Fe.kindOfDirection(Ge):"other";let g;try{g=window.Engine.buildEventPrompt(f.r,{question:(ma||"").trim(),kind:a,gender:ye,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>$a("已复制问事提示"),()=>$a("复制失败"))},Bi=()=>{if(!(!f||!f.r||!da.trim()))try{it(K.followup?K.followup(f.r,da.trim()):null)}catch(a){it({question:da.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Gi=()=>{if(!(!f||!f.r))try{const a=K.askPrompt?K.askPrompt(f.r,{question:Jt(),interpret:f.it}):null,g=a&&a.text?a.text:String(f.r.summary||"");if(ji(g)){_e("已发到对话窗,往下看回复。");return}const $="("+yi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>_e("对话输入框还没就绪"+$+",已复制提问;粘进对话窗回车即可。"),()=>_e("对话输入框还没就绪"+$+",复制也没成功;先点「复制文字结果」再贴。")):_e("对话输入框还没就绪"+$+";先点「复制文字结果」再贴进对话窗。")}catch(a){_e("发到对话窗失败:"+(a&&a.message?a.message:a))}},ns=()=>{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 x=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];x.length&&a.push("- 未发版改动:"+x.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const $=Ye.find(x=>x.k===n)?.label||n;if(a.push("- 体系:"+$+($===n?"":"("+n+")")),ma&&a.push("- 所问之事:"+ma),Ge&&Ge!=="general"){const x=(Array.isArray(K.DIRECTIONS)?K.DIRECTIONS:[]).find(me=>me.key===Ge);a.push("- 询问方向:"+(x?x.label:Ge))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(Na(n)==="time"||Na(n)==="date")&&(a.push(`日期:${k}`),Na(n)==="time"&&a.push(`时刻:${ce?"(未知,按三柱排)":Q}`),a.push(`性别:${ye==="male"?"男":"女"}`),ke&&a.push(`出生地:${ke}`),a.push(`真太阳时:${Xe?"开":"关"} 晚子时换日:${la?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${ra}`),tt&&a.push("交叉验证:开"));const M={合盘:()=>{a.push(`对方:${xe} ${J} ${W==="male"?"男":"女"}${ie?" "+ie:""}(${Le} 盘)`),Je&&a.push(`第三方:${qa} ${Ma} ${fa==="male"?"男":"女"}${Aa?" "+Aa:""}`)},择日:()=>{a.push(`事项:${Pa} 起算:${k} 天数:${ca}${Ve?" 属相:"+Ve:""}${xa?" 候选日:"+xa:""}`)},起名:()=>{a.push(`姓:${T||"(未填)"} 名:${O||"(未填)"} 模式:${y}${y==="generate"?" 候选数:"+(F||"默认"):""}`)},公农历:()=>{a.push(`模式:${He}${va?" 农历输入:"+va:""}${Da?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${Re}${Re==="number"?` 报数:${Ra}/${Ia}/${ya}`:""}`)},风水:()=>{a.push(`动作:${l}${l==="natal"?"":` 坐:${u} 向:${b}`}${l==="xuankong"?` 运:${c}`:""}`)}};if(M[$]&&M[$](),a.push("```"),a.push(""),le&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(le)),a.push("```"),a.push("")),f&&f.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const x=String(f.r.summary||(K.renderText?K.renderText(f.r):"")||"");a.push(x.split(`
2632
2644
  `).slice(0,40).join(`
2633
2645
  `)),a.push("```"),f.r.handle&&(a.push(""),a.push("排盘句柄(开发者可据此复现同一张盘):`"+f.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(`
2634
- `)},Ui=()=>{const a=ns();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{U("已复制"),z("粘到 issue / 邮件 / 群里即可")}).catch(()=>{U("复制失败"),z("可改用「导出 .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 $=document.execCommand&&document.execCommand("copy");g.remove(),U($?"已复制":"复制失败"),z($?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{U("复制失败"),z("可改用「导出 .md」")}setTimeout(()=>{U(""),z("")},4e3)},ss=()=>{try{Ui()}catch{}const a=encodeURIComponent("[反馈] "+(Ye.find(g=>g.k===n)?.label||n)+(re?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{z("浏览器拦了弹窗,请手动打开 GitHub issues")}},os=()=>{if(!(!f||!f.r))try{const a=J.renderText?J.renderText(f.r):f.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),$=document.createElement("a");$.href=URL.createObjectURL(g),$.download=`烛微命盘报告-${f.r.system}.md`,document.body.appendChild($),$.click(),$.remove(),setTimeout(()=>URL.revokeObjectURL($.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ps=()=>{if(!(!f||!f.r))try{const a=D.summaryCardPNG?D.summaryCardPNG(f.r,f.it):"";if(!a){$a("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`烛微命盘摘要-${f.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Zi={fontSize:12,padding:"5px 12px"},rs=()=>{!f||!f.r||!f.r.past||ke(J.verifyFit?J.verifyFit(f.r.past.rows,tt):null)},ls=()=>{if(!(!f||f.kind!=="bazi"))try{const a=f.at||{date:k,time:Q},[g,$,M]=String(a.date).split("-").map(Number),[,h]=String(a.time).split(":").map(Number),me=aa.filter(Me=>Number(Me.year)).map(Me=>({year:Number(Me.year),kind:Me.kind}));it(J.rectifyBirth?J.rectifyBirth({base:{year:g,month:$,day:M,minute:Number.isFinite(h)?h:0},gender:f.gender||ye,events:me,lateZi:typeof f.lateZi=="boolean"?f.lateZi:la,trueSolar:typeof f.trueSolar=="boolean"?f.trueSolar:Xe,address:String(f.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){it({error:a&&a.message?a.message:String(a)})}},oe=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Yi=a=>{s(a.kind),a.date&&P(a.date),a.time&&pe(a.time),de(!!a.hourUnknown),a.gender&&t(a.gender),B(a.address||""),typeof a.trueSolar=="boolean"&&La(a.trueSolar),typeof a.lateZi=="boolean"&&Ta(a.lateZi),I(a.lines||""),Kt(a.question||""),qi(a.direction||"general"),Ni(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Ai(a.mhMode||"time"),Li(a.upper||""),Ti(a.lower||""),Ei(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&ba(a.qimenRule),typeof a.qLateZi=="string"&&Qa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&nt(a.task),a.days!=null&&Fa(String(a.days)),typeof a.shengXiao=="string"&&st(a.shengXiao),typeof a.zCand=="string"&&ta(a.zCand)),a.kind==="xiaoliuren"&&(ot(a.xlrMode==="number"?"number":"time"),a.num1!=null&&$t(String(a.num1)),a.num2!=null&&Ba(String(a.num2)),a.num3!=null&&kt(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&p(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&o(a.fsMode),a.fsPeriod!=null&&d(String(a.fsPeriod)),typeof a.sitting=="string"&&m(a.sitting),typeof a.facing=="string"&&v(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&w(a.nnMode),typeof a.surname=="string"&&S(a.surname),typeof a.givenName=="string"&&ee(a.givenName),a.limitN!=null&&C(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&ia(a.convMode),typeof a.lunarDate=="string"&&yt(a.lunarDate),typeof a.leapMonth=="boolean"&&wt(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ua(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&X(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Ce(a.partnerAddress),typeof a.thirdOn=="boolean"&&ht(a.thirdOn),typeof a.p2Date=="string"&&Wa(a.p2Date),typeof a.p2Time=="string"&&ga(a.p2Time),typeof a.p2Gender=="string"&&Ca(a.p2Gender),typeof a.p2Address=="string"&&xt(a.p2Address)),St(!1),fe(a)},ds=()=>{ge([]),ci([])},[Ie,Tt]=j(()=>{try{return D.casesLoad()}catch{return[]}}),[cs,Ki]=j(!1),[Wt,Ji]=j("all"),[ms,Xi]=j(!1),us=()=>{try{Tt(D.casesLoad())}catch{}Ji("all"),Ki(!0)},Qt=()=>Ki(!1),gs=a=>a==="all"?Ie.length:Ie.filter(g=>g.status===a).length,ei=Wt==="all"?Ie:Ie.filter(a=>a.status===Wt),fs=()=>{if(!Ke.entry){he("这张盘没有可存的参数,重排一次再存。");return}try{const a=D.casesAdd(Ke.entry);a&&a.ok?(Tt(a.list),Xi(!0)):he("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}catch{he("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}},Vi=a=>{const g=a?D.casesExportMasked(Ie):D.casesExport(Ie);if(!g){he("还没有可导出的卦例");return}try{const $=new Blob([g],{type:"application/x-ndjson;charset=utf-8"}),M=URL.createObjectURL($),h=document.createElement("a");h.href=M,h.download=a?`metaphysics-cases-masked-${new Date().toISOString().slice(0,10)}.jsonl`:`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(h),h.click(),h.remove(),setTimeout(()=>{try{URL.revokeObjectURL(M)}catch{}},1e3),he(a?`已导出 ${Ie.length} 条卦例(脱敏:去年份、时刻整点化、去出生地)`:`已导出 ${Ie.length} 条卦例(JSONL)`)}catch($){he("导出失败:"+($&&$.message?$.message:"当前环境不支持下载"))}},bs=a=>{const g=a.entry||{},$=new Date(a.at),M=h=>String(h).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Yi(Object.assign({},g)),Qt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,D.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${M($.getMonth()+1)}-${M($.getDate())} ${M($.getHours())}:${M($.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:h=>Tt(D.casesSetStatus(a.id,h.target.value))},D.CASE_STATUS.map(h=>r("option",{key:h,value:h},D.caseStatusLabel(h)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>Tt(D.casesRemove(a.id))},"删"))},hs=["bazi","ziwei","trend","chenggu"],Wi=a=>{s(a.kind),P(a.date),a.time&&pe(a.time),de(!!a.hourUnknown),a.gender&&t(a.gender),B(a.address||""),La(a.trueSolar!==!1),Ta(a.lateZi!==!1)},xs=a=>{const g=D.profEvent(a.target);if(!g)return;const $=h=>Se.find(me=>me.id===h),M=a.currentTarget.querySelector(".mp-prof-name");if(ve(""),g.action==="use"){const h=$(g.id);if(!h)return;if(!D.profUsable(h)){he("这张档案没有出生时刻,先补上时刻再存一次。");return}pa="",H(D.profilesTouch(h.id)),Wi(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=$(g.id);if(!h)return;Wi(h),pa=h.label,x(h.id);return}if(g.action==="cancel"){pa="",x(null);return}if(g.action==="pin"){H(D.profilesPin(g.id));return}if(g.action==="del"){if(_!==g.id){ve(g.id);return}H(D.profilesRemove(g.id)),Ne===g.id&&(pa="",x(null)),he("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const h=Ne,me=D.profFromForm({kind:n,date:k,time:Q,hourUnknown:ce,gender:ye,address:$e,trueSolar:Xe,lateZi:la},M?M.value:pa,Ne||void 0);if(!me){he("先填好出生日期(和时刻),再存档案。");return}const Me=D.profilesPut(me);if(!Me.ok){he("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}H(Me.list),pa="",x(null),M&&(M.value=""),he(`${h?"已更新档案":"已存入我的命盘"}「${Me.item.label}」。`)}},vs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(pa=g.value)},ys=a=>{const g=J.formOf?J.formOf(a):null;if(!g){Ae("ziwei");return}const $=Ye.some(Me=>Me.k===g.tab)?g.tab:"ziwei",M={date:g.date||k,time:g.time||Q},h=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&P(g.date),g.time&&pe(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&B(g.address),typeof g.trueSolar=="boolean"&&La(g.trueSolar),typeof g.lateZi=="boolean"&&Ta(g.lateZi),h!==void 0&&I(h),g.question&&Kt(g.question),s($);const me=J.restNote?J.restNote(g):"";_e(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${me?` ${me}`:""}`),Ae($,M,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:h,question:g.question})};ja(()=>{let a=!1;const g=Oe;return(async()=>{let $=null;try{await mt(n);const M=typeof location<"u"?String(location.href):"";M&&M.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&($=window.Engine.parseAskLink(M))}catch{$=null}if(!(a||Oe!==g)){if($&&$.ok)try{ys($);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),ja(()=>{if(!be)return;const a=be.kind;fe(null),Ae(a)},[be]),ja(()=>{const a=g=>{if(g.key!=="Escape")return;const $=document.getElementById("mp-trace-layer");$&&$.classList.contains("open")&&Ri()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Qi=(Be||[]).filter(a=>a&&Ye.some(g=>g.k===a.tab)).slice(0,xi),ws=a=>(Ye.find(g=>g.k===a)||{}).label||a,$s=({k:a,label:g,tip:$,wide:M})=>r("button",{key:a,type:"button",title:$,className:"mp-tool"+(M?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>At(a)},r("b",null,g),r("span",null,$)),ks=[r("div",{key:"profiles",className:"mp-profwrap",onClick:xs,onInput:vs,dangerouslySetInnerHTML:{__html:D.profilesHTML(Se,{editingId:Ne,armedDel:_,bar:hs.indexOf(n)>=0?D.profilesBarHTML({editingId:Ne,name:pa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Qi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Qi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>At(a.tab)},ws(a.tab),r("i",null,kn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:se==="group"?"on":"","aria-pressed":se==="group"?"true":"false",onClick:()=>Pi("group")},"分组"),r("button",{type:"button",className:se==="flat"?"on":"","aria-pressed":se==="flat"?"true":"false",onClick:()=>Pi("flat")},"平铺"))),se==="group"?r("div",{className:"mp-groups"},$n.map(a=>{const g=!!ae[a.title],$=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($s),$>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>Z(M=>Object.assign({},M,{[a.title]:!g}))},g?"收起":`还有 ${$} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(se==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ye.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"},qn({tab:n,open:Ci,onToggle:Dn,onCast:Rn,onAsk:Gi,hasResult:!!f}),r("div",{className:"mp-row"},Oi?oe(rt?"出生日期(公历)":Ue==="date"?"日期(公历)":"起卦日期(公历)",r(Ht,{value:k,onChange:In,onInvalid:()=>he("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,Hi?oe(rt?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:Q,disabled:ce&&(n==="bazi"||n==="trend"),onChange:a=>Bn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:ce,onChange:a=>de(a.target.checked)})," 时辰未知"):null,rt?oe("性别",r("select",{className:"mp-input",value:ye,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,rt?oe("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:$e,onChange:a=>B(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:et,onChange:a=>Gt(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?oe("对方出生日期",r(Ht,{value:xe,onChange:we,onInvalid:()=>he("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?oe("对方出生时刻",r("input",{className:"mp-input",type:"time",value:K,onChange:a=>X(a.target.value)})):null,n==="hepan"?oe("对方性别",r("select",{className:"mp-input",value:W,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?oe("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ua("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ua("ziwei")},"紫微"))):null,n==="hepan"?oe("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:ie,onChange:a=>Ce(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Je,onChange:a=>ht(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Je?oe("第三方出生日期",r(Ht,{value:qa,onChange:Wa,onInvalid:()=>he("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Je?oe("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ma,onChange:a=>ga(a.target.value)})):null,n==="hepan"&&Je?oe("第三方性别",r("select",{className:"mp-input",value:fa,onChange:a=>Ca(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Je?oe("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:Aa,onChange:a=>xt(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:ra===a,onChange:()=>ba(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Ea,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,ea(n)||n==="qimen"?oe(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Ge,onChange:a=>{qi(a.target.value),Ii(a.target.value)}},(J.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?oe("牌阵",r("select",{className:"mp-input",value:pt,onChange:a=>Ni(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"?oe("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:L,onChange:a=>I(a.target.value)})):null,n==="meihua"?oe("起卦方式",r("div",{className:"mp-seg"},r("button",{className:wa==="time"?"on":"",onClick:()=>Fi("time")},"时间"),r("button",{className:wa==="number"?"on":"",onClick:()=>Fi("number")},"数字"))):null,n==="meihua"&&wa==="number"?oe("第一个数",r("input",{className:"mp-input",value:Nt,placeholder:"如 17",onChange:a=>Li(a.target.value)})):null,n==="meihua"&&wa==="number"?oe("第二个数",r("input",{className:"mp-input",value:qt,placeholder:"如 29",onChange:a=>Ti(a.target.value)})):null,n==="meihua"&&wa==="number"?oe("动爻(可空)",r("input",{className:"mp-input",value:Mt,placeholder:"1-6",onChange:a=>Ei(a.target.value)})):null,n==="zeri"?oe("所办事项",r("select",{className:"mp-input",value:Pa,onChange:a=>nt(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map($=>r("option",{key:`${a}-${$}`,value:$},$)))))):null,n==="convert"?oe("转换方向",r("div",{className:"mp-seg"},r("button",{className:He==="solar2lunar"?"on":"",onClick:()=>ia("solar2lunar")},"公历 → 农历"),r("button",{className:He==="lunar2solar"?"on":"",onClick:()=>ia("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&He==="lunar2solar"?oe("农历日期",r("input",{className:"mp-input",value:va,placeholder:"如 2026-9-17",onChange:a=>yt(a.target.value)})):null,n==="convert"&&He==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Da,onChange:a=>wt(a.target.checked)})," 闰月"):null,n==="zeri"?oe("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:ca,onChange:a=>Fa(a.target.value)})):null,n==="zeri"?oe("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:xa,onChange:a=>ta(a.target.value)})):null,n==="zeri"?oe("当事人属相(可空)",r("select",{className:"mp-input",value:Ve,onChange:a=>st(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?oe("起课方式",r("div",{className:"mp-seg"},r("button",{className:Re==="time"?"on":"",onClick:()=>ot("time")},"时间"),r("button",{className:Re==="number"?"on":"",onClick:()=>ot("number")},"报数"))):null,n==="xiaoliuren"&&Re==="number"?oe("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ra,onChange:a=>$t(a.target.value)})):null,n==="xiaoliuren"&&Re==="number"?oe("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ia,onChange:a=>Ba(a.target.value)})):null,n==="xiaoliuren"&&Re==="number"?oe("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:ya,onChange:a=>kt(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(xn,{answers:Ga,page:Ua,onPick:(a,g)=>Pe($=>{const M=$.slice();return M[a]=g,M}),onPage:a=>Za(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(bt().total/ut)-1)))),onSubmit:Vt,onClear:()=>{Pe(new Array(bt().total).fill(null)),Za(0),ne(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(vn,{paper:na,answers:Ya,page:Zt,onPick:(a,g)=>jt($=>{const M=$.slice();return M[a]=g,M}),onPage:a=>e(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((na&&na.questions?na.questions.length:Pt)/gt)-1)))),onSubmit:Vt,onClear:()=>{jt(new Array(Pt).fill(null)),e(0),ne(null)}})):null,n==="trend"?oe("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:i,onChange:a=>p(a.target.value)})):null,n==="fengshui"?oe("看什么",r("div",{className:"mp-seg"},r("button",{className:l==="natal"?"on":"",onClick:()=>o("natal")},"命卦"),r("button",{className:l==="advise"?"on":"",onClick:()=>o("advise")},"门主灶"),r("button",{className:l==="xuankong"?"on":"",onClick:()=>o("xuankong")},"玄空"))):null,n==="fengshui"&&l!=="natal"?oe("坐山(24 山)",r("input",{className:"mp-input",value:u,placeholder:"如 子 / 乾",onChange:a=>m(a.target.value)})):null,n==="fengshui"&&l!=="natal"?oe("朝向(24 山)",r("input",{className:"mp-input",value:b,placeholder:"如 午 / 巽",onChange:a=>v(a.target.value)})):null,n==="fengshui"&&l==="xuankong"?oe("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:c,onChange:a=>d(a.target.value)})):null,n==="name"?oe("看什么",r("div",{className:"mp-seg"},r("button",{className:y==="assess"?"on":"",onClick:()=>w("assess")},"评名字"),r("button",{className:y==="generate"?"on":"",onClick:()=>w("generate")},"生成候选"))):null,n==="name"?oe("姓",r("input",{className:"mp-input",value:T,placeholder:"如 李",onChange:a=>S(a.target.value)})):null,n==="name"&&y==="assess"?oe("名字",r("input",{className:"mp-input",value:O,placeholder:"如 沐宸",onChange:a=>ee(a.target.value)})):null,n==="name"&&y==="generate"?oe("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:F,onChange:a=>C(a.target.value)})):null),rt?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Xe,onChange:a=>La(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:la,onChange:a=>Ta(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:V,onChange:a=>R(a.target.checked)}),"联网精确到区县")):null,ea(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(_n?" invalid":""),rows:2,value:ma,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Kt(a.target.value),St(!1)},onBlur:a=>Ii(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:Gn,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Vt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Ft.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},Hn.hint),le.length||Ie.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,le.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},le.length?r("button",{className:"mp-hist-clear",onClick:ds},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:us},Ie.length?`卦例库 ${Ie.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},le.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Yi(a)},r("b",null,(Ye.find($=>$.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,Ue==="cast"&&_i?r("div",{key:"auto",className:"mp-auto"},Xt.cast?`起卦时刻用的是你手动填的(${Q});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${Q}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,re?r("div",{key:"err",className:"mp-err",role:"alert"},re):null,Ee?r("div",{key:"ntc",className:"mp-note",role:"status"},Ee):null,Yt?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!f&&!re?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 题就能看结果":Ft.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Ft.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,f?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:es,dangerouslySetInnerHTML:{__html:Nn(f)+as(f)+D.resultWithInterpret("",f.it,{folded:Zn()})+D.perfHTML(N)+D.revisionHTML(f.r.revision)+D.handleHTML(f.r.handle)+D.shadowHTML(f.r.shadow,f.shadowDiff)+D.traceHTML(f.r.trace,f.r.system,f.r.traceText)+D.caliberHTML(f.caliber)}}):null,f?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:ts},On||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:os,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ps,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:fs,title:"把这张盘的参数存进卦例库,日后可回填重排、标应验"},ms?"已存入卦例库":"存入卦例库")):null,f?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:da,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Ut(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Bi()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Bi},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Gi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),te.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},yi()),_a?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},_a):null):null,f?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},te.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Di.map(([a,g,$])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:$,onClick:M=>Wn(a,M.currentTarget)},g))):null,Oa?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:D.followupHTML(Oa)}}):null,f&&f.kind==="bazi"&&f.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),f.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:()=>Ha(Object.assign({},tt,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Zi,onClick:rs},"算贴合度"),ha?r("span",{className:"mp-verify-fit"},`命中 ${ha.yes}/${ha.answered}(${ha.level}):${ha.advice}`):null)):null,f&&f.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),aa.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:$=>vt(aa.map((M,h)=>h===g?Object.assign({},M,{year:$.target.value}):M))}),r("select",{className:"mp-input",value:a.kind,onChange:$=>vt(aa.map((M,h)=>h===g?Object.assign({},M,{kind:$.target.value}):M))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([$,M])=>r("option",{key:$,value:$},M))))),r("button",{className:"mp-btn ghost",style:Zi,onClick:ls},"计算候选时辰"),De?De.error?r("div",{className:"mp-rect-err"},De.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},De.note),De.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===De.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!f&&!re?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:Ui,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},ue||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>ss(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"有疑问?",r("a",{href:"mailto:1129440028@qq.com?subject="+encodeURIComponent("[反馈] 烛微命盘"),style:{color:"inherit"},title:"点开直接写邮件,不用复制任何东西"},"1129440028@qq.com")," · GitHub issues · 微信群 dsh-metaphysics",Te?r("span",{className:"mp-fb-note"}," "+Te):null)),cs?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Qt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${ei.length}/${Ie.length}`),r("button",{className:"mp-cases-x",onClick:Qt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(D.CASE_STATUS.map(a=>[a,D.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Wt===a[0]?" on":""),onClick:()=>Ji(a[0])},`${a[1]} ${gs(a[0])}`))),r("div",{className:"mp-cases-list"},ei.length?ei.map(a=>bs(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:()=>Vi(!1)},"导出 JSONL"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>Vi(!0),title:"去掉出生年份(只留月日)、时刻整点化、去掉出生地——发给群里也不露个人信息"},"导出脱敏版"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},ks)}function Cn(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 Si=!1;function Bt(){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 k=getComputedStyle(s).backgroundColor;s.remove();const P=Fe&&typeof Fe.pickOnColor=="function"?Fe.pickOnColor(k):"";P&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==P&&n.style.setProperty("--mp-on-brand",P)}catch{}}function An(){if(!Si){Si=!0,Bt();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",Bt)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(Bt).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Ln(n){try{const B=Cn(gn+(D&&D.CSS?D.CSS:""));typeof n.effect=="function"&&typeof B=="function"&&n.effect(()=>B)}catch(B){console.error("[metaphysics] 样式注入失败",B)}try{An()}catch(B){console.error("[metaphysics] 字色同步失败",B)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(B){console.error("[metaphysics] 取 slots 服务失败",B)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{te.injectType=typeof s.inject;const B=typeof s.spec=="function"?s.spec("conversation.input.right"):null;te.spec=B?B.kind+"/"+B.scope:"未声明"}catch(B){te.spec="取声明失败",wi(B)}const k=B=>{if(typeof B=="function")return B;if(B&&typeof B=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof B[xe]=="function")return()=>{try{B[xe]()}catch{}}}return()=>{}},P=(B,xe)=>{try{const we=s.register(B,xe);return te.regs+=1,te.seatOk[B.name]=!0,k(we)}catch(we){return wi(we),()=>{}}},Q=(B,xe)=>{const we=()=>{const K=xe();return te.contribution=(te.contribution?te.contribution+",":"")+(B+(typeof K=="function"?" 已挂上":" 未挂上")),K};try{typeof s.inject=="function"?s.inject(B,we):we()}catch(K){console.error("[metaphysics] 等待槽位失败:"+B,K);try{we()}catch(X){console.error("[metaphysics] 直接注册也失败:"+B,X)}}};Q("sidebar.panellist",()=>P({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"烛微命盘 v"+(window.__MP_VER||"")},wn)),Q("main",()=>P({name:"main",key:"metaphysics"},B=>r(yn,null,r(Mn,B))));const pe=(B,xe)=>{const we=()=>{try{const X=s.inject(B,xe);return te.contribution=(te.contribution?te.contribution+",":"")+(B.replace("conversation.","")+(typeof X=="function"?" 已挂上":" 未挂上")),X}catch(X){console.error("[metaphysics] 槽位注册失败:"+B,X);try{return xe()}catch(W){console.error("[metaphysics] 直接注册也失败:"+B,W);return}}};let K;try{typeof n.effect=="function"?K=n.effect(we,"metaphysics: "+B):K=we()}catch(X){console.error("[metaphysics] effect 包裹失败:"+B,X),K=we()}typeof K=="function"&&te.seatDisposers.push(K)};pe("conversation.input.right",()=>P({name:"conversation.input.right",id:"metaphysics-ask",order:40},ki)),pe("conversation.composer.dock",()=>P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},zi));let ce=!1;const de=()=>{te.ref||ce||(ce=!0,te.seatOk["conversation.input.right"]||P({name:"conversation.input.right",id:"metaphysics-ask",order:40},ki),te.seatOk["conversation.composer.dock"]||P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},zi))};let ye=20;const t=()=>!!(te.seatOk["conversation.input.right"]&&te.seatOk["conversation.composer.dock"]),$e=()=>{te.ref||ye<=0||t()||(ye-=1,de(),!t()&&setTimeout($e,700))};try{setTimeout($e,700)}catch{}try{document.addEventListener("pointerdown",()=>{ce=!1,de()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Ln(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});
2646
+ `)},Ui=()=>{const a=ns();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{U("已复制"),z("粘到 issue / 邮件 / 群里即可")}).catch(()=>{U("复制失败"),z("可改用「导出 .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 $=document.execCommand&&document.execCommand("copy");g.remove(),U($?"已复制":"复制失败"),z($?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{U("复制失败"),z("可改用「导出 .md」")}setTimeout(()=>{U(""),z("")},4e3)},ss=()=>{try{Ui()}catch{}const a=encodeURIComponent("[反馈] "+(Ye.find(g=>g.k===n)?.label||n)+(le?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{z("浏览器拦了弹窗,请手动打开 GitHub issues")}},os=()=>{if(!(!f||!f.r))try{const a=K.renderText?K.renderText(f.r):f.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),$=document.createElement("a");$.href=URL.createObjectURL(g),$.download=`烛微命盘报告-${f.r.system}.md`,document.body.appendChild($),$.click(),$.remove(),setTimeout(()=>URL.revokeObjectURL($.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ps=()=>{if(!(!f||!f.r))try{const a=D.summaryCardPNG?D.summaryCardPNG(f.r,f.it):"";if(!a){$a("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`烛微命盘摘要-${f.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Zi={fontSize:12,padding:"5px 12px"},rs=()=>{!f||!f.r||!f.r.past||ze(K.verifyFit?K.verifyFit(f.r.past.rows,nt):null)},ls=()=>{if(!(!f||f.kind!=="bazi"))try{const a=f.at||{date:k,time:Q},[g,$,M]=String(a.date).split("-").map(Number),[,x]=String(a.time).split(":").map(Number),me=aa.filter(Me=>Number(Me.year)).map(Me=>({year:Number(Me.year),kind:Me.kind}));st(K.rectifyBirth?K.rectifyBirth({base:{year:g,month:$,day:M,minute:Number.isFinite(x)?x:0},gender:f.gender||ye,events:me,lateZi:typeof f.lateZi=="boolean"?f.lateZi:la,trueSolar:typeof f.trueSolar=="boolean"?f.trueSolar:Xe,address:String(f.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){st({error:a&&a.message?a.message:String(a)})}},oe=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Yi=a=>{s(a.kind),a.date&&P(a.date),a.time&&pe(a.time),de(!!a.hourUnknown),a.gender&&t(a.gender),B(a.address||""),typeof a.trueSolar=="boolean"&&La(a.trueSolar),typeof a.lateZi=="boolean"&&Ta(a.lateZi),I(a.lines||""),Kt(a.question||""),qi(a.direction||"general"),Ni(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Ai(a.mhMode||"time"),Li(a.upper||""),Ti(a.lower||""),Ei(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&ba(a.qimenRule),typeof a.qLateZi=="string"&&at(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&ot(a.task),a.days!=null&&Fa(String(a.days)),typeof a.shengXiao=="string"&&pt(a.shengXiao),typeof a.zCand=="string"&&ta(a.zCand)),a.kind==="xiaoliuren"&&(rt(a.xlrMode==="number"?"number":"time"),a.num1!=null&&$t(String(a.num1)),a.num2!=null&&Ba(String(a.num2)),a.num3!=null&&kt(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&p(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&o(a.fsMode),a.fsPeriod!=null&&d(String(a.fsPeriod)),typeof a.sitting=="string"&&m(a.sitting),typeof a.facing=="string"&&v(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&w(a.nnMode),typeof a.surname=="string"&&S(a.surname),typeof a.givenName=="string"&&ee(a.givenName),a.limitN!=null&&C(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&ia(a.convMode),typeof a.lunarDate=="string"&&yt(a.lunarDate),typeof a.leapMonth=="boolean"&&wt(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ua(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&X(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Ce(a.partnerAddress),typeof a.thirdOn=="boolean"&&ht(a.thirdOn),typeof a.p2Date=="string"&&et(a.p2Date),typeof a.p2Time=="string"&&ga(a.p2Time),typeof a.p2Gender=="string"&&Ca(a.p2Gender),typeof a.p2Address=="string"&&xt(a.p2Address)),St(!1),fe(a)},ds=()=>{ge([]),ci([])},[Ie,Tt]=j(()=>{try{return D.casesLoad()}catch{return[]}}),[cs,Ki]=j(!1),[Wt,Ji]=j("all"),[ms,Xi]=j(!1),us=()=>{try{Tt(D.casesLoad())}catch{}Ji("all"),Ki(!0)},Qt=()=>Ki(!1),gs=a=>a==="all"?Ie.length:Ie.filter(g=>g.status===a).length,ei=Wt==="all"?Ie:Ie.filter(a=>a.status===Wt),fs=()=>{if(!Ke.entry){he("这张盘没有可存的参数,重排一次再存。");return}try{const a=D.casesAdd(Ke.entry);a&&a.ok?(Tt(a.list),Xi(!0)):he("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}catch{he("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}},Vi=a=>{const g=a?D.casesExportMasked(Ie):D.casesExport(Ie);if(!g){he("还没有可导出的卦例");return}try{const $=new Blob([g],{type:"application/x-ndjson;charset=utf-8"}),M=URL.createObjectURL($),x=document.createElement("a");x.href=M,x.download=a?`metaphysics-cases-masked-${new Date().toISOString().slice(0,10)}.jsonl`:`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(x),x.click(),x.remove(),setTimeout(()=>{try{URL.revokeObjectURL(M)}catch{}},1e3),he(a?`已导出 ${Ie.length} 条卦例(脱敏:去年份、时刻整点化、去出生地)`:`已导出 ${Ie.length} 条卦例(JSONL)`)}catch($){he("导出失败:"+($&&$.message?$.message:"当前环境不支持下载"))}},bs=a=>{const g=a.entry||{},$=new Date(a.at),M=x=>String(x).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Yi(Object.assign({},g)),Qt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,D.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${M($.getMonth()+1)}-${M($.getDate())} ${M($.getHours())}:${M($.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:x=>Tt(D.casesSetStatus(a.id,x.target.value))},D.CASE_STATUS.map(x=>r("option",{key:x,value:x},D.caseStatusLabel(x)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>Tt(D.casesRemove(a.id))},"删"))},hs=["bazi","ziwei","trend"],Wi=a=>{s(a.kind),P(a.date),a.time&&pe(a.time),de(!!a.hourUnknown),a.gender&&t(a.gender),B(a.address||""),La(a.trueSolar!==!1),Ta(a.lateZi!==!1)},xs=a=>{const g=D.profEvent(a.target);if(!g)return;const $=x=>Se.find(me=>me.id===x),M=a.currentTarget.querySelector(".mp-prof-name");if(ve(""),g.action==="use"){const x=$(g.id);if(!x)return;if(!D.profUsable(x)){he("这张档案没有出生时刻,先补上时刻再存一次。");return}pa="",H(D.profilesTouch(x.id)),Wi(x),Ae(x.kind,{date:x.date,time:x.hourUnknown?"12:00":x.time},void 0,{gender:x.gender||void 0,address:x.address||"",hourUnknown:!!x.hourUnknown,trueSolar:x.trueSolar!==!1,lateZi:x.lateZi!==!1});return}if(g.action==="edit"){const x=$(g.id);if(!x)return;Wi(x),pa=x.label,h(x.id);return}if(g.action==="cancel"){pa="",h(null);return}if(g.action==="pin"){H(D.profilesPin(g.id));return}if(g.action==="del"){if(_!==g.id){ve(g.id);return}H(D.profilesRemove(g.id)),Ne===g.id&&(pa="",h(null)),he("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const x=Ne,me=D.profFromForm({kind:n,date:k,time:Q,hourUnknown:ce,gender:ye,address:ke,trueSolar:Xe,lateZi:la},M?M.value:pa,Ne||void 0);if(!me){he("先填好出生日期(和时刻),再存档案。");return}const Me=D.profilesPut(me);if(!Me.ok){he("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}H(Me.list),pa="",h(null),M&&(M.value=""),he(`${x?"已更新档案":"已存入我的命盘"}「${Me.item.label}」。`)}},vs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(pa=g.value)},ys=a=>{const g=K.formOf?K.formOf(a):null;if(!g){Ae("ziwei");return}const $=Ye.some(Me=>Me.k===g.tab)?g.tab:"ziwei",M={date:g.date||k,time:g.time||Q},x=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&P(g.date),g.time&&pe(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&B(g.address),typeof g.trueSolar=="boolean"&&La(g.trueSolar),typeof g.lateZi=="boolean"&&Ta(g.lateZi),x!==void 0&&I(x),g.question&&Kt(g.question),s($);const me=K.restNote?K.restNote(g):"";_e(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${me?` ${me}`:""}`),Ae($,M,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:x,question:g.question})};ja(()=>{let a=!1;const g=Oe;return(async()=>{let $=null;try{await Qa(n);const M=typeof location<"u"?String(location.href):"";M&&M.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&($=window.Engine.parseAskLink(M))}catch{$=null}if(!(a||Oe!==g)){if($&&$.ok)try{ys($);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),ja(()=>{if(!be)return;const a=be.kind;fe(null),Ae(a)},[be]),ja(()=>{const a=g=>{if(g.key!=="Escape")return;const $=document.getElementById("mp-trace-layer");$&&$.classList.contains("open")&&Ri()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Qi=(Be||[]).filter(a=>a&&Ye.some(g=>g.k===a.tab)).slice(0,xi),ws=a=>(Ye.find(g=>g.k===a)||{}).label||a,$s=({k:a,label:g,tip:$,wide:M})=>r("button",{key:a,type:"button",title:$,className:"mp-tool"+(M?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>At(a)},r("b",null,g),r("span",null,$)),ks=[r("div",{key:"profiles",className:"mp-profwrap",onClick:xs,onInput:vs,dangerouslySetInnerHTML:{__html:D.profilesHTML(Se,{editingId:Ne,armedDel:_,bar:hs.indexOf(n)>=0?D.profilesBarHTML({editingId:Ne,name:pa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Qi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Qi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>At(a.tab)},ws(a.tab),r("i",null,kn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:se==="group"?"on":"","aria-pressed":se==="group"?"true":"false",onClick:()=>Pi("group")},"分组"),r("button",{type:"button",className:se==="flat"?"on":"","aria-pressed":se==="flat"?"true":"false",onClick:()=>Pi("flat")},"平铺"))),se==="group"?r("div",{className:"mp-groups"},$n.map(a=>{const g=!!ae[a.title],$=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($s),$>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>Y(M=>Object.assign({},M,{[a.title]:!g}))},g?"收起":`还有 ${$} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(se==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ye.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"},qn({tab:n,open:Ci,onToggle:Dn,onCast:Rn,onAsk:Gi,hasResult:!!f}),r("div",{className:"mp-row"},Oi?oe(dt?"出生日期(公历)":Ue==="date"?"日期(公历)":"起卦日期(公历)",r(Ht,{value:k,onChange:In,onInvalid:()=>he("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,Hi?oe(dt?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:Q,disabled:ce&&(n==="bazi"||n==="trend"),onChange:a=>Bn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:ce,onChange:a=>de(a.target.checked)})," 时辰未知"):null,dt?oe("性别",r("select",{className:"mp-input",value:ye,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,dt?oe("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:ke,onChange:a=>B(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:tt,onChange:a=>Gt(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?oe("对方出生日期",r(Ht,{value:xe,onChange:we,onInvalid:()=>he("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?oe("对方出生时刻",r("input",{className:"mp-input",type:"time",value:J,onChange:a=>X(a.target.value)})):null,n==="hepan"?oe("对方性别",r("select",{className:"mp-input",value:W,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?oe("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ua("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ua("ziwei")},"紫微"))):null,n==="hepan"?oe("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:ie,onChange:a=>Ce(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Je,onChange:a=>ht(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Je?oe("第三方出生日期",r(Ht,{value:qa,onChange:et,onInvalid:()=>he("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Je?oe("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ma,onChange:a=>ga(a.target.value)})):null,n==="hepan"&&Je?oe("第三方性别",r("select",{className:"mp-input",value:fa,onChange:a=>Ca(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Je?oe("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:Aa,onChange:a=>xt(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:ra===a,onChange:()=>ba(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Ea,onChange:a=>at(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,ea(n)||n==="qimen"?oe(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Ge,onChange:a=>{qi(a.target.value),Ii(a.target.value)}},(K.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?oe("牌阵",r("select",{className:"mp-input",value:lt,onChange:a=>Ni(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"?oe("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:L,onChange:a=>I(a.target.value)})):null,n==="meihua"?oe("起卦方式",r("div",{className:"mp-seg"},r("button",{className:wa==="time"?"on":"",onClick:()=>Fi("time")},"时间"),r("button",{className:wa==="number"?"on":"",onClick:()=>Fi("number")},"数字"))):null,n==="meihua"&&wa==="number"?oe("第一个数",r("input",{className:"mp-input",value:Nt,placeholder:"如 17",onChange:a=>Li(a.target.value)})):null,n==="meihua"&&wa==="number"?oe("第二个数",r("input",{className:"mp-input",value:qt,placeholder:"如 29",onChange:a=>Ti(a.target.value)})):null,n==="meihua"&&wa==="number"?oe("动爻(可空)",r("input",{className:"mp-input",value:Mt,placeholder:"1-6",onChange:a=>Ei(a.target.value)})):null,n==="zeri"?oe("所办事项",r("select",{className:"mp-input",value:Pa,onChange:a=>ot(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map($=>r("option",{key:`${a}-${$}`,value:$},$)))))):null,n==="convert"?oe("转换方向",r("div",{className:"mp-seg"},r("button",{className:He==="solar2lunar"?"on":"",onClick:()=>ia("solar2lunar")},"公历 → 农历"),r("button",{className:He==="lunar2solar"?"on":"",onClick:()=>ia("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&He==="lunar2solar"?oe("农历日期",r("input",{className:"mp-input",value:va,placeholder:"如 2026-9-17",onChange:a=>yt(a.target.value)})):null,n==="convert"&&He==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Da,onChange:a=>wt(a.target.checked)})," 闰月"):null,n==="zeri"?oe("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:ca,onChange:a=>Fa(a.target.value)})):null,n==="zeri"?oe("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:xa,onChange:a=>ta(a.target.value)})):null,n==="zeri"?oe("当事人属相(可空)",r("select",{className:"mp-input",value:Ve,onChange:a=>pt(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?oe("起课方式",r("div",{className:"mp-seg"},r("button",{className:Re==="time"?"on":"",onClick:()=>rt("time")},"时间"),r("button",{className:Re==="number"?"on":"",onClick:()=>rt("number")},"报数"))):null,n==="xiaoliuren"&&Re==="number"?oe("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ra,onChange:a=>$t(a.target.value)})):null,n==="xiaoliuren"&&Re==="number"?oe("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ia,onChange:a=>Ba(a.target.value)})):null,n==="xiaoliuren"&&Re==="number"?oe("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:ya,onChange:a=>kt(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(xn,{answers:Ga,page:Ua,onPick:(a,g)=>Pe($=>{const M=$.slice();return M[a]=g,M}),onPage:a=>Za(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(bt().total/ut)-1)))),onSubmit:Vt,onClear:()=>{Pe(new Array(bt().total).fill(null)),Za(0),ne(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(vn,{paper:na,answers:Ya,page:Zt,onPick:(a,g)=>jt($=>{const M=$.slice();return M[a]=g,M}),onPage:a=>e(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((na&&na.questions?na.questions.length:Pt)/gt)-1)))),onSubmit:Vt,onClear:()=>{jt(new Array(Pt).fill(null)),e(0),ne(null)}})):null,n==="trend"?oe("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:i,onChange:a=>p(a.target.value)})):null,n==="fengshui"?oe("看什么",r("div",{className:"mp-seg"},r("button",{className:l==="natal"?"on":"",onClick:()=>o("natal")},"命卦"),r("button",{className:l==="advise"?"on":"",onClick:()=>o("advise")},"门主灶"),r("button",{className:l==="xuankong"?"on":"",onClick:()=>o("xuankong")},"玄空"))):null,n==="fengshui"&&l!=="natal"?oe("坐山(24 山)",r("input",{className:"mp-input",value:u,placeholder:"如 子 / 乾",onChange:a=>m(a.target.value)})):null,n==="fengshui"&&l!=="natal"?oe("朝向(24 山)",r("input",{className:"mp-input",value:b,placeholder:"如 午 / 巽",onChange:a=>v(a.target.value)})):null,n==="fengshui"&&l==="xuankong"?oe("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:c,onChange:a=>d(a.target.value)})):null,n==="name"?oe("看什么",r("div",{className:"mp-seg"},r("button",{className:y==="assess"?"on":"",onClick:()=>w("assess")},"评名字"),r("button",{className:y==="generate"?"on":"",onClick:()=>w("generate")},"生成候选"))):null,n==="name"?oe("姓",r("input",{className:"mp-input",value:T,placeholder:"如 李",onChange:a=>S(a.target.value)})):null,n==="name"&&y==="assess"?oe("名字",r("input",{className:"mp-input",value:O,placeholder:"如 沐宸",onChange:a=>ee(a.target.value)})):null,n==="name"&&y==="generate"?oe("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:F,onChange:a=>C(a.target.value)})):null),dt?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Xe,onChange:a=>La(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:la,onChange:a=>Ta(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:V,onChange:a=>R(a.target.checked)}),"联网精确到区县")):null,ea(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(_n?" invalid":""),rows:2,value:ma,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Kt(a.target.value),St(!1)},onBlur:a=>Ii(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:Gn,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Vt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Ft.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},Hn.hint),re.length||Ie.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,re.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},re.length?r("button",{className:"mp-hist-clear",onClick:ds},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:us},Ie.length?`卦例库 ${Ie.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},re.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Yi(a)},r("b",null,(Ye.find($=>$.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,Ue==="cast"&&_i?r("div",{key:"auto",className:"mp-auto"},Xt.cast?`起卦时刻用的是你手动填的(${Q});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${Q}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,le?r("div",{key:"err",className:"mp-err",role:"alert"},le):null,Ee?r("div",{key:"ntc",className:"mp-note",role:"status"},Ee):null,Yt?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!f&&!le?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 题就能看结果":Ft.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Ft.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,f?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:es,dangerouslySetInnerHTML:{__html:Nn(f)+as(f)+D.resultWithInterpret("",f.it,{folded:Zn()})+D.perfHTML(N)+D.revisionHTML(f.r.revision)+D.handleHTML(f.r.handle)+D.shadowHTML(f.r.shadow,f.shadowDiff)+D.traceHTML(f.r.trace,f.r.system,f.r.traceText)+D.caliberHTML(f.caliber)}}):null,f?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:ts},On||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:os,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ps,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:fs,title:"把这张盘的参数存进卦例库,日后可回填重排、标应验"},ms?"已存入卦例库":"存入卦例库")):null,f?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:da,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Ut(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Bi()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Bi},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Gi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),te.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},yi()),_a?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},_a):null):null,f?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},te.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Di.map(([a,g,$])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:$,onClick:M=>Wn(a,M.currentTarget)},g))):null,Oa?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:D.followupHTML(Oa)}}):null,f&&f.kind==="bazi"&&f.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),f.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"+(nt[a.year]===g?" on":""),onClick:()=>Ha(Object.assign({},nt,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Zi,onClick:rs},"算贴合度"),ha?r("span",{className:"mp-verify-fit"},`命中 ${ha.yes}/${ha.answered}(${ha.level}):${ha.advice}`):null)):null,f&&f.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),aa.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:$=>vt(aa.map((M,x)=>x===g?Object.assign({},M,{year:$.target.value}):M))}),r("select",{className:"mp-input",value:a.kind,onChange:$=>vt(aa.map((M,x)=>x===g?Object.assign({},M,{kind:$.target.value}):M))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([$,M])=>r("option",{key:$,value:$},M))))),r("button",{className:"mp-btn ghost",style:Zi,onClick:ls},"计算候选时辰"),De?De.error?r("div",{className:"mp-rect-err"},De.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},De.note),De.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===De.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!f&&!le?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:Ui,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},ue||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>ss(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"有疑问?",r("a",{href:"mailto:1129440028@qq.com?subject="+encodeURIComponent("[反馈] 烛微命盘"),style:{color:"inherit"},title:"点开直接写邮件,不用复制任何东西"},"1129440028@qq.com")," · GitHub issues · 微信群 dsh-metaphysics",Te?r("span",{className:"mp-fb-note"}," "+Te):null)),cs?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Qt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${ei.length}/${Ie.length}`),r("button",{className:"mp-cases-x",onClick:Qt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(D.CASE_STATUS.map(a=>[a,D.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Wt===a[0]?" on":""),onClick:()=>Ji(a[0])},`${a[1]} ${gs(a[0])}`))),r("div",{className:"mp-cases-list"},ei.length?ei.map(a=>bs(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:()=>Vi(!1)},"导出 JSONL"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>Vi(!0),title:"去掉出生年份(只留月日)、时刻整点化、去掉出生地——发给群里也不露个人信息"},"导出脱敏版"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},ks)}function Cn(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 Si=!1;function Bt(){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 k=getComputedStyle(s).backgroundColor;s.remove();const P=Fe&&typeof Fe.pickOnColor=="function"?Fe.pickOnColor(k):"";P&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==P&&n.style.setProperty("--mp-on-brand",P)}catch{}}function An(){if(!Si){Si=!0,Bt();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",Bt)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(Bt).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Ln(n){try{const B=Cn(gn+(D&&D.CSS?D.CSS:""));typeof n.effect=="function"&&typeof B=="function"&&n.effect(()=>B)}catch(B){console.error("[metaphysics] 样式注入失败",B)}try{An()}catch(B){console.error("[metaphysics] 字色同步失败",B)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(B){console.error("[metaphysics] 取 slots 服务失败",B)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{te.injectType=typeof s.inject;const B=typeof s.spec=="function"?s.spec("conversation.input.right"):null;te.spec=B?B.kind+"/"+B.scope:"未声明"}catch(B){te.spec="取声明失败",wi(B)}const k=B=>{if(typeof B=="function")return B;if(B&&typeof B=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof B[xe]=="function")return()=>{try{B[xe]()}catch{}}}return()=>{}},P=(B,xe)=>{try{const we=s.register(B,xe);return te.regs+=1,te.seatOk[B.name]=!0,k(we)}catch(we){return wi(we),()=>{}}},Q=(B,xe)=>{const we=()=>{const J=xe();return te.contribution=(te.contribution?te.contribution+",":"")+(B+(typeof J=="function"?" 已挂上":" 未挂上")),J};try{typeof s.inject=="function"?s.inject(B,we):we()}catch(J){console.error("[metaphysics] 等待槽位失败:"+B,J);try{we()}catch(X){console.error("[metaphysics] 直接注册也失败:"+B,X)}}};Q("sidebar.panellist",()=>P({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"烛微命盘 v"+(window.__MP_VER||"")},wn)),Q("main",()=>P({name:"main",key:"metaphysics"},B=>r(yn,null,r(Mn,B))));const pe=(B,xe)=>{const we=()=>{try{const X=s.inject(B,xe);return te.contribution=(te.contribution?te.contribution+",":"")+(B.replace("conversation.","")+(typeof X=="function"?" 已挂上":" 未挂上")),X}catch(X){console.error("[metaphysics] 槽位注册失败:"+B,X);try{return xe()}catch(W){console.error("[metaphysics] 直接注册也失败:"+B,W);return}}};let J;try{typeof n.effect=="function"?J=n.effect(we,"metaphysics: "+B):J=we()}catch(X){console.error("[metaphysics] effect 包裹失败:"+B,X),J=we()}typeof J=="function"&&te.seatDisposers.push(J)};pe("conversation.input.right",()=>P({name:"conversation.input.right",id:"metaphysics-ask",order:40},ki)),pe("conversation.composer.dock",()=>P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},zi));let ce=!1;const de=()=>{te.ref||ce||(ce=!0,te.seatOk["conversation.input.right"]||P({name:"conversation.input.right",id:"metaphysics-ask",order:40},ki),te.seatOk["conversation.composer.dock"]||P({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},zi))};let ye=20;const t=()=>!!(te.seatOk["conversation.input.right"]&&te.seatOk["conversation.composer.dock"]),ke=()=>{te.ref||ye<=0||t()||(ye-=1,de(),!t()&&setTimeout(ke,700))};try{setTimeout(ke,700)}catch{}try{document.addEventListener("pointerdown",()=>{ce=!1,de()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Ln(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});