{"version":3,"sources":["webpack:///./app/javascript/assets/index.js","webpack:///./app/javascript/assets/about_us_bg.jpg","webpack:///./app/javascript/assets/badges/Clutch.svg","webpack:///./app/javascript/assets/badges/Goodfirms.svg","webpack:///./app/javascript/assets/badges/WADLINE.svg","webpack:///./app/javascript/assets/better_best.png","webpack:///./app/javascript/assets/blog_banner.jpg","webpack:///./app/javascript/assets/case_study_banner.jpg","webpack:///./app/javascript/assets/consultation/budget_15000.svg","webpack:///./app/javascript/assets/consultation/budget_25000.svg","webpack:///./app/javascript/assets/consultation/budget_35000.svg","webpack:///./app/javascript/assets/consultation/platform_desktop.svg","webpack:///./app/javascript/assets/consultation/platform_mobile.svg","webpack:///./app/javascript/assets/consultation/platform_others.svg","webpack:///./app/javascript/assets/consultation/project_type_app.svg","webpack:///./app/javascript/assets/consultation/project_type_others.svg","webpack:///./app/javascript/assets/consultation/project_type_web.svg","webpack:///./app/javascript/assets/estimate_success_check.svg","webpack:///./app/javascript/assets/good_at/Azure.png","webpack:///./app/javascript/assets/good_at/Google.png","webpack:///./app/javascript/assets/good_at/PHP.png","webpack:///./app/javascript/assets/good_at/angular.png","webpack:///./app/javascript/assets/good_at/ansible.png","webpack:///./app/javascript/assets/good_at/aws.png","webpack:///./app/javascript/assets/good_at/devops.png","webpack:///./app/javascript/assets/good_at/docker.png","webpack:///./app/javascript/assets/good_at/elixir.png","webpack:///./app/javascript/assets/good_at/heroku.png","webpack:///./app/javascript/assets/good_at/ionic.png","webpack:///./app/javascript/assets/good_at/jquery.png","webpack:///./app/javascript/assets/good_at/js.png","webpack:///./app/javascript/assets/good_at/linux.png","webpack:///./app/javascript/assets/good_at/pve.png","webpack:///./app/javascript/assets/good_at/python.png","webpack:///./app/javascript/assets/good_at/rails.png","webpack:///./app/javascript/assets/good_at/react.png","webpack:///./app/javascript/assets/good_at/vue.png","webpack:///./app/javascript/assets/good_at/webpack.png","webpack:///./app/javascript/assets/icons/address.svg","webpack:///./app/javascript/assets/icons/mail.svg","webpack:///./app/javascript/assets/icons/phone.svg","webpack:///./app/javascript/assets/logo.svg","webpack:///./app/javascript/assets/logo-b.svg","webpack:///./app/javascript/assets/mobile-nav-cross.svg","webpack:///./app/javascript/assets/mobile-nav-toggle.svg","webpack:///./app/javascript/assets/move_your_business_forward.svg","webpack:///./app/javascript/assets/og-image.jpg","webpack:///./app/javascript/assets/ol_li_ruby.svg","webpack:///./app/javascript/assets/our_value_bg.jpg","webpack:///./app/javascript/assets/our_vision_banner.jpg","webpack:///./app/javascript/assets/partners/5fpro.svg","webpack:///./app/javascript/assets/partners/accupass.svg","webpack:///./app/javascript/assets/partners/backer_founder.svg","webpack:///./app/javascript/assets/partners/dappei.svg","webpack:///./app/javascript/assets/partners/golden_io.svg","webpack:///./app/javascript/assets/partners/itrue.svg","webpack:///./app/javascript/assets/partners/jourdeness.svg","webpack:///./app/javascript/assets/partners/shopmatic.svg","webpack:///./app/javascript/assets/partners/space_next_door.svg","webpack:///./app/javascript/assets/partners/yourator.svg","webpack:///./app/javascript/assets/press_banner.jpg","webpack:///./app/javascript/assets/ruby_gray.svg","webpack:///./app/javascript/assets/ruby_red.svg","webpack:///./app/javascript/assets/service_bg.jpg","webpack:///./app/javascript/assets/service_ruby.svg","webpack:///./app/javascript/assets/socials/edm.svg","webpack:///./app/javascript/assets/socials/fb.svg","webpack:///./app/javascript/assets/socials/github.svg","webpack:///./app/javascript/assets/socials/linkedin.svg","webpack:///./app/javascript/assets/socials/twitter.svg","webpack:///./app/javascript/assets/staffs/ian.png","webpack:///./app/javascript/assets/staffs/jason_cheng.jpg","webpack:///./app/javascript/assets/staffs/mufan_teng.jpg","webpack:///./app/javascript/assets/staffs/qiu_zheng_xian.jpg","webpack:///./app/javascript/assets/staffs/sho_chang.jpg","webpack:///./app/javascript/assets/staffs/tsehau_chao.jpg","webpack:///./app/javascript/assets/success.svg","webpack:///./app/javascript/assets sync ^\\.\\/.*$","webpack:///./app/javascript/application/nav.js","webpack:///./app/javascript/application/moreLoader.js","webpack:///./app/javascript/application/pageTop.js","webpack:///./app/javascript/home/carousel.js","webpack:///./app/javascript/home/introducingTransitions.js","webpack:///./app/javascript/application/socialSdks.js","webpack:///./app/javascript/packs/application.js"],"names":["assets","require","getAssetPath","name","module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","mobileNavToggle","mobileNavCross","mobileNavToggleHandler","scrollHandler","mountNav","document","getElementById","mobileNavOpened","navMobileContent","style","height","removeProperty","addEventListener","nav","navOpened","setNavOpened","navShouldOpen","top","offsetHeight","scrollDiff","lastScrollY","window","scrollY","newScrollDiff","Math","abs","pageTopBtns","glide","registeredMoreLoaders","mountMoreLoader","querySelectorAll","forEach","dom","dataset","containerQuery","moreLoaderContainer","itemQuery","moreLoaderItem","nextQuery","moreLoaderNext","container","querySelector","moreLoaderHref","href","loading","eventHandler","event","a","preventDefault","oriTextContent","textContent","fetch","request","DOMParser","text","htmlDoc","parseFromString","item","appendChild","nextBtn","filter","d","remove","push","scrollToTop","scrollTo","behavior","mountPageTop","btn","mountHomeCarousel","homeCarouselDiv","slides","Glide","type","gap","length","autoplay","hoverpause","mount","timeouts","introducingTransitions","introducingDOMs","values","getBoundingClientRect","left","parseInt","introducingOrderOffset","sort","aTop","aLeft","bTop","bLeft","topComp","transitioning","scrolled","detectAndIntroduce","index","bottom","classList","add","innerHeight","splice","nextDetect","setTimeout","mountIntroducingTransitions","FBSDK_SCRIPT","TWITTER_WIDGETS_SCRIPT","LINE_SOCIAL_PLUGIN_SCRIPT","initialized","loadSocialSdks","LineIt","loadButton","FB","XFBML","parse","twttr","widgets","load","scriptUrl","scriptTag","createElement","src","async","defer","crossorigin","fbScriptTag","twitterScriptTag","lineScriptTag","setAttribute","head","_e","events","bind","dataLayer","start","Prism","highlightAll","removeEventListener","destroy","t","clearTimeout"],"mappings":"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","file":"js/application-ecc0a9dc1ebfc5758fc0.chunk.js","sourcesContent":["// copy all static assets under ./ to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `getAssetPath` JavaScript helper below.\n\nconst assets = require.context('./', true);\nconst getAssetPath = (name) => assets(name, true);\n\nexport default getAssetPath;\n","module.exports = __webpack_public_path__ + \"media/assets/about_us_bg-abd60a1d04526d169bb370e571a68177.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/badges/Clutch-d4a153475c3d44c1f9b0509b0b3ab4c5.svg\";","module.exports = __webpack_public_path__ + \"media/assets/badges/Goodfirms-91b1f70be0c26181f7d82f9b947adb53.svg\";","module.exports = __webpack_public_path__ + \"media/assets/badges/WADLINE-818a758b579d41b02bad44954dea06c1.svg\";","module.exports = __webpack_public_path__ + \"media/assets/better_best-824899a6c7e378b88ff9e357fb624bb1.png\";","module.exports = __webpack_public_path__ + \"media/assets/blog_banner-fe4276b30f347602aa45049cdb690110.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/case_study_banner-32741c843e08f716b6c08de4fbd0adbc.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/budget_15000-c9a7f34668b5fe7250d830bb70a0d26f.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/budget_25000-596d958ba7e8a3ea81abdacec1c77fb9.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/budget_35000-d4d674223a4421cefc6de37d54f98030.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/platform_desktop-e6383a7a63d083cbee2cd11912922360.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/platform_mobile-b8b180d1260820afc6d7a07d080b2cb0.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/platform_others-daad1d940ec70385db33d72b9ce64866.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/project_type_app-4bd3ad086a6562ce13e2c8013499a346.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/project_type_others-7c58e5904c59877d87b67e8c1d02cb06.svg\";","module.exports = __webpack_public_path__ + \"media/assets/consultation/project_type_web-7f2aba7ade0b16a0f16e64cfef02acd4.svg\";","module.exports = __webpack_public_path__ + \"media/assets/estimate_success_check-187da01ad5eb075974c4ff3a424424ac.svg\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/Azure-769b278fd274f115c48ba462c0055aea.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/Google-1a55c50d3174cc51ee3783dd3a0f5549.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/PHP-d86783e591d9a2bff6176be3f6869c7a.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/angular-abe08b4bb62f895f11e57d2b76fe0ec1.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/ansible-1b756cc228ec41c39e3b3c19e90f84dc.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/aws-cc83e4a1637232943570dcac70d1e151.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/devops-3d4c91d86ac470df776110151a1e8121.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/docker-7ad5d6e0dd59dc59d905c1cfff3e0fde.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/elixir-4573f4d9f7873ce97150d7d67e467f13.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/heroku-6be1f64720b82808f364350123660b6d.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/ionic-3d611f08170887dae95fa5bda304fd4d.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/jquery-698271469870f9358bdb96de7dd2ee0d.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/js-dbc3ba87d600ededcf5ce96dc065e783.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/linux-fffc21d61efd669c42f38347398bd0c2.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/pve-dd6b7902eb7979b4a87fa2486b5b3527.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/python-37d2b29995680607b0b839a401379835.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/rails-4191e501dc0dfd5afb28d557cb104d6c.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/react-c78dcc1530f7132397e1b85b8431b0e8.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/vue-30ce6a660aa5562d0a938416fddbef14.png\";","module.exports = __webpack_public_path__ + \"media/assets/good_at/webpack-20067be5983282920c1e6cae86c62952.png\";","module.exports = __webpack_public_path__ + \"media/assets/icons/address-c52763f7bee5bbdbac8d4fe1414e1f7f.svg\";","module.exports = __webpack_public_path__ + \"media/assets/icons/mail-d964eade99d54e860a1fbc4d04acc173.svg\";","module.exports = __webpack_public_path__ + \"media/assets/icons/phone-f9cd55cdc5b0db04cd9d7acb01943018.svg\";","module.exports = __webpack_public_path__ + \"media/assets/logo-0dc570c9821ece8ce738d2853e684244.svg\";","module.exports = __webpack_public_path__ + \"media/assets/logo-b-a5097522a67581881d916826e082e938.svg\";","module.exports = __webpack_public_path__ + \"media/assets/mobile-nav-cross-8c918cd8b68a3ed2da99fb0fa08772ea.svg\";","module.exports = __webpack_public_path__ + \"media/assets/mobile-nav-toggle-15a7459656c81a82acd2e36452ef81a9.svg\";","module.exports = __webpack_public_path__ + \"media/assets/move_your_business_forward-4e4a6b517d76959c9b4ada0b584eaf09.svg\";","module.exports = __webpack_public_path__ + \"media/assets/og-image-ca7a0275bac4f1aa15b88c8d8066959e.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/ol_li_ruby-14c43d0ed44e05d3a266d50c47200612.svg\";","module.exports = __webpack_public_path__ + \"media/assets/our_value_bg-003d54c18360680e9b045cc843b11206.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/our_vision_banner-86c99b1c00cb1ee15eccf20aad40e65b.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/5fpro-7bc589ab2f81d18170adc14432fb67f6.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/accupass-f0421c3359b397abd75a4767b649541b.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/backer_founder-fe8d2037d6d28ffe5bff27fdbf2bf474.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/dappei-2331cbde807114624bce011c0032db7b.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/golden_io-d7837932f294c4e3ceedba2cb6915d7e.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/itrue-9b37c317e9b2e05d55bd4fff047d5df2.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/jourdeness-922016387d023cb63f034531812bf237.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/shopmatic-6772cbf0bd4bfb5bd5b7b73697748bfd.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/space_next_door-4c81edf6979b0196a15599586ab18323.svg\";","module.exports = __webpack_public_path__ + \"media/assets/partners/yourator-b828e791a7b9011023245205ce3551e3.svg\";","module.exports = __webpack_public_path__ + \"media/assets/press_banner-8d4300e3ae5edc5263af7e9e4b8774d0.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/ruby_gray-c953249221a42f1823d2e7cf6d36e162.svg\";","module.exports = __webpack_public_path__ + \"media/assets/ruby_red-4dfd3218d38cee3ed77d765fb85e2ed8.svg\";","module.exports = __webpack_public_path__ + \"media/assets/service_bg-6c0292a5ea42242a923610ad0417ae50.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/service_ruby-57b9f9752567ea6af14afdd5d8befd2e.svg\";","module.exports = __webpack_public_path__ + \"media/assets/socials/edm-182b5a9ea101ef407234d73a50fca6df.svg\";","module.exports = __webpack_public_path__ + \"media/assets/socials/fb-e5bf4efe5e421341b81d1c102a296273.svg\";","module.exports = __webpack_public_path__ + \"media/assets/socials/github-859061bf024d5fa989b2af496fa95eaa.svg\";","module.exports = __webpack_public_path__ + \"media/assets/socials/linkedin-4326ecf67686188accb22db1f8d6d329.svg\";","module.exports = __webpack_public_path__ + \"media/assets/socials/twitter-479b54a96b7fc7ccab3d461e8ea1458f.svg\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/ian-2037c35481dc9f0759672dffa57f52f7.png\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/jason_cheng-3273de157cb37ca057ee70025603f340.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/mufan_teng-135fe4564e459731f7e095a6046881fa.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/qiu_zheng_xian-18513e557e1d030c8bf3f5b9781c372d.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/sho_chang-494e94940501deac6c41f0724448bc98.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/staffs/tsehau_chao-f44a3f14fbc083a52e4771a18e7d54e8.jpg\";","module.exports = __webpack_public_path__ + \"media/assets/success-66d03fcbb32aa0dcf2443ff102ceeef2.svg\";","var map = {\n\t\"./\": 1,\n\t\"./about_us_bg\": 5,\n\t\"./about_us_bg.jpg\": 5,\n\t\"./badges/Clutch\": 6,\n\t\"./badges/Clutch.svg\": 6,\n\t\"./badges/Goodfirms\": 7,\n\t\"./badges/Goodfirms.svg\": 7,\n\t\"./badges/WADLINE\": 8,\n\t\"./badges/WADLINE.svg\": 8,\n\t\"./better_best\": 9,\n\t\"./better_best.png\": 9,\n\t\"./blog_banner\": 10,\n\t\"./blog_banner.jpg\": 10,\n\t\"./case_study_banner\": 11,\n\t\"./case_study_banner.jpg\": 11,\n\t\"./consultation/budget_15000\": 12,\n\t\"./consultation/budget_15000.svg\": 12,\n\t\"./consultation/budget_25000\": 13,\n\t\"./consultation/budget_25000.svg\": 13,\n\t\"./consultation/budget_35000\": 14,\n\t\"./consultation/budget_35000.svg\": 14,\n\t\"./consultation/platform_desktop\": 15,\n\t\"./consultation/platform_desktop.svg\": 15,\n\t\"./consultation/platform_mobile\": 16,\n\t\"./consultation/platform_mobile.svg\": 16,\n\t\"./consultation/platform_others\": 17,\n\t\"./consultation/platform_others.svg\": 17,\n\t\"./consultation/project_type_app\": 18,\n\t\"./consultation/project_type_app.svg\": 18,\n\t\"./consultation/project_type_others\": 19,\n\t\"./consultation/project_type_others.svg\": 19,\n\t\"./consultation/project_type_web\": 20,\n\t\"./consultation/project_type_web.svg\": 20,\n\t\"./estimate_success_check\": 21,\n\t\"./estimate_success_check.svg\": 21,\n\t\"./good_at/Azure\": 22,\n\t\"./good_at/Azure.png\": 22,\n\t\"./good_at/Google\": 23,\n\t\"./good_at/Google.png\": 23,\n\t\"./good_at/PHP\": 24,\n\t\"./good_at/PHP.png\": 24,\n\t\"./good_at/angular\": 25,\n\t\"./good_at/angular.png\": 25,\n\t\"./good_at/ansible\": 26,\n\t\"./good_at/ansible.png\": 26,\n\t\"./good_at/aws\": 27,\n\t\"./good_at/aws.png\": 27,\n\t\"./good_at/devops\": 28,\n\t\"./good_at/devops.png\": 28,\n\t\"./good_at/docker\": 29,\n\t\"./good_at/docker.png\": 29,\n\t\"./good_at/elixir\": 30,\n\t\"./good_at/elixir.png\": 30,\n\t\"./good_at/heroku\": 31,\n\t\"./good_at/heroku.png\": 31,\n\t\"./good_at/ionic\": 32,\n\t\"./good_at/ionic.png\": 32,\n\t\"./good_at/jquery\": 33,\n\t\"./good_at/jquery.png\": 33,\n\t\"./good_at/js\": 34,\n\t\"./good_at/js.png\": 34,\n\t\"./good_at/linux\": 35,\n\t\"./good_at/linux.png\": 35,\n\t\"./good_at/pve\": 36,\n\t\"./good_at/pve.png\": 36,\n\t\"./good_at/python\": 37,\n\t\"./good_at/python.png\": 37,\n\t\"./good_at/rails\": 38,\n\t\"./good_at/rails.png\": 38,\n\t\"./good_at/react\": 39,\n\t\"./good_at/react.png\": 39,\n\t\"./good_at/vue\": 40,\n\t\"./good_at/vue.png\": 40,\n\t\"./good_at/webpack\": 41,\n\t\"./good_at/webpack.png\": 41,\n\t\"./icons/address\": 42,\n\t\"./icons/address.svg\": 42,\n\t\"./icons/mail\": 43,\n\t\"./icons/mail.svg\": 43,\n\t\"./icons/phone\": 44,\n\t\"./icons/phone.svg\": 44,\n\t\"./index\": 1,\n\t\"./index.js\": 1,\n\t\"./logo\": 45,\n\t\"./logo-b\": 46,\n\t\"./logo-b.svg\": 46,\n\t\"./logo.svg\": 45,\n\t\"./mobile-nav-cross\": 47,\n\t\"./mobile-nav-cross.svg\": 47,\n\t\"./mobile-nav-toggle\": 48,\n\t\"./mobile-nav-toggle.svg\": 48,\n\t\"./move_your_business_forward\": 49,\n\t\"./move_your_business_forward.svg\": 49,\n\t\"./og-image\": 50,\n\t\"./og-image.jpg\": 50,\n\t\"./ol_li_ruby\": 51,\n\t\"./ol_li_ruby.svg\": 51,\n\t\"./our_value_bg\": 52,\n\t\"./our_value_bg.jpg\": 52,\n\t\"./our_vision_banner\": 53,\n\t\"./our_vision_banner.jpg\": 53,\n\t\"./partners/5fpro\": 54,\n\t\"./partners/5fpro.svg\": 54,\n\t\"./partners/accupass\": 55,\n\t\"./partners/accupass.svg\": 55,\n\t\"./partners/backer_founder\": 56,\n\t\"./partners/backer_founder.svg\": 56,\n\t\"./partners/dappei\": 57,\n\t\"./partners/dappei.svg\": 57,\n\t\"./partners/golden_io\": 58,\n\t\"./partners/golden_io.svg\": 58,\n\t\"./partners/itrue\": 59,\n\t\"./partners/itrue.svg\": 59,\n\t\"./partners/jourdeness\": 60,\n\t\"./partners/jourdeness.svg\": 60,\n\t\"./partners/shopmatic\": 61,\n\t\"./partners/shopmatic.svg\": 61,\n\t\"./partners/space_next_door\": 62,\n\t\"./partners/space_next_door.svg\": 62,\n\t\"./partners/yourator\": 63,\n\t\"./partners/yourator.svg\": 63,\n\t\"./press_banner\": 64,\n\t\"./press_banner.jpg\": 64,\n\t\"./ruby_gray\": 65,\n\t\"./ruby_gray.svg\": 65,\n\t\"./ruby_red\": 66,\n\t\"./ruby_red.svg\": 66,\n\t\"./service_bg\": 67,\n\t\"./service_bg.jpg\": 67,\n\t\"./service_ruby\": 68,\n\t\"./service_ruby.svg\": 68,\n\t\"./socials/edm\": 69,\n\t\"./socials/edm.svg\": 69,\n\t\"./socials/fb\": 70,\n\t\"./socials/fb.svg\": 70,\n\t\"./socials/github\": 71,\n\t\"./socials/github.svg\": 71,\n\t\"./socials/linkedin\": 72,\n\t\"./socials/linkedin.svg\": 72,\n\t\"./socials/twitter\": 73,\n\t\"./socials/twitter.svg\": 73,\n\t\"./staffs/ian\": 74,\n\t\"./staffs/ian.png\": 74,\n\t\"./staffs/jason_cheng\": 75,\n\t\"./staffs/jason_cheng.jpg\": 75,\n\t\"./staffs/mufan_teng\": 76,\n\t\"./staffs/mufan_teng.jpg\": 76,\n\t\"./staffs/qiu_zheng_xian\": 77,\n\t\"./staffs/qiu_zheng_xian.jpg\": 77,\n\t\"./staffs/sho_chang\": 78,\n\t\"./staffs/sho_chang.jpg\": 78,\n\t\"./staffs/tsehau_chao\": 79,\n\t\"./staffs/tsehau_chao.jpg\": 79,\n\t\"./success\": 80,\n\t\"./success.svg\": 80\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 83;","import './nav.scss';\n\nlet mobileNavToggle;\nlet mobileNavCross;\nlet mobileNavToggleHandler;\nlet scrollHandler;\n\nconst mountNav = () => {\n mobileNavToggle = document.getElementById('mobile-nav-toggle');\n mobileNavCross = document.getElementById('mobile-nav-cross');\n let mobileNavOpened = false;\n\n mobileNavToggleHandler = () => {\n const navMobileContent = document.getElementById('nav-mobile-content');\n if (!navMobileContent) {\n return;\n }\n mobileNavOpened = !mobileNavOpened;\n if (mobileNavOpened) {\n navMobileContent.style.height = '100vh';\n } else {\n navMobileContent.style.removeProperty('height');\n }\n };\n\n if (mobileNavToggle) {\n mobileNavToggle.addEventListener('click', mobileNavToggleHandler);\n }\n if (mobileNavCross) {\n mobileNavCross.addEventListener('click', mobileNavToggleHandler);\n }\n\n const nav = document.getElementById('nav');\n if (nav) {\n let navOpened;\n const setNavOpened = (navShouldOpen) => {\n if (navShouldOpen !== navOpened) {\n if (navShouldOpen) {\n nav.style.removeProperty('top');\n } else {\n nav.style.top = `-${nav.offsetHeight}px`;\n }\n navOpened = navShouldOpen;\n }\n };\n setNavOpened(true); // force nav to be opened at init\n\n let scrollDiff = 0;\n let lastScrollY = window.scrollY;\n\n scrollHandler = () => {\n const newScrollDiff = window.scrollY - lastScrollY;\n lastScrollY = window.scrollY;\n\n if (scrollDiff === 0 || ((newScrollDiff > 0) === (scrollDiff > 0))) {\n scrollDiff += newScrollDiff;\n } else {\n scrollDiff = 0;\n }\n\n const navShouldOpen = mobileNavOpened || window.scrollY <= 0 || (\n Math.abs(scrollDiff) > nav.offsetHeight / 2 ? (scrollDiff < 0) : navOpened\n );\n\n setNavOpened(navShouldOpen);\n };\n\n window.addEventListener('scroll', scrollHandler);\n }\n};\n\nexport const unmountNav = () => {\n if (mobileNavToggleHandler) {\n if (mobileNavToggle) {\n mobileNavToggle.removeEventListener('click', mobileNavToggleHandler);\n }\n if (mobileNavCross) {\n mobileNavCross.removeEventListener('click', mobileNavToggleHandler);\n }\n }\n\n if (scrollHandler) {\n window.removeEventListener('scroll', scrollHandler);\n }\n};\n\nexport default mountNav;\n","let registeredMoreLoaders = [];\n\nconst mountMoreLoader = () => {\n document.querySelectorAll('.more-loader-btn').forEach((dom) => {\n const {\n moreLoaderContainer: containerQuery,\n moreLoaderItem: itemQuery,\n moreLoaderNext: nextQuery,\n } = dom.dataset;\n\n const container = document.querySelector(containerQuery);\n if (!(dom.dataset.moreLoaderHref && container && itemQuery && nextQuery)) return;\n\n if (dom.href) {\n dom.href = dom.dataset.moreLoaderHref;\n }\n\n let loading = false;\n\n const eventHandler = async (event) => {\n event.preventDefault();\n if (loading) return;\n loading = true;\n const oriTextContent = dom.textContent;\n dom.textContent = 'Loading...';\n try {\n const request = await fetch(dom.dataset.moreLoaderHref);\n const htmlDoc = (new DOMParser()).parseFromString(await request.text(), 'text/html');\n htmlDoc.querySelectorAll(itemQuery).forEach((item) => {\n container.appendChild(item);\n });\n const nextBtn = htmlDoc.querySelector(nextQuery);\n if (nextBtn) {\n dom.dataset.moreLoaderHref = nextBtn.dataset.moreLoaderHref;\n if (dom.href) {\n dom.href = nextBtn.dataset.moreLoaderHref;\n }\n } else {\n registeredMoreLoaders = registeredMoreLoaders.filter(({ dom: d }) => dom === d);\n dom.remove();\n }\n } finally {\n dom.textContent = oriTextContent;\n loading = false;\n }\n };\n\n dom.addEventListener('click', eventHandler);\n registeredMoreLoaders.push({ dom, eventHandler });\n });\n};\n\nexport const unmountMoreLoader = () => {\n registeredMoreLoaders.forEach(({ dom, eventHandler }) => {\n dom.removeEventListener('click', eventHandler);\n });\n registeredMoreLoaders = [];\n};\n\nexport default mountMoreLoader;\n","let pageTopBtns;\n\nconst scrollToTop = () => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n};\n\nconst mountPageTop = () => {\n pageTopBtns = document.querySelectorAll('.page-top-btn');\n pageTopBtns.forEach((btn) => {\n btn.addEventListener('click', scrollToTop);\n });\n};\n\nexport const unmountPageTop = () => {\n pageTopBtns.forEach((btn) => {\n btn.removeEventListener('click', scrollToTop);\n });\n pageTopBtns = [];\n};\n\nexport default mountPageTop;\n","import Glide from '@glidejs/glide';\n\nlet glide;\n\nconst mountHomeCarousel = () => {\n const homeCarouselDiv = document.getElementById('home-carousel');\n const slides = document.querySelectorAll('.glide__slide');\n\n if (homeCarouselDiv) {\n glide = new Glide(homeCarouselDiv, {\n type: 'carousel',\n gap: 0,\n ...(slides.length > 1 ? {\n autoplay: 5000,\n hoverpause: true,\n } : {}),\n }).mount();\n }\n};\n\nexport const unmountHomeCarousel = () => {\n if (glide) {\n glide.destroy();\n glide = null;\n }\n};\n\nexport default mountHomeCarousel;\n","/*\n * Usage:\n * add data-introducing-transition='fade-in|left-fade-in|right-fade-in' to html elements\n *\n * * These elements above viewport (which considered be seen already)\n * will start transition (appear) all together\n * * These elements in viewport\n * will start transition (fade-in) one by one, from top to bottom\n * * data-introducing-order-offset='100' can be used to adjust the order of transition\n * * we have turbolinks installed, to avoid elements blinking while switching pages,\n * add data-turbolinks-permanent and id to introducing-transition elements\n */\n\nimport './introducing-transitions.scss';\n\nconst sortIntroducingDOMs = (doms) => (\n doms.map((dom) => {\n const { top, left } = dom.getBoundingClientRect();\n return [\n top + parseInt(dom.dataset.introducingOrderOffset || '0', 10),\n left,\n dom,\n ];\n }).sort(([aTop, aLeft], [bTop, bLeft]) => {\n const topComp = aTop - bTop;\n if (topComp !== 0) {\n return topComp;\n }\n return aLeft - bLeft;\n }).map((d) => d[2])\n);\n\nlet scrollHandler;\nconst timeouts = {};\n\nconst introducingTransitions = () => {\n const introducingDOMs = sortIntroducingDOMs([\n ...document.querySelectorAll('[data-introducing-transition]:not(.introducing-done)').values(),\n ]);\n\n let transitioning = false;\n let scrolled = false;\n const detectAndIntroduce = () => {\n transitioning = true;\n scrolled = false;\n\n let index = 0;\n while (\n index < introducingDOMs.length\n && introducingDOMs[index].getBoundingClientRect().bottom < 0\n ) {\n introducingDOMs[index].classList.add('introducing-done');\n index += 1;\n }\n if (\n index < introducingDOMs.length\n && introducingDOMs[index].getBoundingClientRect().top < window.innerHeight\n ) {\n introducingDOMs[index].classList.add('introducing-done');\n index += 1;\n }\n if (index > 0) {\n introducingDOMs.splice(0, index);\n }\n\n if (introducingDOMs.length > 0) {\n timeouts.nextDetect = setTimeout(() => {\n if (scrolled || index > 0) {\n detectAndIntroduce();\n } else {\n transitioning = false;\n }\n }, 300);\n }\n };\n\n detectAndIntroduce();\n scrollHandler = () => {\n if (transitioning) {\n scrolled = true;\n return;\n }\n detectAndIntroduce();\n };\n window.addEventListener('scroll', scrollHandler);\n};\n\nconst mountIntroducingTransitions = () => {\n timeouts.introducingTransitions = setTimeout(introducingTransitions, 500);\n};\n\nexport const unmountIntroducingTransitions = () => {\n if (scrollHandler) {\n window.removeEventListener('scroll', scrollHandler);\n scrollHandler = null;\n }\n Object.values(timeouts).forEach((t) => clearTimeout(t));\n};\n\nexport default mountIntroducingTransitions;\n","/*\n * ## Social SDKs\n * facebook: https://developers.facebook.com/docs/plugins/share-button/\n * twitter: https://publish.twitter.com/?buttonType=TweetButton&widget=Button\n * line: https://social-plugins.line.me/zh_TW/how_to_install\n *\n * ### FB root\n * app/views/layouts/partials/_fbroot.html.erb\n */\n\nconst FBSDK_SCRIPT = 'https://connect.facebook.net/zh_TW/sdk.js#xfbml=1&version=v9.0';\nconst TWITTER_WIDGETS_SCRIPT = 'https://platform.twitter.com/widgets.js';\nconst LINE_SOCIAL_PLUGIN_SCRIPT = 'https://www.line-website.com/social-plugins/js/thirdparty/loader.min.js';\n\nlet initialized = false;\n\nconst afterTurbolinkPageChaged = () => {\n if (window.LineIt) {\n window.LineIt.loadButton();\n }\n if (window.FB) {\n window.FB.XFBML.parse();\n }\n if (window.twttr.widgets) {\n window.twttr.widgets.load();\n }\n};\n\nconst loadSocialSdks = () => {\n if (initialized) {\n afterTurbolinkPageChaged();\n return;\n }\n\n const [fbScriptTag, twitterScriptTag, lineScriptTag] = (\n [FBSDK_SCRIPT, TWITTER_WIDGETS_SCRIPT, LINE_SOCIAL_PLUGIN_SCRIPT].map((scriptUrl) => {\n const scriptTag = document.createElement('script');\n scriptTag.src = scriptUrl;\n scriptTag.async = true;\n scriptTag.defer = true;\n scriptTag.crossorigin = 'anonymous';\n\n return scriptTag;\n })\n );\n fbScriptTag.setAttribute('nonce', 'zFcPfZ24');\n\n [fbScriptTag, twitterScriptTag, lineScriptTag].forEach((scriptTag) => {\n document.head.appendChild(scriptTag);\n });\n\n /* Twitter tweet tracking\n * https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/guides/set-up-twitter-for-websites\n * https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/guides/javascript-api\n */\n const twttr = window.twttr || {};\n window.twttr = twttr;\n // eslint-disable-next-line no-underscore-dangle\n twttr._e = [() => {\n twttr.events.bind('tweet', () => {\n if (window.dataLayer) {\n window.dataLayer.push({\n event: 'tweet',\n });\n }\n });\n }];\n\n initialized = true;\n};\n\nexport default loadSocialSdks;\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport '../assets';\n\nimport Prism from 'prismjs';\nimport mountNav, { unmountNav } from '../application/nav';\nimport mountMoreLoader, { unmountMoreLoader } from '../application/moreLoader';\nimport mountPageTop, { unmountPageTop } from '../application/pageTop';\n\nimport mountHomeCarousel, { unmountHomeCarousel } from '../home/carousel';\nimport mountIntroducingTransitions, { unmountIntroducingTransitions } from '../home/introducingTransitions';\n\nimport loadSocialSdks from '../application/socialSdks';\n\nimport '../application/tailwindcss.scss';\nimport '../application/shared.scss';\nimport '../application/resource-content.scss';\nimport '../application/social-links.scss';\n\nimport '../home/index.scss';\nimport '../pages/our_vision.scss';\nimport '../pages/privacy_policy.scss';\nimport '../testimonials/index.scss';\nimport '../articles/index.scss';\nimport '../news/index.scss';\nimport '../subscribes/subscribes.scss';\nimport '../consultations/index.scss';\n\nrequire('turbolinks').start();\n\ndocument.addEventListener('turbolinks:load', () => {\n Prism.highlightAll();\n mountNav();\n mountMoreLoader();\n mountPageTop();\n\n loadSocialSdks();\n\n mountHomeCarousel();\n mountIntroducingTransitions();\n});\n\ndocument.addEventListener('turbolinks:before-cache', () => {\n unmountNav();\n unmountMoreLoader();\n unmountPageTop();\n\n unmountHomeCarousel();\n unmountIntroducingTransitions();\n});\n"],"sourceRoot":""}