{"id":10259,"date":"2026-05-27T11:57:32","date_gmt":"2026-05-27T03:57:32","guid":{"rendered":"https:\/\/group.qa1.hashkeydev.com\/?page_id=10259"},"modified":"2026-08-08T09:49:46","modified_gmt":"2026-08-08T01:49:46","slug":"careers","status":"publish","type":"page","link":"https:\/\/group.hashkey.com\/zh\/careers\/","title":{"rendered":"\u8077\u4f4d\u6a5f\u6703"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10259\" class=\"elementor elementor-10259\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96875c5 e-flex e-con-boxed e-con e-parent\" data-id=\"96875c5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;video&quot;,&quot;background_video_link&quot;:&quot;https:\\\/\\\/group-oss.hashkeydev.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/cgt-20260618154920-g4cnr-1.mp4&quot;,&quot;background_play_on_mobile&quot;:&quot;yes&quot;,&quot;animation&quot;:&quot;none&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-background-video-container\">\n\t\t\t\t\t\t\t<video class=\"elementor-background-video-hosted\" role=\"presentation\" autoplay muted playsinline loop><\/video>\n\t\t\t\t\t<\/div><div class=\"elementor-element elementor-element-26f2b62 e-con-full animated-slow e-flex e-con e-child\" data-id=\"26f2b62\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;none&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-1a8b97d e-con-full e-flex e-con e-child\" data-id=\"1a8b97d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-054a607 elementor-widget__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"054a607\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Be Part of<br>\nWhat Defines Tomorrow<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af36608 elementor-widget__width-initial elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"af36608\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>We&#8217;re looking for bold thinkers and driven achievers to join us in shaping the next generation of the digital economy.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7acb375 btn elementor-invisible elementor-widget elementor-widget-button\" data-id=\"7acb375\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:250}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/group.hashkey.com\/category\/roles\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">View Open Roles<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-82db013 e-flex e-con-boxed e-con e-parent\" data-id=\"82db013\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0521c37 elementor-widget elementor-widget-menu-anchor\" data-id=\"0521c37\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"why-join-us\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fe27989 e-con-full e-flex e-con e-child\" data-id=\"fe27989\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c7d0ff5 elementor-widget__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"c7d0ff5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why Join Us<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5efaf27 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"5efaf27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>At HashKey, we are committed to the long-term development of digital finance. We bring together top talent from finance, technology, and blockchain to build a trusted, innovative, and future-ready digital asset ecosystem.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-feb171a e-con-full e-flex e-con e-child\" data-id=\"feb171a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-93f5cd8 e-con-full _card_7w1l5_10 e-flex e-con e-child\" data-id=\"93f5cd8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b265c8 elementor-widget elementor-widget-text-editor\" data-id=\"8b265c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<article class=\"_card_7w1l5_10\"><p class=\"_cardText_7w1l5_55\">Contribute to Web3 initiatives with global impact<\/p><\/article>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0aefdd4 e-con-full _card_7w1l5_10 e-flex e-con e-child\" data-id=\"0aefdd4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b80eb3 elementor-widget elementor-widget-text-editor\" data-id=\"0b80eb3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<article class=\"_card_7w1l5_10\"><article class=\"_card_p0f42_10\"><p class=\"_cardText_p0f42_28\">Learn and grow alongside industry leaders and experts<\/p><\/article><\/article>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b11d37e e-con-full _card_7w1l5_10 e-flex e-con e-child\" data-id=\"b11d37e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ebcdb9c elementor-widget elementor-widget-text-editor\" data-id=\"ebcdb9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<article class=\"_card_7w1l5_10\"><article class=\"_card_p0f42_10\"><p class=\"_cardText_p0f42_28\">Thrive in an open, inclusive, and high-performance culture<\/p><\/article><\/article>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-31b4f93 e-con-full e-flex e-con e-parent\" data-id=\"31b4f93\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6141718 c_hr elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"6141718\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e2fbfbc e-flex e-con-boxed e-con e-parent\" data-id=\"e2fbfbc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50a13fa elementor-widget elementor-widget-menu-anchor\" data-id=\"50a13fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"careers-at-hashkey\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e9b661c e-con-full e-flex e-con e-child\" data-id=\"e9b661c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16102e1 elementor-widget__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"16102e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Careers At HashKey<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3aeb8c1 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"3aeb8c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>We offer diverse career pathways for talent at every stage and from every background.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-14665de e-con-full e-flex e-con e-child\" data-id=\"14665de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2de1079 btn elementor-widget elementor-widget-button\" data-id=\"2de1079\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/group.hashkey.com\/category\/roles\/?type=Full-time\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Experienced Professionals<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5517b11 btn elementor-widget elementor-widget-button\" data-id=\"5517b11\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/group.hashkey.com\/category\/roles\/?type=Internship\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Internship Programmes<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5559b4 btn elementor-widget elementor-widget-button\" data-id=\"f5559b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/group.hashkey.com\/category\/roles\/?category=CEO%20Office\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Management Trainee Programme<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d9e13fe e-con-full e-flex e-con e-parent\" data-id=\"d9e13fe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8244c9 c_hr elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"e8244c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-78bd2b8 e-flex e-con-boxed e-con e-parent\" data-id=\"78bd2b8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4fae6f0 e-con e-atomic-element e-div-block-base e-4fae6f0-c9bf452 \" data-id=\"4fae6f0\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4fae6f0\" id=\"globe-root\" data-e-type=\"e-div-block\" data-id=\"4fae6f0\">\n    <section class=\"elementor-element elementor-element-0afc520 e-con e-atomic-element e-div-block-base globe-panel \" data-id=\"0afc520\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"0afc520\" data-e-type=\"e-div-block\" data-id=\"0afc520\" aria-labelledby=\"globe-title\">\n    <div class=\"elementor-element elementor-element-4be52db e-con e-atomic-element e-div-block-base globe-left \" data-id=\"4be52db\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4be52db\" data-e-type=\"e-div-block\" data-id=\"4be52db\">\n    <div class=\"elementor-element elementor-element-80b6815 e-con e-atomic-element e-div-block-base globe-header \" data-id=\"80b6815\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"80b6815\" data-e-type=\"e-div-block\" data-id=\"80b6815\">\n    \t\t\t<h2 data-interaction-id=\"3b24931\" class=\"section-title e-heading-base\" id=\"globe-title\" data-e-type=\"widget\" data-id=\"3b24931\"><strong id=\"e-mqja39nl-0xb7cf0\">Work Across Global Markets<\/strong><\/h2>\n\t\t\t\t\t<p class=\"section-lead e-paragraph-base\" data-interaction-id=\"dcad4b4\" data-e-type=\"widget\" data-id=\"dcad4b4\">Our teams operate across key financial and digital asset hubs.<\/p>\n\t\t\n<\/div>\n<article class=\"elementor-element elementor-element-eb829b2 e-con e-atomic-element e-div-block-base globe-info \" data-id=\"eb829b2\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"eb829b2\" data-e-type=\"e-div-block\" data-id=\"eb829b2\">\n    \t\t\t<p class=\"globe-eyebrow e-paragraph-base\" data-interaction-id=\"99178d9\" data-e-type=\"widget\" data-id=\"99178d9\">CURRENT HUB<\/p>\n\t\t<div class=\"elementor-element elementor-element-6fba63a e-con e-atomic-element e-div-block-base globe-city-list \" data-id=\"6fba63a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"6fba63a\" data-e-type=\"e-div-block\" data-id=\"6fba63a\" aria-label=\"Select global hub\">\n    \t\t\t<button class=\"globe-city-btn e-5b2d7d4-750ef79 e-button-base\" data-interaction-id=\"5b2d7d4\" data-e-type=\"widget\" data-id=\"5b2d7d4\" filter=\"Hong Kong\" lng=\"114.1694\" lat=\"22.3193\">\n\t\tHong Kong\n\t<\/button>\t\t\t\t\t<button class=\"globe-city-btn e-button-base\" data-interaction-id=\"2e0a1cd\" data-e-type=\"widget\" data-id=\"2e0a1cd\" filter=\"Singapore\" lng=\"103.8198\" lat=\"1.3521\">\n\t\tSingapore\n\t<\/button>\t\t\t\t\t<button class=\"globe-city-btn e-button-base\" data-interaction-id=\"63e534e\" data-e-type=\"widget\" data-id=\"63e534e\" filter=\"Dubai\" lng=\"55.2708\" lat=\"25.2048\">\n\t\tDubai\n\t<\/button>\t\t\t\t\t<button class=\"globe-city-btn e-button-base\" data-interaction-id=\"fff96cd\" data-e-type=\"widget\" data-id=\"fff96cd\" filter=\"Tokyo\" lng=\"139.6503\" lat=\"35.6762\">\n\t\tTokyo\n\t<\/button>\t\t\t\t\t<button class=\"globe-city-btn e-button-base\" data-interaction-id=\"e3ae902\" data-e-type=\"widget\" data-id=\"e3ae902\" filter=\"Malaysia\" lng=\"101.6869\" lat=\"3.139\">\n\t\tMalaysia\n\t<\/button>\t\t\n<\/div>\n\t\t\t<a href=\"#\" target=\"_blank\" class=\"e-010ae23-788fbb4 globe-cta e-button-base\" data-interaction-id=\"010ae23\" id=\"globe-cta-link\" data-e-type=\"widget\" data-id=\"010ae23\" rel=\"noopener noreferrer\">\n\t\tView Opportunities\n\t<\/a>\t\t\n<\/article>\n\n<\/div>\n<div class=\"elementor-element elementor-element-f42fee1 e-con e-atomic-element e-div-block-base globe-stage \" data-id=\"f42fee1\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"f42fee1\" data-e-type=\"e-div-block\" data-id=\"f42fee1\">\n    \n<\/div>\n\n<\/section>\n\n<\/div>\n\t\t<div class=\"elementor-element elementor-element-fd50999 elementor-widget elementor-widget-html\" data-id=\"fd50999\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n:root{--color-rhine:#0052ff;--color-rhine-light:#3d7bff;--color-rhine-dark:#003fcc;--color-rhine-glow:rgba(0,82,255,0.45);--color-navy:#06101f;--color-black:#000000;--color-ice:#d4e4ff;--color-gray-blue:#9eb4d4;--color-cyan:#00d4ff;--color-electric:#4d9fff;--color-white:#ffffff;--color-text:rgba(255,255,255,0.5);--font-title-size:38px;--font-title-weight:300;--font-title-color:#ffffff;--font-body-size:16px;--font-body-weight:300;--font-body-color:rgba(255,255,255,0.5);--font-weight-light:300;--font-weight-regular:400;--max-width:1280px;--container-gutter:1.25rem;--section-pad:clamp(2.75rem,6vw,6.5rem);--ease-out:cubic-bezier(0.22,1,0.36,1);--ease-smooth:cubic-bezier(0.4,0,0.2,1)}\r\n@media (min-width:640px){\r\n  :root{--container-gutter:1.75rem}\r\n}\r\n@media (min-width:1024px){\r\n  :root{--container-gutter:2.5rem;--section-pad:clamp(4rem,8vw,6.5rem)}\r\n}\r\n@media(max-width: 1024px){\r\n  :root{--font-title-size:2.4vw;}\r\n}\r\n@media(max-width: 767px){\r\n  :root{--font-title-size:24px;--font-body-size: 13px;}\r\n}\r\n#globe-root{padding: 0;}\r\n#globe-root *,\r\n#globe-root *::before,\r\n#globe-root *::after{box-sizing:border-box;margin:0;padding:0;}\r\nbody{font-size:var(--font-body-size);font-weight:var(--font-body-weight);line-height:1.55;color:var(--font-body-color);background:var(--color-black);-webkit-font-smoothing:antialiased;overflow-x:hidden}\r\n#globe-root h2{font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--font-title-color);line-height:1.15;letter-spacing:-0.02em}\r\n#globe-root a{color:inherit;text-decoration:none}\r\n#globe-root button{font-family:inherit;cursor:pointer;border:none;background:none}\r\n#globe-root .section-title{font-size:var(--font-title-size);font-weight:var(--font-title-weight);line-height:1.15;letter-spacing:-0.02em;color:var(--font-title-color)}\r\n#globe-root .section-lead{margin-top:1.375rem;max-width:44rem;font-size:var(--font-body-size);font-weight:var(--font-body-weight);line-height:1.55;color:var(--font-body-color)}\r\n#globe-root .globe-panel{margin-top:0;background:transparent;border:none;width:100%;position:relative}\r\n#globe-root .globe-left{display:flex;flex-direction:column;gap:clamp(2rem,4vw,3rem);width:100%}\r\n#globe-root .globe-header{text-align:left;width:100%;display: block;}\r\n#globe-root .globe-info{max-width:22rem;width:100%;text-align:left;animation:detailIn 0.5s var(--ease-out) both;display: block;}\r\n#globe-root .globe-eyebrow{font-size:0.6875rem;font-weight:var(--font-weight-regular);letter-spacing:0.14em;color:var(--color-rhine-light)}\r\n#globe-root .globe-city-list{display:flex;flex-direction:column;align-items:flex-start;gap:0.125rem;margin-top:0.5rem}\r\n#globe-root .globe-city-btn{padding:0.2rem 0;font-size:var(--font-body-size);font-weight:var(--font-body-weight);line-height:1.55;text-align:left;color:var(--font-body-color);background:none;border:none;cursor:pointer;transition:color 0.25s ease,font-size 0.25s ease,font-weight 0.25s ease}\r\n#globe-root .globe-city-btn:hover:not(:disabled):not(.globe-city-btn--active){color:rgba(255,255,255,0.55)}\r\n#globe-root .globe-city-btn--active{font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--font-title-color);text-shadow:0 2px 20px rgba(0,82,255,0.3)}\r\n#globe-root .globe-city-btn:disabled{cursor:not-allowed;opacity:0.7}\r\n#globe-root .globe-cta{margin-top:clamp(1.25rem,2vw,1.5rem);display:inline-flex;align-items:center;justify-content:center;padding:0.9rem 1.65rem;font-size:clamp(0.9375rem,1.2vw,1.0625rem);font-weight:var(--font-weight-regular);color:#0a0a0a;background:var(--color-white);border:none;border-radius:999px;cursor:pointer;transition:background 0.25s ease,color 0.25s ease,transform 0.25s ease,box-shadow 0.25s ease}\r\n@media (hover:hover){\r\n  #globe-root .globe-cta:hover{background:var(--color-rhine);color:var(--color-white);transform:translateY(-2px);box-shadow:0 12px 32px var(--color-rhine-glow)}\r\n}\r\n#globe-root .globe-stage{display:flex;flex-direction:column;align-items:center;margin-top:clamp(2rem,4vw,3rem)}\r\n#globe-root .globe-wrap{position:relative;width:min(100%,560px);aspect-ratio:1;margin-inline:auto;flex-shrink:0;overflow:visible}\r\n#globe-root .globe-clip{position:absolute;inset:0;z-index:1;border-radius:50%;overflow:hidden;isolation:isolate;contain:layout style paint;background:radial-gradient(circle at 35% 30%,#0c2860 0%,#061428 100%)}\r\n#globe-root .globe-interact{position:absolute;inset:0;z-index:5;border-radius:50%;cursor:grab;touch-action:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;user-select:none;background:transparent}\r\n#globe-root .globe-interact--armed{cursor:wait}\r\n#globe-root .globe-interact--dragging{cursor:grabbing;user-select:none}\r\n#globe-root .globe-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;filter:brightness(1.08) contrast(1.12) saturate(1.35);pointer-events:none}\r\n#globe-root .globe-halo{position:absolute;inset:0;z-index:3;border-radius:50%;pointer-events:none;opacity:0;transition:opacity 0.5s var(--ease-out);box-shadow:0 0 0 1px rgba(0,160,255,0.2),0 0 28px rgba(0,120,255,0.35),0 0 56px rgba(0,90,220,0.22)}\r\n#globe-root .globe-wrap--hovered .globe-halo{opacity:1;box-shadow:0 0 0 1px rgba(0,180,255,0.35),0 0 36px rgba(0,140,255,0.5),0 0 72px rgba(0,100,240,0.32)}\r\n#globe-root .globe-wrap--pressed .globe-halo{opacity:1;box-shadow:0 0 0 1px rgba(0,200,255,0.45),0 0 44px rgba(0,160,255,0.58),0 0 88px rgba(0,120,255,0.38)}\r\n#globe-root .globe-markers{position:absolute;inset:0;z-index:6;width:100%;height:100%;pointer-events:none}\r\n#globe-root .globe-marker{pointer-events:auto;cursor:pointer;outline:none}\r\n#globe-root .globe-pin-dot{fill:#fff;filter:drop-shadow(0 0 2px rgba(255,255,255,0.95))}\r\n#globe-root .globe-pin-ring{fill:rgba(255,255,255,0.15);opacity:0}\r\n#globe-root .globe-marker--active .globe-pin-ring{opacity:1}\r\n#globe-root .globe-marker--active .globe-pin-dot{filter:drop-shadow(0 0 4px rgba(255,255,255,1))}\r\n#globe-root .globe-pin-pulse{fill:none;stroke:rgba(255,255,255,0.5);stroke-width:0.35;animation:pinPulse 2s ease-out infinite}\r\n@keyframes pinPulse{\r\n  0%{transform:scale(0.65);opacity:0.85}\r\n  70%{transform:scale(1);opacity:0}\r\n  100%{transform:scale(1);opacity:0}\r\n}\r\n#globe-root .globe-vignette{position:absolute;inset:0;z-index:7;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 50% 50%,transparent 45%,rgba(0,25,70,0.18) 82%,transparent 96%)}\r\n#globe-root .globe-blue-tint{position:absolute;inset:0;z-index:3;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 42% 38%,rgba(100,180,255,0.32) 0%,rgba(0,82,255,0.2) 42%,transparent 72%);mix-blend-mode:screen}\r\n#globe-root .globe-atmosphere{position:absolute;inset:0;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 78% 20%,rgba(0,230,255,0.75) 0%,rgba(0,160,255,0.42) 12%,rgba(0,90,220,0.14) 28%,transparent 52%);mix-blend-mode:screen}\r\n#globe-root .globe-clip::after{content:'';position:absolute;inset:0;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 55% 42%,rgba(160,220,255,0.28) 0%,transparent 60%);mix-blend-mode:screen}\r\n#globe-root .globe-specular{position:absolute;inset:0;border-radius:50%;pointer-events:none;background:radial-gradient(ellipse 42% 28% at 72% 24%,rgba(180,230,255,0.12) 0%,transparent 70%)}\r\n#globe-root .globe-controls{display:flex;align-items:center;justify-content:center;gap:clamp(1rem,3vw,2rem);margin-top:clamp(1.25rem,2.5vw,1.75rem);width:100%;max-width:28rem}\r\n#globe-root .globe-nav-btn{display:grid;place-items:center;width:2.75rem;height:2.75rem;border-radius:50%;border:1px solid rgba(255,255,255,0.2);background:rgba(255,255,255,0.06);color:var(--color-white);transition:background 0.25s ease,border-color 0.25s ease,transform 0.25s ease}\r\n@media (hover:hover){\r\n  #globe-root .globe-nav-btn:hover:not(:disabled){background:rgba(0,82,255,0.25);border-color:rgba(61,123,255,0.55);transform:scale(1.05)}\r\n}\r\n#globe-root .globe-nav-btn:disabled{opacity:0.45;cursor:not-allowed}\r\n#globe-root .globe-nav-icon{font-size:1.75rem;line-height:1;margin-top:-0.15rem}\r\n#globe-root .globe-ctrl-center{flex:1;text-align:center}\r\n#globe-root .globe-ctrl-index{display:block;font-size:0.6875rem;font-weight:var(--font-weight-regular);letter-spacing:0.14em;text-transform:uppercase;color:var(--color-gray-blue)}\r\n#globe-root .globe-ctrl-city{display:block;margin-top:0.2rem;font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--font-title-color);animation:cityFade 0.45s var(--ease-out) both}\r\n@keyframes cityFade{\r\n  from{opacity:0;transform:translateY(6px)}\r\n  to{opacity:1;transform:translateY(0)}\r\n}\r\n@keyframes detailIn{\r\n  from{opacity:0}\r\n  to{opacity:1}\r\n}\r\n@media (max-width:639px){\r\n  .globe-panel{padding:clamp(2rem,5vw,3rem) 0 clamp(1.5rem,4vw,2.5rem)}\r\n  #globe-root .globe-nav-btn{width:2.5rem;height:2.5rem}\r\n  #globe-root .globe-info{max-width:100%}\r\n  #globe-root .globe-cta{width:100%;text-align:center}\r\n  #globe-root .globe-panel{display: block;}\r\n}\r\n@media (min-width:640px) and (max-width:1023px){\r\n  #globe-root .globe-panel{display:grid;grid-template-columns:1fr;gap:clamp(1.5rem,3vw,2.5rem)}\r\n  #globe-root .globe-stage{margin-top:clamp(1.25rem,3vw,2rem)}\r\n  #globe-root .globe-left{max-width:36rem}\r\n}\r\n@media (min-width:1024px){\r\n  #globe-root .globe-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);column-gap:clamp(2rem,4vw,3.5rem);align-items:start}\r\n  #globe-root .globe-left{grid-column:1;grid-row:1;align-self:start}\r\n  #globe-root .globe-info{max-width:none}\r\n  #globe-root .globe-stage{grid-column:2;grid-row:1;align-self:start;margin-top:0;width:100%}\r\n  #globe-root .globe-header .section-title{white-space:nowrap}\r\n}\r\n@media (prefers-reduced-motion:reduce){\r\n  #globe-root .globe-halo{transition:none}\r\n  #globe-root .globe-pin-pulse{animation:none;opacity:0.35}\r\n  #globe-root .globe-ctrl-city,.globe-info{animation:none}\r\n}\r\n<\/style>\r\n<script>\r\n    \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   Globe Standalone \u2013 Vanilla JS (no React)\r\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\n\r\n\/\/ \u2500\u2500 Data \u2500\u2500\r\n\r\nlet GLOBE_LOCATIONS = [\r\n    { id: 'hk', name: 'Hong Kong', filter: 'Hong Kong', lat: 22.3193, lng: 114.1694, hub: true },\r\n    { id: 'sg', name: 'Singapore', filter: 'Singapore', lat: 1.3521, lng: 103.8198 },\r\n    { id: 'dubai', name: 'Dubai', filter: 'Dubai', lat: 25.2048, lng: 55.2708 },\r\n    { id: 'tokyo', name: 'Tokyo', filter: 'Tokyo', lat: 35.6762, lng: 139.6503 },\r\n    { id: 'my', name: 'Malaysia', filter: 'Malaysia', lat: 3.139, lng: 101.6869 },\r\n];\r\n\r\n\/\/ const ROLES_BASE = 'https:\/\/group.hashkey.com\/category\/careers-roles\/';\r\n\/\/ \u2500\u2500 \u6839\u636e\u5f53\u524d URL \u8bed\u8a00\u52a8\u6001\u83b7\u53d6\u57fa\u7840\u8def\u5f84 \u2500\u2500\r\nfunction getRolesBase() {\r\n    var path = window.location.pathname;\r\n    if (path.indexOf('\/zh\/') === 0 || path.indexOf('\/zh') === 0) {\r\n        return 'https:\/\/group.hashkey.com\/zh\/category\/roles\/';\r\n    }\r\n    return 'https:\/\/group.hashkey.com\/category\/roles\/';\r\n}\r\nconst ROLES_BASE = getRolesBase();\r\nconst TEXTURE_URL = '\/wp-content\/uploads\/2026\/05\/earth-night-equirect.jpg';\r\nconst IDLE_SPIN = 5; \/\/ deg\/s\r\nconst DRAG_LNG = 0.72;\r\nconst DRAG_LAT = 0.52;\r\nconst MIN_LAT = -58;\r\nconst MAX_LAT = 58;\r\n\r\n\/\/ \u2500\u2500 Math helpers \u2500\u2500\r\nconst toRad = d => d * Math.PI \/ 180;\r\nfunction shortDelta(from, to) { let d = to - from; while (d > 180) d -= 360; while (d < -180) d += 360; return d; }\r\nfunction clampLat(v) { return Math.max(MIN_LAT, Math.min(MAX_LAT, v)); }\r\nfunction nearestIdx(lng) {\r\n  let best = 0, bestD = Infinity;\r\n  for (let i = 0; i < GLOBE_LOCATIONS.length; i++) {\r\n    const d = Math.abs(shortDelta(lng, GLOBE_LOCATIONS[i].lng));\r\n    if (d < bestD) { bestD = d; best = i; }\r\n  }\r\n  return best;\r\n}\r\n\r\nfunction tangentFrame(vLng, vLat) {\r\n  const l = toRad(vLng), p = toRad(vLat);\r\n  return {\r\n    v: [Math.cos(p)*Math.cos(l), Math.cos(p)*Math.sin(l), Math.sin(p)],\r\n    e: [-Math.sin(l), Math.cos(l), 0],\r\n    n: [-Math.sin(p)*Math.cos(l), -Math.sin(p)*Math.sin(l), Math.cos(p)],\r\n  };\r\n}\r\n\r\nfunction projectMarker(lng, lat, vLng, vLat) {\r\n  const l = toRad(lng), p = toRad(lat);\r\n  const px = Math.cos(p)*Math.cos(l), py = Math.cos(p)*Math.sin(l), pz = Math.sin(p);\r\n  const f = tangentFrame(vLng, vLat);\r\n  const depth = px*f.v[0] + py*f.v[1] + pz*f.v[2];\r\n  if (depth <= 0.04) return { x: 50, y: 50, visible: false, depth };\r\n  const sx = px*f.e[0] + py*f.e[1] + pz*f.e[2];\r\n  const sy = px*f.n[0] + py*f.n[1] + pz*f.n[2];\r\n  const r = 47.5;\r\n  const x = 50 + r*sx, y = 50 - r*sy;\r\n  return { x: Math.max(2.5, Math.min(97.5, x)), y: Math.max(2.5, Math.min(97.5, y)), visible: Math.hypot(x-50,y-50) <= 48.5, depth };\r\n}\r\n\r\n\/\/ \u2500\u2500 WebGL Globe Renderer \u2500\u2500\r\nconst VERT = `attribute vec2 aPosition; void main(){gl_Position=vec4(aPosition,0.0,1.0);}`;\r\nconst FRAG = `precision mediump float;\r\nuniform sampler2D uTexture;uniform vec2 uViewLngLat;uniform vec2 uResolution;\r\nvoid main(){\r\n  vec2 p=(gl_FragCoord.xy\/uResolution-0.5)*2.0;\r\n  p.x*=uResolution.x\/uResolution.y;\r\n  float r2=dot(p,p);if(r2>1.0){discard;}\r\n  float nz=sqrt(1.0-r2),nx=p.x,ny=p.y;\r\n  float l0=uViewLngLat.x,p0=uViewLngLat.y;\r\n  vec3 v=vec3(cos(p0)*cos(l0),cos(p0)*sin(l0),sin(p0));\r\n  vec3 e=vec3(-sin(l0),cos(l0),0.0);\r\n  vec3 n=vec3(-sin(p0)*cos(l0),-sin(p0)*sin(l0),cos(p0));\r\n  vec3 w=nz*v+nx*e+ny*n;\r\n  float lat=asin(clamp(w.z,-1.0,1.0));float lng=atan(w.y,w.x);\r\n  float u=lng\/6.28318530718+0.5;float vc=(1.57079632679-lat)\/3.14159265359;\r\n  vec4 tx=texture2D(uTexture,vec2(u,vc));\r\n  float luma=dot(tx.rgb,vec3(0.2126,0.7152,0.0722));\r\n  float isO=smoothstep(0.06,0.2,luma);float cM=smoothstep(0.32,0.78,luma);\r\n  vec3 dO=vec3(0.008,0.028,0.1);vec3 mO=vec3(0.02,0.07,0.2);\r\n  vec3 lB=vec3(0.035,0.11,0.26);vec3 lL=vec3(0.08,0.22,0.48);vec3 cG=vec3(0.45,0.78,1.0);\r\n  vec3 oc=mix(dO,mO,isO*0.6);vec3 la=mix(lB,lL,isO);la=mix(la,cG,cM*0.9);\r\n  vec3 col=mix(oc,la,isO);col=mix(col,vec3(0.015,0.05,0.16),0.1);col=pow(col,vec3(0.9));\r\n  col+=vec3(0.06,0.22,0.42)*pow(1.0-nz,2.5)*0.35;\r\n  gl_FragColor=vec4(col,1.0);\r\n}`;\r\n\r\nfunction mkShader(gl, type, src) {\r\n  const s = gl.createShader(type); gl.shaderSource(s, src); gl.compileShader(s);\r\n  if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error(gl.getShaderInfoLog(s));\r\n  return s;\r\n}\r\n\r\nclass GlobeRenderer {\r\n  constructor(canvas, textureUrl) {\r\n    this.canvas = canvas; this.disposed = false; this.texture = null;\r\n    this.lastLng = 114.1694; this.lastLat = 22.3193;\r\n    const gl = canvas.getContext('webgl', { alpha: true, antialias: true, premultipliedAlpha: false });\r\n    if (!gl) throw new Error('No WebGL');\r\n    this.gl = gl;\r\n    const vs = mkShader(gl, gl.VERTEX_SHADER, VERT);\r\n    const fs = mkShader(gl, gl.FRAGMENT_SHADER, FRAG);\r\n    const pg = gl.createProgram(); gl.attachShader(pg, vs); gl.attachShader(pg, fs); gl.linkProgram(pg);\r\n    gl.deleteShader(vs); gl.deleteShader(fs);\r\n    this.program = pg;\r\n    this.uTex = gl.getUniformLocation(pg, 'uTexture');\r\n    this.uView = gl.getUniformLocation(pg, 'uViewLngLat');\r\n    this.uRes = gl.getUniformLocation(pg, 'uResolution');\r\n    const buf = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf);\r\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1,3,-1,-1,3]), gl.STATIC_DRAW);\r\n    this.buffer = buf;\r\n    gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\r\n    this._loadTex(textureUrl); this.resize();\r\n  }\r\n  _loadTex(url) {\r\n    const gl = this.gl, img = new Image(); img.crossOrigin = 'anonymous';\r\n    img.onload = () => {\r\n      if (this.disposed) return;\r\n      const t = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, t);\r\n      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);\r\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);\r\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n      this.texture = t; this.render(this.lastLng, this.lastLat);\r\n    };\r\n    img.src = url;\r\n  }\r\n  resize() {\r\n    const dpr = Math.min(devicePixelRatio || 1, 2);\r\n    const rect = this.canvas.getBoundingClientRect();\r\n    const sz = Math.max(1, Math.floor(Math.max(rect.width, rect.height, 1) * dpr));\r\n    if (this.canvas.width !== sz || this.canvas.height !== sz) { this.canvas.width = sz; this.canvas.height = sz; }\r\n  }\r\n  render(lng, lat) {\r\n    this.lastLng = lng; this.lastLat = lat;\r\n    if (!this.texture || this.disposed) return;\r\n    const { gl, program, canvas } = this;\r\n    gl.viewport(0, 0, canvas.width, canvas.height);\r\n    gl.clearColor(0.02, 0.08, 0.16, 0); gl.clear(gl.COLOR_BUFFER_BIT);\r\n    gl.useProgram(program);\r\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n    const loc = gl.getAttribLocation(program, 'aPosition');\r\n    gl.enableVertexAttribArray(loc); gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\r\n    gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, this.texture);\r\n    gl.uniform1i(this.uTex, 0);\r\n    gl.uniform2f(this.uView, lng * Math.PI \/ 180, lat * Math.PI \/ 180);\r\n    gl.uniform2f(this.uRes, canvas.width, canvas.height);\r\n    gl.drawArrays(gl.TRIANGLES, 0, 3);\r\n  }\r\n  dispose() {\r\n    this.disposed = true;\r\n    this.gl.deleteTexture(this.texture); this.gl.deleteBuffer(this.buffer); this.gl.deleteProgram(this.program);\r\n  }\r\n}\r\n\r\n\/\/ \u2500\u2500 Simple GSAP-like tween (no dependency) \u2500\u2500\r\nfunction tween(from, to, duration, ease, onUpdate, onComplete) {\r\n  const start = performance.now();\r\n  let cancelled = false;\r\n  function tick(now) {\r\n    if (cancelled) return;\r\n    let t = Math.min((now - start) \/ (duration * 1000), 1);\r\n    \/\/ power2.inOut ease\r\n    t = t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) \/ 2;\r\n    const val = {};\r\n    for (const k in from) val[k] = from[k] + (to[k] - from[k]) * t;\r\n    onUpdate(val);\r\n    if (t < 1) requestAnimationFrame(tick);\r\n    else if (onComplete) onComplete();\r\n  }\r\n  requestAnimationFrame(tick);\r\n  return { kill() { cancelled = true; } };\r\n}\r\n\r\n\/\/ \u2500\u2500 Globe Controller \u2500\u2500\r\nclass GlobeController {\r\n  constructor(root) {\r\n    this.root = root;\r\n    this.activeIndex = 0;\r\n    this.view = { lng: GLOBE_LOCATIONS[0].lng, lat: GLOBE_LOCATIONS[0].lat };\r\n    this.isAnimating = false;\r\n    this.isDragging = false;\r\n    this.currentTween = null;\r\n    this.spinFrame = 0;\r\n    this.renderer = null;\r\n    this.markerSyncFrame = 0;\r\n    this.pressState = null;\r\n\r\n    this._buildDOM();\r\n    this._initRenderer();\r\n    this._bindEvents();\r\n    this._startSpin();\r\n    this._updateUI();\r\n  }\r\n\r\n  _buildDOM() {\r\n    const locs = GLOBE_LOCATIONS;\r\n    const cityBtns = locs.map((loc, i) =>\r\n      `<button type=\"button\" class=\"globe-city-btn${i === 0 ? ' globe-city-btn--active' : ''}\" data-index=\"${i}\">${loc.name}<\/button>`\r\n    ).join('');\r\n\r\n    var cityList = this.root.querySelector('.globe-city-list')\r\n    cityList.innerHTML = cityBtns\r\n    var stage = this.root.querySelector('.globe-stage')\r\n    stage.innerHTML = `\r\n        <div class=\"globe-wrap\" id=\"globe-wrap\">\r\n            <div class=\"globe-clip\" id=\"globe-clip\" role=\"img\" aria-label=\"Global offices\">\r\n                <canvas class=\"globe-canvas\" id=\"globe-canvas\" aria-hidden><\/canvas>\r\n                <div class=\"globe-interact\" id=\"globe-interact\" aria-hidden><\/div>\r\n                <svg class=\"globe-markers\" id=\"globe-markers\" viewBox=\"0 0 100 100\" aria-hidden><\/svg>\r\n                <div class=\"globe-blue-tint\" aria-hidden><\/div>\r\n                <div class=\"globe-atmosphere\" aria-hidden><\/div>\r\n                <div class=\"globe-specular\" aria-hidden><\/div>\r\n                <div class=\"globe-vignette\" aria-hidden><\/div>\r\n            <\/div>\r\n            <div class=\"globe-halo\" aria-hidden><\/div>\r\n        <\/div>\r\n        <div class=\"globe-controls\" aria-label=\"Browse global locations\">\r\n            <button type=\"button\" class=\"globe-nav-btn\" id=\"globe-prev\" aria-label=\"Previous location\">\r\n                <span class=\"globe-nav-icon\" aria-hidden>\u2039<\/span>\r\n            <\/button>\r\n            <div class=\"globe-ctrl-center\">\r\n                <span class=\"globe-ctrl-index\" id=\"globe-index\"><\/span>\r\n                <span class=\"globe-ctrl-city\" id=\"globe-city-label\"><\/span>\r\n            <\/div>\r\n            <button type=\"button\" class=\"globe-nav-btn\" id=\"globe-next\" aria-label=\"Next location\">\r\n                <span class=\"globe-nav-icon\" aria-hidden>\u203a<\/span>\r\n            <\/button>\r\n        <\/div>\r\n    `\r\n\r\n    \/\/ Cache DOM refs\r\n    this.$canvas = this.root.querySelector('#globe-canvas');\r\n    this.$markers = this.root.querySelector('#globe-markers');\r\n    this.$interact = this.root.querySelector('#globe-interact');\r\n    this.$wrap = this.root.querySelector('#globe-wrap');\r\n    this.$prev = this.root.querySelector('#globe-prev');\r\n    this.$next = this.root.querySelector('#globe-next');\r\n    this.$index = this.root.querySelector('#globe-index');\r\n    this.$cityLabel = this.root.querySelector('#globe-city-label');\r\n    this.$cta = this.root.querySelector('#globe-cta-link');\r\n    this.$cityBtns = this.root.querySelectorAll('.globe-city-btn');\r\n  }\r\n\r\n  _initRenderer() {\r\n    try {\r\n      this.renderer = new GlobeRenderer(this.$canvas, TEXTURE_URL);\r\n      this.renderer.render(this.view.lng, this.view.lat);\r\n      const ro = new ResizeObserver(() => {\r\n        this.renderer.resize();\r\n        this.renderer.render(this.view.lng, this.view.lat);\r\n      });\r\n      ro.observe(this.$canvas);\r\n    } catch (e) { console.warn('WebGL init failed', e); }\r\n  }\r\n\r\n  _bindEvents() {\r\n    \/\/ City buttons\r\n    this.$cityBtns.forEach(btn => {\r\n      btn.addEventListener('click', () => {\r\n        if (this.isAnimating) return;\r\n        this.goToIndex(parseInt(btn.dataset.index));\r\n      });\r\n    });\r\n\r\n    \/\/ Prev \/ Next\r\n    this.$prev.addEventListener('click', () => { if (!this.isAnimating) this.goToIndex(this.activeIndex - 1); });\r\n    this.$next.addEventListener('click', () => { if (!this.isAnimating) this.goToIndex(this.activeIndex + 1); });\r\n\r\n    \/\/ Globe hover\r\n    this.$wrap.addEventListener('pointerenter', () => this.$wrap.classList.add('globe-wrap--hovered'));\r\n    this.$wrap.addEventListener('pointerleave', (e) => {\r\n      const next = e.relatedTarget;\r\n      if (!next || !e.currentTarget.contains(next)) this.$wrap.classList.remove('globe-wrap--hovered');\r\n    });\r\n\r\n    \/\/ Globe drag\r\n    this._bindDrag();\r\n  }\r\n\r\n  _bindDrag() {\r\n    const el = this.$interact;\r\n    const CANCEL_PX_MOUSE = 24, CANCEL_PX_TOUCH = 36, LONG_PRESS_MS = 280;\r\n\r\n    const startPress = (cx, cy, id, isTouch) => {\r\n      if (this.pressState) return;\r\n      this._clearPress();\r\n      if (this.currentTween) { this.currentTween.kill(); this.currentTween = null; }\r\n      this.$wrap.classList.add('globe-wrap--pressed');\r\n\r\n      const startLng = this.view.lng, startLat = this.view.lat;\r\n      const cancelPx = isTouch ? CANCEL_PX_TOUCH : CANCEL_PX_MOUSE;\r\n      let hasMoved = false, dragMode = false;\r\n\r\n      const applyDrag = (x, y) => {\r\n        if (!dragMode) return;\r\n        const lng = startLng - (x - cx) * DRAG_LNG;\r\n        const lat = clampLat(startLat + (y - cy) * DRAG_LAT);\r\n        hasMoved = true;\r\n        this.view = { lng, lat };\r\n        this.renderer?.render(lng, lat);\r\n        if (!this.markerSyncFrame) {\r\n          this.markerSyncFrame = requestAnimationFrame(() => {\r\n            this.markerSyncFrame = 0;\r\n            if (dragMode) this._updateMarkers();\r\n          });\r\n        }\r\n      };\r\n\r\n      const onMove = (ev) => {\r\n        if (ev.pointerId !== id) return;\r\n        if (!dragMode) {\r\n          if (Math.hypot(ev.clientX - cx, ev.clientY - cy) > cancelPx) finish(false);\r\n          return;\r\n        }\r\n        ev.preventDefault();\r\n        applyDrag(ev.clientX, ev.clientY);\r\n      };\r\n\r\n      const onTouchMove = (ev) => {\r\n        if (!isTouch) return;\r\n        const t = [...ev.touches].find(t => t.identifier === id);\r\n        if (!t) return;\r\n        if (!dragMode) {\r\n          if (Math.hypot(t.clientX - cx, t.clientY - cy) > cancelPx) finish(false);\r\n          return;\r\n        }\r\n        ev.preventDefault();\r\n        applyDrag(t.clientX, t.clientY);\r\n      };\r\n\r\n      const finish = (snap) => {\r\n        if (timer) clearTimeout(timer);\r\n        window.removeEventListener('pointermove', onMove);\r\n        window.removeEventListener('pointerup', onUp);\r\n        window.removeEventListener('pointercancel', onUp);\r\n        window.removeEventListener('touchmove', onTouchMove);\r\n        window.removeEventListener('touchend', onTouchEnd);\r\n        window.removeEventListener('touchcancel', onTouchEnd);\r\n        const wasDragging = dragMode;\r\n        dragMode = false;\r\n        this.isDragging = false;\r\n        this.$interact.classList.remove('globe-interact--armed', 'globe-interact--dragging');\r\n        this.$wrap.classList.remove('globe-wrap--pressed');\r\n        this.pressState = null;\r\n        if (wasDragging && snap && hasMoved) {\r\n          this.goToIndex(nearestIdx(this.view.lng));\r\n        }\r\n      };\r\n\r\n      const onUp = (ev) => { if (ev.pointerId === id) finish(true); };\r\n      const onTouchEnd = (ev) => { if ([...ev.changedTouches].some(t => t.identifier === id)) finish(true); };\r\n\r\n      window.addEventListener('pointermove', onMove, { passive: false });\r\n      window.addEventListener('pointerup', onUp);\r\n      window.addEventListener('pointercancel', onUp);\r\n      window.addEventListener('touchmove', onTouchMove, { passive: false });\r\n      window.addEventListener('touchend', onTouchEnd);\r\n      window.addEventListener('touchcancel', onTouchEnd);\r\n\r\n      const armDrag = () => {\r\n        dragMode = true;\r\n        this.isDragging = true;\r\n        this.$interact.classList.remove('globe-interact--armed');\r\n        this.$interact.classList.add('globe-interact--dragging');\r\n      };\r\n\r\n      let timer = null;\r\n      if (isTouch) {\r\n        timer = setTimeout(armDrag, LONG_PRESS_MS);\r\n        this.$interact.classList.add('globe-interact--armed');\r\n      } else {\r\n        armDrag();\r\n      }\r\n\r\n      this.pressState = { finish };\r\n    };\r\n\r\n    el.addEventListener('pointerdown', (e) => {\r\n      if (e.pointerType === 'mouse' && e.button !== 0) return;\r\n      if (this.pressState) return;\r\n      if (e.pointerType === 'touch' || e.pointerType === 'pen') e.preventDefault();\r\n      startPress(e.clientX, e.clientY, e.pointerId, e.pointerType === 'touch');\r\n    });\r\n\r\n    el.addEventListener('touchstart', (e) => {\r\n      if (e.touches.length !== 1 || this.pressState) return;\r\n      e.preventDefault();\r\n      const t = e.touches[0];\r\n      startPress(t.clientX, t.clientY, t.identifier, true);\r\n    }, { passive: false });\r\n  }\r\n\r\n  _clearPress() {\r\n    if (this.pressState) this.pressState.finish(false);\r\n    this.pressState = null;\r\n    if (this.markerSyncFrame) { cancelAnimationFrame(this.markerSyncFrame); this.markerSyncFrame = 0; }\r\n  }\r\n\r\n  goToIndex(index) {\r\n    const count = GLOBE_LOCATIONS.length;\r\n    const next = ((index % count) + count) % count;\r\n    const target = GLOBE_LOCATIONS[next];\r\n    const from = { ...this.view };\r\n\r\n    if (this.currentTween) { this.currentTween.kill(); this.currentTween = null; }\r\n\r\n    this.isAnimating = true;\r\n    this.activeIndex = next;\r\n    this._updateUI();\r\n\r\n    const deltaLng = shortDelta(from.lng, target.lng);\r\n    this.currentTween = tween(\r\n      { lng: from.lng, lat: from.lat },\r\n      { lng: from.lng + deltaLng, lat: target.lat },\r\n      1.15,\r\n      null,\r\n      (val) => {\r\n        this.view = { lng: val.lng, lat: val.lat };\r\n        this.renderer?.render(val.lng, val.lat);\r\n        this._updateMarkers();\r\n      },\r\n      () => {\r\n        this.view = { lng: target.lng, lat: target.lat };\r\n        this.isAnimating = false;\r\n        this._updateMarkers();\r\n        this._setButtonsDisabled(false);\r\n      }\r\n    );\r\n  }\r\n\r\n  _updateUI() {\r\n    const loc = GLOBE_LOCATIONS[this.activeIndex];\r\n    const count = GLOBE_LOCATIONS.length;\r\n\r\n    \/\/ Index display\r\n    this.$index.textContent = `${String(this.activeIndex + 1).padStart(2, '0')} \/ ${String(count).padStart(2, '0')}`;\r\n\r\n    \/\/ City label (re-trigger animation)\r\n    this.$cityLabel.textContent = loc.name;\r\n    this.$cityLabel.style.animation = 'none';\r\n    this.$cityLabel.offsetHeight; \/\/ reflow\r\n    this.$cityLabel.style.animation = '';\r\n\r\n    \/\/ CTA link\r\n    const url = new URL(ROLES_BASE);\r\n    url.searchParams.set('location', loc.filter);\r\n    this.$cta.href = url.toString();\r\n\r\n    \/\/ Active city button\r\n    this.$cityBtns.forEach((btn, i) => {\r\n      btn.classList.toggle('globe-city-btn--active', i === this.activeIndex);\r\n    });\r\n\r\n    this._setButtonsDisabled(this.isAnimating);\r\n    this._updateMarkers();\r\n  }\r\n\r\n  _setButtonsDisabled(disabled) {\r\n    this.$prev.disabled = disabled;\r\n    this.$next.disabled = disabled;\r\n    this.$cityBtns.forEach(btn => btn.disabled = disabled);\r\n  }\r\n\r\n  _updateMarkers() {\r\n    const svg = this.$markers;\r\n    const active = GLOBE_LOCATIONS[this.activeIndex];\r\n\r\n    const items = GLOBE_LOCATIONS.map(loc => {\r\n      const p = projectMarker(loc.lng, loc.lat, this.view.lng, this.view.lat);\r\n      return { loc, ...p };\r\n    }).sort((a, b) => a.depth - b.depth);\r\n\r\n    let html = '';\r\n    for (const m of items) {\r\n      if (!m.visible) continue;\r\n      const isActive = m.loc.id === active.id;\r\n      const cls = `globe-marker${isActive ? ' globe-marker--active' : ''}`;\r\n      const rRing = isActive ? 2.2 : 1.6;\r\n      const rDot = isActive ? 1.7 : 1.2;\r\n      html += `<g class=\"${cls}\" transform=\"translate(${m.x} ${m.y})\" data-id=\"${m.loc.id}\" tabindex=\"0\" role=\"button\" aria-label=\"${m.loc.name}\">`;\r\n      if (isActive) html += `<circle class=\"globe-pin-pulse\" r=\"4.2\"\/>`;\r\n      html += `<circle class=\"globe-pin-ring\" r=\"${rRing}\"\/>`;\r\n      html += `<circle class=\"globe-pin-dot\" r=\"${rDot}\"\/>`;\r\n      html += `<\/g>`;\r\n    }\r\n    svg.innerHTML = html;\r\n\r\n    \/\/ Bind marker click events\r\n    svg.querySelectorAll('.globe-marker').forEach(g => {\r\n      const handler = () => {\r\n        const idx = GLOBE_LOCATIONS.findIndex(l => l.id === g.dataset.id);\r\n        if (idx >= 0 && !this.isAnimating) this.goToIndex(idx);\r\n      };\r\n      g.addEventListener('click', handler);\r\n      g.addEventListener('keydown', (e) => {\r\n        if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handler(); }\r\n      });\r\n    });\r\n  }\r\n\r\n  _startSpin() {\r\n    const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n    if (reduced) return;\r\n\r\n    let last = performance.now();\r\n    const tick = (now) => {\r\n      if (this.isAnimating || this.isDragging) { last = now; this.spinFrame = requestAnimationFrame(tick); return; }\r\n      const dt = Math.min((now - last) \/ 1000, 0.05);\r\n      last = now;\r\n      this.view.lng += IDLE_SPIN * dt;\r\n      this.renderer?.render(this.view.lng, this.view.lat);\r\n      this._updateMarkers();\r\n      this.spinFrame = requestAnimationFrame(tick);\r\n    };\r\n    this.spinFrame = requestAnimationFrame(tick);\r\n  }\r\n\r\n  dispose() {\r\n    cancelAnimationFrame(this.spinFrame);\r\n    if (this.currentTween) this.currentTween.kill();\r\n    this._clearPress();\r\n    this.renderer?.dispose();\r\n  }\r\n}\r\n\r\n\/\/ \u2500\u2500 Init \u2500\u2500\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  const container = document.getElementById('globe-root');\r\n  const btns = container.querySelectorAll(\".globe-city-list button\")\r\n  const arr = []\r\n  btns.forEach((v,i)=>{\r\n    arr.push({ id: 'globeCity'+i,name: v.innerText,  filter: v.getAttribute(\"filter\"),  lat: Number(v.getAttribute(\"lat\")),  lng: Number(v.getAttribute(\"lng\")) })\r\n  })\r\n  if(arr.length){\r\n    arr[0].hub=true\r\n  }\r\n  GLOBE_LOCATIONS = arr\r\n  if (container) new GlobeController(container);\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-db5bd8a e-con-full e-flex e-con e-parent\" data-id=\"db5bd8a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a23e604 c_hr elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"a23e604\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dbfd35d e-flex e-con-boxed e-con e-parent\" data-id=\"dbfd35d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80237f5 elementor-widget elementor-widget-menu-anchor\" data-id=\"80237f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"mission-vision\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a6078b8 e-con-full e-flex e-con e-child\" data-id=\"a6078b8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32f9f2c elementor-widget__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"32f9f2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Mission <span style=\"font-family: OPPOSans;font-weight: 600\">&amp;<\/span>  Vision<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-158bd47 e-con-full e-flex e-con e-child\" data-id=\"158bd47\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9184a50 e-con-full e-flex e-con e-child\" data-id=\"9184a50\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-d0b0f57 e-con-full e-flex e-con e-child\" data-id=\"d0b0f57\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9769a19 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"9769a19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Our Mission<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-912f75c elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"912f75c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Make Digital Assets Massively Accessible<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-27452ba e-con-full e-flex e-con e-child\" data-id=\"27452ba\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-4c2ca41 e-con-full e-flex e-con e-child\" data-id=\"4c2ca41\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1207e28 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"1207e28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Our Vision<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10315ba elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"10315ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Provide Trustworthy Digital Assets Services to 1 Billion Global Users<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-297bf4f e-con-full e-flex e-con e-parent\" data-id=\"297bf4f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-35daa4c c_hr elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"35daa4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-06b3525 e-flex e-con-boxed e-con e-parent\" data-id=\"06b3525\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7dc6728 elementor-widget elementor-widget-menu-anchor\" data-id=\"7dc6728\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"hi5-core-values\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<section class=\"elementor-element elementor-element-4d72b0a e-con e-atomic-element e-div-block-base e-4d72b0a-d281f67 hi5-section \" data-id=\"4d72b0a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4d72b0a\" id=\"hi5-section\" data-e-type=\"e-div-block\" data-id=\"4d72b0a\" aria-labelledby=\"hi5-section-title\">\n    <div class=\"elementor-element elementor-element-0139c2a e-con e-atomic-element e-div-block-base e-0139c2a-02c4349 hi5-statement \" data-id=\"0139c2a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"0139c2a\" data-e-type=\"e-div-block\" data-id=\"0139c2a\">\n    <div class=\"elementor-element elementor-element-fc63727 e-con e-atomic-element e-div-block-base hi5-statementInner \" data-id=\"fc63727\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"fc63727\" data-e-type=\"e-div-block\" data-id=\"fc63727\">\n    <div class=\"elementor-element elementor-element-a595d76 e-con e-atomic-element e-div-block-base hi5-title \" data-id=\"a595d76\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"a595d76\" data-e-type=\"e-div-block\" data-id=\"a595d76\">\n    \t\t\t<span class=\"e-34c089d-127142c e-paragraph-base\" data-interaction-id=\"34c089d\" data-e-type=\"widget\" data-id=\"34c089d\">HASHKEY HI5 CORE VALUES<\/span>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-3b7c9ca e-con e-atomic-element e-div-block-base e-3b7c9ca-ce05d2b hi5-meaning hi5-meaningVisible \" data-id=\"3b7c9ca\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"3b7c9ca\" data-e-type=\"e-div-block\" data-id=\"3b7c9ca\">\n    \t\t\t<h3 data-interaction-id=\"744df04\" class=\"hi5-valueWord e-heading-base\" data-e-type=\"widget\" data-id=\"744df04\">Focus<\/h3>\n\t\t\t\t\t<p class=\"hi5-meaningHeadline e-paragraph-base\" data-interaction-id=\"3733572\" data-e-type=\"widget\" data-id=\"3733572\">Clear Focus. Lasting Advantage.<\/p>\n\t\t\t\t\t<p class=\"hi5-meaningLine hi5-meaningBody e-paragraph-base\" data-interaction-id=\"6d9655f\" data-e-type=\"widget\" data-id=\"6d9655f\">- Prioritize what counts.<br>- Focus on what wins.<br>- Don't try to have it all.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-11a06ca e-con e-atomic-element e-div-block-base e-11a06ca-8035ed0 hi5-meaning hi5-meaningVisible \" data-id=\"11a06ca\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"11a06ca\" data-e-type=\"e-div-block\" data-id=\"11a06ca\">\n    \t\t\t<h3 data-interaction-id=\"2d1b143\" class=\"hi5-valueWord e-2d1b143-83f9831 e-heading-base\" data-e-type=\"widget\" data-id=\"2d1b143\">Innovation<\/h3>\n\t\t\t\t\t<p class=\"hi5-meaningHeadline e-paragraph-base\" data-interaction-id=\"99e22f0\" data-e-type=\"widget\" data-id=\"99e22f0\">Dare, Disrupt, Deliver.<\/p>\n\t\t\t\t\t<p class=\"hi5-meaningLine hi5-meaningBody e-paragraph-base\" data-interaction-id=\"5e36e9d\" data-e-type=\"widget\" data-id=\"5e36e9d\">- Think Fresh.<br>- Dare to Disrupt.<br>- Embrace innovation trials.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-c392854 e-con e-atomic-element e-div-block-base e-c392854-c9a67fa hi5-meaning hi5-meaningVisible \" data-id=\"c392854\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"c392854\" data-e-type=\"e-div-block\" data-id=\"c392854\">\n    \t\t\t<h3 data-interaction-id=\"e352df4\" class=\"hi5-valueWord e-e352df4-cf3840d e-heading-base\" data-e-type=\"widget\" data-id=\"e352df4\">Victory<\/h3>\n\t\t\t\t\t<p class=\"hi5-meaningHeadline e-paragraph-base\" data-interaction-id=\"6fe3f99\" data-e-type=\"widget\" data-id=\"6fe3f99\">Work together, win together!<\/p>\n\t\t\t\t\t<p class=\"hi5-meaningLine hi5-meaningBody e-paragraph-base\" data-interaction-id=\"f322fef\" data-e-type=\"widget\" data-id=\"f322fef\">- One Team.<br>- Shared Values.<br>- New Frontiers.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-040eeb1 e-con e-atomic-element e-div-block-base e-040eeb1-5bee6dd hi5-meaning hi5-meaningVisible \" data-id=\"040eeb1\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"040eeb1\" data-e-type=\"e-div-block\" data-id=\"040eeb1\">\n    \t\t\t<h3 data-interaction-id=\"cf77596\" class=\"hi5-valueWord e-cf77596-165a7bd e-heading-base\" data-e-type=\"widget\" data-id=\"cf77596\">Evolution<\/h3>\n\t\t\t\t\t<p class=\"hi5-meaningHeadline e-paragraph-base\" data-interaction-id=\"f2c8f67\" data-e-type=\"widget\" data-id=\"f2c8f67\">Keep curious, Keep evolving.<\/p>\n\t\t\t\t\t<p class=\"hi5-meaningLine hi5-meaningBody e-paragraph-base\" data-interaction-id=\"553a956\" data-e-type=\"widget\" data-id=\"553a956\">- Keep Humbleness.<br>- Embrace Challenge.<br>- Never Stop Learning.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-a731772 e-con e-atomic-element e-div-block-base e-a731772-2b852e2 hi5-meaning hi5-meaningVisible \" data-id=\"a731772\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"a731772\" data-e-type=\"e-div-block\" data-id=\"a731772\">\n    \t\t\t<h3 data-interaction-id=\"af60d38\" class=\"hi5-valueWord e-af60d38-58a1f28 e-heading-base\" data-e-type=\"widget\" data-id=\"af60d38\">Compliance<\/h3>\n\t\t\t\t\t<p class=\"hi5-meaningHeadline e-paragraph-base\" data-interaction-id=\"2c93807\" data-e-type=\"widget\" data-id=\"2c93807\">Build with Trust. Move within the Right Framework.<\/p>\n\t\t\t\t\t<p class=\"hi5-meaningLine hi5-meaningBody e-paragraph-base\" data-interaction-id=\"44a0163\" data-e-type=\"widget\" data-id=\"44a0163\">- Trust is the foundation of everything we build.<br>- We innovate with discipline.<br>- We grow by doing things the right way.<\/p>\n\t\t\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/section>\n\t\t<div class=\"elementor-element elementor-element-8624e4e elementor-widget elementor-widget-html\" data-id=\"8624e4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.hi5-section{display: block;--hi5-conduct: 1;--hi5-rhine:#0066ff;--hi5-rhine-hover:#3385ff;--hi5-rhine-glow:rgba(0,102,255,0.5);--hi5-label:#9eb4d4;--hi5-white:#ffffff;--hi5-black:#000000;--hi5-body-color:rgba(255,255,255,0.5);--hi5-title-size:38px;--hi5-title-weight:300;--hi5-body-size:16px;--hi5-body-weight:300;--hi5-max-width:1380px;--hi5-gutter:1.25rem;--hi5-ease-out:cubic-bezier(0.22,1,0.36,1);position:relative;background:var(--hi5-black);isolation:isolate;box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\r\n.hi5-section .hi5-meaning{max-width:36rem;margin-top:clamp(1.5rem,3.5vh,2rem);transition:opacity .36s ease,transform .36s var(--hi5-ease-out);display: block;}\r\n.hi5-section .hi5-meaningVisible{opacity:1;transform:translateY(0)}\r\n.hi5-section .hi5-meaningHidden{opacity:0;transform:translateY(12px)}\r\n.hi5-section .hi5-valueWord{margin:0;font-size:var(--hi5-title-size);font-weight:var(--hi5-title-weight);line-height:1.15;letter-spacing:-0.02em;color:var(--hi5-white)}\r\n.hi5-section .hi5-valueWordLead{color:var(--hi5-rhine)}\r\n.hi5-section .hi5-valueWordRest{color:var(--hi5-white)}\r\n.hi5-section .hi5-meaningHeadline{margin:.65rem 0 0;font-size:var(--hi5-body-size);font-weight:var(--hi5-body-weight);line-height:1.55;color:var(--hi5-body-color)}\r\n.hi5-section .hi5-meaningBody{margin-top:.7rem}\r\n.hi5-section .hi5-meaningLine{display:block;font-size:var(--hi5-body-size);font-weight:var(--hi5-body-weight);line-height:1.55;color:var(--hi5-body-color)}\r\n.hi5-section .hi5-meaningLine + .hi5-meaningLine{margin-top:.3rem}\r\n\r\n\r\n.elementor-element-edit-mode .section{display: none;}\r\n\r\n.section {--color-black: #020617;--color-rhine-light: #3d7bff;--ease-out: cubic-bezier(0.22, 1, 0.36, 1);--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);padding-bottom: 2rem;}\r\n.section .brandHeader{width: 100%;}\r\n.section .eyebrow{margin:0 0 1.25rem;font-size:0.75rem;letter-spacing:0.14em;text-transform:uppercase;color:#3d7bff}\r\n.section .brandStage{display:grid;grid-template-columns:minmax(6rem,9.5rem) minmax(0,1fr);gap:2.5rem;align-items:start}\r\n.section .logoColumn{position:relative}\r\n.section .logoShell{position:relative;display:block;width:100%;max-width:8.75rem;aspect-ratio:520 \/ 471;cursor:pointer;touch-action:none;border:none;background:transparent;color:inherit;padding:0;outline:none}\r\n.section .logoShell:focus-visible{border-radius:0.25rem;box-shadow:0 0 0 1px rgba(61,123,255,0.45)}\r\n.section .conductorRing{position:absolute;inset:-18%;z-index:0;border-radius:50%;border:1px solid rgba(61,123,255,0.08);opacity:0.45;pointer-events:none;transition:border-color 0.35s var(--ease-smooth)}\r\n.section .logoLayer{position:relative;z-index:1;display:block;width:100%;height:100%}\r\n.section .logoImage{display:block;width:100%;height:100%;object-fit:contain}\r\n.section .logoDot{position:absolute;inset:0;z-index:2;width:100%;height:100%;filter:brightness(1) saturate(1);pointer-events:none}\r\n.section .logoDotPulse{animation:logoDotFlash 0.52s cubic-bezier(0.22,1,0.36,1) forwards}\r\n.section .logoDotPulseStrong{animation:logoDotFlashStrong 0.68s cubic-bezier(0.22,1,0.36,1) forwards}\r\n.section .logoShellExit .conductorRing{border-color:rgba(61,123,255,0.34);opacity:0.8;box-shadow:0 0 16px rgba(61,123,255,0.28)}\r\n.section .logoShellExit .logoDot{filter:brightness(4.2) saturate(1.35) drop-shadow(0 0 8px rgba(255,255,255,0.55)) drop-shadow(0 0 16px rgba(0,102,255,1)) drop-shadow(0 0 32px rgba(61,123,255,0.95)) drop-shadow(0 0 48px rgba(0,102,255,0.55))}\r\n.section .logoShellSwitch .conductorRing,.logoShellRoundGlow .conductorRing{border-color:rgba(61,123,255,0.22)}\r\n.section .logoShellRoundGlow .conductorRing{opacity:0.65}\r\n@keyframes logoDotFlash{0%{\r\n    filter:brightness(1) saturate(1)}\r\n    32%{filter:brightness(4.2) saturate(1.35) drop-shadow(0 0 8px rgba(255,255,255,0.55)) drop-shadow(0 0 16px rgba(0,102,255,1)) drop-shadow(0 0 32px rgba(61,123,255,0.95)) drop-shadow(0 0 48px rgba(0,102,255,0.55))}\r\n    100%{filter:brightness(1) saturate(1)}\r\n}\r\n@keyframes logoDotFlashStrong{\r\n    0%{filter:brightness(1.1) saturate(1)}\r\n    36%{filter:brightness(5) saturate(1.45) drop-shadow(0 0 10px rgba(255,255,255,0.65)) drop-shadow(0 0 20px rgba(0,102,255,1)) drop-shadow(0 0 40px rgba(61,123,255,1)) drop-shadow(0 0 60px rgba(0,102,255,0.65))}\r\n    100%{filter:brightness(1) saturate(1)}\r\n}\r\n@keyframes dotPulse{\r\n    0%,100%{transform:scale(1);opacity:1}\r\n    50%{transform:scale(1.2);opacity:0.7}\r\n}\r\n.section .messageColumn{display:flex;flex-direction:column;gap:0;min-width:0}\r\n.section .messageRail{display:flex;gap:1.25rem;align-items:stretch}\r\n.section .messageAccent{width:2px;border-radius:2px;background:linear-gradient(180deg,#3d7bff 0%,rgba(55,171,255,0.4) 100%);background:linear-gradient(180deg,#3d7bff 0%,rgba(0,102,255,0.55) 55%,rgba(61,123,255,0.15) 100%)}\r\n.section .wordBlock{flex:1;min-width:0;opacity:0;transform:translateY(12px);transition:opacity 0.42s var(--ease-out),transform 0.42s var(--ease-out)}\r\n.section .wordBlockVisible{opacity:1;transform:translateY(0)}\r\n.section .messageContent{min-width:0}\r\n.section .title{margin:0;font-size:clamp(2rem,3.8vw,3rem);line-height:1.05;color:#ffffff;font-family: \"StackSansText\", OPPOSans;}\r\n.section .wordLead{display:inline-block;color:#3d7bff}\r\n.section .wordRest{display:inline-block}\r\n.section .copyBlock{margin-top:1.2rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,0.12);max-width:36rem}\r\n.section .headline{margin:0;font-size:1.1rem;line-height:1.5;color:rgba(255,255,255,0.95);font-family: \"StackSansText\", OPPOSans;}\r\n.section .body{margin:1rem 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:0.5rem}\r\n.section .body li{position:relative;padding-left:1.1rem;font-size:0.96rem;line-height:1.6;color:rgba(255,255,255,0.78)}\r\n.section .body li::before{content:'';position:absolute;left:0;top:0.768rem;width:4px;height:4px;margin-top: -2px;border-radius:50%;background:#3d7bff;box-shadow:0 0 12px rgba(112,180,255,0.5)}\r\n.section .progress{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:0.75rem 1.5rem;width:100%;max-width:38rem;margin-top:2rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,0.08)}\r\n.section .progressIndicator{position:absolute;top:-1px;left:0;width:2rem;height:1px;background:linear-gradient(90deg,transparent,#3d7bff 30%,#3d7bff 70%,transparent);transition:transform 0.4s var(--ease-out)}\r\n.section .progress button{border:none;background:none;color:rgba(255,255,255,0.24);font-size:0.78rem;letter-spacing:0.08em;cursor:pointer;padding:0;font-family: \"StackSansText\", OPPOSans;}\r\n.section .progress button.active{color:#ffffff}\r\n.section .progress button:hover{color:rgba(255,255,255,0.78)}\r\n.section .videoStage{position:relative;margin:2rem 1.5rem 0;min-height:24rem;border-radius:1.5rem;overflow:hidden;background:radial-gradient(circle at top left,rgba(55,171,255,0.22),transparent 35%),radial-gradient(circle at bottom right,rgba(.section 112,180,255,0.16),transparent 28%),linear-gradient(180deg,#040814 0%,#03131f 100%)}\r\n.section .videoOverlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(2,6,23,0.85),rgba(2,6,23,0))}\r\n.section .videoMessage{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:rgba(255,255,255,0.75);font-size:0.95rem;text-align:center}\r\n@media (max-width:800px){\r\n    .section .brandStage{grid-template-columns:1fr;gap:1.5rem}\r\n    .section .messageRail{gap:0.75rem}\r\n    .section .copyBlock{margin-top:1rem}\r\n    .section .headline{font-size:1rem}\r\n    .section .progress{gap:0.5rem 0.6rem;}\r\n    .section .progress button{white-space:nowrap}\r\n}\r\n@media(max-width: 767px){\r\n    .section .title{font-size: 24px;}\r\n    .section .body li{font-size: 13px;}\r\n    .section .body li::before{top: 6px;}\r\n}\r\n\r\n.hi5-videoStage{position: relative;}\r\n.hi5-videoStage:before{content: \"\";top: 0;left: 0;right: 0;z-index: 1;height: clamp(3rem, 10vw, 6rem);background: linear-gradient(to bottom, var(--color-black) 0%, transparent 100%);pointer-events: none;}\r\n.hi5-videoStage:after{content: '';position: absolute;inset: 0;z-index: 1;pointer-events: none;opacity: 0;background: radial-gradient(ellipse 55% 40% at 18% 0%, rgba(0, 102, 255, 0.12) 0%, transparent 70%);transition: opacity 0.4s var(--ease-smooth);}\r\n.hi5-videoStage.opa:after{opacity: 0.55;}\r\n<\/style>\r\n<section class=\"section\" id=\"hi5-core-values\" data-hi5-conduct=\"idle\" data-hi5-active=\"false\">\r\n    <div class=\"brandHeader\">\r\n        <p class=\"eyebrow\">HashKey Hi5 Core Values<\/p>\r\n        <div class=\"brandStage\">\r\n            <div class=\"logoColumn\">\r\n                <button id=\"logoButton\" class=\"logoShell\" type=\"button\" aria-label=\"\u70b9\u51fb\u5207\u6362\u5230\u4e0b\u4e00\u4e2a\u4ef7\u503c\u89c2\">\r\n                    <span class=\"conductorRing\" aria-hidden=\"true\"><\/span>\r\n                    <span class=\"logoLayer\" aria-hidden=\"true\">\r\n                        <img decoding=\"async\" src=\"https:\/\/group.hashkey.com\/wp-content\/uploads\/2026\/06\/hi5-logo-base.png\" class=\"logoImage\" alt=\"Hi5 logo base\" draggable=\"false\" \/>\r\n                        <img decoding=\"async\" src=\"https:\/\/group.hashkey.com\/wp-content\/uploads\/2026\/06\/hi5-logo-dot.png\" class=\"logoDot\" alt=\"Hi5 logo dot\" draggable=\"false\" \/>\r\n                    <\/span>\r\n                <\/button>\r\n            <\/div>\r\n            <div class=\"messageColumn\">\r\n                <div class=\"messageRail\">\r\n                    <span class=\"messageAccent\" aria-hidden=\"true\"><\/span>\r\n                    <div id=\"wordBlock\" class=\"wordBlock wordBlockVisible\">\r\n                        <div class=\"messageContent\">\r\n                            <h2 class=\"title\"><span id=\"wordLead\" class=\"wordLead\">F<\/span><span id=\"wordRest\" class=\"wordRest\">ocus<\/span><\/h2>\r\n                            <div class=\"copyBlock\">\r\n                                <p id=\"headline\" class=\"headline\">Build on Strengths. Create the Long Board.<\/p>\r\n                                <ul id=\"bodyList\" class=\"body\"><\/ul>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <nav id=\"progress\" class=\"progress\" aria-label=\"Hi5 values\">\r\n                    <span class=\"progressIndicator\" aria-hidden=\"true\"><\/span>\r\n                <\/nav>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n<script>\r\nlet values = []\r\nlet bgVideoBox = null\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n    bgVideoBox = document.querySelector(\".hi5-videoStage\")\r\n    if(window.elementorFrontend && window.elementorFrontend.isEditMode()){\r\n        \/\/ \u5982\u679c\u662f\u51fa\u4e8eelementor\u7684\u7f16\u8f91\u73af\u5883\u4e0b\uff0c\u5c31\u4e0d\u6267\u884c\u52a8\u753b\u4ee5\u65b9\u4fbf\u7528\u6237\u4fee\u6539\u8d44\u6599\r\n        return\r\n    }else{\r\n        var title0 = document.querySelector(\".hi5-title\")\r\n        var title = document.querySelector(\".section .eyebrow\")\r\n        console.log(title0,title)\r\n        if(title0 && title){\r\n            title.innerText = title0.innerText\r\n            title0.innerText = \"\"\r\n        }\r\n\r\n        const items = document.querySelectorAll(\".hi5-meaning\")\r\n        items.forEach((v,i)=>{\r\n            let word = v.querySelector(\".hi5-valueWord\").innerText\r\n            let headline = v.querySelector(\".hi5-meaningHeadline\").innerText\r\n            let body = v.querySelector(\".hi5-meaningBody\").innerText.split(\"\\n\")\r\n            const obj = {\r\n                id: word,\r\n                word: word,\r\n                headline: headline,\r\n                body: body\r\n            }\r\n            values.push(obj)\r\n            v.parentNode.removeChild(v)\r\n        })\r\n        letteAni()\r\n    }\r\n})\r\nfunction letteAni() {\r\n    const HOLD_MS = 2000;\r\n    let activeIndex = 0;\r\n    let timerId = null;\r\n    let paused = false;\r\n    let pulseTimer = null;\r\n\r\n    const section = document.getElementById('hi5-core-values');\r\n    const wordBlock = document.getElementById('wordBlock');\r\n    const wordLead = document.getElementById('wordLead');\r\n    const wordRest = document.getElementById('wordRest');\r\n    const headline = document.getElementById('headline');\r\n    const bodyList = document.getElementById('bodyList');\r\n    const progress = document.getElementById('progress');\r\n    const logoButton = document.getElementById('logoButton');\r\n\r\n    function updateIndicator() {\r\n        const activeButton = progress.querySelector('button.active');\r\n        const indicator = document.querySelector('.progressIndicator');\r\n        if (!activeButton || !indicator) return;\r\n        const rect = activeButton.getBoundingClientRect();\r\n        const containerRect = progress.getBoundingClientRect();\r\n        const x = rect.left - containerRect.left + rect.width \/ 2;\r\n        indicator.style.transform = `translateX(${x}px) translateX(-50%)`;\r\n    }\r\n\r\n    function triggerDotPulse(kind = 'normal') {\r\n        const dot = document.querySelector('.logoDot');\r\n        const shell = document.querySelector('.logoShell');\r\n        if (!dot || !shell) return;\r\n\r\n        dot.classList.remove('logoDotPulse', 'logoDotPulseStrong');\r\n        shell.classList.remove('logoShellSwitch', 'logoShellRoundGlow');\r\n        void dot.offsetWidth;\r\n\r\n        if (kind === 'strong') {\r\n            shell.classList.add('logoShellRoundGlow');\r\n            dot.classList.add('logoDotPulseStrong');\r\n        } else {\r\n            shell.classList.add('logoShellSwitch');\r\n            dot.classList.add('logoDotPulse');\r\n        }\r\n\r\n        if (pulseTimer) {\r\n            clearTimeout(pulseTimer);\r\n        }\r\n        pulseTimer = window.setTimeout(() => {\r\n            dot.classList.remove('logoDotPulse', 'logoDotPulseStrong');\r\n            shell.classList.remove('logoShellSwitch', 'logoShellRoundGlow');\r\n            pulseTimer = null;\r\n        }, kind === 'strong' ? 920 : 560);\r\n    }\r\n\r\n    function setImmediateValue(index) {\r\n        const value = values[index];\r\n        activeIndex = index;\r\n        wordLead.textContent = value.word.slice(0, 1);\r\n        wordRest.textContent = value.word.slice(1);\r\n        headline.textContent = value.headline;\r\n        bodyList.innerHTML = '';\r\n        value.body.forEach((line) => {\r\n            const li = document.createElement('li');\r\n            li.textContent = line;\r\n            bodyList.appendChild(li);\r\n        });\r\n\r\n        progress.querySelectorAll('button').forEach((button, idx) => {\r\n            button.classList.toggle('active', idx === index);\r\n            button.setAttribute('aria-current', idx === index ? 'step' : 'false');\r\n        });\r\n        updateIndicator();\r\n    }\r\n\r\n    let switchTimer = null;\r\n    let enterTimer = null;\r\n    let flashTimer = null;\r\n\r\n    function clearSwitchTimers() {\r\n        if (switchTimer) {\r\n            clearTimeout(switchTimer);\r\n            switchTimer = null;\r\n        }\r\n        if (enterTimer) {\r\n            clearTimeout(enterTimer);\r\n            enterTimer = null;\r\n        }\r\n        if (flashTimer) {\r\n            clearTimeout(flashTimer);\r\n            flashTimer = null;\r\n        }\r\n    }\r\n\r\n    function switchTo(index, pulseKind = 'normal') {\r\n        clearSwitchTimers();\r\n        clearTimeout(timerId);\r\n        const shell = document.querySelector('.logoShell');\r\n        if (shell) {\r\n            shell.classList.remove('logoShellSwitch', 'logoShellRoundGlow', 'logoShellExit');\r\n        }\r\n\r\n        section.dataset.hi5Conduct = 'swap';\r\n        bgVideoBox.classList.remove(\"opa\")\r\n        section.dataset.hi5Active = 'true';\r\n        wordBlock.classList.remove('wordBlockVisible');\r\n        void wordBlock.offsetWidth;\r\n\r\n        switchTimer = window.setTimeout(() => {\r\n            setImmediateValue(index);\r\n            section.dataset.hi5Conduct = 'swap';\r\n            bgVideoBox.classList.remove(\"opa\")\r\n            if (shell) {\r\n                shell.classList.add('logoShellExit');\r\n            }\r\n\r\n            flashTimer = window.setTimeout(() => {\r\n                if (shell) {\r\n                    shell.classList.remove('logoShellExit');\r\n                    if (pulseKind === 'strong') {\r\n                        shell.classList.add('logoShellRoundGlow');\r\n                    } else {\r\n                        shell.classList.add('logoShellSwitch');\r\n                    }\r\n                }\r\n            }, 140);\r\n        }, 200);\r\n\r\n        enterTimer = window.setTimeout(() => {\r\n            section.dataset.hi5Conduct = 'enter';\r\n            bgVideoBox.classList.add(\"opa\")\r\n            if (shell) {\r\n                shell.classList.remove('logoShellExit');\r\n            }\r\n            triggerDotPulse(pulseKind);\r\n            wordBlock.classList.add('wordBlockVisible');\r\n            if (!paused) {\r\n                clearTimeout(timerId);\r\n                timerId = window.setTimeout(nextValue, HOLD_MS);\r\n            }\r\n        }, pulseKind === 'strong' ? 920 : 560);\r\n    }\r\n\r\n    function setValue(index, transition = true) {\r\n        const value = values[index];\r\n        activeIndex = index;\r\n        section.dataset.hi5Conduct = 'enter';\r\n        bgVideoBox.classList.add(\"opa\")\r\n        section.dataset.hi5Active = 'true';\r\n        if (transition) {\r\n            wordBlock.classList.remove('wordBlockVisible');\r\n            void wordBlock.offsetWidth;\r\n        }\r\n\r\n        setTimeout(() => {\r\n            wordLead.textContent = value.word.slice(0, 1);\r\n            wordRest.textContent = value.word.slice(1);\r\n            headline.textContent = value.headline;\r\n            bodyList.innerHTML = '';\r\n            value.body.forEach((line) => {\r\n                const li = document.createElement('li');\r\n                li.textContent = line;\r\n                bodyList.appendChild(li);\r\n            });\r\n            wordBlock.classList.add('wordBlockVisible');\r\n            updateIndicator();\r\n        }, transition ? 120 : 0);\r\n\r\n        progress.querySelectorAll('button').forEach((button, idx) => {\r\n            button.classList.toggle('active', idx === index);\r\n            button.setAttribute('aria-current', idx === index ? 'step' : 'false');\r\n        });\r\n    }\r\n\r\n    function nextValue() {\r\n        const next = (activeIndex + 1) % values.length;\r\n        const pulseKind = activeIndex === values.length - 1 ? 'strong' : 'normal';\r\n        switchTo(next, pulseKind);\r\n    }\r\n\r\n    function pauseLoop() {\r\n        paused = true;\r\n        section.dataset.hi5Active = 'false';\r\n        clearTimeout(timerId);\r\n        clearSwitchTimers();\r\n    }\r\n\r\n    function resumeLoop() {\r\n        if (!paused) return;\r\n        paused = false;\r\n        section.dataset.hi5Active = 'true';\r\n        clearTimeout(timerId);\r\n        timerId = window.setTimeout(nextValue, HOLD_MS);\r\n    }\r\n\r\n    function buildProgress() {\r\n        values.forEach((item, index) => {\r\n            const button = document.createElement('button');\r\n            button.type = 'button';\r\n            button.textContent = item.word;\r\n            button.addEventListener('click', () => {\r\n                paused = false;\r\n                switchTo(index, 'normal');\r\n            });\r\n            button.addEventListener('mouseenter', () => {\r\n                pauseLoop();\r\n                switchTo(index, 'normal');\r\n            });\r\n            button.addEventListener('mouseleave', resumeLoop);\r\n            button.addEventListener('focus', () => {\r\n                pauseLoop();\r\n                switchTo(index, 'normal');\r\n            });\r\n            button.addEventListener('blur', resumeLoop);\r\n            progress.appendChild(button);\r\n        });\r\n    }\r\n\r\n    logoButton.addEventListener('click', () => {\r\n        paused = false;\r\n        const next = (activeIndex + 1) % values.length;\r\n        const pulseKind = activeIndex === values.length - 1 ? 'strong' : 'normal';\r\n        switchTo(next, pulseKind);\r\n    });\r\n\r\n    logoButton.addEventListener('mouseenter', pauseLoop);\r\n    logoButton.addEventListener('mouseleave', resumeLoop);\r\n    logoButton.addEventListener('focus', pauseLoop);\r\n    logoButton.addEventListener('blur', resumeLoop);\r\n\r\n    window.addEventListener('resize', updateIndicator);\r\n\r\n    buildProgress();\r\n    setValue(0, false);\r\n    if (!paused) {\r\n        timerId = window.setTimeout(nextValue, HOLD_MS);\r\n    }\r\n    window.requestAnimationFrame(updateIndicator);\r\n}\r\n\r\n<\/script>\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ae6d125 e-con-full video-wrap e-flex e-con e-parent\" data-id=\"ae6d125\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4314bc4 e-con e-atomic-element e-div-block-base e-4314bc4-097532a hi5-videoStage \" data-id=\"4314bc4\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4314bc4\" data-e-type=\"e-div-block\" data-id=\"4314bc4\">\n    \t\t\t\t  \t<video\n    data-id=\"2dc2c82\" data-interaction-id=\"2dc2c82\"\n    data-e-type=\"e-self-hosted-video\" data-interactions=\"null\"\n    \n    class=\"hi5-bgVideo e-self-hosted-video-base\"\n    data-e-type=\"widget\" data-id=\"2dc2c82\"\n\t\tclass=\"e-self-hosted-video-base\"\n\t\t\t\tautoplay\t\tmuted\t\tloop\t\t\t\tplaysinline\t\tcontrolslist=\"nodownload\"\t\tpreload=\"metadata\"\n\t>\n\t\t<source src=\"https:\/\/group-oss.hashkey.com\/wp-content\/uploads\/2026\/07\/44.5M-career.mp4#t=0\">\n\t<\/video>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Be Part of What Defines Tomorrow We&#8217;re looking for bold thinkers and driven achievers to join us in shaping the next generation of the digital economy. View Open Roles Why Join Us At HashKey, we are committed to the long-term development of digital finance. We bring together top talent from finance, technology, and blockchain to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-10259","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/pages\/10259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/comments?post=10259"}],"version-history":[{"count":720,"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/pages\/10259\/revisions"}],"predecessor-version":[{"id":14447,"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/pages\/10259\/revisions\/14447"}],"wp:attachment":[{"href":"https:\/\/group.hashkey.com\/zh\/wp-json\/wp\/v2\/media?parent=10259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}