{"id":467,"date":"2026-07-21T10:16:33","date_gmt":"2026-07-21T10:16:33","guid":{"rendered":"https:\/\/link.axi.so\/?page_id=467"},"modified":"2026-08-11T15:30:48","modified_gmt":"2026-08-11T15:30:48","slug":"vei","status":"publish","type":"page","link":"https:\/\/link.axi.so\/?page_id=467&lang=ru","title":{"rendered":"VEI DASHBOARD"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"467\" class=\"elementor elementor-467\">\n\t\t\t\t<div class=\"elementor-element elementor-element-573bc86 e-con-full e-flex e-con e-parent\" data-id=\"573bc86\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-773cc21 elementor-widget elementor-widget-shortcode\" data-id=\"773cc21\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<!-- \u0416\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0442\u0438\u043b\u0438-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u0438 \u0434\u043b\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e Fullscreen \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 -->\n<style>\n    .vei-safe-wrapper {\n        width: 100%;\n        height: 100vh; \/* \u0424\u043e\u043b\u0431\u044d\u043a *\/\n        height: 100dvh; \/* \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 *\/\n        min-height: 500px;\n        position: relative;\n        overflow: hidden !important;\n        box-sizing: border-box;\n        margin: 0 auto;\n        padding: 0;\n        display: block;\n        background-color: #030614;\n    }\n    .vei-custom-scroll::-webkit-scrollbar { width: 4px; }\n    .vei-custom-scroll::-webkit-scrollbar-track { background: rgba(0,0,0,0.1); }\n    .vei-custom-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 4px; }\n    .vei-custom-scroll::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.4); }\n<\/style>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Rajdhani:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.147.0\/build\/three.min.js\"><\/script>\n<script src=\"https:\/\/unpkg.com\/three-spritetext@1.6.5\/dist\/three-spritetext.min.js\"><\/script>\n<script src=\"https:\/\/unpkg.com\/3d-force-graph@1.71.4\/dist\/3d-force-graph.min.js\"><\/script>\n\n<!-- \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440-\u043e\u0431\u0435\u0440\u0442\u043a\u0430 -->\n<div id=\"vei-app-container\" class=\"vei-safe-wrapper font-['Rajdhani']\">\n    \n    <!-- \u0421\u043b\u043e\u0439 \u0441 3D Canvas -->\n    <div id=\"vei-3d-graph\" class=\"absolute inset-0 w-full h-full z-0 cursor-move\"><\/div>\n\n    <!-- \u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 -->\n    <div class=\"absolute top-4 left-4 right-4 z-10 flex flex-col md:flex-row justify-between items-start md:items-center pointer-events-none gap-4\">\n        <div>\n            <h2 class=\"text-2xl md:text-3xl font-bold tracking-widest text-transparent bg-clip-text bg-gradient-to-r from-[#00F5D4] to-[#48CAE4] drop-shadow-[0_0_10px_rgba(0,245,212,0.6)]\">VEI 4D ARCHITECTURE<\/h2>\n            <p class=\"text-xs text-[#48CAE4] opacity-80 uppercase tracking-widest\">\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0411\u0435\u0441\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0445 \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439<\/p>\n        <\/div>\n        <div class=\"flex gap-2 pointer-events-auto\">\n            <button id=\"vei-btn-expand\" class=\"px-4 py-2 bg-[#0B132B]\/80 hover:bg-[#00F5D4]\/20 border border-[#00F5D4]\/40 text-[#00F5D4] text-xs font-bold rounded-lg backdrop-blur-md transition-all shadow-lg\">\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451<\/button>\n            <button id=\"vei-btn-collapse\" class=\"px-4 py-2 bg-[#0B132B]\/80 hover:bg-[#F97316]\/20 border border-[#F97316]\/40 text-[#F97316] text-xs font-bold rounded-lg backdrop-blur-md transition-all shadow-lg\">\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- \u0412\u042b\u0414\u0412\u0418\u0416\u041d\u0410\u042f \u0420\u0423\u0427\u041a\u0410: \u041b\u0415\u0412\u0410\u042f (\u0414\u0435\u0440\u0435\u0432\u043e \u041f\u0440\u043e\u0435\u043a\u0442\u0430) -->\n    <div id=\"vei-left-handle\" class=\"absolute top-1\/2 left-0 -translate-y-1\/2 z-30 cursor-pointer pointer-events-auto group\">\n        <div class=\"bg-[#0B132B]\/80 border border-[#48CAE4]\/50 border-l-0 text-[#48CAE4] p-1.5 py-6 rounded-r-xl backdrop-blur-xl shadow-[0_0_20px_rgba(72,202,228,0.4)] hover:bg-[#48CAE4]\/20 hover:text-white transition-all flex items-center\">\n            <svg class=\"w-6 h-6 transform group-hover:scale-110 transition-transform\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"><\/path><\/svg>\n        <\/div>\n    <\/div>\n\n    <!-- \u0412\u042b\u0414\u0412\u0418\u0416\u041d\u0410\u042f \u0420\u0423\u0427\u041a\u0410: \u041f\u0420\u0410\u0412\u0410\u042f (\u0418\u043d\u0444\u043e \u041f\u0430\u043d\u0435\u043b\u044c) -->\n    <div id=\"vei-right-handle\" class=\"absolute top-1\/2 right-0 -translate-y-1\/2 z-30 cursor-pointer pointer-events-auto group\">\n        <div class=\"bg-[#0B132B]\/80 border border-[#00F5D4]\/50 border-r-0 text-[#00F5D4] p-1.5 py-6 rounded-l-xl backdrop-blur-xl shadow-[0_0_20px_rgba(0,245,212,0.4)] hover:bg-[#00F5D4]\/20 hover:text-white transition-all flex items-center\">\n            <svg class=\"w-6 h-6 transform group-hover:scale-110 transition-transform\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"><\/path><\/svg>\n        <\/div>\n    <\/div>\n\n    <!-- \u041b\u0435\u0432\u0430\u044f \u0431\u043e\u043a\u043e\u0432\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c (\u0414\u0435\u0440\u0435\u0432\u043e \u041f\u0440\u043e\u0435\u043a\u0442\u0430) -->\n    <div id=\"vei-tree-panel\" class=\"absolute top-0 left-0 h-full w-full sm:w-[350px] md:w-[400px] bg-[#0B132B]\/70 backdrop-blur-md border-r border-white\/10 z-40 flex flex-col transform -translate-x-full transition-transform duration-300 shadow-[20px_0_50px_rgba(0,0,0,0.5)]\">\n        <div class=\"p-4 md:p-6 border-b border-white\/10 flex justify-between items-center shrink-0\">\n            <h2 class=\"text-xl font-bold text-white tracking-widest flex items-center gap-3\">\n                <svg class=\"w-5 h-5 text-[#48CAE4]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 002-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"><\/path><\/svg>\n                \u042d\u041a\u041e\u0421\u0418\u0421\u0422\u0415\u041c\u0410\n            <\/h2>\n            <button id=\"vei-tree-close\" class=\"text-white\/50 hover:text-white bg-white\/5 hover:bg-red-500\/50 rounded-full w-8 h-8 flex items-center justify-center transition-colors\">\u2715<\/button>\n        <\/div>\n        <div class=\"flex-1 overflow-y-auto p-4 vei-custom-scroll\">\n            <div id=\"vei-tree-container\" class=\"space-y-1\">\n                <!-- \u0414\u0435\u0440\u0435\u0432\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f JS -->\n            <\/div>\n            <div class=\"h-24 shrink-0 w-full\"><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u041f\u0440\u0430\u0432\u0430\u044f \u0431\u043e\u043a\u043e\u0432\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c (\u0414\u0435\u0442\u0430\u043b\u0438 \u0423\u0437\u043b\u0430) -->\n    <div id=\"vei-side-panel\" class=\"absolute top-0 right-0 h-full w-full sm:w-[400px] bg-[#0B132B]\/80 backdrop-blur-xl border-l border-white\/10 z-40 p-6 flex flex-col transform translate-x-full transition-transform duration-300 shadow-[-20px_0_50px_rgba(0,0,0,0.8)] vei-custom-scroll overflow-y-auto\">\n        \n        <!-- \u0417\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e -->\n        <div id=\"vei-panel-empty\" class=\"flex-1 flex flex-col items-center justify-center text-center opacity-40\">\n            <svg class=\"w-16 h-16 mb-4 text-[#00F5D4]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"><\/path><\/svg>\n            <p class=\"text-white text-lg tracking-wider\">\u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0430\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n        <\/div>\n\n        <!-- \u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0438\u043d\u0444\u043e \u043e\u043a\u043d\u0430 -->\n        <div id=\"vei-panel-content\" class=\"hidden h-full flex flex-col justify-between\">\n            <div>\n                <div class=\"flex justify-between items-center mb-4 pb-3 border-b border-white\/10\">\n                    <span id=\"vei-panel-type\" class=\"text-[10px] uppercase font-mono tracking-widest px-2 py-0.5 rounded border border-white\/20 text-white\/70\">\u0423\u0437\u0435\u043b<\/span>\n                    <button id=\"vei-panel-close\" class=\"text-white\/50 hover:text-white text-xl p-1 pointer-events-auto bg-white\/5 hover:bg-red-500\/50 rounded-full w-8 h-8 flex items-center justify-center transition-colors\">\u2715<\/button>\n                <\/div>\n                \n                <h3 id=\"vei-panel-title\" class=\"text-2xl font-bold text-white mb-2 leading-tight\"><\/h3>\n                \n                <div class=\"flex flex-wrap items-center gap-2 mb-4\">\n                    <span id=\"vei-panel-status\" class=\"text-[10px] px-2 py-0.5 rounded-full font-bold uppercase border\"><\/span>\n                    <span id=\"vei-panel-assignee\" class=\"text-[11px] text-white\/60 bg-white\/5 px-2 py-0.5 rounded border border-white\/10\"><\/span>\n                <\/div>\n\n                <div class=\"space-y-4 text-sm text-gray-300\">\n                    <div id=\"vei-panel-pain-box\" class=\"hidden\">\n                        <p class=\"text-[10px] text-red-400 font-bold uppercase tracking-wider mb-1\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \/ \u0411\u043e\u043b\u044c<\/p>\n                        <p id=\"vei-panel-pain\" class=\"bg-red-500\/10 border border-red-500\/20 p-3 rounded-lg text-red-100\"><\/p>\n                    <\/div>\n                    <div id=\"vei-panel-solution-box\" class=\"hidden\">\n                        <p class=\"text-[10px] text-emerald-400 font-bold uppercase tracking-wider mb-1\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0418\u0418<\/p>\n                        <p id=\"vei-panel-solution\" class=\"bg-emerald-500\/10 border border-emerald-500\/20 p-3 rounded-lg text-emerald-100\"><\/p>\n                    <\/div>\n                    <div id=\"vei-panel-notes-box\" class=\"hidden\">\n                        <p class=\"text-[10px] text-blue-400 font-bold uppercase tracking-wider mb-1\">\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \/ \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n                        <p id=\"vei-panel-notes\" class=\"bg-blue-500\/10 border border-blue-500\/20 p-3 rounded-lg text-blue-100 leading-relaxed whitespace-pre-wrap\"><\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mt-6 pt-4 border-t border-white\/10 space-y-3 shrink-0\">\n                <!-- \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a -->\n                <div id=\"vei-panel-media-actions\" class=\"hidden flex-col gap-2 w-full\"><\/div>\n\n                <!-- \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0412\u043f\u0435\u0440\u0435\u0434\/\u041d\u0430\u0437\u0430\u0434 -->\n                <div class=\"flex gap-2 mt-2\">\n                    <button id=\"vei-nav-prev\" class=\"flex-1 py-2.5 bg-white\/5 hover:bg-white\/10 text-white text-xs font-semibold rounded border border-white\/10 transition-all\">\u2190 \u041d\u0430\u0437\u0430\u0434<\/button>\n                    <button id=\"vei-nav-next\" class=\"flex-1 py-2.5 bg-white\/5 hover:bg-white\/10 text-white text-xs font-semibold rounded border border-white\/10 transition-all\">\u0412\u043f\u0435\u0440\u0435\u0434 \u2192<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u041c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0412\u0438\u0434\u0435\u043e (\u041c\u0435\u0434\u0438\u0430 \u041e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c) -->\n    <div id=\"vei-video-modal\" class=\"absolute inset-0 bg-black\/90 backdrop-blur-md z-50 hidden flex items-center justify-center p-2 sm:p-10 pointer-events-auto\">\n        <div class=\"relative w-full h-[90%] sm:h-auto max-w-6xl bg-[#030614] border border-white\/20 rounded-xl overflow-hidden shadow-2xl flex flex-col\">\n            <div class=\"flex justify-between items-center p-3 sm:p-4 bg-white\/5 border-b border-white\/10 shrink-0\">\n                <span class=\"text-white\/80 font-bold uppercase tracking-widest text-sm flex items-center gap-2\">\n                    <svg class=\"w-4 h-4 text-[#00F5D4]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9\"><\/path><\/svg>\n                    \u041c\u0435\u0434\u0438\u0430 \u041e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\n                <\/span>\n                <button id=\"vei-video-close\" class=\"text-white\/70 hover:text-white bg-white\/10 hover:bg-red-500\/80 w-8 h-8 flex items-center justify-center rounded-full transition-colors\">\u2715<\/button>\n            <\/div>\n            <div class=\"flex-1 w-full relative sm:aspect-video\">\n                <iframe id=\"vei-video-iframe\" class=\"absolute inset-0 w-full h-full bg-white\" src=\"\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    const rawData = [{\"id\":\"core_1\",\"name\":\"VEI\",\"subtitle\":\"INTEGRATION CORE\",\"type\":\"core\",\"radius\":30,\"color\":\"#FBBF24\",\"collapsed\":false,\"notes\":\"\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.\",\"video_link\":\"\",\"children\":[{\"id\":\"mod_1\",\"name\":\"LINK\",\"subtitle\":\"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0410\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u043f\u043e \u0436\u0438\u0437\u043d\u0438 \u0432 \u043b\u0430\u0433\u0435\u0440\u044f\u0445 Link AS\",\"type\":\"module\",\"radius\":18,\"color\":\"#10B981\",\"collapsed\":false,\"desc\":\"\u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438. \u0410\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043c\u043e\u0442\u0442\u0430\u043a\u0430, \u0431\u044b\u0442, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c.\\n\",\"notes\":\"\u0412\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Link AS.\",\"video_link\":\"\",\"children\":[{\"id\":\"cat_jqe4uz\",\"name\":\"\u0420\u041e\u0414\u0415\",\"type\":\"category\",\"radius\":12,\"color\":\"#10B981\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u043d\u0438 \u0438 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043b\u0430\u0433\u0435\u0440\u0435\",\"video_link\":\"\",\"children\":[{\"id\":\"atom_x9ppksp5r\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"atom_ipgy6wfze\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"atom_3lkjoekwp\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}]}]},{\"id\":\"atom_ri92alto8\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}],\"links\":[],\"assignee\":\"\",\"status\":\"\"},{\"id\":\"cat_34kyq6\",\"name\":\"\u041c\u0443\u0442\u0430\u043a\",\"type\":\"category\",\"radius\":12,\"color\":\"#10B981\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0416\u0438\u0437\u043d\u044c \u0432 \u043b\u0430\u0433\u0435\u0440\u0435 \",\"video_link\":\"\",\"children\":[{\"id\":\"atom_u8c76c1az\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"atom_qxjunm7xr\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}]},{\"id\":\"atom_fovopd5ns\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}],\"links\":[]},{\"id\":\"cat_b69f47\",\"name\":\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\",\"type\":\"category\",\"radius\":12,\"color\":\"#10B981\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0432\u0441\u0435 \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e \u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c \u043d\u0430 \u043f\u0443\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u0438\u043b\u0438 \u0435\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\",\"video_link\":\"\",\"children\":[{\"id\":\"atom_i063r4isc\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0417\u0430\u0434\u0430\u0447\u0430\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"atom_2ngx7i32l\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}]},{\"id\":\"atom_1ccjmo37t\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 atom\",\"type\":\"atom\",\"color\":\"#10B981\",\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}],\"links\":[]}],\"links\":[{\"title\":\"MVP \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\",\"url\":\"https:\\\/\\\/link.axi.so\\\/?page_id=136&lang=en\"},{\"title\":\"\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043c\u0438\u043d\u0438\",\"url\":\"https:\\\/\\\/link.axi.so\\\/?page_id=169&lang=en\"},{\"title\":\"\",\"url\":\"https:\\\/\\\/link.axi.so\\\/?page_id=205\"}],\"assignee\":\"\u0414\u0435\u043d\u0438\u0441\",\"status\":\"\"},{\"id\":\"mod_nyoyls\",\"name\":\"COMMUNE\",\"type\":\"module\",\"radius\":18,\"color\":\"#EC4899\",\"collapsed\":false,\"desc\":\"\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0433\u043e\u0440\u043e\u0434. \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 Kommune, NAV, \u0448\u043a\u043e\u043b\u044b, \u0441\u0430\u0434\u0438\u043a\u0438, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CV \u0438 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u044b\",\"notes\":\"\u0412\u043d\u0435\u0434\u0440\u044f\u0435\u043c \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u043e\u0431\u0440\u0430\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\",\"video_link\":\"\",\"children\":[{\"id\":\"cat_pjwxv6\",\"name\":\"\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0432 \u043a\u043e\u043c\u0443\u043d\u0443 \",\"type\":\"category\",\"radius\":12,\"color\":\"#EC4899\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u043d\u0438 \u0432 \u043d\u043e\u0432\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_wc5sos\",\"name\":\"\u0438\u043d\u0442\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \",\"type\":\"category\",\"radius\":12,\"color\":\"#EC4899\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_vepwi3\",\"name\":\"\u0447\u0442\u043e \u0432 \u043a\u043e\u043c\u0443\u043d\u0435\",\"type\":\"category\",\"radius\":12,\"color\":\"#EC4899\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u043a\u0430\u043a\u0438\u0435 \u0434\u043e\u0441\u0442\u043e\u043f\u0440\u0435\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u0443\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0430 \u043a\u043e\u043c\u0443\u043d\u044b, \u0432\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u0443\u043d\u0435\",\"video_link\":\"\",\"children\":[]}],\"subtitle\":\"\u041c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438 \u0412\u044b\u0445\u043e\u0434 \u0432 \u0436\u0438\u0437\u043d\u044c\"},{\"id\":\"mod_5e58wg\",\"name\":\"SCAN\",\"type\":\"module\",\"radius\":18,\"color\":\"#8B5CF6\",\"collapsed\":false,\"desc\":\"\u00ab\u0426\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0433\u043b\u0430\u0437\u0430\u00bb \u043d\u0430 \u043f\u0443\u0442\u0438. \u0421\u043a\u0430\u043d\u0435\u0440 \u043f\u0438\u0441\u0435\u043c, \u0441\u0447\u0435\u0442\u043e\u0432, \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 Rema\\\/Kiwi, \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u043a \u0438 \u0437\u043d\u0430\u043a\u043e\u0432.\\n\",\"notes\":\"\u0414\u0435\u043b\u0430\u0435\u0448\u044c \u0444\u043e\u0442\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u0435 \u0430 \u043e\u043d \u043e\u0431\u044c\u044f\u0441\u043d\u044f\u0435\u0442 \u0447\u0442\u043e \u044d\u0442\u043e \",\"video_link\":\"\",\"children\":[{\"id\":\"cat_yt6lxa\",\"name\":\"\u0432 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u0435\",\"type\":\"category\",\"radius\":12,\"color\":\"#8B5CF6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0441\u0434\u0435\u043b\u0430\u043b \u0444\u043e\u0442\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u0442\u0435\u0431\u0435 \u0438\u0438 \u043e\u0431\u044c\u044f\u0441\u043d\u0438\u043b\u043e \u0447\u0442\u043e \u044d\u0442\u043e\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_o89lnf\",\"name\":\"\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\",\"type\":\"category\",\"radius\":12,\"color\":\"#8B5CF6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0434\u0434 \u0438 \u0433\u0434\u0435 \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u043c \u0435\u0445\u0430\u0442\u044c \u0438 \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u0442.\u0434. \u043f\u043e \u0444\u043e\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0438\u043b\u0438 \u0430\u043a\u0446\u0438\u0438 \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0438 \u043e\u0431\u044c\u044f\u0441\u043d\u0438\u0442 \u0447\u0442\u043e \u044d\u0442\u043e\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_6slep7\",\"name\":\"\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b\",\"type\":\"category\",\"radius\":12,\"color\":\"#8B5CF6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u0442 \u0442\u043e \u0447\u0442\u043e \u043d\u0430 \u0444\u043e\u0442\u043e \u043f\u0438\u0441\u044c\u043c\u043e \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f, \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u0442 \u0438 \u0441\u043a\u0430\u0436\u0435\u0442 \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435.\",\"video_link\":\"\",\"children\":[]}],\"subtitle\":\"\u0424\u043e\u0442\u043e-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\"},{\"id\":\"mod_dd2cwx\",\"name\":\"TRANSLATE\",\"type\":\"module\",\"radius\":18,\"color\":\"#3B82F6\",\"collapsed\":false,\"desc\":\"\u041f\u0440\u044f\u043c\u043e\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0431\u0435\u0437 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u0440\u044c\u0435\u0440\u0430. \",\"notes\":\"\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u043e\u0440\u0432\u0435\u0434\u0441\u043a\u0438\u0439, \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f \",\"video_link\":\"\",\"children\":[{\"id\":\"cat_llyi6f\",\"name\":\"\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\",\"type\":\"category\",\"radius\":12,\"color\":\"#3B82F6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0434 \u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0435 \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043c\u0443\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441 \u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0435\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_dt4sif\",\"name\":\"\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \",\"type\":\"category\",\"radius\":12,\"color\":\"#3B82F6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0436\u0438\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043e\u0442 \u0438\u0438\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_h2knpx\",\"name\":\"\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043f\u043e \u0444\u043e\u0442\u043e\",\"type\":\"category\",\"radius\":12,\"color\":\"#3B82F6\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0447\u0435\u0442\u043a\u043e \u043e\u0431\u044c\u044f\u0441\u043d\u044f\u0435\u0442 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441 \u043d\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c\",\"video_link\":\"\",\"children\":[]}],\"subtitle\":\"\u0423\u043c\u043d\u044b\u0439 \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0438 \u0413\u043e\u043b\u043e\u0441\"},{\"id\":\"mod_tlducl\",\"name\":\"SPR\u00c5K\",\"type\":\"module\",\"radius\":18,\"color\":\"#F97316\",\"collapsed\":false,\"desc\":\"\u041e\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0420\u043e\u043b\u0435\u0432\u044b\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b, \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u0418\u0418, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a Norskpr\u00f8ve \u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439.\\n\",\"notes\":\"\",\"video_link\":\"https:\\\/\\\/axi.so\\\/\",\"children\":[{\"id\":\"cat_rvcv6o\",\"name\":\"\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0443\u0447\u0438\u0442\u044c \u044f\u0437\u044b\u043a\",\"type\":\"category\",\"radius\":12,\"color\":\"#F97316\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0436\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u043d\u0435\u0439, \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_ys466l\",\"name\":\"\u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u0440\u043e\u043a\u0438\",\"type\":\"category\",\"radius\":12,\"color\":\"#F97316\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u0444\u043e\u0442\u043e \u0432\u0438\u0434\u0438\u043e \u0430\u0443\u0434\u0438\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0432\u0438\u0434\u0438\u043e \u0443\u043a\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0444\u0440\u0430\u0437 \u0438 \u043f\u043b\u0430\u0432\u043d\u0432\u044f \u043f\u043e\u0440\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0438\u043d\u0442\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435\",\"video_link\":\"\",\"children\":[]},{\"id\":\"cat_g2d1tw\",\"name\":\"\u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435\",\"type\":\"category\",\"radius\":12,\"color\":\"#F97316\",\"collapsed\":false,\"department\":\"\",\"notes\":\"\u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u044f\u0437\u044b\u043a \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0432 \u0438\u043d\u0442\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \",\"video_link\":\"\",\"children\":[]}],\"subtitle\":\"\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u042f\u0437\u044b\u043a\u0430\"}],\"links\":[{\"title\":\"\u0410\u043a\u0441\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u0442\u0435\u0441\u0442\",\"url\":\"axi.so\"}],\"is_hidden\":false,\"status\":\"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\",\"assignee\":\"\u0410LEX\"},{\"id\":\"core_6o5y3ebo0\",\"name\":\"\u041d\u043e\u0432\u043e\u0435 \u042f\u0434\u0440\u043e\",\"type\":\"core\",\"radius\":30,\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"module_vt8gkqwj4\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 module\",\"type\":\"module\",\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[{\"id\":\"category_ykyz16cn0\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 category\",\"type\":\"category\",\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]},{\"id\":\"category_czulfohb9\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 category\",\"type\":\"category\",\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]},{\"id\":\"category_0dc4pfo4p\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 category\",\"type\":\"category\",\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}]},{\"id\":\"module_y4lwk9an4\",\"name\":\"\u041d\u043e\u0432\u044b\u0439 module\",\"type\":\"module\",\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\",\"links\":[],\"children\":[]}]},{\"id\":\"core_rsoi7yy89\",\"name\":\"\u041d\u043e\u0432\u043e\u0435 \u042f\u0434\u0440\u043e\",\"type\":\"core\",\"radius\":30,\"color\":\"#3b82f6\",\"status\":\"\",\"assignee\":\"\",\"notes\":\"\u044f\u0432\u0447\u0441\u043c\u0438\u0441\",\"links\":[],\"children\":[]}];\n    const collapsedNodes = new Set();\n    let allNodesFlat = [];\n    let currentNavIndex = 0;\n    let isAutoRotate = true;\n\n    \/\/ 1. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0413\u0440\u0430\u0444\u0430\n    function buildGraphData() {\n        const nodes = [];\n        const links = [];\n        allNodesFlat = [];\n\n        function traverse(node, parent = null) {\n            nodes.push(node);\n            allNodesFlat.push(node);\n            if (parent) {\n                links.push({ source: parent.id, target: node.id, color: parent.color || '#3b82f6' });\n            }\n            if (node.children && !collapsedNodes.has(node.id)) {\n                node.children.forEach(child => traverse(child, node));\n            }\n        }\n\n        Array.isArray(rawData) ? rawData.forEach(core => traverse(core)) : traverse(rawData);\n        return { nodes, links };\n    }\n\n    \/\/ 2. \u0414\u0435\u0440\u0435\u0432\u043e \u041f\u0440\u043e\u0435\u043a\u0442\u0430 (\u041b\u0435\u0432\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c)\n    function generateTreeHTML(nodes, depth = 0) {\n        let html = '';\n        nodes.forEach(node => {\n            const padding = depth * 20;\n            const hasChildren = node.children && node.children.length > 0;\n            \n            let statusBadge = '';\n            if (node.status) {\n                let badgeColor = 'border-white\/20 text-white\/60';\n                if(node.status === '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435') badgeColor = 'border-yellow-400\/50 text-yellow-300';\n                if(node.status === '\u041d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435') badgeColor = 'border-blue-400\/50 text-blue-300';\n                if(node.status === '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e') badgeColor = 'border-emerald-400\/50 text-emerald-300';\n                statusBadge = `<span class=\"text-[9px] uppercase px-1.5 py-0.5 rounded border ${badgeColor} ml-2 whitespace-nowrap hidden sm:inline-block\">${node.status}<\/span>`;\n            }\n            \n            html += `\n            <div class=\"flex flex-col w-full\">\n                <div class=\"vei-tree-row flex items-center w-full hover:bg-white\/10 p-2 rounded cursor-pointer transition-colors border border-transparent hover:border-white\/5\" style=\"padding-left: ${padding + 8}px\" data-node-id=\"${node.id}\">\n                    ${hasChildren ? `\n                    <button class=\"w-6 h-6 flex items-center justify-center text-white\/40 hover:text-white mr-1 vei-tree-toggle transition-colors\">\n                        <svg class=\"w-4 h-4 transform rotate-90 transition-transform\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"><\/path><\/svg>\n                    <\/button>` : `<span class=\"w-6 h-6 mr-1 inline-block\"><\/span>`}\n                    \n                    <div class=\"w-3 h-3 rounded-full mr-3 shadow-[0_0_8px_currentColor]\" style=\"background-color: ${node.color || '#3b82f6'}; color: ${node.color || '#3b82f6'};\"><\/div>\n                    <span class=\"text-white\/90 font-semibold text-sm md:text-base truncate\">${node.name || '\u0411\u0435\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f'}<\/span>\n                    ${statusBadge}\n                <\/div>\n                ${hasChildren ? `\n                <div class=\"vei-tree-children w-full relative\">\n                    <div class=\"absolute left-0 top-0 bottom-0 border-l border-white\/10 pointer-events-none\" style=\"left: ${padding + 20}px\"><\/div>\n                    ${generateTreeHTML(node.children, depth + 1)}\n                <\/div>` : ''}\n            <\/div>`;\n        });\n        return html;\n    }\n\n    function populateTreeOverlay() {\n        const container = document.getElementById('vei-tree-container');\n        const rootNodes = Array.isArray(rawData) ? rawData : [rawData];\n        container.innerHTML = generateTreeHTML(rootNodes, 0);\n\n        container.querySelectorAll('.vei-tree-row').forEach(row => {\n            row.addEventListener('click', (e) => {\n                if (e.target.closest('.vei-tree-toggle')) {\n                    e.stopPropagation();\n                    const toggleBtn = e.target.closest('.vei-tree-toggle');\n                    const childrenDiv = row.nextElementSibling;\n                    if (childrenDiv && childrenDiv.classList.contains('vei-tree-children')) {\n                        childrenDiv.classList.toggle('hidden');\n                        toggleBtn.querySelector('svg').classList.toggle('rotate-90');\n                    }\n                    return;\n                }\n                const nodeId = row.getAttribute('data-node-id');\n                const targetNode = allNodesFlat.find(n => n.id === nodeId);\n                if (targetNode) {\n                    focusOnNode(targetNode, false); \/\/ false = \u0422\u041e\u041b\u042c\u041a\u041e \u043f\u0435\u0440\u0435\u043b\u0435\u0442, \u0431\u0435\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0418\u043d\u0444\u043e\n                }\n            });\n        });\n    }\n\n    \/\/ 3. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0420\u0443\u0447\u043a\u0430\u043c\u0438 \u0438 \u041f\u0430\u043d\u0435\u043b\u044f\u043c\u0438\n    const treePanel = document.getElementById('vei-tree-panel');\n    const rightSidePanel = document.getElementById('vei-side-panel');\n    const leftHandle = document.getElementById('vei-left-handle');\n    const rightHandle = document.getElementById('vei-right-handle');\n\n    function hideHandlesIfNeed() {\n        \/\/ \u043f\u0440\u044f\u0447\u0435\u043c \u0440\u0443\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432\u044b\u0435\u0445\u0430\u043b\u0438\n        if (!treePanel.classList.contains('-translate-x-full')) leftHandle.classList.add('hidden');\n        else leftHandle.classList.remove('hidden');\n\n        if (!rightSidePanel.classList.contains('translate-x-full')) rightHandle.classList.add('hidden');\n        else rightHandle.classList.remove('hidden');\n    }\n\n    leftHandle.addEventListener('click', (e) => {\n        e.stopPropagation();\n        populateTreeOverlay();\n        treePanel.classList.remove('-translate-x-full');\n        hideHandlesIfNeed();\n        isAutoRotate = false; \n    });\n\n    rightHandle.addEventListener('click', (e) => {\n        e.stopPropagation();\n        rightSidePanel.classList.remove('translate-x-full');\n        hideHandlesIfNeed();\n        isAutoRotate = false;\n    });\n\n    document.getElementById('vei-tree-close').addEventListener('click', () => {\n        treePanel.classList.add('-translate-x-full');\n        hideHandlesIfNeed();\n        if(rightSidePanel.classList.contains('translate-x-full')) isAutoRotate = true;\n    });\n\n    document.getElementById('vei-panel-close').addEventListener('click', () => {\n        rightSidePanel.classList.add('translate-x-full');\n        hideHandlesIfNeed();\n        if(treePanel.classList.contains('-translate-x-full')) isAutoRotate = true;\n    });\n\n    \/\/ 4. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f 3D \u0413\u0440\u0430\u0444\u0430 \u0438 \u041c\u043e\u043b\u0435\u043a\u0443\u043b (\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432)\n    const container = document.getElementById('vei-3d-graph');\n    if (!container) return;\n\n    const Graph = ForceGraph3D()(container)\n        .graphData(buildGraphData())\n        .backgroundColor('#030614')\n        .nodeId('id')\n        .nodeRelSize(5)\n        .linkWidth(1.5)\n        .linkColor(link => link.color || '#ffffff')\n        .linkOpacity(0.5)\n        .linkDirectionalParticles(2)\n        .linkDirectionalParticleWidth(2)\n        .linkDirectionalParticleSpeed(0.005)\n        .nodeThreeObject(node => {\n            const group = new THREE.Group();\n            const radius = node.radius || (node.type === 'core' ? 25 : 10);\n            \n            \/\/ \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0444\u0435\u0440\u0430 \u0438 \u043e\u0440\u0435\u043e\u043b\n            const geometry = new THREE.SphereGeometry(radius * 0.4, 16, 16);\n            const material = new THREE.MeshBasicMaterial({ color: node.color || '#3b82f6' });\n            group.add(new THREE.Mesh(geometry, material));\n\n            const haloGeo = new THREE.SphereGeometry(radius * 0.6, 16, 16);\n            const haloMat = new THREE.MeshBasicMaterial({ color: node.color || '#3b82f6', transparent: true, opacity: 0.15, blending: THREE.AdditiveBlending });\n            group.add(new THREE.Mesh(haloGeo, haloMat));\n\n            \/\/ \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u043c\u0435\u0442\u043a\u0430 \u0423\u0437\u043b\u0430\n            const sprite = new SpriteText(node.name || 'Node');\n            sprite.color = '#ffffff';\n            sprite.fontFace = 'Rajdhani';\n            sprite.fontWeight = 'bold';\n            sprite.textHeight = node.type === 'core' ? 12 : 6;\n            sprite.position.y = -(radius * 0.5 + 4);\n            group.add(sprite);\n\n            \/\/ \u041e\u0420\u0411\u0418\u0422\u042b \u041c\u041e\u041b\u0415\u041a\u0423\u041b (\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438)\n            if (node.assignee) {\n                const assignees = node.assignee.split(',').map(s => s.trim()).filter(Boolean);\n                node.__moleculePivots = []; \n                \n                assignees.forEach((emp, index) => {\n                    const pivot = new THREE.Group();\n                    pivot.rotation.x = Math.random() * Math.PI;\n                    pivot.rotation.z = Math.random() * Math.PI;\n                    \n                    const orbitRadius = radius * 1.5 + 4 + (index * 4); \/\/ \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u0442\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0440\u0431\u0438\u0442\u044b\n                    \n                    let molColor = '#F97316'; \/\/ \u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n                    if(node.status === '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e') molColor = '#10B981';\n                    if(node.status === '\u041d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435') molColor = '#3B82F6';\n                    \n                    const molMesh = new THREE.Mesh(\n                        new THREE.SphereGeometry(radius * 0.25, 12, 12),\n                        new THREE.MeshBasicMaterial({ color: molColor })\n                    );\n                    molMesh.position.set(orbitRadius, 0, 0);\n                    \n                    const molHalo = new THREE.Mesh(\n                        new THREE.SphereGeometry(radius * 0.35, 12, 12),\n                        new THREE.MeshBasicMaterial({ color: molColor, transparent: true, opacity: 0.3, blending: THREE.AdditiveBlending })\n                    );\n                    molMesh.add(molHalo);\n\n                    const pathMesh = new THREE.Mesh(\n                        new THREE.RingGeometry(orbitRadius - 0.1, orbitRadius + 0.1, 32),\n                        new THREE.MeshBasicMaterial({ color: '#ffffff', transparent: true, opacity: 0.1, side: THREE.DoubleSide })\n                    );\n                    pathMesh.rotation.x = Math.PI \/ 2;\n                    pivot.add(pathMesh);\n\n                    const nameSprite = new SpriteText(emp);\n                    nameSprite.color = molColor;\n                    nameSprite.fontFace = 'Rajdhani';\n                    nameSprite.fontWeight = 'bold';\n                    nameSprite.textHeight = radius * 0.25;\n                    nameSprite.position.set(orbitRadius, (radius * 0.25) + 3, 0);\n                    \n                    pivot.add(molMesh);\n                    pivot.add(nameSprite);\n                    group.add(pivot);\n                    node.__moleculePivots.push(pivot);\n                });\n            }\n\n            return group;\n        })\n        .onNodeClick(node => {\n            isAutoRotate = false; \n            \n            if (node.children && node.children.length > 0) {\n                if (collapsedNodes.has(node.id)) collapsedNodes.delete(node.id);\n                else collapsedNodes.add(node.id);\n                Graph.graphData(buildGraphData());\n            }\n            \n            focusOnNode(node, true); \/\/ true = \u041f\u043e\u043b\u0435\u0442 + \u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u041f\u0440\u0430\u0432\u043e\u0439 \u0418\u043d\u0444\u043e \u041f\u0430\u043d\u0435\u043b\u0438\n        })\n        .onBackgroundClick(() => {\n            \/\/ \u041a\u043b\u0438\u043a \u043f\u043e \u043a\u043e\u0441\u043c\u043e\u0441\u0443 - \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0451\n            rightSidePanel.classList.add('translate-x-full');\n            treePanel.classList.add('-translate-x-full');\n            hideHandlesIfNeed();\n            isAutoRotate = true; \n        });\n\n    Graph.d3Force('link').distance(link => {\n        const type = link.source.type || 'atom';\n        return type === 'core' ? 120 : (type === 'module' ? 60 : 30);\n    });\n\n    setTimeout(() => {\n        if(Graph.controls()) {\n            Graph.controls().addEventListener('start', () => { isAutoRotate = false; });\n        }\n    }, 1000);\n\n    \/\/ 5. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f (\u041f\u043b\u0430\u0432\u043d\u044b\u0439 \u043e\u0431\u043b\u0435\u0442 \u043a\u0430\u043c\u0435\u0440\u044b + \u0412\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u043b\u0435\u043a\u0443\u043b)\n    function animateOrbit() {\n        if (isAutoRotate) {\n            const camPos = Graph.cameraPosition();\n            const dist = Math.hypot(camPos.x, camPos.z);\n            if (dist > 50) { \n                let currentAngle = Math.atan2(camPos.x, camPos.z);\n                currentAngle += 0.002; \n                Graph.cameraPosition({\n                    x: dist * Math.sin(currentAngle),\n                    z: dist * Math.cos(currentAngle)\n                });\n            }\n        }\n        \n        \/\/ \u041c\u043e\u043b\u0435\u043a\u0443\u043b\u044b \u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430!\n        Graph.graphData().nodes.forEach(n => {\n            if (n.__moleculePivots) {\n                n.__moleculePivots.forEach((pivot, idx) => {\n                    const speed = 0.01 + (idx * 0.005);\n                    pivot.rotation.y += speed; \n                });\n            }\n        });\n\n        requestAnimationFrame(animateOrbit);\n    }\n    requestAnimationFrame(animateOrbit);\n\n    \/\/ 6. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0418\u043d\u0444\u043e-\u043e\u043a\u043d\u043e\u043c \u0438 \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0421\u0441\u044b\u043b\u043a\u0430\u043c\u0438\n    function openSidePanel(node) {\n        document.getElementById('vei-panel-empty').classList.add('hidden');\n        document.getElementById('vei-panel-content').classList.remove('hidden');\n\n        document.getElementById('vei-panel-title').innerText = node.name || '\u0411\u0435\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f';\n        document.getElementById('vei-panel-type').innerText = node.type || '\u0443\u0437\u0435\u043b';\n        \n        const statusEl = document.getElementById('vei-panel-status');\n        if (node.status) {\n            statusEl.innerText = node.status;\n            statusEl.classList.remove('hidden', 'text-yellow-400', 'border-yellow-400', 'text-blue-400', 'border-blue-400', 'text-emerald-400', 'border-emerald-400');\n            if(node.status === '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435') statusEl.classList.add('text-yellow-400', 'border-yellow-400');\n            if(node.status === '\u041d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435') statusEl.classList.add('text-blue-400', 'border-blue-400');\n            if(node.status === '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e') statusEl.classList.add('text-emerald-400', 'border-emerald-400');\n        } else { statusEl.classList.add('hidden'); }\n\n        const assigneeEl = document.getElementById('vei-panel-assignee');\n        if (node.assignee) {\n            assigneeEl.innerText = '\ud83d\udc64 ' + node.assignee;\n            assigneeEl.classList.remove('hidden');\n        } else { assigneeEl.classList.add('hidden'); }\n\n        const updateBox = (id, val) => {\n            const box = document.getElementById(id + '-box');\n            if (val) { document.getElementById(id).innerText = val; box.classList.remove('hidden'); }\n            else { box.classList.add('hidden'); }\n        };\n        updateBox('vei-panel-notes', node.notes);\n        updateBox('vei-panel-pain', node.pain);\n        updateBox('vei-panel-solution', node.solution);\n\n        \/\/ \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438\n        const mediaActions = document.getElementById('vei-panel-media-actions');\n        mediaActions.innerHTML = ''; \n        let allLinks = [];\n        if (node.video_link) allLinks.push({title: '\u0412\u0438\u0434\u0435\u043e-\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f', url: node.video_link});\n        if (node.links && node.links.length > 0) allLinks = allLinks.concat(node.links);\n\n        if (allLinks.length > 0) {\n            mediaActions.classList.remove('hidden');\n            mediaActions.classList.add('flex');\n            allLinks.forEach((lnk) => {\n                if(!lnk.url) return;\n                const btn = document.createElement('button');\n                const isYt = \/youtu\\.be|youtube\\.com\/.test(lnk.url);\n                \n                btn.className = 'w-full py-2.5 bg-white\/5 hover:bg-white\/10 text-white\/80 hover:text-white font-semibold rounded-lg text-xs uppercase tracking-wider flex items-center justify-center gap-2 border border-white\/10 transition-all text-center';\n                \n                if (isYt) {\n                    btn.innerHTML = `<svg class=\"w-4 h-4 text-red-500\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M19.615 3.184c-3.604-.246-11.631-.245-15.23 0-3.897.266-4.356 2.62-4.385 8.816.029 6.185.484 8.549 4.385 8.816 3.6.245 11.626.246 15.23 0 3.897-.266 4.356-2.62 4.385-8.816-.029-6.185-.484-8.549-4.385-8.816zm-10.615 12.816v-8l8 3.993-8 4.007z\"\/><\/svg> ${lnk.title || '\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u043e'}`;\n                    btn.onclick = () => {\n                        const iframe = document.getElementById('vei-video-iframe');\n                        const modal = document.getElementById('vei-video-modal');\n                        const match = lnk.url.match(\/^.*(youtu.be\\\/|v\\\/|u\\\/\\w\\\/|embed\\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*\/);\n                        iframe.src = (match && match[2].length === 11) ? 'https:\/\/www.youtube.com\/embed\/' + match[2] + '?autoplay=1' : lnk.url;\n                        modal.classList.remove('hidden');\n                    };\n                } else {\n                    btn.innerHTML = `<svg class=\"w-4 h-4 text-[#00F5D4]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"><\/path><\/svg> ${lnk.title || '\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443'}`;\n                    btn.onclick = () => { window.open(lnk.url, '_blank'); };\n                }\n                mediaActions.appendChild(btn);\n            });\n        } else {\n            mediaActions.classList.add('hidden');\n            mediaActions.classList.remove('flex');\n        }\n\n        currentNavIndex = allNodesFlat.findIndex(n => n.id === node.id);\n    }\n\n    document.getElementById('vei-video-close').addEventListener('click', () => {\n        document.getElementById('vei-video-iframe').src = ''; \n        document.getElementById('vei-video-modal').classList.add('hidden');\n    });\n\n    \/\/ 7. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u043e\u043a\u0443\u0441\u0430 (\u0441 \u0444\u043b\u0430\u0433\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u043d\u0444\u043e)\n    function focusOnNode(targetNode, openRight = true) {\n        collapsedNodes.clear();\n        Graph.graphData(buildGraphData());\n\n        setTimeout(() => {\n            const updatedNode3D = Graph.graphData().nodes.find(n => n.id === targetNode.id) || targetNode;\n            \n            if (openRight) {\n                openSidePanel(updatedNode3D);\n                rightSidePanel.classList.remove('translate-x-full');\n                hideHandlesIfNeed();\n            }\n\n            const distance = updatedNode3D.type === 'core' ? 180 : 100;\n            const distRatio = 1 + distance\/Math.hypot(updatedNode3D.x || 1, updatedNode3D.y || 1, updatedNode3D.z || 1);\n            Graph.cameraPosition(\n                { x: (updatedNode3D.x || 0) * distRatio, y: (updatedNode3D.y || 0) * distRatio, z: (updatedNode3D.z || 0) * distRatio },\n                updatedNode3D,\n                1500\n            );\n        }, 100);\n    }\n\n    function navigateTo(step) {\n        if (allNodesFlat.length === 0) return;\n        let nextIndex = currentNavIndex + step;\n        if (nextIndex < 0) nextIndex = allNodesFlat.length - 1;\n        if (nextIndex >= allNodesFlat.length) nextIndex = 0;\n        \n        currentNavIndex = nextIndex;\n        \/\/ \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0412\u043f\u0435\u0440\u0435\u0434\/\u041d\u0430\u0437\u0430\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c\n        focusOnNode(allNodesFlat[currentNavIndex], true);\n    }\n\n    document.getElementById('vei-nav-next').addEventListener('click', () => navigateTo(1));\n    document.getElementById('vei-nav-prev').addEventListener('click', () => navigateTo(-1));\n\n    document.getElementById('vei-btn-expand').addEventListener('click', () => {\n        collapsedNodes.clear();\n        Graph.graphData(buildGraphData());\n    });\n\n    document.getElementById('vei-btn-collapse').addEventListener('click', () => {\n        collapsedNodes.clear();\n        if (Array.isArray(rawData)) {\n            rawData.forEach(root => { if (root.children) root.children.forEach(c => collapsedNodes.add(c.id)); });\n        }\n        Graph.graphData(buildGraphData());\n        Graph.cameraPosition({ x: 0, y: 0, z: 450 }, { x: 0, y: 0, z: 0 }, 2000);\n        isAutoRotate = true; \n    });\n\n    \/\/ 8. \u0418\u0414\u0415\u0410\u041b\u042c\u041d\u0410\u042f \u0410\u0414\u0410\u041f\u0422\u0410\u0426\u0418\u042f\n    const wrapper = document.getElementById('vei-app-container');\n    const resizeObserver = new ResizeObserver(entries => {\n        for (let entry of entries) {\n            Graph.width(entry.contentRect.width);\n            Graph.height(entry.contentRect.height);\n        }\n    });\n    resizeObserver.observe(wrapper);\n\n})();\n<\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-467","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/pages\/467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/link.axi.so\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=467"}],"version-history":[{"count":38,"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/pages\/467\/revisions"}],"predecessor-version":[{"id":746,"href":"https:\/\/link.axi.so\/index.php?rest_route=\/wp\/v2\/pages\/467\/revisions\/746"}],"wp:attachment":[{"href":"https:\/\/link.axi.so\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}