diff --git a/admin/admin.css b/admin/admin.css index df0ed43..7991d90 100644 --- a/admin/admin.css +++ b/admin/admin.css @@ -1214,12 +1214,19 @@ body[data-file-picker-active="true"] .editor { } .collection-drag-handle { - letter-spacing: -0.12em; cursor: grab; touch-action: none; user-select: none; } +.collection-drag-handle svg { + display: block; + width: 0.75rem; + height: 1.125rem; + fill: currentColor; + opacity: 0.78; +} + .collection-drag-handle:active { cursor: grabbing; } diff --git a/admin/admin.js b/admin/admin.js index 046a9ff..5af419f 100644 --- a/admin/admin.js +++ b/admin/admin.js @@ -93,7 +93,7 @@ const STATIC_FALLBACK = { { enabled: true, title: "NODE.DC", - href: "#hero", + href: "javascript:void(0)", linkTarget: "", targetId: "app-data", iconSrc: "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -105,7 +105,7 @@ const STATIC_FALLBACK = { { enabled: true, title: "Корзина", - href: "", + href: "javascript:void(0)", linkTarget: "", targetId: "", iconSrc: "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -166,7 +166,7 @@ const STATIC_FALLBACK = { { enabled: true, title: "Новое приложение", - href: "#hero", + href: "javascript:void(0)", linkTarget: "", targetId: "", iconSrc: "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -207,7 +207,7 @@ const GROUP_COPY = { "Верхний информационный блок": "Верхняя пара: длинный текст и крупный заголовок над медиаслайдером.", "Нижний информационный блок": "Нижняя зеркальная пара: крупный заголовок и длинный текст под медиаслайдером.", "Тезисы первого экрана": "Четыре смысловых тезиса вокруг формы раннего доступа.", - "Карточка доступа": "Логотипы, тексты и видимость центрального окна приложения.", + "Карточка доступа": "Единый компонент окна заявки: редактируется здесь и повторяется в нижнем блоке запроса DEMO.", Форма: "Плейсхолдеры, кнопки, success/failure состояния формы.", "Юридический блок": "Политики, права и нижний текст формы.", "Видео-окно": "Окно демо-видео и подключенный медиа-файл.", @@ -220,11 +220,16 @@ const GROUP_COPY = { Отправитель: "Профиль отправителя в FAQ: аватар, имя и подписи письма.", FAQ: "Вопросы и ответы mail-интерфейса. Каждый пункт можно добавить, удалить и переставить.", CTA: "Финальный призыв к действию: заголовок, пояснение, кнопка и ссылка.", - Тарифы: "Верхняя часть тарифной таблицы: заголовки, планы, цены, кнопки и примечания.", + "Центральный текст": "Отдельный центрированный текстовый блок: надзаголовок, крупная строка и три подписи.", + Тарифы: "Окно тарифной таблицы: планы, цены, кнопки и примечания.", "Строки тарифов": "Повторяемые строки тарифной таблицы и значения по каждому плану.", "Медиа-галерея": "Окна с изображениями, подписи файлов и связанные иконки.", + "Карточки скриншотов": "Скриншоты в виде окон и файлов: каждый элемент можно скрыть, переставить, дублировать или удалить.", "TXT-файлы": "Список файлов листа ожидания: название окна, подпись и текст внутри файла.", - Футер: "Нижняя навигация, контактные ссылки, политики и брендовый блок.", + Футер: "Брендовый блок, копирайт и базовые ассеты футера.", + "Навигация футера": "Ссылки навигационной колонки футера. Каждый пункт можно скрыть, переставить, дублировать или удалить.", + "Контактные ссылки": "Ссылки контактной колонки футера. Каждый пункт можно скрыть, переставить, дублировать или удалить.", + Политики: "Нижняя строка политик и условия отображения.", Контент: "Остальные typed-поля выбранного блока.", }; @@ -335,7 +340,7 @@ function inferFieldGroup(path) { if (path.startsWith("content.cards.")) return "Тезисы первого экрана"; if (path.startsWith("content.app.") || path.startsWith("content.accessCard.")) return "Карточка доступа"; if (path.startsWith("content.form.")) return "Форма"; - if (path === "content.legalHtml") return "Юридический блок"; + if (path === "content.legalHtml" || path.startsWith("content.legal.")) return "Юридический блок"; if (path === "content.windowTitle" || path === "content.videoSrc") return "Видео-окно"; if (path.startsWith("content.features.")) return "Пункты"; if (path.startsWith("content.scroll.")) return "Скролл"; @@ -347,8 +352,11 @@ function inferFieldGroup(path) { if (path.startsWith("content.cta.")) return "CTA"; if (path.startsWith("content.plans.") || path.startsWith("content.pricing.")) return "Тарифы"; if (path.startsWith("content.pricingCells.")) return "Строки тарифов"; - if (path.startsWith("content.galleryItems.")) return "Медиа-галерея"; - if (path.startsWith("content.files.")) return "TXT-файлы"; + if (path === "content.galleryItems" || path.startsWith("content.galleryItems.")) return "Карточки скриншотов"; + if (path === "content.filesEnabled" || path.startsWith("content.files.")) return "TXT-файлы"; + if (path === "content.footer.policyEnabled" || path === "content.footer.policyHtml") return "Политики"; + if (path.startsWith("content.footer.navLinks.")) return "Навигация футера"; + if (path.startsWith("content.footer.contactLinks.")) return "Контактные ссылки"; if (path.startsWith("content.footer.")) return "Футер"; if (path.startsWith("content.heading.") || path === "content.introHtml") return "Заголовок"; return "Контент"; @@ -359,7 +367,7 @@ function createDefaultDockItems(dock = {}, assets = {}) { { enabled: true, title: "NODE.DC", - href: "#hero", + href: "javascript:void(0)", linkTarget: "", targetId: dock.appTarget || "app-data", iconSrc: assets.appIconSrc || STATIC_FALLBACK.content.assets.appIconSrc, @@ -371,7 +379,7 @@ function createDefaultDockItems(dock = {}, assets = {}) { { enabled: true, title: "Корзина", - href: "", + href: "javascript:void(0)", linkTarget: "", targetId: "", iconSrc: "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -575,6 +583,7 @@ function blockIcon(block) { const type = block.type || ""; if (id === "static-elements") return "SE"; + if (id.includes("gallery") || id.includes("screenshot")) return "SC"; if (id.includes("hero")) return "H"; if (id.includes("feature") || id.includes("video")) return "V"; if (id.includes("component")) return "C"; @@ -1797,13 +1806,13 @@ function renderCollectionField({ block, editableField, grid }) { dragHandle.type = "button"; dragHandle.title = "Перетащить элемент"; dragHandle.setAttribute("aria-label", "Перетащить элемент"); - dragHandle.textContent = "⋮⋮"; + dragHandle.innerHTML = + ''; dragHandle.addEventListener("click", (event) => { event.preventDefault(); event.stopPropagation(); }); dragHandle.addEventListener("pointerdown", (event) => startCollectionPointerDrag(event, details, items, index, rerender)); - controls.append(dragHandle); if (hasVisibilityToggle) { if (!Object.prototype.hasOwnProperty.call(item, "enabled")) item.enabled = true; @@ -1865,6 +1874,7 @@ function renderCollectionField({ block, editableField, grid }) { }); controls.append(button); }); + controls.append(dragHandle); summary.append(summaryTitle, controls); body.className = "collection-item-body"; diff --git a/assets/custom/css/app.css b/assets/custom/css/app.css index 4835daf..4a992e6 100644 --- a/assets/custom/css/app.css +++ b/assets/custom/css/app.css @@ -1,3 +1,5 @@ *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}img{pointer-events:none}.text-scrollable{scrollbar-width:none;-ms-overflow-style:none}.text-scrollable::-webkit-scrollbar{display:none}.circle .x-icon{opacity:0}.circle:hover .x-icon{opacity:1}[data-css=fade-tb]{mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);-webkit-mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;-webkit-mask-repeat:no-repeat}.current .mail-item{background-color:#3d3d3dc9}[data-module=""]{outline:10px solid red}[data-module=btn]>div>div>div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=btn]:hover>div>div>div>div{transform:translateY(-1.3em)}[data-module=link]{transition:opacity .1s ease-in-out}[data-module=link] div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=link]:hover{opacity:.6!important}[data-module=link]:hover div>div{transform:translateY(-.65em)}[data-module=apple-icon]:focus [data-txt]{position:relative}[data-module=apple-icon]:focus [data-txt]:before{content:"";position:absolute;z-index:-1;background-color:#0059d0;border-radius:.3em;width:120%;height:120%;top:-10%;left:-10%}[data-module=notification-w]{--notification-height:98%}[data-module=notification-w]>div:nth-child(2){transform:translateY(calc(-1*var(--notification-height)));z-index:2}[data-module=notification-w]>div:nth-child(3){transform:translateY(calc(-2*var(--notification-height)));z-index:3}[data-module=notification-w]:hover{--notification-height:98%}[data-module=notification-w]:hover>div:nth-child(2){z-index:2;transform:translateY(0)}[data-module=notification-w]:hover>div:nth-child(3){z-index:3;transform:translateY(0)}[data-module=notification]{transition:transform .3s cubic-bezier(.22,1,.36,1)} .app-item.video[data-adaptive-video-window]{--nodedc-video-source-aspect:1.777778;--nodedc-video-height:620px;--nodedc-video-max-height:72svh;--nodedc-video-max-width:70vw;--nodedc-video-render-height:min(var(--nodedc-video-height),var(--nodedc-video-max-height));aspect-ratio:auto;width:min(var(--nodedc-video-max-width),calc(var(--nodedc-video-render-height)*var(--nodedc-video-source-aspect)));height:auto}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]{aspect-ratio:var(--nodedc-video-source-aspect);display:block;width:100%;height:auto;max-height:var(--nodedc-video-render-height)}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]>video.video{display:block;width:100%;height:100%;object-fit:cover}.video-screen [data-media-handle]{display:block;width:100%;height:100%}.video-screen [data-media-handle]>img,.video-screen [data-media-handle]>video{display:block;width:100%;height:100%;object-fit:cover}@media screen and (max-width:767px){.app-item.video[data-adaptive-video-window]{--nodedc-video-max-height:58svh;--nodedc-video-max-width:95vw}} .project-video-detail .project-video-detail-copy{position:relative;z-index:2}.project-video-detail .project-video-detail-copy-bottom{margin-top:2.5rem}.project-video-detail .project-video-detail-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-video-detail .project-video-detail-hgroup{flex-flow:row;gap:1.25rem}.project-video-detail .project-video-detail-hgroup.flip{flex-flow:row-reverse}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2.35rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:22ch}.project-video-detail .project-video-detail-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-video-detail .project-video-detail-copy{width:86%}.project-video-detail .project-video-detail-hgroup{gap:1rem}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}} +.project-composition .project-composition-copy{position:relative;z-index:2}.project-composition .project-composition-copy-bottom{margin-top:2.5rem}.project-composition .project-composition-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-composition .project-composition-hgroup{flex-flow:row;gap:1.25rem}.project-composition .project-composition-hgroup.flip{flex-flow:row-reverse}.project-composition .project-composition-hgroup .main-h.h2{font-size:2.35rem}.project-composition .project-composition-hgroup .h-txt{max-width:22ch}.project-composition .project-composition-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-composition .project-composition-copy{width:86%}.project-composition .project-composition-hgroup{gap:1rem}.project-composition .project-composition-hgroup .main-h.h2{font-size:2rem}.project-composition .project-composition-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}} +.pricing-table-section .pricing-table-shell{padding-top:12svh;padding-bottom:12svh}@media screen and (max-width:767px){.pricing-table-section .pricing-table-shell{padding-top:8svh;padding-bottom:8svh}} diff --git a/assets/custom/css/out.css b/assets/custom/css/out.css index ed7fe5d..9639c85 100644 --- a/assets/custom/css/out.css +++ b/assets/custom/css/out.css @@ -1,3 +1,5 @@ *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}img{pointer-events:none}.text-scrollable{scrollbar-width:none;-ms-overflow-style:none}.text-scrollable::-webkit-scrollbar{display:none}.circle .x-icon{opacity:0}.circle:hover .x-icon{opacity:1}[data-css=fade-tb]{mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);-webkit-mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;-webkit-mask-repeat:no-repeat}.current .mail-item{background-color:#3d3d3dc9}[data-module=""]{outline:10px solid red}[data-module=btn]>div>div>div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=btn]:hover>div>div>div>div{transform:translateY(-1.3em)}[data-module=link]{transition:opacity .1s ease-in-out}[data-module=link] div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=link]:hover{opacity:.6!important}[data-module=link]:hover div>div{transform:translateY(-.65em)}[data-module=apple-icon]:focus [data-txt]{position:relative}[data-module=apple-icon]:focus [data-txt]:before{content:"";position:absolute;z-index:-1;background-color:#0059d0;border-radius:.3em;width:120%;height:120%;top:-10%;left:-10%}[data-module=notification-w]{--notification-height:98%}[data-module=notification-w]>div:nth-child(2){transform:translateY(calc(-1*var(--notification-height)));z-index:2}[data-module=notification-w]>div:nth-child(3){transform:translateY(calc(-2*var(--notification-height)));z-index:3}[data-module=notification-w]:hover{--notification-height:98%}[data-module=notification-w]:hover>div:nth-child(2){z-index:2;transform:translateY(0)}[data-module=notification-w]:hover>div:nth-child(3){z-index:3;transform:translateY(0)}[data-module=notification]{transition:transform .3s cubic-bezier(.22,1,.36,1)}[data-start=closed]{pointer-events:none;visibility:hidden}[data-module=app]:not([data-start=closed]){transform:scale(0)translateY(200%)}[data-module=folder-wrap]>*{transform:scale(0)}[data-module=list] a{opacity:0}[data-success],[data-failure]{display:none}[data-module=alpha]{opacity:0} .app-item.video[data-adaptive-video-window]{--nodedc-video-source-aspect:1.777778;--nodedc-video-height:620px;--nodedc-video-max-height:72svh;--nodedc-video-max-width:70vw;--nodedc-video-render-height:min(var(--nodedc-video-height),var(--nodedc-video-max-height));aspect-ratio:auto;width:min(var(--nodedc-video-max-width),calc(var(--nodedc-video-render-height)*var(--nodedc-video-source-aspect)));height:auto}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]{aspect-ratio:var(--nodedc-video-source-aspect);display:block;width:100%;height:auto;max-height:var(--nodedc-video-render-height)}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]>video.video{display:block;width:100%;height:100%;object-fit:cover}.video-screen [data-media-handle]{display:block;width:100%;height:100%}.video-screen [data-media-handle]>img,.video-screen [data-media-handle]>video{display:block;width:100%;height:100%;object-fit:cover}@media screen and (max-width:767px){.app-item.video[data-adaptive-video-window]{--nodedc-video-max-height:58svh;--nodedc-video-max-width:95vw}} .project-video-detail .project-video-detail-copy{position:relative;z-index:2}.project-video-detail .project-video-detail-copy-bottom{margin-top:2.5rem}.project-video-detail .project-video-detail-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-video-detail .project-video-detail-hgroup{flex-flow:row;gap:1.25rem}.project-video-detail .project-video-detail-hgroup.flip{flex-flow:row-reverse}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2.35rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:22ch}.project-video-detail .project-video-detail-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-video-detail .project-video-detail-copy{width:86%}.project-video-detail .project-video-detail-hgroup{gap:1rem}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}} +.project-composition .project-composition-copy{position:relative;z-index:2}.project-composition .project-composition-copy-bottom{margin-top:2.5rem}.project-composition .project-composition-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-composition .project-composition-hgroup{flex-flow:row;gap:1.25rem}.project-composition .project-composition-hgroup.flip{flex-flow:row-reverse}.project-composition .project-composition-hgroup .main-h.h2{font-size:2.35rem}.project-composition .project-composition-hgroup .h-txt{max-width:22ch}.project-composition .project-composition-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-composition .project-composition-copy{width:86%}.project-composition .project-composition-hgroup{gap:1rem}.project-composition .project-composition-hgroup .main-h.h2{font-size:2rem}.project-composition .project-composition-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}} +.pricing-table-section .pricing-table-shell{padding-top:12svh;padding-bottom:12svh}@media screen and (max-width:767px){.pricing-table-section .pricing-table-shell{padding-top:8svh;padding-bottom:8svh}} diff --git a/assets/custom/js/app.js b/assets/custom/js/app.js index 018571b..57f89b0 100644 --- a/assets/custom/js/app.js +++ b/assets/custom/js/app.js @@ -627,8 +627,8 @@ vec4 applyEffect(vec4 color, vec2 uv, vec2 resolution, vec4 uni[4]) { ); // Quantize trail mask at ASCII cell resolution (not per-pixel). - // Trail texture has y=1 at top (same as sourceUv/sampleUv after scene flip). - vec2 trailSampleUv = vec2(sampleUv.x, 1.0 - sampleUv.y); + // Trail texture and screen sample UVs now share the same vertical orientation. + vec2 trailSampleUv = vec2(sampleUv.x, sampleUv.y); float trail = texture(uTrail, trailSampleUv).r; float trailForGlyph = clamp(pow(trail, 0.9), 0.0, 1.0); float level = floor(trailForGlyph * 8.0 + 0.5); @@ -679,6 +679,6 @@ fn fsMain(in: VertexOut) -> @location(0) vec4f { // Alpha=0 marks background pixels so the post wipe can distinguish them from the model. return vec4f(darkCol, 0.0); } -`}},onInitError:(j)=>{console.warn("Failed to initialize mini WebGL runtime:",j)}}),Z=C9({easing:p.scene.mouseEasing}),q=iJ({element:Q,eventElement:window}),K=Z4(q,s8),G=S$.add(()=>{let j=s8();K.setEffectUni("background-flip-wipe",{value1:j}),K.setEffectUni("ascii-trail-mix",{value1:j})}),U=0,W=S0.add((j)=>{if(typeof j?.velocity==="number"){U=j.velocity;return}U=0}),X=nJ(H,{placement:p.scene.icon.placement,mouse:Z,getScale:rJ,getBackgroundFlipProgress:s8,getScrollVelocity:()=>U,scrollVelocityToYOffset:p.scene.icon.scrollVelocityToYOffset,scrollVelocityToXRotation:p.scene.icon.scrollVelocityToXRotation,scrollVelocityToYRotation:p.scene.icon.scrollVelocityToYRotation,scrollFlipVelocityThreshold:p.scene.icon.scrollFlipVelocityThreshold,scrollFlipDuration:p.scene.icon.scrollFlipDuration,scrollYOffsetDamping:p.scene.icon.scrollYOffsetDamping,scrollYOffsetRecenter:p.scene.icon.scrollBounceBack,scrollYOffsetEase:p.scene.icon.scrollYOffsetEase,idleFloatYOffsetAmplitude:p.scene.icon.idleFloatYOffsetAmplitude,idleFloatYOffsetSpeed:p.scene.icon.idleFloatYOffsetSpeed,idleFloatRotationAmplitude:p.scene.icon.idleFloatRotationAmplitude,idleFloatRotationSpeed:p.scene.icon.idleFloatRotationSpeed,log:p.scene.icon.log});return()=>{X(),G(),W(),K.destroy(),q.destroy(),Z.destroy(),H.destroy()}}var AH={};r(AH,{default:()=>dK});var vK="h1, h2, h3, h4",uK={opacity:0,xPercent:20,yPercent:20},q4="blur(6px)",mK={opacity:0,yPercent:12},E9={stagger:0.2,delay:0.1,paragraphDelay:0.05,paragraphWordStagger:0.04,groupStagger:0.18};function $Q(Q){return Q.filter(($)=>!!$&&$.isConnected)}function O9(Q,$){let J=$Q(Q);if(!J.length)return;n.set(J,$)}function K4(Q,$){let J=$Q(Q);if(!J.length)return;n.to(J,$)}function G4(Q){let $=$Q(Q);if(!$.length)return;n.killTweensOf($)}function U4(Q){let $=Q.parentElement,J=document.createElement("div");J.style.position="relative",J.style.display=Q.style.display||"block",$.insertBefore(J,Q),J.appendChild(Q),Q.style.opacity="0";let H=Q.cloneNode(!0);return H.setAttribute("aria-hidden","true"),H.style.opacity="1",H.style.position="absolute",H.style.top="0",H.style.left="0",H.style.width="100%",H.style.height="100%",H.style.pointerEvents="none",H.style.overflow="visible",H.style.zIndex="1",J.appendChild(H),new L$(H,{type:"words"}).words}function dK(Q,$){let J=$.group,H=J?Array.from(document.querySelectorAll(`[data-module="hg"][data-group="${CSS.escape(J)}"]`)).indexOf(Q):0,Z=Q.querySelector(`:scope > ${vK}`),q=Array.from(Q.querySelectorAll(`:scope > p, :scope > div:not(:has(${vK})):not(:has(a, button, [data-module="btn"]))`)).filter((X)=>!X.closest("a, button, [data-module='btn']")),K=Z?Array.from(Z.querySelectorAll("span")):[],G=K.length>0?K:Z?[Z]:[],U=[];if(q.length)U=q.flatMap(U4),O9(U,mK);if(!(G.length>0||U.length>0))return;O9(G,uK),O9([Q],{opacity:1}),l1(Q,{autoStart:!0,once:!1,callback:({isIn:X,direction:j})=>{if(X){if(Zq){O9([Q],{opacity:1}),O9(q,{opacity:1});return}let L=j===-1,B=J==="hero"&&!Q._hgAnimated,M=H*(B?E9.groupStagger*3:E9.groupStagger),I=E9.delay+M,z=E9.delay+E9.paragraphDelay+M;if(G.length){let R=$Q(G);if(R.length)n.fromTo(R,{filter:q4},{opacity:1,filter:"blur(0px)",xPercent:0,yPercent:0,stagger:{each:E9.stagger,from:L?"end":"start"},delay:I,onComplete:()=>{n.set(R,{clearProps:"filter"})}})}if(U.length)K4(U,{opacity:1,yPercent:0,stagger:{each:E9.paragraphWordStagger,from:L?"end":"start"},delay:z,ease:"expo.out"});if(B)Q._hgAnimated=!0}else G4([...G,...U]),O9(G,{...uK,clearProps:"filter"}),O9(U,mK)}})}var PH={};r(PH,{default:()=>oK});var gK="[data-ho-sticky]",W4="[data-ho-track]",X4=".ho-c",cK=0;function pK(Q,$){if(Q==null||Q==="")return $;let J=parseFloat(Q);if(!Number.isFinite(J))return $;return M$(0,0.45,J)}function j4(Q){let $=cK,J=cK,H=Q.hoBuffer?.split(",").map((Z)=>parseFloat(Z.trim()));if(H&&H.length>=2&&Number.isFinite(H[0])&&Number.isFinite(H[1]))$=M$(0,0.45,H[0]),J=M$(0,0.45,H[1]);if($=pK(Q.hoBufferStart,$),J=pK(Q.hoBufferEnd,J),$+J>=1){let Z=0.98/($+J);return{start:$*Z,end:J*Z}}return{start:$,end:J}}function B4(Q){if(Q.matches(gK))return Q;return Q.querySelector(gK)??Q.firstElementChild}function oK(Q,$){let J=j4($),H=B4(Q),Z=H?.querySelector(W4)??H?.firstElementChild;if(!H){console.warn("[ho-scroll] No sticky wrapper: put [data-ho-sticky] on the module root or add a first element child as the sticky container.");return}if(!Z){console.warn("[ho-scroll] No track: add [data-ho-track] inside the sticky wrapper, or make the wide row its first element child.");return}let q=0,K=1,G=[],U=null,W=parseFloat($.hoCThreshold??""),X=Number.isFinite(W)?M$(0.01,1,W):0.15,j=()=>{U?.disconnect(),U=null;for(let z of G)z.style.opacity="";if(G=Array.from(Z.querySelectorAll(X4)),G.length===0)return;for(let z of G)z.style.opacity="0";U=new IntersectionObserver((z)=>{for(let R of z){let F=R.target;F.style.opacity=R.isIntersecting?"1":"0"}},{root:H,threshold:X});for(let z of G)U.observe(z)},L=()=>{let z=Q.getBoundingClientRect().top+S0.scroll,R=S0.scroll-z,F=0;if(q>0){let V=J.start*K,Y=J.end*K,N=Math.max(0.000001,K-V-Y);F=M$(0,1,(R-V)/N)}if(q<=0){Z.style.transform="";return}Z.style.transform=`translate3d(${-F*q}px, 0, 0)`},B=()=>{q=Math.max(0,Z.scrollWidth-window.innerWidth);let z=H.offsetHeight;if(Q.style.minHeight=`${z+q}px`,K=Math.max(0.000001,Q.offsetHeight-H.offsetHeight),q>0&&K{M(),I(),U?.disconnect(),Q.style.minHeight="",Z.style.transform="";for(let z of G)z.style.opacity=""}}var kH={};r(kH,{default:()=>sK});function sK(Q,$){let J=Q.children[0].children[0],H=new L$(J,{type:"chars"}).chars,Z=0.018;H.forEach((q,K)=>{let G=q;G.style.transitionDelay=`${K*0.018}s`})}var xH={};r(xH,{default:()=>lK});var L4=0.12,I4=0.21;function lK(Q,$){let J=Q.querySelectorAll("a"),H=$.group,Z=H?Array.from(document.querySelectorAll(`[data-module="list"][data-group="${CSS.escape(H)}"]`)).indexOf(Q)*I4:0;n.set(J,{opacity:0,yPercent:100}),l1(Q,{autoStart:!0,callback:({isIn:q})=>{if(q)n.to(J,{opacity:1,yPercent:0,stagger:L4,delay:Z});else n.killTweensOf(J),n.set(J,{opacity:0,yPercent:100})}})}var wH={};r(wH,{default:()=>aK});var M4=Object.create,{getPrototypeOf:z4,defineProperty:iK,getOwnPropertyNames:Y4}=Object,N4=Object.prototype.hasOwnProperty,D4=(Q,$,J)=>{J=Q!=null?M4(z4(Q)):{};let H=$||!Q||!Q.__esModule?iK(J,"default",{value:Q,enumerable:!0}):J;for(let Z of Y4(Q))if(!N4.call(H,Z))iK(H,Z,{get:()=>Q[Z],enumerable:!0});return H},F4=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),V4=F4((Q,$)=>{(function(J,H){typeof Q=="object"&&typeof $!="undefined"?$.exports=H():typeof define=="function"&&define.amd?define(H):(J||self).virtualScroll=H()})(Q,function(){var J=0;function H(I){return"__private_"+J+++"_"+I}function Z(I,z){if(!Object.prototype.hasOwnProperty.call(I,z))throw new TypeError("attempted to use private field on non-instance");return I}function q(){}q.prototype={on:function(I,z,R){var F=this.e||(this.e={});return(F[I]||(F[I]=[])).push({fn:z,ctx:R}),this},once:function(I,z,R){var F=this;function V(){F.off(I,V),z.apply(R,arguments)}return V._=z,this.on(I,V,R)},emit:function(I){for(var z=[].slice.call(arguments,1),R=((this.e||(this.e={}))[I]||[]).slice(),F=0,V=R.length;F1,hasPointer:!!window.navigator.msPointerEnabled,hasKeyDown:"onkeydown"in document,isFirefox:navigator.userAgent.indexOf("Firefox")>-1}),Z(this,W)[W]=Object.assign({mouseMultiplier:1,touchMultiplier:2,firefoxMultiplier:15,keyStep:120,preventTouch:!1,unpreventTouchClass:"vs-touchmove-allowed",useKeyboard:!0,useTouch:!0},R),Z(this,j)[j]=new K,Z(this,L)[L]={y:0,x:0,deltaX:0,deltaY:0},Z(this,B)[B]={x:null,y:null},Z(this,M)[M]=null,Z(this,W)[W].passive!==void 0&&(this.listenerOptions={passive:Z(this,W)[W].passive})}var z=I.prototype;return z._notify=function(R){var F=Z(this,L)[L];F.x+=F.deltaX,F.y+=F.deltaY,Z(this,j)[j].emit(U,{x:F.x,y:F.y,deltaX:F.deltaX,deltaY:F.deltaY,originalEvent:R})},z._bind=function(){G.hasWheelEvent&&Z(this,X)[X].addEventListener("wheel",this._onWheel,this.listenerOptions),G.hasMouseWheelEvent&&Z(this,X)[X].addEventListener("mousewheel",this._onMouseWheel,this.listenerOptions),G.hasTouch&&Z(this,W)[W].useTouch&&(Z(this,X)[X].addEventListener("touchstart",this._onTouchStart,this.listenerOptions),Z(this,X)[X].addEventListener("touchmove",this._onTouchMove,this.listenerOptions)),G.hasPointer&&G.hasTouchWin&&(Z(this,M)[M]=document.body.style.msTouchAction,document.body.style.msTouchAction="none",Z(this,X)[X].addEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].addEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.addEventListener("keydown",this._onKeyDown)},z._unbind=function(){G.hasWheelEvent&&Z(this,X)[X].removeEventListener("wheel",this._onWheel),G.hasMouseWheelEvent&&Z(this,X)[X].removeEventListener("mousewheel",this._onMouseWheel),G.hasTouch&&(Z(this,X)[X].removeEventListener("touchstart",this._onTouchStart),Z(this,X)[X].removeEventListener("touchmove",this._onTouchMove)),G.hasPointer&&G.hasTouchWin&&(document.body.style.msTouchAction=Z(this,M)[M],Z(this,X)[X].removeEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].removeEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.removeEventListener("keydown",this._onKeyDown)},z.on=function(R,F){Z(this,j)[j].on(U,R,F);var V=Z(this,j)[j].e;V&&V[U]&&V[U].length===1&&this._bind()},z.off=function(R,F){Z(this,j)[j].off(U,R,F);var V=Z(this,j)[j].e;(!V[U]||V[U].length<=0)&&this._unbind()},z.destroy=function(){Z(this,j)[j].off(),this._unbind()},I}()})}),R4=D4(V4(),1);function nK(Q,$,J,H){let Z=1-Math.exp(-J*H);return Q+($-Q)*Z}function QQ(Q,$){let J=Q%$;if(Math.abs(J)>$/2)J=J>0?J-$:J+$;return J}var C4={infinite:!0,snap:!0,variableWidth:!1,vertical:!1,dragSensitivity:0.005,lerpFactor:0.3,scrollSensitivity:1,snapStrength:0.1,speedDecay:0.85,bounceLimit:1,virtualScroll:{mouseMultiplier:0.5,touchMultiplier:2,firefoxMultiplier:30,useKeyboard:!1,passive:!0},setOffset:({itemWidth:Q,wrapperWidth:$,itemHeight:J,wrapperHeight:H,vertical:Z})=>Z?J:Q,scrollInput:!1};class rK{speed=0;#$=0;#H=0;#Q=0;deltaTime=0;#J=!0;#Z=!1;#q=0;#j=0;config;wrapper;items;viewport;itemWidths=[];itemOffsets=[];itemHeights=[];itemHeightOffsets=[];isDragging=!1;isTouching=!1;dragStart=0;dragStartTarget=0;isVisible=!1;current=0;target=0;maxScroll=0;resizeTimeout;virtualScroll;observer;touchStartY;touchStartX;touchPreviousX;touchPreviousY;scrollDirection;parallaxValues;webglValue=0;onSlideChange;onResize;onUpdate;constructor(Q,$={}){if(this.config={...C4,...$},$.onSlideChange)this.onSlideChange=$.onSlideChange;if($.onResize)this.onResize=$.onResize;if($.onUpdate)this.onUpdate=$.onUpdate;if(delete this.config.onSlideChange,delete this.config.onResize,delete this.config.onUpdate,this.wrapper=Q,this.items=[...Q.children],this.current=0,this.target=0,this.isDragging=!1,this.isTouching=!1,this.dragStart=0,this.dragStartTarget=0,this.isVisible=!1,this.#q=0,this.#j=0,this.#B(),this.#D(),this.#F(),this.wrapper.style.cursor="grab",this.#B(),this.#V(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.#K(0);this.target=J,this.current=J,this.#N()}}#D(){let Q={root:null,rootMargin:"50px",threshold:0};this.observer=new IntersectionObserver(($)=>{$.forEach((J)=>{this.isVisible=J.isIntersecting})},Q),this.observer.observe(this.wrapper)}#B(){let Q=this.items.map((U)=>U.getBoundingClientRect().width),$=this.items.map((U)=>U.getBoundingClientRect().height),J=this.wrapper.clientWidth,H=this.wrapper.clientHeight,Z=Q.reduce((U,W)=>U+W,0),q=$.reduce((U,W)=>U+W,0),K=0;this.itemOffsets=Q.map((U)=>{let W=K;return K+=U,W}),this.itemWidths=Q;let G=0;if(this.itemHeightOffsets=$.map((U)=>{let W=G;return G+=U,W}),this.itemHeights=$,this.viewport={itemWidth:Q[0]??0,wrapperWidth:J,totalWidth:Z,itemHeight:$[0]??0,wrapperHeight:H,totalHeight:q,vertical:this.config.vertical},this.#H=this.config.setOffset(this.viewport),this.config.variableWidth)if(this.config.vertical)this.maxScroll=-(this.viewport.totalHeight-this.#H);else this.maxScroll=-(this.viewport.totalWidth-this.#H);else{let U=this.config.vertical?this.viewport.itemHeight||1:this.viewport.itemWidth||1,W=this.config.vertical?this.viewport.totalHeight:this.viewport.totalWidth;this.maxScroll=-(W-this.#H)/U}queueMicrotask(()=>{this.onResize?.(this)})}#F(){let Q=(G)=>this.#G(G),$=(G)=>this.#U(G),J=()=>this.#W();this.wrapper.addEventListener("mousedown",Q),window.addEventListener("mousemove",$),window.addEventListener("mouseup",J);let H=5,Z=(G)=>{let U=G.touches[0];this.touchStartY=U.clientY,this.touchStartX=U.clientX,this.touchPreviousX=U.clientX,this.touchPreviousY=U.clientY,this.scrollDirection=void 0,this.isTouching=!0,this.#G(U)},q=(G)=>{if(!this.isTouching||this.#Z)return;let U=G.touches[0],W=Math.abs(U.clientY-this.touchStartY),X=Math.abs(U.clientX-this.touchStartX);if(!this.scrollDirection&&(X>H||W>H))this.scrollDirection=X>W?"horizontal":"vertical";if(this.config.vertical?this.scrollDirection==="vertical":this.scrollDirection==="horizontal")if(G.preventDefault(),this.#U(U),this.config.vertical)this.touchPreviousY=U.clientY;else this.touchPreviousX=U.clientX},K=()=>{this.isTouching=!1,this.scrollDirection=void 0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.#W()};this.wrapper.addEventListener("touchstart",Z),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",K),new ResizeObserver(()=>{if(this.resizeTimeout)clearTimeout(this.resizeTimeout);this.resizeTimeout=setTimeout(()=>this.resize(),10)}).observe(this.wrapper)}#M(Q){if(!this.config.infinite){let $=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,J=this.config.variableWidth&&$?this.config.bounceLimit*$:this.config.bounceLimit;if(Q>J)return J;else if(Q{if(!this.isDragging&&!this.#Z){if($.touchDevice){let K=Math.abs($.deltaY),G=Math.abs($.deltaX);if(KK)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!0,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); +`}},onInitError:(j)=>{console.warn("Failed to initialize mini WebGL runtime:",j)}}),Z=C9({easing:p.scene.mouseEasing}),q=iJ({element:Q,eventElement:window}),K=Z4(q,s8),G=S$.add(()=>{let j=s8();K.setEffectUni("background-flip-wipe",{value1:j}),K.setEffectUni("ascii-trail-mix",{value1:j})}),U=0,W=S0.add((j)=>{if(typeof j?.velocity==="number"){U=j.velocity;return}U=0}),X=nJ(H,{placement:p.scene.icon.placement,mouse:Z,getScale:rJ,getBackgroundFlipProgress:s8,getScrollVelocity:()=>U,scrollVelocityToYOffset:p.scene.icon.scrollVelocityToYOffset,scrollVelocityToXRotation:p.scene.icon.scrollVelocityToXRotation,scrollVelocityToYRotation:p.scene.icon.scrollVelocityToYRotation,scrollFlipVelocityThreshold:p.scene.icon.scrollFlipVelocityThreshold,scrollFlipDuration:p.scene.icon.scrollFlipDuration,scrollYOffsetDamping:p.scene.icon.scrollYOffsetDamping,scrollYOffsetRecenter:p.scene.icon.scrollBounceBack,scrollYOffsetEase:p.scene.icon.scrollYOffsetEase,idleFloatYOffsetAmplitude:p.scene.icon.idleFloatYOffsetAmplitude,idleFloatYOffsetSpeed:p.scene.icon.idleFloatYOffsetSpeed,idleFloatRotationAmplitude:p.scene.icon.idleFloatRotationAmplitude,idleFloatRotationSpeed:p.scene.icon.idleFloatRotationSpeed,log:p.scene.icon.log});return()=>{X(),G(),W(),K.destroy(),q.destroy(),Z.destroy(),H.destroy()}}var AH={};r(AH,{default:()=>dK});var vK="h1, h2, h3, h4",uK={opacity:0,xPercent:20,yPercent:20},q4="blur(6px)",mK={opacity:0,yPercent:12},E9={stagger:0.2,delay:0.1,paragraphDelay:0.05,paragraphWordStagger:0.04,groupStagger:0.18};function $Q(Q){return Q.filter(($)=>!!$&&$.isConnected)}function O9(Q,$){let J=$Q(Q);if(!J.length)return;n.set(J,$)}function K4(Q,$){let J=$Q(Q);if(!J.length)return;n.to(J,$)}function G4(Q){let $=$Q(Q);if(!$.length)return;n.killTweensOf($)}function U4(Q){let $=Q.parentElement,J=document.createElement("div");J.style.position="relative",J.style.display=Q.style.display||"block",$.insertBefore(J,Q),J.appendChild(Q),Q.style.opacity="0";let H=Q.cloneNode(!0);return H.setAttribute("aria-hidden","true"),H.style.opacity="1",H.style.position="absolute",H.style.top="0",H.style.left="0",H.style.width="100%",H.style.height="100%",H.style.pointerEvents="none",H.style.overflow="visible",H.style.zIndex="1",J.appendChild(H),new L$(H,{type:"words"}).words}function dK(Q,$){let J=$.group,H=J?Array.from(document.querySelectorAll(`[data-module="hg"][data-group="${CSS.escape(J)}"]`)).indexOf(Q):0,Z=Q.querySelector(`:scope > ${vK}`),q=Array.from(Q.querySelectorAll(`:scope > p, :scope > div:not(:has(${vK})):not(:has(a, button, [data-module="btn"]))`)).filter((X)=>!X.closest("a, button, [data-module='btn']")),K=Z?Array.from(Z.querySelectorAll("span")):[],G=K.length>0?K:Z?[Z]:[],U=[];if(q.length)U=q.flatMap(U4),O9(U,mK);if(!(G.length>0||U.length>0))return;O9(G,uK),O9([Q],{opacity:1}),l1(Q,{autoStart:!0,once:!1,callback:({isIn:X,direction:j})=>{if(X){if(Zq){O9([Q],{opacity:1}),O9(q,{opacity:1});return}let L=j===-1,B=J==="hero"&&!Q._hgAnimated,M=H*(B?E9.groupStagger*3:E9.groupStagger),I=E9.delay+M,z=E9.delay+E9.paragraphDelay+M;if(G.length){let R=$Q(G);if(R.length)n.fromTo(R,{filter:q4},{opacity:1,filter:"blur(0px)",xPercent:0,yPercent:0,stagger:{each:E9.stagger,from:L?"end":"start"},delay:I,onComplete:()=>{n.set(R,{clearProps:"filter"})}})}if(U.length)K4(U,{opacity:1,yPercent:0,stagger:{each:E9.paragraphWordStagger,from:L?"end":"start"},delay:z,ease:"expo.out"});if(B)Q._hgAnimated=!0}else G4([...G,...U]),O9(G,{...uK,clearProps:"filter"}),O9(U,mK)}})}var PH={};r(PH,{default:()=>oK});var gK="[data-ho-sticky]",W4="[data-ho-track]",X4=".ho-c",cK=0;function pK(Q,$){if(Q==null||Q==="")return $;let J=parseFloat(Q);if(!Number.isFinite(J))return $;return M$(0,0.45,J)}function j4(Q){let $=cK,J=cK,H=Q.hoBuffer?.split(",").map((Z)=>parseFloat(Z.trim()));if(H&&H.length>=2&&Number.isFinite(H[0])&&Number.isFinite(H[1]))$=M$(0,0.45,H[0]),J=M$(0,0.45,H[1]);if($=pK(Q.hoBufferStart,$),J=pK(Q.hoBufferEnd,J),$+J>=1){let Z=0.98/($+J);return{start:$*Z,end:J*Z}}return{start:$,end:J}}function B4(Q){if(Q.matches(gK))return Q;return Q.querySelector(gK)??Q.firstElementChild}function oK(Q,$){let J=j4($),H=B4(Q),Z=H?.querySelector(W4)??H?.firstElementChild;if(!H){console.warn("[ho-scroll] No sticky wrapper: put [data-ho-sticky] on the module root or add a first element child as the sticky container.");return}if(!Z){console.warn("[ho-scroll] No track: add [data-ho-track] inside the sticky wrapper, or make the wide row its first element child.");return}let q=0,K=1,G=[],U=null,W=parseFloat($.hoCThreshold??""),X=Number.isFinite(W)?M$(0.01,1,W):0.15,j=()=>{U?.disconnect(),U=null;for(let z of G)z.style.opacity="";if(G=Array.from(Z.querySelectorAll(X4)),G.length===0)return;for(let z of G)z.style.opacity="0";U=new IntersectionObserver((z)=>{for(let R of z){let F=R.target;F.style.opacity=R.isIntersecting?"1":"0"}},{root:H,threshold:X});for(let z of G)U.observe(z)},L=()=>{let z=Q.getBoundingClientRect().top+S0.scroll,R=S0.scroll-z,F=0;if(q>0){let V=J.start*K,Y=J.end*K,N=Math.max(0.000001,K-V-Y);F=M$(0,1,(R-V)/N)}if(q<=0){Z.style.transform="";return}Z.style.transform=`translate3d(${-F*q}px, 0, 0)`},B=()=>{q=Math.max(0,Z.scrollWidth-window.innerWidth);let z=H.offsetHeight;if(Q.style.minHeight=`${z+q}px`,K=Math.max(0.000001,Q.offsetHeight-H.offsetHeight),q>0&&K{M(),I(),U?.disconnect(),Q.style.minHeight="",Z.style.transform="";for(let z of G)z.style.opacity=""}}var kH={};r(kH,{default:()=>sK});function sK(Q,$){let J=Q.children[0].children[0],H=new L$(J,{type:"chars"}).chars,Z=0.018;H.forEach((q,K)=>{let G=q;G.style.transitionDelay=`${K*0.018}s`})}var xH={};r(xH,{default:()=>lK});var L4=0.12,I4=0.21;function lK(Q,$){let J=Q.querySelectorAll("a"),H=$.group,Z=H?Array.from(document.querySelectorAll(`[data-module="list"][data-group="${CSS.escape(H)}"]`)).indexOf(Q)*I4:0;n.set(J,{opacity:0,yPercent:100}),l1(Q,{autoStart:!0,callback:({isIn:q})=>{if(q)n.to(J,{opacity:1,yPercent:0,stagger:L4,delay:Z});else n.killTweensOf(J),n.set(J,{opacity:0,yPercent:100})}})}var wH={};r(wH,{default:()=>aK});var M4=Object.create,{getPrototypeOf:z4,defineProperty:iK,getOwnPropertyNames:Y4}=Object,N4=Object.prototype.hasOwnProperty,D4=(Q,$,J)=>{J=Q!=null?M4(z4(Q)):{};let H=$||!Q||!Q.__esModule?iK(J,"default",{value:Q,enumerable:!0}):J;for(let Z of Y4(Q))if(!N4.call(H,Z))iK(H,Z,{get:()=>Q[Z],enumerable:!0});return H},F4=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),V4=F4((Q,$)=>{(function(J,H){typeof Q=="object"&&typeof $!="undefined"?$.exports=H():typeof define=="function"&&define.amd?define(H):(J||self).virtualScroll=H()})(Q,function(){var J=0;function H(I){return"__private_"+J+++"_"+I}function Z(I,z){if(!Object.prototype.hasOwnProperty.call(I,z))throw new TypeError("attempted to use private field on non-instance");return I}function q(){}q.prototype={on:function(I,z,R){var F=this.e||(this.e={});return(F[I]||(F[I]=[])).push({fn:z,ctx:R}),this},once:function(I,z,R){var F=this;function V(){F.off(I,V),z.apply(R,arguments)}return V._=z,this.on(I,V,R)},emit:function(I){for(var z=[].slice.call(arguments,1),R=((this.e||(this.e={}))[I]||[]).slice(),F=0,V=R.length;F1,hasPointer:!!window.navigator.msPointerEnabled,hasKeyDown:"onkeydown"in document,isFirefox:navigator.userAgent.indexOf("Firefox")>-1}),Z(this,W)[W]=Object.assign({mouseMultiplier:1,touchMultiplier:2,firefoxMultiplier:15,keyStep:120,preventTouch:!1,unpreventTouchClass:"vs-touchmove-allowed",useKeyboard:!0,useTouch:!0},R),Z(this,j)[j]=new K,Z(this,L)[L]={y:0,x:0,deltaX:0,deltaY:0},Z(this,B)[B]={x:null,y:null},Z(this,M)[M]=null,Z(this,W)[W].passive!==void 0&&(this.listenerOptions={passive:Z(this,W)[W].passive})}var z=I.prototype;return z._notify=function(R){var F=Z(this,L)[L];F.x+=F.deltaX,F.y+=F.deltaY,Z(this,j)[j].emit(U,{x:F.x,y:F.y,deltaX:F.deltaX,deltaY:F.deltaY,originalEvent:R})},z._bind=function(){G.hasWheelEvent&&Z(this,X)[X].addEventListener("wheel",this._onWheel,this.listenerOptions),G.hasMouseWheelEvent&&Z(this,X)[X].addEventListener("mousewheel",this._onMouseWheel,this.listenerOptions),G.hasTouch&&Z(this,W)[W].useTouch&&(Z(this,X)[X].addEventListener("touchstart",this._onTouchStart,this.listenerOptions),Z(this,X)[X].addEventListener("touchmove",this._onTouchMove,this.listenerOptions)),G.hasPointer&&G.hasTouchWin&&(Z(this,M)[M]=document.body.style.msTouchAction,document.body.style.msTouchAction="none",Z(this,X)[X].addEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].addEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.addEventListener("keydown",this._onKeyDown)},z._unbind=function(){G.hasWheelEvent&&Z(this,X)[X].removeEventListener("wheel",this._onWheel),G.hasMouseWheelEvent&&Z(this,X)[X].removeEventListener("mousewheel",this._onMouseWheel),G.hasTouch&&(Z(this,X)[X].removeEventListener("touchstart",this._onTouchStart),Z(this,X)[X].removeEventListener("touchmove",this._onTouchMove)),G.hasPointer&&G.hasTouchWin&&(document.body.style.msTouchAction=Z(this,M)[M],Z(this,X)[X].removeEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].removeEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.removeEventListener("keydown",this._onKeyDown)},z.on=function(R,F){Z(this,j)[j].on(U,R,F);var V=Z(this,j)[j].e;V&&V[U]&&V[U].length===1&&this._bind()},z.off=function(R,F){Z(this,j)[j].off(U,R,F);var V=Z(this,j)[j].e;(!V[U]||V[U].length<=0)&&this._unbind()},z.destroy=function(){Z(this,j)[j].off(),this._unbind()},I}()})}),R4=D4(V4(),1);function nK(Q,$,J,H){let Z=1-Math.exp(-J*H);return Q+($-Q)*Z}function QQ(Q,$){let J=Q%$;if(Math.abs(J)>$/2)J=J>0?J-$:J+$;return J}var C4={infinite:!0,snap:!0,variableWidth:!1,vertical:!1,dragSensitivity:0.005,lerpFactor:0.3,scrollSensitivity:1,snapStrength:0.1,speedDecay:0.85,bounceLimit:1,virtualScroll:{mouseMultiplier:0.5,touchMultiplier:2,firefoxMultiplier:30,useKeyboard:!1,passive:!0},setOffset:({itemWidth:Q,wrapperWidth:$,itemHeight:J,wrapperHeight:H,vertical:Z})=>Z?J:Q,scrollInput:!1};class rK{speed=0;#$=0;#H=0;#Q=0;deltaTime=0;#J=!0;#Z=!1;#q=0;#j=0;config;wrapper;items;viewport;itemWidths=[];itemOffsets=[];itemHeights=[];itemHeightOffsets=[];isDragging=!1;isTouching=!1;dragStart=0;dragStartTarget=0;isVisible=!1;current=0;target=0;maxScroll=0;resizeTimeout;virtualScroll;observer;touchStartY;touchStartX;touchPreviousX;touchPreviousY;scrollDirection;parallaxValues;webglValue=0;onSlideChange;onResize;onUpdate;constructor(Q,$={}){if(this.config={...C4,...$},$.onSlideChange)this.onSlideChange=$.onSlideChange;if($.onResize)this.onResize=$.onResize;if($.onUpdate)this.onUpdate=$.onUpdate;if(delete this.config.onSlideChange,delete this.config.onResize,delete this.config.onUpdate,this.wrapper=Q,this.items=[...Q.children],this.current=0,this.target=0,this.isDragging=!1,this.isTouching=!1,this.dragStart=0,this.dragStartTarget=0,this.isVisible=!1,this.#q=0,this.#j=0,this.#B(),this.#D(),this.#F(),this.wrapper.style.cursor="grab",this.#B(),this.#V(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.#K(0);this.target=J,this.current=J,this.#N()}}#D(){let Q={root:null,rootMargin:"50px",threshold:0};this.observer=new IntersectionObserver(($)=>{$.forEach((J)=>{this.isVisible=J.isIntersecting})},Q),this.observer.observe(this.wrapper)}#B(){let Q=this.items.map((U)=>U.getBoundingClientRect().width),$=this.items.map((U)=>U.getBoundingClientRect().height),J=this.wrapper.clientWidth,H=this.wrapper.clientHeight,Z=Q.reduce((U,W)=>U+W,0),q=$.reduce((U,W)=>U+W,0),K=0;this.itemOffsets=Q.map((U)=>{let W=K;return K+=U,W}),this.itemWidths=Q;let G=0;if(this.itemHeightOffsets=$.map((U)=>{let W=G;return G+=U,W}),this.itemHeights=$,this.viewport={itemWidth:Q[0]??0,wrapperWidth:J,totalWidth:Z,itemHeight:$[0]??0,wrapperHeight:H,totalHeight:q,vertical:this.config.vertical},this.#H=this.config.setOffset(this.viewport),this.config.variableWidth)if(this.config.vertical)this.maxScroll=-(this.viewport.totalHeight-this.#H);else this.maxScroll=-(this.viewport.totalWidth-this.#H);else{let U=this.config.vertical?this.viewport.itemHeight||1:this.viewport.itemWidth||1,W=this.config.vertical?this.viewport.totalHeight:this.viewport.totalWidth;this.maxScroll=-(W-this.#H)/U}queueMicrotask(()=>{this.onResize?.(this)})}#F(){let Q=(G)=>this.#G(G),$=(G)=>this.#U(G),J=()=>this.#W();this.wrapper.addEventListener("mousedown",Q),window.addEventListener("mousemove",$),window.addEventListener("mouseup",J);let H=5,Z=(G)=>{let U=G.touches[0];this.touchStartY=U.clientY,this.touchStartX=U.clientX,this.touchPreviousX=U.clientX,this.touchPreviousY=U.clientY,this.scrollDirection=void 0,this.isTouching=!0,this.#G(U)},q=(G)=>{if(!this.isTouching||this.#Z)return;let U=G.touches[0],W=Math.abs(U.clientY-this.touchStartY),X=Math.abs(U.clientX-this.touchStartX);if(!this.scrollDirection&&(X>H||W>H))this.scrollDirection=X>W?"horizontal":"vertical";if(this.config.vertical?this.scrollDirection==="vertical":this.scrollDirection==="horizontal")if(G.preventDefault(),this.#U(U),this.config.vertical)this.touchPreviousY=U.clientY;else this.touchPreviousX=U.clientX},K=()=>{this.isTouching=!1,this.scrollDirection=void 0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.#W()};this.wrapper.addEventListener("touchstart",Z),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",K),new ResizeObserver(()=>{if(this.resizeTimeout)clearTimeout(this.resizeTimeout);this.resizeTimeout=setTimeout(()=>this.resize(),10)}).observe(this.wrapper)}#M(Q){if(!this.config.infinite){let $=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,J=this.config.variableWidth&&$?this.config.bounceLimit*$:this.config.bounceLimit;if(Q>J)return J;else if(Q{if(!this.isDragging&&!this.#Z){if($.touchDevice){let K=Math.abs($.deltaY),G=Math.abs($.deltaX);if(KK)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!1,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); //# debugId=A656B71830305AD464756E2164756E21 diff --git a/assets/custom/js/interaction-overrides.js b/assets/custom/js/interaction-overrides.js index 72cc046..857403b 100644 --- a/assets/custom/js/interaction-overrides.js +++ b/assets/custom/js/interaction-overrides.js @@ -10,6 +10,8 @@ const DEFAULT_SCROLL_SPEED = 0.55; const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound"; const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound"; + const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound"; + const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound"; const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]); const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]); @@ -226,11 +228,62 @@ } function bindInteractiveScroll() { - bindGlobalSliderWheel(); - document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel); document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel); } + function bindOrderedSlider(surface) { + if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return; + + const slider = surface.__nodedcSlider; + if (!slider) return; + + surface[ORDERED_SLIDER_BOUND_FLAG] = true; + const items = Array.from(surface.children); + const startOffset = items.length > 1 ? -1 : 0; + + slider.config.infinite = true; + slider.target = startOffset; + slider.current = startOffset; + slider.speed = 0; + + items.forEach((item) => { + item.classList.remove("current"); + }); + + slider.resize?.(); + slider.update?.(); + } + + function bindOrderedSliders() { + document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider); + } + + function bindDockLink(link) { + if (!link || link[DOCK_LINK_BOUND_FLAG]) return; + + link[DOCK_LINK_BOUND_FLAG] = true; + link.addEventListener( + "click", + (event) => { + const href = String(link.getAttribute("href") || "").trim(); + const targetId = String(link.dataset.target || "").trim(); + const hasAppTarget = Boolean(targetId && document.getElementById(targetId)); + const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:"); + + if (!hasAppTarget && !isInertHref) return; + + event.preventDefault(); + window.requestAnimationFrame(() => link.blur()); + if (!hasAppTarget) event.stopPropagation(); + }, + { capture: true }, + ); + } + + function bindDockLinks() { + document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink); + } + function mediaExtension(src) { const cleanSrc = String(src || "").split(/[?#]/)[0]; const match = /\.([a-z0-9]+)$/i.exec(cleanSrc); @@ -313,6 +366,8 @@ () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, { once: true }, @@ -320,16 +375,22 @@ } else { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); } window.addEventListener("load", () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); window.setTimeout(() => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, 500); }); diff --git a/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg new file mode 100644 index 0000000..4c283bb Binary files /dev/null and b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg differ diff --git a/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png differ diff --git a/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png differ diff --git a/content/block-templates/home.json b/content/block-templates/home.json index d7e502f..5d12cd0 100644 --- a/content/block-templates/home.json +++ b/content/block-templates/home.json @@ -361,6 +361,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач." } }, "editableFields": [ @@ -377,24 +384,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -772,44 +800,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1030,30 +1074,99 @@ "enabled": true } }, + { + "key": "cViz:centralTextBlock:central-text-block.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Центральный текстовый блок", + "description": "central-text-block.html", + "block": { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + } + }, { "key": "cViz:pricingTable:pricing-table.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Тарифы: интро и таблица", + "title": "Тарифы: таблица", "description": "pricing-table.html", "block": { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -1344,110 +1457,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -1626,13 +1638,91 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": true + } + }, + { + "key": "cViz:screenshotCards:screenshot-cards.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Карточки скриншотов", + "description": "screenshot-cards.html", + "block": { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -1691,103 +1781,25 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true - } - }, - { - "key": "cViz:pricingIntro:pricing-intro.html", - "regionId": "cViz", - "regionLabel": "Секции", - "title": "Интро тарифов (устаревший дубль)", - "description": "pricing-intro.html", - "block": { - "region": "cViz", - "id": "pricing-intro", - "type": "pricingIntro", - "template": "pricing-intro.html", - "adminLabel": "Интро тарифов (устаревший дубль)", - "anchor": "waitlist", - "enabled": false, - "content": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." - }, - "editableFields": [ - { - "path": "content.eyebrow", - "label": "Надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.middle", - "label": "Заголовок: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.main", - "label": "Заголовок: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.introHtml", - "label": "Вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.tokenBillingHtml", - "label": "Оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.founderLimitHtml", - "label": "Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - } ] } }, { - "key": "cViz:waitlistFiles:waitlist-files.html", + "key": "cViz:waitlistFiles:request-demo-txt-files.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Форма ожидания и txt-файлы", - "description": "waitlist-files.html", + "title": "Запрос DEMO и TXT-файлы", + "description": "request-demo-txt-files.html", "block": { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -1799,249 +1811,336 @@ "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { @@ -2053,128 +2152,29 @@ "release": "Бета-релиз: июль 2026", "heading": "Ранний доступ", "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -2187,22 +2187,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -2300,27 +2304,32 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", @@ -2328,25 +2337,30 @@ { "label": "Twitter", "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Instagram", "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": true } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -2397,7 +2411,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -2421,7 +2435,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -2436,7 +2451,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -2460,15 +2475,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/content/pages/home.json b/content/pages/home.json index 18c9d52..4b57122 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -19,7 +19,7 @@ "target": "" }, { - "label": "Лист ожидания", + "label": "Запрос инвайта", "href": "index.html#hero", "target": "" }, @@ -62,7 +62,7 @@ { "enabled": true, "title": "NODE.DC", - "href": "#hero", + "href": "https://id.nodedc.ru/", "linkTarget": "", "targetId": "app-data", "iconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", @@ -74,7 +74,7 @@ { "enabled": true, "title": "Корзина", - "href": "", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -87,7 +87,7 @@ }, "assets": { "webglModelSrc": "./assets/custom/icon.glb", - "logoPng": "./assets/custom/logo.png", + "logoPng": "./assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg", "logoPngAlt": "Логотип NODE.DC", "appIconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", "appIconAlt": "Иконка NODE.DC", @@ -204,7 +204,7 @@ "itemTemplate": { "enabled": true, "title": "Новое приложение", - "href": "#hero", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -345,7 +345,7 @@ "id": "hero-waitlist", "type": "heroWaitlist", "template": "theses-request-demo.html", - "adminLabel": "ТЕЗИСЫ + ЗАПРОС ДЕМО", + "adminLabel": "ТЕЗИСЫ + ЗАПРОС DEMO", "anchor": "hero", "content": { "heading": { @@ -664,6 +664,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Hub, ", + "main": "Engine, Ops." + }, + "introHtml": "Единая логика доступа, разработки и управления процессами внутри enterprise-контура. " } }, "editableFields": [ @@ -680,24 +687,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -906,11 +934,11 @@ }, "bottomInfo": { "heading": { - "muted": "Hub.", - "middle": " Контур", + "muted": "Единый", + "middle": " контур", "main": "доступа." }, - "introHtml": "Централизованный запуск приложений, управление ролями, группами и доступом к каждому рабочему модулю." + "introHtml": "Администрирование\nНазначение ролей и управление пользователями по группам и подразделениям.\nEnterprise-контуры\nкоманд.\nРаздельные конфигурации доступа для инженерных, финансовых, юридических и закупочных\nТонкая настройка\nИндивидуальные права на отдельные приложения, функции и рабочие области." } }, "editableFields": [ @@ -1189,11 +1217,11 @@ }, "bottomInfo": { "heading": { - "muted": "Engine. ", - "middle": "Workflow ", - "main": "и агенты." + "muted": "От задачи ", + "middle": "к рабочему ", + "main": "сценарию." }, - "introHtml": "Workflow можно собрать вручную или через ассистента: от текстового задания до готовой нодовой схемы и подключенного интерфейса." + "introHtml": "Нодовый редактор\nВизуальная разработка процессов, связей и переходов между узлами.\nКомпонентная библиотека\nГотовые узлы для API, данных, логики, обработки, визуализации и внешних систем.\nПередача в Ops\nРезультаты процессов, отчеты, статусы и интерфейсы переходят в операционный слой." } }, "editableFields": [ @@ -1473,11 +1501,11 @@ }, "bottomInfo": { "heading": { - "muted": "OPS", - "middle": "Контроль ", - "main": "процессов." + "muted": "Единый ", + "middle": "операционный ", + "main": "контур." }, - "introHtml": "Операционная среда для работы людей, агентов и прикладных контуров в рамках проектов, подразделений и процессов." + "introHtml": "Люди и агенты\nПостановка задач, декомпозиция, отчеты, согласования и контроль исполнения.\nКонтекст предприятия\nПроцессы, кодовая база, модели, документы и сервисные сценарии связаны с задачами.\nУправление действиями\nАссистент может готовить материалы, инициировать изменения и передавать действия между\nслоями при наличии прав." } }, "editableFields": [ @@ -1614,11 +1642,11 @@ }, "bottomInfo": { "heading": { - "muted": "Модули. ", - "middle": "Прикладной ", - "main": "контур." + "muted": "От функции", + "middle": " к рабочему ", + "main": "приложению." }, - "introHtml": "Прикладные модули закрывают функции подразделений: 1C, закупки, тендеры, юридический контур, цифровые двойники, инженерные модели и интеграции." + "introHtml": "Каждый модуль подключается к ролям, задачам, данным и сквозному ассистенту платформы. " } }, "editableFields": [ @@ -1719,79 +1747,6 @@ "enabled": true, "scopeIds": true }, - { - "region": "cViz", - "id": "publish-cta", - "type": "publishCta", - "template": "publish-cta.html", - "adminLabel": "Финальный CTA перед тарифами", - "anchor": "hero", - "content": { - "cta": { - "heading": { - "muted": "Подключить.", - "middle": "Поставить задачу.", - "main": "Опубликовать." - }, - "intro": "Единый путь от разработки до продакшена.", - "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", - "href": "index.html#hero", - "buttonLabel": "Встать в лист ожидания" - } - }, - "editableFields": [ - { - "path": "content.cta.heading.muted", - "label": "CTA: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.middle", - "label": "CTA: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.main", - "label": "CTA: основная строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.intro", - "label": "CTA: вводный текст", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.detailHtml", - "label": "CTA: пояснение", - "kind": "html", - "renderAs": "html", - "group": "CTA" - }, - { - "path": "content.cta.href", - "label": "CTA: ссылка", - "kind": "url", - "renderAs": "attr", - "group": "CTA" - }, - { - "path": "content.cta.buttonLabel", - "label": "CTA: кнопка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - } - ], - "enabled": true - }, { "region": "cViz", "id": "faq", @@ -1811,44 +1766,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1988,24 +1959,159 @@ ], "enabled": true }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Собрать контур. ", + "main": "Запустить." + }, + "intro": "Единый путь от доступа к модулю до рабочего контура предприятия. Hub для входа, Engine для сборки, Ops для управления.", + "detailHtml": "Модульный доступ, документация и рабочие пространства.\nПодключение прикладных модулей и ролей по контурам.\nЗакрытый инвайт для пилотных внедрений.", + "href": "index.html#hero", + "buttonLabel": "Запросить инвайт " + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + }, { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -2296,110 +2402,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -2578,13 +2583,84 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": false + }, + { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -2643,18 +2719,18 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true + ] }, { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -2662,386 +2738,374 @@ "messagePlaceholder": "Сообщение (необязательно)", "namePlaceholder": "Ваше имя*", "emailPlaceholder": "Email для регистрации*", - "submitLabel": "Встать в лист ожидания", + "submitLabel": "Подать заявку", "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", - "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "betaCtaLabel": "Подать заявку?", + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { "enabled": true, - "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconSrc": "./assets/uploads/images/hero-waitlist/dclogo_white_alpha-mquue8ar.png", "iconAlt": "Иконка NODE.DC", "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", "wordmarkAlt": "Логотип NODE.DC", - "release": "Бета-релиз: июль 2026", - "heading": "Ранний доступ", - "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + "release": "Selfhost платформа ", + "heading": "Запросить DEMO", + "description": "NODE.DC - платформа для задач, процессов, данных, агентов и инженерных модулей." + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -3054,22 +3118,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -3153,53 +3221,63 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", "contactLinks": [ { - "label": "Twitter", - "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "label": "DCTOUCH", + "href": "https://www.dctouch.ru/", + "target": "_blank", + "enabled": true }, { - "label": "Instagram", - "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "label": "Telegram", + "href": "https://t.me/dcconstructions", + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": false }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": false } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -3250,7 +3328,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -3274,7 +3352,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -3289,7 +3368,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -3313,15 +3392,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/index.html b/index.html index 662a16f..780c240 100644 --- a/index.html +++ b/index.html @@ -67,11 +67,11 @@ - +
K)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!0,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); +`}},onInitError:(j)=>{console.warn("Failed to initialize mini WebGL runtime:",j)}}),Z=C9({easing:p.scene.mouseEasing}),q=iJ({element:Q,eventElement:window}),K=Z4(q,s8),G=S$.add(()=>{let j=s8();K.setEffectUni("background-flip-wipe",{value1:j}),K.setEffectUni("ascii-trail-mix",{value1:j})}),U=0,W=S0.add((j)=>{if(typeof j?.velocity==="number"){U=j.velocity;return}U=0}),X=nJ(H,{placement:p.scene.icon.placement,mouse:Z,getScale:rJ,getBackgroundFlipProgress:s8,getScrollVelocity:()=>U,scrollVelocityToYOffset:p.scene.icon.scrollVelocityToYOffset,scrollVelocityToXRotation:p.scene.icon.scrollVelocityToXRotation,scrollVelocityToYRotation:p.scene.icon.scrollVelocityToYRotation,scrollFlipVelocityThreshold:p.scene.icon.scrollFlipVelocityThreshold,scrollFlipDuration:p.scene.icon.scrollFlipDuration,scrollYOffsetDamping:p.scene.icon.scrollYOffsetDamping,scrollYOffsetRecenter:p.scene.icon.scrollBounceBack,scrollYOffsetEase:p.scene.icon.scrollYOffsetEase,idleFloatYOffsetAmplitude:p.scene.icon.idleFloatYOffsetAmplitude,idleFloatYOffsetSpeed:p.scene.icon.idleFloatYOffsetSpeed,idleFloatRotationAmplitude:p.scene.icon.idleFloatRotationAmplitude,idleFloatRotationSpeed:p.scene.icon.idleFloatRotationSpeed,log:p.scene.icon.log});return()=>{X(),G(),W(),K.destroy(),q.destroy(),Z.destroy(),H.destroy()}}var AH={};r(AH,{default:()=>dK});var vK="h1, h2, h3, h4",uK={opacity:0,xPercent:20,yPercent:20},q4="blur(6px)",mK={opacity:0,yPercent:12},E9={stagger:0.2,delay:0.1,paragraphDelay:0.05,paragraphWordStagger:0.04,groupStagger:0.18};function $Q(Q){return Q.filter(($)=>!!$&&$.isConnected)}function O9(Q,$){let J=$Q(Q);if(!J.length)return;n.set(J,$)}function K4(Q,$){let J=$Q(Q);if(!J.length)return;n.to(J,$)}function G4(Q){let $=$Q(Q);if(!$.length)return;n.killTweensOf($)}function U4(Q){let $=Q.parentElement,J=document.createElement("div");J.style.position="relative",J.style.display=Q.style.display||"block",$.insertBefore(J,Q),J.appendChild(Q),Q.style.opacity="0";let H=Q.cloneNode(!0);return H.setAttribute("aria-hidden","true"),H.style.opacity="1",H.style.position="absolute",H.style.top="0",H.style.left="0",H.style.width="100%",H.style.height="100%",H.style.pointerEvents="none",H.style.overflow="visible",H.style.zIndex="1",J.appendChild(H),new L$(H,{type:"words"}).words}function dK(Q,$){let J=$.group,H=J?Array.from(document.querySelectorAll(`[data-module="hg"][data-group="${CSS.escape(J)}"]`)).indexOf(Q):0,Z=Q.querySelector(`:scope > ${vK}`),q=Array.from(Q.querySelectorAll(`:scope > p, :scope > div:not(:has(${vK})):not(:has(a, button, [data-module="btn"]))`)).filter((X)=>!X.closest("a, button, [data-module='btn']")),K=Z?Array.from(Z.querySelectorAll("span")):[],G=K.length>0?K:Z?[Z]:[],U=[];if(q.length)U=q.flatMap(U4),O9(U,mK);if(!(G.length>0||U.length>0))return;O9(G,uK),O9([Q],{opacity:1}),l1(Q,{autoStart:!0,once:!1,callback:({isIn:X,direction:j})=>{if(X){if(Zq){O9([Q],{opacity:1}),O9(q,{opacity:1});return}let L=j===-1,B=J==="hero"&&!Q._hgAnimated,M=H*(B?E9.groupStagger*3:E9.groupStagger),I=E9.delay+M,z=E9.delay+E9.paragraphDelay+M;if(G.length){let R=$Q(G);if(R.length)n.fromTo(R,{filter:q4},{opacity:1,filter:"blur(0px)",xPercent:0,yPercent:0,stagger:{each:E9.stagger,from:L?"end":"start"},delay:I,onComplete:()=>{n.set(R,{clearProps:"filter"})}})}if(U.length)K4(U,{opacity:1,yPercent:0,stagger:{each:E9.paragraphWordStagger,from:L?"end":"start"},delay:z,ease:"expo.out"});if(B)Q._hgAnimated=!0}else G4([...G,...U]),O9(G,{...uK,clearProps:"filter"}),O9(U,mK)}})}var PH={};r(PH,{default:()=>oK});var gK="[data-ho-sticky]",W4="[data-ho-track]",X4=".ho-c",cK=0;function pK(Q,$){if(Q==null||Q==="")return $;let J=parseFloat(Q);if(!Number.isFinite(J))return $;return M$(0,0.45,J)}function j4(Q){let $=cK,J=cK,H=Q.hoBuffer?.split(",").map((Z)=>parseFloat(Z.trim()));if(H&&H.length>=2&&Number.isFinite(H[0])&&Number.isFinite(H[1]))$=M$(0,0.45,H[0]),J=M$(0,0.45,H[1]);if($=pK(Q.hoBufferStart,$),J=pK(Q.hoBufferEnd,J),$+J>=1){let Z=0.98/($+J);return{start:$*Z,end:J*Z}}return{start:$,end:J}}function B4(Q){if(Q.matches(gK))return Q;return Q.querySelector(gK)??Q.firstElementChild}function oK(Q,$){let J=j4($),H=B4(Q),Z=H?.querySelector(W4)??H?.firstElementChild;if(!H){console.warn("[ho-scroll] No sticky wrapper: put [data-ho-sticky] on the module root or add a first element child as the sticky container.");return}if(!Z){console.warn("[ho-scroll] No track: add [data-ho-track] inside the sticky wrapper, or make the wide row its first element child.");return}let q=0,K=1,G=[],U=null,W=parseFloat($.hoCThreshold??""),X=Number.isFinite(W)?M$(0.01,1,W):0.15,j=()=>{U?.disconnect(),U=null;for(let z of G)z.style.opacity="";if(G=Array.from(Z.querySelectorAll(X4)),G.length===0)return;for(let z of G)z.style.opacity="0";U=new IntersectionObserver((z)=>{for(let R of z){let F=R.target;F.style.opacity=R.isIntersecting?"1":"0"}},{root:H,threshold:X});for(let z of G)U.observe(z)},L=()=>{let z=Q.getBoundingClientRect().top+S0.scroll,R=S0.scroll-z,F=0;if(q>0){let V=J.start*K,Y=J.end*K,N=Math.max(0.000001,K-V-Y);F=M$(0,1,(R-V)/N)}if(q<=0){Z.style.transform="";return}Z.style.transform=`translate3d(${-F*q}px, 0, 0)`},B=()=>{q=Math.max(0,Z.scrollWidth-window.innerWidth);let z=H.offsetHeight;if(Q.style.minHeight=`${z+q}px`,K=Math.max(0.000001,Q.offsetHeight-H.offsetHeight),q>0&&K{M(),I(),U?.disconnect(),Q.style.minHeight="",Z.style.transform="";for(let z of G)z.style.opacity=""}}var kH={};r(kH,{default:()=>sK});function sK(Q,$){let J=Q.children[0].children[0],H=new L$(J,{type:"chars"}).chars,Z=0.018;H.forEach((q,K)=>{let G=q;G.style.transitionDelay=`${K*0.018}s`})}var xH={};r(xH,{default:()=>lK});var L4=0.12,I4=0.21;function lK(Q,$){let J=Q.querySelectorAll("a"),H=$.group,Z=H?Array.from(document.querySelectorAll(`[data-module="list"][data-group="${CSS.escape(H)}"]`)).indexOf(Q)*I4:0;n.set(J,{opacity:0,yPercent:100}),l1(Q,{autoStart:!0,callback:({isIn:q})=>{if(q)n.to(J,{opacity:1,yPercent:0,stagger:L4,delay:Z});else n.killTweensOf(J),n.set(J,{opacity:0,yPercent:100})}})}var wH={};r(wH,{default:()=>aK});var M4=Object.create,{getPrototypeOf:z4,defineProperty:iK,getOwnPropertyNames:Y4}=Object,N4=Object.prototype.hasOwnProperty,D4=(Q,$,J)=>{J=Q!=null?M4(z4(Q)):{};let H=$||!Q||!Q.__esModule?iK(J,"default",{value:Q,enumerable:!0}):J;for(let Z of Y4(Q))if(!N4.call(H,Z))iK(H,Z,{get:()=>Q[Z],enumerable:!0});return H},F4=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),V4=F4((Q,$)=>{(function(J,H){typeof Q=="object"&&typeof $!="undefined"?$.exports=H():typeof define=="function"&&define.amd?define(H):(J||self).virtualScroll=H()})(Q,function(){var J=0;function H(I){return"__private_"+J+++"_"+I}function Z(I,z){if(!Object.prototype.hasOwnProperty.call(I,z))throw new TypeError("attempted to use private field on non-instance");return I}function q(){}q.prototype={on:function(I,z,R){var F=this.e||(this.e={});return(F[I]||(F[I]=[])).push({fn:z,ctx:R}),this},once:function(I,z,R){var F=this;function V(){F.off(I,V),z.apply(R,arguments)}return V._=z,this.on(I,V,R)},emit:function(I){for(var z=[].slice.call(arguments,1),R=((this.e||(this.e={}))[I]||[]).slice(),F=0,V=R.length;F1,hasPointer:!!window.navigator.msPointerEnabled,hasKeyDown:"onkeydown"in document,isFirefox:navigator.userAgent.indexOf("Firefox")>-1}),Z(this,W)[W]=Object.assign({mouseMultiplier:1,touchMultiplier:2,firefoxMultiplier:15,keyStep:120,preventTouch:!1,unpreventTouchClass:"vs-touchmove-allowed",useKeyboard:!0,useTouch:!0},R),Z(this,j)[j]=new K,Z(this,L)[L]={y:0,x:0,deltaX:0,deltaY:0},Z(this,B)[B]={x:null,y:null},Z(this,M)[M]=null,Z(this,W)[W].passive!==void 0&&(this.listenerOptions={passive:Z(this,W)[W].passive})}var z=I.prototype;return z._notify=function(R){var F=Z(this,L)[L];F.x+=F.deltaX,F.y+=F.deltaY,Z(this,j)[j].emit(U,{x:F.x,y:F.y,deltaX:F.deltaX,deltaY:F.deltaY,originalEvent:R})},z._bind=function(){G.hasWheelEvent&&Z(this,X)[X].addEventListener("wheel",this._onWheel,this.listenerOptions),G.hasMouseWheelEvent&&Z(this,X)[X].addEventListener("mousewheel",this._onMouseWheel,this.listenerOptions),G.hasTouch&&Z(this,W)[W].useTouch&&(Z(this,X)[X].addEventListener("touchstart",this._onTouchStart,this.listenerOptions),Z(this,X)[X].addEventListener("touchmove",this._onTouchMove,this.listenerOptions)),G.hasPointer&&G.hasTouchWin&&(Z(this,M)[M]=document.body.style.msTouchAction,document.body.style.msTouchAction="none",Z(this,X)[X].addEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].addEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.addEventListener("keydown",this._onKeyDown)},z._unbind=function(){G.hasWheelEvent&&Z(this,X)[X].removeEventListener("wheel",this._onWheel),G.hasMouseWheelEvent&&Z(this,X)[X].removeEventListener("mousewheel",this._onMouseWheel),G.hasTouch&&(Z(this,X)[X].removeEventListener("touchstart",this._onTouchStart),Z(this,X)[X].removeEventListener("touchmove",this._onTouchMove)),G.hasPointer&&G.hasTouchWin&&(document.body.style.msTouchAction=Z(this,M)[M],Z(this,X)[X].removeEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].removeEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.removeEventListener("keydown",this._onKeyDown)},z.on=function(R,F){Z(this,j)[j].on(U,R,F);var V=Z(this,j)[j].e;V&&V[U]&&V[U].length===1&&this._bind()},z.off=function(R,F){Z(this,j)[j].off(U,R,F);var V=Z(this,j)[j].e;(!V[U]||V[U].length<=0)&&this._unbind()},z.destroy=function(){Z(this,j)[j].off(),this._unbind()},I}()})}),R4=D4(V4(),1);function nK(Q,$,J,H){let Z=1-Math.exp(-J*H);return Q+($-Q)*Z}function QQ(Q,$){let J=Q%$;if(Math.abs(J)>$/2)J=J>0?J-$:J+$;return J}var C4={infinite:!0,snap:!0,variableWidth:!1,vertical:!1,dragSensitivity:0.005,lerpFactor:0.3,scrollSensitivity:1,snapStrength:0.1,speedDecay:0.85,bounceLimit:1,virtualScroll:{mouseMultiplier:0.5,touchMultiplier:2,firefoxMultiplier:30,useKeyboard:!1,passive:!0},setOffset:({itemWidth:Q,wrapperWidth:$,itemHeight:J,wrapperHeight:H,vertical:Z})=>Z?J:Q,scrollInput:!1};class rK{speed=0;#$=0;#H=0;#Q=0;deltaTime=0;#J=!0;#Z=!1;#q=0;#j=0;config;wrapper;items;viewport;itemWidths=[];itemOffsets=[];itemHeights=[];itemHeightOffsets=[];isDragging=!1;isTouching=!1;dragStart=0;dragStartTarget=0;isVisible=!1;current=0;target=0;maxScroll=0;resizeTimeout;virtualScroll;observer;touchStartY;touchStartX;touchPreviousX;touchPreviousY;scrollDirection;parallaxValues;webglValue=0;onSlideChange;onResize;onUpdate;constructor(Q,$={}){if(this.config={...C4,...$},$.onSlideChange)this.onSlideChange=$.onSlideChange;if($.onResize)this.onResize=$.onResize;if($.onUpdate)this.onUpdate=$.onUpdate;if(delete this.config.onSlideChange,delete this.config.onResize,delete this.config.onUpdate,this.wrapper=Q,this.items=[...Q.children],this.current=0,this.target=0,this.isDragging=!1,this.isTouching=!1,this.dragStart=0,this.dragStartTarget=0,this.isVisible=!1,this.#q=0,this.#j=0,this.#B(),this.#D(),this.#F(),this.wrapper.style.cursor="grab",this.#B(),this.#V(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.#K(0);this.target=J,this.current=J,this.#N()}}#D(){let Q={root:null,rootMargin:"50px",threshold:0};this.observer=new IntersectionObserver(($)=>{$.forEach((J)=>{this.isVisible=J.isIntersecting})},Q),this.observer.observe(this.wrapper)}#B(){let Q=this.items.map((U)=>U.getBoundingClientRect().width),$=this.items.map((U)=>U.getBoundingClientRect().height),J=this.wrapper.clientWidth,H=this.wrapper.clientHeight,Z=Q.reduce((U,W)=>U+W,0),q=$.reduce((U,W)=>U+W,0),K=0;this.itemOffsets=Q.map((U)=>{let W=K;return K+=U,W}),this.itemWidths=Q;let G=0;if(this.itemHeightOffsets=$.map((U)=>{let W=G;return G+=U,W}),this.itemHeights=$,this.viewport={itemWidth:Q[0]??0,wrapperWidth:J,totalWidth:Z,itemHeight:$[0]??0,wrapperHeight:H,totalHeight:q,vertical:this.config.vertical},this.#H=this.config.setOffset(this.viewport),this.config.variableWidth)if(this.config.vertical)this.maxScroll=-(this.viewport.totalHeight-this.#H);else this.maxScroll=-(this.viewport.totalWidth-this.#H);else{let U=this.config.vertical?this.viewport.itemHeight||1:this.viewport.itemWidth||1,W=this.config.vertical?this.viewport.totalHeight:this.viewport.totalWidth;this.maxScroll=-(W-this.#H)/U}queueMicrotask(()=>{this.onResize?.(this)})}#F(){let Q=(G)=>this.#G(G),$=(G)=>this.#U(G),J=()=>this.#W();this.wrapper.addEventListener("mousedown",Q),window.addEventListener("mousemove",$),window.addEventListener("mouseup",J);let H=5,Z=(G)=>{let U=G.touches[0];this.touchStartY=U.clientY,this.touchStartX=U.clientX,this.touchPreviousX=U.clientX,this.touchPreviousY=U.clientY,this.scrollDirection=void 0,this.isTouching=!0,this.#G(U)},q=(G)=>{if(!this.isTouching||this.#Z)return;let U=G.touches[0],W=Math.abs(U.clientY-this.touchStartY),X=Math.abs(U.clientX-this.touchStartX);if(!this.scrollDirection&&(X>H||W>H))this.scrollDirection=X>W?"horizontal":"vertical";if(this.config.vertical?this.scrollDirection==="vertical":this.scrollDirection==="horizontal")if(G.preventDefault(),this.#U(U),this.config.vertical)this.touchPreviousY=U.clientY;else this.touchPreviousX=U.clientX},K=()=>{this.isTouching=!1,this.scrollDirection=void 0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.#W()};this.wrapper.addEventListener("touchstart",Z),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",K),new ResizeObserver(()=>{if(this.resizeTimeout)clearTimeout(this.resizeTimeout);this.resizeTimeout=setTimeout(()=>this.resize(),10)}).observe(this.wrapper)}#M(Q){if(!this.config.infinite){let $=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,J=this.config.variableWidth&&$?this.config.bounceLimit*$:this.config.bounceLimit;if(Q>J)return J;else if(Q{if(!this.isDragging&&!this.#Z){if($.touchDevice){let K=Math.abs($.deltaY),G=Math.abs($.deltaX);if(KK)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!1,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); //# debugId=A656B71830305AD464756E2164756E21 diff --git a/assets/custom/js/interaction-overrides.js b/assets/custom/js/interaction-overrides.js index 72cc046..857403b 100644 --- a/assets/custom/js/interaction-overrides.js +++ b/assets/custom/js/interaction-overrides.js @@ -10,6 +10,8 @@ const DEFAULT_SCROLL_SPEED = 0.55; const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound"; const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound"; + const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound"; + const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound"; const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]); const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]); @@ -226,11 +228,62 @@ } function bindInteractiveScroll() { - bindGlobalSliderWheel(); - document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel); document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel); } + function bindOrderedSlider(surface) { + if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return; + + const slider = surface.__nodedcSlider; + if (!slider) return; + + surface[ORDERED_SLIDER_BOUND_FLAG] = true; + const items = Array.from(surface.children); + const startOffset = items.length > 1 ? -1 : 0; + + slider.config.infinite = true; + slider.target = startOffset; + slider.current = startOffset; + slider.speed = 0; + + items.forEach((item) => { + item.classList.remove("current"); + }); + + slider.resize?.(); + slider.update?.(); + } + + function bindOrderedSliders() { + document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider); + } + + function bindDockLink(link) { + if (!link || link[DOCK_LINK_BOUND_FLAG]) return; + + link[DOCK_LINK_BOUND_FLAG] = true; + link.addEventListener( + "click", + (event) => { + const href = String(link.getAttribute("href") || "").trim(); + const targetId = String(link.dataset.target || "").trim(); + const hasAppTarget = Boolean(targetId && document.getElementById(targetId)); + const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:"); + + if (!hasAppTarget && !isInertHref) return; + + event.preventDefault(); + window.requestAnimationFrame(() => link.blur()); + if (!hasAppTarget) event.stopPropagation(); + }, + { capture: true }, + ); + } + + function bindDockLinks() { + document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink); + } + function mediaExtension(src) { const cleanSrc = String(src || "").split(/[?#]/)[0]; const match = /\.([a-z0-9]+)$/i.exec(cleanSrc); @@ -313,6 +366,8 @@ () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, { once: true }, @@ -320,16 +375,22 @@ } else { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); } window.addEventListener("load", () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); window.setTimeout(() => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, 500); }); diff --git a/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg new file mode 100644 index 0000000..4c283bb Binary files /dev/null and b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg differ diff --git a/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png differ diff --git a/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png differ diff --git a/content/block-templates/home.json b/content/block-templates/home.json index d7e502f..5d12cd0 100644 --- a/content/block-templates/home.json +++ b/content/block-templates/home.json @@ -361,6 +361,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач." } }, "editableFields": [ @@ -377,24 +384,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -772,44 +800,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1030,30 +1074,99 @@ "enabled": true } }, + { + "key": "cViz:centralTextBlock:central-text-block.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Центральный текстовый блок", + "description": "central-text-block.html", + "block": { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + } + }, { "key": "cViz:pricingTable:pricing-table.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Тарифы: интро и таблица", + "title": "Тарифы: таблица", "description": "pricing-table.html", "block": { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -1344,110 +1457,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -1626,13 +1638,91 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": true + } + }, + { + "key": "cViz:screenshotCards:screenshot-cards.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Карточки скриншотов", + "description": "screenshot-cards.html", + "block": { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -1691,103 +1781,25 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true - } - }, - { - "key": "cViz:pricingIntro:pricing-intro.html", - "regionId": "cViz", - "regionLabel": "Секции", - "title": "Интро тарифов (устаревший дубль)", - "description": "pricing-intro.html", - "block": { - "region": "cViz", - "id": "pricing-intro", - "type": "pricingIntro", - "template": "pricing-intro.html", - "adminLabel": "Интро тарифов (устаревший дубль)", - "anchor": "waitlist", - "enabled": false, - "content": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." - }, - "editableFields": [ - { - "path": "content.eyebrow", - "label": "Надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.middle", - "label": "Заголовок: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.main", - "label": "Заголовок: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.introHtml", - "label": "Вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.tokenBillingHtml", - "label": "Оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.founderLimitHtml", - "label": "Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - } ] } }, { - "key": "cViz:waitlistFiles:waitlist-files.html", + "key": "cViz:waitlistFiles:request-demo-txt-files.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Форма ожидания и txt-файлы", - "description": "waitlist-files.html", + "title": "Запрос DEMO и TXT-файлы", + "description": "request-demo-txt-files.html", "block": { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -1799,249 +1811,336 @@ "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { @@ -2053,128 +2152,29 @@ "release": "Бета-релиз: июль 2026", "heading": "Ранний доступ", "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -2187,22 +2187,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -2300,27 +2304,32 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", @@ -2328,25 +2337,30 @@ { "label": "Twitter", "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Instagram", "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": true } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -2397,7 +2411,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -2421,7 +2435,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -2436,7 +2451,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -2460,15 +2475,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/content/pages/home.json b/content/pages/home.json index 18c9d52..4b57122 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -19,7 +19,7 @@ "target": "" }, { - "label": "Лист ожидания", + "label": "Запрос инвайта", "href": "index.html#hero", "target": "" }, @@ -62,7 +62,7 @@ { "enabled": true, "title": "NODE.DC", - "href": "#hero", + "href": "https://id.nodedc.ru/", "linkTarget": "", "targetId": "app-data", "iconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", @@ -74,7 +74,7 @@ { "enabled": true, "title": "Корзина", - "href": "", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -87,7 +87,7 @@ }, "assets": { "webglModelSrc": "./assets/custom/icon.glb", - "logoPng": "./assets/custom/logo.png", + "logoPng": "./assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg", "logoPngAlt": "Логотип NODE.DC", "appIconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", "appIconAlt": "Иконка NODE.DC", @@ -204,7 +204,7 @@ "itemTemplate": { "enabled": true, "title": "Новое приложение", - "href": "#hero", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -345,7 +345,7 @@ "id": "hero-waitlist", "type": "heroWaitlist", "template": "theses-request-demo.html", - "adminLabel": "ТЕЗИСЫ + ЗАПРОС ДЕМО", + "adminLabel": "ТЕЗИСЫ + ЗАПРОС DEMO", "anchor": "hero", "content": { "heading": { @@ -664,6 +664,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Hub, ", + "main": "Engine, Ops." + }, + "introHtml": "Единая логика доступа, разработки и управления процессами внутри enterprise-контура. " } }, "editableFields": [ @@ -680,24 +687,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -906,11 +934,11 @@ }, "bottomInfo": { "heading": { - "muted": "Hub.", - "middle": " Контур", + "muted": "Единый", + "middle": " контур", "main": "доступа." }, - "introHtml": "Централизованный запуск приложений, управление ролями, группами и доступом к каждому рабочему модулю." + "introHtml": "Администрирование\nНазначение ролей и управление пользователями по группам и подразделениям.\nEnterprise-контуры\nкоманд.\nРаздельные конфигурации доступа для инженерных, финансовых, юридических и закупочных\nТонкая настройка\nИндивидуальные права на отдельные приложения, функции и рабочие области." } }, "editableFields": [ @@ -1189,11 +1217,11 @@ }, "bottomInfo": { "heading": { - "muted": "Engine. ", - "middle": "Workflow ", - "main": "и агенты." + "muted": "От задачи ", + "middle": "к рабочему ", + "main": "сценарию." }, - "introHtml": "Workflow можно собрать вручную или через ассистента: от текстового задания до готовой нодовой схемы и подключенного интерфейса." + "introHtml": "Нодовый редактор\nВизуальная разработка процессов, связей и переходов между узлами.\nКомпонентная библиотека\nГотовые узлы для API, данных, логики, обработки, визуализации и внешних систем.\nПередача в Ops\nРезультаты процессов, отчеты, статусы и интерфейсы переходят в операционный слой." } }, "editableFields": [ @@ -1473,11 +1501,11 @@ }, "bottomInfo": { "heading": { - "muted": "OPS", - "middle": "Контроль ", - "main": "процессов." + "muted": "Единый ", + "middle": "операционный ", + "main": "контур." }, - "introHtml": "Операционная среда для работы людей, агентов и прикладных контуров в рамках проектов, подразделений и процессов." + "introHtml": "Люди и агенты\nПостановка задач, декомпозиция, отчеты, согласования и контроль исполнения.\nКонтекст предприятия\nПроцессы, кодовая база, модели, документы и сервисные сценарии связаны с задачами.\nУправление действиями\nАссистент может готовить материалы, инициировать изменения и передавать действия между\nслоями при наличии прав." } }, "editableFields": [ @@ -1614,11 +1642,11 @@ }, "bottomInfo": { "heading": { - "muted": "Модули. ", - "middle": "Прикладной ", - "main": "контур." + "muted": "От функции", + "middle": " к рабочему ", + "main": "приложению." }, - "introHtml": "Прикладные модули закрывают функции подразделений: 1C, закупки, тендеры, юридический контур, цифровые двойники, инженерные модели и интеграции." + "introHtml": "Каждый модуль подключается к ролям, задачам, данным и сквозному ассистенту платформы. " } }, "editableFields": [ @@ -1719,79 +1747,6 @@ "enabled": true, "scopeIds": true }, - { - "region": "cViz", - "id": "publish-cta", - "type": "publishCta", - "template": "publish-cta.html", - "adminLabel": "Финальный CTA перед тарифами", - "anchor": "hero", - "content": { - "cta": { - "heading": { - "muted": "Подключить.", - "middle": "Поставить задачу.", - "main": "Опубликовать." - }, - "intro": "Единый путь от разработки до продакшена.", - "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", - "href": "index.html#hero", - "buttonLabel": "Встать в лист ожидания" - } - }, - "editableFields": [ - { - "path": "content.cta.heading.muted", - "label": "CTA: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.middle", - "label": "CTA: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.main", - "label": "CTA: основная строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.intro", - "label": "CTA: вводный текст", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.detailHtml", - "label": "CTA: пояснение", - "kind": "html", - "renderAs": "html", - "group": "CTA" - }, - { - "path": "content.cta.href", - "label": "CTA: ссылка", - "kind": "url", - "renderAs": "attr", - "group": "CTA" - }, - { - "path": "content.cta.buttonLabel", - "label": "CTA: кнопка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - } - ], - "enabled": true - }, { "region": "cViz", "id": "faq", @@ -1811,44 +1766,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1988,24 +1959,159 @@ ], "enabled": true }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Собрать контур. ", + "main": "Запустить." + }, + "intro": "Единый путь от доступа к модулю до рабочего контура предприятия. Hub для входа, Engine для сборки, Ops для управления.", + "detailHtml": "Модульный доступ, документация и рабочие пространства.\nПодключение прикладных модулей и ролей по контурам.\nЗакрытый инвайт для пилотных внедрений.", + "href": "index.html#hero", + "buttonLabel": "Запросить инвайт " + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + }, { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -2296,110 +2402,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -2578,13 +2583,84 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": false + }, + { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -2643,18 +2719,18 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true + ] }, { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -2662,386 +2738,374 @@ "messagePlaceholder": "Сообщение (необязательно)", "namePlaceholder": "Ваше имя*", "emailPlaceholder": "Email для регистрации*", - "submitLabel": "Встать в лист ожидания", + "submitLabel": "Подать заявку", "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", - "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "betaCtaLabel": "Подать заявку?", + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { "enabled": true, - "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconSrc": "./assets/uploads/images/hero-waitlist/dclogo_white_alpha-mquue8ar.png", "iconAlt": "Иконка NODE.DC", "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", "wordmarkAlt": "Логотип NODE.DC", - "release": "Бета-релиз: июль 2026", - "heading": "Ранний доступ", - "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + "release": "Selfhost платформа ", + "heading": "Запросить DEMO", + "description": "NODE.DC - платформа для задач, процессов, данных, агентов и инженерных модулей." + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -3054,22 +3118,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -3153,53 +3221,63 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", "contactLinks": [ { - "label": "Twitter", - "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "label": "DCTOUCH", + "href": "https://www.dctouch.ru/", + "target": "_blank", + "enabled": true }, { - "label": "Instagram", - "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "label": "Telegram", + "href": "https://t.me/dcconstructions", + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": false }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": false } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -3250,7 +3328,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -3274,7 +3352,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -3289,7 +3368,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -3313,15 +3392,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/index.html b/index.html index 662a16f..780c240 100644 --- a/index.html +++ b/index.html @@ -67,11 +67,11 @@ - +
{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!0,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); +`}},onInitError:(j)=>{console.warn("Failed to initialize mini WebGL runtime:",j)}}),Z=C9({easing:p.scene.mouseEasing}),q=iJ({element:Q,eventElement:window}),K=Z4(q,s8),G=S$.add(()=>{let j=s8();K.setEffectUni("background-flip-wipe",{value1:j}),K.setEffectUni("ascii-trail-mix",{value1:j})}),U=0,W=S0.add((j)=>{if(typeof j?.velocity==="number"){U=j.velocity;return}U=0}),X=nJ(H,{placement:p.scene.icon.placement,mouse:Z,getScale:rJ,getBackgroundFlipProgress:s8,getScrollVelocity:()=>U,scrollVelocityToYOffset:p.scene.icon.scrollVelocityToYOffset,scrollVelocityToXRotation:p.scene.icon.scrollVelocityToXRotation,scrollVelocityToYRotation:p.scene.icon.scrollVelocityToYRotation,scrollFlipVelocityThreshold:p.scene.icon.scrollFlipVelocityThreshold,scrollFlipDuration:p.scene.icon.scrollFlipDuration,scrollYOffsetDamping:p.scene.icon.scrollYOffsetDamping,scrollYOffsetRecenter:p.scene.icon.scrollBounceBack,scrollYOffsetEase:p.scene.icon.scrollYOffsetEase,idleFloatYOffsetAmplitude:p.scene.icon.idleFloatYOffsetAmplitude,idleFloatYOffsetSpeed:p.scene.icon.idleFloatYOffsetSpeed,idleFloatRotationAmplitude:p.scene.icon.idleFloatRotationAmplitude,idleFloatRotationSpeed:p.scene.icon.idleFloatRotationSpeed,log:p.scene.icon.log});return()=>{X(),G(),W(),K.destroy(),q.destroy(),Z.destroy(),H.destroy()}}var AH={};r(AH,{default:()=>dK});var vK="h1, h2, h3, h4",uK={opacity:0,xPercent:20,yPercent:20},q4="blur(6px)",mK={opacity:0,yPercent:12},E9={stagger:0.2,delay:0.1,paragraphDelay:0.05,paragraphWordStagger:0.04,groupStagger:0.18};function $Q(Q){return Q.filter(($)=>!!$&&$.isConnected)}function O9(Q,$){let J=$Q(Q);if(!J.length)return;n.set(J,$)}function K4(Q,$){let J=$Q(Q);if(!J.length)return;n.to(J,$)}function G4(Q){let $=$Q(Q);if(!$.length)return;n.killTweensOf($)}function U4(Q){let $=Q.parentElement,J=document.createElement("div");J.style.position="relative",J.style.display=Q.style.display||"block",$.insertBefore(J,Q),J.appendChild(Q),Q.style.opacity="0";let H=Q.cloneNode(!0);return H.setAttribute("aria-hidden","true"),H.style.opacity="1",H.style.position="absolute",H.style.top="0",H.style.left="0",H.style.width="100%",H.style.height="100%",H.style.pointerEvents="none",H.style.overflow="visible",H.style.zIndex="1",J.appendChild(H),new L$(H,{type:"words"}).words}function dK(Q,$){let J=$.group,H=J?Array.from(document.querySelectorAll(`[data-module="hg"][data-group="${CSS.escape(J)}"]`)).indexOf(Q):0,Z=Q.querySelector(`:scope > ${vK}`),q=Array.from(Q.querySelectorAll(`:scope > p, :scope > div:not(:has(${vK})):not(:has(a, button, [data-module="btn"]))`)).filter((X)=>!X.closest("a, button, [data-module='btn']")),K=Z?Array.from(Z.querySelectorAll("span")):[],G=K.length>0?K:Z?[Z]:[],U=[];if(q.length)U=q.flatMap(U4),O9(U,mK);if(!(G.length>0||U.length>0))return;O9(G,uK),O9([Q],{opacity:1}),l1(Q,{autoStart:!0,once:!1,callback:({isIn:X,direction:j})=>{if(X){if(Zq){O9([Q],{opacity:1}),O9(q,{opacity:1});return}let L=j===-1,B=J==="hero"&&!Q._hgAnimated,M=H*(B?E9.groupStagger*3:E9.groupStagger),I=E9.delay+M,z=E9.delay+E9.paragraphDelay+M;if(G.length){let R=$Q(G);if(R.length)n.fromTo(R,{filter:q4},{opacity:1,filter:"blur(0px)",xPercent:0,yPercent:0,stagger:{each:E9.stagger,from:L?"end":"start"},delay:I,onComplete:()=>{n.set(R,{clearProps:"filter"})}})}if(U.length)K4(U,{opacity:1,yPercent:0,stagger:{each:E9.paragraphWordStagger,from:L?"end":"start"},delay:z,ease:"expo.out"});if(B)Q._hgAnimated=!0}else G4([...G,...U]),O9(G,{...uK,clearProps:"filter"}),O9(U,mK)}})}var PH={};r(PH,{default:()=>oK});var gK="[data-ho-sticky]",W4="[data-ho-track]",X4=".ho-c",cK=0;function pK(Q,$){if(Q==null||Q==="")return $;let J=parseFloat(Q);if(!Number.isFinite(J))return $;return M$(0,0.45,J)}function j4(Q){let $=cK,J=cK,H=Q.hoBuffer?.split(",").map((Z)=>parseFloat(Z.trim()));if(H&&H.length>=2&&Number.isFinite(H[0])&&Number.isFinite(H[1]))$=M$(0,0.45,H[0]),J=M$(0,0.45,H[1]);if($=pK(Q.hoBufferStart,$),J=pK(Q.hoBufferEnd,J),$+J>=1){let Z=0.98/($+J);return{start:$*Z,end:J*Z}}return{start:$,end:J}}function B4(Q){if(Q.matches(gK))return Q;return Q.querySelector(gK)??Q.firstElementChild}function oK(Q,$){let J=j4($),H=B4(Q),Z=H?.querySelector(W4)??H?.firstElementChild;if(!H){console.warn("[ho-scroll] No sticky wrapper: put [data-ho-sticky] on the module root or add a first element child as the sticky container.");return}if(!Z){console.warn("[ho-scroll] No track: add [data-ho-track] inside the sticky wrapper, or make the wide row its first element child.");return}let q=0,K=1,G=[],U=null,W=parseFloat($.hoCThreshold??""),X=Number.isFinite(W)?M$(0.01,1,W):0.15,j=()=>{U?.disconnect(),U=null;for(let z of G)z.style.opacity="";if(G=Array.from(Z.querySelectorAll(X4)),G.length===0)return;for(let z of G)z.style.opacity="0";U=new IntersectionObserver((z)=>{for(let R of z){let F=R.target;F.style.opacity=R.isIntersecting?"1":"0"}},{root:H,threshold:X});for(let z of G)U.observe(z)},L=()=>{let z=Q.getBoundingClientRect().top+S0.scroll,R=S0.scroll-z,F=0;if(q>0){let V=J.start*K,Y=J.end*K,N=Math.max(0.000001,K-V-Y);F=M$(0,1,(R-V)/N)}if(q<=0){Z.style.transform="";return}Z.style.transform=`translate3d(${-F*q}px, 0, 0)`},B=()=>{q=Math.max(0,Z.scrollWidth-window.innerWidth);let z=H.offsetHeight;if(Q.style.minHeight=`${z+q}px`,K=Math.max(0.000001,Q.offsetHeight-H.offsetHeight),q>0&&K{M(),I(),U?.disconnect(),Q.style.minHeight="",Z.style.transform="";for(let z of G)z.style.opacity=""}}var kH={};r(kH,{default:()=>sK});function sK(Q,$){let J=Q.children[0].children[0],H=new L$(J,{type:"chars"}).chars,Z=0.018;H.forEach((q,K)=>{let G=q;G.style.transitionDelay=`${K*0.018}s`})}var xH={};r(xH,{default:()=>lK});var L4=0.12,I4=0.21;function lK(Q,$){let J=Q.querySelectorAll("a"),H=$.group,Z=H?Array.from(document.querySelectorAll(`[data-module="list"][data-group="${CSS.escape(H)}"]`)).indexOf(Q)*I4:0;n.set(J,{opacity:0,yPercent:100}),l1(Q,{autoStart:!0,callback:({isIn:q})=>{if(q)n.to(J,{opacity:1,yPercent:0,stagger:L4,delay:Z});else n.killTweensOf(J),n.set(J,{opacity:0,yPercent:100})}})}var wH={};r(wH,{default:()=>aK});var M4=Object.create,{getPrototypeOf:z4,defineProperty:iK,getOwnPropertyNames:Y4}=Object,N4=Object.prototype.hasOwnProperty,D4=(Q,$,J)=>{J=Q!=null?M4(z4(Q)):{};let H=$||!Q||!Q.__esModule?iK(J,"default",{value:Q,enumerable:!0}):J;for(let Z of Y4(Q))if(!N4.call(H,Z))iK(H,Z,{get:()=>Q[Z],enumerable:!0});return H},F4=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),V4=F4((Q,$)=>{(function(J,H){typeof Q=="object"&&typeof $!="undefined"?$.exports=H():typeof define=="function"&&define.amd?define(H):(J||self).virtualScroll=H()})(Q,function(){var J=0;function H(I){return"__private_"+J+++"_"+I}function Z(I,z){if(!Object.prototype.hasOwnProperty.call(I,z))throw new TypeError("attempted to use private field on non-instance");return I}function q(){}q.prototype={on:function(I,z,R){var F=this.e||(this.e={});return(F[I]||(F[I]=[])).push({fn:z,ctx:R}),this},once:function(I,z,R){var F=this;function V(){F.off(I,V),z.apply(R,arguments)}return V._=z,this.on(I,V,R)},emit:function(I){for(var z=[].slice.call(arguments,1),R=((this.e||(this.e={}))[I]||[]).slice(),F=0,V=R.length;F1,hasPointer:!!window.navigator.msPointerEnabled,hasKeyDown:"onkeydown"in document,isFirefox:navigator.userAgent.indexOf("Firefox")>-1}),Z(this,W)[W]=Object.assign({mouseMultiplier:1,touchMultiplier:2,firefoxMultiplier:15,keyStep:120,preventTouch:!1,unpreventTouchClass:"vs-touchmove-allowed",useKeyboard:!0,useTouch:!0},R),Z(this,j)[j]=new K,Z(this,L)[L]={y:0,x:0,deltaX:0,deltaY:0},Z(this,B)[B]={x:null,y:null},Z(this,M)[M]=null,Z(this,W)[W].passive!==void 0&&(this.listenerOptions={passive:Z(this,W)[W].passive})}var z=I.prototype;return z._notify=function(R){var F=Z(this,L)[L];F.x+=F.deltaX,F.y+=F.deltaY,Z(this,j)[j].emit(U,{x:F.x,y:F.y,deltaX:F.deltaX,deltaY:F.deltaY,originalEvent:R})},z._bind=function(){G.hasWheelEvent&&Z(this,X)[X].addEventListener("wheel",this._onWheel,this.listenerOptions),G.hasMouseWheelEvent&&Z(this,X)[X].addEventListener("mousewheel",this._onMouseWheel,this.listenerOptions),G.hasTouch&&Z(this,W)[W].useTouch&&(Z(this,X)[X].addEventListener("touchstart",this._onTouchStart,this.listenerOptions),Z(this,X)[X].addEventListener("touchmove",this._onTouchMove,this.listenerOptions)),G.hasPointer&&G.hasTouchWin&&(Z(this,M)[M]=document.body.style.msTouchAction,document.body.style.msTouchAction="none",Z(this,X)[X].addEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].addEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.addEventListener("keydown",this._onKeyDown)},z._unbind=function(){G.hasWheelEvent&&Z(this,X)[X].removeEventListener("wheel",this._onWheel),G.hasMouseWheelEvent&&Z(this,X)[X].removeEventListener("mousewheel",this._onMouseWheel),G.hasTouch&&(Z(this,X)[X].removeEventListener("touchstart",this._onTouchStart),Z(this,X)[X].removeEventListener("touchmove",this._onTouchMove)),G.hasPointer&&G.hasTouchWin&&(document.body.style.msTouchAction=Z(this,M)[M],Z(this,X)[X].removeEventListener("MSPointerDown",this._onTouchStart,!0),Z(this,X)[X].removeEventListener("MSPointerMove",this._onTouchMove,!0)),G.hasKeyDown&&Z(this,W)[W].useKeyboard&&document.removeEventListener("keydown",this._onKeyDown)},z.on=function(R,F){Z(this,j)[j].on(U,R,F);var V=Z(this,j)[j].e;V&&V[U]&&V[U].length===1&&this._bind()},z.off=function(R,F){Z(this,j)[j].off(U,R,F);var V=Z(this,j)[j].e;(!V[U]||V[U].length<=0)&&this._unbind()},z.destroy=function(){Z(this,j)[j].off(),this._unbind()},I}()})}),R4=D4(V4(),1);function nK(Q,$,J,H){let Z=1-Math.exp(-J*H);return Q+($-Q)*Z}function QQ(Q,$){let J=Q%$;if(Math.abs(J)>$/2)J=J>0?J-$:J+$;return J}var C4={infinite:!0,snap:!0,variableWidth:!1,vertical:!1,dragSensitivity:0.005,lerpFactor:0.3,scrollSensitivity:1,snapStrength:0.1,speedDecay:0.85,bounceLimit:1,virtualScroll:{mouseMultiplier:0.5,touchMultiplier:2,firefoxMultiplier:30,useKeyboard:!1,passive:!0},setOffset:({itemWidth:Q,wrapperWidth:$,itemHeight:J,wrapperHeight:H,vertical:Z})=>Z?J:Q,scrollInput:!1};class rK{speed=0;#$=0;#H=0;#Q=0;deltaTime=0;#J=!0;#Z=!1;#q=0;#j=0;config;wrapper;items;viewport;itemWidths=[];itemOffsets=[];itemHeights=[];itemHeightOffsets=[];isDragging=!1;isTouching=!1;dragStart=0;dragStartTarget=0;isVisible=!1;current=0;target=0;maxScroll=0;resizeTimeout;virtualScroll;observer;touchStartY;touchStartX;touchPreviousX;touchPreviousY;scrollDirection;parallaxValues;webglValue=0;onSlideChange;onResize;onUpdate;constructor(Q,$={}){if(this.config={...C4,...$},$.onSlideChange)this.onSlideChange=$.onSlideChange;if($.onResize)this.onResize=$.onResize;if($.onUpdate)this.onUpdate=$.onUpdate;if(delete this.config.onSlideChange,delete this.config.onResize,delete this.config.onUpdate,this.wrapper=Q,this.items=[...Q.children],this.current=0,this.target=0,this.isDragging=!1,this.isTouching=!1,this.dragStart=0,this.dragStartTarget=0,this.isVisible=!1,this.#q=0,this.#j=0,this.#B(),this.#D(),this.#F(),this.wrapper.style.cursor="grab",this.#B(),this.#V(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.#K(0);this.target=J,this.current=J,this.#N()}}#D(){let Q={root:null,rootMargin:"50px",threshold:0};this.observer=new IntersectionObserver(($)=>{$.forEach((J)=>{this.isVisible=J.isIntersecting})},Q),this.observer.observe(this.wrapper)}#B(){let Q=this.items.map((U)=>U.getBoundingClientRect().width),$=this.items.map((U)=>U.getBoundingClientRect().height),J=this.wrapper.clientWidth,H=this.wrapper.clientHeight,Z=Q.reduce((U,W)=>U+W,0),q=$.reduce((U,W)=>U+W,0),K=0;this.itemOffsets=Q.map((U)=>{let W=K;return K+=U,W}),this.itemWidths=Q;let G=0;if(this.itemHeightOffsets=$.map((U)=>{let W=G;return G+=U,W}),this.itemHeights=$,this.viewport={itemWidth:Q[0]??0,wrapperWidth:J,totalWidth:Z,itemHeight:$[0]??0,wrapperHeight:H,totalHeight:q,vertical:this.config.vertical},this.#H=this.config.setOffset(this.viewport),this.config.variableWidth)if(this.config.vertical)this.maxScroll=-(this.viewport.totalHeight-this.#H);else this.maxScroll=-(this.viewport.totalWidth-this.#H);else{let U=this.config.vertical?this.viewport.itemHeight||1:this.viewport.itemWidth||1,W=this.config.vertical?this.viewport.totalHeight:this.viewport.totalWidth;this.maxScroll=-(W-this.#H)/U}queueMicrotask(()=>{this.onResize?.(this)})}#F(){let Q=(G)=>this.#G(G),$=(G)=>this.#U(G),J=()=>this.#W();this.wrapper.addEventListener("mousedown",Q),window.addEventListener("mousemove",$),window.addEventListener("mouseup",J);let H=5,Z=(G)=>{let U=G.touches[0];this.touchStartY=U.clientY,this.touchStartX=U.clientX,this.touchPreviousX=U.clientX,this.touchPreviousY=U.clientY,this.scrollDirection=void 0,this.isTouching=!0,this.#G(U)},q=(G)=>{if(!this.isTouching||this.#Z)return;let U=G.touches[0],W=Math.abs(U.clientY-this.touchStartY),X=Math.abs(U.clientX-this.touchStartX);if(!this.scrollDirection&&(X>H||W>H))this.scrollDirection=X>W?"horizontal":"vertical";if(this.config.vertical?this.scrollDirection==="vertical":this.scrollDirection==="horizontal")if(G.preventDefault(),this.#U(U),this.config.vertical)this.touchPreviousY=U.clientY;else this.touchPreviousX=U.clientX},K=()=>{this.isTouching=!1,this.scrollDirection=void 0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.#W()};this.wrapper.addEventListener("touchstart",Z),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",K),new ResizeObserver(()=>{if(this.resizeTimeout)clearTimeout(this.resizeTimeout);this.resizeTimeout=setTimeout(()=>this.resize(),10)}).observe(this.wrapper)}#M(Q){if(!this.config.infinite){let $=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,J=this.config.variableWidth&&$?this.config.bounceLimit*$:this.config.bounceLimit;if(Q>J)return J;else if(Q{if(!this.isDragging&&!this.#Z){if($.touchDevice){let K=Math.abs($.deltaY),G=Math.abs($.deltaX);if(KK)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!1,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); //# debugId=A656B71830305AD464756E2164756E21 diff --git a/assets/custom/js/interaction-overrides.js b/assets/custom/js/interaction-overrides.js index 72cc046..857403b 100644 --- a/assets/custom/js/interaction-overrides.js +++ b/assets/custom/js/interaction-overrides.js @@ -10,6 +10,8 @@ const DEFAULT_SCROLL_SPEED = 0.55; const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound"; const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound"; + const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound"; + const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound"; const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]); const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]); @@ -226,11 +228,62 @@ } function bindInteractiveScroll() { - bindGlobalSliderWheel(); - document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel); document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel); } + function bindOrderedSlider(surface) { + if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return; + + const slider = surface.__nodedcSlider; + if (!slider) return; + + surface[ORDERED_SLIDER_BOUND_FLAG] = true; + const items = Array.from(surface.children); + const startOffset = items.length > 1 ? -1 : 0; + + slider.config.infinite = true; + slider.target = startOffset; + slider.current = startOffset; + slider.speed = 0; + + items.forEach((item) => { + item.classList.remove("current"); + }); + + slider.resize?.(); + slider.update?.(); + } + + function bindOrderedSliders() { + document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider); + } + + function bindDockLink(link) { + if (!link || link[DOCK_LINK_BOUND_FLAG]) return; + + link[DOCK_LINK_BOUND_FLAG] = true; + link.addEventListener( + "click", + (event) => { + const href = String(link.getAttribute("href") || "").trim(); + const targetId = String(link.dataset.target || "").trim(); + const hasAppTarget = Boolean(targetId && document.getElementById(targetId)); + const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:"); + + if (!hasAppTarget && !isInertHref) return; + + event.preventDefault(); + window.requestAnimationFrame(() => link.blur()); + if (!hasAppTarget) event.stopPropagation(); + }, + { capture: true }, + ); + } + + function bindDockLinks() { + document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink); + } + function mediaExtension(src) { const cleanSrc = String(src || "").split(/[?#]/)[0]; const match = /\.([a-z0-9]+)$/i.exec(cleanSrc); @@ -313,6 +366,8 @@ () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, { once: true }, @@ -320,16 +375,22 @@ } else { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); } window.addEventListener("load", () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); window.setTimeout(() => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, 500); }); diff --git a/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg new file mode 100644 index 0000000..4c283bb Binary files /dev/null and b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg differ diff --git a/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png differ diff --git a/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png differ diff --git a/content/block-templates/home.json b/content/block-templates/home.json index d7e502f..5d12cd0 100644 --- a/content/block-templates/home.json +++ b/content/block-templates/home.json @@ -361,6 +361,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач." } }, "editableFields": [ @@ -377,24 +384,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -772,44 +800,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1030,30 +1074,99 @@ "enabled": true } }, + { + "key": "cViz:centralTextBlock:central-text-block.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Центральный текстовый блок", + "description": "central-text-block.html", + "block": { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + } + }, { "key": "cViz:pricingTable:pricing-table.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Тарифы: интро и таблица", + "title": "Тарифы: таблица", "description": "pricing-table.html", "block": { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -1344,110 +1457,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -1626,13 +1638,91 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": true + } + }, + { + "key": "cViz:screenshotCards:screenshot-cards.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Карточки скриншотов", + "description": "screenshot-cards.html", + "block": { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -1691,103 +1781,25 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true - } - }, - { - "key": "cViz:pricingIntro:pricing-intro.html", - "regionId": "cViz", - "regionLabel": "Секции", - "title": "Интро тарифов (устаревший дубль)", - "description": "pricing-intro.html", - "block": { - "region": "cViz", - "id": "pricing-intro", - "type": "pricingIntro", - "template": "pricing-intro.html", - "adminLabel": "Интро тарифов (устаревший дубль)", - "anchor": "waitlist", - "enabled": false, - "content": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." - }, - "editableFields": [ - { - "path": "content.eyebrow", - "label": "Надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.middle", - "label": "Заголовок: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.main", - "label": "Заголовок: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.introHtml", - "label": "Вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.tokenBillingHtml", - "label": "Оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.founderLimitHtml", - "label": "Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - } ] } }, { - "key": "cViz:waitlistFiles:waitlist-files.html", + "key": "cViz:waitlistFiles:request-demo-txt-files.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Форма ожидания и txt-файлы", - "description": "waitlist-files.html", + "title": "Запрос DEMO и TXT-файлы", + "description": "request-demo-txt-files.html", "block": { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -1799,249 +1811,336 @@ "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { @@ -2053,128 +2152,29 @@ "release": "Бета-релиз: июль 2026", "heading": "Ранний доступ", "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -2187,22 +2187,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -2300,27 +2304,32 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", @@ -2328,25 +2337,30 @@ { "label": "Twitter", "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Instagram", "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": true } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -2397,7 +2411,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -2421,7 +2435,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -2436,7 +2451,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -2460,15 +2475,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/content/pages/home.json b/content/pages/home.json index 18c9d52..4b57122 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -19,7 +19,7 @@ "target": "" }, { - "label": "Лист ожидания", + "label": "Запрос инвайта", "href": "index.html#hero", "target": "" }, @@ -62,7 +62,7 @@ { "enabled": true, "title": "NODE.DC", - "href": "#hero", + "href": "https://id.nodedc.ru/", "linkTarget": "", "targetId": "app-data", "iconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", @@ -74,7 +74,7 @@ { "enabled": true, "title": "Корзина", - "href": "", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -87,7 +87,7 @@ }, "assets": { "webglModelSrc": "./assets/custom/icon.glb", - "logoPng": "./assets/custom/logo.png", + "logoPng": "./assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg", "logoPngAlt": "Логотип NODE.DC", "appIconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", "appIconAlt": "Иконка NODE.DC", @@ -204,7 +204,7 @@ "itemTemplate": { "enabled": true, "title": "Новое приложение", - "href": "#hero", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -345,7 +345,7 @@ "id": "hero-waitlist", "type": "heroWaitlist", "template": "theses-request-demo.html", - "adminLabel": "ТЕЗИСЫ + ЗАПРОС ДЕМО", + "adminLabel": "ТЕЗИСЫ + ЗАПРОС DEMO", "anchor": "hero", "content": { "heading": { @@ -664,6 +664,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Hub, ", + "main": "Engine, Ops." + }, + "introHtml": "Единая логика доступа, разработки и управления процессами внутри enterprise-контура. " } }, "editableFields": [ @@ -680,24 +687,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -906,11 +934,11 @@ }, "bottomInfo": { "heading": { - "muted": "Hub.", - "middle": " Контур", + "muted": "Единый", + "middle": " контур", "main": "доступа." }, - "introHtml": "Централизованный запуск приложений, управление ролями, группами и доступом к каждому рабочему модулю." + "introHtml": "Администрирование\nНазначение ролей и управление пользователями по группам и подразделениям.\nEnterprise-контуры\nкоманд.\nРаздельные конфигурации доступа для инженерных, финансовых, юридических и закупочных\nТонкая настройка\nИндивидуальные права на отдельные приложения, функции и рабочие области." } }, "editableFields": [ @@ -1189,11 +1217,11 @@ }, "bottomInfo": { "heading": { - "muted": "Engine. ", - "middle": "Workflow ", - "main": "и агенты." + "muted": "От задачи ", + "middle": "к рабочему ", + "main": "сценарию." }, - "introHtml": "Workflow можно собрать вручную или через ассистента: от текстового задания до готовой нодовой схемы и подключенного интерфейса." + "introHtml": "Нодовый редактор\nВизуальная разработка процессов, связей и переходов между узлами.\nКомпонентная библиотека\nГотовые узлы для API, данных, логики, обработки, визуализации и внешних систем.\nПередача в Ops\nРезультаты процессов, отчеты, статусы и интерфейсы переходят в операционный слой." } }, "editableFields": [ @@ -1473,11 +1501,11 @@ }, "bottomInfo": { "heading": { - "muted": "OPS", - "middle": "Контроль ", - "main": "процессов." + "muted": "Единый ", + "middle": "операционный ", + "main": "контур." }, - "introHtml": "Операционная среда для работы людей, агентов и прикладных контуров в рамках проектов, подразделений и процессов." + "introHtml": "Люди и агенты\nПостановка задач, декомпозиция, отчеты, согласования и контроль исполнения.\nКонтекст предприятия\nПроцессы, кодовая база, модели, документы и сервисные сценарии связаны с задачами.\nУправление действиями\nАссистент может готовить материалы, инициировать изменения и передавать действия между\nслоями при наличии прав." } }, "editableFields": [ @@ -1614,11 +1642,11 @@ }, "bottomInfo": { "heading": { - "muted": "Модули. ", - "middle": "Прикладной ", - "main": "контур." + "muted": "От функции", + "middle": " к рабочему ", + "main": "приложению." }, - "introHtml": "Прикладные модули закрывают функции подразделений: 1C, закупки, тендеры, юридический контур, цифровые двойники, инженерные модели и интеграции." + "introHtml": "Каждый модуль подключается к ролям, задачам, данным и сквозному ассистенту платформы. " } }, "editableFields": [ @@ -1719,79 +1747,6 @@ "enabled": true, "scopeIds": true }, - { - "region": "cViz", - "id": "publish-cta", - "type": "publishCta", - "template": "publish-cta.html", - "adminLabel": "Финальный CTA перед тарифами", - "anchor": "hero", - "content": { - "cta": { - "heading": { - "muted": "Подключить.", - "middle": "Поставить задачу.", - "main": "Опубликовать." - }, - "intro": "Единый путь от разработки до продакшена.", - "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", - "href": "index.html#hero", - "buttonLabel": "Встать в лист ожидания" - } - }, - "editableFields": [ - { - "path": "content.cta.heading.muted", - "label": "CTA: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.middle", - "label": "CTA: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.main", - "label": "CTA: основная строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.intro", - "label": "CTA: вводный текст", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.detailHtml", - "label": "CTA: пояснение", - "kind": "html", - "renderAs": "html", - "group": "CTA" - }, - { - "path": "content.cta.href", - "label": "CTA: ссылка", - "kind": "url", - "renderAs": "attr", - "group": "CTA" - }, - { - "path": "content.cta.buttonLabel", - "label": "CTA: кнопка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - } - ], - "enabled": true - }, { "region": "cViz", "id": "faq", @@ -1811,44 +1766,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1988,24 +1959,159 @@ ], "enabled": true }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Собрать контур. ", + "main": "Запустить." + }, + "intro": "Единый путь от доступа к модулю до рабочего контура предприятия. Hub для входа, Engine для сборки, Ops для управления.", + "detailHtml": "Модульный доступ, документация и рабочие пространства.\nПодключение прикладных модулей и ролей по контурам.\nЗакрытый инвайт для пилотных внедрений.", + "href": "index.html#hero", + "buttonLabel": "Запросить инвайт " + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + }, { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -2296,110 +2402,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -2578,13 +2583,84 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": false + }, + { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -2643,18 +2719,18 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true + ] }, { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -2662,386 +2738,374 @@ "messagePlaceholder": "Сообщение (необязательно)", "namePlaceholder": "Ваше имя*", "emailPlaceholder": "Email для регистрации*", - "submitLabel": "Встать в лист ожидания", + "submitLabel": "Подать заявку", "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", - "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "betaCtaLabel": "Подать заявку?", + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { "enabled": true, - "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconSrc": "./assets/uploads/images/hero-waitlist/dclogo_white_alpha-mquue8ar.png", "iconAlt": "Иконка NODE.DC", "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", "wordmarkAlt": "Логотип NODE.DC", - "release": "Бета-релиз: июль 2026", - "heading": "Ранний доступ", - "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + "release": "Selfhost платформа ", + "heading": "Запросить DEMO", + "description": "NODE.DC - платформа для задач, процессов, данных, агентов и инженерных модулей." + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -3054,22 +3118,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -3153,53 +3221,63 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", "contactLinks": [ { - "label": "Twitter", - "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "label": "DCTOUCH", + "href": "https://www.dctouch.ru/", + "target": "_blank", + "enabled": true }, { - "label": "Instagram", - "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "label": "Telegram", + "href": "https://t.me/dcconstructions", + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": false }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": false } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -3250,7 +3328,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -3274,7 +3352,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -3289,7 +3368,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -3313,15 +3392,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/index.html b/index.html index 662a16f..780c240 100644 --- a/index.html +++ b/index.html @@ -67,11 +67,11 @@ - +
K)return}else if(K>G)return}let J=this.config.vertical?!this.config.scrollInput?$.deltaY:Math.abs($.deltaY)>Math.abs($.deltaX)?$.deltaY:$.deltaX:!this.config.scrollInput?$.deltaX:Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY,H=this.config.variableWidth?this.config.scrollSensitivity:this.config.scrollSensitivity*0.001,Z=J*H,q=this.target+Z;if(!this.config.infinite){if(q>0)q=0;else if(q0)this.target=0;else if(this.target0)this.target=0;else if(this.target{let J=this.config.vertical?this.current*this.viewport.itemHeight:this.current*this.viewport.itemWidth,H=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=H,J})}#C(){this.parallaxValues=this.items.map((Q,$)=>{let J=this.current+$,H=QQ(J,this.items.length)-$,Z=this.config.vertical?this.viewport.itemHeight:this.viewport.itemWidth,q=H*Z,K=this.config.vertical?`translateY(${q}px)`:`translateX(${q}px)`;return Q.style.transform=K,QQ(J,this.items.length)})}#z(Q){if(this.config.vertical){let $=this.itemHeights[Q]??this.viewport.itemHeight??0;return(this.itemHeightOffsets[Q]??0)+$/2}else{let $=this.itemWidths[Q]??this.viewport.itemWidth??0;return(this.itemOffsets[Q]??0)+$/2}}#K(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,J=this.config.vertical?this.viewport.wrapperHeight/2:this.viewport.wrapperWidth/2,H=-(this.#z(Q)-J);if(this.config.infinite){let Z=Math.round((this.target-H)/$);H+=Z*$}else H=Math.min(0,Math.max(this.maxScroll,H));return H}#L(Q){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(Q%$+$)%$}#I(Q){let $=this.config.vertical?this.itemHeightOffsets:this.itemOffsets;if(!$.length)return 0;let J=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,H=this.config.infinite?this.#L(Q):Math.max(0,Math.min(Q,J)),Z=0,q=Number.POSITIVE_INFINITY;return $.forEach((K,G)=>{let U=this.#z(G),W=Math.abs(H-U);if(W{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!1,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); //# debugId=A656B71830305AD464756E2164756E21 diff --git a/assets/custom/js/interaction-overrides.js b/assets/custom/js/interaction-overrides.js index 72cc046..857403b 100644 --- a/assets/custom/js/interaction-overrides.js +++ b/assets/custom/js/interaction-overrides.js @@ -10,6 +10,8 @@ const DEFAULT_SCROLL_SPEED = 0.55; const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound"; const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound"; + const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound"; + const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound"; const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]); const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]); @@ -226,11 +228,62 @@ } function bindInteractiveScroll() { - bindGlobalSliderWheel(); - document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel); document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel); } + function bindOrderedSlider(surface) { + if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return; + + const slider = surface.__nodedcSlider; + if (!slider) return; + + surface[ORDERED_SLIDER_BOUND_FLAG] = true; + const items = Array.from(surface.children); + const startOffset = items.length > 1 ? -1 : 0; + + slider.config.infinite = true; + slider.target = startOffset; + slider.current = startOffset; + slider.speed = 0; + + items.forEach((item) => { + item.classList.remove("current"); + }); + + slider.resize?.(); + slider.update?.(); + } + + function bindOrderedSliders() { + document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider); + } + + function bindDockLink(link) { + if (!link || link[DOCK_LINK_BOUND_FLAG]) return; + + link[DOCK_LINK_BOUND_FLAG] = true; + link.addEventListener( + "click", + (event) => { + const href = String(link.getAttribute("href") || "").trim(); + const targetId = String(link.dataset.target || "").trim(); + const hasAppTarget = Boolean(targetId && document.getElementById(targetId)); + const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:"); + + if (!hasAppTarget && !isInertHref) return; + + event.preventDefault(); + window.requestAnimationFrame(() => link.blur()); + if (!hasAppTarget) event.stopPropagation(); + }, + { capture: true }, + ); + } + + function bindDockLinks() { + document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink); + } + function mediaExtension(src) { const cleanSrc = String(src || "").split(/[?#]/)[0]; const match = /\.([a-z0-9]+)$/i.exec(cleanSrc); @@ -313,6 +366,8 @@ () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, { once: true }, @@ -320,16 +375,22 @@ } else { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); } window.addEventListener("load", () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); window.setTimeout(() => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, 500); }); diff --git a/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg new file mode 100644 index 0000000..4c283bb Binary files /dev/null and b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg differ diff --git a/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png differ diff --git a/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png differ diff --git a/content/block-templates/home.json b/content/block-templates/home.json index d7e502f..5d12cd0 100644 --- a/content/block-templates/home.json +++ b/content/block-templates/home.json @@ -361,6 +361,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач." } }, "editableFields": [ @@ -377,24 +384,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -772,44 +800,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1030,30 +1074,99 @@ "enabled": true } }, + { + "key": "cViz:centralTextBlock:central-text-block.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Центральный текстовый блок", + "description": "central-text-block.html", + "block": { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + } + }, { "key": "cViz:pricingTable:pricing-table.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Тарифы: интро и таблица", + "title": "Тарифы: таблица", "description": "pricing-table.html", "block": { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -1344,110 +1457,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -1626,13 +1638,91 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": true + } + }, + { + "key": "cViz:screenshotCards:screenshot-cards.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Карточки скриншотов", + "description": "screenshot-cards.html", + "block": { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -1691,103 +1781,25 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true - } - }, - { - "key": "cViz:pricingIntro:pricing-intro.html", - "regionId": "cViz", - "regionLabel": "Секции", - "title": "Интро тарифов (устаревший дубль)", - "description": "pricing-intro.html", - "block": { - "region": "cViz", - "id": "pricing-intro", - "type": "pricingIntro", - "template": "pricing-intro.html", - "adminLabel": "Интро тарифов (устаревший дубль)", - "anchor": "waitlist", - "enabled": false, - "content": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." - }, - "editableFields": [ - { - "path": "content.eyebrow", - "label": "Надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.middle", - "label": "Заголовок: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.main", - "label": "Заголовок: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.introHtml", - "label": "Вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.tokenBillingHtml", - "label": "Оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.founderLimitHtml", - "label": "Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - } ] } }, { - "key": "cViz:waitlistFiles:waitlist-files.html", + "key": "cViz:waitlistFiles:request-demo-txt-files.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Форма ожидания и txt-файлы", - "description": "waitlist-files.html", + "title": "Запрос DEMO и TXT-файлы", + "description": "request-demo-txt-files.html", "block": { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -1799,249 +1811,336 @@ "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { @@ -2053,128 +2152,29 @@ "release": "Бета-релиз: июль 2026", "heading": "Ранний доступ", "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -2187,22 +2187,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -2300,27 +2304,32 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", @@ -2328,25 +2337,30 @@ { "label": "Twitter", "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Instagram", "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": true } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -2397,7 +2411,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -2421,7 +2435,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -2436,7 +2451,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -2460,15 +2475,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/content/pages/home.json b/content/pages/home.json index 18c9d52..4b57122 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -19,7 +19,7 @@ "target": "" }, { - "label": "Лист ожидания", + "label": "Запрос инвайта", "href": "index.html#hero", "target": "" }, @@ -62,7 +62,7 @@ { "enabled": true, "title": "NODE.DC", - "href": "#hero", + "href": "https://id.nodedc.ru/", "linkTarget": "", "targetId": "app-data", "iconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", @@ -74,7 +74,7 @@ { "enabled": true, "title": "Корзина", - "href": "", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -87,7 +87,7 @@ }, "assets": { "webglModelSrc": "./assets/custom/icon.glb", - "logoPng": "./assets/custom/logo.png", + "logoPng": "./assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg", "logoPngAlt": "Логотип NODE.DC", "appIconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", "appIconAlt": "Иконка NODE.DC", @@ -204,7 +204,7 @@ "itemTemplate": { "enabled": true, "title": "Новое приложение", - "href": "#hero", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -345,7 +345,7 @@ "id": "hero-waitlist", "type": "heroWaitlist", "template": "theses-request-demo.html", - "adminLabel": "ТЕЗИСЫ + ЗАПРОС ДЕМО", + "adminLabel": "ТЕЗИСЫ + ЗАПРОС DEMO", "anchor": "hero", "content": { "heading": { @@ -664,6 +664,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Hub, ", + "main": "Engine, Ops." + }, + "introHtml": "Единая логика доступа, разработки и управления процессами внутри enterprise-контура. " } }, "editableFields": [ @@ -680,24 +687,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -906,11 +934,11 @@ }, "bottomInfo": { "heading": { - "muted": "Hub.", - "middle": " Контур", + "muted": "Единый", + "middle": " контур", "main": "доступа." }, - "introHtml": "Централизованный запуск приложений, управление ролями, группами и доступом к каждому рабочему модулю." + "introHtml": "Администрирование\nНазначение ролей и управление пользователями по группам и подразделениям.\nEnterprise-контуры\nкоманд.\nРаздельные конфигурации доступа для инженерных, финансовых, юридических и закупочных\nТонкая настройка\nИндивидуальные права на отдельные приложения, функции и рабочие области." } }, "editableFields": [ @@ -1189,11 +1217,11 @@ }, "bottomInfo": { "heading": { - "muted": "Engine. ", - "middle": "Workflow ", - "main": "и агенты." + "muted": "От задачи ", + "middle": "к рабочему ", + "main": "сценарию." }, - "introHtml": "Workflow можно собрать вручную или через ассистента: от текстового задания до готовой нодовой схемы и подключенного интерфейса." + "introHtml": "Нодовый редактор\nВизуальная разработка процессов, связей и переходов между узлами.\nКомпонентная библиотека\nГотовые узлы для API, данных, логики, обработки, визуализации и внешних систем.\nПередача в Ops\nРезультаты процессов, отчеты, статусы и интерфейсы переходят в операционный слой." } }, "editableFields": [ @@ -1473,11 +1501,11 @@ }, "bottomInfo": { "heading": { - "muted": "OPS", - "middle": "Контроль ", - "main": "процессов." + "muted": "Единый ", + "middle": "операционный ", + "main": "контур." }, - "introHtml": "Операционная среда для работы людей, агентов и прикладных контуров в рамках проектов, подразделений и процессов." + "introHtml": "Люди и агенты\nПостановка задач, декомпозиция, отчеты, согласования и контроль исполнения.\nКонтекст предприятия\nПроцессы, кодовая база, модели, документы и сервисные сценарии связаны с задачами.\nУправление действиями\nАссистент может готовить материалы, инициировать изменения и передавать действия между\nслоями при наличии прав." } }, "editableFields": [ @@ -1614,11 +1642,11 @@ }, "bottomInfo": { "heading": { - "muted": "Модули. ", - "middle": "Прикладной ", - "main": "контур." + "muted": "От функции", + "middle": " к рабочему ", + "main": "приложению." }, - "introHtml": "Прикладные модули закрывают функции подразделений: 1C, закупки, тендеры, юридический контур, цифровые двойники, инженерные модели и интеграции." + "introHtml": "Каждый модуль подключается к ролям, задачам, данным и сквозному ассистенту платформы. " } }, "editableFields": [ @@ -1719,79 +1747,6 @@ "enabled": true, "scopeIds": true }, - { - "region": "cViz", - "id": "publish-cta", - "type": "publishCta", - "template": "publish-cta.html", - "adminLabel": "Финальный CTA перед тарифами", - "anchor": "hero", - "content": { - "cta": { - "heading": { - "muted": "Подключить.", - "middle": "Поставить задачу.", - "main": "Опубликовать." - }, - "intro": "Единый путь от разработки до продакшена.", - "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", - "href": "index.html#hero", - "buttonLabel": "Встать в лист ожидания" - } - }, - "editableFields": [ - { - "path": "content.cta.heading.muted", - "label": "CTA: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.middle", - "label": "CTA: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.main", - "label": "CTA: основная строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.intro", - "label": "CTA: вводный текст", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.detailHtml", - "label": "CTA: пояснение", - "kind": "html", - "renderAs": "html", - "group": "CTA" - }, - { - "path": "content.cta.href", - "label": "CTA: ссылка", - "kind": "url", - "renderAs": "attr", - "group": "CTA" - }, - { - "path": "content.cta.buttonLabel", - "label": "CTA: кнопка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - } - ], - "enabled": true - }, { "region": "cViz", "id": "faq", @@ -1811,44 +1766,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1988,24 +1959,159 @@ ], "enabled": true }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Собрать контур. ", + "main": "Запустить." + }, + "intro": "Единый путь от доступа к модулю до рабочего контура предприятия. Hub для входа, Engine для сборки, Ops для управления.", + "detailHtml": "Модульный доступ, документация и рабочие пространства.\nПодключение прикладных модулей и ролей по контурам.\nЗакрытый инвайт для пилотных внедрений.", + "href": "index.html#hero", + "buttonLabel": "Запросить инвайт " + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + }, { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -2296,110 +2402,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -2578,13 +2583,84 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": false + }, + { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -2643,18 +2719,18 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true + ] }, { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -2662,386 +2738,374 @@ "messagePlaceholder": "Сообщение (необязательно)", "namePlaceholder": "Ваше имя*", "emailPlaceholder": "Email для регистрации*", - "submitLabel": "Встать в лист ожидания", + "submitLabel": "Подать заявку", "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", - "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "betaCtaLabel": "Подать заявку?", + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { "enabled": true, - "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconSrc": "./assets/uploads/images/hero-waitlist/dclogo_white_alpha-mquue8ar.png", "iconAlt": "Иконка NODE.DC", "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", "wordmarkAlt": "Логотип NODE.DC", - "release": "Бета-релиз: июль 2026", - "heading": "Ранний доступ", - "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + "release": "Selfhost платформа ", + "heading": "Запросить DEMO", + "description": "NODE.DC - платформа для задач, процессов, данных, агентов и инженерных модулей." + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -3054,22 +3118,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -3153,53 +3221,63 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", "contactLinks": [ { - "label": "Twitter", - "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "label": "DCTOUCH", + "href": "https://www.dctouch.ru/", + "target": "_blank", + "enabled": true }, { - "label": "Instagram", - "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "label": "Telegram", + "href": "https://t.me/dcconstructions", + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": false }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": false } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -3250,7 +3328,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -3274,7 +3352,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -3289,7 +3368,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -3313,15 +3392,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/index.html b/index.html index 662a16f..780c240 100644 --- a/index.html +++ b/index.html @@ -67,11 +67,11 @@ - +
{let J=this.current,H=this.config.vertical?this.itemHeightOffsets:this.itemOffsets,Z=this.config.vertical?`translateY(${J}px)`:`translateX(${J}px)`;return Q.style.transform=Z,J+H[$]})}#E(){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;this.parallaxValues=this.items.map(($,J)=>{let H=(this.config.vertical?this.itemHeightOffsets:this.itemOffsets)[J]??0,Z=QQ(this.current+H,Q)-H,q=this.config.vertical?`translateY(${Z}px)`:`translateX(${Z}px)`;return $.style.transform=q,QQ(this.current+H,Q)})}#O(){this.#$=nK(this.#$,this.speed,1/this.config.lerpFactor,this.deltaTime),this.speed*=this.config.speedDecay}goToNext(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide+1)%this.items.length:Math.min(this.currentSlide+1,this.items.length-1);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.max(this.maxScroll,Math.round(this.target-1));else this.target=Math.round(this.target-1)}goToPrev(){if(this.config.variableWidth){let Q=this.config.infinite?(this.currentSlide-1+this.items.length)%this.items.length:Math.max(this.currentSlide-1,0);this.target=this.#K(Q)}else if(!this.config.infinite)this.target=Math.min(0,Math.round(this.target+1));else this.target=Math.round(this.target+1)}goToIndex(Q){if(this.config.variableWidth){let $=this.config.infinite?(Q%this.items.length+this.items.length)%this.items.length:Math.min(Math.max(Q,0),this.items.length-1);this.target=this.#K($)}else this.target=-Q}set snap(Q){this.config.snap=Q}getProgress(){if(this.config.variableWidth){let $=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1;return(-this.current%$+$)%$/$}let Q=this.items.length;return Math.abs(this.current)%Q/Q}destroy(){if(this.kill(),window.removeEventListener("mousemove",(Q)=>this.#U(Q)),window.removeEventListener("mouseup",()=>this.#W()),window.removeEventListener("touchmove",(Q)=>{let $=Q.touches[0];this.#U($)}),window.removeEventListener("touchend",()=>this.#W()),this.wrapper.removeEventListener("mousedown",(Q)=>this.#G(Q)),this.wrapper.removeEventListener("touchstart",(Q)=>{let $=Q.touches[0];this.#G($)}),this.resizeTimeout)clearTimeout(this.resizeTimeout);if(this.virtualScroll&&this.config.scrollInput)this.virtualScroll.destroy();if(this.observer)this.observer.disconnect()}get currentSlide(){return this.#q}#X(Q){if(this.#q!==Q)this.#j=this.#q,this.#q=Q,this.onSlideChange?.(this.#q,this.#j)}kill(){this.#J=!1,this.items.forEach((Q)=>{Q.style.transform=""}),this.current=0,this.target=0,this.speed=0,this.#$=0,this.touchPreviousX=void 0,this.touchPreviousY=void 0,this.isTouching=!1}init(){this.#J=!0,this.#Q=performance.now()}set paused(Q){this.#Z=Q}get paused(){return this.#Z}get progress(){if(this.config.variableWidth){let Q=this.config.vertical?this.viewport.totalHeight||1:this.viewport.totalWidth||1,$=-this.target;if(this.config.infinite)return($%Q+Q)%Q/Q;else return Math.max(0,Math.min($,Q))/Q}else if(this.config.infinite){let Q=-this.target,$=this.items.length;return(Q%$+$)%$/($-1)}else{let Q=Math.abs(this.current),$=Math.abs(this.maxScroll);return Math.max(0,Math.min(1,Q/$))}}resize(){if(this.#B(),this.config.variableWidth&&!this.config.infinite&&this.items.length>0){let J=this.currentSlide,H=this.#K(J);if(this.target=H,Math.abs(this.current-this.target)<1)this.current=H}let Q=this.#J,$=this.isVisible;this.#J=!0,this.isVisible=!0,this.update(),this.#J=Q,this.isVisible=$}}var JQ=rK;function aK(Q,$){let H=!1,Z=null,q=Q.closest("[data-module='app']"),K=()=>{if(H)return;H=!0;let G=Array.from(Q.children),U="current",W=80,X=(V)=>{setTimeout(()=>{G[V]?.querySelectorAll("[data-unread]").forEach((Y)=>Y.remove())},W)},j=new JQ(Q,{vertical:!0,infinite:!1,snap:!0,dragSensitivity:0.01,onSlideChange:(V,Y)=>{G[Y]?.classList.remove(U),G[V]?.classList.add(U),X(V),y$.CURRENT_MAIL=V}});G[j.currentSlide]?.classList.add(U),X(j.currentSlide),S$.add(()=>{j.update()});let L=8,B=G.length,M=(V,Y)=>-Y+B*Math.round((V+Y)/B),I=[],z=null,R=null,F=()=>{if(z)document.removeEventListener("pointermove",z),z=null;if(R)document.removeEventListener("pointerup",R),R=null};G.forEach((V,Y)=>{let N=0,C=0,D=!1,O=(w)=>{let x=w.clientX-N,S=w.clientY-C;if(Math.abs(x)>L||Math.abs(S)>L)D=!0},A=()=>{if(F(),!D)j.target=M(j.current,Y)},P=(w)=>{N=w.clientX,C=w.clientY,D=!1,z=O,R=A,document.addEventListener("pointermove",O),document.addEventListener("pointerup",A)};V.addEventListener("pointerdown",P),I.push(()=>V.removeEventListener("pointerdown",P))}),Z=()=>{F(),I.forEach((V)=>V()),j.destroy()}};if(!q)K();else if(q.dataset.appOpened==="true")K();else q.addEventListener("app:opened",K,{once:!0});return()=>{q?.removeEventListener("app:opened",K),Z?.()}}var SH={};r(SH,{default:()=>tK});function tK(Q,$){let H=Array.from(Q.children),Z=Q.closest("[data-module='app']"),q=0,K=!1,G=(W)=>{H[q]?.style.setProperty("opacity","0"),q=W,H[W]?.style.setProperty("opacity","1")},U=()=>{if(K)return;K=!0,y$.on("CURRENT_MAIL",G)};if(!Z||Z.dataset.appOpened==="true")U();else Z.addEventListener("app:opened",U,{once:!0});return()=>{if(Z?.removeEventListener("app:opened",U),K)y$.off("CURRENT_MAIL",G)}}var bH={};r(bH,{default:()=>eK});var E4=0.12,O4=-10,A4=10,P4=100;function eK(Q){let $=C9({easing:E4,element:window}),J=Q.style.transform,H=Q.style.willChange,Z=Q.style.backfaceVisibility,q=Q.style.transformStyle;Q.style.willChange="transform",Q.style.backfaceVisibility="hidden",Q.style.transformStyle="preserve-3d";let K=S$.add(()=>{let G=$.update(),U=G.x+G.dragX,X=(G.y+G.dragY)*O4,j=U*A4,L=`perspective(${P4}px) rotateX(${X.toFixed(3)}deg) rotateY(${j.toFixed(3)}deg)`;Q.style.transform=J?`${J} ${L}`:L});return()=>{K(),$.destroy(),Q.style.transform=J,Q.style.willChange=H,Q.style.backfaceVisibility=Z,Q.style.transformStyle=q}}var TH={};r(TH,{default:()=>$6});function $6(Q,$){y$.on("PAGE",(J)=>{console.log("page changed")})}var yH={};r(yH,{default:()=>Q6});function Q6(Q,$){let J=Array.from(Q.children);n.set(Q,{xPercent:150}),n.set(J,{visibility:"visible"}),setTimeout(()=>{n.to(Q,{xPercent:0,duration:0.6,ease:"expo.out"})},3200);let H=(Z)=>{n.killTweensOf(Z),n.to(Z,{xPercent:120,autoAlpha:0,duration:0.1,ease:"expo.out",onComplete:()=>{Z.remove()}})};Q.addEventListener("click",(Z)=>{let q=Z.target;if(!q)return;let K=q.closest("[data-close]");if(!K||!Q.contains(K))return;let G=K.closest('[data-module="notification"]');if(!(G instanceof HTMLElement))return;H(G)})}var fH={};r(fH,{default:()=>J6});var hH="current";function J6(Q,$){let J=Array.from(Q.children),H=new JQ(Q,{infinite:!0,scrollInput:!1,onSlideChange:(Z,q)=>{J[q]?.classList.remove(hH),J[Z]?.classList.add(hH)}});return Q.__nodedcSlider=H,J[H.currentSlide]?.classList.add(hH),S$.add(()=>{H.update()}),()=>{delete Q.__nodedcSlider,H.destroy()}}var _H={};r(_H,{default:()=>H6});function k4(Q){Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.left="-9999px",Q.style.top="-9999px",Q.style.width="1px"}var x4=(Q)=>{let $=Q.textContent;Q.textContent="";let J=document.createElement("span");J.textContent=$,Q.appendChild(J),k4(J);let H=document.createElement("span");return H.setAttribute("data-css","overflow-clip"),H.textContent=$,H.setAttribute("aria-hidden","true"),Q.appendChild(H),new L$(H,{type:"chars"})};function H6(Q){let $=x4(Q);l1(Q,{autoStart:!0,callback:({isIn:J})=>{if(J)n.to($.chars,{yPercent:0,stagger:0.02});else n.killTweensOf($.chars),n.set($.chars,{yPercent:100})}})}var vH={};r(vH,{default:()=>Z6});function Z6(Q,$){}var uH={};r(uH,{default:()=>q6});function w4(Q){return Array.from(Q)}function HQ(Q,$,J){return Math.min(J,Math.max($,Q))}function S4(Q,$,J,H){if($<=1)return H;let Z=Q/($-1),q=Math.abs(Z*2-1),K=q*q;return J+(H-J)*K}function b4(Q,$){let J=(Math.random()*2-1)*$;return Math.max(8,Q+J)}function T4(Q){let $=Math.max(1,Q),J=HQ(10/$,0.75,1.8),H=18*J,Z=56*J,q=HQ(420*J,280,700),G=(H+Z)/2*$,U=HQ(1400+G*1.2,1400,4200),W=HQ(120+$*3,80,260);return{fastStepMs:H,slowStepMs:Z,returnMs:q,loopGapMs:U,loopJitterMs:W}}function q6(Q){let $=Q.innerHTML,J=Q.textContent??"",H=w4(J),Z=H.filter((M)=>M.trim().length>0),q=T4(Z.length||H.length);if(!J.trim())return;let K=document.createElement("span");K.setAttribute("data-text-wave-original","true"),K.classList.add("opacity-0"),K.style.opacity="0",K.style.whiteSpace="pre-wrap",K.textContent=J;let G=document.createElement("span");if(G.setAttribute("data-text-wave-overlay","true"),G.setAttribute("aria-hidden","true"),G.style.position="absolute",G.style.inset="0",G.style.pointerEvents="none",G.style.whiteSpace="pre-wrap",H.forEach((M)=>{let I=document.createElement("span");I.setAttribute("data-text-wave-char","true"),I.style.display="inline-block",I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1",I.style.transition=`opacity ${q.returnMs}ms ease-in-out, filter ${q.returnMs}ms ease-in-out, scale ${q.returnMs}ms ease-in-out`,I.textContent=M===" "?" ":M,G.appendChild(I)}),getComputedStyle(Q).position==="static")Q.style.position="relative";Q.innerHTML="",Q.appendChild(K),Q.appendChild(G);let U=Array.from(G.querySelectorAll("[data-text-wave-char]")),W,X=[],j=0,L=()=>{if(W!==void 0)window.clearTimeout(W),W=void 0;X.forEach((M)=>window.clearTimeout(M)),X.length=0},B=()=>{if(!U.length)return;let M=j,I=U[M];I.style.opacity="0.62",I.style.filter="blur(1.3px)",I.style.scale="0.985";let z=window.setTimeout(()=>{I.style.opacity="1",I.style.filter="blur(0px)",I.style.scale="1"},q.returnMs);X.push(z);let R=M>=U.length-1;j=R?0:M+1;let F=R?b4(q.loopGapMs,q.loopJitterMs):S4(M,U.length,q.fastStepMs,q.slowStepMs);W=window.setTimeout(B,F)};return B(),()=>{L(),Q.innerHTML=$}}var mH={};r(mH,{default:()=>G6});var y4=new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1});function K6(Q){Q.textContent=y4.format(new Date)}function G6(Q,$){K6(Q);let J=setInterval(()=>K6(Q),60000);return()=>clearInterval(J)}var dH={};r(dH,{default:()=>U6});function U6(Q,$){let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});Q.textContent=H.format(new Date)}var cH={};r(cH,{default:()=>W6});var h4=500,f4=300,ZQ=new Set,a$=null,gH=!1;function _4(Q){if(Q instanceof HTMLVideoElement)return Q;return Q.querySelector("video")}function v4(Q){if(a$!==null)return;let $=()=>{let H=Array.from(ZQ).filter((Z)=>!Z.preloaded).sort((Z,q)=>Z.video.getBoundingClientRect().top+window.scrollY-(q.video.getBoundingClientRect().top+window.scrollY))[0];if(!H){if(a$!==null)window.clearInterval(a$),a$=null;return}H.preload()};a$=window.setInterval($,Q),$()}function u4(Q){if(gH)return;gH=!0;let $=()=>window.setTimeout(()=>v4(Q),f4);if(document.readyState==="complete")$();else window.addEventListener("load",$,{once:!0})}function W6(Q,$){let J=_4(Q);if(!J){console.warn('"video-handle" found no in/at the element.');return}let H=Number.parseInt($.stagger??"",10),Z=$.rootMargin??"200px";J.muted=!0,J.playsInline=!0,J.preload="none";let q={video:J,preloaded:!1,preload:()=>{if(q.preloaded)return;q.preloaded=!0,J.preload="auto";try{J.load()}catch{}}};ZQ.add(q),u4(Number.isFinite(H)?H:h4);let K=l1(Q,{autoStart:!0,once:!1,rootMargin:Z,callback:({isIn:G})=>{if(G){q.preload();let U=J.play();if(U&&typeof U.catch==="function")U.catch(()=>{})}else J.pause()}});t9(()=>{if(K.destroy(),J.pause(),ZQ.delete(q),ZQ.size===0&&a$!==null)window.clearInterval(a$),a$=null,gH=!1})}var pH={};r(pH,{default:()=>j6});var m4=0.6,d4=1;function g4(Q){return Math.max(0,Math.min(1,Q))}function c4(Q,$){let J=$?.top,H=$?.bottom;if(typeof J!=="number"||typeof H!=="number"||J===H)return 0;return g4((Q-J)/(H-J))}function X6(Q,$){if(Q==null||Q==="")return $;let J=Number(Q);return Number.isFinite(J)?J:$}function p4(Q){if(Q==null||Q==="")return null;let $=Q.split(",").map((Z)=>Z.trim());if($.length<2)return null;let J=Number($[0]),H=Number($[1]);if(!Number.isFinite(J)||!Number.isFinite(H))return null;return[J,H]}function j6(Q,$){let J=p4($.scale),H=J?J[0]:X6($.scaleMax,d4),Z=J?J[1]:X6($.scaleMin,m4),q=u7(Q,{bounds:[0,1],top:"bottom",bottom:"center",callback:(U)=>{let W=H+U*(Z-H);p8(W)}}),K=c4(S0.scroll,q?.bounds),G=H+K*(Z-H);return p8(G),()=>{p8(1)}}var oH={"./../alpha.ts":bJ,"./../app.ts":TJ,"./../apple-icon.ts":yJ,"./../btn.ts":hJ,"./../color-flip.ts":$H,"./../cycle.ts":QH,"./../date.ts":JH,"./../dock.ts":HH,"./../editable-text.ts":ZH,"./../features.ts":qH,"./../folder-wrap.ts":KH,"./../form-beta.ts":BH,"./../form.ts":MH,"./../founders-spots.ts":zH,"./../gpu-item.ts":NH,"./../gpu-object-rounded.ts":FH,"./../gpu-object.ts":RH,"./../gpu.ts":OH,"./../hg.ts":AH,"./../ho-scroll.ts":PH,"./../link.ts":kH,"./../list.ts":xH,"./../mail-list.ts":wH,"./../mail-view.ts":SH,"./../mouse-follow.ts":bH,"./../nav.ts":TH,"./../notification-w.ts":yH,"./../slider.ts":fH,"./../split.ts":_H,"./../test.ts":vH,"./../text-wave.ts":uH,"./../time.ts":mH,"./../today.ts":dH,"./../video-handle.ts":cH,"./../webgl-item.ts":YH,"./../webgl-object-rounded.ts":DH,"./../webgl-object.ts":VH,"./../webgl-target.ts":pH,"./../webgl.ts":EH};function B6(Q="module"){return Array.from(document.querySelectorAll(`[data-${Q}]`)).map(($)=>{let J=$,H=J.dataset[Q];if(J._moduleInitialized)return null;let Z=oH[`./../${H}.ts`]?`./../${H}.ts`:`./../${H}.js`;if(oH[Z]){let q=oH[Z].default;if(typeof q==="function")try{J._moduleInitialized=!0;let K=q(J,J.dataset);if(typeof K==="function")Bq(K);return K}catch(K){return delete J._moduleInitialized,console.warn(`Failed to call default function for ${Q} "${H}":`,K),null}else return console.warn(`Default export is not a function for ${Q} "${H}"`),null}else return console.warn(`${Q} not found: "${H}"`),null}).filter(($)=>$!==null)}class A9{static instance;groups=[];constructor(){}static getInstance(){if(!A9.instance)A9.instance=new A9;return A9.instance}configsMatch(Q,$){return Q.root===$.root&&Q.rootMargin===$.rootMargin}handleIntersection(Q){Q.forEach(($)=>{let J=this.groups.find((W)=>{return Array.from(W.elements.keys()).includes($.target)});if(!J)return;let H=$.target,Z=J.elements.get(H);if(!Z)return;let{isIntersecting:q,intersectionRatio:K,boundingClientRect:G}=$,U=-1;if(Z.lastDirection!==void 0)U=q?G.top>0?1:-1:G.top>0?-1:1;if(Z.lastDirection=U,q){if(Z.callbacks.isIn?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!0}),Z.once)this.removeElement(H)}else Z.callbacks.isOut?.({entry:$,direction:U}),Z.callbacks.callback?.({entry:$,direction:U,isIn:!1})})}addElement(Q,$,J){this.removeElement(Q);let H=this.groups.find((Z)=>this.configsMatch(Z.config,$));if(!H){let Z=new IntersectionObserver((q)=>this.handleIntersection(q),{...$,threshold:[0]});H={config:$,observer:Z,elements:new Map},this.groups.push(H)}return H.elements.set(Q,{callbacks:J,once:$.once||!1,lastDirection:void 0}),H.observer.observe(Q),H}removeElement(Q){let $=this.groups.find((J)=>J.elements.has(Q));if(!$)return;if($.observer.unobserve(Q),$.elements.delete(Q),$.elements.size===0)$.observer.disconnect(),this.groups=this.groups.filter((J)=>J!==$)}}class g8{element;#$;#H;isIn(Q){}isOut(Q){}inView;callback;#Q=null;#J=null;constructor(Q,$={root:null,rootMargin:"0px",threshold:0,autoStart:!1,once:!1,callback:void 0}){if(this.element=Q,this.#$=$,this.inView=!1,this.callback=$.callback||(()=>{}),$.autoStart)this.start()}start(){this.#H=A9.getInstance().addElement(this.element,this.#$,{isIn:(Q)=>{this.inView=!0,this.isIn?.(Q)},isOut:(Q)=>{this.inView=!1,this.isOut?.(Q)},callback:this.callback})}stop(){A9.getInstance().removeElement(this.element)}destroy(){this.stop(),this.#Q=null,this.#J=null}}var L6=(Q)=>{let $=Q.getBoundingClientRect();return{top:$.top+S0.scroll,bottom:$.bottom+S0.scroll,width:$.width,height:$.height,left:$.left,right:$.right,wh:k1.height,ww:k1.width,offset:$.top+S0.scroll,centery:k1.height/2-$.height/2-$.top-S0.scroll,centerx:-k1.width/2+$.left+$.width/2}};var o4={bounds:[0,1],top:"bottom",bottom:"top",callback:void 0};class SJ extends g8{value=0;init=!1;isIn(Q){this.#J()}isOut(Q){}bounds;config;resize;handleScroll;#$;#H;constructor(Q,$={}){super(Q,{autoStart:!0,once:!1,threshold:0});this.element=Q,this.config={...o4,...$},this.#Q(),this.#$=S0.add(this.#J.bind(this)),this.#H=k1.add(this.#Q.bind(this)),this.init=!0,this.#J()}#Q=()=>{this.bounds=s4(this.element,this.config),this.resize?.(this.bounds),this.#J()};#J(){if(!this.inView||!this.init)return;this.value=M$(0,1,c7(S0.scroll,this.bounds.top,this.bounds.bottom,this.config.bounds[0],this.config.bounds[1])),this.handleScroll?.(this.value),this.config.callback?.(this.value)}destroy(){this.config.callback=void 0,this.#$(),this.#H(),super.destroy()}}function s4(Q,$){let J=L6(Q),{top:H,bottom:Z,wh:q}=J,K=q/2;return J.top=H-($.top==="center"?K:$.top==="bottom"?q:0),J.bottom=Z-($.bottom==="center"?K:$.bottom==="bottom"?q:0),J}class I6{scroll=S0;constructor(){B6(),zq(),Lq()}}var l4=new I6;})(); //# debugId=A656B71830305AD464756E2164756E21 diff --git a/assets/custom/js/interaction-overrides.js b/assets/custom/js/interaction-overrides.js index 72cc046..857403b 100644 --- a/assets/custom/js/interaction-overrides.js +++ b/assets/custom/js/interaction-overrides.js @@ -10,6 +10,8 @@ const DEFAULT_SCROLL_SPEED = 0.55; const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound"; const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound"; + const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound"; + const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound"; const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]); const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]); @@ -226,11 +228,62 @@ } function bindInteractiveScroll() { - bindGlobalSliderWheel(); - document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel); document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel); } + function bindOrderedSlider(surface) { + if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return; + + const slider = surface.__nodedcSlider; + if (!slider) return; + + surface[ORDERED_SLIDER_BOUND_FLAG] = true; + const items = Array.from(surface.children); + const startOffset = items.length > 1 ? -1 : 0; + + slider.config.infinite = true; + slider.target = startOffset; + slider.current = startOffset; + slider.speed = 0; + + items.forEach((item) => { + item.classList.remove("current"); + }); + + slider.resize?.(); + slider.update?.(); + } + + function bindOrderedSliders() { + document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider); + } + + function bindDockLink(link) { + if (!link || link[DOCK_LINK_BOUND_FLAG]) return; + + link[DOCK_LINK_BOUND_FLAG] = true; + link.addEventListener( + "click", + (event) => { + const href = String(link.getAttribute("href") || "").trim(); + const targetId = String(link.dataset.target || "").trim(); + const hasAppTarget = Boolean(targetId && document.getElementById(targetId)); + const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:"); + + if (!hasAppTarget && !isInertHref) return; + + event.preventDefault(); + window.requestAnimationFrame(() => link.blur()); + if (!hasAppTarget) event.stopPropagation(); + }, + { capture: true }, + ); + } + + function bindDockLinks() { + document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink); + } + function mediaExtension(src) { const cleanSrc = String(src || "").split(/[?#]/)[0]; const match = /\.([a-z0-9]+)$/i.exec(cleanSrc); @@ -313,6 +366,8 @@ () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, { once: true }, @@ -320,16 +375,22 @@ } else { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); } window.addEventListener("load", () => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); window.setTimeout(() => { hydrateMediaHandles(); bindInteractiveScroll(); + bindOrderedSliders(); + bindDockLinks(); bindAdaptiveVideos(); }, 500); }); diff --git a/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg new file mode 100644 index 0000000..4c283bb Binary files /dev/null and b/assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg differ diff --git a/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/static-elements/dclogo_darck-mqvzlug7.png differ diff --git a/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png new file mode 100644 index 0000000..ffef888 Binary files /dev/null and b/assets/uploads/images/waitlist-files/dclogo_darck-mqvf3vwm.png differ diff --git a/content/block-templates/home.json b/content/block-templates/home.json index d7e502f..5d12cd0 100644 --- a/content/block-templates/home.json +++ b/content/block-templates/home.json @@ -361,6 +361,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач." } }, "editableFields": [ @@ -377,24 +384,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -772,44 +800,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1030,30 +1074,99 @@ "enabled": true } }, + { + "key": "cViz:centralTextBlock:central-text-block.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Центральный текстовый блок", + "description": "central-text-block.html", + "block": { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + } + }, { "key": "cViz:pricingTable:pricing-table.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Тарифы: интро и таблица", + "title": "Тарифы: таблица", "description": "pricing-table.html", "block": { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -1344,110 +1457,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -1626,13 +1638,91 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": true + } + }, + { + "key": "cViz:screenshotCards:screenshot-cards.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Карточки скриншотов", + "description": "screenshot-cards.html", + "block": { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -1691,103 +1781,25 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true - } - }, - { - "key": "cViz:pricingIntro:pricing-intro.html", - "regionId": "cViz", - "regionLabel": "Секции", - "title": "Интро тарифов (устаревший дубль)", - "description": "pricing-intro.html", - "block": { - "region": "cViz", - "id": "pricing-intro", - "type": "pricingIntro", - "template": "pricing-intro.html", - "adminLabel": "Интро тарифов (устаревший дубль)", - "anchor": "waitlist", - "enabled": false, - "content": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." - }, - "editableFields": [ - { - "path": "content.eyebrow", - "label": "Надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.middle", - "label": "Заголовок: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.heading.main", - "label": "Заголовок: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.introHtml", - "label": "Вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.tokenBillingHtml", - "label": "Оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.founderLimitHtml", - "label": "Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - } ] } }, { - "key": "cViz:waitlistFiles:waitlist-files.html", + "key": "cViz:waitlistFiles:request-demo-txt-files.html", "regionId": "cViz", "regionLabel": "Секции", - "title": "Форма ожидания и txt-файлы", - "description": "waitlist-files.html", + "title": "Запрос DEMO и TXT-файлы", + "description": "request-demo-txt-files.html", "block": { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -1799,249 +1811,336 @@ "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { @@ -2053,128 +2152,29 @@ "release": "Бета-релиз: июль 2026", "heading": "Ранний доступ", "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -2187,22 +2187,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -2300,27 +2304,32 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", @@ -2328,25 +2337,30 @@ { "label": "Twitter", "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Instagram", "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": true } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -2397,7 +2411,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -2421,7 +2435,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -2436,7 +2451,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -2460,15 +2475,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/content/pages/home.json b/content/pages/home.json index 18c9d52..4b57122 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -19,7 +19,7 @@ "target": "" }, { - "label": "Лист ожидания", + "label": "Запрос инвайта", "href": "index.html#hero", "target": "" }, @@ -62,7 +62,7 @@ { "enabled": true, "title": "NODE.DC", - "href": "#hero", + "href": "https://id.nodedc.ru/", "linkTarget": "", "targetId": "app-data", "iconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", @@ -74,7 +74,7 @@ { "enabled": true, "title": "Корзина", - "href": "", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif", @@ -87,7 +87,7 @@ }, "assets": { "webglModelSrc": "./assets/custom/icon.glb", - "logoPng": "./assets/custom/logo.png", + "logoPng": "./assets/uploads/images/static-elements/2025-05-14-23.46.35-mqvznn10.jpg", "logoPngAlt": "Логотип NODE.DC", "appIconSrc": "./assets/uploads/images/static-elements/dclogo_white_alpha-mqus5if2.png", "appIconAlt": "Иконка NODE.DC", @@ -204,7 +204,7 @@ "itemTemplate": { "enabled": true, "title": "Новое приложение", - "href": "#hero", + "href": "javascript:void(0)", "linkTarget": "", "targetId": "", "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", @@ -345,7 +345,7 @@ "id": "hero-waitlist", "type": "heroWaitlist", "template": "theses-request-demo.html", - "adminLabel": "ТЕЗИСЫ + ЗАПРОС ДЕМО", + "adminLabel": "ТЕЗИСЫ + ЗАПРОС DEMO", "anchor": "hero", "content": { "heading": { @@ -664,6 +664,13 @@ ], "scroll": { "speed": 0.55 + }, + "bottomInfo": { + "heading": { + "muted": "Hub, ", + "main": "Engine, Ops." + }, + "introHtml": "Единая логика доступа, разработки и управления процессами внутри enterprise-контура. " } }, "editableFields": [ @@ -680,24 +687,45 @@ }, { "path": "content.heading.muted", - "label": "Заголовок: приглушённая строка", + "label": "Приглушённая строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.heading.main", - "label": "Заголовок: основная строка", + "label": "Основная строка", "kind": "text", "renderAs": "text", - "group": "Заголовок" + "group": "Верхний информационный блок" }, { "path": "content.introHtml", "label": "Вводный текст", "kind": "html", "renderAs": "html", - "group": "Заголовок" + "group": "Верхний информационный блок" + }, + { + "path": "content.bottomInfo.heading.muted", + "label": "Приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.heading.main", + "label": "Основная строка", + "kind": "text", + "renderAs": "text", + "group": "Нижний информационный блок" + }, + { + "path": "content.bottomInfo.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Нижний информационный блок" }, { "path": "content.sliderItems", @@ -906,11 +934,11 @@ }, "bottomInfo": { "heading": { - "muted": "Hub.", - "middle": " Контур", + "muted": "Единый", + "middle": " контур", "main": "доступа." }, - "introHtml": "Централизованный запуск приложений, управление ролями, группами и доступом к каждому рабочему модулю." + "introHtml": "Администрирование\nНазначение ролей и управление пользователями по группам и подразделениям.\nEnterprise-контуры\nкоманд.\nРаздельные конфигурации доступа для инженерных, финансовых, юридических и закупочных\nТонкая настройка\nИндивидуальные права на отдельные приложения, функции и рабочие области." } }, "editableFields": [ @@ -1189,11 +1217,11 @@ }, "bottomInfo": { "heading": { - "muted": "Engine. ", - "middle": "Workflow ", - "main": "и агенты." + "muted": "От задачи ", + "middle": "к рабочему ", + "main": "сценарию." }, - "introHtml": "Workflow можно собрать вручную или через ассистента: от текстового задания до готовой нодовой схемы и подключенного интерфейса." + "introHtml": "Нодовый редактор\nВизуальная разработка процессов, связей и переходов между узлами.\nКомпонентная библиотека\nГотовые узлы для API, данных, логики, обработки, визуализации и внешних систем.\nПередача в Ops\nРезультаты процессов, отчеты, статусы и интерфейсы переходят в операционный слой." } }, "editableFields": [ @@ -1473,11 +1501,11 @@ }, "bottomInfo": { "heading": { - "muted": "OPS", - "middle": "Контроль ", - "main": "процессов." + "muted": "Единый ", + "middle": "операционный ", + "main": "контур." }, - "introHtml": "Операционная среда для работы людей, агентов и прикладных контуров в рамках проектов, подразделений и процессов." + "introHtml": "Люди и агенты\nПостановка задач, декомпозиция, отчеты, согласования и контроль исполнения.\nКонтекст предприятия\nПроцессы, кодовая база, модели, документы и сервисные сценарии связаны с задачами.\nУправление действиями\nАссистент может готовить материалы, инициировать изменения и передавать действия между\nслоями при наличии прав." } }, "editableFields": [ @@ -1614,11 +1642,11 @@ }, "bottomInfo": { "heading": { - "muted": "Модули. ", - "middle": "Прикладной ", - "main": "контур." + "muted": "От функции", + "middle": " к рабочему ", + "main": "приложению." }, - "introHtml": "Прикладные модули закрывают функции подразделений: 1C, закупки, тендеры, юридический контур, цифровые двойники, инженерные модели и интеграции." + "introHtml": "Каждый модуль подключается к ролям, задачам, данным и сквозному ассистенту платформы. " } }, "editableFields": [ @@ -1719,79 +1747,6 @@ "enabled": true, "scopeIds": true }, - { - "region": "cViz", - "id": "publish-cta", - "type": "publishCta", - "template": "publish-cta.html", - "adminLabel": "Финальный CTA перед тарифами", - "anchor": "hero", - "content": { - "cta": { - "heading": { - "muted": "Подключить.", - "middle": "Поставить задачу.", - "main": "Опубликовать." - }, - "intro": "Единый путь от разработки до продакшена.", - "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", - "href": "index.html#hero", - "buttonLabel": "Встать в лист ожидания" - } - }, - "editableFields": [ - { - "path": "content.cta.heading.muted", - "label": "CTA: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.middle", - "label": "CTA: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.heading.main", - "label": "CTA: основная строка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.intro", - "label": "CTA: вводный текст", - "kind": "text", - "renderAs": "text", - "group": "CTA" - }, - { - "path": "content.cta.detailHtml", - "label": "CTA: пояснение", - "kind": "html", - "renderAs": "html", - "group": "CTA" - }, - { - "path": "content.cta.href", - "label": "CTA: ссылка", - "kind": "url", - "renderAs": "attr", - "group": "CTA" - }, - { - "path": "content.cta.buttonLabel", - "label": "CTA: кнопка", - "kind": "text", - "renderAs": "text", - "group": "CTA" - } - ], - "enabled": true - }, { "region": "cViz", "id": "faq", @@ -1811,44 +1766,60 @@ "windowTitle": "FAQ", "faq": [ { - "question": "Это влияет на производительность?", - "answerHtml": "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код. Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты." + "question": "Что входит в NODE.DC?", + "answerHtml": "NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения." }, { - "question": "Где размещаются мои файлы?", - "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат." + "question": "Зачем нужен Hub?", + "answerHtml": "Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы." }, { - "question": "Что делать, если я опубликовал не те файлы?", - "answerHtml": "В панели деплоя есть мгновенный откат. Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново." + "question": "Как связаны Hub, Engine и Ops?", + "answerHtml": "Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур." }, { - "question": "Что такое ИИ-агент Webflow?", - "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку." + "question": "Что создается в Engine?", + "answerHtml": "В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию." }, { - "question": "Что такое собственная база знаний?", - "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций. WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно. Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу." + "question": "Что фиксируется в Ops?", + "answerHtml": "В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы." }, { - "question": "Как использовать это с Webflow?", - "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания. В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта. Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта." + "question": "Как работает сквозной ассистент?", + "answerHtml": "Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях." }, { - "question": "Какие ИИ-модели доступны?", - "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini. Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель." + "question": "Как работают прикладные модули?", + "answerHtml": "Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops." }, { - "question": "Как это работает?", - "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях. Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow." + "question": "Какие модули можно подключать?", + "answerHtml": "Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений." }, { - "question": "Как работает публикация?", - "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт." + "question": "Поддерживаются ли инженерные форматы?", + "answerHtml": "Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом." }, { - "question": "Это работает с MCP?", - "answerHtml": "Система изначально рассчитана на работу с Webflow MCP. Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта." + "question": "Как настраиваются роли и права доступа?", + "answerHtml": "Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области." + }, + { + "question": "Можно ли подключать корпоративные системы?", + "answerHtml": "NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы." + }, + { + "question": "Где размещается NODE.DC?", + "answerHtml": "Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных." + }, + { + "question": "Как запускается пилотный контур?", + "answerHtml": "Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты." + }, + { + "question": "Чем NODE.DC отличается от набора отдельных приложений?", + "answerHtml": "NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов." } ], "sender": { @@ -1988,24 +1959,159 @@ ], "enabled": true }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Собрать контур. ", + "main": "Запустить." + }, + "intro": "Единый путь от доступа к модулю до рабочего контура предприятия. Hub для входа, Engine для сборки, Ops для управления.", + "detailHtml": "Модульный доступ, документация и рабочие пространства.\nПодключение прикладных модулей и ролей по контурам.\nЗакрытый инвайт для пилотных внедрений.", + "href": "index.html#hero", + "buttonLabel": "Запросить инвайт " + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "central-text-block", + "type": "centralTextBlock", + "template": "central-text-block.html", + "adminLabel": "Центральный текстовый блок", + "anchor": "pricing", + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Платформа NODE.DC ", + "middle": "для процессов, ", + "main": "данных и агентов." + }, + "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", + "tokenBillingHtml": "Подключение локальных моделей и личных ассистентов", + "founderLimitHtml": "SELFHOST в контуре предприятий / внутри инфраструктуры NODE.DC / открытый контур при подключении моделей по API " + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Центральный текст" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.tokenBillingHtml", + "label": "Средний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + }, + { + "path": "content.founderLimitHtml", + "label": "Нижний текст", + "kind": "html", + "renderAs": "html", + "group": "Центральный текст" + } + ], + "enabled": true + }, { "region": "cViz", "id": "pricing-table", "type": "pricingTable", "template": "pricing-table.html", - "adminLabel": "Тарифы: интро и таблица", + "adminLabel": "Тарифы: таблица", "anchor": "pricing-wrap", "content": { "pricing": { - "eyebrow": "Тарифы", - "heading": { - "muted": "Код", - "middle": "для No-Code,", - "main": "усиленный ИИ." - }, - "introHtml": "Подписки на приложение свключённым объёмом в каждом тарифе. ", - "tokenBillingHtml": "Токенная оплата сверх лимитов.", - "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", "windowTitle": "Тарифы.app", "discountLabel": "Скидка 50%", "betaHref": "beta-apply.html", @@ -2296,110 +2402,9 @@ "label": "Ячейка 64: --", "textHtml": "--" } - ], - "galleryItems": [ - { - "id": "one-click-publish-png", - "windowTitle": "публикация-в-один-клик.png", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "публикация-в-один-клик.png" - }, - { - "id": "complete-code-editor-webp", - "windowTitle": "полноценный-редактор-кода.webp", - "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", - "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "полноценный-редактор-кода.webp" - }, - { - "id": "ai-dock-mode-jpg", - "windowTitle": "ИИ-док-режим.jpg", - "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", - "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "ИИ-док-режим.jpg" - }, - { - "id": "deep-webflow-connection-webp", - "windowTitle": "глубокая-интеграция-webflow.webp", - "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", - "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "глубокая-интеграция-webflow.webp" - }, - { - "id": "install-setup-and-run", - "windowTitle": "установка-настройка-запуск.jpg", - "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", - "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", - "imageAlt": "", - "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", - "iconAlt": "Иконка MOV-файла.", - "folderLabel": "установка-настройка-запуск.jpg" - } ] }, "editableFields": [ - { - "path": "content.pricing.eyebrow", - "label": "Тарифы: надзаголовок", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.muted", - "label": "Тарифы: приглушённая строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.middle", - "label": "Тарифы: средняя строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.heading.main", - "label": "Тарифы: основная строка", - "kind": "text", - "renderAs": "text", - "group": "Тарифы" - }, - { - "path": "content.pricing.introHtml", - "label": "Тарифы: вводный текст", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.tokenBillingHtml", - "label": "Тарифы: оплата сверх лимитов", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, - { - "path": "content.pricing.founderLimitHtml", - "label": "Тарифы: Founder-лимит", - "kind": "html", - "renderAs": "html", - "group": "Тарифы" - }, { "path": "content.pricing.windowTitle", "label": "Окно: название", @@ -2578,13 +2583,84 @@ "label": "Новая ячейка", "textHtml": "--" } - }, + } + ], + "enabled": false + }, + { + "region": "cViz", + "id": "screenshot-cards", + "type": "screenshotCards", + "template": "screenshot-cards.html", + "adminLabel": "Карточки скриншотов", + "anchor": null, + "enabled": true, + "content": { + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png", + "enabled": true + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp", + "enabled": true + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg", + "enabled": true + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp", + "enabled": true + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg", + "enabled": true + } + ] + }, + "editableFields": [ { "path": "content.galleryItems", - "label": "Медиа-галерея после тарифов", + "label": "Карточки скриншотов", "kind": "collection", "renderAs": "collection", - "group": "Медиа-галерея", + "group": "Карточки скриншотов", "itemFields": [ { "path": "id", @@ -2643,18 +2719,18 @@ "imageAlt": "", "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", "iconAlt": "Иконка MOV-файла.", - "folderLabel": "новый-файл.png" + "folderLabel": "новый-файл.png", + "enabled": true } } - ], - "enabled": true + ] }, { "region": "cViz", - "id": "waitlist-files", + "id": "request-demo-txt-files", "type": "waitlistFiles", - "template": "waitlist-files.html", - "adminLabel": "Форма ожидания и txt-файлы", + "template": "request-demo-txt-files.html", + "adminLabel": "Запрос DEMO и TXT-файлы", "anchor": "waitlist", "enabled": true, "content": { @@ -2662,386 +2738,374 @@ "messagePlaceholder": "Сообщение (необязательно)", "namePlaceholder": "Ваше имя*", "emailPlaceholder": "Email для регистрации*", - "submitLabel": "Встать в лист ожидания", + "submitLabel": "Подать заявку", "successHeading": "Заявка принята. Спасибо.", "successTextHtml": "Мы скоро свяжемся. ", - "betaCtaLabel": "Подать заявку в бету?", - "betaHref": "beta-apply.html" + "betaCtaLabel": "Подать заявку?", + "founderIntroHtml": "Или оформить ранний Founder-доступ", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так. Попробуйте ещё раз чуть позже." }, - "legalHtml": "Политика конфиденциальности • Политика cookie© — Все права защищены2026", "files": [ { - "id": "fff-1781522145197", - "name": "fff", - "bodyHtml": "fff", + "id": "hub-access-1782000000000", + "name": "Hub Access", + "bodyHtml": "Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ergtrr-1781299687391", - "name": "Ergtrr", - "bodyHtml": "Ggg", + "id": "engine-workflows-1782000000001", + "name": "Engine Workflows", + "bodyHtml": "Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "paul-1781292773241", - "name": "Paul", - "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "id": "ops-cards-1782000000002", + "name": "Ops Cards", + "bodyHtml": "Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "s-1781291497432", - "name": "s", - "bodyHtml": "s", + "id": "1c-assistant-1782000000003", + "name": "1C Assistant", + "bodyHtml": "Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rkxkr-1780076462889", - "name": "rkxkr", - "bodyHtml": "пока не уверен, но да, интересно", + "id": "tender-agent-1782000000004", + "name": "Tender Agent", + "bodyHtml": "Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ali-awan-1779508741466", - "name": "Ali Awan", - "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "id": "digital-twin-1782000000005", + "name": "Digital Twin", + "bodyHtml": "Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "rox-del-toro-1779345898781", - "name": "rox del toro", - "bodyHtml": "ХОЧУ ДОСТУП", + "id": "model-viewer-1782000000006", + "name": "Model Viewer", + "bodyHtml": "Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "flavio-1779221805979", - "name": "Flavio", - "bodyHtml": "Привет!", + "id": "engineering-core-1782000000007", + "name": "Engineering Core", + "bodyHtml": "Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-clydesdale-1776810985184", - "name": "Daniel Clydesdale", - "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "id": "mcp-gateway-1782000000008", + "name": "MCP Gateway", + "bodyHtml": "Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "carter-ogunsola-1776789849836", - "name": "Carter Ogunsola", - "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "id": "api-contracts-1782000000009", + "name": "API Contracts", + "bodyHtml": "Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "marin-trajkovski-1776246697900", - "name": "Marin Trajkovski", - "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "id": "kubernetes-1782000000010", + "name": "Kubernetes", + "bodyHtml": "Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arul-1776155521436", - "name": "Arul", - "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "id": "cloudflare-edge-1782000000011", + "name": "Cloudflare Edge", + "bodyHtml": "CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jeremy-1776110312766", - "name": "Jeremy", - "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "id": "zero-trust-1782000000012", + "name": "Zero Trust", + "bodyHtml": "Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "safin-1775735336208", - "name": "Safin", - "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "id": "security-matrix-1782000000013", + "name": "Security Matrix", + "bodyHtml": "Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ilja-van-eck-1775728385192", - "name": "Ilja van Eck", - "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "id": "rbac-policies-1782000000014", + "name": "RBAC Policies", + "bodyHtml": "Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jordan-gilroy-1775725512001", - "name": "Jordan Gilroy", - "bodyHtml": "Я ваш главный фанат", + "id": "audit-log-1782000000015", + "name": "Audit Log", + "bodyHtml": "Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "hyun-1775717954559", - "name": "hyun", - "bodyHtml": "привет", + "id": "secrets-vault-1782000000016", + "name": "Secrets Vault", + "bodyHtml": "Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "kris-1775631278525", - "name": "kris", - "bodyHtml": "тестирую", + "id": "postgres-cluster-1782000000017", + "name": "Postgres Cluster", + "bodyHtml": "Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "syed-irfan-1775594918209", - "name": "Syed Irfan", - "bodyHtml": "Интересно", + "id": "redis-queue-1782000000018", + "name": "Redis Queue", + "bodyHtml": "Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "ramyar-atlasi-1775580173318", - "name": "ramyar atlasi", - "bodyHtml": "Apm pflege schule Düsseldorf", + "id": "vector-index-1782000000019", + "name": "Vector Index", + "bodyHtml": "Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "muhammad-ashar-1775577297259", - "name": "Muhammad Ashar", - "bodyHtml": "vv", + "id": "local-models-1782000000020", + "name": "Local Models", + "bodyHtml": "Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "dd-1775574406425", - "name": ":DD", - "bodyHtml": "ka tu nx", + "id": "model-routing-1782000000021", + "name": "Model Routing", + "bodyHtml": "Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "test-1775569341172", - "name": "test", - "bodyHtml": "test", + "id": "agent-runtime-1782000000022", + "name": "Agent Runtime", + "bodyHtml": "Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "filip-1775566849792", - "name": "Filip", - "bodyHtml": "Я знаю Fed!", + "id": "observability-1782000000023", + "name": "Observability", + "bodyHtml": "Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "arinbj-rn-1775555738944", - "name": "Arinbjørn", - "bodyHtml": "Пустите меня! ", + "id": "backups-1782000000024", + "name": "Backups", + "bodyHtml": "Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "janarthanan-1775546824101", - "name": "Janarthanan", - "bodyHtml": "жду", + "id": "ci-cd-1782000000025", + "name": "CI CD", + "bodyHtml": "Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "jane-smith-1775475995013", - "name": "Jane Smith", - "bodyHtml": "Очень хочу ранний доступ к продукту!", + "id": "terraform-1782000000026", + "name": "Terraform", + "bodyHtml": "Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "daniel-apro-1775466924878", - "name": "Daniel Apro", - "bodyHtml": "Привет, сайт огонь.", + "id": "object-storage-1782000000027", + "name": "Object Storage", + "bodyHtml": "Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "allonelabs-1775379632146", - "name": "Allonelabs", - "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "id": "bim-pipeline-1782000000028", + "name": "BIM Pipeline", + "bodyHtml": "Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true }, { - "id": "nicola-romei-1775368624397", - "name": "nicola romei", - "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "id": "step-import-1782000000029", + "name": "STEP Import", + "bodyHtml": "Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.", "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", - "iconAlt": "Иконка TXT-файла" + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stl-review-1782000000030", + "name": "STL Review", + "bodyHtml": "Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "3dgs-assets-1782000000031", + "name": "3DGS Assets", + "bodyHtml": "Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "las-laz-clouds-1782000000032", + "name": "LAS LAZ Clouds", + "bodyHtml": "Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "webhooks-1782000000033", + "name": "Webhooks", + "bodyHtml": "Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "docs-portal-1782000000034", + "name": "Docs Portal", + "bodyHtml": "Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true + }, + { + "id": "stack-map-1782000000035", + "name": "Stack Map", + "bodyHtml": "Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла", + "enabled": true } ], "accessCard": { "enabled": true, - "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconSrc": "./assets/uploads/images/hero-waitlist/dclogo_white_alpha-mquue8ar.png", "iconAlt": "Иконка NODE.DC", "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", "wordmarkAlt": "Логотип NODE.DC", - "release": "Бета-релиз: июль 2026", - "heading": "Ранний доступ", - "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." - } + "release": "Selfhost платформа ", + "heading": "Запросить DEMO", + "description": "NODE.DC - платформа для задач, процессов, данных, агентов и инженерных модулей." + }, + "legal": { + "enabled": true, + "html": "Политика конфиденциальности • Политика cookie© — Все права защищены2026" + }, + "filesEnabled": true }, "editableFields": [ { - "path": "content.accessCard.enabled", - "label": "Карточка доступа: отображение", + "path": "content.legal.enabled", + "label": "Юридический блок: отображение", "kind": "boolean", "renderAs": "boolean", - "group": "Карточка доступа", + "group": "Юридический блок", "headerToggle": true }, { - "path": "content.accessCard.iconSrc", - "label": "Карточка доступа: иконка", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkSrc", - "label": "Карточка доступа: wordmark", - "kind": "media", - "renderAs": "attr", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.iconAlt", - "label": "Карточка доступа: alt иконки", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.wordmarkAlt", - "label": "Карточка доступа: alt логотипа", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.release", - "label": "Карточка доступа: релиз", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.heading", - "label": "Карточка доступа: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.accessCard.description", - "label": "Карточка доступа: описание", - "kind": "textarea", - "renderAs": "text", - "group": "Карточка доступа" - }, - { - "path": "content.form.messagePlaceholder", - "label": "Поле сообщения", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.namePlaceholder", - "label": "Поле имени", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.emailPlaceholder", - "label": "Поле email", - "kind": "text", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.form.submitLabel", - "label": "Кнопка отправки", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successHeading", - "label": "Success: заголовок", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.successTextHtml", - "label": "Success: текст", - "kind": "html", - "renderAs": "html", - "group": "Форма" - }, - { - "path": "content.form.betaCtaLabel", - "label": "Success: beta CTA", - "kind": "text", - "renderAs": "text", - "group": "Форма" - }, - { - "path": "content.form.betaHref", - "label": "Success: beta href", - "kind": "url", - "renderAs": "attr", - "group": "Форма" - }, - { - "path": "content.legalHtml", - "label": "Юридический текст", - "kind": "html", - "renderAs": "html", - "group": "Юридический блок" + "path": "content.filesEnabled", + "label": "TXT-файлы: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "TXT-файлы", + "headerToggle": true }, { "path": "content.files", @@ -3054,22 +3118,26 @@ "path": "id", "label": "ID окна", "kind": "text", - "renderAs": "attr" + "renderAs": "attr", + "group": null }, { "path": "name", "label": "Название файла", "kind": "text", - "renderAs": "text" + "renderAs": "text", + "group": null }, { "path": "bodyHtml", "label": "Текст файла", "kind": "html", - "renderAs": "html" + "renderAs": "html", + "group": null } ], "itemTemplate": { + "enabled": true, "id": "new-file", "name": "Новый файл", "bodyHtml": "Текст файла", @@ -3153,53 +3221,63 @@ { "label": "Документация", "href": "https://docs.ssscript.app/", - "target": "_blank" + "target": "_blank", + "enabled": true }, { "label": "Лист ожидания", "href": "index.html#waitlist", - "target": "" + "target": "", + "enabled": true }, { "label": "Тарифы", "href": "index.html#", - "target": "" + "target": "", + "enabled": true }, { "label": "Возможности", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true }, { "label": "Демо", "href": "index.html#features", - "target": "" + "target": "", + "enabled": true } ], "contactTitle": "Контакты", "contactLinks": [ { - "label": "Twitter", - "href": "https://federic.ooo/s/twitter", - "target": "_blank" + "label": "DCTOUCH", + "href": "https://www.dctouch.ru/", + "target": "_blank", + "enabled": true }, { - "label": "Instagram", - "href": "https://federic.ooo/s/instagram", - "target": "_blank" + "label": "Telegram", + "href": "https://t.me/dcconstructions", + "target": "_blank", + "enabled": true }, { "label": "GitHub", "href": "https://www.federic.ooo/s/github", - "target": "_blank" + "target": "_blank", + "enabled": false }, { "label": "Портфолио", "href": "https://federic.ooo/", - "target": "_blank" + "target": "_blank", + "enabled": false } ], - "policyHtml": "Политика конфиденциальности & Условия использования" + "policyHtml": "Политика конфиденциальности & Условия использования", + "policyEnabled": true } }, "editableFields": [ @@ -3250,7 +3328,7 @@ "label": "Навигационные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Навигация футера", "itemFields": [ { "path": "label", @@ -3274,7 +3352,8 @@ "itemTemplate": { "label": "Новая ссылка", "href": "index.html#", - "target": "" + "target": "", + "enabled": true } }, { @@ -3289,7 +3368,7 @@ "label": "Контактные ссылки", "kind": "collection", "renderAs": "collection", - "group": "Футер", + "group": "Контактные ссылки", "itemFields": [ { "path": "label", @@ -3313,15 +3392,24 @@ "itemTemplate": { "label": "Новая ссылка", "href": "https://", - "target": "_blank" + "target": "_blank", + "enabled": true } }, + { + "path": "content.footer.policyEnabled", + "label": "Политики: отображение", + "kind": "boolean", + "renderAs": "boolean", + "group": "Политики", + "headerToggle": true + }, { "path": "content.footer.policyHtml", "label": "Политики", "kind": "html", "renderAs": "html", - "group": "Футер" + "group": "Политики" } ] } diff --git a/index.html b/index.html index 662a16f..780c240 100644 --- a/index.html +++ b/index.html @@ -67,11 +67,11 @@ - +
Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.
Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.
NODE.DC включает Hub для входа и управления доступами, Engine для разработки workflow и прикладной логики, Ops для операционной работы, сквозного ассистента и подключаемые модули: 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core и отраслевые приложения.
После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.
Hub выполняет роль лаунчера и административной точки входа. В нем отображается каталог доступных приложений, рабочие пространства, роли, группы пользователей и права доступа к модулям платформы.
В панели деплоя есть мгновенный откат.
Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.
Hub отвечает за вход, роли и доступ к приложениям. Engine используется для сборки workflow, прикладной логики, интеграций и интерфейсов. Ops принимает задачи, отчеты, статусы, результаты работы модулей и действия агентов в операционный контур.
Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.
В Engine создаются workflow, интеграционные сценарии, обработчики данных, прикладная логика, интерфейсные связки и сервисные контуры. Сборка может выполняться вручную в нодовом редакторе или через ассистента по текстовому заданию.
Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.
WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.
Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.
В Ops фиксируются задачи, статусы, карточки, отчеты, согласования, рабочие материалы, результаты агентов и данные из подключенных модулей. Слой предназначен для контроля процессов и операционной работы.
При запуске NODE.DC доступна отдельная вкладка для встраивания.
В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.
Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.
Ассистент работает как единый интерфейс к приложениям и данным платформы. В рамках прав доступа ему доступны задачи, процессы, кодовая база, проектные материалы, отчеты, инженерные модели и результаты работы агентов. Ассистент может отвечать на вопросы, декомпозировать задачи, готовить материалы и инициировать действия в связанных слоях.
Мы используем основные доступные модели: OpenAI до Claude до Gemini.
Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.
Прикладные модули подключаются к ролям, задачам, данным, рабочим пространствам и ассистенту. Модуль закрывает не отдельный экран, а рабочий контур: входные данные, обработку, действия, отчеты, согласования и передачу результата в Ops.
Во время работы NODE.DC выполняет две задачи параллельно.
Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.
Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.
Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Model Viewer / Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений.
Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.
Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.
cdn.node.dc/{USERNAME}/{PROJECT-NAME}
Для инженерных и производственных сценариев предусмотрена работа с цифровыми моделями и техническими материалами. Поддерживаются BIM, STEP, STL, 3DGS / Gaussian Splatting, LAS/LAZ-облака точек и другие форматы, связанные с задачами, версиями и проектным контекстом.
Система изначально рассчитана на работу с Webflow MCP.
Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.
Права доступа задаются через Hub. Администратор может назначать роли, формировать группы, разделять контуры доступа по подразделениям и выдавать индивидуальные права на приложения, функции и рабочие области.
NODE.DC рассчитан на подключение внешних сервисов, API, внутренних приложений, 1C, баз данных, файловых хранилищ и корпоративных систем. Интеграционные сценарии собираются в Engine и передают результаты в Ops, прикладные модули или пользовательские интерфейсы.
Доступны облачные, выделенные, гибридные и enterprise-варианты размещения. Итоговая конфигурация зависит от требований к безопасности, составу модулей, интеграциям и политике хранения данных.
Пилотный контур формируется по составу модулей, ролей, интеграций и рабочих сценариев. Обычно подключается Hub, настраиваются базовые роли, выбирается один или несколько процессов, после чего собираются workflow, рабочие представления и отчеты.
NODE.DC связывает приложения в единую платформенную архитектуру: общий доступ, роли, сквозной ассистент, связанные задачи, данные, workflow и операционный слой. Это снижает разрыв между разработкой, управлением и исполнением процессов.
Единая точка входа: каталог приложений, рабочие пространства, роли, группы и права доступа.
Нодовые workflow, обработчики данных, интеграционная логика и сборка прикладных контуров.
Операционные карточки, статусы, согласования, отчеты агентов и результаты выполнения задач.
Связка с 1C, разбор документов, поиск данных, сценарии согласований и передача результата в Ops.
Тендерные подборки, проверка требований, документы, дедлайны и агентные отчеты по процедурам.
Цифровые модели объектов, версии, проектный контекст, инженерные данные и связанные рабочие процессы.
Просмотр BIM, STEP, STL, 3DGS, облаков точек и инженерных материалов внутри единого контура.
Обработка технических форматов, связка моделей с задачами, версиями, отчетами и согласованиями.
Контекстный шлюз для агентов: проектные данные, инструменты, кодовая база и внешние сервисы.
Контракты API, схемы данных, webhooks, события, интеграции и контроль совместимости между модулями.
Оркестрация сервисов, изоляция окружений, scaling policies, probes, secrets и управляемый rollout.
CDN, WAF, R2-хранилище, edge routing, cache policies и защита публичного периметра.
Доступ по принципу least privilege: SSO, MFA, device posture, audit trail и сегментация контуров.
Ролевая матрица, группы, политики доступа, ограничения функций и контроль административных действий.
Права на приложения, рабочие области, действия агентов, документы, отчеты и инженерные данные.
Журнал действий пользователей, агентов и сервисов: изменения, статусы, запросы, публикации и доступы.
Хранение токенов, ключей API, webhook-секретов и конфигураций интеграций в защищенном контуре.
Основная транзакционная база для проектов, ролей, задач, статусов, событий и конфигураций платформы.
Очереди фоновых задач, статусы выполнения, debounce событий, кэширование и быстрые агентные операции.
Индексация проектных материалов, документации, отчетов и контекста для ассистента и поиска.
Контур локальных моделей для приватных сценариев, инженерных данных и корпоративных ограничений.
Маршрутизация задач между облачными и локальными моделями по типу запроса, правам и стоимости.
Запуск ассистентов, выполнение действий, контроль инструментов, журналирование и передача результата в Ops.
Метрики, логи, трассировка, health checks, алерты и диагностика сервисов платформы.
Резервные копии данных, конфигураций, файлов, моделей, журналов и сценариев восстановления.
Сборка, проверки, preview-окружения, controlled rollout, rollback и публикация клиентских модулей.
Описание инфраструктуры кодом: окружения, сети, хранилища, политики, сервисы и переменные.
Хранилище файлов, изображений, моделей, отчетов, txt-материалов и артефактов рабочих процессов.
Загрузка BIM-моделей, версии, разметка, связи с задачами и публикация в рабочие пространства.
Импорт STEP-моделей, технические материалы, карточки проверки и привязка к инженерным задачам.
Проверка STL-геометрии, заметки, версии, визуальный контроль и подготовка производственных материалов.
Gaussian Splatting сцены, визуальные реконструкции объектов и связь с проектным контекстом.
Облака точек, съемка, координатные данные, версии и инженерная привязка к задачам.
Событийные сценарии: входящие запросы, уведомления, автоматические действия и передача статусов.
Документация, регламенты, инструкции, технические заметки и материалы для команд внедрения.
Карта платформенного стека: Hub, Engine, Ops, агенты, данные, интеграции, безопасность и инфраструктура.
Базовый набор включает Hub, Engine и Ops. Дополнительно подключаются 1C Assistant, Tender, Digital Twin, Engineering Core, интеграционные сценарии, API-модули и специализированные приложения для подразделений.