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 & 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 & 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 & 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 & 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 & 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&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 & 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 & 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 & 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 & 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 & 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 & Intelligence </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Execution & APIs </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Data & Databases </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Security & Sovereignty </a></li><li _ngcontent-ng-c2236624726 class="is-sub"><a _ngcontent-ng-c2236624726 class jsaction="click:;"> Compliance & 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> & <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.