[{"data":1,"prerenderedAt":69},["ShallowReactive",2],{"site-info":3,"site-navs":31,"design-page-pc-contact":61},{"id":4,"site_name":5,"site_code":6,"site_type":7,"clone_from_site_id":8,"clone_time":9,"domain":10,"ssl_enabled":8,"canonical_domain":9,"logo":11,"favicon":9,"keywords":12,"description":13,"contact_phone":14,"contact_email":15,"contact_address":16,"icp_no":17,"statistics_code":9,"robots":9,"sitemap_enabled":4,"is_default":4,"create_by":8,"update_by":8,"status":4,"build_status":18,"build_time":19,"weigh":8,"remark":20,"create_time":21,"update_time":22,"lang_code":23,"lang_group_id":8,"base_currency":24,"version_config":25,"compliance":29},1,"夺冠科技","default","original",0,null,"www.example.com","\u002Fstorage\u002Fdefault\u002F20260928\u002F178305770719409fef7d8e7ddf20cbc1f41122e60a7efb217950506.png","企业官网,网站建设,数字化服务,CRM,小程序商城","夺冠科技专注企业数字化十二年，提供官网建设、客户管理、智能报价、会员商城一站式解决方案。","0539-8888-666","contact@duoguankeji.com","山东省临沂市兰山区天基国际6楼","鲁ICP备2026000000号-1",3,"2026-09-29 10:59:26","安装自动生成","2026-09-27 16:04:24","2026-10-01 14:10:25","zh-cn","CNY",{"id":4,"site_id":4,"version_type":26,"version_name":27,"allow_shop":8,"allow_trade":8,"allow_member":8,"allow_multilang":8,"allow_marketing":8,"allow_gdpr":8,"allow_google_seo":8,"allow_social_media":8,"allow_overseas_clue":8,"status":4,"remark":28,"create_time":21,"update_time":21},"brand","品牌宣传版","默认站点使用品牌宣传版（支持单向升级至商城版\u002F外贸版）",{"icp_no":17,"icp_url":30},"https:\u002F\u002Fbeian.miit.gov.cn\u002F",[32,36,41,45,49,53,57],{"id":4,"nav_name":33,"nav_type":34,"link_url":35,"target":8,"target_id":8,"parent_id":8,"icon":9},"首页","custom","\u002F",{"id":37,"nav_name":38,"nav_type":39,"link_url":40,"target":8,"target_id":4,"parent_id":8,"icon":9},2,"关于我们","page","\u002Fpages\u002Fabout",{"id":18,"nav_name":42,"nav_type":43,"link_url":44,"target":8,"target_id":4,"parent_id":8,"icon":9},"产品中心","category","\u002Fproducts",{"id":46,"nav_name":47,"nav_type":43,"link_url":48,"target":8,"target_id":37,"parent_id":8,"icon":9},4,"新闻资讯","\u002Farticles",{"id":50,"nav_name":51,"nav_type":43,"link_url":52,"target":8,"target_id":18,"parent_id":8,"icon":9},5,"成功案例","\u002Fcases",{"id":54,"nav_name":55,"nav_type":43,"link_url":56,"target":8,"target_id":46,"parent_id":8,"icon":9},6,"图册中心","\u002Fphotos",{"id":58,"nav_name":59,"nav_type":34,"link_url":60,"target":8,"target_id":8,"parent_id":8,"icon":9},7,"联系我们","\u002Fpages\u002Fcontact",{"id":62,"site_id":4,"page_name":59,"page_code":63,"content":64,"keywords":9,"description":9,"slug":9,"weigh":65,"status":4,"remark":9,"create_by":8,"update_by":8,"delete_time":66,"create_time":67,"update_time":68},12,"contact","\u003Csection class=\"dgw-block dgw-hero\" id=\"hero-19\" data-dg-key=\"hero-19\" style=\"padding-top:0px;padding-bottom:0px;background-color:#1f4fa3;color:#ffffff;position:relative;\">\u003Cdiv class=\"dgw-container\" style=\"max-width:1200px;margin:0 auto;padding:0 16px\">\u003Cdiv class=\"dgw-hero\" style=\"display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;color:#ffffff;min-height:240px\">\u003Cdiv class=\"dgw-hero-bg\" aria-hidden=\"true\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(135deg,#0f172a,#1f4fa3);z-index:0\">\u003C\u002Fdiv>\u003Cdiv class=\"dgw-hero-inner\" style=\"position:relative;z-index:2;width:100%;max-width:760px\">\u003Ch1 class=\"dgw-hero-title\" style=\"margin:0 0 18px;color:#ffffff;font-size:44px;font-weight:700;line-height:1.25\">联系我们\u003C\u002Fh1>\u003Cp class=\"dgw-hero-sub\" style=\"margin:0 0 14px;color:#ffffff;opacity:.92;font-size:17px;line-height:1.7\">随时欢迎垂询、到访与合作洽谈\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection class=\"dgw-block dgw-contact\" id=\"contact-20\" data-dg-key=\"contact-20\" style=\"padding-top:32px;padding-bottom:32px;background-color:#f7f8fa;border-radius:12px;position:relative;\">\u003Cdiv class=\"dgw-container\" style=\"max-width:1200px;margin:0 auto;padding:0 16px\">\u003Ch2 style=\"text-align:center;font-size:26px;margin:0 0 28px;color:#1f2937\">联系方式\u003C\u002Fh2>\u003Cdiv style=\"display:flex;flex-wrap:wrap;gap:16px\">\u003Cdiv style=\"flex:1;min-width:220px;background:#fff;border:1px solid #eef1f5;border-radius:12px;padding:22px;display:flex;gap:14px;align-items:flex-start\">\u003Ci class=\"fa fa-phone\" style=\"font-size:22px;color:#1f4fa3;margin-top:2px\">\u003C\u002Fi>\u003Cdiv>\u003Cdiv style=\"font-size:13px;color:#9ca3af;margin-bottom:4px\">联系电话\u003C\u002Fdiv>\u003Cdiv style=\"font-size:15px;color:#1f2937;line-height:1.6;word-break:break-all\">0539-8888-666\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv style=\"flex:1;min-width:220px;background:#fff;border:1px solid #eef1f5;border-radius:12px;padding:22px;display:flex;gap:14px;align-items:flex-start\">\u003Ci class=\"fa fa-envelope-o\" style=\"font-size:22px;color:#1f4fa3;margin-top:2px\">\u003C\u002Fi>\u003Cdiv>\u003Cdiv style=\"font-size:13px;color:#9ca3af;margin-bottom:4px\">电子邮箱\u003C\u002Fdiv>\u003Cdiv style=\"font-size:15px;color:#1f2937;line-height:1.6;word-break:break-all\">hello@duoguankeji.com\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv style=\"flex:1;min-width:220px;background:#fff;border:1px solid #eef1f5;border-radius:12px;padding:22px;display:flex;gap:14px;align-items:flex-start\">\u003Ci class=\"fa fa-map-marker\" style=\"font-size:22px;color:#1f4fa3;margin-top:2px\">\u003C\u002Fi>\u003Cdiv>\u003Cdiv style=\"font-size:13px;color:#9ca3af;margin-bottom:4px\">公司地址\u003C\u002Fdiv>\u003Cdiv style=\"font-size:15px;color:#1f2937;line-height:1.6;word-break:break-all\">山东省临沂市兰山区天基国际6楼\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv style=\"flex:1;min-width:220px;background:#fff;border:1px solid #eef1f5;border-radius:12px;padding:22px;display:flex;gap:14px;align-items:flex-start\">\u003Ci class=\"fa fa-clock-o\" style=\"font-size:22px;color:#1f4fa3;margin-top:2px\">\u003C\u002Fi>\u003Cdiv>\u003Cdiv style=\"font-size:13px;color:#9ca3af;margin-bottom:4px\">工作时间\u003C\u002Fdiv>\u003Cdiv style=\"font-size:15px;color:#1f2937;line-height:1.6;word-break:break-all\">周一至周五 9:00 - 18:00\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection class=\"dgw-block dgw-formContainer\" id=\"formContainer-21\" data-dg-key=\"formContainer-21\" style=\"padding-top:32px;padding-bottom:32px;background-color:#f8fafc;border-radius:12px;position:relative;\">\u003Cdiv class=\"dgw-container\" style=\"max-width:1200px;margin:0 auto;padding:0 16px\">\u003Cform class=\"dgw-form\" data-dgw-form novalidate data-demo=\"0\" data-success=\"提交成功，我们将在 1 个工作日内与您联系\" data-error=\"提交失败，请稍后重试\" aria-label=\"在线留言\" method=\"post\" action=\"\u002Fapi\u002Fdgweb.Form\u002Fsubmit?form_code=contact\">\u003Ch3 class=\"dgw-form-title\">在线留言\u003C\u002Fh3>\u003Cp class=\"dgw-form-desc\">留下您的需求与联系方式，顾问将在 1 个工作日内回复。\u003C\u002Fp>\u003Cdiv class=\"dgw-form-fields\">\u003Cdiv class=\"dgw-form-item\">\u003Clabel class=\"dgw-form-label\" for=\"dgw-ff-formContainer-21-1\">您的称呼 \u003Cspan style=\"color:#e11d48\" aria-hidden=\"true\">*\u003C\u002Fspan>\u003C\u002Flabel>\u003Cinput type=\"text\" class=\"dgw-input\" id=\"dgw-ff-formContainer-21-1\" name=\"name\" placeholder=\"如：王先生 \u002F 李女士\" required aria-required=\"true\">\u003C\u002Fdiv>\u003Cdiv class=\"dgw-form-item\">\u003Clabel class=\"dgw-form-label\" for=\"dgw-ff-formContainer-21-2\">联系电话 \u003Cspan style=\"color:#e11d48\" aria-hidden=\"true\">*\u003C\u002Fspan>\u003C\u002Flabel>\u003Cinput type=\"tel\" class=\"dgw-input\" id=\"dgw-ff-formContainer-21-2\" name=\"phone\" placeholder=\"便于顾问与您联系\" required aria-required=\"true\">\u003C\u002Fdiv>\u003Cdiv class=\"dgw-form-item\">\u003Clabel class=\"dgw-form-label\" for=\"dgw-ff-formContainer-21-3\">咨询方向 \u003Cspan style=\"color:#e11d48\" aria-hidden=\"true\">*\u003C\u002Fspan>\u003C\u002Flabel>\u003Cselect class=\"dgw-input\" id=\"dgw-ff-formContainer-21-3\" name=\"consult_type\" required aria-required=\"true\">\u003Coption value=\"\">请选择\u003C\u002Foption>\u003Coption value=\"官网平台建设\">website\u003C\u002Foption>\u003Coption value=\"CRM 客户管理\">crm\u003C\u002Foption>\u003Coption value=\"智能报价\">quote\u003C\u002Foption>\u003Coption value=\"会员商城\">mall\u003C\u002Foption>\u003Coption value=\"其他合作\">other\u003C\u002Foption>\u003C\u002Fselect>\u003C\u002Fdiv>\u003Cdiv class=\"dgw-form-item\" style=\"grid-column:1\u002F-1\">\u003Clabel class=\"dgw-form-label\" for=\"dgw-ff-formContainer-21-4\">需求描述 \u003Cspan style=\"color:#e11d48\" aria-hidden=\"true\">*\u003C\u002Fspan>\u003C\u002Flabel>\u003Ctextarea class=\"dgw-input\" id=\"dgw-ff-formContainer-21-4\" name=\"content\" rows=\"4\" placeholder=\"简单描述您的业务场景与期望\" required aria-required=\"true\">\u003C\u002Ftextarea>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"dgw-form-actions\">\u003Cbutton type=\"submit\" class=\"dgw-btn dgw-btn--md dgw-btn--primary\" data-submit-text=\"提交留言\" data-loading-text=\"提交中…\">提交留言\u003C\u002Fbutton>\u003Cbutton type=\"reset\" class=\"dgw-btn dgw-btn--md dgw-btn--outline\">重置\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"dgw-form-msg\" role=\"status\" aria-live=\"polite\">\u003C\u002Fdiv>\u003C\u002Fform>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection class=\"dgw-block dgw-map\" id=\"map-22\" data-dg-key=\"map-22\" style=\"padding-top:32px;padding-bottom:32px;background-color:#ffffff;border-radius:12px;position:relative;\">\u003Cdiv class=\"dgw-container\" style=\"max-width:1200px;margin:0 auto;padding:0 16px\">\u003Cdiv style=\"border:1px solid #eef1f5;border-radius:14px;overflow:hidden\">\u003Cdiv style=\"background:linear-gradient(135deg,#eef4ff,#f8fafc);height:320px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:#1f4fa3\">\u003Ci class=\"fa fa-map-marker\" style=\"font-size:40px;opacity:.85\">\u003C\u002Fi>\u003Cdiv style=\"font-size:15px;color:#334155;max-width:80%;text-align:center\">山东省临沂市兰山区天基国际6楼\u003C\u002Fdiv>\u003Ca href=\"https:\u002F\u002Furi.amap.com\u002Fsearch?keyword=%E4%B8%B4%E6%B2%82%E5%B8%82%E5%85%B0%E5%B1%B1%E5%8C%BA%E5%A4%A9%E5%9F%BA%E5%9B%BD%E9%99%856%E5%B1%82\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;background:#1f4fa3;color:#fff;padding:8px 22px;border-radius:999px;font-size:14px;text-decoration:none\">查看地图并导航\u003C\u002Fa>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection class=\"dgw-block dgw-faq\" id=\"faq-23\" data-dg-key=\"faq-23\" style=\"padding-top:32px;padding-bottom:32px;background-color:#f7f8fa;border-radius:10px;position:relative;\">\u003Cdiv class=\"dgw-container\" style=\"max-width:1200px;margin:0 auto;padding:0 16px\">\u003Ch2 style=\"text-align:center;font-size:26px;margin:0 0 22px;color:#1f2937\">常见问题\u003C\u002Fh2>\u003Cdetails open style=\"background:#fff;border:1px solid #eef1f5;border-radius:10px;margin-bottom:10px;overflow:hidden\">\u003Csummary style=\"cursor:pointer;padding:14px 18px;font-size:15px;font-weight:600;color:#1f2937;list-style:none\">产品支持私有化部署吗？\u003Cspan style=\"float:right;color:#c2c8d0\">＋\u003C\u002Fspan>\u003C\u002Fsummary>\u003Cdiv style=\"padding:0 18px 16px;font-size:14px;line-height:1.8;color:#475569;border-top:1px dashed #eef1f5\">支持。官网、CRM、报价、商城四大产品线均可本地私有化部署，数据资产完全自主掌控。\u003C\u002Fdiv>\u003C\u002Fdetails>\u003Cdetails style=\"background:#fff;border:1px solid #eef1f5;border-radius:10px;margin-bottom:10px;overflow:hidden\">\u003Csummary style=\"cursor:pointer;padding:14px 18px;font-size:15px;font-weight:600;color:#1f2937;list-style:none\">实施周期一般多久？\u003Cspan style=\"float:right;color:#c2c8d0\">＋\u003C\u002Fspan>\u003C\u002Fsummary>\u003Cdiv style=\"padding:0 18px 16px;font-size:14px;line-height:1.8;color:#475569;border-top:1px dashed #eef1f5\">标准版 5-10 个工作日完成初始化与培训；定制项目视需求复杂度，一般 2-6 周。\u003C\u002Fdiv>\u003C\u002Fdetails>\u003Cdetails style=\"background:#fff;border:1px solid #eef1f5;border-radius:10px;margin-bottom:10px;overflow:hidden\">\u003Csummary style=\"cursor:pointer;padding:14px 18px;font-size:15px;font-weight:600;color:#1f2937;list-style:none\">可以先试用再决定吗？\u003Cspan style=\"float:right;color:#c2c8d0\">＋\u003C\u002Fspan>\u003C\u002Fsummary>\u003Cdiv style=\"padding:0 18px 16px;font-size:14px;line-height:1.8;color:#475569;border-top:1px dashed #eef1f5\">可以。提交留言后顾问会为您开通演示环境，并提供同行业示例数据体验。\u003C\u002Fdiv>\u003C\u002Fdetails>\u003Cdetails style=\"background:#fff;border:1px solid #eef1f5;border-radius:10px;margin-bottom:10px;overflow:hidden\">\u003Csummary style=\"cursor:pointer;padding:14px 18px;font-size:15px;font-weight:600;color:#1f2937;list-style:none\">售后响应时效是？\u003Cspan style=\"float:right;color:#c2c8d0\">＋\u003C\u002Fspan>\u003C\u002Fsummary>\u003Cdiv style=\"padding:0 18px 16px;font-size:14px;line-height:1.8;color:#475569;border-top:1px dashed #eef1f5\">工作日 9:00-18:00 内工单 30 分钟响应；关键故障提供 7x24 应急通道。\u003C\u002Fdiv>\u003C\u002Fdetails>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Caside class=\"dgw-block dgw-floatContact\" data-dg-key=\"fc-contact\" data-dgw-float=\"1\" aria-label=\"浮动联系方式\">\u003Ca class=\"dgw-float-btn\" href=\"\u002Fpages\u002Fcontact\" data-dgw-float-agent=\"1\" aria-label=\"在线客服\">\u003Csvg class=\"dgw-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Cpath d=\"M3 18v-6a9 9 0 0 1 18 0v6\"\u002F>\u003Cpath d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"\u002F>\u003C\u002Fsvg>\u003C\u002Fa>\u003Ca class=\"dgw-float-btn\" href=\"tel:0539-8888-666\" aria-label=\"电话咨询 0539-8888-666\">\u003Csvg class=\"dgw-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Cpath d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z\"\u002F>\u003C\u002Fsvg>\u003C\u002Fa>\u003Cbutton type=\"button\" class=\"dgw-float-btn\" data-dgw-float-pop=\"2\" aria-label=\"企业微信\" aria-expanded=\"false\">\u003Csvg class=\"dgw-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Cpath d=\"M9 3.5c-3.6 0-6.5 2.4-6.5 5.4 0 1.7.9 3.2 2.3 4.2L4 16.5l3.2-1.5c.6.1 1.2.2 1.8.2\"\u002F>\u003Cpath d=\"M15 8.5c3 0 5.5 2 5.5 4.6 0 1.5-.8 2.9-2 3.7l.5 2.2-2.7-1.3c-.4.1-.9.1-1.3.1-3 0-5.5-2-5.5-4.6S12 8.5 15 8.5z\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003Cbutton type=\"button\" class=\"dgw-float-btn\" data-dgw-float-top=\"1\" aria-label=\"返回顶部\">\u003Csvg class=\"dgw-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Cpath d=\"M12 19V5\"\u002F>\u003Cpath d=\"m5 12 7-7 7 7\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003Cdiv class=\"dgw-float-panel\" data-dgw-float-panel=\"2\" role=\"tooltip\">\u003Cimg src=\"\u002Fstatic\u002Fimages\u002Fdemo\u002Fqr-wxwork.svg\" alt=\"企业微信\" loading=\"lazy\">\u003Cdiv class=\"dgw-float-tip\">企业微信扫码，1对1服务\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Faside>\u003Cstyle data-dgw=\"assets\">.dgw-ico{width:1em;height:1em;display:inline-block;vertical-align:-.125em;flex:0 0 auto}\r\ni.dgw-ico-i{display:inline-flex;align-items:center;justify-content:center;font-style:normal;line-height:1;font-size:inherit;width:auto;height:auto}\r\nhtml.dgw-anim-ready [data-dgw-anim]{opacity:0;transition:opacity .6s ease,transform .6s ease}\r\nhtml.dgw-anim-ready [data-dgw-anim=\"fade-up\"]{transform:translateY(28px)}\r\nhtml.dgw-anim-ready [data-dgw-anim=\"slide-left\"]{transform:translateX(-40px)}\r\nhtml.dgw-anim-ready [data-dgw-anim=\"slide-right\"]{transform:translateX(40px)}\r\nhtml.dgw-anim-ready [data-dgw-anim=\"zoom-in\"]{transform:scale(.94)}\r\nhtml.dgw-anim-ready [data-dgw-anim].dgw-in{opacity:1;transform:none}\r\n@media(prefers-reduced-motion:reduce){html.dgw-anim-ready [data-dgw-anim]{opacity:1!important;transform:none!important;transition:none!important}}\r\n.dgw-hover-lift{transition:transform .25s ease,box-shadow .25s ease}\r\n.dgw-hover-lift:hover{transform:translateY(-4px)}\r\n.dgw-hover-shadow{transition:box-shadow .25s ease}\r\n.dgw-hover-shadow:hover{box-shadow:0 16px 40px rgba(15,23,42,.16)}\r\n.dgw-hover-zoom{transition:transform .25s ease}\r\n.dgw-hover-zoom:hover{transform:scale(1.015)}\r\n[data-dgw-sticky]{position:sticky;top:0;z-index:30}\r\n[data-dgw-parallax]{will-change:transform}\r\n.dgw-hero-btns{display:flex;gap:14px;flex-wrap:wrap}\r\n.dgw-hero-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:150px;padding:12px 30px;border-radius:999px;font-size:15px;font-weight:600;line-height:1.2;text-decoration:none;transition:opacity .2s ease,transform .2s ease}\r\n.dgw-hero-btn--primary{background:#fff;color:#1f4fa3}\r\n.dgw-hero-btn--ghost{background:transparent;color:inherit;border:1px solid rgba(255,255,255,.7)}\r\n.dgw-hero-btn:hover{opacity:.9}\r\n.dgw-hero-vtoggle{position:absolute;right:18px;bottom:18px;z-index:3;width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.5);background:rgba(15,23,42,.35);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}\r\n.dgw-scroll-indicator{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);z-index:3;display:inline-flex;flex-direction:column;align-items:center;gap:4px;font-size:12px;color:inherit;opacity:.85;text-decoration:none}\r\n.dgw-scroll-indicator i{font-size:20px;animation:dgw-bounce 1.6s infinite}\r\n@keyframes dgw-bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}\r\n.dgw-breadcrumb{display:flex;align-items:center}\r\n.dgw-breadcrumb ol{display:flex;align-items:center;flex-wrap:wrap;list-style:none;margin:0;padding:0}\r\n.dgw-breadcrumb li{display:inline-flex;align-items:center}\r\n.dgw-breadcrumb a{text-decoration:none;transition:color .2s ease}\r\n.dgw-breadcrumb--underline a:hover{text-decoration:underline}\r\n.dgw-divider-flex{display:flex;align-items:center;gap:14px}\r\n.dgw-divider-line{flex:1;height:0}\r\n.dgw-banner-inner{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;max-width:1200px;margin:0 auto}\r\n.dgw-banner-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 18px;border-radius:999px;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.5);color:inherit;font-weight:600;font-size:13px;text-decoration:none}\r\n.dgw-banner-close{background:transparent;border:0;color:inherit;font-size:20px;line-height:1;cursor:pointer;opacity:.8;padding:0 4px}\r\n.dgw-banner-close:hover{opacity:1}\r\n.dgw-countdown{font-variant-numeric:tabular-nums;font-weight:600}\r\n.dgw-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;line-height:1.2;font-weight:600;cursor:pointer;transition:opacity .2s ease,transform .1s ease,background .2s ease,color .2s ease,border-color .2s ease}\r\n.dgw-btn--lg{padding:13px 34px;font-size:16px}\r\n.dgw-btn--md{padding:10px 26px;font-size:14px}\r\n.dgw-btn--sm{padding:7px 18px;font-size:13px}\r\n.dgw-btn--primary{background:#1f4fa3;color:#fff;border:1px solid #1f4fa3}\r\n.dgw-btn--secondary{background:#f1f5f9;color:#1f2937;border:1px solid #e2e8f0}\r\n.dgw-btn--outline{background:transparent;color:#1f4fa3;border:1px solid #1f4fa3}\r\n.dgw-btn--ghost{background:transparent;color:#1f2937;border:1px solid transparent}\r\n.dgw-btn--link{background:transparent;color:#1f4fa3;border:0;padding-left:2px;padding-right:2px}\r\n.dgw-btn--disabled,.dgw-btn[aria-disabled=\"true\"]{opacity:.55;pointer-events:none}\r\n.dgw-btn--loading{opacity:.75;pointer-events:none}\r\n.dgw-btn:active{transform:translateY(1px)}\r\n.dgw-btn-group{display:flex}\r\n.dgw-stats{display:grid}\r\n.dgw-stat{display:flex;align-items:flex-start;gap:14px;padding:20px;transition:transform .25s ease,box-shadow .25s ease,background .25s ease}\r\n.dgw-stat--center{flex-direction:column;align-items:center;text-align:center}\r\n.dgw-stat-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:12px;font-size:20px;line-height:1}\r\n.dgw-stat-body{min-width:0}\r\n.dgw-stat-value{display:flex;align-items:baseline;gap:3px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}\r\n.dgw-stat-suffix{font-size:.55em;font-weight:600}\r\n.dgw-stat-label{margin-top:6px;font-size:14px;line-height:1.4}\r\n.dgw-stat-trend{display:inline-flex;align-items:center;gap:4px;margin-top:8px;font-size:12px}\r\n.dgw-stat-trend-text{margin-left:2px;opacity:.75}\r\n.dgw-chart{position:relative}\r\n.dgw-chart-head{margin:0 0 14px}\r\n.dgw-chart-title{margin:0;font-size:17px;font-weight:600;color:#1f2937}\r\n.dgw-chart-sub{margin:6px 0 0;font-size:13px;color:#94a3b8}\r\n.dgw-chart-body{position:relative;width:100%}\r\n.dgw-chart-bars{display:flex;align-items:flex-end;gap:12px;height:100%;padding:26px 4px 0}\r\n.dgw-chart-col{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0}\r\n.dgw-chart-bar{width:100%;max-width:56px;border-radius:6px 6px 0 0;transition:height .6s cubic-bezier(.22,.61,.36,1)}\r\n.dgw-chart-colval{font-size:12px;font-weight:600;margin-bottom:6px}\r\n.dgw-chart-x{display:flex;gap:12px;margin-top:8px}\r\n.dgw-chart-xlabel{flex:1 1 0;text-align:center;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\r\n.dgw-chart-svg{display:block;width:100%;height:100%;overflow:visible}\r\n.dgw-chart-grid{position:absolute;left:0;right:0;top:26px;bottom:22px;display:flex;flex-direction:column;justify-content:space-between;pointer-events:none}\r\n.dgw-chart-gridline{height:0}\r\n.dgw-chart-pie{display:flex;align-items:center;justify-content:center;gap:28px;height:100%;flex-wrap:wrap}\r\n.dgw-chart-donut{position:relative;border-radius:50%;flex:0 0 auto}\r\n.dgw-chart-donut-hole{position:absolute;inset:26%;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;color:#94a3b8;text-align:center;padding:6px}\r\n.dgw-chart-legend{display:flex;flex-direction:column;gap:10px;font-size:13px;color:#475569;min-width:110px}\r\n.dgw-chart-legend-item{display:inline-flex;align-items:center;gap:8px;padding:0;border:0;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}\r\n.dgw-chart-legend-dot{width:10px;height:10px;border-radius:3px;flex:0 0 auto}\r\n.dgw-chart-legend-item.is-off{opacity:.4;text-decoration:line-through}\r\n.dgw-chart-empty{display:flex;align-items:center;justify-content:center;height:100%;color:#94a3b8;font-size:13px}\r\n.dgw-tags{display:flex;align-items:center}\r\n.dgw-tag{display:inline-flex;align-items:center;gap:6px;line-height:1;text-decoration:none;border:1px solid transparent;transition:all .18s ease}\r\n.dgw-tag-close{padding:0;border:0;background:transparent;color:inherit;font:inherit;line-height:1;opacity:.6;cursor:pointer}\r\n.dgw-tag-close:hover{opacity:1}\r\n.dgw-tag-dot{width:.5em;height:.5em;border-radius:50%;flex:0 0 auto}\r\n.dgw-badge-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;height:1.5em;margin-left:6px;padding:0 .4em;border-radius:999px;font-size:.8em;font-weight:600;line-height:1}\r\n.dgw-share{display:flex;align-items:center}\r\n.dgw-share--float{position:fixed;z-index:40;flex-direction:column;opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s ease}\r\n.dgw-share[data-dgw-share-float].is-show{opacity:1;visibility:visible}\r\n.dgw-anchors[data-dgw-hover=\"color\"] .dgw-anchor-item:hover{color:var(--dgw-ic,#1f4fa3)}\r\n.dgw-share-title{margin-right:10px;font-size:13px;color:#64748b}\r\n.dgw-share-item{display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;background:transparent;font:inherit;text-decoration:none;cursor:pointer;transition:all .2s ease}\r\n.dgw-share-tip{position:fixed;left:50%;bottom:40px;z-index:99;transform:translateX(-50%);padding:8px 16px;border-radius:8px;background:rgba(15,23,42,.9);color:#fff;font-size:13px;opacity:0;pointer-events:none;transition:opacity .2s ease}\r\n.dgw-share-tip.is-on{opacity:1}\r\n.dgw-spacer{display:block;width:100%}\r\n.dgw-spacer-line{display:block}\r\n.dgw-reveal{opacity:0;transform:translateY(14px)}\r\n.dgw-reveal.dgw-in{opacity:1;transform:none;transition:opacity .5s ease,transform .5s ease}\r\n.dgw-anchors{width:100%}\r\n.dgw-anchor-item i{font-size:.95em}\r\n.dgw-anchor-progress{position:absolute;left:0;bottom:0;height:2px;width:0;background:#1f4fa3;transition:width .15s linear}\r\n.dgw-rank-wrap{width:100%}\r\n.dgw-rank-head{margin-bottom:14px}\r\n.dgw-rank-title{margin:0;font-size:18px;color:#1f2937}\r\n.dgw-rank-sub-title{margin:6px 0 0;font-size:13px;color:#94a3b8}\r\n.dgw-rank{margin:0;padding:0;list-style:none}\r\n.dgw-rank-name{font-weight:500}\r\n.dgw-rank-trend{font-size:1.15em}\r\n.dgw-rank-no--text{background:transparent}\r\n.dgw-gauge{width:100%}\r\n.dgw-gauge-title{margin:0 0 12px;font-size:18px;color:#1f2937;text-align:center}\r\n.dgw-gauge-wrap{display:flex;align-items:center;justify-content:center}\r\n.dgw-gauge-svg{display:block}\r\n.dgw-gauge-arc{transition:stroke-dasharray .9s ease}@media(max-width:640px){[data-dg-key=\"hero-19\"] .dgw-hero-btns{flex-direction:column;width:100%}}[data-dg-key=\"formContainer-21\"] .dgw-form{max-width:640px;margin:0 auto;background:#ffffff;border:1px solid #e2e8f0;border-radius:12px;padding:26px}[data-dg-key=\"formContainer-21\"] .dgw-form-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}[data-dg-key=\"formContainer-21\"] .dgw-form-item{display:flex;flex-direction:column;gap:6px}[data-dg-key=\"formContainer-21\"] .dgw-form-label{font-size:13px;font-weight:600;color:#374151}[data-dg-key=\"formContainer-21\"] .dgw-input{width:100%;padding:11px;border:1px solid #e2e8f0;border-radius:12px;background:#ffffff;font-size:14px;color:#1f2937;outline:none;font-family:inherit;transition:border-color .2s ease,box-shadow .2s ease}[data-dg-key=\"formContainer-21\"] .dgw-input:focus{border-color:#1f4fa3;box-shadow:0 0 0 3px rgba(31,79,163,0.18)}[data-dg-key=\"formContainer-21\"] .dgw-check-input:checked{border-color:#1f4fa3}[data-dg-key=\"formContainer-21\"] .dgw-form-actions{display:flex;gap:12px;margin-top:26px;justify-content:flex-start}[data-dg-key=\"formContainer-21\"] .dgw-form-help{font-size:13px;color:#94a3b8}[data-dg-key=\"formContainer-21\"] .dgw-form-title{margin:0 0 6px;font-size:20px;font-weight:700;color:#1f2937}[data-dg-key=\"formContainer-21\"] .dgw-form-desc{margin:0 0 18px;font-size:14px;color:#64748b;line-height:1.7}[data-dg-key=\"formContainer-21\"] .dgw-form-msg{display:none;margin-top:14px;padding:11px 14px;border-radius:8px;font-size:14px}[data-dg-key=\"formContainer-21\"] .dgw-form-msg.is-success{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}[data-dg-key=\"formContainer-21\"] .dgw-form-msg.is-error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca}@media(max-width:640px){[data-dg-key=\"formContainer-21\"] .dgw-form-fields{grid-template-columns:1fr}}@media(max-width:640px){[data-dg-key=\"formContainer-21\"] .dgw-form-item{flex-direction:column;align-items:flex-start;gap:6px}}@media(max-width:640px){[data-dg-key=\"formContainer-21\"] .dgw-form-label{flex:1 1 auto}}[data-dg-key=\"fc-contact\"]{position:fixed;top:220px;right:16px;z-index:999;display:flex;flex-direction:column;gap:10px}[data-dg-key=\"fc-contact\"] .dgw-float-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:44px;height:44px;border:1px solid rgba(0,0,0,.06);border-radius:10px;background:#ffffff;color:#1f4fa3;font-size:18px;box-shadow:0 6px 20px rgba(0,0,0,.14);text-decoration:none;cursor:pointer;transition:all .25s}[data-dg-key=\"fc-contact\"] .dgw-float-btn:hover{color:#1a66ff;transform:translateX(-4px)}[data-dg-key=\"fc-contact\"] .dgw-float-btn .dgw-ico{width:20px;height:20px}[data-dg-key=\"fc-contact\"] .dgw-float-label{font-size:12px;line-height:1;white-space:nowrap}[data-dg-key=\"fc-contact\"] .dgw-float-panel{position:absolute;top:0;right:calc(100% + 12px);width:150px;padding:10px;background:#fff;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.16);text-align:center;opacity:0;visibility:hidden;transform:translateY(6px);transition:all .25s}[data-dg-key=\"fc-contact\"] .dgw-float-panel.is-open{opacity:1;visibility:visible;transform:translateY(0)}[data-dg-key=\"fc-contact\"] .dgw-float-panel img{display:block;width:100%;height:auto;border-radius:6px}[data-dg-key=\"fc-contact\"] .dgw-float-tip{margin-top:8px;font-size:12px;color:#64748b}@media(max-width:768px){[data-dg-key=\"fc-contact\"] .dgw-float-btn{width:36px}}\u003C\u002Fstyle>\u003Cscript data-dgw=\"runtime\">(function(){\r\n  var d=document, w=window;\r\n  if(w.__dgwRuntimeInit){ if(w.__dgwBoot) w.__dgwBoot(); return; }\r\n  w.__dgwRuntimeInit=1;\r\n  var ICONS={'headset':'\u003Cpath d=\"M3 18v-6a9 9 0 0 1 18 0v6\"\u002F>\u003Cpath d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"\u002F>','phone':'\u003Cpath d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z\"\u002F>','mobile':'\u003Crect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\"\u002F>\u003Cpath d=\"M12 18h.01\"\u002F>','mail':'\u003Crect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"\u002F>\u003Cpath d=\"m22 7-10 6L2 7\"\u002F>','message':'\u003Cpath d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8z\"\u002F>','wechat':'\u003Cpath d=\"M9 3.5c-3.6 0-6.5 2.4-6.5 5.4 0 1.7.9 3.2 2.3 4.2L4 16.5l3.2-1.5c.6.1 1.2.2 1.8.2\"\u002F>\u003Cpath d=\"M15 8.5c3 0 5.5 2 5.5 4.6 0 1.5-.8 2.9-2 3.7l.5 2.2-2.7-1.3c-.4.1-.9.1-1.3.1-3 0-5.5-2-5.5-4.6S12 8.5 15 8.5z\"\u002F>','qrcode':'\u003Crect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Crect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Crect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Cpath d=\"M14 14h3v3h-3zM20 14h1M14 20h3M20 17v4\"\u002F>','arrow-up':'\u003Cpath d=\"M12 19V5\"\u002F>\u003Cpath d=\"m5 12 7-7 7 7\"\u002F>','arrow-down':'\u003Cpath d=\"M12 5v14\"\u002F>\u003Cpath d=\"m19 12-7 7-7-7\"\u002F>','arrow-right':'\u003Cpath d=\"M5 12h14\"\u002F>\u003Cpath d=\"m12 5 7 7-7 7\"\u002F>','arrow-left':'\u003Cpath d=\"M19 12H5\"\u002F>\u003Cpath d=\"m12 19-7-7 7-7\"\u002F>','check':'\u003Cpath d=\"M20 6 9 17l-5-5\"\u002F>','close':'\u003Cpath d=\"M18 6 6 18\"\u002F>\u003Cpath d=\"m6 6 12 12\"\u002F>','search':'\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003Cpath d=\"m21 21-4.35-4.35\"\u002F>','star':'\u003Cpath d=\"m12 2 3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\u002F>','heart':'\u003Cpath d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"\u002F>','cart':'\u003Ccircle cx=\"9\" cy=\"21\" r=\"1\"\u002F>\u003Ccircle cx=\"20\" cy=\"21\" r=\"1\"\u002F>\u003Cpath d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"\u002F>','home':'\u003Cpath d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\u002F>\u003Cpath d=\"M9 22V12h6v10\"\u002F>','user':'\u003Cpath d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\u002F>\u003Ccircle cx=\"12\" cy=\"7\" r=\"4\"\u002F>','users':'\u003Cpath d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\u002F>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\"\u002F>\u003Cpath d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\u002F>\u003Cpath d=\"M16 3.13a4 4 0 0 1 0 7.75\"\u002F>','map-pin':'\u003Cpath d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\u002F>\u003Ccircle cx=\"12\" cy=\"10\" r=\"3\"\u002F>','clock':'\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 6v6l4 2\"\u002F>','send':'\u003Cpath d=\"m22 2-7 20-4-9-9-4Z\"\u002F>\u003Cpath d=\"M22 2 11 13\"\u002F>','download':'\u003Cpath d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\u002F>\u003Cpath d=\"m7 10 5 5 5-5\"\u002F>\u003Cpath d=\"M12 15V3\"\u002F>','play':'\u003Cpath d=\"m5 3 14 9-14 9V3z\"\u002F>','calendar':'\u003Crect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\u002F>\u003Cpath d=\"M16 2v4M8 2v4M3 10h18\"\u002F>','shield':'\u003Cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u002F>','chart':'\u003Cpath d=\"M18 20V10\"\u002F>\u003Cpath d=\"M12 20V4\"\u002F>\u003Cpath d=\"M6 20v-6\"\u002F>','globe':'\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M2 12h20\"\u002F>\u003Cpath d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\u002F>','image':'\u003Crect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\u002F>\u003Ccircle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"\u002F>\u003Cpath d=\"m21 15-5-5L5 21\"\u002F>','plus':'\u003Cpath d=\"M12 5v14\"\u002F>\u003Cpath d=\"M5 12h14\"\u002F>','minus':'\u003Cpath d=\"M5 12h14\"\u002F>','tag':'\u003Cpath d=\"M20.59 13.41 13.42 20.58a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"\u002F>\u003Ccircle cx=\"7\" cy=\"7\" r=\"1\"\u002F>','gift':'\u003Cpath d=\"M20 12v10H4V12\"\u002F>\u003Cpath d=\"M2 7h20v5H2z\"\u002F>\u003Cpath d=\"M12 22V7\"\u002F>\u003Cpath d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"\u002F>\u003Cpath d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"\u002F>','award':'\u003Ccircle cx=\"12\" cy=\"8\" r=\"6\"\u002F>\u003Cpath d=\"m9 13.5-1 7.5 4-2.5 4 2.5-1-7.5\"\u002F>','book':'\u003Cpath d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"\u002F>\u003Cpath d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"\u002F>','truck':'\u003Crect x=\"1\" y=\"3\" width=\"15\" height=\"13\" rx=\"1\"\u002F>\u003Cpath d=\"M16 8h4l3 3v5h-7V8z\"\u002F>\u003Ccircle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"\u002F>\u003Ccircle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"\u002F>','thumbs-up':'\u003Cpath d=\"M7 10v12H4a1 1 0 0 1-1-1V11a1 1 0 0 1 1-1h3z\"\u002F>\u003Cpath d=\"M7 10l4.5-7A2 2 0 0 1 15 4.5V9h5a2 2 0 0 1 2 2.4l-1.6 8A2 2 0 0 1 18.4 21H7\"\u002F>','link':'\u003Cpath d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"\u002F>\u003Cpath d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"\u002F>','settings':'\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>\u003Cpath d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1.08-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1.08 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"\u002F>','bolt':'\u003Cpath d=\"M13 2 3 14h8l-1 8 10-12h-8l1-8z\"\u002F>','camera':'\u003Cpath d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"\u002F>\u003Ccircle cx=\"12\" cy=\"13\" r=\"4\"\u002F>','video':'\u003Cpath d=\"m23 7-7 5 7 5V7z\"\u002F>\u003Crect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\"\u002F>','lock':'\u003Crect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\u002F>\u003Cpath d=\"M7 11V7a5 5 0 0 1 10 0v4\"\u002F>','filter':'\u003Cpath d=\"M22 3H2l8 9.46V19l4 2v-8.54L22 3z\"\u002F>','grid':'\u003Crect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Crect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Crect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\u002F>\u003Crect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\u002F>','list':'\u003Cpath d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"\u002F>','edit':'\u003Cpath d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"\u002F>\u003Cpath d=\"M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"\u002F>','trash':'\u003Cpath d=\"M3 6h18\"\u002F>\u003Cpath d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"\u002F>\u003Cpath d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"\u002F>','eye':'\u003Cpath d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>','rocket':'\u003Cpath d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\"\u002F>\u003Cpath d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\"\u002F>\u003Cpath d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\"\u002F>\u003Cpath d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"\u002F>','circle':'\u003Ccircle cx=\"12\" cy=\"12\" r=\"9\"\u002F>'};var ICON_ALIAS_RAW='headphones:headset|earphone:headset|earphones:headset|service:headset|customerservice:headset|kefu:headset|support:headset|phonevolume:phone|phonesquare:phone|telephone:phone|call:phone|hotline:phone|weixin:wechat|wechats:wechat|wechatpay:wechat|envelope:mail|envelopeo:mail|email:mail|mailo:mail|comment:message|comments:message|commenting:message|commentingo:message|chat:message|chato:message|messagecircle:message|sms:message|chatround:message|chatdotround:message|chatdotroundfull:message|chatline:message|chatlinesquare:message|chatdot:message|messagebox:message|commentdots:message|serviceman:headset|phonefilled:phone|circlecheck:check|successfilled:check|circlecheckfilled:check|circleclose:close|circleclosefilled:close|closebold:close|circleo:circle|circlefilled:circle|shoppingcartfull:cart|shoppingbag:cart|goods:cart|userfilled:user|useravatar:user|avatar:user|starfilled:star|starfill:star|maplocation:map-pin|maplocations:map-pin|locationinformation:map-pin|position:map-pin|addresses:map-pin|promotion:send|promotionsend:send|officedocument:book|documentcopy:book|files:book|folder:grid|folders:grid|setting:settings|tools:settings|operations:settings|trendcharts:chart|histogram:chart|piechart:chart|databoard:chart|dataprocess:chart|monitor:video|videoplay:play|timer:clock|alarmclock:clock|watch:clock|guard:shield|lockopen:lock|iphone:mobile|cellphone2:mobile|arrowdownbold:arrow-down|arrowupbold:arrow-up|back:arrow-left|right:arrow-right|hide:eye|viewfilled:eye|editpen:edit|editfilled:edit|deletefilled:trash|delete2:trash|zoom-in:search|zoomin:search|lightbulbo:bolt|lightbulbfilled:bolt|bulb:bolt|flag:award|flagfilled:award|qrcode1:qrcode|qr:qrcode|erweima:qrcode|angleup:arrow-up|caretup:arrow-up|chevronup:arrow-up|arrowcircleup:arrow-up|longarrowup:arrow-up|top:arrow-up|carettop:arrow-up|angledown:arrow-down|caretdown:arrow-down|chevrondown:arrow-down|arrowcircledown:arrow-down|angleright:arrow-right|chevronright:arrow-right|arrowcircleright:arrow-right|longarrowright:arrow-right|angleleft:arrow-left|chevronleft:arrow-left|arrowcircleleft:arrow-left|longarrowleft:arrow-left|phonemobile:mobile|smartphone:mobile|cellphone:mobile|shouji:mobile|checkmark:check|checkcircle:check|checkcircleo:check|success:check|ok:check|dui:check|times:close|cross:close|error:close|cuo:close|closecircle:close|magnifier:search|sousuo:search|zoom:search|staro:star|stars:star|shoucang:star|like:heart|hearto:heart|love:heart|shoppingcart:cart|shopping:cart|shop:cart|gouwuche:cart|house:home|shouye:home|index:home|usero:user|person:user|member:user|yonghu:user|team:users|group:users|tuandui:users|mappin:map-pin|mapmarker:map-pin|location:map-pin|locationon:map-pin|environment:map-pin|dizhi:map-pin|address:map-pin|time:clock|clocko:clock|shijian:clock|paperplane:send|faxian:send|telegram:send|sendo:send|clouddownload:download|downloado:download|xiazai:download|playcircle:play|bofang:play|video-play:play|date:calendar|rili:calendar|security:shield|anquan:shield|safe:shield|barchart:chart|statistics:chart|linechart:chart|trendingup:chart|shuju:chart|world:globe|earth:globe|quanqiu:globe|internet:globe|picture:image|pictureo:image|photo:image|tupian:image|add:plus|jia:plus|remove:minus|jian:minus|tags:tag|price:tag|biaoqian:tag|present:gift|liwu:gift|medal:award|trophy:award|jiangzhang:award|booko:book|read:book|ziliao:book|document:book|file:book|delivery:truck|logistics:truck|shipping:truck|wuliu:truck|thumbsup:thumbs-up|zan:thumbs-up|good:thumbs-up|chain:link|lianjie:link|url:link|gear:settings|cog:settings|config:settings|shezhi:settings|setup:settings|lightning:bolt|flash:bolt|shandian:bolt|lightbulb:bolt|idea:bolt|photograph:camera|xiangji:camera|film:video|shipin:video|videocamera:video|unlock:lock|suo:lock|shaixuan:filter|funnel:filter|table:grid|apps:grid|yingyong:grid|menu:list|liebiao:list|pencil:edit|bianji:edit|write:edit|delete:trash|shanchu:trash|bin:trash|view:eye|chakan:eye|visible:eye|start:rocket|huojian:rocket|launch:rocket';\r\n  function qa(s,c){ return Array.prototype.slice.call((c||d).querySelectorAll(s)); }\r\n  function q(s,c){ return (c||d).querySelector(s); }\r\n  function on(el,ev,fn){ if(el) el.addEventListener(ev,fn); }\r\n\r\n  \u002F* 图标兼容层：把 \u003Ci class=\"fa fa-xxx \u002F el-icon-Xxx \u002F iconfont-xxx\"> 换成内联 SVG。\r\n     前台可能没有安装任何图标字体（FontAwesome\u002FElement Plus\u002Ficonfont），\r\n     不处理的话后台选中的图标在页面上会显示成空白方块。 *\u002F\r\n  var ICON_MAP={}, _aliasRaw=typeof ICON_ALIAS_RAW==='string'?ICON_ALIAS_RAW.split('|'):[];\r\n  (function(){\r\n    for(var i=0;i\u003C_aliasRaw.length;i++){\r\n      var p=_aliasRaw[i].split(':');\r\n      if(p[0]&&p[1]&&ICONS[p[1]]) ICON_MAP[p[0]]=ICONS[p[1]];\r\n    }\r\n  })();\r\n  function icoPath(cls){\r\n    var t=String(cls||'').toLowerCase().split(\u002F\\s+\u002F), i, v, n, vs;\r\n    for(i=0;i\u003Ct.length;i++){\r\n      if(!t[i]) continue;\r\n      vs=[t[i], t[i].replace(\u002F^(fa|fas|far|fab|el-icon|iconfont|icon)[-_]?\u002F,'')];\r\n      for(v=0;v\u003Cvs.length;v++){\r\n        n=vs[v].replace(\u002F[^a-z0-9]\u002Fg,'');\r\n        if(!n||\u002F^(fa|fas|far|fab|el|icon|iconfont|dgw|ico)$\u002F.test(n)) continue;\r\n        if(ICON_MAP[n]) return ICON_MAP[n];\r\n        if(ICONS[n]) return ICONS[n];\r\n      }\r\n    }\r\n    return ICONS.circle||'';\r\n  }\r\n  function icoSvg(cls){\r\n    var p=icoPath(cls);\r\n    if(!p) return '';\r\n    return '\u003Csvg class=\"dgw-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"'\r\n      +' stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">'+p+'\u003C\u002Fsvg>';\r\n  }\r\n  function hydrateIcons(root){\r\n    root=root||d;\r\n    var els=(root.nodeType===1&&root.tagName==='I')?[root]:qa('i[class]',root);\r\n    for(var i=0;i\u003Cels.length;i++){\r\n      var el=els[i];\r\n      if(el.__dgwIco) continue;\r\n      var cls=el.className||'';\r\n      if(!\u002Ffa-|el-icon-|iconfont\u002F.test(cls)) continue;\r\n      el.__dgwIco=1;\r\n      el.classList.add('dgw-ico-i');\r\n      el.innerHTML=icoSvg(cls);\r\n    }\r\n  }\r\n  w.__dgwHydrateIcons=hydrateIcons;\r\n\r\n  function boot(){\r\n    \u002F\u002F 图标兼容：首屏替换 + 监听后续动态插入（列表分页、Tab 切换等）\r\n    hydrateIcons(d);\r\n    if(!w.__dgwIcoObserver && 'MutationObserver' in w){\r\n      var timer=null;\r\n      w.__dgwIcoObserver=new MutationObserver(function(list){\r\n        var need=false;\r\n        for(var i=0;i\u003Clist.length&&!need;i++){\r\n          var nodes=list[i].addedNodes||[];\r\n          for(var j=0;j\u003Cnodes.length;j++){\r\n            var nd=nodes[j];\r\n            if(nd.nodeType!==1) continue;\r\n            if((nd.tagName==='I'&&\u002Ffa-|el-icon-|iconfont\u002F.test(nd.className||''))||(nd.querySelector&&nd.querySelector('i[class*=\"fa-\"],i[class*=\"el-icon-\"],i[class*=\"iconfont\"]'))){ need=true; break; }\r\n          }\r\n        }\r\n        if(!need) return;\r\n        if(timer) clearTimeout(timer);\r\n        timer=setTimeout(function(){ hydrateIcons(d); },120);\r\n      });\r\n      try{ w.__dgwIcoObserver.observe(d.body,{childList:true,subtree:true}); }catch(e){}\r\n    }\r\n    \u002F\u002F 动效：仅在脚本可用时开启初始隐藏态，避免无 JS 环境白屏\r\n    d.documentElement.classList.add('dgw-anim-ready');\r\n    qa('[data-dgw-anim]').forEach(function(el){\r\n      if(el.__dgwAnim) return; el.__dgwAnim=1;\r\n      var delay=parseInt(el.getAttribute('data-dgw-delay')||'0',10)||0;\r\n      function show(){ setTimeout(function(){ el.classList.add('dgw-in'); },delay); }\r\n      if(!('IntersectionObserver' in w)){ show(); return; }\r\n      var io=new IntersectionObserver(function(es){\r\n        es.forEach(function(e){ if(e.isIntersecting){ show(); io.unobserve(el); } });\r\n      },{threshold:.12});\r\n      io.observe(el);\r\n    });\r\n\r\n    \u002F\u002F 视差\r\n    qa('[data-dgw-parallax]').forEach(function(el){\r\n      if(el.__dgwPx) return; el.__dgwPx=1;\r\n      var speed=parseFloat(el.getAttribute('data-dgw-parallax-speed')||'0.18')||0.18;\r\n      function upd(){\r\n        var r=el.getBoundingClientRect();\r\n        if(r.bottom\u003C0||r.top>w.innerHeight) return;\r\n        var off=(r.top+r.height\u002F2-w.innerHeight\u002F2)*-speed;\r\n        el.style.backgroundPositionY='calc(50% + '+off.toFixed(1)+'px)';\r\n      }\r\n      on(w,'scroll',upd); upd();\r\n    });\r\n\r\n    \u002F\u002F 平滑滚动（Hero 滚动指示器 \u002F 锚点）\r\n    qa('[data-dgw-scrollto]').forEach(function(el){\r\n      if(el.__dgwSt) return; el.__dgwSt=1;\r\n      on(el,'click',function(e){\r\n        e.preventDefault();\r\n        var sec=el.closest('[data-dg-key]');\r\n        var next=sec&&sec.nextElementSibling;\r\n        if(next) next.scrollIntoView({behavior:'smooth',block:'start'});\r\n        else w.scrollTo({top:w.innerHeight,behavior:'smooth'});\r\n      });\r\n    });\r\n\r\n    \u002F\u002F Hero 背景视频播放\u002F暂停\r\n    qa('[data-dgw-videotoggle]').forEach(function(btn){\r\n      if(btn.__dgwVt) return; btn.__dgwVt=1;\r\n      on(btn,'click',function(){\r\n        var host=btn.closest('.dgw-hero')||btn.parentNode;\r\n        var v=q('video',host); if(!v) return;\r\n        var icon=q('i',btn);\r\n        if(v.paused){ v.play(); if(icon) icon.className='fa fa-pause'; }\r\n        else { v.pause(); if(icon) icon.className='fa fa-play'; }\r\n      });\r\n    });\r\n\r\n    \u002F\u002F Hero 背景轮播：多张背景图按间隔淡入淡出，圆点可点击切换，悬停暂停\r\n    qa('[data-dgw-heroslider]').forEach(function(host){\r\n      if(host.__dgwHs) return; host.__dgwHs=1;\r\n      var slides=qa('.dgw-hero-slide',host);\r\n      if(slides.length\u003C2) return;\r\n      var dots=qa('.dgw-hero-dot',host.parentNode);\r\n      var idx=0, timer=null, delay=(parseInt(host.getAttribute('data-interval')||'5',10)||5)*1000;\r\n      function go(n){\r\n        idx=(n+slides.length)%slides.length;\r\n        slides.forEach(function(s,i){\r\n          s.classList.toggle('is-active',i===idx);\r\n          s.style.opacity=i===idx?1:0;\r\n          s.setAttribute('aria-hidden',i===idx?'false':'true');\r\n        });\r\n        dots.forEach(function(dt,i){ dt.classList.toggle('is-active',i===idx); });\r\n      }\r\n      function play(){ if(timer) return; timer=setInterval(function(){ go(idx+1); },delay); }\r\n      function stop(){ if(timer){ clearInterval(timer); timer=null; } }\r\n      dots.forEach(function(dt,i){ on(dt,'click',function(){ go(i); stop(); play(); }); });\r\n      on(host,'mouseenter',stop); on(host,'mouseleave',play);\r\n      play();\r\n    });\r\n\r\n    \u002F\u002F 浮动联系栏：二维码面板悬停\u002F点击展开，点击外部收起\r\n    qa('[data-dgw-float]').forEach(function(host){\r\n      if(host.__dgwFc) return; host.__dgwFc=1;\r\n      function closeAll(){\r\n        qa('.dgw-float-panel',host).forEach(function(pn){ pn.classList.remove('is-open'); });\r\n        qa('.dgw-float-btn[data-dgw-float-pop]',host).forEach(function(b){ b.setAttribute('aria-expanded','false'); });\r\n      }\r\n      qa('.dgw-float-btn[data-dgw-float-pop]',host).forEach(function(btn){\r\n        var idx=btn.getAttribute('data-dgw-float-pop');\r\n        var panel=q('[data-dgw-float-panel=\"'+idx+'\"]',host);\r\n        if(!panel) return;\r\n        function open(){\r\n          closeAll();\r\n          panel.classList.add('is-open');\r\n          btn.setAttribute('aria-expanded','true');\r\n        }\r\n        on(btn,'mouseenter',open);\r\n        on(btn,'focus',open);\r\n        on(btn,'click',function(e){\r\n          e.preventDefault();\r\n          panel.classList.contains('is-open')?closeAll():open();\r\n        });\r\n        on(panel,'mouseenter',function(){ panel.classList.add('is-open'); });\r\n      });\r\n      on(host,'mouseleave',closeAll);\r\n      on(d,'click',function(e){\r\n        if(host.contains(e.target)) return;\r\n        closeAll();\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 浮动联系栏：在线客服按钮唤起站内智能客服面板（同一套客服，两个入口）；\r\n    \u002F\u002F 智能客服未启用时保持默认行为（按 href 跳转到联系页）\r\n    qa('[data-dgw-float-agent]').forEach(function(btn){\r\n      if(btn.__dgwFa) return; btn.__dgwFa=1;\r\n      on(btn,'click',function(e){\r\n        if(typeof w.__dgwAgentOpen!=='function') return;\r\n        e.preventDefault();\r\n        w.__dgwAgentOpen();\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 浮动联系栏：返回顶部\r\n    qa('[data-dgw-float-top]').forEach(function(btn){\r\n      if(btn.__dgwTop) return; btn.__dgwTop=1;\r\n      on(btn,'click',function(){\r\n        try{ w.scrollTo({top:0,behavior:'smooth'}); }catch(e){ w.scrollTo(0,0); }\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 面包屑动态当前页（服务端渲染占位，客户端按路径补全）\r\n    qa('[data-dgw-bc-current]').forEach(function(el){\r\n      var seg=(location.pathname||'\u002F').split('\u002F').filter(Boolean).pop()||'';\r\n      try{ seg=decodeURIComponent(seg); }catch(e){}\r\n      if(seg) el.textContent=seg;\r\n    });\r\n\r\n    \u002F\u002F 促销横幅：关闭记忆 + 倒计时\r\n    qa('[data-dgw-banner]').forEach(function(bar){\r\n      if(bar.__dgwBn) return; bar.__dgwBn=1;\r\n      var memKey=bar.getAttribute('data-dgw-banner');\r\n      if(memKey && bar.getAttribute('data-dismiss-memory')==='1'){\r\n        try{ if(localStorage.getItem('dgw-banner-'+memKey)==='1'){ bar.style.display='none'; return; } }catch(e){}\r\n      }\r\n      qa('[data-dgw-banner-close]',bar).forEach(function(btn){\r\n        on(btn,'click',function(){\r\n          bar.style.display='none';\r\n          if(memKey && bar.getAttribute('data-dismiss-memory')==='1'){\r\n            try{ localStorage.setItem('dgw-banner-'+memKey,'1'); }catch(e){}\r\n          }\r\n        });\r\n      });\r\n      var cd=q('[data-dgw-countdown]',bar);\r\n      if(!cd) return;\r\n      var end=new Date((cd.getAttribute('data-deadline')||'').replace(\u002F-\u002Fg,'\u002F')).getTime();\r\n      if(isNaN(end)) return;\r\n      var action=cd.getAttribute('data-end-action')||'hide';\r\n      var endText=cd.getAttribute('data-end-text')||'活动已结束';\r\n      function tick(){\r\n        var left=end-Date.now();\r\n        if(left\u003C=0){\r\n          if(action==='text'){ cd.textContent=endText; }\r\n          else { bar.style.display='none'; }\r\n          return clearInterval(timer);\r\n        }\r\n        var s=Math.floor(left\u002F1000), dd=Math.floor(s\u002F86400), hh=Math.floor(s%86400\u002F3600), mm=Math.floor(s%3600\u002F60), ss=s%60;\r\n        function p(n){ return (n\u003C10?'0':'')+n; }\r\n        cd.textContent=(dd>0? dd+'天 ':'')+p(hh)+':'+p(mm)+':'+p(ss);\r\n      }\r\n      var timer=setInterval(tick,1000); tick();\r\n    });\r\n\r\n    \u002F\u002F 按钮点击反馈\r\n    qa('[data-dgw-clickfx]').forEach(function(el){\r\n      if(el.__dgwCf) return; el.__dgwCf=1;\r\n      on(el,'click',function(){\r\n        el.style.transform='translateY(1px) scale(.985)';\r\n        setTimeout(function(){ el.style.transform=''; },160);\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 标签页：点击切换 + 方向键\u002FHome\u002FEnd 键盘导航\r\n    qa('[data-dgw-tabs]').forEach(function(box){\r\n      if(box.__dgwTabs) return; box.__dgwTabs=1;\r\n      var btns=qa('[data-dgw-tab]',box), panels=qa('[data-dgw-panel]',box);\r\n      function act(i){\r\n        btns.forEach(function(b,idx){\r\n          var on_=idx===i;\r\n          b.setAttribute('aria-selected',on_?'true':'false');\r\n          b.classList.toggle('is-active',on_);\r\n          b.tabIndex=on_?0:-1;\r\n        });\r\n        panels.forEach(function(pn,idx){ pn.hidden=idx!==i; });\r\n      }\r\n      btns.forEach(function(b,idx){\r\n        on(b,'click',function(){ if(!b.disabled) act(idx); });\r\n        on(b,'keydown',function(e){\r\n          var n=btns.length;\r\n          if(e.key!=='ArrowRight'&&e.key!=='ArrowLeft'&&e.key!=='Home'&&e.key!=='End') return;\r\n          e.preventDefault();\r\n          var t=e.key==='Home'?0:(e.key==='End'?n-1:(e.key==='ArrowRight'?(idx+1)%n:(idx-1+n)%n));\r\n          act(t); if(btns[t]) btns[t].focus();\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 评分：鼠标\u002F键盘选择星级\r\n    qa('[data-dgw-rating]').forEach(function(box){\r\n      if(box.__dgwRt) return; box.__dgwRt=1;\r\n      var stars=qa('.dgw-star',box), max=parseInt(box.getAttribute('data-max')||'5',10)||5;\r\n      function paint(v){ stars.forEach(function(s){ var on_=parseInt(s.getAttribute('data-value')||'0',10)\u003C=v; var i=q('i',s); if(i) i.className='fa '+(on_?'fa-star':'fa-star-o'); }); }\r\n      var cur=parseInt(box.getAttribute('data-value')||'0',10)||0;\r\n      stars.forEach(function(s){\r\n        var v=parseInt(s.getAttribute('data-value')||'0',10);\r\n        on(s,'click',function(){ cur=v; box.setAttribute('data-value',v); paint(v); try{ box.dispatchEvent(new CustomEvent('dgw:rating',{bubbles:true,detail:{value:v}})); }catch(e){} });\r\n        on(s,'mouseenter',function(){ paint(v); });\r\n      });\r\n      on(box,'mouseleave',function(){ paint(cur); });\r\n      box.tabIndex=0;\r\n      on(box,'keydown',function(e){\r\n        if(e.key!=='ArrowRight'&&e.key!=='ArrowLeft') return;\r\n        e.preventDefault();\r\n        cur=Math.max(1,Math.min(max,cur+(e.key==='ArrowRight'?1:-1)));\r\n        box.setAttribute('data-value',cur); paint(cur);\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 文件上传：点击\u002F拖拽选文件、大小校验、删除\r\n    qa('[data-dgw-upload]').forEach(function(box){\r\n      if(box.__dgwUp) return; box.__dgwUp=1;\r\n      var drop=q('[data-dgw-drop]',box), input=q('[data-dgw-fileinput]',box);\r\n      if(!drop||!input) return;\r\n      var maxSize=parseFloat(box.getAttribute('data-max-size')||'0')||0;\r\n      function openPicker(e){ if(e) e.preventDefault(); input.click(); }\r\n      on(drop,'click',openPicker);\r\n      on(drop,'keydown',function(e){ if(e.key==='Enter'||e.key===' '){ openPicker(e); } });\r\n      ['dragenter','dragover'].forEach(function(ev){ on(drop,ev,function(e){ e.preventDefault(); drop.classList.add('is-dragover'); }); });\r\n      ['dragleave','drop'].forEach(function(ev){ on(drop,ev,function(e){ if(e){ e.preventDefault(); } drop.classList.remove('is-dragover'); }); });\r\n      on(input,'change',function(){\r\n        var list=q('.dgw-file-list',box);\r\n        if(!list){ list=d.createElement('ul'); list.className='dgw-file-list'; box.appendChild(list); }\r\n        Array.prototype.slice.call(input.files||[]).forEach(function(f){\r\n          var ok=!maxSize||f.size\u003C=maxSize*1024*1024;\r\n          var li=d.createElement('li'); li.className='dgw-file-item';\r\n          li.innerHTML='\u003Ci class=\"fa '+(ok?'fa-check-circle':'fa-exclamation-circle')+'\" style=\"color:'+(ok?'#10b981':'#e11d48')+'\" aria-hidden=\"true\">\u003C\u002Fi>'\r\n            +'\u003Cspan class=\"dgw-file-name\">\u003C\u002Fspan>\u003Cspan class=\"dgw-file-size\">\u003C\u002Fspan>'\r\n            +'\u003Cbutton type=\"button\" class=\"dgw-file-del\" aria-label=\"删除\">\u003Ci class=\"fa fa-times\" aria-hidden=\"true\">\u003C\u002Fi>\u003C\u002Fbutton>';\r\n          var nm=q('.dgw-file-name',li), sz=q('.dgw-file-size',li), del=q('.dgw-file-del',li);\r\n          if(nm) nm.textContent=f.name;\r\n          if(sz) sz.textContent=(f.size\u002F1024).toFixed(0)+'KB'+(ok?'':' · 超出大小限制');\r\n          if(del) del.setAttribute('aria-label','删除 '+f.name);\r\n          list.appendChild(li);\r\n        });\r\n        input.value='';\r\n      });\r\n      on(box,'click',function(e){\r\n        var btn=(e.target&&e.target.closest)?e.target.closest('.dgw-file-del'):null;\r\n        if(!btn) return;\r\n        var li=btn.closest('.dgw-file-item');\r\n        if(li&&li.parentNode) li.parentNode.removeChild(li);\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 弹窗：按钮\u002F延迟\u002F滚动触发，遮罩与 ESC 关闭\r\n    qa('[data-dgw-modal]').forEach(function(ov){\r\n      if(ov.__dgwMd) return; ov.__dgwMd=1;\r\n      var opened=false;\r\n      function open(){\r\n        ov.style.display=''; ov.classList.add('is-open'); opened=true;\r\n        d.documentElement.style.overflow='hidden';\r\n        var f=q('[data-dgw-modal-close]',ov); if(f&&f.focus) f.focus();\r\n      }\r\n      function close(){\r\n        ov.classList.remove('is-open'); ov.style.display='none'; opened=false;\r\n        d.documentElement.style.overflow='';\r\n      }\r\n      ov.style.display='none';\r\n      var wrap=ov.parentNode||ov;\r\n      qa('[data-dgw-modal-open]',wrap).forEach(function(btn){\r\n        var hover=btn.getAttribute('data-dgw-modal-hover')==='1';\r\n        on(btn,hover?'mouseenter':'click',function(e){ e.preventDefault(); open(); });\r\n      });\r\n      on(ov,'click',function(e){\r\n        if(e.target===ov){ if(ov.getAttribute('data-close-overlay')==='1') close(); return; }\r\n        var c=(e.target&&e.target.closest)?e.target.closest('[data-dgw-modal-close]'):null;\r\n        if(c) close();\r\n      });\r\n      d.addEventListener('keydown',function(e){ if(e.key==='Escape'&&opened&&ov.getAttribute('data-close-esc')==='1') close(); });\r\n      var trig=ov.getAttribute('data-trigger')||'click';\r\n      if(trig==='load'){\r\n        setTimeout(open,(parseFloat(ov.getAttribute('data-open-delay')||'1')||1)*1000);\r\n      } else if(trig==='scroll' && 'IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){\r\n          es.forEach(function(e){ if(e.isIntersecting){ open(); io.disconnect(); } });\r\n        },{threshold:.35});\r\n        io.observe(wrap);\r\n      }\r\n    });\r\n\r\n    \u002F\u002F 消息提示 \u002F 通知：关闭、自动消失、未读点标记已读\r\n    qa('[data-dgw-dismiss]').forEach(function(btn){\r\n      if(btn.__dgwDis) return; btn.__dgwDis=1;\r\n      on(btn,'click',function(e){\r\n        e.preventDefault(); e.stopPropagation();\r\n        var item=(btn.closest)?btn.closest('.dgw-notify-item, .dgw-toast-item, .dgw-toast'):null;\r\n        if(item&&item.parentNode) item.parentNode.removeChild(item);\r\n      });\r\n    });\r\n    qa('[data-dgw-notify-item]').forEach(function(it){\r\n      if(it.__dgwNi) return; it.__dgwNi=1;\r\n      on(it,'click',function(e){\r\n        if(e.target&&e.target.closest&&e.target.closest('[data-dgw-dismiss]')) return;\r\n        var dot=q('[data-dgw-notify-dot]',it); if(dot) dot.style.display='none';\r\n      });\r\n    });\r\n    qa('[data-dgw-notify]').forEach(function(box){\r\n      if(box.__dgwNf) return; box.__dgwNf=1;\r\n      if(box.getAttribute('data-auto-dismiss')!=='1') return;\r\n      var dur=(parseInt(box.getAttribute('data-duration')||'5',10)||5)*1000;\r\n      qa('.dgw-notify-item',box).forEach(function(it){\r\n        var timer=setTimeout(function(){ if(it.parentNode) it.parentNode.removeChild(it); },dur);\r\n        if(box.getAttribute('data-pause-hover')==='1'){\r\n          on(it,'mouseenter',function(){ clearTimeout(timer); });\r\n          on(it,'mouseleave',function(){ timer=setTimeout(function(){ if(it.parentNode) it.parentNode.removeChild(it); },1200); });\r\n        }\r\n      });\r\n    });\r\n    qa('[data-dgw-toast]').forEach(function(box){\r\n      if(box.__dgwTs) return; box.__dgwTs=1;\r\n      if(box.getAttribute('data-auto-close')!=='1') return;\r\n      var dur=(parseInt(box.getAttribute('data-duration')||'3',10)||3)*1000;\r\n      setTimeout(function(){ if(box.parentNode) box.parentNode.removeChild(box); },dur);\r\n    });\r\n\r\n    \u002F\u002F 返回顶部：滚动阈值显示 + 进度环 + 平滑回顶\r\n    qa('[data-dgw-backtop]').forEach(function(btn){\r\n      if(btn.__dgwBt) return; btn.__dgwBt=1;\r\n      var dist=Math.max(0,parseInt(btn.getAttribute('data-distance')||'300',10)||300);\r\n      var ring=q('.dgw-backtop-ring',btn);\r\n      function onScroll(){\r\n        var top=w.pageYOffset||d.documentElement.scrollTop||0;\r\n        var h=Math.max(1,(d.documentElement.scrollHeight-w.innerHeight));\r\n        btn.classList.toggle('is-visible',top>dist);\r\n        if(ring) ring.style.background='conic-gradient(rgba(255,255,255,.5) 0 '+Math.min(100,top\u002Fh*100).toFixed(1)+'%, transparent 0)';\r\n      }\r\n      on(w,'scroll',onScroll); onScroll();\r\n      on(btn,'click',function(){ w.scrollTo({top:0,behavior:'smooth'}); });\r\n    });\r\n\r\n    \u002F\u002F 分页「加载更多」\u002F 无限滚动\r\n    function spin(host,btn,text){\r\n      if(btn){ btn.disabled=true; btn.setAttribute('data-label',btn.textContent||''); btn.textContent=text; }\r\n      if(host) host.setAttribute('aria-busy','true');\r\n    }\r\n    qa('[data-dgw-loadmore]').forEach(function(box){\r\n      if(box.__dgwLm) return; box.__dgwLm=1;\r\n      var btn=q('.dgw-pager-loadmore',box);\r\n      var loading=box.getAttribute('data-loading-text')||'加载中…';\r\n      on(btn,'click',function(){\r\n        spin(box,btn,loading);\r\n        setTimeout(function(){\r\n          if(btn){ btn.disabled=false; btn.textContent=btn.getAttribute('data-label')||'加载更多'; }\r\n          box.removeAttribute('aria-busy');\r\n          try{ box.dispatchEvent(new CustomEvent('dgw:loadmore',{bubbles:true,detail:{page:parseInt(box.getAttribute('data-page')||'1',10)+1}})); }catch(e){}\r\n        },600);\r\n      });\r\n    });\r\n    qa('[data-dgw-infinite]').forEach(function(box){\r\n      if(box.__dgwIf) return; box.__dgwIf=1;\r\n      var tip=q('[data-dgw-infinite-tip]',box);\r\n      var loading=box.getAttribute('data-loading-text')||'加载中…';\r\n      var endText=box.getAttribute('data-end-text')||'';\r\n      if(!('IntersectionObserver' in w)) return;\r\n      var io=new IntersectionObserver(function(es){\r\n        es.forEach(function(e){\r\n          if(!e.isIntersecting) return;\r\n          if(tip) tip.textContent=loading;\r\n          try{ box.dispatchEvent(new CustomEvent('dgw:loadmore',{bubbles:true,detail:{page:parseInt(box.getAttribute('data-page')||'1',10)+1}})); }catch(err){}\r\n          setTimeout(function(){ if(tip&&endText!=='') tip.textContent=endText; },700);\r\n        });\r\n      },{rootMargin:'120px'});\r\n      io.observe(box);\r\n    });\r\n\r\n    \u002F\u002F 数据统计：进入视口数字滚动\r\n    qa('[data-dgw-countup]').forEach(function(el){\r\n      if(el.__dgwCu) return; el.__dgwCu=1;\r\n      var raw=el.getAttribute('data-dgw-countup')||'';\r\n      var m=\u002F^([^\\d\\-+]*)([\\-\\d.]+)(.*)$\u002F.exec(raw);\r\n      if(!m) return;\r\n      var prefix=m[1], target=parseFloat(m[2]), tail=m[3], dec=(m[2].split('.')[1]||'').length;\r\n      var decAttr=el.getAttribute('data-dgw-decimals');\r\n      if(decAttr!==null&&decAttr!==''){ var d0=parseInt(decAttr,10); if(!isNaN(d0)&&d0>=0) dec=Math.min(4,d0); }\r\n      if(isNaN(target)) return;\r\n      var dur=parseInt(el.getAttribute('data-dgw-countup-dur')||'1200',10)||1200;\r\n      function run(){\r\n        var t0=null;\r\n        function step(ts){\r\n          if(t0===null) t0=ts;\r\n          var p=Math.min(1,(ts-t0)\u002Fdur), e=1-Math.pow(1-p,3);\r\n          el.textContent=prefix+(target*e).toFixed(dec)+tail;\r\n          if(p\u003C1) requestAnimationFrame(step);\r\n        }\r\n        requestAnimationFrame(step);\r\n      }\r\n      if('IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ run(); io.unobserve(el); } }); },{threshold:.3});\r\n        io.observe(el);\r\n      } else run();\r\n    });\r\n\r\n    \u002F\u002F 图表：入场动画 + 图例点击切换数据系列\r\n    qa('[data-dgw-chart]').forEach(function(box){\r\n      if(box.__dgwCh) return; box.__dgwCh=1;\r\n      var bars=qa('[data-dgw-bar]',box), dots=qa('[data-dgw-dot]',box), lines=qa('[data-dgw-line]',box);\r\n      bars.forEach(function(b){ if(b.getAttribute('data-h')) b.style.height='0'; });\r\n      function draw(){\r\n        bars.forEach(function(b){ var h=b.getAttribute('data-h'); if(h) b.style.height=h; });\r\n        lines.forEach(function(pl){\r\n          if(!pl.getTotalLength) return;\r\n          var len=pl.getTotalLength(); if(!len) return;\r\n          pl.style.strokeDasharray=len; pl.style.strokeDashoffset=len;\r\n          pl.getBoundingClientRect();\r\n          pl.style.transition='stroke-dashoffset 1.1s ease'; pl.style.strokeDashoffset='0';\r\n        });\r\n        dots.forEach(function(c,i){\r\n          c.style.opacity='0'; c.style.transition='opacity .3s ease';\r\n          setTimeout(function(){ c.style.opacity='1'; },380+i*70);\r\n        });\r\n      }\r\n      if(box.getAttribute('data-animate')==='1'&&'IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ draw(); io.unobserve(box); } }); },{threshold:.2});\r\n        io.observe(box);\r\n      } else draw();\r\n      function toggle(i,off){\r\n        bars.forEach(function(b){ if(parseInt(b.getAttribute('data-index')||'0',10)===i) b.style.opacity=off?'0.12':'1'; });\r\n        dots.forEach(function(b){ if(parseInt(b.getAttribute('data-index')||'0',10)===i) b.style.opacity=off?'0':'1'; });\r\n      }\r\n      qa('[data-dgw-chart-legend]',box).forEach(function(btn){\r\n        on(btn,'click',function(){ toggle(parseInt(btn.getAttribute('data-index')||'0',10), btn.classList.toggle('is-off')); });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 标签：可关闭\r\n    qa('[data-dgw-tag-close]').forEach(function(btn){\r\n      if(btn.__dgwTc) return; btn.__dgwTc=1;\r\n      on(btn,'click',function(e){\r\n        e.preventDefault(); e.stopPropagation();\r\n        var tag=(btn.closest)?btn.closest('.dgw-tag'):btn.parentNode;\r\n        if(tag&&tag.parentNode) tag.parentNode.removeChild(tag);\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 轻提示（复制链接等操作反馈）\r\n    function dgwToast(msg){\r\n      var t=q('[data-dgw-toast-host]');\r\n      if(!t){\r\n        t=d.createElement('div'); t.className='dgw-share-tip';\r\n        t.setAttribute('data-dgw-toast-host',''); t.setAttribute('role','status'); t.setAttribute('aria-live','polite');\r\n        d.body.appendChild(t);\r\n      }\r\n      t.textContent=msg; t.classList.add('is-on');\r\n      clearTimeout(t.__dgwT); t.__dgwT=setTimeout(function(){ t.classList.remove('is-on'); },1800);\r\n    }\r\n    w.__dgwToast=dgwToast;\r\n    function dgwCopy(txt,done){\r\n      function fb(){\r\n        var ta=d.createElement('textarea'); ta.value=txt; ta.setAttribute('readonly','');\r\n        ta.style.position='fixed'; ta.style.opacity='0';\r\n        d.body.appendChild(ta); ta.select();\r\n        try{ d.execCommand('copy'); }catch(e){}\r\n        d.body.removeChild(ta); done();\r\n      }\r\n      if(navigator.clipboard&&navigator.clipboard.writeText){ navigator.clipboard.writeText(txt).then(done,fb); } else fb();\r\n    }\r\n    qa('[data-dgw-copy]').forEach(function(el){\r\n      if(el.__dgwCp) return; el.__dgwCp=1;\r\n      on(el,'click',function(e){\r\n        e.preventDefault();\r\n        var v=el.getAttribute('data-dgw-copy');\r\n        dgwCopy((!v||v==='self')?location.href:v,function(){ dgwToast(el.getAttribute('data-copy-tip')||'链接已复制'); });\r\n      });\r\n    });\r\n    qa('[data-dgw-share]').forEach(function(el){\r\n      if(el.__dgwSh) return; el.__dgwSh=1;\r\n      on(el,'click',function(e){\r\n        if(!navigator.share) return;\r\n        e.preventDefault();\r\n        try{ navigator.share({title:d.title,text:d.title,url:el.getAttribute('data-dgw-share')||location.href}).catch(function(){}); }catch(err){}\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 搜索框：清除、热门词回填、即时搜索占位反馈\r\n    qa('[data-dgw-search]').forEach(function(form){\r\n      if(form.__dgwSb) return; form.__dgwSb=1;\r\n      var input=q('.dgw-search-input',form), clear=q('[data-dgw-search-clear]',form), res=q('.dgw-search-result',form);\r\n      var live=form.getAttribute('data-live')==='1';\r\n      function sync(){ if(clear) clear.hidden=!(input&&input.value); }\r\n      if(input){\r\n        on(input,'input',function(){\r\n          sync();\r\n          if(!live||!res) return;\r\n          var v=input.value.trim();\r\n          if(!v){ res.style.display='none'; res.textContent=''; return; }\r\n          res.style.display='block'; res.textContent=form.getAttribute('data-searching')||'搜索中…';\r\n          clearTimeout(form.__dgwT);\r\n          form.__dgwT=setTimeout(function(){ res.textContent=form.getAttribute('data-empty')||'没有找到相关内容'; },600);\r\n        });\r\n        on(input,'keydown',function(e){\r\n          if(e.key!=='Escape'||!clear) return;\r\n          input.value=''; sync();\r\n          if(res){ res.style.display='none'; res.textContent=''; }\r\n        });\r\n      }\r\n      if(clear) on(clear,'click',function(){\r\n        if(input){ input.value=''; input.focus(); }\r\n        sync();\r\n        if(res){ res.style.display='none'; res.textContent=''; }\r\n      });\r\n      qa('[data-dgw-search-word]',form).forEach(function(word){\r\n        on(word,'click',function(e){\r\n          e.preventDefault();\r\n          if(!input) return;\r\n          input.value=word.textContent||''; sync();\r\n          if(live&&res){ res.style.display='block'; res.textContent=form.getAttribute('data-empty')||'没有找到相关内容'; }\r\n        });\r\n      });\r\n      sync();\r\n    });\r\n\r\n    \u002F\u002F 筛选栏：单选\u002F多选切换、清空、应用事件\r\n    qa('[data-dgw-filter]').forEach(function(box){\r\n      if(box.__dgwFt) return; box.__dgwFt=1;\r\n      var multi=box.getAttribute('data-multi')==='1';\r\n      qa('[data-dgw-filter-option]',box).forEach(function(btn){\r\n        on(btn,'click',function(){\r\n          var on_=btn.getAttribute('aria-pressed')==='true';\r\n          if(!multi){ qa('[data-dgw-filter-option]',box).forEach(function(o){ o.setAttribute('aria-pressed','false'); }); }\r\n          btn.setAttribute('aria-pressed',on_?'false':'true');\r\n        });\r\n      });\r\n      qa('[data-dgw-filter-clear]',box).forEach(function(b){\r\n        on(b,'click',function(){ qa('[data-dgw-filter-option]',box).forEach(function(o){ o.setAttribute('aria-pressed','false'); }); });\r\n      });\r\n      qa('[data-dgw-filter-apply]',box).forEach(function(b){\r\n        on(b,'click',function(){\r\n          var vals=qa('[data-dgw-filter-option][aria-pressed=\"true\"]',box).map(function(o){ return o.getAttribute('data-value')||''; });\r\n          try{ box.dispatchEvent(new CustomEvent('dgw:filter-apply',{bubbles:true,detail:{values:vals}})); }catch(e){}\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 排序控件：按钮组互斥选中\r\n    qa('[data-dgw-sort]').forEach(function(box){\r\n      if(box.__dgwSo) return; box.__dgwSo=1;\r\n      qa('[data-dgw-sort-btn]',box).forEach(function(btn){\r\n        on(btn,'click',function(){\r\n          qa('[data-dgw-sort-btn]',box).forEach(function(o){ o.classList.remove('is-active'); o.setAttribute('aria-pressed','false'); });\r\n          btn.classList.add('is-active'); btn.setAttribute('aria-pressed','true');\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 数据表格：全选联动 + 表头点击排序\r\n    qa('[data-dgw-table]').forEach(function(box){\r\n      if(box.__dgwTb) return; box.__dgwTb=1;\r\n      var all=q('[data-dgw-table-all]',box), rows=qa('[data-dgw-table-row]',box);\r\n      function syncAll(){\r\n        if(!all) return;\r\n        all.checked=rows.length>0&&rows.every(function(r){ return r.checked; });\r\n      }\r\n      if(all) on(all,'change',function(){ rows.forEach(function(r){ r.checked=all.checked; }); });\r\n      rows.forEach(function(r){ on(r,'change',syncAll); });\r\n      var asc={};\r\n      qa('[data-dgw-table-sort]',box).forEach(function(btn,cIdx){\r\n        on(btn,'click',function(){\r\n          var table=q('.dgw-table',box), tbody=table?q('tbody',table):null;\r\n          if(!tbody) return;\r\n          asc[cIdx]=!asc[cIdx];\r\n          var col=cIdx+1+(all?1:0);\r\n          var list=qa('tr',tbody).filter(function(tr){ return !q('.dgw-table-empty',tr); });\r\n          list.sort(function(a,b){\r\n            var ca=q('td:nth-child('+col+')',a), cb=q('td:nth-child('+col+')',b);\r\n            var va=ca?ca.textContent.trim():'', vb=cb?cb.textContent.trim():'';\r\n            var na=parseFloat(va.replace(\u002F[^\\d.\\-]\u002Fg,'')), nb=parseFloat(vb.replace(\u002F[^\\d.\\-]\u002Fg,''));\r\n            var cmp=(!isNaN(na)&&!isNaN(nb))?na-nb:va.localeCompare(vb,'zh-CN');\r\n            return asc[cIdx]?cmp:-cmp;\r\n          });\r\n          list.forEach(function(tr){ tbody.appendChild(tr); });\r\n          qa('[data-dgw-table-sort]',box).forEach(function(o,i){\r\n            var th=o.closest?o.closest('th'):null;\r\n            if(th) th.setAttribute('aria-sort', i===cIdx?(asc[cIdx]?'ascending':'descending'):'none');\r\n          });\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 导航栏：移动端抽屉开合\r\n    qa('[data-dgw-navtoggle]').forEach(function(btn){\r\n      if(btn.__dgwNv) return; btn.__dgwNv=1;\r\n      var bar=btn.closest?btn.closest('.dgw-navbar'):null;\r\n      var drawer=bar?q('[data-dgw-navdrawer]',bar):null;\r\n      if(!drawer) return;\r\n      function setOpen(open){\r\n        drawer.classList.toggle('is-open',open);\r\n        btn.setAttribute('aria-expanded',open?'true':'false');\r\n        d.body.style.overflow=open?'hidden':'';\r\n      }\r\n      on(btn,'click',function(){ setOpen(!drawer.classList.contains('is-open')); });\r\n      qa('[data-dgw-navclose]',drawer).forEach(function(c){ on(c,'click',function(){ setOpen(false); }); });\r\n      qa('a[href]',drawer).forEach(function(a){ on(a,'click',function(){ if(a.getAttribute('href')!=='#') setOpen(false); }); });\r\n      on(d,'keydown',function(e){ if((e.key==='Escape'||e.keyCode===27)&&drawer.classList.contains('is-open')) setOpen(false); });\r\n      on(w,'resize',function(){ if(w.innerWidth>640&&drawer.classList.contains('is-open')) setOpen(false); });\r\n    });\r\n\r\n    \u002F\u002F 导航栏二级菜单：键盘聚焦与触摸设备展开（桌面仍以悬停样式为主）\r\n    qa('[data-dgw-navsub]').forEach(function(item){\r\n      if(item.__dgwNs) return; item.__dgwNs=1;\r\n      var delay=parseInt(item.getAttribute('data-delay')||'120',10);\r\n      if(isNaN(delay)||delay\u003C0) delay=120;\r\n      var timer=null;\r\n      function open(){ if(timer) clearTimeout(timer); item.classList.add('is-open'); }\r\n      function close(){ if(timer) clearTimeout(timer); timer=setTimeout(function(){ item.classList.remove('is-open'); },delay); }\r\n      on(item,'mouseenter',open);\r\n      on(item,'mouseleave',close);\r\n      on(item,'focusin',open);\r\n      on(item,'focusout',close);\r\n      on(d,'keydown',function(e){ if(e.key==='Escape'||e.keyCode===27) item.classList.remove('is-open'); });\r\n    });\r\n\r\n    \u002F\u002F 浮动分享栏：滚动后出现\r\n    qa('[data-dgw-share-float]').forEach(function(box){\r\n      if(box.__dgwSf) return; box.__dgwSf=1;\r\n      function upd(){\r\n        var y=w.pageYOffset||d.documentElement.scrollTop||0;\r\n        var shortPage=d.documentElement.scrollHeight\u003C=w.innerHeight+80;\r\n        box.classList.toggle('is-show', y>200||shortPage);\r\n      }\r\n      on(w,'scroll',upd);\r\n      upd();\r\n    });\r\n\r\n    \u002F\u002F 侧边导航：折叠 \u002F 展开\r\n    qa('[data-dgw-sidebartoggle]').forEach(function(btn){\r\n      if(btn.__dgwSb) return; btn.__dgwSb=1;\r\n      var box=btn.closest?btn.closest('[data-dgw-sidebar]'):null;\r\n      if(!box) return;\r\n      on(btn,'click',function(){\r\n        var off=box.classList.toggle('dgw-sidebar--collapsed');\r\n        btn.setAttribute('aria-expanded',off?'false':'true');\r\n        var ic=q('i',btn);\r\n        if(ic&&ic.className){\r\n          var to=off?'fa-angle-right':'fa-angle-left';\r\n          var from=off?'fa-angle-left':'fa-angle-right';\r\n          if(ic.className.indexOf('fa-angle-left')\u003C0&&ic.className.indexOf('fa-angle-right')\u003C0){ from=''; }\r\n          ic.className=from?ic.className.replace(from,to):(ic.className+' '+to);\r\n        }\r\n        try{ w.dispatchEvent(new CustomEvent('dgw:sidebar-toggle',{detail:{collapsed:off}})); }catch(e){}\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 锚点导航：平滑滚动 + 滚动高亮 + 阅读进度\r\n    qa('[data-dgw-anchors]').forEach(function(nav){\r\n      if(nav.__dgwAn) return; nav.__dgwAn=1;\r\n      var offset=parseInt(nav.getAttribute('data-offset')||'80',10)||0;\r\n      var smooth=nav.getAttribute('data-smooth')!=='0';\r\n      var spy=nav.getAttribute('data-spy')!=='0';\r\n      var links=qa('[data-dgw-anchor]',nav);\r\n      var bar=q('[data-dgw-anchor-progress]',nav);\r\n      function sec(id){ return id?d.getElementById(id):null; }\r\n      function mark(id){\r\n        links.forEach(function(a){ a.classList.toggle('dgw-active',a.getAttribute('data-dgw-anchor')===id); });\r\n      }\r\n      links.forEach(function(a){\r\n        on(a,'click',function(e){\r\n          var t=sec(a.getAttribute('data-dgw-anchor'));\r\n          if(!t){ return; }\r\n          e.preventDefault();\r\n          var y=w.pageYOffset||d.documentElement.scrollTop||0;\r\n          var top=t.getBoundingClientRect().top+y-offset;\r\n          if(smooth){ try{ w.scrollTo({top:Math.max(0,top),behavior:'smooth'}); }catch(err){ w.scrollTo(0,Math.max(0,top)); } }\r\n          else{ w.scrollTo(0,Math.max(0,top)); }\r\n          mark(a.getAttribute('data-dgw-anchor'));\r\n          if(history.replaceState){ try{ history.replaceState(null,'','#'+a.getAttribute('data-dgw-anchor')); }catch(err2){} }\r\n        });\r\n      });\r\n      function upd(){\r\n        if(bar){\r\n          var doc=d.documentElement;\r\n          var max=(doc.scrollHeight-w.innerHeight)||1;\r\n          var y=w.pageYOffset||doc.scrollTop||0;\r\n          bar.style.width=Math.min(100,Math.max(0,y\u002Fmax*100))+'%';\r\n        }\r\n        if(!spy||!links.length) return;\r\n        var cur=null, best=-1e9;\r\n        links.forEach(function(a){\r\n          var t=sec(a.getAttribute('data-dgw-anchor'));\r\n          if(!t) return;\r\n          var top=t.getBoundingClientRect().top-offset;\r\n          if(top\u003C=4&&top>best){ best=top; cur=a.getAttribute('data-dgw-anchor'); }\r\n        });\r\n        if(!cur) cur=links[0].getAttribute('data-dgw-anchor');\r\n        mark(cur);\r\n      }\r\n      on(w,'scroll',upd);\r\n      upd();\r\n    });\r\n\r\n    \u002F\u002F 排行榜：占比条从 0 展开\r\n    qa('[data-dgw-rankbar]').forEach(function(el){\r\n      if(el.__dgwRb) return; el.__dgwRb=1;\r\n      var pct=parseFloat(el.getAttribute('data-dgw-rankbar')||'0')||0;\r\n      function run(){\r\n        el.style.width='0%';\r\n        el.getBoundingClientRect();\r\n        el.style.width=pct+'%';\r\n      }\r\n      if('IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ run(); io.unobserve(el); } }); },{threshold:.25});\r\n        io.observe(el);\r\n      } else run();\r\n    });\r\n\r\n    \u002F\u002F 仪表盘：弧线扫过 + 数值滚动\r\n    qa('[data-dgw-gauge]').forEach(function(arc){\r\n      if(arc.__dgwGa) return; arc.__dgwGa=1;\r\n      var pct=parseFloat(arc.getAttribute('data-dgw-gauge')||'0')||0;\r\n      var svg=arc.closest?arc.closest('svg'):null;\r\n      var txt=svg?q('[data-dgw-gauge-text]',svg):null;\r\n      function countText(){\r\n        if(!txt) return;\r\n        var raw=parseFloat(txt.getAttribute('data-value')||'0');\r\n        if(isNaN(raw)) return;\r\n        var unit=txt.getAttribute('data-unit')||'';\r\n        var dec=parseInt(txt.getAttribute('data-dec')||'0',10)||0;\r\n        var t0=null;\r\n        function step(ts){\r\n          if(t0===null) t0=ts;\r\n          var p=Math.min(1,(ts-t0)\u002F900), e=1-Math.pow(1-p,3);\r\n          txt.textContent=(raw*e).toFixed(dec)+unit;\r\n          if(p\u003C1) requestAnimationFrame(step);\r\n        }\r\n        requestAnimationFrame(step);\r\n      }\r\n      function run(){\r\n        arc.getBoundingClientRect();\r\n        arc.setAttribute('stroke-dasharray',pct+' 100');\r\n        countText();\r\n      }\r\n      if('IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ run(); io.unobserve(arc); } }); },{threshold:.25});\r\n        io.observe(arc);\r\n      } else run();\r\n    });\r\n\r\n    \u002F\u002F 进度条：线性 \u002F 环形 \u002F 步骤 入场动画\r\n    qa('[data-dgw-progress]').forEach(function(box){\r\n      if(box.__dgwPb) return; box.__dgwPb=1;\r\n      var kind=box.getAttribute('data-dgw-progress');\r\n      var val=parseFloat(box.getAttribute('data-value')||'0')||0;\r\n      var fill=q('.dgw-progress i',box), circle=q('.dgw-progress-circle',box);\r\n      var steps=qa('.dgw-step',box);\r\n      var doneCount=steps.filter(function(s){ return s.classList.contains('is-done'); }).length;\r\n      function run(){\r\n        if(fill){\r\n          var target=fill.style.width||'';\r\n          if(target){\r\n            fill.style.width='0%'; fill.getBoundingClientRect();\r\n            fill.style.width=target;\r\n          }\r\n        }\r\n        if(circle){\r\n          var c=box.getAttribute('data-color')||'#1f4fa3', t=box.getAttribute('data-track')||'#eef1f5';\r\n          circle.style.background='conic-gradient('+c+' 0, '+c+' 0, '+t+' 0)';\r\n          circle.getBoundingClientRect();\r\n          circle.style.transition='background .9s ease';\r\n          circle.style.background='conic-gradient('+c+' calc('+val+'% * 1), '+t+' 0)';\r\n        }\r\n        if(kind==='step'&&steps.length){\r\n          steps.forEach(function(s){ s.classList.remove('is-done'); });\r\n          var shown=doneCount;\r\n          var cur=setInterval(function(){\r\n            if(shown\u003C=0){ clearInterval(cur); return; }\r\n            steps[--shown].classList.add('is-done');\r\n          },160);\r\n        }\r\n      }\r\n      if('IntersectionObserver' in w){\r\n        var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ run(); io.unobserve(box); } }); },{threshold:.25});\r\n        io.observe(box);\r\n      } else run();\r\n    });\r\n\r\n    \u002F\u002F 分享按钮：系统分享 → 复制链接兜底\r\n    qa('[data-dgw-share-item]').forEach(function(el){\r\n      if(el.__dgwSi) return; el.__dgwSi=1;\r\n      if(el.tagName==='A'&&el.getAttribute('href')&&el.getAttribute('href')!=='#') return;\r\n      on(el,'click',function(e){\r\n        var name=el.getAttribute('data-dgw-share-item')||'';\r\n        var wrap=el.closest?el.closest('.dgw-share'):null;\r\n        var tip=wrap?q('[data-dgw-share-tip]',wrap):null;\r\n        var url=w.location.href, title=d.title||'';\r\n        function feedback(){\r\n          if(tip){\r\n            tip.textContent='链接已复制，可分享到'+(name||'好友');\r\n            tip.classList.add('is-on');\r\n            clearTimeout(tip.__dgwSt);\r\n            tip.__dgwSt=setTimeout(function(){ tip.classList.remove('is-on'); },1800);\r\n          } else dgwToast(name?('已复制链接，可分享到'+name):'链接已复制');\r\n        }\r\n        if(navigator.share&&typeof navigator.share==='function'){\r\n          e.preventDefault();\r\n          try{ navigator.share({title:title,text:title,url:url}).catch(function(){}); }catch(err){ feedback(); }\r\n          return;\r\n        }\r\n        e.preventDefault();\r\n        dgwCopy(url,feedback);\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 加载态：重试按钮复位为加载中\r\n    qa('[data-dgw-loading]').forEach(function(box){\r\n      if(box.__dgwLd) return; box.__dgwLd=1;\r\n      qa('.dgw-loading-retry',box).forEach(function(btn){\r\n        on(btn,'click',function(){\r\n          box.setAttribute('aria-busy','true');\r\n          var ic=q('.dgw-loading-error-icon',box);\r\n          if(ic) ic.className='fa fa-spinner fa-spin dgw-loading-icon';\r\n          var t=q('.dgw-loading-text',box);\r\n          if(t) t.textContent=t.getAttribute('data-loading-text')||'加载中…';\r\n          btn.style.display='none';\r\n          try{ box.dispatchEvent(new CustomEvent('dgw:loading-retry',{bubbles:true})); }catch(e){}\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 分页：派发翻页事件（静态站点不拦截默认跳转）\r\n    qa('[data-dgw-page-size]').forEach(function(nav){\r\n      if(nav.__dgwPg) return; nav.__dgwPg=1;\r\n      var size=parseInt(nav.getAttribute('data-dgw-page-size')||'0',10)||0;\r\n      qa('.dgw-pager-item',nav).forEach(function(a){\r\n        on(a,'click',function(){\r\n          var m=\u002F[?&]page=(\\d+)\u002F.exec(a.getAttribute('href')||'');\r\n          var page=m?parseInt(m[1],10):1;\r\n          try{ nav.dispatchEvent(new CustomEvent('dgw:page-change',{bubbles:true,detail:{page:page,page_size:size}})); }catch(e){}\r\n        });\r\n      });\r\n    });\r\n\r\n    \u002F\u002F 表单：必填校验 + 提交反馈（novalidate 下自行校验）\r\n    qa('[data-dgw-form]').forEach(function(form){\r\n      if(form.__dgwFm) return; form.__dgwFm=1;\r\n      var demo=form.getAttribute('data-demo')==='1';\r\n      var msg=q('.dgw-form-msg',form);\r\n      var okText=form.getAttribute('data-success')||'提交成功';\r\n      var badText=form.getAttribute('data-error')||'提交失败';\r\n      function say(text,pass){\r\n        if(!msg) return;\r\n        msg.textContent=text;\r\n        msg.className='dgw-form-msg '+(pass?'is-success':'is-error');\r\n        msg.style.display='block';\r\n      }\r\n      function check(){\r\n        var bad=[];\r\n        qa('[required]',form).forEach(function(el){\r\n          var v=(el.value||'').replace(\u002F^\\s+|\\s+$\u002Fg,'');\r\n          var pass=v!=='';\r\n          if(pass&&el.type==='email') pass=\u002F^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\u002F.test(v);\r\n          if(pass&&el.type==='tel') pass=\u002F^[\\d\\s+\\-()]{6,}$\u002F.test(v);\r\n          el.setAttribute('aria-invalid',pass?'false':'true');\r\n          if(!pass) bad.push(el);\r\n        });\r\n        return bad;\r\n      }\r\n      on(form,'submit',function(e){\r\n        e.preventDefault();\r\n        var bad=check();\r\n        if(bad.length){ say(badText,false); if(bad[0].focus) bad[0].focus(); return; }\r\n        if(!demo){\r\n          \u002F\u002F 真实提交：fetch 到 action 接口（action 上的查询参数如 form_code=xx 会并入请求体）\r\n          var action=(form.getAttribute('action')||'').replace(\u002F^javascript:;?\u002F,'');\r\n          if(!action){ say('未配置提交地址',false); return; }\r\n          var btn=q('button[type=\"submit\"]',form);\r\n          var old=btn?btn.textContent:'';\r\n          if(btn){ btn.disabled=true; btn.textContent=btn.getAttribute('data-loading-text')||'提交中…'; }\r\n          var url=action+(action.indexOf('?')\u003C0?'?':'&')+'server=1';\r\n          var fd=new FormData(form);\r\n          try{\r\n            var qmark=url.split('?')[1]||'';\r\n            qmark.replace(\u002Fserver=1&?\u002F,'').split('&').forEach(function(kv){\r\n              if(!kv) return;\r\n              var p=kv.split('='); var k=decodeURIComponent(p[0]||'');\r\n              if(k && !fd.has(k)) fd.set(k,decodeURIComponent(p.slice(1).join('=')||''));\r\n            });\r\n            fd.set('source_url',location.href);\r\n          }catch(err){}\r\n          fetch(url,{method:'POST',body:fd,headers:{'Accept':'application\u002Fjson'}}).then(function(r){return r.json()})\r\n            .then(function(j){\r\n              if(btn){ btn.disabled=false; btn.textContent=old; }\r\n              if(j&&j.code===1){ form.reset(); say((j&&j.msg)||okText,true); try{ form.dispatchEvent(new CustomEvent('dgw:form-submit',{bubbles:true})); }catch(e2){} }\r\n              else{ say((j&&j.msg)||badText,false); }\r\n            })\r\n            .catch(function(){ if(btn){ btn.disabled=false; btn.textContent=old; } say(badText,false); });\r\n          return;\r\n        }\r\n        var btn=q('button[type=\"submit\"]',form);\r\n        var old=btn?btn.textContent:'';\r\n        if(btn){ btn.disabled=true; btn.textContent=btn.getAttribute('data-loading-text')||'提交中…'; }\r\n        setTimeout(function(){\r\n          if(btn){ btn.disabled=false; btn.textContent=old; }\r\n          say(okText,true);\r\n          try{ form.dispatchEvent(new CustomEvent('dgw:form-submit',{bubbles:true})); }catch(err2){}\r\n        },700);\r\n      });\r\n      on(form,'reset',function(){\r\n        if(msg){ msg.style.display='none'; msg.textContent=''; }\r\n        qa('[aria-invalid]',form).forEach(function(el){ el.removeAttribute('aria-invalid'); });\r\n      });\r\n    });\r\n  }\r\n\r\n  w.__dgwBoot=boot;\r\n  if(d.readyState==='loading') d.addEventListener('DOMContentLoaded',boot); else boot();\r\n})();\u003C\u002Fscript>",40,"1970-01-01 00:00:00","2026-09-28 22:39:07","2026-09-29 12:51:24",1790836152982]