{"id":29398,"date":"2025-11-24T12:37:41","date_gmt":"2025-11-24T12:37:41","guid":{"rendered":"https:\/\/fortunetellingpro.com\/?page_id=29398"},"modified":"2025-11-26T12:25:27","modified_gmt":"2025-11-26T12:25:27","slug":"qimenai","status":"publish","type":"page","link":"https:\/\/fortunetellingpro.com\/en\/qimenai","title":{"rendered":"Yin Pan Qimen Dunjia Intelligent AI Analysis Version"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"29398\" class=\"elementor elementor-29398\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-03a46d3 e-flex e-con-boxed e-con e-parent\" data-id=\"03a46d3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-02ac7b1 elementor-widget elementor-widget-shortcode\" data-id=\"02ac7b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <style>\r\n        :root {\r\n            --qp-primary: #d9534f;\r\n            --qp-bg: #f7f9fa;\r\n            --qp-god: #8e44ad;\r\n            --qp-star: #333;\r\n            --qp-door: #c0392b;\r\n            --qp-an: #555;\r\n            --qp-grid-line: #888;\r\n            --s-po: #e74c3c; --s-mu: #a0522d; --s-xing: #800080;\r\n        }\r\n        \r\n        .qimen-app { font-family: \"PingFang SC\", \"Microsoft YaHei\", sans-serif; background: var(--qp-bg); margin: 0; padding: 10px; color: #333; max-width: 600px; margin: 0 auto; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.08); position: relative;}\r\n        .qimen-app * { box-sizing: border-box; }\r\n        \r\n        .qimen-app .input-box { padding: 15px; border-bottom: 8px solid #f2f2f2; background: #fff; }\r\n        .qimen-app .row { display: flex; gap: 10px; margin-bottom: 10px; }\r\n        .qimen-app input, .qimen-app select { flex: 1; padding: 10px; border: 1px solid #ddd; border-radius: 6px; font-size: 15px; outline: none; background: #fff; height: 42px;}\r\n        \r\n        \/* \u6309\u94ae\u6837\u5f0f *\/\r\n        .qimen-app .btn { width: 100%; padding: 12px; background: var(--qp-primary); color: #fff; border: none; border-radius: 6px; font-size: 16px; font-weight: bold; cursor: pointer; text-align: center; transition: opacity 0.3s;}\r\n        .qimen-app .btn:hover { opacity: 0.9; }\r\n        .qimen-app .btn-ai { background: #4285f4; margin-top: 10px; }\r\n        .qimen-app .btn-pdf { background: #28a745; margin-top: 10px; } \r\n        .qimen-app .btn:disabled { background: #ccc; cursor: not-allowed; }\r\n\r\n        .qimen-app .info-list { width: 100%; border-collapse: collapse; font-size: 14px; background: #fff; }\r\n        .qimen-app .info-list td { border: 1px solid #f0f0f0; padding: 10px 5px; }\r\n        .qimen-app .lbl { width: 60px; color: #d69e2e; background: #fffdf5; font-weight: bold; text-align: center; }\r\n        .qimen-app .val { text-align: center; color: #333; }\r\n        \r\n        .qimen-app .data-grid { display: grid; grid-template-columns: repeat(5, 1fr); border-top: 1px solid #f0f0f0; background: #fff; }\r\n        .qimen-app .dg-item { border-right: 1px solid #f0f0f0; border-bottom: 1px solid #f0f0f0; text-align: center; padding: 8px 0; }\r\n        .qimen-app .dg-t { color: #d69e2e; font-size: 12px; margin-bottom: 4px; }\r\n        .qimen-app .dg-v { font-weight: bold; font-size: 15px; }\r\n\r\n        .qimen-app .bz-box { display: flex; justify-content: space-around; padding: 15px 0; border-bottom: 1px solid #f0f0f0; background: #fff; }\r\n        .qimen-app .bz-col { display: flex; flex-direction: column; align-items: center; width: 60px; }\r\n        .qimen-app .bz-lbl { font-size: 12px; color: #d69e2e; margin-bottom: 6px; }\r\n        .qimen-app .bz-txt { font-size: 22px; font-weight: bold; font-family: \"KaiTi\", serif; line-height: 1.2; }\r\n\r\n        .qimen-app #qm_res { background: #fff; padding: 10px; border-radius: 8px; position: relative; }\r\n\r\n        \/* \u6c34\u5370\u6837\u5f0f *\/\r\n        .qimen-app .qm-watermark-overlay {\r\n            position: absolute; top: 0; left: 0; width: 100%; height: 100%;\r\n            z-index: 9999; pointer-events: none;\r\n            display: none; \r\n            flex-direction: column; \r\n            justify-content: space-between;\r\n            overflow: hidden;\r\n            background: transparent;\r\n        }\r\n        .qimen-app .qm-wm-row {\r\n            display: flex; justify-content: space-around; width: 150%; margin-left: -25%; \r\n            margin-top: 50px; margin-bottom: 50px;\r\n        }\r\n        .qimen-app .qm-wm-item {\r\n            transform: rotate(-30deg);\r\n            font-size: 18px; \r\n            color: rgba(0,0,0,0.08); \r\n            font-weight: bold; font-family: \"Microsoft YaHei\";\r\n            white-space: nowrap;\r\n        }\r\n\r\n        .qimen-app .grid-wrap { padding: 45px 25px; display: flex; justify-content: center; background: #fff; position: relative; }\r\n        .qimen-app .grid {\r\n            display: grid; grid-template-columns: repeat(3, 1fr); \r\n            border-top: 1px solid var(--qp-grid-line);\r\n            border-left: 1px solid var(--qp-grid-line);\r\n            width: 100%; aspect-ratio: 1;\r\n        }\r\n        .qimen-app .cell { \r\n            background: #fff; position: relative; display: flex; flex-direction: column; overflow: visible;\r\n            border-right: 1px solid var(--qp-grid-line);\r\n            border-bottom: 1px solid var(--qp-grid-line);\r\n            min-height: 90px; \/* \u4fdd\u8bc1\u6700\u5c0f\u9ad8\u5ea6 *\/\r\n        }\r\n        .qimen-app .cell span { color: inherit; } \r\n\r\n        \/* === \u9ed8\u8ba4(\u684c\u9762\u7aef) \u76d8\u9762\u5b9a\u4f4d === *\/\r\n        .qimen-app .p-god { position: absolute; top: 2px; left: 4px; font-size: 16px; font-weight: 800; color: var(--qp-god); z-index: 3; }\r\n        .qimen-app .p-star { position: absolute; top: 20px; right: 4px; font-size: 15px; font-weight: bold; color: var(--qp-star); }\r\n        .qimen-app .p-door { position: absolute; bottom: 28px; right: 8px; font-size: 16px; font-weight: bold; color: var(--qp-door); text-align: right; }\r\n        \/* \u5929\u76d8\u5e72\uff1a\u5782\u76f4\u5c45\u4e2d\u504f\u4e0a *\/\r\n        .qimen-app .p-tian { position: absolute; top: 45%; left: 8px; transform: translateY(-50%); font-size: 20px; font-weight: bold; font-family: \"KaiTi\"; line-height: 1; color:#333; }\r\n        \/* \u5730\u76d8\u5e72\uff1a\u5e95\u90e8\u9760\u5de6 *\/\r\n        .qimen-app .p-di { position: absolute; bottom: 28px; left: 8px; font-size: 20px; font-weight: bold; font-family: \"KaiTi\"; line-height: 1; color:#333; }\r\n        \r\n        .qimen-app .status-bar { position: absolute; bottom: 2px; width: 100%; text-align: center; font-size: 10px; font-weight: bold; display: flex; justify-content: center; gap:3px; flex-wrap: wrap;}\r\n        .qimen-app .mk-ma { position: absolute; top: 2px; right: 4px; color: #d32f2f; font-size: 11px; font-weight: bold; z-index: 4; } \r\n        .qimen-app .mk-kong { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); width:18px; height:18px; border:1px solid #666; border-radius:50%; text-align:center; line-height:16px; font-size:11px; color:#666; opacity:0.5;}\r\n        .qimen-app .bg-n { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); font-size:60px; color:rgba(0,0,0,0.04); pointer-events:none; font-family: \"KaiTi\";}\r\n\r\n        .qimen-app .out-gan { position: absolute; font-size: 16px; font-weight: bold; color: var(--qp-an); font-family: \"KaiTi\"; z-index: 5; text-align: center; white-space: nowrap; }\r\n        .qimen-app .out-4, .qimen-app .out-9, .qimen-app .out-2 { top: -28px; left: 50%; transform: translateX(-50%); }\r\n        .qimen-app .out-8, .qimen-app .out-1, .qimen-app .out-6 { bottom: -28px; left: 50%; transform: translateX(-50%); }\r\n        .qimen-app .out-3 { left: -28px; top: 50%; transform: translateY(-50%); }\r\n        .qimen-app .out-7 { right: -28px; top: 50%; transform: translateY(-50%); }\r\n\r\n        \/* === \u79fb\u52a8\u7aef\u9002\u914d (\u91cd\u70b9\u4fee\u6539\u90e8\u5206) === *\/\r\n        @media screen and (max-width: 600px) {\r\n            .qimen-app .grid-wrap { padding: 30px 10px; } \/* \u51cf\u5c11\u5916\u8fb9\u8ddd *\/\r\n            \r\n            \/* \u5b57\u4f53\u7f29\u5c0f *\/\r\n            .qimen-app .p-god { font-size: 12px; top: 1px; left: 2px; } \/* \u795e *\/\r\n            .qimen-app .p-star { font-size: 12px; top: 16px; right: 2px; } \/* \u661f (\u5f80\u4e0b\u632a\u4e00\u70b9\u7ed9\u9a6c\u661f\u817e\u5730) *\/\r\n            .qimen-app .mk-ma { font-size: 10px; top: 1px; right: 2px; } \/* \u9a6c\u661f *\/\r\n            \r\n            \/* \u5e72\u652f\u5b57\u4f53\u5fae\u8c03\uff0c\u4f4d\u7f6e\u8c03\u6574 *\/\r\n            .qimen-app .p-tian { font-size: 16px; left: 4px; top: 42%; } \/* \u5929\u76d8\u5e72 *\/\r\n            .qimen-app .p-di { font-size: 16px; left: 4px; bottom: 20px; } \/* \u5730\u76d8\u5e72 *\/\r\n            \r\n            \/* \u95e8 \u7f29\u5c0f\u5e76\u9760\u53f3 *\/\r\n            .qimen-app .p-door { font-size: 13px; bottom: 20px; right: 2px; } \r\n\r\n            \/* \u5e95\u90e8\u72b6\u6001\u680f (\u95e8\u8feb\/\u51fb\u5211\u7b49) \u7f29\u5c0f\u5b57\u4f53 *\/\r\n            .qimen-app .status-bar { font-size: 9px; bottom: 1px; width: 98%; left:1%; gap: 1px; line-height: 1; }\r\n            .qimen-app .status-bar span { padding: 0 1px; }\r\n\r\n            \/* \u80cc\u666f\u516b\u5366\u5b57\u53d8\u5c0f *\/\r\n            .qimen-app .bg-n { font-size: 30px; }\r\n            \r\n            \/* \u5916\u90e8\u5f15\u5e72 *\/\r\n            .qimen-app .out-gan { font-size: 14px; }\r\n            .qimen-app .out-4, .qimen-app .out-9, .qimen-app .out-2 { top: -20px; }\r\n            .qimen-app .out-8, .qimen-app .out-1, .qimen-app .out-6 { bottom: -20px; }\r\n            .qimen-app .out-3 { left: -15px; }\r\n            .qimen-app .out-7 { right: -15px; }\r\n        }\r\n\r\n        .qimen-app .analysis-box { background: #fff; margin-top: 10px; border-top: 1px solid #eee; padding: 20px; }\r\n        .qimen-app .ana-title { font-size: 20px; font-weight: bold; margin-bottom: 15px; color: #333; border-bottom: 2px solid var(--qp-primary); display: inline-block; padding-bottom: 5px; }\r\n        .qimen-app .ana-item { margin-bottom: 15px; font-size: 16px; line-height: 1.6; border-bottom: 1px dashed #eee; padding-bottom: 10px; }\r\n        .qimen-app .ana-header { font-weight: bold; display: block; font-size: 18px; margin-bottom: 5px; } \r\n        .qimen-app .ana-desc { color: #555; }\r\n        .qimen-app .ana-bad { color: #c0392b; } .qimen-app .ana-good { color: #27ae60; } \r\n\r\n        .qimen-app #ai-result { \r\n            background: #f0f7ff; padding: 15px; border-radius: 8px; margin-top: 15px; border: 1px solid #cce0ff; \r\n            font-size: 15px; line-height: 1.7; display: none; color: #333;\r\n        }\r\n        .qimen-app #ai-result h3 { color: #1967d2; margin-top: 0; }\r\n        .qimen-app #ai-result strong { color: #d93025; }\r\n        .qimen-app #ai-result ul { padding-left: 20px; margin: 10px 0; }\r\n        .qimen-app #ai-result li { margin-bottom: 5px; }\r\n        \r\n        .loader { border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; width: 20px; height: 20px; animation: spin 2s linear infinite; display: inline-block; vertical-align: middle; margin-right: 10px; }\r\n        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\r\n    <\/style>\r\n\r\n    <div class=\"qimen-app\">\r\n        <div class=\"input-box\">\r\n            <div class=\"row\">\r\n                <input type=\"text\" id=\"qm_eventInput\" placeholder=\"Inquiry Matters (Required, AI Analysis Basis)\">\r\n            <\/div>\r\n            <div class=\"row\">\r\n                <select id=\"qm_panType\">\r\n                    <option value=\"shi\">Market Hours<\/option>\r\n                    <option value=\"ke\">Quarterly Chart (15 minutes)<\/option>\r\n                <\/select>\r\n                <input type=\"number\" id=\"qm_lng\" value=\"120.0\" placeholder=\"Longitude\">\r\n            <\/div>\r\n            <div class=\"row\">\r\n                <input type=\"datetime-local\" id=\"qm_dt\">\r\n            <\/div>\r\n            <button class=\"btn\" onclick=\"QimenApp.run()\">Immediately Generate Chart<\/button>\r\n            <button class=\"btn btn-ai\" id=\"qm_aiBtn\" onclick=\"QimenApp.callAI()\" disabled>\ud83e\udd16 Intelligent Chart Analysis (AI)<\/button>\r\n            <button class=\"btn btn-pdf\" id=\"qm_pdfBtn\" onclick=\"QimenApp.downloadPDF()\" style=\"display:none;\">\ud83d\udcc4 Download Watermarked PDF<\/button>\r\n        <\/div>\r\n\r\n        <div id=\"qm_res\" style=\"display:none;\">\r\n            <div id=\"qm_watermark_layer\" class=\"qm-watermark-overlay\"><\/div>\r\n\r\n            <table class=\"info-list\">\r\n                <tr><td class=\"lbl\">Item<\/td><td class=\"val\" id=\"qm_r_evt\"><\/td><\/tr>\r\n                <tr><td class=\"lbl\">Time<\/td><td class=\"val\" id=\"qm_r_time\"><\/td><\/tr>\r\n                <tr><td class=\"lbl\">True Sun<\/td><td class=\"val\" id=\"qm_r_solar\"><\/td><\/tr>\r\n                <tr><td class=\"lbl\">Solar Term<\/td><td class=\"val gray\" id=\"qm_r_jq\"><\/td><\/tr>\r\n                <tr><td class=\"lbl\">Type<\/td><td class=\"val\" id=\"qm_r_type\" style=\"font-weight:bold;\"><\/td><\/tr>\r\n            <\/table>\r\n\r\n            <div class=\"data-grid\">\r\n                <div class=\"dg-item\"><div class=\"dg-t\">Start of Ten-Day Period<\/div><div class=\"dg-v\" id=\"qm_d_xun\"><\/div><\/div>\r\n                <div class=\"dg-item\"><div class=\"dg-t\">Deity Symbol<\/div><div class=\"dg-v\" id=\"qm_d_zf\"><\/div><\/div>\r\n                <div class=\"dg-item\"><div class=\"dg-t\">Deity Use<\/div><div class=\"dg-v\" id=\"qm_d_zs\"><\/div><\/div>\r\n                <div class=\"dg-item\"><div class=\"dg-t\">Horse Star<\/div><div class=\"dg-v\" id=\"qm_d_ma\"><\/div><\/div>\r\n                <div class=\"dg-item\"><div class=\"dg-t\">Void<\/div><div class=\"dg-v\" id=\"qm_d_kong\"><\/div><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bz-box\" id=\"qm_bz_container\"><\/div>\r\n\r\n            <div class=\"grid-wrap\">\r\n                <div class=\"grid\" id=\"qm_grid\"><\/div>\r\n            <\/div>\r\n\r\n            <div id=\"qm_ai-container\" style=\"padding: 0 20px 20px 20px;\">\r\n                <div id=\"qm_ai-loading\" style=\"display:none; color:#666; text-align:center; padding:20px;\">\r\n                    <div class=\"loader\"><\/div> Currently performing AI deep analysis...\r\n                <\/div>\r\n                <div id=\"ai-result\"><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"analysis-box\">\r\n                <div class=\"ana-title\">Basic Pattern Quick Check<\/div>\r\n                <div id=\"qm_analysis-content\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n    var QimenApp = (function() {\r\n        let globalChartData = null;\r\n        \r\n        const WX = {'\u7532':'var(--c-wood)','\u4e59':'var(--c-wood)','\u5bc5':'var(--c-wood)','\u536f':'var(--c-wood)','\u4e19':'var(--c-fire)','\u4e01':'var(--c-fire)','\u5df3':'var(--c-fire)','\u5348':'var(--c-fire)','\u620a':'var(--c-earth)','\u5df1':'var(--c-earth)','\u8fb0':'var(--c-earth)','\u620c':'var(--c-earth)','\u4e11':'var(--c-earth)','\u672a':'var(--c-earth)','\u5e9a':'var(--c-metal)','\u8f9b':'var(--c-metal)','\u7533':'var(--c-metal)','\u9149':'var(--c-metal)','\u58ec':'var(--c-water)','\u7678':'var(--c-water)','\u4ea5':'var(--c-water)','\u5b50':'var(--c-water)'};\r\n        function color(s) { \r\n            let c = '#333';\r\n            if('\u7532\u4e59\u5bc5\u536f'.includes(s)) c = '#2e7d32';\r\n            else if('\u4e19\u4e01\u5df3\u5348'.includes(s)) c = '#d32f2f';\r\n            else if('\u620a\u5df1\u8fb0\u620c\u4e11\u672a'.includes(s)) c = '#8d6e63';\r\n            else if('\u5e9a\u8f9b\u7533\u9149'.includes(s)) c = '#f0b27a';\r\n            else if('\u58ec\u7678\u4ea5\u5b50'.includes(s)) c = '#1976d2';\r\n            return `<span style=\"color:${c}\">${s}<\/span>`; \r\n        }\r\n\r\n        const KE_YING = {\r\n             '\u4e59\u4e59': '\u3010\u65e5\u5947\u4f0f\u541f\u3011\u5409\u661f\u8fc1\u5b98\uff0c\u51f6\u661f\u79bb\u522b\u3002', '\u4e59\u4e19': '\u3010\u5947\u4eea\u987a\u9042\u3011\u5409\u661f\u8fc1\u5b98\uff0c\u51f6\u661f\u79bb\u522b\u3002', '\u4e59\u4e01': '\u3010\u5947\u4eea\u76f8\u4f50\u3011\u6587\u4e66\u5409\u3002', '\u4e59\u620a': '\u3010\u9634\u5bb3\u9633\u95e8\u3011\u4e0d\u5229\u9633\u4eba\u3002', '\u4e59\u5df1': '\u3010\u65e5\u5947\u5165\u5893\u3011\u95e8\u6237\u4e0d\u660e\u3002', '\u4e59\u5e9a': '\u3010\u65e5\u5947\u88ab\u5211\u3011\u4e89\u8bbc\u8d22\u4ea7\u3002', '\u4e59\u8f9b': '\u3010\u9752\u9f99\u9003\u8d70\u3011\u4eba\u4ea1\u8d22\u7834\u3002', '\u4e59\u58ec': '\u3010\u65e5\u5947\u5165\u5730\u3011\u5c0a\u5351\u6096\u4e71\u3002', '\u4e59\u7678': '\u3010\u534e\u76d6\u9022\u661f\u3011\u9041\u8ff9\u4fee\u9053\u3002',\r\n            '\u4e19\u4e59': '\u3010\u65e5\u6708\u5e76\u884c\u3011\u516c\u79c1\u7686\u5409\u3002', '\u4e19\u4e19': '\u3010\u6708\u5947\u6096\u5e08\u3011\u7834\u8017\u9057\u5931\u3002', '\u4e19\u4e01': '\u3010\u6708\u5947\u6731\u96c0\u3011\u6587\u4e66\u5409\u3002', '\u4e19\u620a': '\u3010\u98de\u9e1f\u8dcc\u7a74\u3011\u4e0d\u52b3\u800c\u83b7\u3002', '\u4e19\u5df1': '\u3010\u706b\u6096\u5165\u5211\u3011\u6587\u4e66\u4e0d\u884c\u3002', '\u4e19\u5e9a': '\u3010\u8367\u5165\u592a\u767d\u3011\u95e8\u6237\u7834\u8d25\u3002', '\u4e19\u8f9b': '\u3010\u8c0b\u4e8b\u80fd\u6210\u3011\u5408\u795e\u76f8\u52a9\u3002', '\u4e19\u58ec': '\u3010\u706b\u5165\u5929\u7f57\u3011\u662f\u975e\u9887\u591a\u3002', '\u4e19\u7678': '\u3010\u534e\u76d6\u6096\u5e08\u3011\u707e\u7978\u9891\u751f\u3002',\r\n            '\u4e01\u4e59': '\u3010\u7389\u5973\u5947\u751f\u3011\u4eba\u60c5\u548c\u5408\u3002', '\u4e01\u4e19': '\u3010\u661f\u968f\u6708\u8f6c\u3011\u8d35\u4eba\u8d8a\u7ea7\u3002', '\u4e01\u4e01': '\u3010\u661f\u5947\u5165\u592a\u9634\u3011\u6587\u4e66\u5373\u81f3\u3002', '\u4e01\u620a': '\u3010\u9752\u9f99\u8f6c\u5149\u3011\u5b98\u4eba\u5347\u8fc1\u3002', '\u4e01\u5df1': '\u3010\u706b\u5165\u52fe\u9648\u3011\u4e8b\u591a\u4e0d\u987a\u3002', '\u4e01\u5e9a': '\u3010\u6587\u4e66\u963b\u9694\u3011\u884c\u4eba\u5fc5\u5f52\u3002', '\u4e01\u8f9b': '\u3010\u6731\u96c0\u5165\u72f1\u3011\u5b98\u4eba\u5931\u4f4d\u3002', '\u4e01\u58ec': '\u3010\u4e94\u795e\u4e92\u5408\u3011\u8bbc\u72f1\u516c\u5e73\u3002', '\u4e01\u7678': '\u3010\u6731\u96c0\u6295\u6c5f\u3011\u6587\u4e66\u53e3\u820c\u3002',\r\n            '\u620a\u4e59': '\u3010\u9752\u9f99\u5408\u4f1a\u3011\u95e8\u5409\u4e8b\u5409\u3002', '\u620a\u4e19': '\u3010\u9752\u9f99\u8fd4\u9996\u3011\u5927\u5409\u5927\u5229\u3002', '\u620a\u4e01': '\u3010\u9752\u9f99\u8000\u660e\u3011\u8c12\u8d35\u6c42\u540d\u3002', '\u620a\u620a': '\u3010\u4f0f\u541f\u3011\u51e1\u4e8b\u95ed\u585e\u3002', '\u620a\u5df1': '\u3010\u8d35\u4eba\u5165\u72f1\u3011\u516c\u79c1\u4e0d\u5229\u3002', '\u620a\u5e9a': '\u3010\u503c\u7b26\u98de\u5bab\u3011\u5409\u4e8b\u4e0d\u5409\u3002', '\u620a\u8f9b': '\u3010\u9752\u9f99\u6298\u8db3\u3011\u5409\u95e8\u751f\u52a9\u5c1a\u53ef\u3002', '\u620a\u58ec': '\u3010\u9752\u9f99\u5165\u5929\u7262\u3011\u51e1\u4e8b\u4e0d\u5229\u3002', '\u620a\u7678': '\u3010\u9752\u9f99\u534e\u76d6\u3011\u5409\u95e8\u62db\u798f\u3002',\r\n            '\u5df1\u4e59': '\u3010\u5893\u795e\u4e0d\u660e\u3011\u4e8b\u591a\u4e0d\u660e\u3002', '\u5df1\u4e19': '\u3010\u706b\u6096\u5730\u6237\u3011\u9634\u4eba\u5bb3\u4e8b\u3002', '\u5df1\u4e01': '\u3010\u6731\u96c0\u5165\u5893\u3011\u6587\u4e66\u8bcd\u8bbc\u3002', '\u5df1\u620a': '\u3010\u72ac\u9047\u9752\u9f99\u3011\u95e8\u5409\u5f97\u8c0b\u3002', '\u5df1\u5df1': '\u3010\u5730\u6237\u9022\u9b3c\u3011\u767e\u4e8b\u4e0d\u9042\u3002', '\u5df1\u5e9a': '\u3010\u5211\u683c\u8fd4\u540d\u3011\u8bcd\u8bbc\u4e0d\u5229\u3002', '\u5df1\u8f9b': '\u3010\u6e38\u9b42\u5165\u5893\u3011\u9634\u4eba\u4f5c\u795f\u3002', '\u5df1\u58ec': '\u3010\u5730\u7f51\u9ad8\u5f20\u3011\u5978\u60c5\u6740\u4f24\u3002', '\u5df1\u7678': '\u3010\u5730\u5211\u7384\u6b66\u3011\u75be\u75c5\u5782\u5371\u3002',\r\n            '\u5e9a\u4e59': '\u3010\u592a\u767d\u9022\u661f\u3011\u9000\u5409\u8fdb\u51f6\u3002', '\u5e9a\u4e19': '\u3010\u592a\u767d\u5165\u8367\u3011\u5360\u8d3c\u5fc5\u6765\u3002', '\u5e9a\u4e01': '\u3010\u4ead\u4ead\u4e4b\u683c\u3011\u56e0\u79c1\u8d77\u8bbc\u3002', '\u5e9a\u620a': '\u3010\u5929\u4e59\u4f0f\u5bab\u3011\u767e\u4e8b\u4e0d\u53ef\u8c0b\u3002', '\u5e9a\u5df1': '\u3010\u5211\u683c\u3011\u5b98\u53f8\u88ab\u5211\u3002', '\u5e9a\u5e9a': '\u3010\u592a\u767d\u540c\u5bab\u3011\u5b98\u707e\u6a2a\u7978\u3002', '\u5e9a\u8f9b': '\u3010\u767d\u864e\u5e72\u683c\u3011\u6c42\u8d22\u5927\u51f6\u3002', '\u5e9a\u58ec': '\u3010\u4e0a\u683c\u3011\u97f3\u4fe1\u96be\u901a\u3002', '\u5e9a\u7678': '\u3010\u5927\u683c\u3011\u884c\u4eba\u4e0d\u5f52\u3002',\r\n            '\u8f9b\u4e59': '\u3010\u767d\u864e\u7316\u72c2\u3011\u5bb6\u8d25\u4eba\u4ea1\u3002', '\u8f9b\u4e19': '\u3010\u5e72\u5408\u6096\u5e08\u3011\u5360\u96e8\u65e0\u96e8\u3002', '\u8f9b\u4e01': '\u3010\u72f1\u795e\u5f97\u5947\u3011\u7ecf\u5546\u83b7\u500d\u5229\u3002', '\u8f9b\u620a': '\u3010\u56f0\u9f99\u88ab\u4f24\u3011\u8c0b\u671b\u4e0d\u6210\u3002', '\u8f9b\u5df1': '\u3010\u5165\u72f1\u81ea\u5211\u3011\u8bbc\u8bc9\u96be\u4f38\u3002', '\u8f9b\u5e9a': '\u3010\u767d\u864e\u51fa\u529b\u3011\u5200\u5203\u76f8\u63a5\u3002', '\u8f9b\u8f9b': '\u3010\u4f0f\u541f\u5929\u5ead\u3011\u51e1\u4e8b\u4e56\u5f20\u3002', '\u8f9b\u58ec': '\u3010\u51f6\u86c7\u5165\u72f1\u3011\u4e24\u7537\u4e89\u5973\u3002', '\u8f9b\u7678': '\u3010\u5929\u7262\u534e\u76d6\u3011\u8bef\u5165\u5929\u7f51\u3002',\r\n            '\u58ec\u4e59': '\u3010\u5c0f\u86c7\u5f97\u52bf\u3011\u7537\u4eba\u55df\u53f9\u3002', '\u58ec\u4e19': '\u3010\u6c34\u86c7\u5165\u706b\u3011\u5b98\u707e\u5211\u7981\u3002', '\u58ec\u4e01': '\u3010\u5e72\u5408\u661f\u5947\u3011\u6587\u4e66\u5409\u3002', '\u58ec\u620a': '\u3010\u5c0f\u86c7\u5316\u9f99\u3011\u7537\u4eba\u53d1\u8fbe\u3002', '\u58ec\u5df1': '\u3010\u53cd\u541f\u86c7\u5211\u3011\u5927\u7978\u5c06\u81f3\u3002', '\u58ec\u5e9a': '\u3010\u592a\u767d\u64d2\u86c7\u3011\u5211\u72f1\u516c\u5e73\u3002', '\u58ec\u8f9b': '\u3010\u817e\u86c7\u76f8\u7f20\u3011\u7eb5\u5409\u4e0d\u5b89\u3002', '\u58ec\u58ec': '\u3010\u86c7\u5165\u5730\u7f57\u3011\u5916\u4eba\u7f20\u7ed5\u3002', '\u58ec\u7678': '\u3010\u5e7c\u5973\u5978\u6deb\u3011\u95e8\u6237\u7834\u8d25\u3002',\r\n            '\u7678\u4e59': '\u3010\u534e\u76d6\u9022\u661f\u3011\u8d35\u4eba\u7984\u4f4d\u3002', '\u7678\u4e19': '\u3010\u534e\u76d6\u6096\u5e08\u3011\u8d35\u8d31\u7686\u4e0d\u5229\u3002', '\u7678\u4e01': '\u3010\u817e\u86c7\u592d\u77eb\u3011\u6587\u4e66\u5b98\u53f8\u3002', '\u7678\u620a': '\u3010\u5929\u4e59\u4f1a\u5408\u3011\u5409\u95e8\u8d22\u5a5a\u559c\u3002', '\u7678\u5df1': '\u3010\u534e\u76d6\u5730\u6237\u3011\u97f3\u4fe1\u7686\u963b\u3002', '\u7678\u5e9a': '\u3010\u592a\u767d\u5165\u7f51\u3011\u66b4\u529b\u4e89\u8bbc\u3002', '\u7678\u8f9b': '\u3010\u7f51\u76d6\u5929\u7262\u3011\u5b98\u53f8\u8d25\u8bc9\u3002', '\u7678\u58ec': '\u3010\u590d\u89c1\u817e\u86c7\u3011\u5ac1\u5a36\u91cd\u5a5a\u3002', '\u7678\u7678': '\u3010\u5929\u7f51\u56db\u5f20\u3011\u75c5\u8bbc\u7686\u4f24\u3002'\r\n        };\r\n        const LUOSHU = [1, 8, 3, 4, 9, 2, 7, 6];\r\n        const BAGUA_MAP = {1:'\u574e', 2:'\u5764', 3:'\u9707', 4:'\u5dfd', 5:'\u4e2d', 6:'\u4e7e', 7:'\u5151', 8:'\u826e', 9:'\u79bb'};\r\n        const STARS = ['', '\u5929\u84ec', '\u5929\u82ae', '\u5929\u51b2', '\u5929\u8f85', '\u5929\u79bd', '\u5929\u5fc3', '\u5929\u67f1', '\u5929\u4efb', '\u5929\u82f1'];\r\n        const DOORS = ['', '\u4f11\u95e8', '\u6b7b\u95e8', '\u4f24\u95e8', '\u675c\u95e8', '', '\u5f00\u95e8', '\u60ca\u95e8', '\u751f\u95e8', '\u666f\u95e8'];\r\n        const GODS = ['\u503c\u7b26', '\u817e\u86c7', '\u592a\u9634', '\u516d\u5408', '\u767d\u864e', '\u7384\u6b66', '\u4e5d\u5730', '\u4e5d\u5929'];\r\n        const ZHI = {'\u5b50':1, '\u4e11':2, '\u5bc5':3, '\u536f':4, '\u8fb0':5, '\u5df3':6, '\u5348':7, '\u672a':8, '\u7533':9, '\u9149':10, '\u620c':11, '\u4ea5':12};\r\n        const GAN = ['\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678', '\u4e01', '\u4e19', '\u4e59'];\r\n        const AN_GAN_SEQ = ['\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678', '\u4e01', '\u4e19', '\u4e59'];\r\n        const JIAZI = [];\r\n        const G_ARR = [\"\u7532\",\"\u4e59\",\"\u4e19\",\"\u4e01\",\"\u620a\",\"\u5df1\",\"\u5e9a\",\"\u8f9b\",\"\u58ec\",\"\u7678\"];\r\n        const Z_ARR = [\"\u5b50\",\"\u4e11\",\"\u5bc5\",\"\u536f\",\"\u8fb0\",\"\u5df3\",\"\u5348\",\"\u672a\",\"\u7533\",\"\u9149\",\"\u620c\",\"\u4ea5\"];\r\n        for(let i=0; i<60; i++) { JIAZI.push(G_ARR[i%10] + Z_ARR[i%12]); }\r\n        const XUN_MAP = {'\u7532\u5b50':'\u620a','\u7532\u620c':'\u5df1','\u7532\u7533':'\u5e9a','\u7532\u5348':'\u8f9b','\u7532\u8fb0':'\u58ec','\u7532\u5bc5':'\u7678'};\r\n        const YJ = {'\u51ac\u81f3':'\u4e11', '\u5c0f\u5bd2':'\u4e11', '\u5927\u5bd2':'\u5b50', '\u7acb\u6625':'\u5b50', '\u96e8\u6c34':'\u4ea5', '\u60ca\u86f0':'\u4ea5', '\u6625\u5206':'\u620c', '\u6e05\u660e':'\u620c', '\u8c37\u96e8':'\u9149', '\u7acb\u590f':'\u9149', '\u5c0f\u6ee1':'\u7533', '\u8292\u79cd':'\u7533','\u590f\u81f3':'\u672a', '\u5c0f\u6691':'\u672a', '\u5927\u6691':'\u5348', '\u7acb\u79cb':'\u5348', '\u5904\u6691':'\u5df3', '\u767d\u9732':'\u5df3','\u79cb\u5206':'\u8fb0', '\u5bd2\u9732':'\u8fb0', '\u971c\u964d':'\u536f', '\u7acb\u51ac':'\u536f', '\u5c0f\u96ea':'\u5bc5', '\u5927\u96ea':'\u5bc5'};\r\n\r\n        document.addEventListener('DOMContentLoaded', function() {\r\n            let now = new Date();\r\n            let offset = now.getTimezoneOffset() * 60000;\r\n            let el = document.getElementById('qm_dt');\r\n            if(el) el.value = (new Date(now - offset)).toISOString().slice(0, 16);\r\n        });\r\n\r\n        function getXunInfo(gzStr) {\r\n            let idx = JIAZI.indexOf(gzStr);\r\n            if(idx === -1) return { xun:'\u672a\u77e5', head:'\u620a', kong:'' };\r\n            let xunIdx = idx - (idx % 10);\r\n            let xunStr = JIAZI[xunIdx];\r\n            let head = XUN_MAP[xunStr];\r\n            let xunZhi = xunStr.substring(1);\r\n            let zIdx = Z_ARR.indexOf(xunZhi);\r\n            let k1 = Z_ARR[(zIdx - 2 + 12) % 12];\r\n            let k2 = Z_ARR[(zIdx - 1 + 12) % 12];\r\n            return { xun: xunStr, head: head, kong: k1 + k2 };\r\n        }\r\n\r\n        function run() {\r\n            try {\r\n                if(!window.Lunar) { alert(\"Lunar.js \u5c1a\u672a\u52a0\u8f7d\u5b8c\u6210\uff0c\u8bf7\u7a0d\u5019\u518d\u8bd5\"); return; }\r\n                document.getElementById('qm_res').style.display = 'block';\r\n                document.getElementById('ai-result').style.display = 'none'; \r\n                document.getElementById('qm_pdfBtn').style.display = 'inline-block';\r\n                \r\n                let evt = document.getElementById('qm_eventInput').value || \"\u65e0\u4e8b\u5b9c\";\r\n                document.getElementById('qm_r_evt').innerText = evt;\r\n                let type = document.getElementById('qm_panType').value;\r\n                let d = new Date(document.getElementById('qm_dt').value);\r\n                let lng = parseFloat(document.getElementById('qm_lng').value);\r\n                let td = new Date(d.getTime() + (lng - 120)*240000); \r\n                let lunar = Lunar.fromDate(td);\r\n                let bz = lunar.getEightChar();\r\n                \r\n                let h = td.getHours(); let m = td.getMinutes();\r\n                let isOdd = (h % 2 !== 0); if(h === 23) isOdd = true;\r\n                let mins = isOdd ? m : (60 + m);\r\n                let keIdx = Math.floor(mins \/ 15) + 1; if(keIdx > 8) keIdx = 8;\r\n\r\n                let useGanZhiStr, useGan, useZhi, keGZ_Str = \"\";\r\n\r\n                if (type === 'ke') {\r\n                    let anchorH = 34; let anchorK_val = 57; let anchorK_idx = 7; \r\n                    let hGZ = bz.getTimeGan() + bz.getTimeZhi();\r\n                    let hIdx = JIAZI.indexOf(hGZ);\r\n                    let diffH = hIdx - anchorH; if (diffH < -30) diffH += 60; \r\n                    let kIdx = (anchorK_val + (diffH * 8) + (keIdx - anchorK_idx)) % 60;\r\n                    if (kIdx < 0) kIdx += 60;\r\n                    keGZ_Str = JIAZI[kIdx];\r\n                    useGanZhiStr = keGZ_Str; useGan = keGZ_Str[0]; useZhi = keGZ_Str[1];\r\n                } else {\r\n                    useGanZhiStr = bz.getTimeGan() + bz.getTimeZhi();\r\n                    useGan = bz.getTimeGan(); useZhi = bz.getTimeZhi();\r\n                }\r\n\r\n                let yz = bz.getYearZhi(); let hz = bz.getTimeZhi();\r\n                let lm = lunar.getMonth(); if(lm>12) lm-=12;\r\n                let ld = lunar.getDay();\r\n                let sum = (type === 'ke') ? (lm + ld + ZHI[hz] + keIdx) : (ZHI[yz] + lm + ld + ZHI[hz]);\r\n                let ju = sum % 9; if(ju===0) ju=9;\r\n                \r\n                let prev = lunar.getPrevJieQi(true);\r\n                let next = lunar.getNextJieQi(true);\r\n                let yjName = YJ[prev.getName()] || \"\u5bc5\";\r\n                document.getElementById('qm_r_time').innerText = d.toLocaleString('zh-CN', {hour12:false});\r\n                document.getElementById('qm_r_solar').innerText = td.toLocaleString('zh-CN', {hour12:false});\r\n                document.getElementById('qm_r_jq').innerText = `${prev.getName()} ~ ${next.getName()}`;\r\n                let typeTxt = (type==='ke') ? '\u523b\u76d8' : '\u65f6\u76d8';\r\n                let fullType = `${typeTxt} \u00b7 \u9634\u9041${ju}\u5c40 \u3010\u6708\u5c06${yjName}\u3011`;\r\n                document.getElementById('qm_r_type').innerText = fullType;\r\n\r\n                let bzArr = [\r\n                    {t:'\u5e74\u67f1', g:bz.getYearGan(), z:bz.getYearZhi()},\r\n                    {t:'\u6708\u67f1', g:bz.getMonthGan(), z:bz.getMonthZhi()},\r\n                    {t:'\u65e5\u67f1', g:bz.getDayGan(), z:bz.getDayZhi()},\r\n                    {t:'\u65f6\u67f1', g:bz.getTimeGan(), z:bz.getTimeZhi()}\r\n                ];\r\n                if (type === 'ke') bzArr = [bzArr[1], bzArr[2], bzArr[3], {t:'\u523b\u67f1', g:keGZ_Str[0], z:keGZ_Str[1]}];\r\n                let bzContainer = document.getElementById('qm_bz_container');\r\n                bzContainer.innerHTML = '';\r\n                let bzStrList = [];\r\n                bzArr.forEach(item => {\r\n                    bzStrList.push(item.g + item.z);\r\n                    let div = document.createElement('div');\r\n                    div.className = 'bz-col';\r\n                    div.innerHTML = `<div class=\"bz-lbl\">${item.t}<\/div><div class=\"bz-txt\"><div>${color(item.g)}<\/div><div>${color(item.z)}<\/div><\/div>`;\r\n                    bzContainer.appendChild(div);\r\n                });\r\n\r\n                let pan = {}; for(let i=1;i<=9;i++) pan[i]={di:'',tian:'',star:'',door:'',god:''};\r\n                GAN.forEach((g,i)=>{ let p = ju - i; while(p<1)p+=9; pan[p].di = g; });\r\n                \r\n                let xunInfo = getXunInfo(useGanZhiStr);\r\n                let head = xunInfo.head;\r\n                document.getElementById('qm_d_xun').innerText = xunInfo.xun + head;\r\n                \r\n                let leadPos = -1; for(let i=1;i<=9;i++) if(pan[i].di===head) leadPos=i;\r\n                document.getElementById('qm_d_zf').innerText = STARS[leadPos];\r\n                \r\n                let dOff = 0;\r\n                if (type === 'ke') {\r\n                } else {\r\n                    let bMap = {'\u5b50':1,'\u4e11':8,'\u5bc5':8,'\u536f':3,'\u8fb0':4,'\u5df3':4,'\u5348':9,'\u672a':2,'\u7533':2,'\u9149':7,'\u620c':6,'\u4ea5':6};\r\n                    let tbPos = bMap[useZhi];\r\n                    dOff = LUOSHU.indexOf(tbPos) - LUOSHU.indexOf(leadPos);\r\n                }\r\n                \r\n                let zsStartIdx = LUOSHU.indexOf(leadPos);\r\n                let zsEndIdx = (zsStartIdx + dOff) % 8; if(zsEndIdx<0) zsEndIdx+=8;\r\n                let zsLandPos = LUOSHU[zsEndIdx];\r\n                document.getElementById('qm_d_zs').innerText = DOORS[leadPos]; \r\n                \r\n                let ma=\"\"; if(\"\u7533\u5b50\u8fb0\".includes(hz))ma=\"\u5bc5\"; else if(\"\u5bc5\u5348\u620c\".includes(hz))ma=\"\u7533\"; else if(\"\u4ea5\u536f\u672a\".includes(hz))ma=\"\u5df3\"; else ma=\"\u4ea5\";\r\n                document.getElementById('qm_d_ma').innerText = ma;\r\n                document.getElementById('qm_d_kong').innerText = xunInfo.kong;\r\n\r\n                let tGan = (useGan==='\u7532')? head : useGan;\r\n                let tPos = -1; for(let i=1;i<=9;i++) if(pan[i].di===tGan) tPos=i;\r\n                \r\n                let sOff = LUOSHU.indexOf(tPos) - LUOSHU.indexOf(leadPos);\r\n                LUOSHU.forEach((orig,i)=>{\r\n                    let ti = i + sOff; while(ti>=8)ti-=8; while(ti<0)ti+=8;\r\n                    let dest = LUOSHU[ti];\r\n                    pan[dest].star = STARS[orig];\r\n                    pan[dest].tian = pan[orig].di;\r\n                });\r\n                \r\n                if (type === 'ke') dOff = sOff;\r\n                \r\n                LUOSHU.forEach((orig,i)=>{\r\n                    let ti = i + dOff; while(ti>=8)ti-=8; while(ti<0)ti+=8;\r\n                    let dest = LUOSHU[ti];\r\n                    pan[dest].door = DOORS[orig];\r\n                });\r\n                \r\n                let gStart = LUOSHU.indexOf(tPos);\r\n                GODS.forEach((g,i)=>{\r\n                    let idx = gStart - i; while(idx<0) idx+=8;\r\n                    pan[LUOSHU[idx]].god = g;\r\n                });\r\n\r\n                let anGanMap = {};\r\n                let startGanIdx = AN_GAN_SEQ.indexOf(tGan);\r\n                \r\n                for(let k=0; k<9; k++) {\r\n                    let currGan = AN_GAN_SEQ[(startGanIdx + k) % 9];\r\n                    let p = (zsLandPos + k);\r\n                    let landP = (p - 1) % 9 + 1;\r\n                    \r\n                    if (landP === 5) {\r\n                        if (anGanMap[8]) anGanMap[8] += currGan;\r\n                        else anGanMap[8] = currGan;\r\n                    } else {\r\n                        if (anGanMap[landP]) anGanMap[landP] += currGan;\r\n                        else anGanMap[landP] = currGan;\r\n                    }\r\n                }\r\n\r\n                let grid = document.getElementById('qm_grid');\r\n                grid.innerHTML = \"\";\r\n                let order = [4, 9, 2, 3, 5, 7, 8, 1, 6];\r\n                let maPos=[]; if(ma=='\u5bc5')maPos=[8]; if(ma=='\u7533')maPos=[2]; if(ma=='\u5df3')maPos=[4]; if(ma=='\u4ea5')maPos=[6];\r\n                let kPos=[]; let zMap={1:['\u5b50'],8:['\u4e11','\u5bc5'],3:['\u536f'],4:['\u8fb0','\u5df3'],9:['\u5348'],2:['\u672a','\u7533'],7:['\u9149'],6:['\u620c','\u4ea5']};\r\n                for(let k of xunInfo.kong) for(let p in zMap) if(zMap[p].includes(k)) kPos.push(parseInt(p));\r\n                \r\n                const outClass = {4:'out-4', 9:'out-9', 2:'out-2', 3:'out-3', 7:'out-7', 8:'out-8', 1:'out-1', 6:'out-6'};\r\n                let anaHtml = \"\";\r\n                let aiGridData = {}; \r\n\r\n                order.forEach(n=>{\r\n                    let d = document.createElement('div');\r\n                    d.className = 'cell';\r\n                    if(n===5) d.innerHTML = `<div style=\"display:flex;align-items:center;justify-content:center;height:100%;color:#ddd;font-size:12px;\">\u4e2d\u4e94<\/div>`;\r\n                    else {\r\n                        let info = pan[n];\r\n                        let diT = info.di; if(n==2 && pan[5].di) diT += pan[5].di;\r\n                        let stH = getStatus(info.door, info.tian, n);\r\n                        let stText = stH.replace(\/<[^>]+>\/g, \"\").trim(); \r\n\r\n                        let maH = maPos.includes(n)?`<div class=\"mk-ma\">\u9a6c<\/div>`:'';\r\n                        let kH = kPos.includes(n)?`<div class=\"mk-kong\">\u7a7a<\/div>`:'';\r\n                        let anText = anGanMap[n] || '';\r\n                        let anHtml = `<div class=\"out-gan ${outClass[n]}\">${anText}<\/div>`;\r\n                        let baguaName = BAGUA_MAP[n];\r\n\r\n                        aiGridData[baguaName] = {\r\n                            \"\u5bab\u4f4d\": baguaName + \"\u5bab\",\r\n                            \"\u795e\": info.god,\r\n                            \"\u661f\": info.star,\r\n                            \"\u95e8\": info.door,\r\n                            \"\u5929\u76d8\u5e72\": info.tian,\r\n                            \"\u5730\u76d8\u5e72\": diT,\r\n                            \"\u6697\u5e72\": anText,\r\n                            \"\u9a6c\u661f\": maPos.includes(n) ? \"\u662f\" : \"\u5426\",\r\n                            \"\u7a7a\u4ea1\": kPos.includes(n) ? \"\u662f\" : \"\u5426\",\r\n                            \"\u72b6\u6001\": stText || \"\u6b63\u5e38\"\r\n                        };\r\n\r\n                        d.innerHTML = `\r\n                            ${anHtml}\r\n                            <div class=\"p-god\">${info.god}<\/div>\r\n                            <div class=\"p-star\">${info.star}<\/div>\r\n                            <div class=\"p-tian\">${color(info.tian)}<\/div>\r\n                            <div class=\"bg-n\">${baguaName}<\/div>\r\n                            ${kH}\r\n                            <div class=\"p-door\">${info.door}<\/div>\r\n                            <div class=\"p-di\">${color(diT[0])}${diT[1]?color(diT[1]):''}<\/div>\r\n                            ${maH}\r\n                            <div class=\"status-bar\">${stH}<\/div>\r\n                        `;\r\n                        \r\n                        let key = info.tian + diT[0];\r\n                        if(KE_YING[key]) {\r\n                            let desc = KE_YING[key];\r\n                            let cls = (desc.indexOf('\u5409')>-1||desc.indexOf('\u5b9c')>-1)?'ana-good':'ana-bad';\r\n                            anaHtml += `<div class=\"ana-item\"><span class=\"ana-header ${cls}\">[${baguaName}] ${key}\uff1a${desc.split('\u3011')[0]}\u3011<\/span><span class=\"ana-desc\">${desc.split('\u3011')[1]}<\/span><\/div>`;\r\n                        }\r\n                    }\r\n                    grid.appendChild(d);\r\n                });\r\n                document.getElementById('qm_analysis-content').innerHTML = anaHtml || '<div style=\"color:#999\">\u6682\u65e0\u660e\u663e\u514b\u5e94<\/div>';\r\n\r\n                globalChartData = {\r\n                    \"\u6c42\u6d4b\u4e8b\u5b9c\": evt,\r\n                    \"\u6392\u76d8\u7c7b\u578b\": fullType,\r\n                    \"\u65f6\u95f4\u4fe1\u606f\": {\r\n                        \"\u516c\u5386\": d.toLocaleString('zh-CN'),\r\n                        \"\u771f\u592a\u9633\u65f6\": td.toLocaleString('zh-CN'),\r\n                        \"\u8282\u6c14\": `${prev.getName()} ~ ${next.getName()}`\r\n                    },\r\n                    \"\u56db\u67f1\": bzStrList.join(' '),\r\n                    \"\u5c40\u8c61\u4fe1\u606f\": {\r\n                        \"\u65ec\u9996\": xunInfo.xun + head,\r\n                        \"\u503c\u7b26\": STARS[leadPos],\r\n                        \"\u503c\u4f7f\": DOORS[leadPos],\r\n                        \"\u9a6c\u661f\u4f4d\u7f6e\": ma,\r\n                        \"\u7a7a\u4ea1\": xunInfo.kong\r\n                    },\r\n                    \"\u4e5d\u5bab\u8be6\u7ec6\u6570\u636e\": aiGridData\r\n                };\r\n                \r\n                document.getElementById('qm_aiBtn').disabled = false;\r\n\r\n            } catch(e) { alert(\"\u6392\u76d8\u51fa\u9519: \" + e); console.error(e); }\r\n        }\r\n\r\n        const P_WX = {1:'\u6c34', 2:'\u571f', 3:'\u6728', 4:'\u6728', 5:'\u571f', 6:'\u91d1', 7:'\u91d1', 8:'\u571f', 9:'\u706b'};\r\n        const D_WX = {'\u4f11\u95e8':'\u6c34', '\u751f\u95e8':'\u571f', '\u4f24\u95e8':'\u6728', '\u675c\u95e8':'\u6728', '\u666f\u95e8':'\u706b', '\u6b7b\u95e8':'\u571f', '\u60ca\u95e8':'\u91d1', '\u5f00\u95e8':'\u91d1'};\r\n        function getStatus(door, tian, pIdx) {\r\n            let res = [];\r\n            let dw = D_WX[door]; let pw = P_WX[pIdx];\r\n            if((dw=='\u91d1'&&pw=='\u6728')||(dw=='\u6728'&&pw=='\u571f')||(dw=='\u571f'&&pw=='\u6c34')||(dw=='\u6c34'&&pw=='\u706b')||(dw=='\u706b'&&pw=='\u91d1')) res.push(`<span style=\"color:var(--s-po)\">\u95e8\u8feb<\/span>`);\r\n            if((tian=='\u620a'&&pIdx==3)||(tian=='\u5df1'&&pIdx==2)||(tian=='\u5e9a'&&pIdx==8)||(tian=='\u8f9b'&&pIdx==9)||(tian=='\u58ec'&&pIdx==4)||(tian=='\u7678'&&pIdx==4)) res.push(`<span style=\"color:var(--s-xing)\">\u51fb\u5211<\/span>`);\r\n            if((['\u7532','\u4e59'].includes(tian)&&pIdx==2) || (['\u4e19','\u4e01','\u620a','\u5df1'].includes(tian)&&pIdx==6) || (['\u5e9a','\u8f9b'].includes(tian)&&pIdx==8) || (['\u58ec','\u7678'].includes(tian)&&pIdx==4)) res.push(`<span style=\"color:var(--s-mu)\">\u5165\u5893<\/span>`);\r\n            return res.join(' ');\r\n        }\r\n\r\n        function callAI() {\r\n            if (!globalChartData) return;\r\n            const aiContainer = document.getElementById('qm_ai-loading');\r\n            const aiResult = document.getElementById('ai-result');\r\n            const aiBtn = document.getElementById('qm_aiBtn');\r\n\r\n            aiContainer.style.display = 'block';\r\n            aiResult.style.display = 'none';\r\n            aiBtn.disabled = true;\r\n            aiBtn.innerText = \"\u6b63\u5728\u5206\u6790\u4e2d...\";\r\n\r\n            const promptText = `\r\n\u4f60\u662f\u4e00\u4f4d\u7cbe\u901a\u9634\u76d8\u5947\u95e8\u9041\u7532\u7684\u5927\u5e08\u3002\u8bf7\u6839\u636e\u4ee5\u4e0b\u5b8c\u6574\u7684\u6392\u76d8\u6570\u636e\uff0c\u4e3a\u6c42\u6d4b\u4eba\u8fdb\u884c\u4e13\u4e1a\u7684\u5206\u6790\u3002\r\n\r\n### \u6c42\u6d4b\u4fe1\u606f\r\n- **\u6c42\u6d4b\u4e8b\u5b9c**\uff1a${globalChartData.\u6c42\u6d4b\u4e8b\u5b9c}\r\n- **\u65f6\u95f4**\uff1a${globalChartData.\u65f6\u95f4\u4fe1\u606f.\u771f\u592a\u9633\u65f6}\r\n- **\u56db\u67f1**\uff1a${globalChartData.\u56db\u67f1}\r\n- **\u5c40\u6570**\uff1a${globalChartData.\u6392\u76d8\u7c7b\u578b}\r\n\r\n### \u5173\u952e\u795e\u715e\r\n- \u503c\u7b26\uff1a${globalChartData.\u5c40\u8c61\u4fe1\u606f.\u503c\u7b26}\r\n- \u503c\u4f7f\uff1a${globalChartData.\u5c40\u8c61\u4fe1\u606f.\u503c\u4f7f}\r\n- \u7a7a\u4ea1\uff1a${globalChartData.\u5c40\u8c61\u4fe1\u606f.\u7a7a\u4ea1}\r\n- \u9a6c\u661f\uff1a${globalChartData.\u5c40\u8c61\u4fe1\u606f.\u9a6c\u661f\u4f4d\u7f6e}\r\n\r\n### \u4e5d\u5bab\u8be6\u7ec6\u6392\u76d8\u6570\u636e (JSON\u683c\u5f0f)\r\n${JSON.stringify(globalChartData.\u4e5d\u5bab\u8be6\u7ec6\u6570\u636e, null, 2)}\r\n\r\n### \u5206\u6790\u8981\u6c42\r\n1. **\u7528\u795e\u5206\u6790**\uff1a\u8bf7\u6839\u636e\u201c\u6c42\u6d4b\u4e8b\u5b9c\u201d\u9009\u53d6\u6b63\u786e\u7684\u7528\u795e\uff08\u5982\u65e5\u5e72\u3001\u65f6\u5e72\u3001\u503c\u7b26\u3001\u503c\u4f7f\u3001\u5e74\u547d\u7b49\uff09\u3002\r\n2. **\u683c\u5c40\u5206\u6790**\uff1a\u5206\u6790\u7528\u795e\u843d\u5bab\u7684\u72b6\u6001\uff08\u95e8\u8feb\u3001\u51fb\u5211\u3001\u5165\u5893\u3001\u7a7a\u4ea1\u3001\u9a6c\u661f\uff09\u3001\u661f\u95e8\u795e\u7ec4\u5408\u542b\u4e49\u3002\r\n3. **\u751f\u514b\u5173\u7cfb**\uff1a\u5206\u6790\u7528\u795e\u5bab\u4e0e\u6240\u6d4b\u4e4b\u4e8b\u843d\u5bab\u7684\u4e94\u884c\u751f\u514b\u5173\u7cfb\u3002\r\n4. **\u8c61\u610f\u89e3\u8bfb**\uff1a\u7ed3\u5408\u9634\u76d8\u5947\u95e8\u7684\u53d6\u8c61\u76f4\u8bfb\u7279\u70b9\uff0c\u5c06\u7b26\u53f7\u8f6c\u5316\u4e3a\u5177\u4f53\u7684\u73b0\u5b9e\u8c61\u610f\u3002\r\n5. **\u7ed3\u8bba\u4e0e\u5efa\u8bae**\uff1a\u7ed9\u51fa\u660e\u786e\u7684\u5409\u51f6\u5224\u65ad\uff0c\u5e76\u63d0\u4f9b\u53ef\u884c\u7684\u7b56\u5212\u6216\u5316\u89e3\u5efa\u8bae\u3002\r\n\r\n\u8bf7\u8f93\u51fa Markdown \u683c\u5f0f\uff0c\u6761\u7406\u6e05\u6670\uff0c\u8bed\u6c14\u4e13\u4e1a\u4e14\u5bcc\u6709\u6d1e\u5bdf\u529b\u3002\r\n            `;\r\n\r\n            jQuery.ajax({\r\n                url: qimen_vars.ajax_url,\r\n                type: 'POST',\r\n                data: {\r\n                    action: 'qimen_ai_analyze',\r\n                    nonce: qimen_vars.nonce,\r\n                    prompt: promptText\r\n                },\r\n                success: function(response) {\r\n                    if(response.success) {\r\n                        if(window.marked) {\r\n                            aiResult.innerHTML = marked.parse(response.data);\r\n                        } else {\r\n                            aiResult.innerHTML = \"<pre>\" + response.data + \"<\/pre>\";\r\n                        }\r\n                        aiResult.style.display = 'block';\r\n                    } else {\r\n                        alert(\"AI \u5206\u6790\u8bf7\u6c42\u5931\u8d25: \" + response.data);\r\n                    }\r\n                },\r\n                error: function(err) {\r\n                    alert(\"\u7f51\u7edc\u9519\u8bef\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002\");\r\n                    console.error(err);\r\n                },\r\n                complete: function() {\r\n                    aiContainer.style.display = 'none';\r\n                    aiBtn.disabled = false;\r\n                    aiBtn.innerText = \"\ud83e\udd16 \u667a\u80fd\u89e3\u76d8 (AI)\";\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ === \u4e0b\u8f7d\u5e26\u6c34\u5370 PDF \u529f\u80fd ===\r\n        function downloadPDF() {\r\n            const btn = document.getElementById('qm_pdfBtn');\r\n            const originalText = btn.innerText;\r\n            btn.innerText = \"\u6b63\u5728\u751f\u6210 PDF...\";\r\n            btn.disabled = true;\r\n\r\n            const element = document.getElementById('qm_res');\r\n            const wmLayer = document.getElementById('qm_watermark_layer');\r\n            \r\n            const siteName = \"\u6751\u957f\u7384\u5b66\u7f51\";\r\n            const domain = window.location.hostname;\r\n            const wmText = `${siteName} - ${domain}`;\r\n\r\n            wmLayer.innerHTML = '';\r\n            const rows = 15; \r\n            for(let i=0; i<rows; i++) {\r\n                let rowDiv = document.createElement('div');\r\n                rowDiv.className = 'qm-wm-row';\r\n                rowDiv.innerHTML = `\r\n                    <div class=\"qm-wm-item\">${wmText}<\/div>\r\n                    <div class=\"qm-wm-item\">${wmText}<\/div>\r\n                    <div class=\"qm-wm-item\">${wmText}<\/div>\r\n                `;\r\n                wmLayer.appendChild(rowDiv);\r\n            }\r\n\r\n            html2canvas(element, {\r\n                scale: 2, \r\n                useCORS: true, \r\n                backgroundColor: '#ffffff', \r\n                scrollY: 0, \r\n                height: element.scrollHeight + 50, \r\n                onclone: function(clonedDoc) {\r\n                    const clonedWm = clonedDoc.getElementById('qm_watermark_layer');\r\n                    if(clonedWm) {\r\n                        clonedWm.style.display = 'flex';\r\n                    }\r\n                }\r\n            }).then(canvas => {\r\n                const imgData = canvas.toDataURL('image\/jpeg', 0.95);\r\n                const { jsPDF } = window.jspdf;\r\n                \r\n                const pdfWidth = 210; \r\n                const imgProps = pdfWidth \/ canvas.width; \r\n                const imgHeight = canvas.height * imgProps;\r\n\r\n                const pdf = new jsPDF('p', 'mm', [pdfWidth, imgHeight + 20]); \r\n                pdf.addImage(imgData, 'JPEG', 0, 10, pdfWidth, imgHeight);\r\n\r\n                pdf.setFontSize(10);\r\n                pdf.setTextColor(100);\r\n                pdf.text(`Generated by ${siteName} (${domain})`, pdfWidth \/ 2, imgHeight + 15, { align: 'center' });\r\n\r\n                pdf.save('\u9634\u76d8\u5947\u95e8\u6392\u76d8_' + new Date().toISOString().slice(0,10) + '.pdf');\r\n\r\n                btn.innerText = originalText;\r\n                btn.disabled = false;\r\n            }).catch(err => {\r\n                console.error(err);\r\n                alert(\"\u751f\u6210 PDF \u5931\u8d25\uff0c\u8bf7\u622a\u56fe\u4fdd\u5b58\u3002\\n\u9519\u8bef\u4fe1\u606f: \" + err.message);\r\n                btn.innerText = originalText;\r\n                btn.disabled = false;\r\n            });\r\n        }\r\n\r\n        return {\r\n            run: run,\r\n            callAI: callAI,\r\n            downloadPDF: downloadPDF\r\n        };\r\n    })();\r\n    <\/script>\r\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-29398","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/comments?post=29398"}],"version-history":[{"count":4,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29398\/revisions"}],"predecessor-version":[{"id":29402,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29398\/revisions\/29402"}],"wp:attachment":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/media?parent=29398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}