{"id":167,"date":"2017-08-04T12:00:48","date_gmt":"2017-08-04T03:00:48","guid":{"rendered":"http:\/\/wizmade2014.cafe24.com\/en\/?page_id=167"},"modified":"2026-09-02T16:12:28","modified_gmt":"2026-09-02T07:12:28","slug":"market-trends","status":"publish","type":"page","link":"https:\/\/www.dailynk.com\/chinese\/market-trends\/","title":{"rendered":"\u671d\u9c9c\u5e02\u573a\u52a8\u5411"},"content":{"rendered":"<div id=\"tdi_1\" class=\"tdc-zone\"><div class=\"tdc_zone tdi_2  wpb_row td-pb-row\"  >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_2{\r\n                    min-height: 0;\r\n                }\n<\/style><div id=\"tdi_3\" class=\"tdc-row\"><div class=\"vc_row tdi_4  wpb_row td-pb-row\" >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_4,\r\n                .tdi_4 .tdc-columns{\r\n                    min-height: 0;\r\n                }.tdi_4,\r\n\t\t\t\t.tdi_4 .tdc-columns{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_4 .tdc-columns{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_4:before,\r\n\t\t\t\t.tdi_4:after{\r\n\t\t\t\t    display: table;\r\n\t\t\t\t}\n<\/style><div class=\"vc_column tdi_6  wpb_column vc_column_container tdc-column td-pb-span8\">\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_6{\r\n                    vertical-align: baseline;\r\n                }.tdi_6 > .wpb_wrapper,\r\n\t\t\t\t.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" ><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_8 \"><div class=\"td-fix-index\"><!-- =========================================================\r\n     DAILYNK MARKET HERO\r\n     ========================================================= -->\r\n<section class=\"dnk-market-intro\" lang=\"zh-CN\" aria-labelledby=\"dnk-market-intro-title\">\r\n  <div class=\"dnk-market-intro__inner\">\r\n    <div class=\"dnk-market-intro__kicker\">\r\n      <span class=\"dnk-market-intro__kicker-line\" aria-hidden=\"true\"><\/span>\r\n      <span>DAILYNK \/ MARKET DATA<\/span>\r\n    <\/div>\r\n    <h1 id=\"dnk-market-intro-title\" class=\"dnk-market-intro__title\">\r\n      \u7528\u6570\u636e\u89e3\u8bfb<br>\r\n      <strong>\u671d\u9c9c\u5e02\u573a<\/strong>\r\n    <\/h1>\r\n    <p class=\"dnk-market-intro__desc\">\r\n      \u4ece\u7f8e\u5143\u3001\u4eba\u6c11\u5e01\u6c47\u7387\u5230\u7cae\u98df\u3001\u6cb9\u4ef7\u548c\u751f\u6d3b\u7269\u4ef7<br class=\"dnk-market-intro__desktop-break\">\r\n      \u6301\u7eed\u8ffd\u8e2a\u671d\u9c9c\u5e02\u573a\u7684\u53d8\u5316\u3002\r\n    <\/p>\r\n    <div class=\"dnk-market-intro__contact-wrap\">\r\n      <div class=\"dnk-market-intro__contact-label\">\u5e02\u573a\u8c03\u67e5\u59d4\u6258<\/div>\r\n      <div class=\"dnk-market-intro__contact\" role=\"group\" aria-label=\"\u5e02\u573a\u8c03\u67e5\u59d4\u6258\u8054\u7cfb\u65b9\u5f0f\">\r\n        <a\r\n          href=\"tel:+8227326998\"\r\n          class=\"dnk-market-intro__contact-item\"\r\n          aria-label=\"\u62e8\u6253 02-732-6998\">\r\n          <span class=\"dnk-market-intro__contact-type\">\u7535\u8bdd<\/span>\r\n          <span class=\"dnk-market-intro__contact-value\">02-732-6998<\/span>\r\n        <\/a>\r\n        <a\r\n          href=\"mailto:dailynk@uni-media.net?subject=%E6%9C%9D%E9%B2%9C%E5%B8%82%E5%9C%BA%E8%B0%83%E6%9F%A5%E5%A7%94%E6%89%98\"\r\n          class=\"dnk-market-intro__contact-item\">\r\n          <span class=\"dnk-market-intro__contact-type\">\u90ae\u7bb1<\/span>\r\n          <span class=\"dnk-market-intro__contact-value dnk-market-intro__email\">dailynk@uni-media.net<\/span>\r\n        <\/a>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"dnk-market-intro__divider\" aria-hidden=\"true\"><\/div>\r\n    <p class=\"dnk-market-intro__meta\">\r\n      \u5e73\u58e4 \u00b7 \u65b0\u4e49\u5dde \u00b7 \u60e0\u5c71\u7b49\u4e3b\u8981\u5730\u533a \u00b7 \u6bcf\u4e24\u5468\u5e02\u573a\u8c03\u67e5\r\n    <\/p>\r\n  <\/div>\r\n<\/section>\r\n<style>\r\n.dnk-market-intro,\r\n.dnk-market-intro * {\r\n  box-sizing: border-box;\r\n}\r\n.dnk-market-intro {\r\n  --dnk-red: #c81920;\r\n  --dnk-text: #191f28;\r\n  --dnk-body: #6b7684;\r\n  --dnk-line: #e5e8eb;\r\n  --dnk-soft: #f7f8fa;\r\n  position: relative;\r\n  width: 100%;\r\n  max-width: 1080px;\r\n  margin: 0 auto;\r\n  overflow: hidden;\r\n  border: 1px solid var(--dnk-line);\r\n  border-radius: 24px;\r\n  background:\r\n    radial-gradient(circle at 50% -22%, rgba(200,25,32,.06), transparent 38%),\r\n    linear-gradient(180deg, #ffffff 0%, #ffffff 74%, #fbfbfc 100%);\r\n  color: var(--dnk-text);\r\n  font-family:\r\n    \"PingFang SC\",\r\n    \"Microsoft YaHei\",\r\n    \"Noto Sans SC\",\r\n    \"Hiragino Sans GB\",\r\n    -apple-system,\r\n    BlinkMacSystemFont,\r\n    \"Segoe UI\",\r\n    Arial,\r\n    sans-serif;\r\n}\r\n.dnk-market-intro::before {\r\n  content: \"\";\r\n  position: absolute;\r\n  inset: 0;\r\n  pointer-events: none;\r\n  opacity: .42;\r\n  background-image:\r\n    linear-gradient(rgba(25,31,40,.03) 1px, transparent 1px),\r\n    linear-gradient(90deg, rgba(25,31,40,.03) 1px, transparent 1px);\r\n  background-size: 34px 34px;\r\n  -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,.62) 0%, rgba(0,0,0,.38) 38%, transparent 76%);\r\n  mask-image: linear-gradient(to bottom, rgba(0,0,0,.62) 0%, rgba(0,0,0,.38) 38%, transparent 76%);\r\n}\r\n.dnk-market-intro .dnk-market-intro__inner {\r\n  position: relative;\r\n  z-index: 1;\r\n  max-width: 840px;\r\n  margin: 0 auto;\r\n  padding: 76px 48px 38px;\r\n  text-align: center;\r\n}\r\n.dnk-market-intro .dnk-market-intro__kicker {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 10px;\r\n  margin-bottom: 24px;\r\n  color: var(--dnk-red);\r\n  font-size: 10px;\r\n  font-weight: 700;\r\n  line-height: 1;\r\n  letter-spacing: .14em;\r\n  opacity: 0;\r\n  transform: translateY(9px);\r\n  animation: dnk-intro-rise .55s cubic-bezier(.2,.8,.2,1) .02s forwards;\r\n}\r\n.dnk-market-intro .dnk-market-intro__kicker-line {\r\n  display: inline-block;\r\n  width: 20px;\r\n  height: 2px;\r\n  background: currentColor;\r\n}\r\n.dnk-market-intro .dnk-market-intro__title {\r\n  margin: 0;\r\n  color: var(--dnk-text);\r\n  font-size: clamp(36px, 4.6vw, 56px);\r\n  font-weight: 700;\r\n  line-height: 1.18;\r\n  letter-spacing: -.028em;\r\n  word-break: keep-all;\r\n  opacity: 0;\r\n  transform: translateY(9px);\r\n  animation: dnk-intro-rise .55s cubic-bezier(.2,.8,.2,1) .1s forwards;\r\n}\r\n@keyframes dnk-intro-rise {\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n.dnk-market-intro .dnk-market-intro__title strong {\r\n  color: var(--dnk-red);\r\n  font-weight: 700;\r\n}\r\n.dnk-market-intro .dnk-market-intro__desc {\r\n  margin: 25px auto 0;\r\n  color: var(--dnk-body);\r\n  font-size: 15px;\r\n  font-weight: 400;\r\n  line-height: 1.78;\r\n  letter-spacing: -.018em;\r\n  word-break: keep-all;\r\n}\r\n\/* \u8054\u7cfb\u65b9\u5f0f\uff1a\u5206\u680f + \u6807\u7b7e *\/\r\n.dnk-market-intro .dnk-market-intro__contact-wrap {\r\n  width: min(560px, 100%);\r\n  margin: 34px auto 0;\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-label {\r\n  margin-bottom: 12px;\r\n  color: var(--dnk-body);\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  letter-spacing: .01em;\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1.35fr;\r\n  overflow: hidden;\r\n  border: 1px solid #dfe3e8;\r\n  border-radius: 13px;\r\n  background: #fff;\r\n  box-shadow: 0 6px 18px rgba(25,31,40,.045);\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-item {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  min-width: 0;\r\n  min-height: 54px;\r\n  gap: 8px;\r\n  padding: 0 16px;\r\n  color: var(--dnk-text) !important;\r\n  text-decoration: none !important;\r\n  transition: background-color .16s ease;\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-item + .dnk-market-intro__contact-item {\r\n  border-left: 1px solid var(--dnk-line);\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-item:hover {\r\n  background: var(--dnk-soft);\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-item:focus-visible {\r\n  outline: 3px solid rgba(200,25,32,.22);\r\n  outline-offset: -3px;\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-type {\r\n  flex: 0 0 auto;\r\n  color: var(--dnk-red);\r\n  font-size: 10px;\r\n  font-weight: 800;\r\n  letter-spacing: .03em;\r\n}\r\n.dnk-market-intro .dnk-market-intro__contact-value {\r\n  min-width: 0;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n  color: #333d4b;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  letter-spacing: -.01em;\r\n}\r\n.dnk-market-intro .dnk-market-intro__divider {\r\n  width: min(680px, 100%);\r\n  height: 1px;\r\n  margin: 44px auto 18px;\r\n  background: linear-gradient(\r\n    90deg,\r\n    transparent,\r\n    var(--dnk-line) 12%,\r\n    var(--dnk-line) 88%,\r\n    transparent\r\n  );\r\n}\r\n.dnk-market-intro .dnk-market-intro__meta {\r\n  margin: 0;\r\n  color: var(--dnk-body);\r\n  font-size: 10px;\r\n  font-weight: 400;\r\n  line-height: 1.5;\r\n  letter-spacing: -.01em;\r\n  text-align: center;\r\n}\r\n@media (max-width: 820px) {\r\n  .dnk-market-intro {\r\n    border-radius: 20px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__inner {\r\n    padding: 62px 34px 34px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__divider {\r\n    margin-top: 40px;\r\n  }\r\n}\r\n@media (max-width: 600px) {\r\n  .dnk-market-intro {\r\n    border-radius: 18px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__inner {\r\n    padding: 48px 22px 28px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__kicker {\r\n    margin-bottom: 19px;\r\n    font-size: 9px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__title {\r\n    font-size: 34px;\r\n    line-height: 1.20;\r\n    letter-spacing: -.026em;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__desc {\r\n    margin-top: 19px;\r\n    font-size: 13px;\r\n    line-height: 1.72;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__desktop-break {\r\n    display: none;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__contact-wrap {\r\n    margin-top: 24px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__contact {\r\n    grid-template-columns: 1fr;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__contact-item {\r\n    min-height: 50px;\r\n    padding: 0 15px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__contact-item + .dnk-market-intro__contact-item {\r\n    border-left: 0;\r\n    border-top: 1px solid var(--dnk-line);\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__email {\r\n    white-space: normal;\r\n    overflow: visible;\r\n    text-overflow: clip;\r\n    overflow-wrap: anywhere;\r\n    line-height: 1.35;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__divider {\r\n    margin-top: 34px;\r\n    margin-bottom: 15px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__meta {\r\n    font-size: 9px;\r\n  }\r\n}\r\n@media (max-width: 420px) {\r\n  .dnk-market-intro .dnk-market-intro__inner {\r\n    padding-left: 18px;\r\n    padding-right: 18px;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__title {\r\n    font-size: 33px;\r\n  }\r\n}\r\n@media (prefers-reduced-motion: reduce) {\r\n  .dnk-market-intro .dnk-market-intro__kicker,\r\n  .dnk-market-intro .dnk-market-intro__title {\r\n    opacity: 1;\r\n    transform: none;\r\n    animation: none;\r\n  }\r\n  .dnk-market-intro .dnk-market-intro__contact-item {\r\n    transition: none;\r\n  }\r\n}\r\n<\/style>\r\n<!-- =========================================================\r\n     MARKET DATA WIDGET\r\n     ========================================================= -->\r\n<div id=\"dnk-market\" lang=\"zh-CN\">\r\n  <div style=\"padding:24px;color:#6b7684;font-size:14px;\">\r\n    \u6b63\u5728\u52a0\u8f7d\u6570\u636e\u2026\r\n  <\/div>\r\n<\/div>\r\n<script>\r\n(function () {\r\n  \"use strict\";\r\n  \/* =========================================================\r\n     CONFIG\r\n     ========================================================= *\/\r\n  var SHEET_ID =\r\n    \"1l78JcbokjkdlJ1aSU6F8cuqgC0AbfMkuXOKWiEEbueo\";\r\n  var DATASETS = {\r\n    fx: {\r\n      label: \"\u6c47\u7387\",\r\n      sheet: null,\r\n      cardBasis: \"USD\/KPW\",\r\n      chartTitle: \"\u6c47\u7387\u8d70\u52bf\",\r\n      tableTitle: \"\u6c47\u7387\u8bb0\u5f55\",\r\n      unit: \"\u671d\u9c9c\u5706\",\r\n      axisMinStep: 1000,\r\n      data: [],\r\n      loading: true,\r\n      error: null\r\n    },\r\n    rice: {\r\n      label: \"\u5927\u7c73\u4ef7\u683c\",\r\n      sheet: \"rice\",\r\n      cardBasis: \"1kg \u00b7 \u671d\u9c9c\u5706\",\r\n      chartTitle: \"\u5927\u7c73\u4ef7\u683c\u8d70\u52bf\",\r\n      tableTitle: \"\u4ef7\u683c\u8bb0\u5f55\",\r\n      unit: \"\u671d\u9c9c\u5706\/kg\",\r\n      axisMinStep: 500,\r\n      data: [],\r\n      loading: true,\r\n      error: null\r\n    }\r\n  };\r\n  var CITIES = [\r\n    {\r\n      key: \"py\",\r\n      name: \"\u5e73\u58e4\",\r\n      idx: 1,\r\n      color: \"#e5484d\"\r\n    },\r\n    {\r\n      key: \"si\",\r\n      name: \"\u65b0\u4e49\u5dde\",\r\n      idx: 2,\r\n      color: \"#3182f6\"\r\n    },\r\n    {\r\n      key: \"hy\",\r\n      name: \"\u60e0\u5c71\",\r\n      idx: 3,\r\n      color: \"#d99a18\"\r\n    }\r\n  ];\r\n  var state = {\r\n    active: \"fx\",\r\n    hidden: {\r\n      py: false,\r\n      si: false,\r\n      hy: false\r\n    },\r\n    ranges: {\r\n      fx: {\r\n        from: \"\",\r\n        to: \"\"\r\n      },\r\n      rice: {\r\n        from: \"\",\r\n        to: \"\"\r\n      }\r\n    },\r\n    preset: {\r\n      fx: \"6m\",\r\n      rice: \"6m\"\r\n    },\r\n    tableOrder: \"desc\",\r\n    page: 1,\r\n    pageSize: 20\r\n  };\r\n  \/*\r\n   * \u8c03\u67e5\u6b21\u6570\u4e0d\u8d85\u8fc7\u6b64\u503c\u65f6\u4e0d\u5206\u9875\uff0c\r\n   * \u4e00\u6b21\u663e\u793a\u5168\u90e8\u884c\u3002\r\n   *\/\r\n  var TABLE_AUTO_ALL_LIMIT = 20;\r\n  \/*\r\n   * \u901a\u8fc7\u5206\u4eab\u94fe\u63a5\uff08#dnk-market?...\uff09\u8fdb\u5165\u65f6\u7684\u72b6\u6001\u3002\r\n   * \u653e\u5728\u4e0a\u5c42\u4f5c\u7528\u57df\uff0c\u907f\u514d\u5de5\u4f5c\u8868\u52a0\u8f7d\u540e\u88ab resetRange \u8986\u76d6\u3002\r\n   *\/\r\n  var pendingShare = null;\r\n  var root =\r\n    document.getElementById(\r\n      \"dnk-market\"\r\n    );\r\n  if (!root) {\r\n    return;\r\n  }\r\n  \/* =========================================================\r\n     UI\r\n     ========================================================= *\/\r\n  root.innerHTML = `\r\n<style>\r\n\/* =========================================================\r\n   BASE\r\n   ========================================================= *\/\r\n#dnk-market{\r\n  --ink:#191f28;\r\n  --text:#333d4b;\r\n  --sub:#6b7684;\r\n  --line:#e5e8eb;\r\n  --soft:#f2f4f6;\r\n  --surface:#f7f8fa;\r\n  width:100%;\r\n  max-width:1080px;\r\n  margin:24px auto 0;\r\n  box-sizing:border-box;\r\n  container-type:inline-size;\r\n  color:var(--ink);\r\n  font-family:\r\n    \"PingFang SC\",\r\n    \"Microsoft YaHei\",\r\n    \"Noto Sans SC\",\r\n    \"Hiragino Sans GB\",\r\n    -apple-system,\r\n    BlinkMacSystemFont,\r\n    \"Segoe UI\",\r\n    Arial,\r\n    sans-serif;\r\n  font-variant-numeric:tabular-nums;\r\n}\r\n#dnk-market *{\r\n  box-sizing:border-box;\r\n}\r\n#dnk-market .dnk-shell{\r\n  width:100%;\r\n  min-width:0;\r\n}\r\n#dnk-market button,\r\n#dnk-market input,\r\n#dnk-market select{\r\n  font-family:inherit;\r\n}\r\n#dnk-market button:focus-visible,\r\n#dnk-market input:focus-visible,\r\n#dnk-market select:focus-visible{\r\n  outline:2px solid #3182f6;\r\n  outline-offset:2px;\r\n}\r\n\/* =========================================================\r\n   HEADER\r\n   ========================================================= *\/\r\n#dnk-market .dnk-header{\r\n  display:block;\r\n  width:100%;\r\n  margin-bottom:28px;\r\n}\r\n\/* \u7b2c\u4e00\u884c *\/\r\n#dnk-market .dnk-kicker{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:5px;\r\n  margin:0 0 11px;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:600;\r\n  line-height:1;\r\n  letter-spacing:.1em;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-kicker-brand{\r\n  color:#c81920;\r\n  font-weight:800;\r\n}\r\n#dnk-market .dnk-kicker-sep{\r\n  opacity:.65;\r\n}\r\n\/* \u7b2c\u4e8c\u884c *\/\r\n#dnk-market .dnk-header-row{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  width:100%;\r\n  gap:20px;\r\n}\r\n#dnk-market .dnk-heading{\r\n  margin:0;\r\n  min-width:0;\r\n  color:#191f28;\r\n  font-size:30px;\r\n  font-weight:800;\r\n  line-height:1.08;\r\n  letter-spacing:-.045em;\r\n  white-space:nowrap;\r\n}\r\n\/* =========================================================\r\n   MAIN TABS\r\n   ========================================================= *\/\r\n#dnk-market .dnk-tabs{\r\n  display:inline-flex;\r\n  flex:0 0 auto;\r\n  padding:4px;\r\n  border-radius:12px;\r\n  background:#f2f4f6;\r\n}\r\n#dnk-market .dnk-tab{\r\n  appearance:none;\r\n  min-width:76px;\r\n  height:38px;\r\n  padding:0 16px;\r\n  border:0;\r\n  border-radius:9px;\r\n  background:transparent;\r\n  color:#6b7684;\r\n  font-size:14px;\r\n  font-weight:700;\r\n  cursor:pointer;\r\n  transition:\r\n    background .15s ease,\r\n    color .15s ease,\r\n    box-shadow .15s ease;\r\n}\r\n#dnk-market .dnk-tab:hover{\r\n  color:#191f28;\r\n}\r\n#dnk-market .dnk-tab[aria-selected=\"true\"]{\r\n  background:#fff;\r\n  color:#191f28;\r\n  box-shadow:\r\n    0 1px 4px\r\n    rgba(0,0,0,.07);\r\n}\r\n\/* =========================================================\r\n   STATUS\r\n   ========================================================= *\/\r\n#dnk-market .dnk-status{\r\n  display:none;\r\n  margin-bottom:16px;\r\n  padding:14px 16px;\r\n  border-radius:12px;\r\n  background:#fff4f4;\r\n  color:#c93543;\r\n  font-size:13px;\r\n  line-height:1.55;\r\n}\r\n#dnk-market .dnk-status.visible{\r\n  display:block;\r\n}\r\n\/* =========================================================\r\n   SKELETON\r\n   ========================================================= *\/\r\n#dnk-market .dnk-skeleton{\r\n  position:relative;\r\n  overflow:hidden;\r\n  background:#edf0f2;\r\n}\r\n#dnk-market .dnk-skeleton::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  transform:translateX(-100%);\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent,\r\n      rgba(255,255,255,.8),\r\n      transparent\r\n    );\r\n  animation:\r\n    dnk-shimmer\r\n    1.4s\r\n    infinite;\r\n}\r\n@keyframes dnk-shimmer{\r\n  100%{\r\n    transform:translateX(100%);\r\n  }\r\n}\r\n@media (prefers-reduced-motion:reduce){\r\n  #dnk-market .dnk-skeleton::after{\r\n    animation:none;\r\n  }\r\n}\r\n\/* =========================================================\r\n   PRICE CARDS\r\n   ========================================================= *\/\r\n#dnk-market .dnk-cards{\r\n  display:grid;\r\n  grid-template-columns:\r\n    repeat(3,minmax(0,1fr));\r\n  gap:12px;\r\n  margin-bottom:8px;\r\n}\r\n#dnk-market .dnk-card{\r\n  min-width:0;\r\n  padding:18px 20px;\r\n  border-radius:16px;\r\n  background:#f7f8fa;\r\n}\r\n#dnk-market .dnk-card-head{\r\n  margin-bottom:12px;\r\n}\r\n#dnk-market .dnk-city-name{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:7px;\r\n  color:#4e5968;\r\n  font-size:13px;\r\n  font-weight:700;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-dot{\r\n  display:inline-block;\r\n  width:8px;\r\n  height:8px;\r\n  flex:0 0 auto;\r\n  border-radius:50%;\r\n}\r\n#dnk-market .dnk-price-row{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:8px;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-price{\r\n  min-width:0;\r\n  color:#191f28;\r\n  font-size:30px;\r\n  font-weight:800;\r\n  line-height:1.05;\r\n  letter-spacing:-.04em;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-change-badge{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  flex:0 0 auto;\r\n  padding:3px 8px;\r\n  border-radius:7px;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  line-height:1.45;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-change-badge.up{\r\n  color:#f04452;\r\n  background:\r\n    rgba(240,68,82,.09);\r\n}\r\n#dnk-market .dnk-change-badge.down{\r\n  color:#3182f6;\r\n  background:\r\n    rgba(49,130,246,.09);\r\n}\r\n#dnk-market .dnk-change-badge.flat{\r\n  color:#6b7684;\r\n  background:#eceff2;\r\n}\r\n\/* CARD SKELETON *\/\r\n#dnk-market .dnk-card-skeleton{\r\n  min-height:92px;\r\n}\r\n#dnk-market .dnk-skeleton-city{\r\n  width:52px;\r\n  height:11px;\r\n  margin-bottom:17px;\r\n  border-radius:6px;\r\n}\r\n#dnk-market .dnk-skeleton-price{\r\n  width:115px;\r\n  height:27px;\r\n  border-radius:8px;\r\n}\r\n\/* =========================================================\r\n   CARD META\r\n   ========================================================= *\/\r\n#dnk-market .dnk-card-meta{\r\n  display:none;\r\n  margin-bottom:32px;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:400;\r\n  line-height:1.45;\r\n}\r\n\/* =========================================================\r\n   CHART\r\n   ========================================================= *\/\r\n#dnk-market .dnk-chart-card{\r\n  position:relative;\r\n  padding:24px;\r\n  border:1px solid #edf0f2;\r\n  border-radius:20px;\r\n  background:#fff;\r\n  box-shadow:\r\n    0 2px 12px\r\n    rgba(0,0,0,.025);\r\n}\r\n#dnk-market .dnk-chart-header{\r\n  margin-bottom:14px;\r\n}\r\n#dnk-market .dnk-chart-title{\r\n  margin:0;\r\n  color:#191f28;\r\n  font-size:20px;\r\n  font-weight:800;\r\n  line-height:1.2;\r\n  letter-spacing:-.035em;\r\n}\r\n\/* =========================================================\r\n   CHART TOOLBAR\r\n   ========================================================= *\/\r\n#dnk-market .dnk-chart-toolbar{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  flex-wrap:nowrap;\r\n  gap:10px;\r\n  width:100%;\r\n  margin-bottom:14px;\r\n}\r\n\/* =========================================================\r\n   FILTER CHIPS\r\n   ========================================================= *\/\r\n#dnk-market .dnk-cityfilters{\r\n  display:flex;\r\n  align-items:center;\r\n  flex-wrap:nowrap;\r\n  gap:6px;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-citychip{\r\n  appearance:none;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  gap:6px;\r\n  height:36px;\r\n  padding:0 11px;\r\n  border:1px solid #dfe3e8;\r\n  border-radius:999px;\r\n  background:#fff;\r\n  color:#333d4b;\r\n  box-shadow:\r\n    0 1px 2px\r\n    rgba(0,0,0,.025);\r\n  font-size:11px;\r\n  font-weight:700;\r\n  white-space:nowrap;\r\n  cursor:pointer;\r\n  transition:\r\n    background .15s ease,\r\n    border-color .15s ease,\r\n    opacity .15s ease;\r\n}\r\n#dnk-market .dnk-citychip:hover{\r\n  background:#f7f8fa;\r\n}\r\n#dnk-market .dnk-citychip[aria-pressed=\"false\"]{\r\n  border-color:transparent;\r\n  background:#f2f4f6;\r\n  color:#6b7684;\r\n  opacity:.62;\r\n  box-shadow:none;\r\n}\r\n#dnk-market\r\n.dnk-citychip[aria-pressed=\"false\"]\r\n.dnk-dot{\r\n  opacity:.4;\r\n}\r\n\/* =========================================================\r\n   RIGHT CONTROLS\r\n   ========================================================= *\/\r\n#dnk-market .dnk-view-controls{\r\n  display:flex;\r\n  align-items:center;\r\n  flex:0 0 auto;\r\n  gap:6px;\r\n}\r\n\/* =========================================================\r\n   SEGMENTED CONTROL\r\n   ========================================================= *\/\r\n#dnk-market .dnk-period-presets{\r\n  display:inline-flex;\r\n  flex:0 0 auto;\r\n  padding:3px;\r\n  border-radius:11px;\r\n  background:#f2f4f6;\r\n}\r\n#dnk-market .dnk-period-btn{\r\n  appearance:none;\r\n  height:34px;\r\n  padding:0 11px;\r\n  border:0;\r\n  border-radius:8px;\r\n  background:transparent;\r\n  color:#6b7684;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  white-space:nowrap;\r\n  cursor:pointer;\r\n}\r\n#dnk-market .dnk-period-btn:hover{\r\n  color:#191f28;\r\n}\r\n#dnk-market .dnk-period-btn[aria-checked=\"true\"]{\r\n  background:#fff;\r\n  color:#191f28;\r\n  box-shadow:\r\n    0 1px 3px\r\n    rgba(0,0,0,.08);\r\n}\r\n#dnk-market .dnk-period-btn:disabled{\r\n  opacity:.5;\r\n  cursor:default;\r\n}\r\n\/* =========================================================\r\n   DATE RANGE PICKER\r\n   ========================================================= *\/\r\n#dnk-market .dnk-range-picker{\r\n  position:relative;\r\n  flex:0 0 auto;\r\n}\r\n#dnk-market .dnk-range-trigger{\r\n  appearance:none;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  gap:7px;\r\n  min-width:196px;\r\n  height:40px;\r\n  padding:0 11px;\r\n  border:1px solid #e5e8eb;\r\n  border-radius:10px;\r\n  background:#fff;\r\n  color:#4e5968;\r\n  font-size:10px;\r\n  font-weight:600;\r\n  white-space:nowrap;\r\n  cursor:pointer;\r\n}\r\n#dnk-market .dnk-range-trigger:hover{\r\n  background:#f9fafb;\r\n}\r\n#dnk-market .dnk-range-trigger:disabled{\r\n  opacity:.5;\r\n  cursor:default;\r\n}\r\n#dnk-market .dnk-range-icon{\r\n  display:block;\r\n  width:15px;\r\n  height:15px;\r\n  flex:0 0 auto;\r\n}\r\n#dnk-market .dnk-range-chevron{\r\n  margin-left:2px;\r\n  color:#6b7684;\r\n  font-size:9px;\r\n}\r\n#dnk-market .dnk-range-popover{\r\n  position:absolute;\r\n  z-index:100;\r\n  top:calc(100% + 8px);\r\n  right:0;\r\n  width:332px;\r\n  padding:14px;\r\n  border:1px solid #e5e8eb;\r\n  border-radius:14px;\r\n  background:#fff;\r\n  box-shadow:\r\n    0 12px 32px\r\n    rgba(0,0,0,.12);\r\n}\r\n#dnk-market .dnk-range-popover[hidden]{\r\n  display:none;\r\n}\r\n#dnk-market .dnk-range-popover-title{\r\n  margin-bottom:11px;\r\n  color:#333d4b;\r\n  font-size:11px;\r\n  font-weight:700;\r\n}\r\n#dnk-market .dnk-date-controls{\r\n  display:grid;\r\n  grid-template-columns:\r\n    minmax(0,1fr)\r\n    minmax(0,1fr);\r\n  gap:8px;\r\n}\r\n#dnk-market .dnk-date-field{\r\n  display:flex;\r\n  flex-direction:column;\r\n  gap:5px;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-date-field label{\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:600;\r\n}\r\n#dnk-market input[type=\"date\"],\r\n#dnk-market select{\r\n  height:38px;\r\n  border:1px solid #e5e8eb;\r\n  border-radius:9px;\r\n  outline:none;\r\n  background:#fff;\r\n  color:#333d4b;\r\n  padding:0 9px;\r\n  font-size:11px;\r\n}\r\n#dnk-market input:focus,\r\n#dnk-market select:focus{\r\n  border-color:#3182f6;\r\n  box-shadow:\r\n    0 0 0 3px\r\n    rgba(49,130,246,.08);\r\n}\r\n\/* =========================================================\r\n   GRAPH\r\n   ========================================================= *\/\r\n#dnk-market .dnk-chart-wrap{\r\n  position:relative;\r\n  width:100%;\r\n  height:390px;\r\n  min-width:0;\r\n  touch-action:pan-y;\r\n}\r\n#dnk-market .dnk-chart-wrap svg{\r\n  display:block;\r\n  width:100%;\r\n  height:100%;\r\n}\r\n#dnk-market .dnk-chart-empty{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  height:100%;\r\n  padding:20px;\r\n  color:#6b7684;\r\n  font-size:13px;\r\n  text-align:center;\r\n  line-height:1.55;\r\n}\r\n\/* =========================================================\r\n   CHART SKELETON\r\n   ========================================================= *\/\r\n#dnk-market .dnk-chart-skeleton{\r\n  position:relative;\r\n  width:100%;\r\n  height:100%;\r\n  overflow:hidden;\r\n}\r\n#dnk-market .dnk-chart-skeleton::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  left:48px;\r\n  right:6px;\r\n  top:20px;\r\n  bottom:30px;\r\n  background:\r\n    repeating-linear-gradient(\r\n      to bottom,\r\n      transparent 0,\r\n      transparent 24%,\r\n      #f2f4f6 24.2%,\r\n      transparent 24.5%\r\n    );\r\n}\r\n#dnk-market .dnk-chart-skeleton-line{\r\n  position:absolute;\r\n  height:5px;\r\n  border-radius:999px;\r\n}\r\n#dnk-market .dnk-chart-skeleton-line.one{\r\n  left:22%;\r\n  top:44%;\r\n  width:55%;\r\n  transform:rotate(-6deg);\r\n}\r\n#dnk-market .dnk-chart-skeleton-line.two{\r\n  left:28%;\r\n  top:57%;\r\n  width:48%;\r\n  transform:rotate(4deg);\r\n}\r\n#dnk-market .dnk-chart-skeleton-line.three{\r\n  left:38%;\r\n  top:36%;\r\n  width:38%;\r\n  transform:rotate(-2deg);\r\n}\r\n\/* =========================================================\r\n   TOOLTIP\r\n   ========================================================= *\/\r\n#dnk-market .dnk-tooltip{\r\n  position:absolute;\r\n  z-index:30;\r\n  display:none;\r\n  pointer-events:none;\r\n  min-width:180px;\r\n  padding:11px 12px;\r\n  border-radius:10px;\r\n  background:\r\n    rgba(25,31,40,.94);\r\n  color:#fff;\r\n  box-shadow:\r\n    0 6px 24px\r\n    rgba(0,0,0,.18);\r\n  font-size:11px;\r\n}\r\n#dnk-market .dnk-tooltip-date{\r\n  margin-bottom:7px;\r\n  font-weight:700;\r\n}\r\n#dnk-market .dnk-tooltip-row{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:20px;\r\n  margin-top:4px;\r\n}\r\n\/* =========================================================\r\n   TABLE\r\n   ========================================================= *\/\r\n#dnk-market .dnk-table-section{\r\n  margin-top:44px;\r\n}\r\n#dnk-market .dnk-table-topbar{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  margin-bottom:10px;\r\n}\r\n#dnk-market .dnk-table-heading{\r\n  display:flex;\r\n  align-items:baseline;\r\n  gap:8px;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-table-title{\r\n  margin:0;\r\n  color:#191f28;\r\n  font-size:19px;\r\n  font-weight:800;\r\n  line-height:1.2;\r\n  letter-spacing:-.03em;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-table-meta{\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:400;\r\n  line-height:1.2;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market #dnk-page-size{\r\n  flex:0 0 auto;\r\n  width:auto;\r\n  min-width:88px;\r\n  height:38px;\r\n  padding:\r\n    0\r\n    28px\r\n    0\r\n    10px;\r\n  font-size:11px;\r\n}\r\n#dnk-market .dnk-table-actions{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:flex-end;\r\n  flex:0 0 auto;\r\n  gap:6px;\r\n}\r\n#dnk-market .dnk-export{\r\n  position:relative;\r\n  flex:0 0 auto;\r\n}\r\n#dnk-market .dnk-export-btn{\r\n  appearance:none;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  gap:7px;\r\n  height:38px;\r\n  padding:0 12px;\r\n  border:1px solid #e5e8eb;\r\n  border-radius:9px;\r\n  background:#fff;\r\n  color:#333d4b;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  white-space:nowrap;\r\n  cursor:pointer;\r\n  transition:\r\n    background .15s ease,\r\n    border-color .15s ease;\r\n}\r\n#dnk-market .dnk-export-btn:hover{\r\n  border-color:#d9dde2;\r\n  background:#f7f8fa;\r\n}\r\n#dnk-market .dnk-export-btn:disabled{\r\n  opacity:.45;\r\n  cursor:default;\r\n}\r\n#dnk-market .dnk-export-icon{\r\n  display:block;\r\n  width:14px;\r\n  height:14px;\r\n  flex:0 0 auto;\r\n}\r\n#dnk-market .dnk-export-menu{\r\n  position:absolute;\r\n  z-index:120;\r\n  top:calc(100% + 7px);\r\n  right:0;\r\n  width:286px;\r\n  padding:8px;\r\n  border:1px solid #e5e8eb;\r\n  border-radius:14px;\r\n  background:#fff;\r\n  box-shadow:\r\n    0 12px 34px\r\n    rgba(0,0,0,.13);\r\n}\r\n#dnk-market .dnk-export-menu[hidden]{\r\n  display:none;\r\n}\r\n#dnk-market .dnk-export-menu-head{\r\n  padding:8px 9px 11px;\r\n}\r\n#dnk-market .dnk-export-menu-title{\r\n  margin-bottom:8px;\r\n  color:#191f28;\r\n  font-size:13px;\r\n  font-weight:800;\r\n  line-height:1.2;\r\n}\r\n#dnk-market .dnk-export-scope-kicker{\r\n  margin-bottom:5px;\r\n  color:#6b7684;\r\n  font-size:9px;\r\n  font-weight:600;\r\n  letter-spacing:.02em;\r\n}\r\n#dnk-market .dnk-export-scope-main{\r\n  color:#333d4b;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  line-height:1.45;\r\n}\r\n#dnk-market .dnk-export-scope-sub{\r\n  margin-top:2px;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:500;\r\n  line-height:1.45;\r\n}\r\n#dnk-market .dnk-export-scope-cities{\r\n  margin-top:2px;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:500;\r\n  line-height:1.45;\r\n}\r\n#dnk-market .dnk-export-separator{\r\n  height:1px;\r\n  margin:5px 4px;\r\n  background:#f2f4f6;\r\n}\r\n#dnk-market .dnk-export-item{\r\n  appearance:none;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  width:100%;\r\n  min-height:52px;\r\n  padding:7px 9px;\r\n  border:0;\r\n  border-radius:9px;\r\n  background:transparent;\r\n  text-align:left;\r\n  cursor:pointer;\r\n}\r\n#dnk-market .dnk-export-item:hover,\r\n#dnk-market .dnk-export-item:focus-visible{\r\n  background:#f7f8fa;\r\n}\r\n#dnk-market .dnk-export-item-copy{\r\n  display:flex;\r\n  flex-direction:column;\r\n  min-width:0;\r\n  gap:2px;\r\n}\r\n#dnk-market .dnk-export-format{\r\n  color:#191f28;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  line-height:1.25;\r\n}\r\n#dnk-market .dnk-export-ext{\r\n  margin-left:3px;\r\n  color:#6b7684;\r\n  font-size:9px;\r\n  font-weight:500;\r\n}\r\n#dnk-market .dnk-export-desc{\r\n  color:#6b7684;\r\n  font-size:9px;\r\n  font-weight:500;\r\n  line-height:1.3;\r\n}\r\n#dnk-market .dnk-export-item-icon{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  width:26px;\r\n  height:26px;\r\n  flex:0 0 auto;\r\n  margin-left:10px;\r\n  border-radius:8px;\r\n  background:#f2f4f6;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:800;\r\n}\r\n\/* =========================================================\r\n   DESKTOP TABLE\r\n   ========================================================= *\/\r\n#dnk-market .dnk-table-box{\r\n  overflow:hidden;\r\n  border-radius:14px;\r\n  background:#fff;\r\n}\r\n#dnk-market table{\r\n  width:100%;\r\n  border-collapse:collapse;\r\n  font-size:13px;\r\n}\r\n#dnk-market thead th{\r\n  padding:9px 14px;\r\n  border-bottom:\r\n    1px solid\r\n    #e5e8eb;\r\n  color:#6b7684;\r\n  text-align:right;\r\n  font-size:11px;\r\n  font-weight:700;\r\n}\r\n#dnk-market thead th:first-child{\r\n  text-align:left;\r\n}\r\n#dnk-market .dnk-sort{\r\n  appearance:none;\r\n  padding:0;\r\n  border:0;\r\n  background:none;\r\n  color:#6b7684;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  cursor:pointer;\r\n}\r\n#dnk-market tbody td{\r\n  padding:10px 14px;\r\n  border-bottom:\r\n    1px solid\r\n    #f2f4f6;\r\n  color:#333d4b;\r\n  text-align:right;\r\n  line-height:1.25;\r\n}\r\n#dnk-market tbody td:first-child{\r\n  text-align:left;\r\n  font-weight:600;\r\n}\r\n#dnk-market tbody tr:last-child td{\r\n  border-bottom:0;\r\n}\r\n#dnk-market tbody tr:hover td{\r\n  background:#fafbfc;\r\n}\r\n\/* =========================================================\r\n   COMPACT TABLE\r\n   ========================================================= *\/\r\n#dnk-market .dnk-compact-table{\r\n  display:none;\r\n}\r\n#dnk-market .dnk-compact-grid{\r\n  display:grid;\r\n  align-items:center;\r\n  width:100%;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-compact-head{\r\n  min-height:36px;\r\n  padding:\r\n    0\r\n    2px\r\n    8px;\r\n  border-bottom:\r\n    1px solid\r\n    #e5e8eb;\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:600;\r\n}\r\n#dnk-market\r\n.dnk-compact-head >\r\ndiv:not(:first-child){\r\n  text-align:right;\r\n}\r\n#dnk-market .dnk-compact-head-city{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:flex-end;\r\n  gap:4px;\r\n  min-width:0;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market\r\n.dnk-compact-head-city\r\n.dnk-dot{\r\n  width:5px;\r\n  height:5px;\r\n}\r\n#dnk-market .dnk-compact-data-row{\r\n  min-height:46px;\r\n  padding:\r\n    11px\r\n    2px;\r\n  border-bottom:\r\n    1px solid\r\n    #f2f4f6;\r\n}\r\n#dnk-market\r\n.dnk-compact-data-row.latest{\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      rgba(49,130,246,.035),\r\n      transparent\r\n    );\r\n}\r\n#dnk-market .dnk-compact-day,\r\n#dnk-market .dnk-compact-number{\r\n  min-width:0;\r\n  color:#333d4b;\r\n  font-size:12px;\r\n  font-weight:700;\r\n  line-height:1.2;\r\n  letter-spacing:-.025em;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-compact-number{\r\n  text-align:right;\r\n}\r\n#dnk-market .dnk-no-data{\r\n  padding:36px 20px;\r\n  color:#6b7684;\r\n  text-align:center;\r\n  font-size:12px;\r\n  line-height:1.55;\r\n}\r\n\/* =========================================================\r\n   TABLE SKELETON\r\n   ========================================================= *\/\r\n#dnk-market .dnk-table-skeleton{\r\n  padding:8px 0;\r\n}\r\n#dnk-market .dnk-table-skeleton-row{\r\n  height:14px;\r\n  margin:15px 0;\r\n  border-radius:7px;\r\n}\r\n#dnk-market\r\n.dnk-table-skeleton-row:nth-child(1){\r\n  width:95%;\r\n}\r\n#dnk-market\r\n.dnk-table-skeleton-row:nth-child(2){\r\n  width:88%;\r\n}\r\n#dnk-market\r\n.dnk-table-skeleton-row:nth-child(3){\r\n  width:92%;\r\n}\r\n#dnk-market\r\n.dnk-table-skeleton-row:nth-child(4){\r\n  width:84%;\r\n}\r\n\/* =========================================================\r\n   PAGINATION\r\n   ========================================================= *\/\r\n#dnk-market .dnk-pagination{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  margin-top:13px;\r\n}\r\n#dnk-market .dnk-pagination-left{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:8px;\r\n  min-width:0;\r\n}\r\n#dnk-market .dnk-page-info{\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  white-space:nowrap;\r\n}\r\n#dnk-market .dnk-page-buttons{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:3px;\r\n}\r\n#dnk-market .dnk-page-btn{\r\n  appearance:none;\r\n  min-width:32px;\r\n  height:32px;\r\n  padding:0 8px;\r\n  border:0;\r\n  border-radius:8px;\r\n  background:transparent;\r\n  color:#6b7684;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  cursor:pointer;\r\n}\r\n#dnk-market .dnk-page-btn:hover{\r\n  background:#f2f4f6;\r\n}\r\n#dnk-market .dnk-page-btn.active{\r\n  background:#191f28;\r\n  color:#fff;\r\n}\r\n#dnk-market .dnk-page-btn:disabled{\r\n  opacity:.35;\r\n  cursor:default;\r\n}\r\n#dnk-market .dnk-page-ellipsis{\r\n  padding:0 4px;\r\n  color:#6b7684;\r\n  font-size:11px;\r\n}\r\n\/* =========================================================\r\n   SOURCE \/ COPYRIGHT\r\n   ========================================================= *\/\r\n#dnk-market .dnk-foot{\r\n  margin-top:28px;\r\n}\r\n\r\n#dnk-market .dnk-foot-note{\r\n  padding:18px 20px;\r\n  border-radius:12px;\r\n  background:#f7f8fa;\r\n}\r\n\r\n#dnk-market .dnk-foot-head{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:6px;\r\n  margin-bottom:8px;\r\n}\r\n\r\n#dnk-market .dnk-foot-label{\r\n  color:#6b7684;\r\n  font-size:10px;\r\n  font-weight:600;\r\n  line-height:1.4;\r\n}\r\n\r\n#dnk-market .dnk-foot-label::after{\r\n  content:\"\u00b7\";\r\n  margin-left:6px;\r\n  color:#b0b8c1;\r\n}\r\n\r\n#dnk-market .dnk-foot-source{\r\n  color:#333d4b;\r\n  font-size:11px;\r\n  font-weight:700;\r\n  line-height:1.4;\r\n}\r\n\r\n#dnk-market .dnk-foot-copy{\r\n  max-width:920px;\r\n  margin:0;\r\n  color:#8b95a1;\r\n  font-size:10px;\r\n  font-weight:400;\r\n  line-height:1.7;\r\n  letter-spacing:0;\r\n  word-break:normal;\r\n}\r\n\r\n#dnk-market .dnk-foot-copy strong{\r\n  color:#6b7684;\r\n  font-weight:600;\r\n}\r\n\r\n@container (max-width:600px){\r\n  #dnk-market .dnk-foot{\r\n    margin-top:24px;\r\n  }\r\n\r\n  #dnk-market .dnk-foot-note{\r\n    padding:16px;\r\n    border-radius:10px;\r\n  }\r\n\r\n  #dnk-market .dnk-foot-copy{\r\n    font-size:9px;\r\n    line-height:1.65;\r\n  }\r\n}\r\n\/* =========================================================\r\n   COMPACT\r\n   ========================================================= *\/\r\n@container (max-width:700px){\r\n  #dnk-market .dnk-shell{\r\n    padding-left:10px;\r\n    padding-right:10px;\r\n  }\r\n  \/* HEADER *\/\r\n  #dnk-market .dnk-header{\r\n    margin-bottom:22px;\r\n  }\r\n  #dnk-market .dnk-kicker{\r\n    margin-bottom:9px;\r\n    font-size:9px;\r\n  }\r\n  #dnk-market .dnk-header-row{\r\n    gap:10px;\r\n  }\r\n  #dnk-market .dnk-heading{\r\n    font-size:24px;\r\n  }\r\n  #dnk-market .dnk-tabs{\r\n    padding:3px;\r\n  }\r\n  #dnk-market .dnk-tab{\r\n    min-width:58px;\r\n    height:38px;\r\n    padding:0 10px;\r\n    font-size:11px;\r\n  }\r\n  \/* CARDS *\/\r\n  #dnk-market .dnk-cards{\r\n    gap:7px;\r\n    margin-bottom:8px;\r\n  }\r\n  #dnk-market .dnk-card{\r\n    padding:14px 10px;\r\n    border-radius:14px;\r\n  }\r\n  #dnk-market .dnk-card-head{\r\n    margin-bottom:9px;\r\n  }\r\n  #dnk-market .dnk-city-name{\r\n    gap:5px;\r\n    font-size:11px;\r\n    font-weight:600;\r\n  }\r\n  #dnk-market .dnk-card .dnk-dot{\r\n    width:6px;\r\n    height:6px;\r\n  }\r\n  #dnk-market .dnk-price-row{\r\n    gap:5px;\r\n  }\r\n  #dnk-market .dnk-price{\r\n    overflow:hidden;\r\n    font-size:19px;\r\n  }\r\n  #dnk-market .dnk-change-badge{\r\n    padding:2px 5px;\r\n    border-radius:6px;\r\n    font-size:10px;\r\n  }\r\n  #dnk-market .dnk-card-meta{\r\n    margin-bottom:28px;\r\n    font-size:10px;\r\n  }\r\n  \/* CHART *\/\r\n  #dnk-market .dnk-chart-card{\r\n    padding:0;\r\n    border:0;\r\n    border-radius:0;\r\n    box-shadow:none;\r\n  }\r\n  #dnk-market .dnk-chart-header{\r\n    margin-bottom:12px;\r\n  }\r\n  #dnk-market .dnk-chart-title{\r\n    font-size:18px;\r\n  }\r\n  \/* TOOLBAR *\/\r\n  #dnk-market .dnk-chart-toolbar{\r\n    gap:4px;\r\n    margin-bottom:12px;\r\n  }\r\n  #dnk-market .dnk-cityfilters{\r\n    gap:4px;\r\n  }\r\n  #dnk-market .dnk-citychip{\r\n    height:40px;\r\n    padding:0 6px;\r\n    gap:4px;\r\n    font-size:10px;\r\n  }\r\n  #dnk-market\r\n  .dnk-citychip\r\n  .dnk-dot{\r\n    width:6px;\r\n    height:6px;\r\n  }\r\n  #dnk-market .dnk-view-controls{\r\n    gap:4px;\r\n  }\r\n  #dnk-market .dnk-period-presets{\r\n    padding:3px;\r\n  }\r\n  #dnk-market .dnk-period-btn{\r\n    height:40px;\r\n    padding:0 6px;\r\n    font-size:10px;\r\n  }\r\n  \/* RANGE *\/\r\n  #dnk-market .dnk-range-trigger{\r\n    min-width:40px;\r\n    width:40px;\r\n    height:40px;\r\n    padding:0;\r\n  }\r\n  #dnk-market .dnk-range-text,\r\n  #dnk-market .dnk-range-chevron{\r\n    display:none;\r\n  }\r\n  #dnk-market .dnk-range-popover{\r\n    width:310px;\r\n    right:0;\r\n  }\r\n  \/* GRAPH *\/\r\n  #dnk-market .dnk-chart-wrap{\r\n    height:275px;\r\n  }\r\n  #dnk-market .dnk-tooltip{\r\n    min-width:155px;\r\n    padding:9px 10px;\r\n    font-size:10px;\r\n  }\r\n  \/* TABLE *\/\r\n  #dnk-market .dnk-table-section{\r\n    margin-top:40px;\r\n  }\r\n  #dnk-market .dnk-table-topbar{\r\n    gap:8px;\r\n    margin-bottom:10px;\r\n  }\r\n  #dnk-market .dnk-table-heading{\r\n    gap:6px;\r\n  }\r\n  #dnk-market .dnk-table-title{\r\n    font-size:17px;\r\n  }\r\n  #dnk-market .dnk-table-meta{\r\n    font-size:10px;\r\n  }\r\n  #dnk-market #dnk-page-size{\r\n    min-width:82px;\r\n    height:36px;\r\n    font-size:10px;\r\n  }\r\n  #dnk-market .dnk-export-btn{\r\n    height:36px;\r\n    padding:0 10px;\r\n    font-size:10px;\r\n  }\r\n  #dnk-market .dnk-export-menu{\r\n    width:min(286px,calc(100vw - 36px));\r\n  }\r\n  #dnk-market .dnk-export-item{\r\n    min-height:50px;\r\n  }\r\n  #dnk-market .dnk-table-box{\r\n    display:none;\r\n  }\r\n  #dnk-market .dnk-compact-table{\r\n    display:block;\r\n    width:100%;\r\n    min-width:0;\r\n  }\r\n  #dnk-market .dnk-page-btn{\r\n    min-width:40px;\r\n    height:40px;\r\n    font-size:10px;\r\n  }\r\n  #dnk-market .dnk-pagination{\r\n    align-items:flex-start;\r\n  }\r\n  #dnk-market .dnk-pagination-left{\r\n    gap:6px;\r\n  }\r\n}\r\n\/* =========================================================\r\n   MOBILE\r\n   ========================================================= *\/\r\n@container (max-width:520px){\r\n  #dnk-market .dnk-citychip{\r\n    padding-left:5px;\r\n    padding-right:5px;\r\n  }\r\n  #dnk-market .dnk-period-btn{\r\n    padding-left:5px;\r\n    padding-right:5px;\r\n  }\r\n  #dnk-market .dnk-range-popover{\r\n    width:\r\n      min(\r\n        310px,\r\n        calc(100vw - 36px)\r\n      );\r\n  }\r\n}\r\n\/* =========================================================\r\n   SMALL MOBILE\r\n   ========================================================= *\/\r\n@container (max-width:440px){\r\n  #dnk-market .dnk-shell{\r\n    padding-left:8px;\r\n    padding-right:8px;\r\n  }\r\n  #dnk-market .dnk-header-row{\r\n    gap:8px;\r\n  }\r\n  #dnk-market .dnk-heading{\r\n    font-size:22px;\r\n  }\r\n  #dnk-market .dnk-tab{\r\n    min-width:54px;\r\n    padding:0 8px;\r\n  }\r\n  #dnk-market .dnk-cards{\r\n    gap:6px;\r\n  }\r\n  #dnk-market .dnk-card{\r\n    padding-left:8px;\r\n    padding-right:8px;\r\n  }\r\n  #dnk-market .dnk-price-row{\r\n    gap:4px;\r\n  }\r\n  #dnk-market .dnk-price{\r\n    font-size:17px;\r\n  }\r\n  #dnk-market .dnk-change-badge{\r\n    padding:2px 4px;\r\n    font-size:9px;\r\n  }\r\n  #dnk-market .dnk-citychip{\r\n    padding-left:4px;\r\n    padding-right:4px;\r\n  }\r\n  #dnk-market .dnk-period-btn{\r\n    padding-left:4px;\r\n    padding-right:4px;\r\n    font-size:9px;\r\n  }\r\n  #dnk-market .dnk-chart-wrap{\r\n    height:255px;\r\n  }\r\n  #dnk-market .dnk-compact-day,\r\n  #dnk-market .dnk-compact-number{\r\n    font-size:11px;\r\n  }\r\n}\r\n\/* =========================================================\r\n   VERY NARROW\r\n   ========================================================= *\/\r\n@container (max-width:350px){\r\n  #dnk-market .dnk-heading{\r\n    font-size:20px;\r\n  }\r\n  #dnk-market .dnk-tab{\r\n    min-width:50px;\r\n    padding:0 6px;\r\n  }\r\n  #dnk-market .dnk-price-row{\r\n    flex-wrap:wrap;\r\n  }\r\n  #dnk-market .dnk-chart-toolbar{\r\n    align-items:flex-start;\r\n    flex-wrap:wrap;\r\n  }\r\n  #dnk-market .dnk-view-controls{\r\n    margin-left:auto;\r\n  }\r\n}\r\n<\/style>\r\n<div class=\"dnk-shell\">\r\n  <!-- =====================================================\r\n       HEADER\r\n       ===================================================== -->\r\n  <div class=\"dnk-header\">\r\n    <div class=\"dnk-kicker\">\r\n      <span class=\"dnk-kicker-brand\">\r\n        DAILYNK\r\n      <\/span>\r\n      <span class=\"dnk-kicker-sep\">\r\n        \/\r\n      <\/span>\r\n      <span>\r\n        MARKET DATA\r\n      <\/span>\r\n    <\/div>\r\n    <div class=\"dnk-header-row\">\r\n      <h2 class=\"dnk-heading\">\r\n        \u671d\u9c9c\u5e02\u573a\u6570\u636e\r\n      <\/h2>\r\n      <div\r\n        class=\"dnk-tabs\"\r\n        id=\"dnk-tabs\"\r\n        role=\"tablist\"\r\n        aria-label=\"\u5e02\u573a\u6570\u636e\u7c7b\u578b\">\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n  <!-- =====================================================\r\n       PANEL\r\n       ===================================================== -->\r\n  <div\r\n    id=\"dnk-panel\"\r\n    role=\"tabpanel\"\r\n    tabindex=\"0\"\r\n    aria-labelledby=\"dnk-tab-fx\">\r\n    <div\r\n      class=\"dnk-status\"\r\n      id=\"dnk-status\"\r\n      role=\"status\"\r\n      aria-live=\"polite\">\r\n    <\/div>\r\n    <!-- PRICE CARDS -->\r\n    <div\r\n      class=\"dnk-cards\"\r\n      id=\"dnk-cards\">\r\n    <\/div>\r\n    <div\r\n      class=\"dnk-card-meta\"\r\n      id=\"dnk-card-meta\">\r\n    <\/div>\r\n    <!-- ===================================================\r\n         CHART\r\n         =================================================== -->\r\n    <div class=\"dnk-chart-card\">\r\n      <div class=\"dnk-chart-header\">\r\n        <div\r\n          class=\"dnk-chart-title\"\r\n          id=\"dnk-chart-title\">\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"dnk-chart-toolbar\">\r\n        <div\r\n          class=\"dnk-cityfilters\"\r\n          id=\"dnk-cityfilters\">\r\n        <\/div>\r\n        <div class=\"dnk-view-controls\">\r\n          <div\r\n            class=\"dnk-period-presets\"\r\n            role=\"radiogroup\"\r\n            aria-label=\"\u67e5\u8be2\u65f6\u95f4\u8303\u56f4\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-period-btn\"\r\n              data-preset=\"6m\"\r\n              role=\"radio\">\r\n              6\u4e2a\u6708\r\n            <\/button>\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-period-btn\"\r\n              data-preset=\"1y\"\r\n              role=\"radio\">\r\n              1\u5e74\r\n            <\/button>\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-period-btn\"\r\n              data-preset=\"3y\"\r\n              role=\"radio\">\r\n              3\u5e74\r\n            <\/button>\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-period-btn\"\r\n              data-preset=\"full\"\r\n              role=\"radio\">\r\n              \u5168\u90e8\r\n            <\/button>\r\n          <\/div>\r\n          <div\r\n            class=\"dnk-range-picker\"\r\n            id=\"dnk-range-picker\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-range-trigger\"\r\n              id=\"dnk-range-trigger\"\r\n              aria-expanded=\"false\"\r\n              aria-controls=\"dnk-range-popover\">\r\n              <svg\r\n                class=\"dnk-range-icon\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\">\r\n                <path\r\n                  d=\"M7 2v3M17 2v3M4 8h16M5 4h14a1 1 0 0 1 1 1v15H4V5a1 1 0 0 1 1-1Z\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  stroke-width=\"1.8\"\r\n                  stroke-linecap=\"round\"\r\n                  stroke-linejoin=\"round\">\r\n                <\/path>\r\n              <\/svg>\r\n              <span\r\n                class=\"dnk-range-text\"\r\n                id=\"dnk-range-text\">\r\n                \u9009\u62e9\u65f6\u95f4\u8303\u56f4\r\n              <\/span>\r\n              <span\r\n                class=\"dnk-range-chevron\"\r\n                aria-hidden=\"true\">\r\n                \u25be\r\n              <\/span>\r\n            <\/button>\r\n            <div\r\n              class=\"dnk-range-popover\"\r\n              id=\"dnk-range-popover\"\r\n              hidden>\r\n              <div class=\"dnk-range-popover-title\">\r\n                \u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\r\n              <\/div>\r\n              <div class=\"dnk-date-controls\">\r\n                <div class=\"dnk-date-field\">\r\n                  <label for=\"dnk-from\">\r\n                    \u5f00\u59cb\u65e5\u671f\r\n                  <\/label>\r\n                  <input\r\n                    type=\"date\"\r\n                    id=\"dnk-from\">\r\n                <\/div>\r\n                <div class=\"dnk-date-field\">\r\n                  <label for=\"dnk-to\">\r\n                    \u7ed3\u675f\u65e5\u671f\r\n                  <\/label>\r\n                  <input\r\n                    type=\"date\"\r\n                    id=\"dnk-to\">\r\n                <\/div>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div\r\n        class=\"dnk-chart-wrap\"\r\n        id=\"dnk-chart\">\r\n      <\/div>\r\n      <div\r\n        class=\"dnk-tooltip\"\r\n        id=\"dnk-tooltip\">\r\n      <\/div>\r\n    <\/div>\r\n    <!-- ===================================================\r\n         TABLE\r\n         =================================================== -->\r\n    <div class=\"dnk-table-section\">\r\n      <div class=\"dnk-table-topbar\">\r\n        <div class=\"dnk-table-heading\">\r\n          <div\r\n            class=\"dnk-table-title\"\r\n            id=\"dnk-table-title\">\r\n          <\/div>\r\n          <div\r\n            class=\"dnk-table-meta\"\r\n            id=\"dnk-table-meta\">\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"dnk-table-actions\">\r\n          <button\r\n            type=\"button\"\r\n            class=\"dnk-export-btn\"\r\n            id=\"dnk-share-btn\"\r\n            aria-label=\"\u590d\u5236\u5f53\u524d\u89c6\u56fe\u94fe\u63a5\">\r\n            \u590d\u5236\u94fe\u63a5\r\n          <\/button>\r\n          <div\r\n            class=\"dnk-export\"\r\n            id=\"dnk-export\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"dnk-export-btn\"\r\n              id=\"dnk-export-btn\"\r\n              aria-haspopup=\"menu\"\r\n              aria-expanded=\"false\"\r\n              aria-controls=\"dnk-export-menu\">\r\n              <svg\r\n                class=\"dnk-export-icon\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\">\r\n                <path\r\n                  d=\"M12 3v11m0 0 4-4m-4 4-4-4M5 17v3h14v-3\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  stroke-width=\"1.8\"\r\n                  stroke-linecap=\"round\"\r\n                  stroke-linejoin=\"round\">\r\n                <\/path>\r\n              <\/svg>\r\n              \u4e0b\u8f7d\r\n            <\/button>\r\n            <div\r\n              class=\"dnk-export-menu\"\r\n              id=\"dnk-export-menu\"\r\n              role=\"menu\"\r\n              aria-label=\"\u6570\u636e\u4e0b\u8f7d\u683c\u5f0f\"\r\n              hidden>\r\n              <div class=\"dnk-export-menu-head\">\r\n                <div class=\"dnk-export-menu-title\">\r\n                  \u4e0b\u8f7d\u6570\u636e\r\n                <\/div>\r\n                <div class=\"dnk-export-scope-kicker\">\r\n                  \u5f53\u524d\u7b5b\u9009\u6761\u4ef6\r\n                <\/div>\r\n                <div\r\n                  class=\"dnk-export-scope-main\"\r\n                  id=\"dnk-export-scope-main\">\r\n                <\/div>\r\n                <div\r\n                  class=\"dnk-export-scope-sub\"\r\n                  id=\"dnk-export-scope-sub\">\r\n                <\/div>\r\n                <div\r\n                  class=\"dnk-export-scope-cities\"\r\n                  id=\"dnk-export-scope-cities\">\r\n                <\/div>\r\n              <\/div>\r\n              <button\r\n                type=\"button\"\r\n                class=\"dnk-export-item\"\r\n                data-export=\"xlsx\"\r\n                role=\"menuitem\">\r\n                <span class=\"dnk-export-item-copy\">\r\n                  <span class=\"dnk-export-format\">\r\n                    Excel\r\n                    <span class=\"dnk-export-ext\">.xlsx<\/span>\r\n                  <\/span>\r\n                  <span class=\"dnk-export-desc\">\r\n                    \u53ef\u76f4\u63a5\u7528\u7535\u5b50\u8868\u683c\u6253\u5f00\r\n                  <\/span>\r\n                <\/span>\r\n                <span\r\n                  class=\"dnk-export-item-icon\"\r\n                  aria-hidden=\"true\">\r\n                  X\r\n                <\/span>\r\n              <\/button>\r\n              <button\r\n                type=\"button\"\r\n                class=\"dnk-export-item\"\r\n                data-export=\"csv\"\r\n                role=\"menuitem\">\r\n                <span class=\"dnk-export-item-copy\">\r\n                  <span class=\"dnk-export-format\">\r\n                    CSV\r\n                    <span class=\"dnk-export-ext\">.csv<\/span>\r\n                  <\/span>\r\n                  <span class=\"dnk-export-desc\">\r\n                    \u9002\u5408\u5206\u6790\u5de5\u5177\u7684\u901a\u7528\u683c\u5f0f\r\n                  <\/span>\r\n                <\/span>\r\n                <span\r\n                  class=\"dnk-export-item-icon\"\r\n                  aria-hidden=\"true\">\r\n                  \u2261\r\n                <\/span>\r\n              <\/button>\r\n              <div\r\n                class=\"dnk-export-separator\"\r\n                aria-hidden=\"true\">\r\n              <\/div>\r\n              <button\r\n                type=\"button\"\r\n                class=\"dnk-export-item\"\r\n                data-export=\"json\"\r\n                role=\"menuitem\">\r\n                <span class=\"dnk-export-item-copy\">\r\n                  <span class=\"dnk-export-format\">\r\n                    JSON\r\n                    <span class=\"dnk-export-ext\">.json<\/span>\r\n                  <\/span>\r\n                  <span class=\"dnk-export-desc\">\r\n                    \u7528\u4e8e\u5f00\u53d1\u4e0e\u6570\u636e\u5904\u7406\r\n                  <\/span>\r\n                <\/span>\r\n                <span\r\n                  class=\"dnk-export-item-icon\"\r\n                  aria-hidden=\"true\">\r\n                  { }\r\n                <\/span>\r\n              <\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"dnk-table-box\">\r\n        <table>\r\n          <thead id=\"dnk-thead\"><\/thead>\r\n          <tbody id=\"dnk-tbody\"><\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <div\r\n        class=\"dnk-compact-table\"\r\n        id=\"dnk-compact-table\">\r\n      <\/div>\r\n      <div\r\n        class=\"dnk-pagination\"\r\n        id=\"dnk-pagination\">\r\n      <\/div>\r\n    <\/div>\r\n    <div\r\n      class=\"dnk-foot\"\r\n      id=\"dnk-foot\">\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n`;\r\n  \/* =========================================================\r\n     HELPERS\r\n     ========================================================= *\/\r\n  function esc(value) {\r\n    return String(\r\n      value == null\r\n        ? \"\"\r\n        : value\r\n    )\r\n    .replace(\/&\/g, \"&amp;\")\r\n    .replace(\/<\/g, \"&lt;\")\r\n    .replace(\/>\/g, \"&gt;\")\r\n    .replace(\/\"\/g, \"&quot;\")\r\n    .replace(\/'\/g, \"&#039;\");\r\n  }\r\n  function fmt(value) {\r\n    if (\r\n      value === null ||\r\n      value === undefined ||\r\n      !Number.isFinite(\r\n        Number(value)\r\n      )\r\n    ) {\r\n      return \"-\";\r\n    }\r\n    return Number(value)\r\n      .toLocaleString(\r\n        \"zh-CN\"\r\n      );\r\n  }\r\n  function pad(value) {\r\n    return String(value)\r\n      .padStart(\r\n        2,\r\n        \"0\"\r\n      );\r\n  }\r\n  function makeDateString(\r\n    year,\r\n    month,\r\n    day\r\n  ) {\r\n    year =\r\n      Number(year);\r\n    month =\r\n      Number(month);\r\n    day =\r\n      Number(day);\r\n    var d =\r\n      new Date(\r\n        year,\r\n        month - 1,\r\n        day\r\n      );\r\n    if (\r\n      d.getFullYear() !== year ||\r\n      d.getMonth() !== month - 1 ||\r\n      d.getDate() !== day\r\n    ) {\r\n      return null;\r\n    }\r\n    return (\r\n      year +\r\n      \"-\" +\r\n      pad(month) +\r\n      \"-\" +\r\n      pad(day)\r\n    );\r\n  }\r\n  function timestamp(\r\n    dateString\r\n  ) {\r\n    if (!dateString) {\r\n      return NaN;\r\n    }\r\n    var p =\r\n      dateString.split(\"-\");\r\n    return new Date(\r\n      Number(p[0]),\r\n      Number(p[1]) - 1,\r\n      Number(p[2]),\r\n      12\r\n    ).getTime();\r\n  }\r\n  function shortDate(\r\n    dateString\r\n  ) {\r\n    if (!dateString) {\r\n      return \"-\";\r\n    }\r\n    var p =\r\n      dateString.split(\"-\");\r\n    return (\r\n      p[0] +\r\n      \".\" +\r\n      p[1] +\r\n      \".\" +\r\n      p[2]\r\n    );\r\n  }\r\n  function monthDay(\r\n    dateString\r\n  ) {\r\n    if (!dateString) {\r\n      return \"-\";\r\n    }\r\n    var p =\r\n      dateString.split(\"-\");\r\n    return (\r\n      p[1] +\r\n      \".\" +\r\n      p[2]\r\n    );\r\n  }\r\n  function addYears(\r\n    dateString,\r\n    years\r\n  ) {\r\n    var p =\r\n      dateString.split(\"-\");\r\n    var d =\r\n      new Date(\r\n        Number(p[0]),\r\n        Number(p[1]) - 1,\r\n        Number(p[2])\r\n      );\r\n    d.setFullYear(\r\n      d.getFullYear() +\r\n      years\r\n    );\r\n    return (\r\n      d.getFullYear() +\r\n      \"-\" +\r\n      pad(\r\n        d.getMonth() + 1\r\n      ) +\r\n      \"-\" +\r\n      pad(\r\n        d.getDate()\r\n      )\r\n    );\r\n  }\r\n  function addMonths(\r\n    dateString,\r\n    months\r\n  ) {\r\n    var p =\r\n      dateString.split(\"-\");\r\n    var year =\r\n      Number(p[0]);\r\n    var month =\r\n      Number(p[1]) - 1;\r\n    var day =\r\n      Number(p[2]);\r\n    var target =\r\n      new Date(\r\n        year,\r\n        month + months,\r\n        1\r\n      );\r\n    var lastDay =\r\n      new Date(\r\n        target.getFullYear(),\r\n        target.getMonth() + 1,\r\n        0\r\n      ).getDate();\r\n    target.setDate(\r\n      Math.min(\r\n        day,\r\n        lastDay\r\n      )\r\n    );\r\n    return (\r\n      target.getFullYear() +\r\n      \"-\" +\r\n      pad(\r\n        target.getMonth() + 1\r\n      ) +\r\n      \"-\" +\r\n      pad(\r\n        target.getDate()\r\n      )\r\n    );\r\n  }\r\n  function isCompact() {\r\n    return (\r\n      root.clientWidth <=\r\n      700\r\n    );\r\n  }\r\n  function isVerySmall() {\r\n    return (\r\n      root.clientWidth <=\r\n      440\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     SHARE \u2014 \u590d\u5236\u5f53\u524d\u72b6\u6001\u94fe\u63a5\r\n     URL \u89c4\u5219\uff1a #dnk-market?ds=fx&from=YYYY-MM-DD&to=YYYY-MM-DD&cities=py,si\r\n     \u4e0d\u5206\u4eab\u8868\u683c\u9875\u7801\u3001\u6392\u5e8f\u65b9\u5f0f\u548c\u6bcf\u9875\u6570\u91cf\u3002\r\n     ========================================================= *\/\r\n  function parseShareHash() {\r\n    var hash =\r\n      (location.hash || \"\")\r\n        .replace(\/^#\/, \"\");\r\n    if (\r\n      hash.indexOf(\"dnk-market\") !== 0\r\n    ) {\r\n      return null;\r\n    }\r\n    var params =\r\n      new URLSearchParams(\r\n        hash.split(\"?\")[1] || \"\"\r\n      );\r\n    var ds =\r\n      params.get(\"ds\");\r\n    var cities =\r\n      (params.get(\"cities\") || \"\")\r\n        .split(\",\")\r\n        .map(\r\n          function (k) {\r\n            return k.trim();\r\n          }\r\n        )\r\n        .filter(Boolean);\r\n    return {\r\n      ds:\r\n        DATASETS[ds]\r\n          ? ds\r\n          : null,\r\n      from:\r\n        params.get(\"from\") || \"\",\r\n      to:\r\n        params.get(\"to\") || \"\",\r\n      cities:\r\n        cities\r\n    };\r\n  }\r\n  function applyShareState(\r\n    share,\r\n    clamp\r\n  ) {\r\n    if (!share) {\r\n      return;\r\n    }\r\n    \/*\r\n     * \u5982\u679c ds \u65e0\u6548\uff08\u635f\u574f\u7684\u94fe\u63a5\uff09\uff0c\u5219\u4e0d\u5e94\u7528\u5730\u533a\u548c\u65f6\u95f4\u8303\u56f4\u3002\r\n     *\/\r\n    if (!share.ds) {\r\n      return;\r\n    }\r\n    state.active =\r\n      share.ds;\r\n    if (\r\n      share.cities.length\r\n    ) {\r\n      CITIES.forEach(\r\n        function (city) {\r\n          state.hidden[city.key] =\r\n            share.cities.indexOf(\r\n              city.key\r\n            ) === -1;\r\n        }\r\n      );\r\n    }\r\n    if (\r\n      !share.from ||\r\n      !share.to\r\n    ) {\r\n      return;\r\n    }\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    if (\r\n      !ds.data.length\r\n    ) {\r\n      return;\r\n    }\r\n    var first =\r\n      ds.data[0][0];\r\n    var last =\r\n      ds.data[\r\n        ds.data.length - 1\r\n      ][0];\r\n    var from =\r\n      share.from;\r\n    var to =\r\n      share.to;\r\n    if (clamp) {\r\n      if (\r\n        timestamp(from) <\r\n        timestamp(first)\r\n      ) {\r\n        from = first;\r\n      }\r\n      if (\r\n        timestamp(to) >\r\n        timestamp(last)\r\n      ) {\r\n        to = last;\r\n      }\r\n      if (\r\n        timestamp(from) >\r\n        timestamp(last)\r\n      ) {\r\n        from = first;\r\n      }\r\n      if (\r\n        timestamp(to) <\r\n        timestamp(first)\r\n      ) {\r\n        to = last;\r\n      }\r\n      if (\r\n        timestamp(from) >\r\n        timestamp(to)\r\n      ) {\r\n        from = first;\r\n        to = last;\r\n      }\r\n    }\r\n    state.ranges[\r\n      state.active\r\n    ] = {\r\n      from: from,\r\n      to: to\r\n    };\r\n    state.preset[\r\n      state.active\r\n    ] = null;\r\n  }\r\n  function buildShareURL() {\r\n    var range =\r\n      state.ranges[\r\n        state.active\r\n      ] || {};\r\n    var cities =\r\n      CITIES.filter(\r\n        function (city) {\r\n          return !state.hidden[\r\n            city.key\r\n          ];\r\n        }\r\n      ).map(\r\n        function (city) {\r\n          return city.key;\r\n        }\r\n      );\r\n    var params =\r\n      new URLSearchParams();\r\n    params.set(\r\n      \"ds\",\r\n      state.active\r\n    );\r\n    if (range.from) {\r\n      params.set(\r\n        \"from\",\r\n        range.from\r\n      );\r\n    }\r\n    if (range.to) {\r\n      params.set(\r\n        \"to\",\r\n        range.to\r\n      );\r\n    }\r\n    if (cities.length) {\r\n      params.set(\r\n        \"cities\",\r\n        cities.join(\",\")\r\n      );\r\n    }\r\n    var url =\r\n      new URL(\r\n        location.href\r\n      );\r\n    url.hash =\r\n      \"dnk-market?\" +\r\n      params.toString();\r\n    return url.toString();\r\n  }\r\n  function buildShareText() {\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    var range =\r\n      state.ranges[\r\n        state.active\r\n      ] || {};\r\n    var cities =\r\n      CITIES.filter(\r\n        function (city) {\r\n          return !state.hidden[\r\n            city.key\r\n          ];\r\n        }\r\n      ).map(\r\n        function (city) {\r\n          return city.name;\r\n        }\r\n      ).join(\"\u00b7\");\r\n    return (\r\n      \"DailyNK \" +\r\n      ds.label +\r\n      (\r\n        cities\r\n          ? \" \u00b7 \" + cities\r\n          : \"\"\r\n      ) +\r\n      (\r\n        range.from && range.to\r\n          ? \" \u00b7 \" +\r\n            shortDate(range.from) +\r\n            \"\u2013\" +\r\n            shortDate(range.to)\r\n          : \"\"\r\n      ) +\r\n      \"\\n\" +\r\n      buildShareURL()\r\n    );\r\n  }\r\n  function fallbackCopy(\r\n    text,\r\n    done\r\n  ) {\r\n    var input =\r\n      document.createElement(\r\n        \"textarea\"\r\n      );\r\n    input.value =\r\n      text;\r\n    input.setAttribute(\r\n      \"readonly\",\r\n      \"\"\r\n    );\r\n    input.style.position =\r\n      \"fixed\";\r\n    input.style.left =\r\n      \"-9999px\";\r\n    document.body\r\n      .appendChild(input);\r\n    input.select();\r\n    try {\r\n      document.execCommand(\"copy\");\r\n    } catch (e) {}\r\n    input.remove();\r\n    if (done) {\r\n      done();\r\n    }\r\n  }\r\n  function copyShareLink() {\r\n    var text =\r\n      buildShareText();\r\n    var btn =\r\n      document.getElementById(\r\n        \"dnk-share-btn\"\r\n      );\r\n    function done() {\r\n      if (!btn) {\r\n        return;\r\n      }\r\n      var prev =\r\n        btn.textContent;\r\n      btn.textContent =\r\n        \"\u5df2\u590d\u5236\";\r\n      setTimeout(\r\n        function () {\r\n          btn.textContent = prev;\r\n        },\r\n        1600\r\n      );\r\n    }\r\n    if (\r\n      navigator.clipboard &&\r\n      navigator.clipboard.writeText\r\n    ) {\r\n      navigator.clipboard\r\n        .writeText(text)\r\n        .then(done)\r\n        .catch(\r\n          function () {\r\n            fallbackCopy(text, done);\r\n          }\r\n        );\r\n    } else {\r\n      fallbackCopy(text, done);\r\n    }\r\n  }\r\n  function updateShareControl(\r\n    ds\r\n  ) {\r\n    var btn =\r\n      document.getElementById(\r\n        \"dnk-share-btn\"\r\n      );\r\n    if (!btn) {\r\n      return;\r\n    }\r\n    btn.disabled =\r\n      ds.loading ||\r\n      !!ds.error ||\r\n      !ds.data.length ||\r\n      !getVisibleCities().length ||\r\n      !getRangeRows(ds).length;\r\n  }\r\n  \/* =========================================================\r\n     GOOGLE DATA PARSING\r\n     ========================================================= *\/\r\n  function normalizeDate(\r\n    value,\r\n    formatted\r\n  ) {\r\n    if (\r\n      typeof value ===\r\n      \"string\"\r\n    ) {\r\n      var m =\r\n        value.match(\r\n          \/^Date\\((\\d{4}),(\\d{1,2}),(\\d{1,2})\\)$\/\r\n        );\r\n      if (m) {\r\n        return makeDateString(\r\n          Number(m[1]),\r\n          Number(m[2]) + 1,\r\n          Number(m[3])\r\n        );\r\n      }\r\n    }\r\n    if (\r\n      Object.prototype\r\n        .toString\r\n        .call(value)\r\n      === \"[object Date]\"\r\n    ) {\r\n      return makeDateString(\r\n        value.getFullYear(),\r\n        value.getMonth() + 1,\r\n        value.getDate()\r\n      );\r\n    }\r\n    var text =\r\n      String(\r\n        formatted ||\r\n        value ||\r\n        \"\"\r\n      )\r\n      .trim()\r\n      .replace(\r\n        \/\\uFEFF\/g,\r\n        \"\"\r\n      );\r\n    var match =\r\n      text.match(\r\n        \/^(\\d{4})\\s*[.\/-]\\s*(\\d{1,2})\\s*[.\/-]\\s*(\\d{1,2})\/\r\n      );\r\n    if (match) {\r\n      return makeDateString(\r\n        match[1],\r\n        match[2],\r\n        match[3]\r\n      );\r\n    }\r\n    match =\r\n      text.match(\r\n        \/^(\\d{2})\\s*[.\/-]\\s*(\\d{1,2})\\s*[.\/-]\\s*(\\d{1,2})\/\r\n      );\r\n    if (match) {\r\n      return makeDateString(\r\n        2000 +\r\n        Number(\r\n          match[1]\r\n        ),\r\n        match[2],\r\n        match[3]\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n  function parseNumericCell(\r\n    cell\r\n  ) {\r\n    if (!cell) {\r\n      return null;\r\n    }\r\n    if (\r\n      typeof cell.v === \"number\" &&\r\n      Number.isFinite(\r\n        cell.v\r\n      )\r\n    ) {\r\n      return cell.v;\r\n    }\r\n    var text =\r\n      String(\r\n        cell.v != null\r\n          ? cell.v\r\n          : cell.f || \"\"\r\n      )\r\n      .replace(\/,\/g, \"\")\r\n      .replace(\/\\s\/g, \"\")\r\n      .replace(\r\n        \/[^0-9.+-]\/g,\r\n        \"\"\r\n      );\r\n    if (!text) {\r\n      return null;\r\n    }\r\n    var n =\r\n      Number(text);\r\n    return Number.isFinite(n)\r\n      ? n\r\n      : null;\r\n  }\r\n  \/* =========================================================\r\n     GOOGLE SHEETS\r\n     ========================================================= *\/\r\n  function loadGoogleSheet(\r\n    key\r\n  ) {\r\n    var ds =\r\n      DATASETS[\r\n        key\r\n      ];\r\n    ds.loading =\r\n      true;\r\n    ds.error =\r\n      null;\r\n    return new Promise(\r\n      function (\r\n        resolve,\r\n        reject\r\n      ) {\r\n        var callback =\r\n          \"__dnk_\" +\r\n          key +\r\n          \"_\" +\r\n          Date.now() +\r\n          \"_\" +\r\n          Math.floor(\r\n            Math.random() *\r\n            99999\r\n          );\r\n        var script =\r\n          document.createElement(\r\n            \"script\"\r\n          );\r\n        var finished =\r\n          false;\r\n        var timer =\r\n          setTimeout(\r\n            function () {\r\n              if (finished) {\r\n                return;\r\n              }\r\n              finished =\r\n                true;\r\n              cleanup();\r\n              reject(\r\n                new Error(\r\n                  \"Google Sheets \u54cd\u5e94\u8d85\u65f6\u3002\"\r\n                )\r\n              );\r\n            },\r\n            12000\r\n          );\r\n        function cleanup() {\r\n          clearTimeout(\r\n            timer\r\n          );\r\n          try {\r\n            delete window[\r\n              callback\r\n            ];\r\n          } catch (e) {\r\n            window[\r\n              callback\r\n            ] =\r\n              undefined;\r\n          }\r\n          if (\r\n            script.parentNode\r\n          ) {\r\n            script.parentNode\r\n              .removeChild(\r\n                script\r\n              );\r\n          }\r\n        }\r\n        window[\r\n          callback\r\n        ] =\r\n          function (\r\n            response\r\n          ) {\r\n            if (finished) {\r\n              return;\r\n            }\r\n            finished =\r\n              true;\r\n            cleanup();\r\n            if (!response) {\r\n              reject(\r\n                new Error(\r\n                  \"Google Sheets \u65e0\u54cd\u5e94\u3002\"\r\n                )\r\n              );\r\n              return;\r\n            }\r\n            if (\r\n              response.status ===\r\n              \"error\"\r\n            ) {\r\n              reject(\r\n                new Error(\r\n                  \"Google Sheets \u9519\u8bef\"\r\n                )\r\n              );\r\n              return;\r\n            }\r\n            try {\r\n              var rows =\r\n                rowsFromGViz(\r\n                  response\r\n                );\r\n              if (\r\n                !rows.length\r\n              ) {\r\n                throw new Error(\r\n                  \"\u6ca1\u6709\u53ef\u7528\u7684\u6570\u636e\u884c\u3002\"\r\n                );\r\n              }\r\n              resolve(\r\n                rows\r\n              );\r\n            } catch (\r\n              error\r\n            ) {\r\n              reject(\r\n                error\r\n              );\r\n            }\r\n          };\r\n        var params = [\r\n          \"tqx=\" +\r\n          encodeURIComponent(\r\n            \"out:json;responseHandler:\" +\r\n            callback\r\n          ),\r\n          \"headers=1\",\r\n          \"_=\" +\r\n          Date.now()\r\n        ];\r\n        if (\r\n          ds.sheet\r\n        ) {\r\n          params.push(\r\n            \"sheet=\" +\r\n            encodeURIComponent(\r\n              ds.sheet\r\n            )\r\n          );\r\n        }\r\n        script.src =\r\n          \"https:\/\/docs.google.com\/spreadsheets\/d\/\" +\r\n          encodeURIComponent(\r\n            SHEET_ID\r\n          ) +\r\n          \"\/gviz\/tq?\" +\r\n          params.join(\"&\");\r\n        script.async =\r\n          true;\r\n        script.onerror =\r\n          function () {\r\n            if (finished) {\r\n              return;\r\n            }\r\n            finished =\r\n              true;\r\n            cleanup();\r\n            reject(\r\n              new Error(\r\n                \"Google Sheets \u8fde\u63a5\u5931\u8d25\u3002\"\r\n              )\r\n            );\r\n          };\r\n        document.head\r\n          .appendChild(\r\n            script\r\n          );\r\n      }\r\n    )\r\n    .then(\r\n      function (\r\n        rows\r\n      ) {\r\n        ds.data =\r\n          rows;\r\n        ds.loading =\r\n          false;\r\n        ds.error =\r\n          null;\r\n        \/*\r\n         * \u901a\u8fc7\u5206\u4eab\u94fe\u63a5\u8fdb\u5165\u65f6\uff0c\u907f\u514d resetRange \u8986\u76d6\u65f6\u95f4\u8303\u56f4\u3002\r\n         *\/\r\n        if (\r\n          pendingShare &&\r\n          pendingShare.ds === key &&\r\n          pendingShare.from &&\r\n          pendingShare.to\r\n        ) {\r\n          applyShareState(\r\n            pendingShare,\r\n            true\r\n          );\r\n        } else {\r\n          resetRange(\r\n            key,\r\n            true\r\n          );\r\n        }\r\n        if (\r\n          state.active ===\r\n          key\r\n        ) {\r\n          render();\r\n        }\r\n      }\r\n    )\r\n    .catch(\r\n      function (\r\n        error\r\n      ) {\r\n        ds.loading =\r\n          false;\r\n        ds.error =\r\n          error.message ||\r\n          \"\u672a\u77e5\u9519\u8bef\";\r\n        console.error(\r\n          \"[DailyNK][\" +\r\n          key +\r\n          \"]\",\r\n          error\r\n        );\r\n        if (\r\n          state.active ===\r\n          key\r\n        ) {\r\n          render();\r\n        }\r\n      }\r\n    );\r\n  }\r\n  function rowsFromGViz(\r\n    response\r\n  ) {\r\n    if (\r\n      !response.table ||\r\n      !response.table.rows\r\n    ) {\r\n      return [];\r\n    }\r\n    var output =\r\n      [];\r\n    response.table.rows\r\n      .forEach(\r\n        function (\r\n          row\r\n        ) {\r\n          var cells =\r\n            row.c || [];\r\n          if (\r\n            cells.length < 4\r\n          ) {\r\n            return;\r\n          }\r\n          var dateCell =\r\n            cells[0];\r\n          var date =\r\n            normalizeDate(\r\n              dateCell\r\n                ? dateCell.v\r\n                : null,\r\n              dateCell\r\n                ? dateCell.f\r\n                : null\r\n            );\r\n          if (!date) {\r\n            return;\r\n          }\r\n          var py =\r\n            parseNumericCell(\r\n              cells[1]\r\n            );\r\n          var si =\r\n            parseNumericCell(\r\n              cells[2]\r\n            );\r\n          var hy =\r\n            parseNumericCell(\r\n              cells[3]\r\n            );\r\n          if (\r\n            py === null &&\r\n            si === null &&\r\n            hy === null\r\n          ) {\r\n            return;\r\n          }\r\n          output.push([\r\n            date,\r\n            py,\r\n            si,\r\n            hy\r\n          ]);\r\n        }\r\n      );\r\n    output.sort(\r\n      function (\r\n        a,\r\n        b\r\n      ) {\r\n        return (\r\n          timestamp(\r\n            a[0]\r\n          )\r\n          -\r\n          timestamp(\r\n            b[0]\r\n          )\r\n        );\r\n      }\r\n    );\r\n    var unique =\r\n      {};\r\n    output.forEach(\r\n      function (\r\n        row\r\n      ) {\r\n        unique[\r\n          row[0]\r\n        ] =\r\n          row;\r\n      }\r\n    );\r\n    return Object\r\n      .keys(\r\n        unique\r\n      )\r\n      .sort()\r\n      .map(\r\n        function (\r\n          date\r\n        ) {\r\n          return unique[\r\n            date\r\n          ];\r\n        }\r\n      );\r\n  }\r\n  \/* =========================================================\r\n     RANGE PICKER\r\n     ========================================================= *\/\r\n  var rangePicker =\r\n    document.getElementById(\r\n      \"dnk-range-picker\"\r\n    );\r\n  var rangeTrigger =\r\n    document.getElementById(\r\n      \"dnk-range-trigger\"\r\n    );\r\n  var rangePopover =\r\n    document.getElementById(\r\n      \"dnk-range-popover\"\r\n    );\r\n  function openRangePicker() {\r\n    if (\r\n      rangeTrigger.disabled\r\n    ) {\r\n      return;\r\n    }\r\n    \/* \u5982\u679c\u5176\u4ed6\u5f39\u51fa\u5c42\u5df2\u6253\u5f00\uff0c\u5219\u5148\u5173\u95ed\u3002 *\/\r\n    closeExportMenu();\r\n    rangePopover.hidden =\r\n      false;\r\n    rangeTrigger.setAttribute(\r\n      \"aria-expanded\",\r\n      \"true\"\r\n    );\r\n  }\r\n  function closeRangePicker() {\r\n    rangePopover.hidden =\r\n      true;\r\n    rangeTrigger.setAttribute(\r\n      \"aria-expanded\",\r\n      \"false\"\r\n    );\r\n  }\r\n  rangeTrigger.addEventListener(\r\n    \"click\",\r\n    function (\r\n      event\r\n    ) {\r\n      event.stopPropagation();\r\n      if (\r\n        rangePopover.hidden\r\n      ) {\r\n        openRangePicker();\r\n      } else {\r\n        closeRangePicker();\r\n      }\r\n    }\r\n  );\r\n  rangePopover.addEventListener(\r\n    \"click\",\r\n    function (\r\n      event\r\n    ) {\r\n      event.stopPropagation();\r\n    }\r\n  );\r\n  document.addEventListener(\r\n    \"click\",\r\n    function (\r\n      event\r\n    ) {\r\n      if (\r\n        !rangePicker.contains(\r\n          event.target\r\n        )\r\n      ) {\r\n        closeRangePicker();\r\n      }\r\n    }\r\n  );\r\n  document.addEventListener(\r\n    \"keydown\",\r\n    function (\r\n      event\r\n    ) {\r\n      if (\r\n        event.key ===\r\n        \"Escape\"\r\n      ) {\r\n        closeRangePicker();\r\n      }\r\n    }\r\n  );\r\n  \/* =========================================================\r\n     RANGE\r\n     ========================================================= *\/\r\n  function resetRange(\r\n    key,\r\n    force\r\n  ) {\r\n    var ds =\r\n      DATASETS[\r\n        key\r\n      ];\r\n    if (\r\n      !ds.data.length\r\n    ) {\r\n      return;\r\n    }\r\n    var first =\r\n      ds.data[0][0];\r\n    var last =\r\n      ds.data[\r\n        ds.data.length - 1\r\n      ][0];\r\n    var range =\r\n      state.ranges[\r\n        key\r\n      ];\r\n    if (\r\n      force ||\r\n      !range.from ||\r\n      !range.to\r\n    ) {\r\n      var from =\r\n        addMonths(\r\n          last,\r\n          -6\r\n        );\r\n      if (\r\n        timestamp(\r\n          from\r\n        )\r\n        <\r\n        timestamp(\r\n          first\r\n        )\r\n      ) {\r\n        from =\r\n          first;\r\n      }\r\n      state.ranges[\r\n        key\r\n      ] = {\r\n        from:\r\n          from,\r\n        to:\r\n          last\r\n      };\r\n      state.preset[\r\n        key\r\n      ] =\r\n        \"6m\";\r\n    }\r\n  }\r\n  function setPreset(\r\n    preset\r\n  ) {\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    if (\r\n      !ds.data.length\r\n    ) {\r\n      return;\r\n    }\r\n    var first =\r\n      ds.data[0][0];\r\n    var last =\r\n      ds.data[\r\n        ds.data.length - 1\r\n      ][0];\r\n    var from;\r\n    if (\r\n      preset ===\r\n      \"full\"\r\n    ) {\r\n      from =\r\n        first;\r\n    } else if (\r\n      preset ===\r\n      \"6m\"\r\n    ) {\r\n      from =\r\n        addMonths(\r\n          last,\r\n          -6\r\n        );\r\n    } else if (\r\n      preset ===\r\n      \"1y\"\r\n    ) {\r\n      from =\r\n        addYears(\r\n          last,\r\n          -1\r\n        );\r\n    } else {\r\n      from =\r\n        addYears(\r\n          last,\r\n          -3\r\n        );\r\n    }\r\n    if (\r\n      timestamp(\r\n        from\r\n      )\r\n      <\r\n      timestamp(\r\n        first\r\n      )\r\n    ) {\r\n      from =\r\n        first;\r\n    }\r\n    state.ranges[\r\n      state.active\r\n    ] = {\r\n      from:\r\n        from,\r\n      to:\r\n        last\r\n    };\r\n    state.preset[\r\n      state.active\r\n    ] =\r\n      preset;\r\n    state.page =\r\n      1;\r\n    closeRangePicker();\r\n    render();\r\n  }\r\n  function getRangeRows(\r\n    ds\r\n  ) {\r\n    if (\r\n      !ds.data.length\r\n    ) {\r\n      return [];\r\n    }\r\n    resetRange(\r\n      state.active,\r\n      false\r\n    );\r\n    var range =\r\n      state.ranges[\r\n        state.active\r\n      ];\r\n    var from =\r\n      timestamp(\r\n        range.from\r\n      );\r\n    var to =\r\n      timestamp(\r\n        range.to\r\n      );\r\n    return ds.data.filter(\r\n      function (\r\n        row\r\n      ) {\r\n        var t =\r\n          timestamp(\r\n            row[0]\r\n          );\r\n        return (\r\n          t >= from &&\r\n          t <= to\r\n        );\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     TABS\r\n     ========================================================= *\/\r\n  function renderTabs() {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-tabs\"\r\n      );\r\n    el.innerHTML =\r\n      \"\";\r\n    var keys =\r\n      Object.keys(\r\n        DATASETS\r\n      );\r\n    keys.forEach(\r\n      function (\r\n        key\r\n      ) {\r\n        var button =\r\n          document.createElement(\r\n            \"button\"\r\n          );\r\n        button.type =\r\n          \"button\";\r\n        button.className =\r\n          \"dnk-tab\";\r\n        button.textContent =\r\n          DATASETS[\r\n            key\r\n          ].label;\r\n        button.setAttribute(\r\n          \"role\",\r\n          \"tab\"\r\n        );\r\n        button.setAttribute(\r\n          \"id\",\r\n          \"dnk-tab-\" +\r\n          key\r\n        );\r\n        button.setAttribute(\r\n          \"aria-controls\",\r\n          \"dnk-panel\"\r\n        );\r\n        button.setAttribute(\r\n          \"aria-selected\",\r\n          state.active ===\r\n          key\r\n            ? \"true\"\r\n            : \"false\"\r\n        );\r\n        button.setAttribute(\r\n          \"tabindex\",\r\n          state.active ===\r\n          key\r\n            ? \"0\"\r\n            : \"-1\"\r\n        );\r\n        button.onclick =\r\n          function () {\r\n            state.active =\r\n              key;\r\n            state.page =\r\n              1;\r\n            closeRangePicker();\r\n            render();\r\n          };\r\n        button.onkeydown =\r\n          function (\r\n            event\r\n          ) {\r\n            var index =\r\n              keys.indexOf(\r\n                key\r\n              );\r\n            var nextIndex =\r\n              index;\r\n            if (\r\n              event.key ===\r\n              \"ArrowRight\"\r\n            ) {\r\n              nextIndex =\r\n                (\r\n                  index + 1\r\n                )\r\n                %\r\n                keys.length;\r\n            } else if (\r\n              event.key ===\r\n              \"ArrowLeft\"\r\n            ) {\r\n              nextIndex =\r\n                (\r\n                  index - 1 +\r\n                  keys.length\r\n                )\r\n                %\r\n                keys.length;\r\n            } else {\r\n              return;\r\n            }\r\n            event.preventDefault();\r\n            var nextKey =\r\n              keys[\r\n                nextIndex\r\n              ];\r\n            state.active =\r\n              nextKey;\r\n            state.page =\r\n              1;\r\n            closeRangePicker();\r\n            render();\r\n            requestAnimationFrame(\r\n              function () {\r\n                var nextButton =\r\n                  document.getElementById(\r\n                    \"dnk-tab-\" +\r\n                    nextKey\r\n                  );\r\n                if (\r\n                  nextButton\r\n                ) {\r\n                  nextButton.focus();\r\n                }\r\n              }\r\n            );\r\n          };\r\n        el.appendChild(\r\n          button\r\n        );\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     STATUS\r\n     ========================================================= *\/\r\n  function renderStatus(\r\n    ds\r\n  ) {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-status\"\r\n      );\r\n    el.className =\r\n      \"dnk-status\";\r\n    el.innerHTML =\r\n      \"\";\r\n    if (\r\n      ds.error\r\n    ) {\r\n      el.classList.add(\r\n        \"visible\"\r\n      );\r\n      el.innerHTML =\r\n        \"<strong>\" +\r\n        esc(\r\n          ds.label\r\n        ) +\r\n        \" \u6570\u636e\u52a0\u8f7d\u5931\u8d25\u3002<\/strong><br>\" +\r\n        \"\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002\u5982\u95ee\u9898\u6301\u7eed\uff0c\u8bf7\u5237\u65b0\u9875\u9762\u3002\";\r\n    }\r\n  }\r\n  \/* =========================================================\r\n     CARDS\r\n     ========================================================= *\/\r\n  function renderCards(\r\n    ds\r\n  ) {\r\n    var cards =\r\n      document.getElementById(\r\n        \"dnk-cards\"\r\n      );\r\n    var meta =\r\n      document.getElementById(\r\n        \"dnk-card-meta\"\r\n      );\r\n    cards.innerHTML =\r\n      \"\";\r\n    meta.innerHTML =\r\n      \"\";\r\n    meta.style.display =\r\n      \"none\";\r\n    if (\r\n      ds.loading\r\n    ) {\r\n      for (\r\n        var s = 0;\r\n        s < 3;\r\n        s++\r\n      ) {\r\n        cards.innerHTML += `\r\n          <div\r\n            class=\"\r\n              dnk-card\r\n              dnk-card-skeleton\r\n            \">\r\n            <div\r\n              class=\"\r\n                dnk-skeleton\r\n                dnk-skeleton-city\r\n              \">\r\n            <\/div>\r\n            <div\r\n              class=\"\r\n                dnk-skeleton\r\n                dnk-skeleton-price\r\n              \">\r\n            <\/div>\r\n          <\/div>\r\n        `;\r\n      }\r\n      return;\r\n    }\r\n    if (\r\n      ds.error ||\r\n      !ds.data.length\r\n    ) {\r\n      return;\r\n    }\r\n    var rows =\r\n      ds.data;\r\n    var last =\r\n      rows[\r\n        rows.length - 1\r\n      ];\r\n    var previous =\r\n      rows.length > 1\r\n        ? rows[\r\n            rows.length - 2\r\n          ]\r\n        : null;\r\n    meta.style.display =\r\n      \"block\";\r\n    meta.textContent =\r\n      monthDay(\r\n        last[0]\r\n      ) +\r\n      \" \u8c03\u67e5 \u00b7 \" +\r\n      ds.cardBasis +\r\n      (\r\n        previous\r\n          ? \" \u00b7 \u8f83\u4e0a\u6b21\u8c03\u67e5\uff08\" +\r\n            monthDay(\r\n              previous[0]\r\n            ) +\r\n            \"\uff09\"\r\n          : \"\"\r\n      );\r\n    CITIES.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        var current =\r\n          last[\r\n            city.idx\r\n          ];\r\n        var before =\r\n          previous\r\n            ? previous[\r\n                city.idx\r\n              ]\r\n            : null;\r\n        var diff =\r\n          null;\r\n        var pct =\r\n          null;\r\n        if (\r\n          current !== null &&\r\n          before !== null\r\n        ) {\r\n          diff =\r\n            current -\r\n            before;\r\n          if (\r\n            before !== 0\r\n          ) {\r\n            pct =\r\n              diff \/\r\n              before *\r\n              100;\r\n          }\r\n        }\r\n        var cls =\r\n          \"flat\";\r\n        var arrow =\r\n          \"\u2015\";\r\n        if (\r\n          diff > 0\r\n        ) {\r\n          cls =\r\n            \"up\";\r\n          arrow =\r\n            \"\u25b2\";\r\n        } else if (\r\n          diff < 0\r\n        ) {\r\n          cls =\r\n            \"down\";\r\n          arrow =\r\n            \"\u25bc\";\r\n        }\r\n        var changeText =\r\n          \"\u2015\";\r\n        if (\r\n          pct !== null\r\n        ) {\r\n          changeText =\r\n            arrow +\r\n            \" \" +\r\n            Math.abs(\r\n              pct\r\n            ).toFixed(1) +\r\n            \"%\";\r\n        } else if (\r\n          diff === 0\r\n        ) {\r\n          changeText =\r\n            \"\u2015 0.0%\";\r\n        }\r\n        var card =\r\n          document.createElement(\r\n            \"div\"\r\n          );\r\n        card.className =\r\n          \"dnk-card\";\r\n        card.innerHTML = `\r\n          <div class=\"dnk-card-head\">\r\n            <div class=\"dnk-city-name\">\r\n              <span\r\n                class=\"dnk-dot\"\r\n                style=\"\r\n                  background:${city.color};\r\n                \">\r\n              <\/span>\r\n              ${esc(city.name)}\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"dnk-price-row\">\r\n            <div class=\"dnk-price\">\r\n              ${fmt(current)}\r\n            <\/div>\r\n            <div\r\n              class=\"\r\n                dnk-change-badge\r\n                ${cls}\r\n              \">\r\n              ${esc(changeText)}\r\n            <\/div>\r\n          <\/div>\r\n        `;\r\n        cards.appendChild(\r\n          card\r\n        );\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     CITY FILTERS\r\n     ========================================================= *\/\r\n  function renderCityFilters() {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-cityfilters\"\r\n      );\r\n    el.innerHTML =\r\n      \"\";\r\n    CITIES.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        var button =\r\n          document.createElement(\r\n            \"button\"\r\n          );\r\n        button.type =\r\n          \"button\";\r\n        button.className =\r\n          \"dnk-citychip\";\r\n        button.setAttribute(\r\n          \"aria-pressed\",\r\n          state.hidden[\r\n            city.key\r\n          ]\r\n            ? \"false\"\r\n            : \"true\"\r\n        );\r\n        button.setAttribute(\r\n          \"aria-label\",\r\n          city.name +\r\n          (\r\n            state.hidden[\r\n              city.key\r\n            ]\r\n              ? \" \u663e\u793a\"\r\n              : \" \u9690\u85cf\"\r\n          )\r\n        );\r\n        button.innerHTML = `\r\n          <span\r\n            class=\"dnk-dot\"\r\n            style=\"\r\n              background:${city.color};\r\n            \">\r\n          <\/span>\r\n          ${esc(city.name)}\r\n        `;\r\n        button.onclick =\r\n          function () {\r\n            state.hidden[\r\n              city.key\r\n            ] =\r\n              !state.hidden[\r\n                city.key\r\n              ];\r\n            state.page =\r\n              1;\r\n            renderCityFilters();\r\n            renderChart(\r\n              DATASETS[\r\n                state.active\r\n              ]\r\n            );\r\n            renderTable(\r\n              DATASETS[\r\n                state.active\r\n              ]\r\n            );\r\n            updateExportControl(\r\n              DATASETS[\r\n                state.active\r\n              ]\r\n            );\r\n            updateShareControl(\r\n              DATASETS[\r\n                state.active\r\n              ]\r\n            );\r\n          };\r\n        el.appendChild(\r\n          button\r\n        );\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     PERIOD CONTROLS\r\n     ========================================================= *\/\r\n  function renderPeriodControls(\r\n    ds\r\n  ) {\r\n    var from =\r\n      document.getElementById(\r\n        \"dnk-from\"\r\n      );\r\n    var to =\r\n      document.getElementById(\r\n        \"dnk-to\"\r\n      );\r\n    var rangeText =\r\n      document.getElementById(\r\n        \"dnk-range-text\"\r\n      );\r\n    var buttons =\r\n      document.querySelectorAll(\r\n        \"#dnk-market [data-preset]\"\r\n      );\r\n    if (\r\n      !ds.data.length\r\n    ) {\r\n      from.value =\r\n        \"\";\r\n      to.value =\r\n        \"\";\r\n      from.disabled =\r\n        true;\r\n      to.disabled =\r\n        true;\r\n      rangeTrigger.disabled =\r\n        true;\r\n      rangeText.textContent =\r\n        \"\u9009\u62e9\u65f6\u95f4\u8303\u56f4\";\r\n      buttons.forEach(\r\n        function (\r\n          button\r\n        ) {\r\n          button.disabled =\r\n            true;\r\n          button.setAttribute(\r\n            \"aria-checked\",\r\n            \"false\"\r\n          );\r\n        }\r\n      );\r\n      return;\r\n    }\r\n    from.disabled =\r\n      false;\r\n    to.disabled =\r\n      false;\r\n    rangeTrigger.disabled =\r\n      false;\r\n    resetRange(\r\n      state.active,\r\n      false\r\n    );\r\n    var first =\r\n      ds.data[0][0];\r\n    var last =\r\n      ds.data[\r\n        ds.data.length - 1\r\n      ][0];\r\n    var range =\r\n      state.ranges[\r\n        state.active\r\n      ];\r\n    from.value =\r\n      range.from;\r\n    to.value =\r\n      range.to;\r\n    from.min =\r\n      first;\r\n    from.max =\r\n      to.value;\r\n    to.min =\r\n      from.value;\r\n    to.max =\r\n      last;\r\n    rangeText.textContent =\r\n      shortDate(\r\n        range.from\r\n      ) +\r\n      \" \u2013 \" +\r\n      shortDate(\r\n        range.to\r\n      );\r\n    rangeTrigger.setAttribute(\r\n      \"aria-label\",\r\n      \"\u9009\u62e9\u65f6\u95f4\u8303\u56f4: \" +\r\n      shortDate(\r\n        range.from\r\n      ) +\r\n      \" \u81f3 \" +\r\n      shortDate(\r\n        range.to\r\n      ) +\r\n      \"\"\r\n    );\r\n    buttons.forEach(\r\n      function (\r\n        button\r\n      ) {\r\n        var preset =\r\n          button.getAttribute(\r\n            \"data-preset\"\r\n          );\r\n        var active =\r\n          state.preset[\r\n            state.active\r\n          ] === preset;\r\n        button.disabled =\r\n          false;\r\n        button.setAttribute(\r\n          \"aria-checked\",\r\n          active\r\n            ? \"true\"\r\n            : \"false\"\r\n        );\r\n        button.onclick =\r\n          function () {\r\n            setPreset(\r\n              preset\r\n            );\r\n          };\r\n      }\r\n    );\r\n    function commit() {\r\n      if (\r\n        !from.value ||\r\n        !to.value\r\n      ) {\r\n        return;\r\n      }\r\n      if (\r\n        timestamp(\r\n          from.value\r\n        )\r\n        >\r\n        timestamp(\r\n          to.value\r\n        )\r\n      ) {\r\n        return;\r\n      }\r\n      state.ranges[\r\n        state.active\r\n      ] = {\r\n        from:\r\n          from.value,\r\n        to:\r\n          to.value\r\n      };\r\n      state.preset[\r\n        state.active\r\n      ] =\r\n        null;\r\n      state.page =\r\n        1;\r\n      render();\r\n    }\r\n    from.onchange =\r\n      function () {\r\n        to.min =\r\n          from.value;\r\n        commit();\r\n      };\r\n    to.onchange =\r\n      function () {\r\n        from.max =\r\n          to.value;\r\n        commit();\r\n      };\r\n  }\r\n  \/* =========================================================\r\n     Y AXIS\r\n     ========================================================= *\/\r\n  function niceStep(\r\n    value\r\n  ) {\r\n    if (\r\n      !Number.isFinite(\r\n        value\r\n      ) ||\r\n      value <= 0\r\n    ) {\r\n      return 1;\r\n    }\r\n    var power =\r\n      Math.pow(\r\n        10,\r\n        Math.floor(\r\n          Math.log10(\r\n            value\r\n          )\r\n        )\r\n      );\r\n    var fraction =\r\n      value \/\r\n      power;\r\n    var nice;\r\n    if (\r\n      fraction <= 1\r\n    ) {\r\n      nice =\r\n        1;\r\n    } else if (\r\n      fraction <= 2\r\n    ) {\r\n      nice =\r\n        2;\r\n    } else if (\r\n      fraction <= 2.5\r\n    ) {\r\n      nice =\r\n        2.5;\r\n    } else if (\r\n      fraction <= 5\r\n    ) {\r\n      nice =\r\n        5;\r\n    } else {\r\n      nice =\r\n        10;\r\n    }\r\n    return (\r\n      nice *\r\n      power\r\n    );\r\n  }\r\n  function getYAxisRange(\r\n    ds,\r\n    values\r\n  ) {\r\n    if (\r\n      !values.length\r\n    ) {\r\n      return {\r\n        min:0,\r\n        max:\r\n          ds.axisMinStep *\r\n          4,\r\n        step:\r\n          ds.axisMinStep\r\n      };\r\n    }\r\n    var dataMin =\r\n      Math.min.apply(\r\n        null,\r\n        values\r\n      );\r\n    var dataMax =\r\n      Math.max.apply(\r\n        null,\r\n        values\r\n      );\r\n    var span =\r\n      dataMax -\r\n      dataMin;\r\n    if (\r\n      span <= 0\r\n    ) {\r\n      var sameStep =\r\n        Math.max(\r\n          ds.axisMinStep,\r\n          niceStep(\r\n            Math.abs(\r\n              dataMax\r\n            ) *\r\n            0.02\r\n          )\r\n        );\r\n      return {\r\n        min:\r\n          Math.max(\r\n            0,\r\n            Math.floor(\r\n              (\r\n                dataMin -\r\n                sameStep * 2\r\n              )\r\n              \/\r\n              sameStep\r\n            )\r\n            *\r\n            sameStep\r\n          ),\r\n        max:\r\n          Math.ceil(\r\n            (\r\n              dataMax +\r\n              sameStep * 2\r\n            )\r\n            \/\r\n            sameStep\r\n          )\r\n          *\r\n          sameStep,\r\n        step:\r\n          sameStep\r\n      };\r\n    }\r\n    var paddedSpan =\r\n      span *\r\n      1.24;\r\n    var step =\r\n      niceStep(\r\n        paddedSpan \/\r\n        4\r\n      );\r\n    step =\r\n      Math.max(\r\n        step,\r\n        ds.axisMinStep\r\n      );\r\n    var padding =\r\n      Math.max(\r\n        span *\r\n        0.12,\r\n        step *\r\n        0.25\r\n      );\r\n    var yMin =\r\n      Math.floor(\r\n        (\r\n          dataMin -\r\n          padding\r\n        )\r\n        \/\r\n        step\r\n      )\r\n      *\r\n      step;\r\n    var yMax =\r\n      Math.ceil(\r\n        (\r\n          dataMax +\r\n          padding\r\n        )\r\n        \/\r\n        step\r\n      )\r\n      *\r\n      step;\r\n    yMin =\r\n      Math.max(\r\n        0,\r\n        yMin\r\n      );\r\n    var tickCount =\r\n      Math.round(\r\n        (\r\n          yMax -\r\n          yMin\r\n        )\r\n        \/\r\n        step\r\n      );\r\n    if (\r\n      tickCount > 6\r\n    ) {\r\n      step =\r\n        niceStep(\r\n          (\r\n            yMax -\r\n            yMin\r\n          )\r\n          \/\r\n          5\r\n        );\r\n      step =\r\n        Math.max(\r\n          step,\r\n          ds.axisMinStep\r\n        );\r\n      yMin =\r\n        Math.floor(\r\n          yMin \/\r\n          step\r\n        )\r\n        *\r\n        step;\r\n      yMax =\r\n        Math.ceil(\r\n          yMax \/\r\n          step\r\n        )\r\n        *\r\n        step;\r\n    }\r\n    return {\r\n      min:yMin,\r\n      max:yMax,\r\n      step:step\r\n    };\r\n  }\r\n  function formatAxisValue(\r\n    value\r\n  ) {\r\n    if (\r\n      isCompact() &&\r\n      Math.abs(\r\n        value\r\n      ) >= 10000\r\n    ) {\r\n      var man =\r\n        value \/\r\n        10000;\r\n      return (\r\n        Number.isInteger(\r\n          man\r\n        )\r\n          ? man\r\n          : man.toFixed(1)\r\n      ) + \"\u4e07\";\r\n    }\r\n    return fmt(\r\n      value\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     SVG\r\n     ========================================================= *\/\r\n  function svgText(\r\n    x,\r\n    y,\r\n    value,\r\n    options\r\n  ) {\r\n    options =\r\n      options || {};\r\n    return `\r\n      <text\r\n        x=\"${x}\"\r\n        y=\"${y}\"\r\n        fill=\"${options.fill || \"#6b7684\"}\"\r\n        font-size=\"${options.size || 10}\"\r\n        font-family=\"PingFang SC,Microsoft YaHei,Noto Sans SC,Hiragino Sans GB,-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif\"\r\n        text-anchor=\"${options.anchor || \"start\"}\">\r\n        ${esc(value)}\r\n      <\/text>\r\n    `;\r\n  }\r\n  \/* =========================================================\r\n     CHART\r\n     ========================================================= *\/\r\n  function renderChart(\r\n    ds\r\n  ) {\r\n    document\r\n      .getElementById(\r\n        \"dnk-chart-title\"\r\n      )\r\n      .textContent =\r\n        ds.chartTitle;\r\n    var container =\r\n      document.getElementById(\r\n        \"dnk-chart\"\r\n      );\r\n    var tooltip =\r\n      document.getElementById(\r\n        \"dnk-tooltip\"\r\n      );\r\n    tooltip.style.display =\r\n      \"none\";\r\n    if (\r\n      ds.loading\r\n    ) {\r\n      container.innerHTML = `\r\n        <div class=\"dnk-chart-skeleton\">\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-chart-skeleton-line\r\n              one\r\n            \">\r\n          <\/div>\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-chart-skeleton-line\r\n              two\r\n            \">\r\n          <\/div>\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-chart-skeleton-line\r\n              three\r\n            \">\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n      return;\r\n    }\r\n    if (\r\n      ds.error\r\n    ) {\r\n      container.innerHTML =\r\n        '<div class=\"dnk-chart-empty\">' +\r\n        '\u65e0\u6cd5\u52a0\u8f7d\u56fe\u8868\u3002' +\r\n        '<\/div>';\r\n      return;\r\n    }\r\n    var rows =\r\n      getRangeRows(\r\n        ds\r\n      );\r\n    if (\r\n      !rows.length\r\n    ) {\r\n      container.innerHTML =\r\n        '<div class=\"dnk-chart-empty\">' +\r\n        '\u8be5\u65f6\u95f4\u8303\u56f4\u5185\u6ca1\u6709\u8c03\u67e5\u8bb0\u5f55\uff0c\u8bf7\u9009\u62e9\u5176\u4ed6\u65f6\u95f4\u8303\u56f4\u3002' +\r\n        '<\/div>';\r\n      return;\r\n    }\r\n    var visibleCities =\r\n      CITIES.filter(\r\n        function (\r\n          city\r\n        ) {\r\n          return !state.hidden[\r\n            city.key\r\n          ];\r\n        }\r\n      );\r\n    if (\r\n      !visibleCities.length\r\n    ) {\r\n      container.innerHTML =\r\n        '<div class=\"dnk-chart-empty\">' +\r\n        '\u8bf7\u9009\u62e9\u8981\u663e\u793a\u7684\u5730\u533a\u3002' +\r\n        '<\/div>';\r\n      return;\r\n    }\r\n    var compact =\r\n      isCompact();\r\n    var width =\r\n      Math.max(\r\n        container.clientWidth,\r\n        240\r\n      );\r\n    var height =\r\n      container.clientHeight ||\r\n      390;\r\n    var margin =\r\n      compact\r\n        ? {\r\n            top:16,\r\n            right:10,\r\n            bottom:31,\r\n            left:\r\n              isVerySmall()\r\n                ? 44\r\n                : 48\r\n          }\r\n        : {\r\n            top:20,\r\n            right:12,\r\n            bottom:36,\r\n            left:62\r\n          };\r\n    var innerWidth =\r\n      width -\r\n      margin.left -\r\n      margin.right;\r\n    var innerHeight =\r\n      height -\r\n      margin.top -\r\n      margin.bottom;\r\n    var times =\r\n      rows.map(\r\n        function (\r\n          row\r\n        ) {\r\n          return timestamp(\r\n            row[0]\r\n          );\r\n        }\r\n      );\r\n    var xMin =\r\n      Math.min.apply(\r\n        null,\r\n        times\r\n      );\r\n    var xMax =\r\n      Math.max.apply(\r\n        null,\r\n        times\r\n      );\r\n    if (\r\n      xMin ===\r\n      xMax\r\n    ) {\r\n      xMin -=\r\n        86400000;\r\n      xMax +=\r\n        86400000;\r\n    }\r\n    var values =\r\n      [];\r\n    visibleCities.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        rows.forEach(\r\n          function (\r\n            row\r\n          ) {\r\n            var value =\r\n              row[\r\n                city.idx\r\n              ];\r\n            if (\r\n              value !== null &&\r\n              Number.isFinite(\r\n                Number(\r\n                  value\r\n                )\r\n              )\r\n            ) {\r\n              values.push(\r\n                Number(\r\n                  value\r\n                )\r\n              );\r\n            }\r\n          }\r\n        );\r\n      }\r\n    );\r\n    var yRange =\r\n      getYAxisRange(\r\n        ds,\r\n        values\r\n      );\r\n    var yMin =\r\n      yRange.min;\r\n    var yMax =\r\n      yRange.max;\r\n    var yStep =\r\n      yRange.step;\r\n    function xScale(\r\n      time\r\n    ) {\r\n      return (\r\n        margin.left +\r\n        (\r\n          (\r\n            time -\r\n            xMin\r\n          )\r\n          \/\r\n          (\r\n            xMax -\r\n            xMin\r\n          )\r\n        )\r\n        *\r\n        innerWidth\r\n      );\r\n    }\r\n    function yScale(\r\n      value\r\n    ) {\r\n      return (\r\n        margin.top +\r\n        innerHeight -\r\n        (\r\n          (\r\n            Number(\r\n              value\r\n            ) -\r\n            yMin\r\n          )\r\n          \/\r\n          (\r\n            yMax -\r\n            yMin\r\n          )\r\n        )\r\n        *\r\n        innerHeight\r\n      );\r\n    }\r\n    var svg = `\r\n      <svg\r\n        viewBox=\"0 0 ${width} ${height}\"\r\n        preserveAspectRatio=\"none\">\r\n        <rect\r\n          width=\"${width}\"\r\n          height=\"${height}\"\r\n          fill=\"#ffffff\">\r\n        <\/rect>\r\n    `;\r\n    \/* Y AXIS *\/\r\n    var yTickCount =\r\n      Math.round(\r\n        (\r\n          yMax -\r\n          yMin\r\n        )\r\n        \/\r\n        yStep\r\n      );\r\n    for (\r\n      var i = 0;\r\n      i <= yTickCount;\r\n      i++\r\n    ) {\r\n      var yValue =\r\n        yMin +\r\n        yStep *\r\n        i;\r\n      var y =\r\n        yScale(\r\n          yValue\r\n        );\r\n      svg += `\r\n        <line\r\n          x1=\"${margin.left}\"\r\n          x2=\"${width - margin.right}\"\r\n          y1=\"${y}\"\r\n          y2=\"${y}\"\r\n          stroke=\"#f2f4f6\"\r\n          stroke-width=\"1\">\r\n        <\/line>\r\n      `;\r\n      svg +=\r\n        svgText(\r\n          margin.left - 7,\r\n          y + 3,\r\n          formatAxisValue(\r\n            Math.round(\r\n              yValue\r\n            )\r\n          ),\r\n          {\r\n            anchor:\"end\",\r\n            fill:\"#6b7684\",\r\n            size:10\r\n          }\r\n        );\r\n    }\r\n    \/* X AXIS *\/\r\n    var xTicks =\r\n      compact\r\n        ? 3\r\n        : 6;\r\n    var rangeDays =\r\n      (\r\n        xMax -\r\n        xMin\r\n      )\r\n      \/\r\n      86400000;\r\n    for (\r\n      var xt = 0;\r\n      xt < xTicks;\r\n      xt++\r\n    ) {\r\n      var ratio =\r\n        xt \/\r\n        (\r\n          xTicks -\r\n          1\r\n        );\r\n      var time =\r\n        xMin +\r\n        (\r\n          xMax -\r\n          xMin\r\n        )\r\n        *\r\n        ratio;\r\n      var d =\r\n        new Date(\r\n          time\r\n        );\r\n      var x =\r\n        xScale(\r\n          time\r\n        );\r\n      var label;\r\n      if (\r\n        compact\r\n      ) {\r\n        if (\r\n          rangeDays >\r\n          400\r\n        ) {\r\n          label =\r\n            String(\r\n              d.getFullYear()\r\n            )\r\n            .slice(-2)\r\n            +\r\n            \".\"\r\n            +\r\n            pad(\r\n              d.getMonth() +\r\n              1\r\n            );\r\n        } else {\r\n          label =\r\n            (\r\n              d.getMonth() +\r\n              1\r\n            )\r\n            +\r\n            \"\u6708\";\r\n        }\r\n      } else {\r\n        label =\r\n          d.getFullYear()\r\n          +\r\n          \".\"\r\n          +\r\n          pad(\r\n            d.getMonth() +\r\n            1\r\n          );\r\n      }\r\n      var anchor =\r\n        \"middle\";\r\n      if (\r\n        xt === 0\r\n      ) {\r\n        anchor =\r\n          \"start\";\r\n      } else if (\r\n        xt ===\r\n        xTicks - 1\r\n      ) {\r\n        anchor =\r\n          \"end\";\r\n      }\r\n      svg +=\r\n        svgText(\r\n          x,\r\n          height - 8,\r\n          label,\r\n          {\r\n            anchor:anchor,\r\n            fill:\"#6b7684\",\r\n            size:10\r\n          }\r\n        );\r\n    }\r\n    \/* SERIES *\/\r\n    visibleCities.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        var path =\r\n          \"\";\r\n        var started =\r\n          false;\r\n        rows.forEach(\r\n          function (\r\n            row\r\n          ) {\r\n            var value =\r\n              row[\r\n                city.idx\r\n              ];\r\n            if (\r\n              value === null ||\r\n              !Number.isFinite(\r\n                Number(\r\n                  value\r\n                )\r\n              )\r\n            ) {\r\n              started =\r\n                false;\r\n              return;\r\n            }\r\n            var x =\r\n              xScale(\r\n                timestamp(\r\n                  row[0]\r\n                )\r\n              );\r\n            var y =\r\n              yScale(\r\n                value\r\n              );\r\n            if (\r\n              !started\r\n            ) {\r\n              path +=\r\n                \"M \" +\r\n                x +\r\n                \" \" +\r\n                y +\r\n                \" \";\r\n              started =\r\n                true;\r\n            } else {\r\n              path +=\r\n                \"L \" +\r\n                x +\r\n                \" \" +\r\n                y +\r\n                \" \";\r\n            }\r\n          }\r\n        );\r\n        svg += `\r\n          <path\r\n            d=\"${path}\"\r\n            fill=\"none\"\r\n            stroke=\"${city.color}\"\r\n            stroke-width=\"${\r\n              compact\r\n                ? 2\r\n                : 2.4\r\n            }\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\">\r\n          <\/path>\r\n        `;\r\n      }\r\n    );\r\n    \/* HOVER *\/\r\n    svg += `\r\n      <line\r\n        id=\"dnk-hover-line\"\r\n        x1=\"0\"\r\n        x2=\"0\"\r\n        y1=\"${margin.top}\"\r\n        y2=\"${margin.top + innerHeight}\"\r\n        stroke=\"#6b7684\"\r\n        stroke-opacity=\".55\"\r\n        stroke-width=\"1\"\r\n        stroke-dasharray=\"3 4\"\r\n        visibility=\"hidden\">\r\n      <\/line>\r\n    `;\r\n    visibleCities.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        svg += `\r\n          <circle\r\n            id=\"dnk-hover-dot-${city.key}\"\r\n            cx=\"0\"\r\n            cy=\"0\"\r\n            r=\"${\r\n              compact\r\n                ? 4\r\n                : 5\r\n            }\"\r\n            fill=\"${city.color}\"\r\n            stroke=\"#fff\"\r\n            stroke-width=\"2\"\r\n            visibility=\"hidden\">\r\n          <\/circle>\r\n        `;\r\n      }\r\n    );\r\n    svg +=\r\n      \"<\/svg>\";\r\n    container.innerHTML =\r\n      svg;\r\n    var svgEl =\r\n      container.querySelector(\r\n        \"svg\"\r\n      );\r\n    var hoverLine =\r\n      container.querySelector(\r\n        \"#dnk-hover-line\"\r\n      );\r\n    function hideHover() {\r\n      tooltip.style.display =\r\n        \"none\";\r\n      hoverLine.setAttribute(\r\n        \"visibility\",\r\n        \"hidden\"\r\n      );\r\n      visibleCities.forEach(\r\n        function (\r\n          city\r\n        ) {\r\n          var dot =\r\n            container.querySelector(\r\n              \"#dnk-hover-dot-\" +\r\n              city.key\r\n            );\r\n          if (\r\n            dot\r\n          ) {\r\n            dot.setAttribute(\r\n              \"visibility\",\r\n              \"hidden\"\r\n            );\r\n          }\r\n        }\r\n      );\r\n    }\r\n    function showTooltip(\r\n      event\r\n    ) {\r\n      var rect =\r\n        svgEl\r\n          .getBoundingClientRect();\r\n      var mouseX =\r\n        (\r\n          event.clientX -\r\n          rect.left\r\n        )\r\n        *\r\n        (\r\n          width \/\r\n          rect.width\r\n        );\r\n      if (\r\n        mouseX <\r\n        margin.left\r\n        ||\r\n        mouseX >\r\n        width -\r\n        margin.right\r\n      ) {\r\n        hideHover();\r\n        return;\r\n      }\r\n      var targetTime =\r\n        xMin +\r\n        (\r\n          (\r\n            mouseX -\r\n            margin.left\r\n          )\r\n          \/\r\n          innerWidth\r\n        )\r\n        *\r\n        (\r\n          xMax -\r\n          xMin\r\n        );\r\n      var nearest =\r\n        rows[0];\r\n      var distance =\r\n        Math.abs(\r\n          timestamp(\r\n            nearest[0]\r\n          )\r\n          -\r\n          targetTime\r\n        );\r\n      rows.forEach(\r\n        function (\r\n          row\r\n        ) {\r\n          var next =\r\n            Math.abs(\r\n              timestamp(\r\n                row[0]\r\n              )\r\n              -\r\n              targetTime\r\n            );\r\n          if (\r\n            next <\r\n            distance\r\n          ) {\r\n            nearest =\r\n              row;\r\n            distance =\r\n              next;\r\n          }\r\n        }\r\n      );\r\n      var lineX =\r\n        xScale(\r\n          timestamp(\r\n            nearest[0]\r\n          )\r\n        );\r\n      hoverLine.setAttribute(\r\n        \"x1\",\r\n        lineX\r\n      );\r\n      hoverLine.setAttribute(\r\n        \"x2\",\r\n        lineX\r\n      );\r\n      hoverLine.setAttribute(\r\n        \"visibility\",\r\n        \"visible\"\r\n      );\r\n      visibleCities.forEach(\r\n        function (\r\n          city\r\n        ) {\r\n          var dot =\r\n            container.querySelector(\r\n              \"#dnk-hover-dot-\" +\r\n              city.key\r\n            );\r\n          var value =\r\n            nearest[\r\n              city.idx\r\n            ];\r\n          if (\r\n            value === null\r\n          ) {\r\n            dot.setAttribute(\r\n              \"visibility\",\r\n              \"hidden\"\r\n            );\r\n            return;\r\n          }\r\n          dot.setAttribute(\r\n            \"cx\",\r\n            lineX\r\n          );\r\n          dot.setAttribute(\r\n            \"cy\",\r\n            yScale(\r\n              value\r\n            )\r\n          );\r\n          dot.setAttribute(\r\n            \"visibility\",\r\n            \"visible\"\r\n          );\r\n        }\r\n      );\r\n      var html = `\r\n        <div class=\"dnk-tooltip-date\">\r\n          ${esc(\r\n            shortDate(\r\n              nearest[0]\r\n            )\r\n          )}\r\n        <\/div>\r\n      `;\r\n      visibleCities.forEach(\r\n        function (\r\n          city\r\n        ) {\r\n          html += `\r\n            <div class=\"dnk-tooltip-row\">\r\n              <span>\r\n                <span\r\n                  class=\"dnk-dot\"\r\n                  style=\"\r\n                    background:${city.color};\r\n                    margin-right:5px;\r\n                  \">\r\n                <\/span>\r\n                ${esc(city.name)}\r\n              <\/span>\r\n              <strong>\r\n                ${fmt(\r\n                  nearest[\r\n                    city.idx\r\n                  ]\r\n                )}\r\n                ${esc(ds.unit)}\r\n              <\/strong>\r\n            <\/div>\r\n          `;\r\n        }\r\n      );\r\n      tooltip.innerHTML =\r\n        html;\r\n      tooltip.style.display =\r\n        \"block\";\r\n      var tooltipWidth =\r\n        tooltip.offsetWidth;\r\n      var left =\r\n        event.clientX -\r\n        rect.left +\r\n        12;\r\n      if (\r\n        left +\r\n        tooltipWidth >\r\n        rect.width\r\n      ) {\r\n        left =\r\n          event.clientX -\r\n          rect.left -\r\n          tooltipWidth -\r\n          12;\r\n      }\r\n      tooltip.style.left =\r\n        Math.max(\r\n          2,\r\n          left\r\n        )\r\n        +\r\n        \"px\";\r\n      tooltip.style.top =\r\n        Math.max(\r\n          4,\r\n          event.clientY -\r\n          rect.top -\r\n          40\r\n        )\r\n        +\r\n        \"px\";\r\n    }\r\n    svgEl.addEventListener(\r\n      \"pointermove\",\r\n      showTooltip\r\n    );\r\n    svgEl.addEventListener(\r\n      \"pointerdown\",\r\n      showTooltip\r\n    );\r\n    svgEl.addEventListener(\r\n      \"pointerleave\",\r\n      function () {\r\n        if (\r\n          !isCompact()\r\n        ) {\r\n          hideHover();\r\n        }\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     TABLE DATA\r\n     ========================================================= *\/\r\n  function getTableRows(\r\n    ds\r\n  ) {\r\n    var rows =\r\n      getRangeRows(\r\n        ds\r\n      )\r\n      .slice();\r\n    rows.sort(\r\n      function (\r\n        a,\r\n        b\r\n      ) {\r\n        var diff =\r\n          timestamp(\r\n            a[0]\r\n          )\r\n          -\r\n          timestamp(\r\n            b[0]\r\n          );\r\n        return (\r\n          state.tableOrder ===\r\n          \"asc\"\r\n            ? diff\r\n            : -diff\r\n        );\r\n      }\r\n    );\r\n    return rows;\r\n  }\r\n  \/* =========================================================\r\n     EXPORT\r\n     ========================================================= *\/\r\n  var XLSX_CDN =\r\n    \"https:\/\/cdn.jsdelivr.net\/npm\/xlsx@0.18.5\/dist\/xlsx.full.min.js\";\r\n  var xlsxPromise =\r\n    null;\r\n  function getVisibleCities() {\r\n    return CITIES.filter(\r\n      function (\r\n        city\r\n      ) {\r\n        return !state.hidden[\r\n          city.key\r\n        ];\r\n      }\r\n    );\r\n  }\r\n  function getExportBundle() {\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    if (\r\n      ds.loading ||\r\n      ds.error ||\r\n      !ds.data.length\r\n    ) {\r\n      return null;\r\n    }\r\n    var cities =\r\n      getVisibleCities();\r\n    if (\r\n      !cities.length\r\n    ) {\r\n      return null;\r\n    }\r\n    var rows =\r\n      getRangeRows(\r\n        ds\r\n      )\r\n      .slice();\r\n    if (\r\n      !rows.length\r\n    ) {\r\n      return null;\r\n    }\r\n    \/*\r\n     * \u5bfc\u51fa\u4e0d\u53d7\u5206\u9875\u5f71\u54cd\uff0c\r\n     * \u6309\u65e5\u671f\u5347\u5e8f\u4fdd\u5b58\u6240\u9009\u65f6\u95f4\u8303\u56f4\u5185\u7684\u5168\u90e8\u6570\u636e\u3002\r\n     *\/\r\n    rows.sort(\r\n      function (\r\n        a,\r\n        b\r\n      ) {\r\n        return (\r\n          timestamp(\r\n            a[0]\r\n          )\r\n          -\r\n          timestamp(\r\n            b[0]\r\n          )\r\n        );\r\n      }\r\n    );\r\n    var range =\r\n      state.ranges[\r\n        state.active\r\n      ];\r\n    var headers =\r\n      [\"\u8c03\u67e5\u65e5\u671f\"]\r\n      .concat(\r\n        cities.map(\r\n          function (\r\n            city\r\n          ) {\r\n            return city.name;\r\n          }\r\n        )\r\n      );\r\n    var values =\r\n      rows.map(\r\n        function (\r\n          row\r\n        ) {\r\n          return [\r\n            row[0]\r\n          ].concat(\r\n            cities.map(\r\n              function (\r\n                city\r\n              ) {\r\n                return row[\r\n                  city.idx\r\n                ];\r\n              }\r\n            )\r\n          );\r\n        }\r\n      );\r\n    var objects =\r\n      rows.map(\r\n        function (\r\n          row\r\n        ) {\r\n          var item = {\r\n            \"\u8c03\u67e5\u65e5\u671f\": row[0]\r\n          };\r\n          cities.forEach(\r\n            function (\r\n              city\r\n            ) {\r\n              item[\r\n                city.name\r\n              ] =\r\n                row[\r\n                  city.idx\r\n                ];\r\n            }\r\n          );\r\n          return item;\r\n        }\r\n      );\r\n    var slug =\r\n      state.active === \"fx\"\r\n        ? \"exchange-rate\"\r\n        : \"rice-price\";\r\n    var citySlug =\r\n      cities\r\n        .map(\r\n          function (\r\n            city\r\n          ) {\r\n            return city.key;\r\n          }\r\n        )\r\n        .join(\"-\");\r\n    var fileBase =\r\n      \"dailynk-market-\" +\r\n      slug +\r\n      \"_\" +\r\n      range.from +\r\n      \"_\" +\r\n      range.to +\r\n      \"_\" +\r\n      citySlug;\r\n    return {\r\n      ds: ds,\r\n      cities: cities,\r\n      rows: rows,\r\n      headers: headers,\r\n      values: values,\r\n      objects: objects,\r\n      range: range,\r\n      fileBase: fileBase\r\n    };\r\n  }\r\n  function downloadBlob(\r\n    content,\r\n    type,\r\n    filename\r\n  ) {\r\n    var blob =\r\n      content instanceof Blob\r\n        ? content\r\n        : new Blob(\r\n            [content],\r\n            {\r\n              type: type\r\n            }\r\n          );\r\n    var url =\r\n      URL.createObjectURL(\r\n        blob\r\n      );\r\n    var link =\r\n      document.createElement(\r\n        \"a\"\r\n      );\r\n    link.href =\r\n      url;\r\n    link.download =\r\n      filename;\r\n    link.style.display =\r\n      \"none\";\r\n    document.body\r\n      .appendChild(\r\n        link\r\n      );\r\n    link.click();\r\n    link.remove();\r\n    setTimeout(\r\n      function () {\r\n        URL.revokeObjectURL(\r\n          url\r\n        );\r\n      },\r\n      1000\r\n    );\r\n  }\r\n  function csvEscape(\r\n    value\r\n  ) {\r\n    if (\r\n      value === null ||\r\n      value === undefined\r\n    ) {\r\n      return \"\";\r\n    }\r\n    var text =\r\n      String(value);\r\n    \/*\r\n     * CSV \u516c\u5f0f\u6ce8\u5165\u9632\u62a4\uff1a\r\n     * \u5bf9\u53ef\u80fd\u88ab\u7535\u5b50\u8868\u683c\u89e3\u91ca\u4e3a\u516c\u5f0f\u7684\u503c\uff0c\r\n     * \u5728\u524d\u9762\u52a0 apostrophe\uff0c\u4f7f\u5176\u6309\u666e\u901a\u6587\u672c\u5904\u7406\u3002\r\n     *\/\r\n    if (\r\n      \/^[=+\\-@]\/.test(\r\n        text\r\n      )\r\n    ) {\r\n      text =\r\n        \"'\" +\r\n        text;\r\n    }\r\n    if (\r\n      \/[\",\\r\\n]\/.test(\r\n        text\r\n      )\r\n    ) {\r\n      text =\r\n        '\"' +\r\n        text.replace(\r\n          \/\"\/g,\r\n          '\"\"'\r\n        ) +\r\n        '\"';\r\n    }\r\n    return text;\r\n  }\r\n  function exportCSV(\r\n    bundle\r\n  ) {\r\n    var lines =\r\n      [\r\n        bundle.headers\r\n          .map(\r\n            csvEscape\r\n          )\r\n          .join(\",\")\r\n      ];\r\n    bundle.values\r\n      .forEach(\r\n        function (\r\n          row\r\n        ) {\r\n          lines.push(\r\n            row\r\n              .map(\r\n                csvEscape\r\n              )\r\n              .join(\",\")\r\n          );\r\n        }\r\n      );\r\n    \/* UTF-8 BOM\uff1a\u907f\u514d Excel \u4e2d\u4e2d\u6587\u4e71\u7801 *\/\r\n    downloadBlob(\r\n      \"\\uFEFF\" +\r\n      lines.join(\r\n        \"\\r\\n\"\r\n      ),\r\n      \"text\/csv;charset=utf-8\",\r\n      bundle.fileBase +\r\n      \".csv\"\r\n    );\r\n  }\r\n  function exportJSON(\r\n    bundle\r\n  ) {\r\n    var payload = {\r\n      source: \"DailyNK \u671d\u9c9c\u5e02\u573a\u52a8\u5411\",\r\n      dataset: bundle.ds.label,\r\n      unit: bundle.ds.unit,\r\n      range: {\r\n        from: bundle.range.from,\r\n        to: bundle.range.to\r\n      },\r\n      cities: bundle.cities.map(\r\n        function (\r\n          city\r\n        ) {\r\n          return city.name;\r\n        }\r\n      ),\r\n      count: bundle.objects.length,\r\n      data: bundle.objects\r\n    };\r\n    downloadBlob(\r\n      JSON.stringify(\r\n        payload,\r\n        null,\r\n        2\r\n      ),\r\n      \"application\/json;charset=utf-8\",\r\n      bundle.fileBase +\r\n      \".json\"\r\n    );\r\n  }\r\n  function loadXLSX() {\r\n    if (\r\n      window.XLSX\r\n    ) {\r\n      return Promise.resolve(\r\n        window.XLSX\r\n      );\r\n    }\r\n    if (\r\n      xlsxPromise\r\n    ) {\r\n      return xlsxPromise;\r\n    }\r\n    xlsxPromise =\r\n      new Promise(\r\n        function (\r\n          resolve,\r\n          reject\r\n        ) {\r\n          var script =\r\n            document.createElement(\r\n              \"script\"\r\n            );\r\n          script.src =\r\n            XLSX_CDN;\r\n          script.async =\r\n            true;\r\n          script.setAttribute(\r\n            \"data-dnk-xlsx\",\r\n            \"true\"\r\n          );\r\n          script.onload =\r\n            function () {\r\n              if (\r\n                window.XLSX\r\n              ) {\r\n                resolve(\r\n                  window.XLSX\r\n                );\r\n              } else {\r\n                reject(\r\n                  new Error(\r\n                    \"XLSX library not available\"\r\n                  )\r\n                );\r\n              }\r\n            };\r\n          script.onerror =\r\n            function () {\r\n              reject(\r\n                new Error(\r\n                  \"XLSX library load failed\"\r\n                )\r\n              );\r\n            };\r\n          document.head\r\n            .appendChild(\r\n              script\r\n            );\r\n        }\r\n      )\r\n      .catch(\r\n        function (\r\n          error\r\n        ) {\r\n          xlsxPromise =\r\n            null;\r\n          throw error;\r\n        }\r\n      );\r\n    return xlsxPromise;\r\n  }\r\n  function exportExcelFallback(\r\n    bundle\r\n  ) {\r\n    \/*\r\n     * WordPress\/\u4f18\u5316\u63d2\u4ef6\u517c\u5bb9\uff1a\r\n     * \u5982\u679c\u5728 JS \u5b57\u7b26\u4e32\u4e2d\u76f4\u63a5\u653e\u7f6e\u6587\u6863\u7ed3\u6784\u6807\u7b7e\uff0c\u90e8\u5206\u4f18\u5316\u5668\u53ef\u80fd\u4f1a\r\n     * \u5c06\u4e0b\u8f7d\u5b57\u7b26\u4e32\u8bef\u5224\u4e3a\u771f\u5b9e\u9875\u9762\u7ed3\u6784\u5e76\u6ce8\u5165\u4ee3\u7801\u3002\r\n     *\r\n     * \u56e0\u6b64\u5728\u8fd0\u884c\u65f6\u62fc\u63a5 '<' \u5b57\u7b26\uff0c\u907f\u514d\u670d\u52a1\u5668\u5c06\u8be5\u5b57\u7b26\u4e32\u8bc6\u522b\u4e3a HTML\u3002\r\n     * \u4ec5\u5728\u6d4f\u89c8\u5668\u751f\u6210\u4e0b\u8f7d\u6587\u4ef6\u65f6\r\n     * \u624d\u6784\u9020\u5b8c\u6574\u7684 HTML \u5b57\u7b26\u4e32\u3002\r\n     *\/\r\n    var LT =\r\n      String.fromCharCode(60);\r\n    var html =\r\n      LT +\r\n      'html xmlns:o=\"urn:schemas-microsoft-com:office:office\" ' +\r\n      'xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ' +\r\n      'xmlns=\"http:\/\/www.w3.org\/TR\/REC-html40\">' +\r\n      LT + 'head>' +\r\n      LT + 'meta charset=\"UTF-8\">' +\r\n      LT + '\/head>' +\r\n      LT + 'body>' +\r\n      LT + 'table>';\r\n    html +=\r\n      LT + 'tr>' +\r\n      bundle.headers\r\n        .map(\r\n          function (\r\n            header\r\n          ) {\r\n            return (\r\n              LT + 'th>' +\r\n              esc(header) +\r\n              LT + '\/th>'\r\n            );\r\n          }\r\n        )\r\n        .join(\"\") +\r\n      LT + '\/tr>';\r\n    bundle.values\r\n      .forEach(\r\n        function (\r\n          row\r\n        ) {\r\n          html +=\r\n            LT + 'tr>' +\r\n            row\r\n              .map(\r\n                function (\r\n                  value\r\n                ) {\r\n                  return (\r\n                    LT + 'td>' +\r\n                    esc(\r\n                      value == null\r\n                        ? \"\"\r\n                        : value\r\n                    ) +\r\n                    LT + '\/td>'\r\n                  );\r\n                }\r\n              )\r\n              .join(\"\") +\r\n            LT + '\/tr>';\r\n        }\r\n      );\r\n    html +=\r\n      LT + '\/table>' +\r\n      LT + '\/body>' +\r\n      LT + '\/html>';\r\n    downloadBlob(\r\n      \"\\uFEFF\" +\r\n      html,\r\n      \"application\/vnd.ms-excel;charset=utf-8\",\r\n      bundle.fileBase +\r\n      \".xls\"\r\n    );\r\n  }\r\n  function exportXLSX(\r\n    bundle\r\n  ) {\r\n    loadXLSX()\r\n      .then(\r\n        function (\r\n          XLSX\r\n        ) {\r\n          var aoa = [\r\n            [\r\n              \"\u6570\u636e\",\r\n              bundle.ds.label\r\n            ],\r\n            [\r\n              \"\u5355\u4f4d\",\r\n              bundle.ds.unit\r\n            ],\r\n            [\r\n              \"\u65f6\u95f4\u8303\u56f4\",\r\n              bundle.range.from +\r\n              \" ~ \" +\r\n              bundle.range.to\r\n            ],\r\n            [\r\n              \"\u5730\u533a\",\r\n              bundle.cities\r\n                .map(\r\n                  function (\r\n                    city\r\n                  ) {\r\n                    return city.name;\r\n                  }\r\n                )\r\n                .join(\", \")\r\n            ],\r\n            [\r\n              \"\u8c03\u67e5\u6b21\u6570\",\r\n              bundle.rows.length\r\n            ],\r\n            [],\r\n            bundle.headers\r\n          ];\r\n          bundle.values\r\n            .forEach(\r\n              function (\r\n                row\r\n              ) {\r\n                aoa.push(\r\n                  row\r\n                );\r\n              }\r\n            );\r\n          var sheet =\r\n            XLSX.utils.aoa_to_sheet(\r\n              aoa\r\n            );\r\n          sheet[\"!cols\"] =\r\n            bundle.headers.map(\r\n              function (\r\n                header,\r\n                index\r\n              ) {\r\n                return {\r\n                  wch:\r\n                    index === 0\r\n                      ? 14\r\n                      : Math.max(\r\n                          11,\r\n                          String(header).length +\r\n                          5\r\n                        )\r\n                };\r\n              }\r\n            );\r\n          var book =\r\n            XLSX.utils.book_new();\r\n          XLSX.utils.book_append_sheet(\r\n            book,\r\n            sheet,\r\n            bundle.ds.label\r\n          );\r\n          XLSX.writeFile(\r\n            book,\r\n            bundle.fileBase +\r\n            \".xlsx\"\r\n          );\r\n        }\r\n      )\r\n      .catch(\r\n        function (\r\n          error\r\n        ) {\r\n          console.warn(\r\n            \"[DailyNK] XLSX \u5e93\u52a0\u8f7d\u5931\u8d25\uff0c\u5c06\u6539\u7528 .xls\u3002\",\r\n            error\r\n          );\r\n          exportExcelFallback(\r\n            bundle\r\n          );\r\n        }\r\n      );\r\n  }\r\n  function exportCurrentData(\r\n    format\r\n  ) {\r\n    var bundle =\r\n      getExportBundle();\r\n    if (\r\n      !bundle\r\n    ) {\r\n      return;\r\n    }\r\n    if (\r\n      format === \"csv\"\r\n    ) {\r\n      exportCSV(\r\n        bundle\r\n      );\r\n    } else if (\r\n      format === \"xlsx\"\r\n    ) {\r\n      exportXLSX(\r\n        bundle\r\n      );\r\n    } else if (\r\n      format === \"json\"\r\n    ) {\r\n      exportJSON(\r\n        bundle\r\n      );\r\n    }\r\n  }\r\n  function renderExportSummary() {\r\n    var main =\r\n      document.getElementById(\r\n        \"dnk-export-scope-main\"\r\n      );\r\n    var sub =\r\n      document.getElementById(\r\n        \"dnk-export-scope-sub\"\r\n      );\r\n    var citiesEl =\r\n      document.getElementById(\r\n        \"dnk-export-scope-cities\"\r\n      );\r\n    if (\r\n      !main ||\r\n      !sub ||\r\n      !citiesEl\r\n    ) {\r\n      return;\r\n    }\r\n    var bundle =\r\n      getExportBundle();\r\n    if (\r\n      !bundle\r\n    ) {\r\n      main.textContent =\r\n        \"\u6ca1\u6709\u53ef\u4e0b\u8f7d\u7684\u6570\u636e\u3002\";\r\n      sub.textContent =\r\n        \"\";\r\n      citiesEl.textContent =\r\n        \"\";\r\n      return;\r\n    }\r\n    main.textContent =\r\n      bundle.ds.label +\r\n      \" \u00b7 \" +\r\n      bundle.rows.length +\r\n      \"\u6b21\u8c03\u67e5\";\r\n    sub.textContent =\r\n      shortDate(\r\n        bundle.range.from\r\n      ) +\r\n      \" \u2013 \" +\r\n      shortDate(\r\n        bundle.range.to\r\n      );\r\n    citiesEl.textContent =\r\n      bundle.cities\r\n        .map(\r\n          function (\r\n            city\r\n          ) {\r\n            return city.name;\r\n          }\r\n        )\r\n        .join(\" \u00b7 \");\r\n  }\r\n  var exportRoot =\r\n    document.getElementById(\r\n      \"dnk-export\"\r\n    );\r\n  var exportButton =\r\n    document.getElementById(\r\n      \"dnk-export-btn\"\r\n    );\r\n  var exportMenu =\r\n    document.getElementById(\r\n      \"dnk-export-menu\"\r\n    );\r\n  function closeExportMenu() {\r\n    if (\r\n      !exportMenu\r\n    ) {\r\n      return;\r\n    }\r\n    exportMenu.hidden =\r\n      true;\r\n    exportButton.setAttribute(\r\n      \"aria-expanded\",\r\n      \"false\"\r\n    );\r\n  }\r\n  function updateExportControl(\r\n    ds\r\n  ) {\r\n    if (\r\n      !exportButton\r\n    ) {\r\n      return;\r\n    }\r\n    var disabled =\r\n      ds.loading ||\r\n      !!ds.error ||\r\n      !ds.data.length ||\r\n      !getVisibleCities().length ||\r\n      !getRangeRows(ds).length;\r\n    exportButton.disabled =\r\n      disabled;\r\n    if (\r\n      disabled\r\n    ) {\r\n      closeExportMenu();\r\n    } else if (\r\n      exportMenu &&\r\n      !exportMenu.hidden\r\n    ) {\r\n      renderExportSummary();\r\n    }\r\n  }\r\n  if (\r\n    exportButton &&\r\n    exportMenu\r\n  ) {\r\n    exportButton.addEventListener(\r\n      \"click\",\r\n      function (\r\n        event\r\n      ) {\r\n        event.stopPropagation();\r\n        if (\r\n          exportButton.disabled\r\n        ) {\r\n          return;\r\n        }\r\n        \/* \u907f\u514d\u4e0e\u65f6\u95f4\u8303\u56f4\u9009\u62e9\u5f39\u5c42\u540c\u65f6\u6253\u5f00\u3002 *\/\r\n        closeRangePicker();\r\n        exportMenu.hidden =\r\n          !exportMenu.hidden;\r\n        exportButton.setAttribute(\r\n          \"aria-expanded\",\r\n          exportMenu.hidden\r\n            ? \"false\"\r\n            : \"true\"\r\n        );\r\n        if (\r\n          !exportMenu.hidden\r\n        ) {\r\n          renderExportSummary();\r\n          var firstItem =\r\n            exportMenu.querySelector(\r\n              \"[data-export]\"\r\n            );\r\n          if (\r\n            firstItem\r\n          ) {\r\n            firstItem.focus();\r\n          }\r\n        }\r\n      }\r\n    );\r\n    exportMenu.addEventListener(\r\n      \"click\",\r\n      function (\r\n        event\r\n      ) {\r\n        var item =\r\n          event.target.closest(\r\n            \"[data-export]\"\r\n          );\r\n        if (\r\n          !item\r\n        ) {\r\n          return;\r\n        }\r\n        var format =\r\n          item.getAttribute(\r\n            \"data-export\"\r\n          );\r\n        closeExportMenu();\r\n        exportCurrentData(\r\n          format\r\n        );\r\n      }\r\n    );\r\n    document.addEventListener(\r\n      \"click\",\r\n      function (\r\n        event\r\n      ) {\r\n        if (\r\n          exportRoot &&\r\n          !exportRoot.contains(\r\n            event.target\r\n          )\r\n        ) {\r\n          closeExportMenu();\r\n        }\r\n      }\r\n    );\r\n    document.addEventListener(\r\n      \"keydown\",\r\n      function (\r\n        event\r\n      ) {\r\n        if (\r\n          event.key === \"Escape\" &&\r\n          !exportMenu.hidden\r\n        ) {\r\n          closeExportMenu();\r\n          exportButton.focus();\r\n        }\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     SHARE BUTTON\r\n     ========================================================= *\/\r\n  var shareBtn =\r\n    document.getElementById(\r\n      \"dnk-share-btn\"\r\n    );\r\n  if (shareBtn) {\r\n    shareBtn.addEventListener(\r\n      \"click\",\r\n      function (event) {\r\n        event.stopPropagation();\r\n        if (shareBtn.disabled) {\r\n          return;\r\n        }\r\n        copyShareLink();\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     COMPACT TABLE\r\n     ========================================================= *\/\r\n  function renderCompactTable(\r\n    rows,\r\n    visibleCities\r\n  ) {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-compact-table\"\r\n      );\r\n    if (\r\n      !visibleCities.length\r\n    ) {\r\n      el.innerHTML = `\r\n        <div class=\"dnk-no-data\">\r\n          \u8bf7\u9009\u62e9\u8981\u663e\u793a\u7684\u5730\u533a\u3002\r\n        <\/div>\r\n      `;\r\n      return;\r\n    }\r\n    if (\r\n      !rows.length\r\n    ) {\r\n      el.innerHTML = `\r\n        <div class=\"dnk-no-data\">\r\n          \u8be5\u65f6\u95f4\u8303\u56f4\u5185\u6ca1\u6709\u8c03\u67e5\u8bb0\u5f55\u3002\r\n        <\/div>\r\n      `;\r\n      return;\r\n    }\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    var latestDate =\r\n      ds.data[\r\n        ds.data.length - 1\r\n      ][0];\r\n    var dateWidth =\r\n      isVerySmall()\r\n        ? 78\r\n        : 84;\r\n    var columns =\r\n      dateWidth +\r\n      \"px repeat(\" +\r\n      visibleCities.length +\r\n      \",minmax(0,1fr))\";\r\n    var html = `\r\n      <div\r\n        class=\"\r\n          dnk-compact-grid\r\n          dnk-compact-head\r\n        \"\r\n        style=\"\r\n          grid-template-columns:${columns};\r\n        \">\r\n        <div>\r\n          \u8c03\u67e5\u65e5\u671f\r\n        <\/div>\r\n    `;\r\n    visibleCities.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        html += `\r\n          <div class=\"dnk-compact-head-city\">\r\n            <span\r\n              class=\"dnk-dot\"\r\n              style=\"\r\n                background:${city.color};\r\n              \">\r\n            <\/span>\r\n            ${esc(city.name)}\r\n          <\/div>\r\n        `;\r\n      }\r\n    );\r\n    html +=\r\n      \"<\/div>\";\r\n    rows.forEach(\r\n      function (\r\n        row\r\n      ) {\r\n        var latestClass =\r\n          row[0] ===\r\n          latestDate\r\n            ? \" latest\"\r\n            : \"\";\r\n        html += `\r\n          <div\r\n            class=\"\r\n              dnk-compact-grid\r\n              dnk-compact-data-row\r\n              ${latestClass}\r\n            \"\r\n            style=\"\r\n              grid-template-columns:${columns};\r\n            \">\r\n            <div class=\"dnk-compact-day\">\r\n              ${esc(\r\n                shortDate(\r\n                  row[0]\r\n                )\r\n              )}\r\n            <\/div>\r\n        `;\r\n        visibleCities.forEach(\r\n          function (\r\n            city\r\n          ) {\r\n            html += `\r\n              <div class=\"dnk-compact-number\">\r\n                ${fmt(\r\n                  row[\r\n                    city.idx\r\n                  ]\r\n                )}\r\n              <\/div>\r\n            `;\r\n          }\r\n        );\r\n        html +=\r\n          \"<\/div>\";\r\n      }\r\n    );\r\n    el.innerHTML =\r\n      html;\r\n  }\r\n  \/* =========================================================\r\n     PAGINATION\r\n     ========================================================= *\/\r\n  function buildPageItems(\r\n    current,\r\n    total\r\n  ) {\r\n    if (\r\n      total <= 7\r\n    ) {\r\n      var simple =\r\n        [];\r\n      for (\r\n        var i = 1;\r\n        i <= total;\r\n        i++\r\n      ) {\r\n        simple.push(\r\n          i\r\n        );\r\n      }\r\n      return simple;\r\n    }\r\n    var items =\r\n      [1];\r\n    var start =\r\n      Math.max(\r\n        2,\r\n        current - 1\r\n      );\r\n    var end =\r\n      Math.min(\r\n        total - 1,\r\n        current + 1\r\n      );\r\n    if (\r\n      start > 2\r\n    ) {\r\n      items.push(\r\n        \"...\"\r\n      );\r\n    }\r\n    for (\r\n      var n = start;\r\n      n <= end;\r\n      n++\r\n    ) {\r\n      items.push(\r\n        n\r\n      );\r\n    }\r\n    if (\r\n      end <\r\n      total - 1\r\n    ) {\r\n      items.push(\r\n        \"...\"\r\n      );\r\n    }\r\n    items.push(\r\n      total\r\n    );\r\n    return items;\r\n  }\r\n  function renderPagination(\r\n    totalRows\r\n  ) {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-pagination\"\r\n      );\r\n    if (!el) {\r\n      return;\r\n    }\r\n    el.innerHTML = \"\";\r\n    if (\r\n      !totalRows ||\r\n      totalRows <= TABLE_AUTO_ALL_LIMIT\r\n    ) {\r\n      return;\r\n    }\r\n    var left =\r\n      document.createElement(\r\n        \"div\"\r\n      );\r\n    left.className =\r\n      \"dnk-pagination-left\";\r\n    var info =\r\n      document.createElement(\r\n        \"div\"\r\n      );\r\n    info.className =\r\n      \"dnk-page-info\";\r\n    var pageSizeControl =\r\n      document.createElement(\r\n        \"select\"\r\n      );\r\n    pageSizeControl.id =\r\n      \"dnk-page-size\";\r\n    pageSizeControl.setAttribute(\r\n      \"aria-label\",\r\n      \"\u6bcf\u9875\u663e\u793a\u7684\u8c03\u67e5\u6570\u91cf\"\r\n    );\r\n    [\r\n      [\"20\", \"\u6bcf\u987520\u6761\"],\r\n      [\"50\", \"\u6bcf\u987550\u6761\"],\r\n      [\"0\", \"\u5168\u90e8\"]\r\n    ].forEach(\r\n      function (item) {\r\n        var option =\r\n          document.createElement(\r\n            \"option\"\r\n          );\r\n        option.value =\r\n          item[0];\r\n        option.textContent =\r\n          item[1];\r\n        pageSizeControl.appendChild(\r\n          option\r\n        );\r\n      }\r\n    );\r\n    pageSizeControl.value =\r\n      String(\r\n        state.pageSize\r\n      );\r\n    left.appendChild(\r\n      info\r\n    );\r\n    left.appendChild(\r\n      pageSizeControl\r\n    );\r\n    el.appendChild(\r\n      left\r\n    );\r\n    if (\r\n      state.pageSize ===\r\n      0\r\n    ) {\r\n      info.textContent =\r\n        \"\u5171 \" +\r\n        totalRows +\r\n        \"\u6b21\u8c03\u67e5\";\r\n      return;\r\n    }\r\n    var size =\r\n      Number(\r\n        state.pageSize\r\n      );\r\n    var totalPages =\r\n      Math.max(\r\n        1,\r\n        Math.ceil(\r\n          totalRows \/\r\n          size\r\n        )\r\n      );\r\n    state.page =\r\n      Math.min(\r\n        state.page,\r\n        totalPages\r\n      );\r\n    var start =\r\n      (\r\n        state.page -\r\n        1\r\n      )\r\n      *\r\n      size\r\n      +\r\n      1;\r\n    var end =\r\n      Math.min(\r\n        state.page *\r\n        size,\r\n        totalRows\r\n      );\r\n    info.textContent =\r\n      start +\r\n      \"\u2013\" +\r\n      end +\r\n      \" \/ \" +\r\n      totalRows;\r\n    var buttons =\r\n      document.createElement(\r\n        \"div\"\r\n      );\r\n    buttons.className =\r\n      \"dnk-page-buttons\";\r\n    var prev =\r\n      document.createElement(\r\n        \"button\"\r\n      );\r\n    prev.type =\r\n      \"button\";\r\n    prev.className =\r\n      \"dnk-page-btn\";\r\n    prev.setAttribute(\r\n      \"aria-label\",\r\n      \"\u4e0a\u4e00\u9875\"\r\n    );\r\n    prev.textContent =\r\n      \"\u2039\";\r\n    prev.disabled =\r\n      state.page <= 1;\r\n    prev.onclick =\r\n      function () {\r\n        if (\r\n          state.page > 1\r\n        ) {\r\n          state.page--;\r\n          renderTable(\r\n            DATASETS[\r\n              state.active\r\n            ]\r\n          );\r\n        }\r\n      };\r\n    buttons.appendChild(\r\n      prev\r\n    );\r\n    var items =\r\n      buildPageItems(\r\n        state.page,\r\n        totalPages\r\n      );\r\n    items.forEach(\r\n      function (item) {\r\n        if (\r\n          item ===\r\n          \"...\"\r\n        ) {\r\n          var ellipsis =\r\n            document.createElement(\r\n              \"span\"\r\n            );\r\n          ellipsis.className =\r\n            \"dnk-page-ellipsis\";\r\n          ellipsis.textContent =\r\n            \"\u2026\";\r\n          buttons.appendChild(\r\n            ellipsis\r\n          );\r\n          return;\r\n        }\r\n        var button =\r\n          document.createElement(\r\n            \"button\"\r\n          );\r\n        button.type =\r\n          \"button\";\r\n        button.className =\r\n          \"dnk-page-btn\" +\r\n          (\r\n            item === state.page\r\n              ? \" active\"\r\n              : \"\"\r\n          );\r\n        button.textContent =\r\n          String(item);\r\n        button.setAttribute(\r\n          \"aria-label\",\r\n          \"\u7b2c\" + item + \"\u9875\"\r\n        );\r\n        if (\r\n          item === state.page\r\n        ) {\r\n          button.setAttribute(\r\n            \"aria-current\",\r\n            \"page\"\r\n          );\r\n        }\r\n        button.onclick =\r\n          function () {\r\n            state.page =\r\n              Number(item);\r\n            renderTable(\r\n              DATASETS[\r\n                state.active\r\n              ]\r\n            );\r\n          };\r\n        buttons.appendChild(\r\n          button\r\n        );\r\n      }\r\n    );\r\n    var next =\r\n      document.createElement(\r\n        \"button\"\r\n      );\r\n    next.type =\r\n      \"button\";\r\n    next.className =\r\n      \"dnk-page-btn\";\r\n    next.setAttribute(\r\n      \"aria-label\",\r\n      \"\u4e0b\u4e00\u9875\"\r\n    );\r\n    next.textContent =\r\n      \"\u203a\";\r\n    next.disabled =\r\n      state.page >=\r\n      totalPages;\r\n    next.onclick =\r\n      function () {\r\n        if (\r\n          state.page <\r\n          totalPages\r\n        ) {\r\n          state.page++;\r\n          renderTable(\r\n            DATASETS[\r\n              state.active\r\n            ]\r\n          );\r\n        }\r\n      };\r\n    buttons.appendChild(\r\n      next\r\n    );\r\n    el.appendChild(\r\n      buttons\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     TABLE\r\n     ========================================================= *\/\r\n  function renderTable(\r\n    ds\r\n  ) {\r\n    var title =\r\n      document.getElementById(\r\n        \"dnk-table-title\"\r\n      );\r\n    var meta =\r\n      document.getElementById(\r\n        \"dnk-table-meta\"\r\n      );\r\n    var thead =\r\n      document.getElementById(\r\n        \"dnk-thead\"\r\n      );\r\n    var tbody =\r\n      document.getElementById(\r\n        \"dnk-tbody\"\r\n      );\r\n    var compactTable =\r\n      document.getElementById(\r\n        \"dnk-compact-table\"\r\n      );\r\n    title.textContent =\r\n      ds.tableTitle;\r\n    if (\r\n      ds.loading\r\n    ) {\r\n      meta.textContent =\r\n        \"\";\r\n      thead.innerHTML = `\r\n        <tr>\r\n          <th>\u8c03\u67e5\u65e5\u671f<\/th>\r\n          <th>\u5e73\u58e4<\/th>\r\n          <th>\u65b0\u4e49\u5dde<\/th>\r\n          <th>\u60e0\u5c71<\/th>\r\n        <\/tr>\r\n      `;\r\n      tbody.innerHTML = `\r\n        <tr>\r\n          <td colspan=\"4\">\r\n            <div class=\"dnk-table-skeleton\">\r\n              <div\r\n                class=\"\r\n                  dnk-skeleton\r\n                  dnk-table-skeleton-row\r\n                \">\r\n              <\/div>\r\n              <div\r\n                class=\"\r\n                  dnk-skeleton\r\n                  dnk-table-skeleton-row\r\n                \">\r\n              <\/div>\r\n              <div\r\n                class=\"\r\n                  dnk-skeleton\r\n                  dnk-table-skeleton-row\r\n                \">\r\n              <\/div>\r\n              <div\r\n                class=\"\r\n                  dnk-skeleton\r\n                  dnk-table-skeleton-row\r\n                \">\r\n              <\/div>\r\n            <\/div>\r\n          <\/td>\r\n        <\/tr>\r\n      `;\r\n      compactTable.innerHTML = `\r\n        <div class=\"dnk-table-skeleton\">\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-table-skeleton-row\r\n            \">\r\n          <\/div>\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-table-skeleton-row\r\n            \">\r\n          <\/div>\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-table-skeleton-row\r\n            \">\r\n          <\/div>\r\n          <div\r\n            class=\"\r\n              dnk-skeleton\r\n              dnk-table-skeleton-row\r\n            \">\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n      renderPagination(\r\n        0\r\n      );\r\n      return;\r\n    }\r\n    if (\r\n      ds.error ||\r\n      !ds.data.length\r\n    ) {\r\n      meta.textContent =\r\n        \"\";\r\n      thead.innerHTML =\r\n        \"<tr><th>\u8c03\u67e5\u65e5\u671f<\/th><\/tr>\";\r\n      tbody.innerHTML = `\r\n        <tr>\r\n          <td class=\"dnk-no-data\">\r\n            \u6570\u636e\u52a0\u8f7d\u5931\u8d25\u3002\r\n          <\/td>\r\n        <\/tr>\r\n      `;\r\n      compactTable.innerHTML = `\r\n        <div class=\"dnk-no-data\">\r\n          \u6570\u636e\u52a0\u8f7d\u5931\u8d25\u3002\r\n        <\/div>\r\n      `;\r\n      renderPagination(\r\n        0\r\n      );\r\n      return;\r\n    }\r\n    var periodRows =\r\n      getRangeRows(\r\n        ds\r\n      );\r\n    meta.textContent =\r\n      periodRows.length +\r\n      \"\u6b21\u8c03\u67e5\";\r\n    var rows =\r\n      getTableRows(\r\n        ds\r\n      );\r\n    var visibleCities =\r\n      CITIES.filter(\r\n        function (\r\n          city\r\n        ) {\r\n          return !state.hidden[\r\n            city.key\r\n          ];\r\n        }\r\n      );\r\n    var arrow =\r\n      state.tableOrder ===\r\n      \"desc\"\r\n        ? \"\u2193\"\r\n        : \"\u2191\";\r\n    var sortLabel =\r\n      state.tableOrder ===\r\n      \"desc\"\r\n        ? \"\u6309\u8c03\u67e5\u65e5\u671f\u5347\u5e8f\u6392\u5217\"\r\n        : \"\u6309\u8c03\u67e5\u65e5\u671f\u964d\u5e8f\u6392\u5217\";\r\n    var header = `\r\n      <tr>\r\n        <th>\r\n          <button\r\n            type=\"button\"\r\n            class=\"dnk-sort\"\r\n            id=\"dnk-sort-date\"\r\n            aria-label=\"${sortLabel}\">\r\n            \u8c03\u67e5\u65e5\u671f ${arrow}\r\n          <\/button>\r\n        <\/th>\r\n    `;\r\n    visibleCities.forEach(\r\n      function (\r\n        city\r\n      ) {\r\n        header += `\r\n          <th>\r\n            <span\r\n              style=\"\r\n                display:inline-flex;\r\n                align-items:center;\r\n                gap:6px;\r\n              \">\r\n              <span\r\n                class=\"dnk-dot\"\r\n                style=\"\r\n                  background:${city.color};\r\n                \">\r\n              <\/span>\r\n              ${esc(city.name)}\r\n            <\/span>\r\n          <\/th>\r\n        `;\r\n      }\r\n    );\r\n    header +=\r\n      \"<\/tr>\";\r\n    thead.innerHTML =\r\n      header;\r\n    var sortButton =\r\n      document.getElementById(\r\n        \"dnk-sort-date\"\r\n      );\r\n    if (\r\n      sortButton\r\n    ) {\r\n      sortButton.onclick =\r\n        function () {\r\n          state.tableOrder =\r\n            state.tableOrder ===\r\n            \"desc\"\r\n              ? \"asc\"\r\n              : \"desc\";\r\n          state.page =\r\n            1;\r\n          renderTable(\r\n            ds\r\n          );\r\n        };\r\n    }\r\n    var pageRows;\r\n    if (\r\n      rows.length <= TABLE_AUTO_ALL_LIMIT ||\r\n      state.pageSize ===\r\n      0\r\n    ) {\r\n      pageRows =\r\n        rows;\r\n      state.page =\r\n        1;\r\n    } else {\r\n      var size =\r\n        Number(\r\n          state.pageSize\r\n        );\r\n      var totalPages =\r\n        Math.max(\r\n          1,\r\n          Math.ceil(\r\n            rows.length \/\r\n            size\r\n          )\r\n        );\r\n      state.page =\r\n        Math.min(\r\n          state.page,\r\n          totalPages\r\n        );\r\n      var offset =\r\n        (\r\n          state.page -\r\n          1\r\n        )\r\n        *\r\n        size;\r\n      pageRows =\r\n        rows.slice(\r\n          offset,\r\n          offset +\r\n          size\r\n        );\r\n    }\r\n    if (\r\n      !visibleCities.length\r\n    ) {\r\n      tbody.innerHTML = `\r\n        <tr>\r\n          <td class=\"dnk-no-data\">\r\n            \u8bf7\u9009\u62e9\u8981\u663e\u793a\u7684\u5730\u533a\u3002\r\n          <\/td>\r\n        <\/tr>\r\n      `;\r\n    } else if (\r\n      !pageRows.length\r\n    ) {\r\n      tbody.innerHTML = `\r\n        <tr>\r\n          <td\r\n            colspan=\"${\r\n              visibleCities.length +\r\n              1\r\n            }\"\r\n            class=\"dnk-no-data\">\r\n            \u8be5\u65f6\u95f4\u8303\u56f4\u5185\u6ca1\u6709\u8c03\u67e5\u8bb0\u5f55\u3002\r\n          <\/td>\r\n        <\/tr>\r\n      `;\r\n    } else {\r\n      var html =\r\n        \"\";\r\n      pageRows.forEach(\r\n        function (\r\n          row\r\n        ) {\r\n          html += `\r\n            <tr>\r\n              <td>\r\n                ${esc(\r\n                  shortDate(\r\n                    row[0]\r\n                  )\r\n                )}\r\n              <\/td>\r\n          `;\r\n          visibleCities.forEach(\r\n            function (\r\n              city\r\n            ) {\r\n              html += `\r\n                <td>\r\n                  ${fmt(\r\n                    row[\r\n                      city.idx\r\n                    ]\r\n                  )}\r\n                <\/td>\r\n              `;\r\n            }\r\n          );\r\n          html +=\r\n            \"<\/tr>\";\r\n        }\r\n      );\r\n      tbody.innerHTML =\r\n        html;\r\n    }\r\n    renderCompactTable(\r\n      pageRows,\r\n      visibleCities\r\n    );\r\n    renderPagination(\r\n      rows.length\r\n    );\r\n    var pageSize =\r\n      document.getElementById(\r\n        \"dnk-page-size\"\r\n      );\r\n    if (\r\n      pageSize\r\n    ) {\r\n      pageSize.value =\r\n        String(\r\n          state.pageSize\r\n        );\r\n      pageSize.onchange =\r\n        function () {\r\n          state.pageSize =\r\n            this.value ===\r\n            \"0\"\r\n              ? 0\r\n              : Number(\r\n                  this.value\r\n                );\r\n          state.page =\r\n            1;\r\n          renderTable(\r\n            DATASETS[\r\n              state.active\r\n            ]\r\n          );\r\n        };\r\n    }\r\n  }\r\n  \/* =========================================================\r\n     FOOTER\r\n     ========================================================= *\/\r\n  function renderFooter(\r\n    ds\r\n  ) {\r\n    var el =\r\n      document.getElementById(\r\n        \"dnk-foot\"\r\n      );\r\n    if (\r\n      ds.loading ||\r\n      ds.error ||\r\n      !ds.data.length\r\n    ) {\r\n      el.textContent =\r\n        \"\";\r\n      return;\r\n    }\r\n    el.innerHTML = `\r\n      <div class=\"dnk-foot-note\">\r\n        <div class=\"dnk-foot-head\">\r\n          <span class=\"dnk-foot-label\">\u6765\u6e90<\/span>\r\n          <strong class=\"dnk-foot-source\">DailyNK<\/strong>\r\n        <\/div>\r\n\r\n        <p class=\"dnk-foot-copy\">\r\n          \u672c\u671d\u9c9c\u5e02\u573a\u52a8\u5411\u6570\u636e\u53d7\u8457\u4f5c\u6743\u6cd5\u4fdd\u62a4\u3002\r\n          \u5f15\u7528\u65f6\u5fc5\u987b\u6ce8\u660e\u6765\u6e90\u4e3a <strong>\u201cDailyNK\u201d<\/strong>\u3002\r\n          \u672a\u7ecf\u4e8b\u5148\u534f\u5546\uff0c\u7981\u6b62\u5546\u4e1a\u4f7f\u7528\u4ee5\u53ca\u64c5\u81ea\u8f6c\u8f7d\u3001\u590d\u5236\u3001\u4f20\u64ad\uff0c\r\n          \u7981\u6b62\u901a\u8fc7\u722c\u866b\u81ea\u52a8\u91c7\u96c6\uff0c\u5e76\u7981\u6b62\u7528\u4e8e\u6570\u636e\u5e93\u5efa\u8bbe\u53ca\u5176\u4ed6\u5f62\u5f0f\u7684\u6570\u636e\u5229\u7528\u3002\r\n        <\/p>\r\n      <\/div>\r\n    `;\r\n  }\r\n  \/* =========================================================\r\n     MAIN\r\n     ========================================================= *\/\r\n  function render() {\r\n    var ds =\r\n      DATASETS[\r\n        state.active\r\n      ];\r\n    var panel =\r\n      document.getElementById(\r\n        \"dnk-panel\"\r\n      );\r\n    if (\r\n      panel\r\n    ) {\r\n      panel.setAttribute(\r\n        \"aria-labelledby\",\r\n        \"dnk-tab-\" +\r\n        state.active\r\n      );\r\n    }\r\n    renderTabs();\r\n    renderStatus(\r\n      ds\r\n    );\r\n    renderCards(\r\n      ds\r\n    );\r\n    renderCityFilters();\r\n    renderPeriodControls(\r\n      ds\r\n    );\r\n    renderChart(\r\n      ds\r\n    );\r\n    renderTable(\r\n      ds\r\n    );\r\n    updateExportControl(\r\n      ds\r\n    );\r\n    updateShareControl(\r\n      ds\r\n    );\r\n    renderFooter(\r\n      ds\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     RESIZE\r\n     ========================================================= *\/\r\n  var resizeTimer =\r\n    null;\r\n  var lastWidth =\r\n    root.clientWidth;\r\n  if (\r\n    \"ResizeObserver\" in\r\n    window\r\n  ) {\r\n    var resizeObserver =\r\n      new ResizeObserver(\r\n        function () {\r\n          var width =\r\n            root.clientWidth;\r\n          if (\r\n            Math.abs(\r\n              width -\r\n              lastWidth\r\n            ) < 1\r\n          ) {\r\n            return;\r\n          }\r\n          lastWidth =\r\n            width;\r\n          clearTimeout(\r\n            resizeTimer\r\n          );\r\n          resizeTimer =\r\n            setTimeout(\r\n              function () {\r\n                renderChart(\r\n                  DATASETS[\r\n                    state.active\r\n                  ]\r\n                );\r\n                renderTable(\r\n                  DATASETS[\r\n                    state.active\r\n                  ]\r\n                );\r\n              },\r\n              120\r\n            );\r\n        }\r\n      );\r\n    resizeObserver.observe(\r\n      root\r\n    );\r\n  } else {\r\n    window.addEventListener(\r\n      \"resize\",\r\n      function () {\r\n        clearTimeout(\r\n          resizeTimer\r\n        );\r\n        resizeTimer =\r\n          setTimeout(\r\n            function () {\r\n              renderChart(\r\n                DATASETS[\r\n                  state.active\r\n                ]\r\n              );\r\n              renderTable(\r\n                DATASETS[\r\n                  state.active\r\n                ]\r\n              );\r\n            },\r\n            120\r\n          );\r\n      }\r\n    );\r\n  }\r\n  \/* =========================================================\r\n     START\r\n     ========================================================= *\/\r\n  \/*\r\n   * \u901a\u8fc7\u5206\u4eab\u94fe\u63a5\u8fdb\u5165\u65f6\uff1a\u5148\u5e94\u7528\u6807\u7b7e\u9875\u548c\u5730\u533a\u3002\r\n   * \u65f6\u95f4\u8303\u56f4\u5728\u6570\u636e\u52a0\u8f7d\u540e\u8fdb\u884c clamp \u518d\u5e94\u7528\u3002\r\n   *\/\r\n  pendingShare =\r\n    parseShareHash();\r\n  applyShareState(\r\n    pendingShare,\r\n    false\r\n  );\r\n  render();\r\n  loadGoogleSheet(\r\n    \"fx\"\r\n  );\r\n  loadGoogleSheet(\r\n    \"rice\"\r\n  );\r\n})();\r\n<\/script><\/div><\/div><\/div><\/div><div class=\"vc_column tdi_10  wpb_column vc_column_container tdc-column td-pb-span4\">\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_10{\r\n                    vertical-align: baseline;\r\n                }.tdi_10 > .wpb_wrapper,\r\n\t\t\t\t.tdi_10 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_10 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_10 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_10 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" ><div class=\"wpb_wrapper td_block_wrap vc_widget_sidebar tdi_12 \" ><aside id=\"block-4\" class=\"td_block_template_1 widget block-4 widget_block\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\"><div class=\"td_block_wrap td_block_7 td_block_widget tdi_13 td-pb-border-top td_block_template_1 td-column-1 td_block_padding\"  data-td-block-uid=\"tdi_13\" ><script>var block_tdi_13 = new tdBlock();\nblock_tdi_13.id = \"tdi_13\";\nblock_tdi_13.atts = '{\"custom_title\":\"\\u671d\\u9c9c\\u5185\\u51b5\",\"custom_url\":\"\",\"block_template_id\":\"\",\"m6_tl\":\"\",\"post_ids\":\"\",\"category_id\":\"67\",\"taxonomies\":\"\",\"category_ids\":\"\",\"tag_slug\":\"\",\"autors_id\":\"\",\"installed_post_types\":\"\",\"sort\":\"\",\"limit\":\"5\",\"offset\":\"\",\"time_ago_add_txt\":\"\",\"el_class\":\"\",\"td_ajax_filter_type\":\"\",\"td_ajax_filter_ids\":\"\",\"td_filter_default_txt\":\"All\",\"td_ajax_preloading\":\"\",\"ajax_pagination\":\"\",\"ajax_pagination_infinite_stop\":\"\",\"header_color\":\"#\",\"header_text_color\":\"#\",\"accent_text_color\":\"#\",\"class\":\"td_block_widget tdi_13\",\"block_type\":\"td_block_7\",\"separator\":\"\",\"in_all_terms\":\"\",\"include_cf_posts\":\"\",\"exclude_cf_posts\":\"\",\"popular_by_date\":\"\",\"linked_posts\":\"\",\"favourite_only\":\"\",\"open_in_new_window\":\"\",\"show_modified_date\":\"\",\"time_ago\":\"\",\"time_ago_txt_pos\":\"\",\"review_source\":\"\",\"f_header_font_header\":\"\",\"f_header_font_title\":\"Block header\",\"f_header_font_settings\":\"\",\"f_header_font_family\":\"\",\"f_header_font_size\":\"\",\"f_header_font_line_height\":\"\",\"f_header_font_style\":\"\",\"f_header_font_weight\":\"\",\"f_header_font_transform\":\"\",\"f_header_font_spacing\":\"\",\"f_header_\":\"\",\"f_ajax_font_title\":\"Ajax categories\",\"f_ajax_font_settings\":\"\",\"f_ajax_font_family\":\"\",\"f_ajax_font_size\":\"\",\"f_ajax_font_line_height\":\"\",\"f_ajax_font_style\":\"\",\"f_ajax_font_weight\":\"\",\"f_ajax_font_transform\":\"\",\"f_ajax_font_spacing\":\"\",\"f_ajax_\":\"\",\"f_more_font_title\":\"Load more button\",\"f_more_font_settings\":\"\",\"f_more_font_family\":\"\",\"f_more_font_size\":\"\",\"f_more_font_line_height\":\"\",\"f_more_font_style\":\"\",\"f_more_font_weight\":\"\",\"f_more_font_transform\":\"\",\"f_more_font_spacing\":\"\",\"f_more_\":\"\",\"m6f_title_font_header\":\"\",\"m6f_title_font_title\":\"Article title\",\"m6f_title_font_settings\":\"\",\"m6f_title_font_family\":\"\",\"m6f_title_font_size\":\"\",\"m6f_title_font_line_height\":\"\",\"m6f_title_font_style\":\"\",\"m6f_title_font_weight\":\"\",\"m6f_title_font_transform\":\"\",\"m6f_title_font_spacing\":\"\",\"m6f_title_\":\"\",\"m6f_cat_font_title\":\"Article category tag\",\"m6f_cat_font_settings\":\"\",\"m6f_cat_font_family\":\"\",\"m6f_cat_font_size\":\"\",\"m6f_cat_font_line_height\":\"\",\"m6f_cat_font_style\":\"\",\"m6f_cat_font_weight\":\"\",\"m6f_cat_font_transform\":\"\",\"m6f_cat_font_spacing\":\"\",\"m6f_cat_\":\"\",\"m6f_meta_font_title\":\"Article meta info\",\"m6f_meta_font_settings\":\"\",\"m6f_meta_font_family\":\"\",\"m6f_meta_font_size\":\"\",\"m6f_meta_font_line_height\":\"\",\"m6f_meta_font_style\":\"\",\"m6f_meta_font_weight\":\"\",\"m6f_meta_font_transform\":\"\",\"m6f_meta_font_spacing\":\"\",\"m6f_meta_\":\"\",\"ajax_pagination_next_prev_swipe\":\"\",\"css\":\"\",\"tdc_css\":\"\",\"td_column_number\":1,\"color_preset\":\"\",\"border_top\":\"\",\"tdc_css_class\":\"tdi_13\",\"tdc_css_class_style\":\"tdi_13_rand_style\"}';\nblock_tdi_13.td_column_number = \"1\";\nblock_tdi_13.block_type = \"td_block_7\";\nblock_tdi_13.post_count = \"5\";\nblock_tdi_13.found_posts = \"5208\";\nblock_tdi_13.header_color = \"#\";\nblock_tdi_13.ajax_pagination_infinite_stop = \"\";\nblock_tdi_13.max_num_pages = \"1042\";\ntdBlocksArray.push(block_tdi_13);\n<\/script><div class=\"td-block-title-wrap\"><h4 class=\"block-title td-block-title\"><span class=\"td-pulldown-size\">\u671d\u9c9c\u5185\u51b5<\/span><\/h4><\/div><div id=tdi_13 class=\"td_block_inner\">\n\n\t<div class=\"td-block-span12\">\n\r\n        <div class=\"td_module_6 td_module_wrap td-animation-stack\">\r\n\r\n        <div class=\"td-module-thumb\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e5%b7%a5%e4%ba%ba%e4%bb%ac%e5%af%b9%e5%8a%a0%e5%bc%ba%e5%ad%a6%e4%b9%a0%e7%85%a4%e7%9f%bf%e6%8a%80%e6%9c%af%e6%bc%a0%e4%b8%8d%e5%85%b3%e5%bf%83%ef%bc%8c%e5%a4%9a%e5%ad%a6\/\"  rel=\"bookmark\" class=\"td-image-wrap \" title=\"\u5de5\u4eba\u4eec\u5bf9\u52a0\u5f3a\u5b66\u4e60\u7164\u77ff\u6280\u672f\u201c\u6f20\u4e0d\u5173\u5fc3\u201d\uff0c\u201c\u591a\u5b66\u80fd\u6539\u53d8\u4eba\u751f\u5417\uff1f\u201d\" ><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"70\" class=\"entry-thumb\" src=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2308-100x70.jpeg\"  srcset=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2308-100x70.jpeg 100w, https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2308-218x150.jpeg 218w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\"  alt=\"\" title=\"\u5de5\u4eba\u4eec\u5bf9\u52a0\u5f3a\u5b66\u4e60\u7164\u77ff\u6280\u672f\u201c\u6f20\u4e0d\u5173\u5fc3\u201d\uff0c\u201c\u591a\u5b66\u80fd\u6539\u53d8\u4eba\u751f\u5417\uff1f\u201d\" \/><\/a><\/div>\r\n        <div class=\"item-details\">\r\n            <h3 class=\"entry-title td-module-title\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e5%b7%a5%e4%ba%ba%e4%bb%ac%e5%af%b9%e5%8a%a0%e5%bc%ba%e5%ad%a6%e4%b9%a0%e7%85%a4%e7%9f%bf%e6%8a%80%e6%9c%af%e6%bc%a0%e4%b8%8d%e5%85%b3%e5%bf%83%ef%bc%8c%e5%a4%9a%e5%ad%a6\/\"  rel=\"bookmark\" title=\"\u5de5\u4eba\u4eec\u5bf9\u52a0\u5f3a\u5b66\u4e60\u7164\u77ff\u6280\u672f\u201c\u6f20\u4e0d\u5173\u5fc3\u201d\uff0c\u201c\u591a\u5b66\u80fd\u6539\u53d8\u4eba\u751f\u5417\uff1f\u201d\">\u5de5\u4eba\u4eec\u5bf9\u52a0\u5f3a\u5b66\u4e60\u7164\u77ff\u6280\u672f\u201c\u6f20\u4e0d\u5173\u5fc3\u201d\uff0c\u201c\u591a\u5b66\u80fd\u6539\u53d8\u4eba\u751f\u5417\uff1f\u201d<\/a><\/h3>            <div class=\"td-module-meta-info\">\r\n                                                <span class=\"td-post-date\"><time class=\"entry-date updated td-module-date\" datetime=\"2026-09-17T09:16:03+09:00\" >2026.09.17 9:16am<\/time><\/span>                            <\/div>\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n        \n\t<\/div> <!-- .\/td-block-span12 -->\n\n\t<div class=\"td-block-span12\">\n\r\n        <div class=\"td_module_6 td_module_wrap td-animation-stack\">\r\n\r\n        <div class=\"td-module-thumb\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e6%9c%9d%e9%b2%9c%e9%92%88%e5%af%b9%e5%b9%b2%e9%83%a8%e5%bc%80%e5%b1%95%e7%a1%ae%e4%bf%9d%e6%8b%a5%e6%a0%b8%e5%9b%bd%e5%ae%b6%e5%9c%b0%e4%bd%8d%ef%bc%8c%e6%8b%92%e7%bb%9d%e6%97%a0%e6%a0%b8\/\"  rel=\"bookmark\" class=\"td-image-wrap \" title=\"\u671d\u9c9c\u9488\u5bf9\u5e72\u90e8\u5f00\u5c55\u201c\u786e\u4fdd\u62e5\u6838\u56fd\u5bb6\u5730\u4f4d\uff0c\u62d2\u7edd\u65e0\u6838\u5316\u201d\u8bb2\u6f14\u4f1a\" ><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"70\" class=\"entry-thumb\" src=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2292-100x70.jpeg\"  srcset=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2292-100x70.jpeg 100w, https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2292-218x150.jpeg 218w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\"  alt=\"\" title=\"\u671d\u9c9c\u9488\u5bf9\u5e72\u90e8\u5f00\u5c55\u201c\u786e\u4fdd\u62e5\u6838\u56fd\u5bb6\u5730\u4f4d\uff0c\u62d2\u7edd\u65e0\u6838\u5316\u201d\u8bb2\u6f14\u4f1a\" \/><\/a><\/div>\r\n        <div class=\"item-details\">\r\n            <h3 class=\"entry-title td-module-title\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e6%9c%9d%e9%b2%9c%e9%92%88%e5%af%b9%e5%b9%b2%e9%83%a8%e5%bc%80%e5%b1%95%e7%a1%ae%e4%bf%9d%e6%8b%a5%e6%a0%b8%e5%9b%bd%e5%ae%b6%e5%9c%b0%e4%bd%8d%ef%bc%8c%e6%8b%92%e7%bb%9d%e6%97%a0%e6%a0%b8\/\"  rel=\"bookmark\" title=\"\u671d\u9c9c\u9488\u5bf9\u5e72\u90e8\u5f00\u5c55\u201c\u786e\u4fdd\u62e5\u6838\u56fd\u5bb6\u5730\u4f4d\uff0c\u62d2\u7edd\u65e0\u6838\u5316\u201d\u8bb2\u6f14\u4f1a\">\u671d\u9c9c\u9488\u5bf9\u5e72\u90e8\u5f00\u5c55\u201c\u786e\u4fdd\u62e5\u6838\u56fd\u5bb6\u5730\u4f4d\uff0c\u62d2\u7edd\u65e0\u6838\u5316\u201d\u8bb2\u6f14\u4f1a<\/a><\/h3>            <div class=\"td-module-meta-info\">\r\n                                                <span class=\"td-post-date\"><time class=\"entry-date updated td-module-date\" datetime=\"2026-09-16T17:31:35+09:00\" >2026.09.16 5:31pm<\/time><\/span>                            <\/div>\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n        \n\t<\/div> <!-- .\/td-block-span12 -->\n\n\t<div class=\"td-block-span12\">\n\r\n        <div class=\"td_module_6 td_module_wrap td-animation-stack\">\r\n\r\n        <div class=\"td-module-thumb\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e5%8a%a0%e5%bc%ba%e6%89%93%e5%87%bb%e4%b8%8b%e6%b5%81%e9%80%9a%e7%bd%91%e8%90%8e%e7%bc%a9%ef%bc%8c%e5%86%b0%e6%af%92%e4%bb%b7%e6%a0%bc%e9%a3%99%e5%8d%87\/\"  rel=\"bookmark\" class=\"td-image-wrap \" title=\"\u52a0\u5f3a\u6253\u51fb\u4e0b\u6d41\u901a\u7f51\u840e\u7f29\uff0c\u51b0\u6bd2\u4ef7\u683c\u98d9\u5347\" ><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"70\" class=\"entry-thumb\" src=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/07\/IMG_0137-100x70.jpeg\"  srcset=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/07\/IMG_0137-100x70.jpeg 100w, https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/07\/IMG_0137-218x150.jpeg 218w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\"  alt=\"\" title=\"\u52a0\u5f3a\u6253\u51fb\u4e0b\u6d41\u901a\u7f51\u840e\u7f29\uff0c\u51b0\u6bd2\u4ef7\u683c\u98d9\u5347\" \/><\/a><\/div>\r\n        <div class=\"item-details\">\r\n            <h3 class=\"entry-title td-module-title\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e5%8a%a0%e5%bc%ba%e6%89%93%e5%87%bb%e4%b8%8b%e6%b5%81%e9%80%9a%e7%bd%91%e8%90%8e%e7%bc%a9%ef%bc%8c%e5%86%b0%e6%af%92%e4%bb%b7%e6%a0%bc%e9%a3%99%e5%8d%87\/\"  rel=\"bookmark\" title=\"\u52a0\u5f3a\u6253\u51fb\u4e0b\u6d41\u901a\u7f51\u840e\u7f29\uff0c\u51b0\u6bd2\u4ef7\u683c\u98d9\u5347\">\u52a0\u5f3a\u6253\u51fb\u4e0b\u6d41\u901a\u7f51\u840e\u7f29\uff0c\u51b0\u6bd2\u4ef7\u683c\u98d9\u5347<\/a><\/h3>            <div class=\"td-module-meta-info\">\r\n                                                <span class=\"td-post-date\"><time class=\"entry-date updated td-module-date\" datetime=\"2026-09-16T09:23:57+09:00\" >2026.09.16 9:23am<\/time><\/span>                            <\/div>\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n        \n\t<\/div> <!-- .\/td-block-span12 -->\n\n\t<div class=\"td-block-span12\">\n\r\n        <div class=\"td_module_6 td_module_wrap td-animation-stack\">\r\n\r\n        <div class=\"td-module-thumb\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e8%85%8c%e8%8f%9c%e5%ad%a3%e8%8a%82%e4%b8%b4%e8%bf%91%e4%ba%89%e7%9b%b8%e4%b9%b0%e5%85%a5%e8%be%a3%e6%a4%92%ef%bc%8c%e4%ba%a4%e6%98%93%e4%b8%8d%e8%a6%81%e5%9b%bd%e5%b8%81%e8%a6%81%e4%ba%ba\/\"  rel=\"bookmark\" class=\"td-image-wrap \" title=\"\u814c\u83dc\u5b63\u8282\u4e34\u8fd1\u4e89\u76f8\u4e70\u5165\u8fa3\u6912\uff0c\u4ea4\u6613\u201c\u4e0d\u8981\u56fd\u5e01\u8981\u4eba\u6c11\u5e01\u201d\" ><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"70\" class=\"entry-thumb\" src=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/03\/837B21C8-335A-4375-B7DA-D4D05E3DD8FA-100x70.jpeg\"  srcset=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/03\/837B21C8-335A-4375-B7DA-D4D05E3DD8FA-100x70.jpeg 100w, https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2023\/03\/837B21C8-335A-4375-B7DA-D4D05E3DD8FA-218x150.jpeg 218w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\"  alt=\"\" title=\"\u814c\u83dc\u5b63\u8282\u4e34\u8fd1\u4e89\u76f8\u4e70\u5165\u8fa3\u6912\uff0c\u4ea4\u6613\u201c\u4e0d\u8981\u56fd\u5e01\u8981\u4eba\u6c11\u5e01\u201d\" \/><\/a><\/div>\r\n        <div class=\"item-details\">\r\n            <h3 class=\"entry-title td-module-title\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e8%85%8c%e8%8f%9c%e5%ad%a3%e8%8a%82%e4%b8%b4%e8%bf%91%e4%ba%89%e7%9b%b8%e4%b9%b0%e5%85%a5%e8%be%a3%e6%a4%92%ef%bc%8c%e4%ba%a4%e6%98%93%e4%b8%8d%e8%a6%81%e5%9b%bd%e5%b8%81%e8%a6%81%e4%ba%ba\/\"  rel=\"bookmark\" title=\"\u814c\u83dc\u5b63\u8282\u4e34\u8fd1\u4e89\u76f8\u4e70\u5165\u8fa3\u6912\uff0c\u4ea4\u6613\u201c\u4e0d\u8981\u56fd\u5e01\u8981\u4eba\u6c11\u5e01\u201d\">\u814c\u83dc\u5b63\u8282\u4e34\u8fd1\u4e89\u76f8\u4e70\u5165\u8fa3\u6912\uff0c\u4ea4\u6613\u201c\u4e0d\u8981\u56fd\u5e01\u8981\u4eba\u6c11\u5e01\u201d<\/a><\/h3>            <div class=\"td-module-meta-info\">\r\n                                                <span class=\"td-post-date\"><time class=\"entry-date updated td-module-date\" datetime=\"2026-09-15T17:22:19+09:00\" >2026.09.15 5:22pm<\/time><\/span>                            <\/div>\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n        \n\t<\/div> <!-- .\/td-block-span12 -->\n\n\t<div class=\"td-block-span12\">\n\r\n        <div class=\"td_module_6 td_module_wrap td-animation-stack\">\r\n\r\n        <div class=\"td-module-thumb\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e4%b8%8b%e4%bb%a4%e7%ad%b9%e5%a4%87%e4%be%9b%e5%ba%94%e7%bb%99%e5%b9%b3%e5%a3%a4%e5%b8%82%e6%b0%91%e7%9a%84%e6%b7%a1%e6%b0%b4%e9%b1%bc%ef%bc%8c%e5%85%bb%e9%b1%bc%e5%9c%ba%e7%84%a6%e5%a4%b4%e7%83%82\/\"  rel=\"bookmark\" class=\"td-image-wrap \" title=\"\u4e0b\u4ee4\u7b79\u5907\u4f9b\u5e94\u7ed9\u5e73\u58e4\u5e02\u6c11\u7684\u6de1\u6c34\u9c7c\uff0c\u517b\u9c7c\u573a\u7126\u5934\u70c2\u989d\" ><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"70\" class=\"entry-thumb\" src=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2304-100x70.jpeg\"  srcset=\"https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2304-100x70.jpeg 100w, https:\/\/www.dailynk.com\/chinese\/wp-content\/uploads\/sites\/3\/2026\/09\/IMG_2304-218x150.jpeg 218w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\"  alt=\"\" title=\"\u4e0b\u4ee4\u7b79\u5907\u4f9b\u5e94\u7ed9\u5e73\u58e4\u5e02\u6c11\u7684\u6de1\u6c34\u9c7c\uff0c\u517b\u9c7c\u573a\u7126\u5934\u70c2\u989d\" \/><\/a><\/div>\r\n        <div class=\"item-details\">\r\n            <h3 class=\"entry-title td-module-title\"><a href=\"https:\/\/www.dailynk.com\/chinese\/%e4%b8%8b%e4%bb%a4%e7%ad%b9%e5%a4%87%e4%be%9b%e5%ba%94%e7%bb%99%e5%b9%b3%e5%a3%a4%e5%b8%82%e6%b0%91%e7%9a%84%e6%b7%a1%e6%b0%b4%e9%b1%bc%ef%bc%8c%e5%85%bb%e9%b1%bc%e5%9c%ba%e7%84%a6%e5%a4%b4%e7%83%82\/\"  rel=\"bookmark\" title=\"\u4e0b\u4ee4\u7b79\u5907\u4f9b\u5e94\u7ed9\u5e73\u58e4\u5e02\u6c11\u7684\u6de1\u6c34\u9c7c\uff0c\u517b\u9c7c\u573a\u7126\u5934\u70c2\u989d\">\u4e0b\u4ee4\u7b79\u5907\u4f9b\u5e94\u7ed9\u5e73\u58e4\u5e02\u6c11\u7684\u6de1\u6c34\u9c7c\uff0c\u517b\u9c7c\u573a\u7126\u5934\u70c2\u989d<\/a><\/h3>            <div class=\"td-module-meta-info\">\r\n                                                <span class=\"td-post-date\"><time class=\"entry-date updated td-module-date\" datetime=\"2026-09-15T09:02:16+09:00\" >2026.09.15 9:02am<\/time><\/span>                            <\/div>\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n        \n\t<\/div> <!-- .\/td-block-span12 --><\/div><\/div> <!-- .\/block -->\n\n<p><div style=\"margin-top: -20px;\"><div style=\"text-align: right; margin-bottom: 0px; font-size: 11px; color: #838383;\">Update : [supsystic-tables-cell id=1 row=2 col=1]<\/div>[table id=1 \/]<\/div><\/p>\n<\/div><\/div>\n<\/aside><aside id=\"block-5\" class=\"td_block_template_1 widget block-5 widget_block\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-6506034156016760\"\n     crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-6506034156016760\"\n     data-ad-slot=\"5119510213\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/aside><\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":122,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-pagebuilder-title.php","meta":{"footnotes":""},"class_list":["post-167","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dailynk.com\/chinese\/market-trends\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dailynk.com\/chinese\/market-trends\/\" \/>\n<meta property=\"og:site_name\" content=\"Daily NK Chinese\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-02T07:12:28+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/market-trends\\\/\",\"url\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/market-trends\\\/\",\"name\":\"\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/#website\"},\"datePublished\":\"2017-08-04T03:00:48+00:00\",\"dateModified\":\"2026-09-02T07:12:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/market-trends\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/market-trends\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/market-trends\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u671d\u9c9c\u5e02\u573a\u52a8\u5411\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/#website\",\"url\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/\",\"name\":\"Daily NK Chinese\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dailynk.com\\\/chinese\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dailynk.com\/chinese\/market-trends\/","og_locale":"en_US","og_type":"article","og_title":"\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese","og_url":"https:\/\/www.dailynk.com\/chinese\/market-trends\/","og_site_name":"Daily NK Chinese","article_modified_time":"2026-09-02T07:12:28+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dailynk.com\/chinese\/market-trends\/","url":"https:\/\/www.dailynk.com\/chinese\/market-trends\/","name":"\u671d\u9c9c\u5e02\u573a\u52a8\u5411 - Daily NK Chinese","isPartOf":{"@id":"https:\/\/www.dailynk.com\/chinese\/#website"},"datePublished":"2017-08-04T03:00:48+00:00","dateModified":"2026-09-02T07:12:28+00:00","breadcrumb":{"@id":"https:\/\/www.dailynk.com\/chinese\/market-trends\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dailynk.com\/chinese\/market-trends\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dailynk.com\/chinese\/market-trends\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/www.dailynk.com\/chinese\/"},{"@type":"ListItem","position":2,"name":"\u671d\u9c9c\u5e02\u573a\u52a8\u5411"}]},{"@type":"WebSite","@id":"https:\/\/www.dailynk.com\/chinese\/#website","url":"https:\/\/www.dailynk.com\/chinese\/","name":"Daily NK Chinese","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dailynk.com\/chinese\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/pages\/167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/users\/122"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/comments?post=167"}],"version-history":[{"count":13,"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/pages\/167\/revisions"}],"predecessor-version":[{"id":93780,"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/pages\/167\/revisions\/93780"}],"wp:attachment":[{"href":"https:\/\/www.dailynk.com\/chinese\/wp-json\/wp\/v2\/media?parent=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}