[{"data":1,"prerenderedAt":4115},["ShallowReactive",2],{"navigation_docs":3,"-apps-app-development-bot-protection-providers":2129,"-apps-app-development-bot-protection-providers-surround":4110},[4,136,549,577,693,889,1820,1920,1925,1930,1989,2087],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","/getting-started","0.getting-started/0.index",[9,10,14,18,56,81,115,132],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Starting new project","/getting-started/starting-new-project","0.getting-started/1.starting-new-project",{"title":15,"path":16,"stem":17},"What is Laioutr?","/getting-started/what-is-laioutr","0.getting-started/2.what-is-laioutr",{"title":19,"path":20,"stem":21,"children":22,"page":55},"Key Concepts","/getting-started/key-concepts","0.getting-started/3.key-concepts",[23,27,31,35,39,43,47,51],{"title":24,"path":25,"stem":26},"Architecture","/getting-started/key-concepts/architecture","0.getting-started/3.key-concepts/1.architecture",{"title":28,"path":29,"stem":30},"Data Model","/getting-started/key-concepts/data-model","0.getting-started/3.key-concepts/2.data-model",{"title":32,"path":33,"stem":34},"Internationalization","/getting-started/key-concepts/5.internationalization","0.getting-started/3.key-concepts/3.5.internationalization",{"title":36,"path":37,"stem":38},"Data Flow","/getting-started/key-concepts/data-flow","0.getting-started/3.key-concepts/3.data-flow",{"title":40,"path":41,"stem":42},"Extensibility","/getting-started/key-concepts/extensibility","0.getting-started/3.key-concepts/4.extensibility",{"title":44,"path":45,"stem":46},"Philosophy","/getting-started/key-concepts/philosophy","0.getting-started/3.key-concepts/5.philosophy",{"title":48,"path":49,"stem":50},"CI/CD Pipeline","/getting-started/key-concepts/ci-cd-pipeline","0.getting-started/3.key-concepts/6.ci-cd-pipeline",{"title":52,"path":53,"stem":54},"Multi-tenancy","/getting-started/key-concepts/multi-tenancy","0.getting-started/3.key-concepts/multi-tenancy",false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Next Steps","/getting-started/next-steps","0.getting-started/4.next-steps",[61,65,69,73,77],{"title":62,"path":63,"stem":64},"Create Organization and Project","/getting-started/next-steps/create-org-and-project","0.getting-started/4.next-steps/0.create-org-and-project",{"title":66,"path":67,"stem":68},"First Project Configuration","/getting-started/next-steps/first-project-config","0.getting-started/4.next-steps/1.first-project-config",{"title":70,"path":71,"stem":72},"Setup Local Development Environment","/getting-started/next-steps/local-setup","0.getting-started/4.next-steps/3.local-setup",{"title":74,"path":75,"stem":76},"Create your first custom app","/getting-started/next-steps/create-custom-app","0.getting-started/4.next-steps/4.create-custom-app",{"title":78,"path":79,"stem":80},"CLI","/getting-started/next-steps/cli","0.getting-started/4.next-steps/5.cli",{"title":82,"path":83,"stem":84,"children":85},"Changelogs","/getting-started/changelogs","0.getting-started/5.Changelogs/0.index",[86,87,91,95,99,103,107,111],{"title":82,"path":83,"stem":84},{"title":88,"path":89,"stem":90},"Canonical Types Changelog","/getting-started/changelogs/canonical-types-changelog","0.getting-started/5.Changelogs/canonical-types-changelog",{"title":92,"path":93,"stem":94},"CLI Changelog","/getting-started/changelogs/cli-changelog","0.getting-started/5.Changelogs/cli-changelog",{"title":96,"path":97,"stem":98},"Cockpit Changelog","/getting-started/changelogs/cockpit-changelog","0.getting-started/5.Changelogs/cockpit-changelog",{"title":100,"path":101,"stem":102},"Figma Kit Changelog","/getting-started/changelogs/figma-kit-changelog","0.getting-started/5.Changelogs/figma-kit-changelog",{"title":104,"path":105,"stem":106},"Frontend Changelog","/getting-started/changelogs/frontend-changelog","0.getting-started/5.Changelogs/frontend-changelog",{"title":108,"path":109,"stem":110},"Orchestr Changelog","/getting-started/changelogs/orchestr-changelog","0.getting-started/5.Changelogs/orchestr-changelog",{"title":112,"path":113,"stem":114},"UI Changelog","/getting-started/changelogs/ui-changelog","0.getting-started/5.Changelogs/ui-changelog",{"title":116,"path":117,"stem":118,"children":119,"page":55},"Hints And Tips","/getting-started/hints-and-tips","0.getting-started/6.Hints-and-Tips",[120,124,128],{"title":121,"path":122,"stem":123},"Introduction","/getting-started/hints-and-tips/introduction","0.getting-started/6.Hints-and-Tips/0.introduction",{"title":125,"path":126,"stem":127},"Developer tools","/getting-started/hints-and-tips/developer-tools","0.getting-started/6.Hints-and-Tips/1.developer-tools",{"title":129,"path":130,"stem":131},"Claude Code plugin","/getting-started/hints-and-tips/claude-marketplace","0.getting-started/6.Hints-and-Tips/2.claude-marketplace",{"title":133,"path":134,"stem":135},"Documentation MCP Server","/getting-started/documentation-mcp-server","0.getting-started/7.documentation-mcp-server",{"title":137,"path":138,"stem":139,"children":140},"Frontend","/frontend","1.Frontend/0.index",[141,142,153,223,249,327],{"title":137,"path":138,"stem":139},{"title":121,"path":143,"stem":144,"children":145,"page":55},"/frontend/introduction","1.Frontend/1.Introduction",[146,149],{"title":19,"path":147,"stem":148},"/frontend/introduction/key-concepts","1.Frontend/1.Introduction/0.key-concepts",{"title":150,"path":151,"stem":152},"Tech Stack","/frontend/introduction/tech-stack","1.Frontend/1.Introduction/1.tech-stack",{"title":154,"path":155,"stem":156,"children":157},"Features","/frontend/features","1.Frontend/2.Features/0.index",[158,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219],{"title":154,"path":155,"stem":156},{"title":160,"path":161,"stem":162},"Bot Protection","/frontend/features/bot-protection","1.Frontend/2.Features/bot-protection",{"title":164,"path":165,"stem":166},"Consent Management","/frontend/features/consent-management","1.Frontend/2.Features/consent-management",{"title":168,"path":169,"stem":170},"Content Preview","/frontend/features/content-preview","1.Frontend/2.Features/content-preview",{"title":172,"path":173,"stem":174},"Currencies","/frontend/features/currencies","1.Frontend/2.Features/currencies",{"title":176,"path":177,"stem":178},"Environments & Staging","/frontend/features/environments","1.Frontend/2.Features/environments",{"title":180,"path":181,"stem":182},"Hooks","/frontend/features/hooks","1.Frontend/2.Features/hooks",{"title":184,"path":185,"stem":186},"Media and Media Library","/frontend/features/media","1.Frontend/2.Features/media",{"title":188,"path":189,"stem":190},"Multi-language Support","/frontend/features/multi-language-support","1.Frontend/2.Features/multi-language-support",{"title":192,"path":193,"stem":194},"Multi-market","/frontend/features/multi-market","1.Frontend/2.Features/multi-market",{"title":196,"path":197,"stem":198},"Page Types","/frontend/features/pagetypes","1.Frontend/2.Features/pagetypes",{"title":200,"path":201,"stem":202},"PWA","/frontend/features/pwa","1.Frontend/2.Features/pwa",{"title":204,"path":205,"stem":206},"Redirects","/frontend/features/redirects","1.Frontend/2.Features/redirects",{"title":208,"path":209,"stem":210},"Routing","/frontend/features/routing","1.Frontend/2.Features/routing",{"title":212,"path":213,"stem":214},"Server-Side Rendering (SSR) and Caching","/frontend/features/ssr-and-caching","1.Frontend/2.Features/ssr-and-caching",{"title":216,"path":217,"stem":218},"Tracking","/frontend/features/tracking","1.Frontend/2.Features/tracking",{"title":220,"path":221,"stem":222},"Z-Ordering","/frontend/features/z-ordering","1.Frontend/2.Features/z-ordering",{"title":224,"path":225,"stem":226,"children":227},"SEO","/frontend/seo","1.Frontend/3.SEO/0.index",[228,229,233,237,241,245],{"title":224,"path":225,"stem":226},{"title":230,"path":231,"stem":232},"Link Checker","/frontend/seo/link-checker","1.Frontend/3.SEO/link-checker",{"title":234,"path":235,"stem":236},"OG Image","/frontend/seo/og-image","1.Frontend/3.SEO/og-image",{"title":238,"path":239,"stem":240},"Robots.txt","/frontend/seo/robots-txt","1.Frontend/3.SEO/robots-txt",{"title":242,"path":243,"stem":244},"Schema.org","/frontend/seo/schema-org","1.Frontend/3.SEO/schema-org",{"title":246,"path":247,"stem":248},"Sitemap","/frontend/seo/sitemap","1.Frontend/3.SEO/sitemap",{"title":250,"path":251,"stem":252,"children":253},"Backend for Frontend","/frontend/orchestr","1.Frontend/4.Orchestr/0.index",[254,255,281,285,289,293,297,301,305,309,313,319,323],{"title":250,"path":251,"stem":252},{"title":256,"path":257,"stem":258,"children":259},"Recipes","/frontend/orchestr/recipes","1.Frontend/4.Orchestr/99.recipes/0.index",[260,261,265,269,273,277],{"title":256,"path":257,"stem":258},{"title":262,"path":263,"stem":264},"Analytics components from query handlers","/frontend/orchestr/recipes/analytics-from-query-handlers","1.Frontend/4.Orchestr/99.recipes/analytics-from-query-handlers",{"title":266,"path":267,"stem":268},"Identity cookies (cart and visitor IDs)","/frontend/orchestr/recipes/identity-cookies","1.Frontend/4.Orchestr/99.recipes/identity-cookies",{"title":270,"path":271,"stem":272},"System bootstrap in extendRequest","/frontend/orchestr/recipes/system-bootstrap","1.Frontend/4.Orchestr/99.recipes/system-bootstrap",{"title":274,"path":275,"stem":276},"Translating vendor errors","/frontend/orchestr/recipes/translating-vendor-errors","1.Frontend/4.Orchestr/99.recipes/translating-vendor-errors",{"title":278,"path":279,"stem":280},"Userland cache patterns","/frontend/orchestr/recipes/userland-cache-patterns","1.Frontend/4.Orchestr/99.recipes/userland-cache-patterns",{"title":282,"path":283,"stem":284},"Actions","/frontend/orchestr/actions","1.Frontend/4.Orchestr/Actions",{"title":286,"path":287,"stem":288},"Caching","/frontend/orchestr/caching","1.Frontend/4.Orchestr/Caching",{"title":290,"path":291,"stem":292},"Store Devtools","/frontend/orchestr/devtools","1.Frontend/4.Orchestr/Devtools",{"title":294,"path":295,"stem":296},"Middleware","/frontend/orchestr/middleware","1.Frontend/4.Orchestr/Middleware",{"title":298,"path":299,"stem":300},"Queries & Links","/frontend/orchestr/queries","1.Frontend/4.Orchestr/Queries",{"title":302,"path":303,"stem":304},"Client Environment","/frontend/orchestr/client-env","1.Frontend/4.Orchestr/client-env",{"title":306,"path":307,"stem":308},"Component Resolvers","/frontend/orchestr/component-resolvers","1.Frontend/4.Orchestr/component-resolvers",{"title":310,"path":311,"stem":312},"Filters","/frontend/orchestr/filters","1.Frontend/4.Orchestr/filters",{"title":314,"path":315,"stem":316,"children":317},"Page Index","/frontend/orchestr/page-index","1.Frontend/4.Orchestr/page-index",[318],{"title":314,"path":315,"stem":316},{"title":320,"path":321,"stem":322},"URL Query Parameters","/frontend/orchestr/url-query-params","1.Frontend/4.Orchestr/url-query-params",{"title":324,"path":325,"stem":326},"Orchestr Wire Format","/frontend/orchestr/wire-format","1.Frontend/4.Orchestr/wire-format",{"title":328,"path":329,"stem":330,"children":331},"API Reference","/frontend/api-reference","1.Frontend/99.api-reference/0.index",[332,333,451,454,488,504,512,523,531,538],{"title":328,"path":329,"stem":330},{"title":334,"path":335,"stem":336,"children":337},"Entities","/frontend/api-reference/entities","1.Frontend/99.api-reference/01.entities/0.index",[338,339,343,347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423,427,431,435,439,443,447],{"title":334,"path":335,"stem":336},{"title":340,"path":341,"stem":342},"Product","/frontend/api-reference/entities/product","1.Frontend/99.api-reference/01.entities/1.product",{"title":344,"path":345,"stem":346},"SuggestedSearch","/frontend/api-reference/entities/suggested-search","1.Frontend/99.api-reference/01.entities/10.suggested-search",{"title":348,"path":349,"stem":350},"SuggestedSearchEntry","/frontend/api-reference/entities/suggested-search-entry","1.Frontend/99.api-reference/01.entities/11.suggested-search-entry",{"title":352,"path":353,"stem":354},"BlogCollection","/frontend/api-reference/entities/blog-collection","1.Frontend/99.api-reference/01.entities/12.blog-collection",{"title":356,"path":357,"stem":358},"Comment","/frontend/api-reference/entities/comment","1.Frontend/99.api-reference/01.entities/13.comment",{"title":360,"path":361,"stem":362},"Location","/frontend/api-reference/entities/location","1.Frontend/99.api-reference/01.entities/14.location",{"title":364,"path":365,"stem":366},"Glossary","/frontend/api-reference/entities/glossary","1.Frontend/99.api-reference/01.entities/15.glossary",{"title":368,"path":369,"stem":370},"Product List","/frontend/api-reference/entities/product-list","1.Frontend/99.api-reference/01.entities/16.product-list",{"title":372,"path":373,"stem":374},"Product List Item","/frontend/api-reference/entities/product-list-item","1.Frontend/99.api-reference/01.entities/17.product-list-item",{"title":376,"path":377,"stem":378},"Organization","/frontend/api-reference/entities/organization","1.Frontend/99.api-reference/01.entities/18.organization",{"title":380,"path":381,"stem":382},"Employee","/frontend/api-reference/entities/employee","1.Frontend/99.api-reference/01.entities/19.employee",{"title":384,"path":385,"stem":386},"ProductVariant","/frontend/api-reference/entities/product-variant","1.Frontend/99.api-reference/01.entities/2.product-variant",{"title":388,"path":389,"stem":390},"Cost Center","/frontend/api-reference/entities/cost-center","1.Frontend/99.api-reference/01.entities/20.cost-center",{"title":392,"path":393,"stem":394},"Budget","/frontend/api-reference/entities/budget","1.Frontend/99.api-reference/01.entities/21.budget",{"title":396,"path":397,"stem":398},"Quote","/frontend/api-reference/entities/quote","1.Frontend/99.api-reference/01.entities/22.quote",{"title":400,"path":401,"stem":402},"Quote Item","/frontend/api-reference/entities/quote-item","1.Frontend/99.api-reference/01.entities/23.quote-item",{"title":404,"path":405,"stem":406},"Approval Flow","/frontend/api-reference/entities/approval-flow","1.Frontend/99.api-reference/01.entities/24.approval-flow",{"title":408,"path":409,"stem":410},"Approval Rule","/frontend/api-reference/entities/approval-rule","1.Frontend/99.api-reference/01.entities/25.approval-rule",{"title":412,"path":413,"stem":414},"Fee","/frontend/api-reference/entities/fee","1.Frontend/99.api-reference/01.entities/26.fee",{"title":416,"path":417,"stem":418},"Stock Location","/frontend/api-reference/entities/stock-location","1.Frontend/99.api-reference/01.entities/27.stock-location",{"title":420,"path":421,"stem":422},"Stock Level","/frontend/api-reference/entities/stock-level","1.Frontend/99.api-reference/01.entities/28.stock-level",{"title":424,"path":425,"stem":426},"Category","/frontend/api-reference/entities/category","1.Frontend/99.api-reference/01.entities/3.category",{"title":428,"path":429,"stem":430},"Cart","/frontend/api-reference/entities/cart","1.Frontend/99.api-reference/01.entities/4.cart",{"title":432,"path":433,"stem":434},"CartItem","/frontend/api-reference/entities/cart-item","1.Frontend/99.api-reference/01.entities/5.cart-item",{"title":436,"path":437,"stem":438},"Review","/frontend/api-reference/entities/review","1.Frontend/99.api-reference/01.entities/6.review",{"title":440,"path":441,"stem":442},"BreadcrumbItem","/frontend/api-reference/entities/breadcrumb-item","1.Frontend/99.api-reference/01.entities/7.breadcrumb-item",{"title":444,"path":445,"stem":446},"MenuItem","/frontend/api-reference/entities/menu-item","1.Frontend/99.api-reference/01.entities/8.menu-item",{"title":448,"path":449,"stem":450},"BlogPost","/frontend/api-reference/entities/blog-post","1.Frontend/99.api-reference/01.entities/9.blog-post",{"title":196,"path":452,"stem":453},"/frontend/api-reference/page-types","1.Frontend/99.api-reference/02.page-types",{"title":455,"path":456,"stem":457,"children":458},"Common Types","/frontend/api-reference/common-types","1.Frontend/99.api-reference/03.common-types/0.index",[459,460,464,468,472,476,480,484],{"title":455,"path":456,"stem":457},{"title":461,"path":462,"stem":463},"Link","/frontend/api-reference/common-types/link","1.Frontend/99.api-reference/03.common-types/1.link",{"title":465,"path":466,"stem":467},"Media","/frontend/api-reference/common-types/media","1.Frontend/99.api-reference/03.common-types/2.media",{"title":469,"path":470,"stem":471},"Money","/frontend/api-reference/common-types/money","1.Frontend/99.api-reference/03.common-types/3.money",{"title":473,"path":474,"stem":475},"UnitPrice","/frontend/api-reference/common-types/unit-price","1.Frontend/99.api-reference/03.common-types/4.unit-price",{"title":477,"path":478,"stem":479},"Measurement","/frontend/api-reference/common-types/measurement","1.Frontend/99.api-reference/03.common-types/5.measurement",{"title":481,"path":482,"stem":483},"Opening Hours","/frontend/api-reference/common-types/opening-hours","1.Frontend/99.api-reference/03.common-types/6.opening-hours",{"title":485,"path":486,"stem":487},"Commerce Value Types","/frontend/api-reference/common-types/commerce-values","1.Frontend/99.api-reference/03.common-types/7.commerce-values",{"title":489,"path":490,"stem":491,"children":492,"page":55},"Ecommerce","/frontend/api-reference/ecommerce","1.Frontend/99.api-reference/10.ecommerce",[493,496,500],{"title":282,"path":494,"stem":495},"/frontend/api-reference/ecommerce/actions","1.Frontend/99.api-reference/10.ecommerce/1.actions",{"title":497,"path":498,"stem":499},"Queries","/frontend/api-reference/ecommerce/queries","1.Frontend/99.api-reference/10.ecommerce/2.queries",{"title":501,"path":502,"stem":503},"Errors","/frontend/api-reference/ecommerce/errors","1.Frontend/99.api-reference/10.ecommerce/3.errors",{"title":505,"path":506,"stem":507,"children":508,"page":55},"Newsletter","/frontend/api-reference/newsletter","1.Frontend/99.api-reference/11.newsletter",[509],{"title":282,"path":510,"stem":511},"/frontend/api-reference/newsletter/actions","1.Frontend/99.api-reference/11.newsletter/1.actions",{"title":513,"path":514,"stem":515,"children":516,"page":55},"Blog","/frontend/api-reference/blog","1.Frontend/99.api-reference/12.blog",[517,520],{"title":497,"path":518,"stem":519},"/frontend/api-reference/blog/queries","1.Frontend/99.api-reference/12.blog/1.queries",{"title":501,"path":521,"stem":522},"/frontend/api-reference/blog/errors","1.Frontend/99.api-reference/12.blog/2.errors",{"title":524,"path":525,"stem":526,"children":527,"page":55},"Suggested Search","/frontend/api-reference/suggested-search","1.Frontend/99.api-reference/13.suggested-search",[528],{"title":497,"path":529,"stem":530},"/frontend/api-reference/suggested-search/queries","1.Frontend/99.api-reference/13.suggested-search/1.queries",{"title":360,"path":532,"stem":533,"children":534,"page":55},"/frontend/api-reference/location","1.Frontend/99.api-reference/15.location",[535],{"title":497,"path":536,"stem":537},"/frontend/api-reference/location/queries","1.Frontend/99.api-reference/15.location/1.queries",{"title":539,"path":540,"stem":541,"children":542,"page":55},"B2b","/frontend/api-reference/b2b","1.Frontend/99.api-reference/16.b2b",[543,546],{"title":282,"path":544,"stem":545},"/frontend/api-reference/b2b/actions","1.Frontend/99.api-reference/16.b2b/1.actions",{"title":501,"path":547,"stem":548},"/frontend/api-reference/b2b/errors","1.Frontend/99.api-reference/16.b2b/2.errors",{"title":550,"path":551,"stem":552,"children":553},"Agent API","/agent-api","10.Agent-API/0.index",[554,555],{"title":550,"path":551,"stem":552},{"title":556,"path":557,"stem":558,"children":559},"Laioutr MCP","/agent-api/laioutr-mcp","10.Agent-API/1.Laioutr-MCP/0.index",[560,561,565,569,573],{"title":556,"path":557,"stem":558},{"title":562,"path":563,"stem":564},"Connecting to Laioutr MCP","/agent-api/laioutr-mcp/connecting-to-laioutr-mcp","10.Agent-API/1.Laioutr-MCP/1.connecting-to-laioutr-mcp",{"title":566,"path":567,"stem":568},"Supported tools","/agent-api/laioutr-mcp/supported-tools","10.Agent-API/1.Laioutr-MCP/2.supported-tools",{"title":570,"path":571,"stem":572},"Security best practices","/agent-api/laioutr-mcp/security-best-practices","10.Agent-API/1.Laioutr-MCP/3.security-best-practices",{"title":574,"path":575,"stem":576},"Integrating your own MCP client","/agent-api/laioutr-mcp/integrating-your-own-mcp-client","10.Agent-API/1.Laioutr-MCP/4.integrating-your-own-mcp-client",{"title":578,"path":579,"stem":580,"children":581},"Offering","/offering","11.Offering/0.index",[582,583,618,631,644,678,687],{"title":578,"path":579,"stem":580},{"title":584,"path":585,"stem":586,"children":587},"Products","/offering/products","11.Offering/1.Products/0.index",[588,589,594,600,606,612],{"title":584,"path":585,"stem":586},{"title":137,"path":590,"stem":591,"children":592},"/offering/products/frontend","11.Offering/1.Products/1.Frontend/0.index",[593],{"title":137,"path":590,"stem":591},{"title":595,"path":596,"stem":597,"children":598},"Cockpit","/offering/products/cockpit","11.Offering/1.Products/2.Cockpit/0.index",[599],{"title":595,"path":596,"stem":597},{"title":601,"path":602,"stem":603,"children":604},"Checkout","/offering/products/checkout","11.Offering/1.Products/3.Checkout/0.index",[605],{"title":601,"path":602,"stem":603},{"title":607,"path":608,"stem":609,"children":610},"Cloud","/offering/products/cloud","11.Offering/1.Products/4.cloud/0.index",[611],{"title":607,"path":608,"stem":609},{"title":613,"path":614,"stem":615,"children":616},"Larry AI","/offering/products/larry-ai","11.Offering/1.Products/5.larry-ai/0.index",[617],{"title":613,"path":614,"stem":615},{"title":619,"path":620,"stem":621,"children":622,"page":55},"Service Level Agreement","/offering/service-level-agreement","11.Offering/2.service-level-agreement",[623,627],{"title":624,"path":625,"stem":626},"Standard Service Level Agreement Composable Frontend","/offering/service-level-agreement/standard-service-level-agreement","11.Offering/2.service-level-agreement/1.standard-service-level-agreement",{"title":628,"path":629,"stem":630},"Backups","/offering/service-level-agreement/backups","11.Offering/2.service-level-agreement/backups",{"title":632,"path":633,"stem":634,"children":635,"page":55},"Customer Support","/offering/customer-support","11.Offering/3.customer-support",[636,640],{"title":637,"path":638,"stem":639},"Standard Customer Support","/offering/customer-support/standard-customer-support","11.Offering/3.customer-support/1.standard-customer-support",{"title":641,"path":642,"stem":643},"Customer Support Severity Levels of Laioutr products","/offering/customer-support/maximum-serverity-levels","11.Offering/3.customer-support/maximum-serverity-levels",{"title":645,"path":646,"stem":647,"children":648},"Trust Center","/offering/trust-center","11.Offering/4.trust-center/0.index",[649,650,654,658,662,666,670,674],{"title":645,"path":646,"stem":647},{"title":651,"path":652,"stem":653},"Data Protection (GDPR)","/offering/trust-center/data-protection","11.Offering/4.trust-center/1.data-protection",{"title":655,"path":656,"stem":657},"Subprocessors","/offering/trust-center/subprocessors","11.Offering/4.trust-center/2.subprocessors",{"title":659,"path":660,"stem":661},"Infrastructure & Hosting","/offering/trust-center/infrastructure","11.Offering/4.trust-center/3.infrastructure",{"title":663,"path":664,"stem":665},"Security Measures","/offering/trust-center/security-measures","11.Offering/4.trust-center/4.security-measures",{"title":667,"path":668,"stem":669},"Incident Response","/offering/trust-center/incident-response","11.Offering/4.trust-center/5.incident-response",{"title":671,"path":672,"stem":673},"Compliance & Certifications","/offering/trust-center/compliance","11.Offering/4.trust-center/6.compliance",{"title":675,"path":676,"stem":677},"FAQ","/offering/trust-center/faq","11.Offering/4.trust-center/7.faq",{"title":679,"path":680,"stem":681,"children":682,"page":55},"Policies","/offering/policies","11.Offering/5.policies",[683],{"title":684,"path":685,"stem":686},"Fair usage policy","/offering/policies/fair-usage-policy","11.Offering/5.policies/fair-usage-policy",{"title":688,"path":689,"stem":690,"children":691},"Academy","/offering/academy","11.Offering/6.academy/0.index",[692],{"title":688,"path":689,"stem":690},{"title":694,"path":695,"stem":696,"children":697},"Apps","/apps","2.apps/0.index",[698,699,783,873],{"title":694,"path":695,"stem":696},{"title":700,"path":701,"stem":702,"children":703},"App Development","/apps/app-development","2.apps/app-development/0.index",[704,705,727,731,735,739,743,747,751,755,759,763,767,771,775,779],{"title":700,"path":701,"stem":702},{"title":706,"path":707,"stem":708,"children":709},"Guides","/apps/app-development/guides","2.apps/app-development/99.guides/0.index",[710,711,715,719,723],{"title":706,"path":707,"stem":708},{"title":712,"path":713,"stem":714},"Separate schema components from UI components","/apps/app-development/guides/schema-components-vs-ui-components","2.apps/app-development/99.guides/schema-components-vs-ui-components",{"title":716,"path":717,"stem":718},"Section config standard","/apps/app-development/guides/section-config-standard","2.apps/app-development/99.guides/section-config-standard",{"title":720,"path":721,"stem":722},"Shared field factories","/apps/app-development/guides/shared-field-factories","2.apps/app-development/99.guides/shared-field-factories",{"title":724,"path":725,"stem":726},"How to write CSS","/apps/app-development/guides/writing-css","2.apps/app-development/99.guides/writing-css",{"title":728,"path":729,"stem":730},"App Configuration","/apps/app-development/app-configuration","2.apps/app-development/app-configuration",{"title":732,"path":733,"stem":734},"App Starter","/apps/app-development/app-starter","2.apps/app-development/app-starter",{"title":736,"path":737,"stem":738},"Best Practice","/apps/app-development/best-practice","2.apps/app-development/best-practice",{"title":740,"path":741,"stem":742},"Block Definitions","/apps/app-development/block-definitions","2.apps/app-development/block-definitions",{"title":744,"path":745,"stem":746},"Bot Protection Providers","/apps/app-development/bot-protection-providers","2.apps/app-development/bot-protection-providers",{"title":748,"path":749,"stem":750},"Coding Standards","/apps/app-development/coding-standards","2.apps/app-development/coding-standards",{"title":752,"path":753,"stem":754},"Consent Adapters","/apps/app-development/consent-adapters","2.apps/app-development/consent-adapters",{"title":756,"path":757,"stem":758},"Consuming Query Fields","/apps/app-development/consuming-query-fields","2.apps/app-development/consuming-query-fields",{"title":760,"path":761,"stem":762},"Implementation Overview","/apps/app-development/implementation-overview","2.apps/app-development/implementation-overview",{"title":764,"path":765,"stem":766},"Media Libraries","/apps/app-development/media-libraries","2.apps/app-development/media-libraries",{"title":768,"path":769,"stem":770},"Platform Dependencies","/apps/app-development/platform-dependencies","2.apps/app-development/platform-dependencies",{"title":772,"path":773,"stem":774},"Schema Fields","/apps/app-development/schema-fields","2.apps/app-development/schema-fields",{"title":776,"path":777,"stem":778},"Section Definitions","/apps/app-development/section-definitions","2.apps/app-development/section-definitions",{"title":780,"path":781,"stem":782},"Studio Icons","/apps/app-development/studio-icons","2.apps/app-development/studio-icons",{"title":784,"path":785,"stem":786,"children":787},"App Docs","/apps/app-docs","2.apps/app-docs/0.index",[788,789,793,797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869],{"title":784,"path":785,"stem":786},{"title":790,"path":791,"stem":792},"Actindo","/apps/app-docs/actindo","2.apps/app-docs/actindo",{"title":794,"path":795,"stem":796},"Adobe Commerce","/apps/app-docs/adobe-commerce","2.apps/app-docs/adobe-commerce",{"title":798,"path":799,"stem":800},"B2Bsellers","/apps/app-docs/b2bsellers","2.apps/app-docs/b2bsellers",{"title":802,"path":803,"stem":804},"Battery Included","/apps/app-docs/battery-included","2.apps/app-docs/battery-included",{"title":806,"path":807,"stem":808},"Vercel BotID","/apps/app-docs/botid","2.apps/app-docs/botid",{"title":810,"path":811,"stem":812},"CCM19","/apps/app-docs/ccm19","2.apps/app-docs/ccm19",{"title":814,"path":815,"stem":816},"Commercetools","/apps/app-docs/commercetools","2.apps/app-docs/commercetools",{"title":818,"path":819,"stem":820},"Cookiebot","/apps/app-docs/cookiebot","2.apps/app-docs/cookiebot",{"title":822,"path":823,"stem":824},"Emporix","/apps/app-docs/emporix","2.apps/app-docs/emporix",{"title":826,"path":827,"stem":828},"Google Tag Manager (GTM)","/apps/app-docs/gtm","2.apps/app-docs/gtm",{"title":830,"path":831,"stem":832},"Hygraph","/apps/app-docs/hygraph","2.apps/app-docs/hygraph",{"title":834,"path":835,"stem":836},"JTL Platform","/apps/app-docs/jtl-platform","2.apps/app-docs/jtl-platform",{"title":838,"path":839,"stem":840},"Klaviyo","/apps/app-docs/klaviyo","2.apps/app-docs/klaviyo",{"title":842,"path":843,"stem":844},"Nimstrata Google Retail API","/apps/app-docs/nimstrata","2.apps/app-docs/nimstrata",{"title":846,"path":847,"stem":848},"OXID eShop","/apps/app-docs/oxid","2.apps/app-docs/oxid",{"title":850,"path":851,"stem":852},"Pimcore","/apps/app-docs/pimcore","2.apps/app-docs/pimcore",{"title":854,"path":855,"stem":856},"Shopify","/apps/app-docs/shopify","2.apps/app-docs/shopify",{"title":858,"path":859,"stem":860},"Shopware","/apps/app-docs/shopware","2.apps/app-docs/shopware",{"title":862,"path":863,"stem":864},"Sylius","/apps/app-docs/sylius","2.apps/app-docs/sylius",{"title":866,"path":867,"stem":868},"Vercel Analytics","/apps/app-docs/vercel-analytics","2.apps/app-docs/vercel-analytics",{"title":870,"path":871,"stem":872},"Vercel Speed Insights","/apps/app-docs/vercel-speed-insights","2.apps/app-docs/vercel-speed-insights",{"title":874,"path":875,"stem":876,"children":877,"page":55},"Essentials","/apps/essentials","2.apps/essentials",[878,882,886],{"title":879,"path":880,"stem":881},"Legal","/apps/essentials/legal","2.apps/essentials/legal",{"title":883,"path":884,"stem":885},"Mailer","/apps/essentials/mailer","2.apps/essentials/mailer",{"title":224,"path":887,"stem":888},"/apps/essentials/seo","2.apps/essentials/seo",{"title":890,"path":891,"stem":892,"children":893},"Laioutr UI","/laioutr-ui","3.laioutr-ui/0.index",[894,895,927,933,939,1135,1156,1162,1168,1222,1232,1250,1388],{"title":890,"path":891,"stem":892},{"title":5,"path":896,"stem":897,"children":898},"/laioutr-ui/getting-started","3.laioutr-ui/01.getting-started/0.index",[899,900,904,908,912,916,920,924],{"title":5,"path":896,"stem":897},{"title":901,"path":902,"stem":903},"Browser support","/laioutr-ui/getting-started/browser-support","3.laioutr-ui/01.getting-started/1.browser-support",{"title":905,"path":906,"stem":907},"Common Data","/laioutr-ui/getting-started/common-data","3.laioutr-ui/01.getting-started/99.common-data",{"title":909,"path":910,"stem":911},"CSS Layers","/laioutr-ui/getting-started/css-layers","3.laioutr-ui/01.getting-started/css-layers",{"title":913,"path":914,"stem":915},"Figma Kit","/laioutr-ui/getting-started/figma-kit","3.laioutr-ui/01.getting-started/figma-kit",{"title":917,"path":918,"stem":919},"Surface Tone","/laioutr-ui/getting-started/surface-tone","3.laioutr-ui/01.getting-started/surface-tone",{"title":921,"path":922,"stem":923},"Theming","/laioutr-ui/getting-started/theming","3.laioutr-ui/01.getting-started/theming",{"title":220,"path":925,"stem":926},"/laioutr-ui/getting-started/z-ordering","3.laioutr-ui/01.getting-started/z-ordering",{"title":928,"path":929,"stem":930,"children":931},"B2B","/laioutr-ui/b2b","3.laioutr-ui/b2b/0.index",[932],{"title":928,"path":929,"stem":930},{"title":934,"path":935,"stem":936,"children":937},"Booking","/laioutr-ui/booking","3.laioutr-ui/booking/0.index",[938],{"title":934,"path":935,"stem":936},{"title":940,"path":941,"stem":942,"children":943},"CMS","/laioutr-ui/cms","3.laioutr-ui/cms/0.index",[944,945,951,976,988,992,996,1000,1004,1008,1020,1041,1045,1066,1082,1131],{"title":940,"path":941,"stem":942},{"title":946,"path":947,"stem":948,"children":949},"Alphabetical Index","/laioutr-ui/cms/alphabetical-index","3.laioutr-ui/cms/alphabetical-index",[950],{"title":946,"path":947,"stem":948},{"title":952,"path":953,"stem":954,"children":955,"page":55},"Banner","/laioutr-ui/cms/banner","3.laioutr-ui/cms/banner",[956,960,964,968,972],{"title":957,"path":958,"stem":959},"Banner Basic","/laioutr-ui/cms/banner/banner-basic","3.laioutr-ui/cms/banner/banner-basic",{"title":961,"path":962,"stem":963},"Banner Integrated","/laioutr-ui/cms/banner/banner-integrated","3.laioutr-ui/cms/banner/banner-integrated",{"title":965,"path":966,"stem":967},"Banner Showcase","/laioutr-ui/cms/banner/banner-showcase","3.laioutr-ui/cms/banner/banner-showcase",{"title":969,"path":970,"stem":971},"Media + Text","/laioutr-ui/cms/banner/media-text","3.laioutr-ui/cms/banner/media-text",{"title":973,"path":974,"stem":975},"USP Banner","/laioutr-ui/cms/banner/usp-banner","3.laioutr-ui/cms/banner/usp-banner",{"title":513,"path":977,"stem":978,"children":979,"page":55},"/laioutr-ui/cms/blog","3.laioutr-ui/cms/blog",[980,984],{"title":981,"path":982,"stem":983},"Article Detail","/laioutr-ui/cms/blog/article-detail","3.laioutr-ui/cms/blog/article-detail",{"title":985,"path":986,"stem":987},"Blog Post Listing","/laioutr-ui/cms/blog/blog-post-listing","3.laioutr-ui/cms/blog/blog-post-listing",{"title":989,"path":990,"stem":991},"Brand Hero","/laioutr-ui/cms/brand-hero","3.laioutr-ui/cms/brand-hero",{"title":993,"path":994,"stem":995},"Container","/laioutr-ui/cms/container","3.laioutr-ui/cms/container",{"title":997,"path":998,"stem":999},"Content Grid","/laioutr-ui/cms/content-grid","3.laioutr-ui/cms/content-grid",{"title":1001,"path":1002,"stem":1003},"Editorial Grid","/laioutr-ui/cms/editorial-grid","3.laioutr-ui/cms/editorial-grid",{"title":1005,"path":1006,"stem":1007},"Media Gallery","/laioutr-ui/cms/media-gallery","3.laioutr-ui/cms/media-gallery",{"title":505,"path":1009,"stem":1010,"children":1011,"page":55},"/laioutr-ui/cms/newsletter","3.laioutr-ui/cms/newsletter",[1012,1016],{"title":1013,"path":1014,"stem":1015},"Email Input Form","/laioutr-ui/cms/newsletter/email-input-form","3.laioutr-ui/cms/newsletter/email-input-form",{"title":1017,"path":1018,"stem":1019},"Newsletter Registration","/laioutr-ui/cms/newsletter/newsletter-registration","3.laioutr-ui/cms/newsletter/newsletter-registration",{"title":1021,"path":1022,"stem":1023,"children":1024,"page":55},"Popups","/laioutr-ui/cms/popups","3.laioutr-ui/cms/popups",[1025,1029,1033,1037],{"title":1026,"path":1027,"stem":1028},"PopUp","/laioutr-ui/cms/popups/pop-up","3.laioutr-ui/cms/popups/pop-up",{"title":1030,"path":1031,"stem":1032},"PopUp Info","/laioutr-ui/cms/popups/pop-up-info","3.laioutr-ui/cms/popups/pop-up-info",{"title":1034,"path":1035,"stem":1036},"PopUp Newsletter","/laioutr-ui/cms/popups/pop-up-newsletter","3.laioutr-ui/cms/popups/pop-up-newsletter",{"title":1038,"path":1039,"stem":1040},"PopUp Promotion","/laioutr-ui/cms/popups/pop-up-promotion","3.laioutr-ui/cms/popups/pop-up-promotion",{"title":1042,"path":1043,"stem":1044},"Promotion Banner","/laioutr-ui/cms/promotion-banner","3.laioutr-ui/cms/promotion-banner",{"title":1046,"path":1047,"stem":1048,"children":1049,"page":55},"Quotes","/laioutr-ui/cms/quotes","3.laioutr-ui/cms/quotes",[1050,1054,1058,1062],{"title":1051,"path":1052,"stem":1053},"Persona Quote","/laioutr-ui/cms/quotes/persona-quote","3.laioutr-ui/cms/quotes/persona-quote",{"title":1055,"path":1056,"stem":1057},"Persona Quote Slider","/laioutr-ui/cms/quotes/persona-quote-slider","3.laioutr-ui/cms/quotes/persona-quote-slider",{"title":1059,"path":1060,"stem":1061},"Quote Card","/laioutr-ui/cms/quotes/quote-card","3.laioutr-ui/cms/quotes/quote-card",{"title":1063,"path":1064,"stem":1065},"Quote Card Slider","/laioutr-ui/cms/quotes/quote-card-slider","3.laioutr-ui/cms/quotes/quote-card-slider",{"title":1067,"path":1068,"stem":1069,"children":1070,"page":55},"Reviews","/laioutr-ui/cms/reviews","3.laioutr-ui/cms/reviews",[1071,1074,1078],{"title":436,"path":1072,"stem":1073},"/laioutr-ui/cms/reviews/review","3.laioutr-ui/cms/reviews/review",{"title":1075,"path":1076,"stem":1077},"Review Form","/laioutr-ui/cms/reviews/review-form","3.laioutr-ui/cms/reviews/review-form",{"title":1079,"path":1080,"stem":1081},"Social Share","/laioutr-ui/cms/reviews/social-share","3.laioutr-ui/cms/reviews/social-share",{"title":1083,"path":1084,"stem":1085,"children":1086,"page":55},"Slider","/laioutr-ui/cms/slider","3.laioutr-ui/cms/slider",[1087,1091,1095,1099,1103,1107,1111,1115,1119,1123,1127],{"title":1088,"path":1089,"stem":1090},"Content Slider","/laioutr-ui/cms/slider/content-slider","3.laioutr-ui/cms/slider/content-slider",{"title":1092,"path":1093,"stem":1094},"Hero Slider","/laioutr-ui/cms/slider/hero-slider","3.laioutr-ui/cms/slider/hero-slider",{"title":1096,"path":1097,"stem":1098},"Logo Grid","/laioutr-ui/cms/slider/logo-grid","3.laioutr-ui/cms/slider/logo-grid",{"title":1100,"path":1101,"stem":1102},"Logo Slider","/laioutr-ui/cms/slider/logo-slider","3.laioutr-ui/cms/slider/logo-slider",{"title":1104,"path":1105,"stem":1106},"Swiper Arrows","/laioutr-ui/cms/slider/swiper-arrows","3.laioutr-ui/cms/slider/swiper-arrows",{"title":1108,"path":1109,"stem":1110},"Swiper Bullets","/laioutr-ui/cms/slider/swiper-bullets","3.laioutr-ui/cms/slider/swiper-bullets",{"title":1112,"path":1113,"stem":1114},"Swiper Chrome","/laioutr-ui/cms/slider/swiper-chrome","3.laioutr-ui/cms/slider/swiper-chrome",{"title":1116,"path":1117,"stem":1118},"Swiper Nav Bar","/laioutr-ui/cms/slider/swiper-nav-bar","3.laioutr-ui/cms/slider/swiper-nav-bar",{"title":1120,"path":1121,"stem":1122},"Swiper Numbers","/laioutr-ui/cms/slider/swiper-numbers","3.laioutr-ui/cms/slider/swiper-numbers",{"title":1124,"path":1125,"stem":1126},"Swiper Scrollbar","/laioutr-ui/cms/slider/swiper-scrollbar","3.laioutr-ui/cms/slider/swiper-scrollbar",{"title":1128,"path":1129,"stem":1130},"Thumbnails Slider","/laioutr-ui/cms/slider/thumbnails-slider","3.laioutr-ui/cms/slider/thumbnails-slider",{"title":1132,"path":1133,"stem":1134},"Withdrawal Form","/laioutr-ui/cms/withdrawal-form","3.laioutr-ui/cms/withdrawal-form",{"title":360,"path":1136,"stem":1137,"children":1138},"/laioutr-ui/location","3.laioutr-ui/location/0.index",[1139,1140,1144,1148,1152],{"title":360,"path":1136,"stem":1137},{"title":1141,"path":1142,"stem":1143},"Location Card","/laioutr-ui/location/location-card","3.laioutr-ui/location/location-card",{"title":1145,"path":1146,"stem":1147},"Location Detail","/laioutr-ui/location/location-detail","3.laioutr-ui/location/location-detail",{"title":1149,"path":1150,"stem":1151},"Location Finder","/laioutr-ui/location/location-finder","3.laioutr-ui/location/location-finder",{"title":1153,"path":1154,"stem":1155},"Table Opening Hours","/laioutr-ui/location/table-opening-hours","3.laioutr-ui/location/table-opening-hours",{"title":1157,"path":1158,"stem":1159,"children":1160},"Marketplace","/laioutr-ui/marketplace","3.laioutr-ui/marketplace/0.index",[1161],{"title":1157,"path":1158,"stem":1159},{"title":1163,"path":1164,"stem":1165,"children":1166},"Multichannel","/laioutr-ui/multichannel","3.laioutr-ui/multichannel/0.index",[1167],{"title":1163,"path":1164,"stem":1165},{"title":1169,"path":1170,"stem":1171,"children":1172},"Navigation & Headers","/laioutr-ui/navigation","3.laioutr-ui/navigation/0.index",[1173,1174,1178,1182,1186,1190,1194,1198,1202,1206,1210,1214,1218],{"title":1169,"path":1170,"stem":1171},{"title":1175,"path":1176,"stem":1177},"Breadcrumbs","/laioutr-ui/navigation/breadcrumbs","3.laioutr-ui/navigation/breadcrumbs",{"title":1179,"path":1180,"stem":1181},"Footer","/laioutr-ui/navigation/footer","3.laioutr-ui/navigation/footer",{"title":1183,"path":1184,"stem":1185},"Footer Menu","/laioutr-ui/navigation/footer-menu","3.laioutr-ui/navigation/footer-menu",{"title":1187,"path":1188,"stem":1189},"Header Basic","/laioutr-ui/navigation/header-basic","3.laioutr-ui/navigation/header-basic",{"title":1191,"path":1192,"stem":1193},"Header Shop","/laioutr-ui/navigation/header-shop","3.laioutr-ui/navigation/header-shop",{"title":1195,"path":1196,"stem":1197},"Mega Menu","/laioutr-ui/navigation/mega-menu","3.laioutr-ui/navigation/mega-menu",{"title":1199,"path":1200,"stem":1201},"Menu Side by Side","/laioutr-ui/navigation/menu-side-by-side","3.laioutr-ui/navigation/menu-side-by-side",{"title":1203,"path":1204,"stem":1205},"Mobile Menu (Basic)","/laioutr-ui/navigation/mobile-menu-basic","3.laioutr-ui/navigation/mobile-menu-basic",{"title":1207,"path":1208,"stem":1209},"Mobile Menu (Shop)","/laioutr-ui/navigation/mobile-menu-shop","3.laioutr-ui/navigation/mobile-menu-shop",{"title":1211,"path":1212,"stem":1213},"Page Not Found","/laioutr-ui/navigation/page-not-found","3.laioutr-ui/navigation/page-not-found",{"title":1215,"path":1216,"stem":1217},"Search Auto-Suggest","/laioutr-ui/navigation/search-auto-suggest","3.laioutr-ui/navigation/search-auto-suggest",{"title":1219,"path":1220,"stem":1221},"Top Bar","/laioutr-ui/navigation/top-bar","3.laioutr-ui/navigation/top-bar",{"title":1223,"path":1224,"stem":1225,"children":1226},"Publishers & Media","/laioutr-ui/publishers","3.laioutr-ui/publishers/0.index",[1227,1228],{"title":1223,"path":1224,"stem":1225},{"title":1229,"path":1230,"stem":1231},"Media Feed","/laioutr-ui/publishers/media-feed","3.laioutr-ui/publishers/media-feed",{"title":1233,"path":1234,"stem":1235,"children":1236},"SaaS","/laioutr-ui/saas","3.laioutr-ui/saas/0.index",[1237,1238,1242,1246],{"title":1233,"path":1234,"stem":1235},{"title":1239,"path":1240,"stem":1241},"Plan Card","/laioutr-ui/saas/plan-card","3.laioutr-ui/saas/plan-card",{"title":1243,"path":1244,"stem":1245},"Plan Card Slider","/laioutr-ui/saas/plan-card-slider","3.laioutr-ui/saas/plan-card-slider",{"title":1247,"path":1248,"stem":1249},"Plan Comparison Table","/laioutr-ui/saas/plan-comparison-table","3.laioutr-ui/saas/plan-comparison-table",{"title":1251,"path":1252,"stem":1253,"children":1254},"Shop","/laioutr-ui/shop","3.laioutr-ui/shop/0.index",[1255,1256,1284,1288,1292,1296,1300,1364,1368,1372,1376,1380,1384],{"title":1251,"path":1252,"stem":1253},{"title":428,"path":1257,"stem":1258,"children":1259,"page":55},"/laioutr-ui/shop/cart","3.laioutr-ui/shop/cart",[1260,1264,1268,1272,1276,1280],{"title":1261,"path":1262,"stem":1263},"Cart Coupon Code Accordion","/laioutr-ui/shop/cart/cart-coupon-code-accordion","3.laioutr-ui/shop/cart/cart-coupon-code-accordion",{"title":1265,"path":1266,"stem":1267},"Cart List Item","/laioutr-ui/shop/cart/cart-list-item","3.laioutr-ui/shop/cart/cart-list-item",{"title":1269,"path":1270,"stem":1271},"Cart Sheet","/laioutr-ui/shop/cart/cart-sheet","3.laioutr-ui/shop/cart/cart-sheet",{"title":1273,"path":1274,"stem":1275},"Cart Summary Box","/laioutr-ui/shop/cart/cart-summary-box","3.laioutr-ui/shop/cart/cart-summary-box",{"title":1277,"path":1278,"stem":1279},"Empty State Cart","/laioutr-ui/shop/cart/empty-state-cart","3.laioutr-ui/shop/cart/empty-state-cart",{"title":1281,"path":1282,"stem":1283},"Free Delivery Progress","/laioutr-ui/shop/cart/free-delivery-progress","3.laioutr-ui/shop/cart/free-delivery-progress",{"title":1285,"path":1286,"stem":1287},"Category Card Grid","/laioutr-ui/shop/category-card-grid","3.laioutr-ui/shop/category-card-grid",{"title":1289,"path":1290,"stem":1291},"Category Card Slider","/laioutr-ui/shop/category-card-slider","3.laioutr-ui/shop/category-card-slider",{"title":1293,"path":1294,"stem":1295},"Filter Bar","/laioutr-ui/shop/filter-bar","3.laioutr-ui/shop/filter-bar",{"title":1297,"path":1298,"stem":1299},"Filter Off Canvas","/laioutr-ui/shop/filter-off-canvas","3.laioutr-ui/shop/filter-off-canvas",{"title":1301,"path":1302,"stem":1303,"children":1304,"page":55},"Product Detail","/laioutr-ui/shop/product-detail","3.laioutr-ui/shop/product-detail",[1305,1309,1313,1317,1321,1325,1329,1332,1336,1340,1344,1348,1352,1356,1360],{"title":1306,"path":1307,"stem":1308},"Add to Cart","/laioutr-ui/shop/product-detail/add-to-cart","3.laioutr-ui/shop/product-detail/add-to-cart",{"title":1310,"path":1311,"stem":1312},"Benefits Box","/laioutr-ui/shop/product-detail/benefits-box","3.laioutr-ui/shop/product-detail/benefits-box",{"title":1314,"path":1315,"stem":1316},"Button Group","/laioutr-ui/shop/product-detail/button-group","3.laioutr-ui/shop/product-detail/button-group",{"title":1318,"path":1319,"stem":1320},"Coupon Box","/laioutr-ui/shop/product-detail/coupon-box","3.laioutr-ui/shop/product-detail/coupon-box",{"title":1322,"path":1323,"stem":1324},"Energy Label","/laioutr-ui/shop/product-detail/energy-label","3.laioutr-ui/shop/product-detail/energy-label",{"title":1326,"path":1327,"stem":1328},"Price Info","/laioutr-ui/shop/product-detail/price-info","3.laioutr-ui/shop/product-detail/price-info",{"title":1301,"path":1330,"stem":1331},"/laioutr-ui/shop/product-detail/product-detail","3.laioutr-ui/shop/product-detail/product-detail",{"title":1333,"path":1334,"stem":1335},"Product Image Gallery","/laioutr-ui/shop/product-detail/product-image-gallery","3.laioutr-ui/shop/product-detail/product-image-gallery",{"title":1337,"path":1338,"stem":1339},"Product Specifications Table","/laioutr-ui/shop/product-detail/product-specifications","3.laioutr-ui/shop/product-detail/product-specifications",{"title":1341,"path":1342,"stem":1343},"Product Title","/laioutr-ui/shop/product-detail/product-title","3.laioutr-ui/shop/product-detail/product-title",{"title":1345,"path":1346,"stem":1347},"Quantity Discount","/laioutr-ui/shop/product-detail/quantity-discount","3.laioutr-ui/shop/product-detail/quantity-discount",{"title":1349,"path":1350,"stem":1351},"Variant Off Canvas","/laioutr-ui/shop/product-detail/variant-off-canvas","3.laioutr-ui/shop/product-detail/variant-off-canvas",{"title":1353,"path":1354,"stem":1355},"Variant Selector Configurator","/laioutr-ui/shop/product-detail/variant-selector-configurator","3.laioutr-ui/shop/product-detail/variant-selector-configurator",{"title":1357,"path":1358,"stem":1359},"Variant Selector (Multiple)","/laioutr-ui/shop/product-detail/variant-selector-multiple","3.laioutr-ui/shop/product-detail/variant-selector-multiple",{"title":1361,"path":1362,"stem":1363},"Variant Selector Options","/laioutr-ui/shop/product-detail/variant-selector-options","3.laioutr-ui/shop/product-detail/variant-selector-options",{"title":1365,"path":1366,"stem":1367},"Product Listing Grid","/laioutr-ui/shop/product-listing-grid","3.laioutr-ui/shop/product-listing-grid",{"title":1369,"path":1370,"stem":1371},"Product Slider","/laioutr-ui/shop/product-slider","3.laioutr-ui/shop/product-slider",{"title":1373,"path":1374,"stem":1375},"Product Slider Showcase","/laioutr-ui/shop/product-slider-showcase","3.laioutr-ui/shop/product-slider-showcase",{"title":1377,"path":1378,"stem":1379},"Product Tile (Basic)","/laioutr-ui/shop/product-tile-basic","3.laioutr-ui/shop/product-tile-basic",{"title":1381,"path":1382,"stem":1383},"Search Result Hero","/laioutr-ui/shop/search-result-hero","3.laioutr-ui/shop/search-result-hero",{"title":1385,"path":1386,"stem":1387},"Sort Modes","/laioutr-ui/shop/sort-modes","3.laioutr-ui/shop/sort-modes",{"title":1389,"path":1390,"stem":1391,"children":1392},"UI Kit","/laioutr-ui/ui-kit","3.laioutr-ui/ui-kit/0.index",[1393,1394,1566,1590,1611,1628,1665,1778,1807],{"title":1389,"path":1390,"stem":1391},{"title":1395,"path":1396,"stem":1397,"children":1398,"page":55},"General","/laioutr-ui/ui-kit/general","3.laioutr-ui/ui-kit/01.general",[1399,1403,1407,1411,1415,1419,1423,1427,1431,1435,1439,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562],{"title":1400,"path":1401,"stem":1402},"Accordion","/laioutr-ui/ui-kit/general/accordion","3.laioutr-ui/ui-kit/01.general/Accordion",{"title":1404,"path":1405,"stem":1406},"Avatar","/laioutr-ui/ui-kit/general/avatar","3.laioutr-ui/ui-kit/01.general/Avatar",{"title":1408,"path":1409,"stem":1410},"Backdrop","/laioutr-ui/ui-kit/general/backdrop","3.laioutr-ui/ui-kit/01.general/Backdrop",{"title":1412,"path":1413,"stem":1414},"Dropdown Menu","/laioutr-ui/ui-kit/general/dropdownmenu","3.laioutr-ui/ui-kit/01.general/DropdownMenu",{"title":1416,"path":1417,"stem":1418},"Edge Glow","/laioutr-ui/ui-kit/general/edgeglow","3.laioutr-ui/ui-kit/01.general/EdgeGlow",{"title":1420,"path":1421,"stem":1422},"Empty State","/laioutr-ui/ui-kit/general/emptystate","3.laioutr-ui/ui-kit/01.general/EmptyState",{"title":1424,"path":1425,"stem":1426},"Icon","/laioutr-ui/ui-kit/general/icon","3.laioutr-ui/ui-kit/01.general/Icon",{"title":1428,"path":1429,"stem":1430},"Image Contrast Overlay","/laioutr-ui/ui-kit/general/imagecontrastoverlay","3.laioutr-ui/ui-kit/01.general/ImageContrastOverlay",{"title":1432,"path":1433,"stem":1434},"Lightbox","/laioutr-ui/ui-kit/general/lightbox","3.laioutr-ui/ui-kit/01.general/Lightbox",{"title":1436,"path":1437,"stem":1438},"Loading Spinner","/laioutr-ui/ui-kit/general/loadingspinner","3.laioutr-ui/ui-kit/01.general/LoadingSpinner",{"title":465,"path":1440,"stem":1441},"/laioutr-ui/ui-kit/general/media","3.laioutr-ui/ui-kit/01.general/Media",{"title":1443,"path":1444,"stem":1445},"Navigation Bullets","/laioutr-ui/ui-kit/general/navigationbullets","3.laioutr-ui/ui-kit/01.general/NavigationBullets",{"title":1447,"path":1448,"stem":1449},"Placeholder","/laioutr-ui/ui-kit/general/placeholder","3.laioutr-ui/ui-kit/01.general/Placeholder",{"title":1451,"path":1452,"stem":1453},"Progress Bar","/laioutr-ui/ui-kit/general/progressbar","3.laioutr-ui/ui-kit/01.general/ProgressBar",{"title":1455,"path":1456,"stem":1457},"Scrollbar","/laioutr-ui/ui-kit/general/scrollbar","3.laioutr-ui/ui-kit/01.general/Scrollbar",{"title":1459,"path":1460,"stem":1461},"Swatch","/laioutr-ui/ui-kit/general/swatch","3.laioutr-ui/ui-kit/01.general/Swatch",{"title":1463,"path":1464,"stem":1465},"SwiperScrollbar","/laioutr-ui/ui-kit/general/swiperscrollbar","3.laioutr-ui/ui-kit/01.general/SwiperScrollbar",{"title":1467,"path":1468,"stem":1469},"Thumbnail","/laioutr-ui/ui-kit/general/thumbnail","3.laioutr-ui/ui-kit/01.general/Thumbnail",{"title":1471,"path":1472,"stem":1473},"Tooltip","/laioutr-ui/ui-kit/general/tooltip","3.laioutr-ui/ui-kit/01.general/Tooltip",{"title":1475,"path":1476,"stem":1477},"Amount Pill","/laioutr-ui/ui-kit/general/amount-pill","3.laioutr-ui/ui-kit/01.general/amount-pill",{"title":1479,"path":1480,"stem":1481},"Animated Icon","/laioutr-ui/ui-kit/general/animated-icon","3.laioutr-ui/ui-kit/01.general/animated-icon",{"title":1483,"path":1484,"stem":1485},"Countdown","/laioutr-ui/ui-kit/general/countdown","3.laioutr-ui/ui-kit/01.general/countdown",{"title":1487,"path":1488,"stem":1489},"Countdown Boxed","/laioutr-ui/ui-kit/general/countdown-boxed","3.laioutr-ui/ui-kit/01.general/countdown-boxed",{"title":1491,"path":1492,"stem":1493},"Dark Mode Switch","/laioutr-ui/ui-kit/general/dark-mode-switch","3.laioutr-ui/ui-kit/01.general/dark-mode-switch",{"title":1495,"path":1496,"stem":1497},"Language Switcher","/laioutr-ui/ui-kit/general/language-switcher","3.laioutr-ui/ui-kit/01.general/language-switcher",{"title":1499,"path":1500,"stem":1501},"Media Preview","/laioutr-ui/ui-kit/general/media-preview","3.laioutr-ui/ui-kit/01.general/media-preview",{"title":1503,"path":1504,"stem":1505},"Media Stage","/laioutr-ui/ui-kit/general/media-stage","3.laioutr-ui/ui-kit/01.general/media-stage",{"title":1507,"path":1508,"stem":1509},"Nav Link Item","/laioutr-ui/ui-kit/general/nav-link-item","3.laioutr-ui/ui-kit/01.general/nav-link-item",{"title":1511,"path":1512,"stem":1513},"Nav Section Heading","/laioutr-ui/ui-kit/general/nav-section-heading","3.laioutr-ui/ui-kit/01.general/nav-section-heading",{"title":1515,"path":1516,"stem":1517},"OnSurface","/laioutr-ui/ui-kit/general/on-surface","3.laioutr-ui/ui-kit/01.general/on-surface",{"title":1519,"path":1520,"stem":1521},"Opening Status","/laioutr-ui/ui-kit/general/opening-status","3.laioutr-ui/ui-kit/01.general/opening-status",{"title":1523,"path":1524,"stem":1525},"Opening Status Detail","/laioutr-ui/ui-kit/general/opening-status-detail","3.laioutr-ui/ui-kit/01.general/opening-status-detail",{"title":1527,"path":1528,"stem":1529},"Opening Status Indicator","/laioutr-ui/ui-kit/general/opening-status-indicator","3.laioutr-ui/ui-kit/01.general/opening-status-indicator",{"title":1531,"path":1532,"stem":1533},"Rating Progress Bar Filter","/laioutr-ui/ui-kit/general/rating-progress-bar-filter","3.laioutr-ui/ui-kit/01.general/rating-progress-bar-filter",{"title":1535,"path":1536,"stem":1537},"Status Message","/laioutr-ui/ui-kit/general/status-message","3.laioutr-ui/ui-kit/01.general/status-message",{"title":1539,"path":1540,"stem":1541},"Stock Info Summary","/laioutr-ui/ui-kit/general/stock-info-summary","3.laioutr-ui/ui-kit/01.general/stock-info-summary",{"title":1543,"path":1544,"stem":1545},"Swatch Chip","/laioutr-ui/ui-kit/general/swatch-chip","3.laioutr-ui/ui-kit/01.general/swatch-chip",{"title":1547,"path":1548,"stem":1549},"Swatch Option","/laioutr-ui/ui-kit/general/swatch-option","3.laioutr-ui/ui-kit/01.general/swatch-option",{"title":1551,"path":1552,"stem":1553},"Swatch Summary","/laioutr-ui/ui-kit/general/swatch-summary","3.laioutr-ui/ui-kit/01.general/swatch-summary",{"title":1555,"path":1556,"stem":1557},"Table of Contents","/laioutr-ui/ui-kit/general/table-of-contents","3.laioutr-ui/ui-kit/01.general/table-of-contents",{"title":1559,"path":1560,"stem":1561},"Zoom Level (Segmented)","/laioutr-ui/ui-kit/general/zoom-level-segmented","3.laioutr-ui/ui-kit/01.general/zoom-level-segmented",{"title":1563,"path":1564,"stem":1565},"Zoom Level (Stepper)","/laioutr-ui/ui-kit/general/zoom-level-stepper","3.laioutr-ui/ui-kit/01.general/zoom-level-stepper",{"title":1567,"path":1568,"stem":1569,"children":1570,"page":55},"Typography","/laioutr-ui/ui-kit/typography","3.laioutr-ui/ui-kit/02.typography",[1571,1575,1578,1582,1586],{"title":1572,"path":1573,"stem":1574},"Icon List","/laioutr-ui/ui-kit/typography/iconlist","3.laioutr-ui/ui-kit/02.typography/IconList",{"title":461,"path":1576,"stem":1577},"/laioutr-ui/ui-kit/typography/link","3.laioutr-ui/ui-kit/02.typography/Link",{"title":1579,"path":1580,"stem":1581},"Rich Content","/laioutr-ui/ui-kit/typography/richcontent","3.laioutr-ui/ui-kit/02.typography/RichContent",{"title":1583,"path":1584,"stem":1585},"Text","/laioutr-ui/ui-kit/typography/text","3.laioutr-ui/ui-kit/02.typography/Text",{"title":1587,"path":1588,"stem":1589},"Text Group","/laioutr-ui/ui-kit/typography/text-group","3.laioutr-ui/ui-kit/02.typography/text-group",{"title":1591,"path":1592,"stem":1593,"children":1594,"page":55},"Layout","/laioutr-ui/ui-kit/layout","3.laioutr-ui/ui-kit/03.layout",[1595,1599,1603,1607],{"title":1596,"path":1597,"stem":1598},"Grid Fill","/laioutr-ui/ui-kit/layout/gridfill","3.laioutr-ui/ui-kit/03.layout/GridFill",{"title":1600,"path":1601,"stem":1602},"Grid Masonry","/laioutr-ui/ui-kit/layout/gridmasonry","3.laioutr-ui/ui-kit/03.layout/GridMasonry",{"title":1604,"path":1605,"stem":1606},"Scroll Area","/laioutr-ui/ui-kit/layout/scrollarea","3.laioutr-ui/ui-kit/03.layout/ScrollArea",{"title":1608,"path":1609,"stem":1610},"Separator","/laioutr-ui/ui-kit/layout/separator","3.laioutr-ui/ui-kit/03.layout/Separator",{"title":1612,"path":1613,"stem":1614,"children":1615,"page":55},"Content","/laioutr-ui/ui-kit/content","3.laioutr-ui/ui-kit/04.content",[1616,1620,1624],{"title":1617,"path":1618,"stem":1619},"Card","/laioutr-ui/ui-kit/content/card","3.laioutr-ui/ui-kit/04.content/Card",{"title":1621,"path":1622,"stem":1623},"Basic Table","/laioutr-ui/ui-kit/content/basic-table","3.laioutr-ui/ui-kit/04.content/basic-table",{"title":1625,"path":1626,"stem":1627},"Link Tile","/laioutr-ui/ui-kit/content/link-tile","3.laioutr-ui/ui-kit/04.content/link-tile",{"title":1629,"path":1630,"stem":1631,"children":1632,"page":55},"Surfaces","/laioutr-ui/ui-kit/surfaces","3.laioutr-ui/ui-kit/05.surfaces",[1633,1637,1641,1645,1649,1653,1657,1661],{"title":1634,"path":1635,"stem":1636},"Alert Dialog","/laioutr-ui/ui-kit/surfaces/alertdialog","3.laioutr-ui/ui-kit/05.surfaces/AlertDialog",{"title":1638,"path":1639,"stem":1640},"Popover","/laioutr-ui/ui-kit/surfaces/popover","3.laioutr-ui/ui-kit/05.surfaces/Popover",{"title":1642,"path":1643,"stem":1644},"Sheet","/laioutr-ui/ui-kit/surfaces/sheet","3.laioutr-ui/ui-kit/05.surfaces/Sheet",{"title":1646,"path":1647,"stem":1648},"Tabs","/laioutr-ui/ui-kit/surfaces/tabs","3.laioutr-ui/ui-kit/05.surfaces/Tabs",{"title":1650,"path":1651,"stem":1652},"Toast","/laioutr-ui/ui-kit/surfaces/toast","3.laioutr-ui/ui-kit/05.surfaces/Toast",{"title":1654,"path":1655,"stem":1656},"Toaster","/laioutr-ui/ui-kit/surfaces/toaster","3.laioutr-ui/ui-kit/05.surfaces/Toaster",{"title":1658,"path":1659,"stem":1660},"Context Menu","/laioutr-ui/ui-kit/surfaces/context-menu","3.laioutr-ui/ui-kit/05.surfaces/context-menu",{"title":1662,"path":1663,"stem":1664},"Navigation Menu","/laioutr-ui/ui-kit/surfaces/navigation-menu","3.laioutr-ui/ui-kit/05.surfaces/navigation-menu",{"title":1666,"path":1667,"stem":1668,"children":1669,"page":55},"Form","/laioutr-ui/ui-kit/form","3.laioutr-ui/ui-kit/06.form",[1670,1674,1678,1682,1686,1690,1694,1698,1702,1706,1710,1714,1718,1722,1726,1730,1734,1738,1742,1746,1750,1754,1758,1762,1766,1770,1774],{"title":1671,"path":1672,"stem":1673},"Button","/laioutr-ui/ui-kit/form/button","3.laioutr-ui/ui-kit/06.form/Button",{"title":1675,"path":1676,"stem":1677},"Checkbox","/laioutr-ui/ui-kit/form/checkbox","3.laioutr-ui/ui-kit/06.form/Checkbox",{"title":1679,"path":1680,"stem":1681},"Field","/laioutr-ui/ui-kit/form/field","3.laioutr-ui/ui-kit/06.form/Field",{"title":1683,"path":1684,"stem":1685},"Input","/laioutr-ui/ui-kit/form/input","3.laioutr-ui/ui-kit/06.form/Input",{"title":1687,"path":1688,"stem":1689},"Label","/laioutr-ui/ui-kit/form/label","3.laioutr-ui/ui-kit/06.form/Label",{"title":1691,"path":1692,"stem":1693},"Load More","/laioutr-ui/ui-kit/form/loadmore","3.laioutr-ui/ui-kit/06.form/LoadMore",{"title":1695,"path":1696,"stem":1697},"Pagination","/laioutr-ui/ui-kit/form/pagination","3.laioutr-ui/ui-kit/06.form/Pagination",{"title":1699,"path":1700,"stem":1701},"Quantity Picker","/laioutr-ui/ui-kit/form/quantitypicker","3.laioutr-ui/ui-kit/06.form/QuantityPicker",{"title":1703,"path":1704,"stem":1705},"Select","/laioutr-ui/ui-kit/form/select","3.laioutr-ui/ui-kit/06.form/Select",{"title":1707,"path":1708,"stem":1709},"Switch","/laioutr-ui/ui-kit/form/switch","3.laioutr-ui/ui-kit/06.form/Switch",{"title":1711,"path":1712,"stem":1713},"Animated Button","/laioutr-ui/ui-kit/form/animated-button","3.laioutr-ui/ui-kit/06.form/animated-button",{"title":1715,"path":1716,"stem":1717},"Highlight Toggle","/laioutr-ui/ui-kit/form/highlight-toggle","3.laioutr-ui/ui-kit/06.form/highlight-toggle",{"title":1719,"path":1720,"stem":1721},"Icon Button","/laioutr-ui/ui-kit/form/icon-button","3.laioutr-ui/ui-kit/06.form/icon-button",{"title":1723,"path":1724,"stem":1725},"Input Autocomplete","/laioutr-ui/ui-kit/form/input-autocomplete","3.laioutr-ui/ui-kit/06.form/input-autocomplete",{"title":1727,"path":1728,"stem":1729},"Input Checkbox","/laioutr-ui/ui-kit/form/input-checkbox","3.laioutr-ui/ui-kit/06.form/input-checkbox",{"title":1731,"path":1732,"stem":1733},"Input Combobox","/laioutr-ui/ui-kit/form/input-combobox","3.laioutr-ui/ui-kit/06.form/input-combobox",{"title":1735,"path":1736,"stem":1737},"Input Group","/laioutr-ui/ui-kit/form/input-group","3.laioutr-ui/ui-kit/06.form/input-group",{"title":1739,"path":1740,"stem":1741},"Input Password","/laioutr-ui/ui-kit/form/input-password","3.laioutr-ui/ui-kit/06.form/input-password",{"title":1743,"path":1744,"stem":1745},"Input Pin","/laioutr-ui/ui-kit/form/input-pin","3.laioutr-ui/ui-kit/06.form/input-pin",{"title":1747,"path":1748,"stem":1749},"Input Radio","/laioutr-ui/ui-kit/form/input-radio","3.laioutr-ui/ui-kit/06.form/input-radio",{"title":1751,"path":1752,"stem":1753},"Input Rating","/laioutr-ui/ui-kit/form/input-rating","3.laioutr-ui/ui-kit/06.form/input-rating",{"title":1755,"path":1756,"stem":1757},"Input Search","/laioutr-ui/ui-kit/form/input-search","3.laioutr-ui/ui-kit/06.form/input-search",{"title":1759,"path":1760,"stem":1761},"Input Slider","/laioutr-ui/ui-kit/form/input-slider","3.laioutr-ui/ui-kit/06.form/input-slider",{"title":1763,"path":1764,"stem":1765},"Listbox","/laioutr-ui/ui-kit/form/listbox","3.laioutr-ui/ui-kit/06.form/listbox",{"title":1767,"path":1768,"stem":1769},"Option Tile (Image)","/laioutr-ui/ui-kit/form/option-tile-image","3.laioutr-ui/ui-kit/06.form/option-tile-image",{"title":1771,"path":1772,"stem":1773},"Option Tile (Text)","/laioutr-ui/ui-kit/form/option-tile-text","3.laioutr-ui/ui-kit/06.form/option-tile-text",{"title":1775,"path":1776,"stem":1777},"Variant Selection Card","/laioutr-ui/ui-kit/form/variant-selection-card","3.laioutr-ui/ui-kit/06.form/variant-selection-card",{"title":1779,"path":1780,"stem":1781,"children":1782,"page":55},"Indicators","/laioutr-ui/ui-kit/indicators","3.laioutr-ui/ui-kit/07.indicators",[1783,1787,1791,1795,1799,1803],{"title":1784,"path":1785,"stem":1786},"Badge","/laioutr-ui/ui-kit/indicators/badge","3.laioutr-ui/ui-kit/07.indicators/Badge",{"title":1788,"path":1789,"stem":1790},"Caption Flag","/laioutr-ui/ui-kit/indicators/captionflag","3.laioutr-ui/ui-kit/07.indicators/CaptionFlag",{"title":1792,"path":1793,"stem":1794},"Product Tile Flag","/laioutr-ui/ui-kit/indicators/producttileflag","3.laioutr-ui/ui-kit/07.indicators/ProductTileFlag",{"title":1796,"path":1797,"stem":1798},"Rating Summary","/laioutr-ui/ui-kit/indicators/ratingsummary","3.laioutr-ui/ui-kit/07.indicators/RatingSummary",{"title":1800,"path":1801,"stem":1802},"Stars Rating","/laioutr-ui/ui-kit/indicators/starsrating","3.laioutr-ui/ui-kit/07.indicators/StarsRating",{"title":1804,"path":1805,"stem":1806},"Badge Promotion","/laioutr-ui/ui-kit/indicators/badge-promotion","3.laioutr-ui/ui-kit/07.indicators/badge-promotion",{"title":1808,"path":1809,"stem":1810,"children":1811,"page":55},"Utility Components","/laioutr-ui/ui-kit/utility-components","3.laioutr-ui/ui-kit/08.utility-components",[1812,1816],{"title":1813,"path":1814,"stem":1815},"Highlighted Text","/laioutr-ui/ui-kit/utility-components/highlighted-text","3.laioutr-ui/ui-kit/08.utility-components/highlighted-text",{"title":1817,"path":1818,"stem":1819},"Sizer","/laioutr-ui/ui-kit/utility-components/sizer","3.laioutr-ui/ui-kit/08.utility-components/sizer",{"title":1821,"path":1822,"stem":1823,"children":1824},"Hosting","/hosting","4.hosting/0.index",[1825,1826,1832,1862,1880,1910],{"title":1821,"path":1822,"stem":1823},{"title":1827,"path":1828,"stem":1829,"children":1830},"Laioutr Cloud","/hosting/laioutr-cloud","4.hosting/0.laioutr-cloud/0.index",[1831],{"title":1827,"path":1828,"stem":1829},{"title":1833,"path":1834,"stem":1835,"children":1836},"Hyperscaler","/hosting/hyperscaler","4.hosting/1.hyperscaler/0.index",[1837,1838,1842,1846,1850,1854,1858],{"title":1833,"path":1834,"stem":1835},{"title":1839,"path":1840,"stem":1841},"Akamai Adapter","/hosting/hyperscaler/akamai-adapter","4.hosting/1.hyperscaler/akamai-adapter",{"title":1843,"path":1844,"stem":1845},"AWS Adapter","/hosting/hyperscaler/aws-adapter","4.hosting/1.hyperscaler/aws-adapter",{"title":1847,"path":1848,"stem":1849},"Azure Adapter","/hosting/hyperscaler/azure-adapter","4.hosting/1.hyperscaler/azure-adapter",{"title":1851,"path":1852,"stem":1853},"Google Adapter","/hosting/hyperscaler/google-adapter","4.hosting/1.hyperscaler/google-adapter",{"title":1855,"path":1856,"stem":1857},"Netlify Adapter","/hosting/hyperscaler/netlify-adapter","4.hosting/1.hyperscaler/netlify-adapter",{"title":1859,"path":1860,"stem":1861},"Vercel Adapter","/hosting/hyperscaler/vercel-adapter","4.hosting/1.hyperscaler/vercel-adapter",{"title":1863,"path":1864,"stem":1865,"children":1866},"Native Hosting","/hosting/native-hosting-providers","4.hosting/2.native-hosting-providers/0.index",[1867,1868,1872,1876],{"title":1863,"path":1864,"stem":1865},{"title":1869,"path":1870,"stem":1871},"maxcluster","/hosting/native-hosting-providers/maxcluster","4.hosting/2.native-hosting-providers/maxcluster",{"title":1873,"path":1874,"stem":1875},"profihost","/hosting/native-hosting-providers/profihost","4.hosting/2.native-hosting-providers/profihost",{"title":1877,"path":1878,"stem":1879},"ScaleCommerce","/hosting/native-hosting-providers/scale-commerce","4.hosting/2.native-hosting-providers/scale-commerce",{"title":1881,"path":1882,"stem":1883,"children":1884},"Bring Your Own Server (BYOS)","/hosting/bring-your-own-server-byos","4.hosting/3.bring-your-own-server-byos/0.index",[1885,1886,1890,1894,1898,1902,1906],{"title":1881,"path":1882,"stem":1883},{"title":1887,"path":1888,"stem":1889},"BYOS Agent","/hosting/bring-your-own-server-byos/byos-agent","4.hosting/3.bring-your-own-server-byos/byos-agent",{"title":1891,"path":1892,"stem":1893},"Changelog","/hosting/bring-your-own-server-byos/changelog","4.hosting/3.bring-your-own-server-byos/changelog",{"title":1895,"path":1896,"stem":1897},"DevOps Components","/hosting/bring-your-own-server-byos/devops","4.hosting/3.bring-your-own-server-byos/devops",{"title":1899,"path":1900,"stem":1901},"Infrastructure Requirements","/hosting/bring-your-own-server-byos/infrastructure","4.hosting/3.bring-your-own-server-byos/infrastructure",{"title":1903,"path":1904,"stem":1905},"Software Requirements","/hosting/bring-your-own-server-byos/software","4.hosting/3.bring-your-own-server-byos/software",{"title":1907,"path":1908,"stem":1909},"Webhook Configuration","/hosting/bring-your-own-server-byos/webhook-config","4.hosting/3.bring-your-own-server-byos/webhook-config",{"title":1911,"path":1912,"stem":1913,"children":1914},"CDN","/hosting/cdn","4.hosting/4.cdn/0.index",[1915,1916],{"title":1911,"path":1912,"stem":1913},{"title":1917,"path":1918,"stem":1919},"Video CDN","/hosting/cdn/video-cdn","4.hosting/4.cdn/1.video-cdn",{"title":601,"path":1921,"stem":1922,"children":1923},"/checkout","5.Checkout/0.index",[1924],{"title":601,"path":1921,"stem":1922},{"title":613,"path":1926,"stem":1927,"children":1928},"/larry-ai","6.Larry-AI/0.index",[1929],{"title":613,"path":1926,"stem":1927},{"title":913,"path":1931,"stem":1932,"children":1933},"/figma-kit","7.Figma Kit/0.index",[1934,1935,1951],{"title":913,"path":1931,"stem":1932},{"title":121,"path":1936,"stem":1937,"children":1938,"page":55},"/figma-kit/introduction","7.Figma Kit/1.Introduction",[1939,1943,1947],{"title":1940,"path":1941,"stem":1942},"How to Start","/figma-kit/introduction/howtostart","7.Figma Kit/1.Introduction/0.howtostart",{"title":1944,"path":1945,"stem":1946},"Figma Variables","/figma-kit/introduction/figma-variables","7.Figma Kit/1.Introduction/figma-variables",{"title":1948,"path":1949,"stem":1950},"Library Connections","/figma-kit/introduction/library-connections","7.Figma Kit/1.Introduction/library-connections",{"title":1952,"path":1953,"stem":1954,"children":1955,"page":55},"Kits","/figma-kit/kits","7.Figma Kit/Kits",[1956,1959,1962,1965,1969,1972,1976,1980,1983,1986],{"title":928,"path":1957,"stem":1958},"/figma-kit/kits/b2b","7.Figma Kit/Kits/b2b",{"title":934,"path":1960,"stem":1961},"/figma-kit/kits/booking","7.Figma Kit/Kits/booking",{"title":940,"path":1963,"stem":1964},"/figma-kit/kits/cms","7.Figma Kit/Kits/cms",{"title":1966,"path":1967,"stem":1968},"Inpage Navigation","/figma-kit/kits/inpage-navigation","7.Figma Kit/Kits/inpage-navigation",{"title":1157,"path":1970,"stem":1971},"/figma-kit/kits/marketplace","7.Figma Kit/Kits/marketplace",{"title":1973,"path":1974,"stem":1975},"Retail & Multichannel","/figma-kit/kits/multichannel","7.Figma Kit/Kits/multichannel",{"title":1977,"path":1978,"stem":1979},"Navigation","/figma-kit/kits/navigation","7.Figma Kit/Kits/navigation",{"title":1233,"path":1981,"stem":1982},"/figma-kit/kits/saas","7.Figma Kit/Kits/saas",{"title":1251,"path":1984,"stem":1985},"/figma-kit/kits/shop","7.Figma Kit/Kits/shop",{"title":1389,"path":1987,"stem":1988},"/figma-kit/kits/ui-kit","7.Figma Kit/Kits/ui-kit",{"title":595,"path":1990,"stem":1991,"children":1992},"/cockpit","8.Cockpit/0.index",[1993,1994,2024,2041,2058],{"title":595,"path":1990,"stem":1991},{"title":154,"path":1995,"stem":1996,"children":1997,"page":55},"/cockpit/features","8.Cockpit/1.Features",[1998,2001,2005,2009,2013,2016,2020],{"title":694,"path":1999,"stem":2000},"/cockpit/features/apps","8.Cockpit/1.Features/apps",{"title":2002,"path":2003,"stem":2004},"Content (Collections)","/cockpit/features/content-collections","8.Cockpit/1.Features/content-collections",{"title":2006,"path":2007,"stem":2008},"Deployments","/cockpit/features/deployments","8.Cockpit/1.Features/deployments",{"title":2010,"path":2011,"stem":2012},"Markets","/cockpit/features/markets","8.Cockpit/1.Features/markets",{"title":204,"path":2014,"stem":2015},"/cockpit/features/redirects","8.Cockpit/1.Features/redirects",{"title":2017,"path":2018,"stem":2019},"Studio","/cockpit/features/studio","8.Cockpit/1.Features/studio",{"title":2021,"path":2022,"stem":2023},"Translations","/cockpit/features/translations","8.Cockpit/1.Features/translations",{"title":2025,"path":2026,"stem":2027,"children":2028,"page":55},"Project Settings","/cockpit/project-settings","8.Cockpit/2.Project-Settings",[2029,2033,2037],{"title":2030,"path":2031,"stem":2032},"Delete a project","/cockpit/project-settings/delete-project","8.Cockpit/2.Project-Settings/delete-project",{"title":2034,"path":2035,"stem":2036},"NPM","/cockpit/project-settings/npm","8.Cockpit/2.Project-Settings/npm",{"title":2038,"path":2039,"stem":2040},"Project secret key","/cockpit/project-settings/project-secret-key","8.Cockpit/2.Project-Settings/project-secret-key",{"title":2042,"path":2043,"stem":2044,"children":2045,"page":55},"Account Settings","/cockpit/account-settings","8.Cockpit/3.Account-Settings",[2046,2050,2054],{"title":2047,"path":2048,"stem":2049},"Notifications","/cockpit/account-settings/notifications","8.Cockpit/3.Account-Settings/notifications",{"title":2051,"path":2052,"stem":2053},"Preferences","/cockpit/account-settings/preferences","8.Cockpit/3.Account-Settings/preferences",{"title":2055,"path":2056,"stem":2057},"Security","/cockpit/account-settings/security","8.Cockpit/3.Account-Settings/security",{"title":2059,"path":2060,"stem":2061,"children":2062,"page":55},"Organisation Settings","/cockpit/organisation-settings","8.Cockpit/4.Organisation-Settings",[2063,2067,2071,2075,2079,2083],{"title":2064,"path":2065,"stem":2066},"API keys","/cockpit/organisation-settings/api-keys","8.Cockpit/4.Organisation-Settings/api-keys",{"title":2068,"path":2069,"stem":2070},"Billing","/cockpit/organisation-settings/billing","8.Cockpit/4.Organisation-Settings/billing",{"title":2072,"path":2073,"stem":2074},"General settings","/cockpit/organisation-settings/general-settings","8.Cockpit/4.Organisation-Settings/general-settings",{"title":2076,"path":2077,"stem":2078},"Members","/cockpit/organisation-settings/members","8.Cockpit/4.Organisation-Settings/members",{"title":2080,"path":2081,"stem":2082},"Projects","/cockpit/organisation-settings/projects","8.Cockpit/4.Organisation-Settings/projects",{"title":2084,"path":2085,"stem":2086},"Roles","/cockpit/organisation-settings/roles","8.Cockpit/4.Organisation-Settings/roles",{"title":2088,"path":2089,"stem":2090,"children":2091},"Data API","/data-api","9.Data-API/0.index",[2092,2093,2113,2123],{"title":2088,"path":2089,"stem":2090},{"title":2094,"path":2095,"stem":2096,"children":2097,"page":55},"Api Info","/data-api/api-info","9.Data-API/1.API-Info",[2098,2102,2106,2109],{"title":2099,"path":2100,"stem":2101},"API Basics","/data-api/api-info/api-basics","9.Data-API/1.API-Info/1.api-basics",{"title":2103,"path":2104,"stem":2105},"Authentication","/data-api/api-info/authentication","9.Data-API/1.API-Info/2.authentication",{"title":501,"path":2107,"stem":2108},"/data-api/api-info/errors","9.Data-API/1.API-Info/3.errors",{"title":2110,"path":2111,"stem":2112},"HTTP details","/data-api/api-info/http-details","9.Data-API/1.API-Info/4.http-details",{"title":2114,"path":2115,"stem":2116,"children":2117},"Management API","/data-api/management-api","9.Data-API/2.Management-API/0.index",[2118,2119],{"title":2114,"path":2115,"stem":2116},{"title":2120,"path":2121,"stem":2122},"Assets","/data-api/management-api/assets","9.Data-API/2.Management-API/1.assets",{"title":2124,"path":2125,"stem":2126,"children":2127},"Delivery API","/data-api/delivery-api","9.Data-API/3.Delivery-API/0.index",[2128],{"title":2124,"path":2125,"stem":2126},{"id":2130,"title":744,"aliases":2131,"body":2132,"changelogKeys":2131,"description":4102,"extension":4103,"links":2131,"meta":4104,"navigation":2272,"path":745,"playground":2131,"seo":4105,"sitemap":4106,"stem":746,"__hash__":4109},"docs/2.apps/app-development/bot-protection-providers.md",null,{"type":2133,"value":2134,"toc":4091},"minimark",[2135,2140,2161,2164,2202,2208,2212,2219,2795,2837,2841,2844,2969,3102,3105,3182,3189,3193,3203,3302,3320,3340,3344,3360,3364,3373,3433,3446,3450,3457,3461,3472,3475,3606,3609,3689,3692,3824,3828,3835,4084,4087],[2136,2137,2139],"h2",{"id":2138},"what-you-are-building","What you are building",[2141,2142,2143,2144,2148,2149,2153,2154,2160],"p",{},"A ",[2145,2146,2147],"strong",{},"bot-protection provider"," app decides whether a request to a ",[2150,2151,2152],"a",{"href":161},"protected action"," came from a person. Build one when ",[2150,2155,2156],{"href":807},[2157,2158,2159],"code",{},"@laioutr/app-botid"," does not fit your hosting. Cloudflare Turnstile, reCAPTCHA, hCaptcha and proof-of-work services all fit the same contract.",[2141,2162,2163],{},"A provider has two halves. frontend-core owns everything around them: the list of protected actions, the outage policy, the error responses and the signed bypass.",[2165,2166,2167,2193],"ul",{},[2168,2169,2143,2170,2173,2174,2177,2178,2181,2182,2185,2186,2189,2190,2192],"li",{},[2145,2171,2172],{},"client adapter"," (",[2157,2175,2176],{},"BotProtectionAdapter",") produces a proof for a protected request. A token adapter returns the proof as headers from ",[2157,2179,2180],{},"prepare()",", as Turnstile or reCAPTCHA would. A wrapper adapter hands the protected paths to a vendor script that wraps ",[2157,2183,2184],{},"fetch",", and returns ",[2157,2187,2188],{},"{}"," from ",[2157,2191,2180],{},", as BotID does.",[2168,2194,2143,2195,2173,2198,2201],{},[2145,2196,2197],{},"server verifier",[2157,2199,2200],{},"BotProtectionVerifier",") checks the proof and returns a verdict.",[2141,2203,2204,2205,2207],{},"Scaffold the module from the ",[2150,2206,732],{"href":733},".",[2136,2209,2211],{"id":2210},"the-contract","The contract",[2141,2213,2214,2215,2218],{},"The types are exported from ",[2157,2216,2217],{},"#frontend/bot-protection",":",[2220,2221,2226],"pre",{"className":2222,"code":2223,"language":2224,"meta":2225,"style":2225},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { H3Event } from 'h3';\n\nexport interface BotProtectionRequest {\n  /** An orchestr action token, or an id an app route declared. */\n  action: string;\n}\n\nexport interface BotProtectionTarget extends BotProtectionRequest {\n  method: string;\n  path: string;\n}\n\nexport interface BotProtectionAdapter {\n  readonly name: string;\n  setup?(context: { targets: readonly BotProtectionTarget[] }): void | (() => void);\n  prepare(request: BotProtectionRequest): Promise\u003CRecord\u003Cstring, string>>;\n  challenge?(request: BotProtectionRequest, data: unknown): Promise\u003CRecord\u003Cstring, string>>;\n}\n\nexport type BotProtectionVerdict =\n  | { status: 'valid' }\n  | { status: 'invalid'; reason: string }\n  | { status: 'unavailable'; reason: string }\n  | { status: 'challenge'; reason: string; data?: unknown };\n\nexport interface BotProtectionServerRequest extends BotProtectionRequest {\n  readInput(): Promise\u003Cunknown>;\n}\n\nexport interface BotProtectionVerifier {\n  readonly name: string;\n  verify(event: H3Event, request: BotProtectionServerRequest): Promise\u003CBotProtectionVerdict>;\n}\n","ts","",[2157,2227,2228,2267,2274,2291,2298,2312,2318,2323,2340,2352,2364,2369,2374,2386,2401,2455,2496,2538,2543,2548,2561,2584,2614,2642,2680,2685,2701,2720,2725,2730,2742,2755,2790],{"__ignoreMap":2225},[2229,2230,2233,2237,2240,2244,2248,2251,2254,2257,2261,2264],"span",{"class":2231,"line":2232},"line",1,[2229,2234,2236],{"class":2235},"s7zQu","import",[2229,2238,2239],{"class":2235}," type",[2229,2241,2243],{"class":2242},"sMK4o"," {",[2229,2245,2247],{"class":2246},"sTEyZ"," H3Event",[2229,2249,2250],{"class":2242}," }",[2229,2252,2253],{"class":2235}," from",[2229,2255,2256],{"class":2242}," '",[2229,2258,2260],{"class":2259},"sfazB","h3",[2229,2262,2263],{"class":2242},"'",[2229,2265,2266],{"class":2242},";\n",[2229,2268,2270],{"class":2231,"line":2269},2,[2229,2271,2273],{"emptyLinePlaceholder":2272},true,"\n",[2229,2275,2277,2280,2284,2288],{"class":2231,"line":2276},3,[2229,2278,2279],{"class":2235},"export",[2229,2281,2283],{"class":2282},"spNyl"," interface",[2229,2285,2287],{"class":2286},"sBMFI"," BotProtectionRequest",[2229,2289,2290],{"class":2242}," {\n",[2229,2292,2294],{"class":2231,"line":2293},4,[2229,2295,2297],{"class":2296},"sHwdD","  /** An orchestr action token, or an id an app route declared. */\n",[2229,2299,2301,2305,2307,2310],{"class":2231,"line":2300},5,[2229,2302,2304],{"class":2303},"swJcz","  action",[2229,2306,2218],{"class":2242},[2229,2308,2309],{"class":2286}," string",[2229,2311,2266],{"class":2242},[2229,2313,2315],{"class":2231,"line":2314},6,[2229,2316,2317],{"class":2242},"}\n",[2229,2319,2321],{"class":2231,"line":2320},7,[2229,2322,2273],{"emptyLinePlaceholder":2272},[2229,2324,2326,2328,2330,2333,2336,2338],{"class":2231,"line":2325},8,[2229,2327,2279],{"class":2235},[2229,2329,2283],{"class":2282},[2229,2331,2332],{"class":2286}," BotProtectionTarget",[2229,2334,2335],{"class":2282}," extends",[2229,2337,2287],{"class":2286},[2229,2339,2290],{"class":2242},[2229,2341,2343,2346,2348,2350],{"class":2231,"line":2342},9,[2229,2344,2345],{"class":2303},"  method",[2229,2347,2218],{"class":2242},[2229,2349,2309],{"class":2286},[2229,2351,2266],{"class":2242},[2229,2353,2355,2358,2360,2362],{"class":2231,"line":2354},10,[2229,2356,2357],{"class":2303},"  path",[2229,2359,2218],{"class":2242},[2229,2361,2309],{"class":2286},[2229,2363,2266],{"class":2242},[2229,2365,2367],{"class":2231,"line":2366},11,[2229,2368,2317],{"class":2242},[2229,2370,2372],{"class":2231,"line":2371},12,[2229,2373,2273],{"emptyLinePlaceholder":2272},[2229,2375,2377,2379,2381,2384],{"class":2231,"line":2376},13,[2229,2378,2279],{"class":2235},[2229,2380,2283],{"class":2282},[2229,2382,2383],{"class":2286}," BotProtectionAdapter",[2229,2385,2290],{"class":2242},[2229,2387,2389,2392,2395,2397,2399],{"class":2231,"line":2388},14,[2229,2390,2391],{"class":2282},"  readonly",[2229,2393,2394],{"class":2303}," name",[2229,2396,2218],{"class":2242},[2229,2398,2309],{"class":2286},[2229,2400,2266],{"class":2242},[2229,2402,2404,2407,2410,2414,2416,2418,2421,2423,2426,2428,2431,2434,2437,2440,2442,2445,2448,2450,2453],{"class":2231,"line":2403},15,[2229,2405,2406],{"class":2303},"  setup",[2229,2408,2409],{"class":2242},"?(",[2229,2411,2413],{"class":2412},"sHdIc","context",[2229,2415,2218],{"class":2242},[2229,2417,2243],{"class":2242},[2229,2419,2420],{"class":2303}," targets",[2229,2422,2218],{"class":2242},[2229,2424,2425],{"class":2282}," readonly",[2229,2427,2332],{"class":2286},[2229,2429,2430],{"class":2246},"[] ",[2229,2432,2433],{"class":2242},"}):",[2229,2435,2436],{"class":2286}," void",[2229,2438,2439],{"class":2242}," |",[2229,2441,2173],{"class":2246},[2229,2443,2444],{"class":2242},"()",[2229,2446,2447],{"class":2282}," =>",[2229,2449,2436],{"class":2286},[2229,2451,2452],{"class":2246},")",[2229,2454,2266],{"class":2242},[2229,2456,2458,2461,2464,2467,2469,2471,2474,2477,2480,2483,2485,2488,2491,2493],{"class":2231,"line":2457},16,[2229,2459,2460],{"class":2303},"  prepare",[2229,2462,2463],{"class":2242},"(",[2229,2465,2466],{"class":2412},"request",[2229,2468,2218],{"class":2242},[2229,2470,2287],{"class":2286},[2229,2472,2473],{"class":2242},"):",[2229,2475,2476],{"class":2286}," Promise",[2229,2478,2479],{"class":2242},"\u003C",[2229,2481,2482],{"class":2286},"Record",[2229,2484,2479],{"class":2242},[2229,2486,2487],{"class":2286},"string",[2229,2489,2490],{"class":2242},",",[2229,2492,2309],{"class":2286},[2229,2494,2495],{"class":2242},">>;\n",[2229,2497,2499,2502,2504,2506,2508,2510,2512,2515,2517,2520,2522,2524,2526,2528,2530,2532,2534,2536],{"class":2231,"line":2498},17,[2229,2500,2501],{"class":2303},"  challenge",[2229,2503,2409],{"class":2242},[2229,2505,2466],{"class":2412},[2229,2507,2218],{"class":2242},[2229,2509,2287],{"class":2286},[2229,2511,2490],{"class":2242},[2229,2513,2514],{"class":2412}," data",[2229,2516,2218],{"class":2242},[2229,2518,2519],{"class":2286}," unknown",[2229,2521,2473],{"class":2242},[2229,2523,2476],{"class":2286},[2229,2525,2479],{"class":2242},[2229,2527,2482],{"class":2286},[2229,2529,2479],{"class":2242},[2229,2531,2487],{"class":2286},[2229,2533,2490],{"class":2242},[2229,2535,2309],{"class":2286},[2229,2537,2495],{"class":2242},[2229,2539,2541],{"class":2231,"line":2540},18,[2229,2542,2317],{"class":2242},[2229,2544,2546],{"class":2231,"line":2545},19,[2229,2547,2273],{"emptyLinePlaceholder":2272},[2229,2549,2551,2553,2555,2558],{"class":2231,"line":2550},20,[2229,2552,2279],{"class":2235},[2229,2554,2239],{"class":2282},[2229,2556,2557],{"class":2286}," BotProtectionVerdict",[2229,2559,2560],{"class":2242}," =\n",[2229,2562,2564,2567,2569,2572,2574,2576,2579,2581],{"class":2231,"line":2563},21,[2229,2565,2566],{"class":2242},"  |",[2229,2568,2243],{"class":2242},[2229,2570,2571],{"class":2303}," status",[2229,2573,2218],{"class":2242},[2229,2575,2256],{"class":2242},[2229,2577,2578],{"class":2259},"valid",[2229,2580,2263],{"class":2242},[2229,2582,2583],{"class":2242}," }\n",[2229,2585,2587,2589,2591,2593,2595,2597,2600,2602,2605,2608,2610,2612],{"class":2231,"line":2586},22,[2229,2588,2566],{"class":2242},[2229,2590,2243],{"class":2242},[2229,2592,2571],{"class":2303},[2229,2594,2218],{"class":2242},[2229,2596,2256],{"class":2242},[2229,2598,2599],{"class":2259},"invalid",[2229,2601,2263],{"class":2242},[2229,2603,2604],{"class":2242},";",[2229,2606,2607],{"class":2303}," reason",[2229,2609,2218],{"class":2242},[2229,2611,2309],{"class":2286},[2229,2613,2583],{"class":2242},[2229,2615,2617,2619,2621,2623,2625,2627,2630,2632,2634,2636,2638,2640],{"class":2231,"line":2616},23,[2229,2618,2566],{"class":2242},[2229,2620,2243],{"class":2242},[2229,2622,2571],{"class":2303},[2229,2624,2218],{"class":2242},[2229,2626,2256],{"class":2242},[2229,2628,2629],{"class":2259},"unavailable",[2229,2631,2263],{"class":2242},[2229,2633,2604],{"class":2242},[2229,2635,2607],{"class":2303},[2229,2637,2218],{"class":2242},[2229,2639,2309],{"class":2286},[2229,2641,2583],{"class":2242},[2229,2643,2645,2647,2649,2651,2653,2655,2658,2660,2662,2664,2666,2668,2670,2672,2675,2677],{"class":2231,"line":2644},24,[2229,2646,2566],{"class":2242},[2229,2648,2243],{"class":2242},[2229,2650,2571],{"class":2303},[2229,2652,2218],{"class":2242},[2229,2654,2256],{"class":2242},[2229,2656,2657],{"class":2259},"challenge",[2229,2659,2263],{"class":2242},[2229,2661,2604],{"class":2242},[2229,2663,2607],{"class":2303},[2229,2665,2218],{"class":2242},[2229,2667,2309],{"class":2286},[2229,2669,2604],{"class":2242},[2229,2671,2514],{"class":2303},[2229,2673,2674],{"class":2242},"?:",[2229,2676,2519],{"class":2286},[2229,2678,2679],{"class":2242}," };\n",[2229,2681,2683],{"class":2231,"line":2682},25,[2229,2684,2273],{"emptyLinePlaceholder":2272},[2229,2686,2688,2690,2692,2695,2697,2699],{"class":2231,"line":2687},26,[2229,2689,2279],{"class":2235},[2229,2691,2283],{"class":2282},[2229,2693,2694],{"class":2286}," BotProtectionServerRequest",[2229,2696,2335],{"class":2282},[2229,2698,2287],{"class":2286},[2229,2700,2290],{"class":2242},[2229,2702,2704,2707,2710,2712,2714,2717],{"class":2231,"line":2703},27,[2229,2705,2706],{"class":2303},"  readInput",[2229,2708,2709],{"class":2242},"():",[2229,2711,2476],{"class":2286},[2229,2713,2479],{"class":2242},[2229,2715,2716],{"class":2286},"unknown",[2229,2718,2719],{"class":2242},">;\n",[2229,2721,2723],{"class":2231,"line":2722},28,[2229,2724,2317],{"class":2242},[2229,2726,2728],{"class":2231,"line":2727},29,[2229,2729,2273],{"emptyLinePlaceholder":2272},[2229,2731,2733,2735,2737,2740],{"class":2231,"line":2732},30,[2229,2734,2279],{"class":2235},[2229,2736,2283],{"class":2282},[2229,2738,2739],{"class":2286}," BotProtectionVerifier",[2229,2741,2290],{"class":2242},[2229,2743,2745,2747,2749,2751,2753],{"class":2231,"line":2744},31,[2229,2746,2391],{"class":2282},[2229,2748,2394],{"class":2303},[2229,2750,2218],{"class":2242},[2229,2752,2309],{"class":2286},[2229,2754,2266],{"class":2242},[2229,2756,2758,2761,2763,2766,2768,2770,2772,2775,2777,2779,2781,2783,2785,2788],{"class":2231,"line":2757},32,[2229,2759,2760],{"class":2303},"  verify",[2229,2762,2463],{"class":2242},[2229,2764,2765],{"class":2412},"event",[2229,2767,2218],{"class":2242},[2229,2769,2247],{"class":2286},[2229,2771,2490],{"class":2242},[2229,2773,2774],{"class":2412}," request",[2229,2776,2218],{"class":2242},[2229,2778,2694],{"class":2286},[2229,2780,2473],{"class":2242},[2229,2782,2476],{"class":2286},[2229,2784,2479],{"class":2242},[2229,2786,2787],{"class":2286},"BotProtectionVerdict",[2229,2789,2719],{"class":2242},[2229,2791,2793],{"class":2231,"line":2792},33,[2229,2794,2317],{"class":2242},[2796,2797,2798,2804,2814,2828],"field-group",{},[2799,2800,2803],"field",{"name":2801,"type":2802},"setup(context)","({ targets }) => void | (() => void)","Runs once when the adapter is installed, with the method and path of every protected action. Throw on missing configuration, and the adapter is not installed. Return a cleanup function if it holds listeners.",[2799,2805,2809,2810,2813],{"name":2806,"type":2807,":required":2808},"prepare(request)","(request) => Promise\u003CRecord\u003Cstring, string>>","true","Returns the headers that prove one request. It may load the vendor script or show a challenge. Throw ",[2157,2811,2812],{},"BotProtectionCancelled"," when the visitor closes the challenge.",[2799,2815,2818,2819,2823,2824,2827],{"name":2816,"type":2817},"challenge(request, data)","(request, data) => Promise\u003CRecord\u003Cstring, string>>","Returns a ",[2150,2820,2822],{"href":2821},"#step-up-challenges","step-up proof",", given the ",[2157,2825,2826],{},"data"," the verifier sent.",[2799,2829,2832,2833,2836],{"name":2830,"type":2831,":required":2808},"verify(event, request)","(event, request) => Promise\u003CBotProtectionVerdict>","Checks the proof. Call ",[2157,2834,2835],{},"request.readInput()"," only when the verdict depends on the submitted input.",[2136,2838,2840],{"id":2839},"registering-the-provider","Registering the provider",[2141,2842,2843],{},"Install the adapter from a client plugin, and register the verifier from a Nitro plugin:",[2220,2845,2848],{"className":2222,"code":2846,"filename":2847,"language":2224,"meta":2225,"style":2225},"import { defineNuxtPlugin } from 'nuxt/app';\nimport { useBotProtection } from '#imports';\nimport { createAcmeAdapter } from '../createAcmeAdapter';\n\nexport default defineNuxtPlugin(() => {\n  useBotProtection().setAdapter(createAcmeAdapter());\n});\n","src/runtime/app/plugins/botProtection.client.ts",[2157,2849,2850,2872,2894,2916,2920,2938,2960],{"__ignoreMap":2225},[2229,2851,2852,2854,2856,2859,2861,2863,2865,2868,2870],{"class":2231,"line":2232},[2229,2853,2236],{"class":2235},[2229,2855,2243],{"class":2242},[2229,2857,2858],{"class":2246}," defineNuxtPlugin",[2229,2860,2250],{"class":2242},[2229,2862,2253],{"class":2235},[2229,2864,2256],{"class":2242},[2229,2866,2867],{"class":2259},"nuxt/app",[2229,2869,2263],{"class":2242},[2229,2871,2266],{"class":2242},[2229,2873,2874,2876,2878,2881,2883,2885,2887,2890,2892],{"class":2231,"line":2269},[2229,2875,2236],{"class":2235},[2229,2877,2243],{"class":2242},[2229,2879,2880],{"class":2246}," useBotProtection",[2229,2882,2250],{"class":2242},[2229,2884,2253],{"class":2235},[2229,2886,2256],{"class":2242},[2229,2888,2889],{"class":2259},"#imports",[2229,2891,2263],{"class":2242},[2229,2893,2266],{"class":2242},[2229,2895,2896,2898,2900,2903,2905,2907,2909,2912,2914],{"class":2231,"line":2276},[2229,2897,2236],{"class":2235},[2229,2899,2243],{"class":2242},[2229,2901,2902],{"class":2246}," createAcmeAdapter",[2229,2904,2250],{"class":2242},[2229,2906,2253],{"class":2235},[2229,2908,2256],{"class":2242},[2229,2910,2911],{"class":2259},"../createAcmeAdapter",[2229,2913,2263],{"class":2242},[2229,2915,2266],{"class":2242},[2229,2917,2918],{"class":2231,"line":2293},[2229,2919,2273],{"emptyLinePlaceholder":2272},[2229,2921,2922,2924,2927,2930,2932,2934,2936],{"class":2231,"line":2300},[2229,2923,2279],{"class":2235},[2229,2925,2926],{"class":2235}," default",[2229,2928,2858],{"class":2929},"s2Zo4",[2229,2931,2463],{"class":2246},[2229,2933,2444],{"class":2242},[2229,2935,2447],{"class":2282},[2229,2937,2290],{"class":2242},[2229,2939,2940,2943,2945,2947,2950,2952,2955,2958],{"class":2231,"line":2314},[2229,2941,2942],{"class":2929},"  useBotProtection",[2229,2944,2444],{"class":2303},[2229,2946,2207],{"class":2242},[2229,2948,2949],{"class":2929},"setAdapter",[2229,2951,2463],{"class":2303},[2229,2953,2954],{"class":2929},"createAcmeAdapter",[2229,2956,2957],{"class":2303},"())",[2229,2959,2266],{"class":2242},[2229,2961,2962,2965,2967],{"class":2231,"line":2320},[2229,2963,2964],{"class":2242},"}",[2229,2966,2452],{"class":2246},[2229,2968,2266],{"class":2242},[2220,2970,2973],{"className":2222,"code":2971,"filename":2972,"language":2224,"meta":2225,"style":2225},"import { defineNitroPlugin, setBotProtectionVerifier } from '#imports';\nimport { verifyWithAcme } from '../lib/verifyWithAcme';\n\nexport default defineNitroPlugin(() => {\n  setBotProtectionVerifier({ name: 'acme', verify: (event) => verifyWithAcme(event) });\n});\n","src/runtime/server/plugins/botProtection.ts",[2157,2974,2975,3001,3023,3027,3043,3094],{"__ignoreMap":2225},[2229,2976,2977,2979,2981,2984,2986,2989,2991,2993,2995,2997,2999],{"class":2231,"line":2232},[2229,2978,2236],{"class":2235},[2229,2980,2243],{"class":2242},[2229,2982,2983],{"class":2246}," defineNitroPlugin",[2229,2985,2490],{"class":2242},[2229,2987,2988],{"class":2246}," setBotProtectionVerifier",[2229,2990,2250],{"class":2242},[2229,2992,2253],{"class":2235},[2229,2994,2256],{"class":2242},[2229,2996,2889],{"class":2259},[2229,2998,2263],{"class":2242},[2229,3000,2266],{"class":2242},[2229,3002,3003,3005,3007,3010,3012,3014,3016,3019,3021],{"class":2231,"line":2269},[2229,3004,2236],{"class":2235},[2229,3006,2243],{"class":2242},[2229,3008,3009],{"class":2246}," verifyWithAcme",[2229,3011,2250],{"class":2242},[2229,3013,2253],{"class":2235},[2229,3015,2256],{"class":2242},[2229,3017,3018],{"class":2259},"../lib/verifyWithAcme",[2229,3020,2263],{"class":2242},[2229,3022,2266],{"class":2242},[2229,3024,3025],{"class":2231,"line":2276},[2229,3026,2273],{"emptyLinePlaceholder":2272},[2229,3028,3029,3031,3033,3035,3037,3039,3041],{"class":2231,"line":2293},[2229,3030,2279],{"class":2235},[2229,3032,2926],{"class":2235},[2229,3034,2983],{"class":2929},[2229,3036,2463],{"class":2246},[2229,3038,2444],{"class":2242},[2229,3040,2447],{"class":2282},[2229,3042,2290],{"class":2242},[2229,3044,3045,3048,3050,3053,3055,3057,3059,3062,3064,3066,3069,3071,3073,3075,3077,3079,3081,3083,3085,3088,3090,3092],{"class":2231,"line":2300},[2229,3046,3047],{"class":2929},"  setBotProtectionVerifier",[2229,3049,2463],{"class":2303},[2229,3051,3052],{"class":2242},"{",[2229,3054,2394],{"class":2303},[2229,3056,2218],{"class":2242},[2229,3058,2256],{"class":2242},[2229,3060,3061],{"class":2259},"acme",[2229,3063,2263],{"class":2242},[2229,3065,2490],{"class":2242},[2229,3067,3068],{"class":2929}," verify",[2229,3070,2218],{"class":2242},[2229,3072,2173],{"class":2242},[2229,3074,2765],{"class":2412},[2229,3076,2452],{"class":2242},[2229,3078,2447],{"class":2282},[2229,3080,3009],{"class":2929},[2229,3082,2463],{"class":2303},[2229,3084,2765],{"class":2246},[2229,3086,3087],{"class":2303},") ",[2229,3089,2964],{"class":2242},[2229,3091,2452],{"class":2303},[2229,3093,2266],{"class":2242},[2229,3095,3096,3098,3100],{"class":2231,"line":2314},[2229,3097,2964],{"class":2242},[2229,3099,2452],{"class":2246},[2229,3101,2266],{"class":2242},[2141,3103,3104],{},"Name the provider in your module, so the build can warn when a project lists actions but installs no provider:",[2220,3106,3109],{"className":2222,"code":3107,"filename":3108,"language":2224,"meta":2225,"style":2225},"nuxt.options.runtimeConfig.laioutr = defu({ botProtection: { provider: 'acme' } }, nuxt.options.runtimeConfig.laioutr);\n","src/module.ts",[2157,3110,3111],{"__ignoreMap":2225},[2229,3112,3113,3116,3118,3121,3123,3126,3128,3131,3134,3137,3139,3141,3144,3146,3148,3151,3153,3155,3157,3159,3161,3164,3167,3169,3171,3173,3175,3177,3180],{"class":2231,"line":2232},[2229,3114,3115],{"class":2246},"nuxt",[2229,3117,2207],{"class":2242},[2229,3119,3120],{"class":2246},"options",[2229,3122,2207],{"class":2242},[2229,3124,3125],{"class":2246},"runtimeConfig",[2229,3127,2207],{"class":2242},[2229,3129,3130],{"class":2246},"laioutr ",[2229,3132,3133],{"class":2242},"=",[2229,3135,3136],{"class":2929}," defu",[2229,3138,2463],{"class":2246},[2229,3140,3052],{"class":2242},[2229,3142,3143],{"class":2303}," botProtection",[2229,3145,2218],{"class":2242},[2229,3147,2243],{"class":2242},[2229,3149,3150],{"class":2303}," provider",[2229,3152,2218],{"class":2242},[2229,3154,2256],{"class":2242},[2229,3156,3061],{"class":2259},[2229,3158,2263],{"class":2242},[2229,3160,2250],{"class":2242},[2229,3162,3163],{"class":2242}," },",[2229,3165,3166],{"class":2246}," nuxt",[2229,3168,2207],{"class":2242},[2229,3170,3120],{"class":2246},[2229,3172,2207],{"class":2242},[2229,3174,3125],{"class":2246},[2229,3176,2207],{"class":2242},[2229,3178,3179],{"class":2246},"laioutr)",[2229,3181,2266],{"class":2242},[2141,3183,3184,3185,3188],{},"Do not register a verifier that cannot run in the current environment, for example without its secret. frontend-core then rejects every protected action. A verifier that always throws would instead let every request through under the default ",[2157,3186,3187],{},"open"," policy.",[2136,3190,3192],{"id":3191},"what-the-server-does-with-a-verdict","What the server does with a verdict",[2141,3194,3195,3196,3200,3201,2218],{},"A valid ",[2150,3197,3199],{"href":3198},"#the-signed-bypass","signed bypass"," skips the verifier, and a missing verifier rejects the request. Otherwise the verifier runs with a 5-second limit, where a throw or a timeout counts as ",[2157,3202,2629],{},[3204,3205,3206,3222],"table",{},[3207,3208,3209],"thead",{},[3210,3211,3212,3216,3219],"tr",{},[3213,3214,3215],"th",{},"Verdict",[3213,3217,3218],{},"Response",[3213,3220,3221],{},"Error code",[3223,3224,3225,3237,3251,3270,3285],"tbody",{},[3210,3226,3227,3232,3235],{},[3228,3229,3230],"td",{},[2157,3231,2578],{},[3228,3233,3234],{},"The action runs.",[3228,3236],{},[3210,3238,3239,3243,3246],{},[3228,3240,3241],{},[2157,3242,2599],{},[3228,3244,3245],{},"403",[3228,3247,3248],{},[2157,3249,3250],{},"bot-protection-rejected",[3210,3252,3253,3257,3265],{},[3228,3254,3255],{},[2157,3256,2657],{},[3228,3258,3259,3260,3262,3263],{},"403, with the verifier's ",[2157,3261,2826],{}," as ",[2157,3264,2657],{},[3228,3266,3267],{},[2157,3268,3269],{},"bot-protection-challenge",[3210,3271,3272,3280,3283],{},[3228,3273,3274,3276,3277,3279],{},[2157,3275,2629],{},", policy ",[2157,3278,3187],{}," (default)",[3228,3281,3282],{},"The action runs, and the server logs a warning.",[3228,3284],{},[3210,3286,3287,3294,3297],{},[3228,3288,3289,3276,3291],{},[2157,3290,2629],{},[2157,3292,3293],{},"closed",[3228,3295,3296],{},"503",[3228,3298,3299],{},[2157,3300,3301],{},"bot-protection-unavailable",[2141,3303,3304,3305,3308,3309,3312,3313,3316,3317,2207],{},"The code is in the error's ",[2157,3306,3307],{},"data.code",", or at ",[2157,3310,3311],{},"data.data.code"," in the response of an orchestr action. The ",[2157,3314,3315],{},"reason"," stays on the server, in the trace attribute ",[2157,3318,3319],{},"laioutr.bot_protection.reason",[2141,3321,3322,3323,3325,3326,3328,3329,3331,3332,3335,3336,3339],{},"The outage policy applies only to ",[2157,3324,2629],{},". Return ",[2157,3327,2599],{}," for a missing, expired, reused or foreign proof, and for a configuration error such as a wrong secret key. Return ",[2157,3330,2629],{}," only when the vendor cannot answer. An error with a ",[2157,3333,3334],{},"statusCode",", such as the 400 from ",[2157,3337,3338],{},"readInput()"," on invalid input, passes through unchanged.",[2136,3341,3343],{"id":3342},"when-the-vendor-script-does-not-load","When the vendor script does not load",[2141,3345,3346,3347,2173,3350,3353,3354,3356,3357,3359],{},"An adapter that cannot load the vendor script may send ",[2157,3348,3349],{},"x-laioutr-bot-protection-client-outage: 1",[2157,3351,3352],{},"BOT_PROTECTION_CLIENT_OUTAGE_HEADER",") instead of a proof. Any client can send that header, so never answer ",[2157,3355,2629],{}," because of it alone: check the vendor's health from the server, cache the result for about 30 seconds, and answer ",[2157,3358,2599],{}," when the vendor is up.",[2136,3361,3363],{"id":3362},"step-up-challenges","Step-up challenges",[2141,3365,3366,3367,3369,3370,3372],{},"A verifier asks for a stronger proof by answering ",[2157,3368,2657],{},". Its ",[2157,3371,2826],{}," reaches the browser, so put only public values in it:",[2220,3374,3376],{"className":2222,"code":3375,"language":2224,"meta":2225,"style":2225},"return { status: 'challenge', reason: 'low-score', data: { siteKey: config.interactiveSiteKey } };\n",[2157,3377,3378],{"__ignoreMap":2225},[2229,3379,3380,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3406,3408,3410,3412,3414,3416,3419,3421,3424,3426,3429,3431],{"class":2231,"line":2232},[2229,3381,3382],{"class":2235},"return",[2229,3384,2243],{"class":2242},[2229,3386,2571],{"class":2303},[2229,3388,2218],{"class":2242},[2229,3390,2256],{"class":2242},[2229,3392,2657],{"class":2259},[2229,3394,2263],{"class":2242},[2229,3396,2490],{"class":2242},[2229,3398,2607],{"class":2303},[2229,3400,2218],{"class":2242},[2229,3402,2256],{"class":2242},[2229,3404,3405],{"class":2259},"low-score",[2229,3407,2263],{"class":2242},[2229,3409,2490],{"class":2242},[2229,3411,2514],{"class":2303},[2229,3413,2218],{"class":2242},[2229,3415,2243],{"class":2242},[2229,3417,3418],{"class":2303}," siteKey",[2229,3420,2218],{"class":2242},[2229,3422,3423],{"class":2246}," config",[2229,3425,2207],{"class":2242},[2229,3427,3428],{"class":2246},"interactiveSiteKey ",[2229,3430,2964],{"class":2242},[2229,3432,2679],{"class":2242},[2141,3434,3435,3436,3439,3440,3442,3443,2207],{},"If the adapter implements ",[2157,3437,3438],{},"challenge()",", the client calls it and retries the action once with its headers. Without ",[2157,3441,3438],{},", or when the retry fails, the caller receives the error as ",[2157,3444,3445],{},"'rejected'",[2136,3447,3449],{"id":3448},"timing-and-consent","Timing and consent",[2141,3451,3452,3453,3456],{},"Laioutr's own providers load nothing in ",[2157,3454,3455],{},"setup()"," and start the vendor when a visitor triggers a protected action. If yours loads vendor code, contacts the vendor or reads device data earlier, say so in its documentation, together with what the vendor states about its purposes. The project decides whether the provider needs consent.",[2136,3458,3460],{"id":3459},"protecting-an-app-route","Protecting an app route",[2141,3462,3463,3464,3467,3468,3471],{},"An orchestr action needs only its entry in the project config. A route your app registers itself, such as ",[2157,3465,3466],{},"POST /api/app-acme/login/start",", also needs three steps, after which the project lists ",[2157,3469,3470],{},"app-acme/login-start"," like any action.",[2141,3473,3474],{},"Declare the route in your module:",[2220,3476,3478],{"className":2222,"code":3477,"filename":3108,"language":2224,"meta":2225,"style":2225},"nuxt.options.runtimeConfig.public.laioutr = defu(\n  { botProtection: { routes: [{ action: 'app-acme/login-start', method: 'POST', path: '/api/app-acme/login/start' }] } },\n  nuxt.options.runtimeConfig.public.laioutr\n);\n",[2157,3479,3480,3508,3578,3600],{"__ignoreMap":2225},[2229,3481,3482,3484,3486,3488,3490,3492,3494,3497,3499,3501,3503,3505],{"class":2231,"line":2232},[2229,3483,3115],{"class":2246},[2229,3485,2207],{"class":2242},[2229,3487,3120],{"class":2246},[2229,3489,2207],{"class":2242},[2229,3491,3125],{"class":2246},[2229,3493,2207],{"class":2242},[2229,3495,3496],{"class":2246},"public",[2229,3498,2207],{"class":2242},[2229,3500,3130],{"class":2246},[2229,3502,3133],{"class":2242},[2229,3504,3136],{"class":2929},[2229,3506,3507],{"class":2246},"(\n",[2229,3509,3510,3513,3515,3517,3519,3522,3524,3527,3529,3532,3534,3536,3538,3540,3542,3545,3547,3549,3552,3554,3556,3559,3561,3563,3566,3568,3570,3573,3575],{"class":2231,"line":2269},[2229,3511,3512],{"class":2242},"  {",[2229,3514,3143],{"class":2303},[2229,3516,2218],{"class":2242},[2229,3518,2243],{"class":2242},[2229,3520,3521],{"class":2303}," routes",[2229,3523,2218],{"class":2242},[2229,3525,3526],{"class":2246}," [",[2229,3528,3052],{"class":2242},[2229,3530,3531],{"class":2303}," action",[2229,3533,2218],{"class":2242},[2229,3535,2256],{"class":2242},[2229,3537,3470],{"class":2259},[2229,3539,2263],{"class":2242},[2229,3541,2490],{"class":2242},[2229,3543,3544],{"class":2303}," method",[2229,3546,2218],{"class":2242},[2229,3548,2256],{"class":2242},[2229,3550,3551],{"class":2259},"POST",[2229,3553,2263],{"class":2242},[2229,3555,2490],{"class":2242},[2229,3557,3558],{"class":2303}," path",[2229,3560,2218],{"class":2242},[2229,3562,2256],{"class":2242},[2229,3564,3565],{"class":2259},"/api/app-acme/login/start",[2229,3567,2263],{"class":2242},[2229,3569,2250],{"class":2242},[2229,3571,3572],{"class":2246},"] ",[2229,3574,2964],{"class":2242},[2229,3576,3577],{"class":2242}," },\n",[2229,3579,3580,3583,3585,3587,3589,3591,3593,3595,3597],{"class":2231,"line":2276},[2229,3581,3582],{"class":2246},"  nuxt",[2229,3584,2207],{"class":2242},[2229,3586,3120],{"class":2246},[2229,3588,2207],{"class":2242},[2229,3590,3125],{"class":2246},[2229,3592,2207],{"class":2242},[2229,3594,3496],{"class":2246},[2229,3596,2207],{"class":2242},[2229,3598,3599],{"class":2246},"laioutr\n",[2229,3601,3602,3604],{"class":2231,"line":2293},[2229,3603,2452],{"class":2246},[2229,3605,2266],{"class":2242},[2141,3607,3608],{},"Check it first in the handler:",[2220,3610,3613],{"className":2222,"code":3611,"filename":3612,"language":2224,"meta":2225,"style":2225},"export default defineEventHandler(async (event) => {\n  // Returns at once when the project does not list the id\n  await requireBotProtection(event, { action: 'app-acme/login-start' });\n  // …\n});\n","src/runtime/server/api/app-acme/login/start.post.ts",[2157,3614,3615,3639,3644,3676,3681],{"__ignoreMap":2225},[2229,3616,3617,3619,3621,3624,3626,3629,3631,3633,3635,3637],{"class":2231,"line":2232},[2229,3618,2279],{"class":2235},[2229,3620,2926],{"class":2235},[2229,3622,3623],{"class":2929}," defineEventHandler",[2229,3625,2463],{"class":2246},[2229,3627,3628],{"class":2282},"async",[2229,3630,2173],{"class":2242},[2229,3632,2765],{"class":2412},[2229,3634,2452],{"class":2242},[2229,3636,2447],{"class":2282},[2229,3638,2290],{"class":2242},[2229,3640,3641],{"class":2231,"line":2269},[2229,3642,3643],{"class":2296},"  // Returns at once when the project does not list the id\n",[2229,3645,3646,3649,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674],{"class":2231,"line":2276},[2229,3647,3648],{"class":2235},"  await",[2229,3650,3651],{"class":2929}," requireBotProtection",[2229,3653,2463],{"class":2303},[2229,3655,2765],{"class":2246},[2229,3657,2490],{"class":2242},[2229,3659,2243],{"class":2242},[2229,3661,3531],{"class":2303},[2229,3663,2218],{"class":2242},[2229,3665,2256],{"class":2242},[2229,3667,3470],{"class":2259},[2229,3669,2263],{"class":2242},[2229,3671,2250],{"class":2242},[2229,3673,2452],{"class":2303},[2229,3675,2266],{"class":2242},[2229,3677,3678],{"class":2231,"line":2293},[2229,3679,3680],{"class":2296},"  // …\n",[2229,3682,3683,3685,3687],{"class":2231,"line":2300},[2229,3684,2964],{"class":2242},[2229,3686,2452],{"class":2246},[2229,3688,2266],{"class":2242},[2141,3690,3691],{},"Send the proof from your client code:",[2220,3693,3695],{"className":2222,"code":3694,"language":2224,"meta":2225,"style":2225},"const botProtection = useBotProtection();\nconst headers = botProtection.isProtected('app-acme/login-start') ? await botProtection.prepare({ action: 'app-acme/login-start' }) : {};\n\nawait $fetch('/api/app-acme/login/start', { method: 'POST', body, headers });\n",[2157,3696,3697,3713,3775,3779],{"__ignoreMap":2225},[2229,3698,3699,3702,3705,3707,3709,3711],{"class":2231,"line":2232},[2229,3700,3701],{"class":2282},"const",[2229,3703,3704],{"class":2246}," botProtection ",[2229,3706,3133],{"class":2242},[2229,3708,2880],{"class":2929},[2229,3710,2444],{"class":2246},[2229,3712,2266],{"class":2242},[2229,3714,3715,3717,3720,3722,3724,3726,3729,3731,3733,3735,3737,3739,3742,3745,3747,3749,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772],{"class":2231,"line":2269},[2229,3716,3701],{"class":2282},[2229,3718,3719],{"class":2246}," headers ",[2229,3721,3133],{"class":2242},[2229,3723,3143],{"class":2246},[2229,3725,2207],{"class":2242},[2229,3727,3728],{"class":2929},"isProtected",[2229,3730,2463],{"class":2246},[2229,3732,2263],{"class":2242},[2229,3734,3470],{"class":2259},[2229,3736,2263],{"class":2242},[2229,3738,3087],{"class":2246},[2229,3740,3741],{"class":2242},"?",[2229,3743,3744],{"class":2235}," await",[2229,3746,3143],{"class":2246},[2229,3748,2207],{"class":2242},[2229,3750,3751],{"class":2929},"prepare",[2229,3753,2463],{"class":2246},[2229,3755,3052],{"class":2242},[2229,3757,3531],{"class":2303},[2229,3759,2218],{"class":2242},[2229,3761,2256],{"class":2242},[2229,3763,3470],{"class":2259},[2229,3765,2263],{"class":2242},[2229,3767,2250],{"class":2242},[2229,3769,3087],{"class":2246},[2229,3771,2218],{"class":2242},[2229,3773,3774],{"class":2242}," {};\n",[2229,3776,3777],{"class":2231,"line":2276},[2229,3778,2273],{"emptyLinePlaceholder":2272},[2229,3780,3781,3784,3787,3789,3791,3793,3795,3797,3799,3801,3803,3805,3807,3809,3811,3814,3816,3818,3820,3822],{"class":2231,"line":2293},[2229,3782,3783],{"class":2235},"await",[2229,3785,3786],{"class":2929}," $fetch",[2229,3788,2463],{"class":2246},[2229,3790,2263],{"class":2242},[2229,3792,3565],{"class":2259},[2229,3794,2263],{"class":2242},[2229,3796,2490],{"class":2242},[2229,3798,2243],{"class":2242},[2229,3800,3544],{"class":2303},[2229,3802,2218],{"class":2242},[2229,3804,2256],{"class":2242},[2229,3806,3551],{"class":2259},[2229,3808,2263],{"class":2242},[2229,3810,2490],{"class":2242},[2229,3812,3813],{"class":2246}," body",[2229,3815,2490],{"class":2242},[2229,3817,3719],{"class":2246},[2229,3819,2964],{"class":2242},[2229,3821,2452],{"class":2246},[2229,3823,2266],{"class":2242},[2136,3825,3827],{"id":3826},"the-signed-bypass","The signed bypass",[2141,3829,3830,3831,3834],{},"A request with a valid bypass in the ",[2157,3832,3833],{},"x-laioutr-bypass-bot-protection"," header never reaches your verifier. Scripts, load tests and the Orchestr tab of the Nuxt DevTools use it. The value is signed with the project secret key, bound to one action, and valid for five minutes either side of its timestamp:",[2220,3836,3839],{"className":2222,"code":3837,"filename":3838,"language":2224,"meta":2225,"style":2225},"import { BOT_PROTECTION_BYPASS_HEADER, signBotProtectionBypass } from '@laioutr-core/frontend-core/bot-protection';\n\nconst bypass = await signBotProtectionBypass(process.env.LAIOUTR_PROJECT_SECRET_KEY!, 'newsletter/subscribe', Math.floor(Date.now() / 1000));\n\nawait fetch('https://staging.acme-outdoor.com/api/orchestr/action/newsletter/subscribe', {\n  method: 'POST',\n  headers: { 'content-type': 'application/json', [BOT_PROTECTION_BYPASS_HEADER]: bypass },\n  body: JSON.stringify({ input: { email: 'smoke-test@acme-outdoor.com' }, clientEnv: {} }),\n});\n","scripts/subscribe-smoke-test.ts",[2157,3840,3841,3868,3872,3941,3945,3965,3980,4022,4076],{"__ignoreMap":2225},[2229,3842,3843,3845,3847,3850,3852,3855,3857,3859,3861,3864,3866],{"class":2231,"line":2232},[2229,3844,2236],{"class":2235},[2229,3846,2243],{"class":2242},[2229,3848,3849],{"class":2246}," BOT_PROTECTION_BYPASS_HEADER",[2229,3851,2490],{"class":2242},[2229,3853,3854],{"class":2246}," signBotProtectionBypass",[2229,3856,2250],{"class":2242},[2229,3858,2253],{"class":2235},[2229,3860,2256],{"class":2242},[2229,3862,3863],{"class":2259},"@laioutr-core/frontend-core/bot-protection",[2229,3865,2263],{"class":2242},[2229,3867,2266],{"class":2242},[2229,3869,3870],{"class":2231,"line":2269},[2229,3871,2273],{"emptyLinePlaceholder":2272},[2229,3873,3874,3876,3879,3881,3883,3885,3888,3890,3893,3895,3898,3901,3903,3906,3908,3910,3913,3915,3918,3921,3923,3926,3929,3932,3936,3939],{"class":2231,"line":2276},[2229,3875,3701],{"class":2282},[2229,3877,3878],{"class":2246}," bypass ",[2229,3880,3133],{"class":2242},[2229,3882,3744],{"class":2235},[2229,3884,3854],{"class":2929},[2229,3886,3887],{"class":2246},"(process",[2229,3889,2207],{"class":2242},[2229,3891,3892],{"class":2246},"env",[2229,3894,2207],{"class":2242},[2229,3896,3897],{"class":2246},"LAIOUTR_PROJECT_SECRET_KEY",[2229,3899,3900],{"class":2242},"!,",[2229,3902,2256],{"class":2242},[2229,3904,3905],{"class":2259},"newsletter/subscribe",[2229,3907,2263],{"class":2242},[2229,3909,2490],{"class":2242},[2229,3911,3912],{"class":2246}," Math",[2229,3914,2207],{"class":2242},[2229,3916,3917],{"class":2929},"floor",[2229,3919,3920],{"class":2246},"(Date",[2229,3922,2207],{"class":2242},[2229,3924,3925],{"class":2929},"now",[2229,3927,3928],{"class":2246},"() ",[2229,3930,3931],{"class":2242},"/",[2229,3933,3935],{"class":3934},"sbssI"," 1000",[2229,3937,3938],{"class":2246},"))",[2229,3940,2266],{"class":2242},[2229,3942,3943],{"class":2231,"line":2293},[2229,3944,2273],{"emptyLinePlaceholder":2272},[2229,3946,3947,3949,3952,3954,3956,3959,3961,3963],{"class":2231,"line":2300},[2229,3948,3783],{"class":2235},[2229,3950,3951],{"class":2929}," fetch",[2229,3953,2463],{"class":2246},[2229,3955,2263],{"class":2242},[2229,3957,3958],{"class":2259},"https://staging.acme-outdoor.com/api/orchestr/action/newsletter/subscribe",[2229,3960,2263],{"class":2242},[2229,3962,2490],{"class":2242},[2229,3964,2290],{"class":2242},[2229,3966,3967,3969,3971,3973,3975,3977],{"class":2231,"line":2314},[2229,3968,2345],{"class":2303},[2229,3970,2218],{"class":2242},[2229,3972,2256],{"class":2242},[2229,3974,3551],{"class":2259},[2229,3976,2263],{"class":2242},[2229,3978,3979],{"class":2242},",\n",[2229,3981,3982,3985,3987,3989,3991,3994,3996,3998,4000,4003,4005,4007,4009,4012,4015,4017,4019],{"class":2231,"line":2320},[2229,3983,3984],{"class":2303},"  headers",[2229,3986,2218],{"class":2242},[2229,3988,2243],{"class":2242},[2229,3990,2256],{"class":2242},[2229,3992,3993],{"class":2303},"content-type",[2229,3995,2263],{"class":2242},[2229,3997,2218],{"class":2242},[2229,3999,2256],{"class":2242},[2229,4001,4002],{"class":2259},"application/json",[2229,4004,2263],{"class":2242},[2229,4006,2490],{"class":2242},[2229,4008,3526],{"class":2303},[2229,4010,4011],{"class":2246},"BOT_PROTECTION_BYPASS_HEADER",[2229,4013,4014],{"class":2303},"]",[2229,4016,2218],{"class":2242},[2229,4018,3878],{"class":2246},[2229,4020,4021],{"class":2242},"},\n",[2229,4023,4024,4027,4029,4032,4034,4037,4039,4041,4044,4046,4048,4051,4053,4055,4058,4060,4062,4065,4067,4070,4072,4074],{"class":2231,"line":2325},[2229,4025,4026],{"class":2303},"  body",[2229,4028,2218],{"class":2242},[2229,4030,4031],{"class":2246}," JSON",[2229,4033,2207],{"class":2242},[2229,4035,4036],{"class":2929},"stringify",[2229,4038,2463],{"class":2246},[2229,4040,3052],{"class":2242},[2229,4042,4043],{"class":2303}," input",[2229,4045,2218],{"class":2242},[2229,4047,2243],{"class":2242},[2229,4049,4050],{"class":2303}," email",[2229,4052,2218],{"class":2242},[2229,4054,2256],{"class":2242},[2229,4056,4057],{"class":2259},"smoke-test@acme-outdoor.com",[2229,4059,2263],{"class":2242},[2229,4061,3163],{"class":2242},[2229,4063,4064],{"class":2303}," clientEnv",[2229,4066,2218],{"class":2242},[2229,4068,4069],{"class":2242}," {}",[2229,4071,2250],{"class":2242},[2229,4073,2452],{"class":2246},[2229,4075,3979],{"class":2242},[2229,4077,4078,4080,4082],{"class":2231,"line":2342},[2229,4079,2964],{"class":2242},[2229,4081,2452],{"class":2246},[2229,4083,2266],{"class":2242},[2141,4085,4086],{},"A project without a secret key accepts no bypass. The header carries a credential, so keep it out of request-header logging and tracing.",[4088,4089,4090],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":2225,"searchDepth":2269,"depth":2269,"links":4092},[4093,4094,4095,4096,4097,4098,4099,4100,4101],{"id":2138,"depth":2269,"text":2139},{"id":2210,"depth":2269,"text":2211},{"id":2839,"depth":2269,"text":2840},{"id":3191,"depth":2269,"text":3192},{"id":3342,"depth":2269,"text":3343},{"id":3362,"depth":2269,"text":3363},{"id":3448,"depth":2269,"text":3449},{"id":3459,"depth":2269,"text":3460},{"id":3826,"depth":2269,"text":3827},"How to build a Laioutr app that protects selected actions with a bot-protection or captcha service by implementing the BotProtectionAdapter and BotProtectionVerifier contracts from frontend-core.","md",{},{"title":744,"description":4102},{"loc":745,"lastmod":4107,"changefreq":4108,"priority":2232},"2026-09-15","monthly","-OCegwVlp6_VfRfWc0Ma0hcS-vG3QOK1XZmCeZ_jgNk",[4111,4113],{"title":740,"path":741,"stem":742,"description":4112,"children":-1},"How to create and register block definitions for Laioutr Studio.",{"title":748,"path":749,"stem":750,"description":4114,"children":-1},"Conventions and quality guidelines for developing Laioutr apps. Use these standards to keep app code consistent, maintainable, and aligned with the Laioutr ecosystem.",1789568562079]