{"id":245,"date":"2026-04-09T06:59:58","date_gmt":"2026-04-09T06:59:58","guid":{"rendered":"https:\/\/www.lkyco.com.my\/website2026\/?page_id=245"},"modified":"2026-04-22T17:01:28","modified_gmt":"2026-04-22T09:01:28","slug":"main-page","status":"publish","type":"page","link":"https:\/\/www.lkyco.com.my\/website2026\/main-page\/","title":{"rendered":"Main Page"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_flex_section spotlight-mask spotlight-articles\" data-spot-over-mobile=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-MB-P-F.webp\" data-spot-under-mobile=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-MB-P-B.webp\" data-spot-over-mobile-portrait=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-MB-P-F.webp\" data-spot-under-mobile-portrait=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-MB-P-B.webp\" data-spot-over-mobile-landscape=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/ABOUT-US-MB_L.png\" data-spot-under-mobile-landscape=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/ABOUT-US-MB_L_1.png\" data-spot-over-tablet-portrait=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-TB-P_F.webp\" data-spot-under-tablet-portrait=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-TB-P_B.webp\" data-spot-over-tablet-landscape=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/ABOUT-US-TB_L-1.png\" data-spot-under-tablet-landscape=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/ABOUT-US-TB_L_1.png\" data-spot-over-desktop=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-DESKTOP-F.webp\" data-spot-under-desktop=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-DESKTOP-B.webp\" data-spot-over=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-DESKTOP-F.webp\" data-spot-under=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ABOUT-US-DESKTOP-B.webp\" data-spot-speed=\"0.03\" data-spot-motion=\"bounce-linear\">\n<div class=\"et_pb_row_0 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_0 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_3_5 et_flex_column_16_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_0 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">About Us.<\/h1><\/div><\/div>\n\n<div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_flex_module\"><div class=\"et_pb_text_inner\">The Firm is led by partners who bring over<br \/>20 years of experience in the legal practice\n<\/div><\/div>\n\n<div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_0_wrapper\"><a class=\"et_pb_button_0 et_pb_button et_pb_bg_layout_light et_pb_module et_flex_module\" href=\"https:\/\/www.lkyco.com.my\/website2026\/about-us\/\">Read More<\/a><\/div>\n<\/div>\n\n<div class=\"et_pb_column_1 et_pb_column et-last-child et_flex_column et_pb_column_empty et_pb_css_mix_blend_mode_passthrough et_flex_column_6_24 et_flex_column_2_5_tablet et_flex_column_24_24_phone\"><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_section_1 et_pb_section et_section_regular et_flex_section\" id=\"core-values\">\n<div class=\"et_pb_row_1 et_pb_row et_flex_row cv-center\">\n<div class=\"et_pb_column_2 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_1 et_pb_heading et_clickable et_pb_module et_flex_module cv-xray\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\"> Our Core Values<\/h1><\/div><\/div>\n\n<div class=\"et_pb_text_1 et_pb_text et_pb_bg_layout_light et_pb_module et_flex_module\"><div class=\"et_pb_text_inner\" data-et-mv-hidden-tablet=\"true\" data-et-mv-hidden-phone=\"true\"><p>Law Kuan Yew &amp; Co. is founded on principles of compliance, ethics, integrity and diligence. We also believe in teamwork, communication and delivering quality legal services to our clients.<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_2 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_3 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_8_24 et_flex_column_8_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_blurb_0 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_top et_pb_module et_flex_module\"><div class=\"et_pb_blurb_content et_flex_module\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap et_pb_only_image_mode_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-1.webp\" width=\"513\" height=\"512\" srcset=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-1.webp 513w, https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-1-480x479.webp 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 513px, 100vw\" class=\"et_animated wp-image-508\" title=\"main-CORE VALUE-1\" \/><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Recognized Expertise<\/h4><\/div><\/div><\/div>\n<\/div>\n\n<div class=\"et_pb_column_4 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_8_24 et_flex_column_8_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_blurb_1 et_pb_blurb et_pb_bg_layout_light et_pb_text_align_left et_pb_blurb_position_top et_pb_module et_flex_module\"><div class=\"et_pb_blurb_content et_flex_module\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap et_pb_only_image_mode_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-2.webp\" width=\"512\" height=\"512\" srcset=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-2.webp 512w, https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-2-480x480.webp 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 512px, 100vw\" class=\"et_animated wp-image-511\" title=\"main-CORE VALUE-2\" \/><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Client-Focused Service<\/h4><\/div><\/div><\/div>\n<\/div>\n\n<div class=\"et_pb_column_5 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_8_24 et_flex_column_8_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_blurb_2 et_pb_blurb et_pb_bg_layout_light et_pb_text_align_center et_pb_blurb_position_top et_pb_module et_flex_module\"><div class=\"et_pb_blurb_content et_flex_module\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap et_pb_only_image_mode_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-3.webp\" width=\"512\" height=\"512\" srcset=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-3.webp 512w, https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-CORE-VALUE-3-480x480.webp 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 512px, 100vw\" class=\"et_animated wp-image-509\" title=\"main-CORE VALUE-3\" \/><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Integrity &amp; Trust<\/h4><\/div><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_section_2 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_3 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_6 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_12_24 et_flex_column_12_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_2 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Our<\/h1><\/div><\/div>\n\n<div class=\"et_pb_heading_3 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Services<\/h1><\/div><\/div>\n\n<div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_1_wrapper\"><a class=\"et_pb_button_1 et_pb_button et_pb_bg_layout_light et_pb_module et_flex_module\" href=\"https:\/\/www.lkyco.com.my\/website2026\/our-services\/\">Read More<\/a><\/div>\n<\/div>\n\n<div class=\"et_pb_column_7 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_12_24 et_flex_column_12_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<div class=\"reai-bubble-stage\" id=\"reaiBubbleStage\" aria-label=\"Interactive bubbles\">\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Corporate & Commercial\">\n        Corporate &amp; Commercial\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Capital Markets\">\n        Capital Markets\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Real Estate & Property\">\n        Real Estate &amp; Property\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Probate & Administration\">\n        Probate &amp; Administration\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Intellectual Property\">\n        Intellectual Property\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Family\">\n        Family\n    <\/a>\n    <a class=\"reai-bubble\" data-size=\"140\" data-mass=\"1.0\" aria-label=\"Insurance\">\n        Insurance\n    <\/a>\n\n    <canvas class=\"reai-bubble-canvas\" aria-hidden=\"true\"><\/canvas>\n<\/div>\n\n<style>\n    .reai-bubble-stage {\n        position: relative;\n        width: 100%;\n        height: min(70vh, 600px);\n        min-height: 380px !important; \n        max-height: 600px !important;\n        overflow: hidden !important; \n        border-radius: 18px;\n        isolation: isolate;\n        margin-top: 0 !important;\n        -webkit-text-size-adjust: 100%; \n    }\n\n    .reai-bubble-canvas {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        opacity: 0;\n        pointer-events: none;\n    }\n\n    .reai-bubble {\n        position: absolute;\n        left: 0;\n        top: 0;\n        width: 120px;\n        height: 120px;\n        border-radius: 999px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        text-align: center;\n        text-decoration: none;\n        backdrop-filter: blur(10px);\n        -webkit-backdrop-filter: blur(10px);\n        border: 1px solid rgba(255, 255, 255, .30);\n        box-shadow: 0 18px 55px rgba(0, 0, 0, .18), inset 0 1px 0 rgba(255, 255, 255, .35);\n        background: rgba(255, 255, 255, .14);\n        color: inherit;\n        font-weight: 600;\n        letter-spacing: .2px;\n        user-select: none;\n        -webkit-user-select: none;\n        touch-action: none;\n        transform: translate3d(0, 0, 0);\n        will-change: transform;\n        box-sizing: border-box;\n\n        opacity: 0;\n        visibility: hidden;\n        transition: none !important;\n    }\n\n    .reai-bubble.reai-ready {\n        opacity: 1;\n        visibility: visible;\n    }\n\n    .reai-bubble:focus-visible {\n        outline: 2px solid currentColor;\n        outline-offset: 4px;\n    }\n\n    .reai-bubble-stage .reai-bubble {\n        font-family: \"Arial\", sans-serif;\n        font-size: 24px;\n        font-weight: 500;\n        color: #044953;\n        text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n        text-transform: none;\n        letter-spacing: 0.1px;\n        line-height: 1.1;\n        padding: 4px; \n        word-break: break-word;\n        overflow-wrap: break-word;\n    }\n\n    @media (max-width: 980px) {\n        .reai-bubble-stage {\n            height: 60vw;\n            min-height: 350px !important;\n            max-height: 500px !important;\n        }\n\n        .reai-bubble-stage .reai-bubble {\n            font-size: 18px;\n            line-height: 1.1;\n            padding: 4px;\n        }\n    }\n\n    @media (max-width: 767px) {\n        .reai-bubble-stage {\n            width: 100vw !important;\n            max-width: 100vw !important;\n            height: 100vw !important; \n            min-height: 350px !important;\n            max-height: 500px !important;\n            border-radius: 0 !important;\n            margin-top: -10px !important;\n            margin-left: calc(50% - 50vw) !important;\n            margin-right: calc(50% - 50vw) !important;\n        }\n\n        .reai-bubble-stage .reai-bubble {\n            font-size: clamp(11px, 3.5vw, 13.5px);\n            line-height: 1.05;\n            padding: 4px;\n        }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n        .reai-bubble {\n            transition: none !important;\n        }\n    }\n<\/style>\n\n<script>\n(function() {\n    const STAGE_ID = \"reaiBubbleStage\";\n    const stage = document.getElementById(STAGE_ID);\n    if (!stage) return;\n\n    function loadScript(src) {\n        return new Promise((resolve, reject) => {\n            const s = document.createElement(\"script\");\n            s.src = src;\n            s.async = true;\n            s.onload = resolve;\n            s.onerror = reject;\n            document.head.appendChild(s);\n        });\n    }\n\n    const MATTER_SRC = \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/matter-js\/0.20.0\/matter.min.js\";\n    loadScript(MATTER_SRC).then(init).catch(err => console.warn(\"Matter.js failed to load\", err));\n\n    function getDprFromCSS() {\n        const v = getComputedStyle(document.documentElement).getPropertyValue('--reai-dpr').trim();\n        const dpr = parseFloat(v);\n        return (isFinite(dpr) && dpr > 0) ? dpr : (window.devicePixelRatio || 1);\n    }\n\n    function getPageScale() {\n        return 1.0;\n    }\n\n    \/\/ \ud83d\ude80 \u6838\u5fc3\u66f4\u65b0\uff1a\u6db2\u6001\u7f29\u653e\u516c\u5f0f (Liquid Scale)\n    function getResponsiveScale() {\n        const vw = window.innerWidth || document.documentElement.clientWidth;\n        const vh = window.innerHeight || document.documentElement.clientHeight;\n        const box = document.getElementById(\"reaiBubbleStage\");\n        \n        const boxWidth = box ? box.clientWidth : vw;\n        const boxHeight = box ? box.clientHeight : vh;\n        const isMobileDevice = \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent);\n        \n        \/\/ \u624b\u673a\u7aef\u4e13\u7528\u5f39\u6027\u903b\u8f91\n        if (isMobileDevice || vw <= 767) {\n             const minDim = Math.min(boxWidth, boxHeight);\n             let dynamicScale = (minDim \/ 350) * 0.65;\n             return clamp(dynamicScale, 0.6, 0.95);\n        }\n\n        \/\/ \ud83d\ude80 \u7535\u8111\u7aef\uff1a\u5f7b\u5e95\u52a8\u6001\u8ba1\u7b97\uff01\u9ad8\u5ea6\u548c\u5bbd\u5ea6\u4e00\u65e6\u88ab\u6324\u538b\uff0c\u6bd4\u4f8b\u77ac\u95f4\u54cd\u5e94\u3002\n        \/\/ \u5047\u8bbe 550px \u9ad8\u5ea6\u662f\u5b8c\u7f8e\u7684\u5927\u5c3a\u5bf8\u6bd4\u4f8b\uff0c\u5982\u679c\u9ad8\u5ea6\u964d\u4f4e\uff0c\u7acb\u523b\u7b49\u6bd4\u4f8b\u7f29\u5c0f\n        let heightScale = boxHeight \/ 520;\n        let widthScale = boxWidth \/ 520;\n        \n        \/\/ \u53d6\u4e24\u8fb9\u6700\u53d7\u9650\u5236\u7684\u4e00\u8fb9\uff0c\u786e\u4fdd\u6c14\u6ce1\u7edd\u5bf9\u4e0d\u4f1a\u8d85\u51fa\n        let dynamicScale = Math.min(heightScale, widthScale);\n\n        \/\/ \u4e58\u4ee5 1.05 \u7a0d\u5fae\u8865\u8db3\u4e00\u70b9\u89c6\u89c9\u9971\u6ee1\u5ea6\u3002\n        \/\/ \u8303\u56f4\u63a7\u5236\uff1a\u6700\u9ad8\u53ef\u4ee5\u7ed9\u6ee1 1.0 (100%\u72b6\u6001)\uff0c\u6700\u4f4e\u5141\u8bb8\u7f29\u5230 0.5 (\u5bf9\u5e94\u6781\u81f4\u653e\u5927)\n        return clamp(dynamicScale * 0.9, 0.5, 0.92);\n    }\n\n    function clamp(v, a, b) {\n        return Math.max(a, Math.min(b, v));\n    }\n\n    function init() {\n        const { Engine, World, Bodies, Body, Composite, Vector, Query } = Matter;\n\n        const canvas = stage.querySelector(\".reai-bubble-canvas\");\n        const links = Array.from(stage.querySelectorAll(\".reai-bubble\"));\n\n        const items = links.map((el, index) => {\n            const size = clamp(parseFloat(el.dataset.size) || 120, 70, 180);\n            return {\n                el,\n                baseSize: size,\n                size,\n                radius: size \/ 2,\n                baseFontSize: 13.5, \n                mass: clamp(parseFloat(el.dataset.mass) || 1.0, 0.3, 3.0),\n                body: null,\n                home: { x: 0, y: 0 },\n                index: index\n            };\n        });\n\n        const engine = Engine.create({ gravity: { x: 0, y: 0 } });\n        const world = engine.world;\n\n        let w = 0, h = 0;\n        let walls = [];\n        let wallThickness = 80;\n        let lastScale = null;\n        let hovering = false;\n        let hoverBody = null;\n\n        const HOME_FORCE_IDLE = 0.0001;\n        const HOME_FORCE_HOVER = 0.000012;\n        const HOME_MAX_FORCE = 0.0005;\n        const SOFT_DAMP = 0.93;\n        const IDLE_SETTLE_MS = 450;\n        let idleUntil = 0;\n\n        const PULSE_PERIOD_MS = 4000;\n        const PULSE_DURATION_MS = 650;\n        const PULSE_STRENGTH = 0.001; \n        const PULSE_EASE_POWER = 2;\n        const PULSE_WHILE_HOVER_MULT = 0.55;\n\n        let nextPulseAt = performance.now() + PULSE_PERIOD_MS;\n        let pulseEndAt = 0;\n\n        function applyBubbleScale(scale) {\n            items.forEach((it) => {\n                const scaledSize = it.baseSize * scale;\n                const fontScale = scale > 1 ? scale * 0.9 : scale;\n                const scaledFont = it.baseFontSize * fontScale;\n                \n                it.size = scaledSize;\n                it.radius = scaledSize \/ 2;\n                it.el.style.width = scaledSize + \"px\";\n                it.el.style.height = scaledSize + \"px\";\n                it.el.style.fontSize = scaledFont + \"px\";\n            });\n        }\n\n        function rebuildBodiesAtHomes() {\n            const vw = window.innerWidth || document.documentElement.clientWidth;\n            const isMobile = vw <= 767;\n\n            items.forEach((it) => {\n                if (it.body) Composite.remove(world, it.body);\n            });\n\n            items.forEach((it) => {\n                const body = Bodies.circle(it.home.x, it.home.y, it.radius, {\n                    restitution: 0.9,\n                    friction: 0.02,\n                    frictionAir: 0.12,\n                    density: 0.0015,\n                    slop: 0.01,\n                    collisionFilter: { category: 1 } \n                });\n                \n                const finalMass = it.index === 0 ? (isMobile ? 3.0 : 10.0) : it.mass;\n                Body.setMass(body, finalMass);\n                \n                it.body = body;\n                World.add(world, body);\n            });\n            hardStopAll();\n        }\n\n        function assignCircleHomes() {\n            const cx = w \/ 2;\n            const box = document.getElementById(\"reaiBubbleStage\");\n            const boxWidth = box ? box.clientWidth : w;\n            const boxHeight = box ? box.clientHeight : h;\n            const isMobileDevice = \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent);\n            const isLandscape = window.innerWidth > window.innerHeight;\n\n            let cy = h \/ 2;\n            let ringRx, ringRy;\n\n            if (boxWidth < 980) {\n                if (isMobileDevice && isLandscape) {\n                     ringRx = ringRy = Math.min(w, h) * 0.30; \n                } else {\n                     ringRx = ringRy = Math.min(w, h) * 0.28; \n                }\n            } else {\n                \/\/ \ud83d\ude80 \u5708\u5b50\u5185\u6536\u9632\u649e\u5899\uff1a\u8c03\u56de 0.28\uff0c\u7559\u51fa\u547c\u5438\u81a8\u80c0\u7684\u5b89\u5168\u533a\n                ringRy = Math.min(w, h) * 0.28; \n                ringRx = ringRy;\n\n                if (boxWidth > boxHeight * 1.5) {\n                    ringRx = ringRy * 1.05; \n                } else if (boxWidth > boxHeight * 1.2) {\n                    ringRx = ringRy * 1.02; \n                }\n            }\n\n            const N = items.length;\n            const useCenter = (N >= 5);\n\n            if (useCenter) {\n                items[0].home.x = cx;\n                items[0].home.y = cy;\n\n                const ringItems = items.filter((_, i) => i !== 0);\n                const M = ringItems.length;\n\n                for (let k = 0; k < M; k++) {\n                    const a = (Math.PI * 2) * (k \/ M) - Math.PI \/ 2;\n                    ringItems[k].home.x = cx + Math.cos(a) * ringRx;\n                    ringItems[k].home.y = cy + Math.sin(a) * ringRy;\n                }\n            } else {\n                for (let i = 0; i < N; i++) {\n                    const a = (Math.PI * 2) * (i \/ N) - Math.PI \/ 2;\n                    items[i].home.x = cx + Math.cos(a) * ringRx;\n                    items[i].home.y = cy + Math.sin(a) * ringRy;\n                }\n            }\n        }\n\n        function resize() {\n            const rect = stage.getBoundingClientRect();\n            const s = getResponsiveScale();\n            const dpr = window.devicePixelRatio || 1;\n\n            w = Math.max(200, rect.width);\n            h = Math.max(200, rect.height); \n\n            canvas.width = Math.floor(w * dpr);\n            canvas.height = Math.floor(h * dpr);\n            canvas.style.width = w + \"px\";\n            canvas.style.height = h + \"px\";\n\n            walls.forEach(x => Composite.remove(world, x));\n            \n            const out = 0; \n            \n            walls = [\n                Bodies.rectangle(w \/ 2, -wallThickness \/ 2 - out, w + wallThickness * 2 + out * 2, wallThickness, { isStatic: true }),\n                Bodies.rectangle(w \/ 2, h + wallThickness \/ 2 + out, w + wallThickness * 2 + out * 2, wallThickness, { isStatic: true }),\n                Bodies.rectangle(-wallThickness \/ 2 - out, h \/ 2, wallThickness, h + wallThickness * 2 + out * 2, { isStatic: true }),\n                Bodies.rectangle(w + wallThickness \/ 2 + out, h \/ 2, wallThickness, h + wallThickness * 2 + out * 2, { isStatic: true })\n            ];\n            World.add(world, walls);\n\n            applyBubbleScale(s);\n            assignCircleHomes();\n\n            if (!items[0].body || lastScale !== s) {\n                rebuildBodiesAtHomes();\n                lastScale = s;\n            } else {\n                items.forEach(it => {\n                    const p = it.body.position;\n                    const nx = clamp(p.x, it.radius - out, w - it.radius + out);\n                    const ny = clamp(p.y, it.radius - out, h - it.radius + out);\n                    Body.setPosition(it.body, { x: nx, y: ny });\n                });\n            }\n        }\n\n        function getMouseInStage(e) {\n            const rect = stage.getBoundingClientRect();\n            const clientX = e.touches ? e.touches[0].clientX : e.clientX;\n            const clientY = e.touches ? e.touches[0].clientY : e.clientY;\n            return {\n                x: clamp(clientX - rect.left, 0, w),\n                y: clamp(clientY - rect.top, 0, h)\n            };\n        }\n\n        function hardStopAll() {\n            items.forEach(it => {\n                if (it.body) {\n                    Body.setVelocity(it.body, { x: 0, y: 0 });\n                    Body.setAngularVelocity(it.body, 0);\n                }\n            });\n        }\n\n        const handleMove = (e) => {\n            const p = getMouseInStage(e);\n            const bodies = items.map(it => it.body).filter(Boolean);\n            const hits = Query.point(bodies, p);\n            hovering = !!hits[0];\n            hoverBody = hits[0] || null;\n\n            if (hoverBody) {\n                const dir = Vector.sub(hoverBody.position, p);\n                const dist = Math.max(12, Vector.magnitude(dir));\n                const f = Vector.mult(Vector.mult(dir, 1 \/ dist), 0.00085 * (120 \/ dist));\n                Body.applyForce(hoverBody, hoverBody.position, f);\n            } else {\n                idleUntil = performance.now() + IDLE_SETTLE_MS;\n            }\n        };\n\n        stage.addEventListener(\"pointermove\", handleMove, { passive: true });\n        stage.addEventListener(\"touchmove\", handleMove, { passive: true });\n\n        stage.addEventListener(\"pointerleave\", () => {\n            hovering = false;\n            hoverBody = null;\n            idleUntil = performance.now() + IDLE_SETTLE_MS;\n        }, { passive: true });\n\n        function tick(now) {\n            const dt = Math.min(33, now - lastTick);\n            lastTick = now;\n            \n            const timeScale = dt \/ 16.666; \n            \n            const vw = window.innerWidth || document.documentElement.clientWidth;\n            const isMobile = vw <= 767 || \/Android|webOS|iPhone|iPad|iPod\/i.test(navigator.userAgent);\n            const isLandscape = window.innerWidth > window.innerHeight;\n\n            if (now >= nextPulseAt) {\n                pulseEndAt = now + PULSE_DURATION_MS;\n                nextPulseAt = now + PULSE_PERIOD_MS;\n            }\n\n            if (now <= pulseEndAt) {\n                const t = 1 - ((pulseEndAt - now) \/ PULSE_DURATION_MS);\n                const ease = Math.pow(Math.sin(Math.PI * t), PULSE_EASE_POWER);\n                const mult = hovering ? PULSE_WHILE_HOVER_MULT : 1;\n\n                let sx = 0, sy = 0, count = 0;\n                items.forEach(it => {\n                    if (it.body) {\n                        sx += it.body.position.x;\n                        sy += it.body.position.y;\n                        count++;\n                    }\n                });\n\n                const center = count ? { x: sx \/ count, y: sy \/ count } : { x: w \/ 2, y: h \/ 2 };\n\n                items.forEach(it => {\n                    if (it.body) {\n                        const dir = Vector.sub(it.body.position, center);\n                        const dist = Math.max(20, Vector.magnitude(dir));\n                        const forceMult = isMobile ? (isLandscape ? 0.4 : 0.35) : 0.6; \n                        \n                        const f = Vector.mult(Vector.mult(dir, 1 \/ dist), PULSE_STRENGTH * ease * (140 \/ dist) * mult * forceMult * timeScale);\n                        Body.applyForce(it.body, it.body.position, f);\n                    }\n                });\n            }\n\n            items.forEach(it => {\n                if (it.body) {\n                    const isCenter = it.index === 0;\n                    const desktopCenterForce = HOME_FORCE_IDLE * 20; \n                    const baseForce = isCenter ? (isMobile ? HOME_FORCE_IDLE * 15 : desktopCenterForce) : HOME_FORCE_IDLE;\n                    const k = hovering ? HOME_FORCE_HOVER : baseForce;\n\n                    let toHome = Vector.sub(it.home, it.body.position);\n                    let distToHome = Vector.magnitude(toHome);\n\n                    if (distToHome > 100) {\n                        Body.setPosition(it.body, it.home);\n                        Body.setVelocity(it.body, { x: 0, y: 0 });\n                        toHome = {x: 0, y: 0}; \n                        distToHome = 0;\n                    }\n                    \n                    let f = Vector.mult(toHome, k * timeScale);\n                    const mag = Vector.magnitude(f);\n                    \n                    const desktopCenterMaxForce = HOME_MAX_FORCE * 12;\n                    const maxForce = isCenter ? (isMobile ? HOME_MAX_FORCE * 8 : desktopCenterMaxForce) : HOME_MAX_FORCE;\n                    if (mag > maxForce) f = Vector.mult(f, maxForce \/ mag);\n                    Body.applyForce(it.body, it.body.position, f);\n\n                    if (!hovering && isCenter && !isMobile && distToHome < 1.5) {\n                        Body.setPosition(it.body, it.home);\n                        Body.setVelocity(it.body, { x: 0, y: 0 });\n                    }\n\n                    if (!hovering && now < idleUntil) {\n                        const damp = isMobile ? 0.80 : SOFT_DAMP;\n                        const v = it.body.velocity;\n                        Body.setVelocity(it.body, { x: v.x * damp, y: v.y * damp });\n                        Body.setAngularVelocity(it.body, it.body.angularVelocity * damp);\n                    }\n                }\n            });\n\n            Engine.update(engine, dt);\n\n            items.forEach(it => {\n                if (it.body) {\n                    const x = it.body.position.x - it.radius;\n                    const y = it.body.position.y - it.radius;\n                    it.el.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n                }\n            });\n\n            requestAnimationFrame(tick);\n        }\n\n        let lastTick = performance.now();\n        const ro = new ResizeObserver(resize);\n        ro.observe(stage);\n        resize();\n        \n        setTimeout(() => {\n            items.forEach(it => {\n                it.el.classList.add(\"reai-ready\");\n            });\n        }, 100); \n\n        requestAnimationFrame(tick);\n    }\n\n    document.addEventListener(\"click\", (e) => {\n        if (e.target.closest(\"#reaiBubbleStage .reai-bubble\")) {\n            \/\/ e.preventDefault();\n        }\n    }, true);\n})();\n<\/script><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_section_3 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_4 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_8 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_12_24 et_flex_column_12_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_4 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Our<\/h1><\/div><\/div>\n\n<div class=\"et_pb_heading_5 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Partners<\/h1><\/div><\/div>\n\n<div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_2_wrapper\"><a class=\"et_pb_button_2 et_pb_button et_pb_bg_layout_light et_pb_module et_flex_module\" href=\"https:\/\/www.lkyco.com.my\/website2026\/our-partner\/\">Read More<\/a><\/div>\n<\/div>\n\n<div class=\"et_pb_column_9 et_pb_column et-last-child et_flex_column et_pb_column_empty et_pb_css_mix_blend_mode_passthrough et_flex_column_12_24 et_flex_column_12_24_tablet et_flex_column_24_24_phone\"><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_section_4 et_pb_section et_section_regular et_flex_section spotlight-mask spotlight-articles\" data-spot-under-mobile=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ARTICLES-MB-P.webp\" data-spot-over-color=\"#e0e1dd\" data-spot-speed=\"0.03\" data-spot-motion=\"edge-clockwise\" data-spot-under=\"https:\/\/www.lkyco.com.my\/website2026\/wp-content\/uploads\/2026\/04\/main-ARTICLES-DESKTOP.webp\">\n<div class=\"et_pb_row_5 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_10 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_6 et_pb_heading et_pb_module et_flex_module\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Articles and Publications<\/h1><\/div><\/div>\n\n<div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_3_wrapper\"><a class=\"et_pb_button_3 et_pb_button et_pb_bg_layout_dark et_pb_module et_flex_module\" href=\"https:\/\/www.lkyco.com.my\/website2026\/articles\/\">Read More<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-245","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/pages\/245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/comments?post=245"}],"version-history":[{"count":92,"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/pages\/245\/revisions"}],"predecessor-version":[{"id":668,"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/pages\/245\/revisions\/668"}],"wp:attachment":[{"href":"https:\/\/www.lkyco.com.my\/website2026\/wp-json\/wp\/v2\/media?parent=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}