PageSourceSearch

https://ubex.ai/docs

html ubex.ai collected 2026-10-05 13:10:01 UTC 129,030 bytes, 536 lines download raw bytes

1<!DOCTYPE html><html lang="en" data-theme="dark" data-beasties-container><head>
2  <meta charset="utf-8">
3  <!-- Theme (light/dark) - read the saved choice and correct the attribute
4       before any CSS paints, so returning visitors never see a flash of the
5       wrong theme. Default (no saved choice, or SSR) stays "dark", matching
6       the static attribute above. -->
7  
7<script>
8    (function () {
9      try {
10        var saved = localStorage.getItem('ubex-theme');
11        if (saved === 'light' || saved === 'dark') {
12          document.documentElement.setAttribute('data-theme', saved);
13        }
14      } catch (e) {}
15    })();
16  </script>
16
17  <title>Documentation - Guides, API Reference &amp; Tutorials | Ubex AI</title>
18  <base href="/">
19  <meta name="viewport" content="width=device-width, initial-scale=1">
20  <link rel="icon" href="./assets/favicon/favicon.ico" sizes="any">
21  <link rel="icon" type="image/png" sizes="32x32" href="./assets/favicon/favicon-32x32.png">
22  <link rel="icon" type="image/png" sizes="16x16" href="./assets/favicon/favicon-16x16.png">
23  <link rel="apple-touch-icon" sizes="180x180" href="./assets/favicon/apple-touch-icon.png">
24  <link rel="manifest" href="./assets/favicon/site.webmanifest">
25  <meta name="theme-color" content="#0a0a0d" media="(prefers-color-scheme: dark)">
26  <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
27  <meta name="apple-mobile-web-app-title" content="Ubex AI">
28  <!-- SEO Meta Tags (defaults, overridden per-route by SeoService + SSR) -->
29  <meta name="description" content="Learn how to build apps and workflows with Ubex AI. Node reference, API docs, triggers, variables, and step-by-step guides with AI-powered search.">
30  <meta name="keywords" content="documentation, API docs, workflow guide, tutorials, node reference, Ubex AI">
31  <meta name="author" content="Ubex AI">
32  <meta name="robots" content="index, follow">
33  <meta name="googlebot" content="index, follow, max-image-preview:large, max-snippet:-1">
34
35  <!-- Open Graph -->
36  <meta property="og:title" content="Documentation - Guides, API Reference &amp; Tutorials | Ubex AI">
37  <meta property="og:description" content="Learn how to build apps and workflows with Ubex AI. Node reference, API docs, triggers, variables, and step-by-step guides with AI-powered search.">
38  <meta property="og:image" content="https://ubex.ai/assets/og/ubex-og-default.png">
39  <meta property="og:image:secure_url" content="https://ubex.ai/assets/og/ubex-og-default.png">
40  <meta property="og:image:type" content="image/png">
41  <meta property="og:image:width" content="1200">
42  <meta property="og:image:height" content="630">
43  <meta property="og:image:alt" content="Ubex AI">
44  <meta property="og:url" content="https://ubex.ai/docs">
45  <meta property="og:type" content="website">
46  <meta property="og:site_name" content="Ubex AI">
47  <meta property="og:locale" content="en_US">
48  <meta property="og:locale:alternate" content="de_DE">
49  <meta property="og:locale:alternate" content="es_ES">
50  <meta property="og:locale:alternate" content="ro_RO">
51
52  <!-- Twitter Card -->
53  <meta name="twitter:card" content="summary_large_image">
54  <meta name="twitter:title" content="Documentation - Guides, API Reference &amp; Tutorials | Ubex AI">
55  <meta name="twitter:description" content="Learn how to build apps and workflows with Ubex AI. Node reference, API docs, triggers, variables, and step-by-step guides with AI-powered search.">
56  <meta name="twitter:image" content="https://ubex.ai/assets/og/ubex-og-default.png">
57  <meta name="twitter:image:alt" content="Ubex AI">
58
59  <link rel="canonical" href="https://ubex.ai/docs">
60
61  <!-- JSON-LD: Organization -->
62  
62<script type="application/ld+json">
63  {
64    "@context": "https://schema.org",
65    "@type": "Organization",
66    "name": "Ubex AI",
67    "url": "https://ubex.ai",
68    "logo": {
69      "@type": "ImageObject",
70      "url": "https://ubex.ai/assets/images/logo-mark-ubex.png",
71      "width": 512,
72      "height": 512
73    },
74    "image": "https://ubex.ai/assets/og/ubex-og-default.png",
75    "description": "AI-powered platform to build full-stack apps, automate workflows, and deploy in minutes - with or without code.",
76    "foundingDate": "2022",
77    "sameAs": [
78      "https://www.linkedin.com/company/ubexai/",
79      "https://discord.gg/TUAtGQVMXF"
80    ],
81    "contactPoint": {
82      "@type": "ContactPoint",
83      "contactType": "sales",
84      "url": "https://ubex.ai/contact",
85      "availableLanguage": ["English", "German", "French", "Romanian"]
86    }
87  }
88  </script>
88
89
90  <!-- JSON-LD: SoftwareApplication -->
91  
91<script type="application/ld+json">
92  {
93    "@context": "https://schema.org",
94    "@type": "SoftwareApplication",
95    "name": "Ubex AI",
96    "url": "https://ubex.ai",
97    "applicationCategory": "DeveloperApplication",
98    "operatingSystem": "Web",
99    "description": "Build full-stack apps with Qira, the AI assistant that generates frontend and backend. Visual workflow builder with parallel execution, multi-LLM support, built-in databases, and cloud, VPC, or on-premise deployment.",
100    "featureList": "AI app builder, Visual workflow engine, 21+ node types, Multi-LLM support, Parallel execution, Built-in databases, Frontend builder, Backend builder, Managed Cloud deployment, Self-hosted deployment, VPC and on-premise deployment",
101    "offers": [
102      {
103        "@type": "Offer",
104        "name": "Free",
105        "price": "0",
106        "priceCurrency": "EUR",
107        "url": "https://ubex.ai/pricing",
108        "availability": "https://schema.org/InStock",
109        "description": "Get started and explore the platform at no cost. 1 project, 2 parallel executions, all node types, bring your own API keys, community support."
110      },
111      {
112        "@type": "Offer",
113        "name": "Lite",
114        "price": "12",
115        "priceCurrency": "EUR",
116        "url": "https://ubex.ai/pricing",
117        "availability": "https://schema.org/InStock",
118        "description": "For individuals and small projects getting started. 2,500 workflow runs per month, 1 hosted application, 1 workspace, 3 projects, 2 parallel executions, 1 GB storage, 7 days execution history, email support.",
119        "priceSpecification": [
120          {
121            "@type": "UnitPriceSpecification",
122            "name": "Billed monthly",
123            "price": "12",
124            "priceCurrency": "EUR",
125            "referenceQuantity": {
126              "@type": "QuantitativeValue",
127              "value": 1,
128              "unitCode": "MON"
129            }
130          },
131          {
132            "@type": "UnitPriceSpecification",
133            "name": "Billed annually",
134            "price": "10",
135            "priceCurrency": "EUR",
136            "referenceQuantity": {
137              "@type": "QuantitativeValue",
138              "value": 1,
139              "unitCode": "MON"
140            }
141          }
142        ]
143      },
144      {
145        "@type": "Offer",
146        "name": "Starter",
147        "price": "29",
148        "priceCurrency": "EUR",
149        "url": "https://ubex.ai/pricing",
150        "availability": "https://schema.org/InStock",
151        "description": "For teams building real applications. 7,500 workflow runs per month, 2 hosted applications, 3 workspaces, 10 projects, 5 parallel executions, 5 GB storage, 15 days execution history, 3 team seats, EUR 5 AI credits included monthly, priority email support.",
152        "priceSpecification": [
153          {
154            "@type": "UnitPriceSpecification",
155            "name": "Billed monthly",
156            "price": "29",
157            "priceCurrency": "EUR",
158            "referenceQuantity": {
159              "@type": "QuantitativeValue",
160              "value": 1,
161              "unitCode": "MON"
162            }
163          },
164          {
165            "@type": "UnitPriceSpecification",
166            "name": "Billed annually",
167            "price": "24",
168            "priceCurrency": "EUR",
169            "referenceQuantity": {
170              "@type": "QuantitativeValue",
171              "value": 1,
172              "unitCode": "MON"
173            }
174          }
175        ]
176      },
177      {
178        "@type": "Offer",
179        "name": "Pro",
180        "price": "49",
181        "priceCurrency": "EUR",
182        "url": "https://ubex.ai/pricing",
183        "availability": "https://schema.org/InStock",
184        "description": "For growing teams that need scale, control, and self-hosted deployment. 15,000 workflow runs per month, 3 hosted applications, unlimited projects, 20 parallel executions, 25 GB storage, 30 days execution history, SSO/SAML, staging environments, custom domains, 5 team seats, EUR 25 AI credits included monthly.",
185        "priceSpecification": [
186          {
187            "@type": "UnitPriceSpecification",
188            "name": "Billed monthly",
189            "price": "49",
190            "priceCurrency": "EUR",
191            "referenceQuantity": {
192              "@type": "QuantitativeValue",
193              "value": 1,
194              "unitCode": "MON"
195            }
196          },
197          {
198            "@type": "UnitPriceSpecification",
199            "name": "Billed annually",
200            "price": "41",
201            "priceCurrency": "EUR",
202            "referenceQuantity": {
203              "@type": "QuantitativeValue",
204              "value": 1,
205              "unitCode": "MON"
206            }
207          }
208        ]
209      },
210      {
211        "@type": "Offer",
212        "name": "Enterprise",
213        "priceCurrency": "EUR",
214        "url": "https://ubex.ai/contact",
215        "availability": "https://schema.org/InStock",
216        "description": "Compliance, security, and full deployment c
216ontrol. Custom volume, unlimited parallel executions, 365 days data retention, audit logs, VPC or on-premise deployment, GDPR and SOC 2 controls, custom integrations, dedicated account manager, SLA guarantee, invoice billing. Priced per agreement.",
217        "priceSpecification": {
218          "@type": "PriceSpecification",
219          "priceCurrency": "EUR",
220          "description": "Custom quote"
221        }
222      }
223    ],
224    "publisher": {
225      "@type": "Organization",
226      "name": "Ubex AI",
227      "url": "https://ubex.ai"
228    }
229  }
230  </script>
230
231
232  <!-- JSON-LD: FAQPage is injected by SeoService on the routes that actually
233       render an FAQ (currently /pricing). It must not live here, because this
234       head is shared by every route and Google expects FAQ markup only on the
235       page whose visible content holds the questions. -->
236
237  <link rel="preconnect" href="https://fonts.googleapis.com">
238  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
239  <style>@font-face{font-family:'Instrument Serif';font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/instrumentserif/v5/jizHRFtNs2ka5fXjeivQ4LroWlx-6zAjgn7MsNo.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Instrument Serif';font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/instrumentserif/v5/jizHRFtNs2ka5fXjeivQ4LroWlx-6zAjjH7M.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Instrument Serif';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/instrumentserif/v5/jizBRFtNs2ka5fXjeivQ4LroWlx-6zsTjmbI.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Instrument Serif';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/instrumentserif/v5/jizBRFtNs2ka5fXjeivQ4LroWlx-6zUTjg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;
239src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;
239src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
240
241  <!-- Google Consent Mode v2 - defaults MUST fire before any scripts load -->
242  
242<script>
243    window.dataLayer = window.dataLayer || [];
244    function gtag(){dataLayer.push(arguments);}
245
246    gtag('consent', 'default', {
247      'ad_storage': 'denied',
248      'ad_user_data': 'denied',
249      'ad_personalization': 'denied',
250      'analytics_storage': 'denied',
251      'functionality_storage': 'denied',
252      'personalization_storage': 'denied',
253      'security_storage': 'granted',
254      'wait_for_update': 500
255    });
256
257    // Restore saved preferences from localStorage
258    (function() {
259      try {
260        // Check both old and new key patterns for backward compatibility
261        var analytics = localStorage.getItem('silktideConsentChoice_analytics') === 'true' ||
262                        localStorage.getItem('stcm.consent.analytics') === 'true';
263        var marketing = localStorage.getItem('silktideConsentChoice_marketing') === 'true' ||
264                        localStorage.getItem('stcm.consent.marketing') === 'true';
265        var functional = localStorage.getItem('silktideConsentChoice_functional') === 'true' ||
266                         localStorage.getItem('stcm.consent.functional') === 'true';
267        if (analytics || marketing || functional) {
268          gtag('consent', 'update', {
269            'analytics_storage': analytics ? 'granted' : 'denied',
270            'ad_storage': marketing ? 'granted' : 'denied',
271            'ad_user_data': marketing ? 'granted' : 'denied',
272            'ad_personalization': marketing ? 'granted' : 'denied',
273            'functionality_storage': functional ? 'granted' : 'denied',
274            'personalization_storage': functional ? 'granted' : 'denied'
275          });
276        }
277      } catch(e) {}
278    })();
279  </script>
279
280
281  <!-- Ubex Preferences UI -->
282  <link rel="stylesheet" href="./assets/css/ubex-preferences.css">
283  
283<script src="./assets/js/ubex-preferences.js"></script>
283
284  
284<script>
285    // Clean up old consent storage key from previous implementation
286    try { localStorage.removeItem('ubex-consent'); } catch(e) {}
287
288    // Detect language from URL path (e.g. /de/pricing → 'de')
289    (function() {
290      var supportedLangs = ['en', 'de', 'ro', 'es'];
291      var pathSegments = window.location.pathname.split('/').filter(Boolean);
292      var lang = (pathSegments.length > 0 && supportedLangs.indexOf(pathSegments[0]) !== -1)
293        ? pathSegments[0]
294        : 'en';
295
296      var translations = {
297        en: {
298          essential: 'Essential',
299          essentialDesc: 'These are necessary for the website to function and cannot be switched off.',
300          analytics: 'Analytics',
301          analyticsDesc: 'These help us understand how visitors interact with the website.',
302          marketing: 'Marketing',
303          marketingDesc: 'These are used to deliver personalized advertisements.',
304          functional: 'Functional',
305          functionalDesc: 'These enable enhanced functionality and personalization.',
306          bannerDesc: '<p>We use cookies to enhance your experience. You can choose which types to allow.</p>',
307          acceptAll: 'Accept all',
308          rejectNonEssential: 'Reject non-essential',
309          preferences: 'Preferences',
310          prefsTitle: 'Customize your cookie preferences',
311          prefsDesc: '<p>Choose which cookies you want to accept.</p>',
312          save: 'Save and close',
313          bannerWidth: '700px'
314        },
315        de: {
316          essential: 'Essenziell',
317          essentialDesc: 'Diese sind für die Funktion der Website erforderlich und können nicht deaktiviert werden.',
318          analytics: 'Analyse',
319          analyticsDesc: 'Diese helfen uns zu verstehen, wie Besucher mit der Website interagieren.',
320          marketing: 'Marketing',
321          marketingDesc: 'Diese werden verwendet, um personalisierte Werbung auszuliefern.',
322          functional: 'Funktional',
323          functionalDesc: 'Diese ermöglichen erweiterte Funktionen und Personalisierung.',
324          bannerDesc: '<p>Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Sie können wählen, welche Arten Sie zulassen möchten.</p>',
325          acceptAll: 'Alle akzeptieren',
326          rejectNonEssential: 'Nicht-essenzielle ablehnen',
327          preferences: 'Einstellungen',
328          prefsTitle: 'Cookie-Einstellungen anpassen',
329          prefsDesc: '<p>Wählen Sie, welche Cookies Sie akzeptieren möchten.</p>',
330          save: 'Speichern und schließen',
331          bannerWidth: '900px'
332        },
333        ro: {
334          essential: 'Esențiale',
335          essentialDesc: 'Acestea sunt necesare pentru funcționarea site-ului și nu pot fi dezactivate.',
336          analytics: 'Analiză',
337          analyticsDesc: 'Acestea ne ajută să înțelegem cum interacționează vizitatorii cu site-ul.',
338          marketing: 'Marketing',
339          marketingDesc: 'Acestea sunt utilizate pentru a livra reclame personalizate.',
340          functional: 'Funcționale',
341          functionalDesc: 'Acestea permit funcționalități îmbunătățite și personalizare.',
342          bannerDesc: '<p>Folosim cookie-uri pentru a vă îmbunătăți experiența. Puteți alege ce tipuri să permiteți.</p>',
343          acceptAll: 'Acceptă toate',
344          rejectNonEssential: 'Respinge non-esențialele',
345          preferences: 'Preferințe',
346          prefsTitle: 'Personalizează preferințele cookie',
347          prefsDesc: '<p>Alegeți ce cookie-uri doriți să acceptați.</p>',
348          save: 'Salvează și închide',
349          bannerWidth: '850px'
350        },
351        es: {
352          essential: 'Esenciales',
353          essentialDesc: 'Son necesarias para el funcionamiento del sitio web y no se pueden desactivar.',
354          analytics: 'Análisis',
355          analyticsDesc: 'Nos ayudan a entender cómo los visitantes interactúan con el sitio web.',
356          marketing: 'Marketing',
357          marketingDesc: 'Se utilizan para ofrecer anuncios personalizados.',
358          functional: 'Funcionales',
359          functionalDesc: 'Permiten funcionalidades mejoradas y personalización.',
360          bannerDesc: '<p>Usamos cookies para mejorar su experiencia. Puede elegir qué tipos permitir.</p>',
361          acceptAll: 'Aceptar todas',
362          rejectNonEssential: 'Rechazar no esenciales',
363          preferences: 'Preferencias',
364          prefsTitle: 'Personalizar preferencias de cookies',
365          prefsDesc: '<p>Elija qué cookies desea aceptar.</p>',
366          save: 'Guardar y cerrar',
367          bannerWidth: '700px'
368        }
369      };
370
371      var t = translations[lang] || translations.en;
372
373      window.ubexPreferences.init({
374        consentTypes: [
375          {
376            id: 'essential',
377            label: t.essential,
378            description: t.essentialDesc,
379            required: true
380          },
381          {
382            id: 'analytics',
383            label: t.analytics,
384            description: t.analyticsDesc,
385            defaultValue: false,
386            gtag: 'analytics_storage',
387            scripts: [
388              {
389                url: 'https://www.googletagmanager.com/gtag/js?i
389d=G-D6LYRMJQMB',
390                load: 'async'
391              }
392            ],
393            onAccept: function() {
394              gtag('consent', 'update', { 'analytics_storage': 'granted' });
395              gtag('js', new Date());
396              gtag('config', 'G-D6LYRMJQMB');
397            },
398            onReject: function() {
399              gtag('consent', 'update', { 'analytics_storage': 'denied' });
400            }
401          },
402          {
403            id: 'marketing',
404            label: t.marketing,
405            description: t.marketingDesc,
406            defaultValue: false,
407            gtag: ['ad_storage', 'ad_user_data', 'ad_personalization'],
408            onAccept: function() {
409              gtag('consent', 'update', {
410                'ad_storage': 'granted',
411                'ad_user_data': 'granted',
412                'ad_personalization': 'granted'
413              });
414            },
415            onReject: function() {
416              gtag('consent', 'update', {
417                'ad_storage': 'denied',
418                'ad_user_data': 'denied',
419                'ad_personalization': 'denied'
420              });
421            }
422          },
423          {
424            id: 'functional',
425            label: t.functional,
426            description: t.functionalDesc,
427            defaultValue: false,
428            gtag: ['functionality_storage', 'personalization_storage'],
429            onAccept: function() {
430              gtag('consent', 'update', {
431                'functionality_storage': 'granted',
432                'personalization_storage': 'granted'
433              });
434            },
435            onReject: function() {
436              gtag('consent', 'update', {
437                'functionality_storage': 'denied',
438                'personalization_storage': 'denied'
439              });
440            }
441          }
442        ],
443        prompt: {
444          position: 'bottomRight'
445        },
446        icon: {
447          position: 'bottomLeft'
448        },
449        backdrop: {
450          show: true
451        },
452        text: {
453          prompt: {
454            description: t.bannerDesc,
455            acceptAllButtonText: t.acceptAll,
456            rejectNonEssentialButtonText: t.rejectNonEssential,
457            preferencesButtonText: t.preferences
458          },
459          preferences: {
460            title: t.prefsTitle,
461            description: t.prefsDesc,
462            saveButtonText: t.save
463          }
464        }
465      });
466
467      // Banner width is handled by CSS - no inline override needed
468    })();
469
470    // Close preferences UI on ESC key or backdrop click
471    (function() {
472      function closePreferences() {
473        var banner = document.getElementById('stcm-banner');
474        var modal = document.getElementById('stcm-modal');
475        var closeBtn = modal ? modal.querySelector('.stcm-modal-close') : null;
476        // If modal is visible, close it first
477        if (modal && modal.style.display !== 'none' && closeBtn) {
478          closeBtn.click();
479          return;
480        }
481        // Otherwise close the banner by rejecting non-essential
482        if (banner && banner.offsetParent !== null) {
483          var rejectBtn = banner.querySelector('.stcm-button-secondary');
484          if (rejectBtn) rejectBtn.click();
485        }
486      }
487
488      document.addEventListener('keydown', function(e) {
489        if (e.key === 'Escape') closePreferences();
490      });
491
492      // Click on backdrop closes the preferences UI
493      // Use capture phase + stopPropagation to prevent nudge animation
494      document.addEventListener('click', function(e) {
495        if (e.target && e.target.id === 'stcm-backdrop') {
496          e.stopPropagation();
497          closePreferences();
498        }
499      }, true);
500    })();
501  </script>
501
502
503<style>:root{--bg: #0a0a0d;--paper: #131317;--paper-2: #1a1a20;--ink: #f2f6f3;--ink-2: #d4ded8;--muted: #98a49c;--line: rgba(150, 210, 175, .14);--line-2: rgba(150, 210, 175, .24);--accent: #14532d;--accent-deep: #0b3b22;--accent-mid: #1f6b3f;--accent-soft: rgba(20, 83, 45, .16);--highlight: #22c55e;--highlight-soft: rgba(34, 197, 94, .16);--card-bg: #131317;--studio-bg: #0e0e11;--studio-panel: #151519;--studio-panel-2: #1b1b20;--studio-line: #27272e;--studio-line-strong: #2f2f37;--studio-text: #ececf1;--studio-muted: #8b8b95;--studio-text-2: #c6cfc9;--studio-acc-soft: rgba(34, 163, 90, .18);--studio-acc-text: #86efac;--studio-code-bg: #34211f;--studio-code-text: #f87171;--studio-beta-bg: #3a2f0c;--studio-beta-text: #f5c451;--studio-warn-soft: rgba(245, 158, 11, .18);--studio-warn-text: #fcd34d;--studio-info-soft: rgba(59, 130, 246, .2);--studio-info-text: #93c5fd;--studio-danger-soft: rgba(239, 68, 68, .18);--studio-danger-text: #fca5a5;--studio-brand-soft: rgba(20, 83, 45, .55);--studio-brand-text: #bbf7d0;--accent-text: #75dfa0;--sys-bg: #000000;--sys-bg-2: #0f0f10;--sys-bg-3: #1d1d1f;--sys-label: #f5f5f7;--sys-label-2: #a1a1a6;--sys-label-3: #6e6e73;--sys-separator: rgba(255, 255, 255, .14);--sys-fill: rgba(255, 255, 255, .08);--sys-glass: rgba(29, 29, 31, .72);--sys-tint: #1a7d45;--sys-tint-hover: #1f8f50;--sys-tint-text: #3ecf7a;--sys-on-tint: #ffffff;--sys-green: #30d158;--sys-glyph-bg: #2c2c2e;--sys-glyph: #ffffff;--sys-glyph-invert: 1;--sys-font: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", sans-serif;--sys-pill: 980px;--sys-teal: #2dd4bf;--sys-sky: #38bdf8;--sys-blue: #3b8cff;--sys-indigo: #7b80ff;--sys-purple: #a970ff;--sys-orchid: #d77bff;--sys-gradient: linear-gradient(90deg, var(--sys-blue), var(--sys-purple));--radius: 18px;--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--ease: cubic-bezier(.16, 1, .3, 1);--nav-h: 68px;--bg-color: var(--bg);--bg-secondary: var(--paper);--primary-accent: var(--accent);--primary-accent-hover: var(--accent-mid);--primary-accent-light: var(--accent-soft);--text-color: var(--muted);--headline-color: var(--ink);--border-color: var(--line);--font-family: var(--font)}:root{--cat-1: var(--sys-green);--cat-2: var(--sys-teal);--cat-3: var(--sys-sky);--cat-4: var(--sys-blue);--cat-5: var(--sys-indigo);--cat-6: var(--sys-purple);--cat-7: var(--sys-orchid)}html{scrollbar-gutter:stable}html body{margin:0;padding:0;background-color:var(--bg);color:var(--muted);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden;width:100%;transition:background-color .25s ease}app-root{display:block}*{scrollbar-width:auto;scrollbar-color:color-mix(in srgb,var(--accent) 45%,transparent) transparent}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}
504</style><link rel="stylesheet" href="styles-KFCVANFN.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-KFCVANFN.css"></noscript><style ng-app-id="ng">@charset "UTF-8";[_nghost-ng-c2546005345]{display:block;height:var(--nav-h);font-family:var(--sys-font)}.nav[_ngcontent-ng-c2546005345]{position:fixed;top:0;left:0;right:0;z-index:9999;height:var(--nav-h);background:var(--sys-bg)}.nav__inner[_ngcontent-ng-c2546005345]{height:100%;max-width:1280px;margin:0 auto;padding:0 1.5rem;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:1rem}.nav__logo[_ngcontent-ng-c2546005345]{display:flex;align-items:center;flex-shrink:0}.nav__logo[_ngcontent-ng-c2546005345]   img[_ngcontent-ng-c2546005345]{height:26px;width:auto;display:block}.nav__links[_ngcontent-ng-c2546005345]{display:flex;align-items:center;justify-content:flex-start;gap:.15rem;min-width:0;max-width:100%;margin-left:.75rem}.nav__item[_ngcontent-ng-c2546005345]{position:relative}.nav__link[_ngcontent-ng-c2546005345]{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .85rem;border-radius:var(--sys-pill);border:0;background:transparent;font:inherit;font-size:.92rem;font-weight:500;letter-spacing:-.01em;color:var(--sys-label-2);text-decoration:none;cursor:pointer;white-space:nowrap;transition:background-color .2s ease,color .2s ease}.nav__link[_ngcontent-ng-c2546005345]:hover, .nav__link.is-open[_ngcontent-ng-c2546005345]{background:var(--sys-fill);color:var(--sys-label)}.nav__link.is-active[_ngcontent-ng-c2546005345]{background:var(--sys-fill);color:var(--sys-label);-webkit-text-stroke:.4px currentColor}.nav__link[_ngcontent-ng-c2546005345]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.nav__chev[_ngcontent-ng-c2546005345]{transition:transform .25s ease}.is-open[_ngcontent-ng-c2546005345]   .nav__chev[_ngcontent-ng-c2546005345]{transform:rotate(180deg)}.nav__panel[_ngcontent-ng-c2546005345]{position:absolute;top:calc(100% + 10px);left:50%;transform:translate(-50%,6px) scale(.98);transform-origin:top center;min-width:250px;padding:.4rem;background:var(--sys-bg-2);border:1px solid var(--sys-separator);border-radius:16px;box-shadow:0 20px 50px -20px #0000008c;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,transform .22s cubic-bezier(.16,1,.3,1),visibility 0s linear .2s}.nav__panel.is-open[_ngcontent-ng-c2546005345]{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%) scale(1);transition:opacity .18s ease,transform .22s cubic-bezier(.16,1,.3,1),visibility 0s}.nav__panel--product[_ngcontent-ng-c2546005345]{min-width:300px}.nav__menu-item[_ngcontent-ng-c2546005345]{display:flex;align-items:center;gap:.75rem;width:100%;padding:.6rem .7rem;border:0;border-radius:10px;background:transparent;color:var(--sys-label);text-decoration:none;font:inherit;text-align:left;cursor:pointer;transition:background-color .15s ease}.nav__menu-item[_ngcontent-ng-c2546005345]:hover{background:var(--sys-fill)}.nav__menu-item[_ngcontent-ng-c2546005345]   strong[_ngcontent-ng-c2546005345]{display:block;font-size:.9rem;font-weight:600;color:var(--sys-label)}.nav__menu-item[_ngcontent-ng-c2546005345]   small[_ngcontent-ng-c2546005345]{display:block;font-size:.78rem;color:var(--sys-label-2);margin-top:1px}.nav__menu-ico[_ngcontent-ng-c2546005345]{width:34px;height:34px;flex-shrink:0;display:grid;place-items:center;border-radius:9px;background:var(--sys-fill);color:var(--sys-label)}.nav__right[_ngcontent-ng-c2546005345]{grid-column:3;display:flex;align-items:center;gap:.35rem;flex-shrink:0}.nav__login[_ngcontent-ng-c2546005345]{font-size:.92rem;font-weight:500;letter-spacing:-.01em;color:var(--sys-label-2);text-decoration:none;padding:.5rem .85rem;border-radius:var(--sys-pill);transition:background-color .2s ease,color .2s ease}.nav__login[_ngcontent-ng-c2546005345]:hover{background:var(--sys-fill);color:var(--sys-label)}.nav__login[_ngcontent-ng-c2546005345]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.nav__cta[_ngcontent-ng-c2546005345]{display:inline-flex;align-items:center;gap:.45rem;margin-left:.35rem;padding:.6rem 1.1rem;border-radius:var(--sys-pill);background:var(--sys-label);color:var(--sys-bg);font-size:.9rem;font-weight:500;letter-spacing:-.01em;text-decoration:none;transition:opacity .2s ease}.nav__cta[_ngcontent-ng-c2546005345]   svg[_ngcontent-ng-c2546005345]{transition:transform .2s ease}.nav__cta[_ngcontent-ng-c2546005345]:hover{opacity:.86}.nav__cta[_ngcontent-ng-c2546005345]:hover   svg[_ngcontent-ng-c2546005345]{transform:translate(2px)}.nav__cta[_ngcontent-ng-c2546005345]:focus-visible{outline:2px solid var(--sys-label);outline-offset:3px}.nav__burger[_ngcontent-ng-c2546005345]{display:none;position:relative;width:42px;height:42px;border:0;border-radius:50%;background:transparent;cursor:pointer;margin-left:.4rem;transition:background-color .2s ease}.nav__burger[_ngcontent-ng-c2546005345]:hover{background:var(--sys-fill)}.nav__burger[_ngcontent-ng-c2546005345]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.nav__burger[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]{position:absolute;
504left:12px;right:12px;height:2px;background:var(--sys-label);border-radius:2px;transition:transform .3s cubic-bezier(.16,1,.3,1),top .3s ease}.nav__burger[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]:first-child{top:15px}.nav__burger[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]:last-child{top:24px}.nav__burger.is-open[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]{top:19.5px}.nav__burger.is-open[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]:first-child{transform:rotate(45deg)}.nav__burger.is-open[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345]:last-child{transform:rotate(-45deg)}.drawer[_ngcontent-ng-c2546005345]{display:none;position:fixed;z-index:9999;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--sys-bg);flex-direction:column;transform:translateY(-8px);opacity:0;visibility:hidden;transition:opacity .25s ease,transform .3s cubic-bezier(.16,1,.3,1),visibility 0s linear .3s}.drawer.is-open[_ngcontent-ng-c2546005345]{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .25s ease,transform .3s cubic-bezier(.16,1,.3,1),visibility 0s}.drawer__scroll[_ngcontent-ng-c2546005345]{flex:1;overflow-y:auto;padding:.75rem 1.25rem 1rem;-webkit-overflow-scrolling:touch}.drawer__link[_ngcontent-ng-c2546005345], .drawer__group-head[_ngcontent-ng-c2546005345]{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.95rem .25rem;border:0;border-bottom:1px solid var(--sys-separator);background:transparent;color:var(--sys-label);font:inherit;font-size:1.05rem;font-weight:500;letter-spacing:-.01em;text-decoration:none;cursor:pointer;text-align:left}.drawer__group-head[_ngcontent-ng-c2546005345]   svg[_ngcontent-ng-c2546005345]{transition:transform .25s ease;color:var(--sys-label-2)}.drawer__group-head.is-open[_ngcontent-ng-c2546005345]   svg[_ngcontent-ng-c2546005345]{transform:rotate(180deg)}.drawer__group-body[_ngcontent-ng-c2546005345]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.16,1,.3,1)}.drawer__group-body.is-open[_ngcontent-ng-c2546005345]{grid-template-rows:1fr}.drawer__group-body[_ngcontent-ng-c2546005345]   .drawer__group-inner[_ngcontent-ng-c2546005345]{min-height:0;overflow:hidden}.drawer__group-body[_ngcontent-ng-c2546005345]   a[_ngcontent-ng-c2546005345]{display:block;padding:.7rem .25rem .7rem 1rem;color:var(--sys-label-2);font-size:.98rem;font-weight:500;text-decoration:none;overflow:hidden}.drawer__group-body[_ngcontent-ng-c2546005345]   a[_ngcontent-ng-c2546005345]:first-child{padding-top:.5rem}.drawer__group-body[_ngcontent-ng-c2546005345]   a[_ngcontent-ng-c2546005345]:last-child{padding-bottom:.9rem;border-bottom:1px solid var(--sys-separator)}.drawer__actions[_ngcontent-ng-c2546005345]{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;padding:.9rem 1.25rem calc(1rem + env(safe-area-inset-bottom));border-top:1px solid var(--sys-separator);background:var(--sys-bg)}.drawer__login[_ngcontent-ng-c2546005345], .drawer__cta[_ngcontent-ng-c2546005345]{display:flex;align-items:center;justify-content:center;padding:.9rem 1rem;border-radius:var(--sys-pill);font-size:.95rem;font-weight:500;letter-spacing:-.01em;text-decoration:none}.drawer__login[_ngcontent-ng-c2546005345]{color:var(--sys-label);background:transparent;box-shadow:inset 0 0 0 1px var(--sys-separator)}.drawer__cta[_ngcontent-ng-c2546005345]{background:var(--sys-label);color:var(--sys-bg)}.nav-backdrop[_ngcontent-ng-c2546005345]{position:fixed;inset:0;z-index:9998;background:#00000080;opacity:0;visibility:hidden;transition:opacity .25s ease,visibility 0s linear .25s}.nav-backdrop.is-open[_ngcontent-ng-c2546005345]{opacity:1;visibility:visible;transition:opacity .25s ease,visibility 0s}@media(max-width:1220px){.nav__links[_ngcontent-ng-c2546005345], .nav__login[_ngcontent-ng-c2546005345], .nav__cta[_ngcontent-ng-c2546005345]{display:none}.nav__burger[_ngcontent-ng-c2546005345]{display:block}.drawer[_ngcontent-ng-c2546005345]{display:flex}.nav-backdrop[_ngcontent-ng-c2546005345]{display:none}}@media(max-width:480px){.nav__inner[_ngcontent-ng-c2546005345]{padding:0 1rem}}
504@media(prefers-reduced-motion:reduce){.nav__panel[_ngcontent-ng-c2546005345], .drawer[_ngcontent-ng-c2546005345], .nav__burger[_ngcontent-ng-c2546005345]   span[_ngcontent-ng-c2546005345], .nav__cta[_ngcontent-ng-c2546005345], .nav__chev[_ngcontent-ng-c2546005345]{transition:none!important}}</style><style ng-app-id="ng">@charset "UTF-8";[_nghost-ng-c2236624726]{display:block;font-family:var(--sys-font);--ink: var(--sys-label);--ink-2: var(--sys-label-2);--muted: var(--sys-label-2);--line: var(--sys-separator);--line-2: color-mix(in srgb, var(--sys-label) 20%, transparent);--paper: var(--sys-bg-2);--paper-2: var(--sys-fill);--card-bg: var(--sys-bg-2);--bg: var(--sys-bg);--forest: var(--sys-blue);--forest-deep: var(--sys-label);--forest-soft: var(--sys-fill);--accent: var(--sys-blue);--accent-soft: var(--sys-fill);--highlight: var(--sys-green);--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font: var(--sys-font);--app-bg: var(--studio-bg);--app-line: var(--studio-line);--app-text: var(--studio-text);--app-muted: var(--studio-muted);--rail-top: var(--nav-h)}.docs[_ngcontent-ng-c2236624726]{background:var(--sys-bg);color:var(--sys-label-2);-webkit-font-smoothing:antialiased}.docs__shell[_ngcontent-ng-c2236624726]{display:grid;grid-template-columns:274px minmax(0,1fr) 232px;gap:0;max-width:1440px;margin:0 auto;align-items:stretch}h1[_ngcontent-ng-c2236624726], h2[_ngcontent-ng-c2236624726], h3[_ngcontent-ng-c2236624726]{margin:0;color:var(--sys-label);font-weight:600;letter-spacing:-.03em}.docs__icon-btn[_ngcontent-ng-c2236624726]{display:grid;place-items:center;width:30px;height:30px;border:0;border-radius:50%;background:transparent;color:var(--sys-label-2);cursor:pointer;transition:background-color .2s ease,color .2s ease}.docs__icon-btn[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex}.docs__icon-btn[_ngcontent-ng-c2236624726]:hover{background:var(--sys-fill);color:var(--sys-label)}.docs__nav[_ngcontent-ng-c2236624726]{position:sticky;top:var(--rail-top);height:calc(100vh - var(--rail-top));display:flex;flex-direction:column;padding:1.5rem 1rem 1.5rem 1.5rem;border-right:1px solid var(--sys-separator);overflow:hidden}.docs__nav-head[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:1rem}.docs__nav-head[_ngcontent-ng-c2236624726]   h2[_ngcontent-ng-c2236624726]{font-size:.78rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--sys-label-3)}.docs__nav-close[_ngcontent-ng-c2236624726]{display:none}.docs__search[_ngcontent-ng-c2236624726]{position:relative;display:flex;align-items:center;gap:.5rem;padding:0 .7rem;margin-bottom:1rem;border:1px solid transparent;border-radius:12px;background:var(--sys-fill);color:var(--sys-label-3);transition:border-color .2s ease,box-shadow .2s ease}.docs__search[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;flex-shrink:0}.docs__search[_ngcontent-ng-c2236624726]:focus-within{border-color:color-mix(in srgb,var(--sys-blue) 55%,transparent);box-shadow:0 0 0 4px color-mix(in srgb,var(--sys-blue) 14%,transparent)}.docs__search[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]{flex:1;min-width:0;padding:.6rem 0;border:0;background:transparent;font-family:var(--sys-font);font-size:.88rem;letter-spacing:-.01em;color:var(--sys-label)}.docs__search[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]::placeholder{color:var(--sys-label-3)}.docs__search[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]:focus{outline:none}.docs__search-clear[_ngcontent-ng-c2236624726]{display:grid;place-items:center;width:20px;height:20px;border:0;border-radius:50%;background:var(--sys-bg-3);color:var(--sys-label-2);cursor:pointer}.docs__search-clear[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex}.docs__search-clear[_ngcontent-ng-c2236624726]:hover{color:var(--sys-label)}.docs__tree[_ngcontent-ng-c2236624726]{flex:1;min-height:0;overflow-y:auto;padding-right:.35rem;scrollbar-width:thin}.docs__tree[_ngcontent-ng-c2236624726]::-webkit-scrollbar{width:6px}.docs__tree[_ngcontent-ng-c2236624726]::-webkit-scrollbar-track{background:transparent}.docs__tree[_ngcontent-ng-c2236624726]::-webkit-scrollbar-thumb{background:var(--sys-separator);border-radius:3px}.docs__group[_ngcontent-ng-c2236624726] + .docs__group[_ngcontent-ng-c2236624726]{margin-top:.15rem}.docs__group-head[_ngcontent-ng-c2236624726]{display:flex;align-items:center;gap:.55rem;width:100%;padding:.5rem .55rem;border:0;border-radius:10px;background:transparent;font-family:var(--sys-font);font-size:.85rem;font-weight:600;letter-spacing:-.01em;color:var(--sys-label);cursor:pointer;text-align:left;transition:background-color .2s ease}.docs__group-head[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;flex-shrink:0;color:var(--sys-label-3)}.docs__group-head[_ngcontent-ng-c2236624726]   span[_ngcontent-ng-c2236624726]:first-of-type{flex:1;min-width:0}.docs__group-head[_ngcontent-ng-c2236624726]:hover{background:var(--sys-fill)}.docs__group-head[_ngcontent-ng-c2236624726]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.docs__chev[_ngcontent-ng-c2236624726]{position:relative;flex-shrink:0;width:10px;height:10px}.docs__chev[_ngcontent-ng-c2236624726]:before, .docs__chev[_ngcontent-ng-c2236624726]:after{content:"";position:absolute;top:50%;left:0;width:100%;height:1.4px;border-radius:2px;background:var(--sys-label-3);transition:transform .22s var(--ease)}.docs__chev[_ngcontent-ng-c2236624726]:after{transform:rotate(90deg)}.docs__group-head.is-open[_ngcontent-ng-c2236624726]   .docs__chev[_ngcontent-ng-c2236624726]:after{transform:rotate(0)}.docs__links[_ngcontent-ng-c2236624726]{padding:0 0 0 1.45rem;list-style:none;border-left:1px solid var(--sys-separator);margin:.15rem 0 .4rem 1.05rem}.docs__links[_ngcontent-ng-c2236624726]   a[_ngcontent-ng-c2236624726]{display:block;padding:.4rem .6rem;border-radius:8px;font-size:.85rem;letter-spacing:-.01em;line-height:1.4;color:var(--sys-label-2);text-decoration:none;cursor:pointer;transition:background-color .15s ease,color .15s ease}.docs__links[_ngcontent-ng-c2236624726]   a[_ngcontent-ng-c2236624726]:hover{background:var(--sys-fill);color:var(--sys-label)}.docs__links[_ngcontent-ng-c2236624726]   a.is-active[_ngcontent-ng-c2236624726]{background:var(--sys-label);color:var(--sys-bg);font-weight:500}
504.docs__empty[_ngcontent-ng-c2236624726]{margin:1rem .55rem;font-size:.85rem;line-height:1.5;color:var(--sys-label-3)}.docs__main[_ngcontent-ng-c2236624726]{min-width:0;padding:2rem clamp(1.5rem,3vw,3rem) 4rem}.docs__crumb[_ngcontent-ng-c2236624726]{display:flex;align-items:center;gap:.5rem;margin:0 0 1.25rem;font-size:.78rem;letter-spacing:-.005em;color:var(--sys-label-3)}.docs__crumb-sep[_ngcontent-ng-c2236624726]{color:var(--sys-label-3);opacity:.6}.docs__crumb-here[_ngcontent-ng-c2236624726]{color:var(--sys-label-2)}.docs__notice[_ngcontent-ng-c2236624726]{display:flex;align-items:flex-start;gap:.6rem;margin:0 0 2rem;padding:.75rem .95rem;border-radius:14px;background:var(--sys-fill);font-size:.83rem;line-height:1.5;color:var(--sys-label-2)}.docs__notice[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;flex-shrink:0;margin-top:1px;color:var(--sys-label-3)}.docs__toc[_ngcontent-ng-c2236624726]{position:sticky;top:var(--rail-top);height:calc(100vh - var(--rail-top));display:flex;flex-direction:column;padding:1.5rem 1.5rem 1.5rem 1rem;overflow:hidden}.docs__toc-list[_ngcontent-ng-c2236624726]{flex:1;min-height:0;overflow-y:auto;margin:0;padding:0;list-style:none;scrollbar-width:thin}.docs__toc-list[_ngcontent-ng-c2236624726]::-webkit-scrollbar{width:6px}.docs__toc-list[_ngcontent-ng-c2236624726]::-webkit-scrollbar-track{background:transparent}.docs__toc-list[_ngcontent-ng-c2236624726]::-webkit-scrollbar-thumb{background:var(--sys-separator);border-radius:3px}.docs__toc-list[_ngcontent-ng-c2236624726]   a[_ngcontent-ng-c2236624726]{display:block;padding:.32rem 0 .32rem .8rem;border-left:1.5px solid var(--sys-separator);font-size:.8rem;line-height:1.45;color:var(--sys-label-3);text-decoration:none;cursor:pointer;transition:color .15s ease,border-color .15s ease}.docs__toc-list[_ngcontent-ng-c2236624726]   a[_ngcontent-ng-c2236624726]:hover{color:var(--sys-label)}.docs__toc-list[_ngcontent-ng-c2236624726]   a.is-active[_ngcontent-ng-c2236624726]{color:var(--sys-label);border-left-color:var(--sys-label)}.docs__toc-list[_ngcontent-ng-c2236624726]   li.is-sub[_ngcontent-ng-c2236624726]   a[_ngcontent-ng-c2236624726]{padding-left:1.5rem;font-size:.76rem}.docs__pager[_ngcontent-ng-c2236624726]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sys-separator)}.docs__page[_ngcontent-ng-c2236624726]{display:flex;flex-direction:column;gap:.25rem;padding:.95rem 1.1rem;border:1px solid var(--sys-separator);border-radius:16px;text-decoration:none;cursor:pointer;transition:border-color .2s ease,background-color .2s ease}.docs__page[_ngcontent-ng-c2236624726]:hover{border-color:color-mix(in srgb,var(--sys-label) 20%,transparent);background:var(--sys-fill)}.docs__page--next[_ngcontent-ng-c2236624726]{text-align:right;grid-column:2}.docs__page-dir[_ngcontent-ng-c2236624726]{font-size:.72rem;color:var(--sys-label-3)}.docs__page-title[_ngcontent-ng-c2236624726]{font-size:.92rem;font-weight:500;letter-spacing:-.02em;color:var(--sys-label)}.docs__bar[_ngcontent-ng-c2236624726], .docs__scrim[_ngcontent-ng-c2236624726]{display:none}.docs__article[_ngcontent-ng-c2236624726]{transition:opacity .2s ease;min-height:calc(100vh - var(--nav-h));position:relative}.docs__article.is-loading[_ngcontent-ng-c2236624726]{opacity:0;transition:none;pointer-events:none}.docs__article[_ngcontent-ng-c2236624726]     h1{color:var(--sys-label);font-size:clamp(2rem,3.4vw,2.9rem);font-weight:600;letter-spacing:-.045em;margin:0 0 .35rem;line-height:1.1;overflow:hidden}.docs__article[_ngcontent-ng-c2236624726]     h1 img{vertical-align:middle;filter:brightness(0) invert(var(--sys-glyph-invert));margin-right:10px;position:relative;top:-3px}.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview{position:absolute;right:0;top:0;width:180px;height:auto}.docs__article[_ngcontent-ng-c2236624726]     h1+p, .docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p{font-size:1.1rem;color:var(--sys-label-2);line-height:1.6;margin:0 0 1.75rem;padding-bottom:1.75rem;border-bottom:1px solid var(--sys-separator)}.docs__article[_ngcontent-ng-c2236624726]     h1:has(+.node-card-preview){margin-right:200px}.docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p{margin-right:200px}.docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p+h2, .docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p+h2+p{margin-right:200px}@media(max-width:768px){.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview{position:static;display:block;margin:1rem auto 1.25rem;width:min(220px,60%)}.docs__article[_ngcontent-ng-c2236624726]     h1:has(+.node-card-preview){margin-right:0}.docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p, .docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p+h2, .docs__article[_ngcontent-ng-c2236624726]     h1+.node-card-preview+p+h2+p{margin-right:0}.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview+p{font-size:1rem}}@media(max-width:480px){.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview{width:min(200px,80%)}}.docs__article[_ngcontent-ng-c2236624726]     h2{color:var(--sys-label);font-size:1.55rem;font-weight:600;letter-spacing:-.035em;margin:2.75rem 0 1rem;padding-top:.5rem;scroll-margin-top:calc(var(--nav-h) + 1.5rem)}.docs__article[_ngcontent-ng-c2236624726]     h3{color:var(--sys-label);font-size:1.12rem;font-weight:600;letter-spacing:-.025em;margin:1.75rem 0 .75rem;scroll-margin-top:calc(var(--nav-h) + 1.5rem)}.docs__article[_ngcontent-ng-c2236624726]     h3 img{vertical-align:middle;filter:brightness(0) invert(var(--sys-glyph-invert));margin-right:6px;position:relative;top:-1px}.docs__article[_ngcontent-ng-c2236624726]     p{line-height:1.7;margin-bottom:1rem;color:var(--sys-label-2)}.docs__article[_ngcontent-ng-c2236624726]     ul, .docs__article[_ngcontent-ng-c2236624726]     ol{margin-bottom:1.5rem;padding-left:1.4rem;color:var(--sys-label-2)}.docs__article[_ngcontent-ng-c2236624726]     ul li, .docs__article[_ngcontent-ng-c2236624726]     ol li{margin-bottom:.45rem;line-height:1.65}.docs__article[_ngcontent-ng-c2236624726]     a{color:var(--sys-blue);text-decoration:none;cursor:pointer}.docs__article[_ngcontent-ng-c2236624726]     a:hover{text-decoration:underline;text-underline-offset:3px}.docs__article[_ngcontent-ng-c2236624726]     code{background:var(--sys-fill);padding:.15rem .4rem;border-radius:5px;font-family:var(--mono);font-size:.85em;color:var(--sys-label);-webkit-box-decoration-break:clone;box-decoration-break:clone}.docs__article[_ngcontent-ng-c2236624726]     pre{background:var(--studio-bg);border:1px solid var(--studio-line);border-radius:14px;padding:1rem 1.25rem;overflow-x:auto;margin:1rem 0 1.5rem}.docs__article[_ngcontent-ng-c2236624726]     pre code{background:none;padding:0;font-size:.88rem;color:var(--studio-text);display:block;white-space:pre}.docs__article[_ngcontent-ng-c2236624726]     strong{color:var(--sys-label);font-weight:600}.docs__article[_ngcontent-ng-c2236624726]     table{width:100%;border-collapse:collapse;margin:1rem 0 1.5rem;font-size:.9rem;border:1px solid var(--sys-separator);border-radius:14px;overflow:hidden;display:table}.docs__article[_ngcontent-ng-c2236624726]     table th, .docs__article[_ngcontent-ng-c2236624726]     table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--sys-separator)}.docs__article[_ngcontent-ng-c2236624726]     table th{background:var(--sys-fill);color:var(--sys-label);font-weight:600;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em}.docs__article[_ngcontent-ng-c2236624726]     table td{color:var(--sys-label-2)}.docs__article[_ngcontent-ng-c2236624726]     table td code{font-size:.85em}.docs__article[_ngcontent-ng-c2236624726]     table tr:last-child td{border-bottom:none}.docs__article[_ngcontent-ng-c2236624726]     table tbody tr:hover{background:var(--sys-fill)}.docs__article[_ngcontent-ng-c2236624726]     blockquote{padding:1rem 1.25rem;border-radius:14px;margin:1.5rem 0;border-left:3px solid var(--sys-blue);background:var(--sys-fill)}.docs__article[_ngcontent-ng-c2236624726]     blockquote p{margin:0;color:var(--sys-label-2)}.docs__article[_ngcontent-ng-c2236624726]     hr{border:none;border-top:1px solid var(--sys-separator);margin:2.5rem 0}.config-table[_ngcontent-ng-c2236624726]{width:100%;border-collapse:collapse;margin:1rem 0 1.5rem;font-size:.9rem}.config-table[_ngcontent-ng-c2236624726]   th[_ngcontent-ng-c2236624726], .config-table[_ngcontent-ng-c2236624726]   td[_ngcontent-ng-c2236624726]{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--line)}.config-table[_ngcontent-ng-c2236624726]   th[_ngcontent-ng-c2236624726]{background:var(--paper);color:var(--ink);font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em}.config-table[_ngcontent-ng-c2236624726]   td[_ngcontent-ng-c2236624726]{color:var(--muted)}.config-table[_ngcontent-ng-c2236624726]   td[_ngcontent-ng-c2236624726]   code[_ngcontent-ng-c2236624726]{font-size:.85em}.config-table[_ngcontent-ng-c2236624726]   tr[_ngcontent-ng-c2236624726]:last-child   td[_ngcontent-ng-c2236624726]{border-bottom:none}.callout[_ngcontent-ng-c2236624726]{padding:1rem 1.25rem;border-radius:8px;margin:1.5rem 0;border-left:4px solid}.callout.info[_ngcontent-ng-c2236624726]{background:var(--forest-soft);border-color:var(--forest)}.callout.warning[_ngcontent-ng-c2236624726]{background:#fef3e2;border-color:#b45309}.callout.success[_ngcontent-ng-c2236624726]{background:var(--mint-soft);
504border-color:var(--mint)}.callout[_ngcontent-ng-c2236624726]   strong[_ngcontent-ng-c2236624726]{color:var(--ink)}.feature-grid[_ngcontent-ng-c2236624726]{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin:1.5rem 0}.feature-grid[_ngcontent-ng-c2236624726]   .feature-item[_ngcontent-ng-c2236624726]{padding:1.25rem;background:var(--card-bg);border:1px solid var(--line);border-radius:8px}.feature-grid[_ngcontent-ng-c2236624726]   .feature-item[_ngcontent-ng-c2236624726]   h3[_ngcontent-ng-c2236624726]{margin:0 0 .5rem;font-size:1rem;color:var(--ink)}.feature-grid[_ngcontent-ng-c2236624726]   .feature-item[_ngcontent-ng-c2236624726]   p[_ngcontent-ng-c2236624726]{margin:0;font-size:.9rem;color:var(--muted)}.trigger-grid[_ngcontent-ng-c2236624726]{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin:1.5rem 0}.trigger-grid[_ngcontent-ng-c2236624726]   .trigger-item[_ngcontent-ng-c2236624726]{padding:1.5rem;background:var(--card-bg);border:1px solid var(--line);border-radius:12px;cursor:pointer;transition:all .2s ease}.trigger-grid[_ngcontent-ng-c2236624726]   .trigger-item[_ngcontent-ng-c2236624726]:hover{border-color:var(--forest);transform:translateY(-2px);box-shadow:0 16px 36px -22px #0003}.trigger-grid[_ngcontent-ng-c2236624726]   .trigger-item[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{color:var(--forest);margin-bottom:.75rem}.trigger-grid[_ngcontent-ng-c2236624726]   .trigger-item[_ngcontent-ng-c2236624726]   h3[_ngcontent-ng-c2236624726]{color:var(--ink);margin:0 0 .5rem;font-size:1.1rem}.trigger-grid[_ngcontent-ng-c2236624726]   .trigger-item[_ngcontent-ng-c2236624726]   p[_ngcontent-ng-c2236624726]{margin:0;font-size:.9rem;color:var(--muted)}.ai-modal-backdrop[_ngcontent-ng-c2236624726]{position:fixed;inset:0;background:#0d1f168c;backdrop-filter:blur(6px);z-index:10002;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s ease}.ai-modal-backdrop.open[_ngcontent-ng-c2236624726]{opacity:1;pointer-events:all}.ai-modal-backdrop.open[_ngcontent-ng-c2236624726]   .ai-modal[_ngcontent-ng-c2236624726]{transform:translateY(0) scale(1)}.ai-modal[_ngcontent-ng-c2236624726]{width:min(780px,92vw);height:min(640px,88vh);background:var(--app-bg);border:1px solid var(--studio-line-strong);border-radius:20px;display:flex;flex-direction:column;box-shadow:0 32px 100px -30px #0009;transform:translateY(16px) scale(.97);transition:transform .25s cubic-bezier(.34,1.56,.64,1);overflow:hidden;color:var(--app-text)}.ai-modal-header[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--app-line);flex-shrink:0;background:linear-gradient(135deg,rgba(34,163,90,.1) 0%,transparent 60%)}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-title[_ngcontent-ng-c2236624726]{display:flex;align-items:center;gap:.75rem}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-avatar[_ngcontent-ng-c2236624726]{width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,#2f8a55,var(--forest));display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-avatar[_ngcontent-ng-c2236624726]   img[_ngcontent-ng-c2236624726]{filter:brightness(0) invert(1)}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-avatar[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center;margin-top:-2px}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-title-text[_ngcontent-ng-c2236624726]{display:flex;flex-direction:column;gap:.1rem}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-name[_ngcontent-ng-c2236624726]{color:var(--app-text);font-size:.95rem;font-weight:600;line-height:1}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-sub[_ngcontent-ng-c2236624726]{color:var(--app-muted);font-size:.72rem;line-height:1}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-close[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;line-height:0;background:color-mix(in srgb,var(--app-text) 5%,transparent);border:1px solid var(--app-line);border-radius:8px;
504cursor:pointer;transition:all .15s;padding:0;color:var(--app-text)}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-close[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center}.ai-modal-header[_ngcontent-ng-c2236624726]   .ai-modal-close[_ngcontent-ng-c2236624726]:hover{background:color-mix(in srgb,var(--app-text) 10%,transparent)}.ai-fab[_ngcontent-ng-c2236624726]{position:fixed;bottom:2rem;right:2rem;display:flex;align-items:center;justify-content:center;gap:.45rem;padding:.6rem 2rem .6rem .9rem;background:var(--forest);border:none;border-radius:999px;cursor:pointer;z-index:10001;box-shadow:0 1px #ffffff26 inset,0 8px 20px -10px #14532db3;transition:transform .2s,box-shadow .2s;color:#fff}.ai-fab[_ngcontent-ng-c2236624726]:hover{background:var(--forest-deep);transform:translateY(-2px)}.ai-fab[_ngcontent-ng-c2236624726]   .ai-fab-label[_ngcontent-ng-c2236624726]{font-size:.85rem;font-weight:600;color:#fff;font-family:var(--font);line-height:1;position:relative}.ai-fab[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center}.ai-fab[_ngcontent-ng-c2236624726]   .ai-fab-beta[_ngcontent-ng-c2236624726]{position:absolute;top:.32rem;right:.96rem;font-size:.42rem;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:#ffffffa6;line-height:1;pointer-events:none}@media(max-width:1024px){.ai-fab[_ngcontent-ng-c2236624726]{width:52px;height:52px;padding:0;border-radius:50%;bottom:1.5rem;right:1.5rem}.ai-fab[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center;margin-top:-2px}.ai-fab[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]   svg[_ngcontent-ng-c2236624726]{display:block}.ai-fab[_ngcontent-ng-c2236624726]   .ai-fab-label[_ngcontent-ng-c2236624726], .ai-fab[_ngcontent-ng-c2236624726]   .ai-fab-beta[_ngcontent-ng-c2236624726]{display:none}}.ai-badge[_ngcontent-ng-c2236624726]{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 6px;border-radius:4px;background:color-mix(in srgb,var(--app-text) 12%,transparent);color:var(--app-text)}.ai-body[_ngcontent-ng-c2236624726]{flex:1;overflow-y:auto;padding:1.25rem 1.5rem;display:flex;flex-direction:column;gap:1rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]{display:flex;align-items:flex-start;gap:.6rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.user[_ngcontent-ng-c2236624726]{flex-direction:row-reverse}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-msg-avatar[_ngcontent-ng-c2236624726]{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,#2f8a55,var(--forest));display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-msg-avatar[_ngcontent-ng-c2236624726]   img[_ngcontent-ng-c2236624726]{filter:brightness(0) invert(1)}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-msg-avatar[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]{background:#22a35a14;border:1px solid rgba(34,163,90,.18);border-radius:10px 10px 10px 4px;padding:.6rem .85rem;font-size:.875rem;color:var(--app-text);line-height:1.6}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     p{margin:0 0 .4rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     p:last-child{margin:0}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     strong{color:var(--app-text)}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     em{color:var(--app-text);font-style:italic}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     code{background:color-mix(in srgb,var(--app-text) 8%,transparent);padding:.1rem .3rem;border-radius:3px;font-size:.82rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     pre{background:color-mix(in srgb,var(--app-text) 6%,var(--app-bg));padding:.5rem;border-radius:6px;overflow-x:auto;margin:.4rem 0}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     pre code{background:none;padding:0}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h1, .ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h2, .ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h3{color:var(--app-text);font-weight:600;margin:.5rem 0 .2rem;line-height:1.3}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h1{font-size:1rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h2{font-size:.95rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     h3{font-size:.875rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     ul, .ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     ol{margin:.2rem 0 .4rem;padding-left:1.2rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     li{margin-bottom:.15rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:.82rem;border:1px solid rgba(34,163,90,.2);border-radius:6px;overflow:hidden}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     th, .ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     td{padding:.4rem .6rem;text-align:left;border:1px solid rgba(34,163,90,.15)}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     th{background:#22a35a1f;color:var(--app-text);font-weight:600;font-size:.78rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     td{color:var(--app-text)}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.bot[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]     tr:hover td{background:color-mix(in srgb,var(--app-text) 3%,transparent)}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg.user[_ngcontent-ng-c2236624726]   .bubble[_ngcontent-ng-c2236624726]{background:var(--app-panel);border:1px solid var(--app-line);border-radius:10px 10px 4px;padding:.6rem .85rem;font-size:.875rem;color:var(--app-text);line-height:1.6;margin-left:2rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]{display:flex;align-items:center;margin-top:.5rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-sources-label[_ngcontent-ng-c2236624726]{font-size:.7rem;color:var(--app-muted);margin-right:auto}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-actions[_ngcontent-ng-c2236624726]{display:flex;align-items:center;gap:.15rem;margin-left:auto}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-copy-btn[_ngcontent-ng-c2236624726], .ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-feedback-btn[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--app-muted);cursor:pointer;padding:.2rem;border-radius:4px;flex-shrink:0;transition:all .15s}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-copy-btn[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726], .ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-feedback-btn[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-copy-btn[_ngcontent-ng-c2236624726]:hover, .ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-feedback-btn[_ngcontent-ng-c2236624726]:hover{color:var(--m
504int);background:#22a35a1f}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-bottom-row[_ngcontent-ng-c2236624726]   .ai-feedback-btn.active[_ngcontent-ng-c2236624726]{color:var(--mint);pointer-events:none}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-sources[_ngcontent-ng-c2236624726]{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.3rem}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-sources[_ngcontent-ng-c2236624726]   .ai-source-btn[_ngcontent-ng-c2236624726]{display:inline-flex;align-items:center;gap:4px;padding:.25rem .6rem;font-size:.72rem;color:#86efac;background:#22a35a1a;border:1px solid rgba(34,163,90,.22);border-radius:6px;cursor:pointer;text-decoration:none;transition:all .15s}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-sources[_ngcontent-ng-c2236624726]   .ai-source-btn[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-sources[_ngcontent-ng-c2236624726]   .ai-source-btn[_ngcontent-ng-c2236624726]   .ai-source-icon[_ngcontent-ng-c2236624726]{flex-shrink:0}.ai-body[_ngcontent-ng-c2236624726]   .ai-msg[_ngcontent-ng-c2236624726]   .ai-sources[_ngcontent-ng-c2236624726]   .ai-source-btn[_ngcontent-ng-c2236624726]:hover{background:#22a35a2e;border-color:#22a35a59}.ai-body[_ngcontent-ng-c2236624726]   .ai-cursor[_ngcontent-ng-c2236624726]{color:var(--mint);font-size:.9rem;animation:_ngcontent-ng-c2236624726_blink .8s step-end infinite;margin-left:2px}@keyframes _ngcontent-ng-c2236624726_blink{50%{opacity:0}}.ai-body[_ngcontent-ng-c2236624726]   .bubble.thinking[_ngcontent-ng-c2236624726]{display:flex;align-items:center;gap:5px;padding:.75rem 1rem}.ai-body[_ngcontent-ng-c2236624726]   .bubble.thinking[_ngcontent-ng-c2236624726]   .dot[_ngcontent-ng-c2236624726]{width:7px;height:7px;border-radius:50%;background:var(--mint);opacity:.4;animation:_ngcontent-ng-c2236624726_thinking-bounce 1.2s ease-in-out infinite}.ai-body[_ngcontent-ng-c2236624726]   .bubble.thinking[_ngcontent-ng-c2236624726]   .dot[_ngcontent-ng-c2236624726]:nth-child(1){animation-delay:0s}.ai-body[_ngcontent-ng-c2236624726]   .bubble.thinking[_ngcontent-ng-c2236624726]   .dot[_ngcontent-ng-c2236624726]:nth-child(2){animation-delay:.2s}.ai-body[_ngcontent-ng-c2236624726]   .bubble.thinking[_ngcontent-ng-c2236624726]   .dot[_ngcontent-ng-c2236624726]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-ng-c2236624726_thinking-bounce{0%,80%,to{transform:translateY(0);opacity:.4}40%{transform:translateY(-6px);opacity:1}}.ai-footer[_ngcontent-ng-c2236624726]{padding:1rem 1.5rem;border-top:1px solid var(--app-line);display:flex;align-items:center;gap:.75rem;flex-shrink:0}.ai-footer[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]{flex:1;padding:.7rem 1rem;border-radius:10px;border:1px solid var(--app-line);background:var(--app-panel);color:var(--app-text);font-family:inherit;font-size:.875rem;outline:none;transition:border-color .2s}.ai-footer[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]::placeholder{color:var(--app-muted)}.ai-footer[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]:focus{border-color:var(--mint)}.ai-footer[_ngcontent-ng-c2236624726]   input[_ngcontent-ng-c2236624726]:disabled{opacity:.4;cursor:not-allowed}.ai-footer[_ngcontent-ng-c2236624726]   .ai-send[_ngcontent-ng-c2236624726]{flex-shrink:0;width:42px;height:42px;padding:0;border-radius:10px;border:none;background:var(--forest);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:opacity .15s,background .15s}.ai-footer[_ngcontent-ng-c2236624726]   .ai-send[_ngcontent-ng-c2236624726]:hover{background:var(--forest-deep)}.ai-footer[_ngcontent-ng-c2236624726]   .ai-send[_ngcontent-ng-c2236624726]:disabled{opacity:.35;cursor:not-allowed}.ai-footer[_ngcontent-ng-c2236624726]   .ai-send[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex;align-items:center;justify-content:center}@media(max-width:1220px){.docs__shell[_ngcontent-ng-c2236624726]{grid-template-columns:250px minmax(0,1fr)}.docs__toc[_ngcontent-ng-c2236624726]{position:fixed;top:var(--nav-h);right:0;bottom:0;z-index:1200;width:min(300px,82vw);height:calc(100% - var(--nav-h));padding:1.5rem;background:var(--sys-bg);border-left:1px solid var(--sys-separator);transform:translate(100%);transition:transform .28s var(--ease)}.docs__toc.is-open[_ngcontent-ng-c2236624726]{transform:translate(0)}.docs__nav-close[_ngcontent-ng-c2236624726]{display:grid}}@media(max-width:1024px){.docs__shell[_ngcontent-ng-c2236624726]{grid-template-columns:minmax(0,1fr)}.docs__bar[_ngcontent-ng-c2236624726]{position:sticky;top:var(--nav-h);z-index:900;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem 1rem;background:var(--sys-bg);border-bottom:1px solid var(--sys-separator)}.docs__bar-btn[_ngcontent-ng-c2236624726]{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .8rem;border:0;border-radius:var(--sys-pill);background:var(--sys-fill);font-family:var(--sys-font);font-size:.8rem;font-weight:500;color:var(--sys-label);cursor:pointer}.docs__bar-btn[_ngcontent-ng-c2236624726]   lucide-icon[_ngcontent-ng-c2236624726]{display:flex}.docs__bar-btn[_ngcontent-ng-c2236624726]:hover{background:var(--sys-bg-3)}.docs__bar-here[_ngcontent-ng-c2236624726]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;font-size:.8rem;color:var(--sys-label-3)}.docs__scrim[_ngcontent-ng-c2236624726]{display:block;position:fixed;inset:var(--nav-h) 0 0;z-index:1100;background:#00000073;opacity:0;pointer-events:none;transition:opacity .25s ease}.docs__scrim.is-open[_ngcontent-ng-c2236624726]{opacity:1;pointer-events:auto}.docs__nav[_ngcontent-ng-c2236624726]{position:fixed;top:var(--nav-h);left:0;bottom:0;z-index:1200;width:min(320px,86vw);height:calc(100% - var(--nav-h));padding:1.5rem;background:var(--sys-bg);border-right:1px solid var(--sys-separator);transform:translate(-100%);transition:transform .28s var(--ease)}.docs__nav.is-open[_ngcontent-ng-c2236624726]{transform:translate(0)}.docs__main[_ngcontent-ng-c2236624726]{padding:1.75rem 1.25rem 3rem}}@media(max-width:600px){.docs__pager[_ngcontent-ng-c2236624726]{grid-template-columns:minmax(0,1fr)}.docs__page--next[_ngcontent-ng-c2236624726]{grid-column:1;text-align:left}.docs__bar-here[_ngcontent-ng-c2236624726]{display:none}}@media(min-resolution:2.4dppx){.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview{position:static;display:block;margin:1rem auto 1.25rem;width:min(200px,60%)}.doc-article[_ngcontent-ng-c2236624726]     h1:has(+.node-card-preview){margin-right:0}.docs__article[_ngcontent-ng-c2236624726]     .node-card-preview+p, .docs__article[_ngcontent-ng-c2236624726]     .node-card-preview+p+h2, .docs__article[_ngcontent-ng-c2236624726]     .node-card-preview+p+h2+p{margin-right:0}}</style><style ng-app-id="ng">@charset "UTF-8";[_nghost-ng-c611946033]{display:block;width:100%;font-family:var(--sys-font)}.foot[_ngcontent-ng-c611946033]{background:var(--sys-bg);border-top:1px solid var(--sys-separator);color:var(--sys-label-2);-webkit-font-smoothing:antialiased}.foot__inner[_ngcontent-ng-c611946033]{max-width:1280px;margin:0 auto;padding:clamp(3rem,6vw,4.5rem) 1.5rem 2rem}.foot__top[_ngcontent-ng-c611946033]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,3fr);gap:clamp(2rem,5vw,4rem);padding-bottom:clamp(2.25rem,4vw,3rem);border-bottom:1px solid var(--sys-separator)}.foot__logo[_ngcontent-ng-c611946033]{display:inline-block}.foot__logo[_ngcontent-ng-c611946033]   img[_ngcontent-ng-c611946033]{height:26px;width:auto;display:block}.foot__logo[_ngcontent-ng-c611946033]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:4px;border-radius:4px}.foot__tagline[_ngcontent-ng-c611946033]{margin:1.1rem 0 1.35rem;max-width:290px;font-size:.9rem;line-height:1.55;letter-spacing:-.01em;color:var(--sys-label-2)}.foot__status[_ngcontent-ng-c611946033]{display:inline-flex;align-items:center;gap:.5rem;padding:.38rem .8rem .38rem .65rem;border-radius:var(--sys-pill);background:var(--sys-fill);font-size:.76rem;font-weight:500;letter-spacing:-.005em;color:var(--sys-label)}.foot__status-dot[_ngcontent-ng-c611946033]{width:7px;height:7px;border-radius:50%;background:var(--sys-green);animation:_ngcontent-ng-c611946033_foot-pulse 2.4s ease-out infinite}@keyframes _ngcontent-ng-c611946033_foot-pulse{0%{box-shadow:0 0 color-mix(in srgb,var(--sys-green) 45%,transparent)}70%{box-shadow:0 0 0 7px transparent}to{box-shadow:0 0 0 0 transparent}}@media(prefers-reduced-motion:reduce){.foot__status-dot[_ngcontent-ng-c611946033]{animation:none}}.foot__social[_ngcontent-ng-c611946033]{display:flex;gap:.4rem;margin-top:1.6rem}.foot__social[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033]{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:transparent;color:var(--sys-label-2);transition:background-color .2s ease,color .2s ease}.foot__social[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033]:hover{background:var(--sys-fill);color:var(--sys-label)}.foot__social[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.foot__cols[_ngcontent-ng-c611946033]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(1.25rem,3vw,2rem)}.foot__col[_ngcontent-ng-c611946033]{display:flex;flex-direction:column;align-items:flex-start;gap:.15rem}
504.foot__col[_ngcontent-ng-c611946033]   h4[_ngcontent-ng-c611946033]{margin:0 0 .6rem;font-size:.78rem;font-weight:600;letter-spacing:-.005em;color:var(--sys-label)}.foot__col[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033], .foot__col[_ngcontent-ng-c611946033]   .foot__linkbtn[_ngcontent-ng-c611946033]{display:inline-block;width:fit-content;padding:.2rem 0;border:0;background:transparent;font:inherit;font-size:.85rem;line-height:1.7;letter-spacing:-.005em;color:var(--sys-label-2);text-decoration:none;cursor:pointer;transition:color .15s ease}.foot__col[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033]:hover, .foot__col[_ngcontent-ng-c611946033]   .foot__linkbtn[_ngcontent-ng-c611946033]:hover{color:var(--sys-label);text-decoration:underline;text-underline-offset:3px}.foot__col[_ngcontent-ng-c611946033]   a[_ngcontent-ng-c611946033]:focus-visible, .foot__col[_ngcontent-ng-c611946033]   .foot__linkbtn[_ngcontent-ng-c611946033]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px;border-radius:4px}.foot__bottom[_ngcontent-ng-c611946033]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-top:1.5rem;font-size:.78rem;letter-spacing:-.005em;color:var(--sys-label-3)}.foot__bottom-right[_ngcontent-ng-c611946033]{display:flex;align-items:center;gap:1.25rem}.foot__copy[_ngcontent-ng-c611946033], .foot__built[_ngcontent-ng-c611946033]{color:var(--sys-label-3)}.foot__built[_ngcontent-ng-c611946033]   strong[_ngcontent-ng-c611946033]{color:var(--sys-label-2);font-weight:500}.foot__prefs[_ngcontent-ng-c611946033]{display:flex;align-items:center;gap:.4rem}.foot__theme-btn[_ngcontent-ng-c611946033]{display:grid;place-items:center;width:34px;height:34px;border:0;border-radius:50%;background:transparent;color:var(--sys-label-2);cursor:pointer;transition:background-color .2s ease,color .2s ease}.foot__theme-btn[_ngcontent-ng-c611946033]:hover{background:var(--sys-fill);color:var(--sys-label)}.foot__theme-btn[_ngcontent-ng-c611946033]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.foot__lang[_ngcontent-ng-c611946033]{position:relative}.foot__lang-btn[_ngcontent-ng-c611946033]{display:inline-flex;align-items:center;gap:.45rem;padding:.42rem .8rem;border:0;border-radius:var(--sys-pill);background:transparent;color:var(--sys-label-2);font:inherit;font-size:.8rem;font-weight:500;letter-spacing:-.005em;cursor:pointer;transition:background-color .2s ease,color .2s ease}.foot__lang-btn[_ngcontent-ng-c611946033]   svg[_ngcontent-ng-c611946033]:last-child{transition:transform .25s ease}.foot__lang-btn[_ngcontent-ng-c611946033]:hover, .foot__lang-btn.is-open[_ngcontent-ng-c611946033]{background:var(--sys-fill);color:var(--sys-label)}.foot__lang-btn.is-open[_ngcontent-ng-c611946033]   svg[_ngcontent-ng-c611946033]:last-child{transform:rotate(180deg)}.foot__lang-btn[_ngcontent-ng-c611946033]:focus-visible{outline:2px solid var(--sys-label-2);outline-offset:2px}.foot__lang-menu[_ngcontent-ng-c611946033]{position:absolute;right:0;bottom:calc(100% + 8px);min-width:180px;margin:0;padding:.35rem;list-style:none;background:var(--sys-bg-2);border:1px solid var(--sys-separator);border-radius:16px;box-shadow:0 20px 50px -20px #00000073;opacity:0;visibility:hidden;transform:translateY(6px) scale(.98);transform-origin:bottom right;transition:opacity .18s ease,transform .22s var(--ease),visibility 0s linear .2s}.foot__lang-menu.is-open[_ngcontent-ng-c611946033]{opacity:1;visibility:visible;transform:translateY(0) scale(1);transition:opacity .18s ease,transform .22s var(--ease),visibility 0s}.foot__lang-menu[_ngcontent-ng-c611946033]   button[_ngcontent-ng-c611946033]{display:flex;align-items:center;gap:.6rem;width:100%;padding:.5rem .65rem;border:0;border-radius:10px;background:transparent;color:var(--sys-label-2);font:inherit;font-size:.85rem;letter-spacing:-.005em;text-align:left;cursor:pointer;transition:background-color .15s ease,color .15s ease}.foot__lang-menu[_ngcontent-ng-c611946033]   button[_ngcontent-ng-c611946033]:hover{background:var(--sys-fill);color:var(--sys-label)}.foot__lang-menu[_ngcontent-ng-c611946033]   button.is-current[_ngcontent-ng-c611946033]{color:var(--sys-label);font-weight:500}.foot__lang-code[_ngcontent-ng-c611946033]{width:24px;font-size:.66rem;font-weight:600;letter-spacing:.04em;color:var(--sys-label-3)}@media(max-width:1100px){.foot__top[_ngcontent-ng-c611946033]{grid-template-columns:minmax(0,1fr) minmax(0,2.8fr)}.foot__tagline[_ngcontent-ng-c611946033]{max-width:240px}}
504@media(max-width:900px){.foot__top[_ngcontent-ng-c611946033]{grid-template-columns:1fr;gap:2.5rem}}@media(max-width:720px){.foot__cols[_ngcontent-ng-c611946033]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.75rem 1.25rem}}@media(max-width:640px){.foot__inner[_ngcontent-ng-c611946033]{padding:2.75rem 1.25rem 1.5rem}.foot__bottom[_ngcontent-ng-c611946033]{flex-direction:column-reverse;align-items:flex-start;gap:1.1rem}.foot__bottom-right[_ngcontent-ng-c611946033]{width:100%;justify-content:space-between;flex-wrap:wrap;gap:.75rem}.foot__lang-menu[_ngcontent-ng-c611946033]{right:auto;left:0;transform-origin:bottom left}}</style><link rel="alternate" hreflang="en" href="https://ubex.ai/docs"><link rel="alternate" hreflang="de" href="https://ubex.ai/de/docs"><link rel="alternate" hreflang="es" href="https://ubex.ai/es/docs"><link rel="alternate" hreflang="ro" href="https://ubex.ai/ro/docs"><link rel="alternate" hreflang="x-default" href="https://ubex.ai/docs"></head>
505<body><!--nghm-->
505<script type="text/javascript" id="ng-event-dispatch-contract">(()=>{function p(t,n,r,o,e,i,f,m){return{eventType:t,event:n,targetElement:r,eic:o,timeStamp:e,eia:i,eirp:f,eiack:m}}function u(t){let n=[],r=e=>{n.push(e)};return{c:t,q:n,et:[],etc:[],d:r,h:e=>{r(p(e.type,e,e.target,t,Date.now()))}}}function s(t,n,r){for(let o=0;o<n.length;o++){let e=n[o];(r?t.etc:t.et).push(e),t.c.addEventListener(e,t.h,r)}}function c(t,n,r,o,e=window){let i=u(t);e._ejsas||(e._ejsas={}),e._ejsas[n]=i,s(i,r),s(i,o,!0)}window.__jsaction_bootstrap=c;})();
506</script>
506<script>window.__jsaction_bootstrap(document.body,"ng",["click","input","compositionstart","compositionend"],["blur"]);</script>
506
507  <app-root ng-version="21.1.4" ngh="3" ng-server-context="ssr"><app-navbar _nghost-ng-c2546005345 ngh="0"><header _ngcontent-ng-c2546005345 class="nav"><div _ngcontent-ng-c2546005345 class="nav__inner"><a _ngcontent-ng-c2546005345 aria-label="Ubex home" class="nav__logo" href="/" jsaction="click:;"><img _ngcontent-ng-c2546005345 alt="Ubex" width="96" height="29" src="assets/images/logo-ubex-white.svg"></a><nav _ngcontent-ng-c2546005345 aria-label="Primary" class="nav__links"><div _ngcontent-ng-c2546005345 class="nav__item nav__item--dd"><button _ngcontent-ng-c2546005345 type="button" aria-haspopup="true" class="nav__link nav__trigger" aria-expanded="false" jsaction="click:;"> Product <svg _ngcontent-ng-c2546005345="" width="10" height="6" viewBox="0 0 10 6" fill="none" aria-hidden="true" class="nav__chev"><path _ngcontent-ng-c2546005345="" d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div _ngcontent-ng-c2546005345 role="menu" class="nav__panel nav__panel--product"><a _ngcontent-ng-c2546005345 role="menuitem" class="nav__menu-item" href="/features" jsaction="click:;"><span _ngcontent-ng-c2546005345 class="nav__menu-ico"><svg _ngcontent-ng-c2546005345="" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path _ngcontent-ng-c2546005345="" d="M12 3l1.9 4.6L18.5 9l-4.6 1.4L12 15l-1.9-4.6L5.5 9l4.6-1.4z"/><path _ngcontent-ng-c2546005345="" d="M5 19l.8 1.8L7.5 21.5 5.8 22.2 5 24l-.8-1.8L2.5 21.5l1.7-.7z" transform="translate(0 -4)"/></svg></span><span _ngcontent-ng-c2546005345 class="nav__menu-text"><strong _ngcontent-ng-c2546005345>Features</strong><small _ngcontent-ng-c2546005345>Everything the platform can do</small></span></a><a _ngcontent-ng-c2546005345 role="menuitem" class="nav__menu-item" href="/roadmap" jsaction="click:;"><span _ngcontent-ng-c2546005345 class="nav__menu-ico"><svg _ngcontent-ng-c2546005345="" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path _ngcontent-ng-c2546005345="" d="M4 19V5"/><path _ngcontent-ng-c2546005345="" d="M4 6h11l-2 3 2 3H4"/><circle _ngcontent-ng-c2546005345="" cx="17" cy="17" r="3"/></svg></span><span _ngcontent-ng-c2546005345 class="nav__menu-text"><strong _ngcontent-ng-c2546005345>Roadmap</strong><small _ngcontent-ng-c2546005345>What we are building next</small></span></a></div></div><a _ngcontent-ng-c2546005345 routerlinkactive="is-active" class="nav__link" href="/meet-qira" jsaction="click:;"> Qira Agent </a><a _ngcontent-ng-c2546005345 routerlinkactive="is-active" class="nav__link is-active" href="/docs" jsaction="click:;">Docs</a><a _ngcontent-ng-c2546005345 routerlinkactive="is-active" class="nav__link" href="/pricing" jsaction="click:;">Pricing</a><a _ngcontent-ng-c2546005345 routerlinkactive="is-active" class="nav__link" href="/labs" jsaction="click:;">Ubex Labs</a><a _ngcontent-ng-c2546005345 routerlinkactive="is-active" class="nav__link" href="/contact" jsaction="click:;">Contact</a></nav><div _ngcontent-ng-c2546005345 class="nav__right"><a _ngcontent-ng-c2546005345 href="https://app.ubex.ai" class="nav__login">Log in</a><a _ngcontent-ng-c2546005345 href="https://app.ubex.ai/auth/register" class="nav__cta"> Register <svg _ngcontent-ng-c2546005345="" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path _ngcontent-ng-c2546005345="" d="M5 12h14M13 6l6 6-6 6"/></svg></a><button _ngcontent-ng-c2546005345 type="button" aria-label="Toggle navigation menu" class="nav__burger" aria-expanded="false" jsaction="click:;"><span _ngcontent-ng-c2546005345></span><span _ngcontent-ng-c2546005345></span></button></div></div></header><div _ngcontent-ng-c2546005345 class="drawer" aria-hidden="true"><div _ngcontent-ng-c2546005345 class="drawer__scroll"><div _ngcontent-ng-c2546005345 class="drawer__group"><button _ngcontent-ng-c2546005345 type="button" class="drawer__group-head is-open" jsaction="click:;"> Product <svg _ngcontent-ng-c2546005345="" width="12" height="8" viewBox="0 0 10 6" fill="none" aria-hidden="true"><path _ngcontent-ng-c2546005345="" d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div _ngcontent-ng-c2546005345 class="drawer__group-body is-open"><div _ngcontent-ng-c2546005345 class="drawer__group-inner">
507<a _ngcontent-ng-c2546005345 href="/features" jsaction="click:;">Features</a><a _ngcontent-ng-c2546005345 href="/roadmap" jsaction="click:;">Roadmap</a></div></div></div><a _ngcontent-ng-c2546005345 class="drawer__link" href="/meet-qira" jsaction="click:;">Qira Agent</a><a _ngcontent-ng-c2546005345 class="drawer__link" href="/docs" jsaction="click:;">Docs</a><a _ngcontent-ng-c2546005345 class="drawer__link" href="/pricing" jsaction="click:;">Pricing</a><a _ngcontent-ng-c2546005345 class="drawer__link" href="/labs" jsaction="click:;">Ubex Labs</a><a _ngcontent-ng-c2546005345 class="drawer__link" href="/contact" jsaction="click:;">Contact</a></div><div _ngcontent-ng-c2546005345 class="drawer__actions"><a _ngcontent-ng-c2546005345 href="https://app.ubex.ai" class="drawer__login">Log in</a><a _ngcontent-ng-c2546005345 href="https://app.ubex.ai/auth/register" class="drawer__cta">Register</a></div></div><div _ngcontent-ng-c2546005345 class="nav-backdrop" jsaction="click:;"></div></app-navbar><!----><router-outlet></router-outlet><app-docs _nghost-ng-c2236624726 ngh="2"><div _ngcontent-ng-c2236624726 class="docs"><div _ngcontent-ng-c2236624726 class="docs__shell"><div _ngcontent-ng-c2236624726 class="docs__bar"><button _ngcontent-ng-c2236624726 class="docs__bar-btn" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="menu" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu"><path d="M4 5h16" key="1tepv9"/><path d="M4 12h16" key="1lakjw"/><path d="M4 19h16" key="1djgab"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Menu</span></button><span _ngcontent-ng-c2236624726 class="docs__bar-here">Introduction</span><button _ngcontent-ng-c2236624726 class="docs__bar-btn" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="list" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list"><path d="M3 5h.01" key="18ugdj"/><path d="M3 12h.01" key="nlz23k"/><path d="M3 19h.01" key="noohij"/><path d="M8 5h13" key="1pao27"/><path d="M8 12h13" key="1za7za"/><path d="M8 19h13" key="m83p4d"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Contents</span></button></div><div _ngcontent-ng-c2236624726 class="docs__scrim" jsaction="click:;"></div><aside _ngcontent-ng-c2236624726 class="docs__nav"><div _ngcontent-ng-c2236624726 class="docs__nav-head"><h2 _ngcontent-ng-c2236624726>Documentation</h2><button _ngcontent-ng-c2236624726 aria-label="Close menu" class="docs__icon-btn docs__nav-close" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="x" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x"><path d="M18 6 6 18" key="1bl5f8"/><path d="m6 6 12 12" key="d8bk6v"/></svg></lucide-icon></button></div><div _ngcontent-ng-c2236624726 class="docs__search"><lucide-icon _ngcontent-ng-c2236624726 name="search" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search"><path d="m21 21-4.34-4.34" key="14j7rj"/><circle cx="11" cy="11" r="8" key="4ej97u"/></svg></lucide-icon><input _ngcontent-ng-c2236624726 type="text" placeholder="Search docs" aria-label="Search documentation" value class="ng-untouched ng-pristine ng-valid" jsaction="input:;blur:;compositionstart:;compositionend:;"><!----></div><nav _ngcontent-ng-c2236624726 class="docs__tree"><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head is-open" aria-expanded="true" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z" key="m3kijz"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z" key="1fmvmk"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0" key="1f8sc4"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" key="qeys4"/></svg></lucide-icon>
507<span _ngcontent-ng-c2236624726>Getting Started</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><ul _ngcontent-ng-c2236624726 class="docs__links"><li _ngcontent-ng-c2236624726><a _ngcontent-ng-c2236624726 class="is-active" jsaction="click:;"> Introduction </a></li><li _ngcontent-ng-c2236624726><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Quick Start </a></li><li _ngcontent-ng-c2236624726><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Core Concepts </a></li><!----></ul><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" key="1s2grr"/><path d="M20 2v4" key="1rf3ol"/>
507<path d="M22 4h-4" key="gwowj6"/><circle cx="4" cy="20" r="2" key="6kqj1y"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Interface</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" key="1xq2db"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Triggers</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch"><path d="M15 6a9 9 0 0 0-9 9V3" key="1cii5b"/><circle cx="18" cy="6" r="3" key="1h7g24"/><circle cx="6" cy="18" r="3" key="fqmcym"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Flow Control</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain"><path d="M12 18V5" key="adv99a"/><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4" key="1e3is1"/><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5" key="1gqd8o"/><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77" key="iwvgf7"/><path d="M18 18a4 4 0 0 0 2-7.464" key="efp6ie"/><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517" key="1gq6am"/><path d="M6 18a4 4 0 0 1-2-7.464" key="k1g0md"/><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77" key="q97ue3"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>AI &amp; Models</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" key="zw3jo"/><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" key="1wduqc"/><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" key="kqbvx6"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Data Nodes</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-workflow"><rect width="8" height="8" x="3" y="3" rx="2" key="by2w9f"/><path d="M7 11v4a2 2 0 0 0 2 2h4" key="xkn7yn"/><rect width="8" height="8" x="13" y="13" rx="2" key="1cgmvn"/></svg></lucide-icon>
507<span _ngcontent-ng-c2236624726>Actions</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3" key="msslwz"/><path d="M3 5V19A9 3 0 0 0 21 19V5" key="1wlel7"/><path d="M3 12A9 3 0 0 0 21 12" key="mv7ke4"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Variables &amp; Data</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code"><path d="m16 18 6-6-6-6" key="eg8j8"/><path d="m8 6-6 6 6 6" key="ppft3o"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>API Reference</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1" key="10lvy0"/><rect width="7" height="5" x="14" y="3" rx="1" key="16une8"/><rect width="7" height="9" x="14" y="12" rx="1" key="1hutg5"/><rect width="7" height="5" x="3" y="16" rx="1" key="ldoo1y"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Platform</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><div _ngcontent-ng-c2236624726 class="docs__group"><button _ngcontent-ng-c2236624726 type="button" class="docs__group-head" aria-expanded="false" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock"><rect width="18" height="11" x="3" y="11" rx="2" ry="2" key="1w4ew1"/><path d="M7 11V7a5 5 0 0 1 10 0v4" key="fwvmzm"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Vault</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__chev"></span></button><!----></div><!----><!----></nav></aside><main _ngcontent-ng-c2236624726 class="docs__main"><p _ngcontent-ng-c2236624726 class="docs__crumb"><span _ngcontent-ng-c2236624726>Getting Started</span><span _ngcontent-ng-c2236624726 aria-hidden="true" class="docs__crumb-sep">/</span><span _ngcontent-ng-c2236624726 class="docs__crumb-here">Introduction</span></p><!----><p _ngcontent-ng-c2236624726 class="docs__notice"><lucide-icon _ngcontent-ng-c2236624726 name="info" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info"><circle cx="12" cy="12" r="10" key="1mglay"/><path d="M12 16v-4" key="1dtifu"/><path d="M12 8h.01" key="e9boi3"/></svg></lucide-icon><span _ngcontent-ng-c2236624726>Documentation is being updated. Some sections may not reflect the latest features.</span></p><article _ngcontent-ng-c2236624726 class="docs__article"><markdown _ngcontent-ng-c2236624726 ngh="0"><h1>Introduction</h1>
508<p>The sovereign AI execution engine. Build, deploy, and govern intelligent backends visually - with AI, APIs, data management, security, and compliance in one platform.</p>
509<h2>What is Ubex?</h2>
510<p>Ubex is a visual execution engine designed for enterprises that need AI to run in production - securely, compliantly, at scale. Built on 3 years of deep tech R&amp;D with a Go-powered backend, it combines:</p>
511<ul>
512<li><strong>Execution Layer</strong> - Visual low-code builder with 21+ node types and Go-powered parallel execution (80ms response time)</li>
513<li><strong>Orchestration Layer</strong> - APIs, databases, data validation, scheduling, and integrations</li>
514<li><strong>Sovereignty Layer</strong> - Auto-audit, on-premise options, and compliance controls</li>
515</ul>
516<h2>Five Pillars</h2>
517<h3>AI &amp; Intelligence</h3>
518<p>Connect to any major LLM provider - OpenAI, Anthropic, Google, Meta, Mistral. Built-in RAG with vector search, document processing, image generation, and agent flows. Bring your own keys or use managed credits.</p>
519<h3>Execution &amp; APIs</h3>
520<p>Deploy workflows as authenticated REST endpoints. HTTP requests, webhooks, sub-workflows, scheduled triggers, and custom JavaScript. Production-grade with rate limiting, auth, and full HTTP status code control.</p>
521<h3>Data &amp; Databases</h3>
522<p>Direct connections to MySQL, PostgreSQL, MongoDB with SSL/TLS and SSH tunneling. Full CRUD operations, schema validation, data mapping, semantic search, and file operations.</p>
523<h3>Security &amp; Sovereignty</h3>
524<p>API authentication, IP whitelisting, CORS controls, rate limiting. Deploy in Managed Cloud, your VPC, or on-premise. SSO/SAML, role-based access, and audit logs.</p>
525<h3>Compliance &amp; Governance</h3>
526<p>AI governance alignment with execution logs for transparency and human oversight controls. GDPR data retention, SOC 2 Type II and ISO 27001 certification in progress. Staging environments and version control.</p>
527<h2>Next Steps</h2>
528<p>Ready to get started? Check out the <a href="/docs/getting-started/quickstart">Quick Start</a> guide.</p>
529</markdown><!----></article><nav _ngcontent-ng-c2236624726 class="docs__pager"><!----><a _ngcontent-ng-c2236624726 class="docs__page docs__page--next" jsaction="click:;"><span _ngcontent-ng-c2236624726 class="docs__page-dir">Next</span><span _ngcontent-ng-c2236624726 class="docs__page-title">Quick Start</span></a><!----></nav><!----></main><aside _ngcontent-ng-c2236624726 class="docs__toc"><div _ngcontent-ng-c2236624726 class="docs__nav-head"><h2 _ngcontent-ng-c2236624726>On this page</h2><button _ngcontent-ng-c2236624726 aria-label="Close contents" class="docs__icon-btn docs__nav-close" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="x" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x"><path d="M18 6 6 18" key="1bl5f8"/><path d="m6 6 12 12" key="d8bk6v"/></svg></lucide-icon></button></div><ul _ngcontent-ng-c2236624726 class="docs__toc-list"><li _ngcontent-ng-c2236624726 class>
529<a _ngcontent-ng-c2236624726 class="is-active" jsaction="click:;"> What is Ubex? </a></li><li _ngcontent-ng-c2236624726 class><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Five Pillars </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> AI &amp; Intelligence </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Execution &amp; APIs </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Data &amp; Databases </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Security &amp; Sovereignty </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Compliance &amp; Governance </a></li><li _ngcontent-ng-c2236624726 class><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Next Steps </a></li><!----></ul><!----></aside></div><app-footer _ngcontent-ng-c2236624726 _nghost-ng-c611946033 ngh="1"><footer _ngcontent-ng-c611946033 class="foot"><div _ngcontent-ng-c611946033 class="foot__inner"><div _ngcontent-ng-c611946033 class="foot__top"><div _ngcontent-ng-c611946033 class="foot__brand"><a _ngcontent-ng-c611946033 aria-label="Ubex home" class="foot__logo" href="/" jsaction="click:;"><img _ngcontent-ng-c611946033 alt="Ubex" width="96" height="29" src="assets/images/logo-ubex-white.svg"></a><p _ngcontent-ng-c611946033 class="foot__tagline">One AI. Every layer of your app.</p><div _ngcontent-ng-c611946033 class="foot__status"><span _ngcontent-ng-c611946033 aria-hidden="true" class="foot__status-dot"></span> All systems operational </div><div _ngcontent-ng-c611946033 class="foot__social">
529<a _ngcontent-ng-c611946033 href="https://x.com/ubexo79477" target="_blank" rel="noopener noreferrer" aria-label="X"><svg _ngcontent-ng-c611946033="" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path _ngcontent-ng-c611946033="" d="M18.9 2H22l-7.4 8.5L23 22h-6.8l-5.3-6.9L4.8 22H1.6l7.9-9L0 2h7l4.8 6.3L18.9 2zm-1.2 18h1.9L6.4 3.9H4.4L17.7 20z"/></svg></a><a _ngcontent-ng-c611946033 href="https://www.linkedin.com/company/ubexai/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg _ngcontent-ng-c611946033="" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path _ngcontent-ng-c611946033="" d="M20.4 20.4h-3.5v-5.6c0-1.3 0-3-1.9-3s-2.1 1.4-2.1 2.9v5.7H9.4V9h3.4v1.6h.1c.5-.9 1.6-1.9 3.4-1.9 3.6 0 4.3 2.4 4.3 5.5v6.2zM5.3 7.4a2.1 2.1 0 1 1 0-4.1 2.1 2.1 0 0 1 0 4.1zM7.1 20.4H3.6V9h3.5v11.4zM22.2 0H1.8C.8 0 0 .8 0 1.7v20.5c0 1 .8 1.8 1.8 1.8h20.4c1 0 1.8-.8 1.8-1.8V1.7C24 .8 23.2 0 22.2 0z"/></svg></a><a _ngcontent-ng-c611946033 href="https://discord.gg/TUAtGQVMXF" target="_blank" rel="noopener noreferrer" aria-label="Discord"><svg _ngcontent-ng-c611946033="" width="17" height="17" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path _ngcontent-ng-c611946033="" d="M20.3 4.4A19.8 19.8 0 0 0 15.4 3l-.2.4a18 18 0 0 1 4.3 1.9 15.6 15.6 0 0 0-14.9 0A18 18 0 0 1 8.9 3.4L8.7 3a19.7 19.7 0 0 0-4.9 1.4C.7 9.1-.1 13.6.3 18.1a19.9 19.9 0 0 0 6 3l1.3-2a12.9 12.9 0 0 1-2-1l.5-.4a14.2 14.2 0 0 0 12 0l.5.4-2 1 1.3 2a19.9 19.9 0 0 0 6-3c.5-5.2-.8-9.7-3.6-13.7zM8.5 15.4c-1.2 0-2.2-1.1-2.2-2.4s1-2.4 2.2-2.4 2.2 1.1 2.2 2.4-1 2.4-2.2 2.4zm7 0c-1.2 0-2.2-1.1-2.2-2.4s1-2.4 2.2-2.4 2.2 1.1 2.2 2.4-1 2.4-2.2 2.4z"/></svg></a></div></div><nav _ngcontent-ng-c611946033 aria-label="Footer" class="foot__cols"><div _ngcontent-ng-c611946033 class="foot__col"><h4 _ngcontent-ng-c611946033>Product</h4><a _ngcontent-ng-c611946033 href="/features" jsaction="click:;">Features</a><a _ngcontent-ng-c611946033 href="/meet-qira" jsaction="click:;">Qira Agent</a><a _ngcontent-ng-c611946033 href="/pricing" jsaction="click:;">Pricing</a></div><div _ngcontent-ng-c611946033 class="foot__col"><h4 _ngcontent-ng-c611946033>Resources</h4><a _ngcontent-ng-c611946033 href="/docs" jsaction="click:;">Docs</a><a _ngcontent-ng-c611946033 href="/roadmap" jsaction="click:;">Roadmap</a><a _ngcontent-ng-c611946033 href="/sitemap" jsaction="click:;">Sitemap</a><a _ngcontent-ng-c611946033 href="https://discord.gg/TUAtGQVMXF" target="_blank" rel="noopener noreferrer">Discord</a></div><div _ngcontent-ng-c611946033 class="foot__col"><h4 _ngcontent-ng-c611946033>Company</h4><a _ngcontent-ng-c611946033 href="/contact" jsaction="click:;">Contact</a><a _ngcontent-ng-c611946033 href="/labs" jsaction="click:;">Ubex Labs</a></div><div _ngcontent-ng-c611946033 class="foot__col"><h4 _ngcontent-ng-c611946033>Legal</h4><a _ngcontent-ng-c611946033 href="/privacy" jsaction="click:;">Privacy</a><a _ngcontent-ng-c611946033 href="/terms" jsaction="click:;">Terms</a><a _ngcontent-ng-c611946033 href="/imprint" jsaction="click:;">Imprint</a><button _ngcontent-ng-c611946033 type="button" class="foot__linkbtn" jsaction="click:;">Manage cookies</button></div></nav></div><div _ngcontent-ng-c611946033 class="foot__bottom"><span _ngcontent-ng-c611946033 class="foot__copy">© 2026 Ubex. All rights reserved.</span><div _ngcontent-ng-c611946033 class="foot__bottom-right"><span _ngcontent-ng-c611946033 class="foot__built">Built with <strong _ngcontent-ng-c611946033>Go</strong> &amp; <strong _ngcontent-ng-c611946033>Angular</strong></span><div _ngcontent-ng-c611946033 class="foot__prefs"><button _ngcontent-ng-c611946033 type="button" class="foot__theme-btn" aria-label="Toggle light/dark theme" aria-pressed="true" jsaction="click:;"><svg _ngcontent-ng-c611946033="" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle _ngcontent-ng-c611946033="" cx="12" cy="12" r="4.2"/><path _ngcontent-ng-c611946033="" d="M12 2.5v2.4M12 19.1v2.4M4.9 4.9l1.7 1.7M17.4 17.4l1.7 1.7M2.5 12h2.4M19.1 12h2.4M4.9 19.1l1.7-1.7M17.4 6.6l1.7-1.7"/></svg><!----><!----></button><div _ngcontent-ng-c611946033 class="foot__lang"><button _ngcontent-ng-c611946033 type="button" aria-haspopup="true" class="foot__lang-btn" aria-expanded="false" jsaction="click:;"><svg _ngcontent-ng-c611946033="" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle _ngcontent-ng-c611946033="" cx="12" cy="12" r="9.5"/><path _ngcontent-ng-c611946033="" d="M2.5 12h19"/><path _ngcontent-ng-c611946033="" d="M12 2.5c2.8 3 2.8 16 0 19M12 2.5c-2.8 3-2.8 16 0 19"/></svg><span _ngcontent-ng-c611946033>English</span><svg _ngcontent-ng-c611946033="" width="10" height="6" viewBox="0 0 10 6" fill="none" aria-hidden="true"><path _ngcontent-ng-c611946033="" d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></button><ul _ngcontent-ng-c611946033 role="menu" class="foot__lang-menu"><li _ngcontent-ng-c611946033><button _ngcontent-ng-c611946033 type="button" role="menuitem" class="is-current" jsaction="click:;"><span _ngcontent-ng-c611946033 class="foot__lang-code">EN</span><span _ngcontent-ng-c611946033>English</span></button></li><li _ngcontent-ng-c611946033><button _ngcontent-ng-c611946033 type="button" role="menuitem" class jsaction="click:;"><span _ngcontent-ng-c611946033 class="foot__lang-code">DE</span><span _ngcontent-ng-c611946033>Deutsch</span></button></li><li _ngcontent-ng-c611946033><button _ngcontent-ng-c611946033 type="button" role="menuitem" class jsaction="click:;"><span _ngcontent-ng-c611946033 class="foot__lang-code">ES</span><span _ngcontent-ng-c611946033>Español</span></button></li><li _ngcontent-ng-c611946033><button _ngcontent-ng-c611946033 type="button" role="menuitem" class jsaction="click:;"><span _ngcontent-ng-c611946033 class="foot__lang-code">RO</span><span _ngcontent-ng-c611946033>Română</span></button></li><!----></ul></div></div></div></div></div></footer></app-footer></div><div _ngcontent-ng-c2236624726 class="ai-modal-backdrop" jsaction="click:;"><div _ngcontent-ng-c2236624726 class="ai-modal"><div _ngcontent-ng-c2236624726 class="ai-modal-header"><div _ngcontent-ng-c2236624726 class="ai-modal-title"><div _ngcontent-ng-c2236624726 class="ai-modal-avatar"><lucide-icon _ngcontent-ng-c2236624726 name="bot" color="currentColor" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot"><path d="M12 8V4H8" key="hb8ula"/><rect width="16" height="12" x="4" y="8" rx="2" key="enze0r"/><path d="M2 14h2" key="vft8re"/><path d="M20 14h2" key="4cs60a"/><path d="M15 13v2" key="1xurst"/><path d="M9 13v2" key="rq6x2g"/></svg></lucide-icon></div><div _ngcontent-ng-c2236624726 class="ai-modal-title-text"><span _ngcontent-ng-c2236624726 class="ai-modal-name">AI Assistant</span><span _ngcontent-ng-c2236624726 class="ai-modal-sub">Powered by Ubex</span></div><span _ngcontent-ng-c2236624726 class="ai-badge">Beta</span></div><button _ngcontent-ng-c2236624726 class="ai-modal-close" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="x" color="currentColor" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewB
529ox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x"><path d="M18 6 6 18" key="1bl5f8"/><path d="m6 6 12 12" key="d8bk6v"/></svg></lucide-icon></button></div><div _ngcontent-ng-c2236624726 class="ai-body" jsaction="click:;"><div _ngcontent-ng-c2236624726 class="ai-msg bot"><div _ngcontent-ng-c2236624726 class="ai-msg-avatar"><lucide-icon _ngcontent-ng-c2236624726 name="bot" color="currentColor" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot"><path d="M12 8V4H8" key="hb8ula"/><rect width="16" height="12" x="4" y="8" rx="2" key="enze0r"/><path d="M2 14h2" key="vft8re"/><path d="M20 14h2" key="4cs60a"/><path d="M15 13v2" key="1xurst"/><path d="M9 13v2" key="rq6x2g"/></svg></lucide-icon></div><div _ngcontent-ng-c2236624726 class="bubble">Ask me anything about Ubex workflows, nodes, or the API.</div></div><!----><!----></div><div _ngcontent-ng-c2236624726 class="ai-footer"><input _ngcontent-ng-c2236624726 type="text" placeholder="Ask about Ubex docs..." value class="ng-untouched ng-pristine ng-valid" jsaction="input:;blur:;compositionstart:;compositionend:;"><button _ngcontent-ng-c2236624726 class="ai-send" jsaction="click:;"><lucide-icon _ngcontent-ng-c2236624726 name="send" color="currentColor" aria-hidden="true" ngh="0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" key="1ffxy3"/><path d="m21.854 2.147-10.94 10.939" key="12cjpa"/></svg></lucide-icon></button></div></div></div></app-docs><!----></app-root>
530<link rel="modulepreload" href="chunk-ICA5FKDP.js"><link rel="modulepreload" href="chunk-RTVJR3NS.js"><link rel="modulepreload" href="chunk-XC4HF6IG.js"><link rel="modulepreload" href="chunk-MJGV6OFH.js"><link rel="modulepreload" href="chunk-3J67LAPG.js">
530<script src="polyfills-6ISPNSXF.js" type="module"></script>
530<script src="main-ESCPFHMF.js" type="module"></script>
530
531<link rel="modulepreload" href="chunk-XIBF5SDE.js">
532<link rel="modulepreload" href="chunk-DRYTLB43.js">
533<link rel="modulepreload" href="chunk-OUEZW44D.js">
534
535
536<script id="ng-state" type="application/json">{"2384599171":{"b":"# Introduction\n\nThe sovereign AI execution engine. Build, deploy, and govern intelligent backends visually - with AI, APIs, data management, security, and compliance in one platform.\n\n## What is Ubex?\n\nUbex is a visual execution engine designed for enterprises that need AI to run in production - securely, compliantly, at scale. Built on 3 years of deep tech R&D with a Go-powered backend, it combines:\n\n- **Execution Layer** - Visual low-code builder with 21+ node types and Go-powered parallel execution (80ms response time)\n- **Orchestration Layer** - APIs, databases, data validation, scheduling, and integrations\n- **Sovereignty Layer** - Auto-audit, on-premise options, and compliance controls\n\n## Five Pillars\n\n### AI & Intelligence\nConnect to any major LLM provider - OpenAI, Anthropic, Google, Meta, Mistral. Built-in RAG with vector search, document processing, image generation, and agent flows. Bring your own keys or use managed credits.\n\n### Execution & APIs\nDeploy workflows as authenticated REST endpoints. HTTP requests, webhooks, sub-workflows, scheduled triggers, and custom JavaScript. Production-grade with rate limiting, auth, and full HTTP status code control.\n\n### Data & Databases\nDirect connections to MySQL, PostgreSQL, MongoDB with SSL/TLS and SSH tunneling. Full CRUD operations, schema validation, data mapping, semantic search, and file operations.\n\n### Security & Sovereignty\nAPI authentication, IP whitelisting, CORS controls, rate limiting. Deploy in Managed Cloud, your VPC, or on-premise. SSO/SAML, role-based access, and audit logs.\n\n### Compliance & Governance\nAI governance alignment with execution logs for transparency and human oversight controls. GDPR data retention, SOC 2 Type II and ISO 27001 certification in progress. Staging environments and version control.\n\n## Next Steps\n\nReady to get started? Check out the [Quick Start](/docs/getting-started/quickstart) guide.\n","h":{},"s":200,"st":"OK","u":"assets/docs/getting-started/introduction.md","rt":"text"},"__nghData__":[{},{"t":{"106":"t41","107":"t42","120":"t43"},"c":{"106":[{"i":"t41","r":1}],"107":[],"120":[{"i":"t43","r":1,"x":4}]}},{"t":{"23":"t64","25":"t65","26":"t68","28":"t69","35":"t70","42":"t73","61":"t75","62":"t76"},"c":{"23":[],"25":[{"i":"t65","r":1,"t":{"6":"t66"},"c":{"6":[{"i":"t66","r":1,"t":{"1":"t67"},"c":{"1":[{"i":"t67","r":1,"x":3}]}}]}},{"i":"t65","r":1,"t":{"6":"t66"},"c":{"6":[]},"x":10}],"26":[],"28":[{"i":"t69","r":1}],"34":[],"35":[{"i":"t70","r":1,"t":{"1":"t71","2":"t72"},"c":{"1":[],"2":[{"i":"t72","r":1}]}}],"42":[{"i":"t73","r":1,"t":{"1":"t74"},"c":{"1":[{"i":"t74","r":1,"x":8}]}}],"61":[{"i":"t75","r":1}],"62":[]}},{"t":{"0":"t0"},"c":{"0":[{"i":"t0","r":1}],"1":[{"i":"c2236624726","r":1}]}}]}</script>
536</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.