{"id":4737,"date":"2022-01-01T17:28:49","date_gmt":"2022-01-01T09:28:49","guid":{"rendered":"http:\/\/www.xiangqi.sg\/xqsite\/?page_id=4737"},"modified":"2026-05-07T18:40:31","modified_gmt":"2026-05-07T10:40:31","slug":"%e5%85%a8%e5%b9%b4%e6%b4%bb%e5%8a%a8%e8%a1%a8","status":"publish","type":"page","link":"https:\/\/www.xiangqi.sg\/xqsite\/%e5%85%a8%e5%b9%b4%e6%b4%bb%e5%8a%a8%e8%a1%a8\/","title":{"rendered":"\u5168\u5e74\u6d3b\u52a8\u8868"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-SG\">\n  <head>\n    <meta charset=\"UTF-8\" \/>\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"\n    \/>\n    <title>2026 Singapore Xiangqi Events<\/title>\n    <style>\n      \/* --- 1. SUNSET COLOR PALETTE --- *\/\n      :root {\n        --bg-color: #f8fafc;\n        --col-night: #4f000b;\n        --col-bordeaux: #720026;\n        --col-amaranth: #ce4257;\n        --col-coral: #ff7f51;\n        --col-sandy: #ff9b54;\n        --glass-warm: rgba(255, 155, 84, 0.15);\n      }\n\n      body {\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto,\n          \"Helvetica Neue\", Arial, sans-serif;\n        background-color: var(--bg-color);\n        color: #333;\n        max-width: 900px;\n        margin: 0 auto;\n        padding: 20px;\n      }\n\n      \/* --- 2. HEADER & CONTROLS --- *\/\n      .xq-header {\n        text-align: center;\n        margin-bottom: 20px;\n      }\n      .xq-title {\n        color: var(--col-night);\n        margin: 0 0 10px 0;\n        font-size: 1.5rem;\n        font-weight: 700;\n      }\n      .xq-select {\n        font-size: 14px;\n        padding: 6px 12px;\n        border: 1px solid #cbd5e1;\n        border-radius: 6px;\n        cursor: pointer;\n      }\n\n      .xq-controls {\n        background: white;\n        padding: 15px;\n        border-radius: 12px;\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n        margin-bottom: 15px;\n        display: flex;\n        flex-direction: column;\n        gap: 10px;\n      }\n\n      .xq-search {\n        width: 100%;\n        padding: 10px;\n        font-size: 15px;\n        border: 2px solid #e2e8f0;\n        border-radius: 8px;\n        box-sizing: border-box;\n      }\n      .xq-search:focus {\n        border-color: var(--col-amaranth);\n        outline: none;\n      }\n\n      .xq-legend {\n        display: flex;\n        gap: 15px;\n        font-size: 0.8em;\n        color: #64748b;\n        justify-content: flex-end;\n      }\n      .xq-legend-item {\n        display: flex;\n        align-items: center;\n        gap: 5px;\n      }\n      .xq-dot {\n        width: 8px;\n        height: 8px;\n        border-radius: 50%;\n        display: inline-block;\n      }\n\n      \/* --- 3. TABLE STRUCTURE --- *\/\n      .xq-table-wrap {\n        background: white;\n        border-radius: 12px;\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);\n        border: 1px solid #e2e8f0;\n        overflow: hidden;\n      }\n\n      .xq-table {\n        width: 100%;\n        border-collapse: separate;\n        border-spacing: 0;\n      }\n\n      .xq-th {\n        background-color: #fff1f2;\n        color: var(--col-night);\n        font-weight: 700;\n        padding: 15px;\n        text-align: left;\n        font-size: 0.85em;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        border-bottom: 3px solid var(--col-coral);\n      }\n\n      .xq-td {\n        padding: 15px;\n        border-bottom: 1px solid #ffe4e6;\n        vertical-align: middle;\n        font-size: 0.95em;\n      }\n      .xq-tr {\n        transition: all 0.1s;\n        background: white;\n      }\n\n      \/* --- 4. THE CROSSHAIR MAGIC (:has) --- *\/\n\n      \/* Row Leader: Highlights cells to the LEFT of the cursor *\/\n      .xq-tr .xq-td:has(~ .xq-td:hover) {\n        background: linear-gradient(\n          to right,\n          rgba(255, 255, 255, 0),\n          var(--glass-warm)\n        ) !important;\n        border-right: 1px dashed var(--col-sandy);\n      }\n\n      \/* Column Highlight: Highlights the vertical column *\/\n      .xq-table:has(.xq-td:nth-child(1):hover) .xq-td:nth-child(1),\n      .xq-table:has(.xq-td:nth-child(2):hover) .xq-td:nth-child(2),\n      .xq-table:has(.xq-td:nth-child(3):hover) .xq-td:nth-child(3) {\n        background-color: #fff7ed !important;\n      }\n\n      \/* The Intersection Cell (Active) *\/\n      .xq-tr .xq-td:hover {\n        background: linear-gradient(\n          135deg,\n          #fff7ed 0%,\n          #ffe4e6 100%\n        ) !important;\n        box-shadow: inset 0 0 0 1px var(--col-coral);\n        cursor: crosshair;\n        color: var(--col-night);\n        font-weight: 700;\n      }\n\n      \/* Status Strips (Left Border Override) *\/\n      .xq-tr.is-current .xq-td:first-child {\n        border-left: 5px solid var(--col-amaranth);\n        color: var(--col-bordeaux);\n        font-weight: 700;\n      }\n      .xq-tr.is-next .xq-td:first-child {\n        border-left: 5px solid var(--col-sandy);\n        color: #c2410c;\n        font-weight: 700;\n      }\n\n      \/* Badges *\/\n      .xq-badge {\n        font-size: 0.7em;\n        text-transform: uppercase;\n        padding: 2px 8px;\n        border-radius: 10px;\n        margin-left: 8px;\n        vertical-align: middle;\n        font-weight: 700;\n        display: inline-block;\n        color: white;\n      }\n      .bg-cur {\n        background: var(--col-amaranth);\n      }\n      .bg-nxt {\n        background: var(--col-sandy);\n      }\n\n      \/* --- 5. MOBILE OPTIMIZATION (iPhone Card View) --- *\/\n      @media (max-width: 600px) {\n        \/* Hide the Table Headers completely *\/\n        .xq-th {\n          display: none;\n        }\n\n        \/* Stack cells vertically like a card *\/\n        .xq-td {\n          display: block;\n          width: 100%;\n          box-sizing: border-box; \/* Ensures padding doesn't break width *\/\n          padding: 2px 15px;\n          border: none;\n          text-align: left; \/* Forces everything to left align cleanly *\/\n        }\n\n        \/* 1. Event Name (Top) *\/\n        .xq-td:nth-child(1) {\n          padding-top: 15px;\n          font-size: 1.05em;\n          color: var(--col-night);\n        }\n\n        \/* 2. Date (Middle) *\/\n        .xq-td:nth-child(2) {\n          color: #64748b;\n          font-size: 0.9em;\n          font-weight: 500;\n          margin-top: 4px;\n        }\n\n        \/* 3. Location (Bottom) *\/\n        .xq-td:nth-child(3) {\n          padding-bottom: 15px;\n          color: #94a3b8;\n          font-size: 0.85em;\n        }\n\n        \/* Row Separator *\/\n        .xq-tr {\n          border-bottom: 1px solid #ffe4e6;\n          display: block;\n          margin-bottom: 0;\n        }\n\n        \/* Disable fancy hover effects on mobile (sticky hover fix) *\/\n        .xq-tr:hover,\n        .xq-td:hover {\n          background: white !important;\n          box-shadow: none !important;\n        }\n      }\n    <\/style>\n  <\/head>\n  <body>\n    <div id=\"xq-calendar-wrapper\"><\/div>\n\n    <script>\n      (function () {\n        \/\/ ============================================================\n        \/\/ \ud83d\udc47 1. PASTE YOUR JSON DATA BELOW THIS LINE \ud83d\udc47\n        \/\/ ============================================================\nconst eventsData = [\n  {\n    \"date\": \"1 \u6708 1 \u65e5\u81f3 1 \u6708 31 \u65e5\",\n    \"cat\": \"general\",\n    \"cn\": \"\u7f34\u4ea4\u4f1a\u8d39\",\n    \"en\": \"Membership Renewal\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"2026-01-31 17:00\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"1 \u6708 16-17 \u65e5\",\n    \"cat\": \"open\",\n    \"cn\": \"2026 \u5e74\u201c\u4f69\u73b2\u676f\u201d\u72ee\u57ce\u8c61\u68cb\u4e2a\u4eba\u516c\u5f00\u8d5b\",\n    \"en\": \"2026 Pei Ling Cup Individual Open\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"2026-01-11 17:00\",\n    \"link_rules\": \"https:\/\/www.xiangqi.sg\/xqsite\/wp-content\/uploads\/2025\/12\/2026%E4%BD%A9%E7%8E%B2%E6%9D%AF%E5%85%AC%E5%BC%80%E8%B5%9B%E7%AB%A0%E7%A8%8B.pdf\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"1 \u6708 17 \u65e5\",\n    \"cat\": \"general\",\n    \"cn\": \"\u540d\u624b\u5218\u5b97\u6cfd\u8c61\u68cb\u5ea7\u8c08\u4f1a\",\n    \"en\": \"Xiangqi Seminar: Liu Zongze\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"https:\/\/www.xiangqi.sg\/xqsite\/xqsem1\/\"\n  },\n  {\n    \"date\": \"2 \u6708 7 \u65e5\",\n    \"cat\": \"student\",\n    \"cn\": \"\u7b2c 28 \u5c4a\u201c\u8336\u9633\u676f\u201d\u5168\u56fd\u5b66\u751f\u8c61\u68cb\u4e2a\u4eba\u8d5b 2026\",\n    \"en\": \"28th Char Yong Cup National Student Individual\",\n    \"loc_cn\": \"\u4e39\u620e\u5df4\u845b\u6c11\u4f17\u4ff1\u4e50\u90e8\",\n    \"loc_en\": \"Tanjong Pagar CC\",\n    \"deadline\": \"2026-02-01 17:00\",\n    \"link_rules\": \"https:\/\/www.xiangqi.sg\/xqsite\/wp-content\/uploads\/2026\/01\/%E7%AC%AC28%E5%B1%8A%E8%8C%B6%E9%98%B3%E6%9D%AF%E5%85%A8%E5%9B%BD%E5%AD%A6%E7%94%9F%E8%B1%A1%E6%A3%8B%E5%85%AC%E5%BC%80%E8%B5%9B%E7%AB%A0%E7%A8%8B-copy.pdf\",\n    \"link_reg\": \"https:\/\/tinyurl.com\/mpwxs8jp\"\n  },\n  {\n    \"date\": \"2 \u6708 21 \u65e5\",\n    \"cat\": \"team\",\n    \"cn\": \"\u7b2c 14 \u5c4a\u68cb\u53cb\u676f\u56e2\u4f53\u8d5b\u66a8 2026 \u65b0\u6625\u56e2\u62dc\",\n    \"en\": \"14th Friendship Cup Team & CNY Gathering\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"2026-01-29 17:00\",\n    \"link_rules\": \"https:\/\/www.xiangqi.sg\/xqsite\/wp-content\/uploads\/2025\/12\/2026-\u7b2c\u5341\u56db\u5c4a\u65b0\u52a0\u5761\u68cb\u53cb\u676f\u8c61\u68cb\u56e2\u4f53\u8d5b\u7ae0\u7a0b_V3.pdf\",\n    \"link_reg\": \"https:\/\/wa.me\/6597839832?text=I%27m%20interested%20in%20the%202026%20%E6%A3%8B%E5%8F%8B%E6%9D%AF%E5%9B%A2%E4%BD%93%E8%B5%9B\"\n  },\n  {\n    \"date\": \"2 \u6708 28-3 \u6708 1 \u65e5\",\n    \"cat\": \"general\",\n    \"cn\": \"\u665a\u6674\u56ed\u8c61\u68cb\u63a8\u5e7f\u6d3b\u52a8\",\n    \"en\": \"Wan Qing Yuan Xiangqi Promotion\",\n    \"loc_cn\": \"\u8521\u539d\u6e2f Lot 1\",\n    \"loc_en\": \"Choa Chu Kang Lot 1 Shoppers' Mall\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"3 \u6708 28-29 \u65e5\",\n    \"cat\": \"general\",\n    \"cn\": \"\u65b0\u52a0\u5761\u534e\u65cf\u6587\u5316\u4e2d\u5fc3\u8c61\u68cb\u63a8\u5e7f\u6d3b\u52a8\",\n    \"en\": \"SCCC Xiangqi Promotion\",\n    \"loc_cn\": \"\u65b0\u52a0\u5761\u534e\u65cf\u6587\u5316\u4e2d\u5fc3\",\n    \"loc_en\": \"SCCC\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"5 \u6708 11-17 \u65e5\",\n    \"cat\": \"open\",\n    \"cn\": \"\u7b2c 65 \u5c4a\u201c\u5b59\u6587\u5e7f\u676f\u201d\u5168\u56fd\u8c61\u68cb\u4e2a\u4eba\u9526\u6807\u8d5b\",\n    \"en\": \"65th 'Sun Wenguang Cup' National Individual Open\",\n    \"loc_cn\": \"\u4e9a\u6d32\u6587\u660e\u535a\u7269\u9986\",\n    \"loc_en\": \"No. 1, Empress Pl, Singapore 179555\",\n    \"deadline\": \"\",\n    \"link_rules\": \"https:\/\/drive.google.com\/file\/d\/1T8u750Gla4eoRIua7nkRQtLaMGrbkCR-\/view?usp=sharing\",\n    \"link_reg\": \"https:\/\/forms.gle\/bvLUBUmQeFLg83fD9\"\n  },\n  {\n    \"date\": \"5 \u6708 23 \u65e5\",\n    \"cat\": \"open\",\n    \"cn\": \"\u7b2c6\u5c4a\u72ee\u57ce\u5251\u5357\u6625\u676f\u201c\u695a\u6c49\u667a\u8c0b\u201d\u8c61\u68cb\u6bd4\u8d5b\",\n    \"en\": \"6th 'Maotai Cup' Individual Open\",\n    \"loc_cn\": \"\u65b0\u52a0\u5761\u540c\u5b89\u4f1a\u9986\u793c\u5802\",\n    \"loc_en\": \"Tung Ann District Guild 141 Cecil Street, #09-00, Singapore 069541\",\n    \"deadline\": \"2026-05-22 17:00\",\n    \"link_rules\": \"https:\/\/drive.google.com\/file\/d\/1QhCzsHETrKLP8Ll65yMG0KTphYvaVP6H\/view?usp=sharing\",\n    \"link_reg\": \"https:\/\/forms.gle\/YaBfkrqZk7ZA5jGd9\"\n  },\n  {\n    \"date\": \"5 \u6708 30 \u65e5\",\n    \"cat\": \"general\",\n    \"cn\": \"\u4f1a\u5458\u5927\u4f1a\",\n    \"en\": \"Annual General Meeting (AGM)\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"6 \u6708\u4efd\",\n    \"cat\": \"team\",\n    \"cn\": \"\u53cc\u4eba\u8d5b\",\n    \"en\": \"Pair Tournament\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"2026-06-30 17:00\",\n    \"link_rules\": \"\",\n    \"link_reg\": \"\"\n  },\n  {\n    \"date\": \"6 \u6708\uff08\u6682\u5b9a\uff09\",\n    \"cat\": \"general\",\n    \"cn\": \"2026 \u5e74\u7b2c 5 \u5c4a\u201c\u64ce\u5929\u676f\u201d\u68cb\u738b\u8d5b\",\n    \"en\": \"2026 5th Qing Tian Cup Chess King Individual\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"7 \u6708 18-19 \u65e5\",\n    \"cat\": \"open\",\n    \"cn\": \"Pesta Sukan \u8c61\u68cb\u8d5b 2026\",\n    \"en\": \"Pesta Sukan 2026 National Individual Open\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f53\u80b2\u4e2d\u5fc3\",\n    \"loc_en\": \"Bishan Sports Hall\",\n    \"deadline\": \"\",\n    \"link_rules\": \"https:\/\/www.activesgcircle.gov.sg\/hubfs\/GetActive%20Singapore\/GetActive%20Singapore%202026\/Rules%20and%20Regulations\/XiangQi\/Pesta%20Sukan%20Xiangqi%20R%26R.pdf\",\n    \"link_reg\": \"https:\/\/pestasukan.klobbi.com\/register\/xiangqi\"\n  },\n  {\n    \"date\": \"7 \u6708 25 \u65e5\",\n    \"cat\": \"open\",\n    \"cn\": \"\u7b2c 6 \u5c4a\u201c\u66fe\u58eb\u751f\u676f\u201d\u56fe\u5f62\u8c61\u68cb\u8d5b\",\n    \"en\": \"6th Chan Soo Sen Cup Graphic Xiangqi Individual Open\",\n    \"loc_cn\": \"\u5f85\u5b9a\",\n    \"loc_en\": \"TBC\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"8 \u6708\u4efd\",\n    \"cat\": \"general\",\n    \"cn\": \"\u7b2c\u56db\u5c4a\u201c\u674e\u9521\u68ee\u676f\u201d\u8c61\u68cb\u5bbf\u5c06\u8d5b\",\n    \"en\": \"4th Lee Xi Sen Cup Veteran Individual Open\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"9 \u6708\",\n    \"cat\": \"open\",\n    \"cn\": \"\u7b2c 5 \u5c4a\u4e16\u754c\u8c61\u68cb\u56e2\u4f53\u516c\u5f00\u8d5b\",\n    \"en\": \"5th World Xiangqi Team Open\",\n    \"loc_cn\": \"\u5f85\u5b9a\",\n    \"loc_en\": \"TBC\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"10 \u6708\",\n    \"cat\": \"general\",\n    \"cn\": \"2026 \u5e74\u8c61\u603b\u4f1a\u5458\u8d5b\",\n    \"en\": \"2026 SIXGA Member Individual Open\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"10 \u6708\u4e0b\u65ec\",\n    \"cat\": \"general\",\n    \"cn\": \"\u4e9a\u6d32\u8c61\u68cb\u9526\u6807\u8d5b\",\n    \"en\": \"Asian Xiangqi Championship\",\n    \"loc_cn\": \"\u83f2\u5f8b\u5bbe\",\n    \"loc_en\": \"Philippines\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"11 \u6708\",\n    \"cat\": \"team\",\n    \"cn\": \"\u7b2c\u4e8c\u5341\u4e00\u5c4a\u201c\u8336\u9633\u676f\u201d\u5168\u56fd\u5c0f\u5b66\u6821\u9645\u8c61\u68cb\u56e2\u4f53\u8d5b\",\n    \"en\": \"21st Char Yong Cup National Primary School Team\",\n    \"loc_cn\": \"\u5f85\u5b9a\",\n    \"loc_en\": \"TBC\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  },\n  {\n    \"date\": \"12 \u6708\",\n    \"cat\": \"open\",\n    \"cn\": \"\u7b2c\u5341\u4e09\u5c4a\u201c\u56fe\u9f99\u676f\u201d\u5168\u56fd\u8c61\u68cb\u4e2a\u4eba\u516c\u5f00\u8d5b\",\n    \"en\": \"13th Tu Long Cup Individual Open\",\n    \"loc_cn\": \"\u78a7\u5c71\u4f1a\u6240\",\n    \"loc_en\": \"Bishan Clubhouse\",\n    \"deadline\": \"\",\n    \"link_rules\": \"#\",\n    \"link_reg\": \"#\"\n  }\n];\n        \/\/ ============================================================\n        \/\/ \u2699\ufe0f 2. SETTINGS\n        \/\/ ============================================================\n\n        \/\/ '3months' = Show current month + next 3 months\n        \/\/ 'all'     = Show all events\n        const DISPLAY_MODE = \"all\";\n\n        const CONTAINER_ID = \"xq-calendar-wrapper\";\n\n        \/\/ ============================================================\n        \/\/ 3. LOGIC & STYLES (Mobile Card View + Crosshairs)\n        \/\/ ============================================================\n        const ui = {\n          cn: {\n            title: \"\ud83d\udcc5 \u8fd1\u671f\u8d5b\u4e8b\",\n            searchPlaceholder: \"\u641c\u7d22...\",\n            empty: \"\u8fd1\u671f\u65e0\u6bd4\u8d5b\",\n            open: \"\u516c\u5f00\u7ec4\",\n            student: \"\u5b66\u751f\u7ec4\",\n            team: \"\u56e2\u4f53\u7ec4\",\n            general: \"\u6d3b\u52a8\",\n            date: \"\u65e5\u671f\",\n            event: \"\u8d5b\u4e8b \/ \u5730\u70b9\",\n            cat: \"\u7ec4\u522b\",\n            rules: \"\u7ae0\u7a0b\",\n            reg: \"\u62a5\u540d\",\n          },\n          en: {\n            title: \"\ud83d\udcc5 Upcoming Events\",\n            searchPlaceholder: \"Search...\",\n            empty: \"No upcoming events\",\n            open: \"Open\",\n            student: \"Student\",\n            team: \"Team\",\n            general: \"General\",\n            date: \"Date\",\n            event: \"Event \/ Location\",\n            cat: \"Cat.\",\n            rules: \"Rules\",\n            reg: \"Reg\",\n          },\n        };\n        let curLang = \"cn\";\n        let isSearchOpen = false;\n\n        function parseDate(dateStr) {\n          const match = dateStr.match(\/(\\d+)\\s*\u6708\/);\n          if (!match) return null;\n          const month = parseInt(match[1], 10);\n          const today = new Date();\n          let year = today.getFullYear();\n          if (today.getMonth() + 1 > 9 && month < 4) year++;\n          return new Date(year, month - 1, 1);\n        }\n\n        const styleId = \"xq-cal-styles-v6\";\n        if (!document.getElementById(styleId)) {\n          const css = `\n            :root {\n                --xq-dark: #213448;\n                --xq-med:  #547792;\n                --xq-lite: #94B4C1;\n                --xq-warm: #EAE0CF;\n                --xq-white: #ffffff;\n                --xq-glass: rgba(234, 224, 207, 0.4); \n            }\n            #${CONTAINER_ID} { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; background: var(--xq-white); border: 1px solid var(--xq-lite); border-radius: 8px; overflow: hidden; max-width: 100%; box-shadow: 0 4px 12px -2px rgba(33, 52, 72, 0.15); margin-bottom: 20px; }\n            #${CONTAINER_ID} .xq-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 15px; background: var(--xq-dark); color: var(--xq-warm); border-bottom: 3px solid var(--xq-med); }\n            #${CONTAINER_ID} h3 { margin: 0; font-size: 1.1em; font-weight: 700; color: var(--xq-warm); letter-spacing: 0.5px; }\n            #${CONTAINER_ID} .xq-controls-right { display: flex; align-items: center; gap: 10px; }\n            #${CONTAINER_ID} select { padding: 4px 8px; border-radius: 4px; border: none; font-size: 0.85em; background: var(--xq-med); color: var(--xq-white); cursor: pointer; }\n            #${CONTAINER_ID} .btn-search-toggle { background: none; border: none; color: var(--xq-warm); cursor: pointer; font-size: 1.1em; padding: 4px; transition: 0.2s; }\n            #${CONTAINER_ID} .xq-search-bar { background: #f1f5f9; padding: 10px; border-bottom: 1px solid var(--xq-lite); display: none; }\n            #${CONTAINER_ID} .xq-search-bar.active { display: block; animation: slideDown 0.2s ease-out; }\n            #${CONTAINER_ID} input { width: 100%; box-sizing: border-box; padding: 8px 12px; border: 1px solid var(--xq-lite); border-radius: 4px; font-size: 14px; outline: none; }\n            #${CONTAINER_ID} .xq-scroll { overflow-x: auto; }\n            #${CONTAINER_ID} table { width: 100%; border-collapse: separate; border-spacing: 0; min-width: 600px; }\n            #${CONTAINER_ID} th { background: var(--xq-warm); color: var(--xq-dark); font-weight: 700; padding: 10px 12px; text-align: left; font-size: 0.8em; text-transform: uppercase; border-bottom: 2px solid var(--xq-lite); }\n            #${CONTAINER_ID} td { padding: 12px; border-bottom: 1px solid #f1f5f9; font-size: 0.9em; vertical-align: middle; color: var(--xq-dark); }\n            \n            \/* Tags &#038; Buttons *\/\n            #${CONTAINER_ID} .tag { display: inline-block; padding: 3px 8px; border-radius: 4px; font-size: 0.75em; font-weight: 600; white-space: nowrap;}\n            #${CONTAINER_ID} .tag.open { background: var(--xq-dark); color: var(--xq-warm); }\n            #${CONTAINER_ID} .tag.student { background: var(--xq-lite); color: var(--xq-dark); }\n            #${CONTAINER_ID} .tag.team { background: var(--xq-med); color: var(--xq-white); }\n            #${CONTAINER_ID} .tag.general { background: var(--xq-warm); color: var(--xq-dark); border: 1px solid var(--xq-lite); }\n            #${CONTAINER_ID} .btn { text-decoration: none; display: inline-flex; width: 28px; height: 28px; align-items: center; justify-content: center; border-radius: 4px; font-size: 14px; transition: 0.2s; }\n            #${CONTAINER_ID} .btn-doc { background: #fff; border: 1px solid var(--xq-lite); color: var(--xq-med); } \n            #${CONTAINER_ID} .btn-reg { background: var(--xq-med); color: white; border: 1px solid var(--xq-med); } \n            @keyframes slideDown { from { opacity:0; transform:translateY(-10px); } to { opacity:1; transform:translateY(0); } }\n\n            \/* --- DESKTOP HOVER EFFECTS --- *\/\n            @media (min-width: 601px) {\n                #${CONTAINER_ID} tr .xq-td:has(~ .xq-td:hover) { background: linear-gradient(to right, rgba(255,255,255,0), var(--xq-glass)) !important; border-right: 1px dashed var(--xq-lite); }\n                #${CONTAINER_ID} table:has(.xq-td:nth-child(1):hover) .xq-td:nth-child(1),\n                #${CONTAINER_ID} table:has(.xq-td:nth-child(2):hover) .xq-td:nth-child(2),\n                #${CONTAINER_ID} table:has(.xq-td:nth-child(3):hover) .xq-td:nth-child(3),\n                #${CONTAINER_ID} table:has(.xq-td:nth-child(4):hover) .xq-td:nth-child(4),\n                #${CONTAINER_ID} table:has(.xq-td:nth-child(5):hover) .xq-td:nth-child(5) { background-color: #fdfbf7 !important; }\n                #${CONTAINER_ID} tr .xq-td:hover { background: linear-gradient(135deg, var(--xq-warm) 0%, #fff 100%) !important; box-shadow: inset 0 0 0 1px var(--xq-lite); cursor: crosshair; font-weight: 700; color: var(--xq-dark); }\n            }\n\n            \/* --- MOBILE CARD VIEW --- *\/\n            @media (max-width: 600px) { \n                #${CONTAINER_ID} thead { display: none; }\n                #${CONTAINER_ID} table { min-width: 100%; display: block; }\n                #${CONTAINER_ID} tbody { display: block; }\n                #${CONTAINER_ID} tr { display: block; border: 1px solid var(--xq-lite); border-radius: 8px; margin: 15px; margin-bottom: 20px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); overflow: hidden; }\n                #${CONTAINER_ID} td { display: block; width: 100%; box-sizing: border-box; padding: 8px 15px; border-bottom: none; text-align: left; }\n                \n                \/* 1. Date Header *\/\n                #${CONTAINER_ID} td:nth-child(1) { background: var(--xq-warm); color: var(--xq-dark); font-weight: 700; padding: 10px 15px; border-bottom: 1px solid var(--xq-lite); font-size: 0.95em; }\n                \/* 2. Event Name *\/\n                #${CONTAINER_ID} td:nth-child(2) { padding-top: 15px; padding-bottom: 4px; font-size: 1.1em; }\n                \/* 3. Category *\/\n                #${CONTAINER_ID} td:nth-child(3) { padding-bottom: 12px; }\n                \/* 4 &#038; 5 Buttons (Inline) *\/\n                #${CONTAINER_ID} td:nth-child(4), #${CONTAINER_ID} td:nth-child(5) { display: inline-block; width: auto; padding: 0 10px 15px 0; }\n                #${CONTAINER_ID} td:nth-child(4) { padding-left: 15px; }\n\n                \/* Disable sticky hover on mobile *\/\n                #${CONTAINER_ID} tr:hover, #${CONTAINER_ID} td:hover { background: #fff !important; cursor: default; }\n            }\n        `;\n          const style = document.createElement(\"style\");\n          style.id = styleId;\n          style.innerHTML = css;\n          document.head.appendChild(style);\n        }\n\n        function render() {\n          const wrapper = document.getElementById(CONTAINER_ID);\n          if (!wrapper) return;\n          const txt = ui[curLang];\n          const searchInput = document.getElementById(\"xq-search-input\");\n          const searchTerm = searchInput ? searchInput.value.toLowerCase() : \"\";\n          let displayEvents = eventsData.filter((item) => {\n            const str = (\n              item.cn +\n              item.en +\n              item.loc_cn +\n              item.loc_en +\n              item.date\n            ).toLowerCase();\n            return str.includes(searchTerm);\n          });\n          if (DISPLAY_MODE === \"3months\" && searchTerm === \"\") {\n            const startWindow = new Date();\n            startWindow.setDate(1);\n            startWindow.setHours(0, 0, 0, 0);\n            const endWindow = new Date(startWindow);\n            endWindow.setMonth(startWindow.getMonth() + 3);\n            displayEvents = displayEvents.filter((e) => {\n              const dObj = parseDate(e.date);\n              return dObj ? dObj >= startWindow && dObj <= endWindow : true;\n            });\n          }\n          let html = `\n            <div class=\"xq-header\">\n                <h3>${txt.title}<\/h3>\n                <div class=\"xq-controls-right\">\n                    <button id=\"xq-btn-search\" class=\"btn-search-toggle\">\ud83d\udd0d<\/button>\n                    <select id=\"xq-lang-toggle\"><option value=\"cn\" ${\n                      curLang === \"cn\" ? \"selected\" : \"\"\n                    }>\u4e2d\u6587<\/option><option value=\"en\" ${\n            curLang === \"en\" ? \"selected\" : \"\"\n          }>English<\/option><\/select>\n                <\/div>\n            <\/div>\n            <div id=\"xq-search-container\" class=\"xq-search-bar ${\n              isSearchOpen ? \"active\" : \"\"\n            }\"><input type=\"text\" id=\"xq-search-input\" placeholder=\"${\n            txt.searchPlaceholder\n          }\" value=\"${searchTerm}\"><\/div>\n            <div class=\"xq-scroll\"><table><thead><tr><th width=\"18%\">${\n              txt.date\n            }<\/th><th width=\"42%\">${txt.event}<\/th><th width=\"15%\">${\n            txt.cat\n          }<\/th><th width=\"10%\" style=\"text-align:center\">${\n            txt.rules\n          }<\/th><th width=\"15%\" style=\"text-align:center\">${\n            txt.reg\n          }<\/th><\/tr><\/thead><tbody>\n        `;\n          if (displayEvents.length === 0) {\n            html += `<tr><td colspan=\"5\" style=\"text-align:center; padding:30px; font-style:italic;\">${txt.empty}<\/td><\/tr>`;\n          } else {\n            displayEvents.forEach((item) => {\n              const name = curLang === \"cn\" ? item.cn : item.en;\n              const loc = curLang === \"cn\" ? item.loc_cn : item.loc_en;\n              const btnRules =\n                item.link_rules && item.link_rules !== \"#\"\n                  ? `<a href=\"${item.link_rules}\" target=\"_blank\" class=\"btn btn-doc\">\ud83d\udcc4<\/a>`\n                  : `<span style=\"opacity:0.2\">\ud83d\udcc4<\/span>`;\n              const btnReg =\n                item.link_reg && item.link_reg !== \"#\"\n                  ? `<a href=\"${item.link_reg}\" target=\"_blank\" class=\"btn btn-reg\">\ud83d\udd17<\/a>`\n                  : `<span style=\"opacity:0.2\">\ud83d\udd17<\/span>`;\n\n              html += `<tr>\n                    <td class=\"xq-td\" style=\"font-feature-settings:'tnum'; color:var(--xq-med); font-weight:600\">${\n                      item.date\n                    }<\/td>\n                    <td class=\"xq-td\"><b style=\"color:var(--xq-dark)\">${name}<\/b><div style=\"font-size:0.85em; color:var(--xq-lite); margin-top:2px\">${loc}<\/div><\/td>\n                    <td class=\"xq-td\"><span class=\"tag ${item.cat}\">${\n                txt[item.cat]\n              }<\/span><\/td>\n                    <td class=\"xq-td\" style=\"text-align:center\">${btnRules}<\/td>\n                    <td class=\"xq-td\" style=\"text-align:center\">${btnReg}<\/td>\n                <\/tr>`;\n            });\n          }\n          html += `<\/tbody><\/table><\/div>`;\n          wrapper.innerHTML = html;\n          document\n            .getElementById(\"xq-lang-toggle\")\n            .addEventListener(\"change\", (e) => {\n              curLang = e.target.value;\n              render();\n            });\n          document\n            .getElementById(\"xq-btn-search\")\n            .addEventListener(\"click\", () => {\n              isSearchOpen = !isSearchOpen;\n              render();\n              if (isSearchOpen)\n                setTimeout(\n                  () => document.getElementById(\"xq-search-input\").focus(),\n                  50\n                );\n            });\n          const input = document.getElementById(\"xq-search-input\");\n          if (input) {\n            input.addEventListener(\"input\", () => render());\n            input.focus();\n            const val = input.value;\n            input.value = \"\";\n            input.value = val;\n          }\n        }\n        render();\n      })();\n    <\/script>\n  <\/body>\n<\/html>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.xiangqi.sg\/xqsite\/wp-content\/uploads\/2025\/12\/%E6%96%B0%E5%8A%A0%E5%9D%A1%E8%B1%A1%E6%A3%8B%E6%80%BB%E4%BC%9A2026%E5%B9%B4%E6%B4%BB%E5%8A%A8V4-copy.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">2026 \u8868<\/a><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.xiangqi.sg\/xqsite\/wp-content\/uploads\/2025\/06\/%E6%96%B0%E5%8A%A0%E5%9D%A1%E8%B1%A1%E6%A3%8B%E6%80%BB%E4%BC%9A2025%E5%B9%B4%E6%B4%BB%E5%8A%A8%E6%9B%B4%E6%96%B0%E4%BA%8E6%E6%9C%8824%E6%97%A5%EF%BC%89.pdf\">2025 \u8868<\/a><\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2026 Singapore Xiangqi Events<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"full-screen","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"on","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":"","_links_to":"","_links_to_target":""},"class_list":["post-4737","page","type-page","status-publish","hentry","entry"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"Site Maker","author_link":"https:\/\/www.xiangqi.sg\/xqsite\/author\/admin\/"},"rttpg_comment":0,"rttpg_category":null,"rttpg_excerpt":"2026 Singapore Xiangqi Events","_links":{"self":[{"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/pages\/4737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/comments?post=4737"}],"version-history":[{"count":49,"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/pages\/4737\/revisions"}],"predecessor-version":[{"id":9324,"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/pages\/4737\/revisions\/9324"}],"wp:attachment":[{"href":"https:\/\/www.xiangqi.sg\/xqsite\/wp-json\/wp\/v2\/media?parent=4737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}