1<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- "AR" from the wordmark; regenerate with scripts/gen-favicon.py --><link rel="icon" href="/favicon.ico" sizes="48x48"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><title>Blog | Ar-range</title><meta name="description" content="Notes on 3D product visualisation, configurators and the plumbing behind them, from the team building Ar-range."><link rel="canonical" href="https://ar-range.app/blog-posts/"><meta property="og:type" content="website"><meta property="og:site_name" content="Ar-range"><meta property="og:title" content="Blog"><meta property="og:description" content="Notes on 3D product visualisation, configurators and the plumbing behind them, from the team building Ar-range."><meta property="og:url" content="https://ar-range.app/blog-posts/"><meta property="og:image" content="https://ar-range.app/img/og/home.jpg"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Blog"><meta name="twitter:description" content="Notes on 3D product visualisation, configurators and the plumbing behind them, from the team building Ar-range."><meta name="twitter:image" content="https://ar-range.app/img/og/home.jpg">
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://ar-range.app/#organization","name":"Ar-range","url":"https://ar-range.app","logo":"https://ar-range.app/img/logo-ar-range.png","description":"Ar-range renders every variant of every product, then powers the configurators, AI search and showroom checkout that turn all that choice into finished orders. One catalog, every channel.","email":"[email protected]","sameAs":["https://www.linkedin.com/company/arrange-augmented-reality/","https://www.facebook.com/arrangeConfigurators/","https://www.youtube.com/@ar-range6288","https://clutch.co/profile/ar-range","https://www.g2.com/products/big-banda-sp-z-o-o/reviews"]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://ar-range.app/#website","name":"Ar-range","url":"https://ar-range.app","publisher":{"@id":"https://ar-range.app/#organization"},"inLanguage":"en"}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://ar-range.app/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://ar-range.app/blog-posts/"}]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://ar-range.app/blog-posts/#blog","name":"Ar-range blog","url":"https://ar-range.app/blog-posts/","publisher":{"@id":"https://ar-range.app/#organization"},"inLanguage":"en","hasPart":[{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/diagnosing/#collection","name":"Diagnosing","url":"https://ar-range.app/blog-posts/category/diagnosing/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/comparisons/#collection","name":"Comparisons","url":"https://ar-range.app/blog-posts/category/comparisons/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/replacing/#collection","name":"Replacing","url":"https://ar-range.app/blog-posts/category/replacing/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/costs/#collection","name":"Costs","url":"https://ar-range.app/blog-posts/category/costs/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/implementing/#collection","name":"Implementing","url":"https://ar-range.app/blog-posts/category/implementing/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/configurators/#collection","name":"Configurators","url":"https://ar-range.app/blog-posts/category/configurators/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/visuals/#collection","name":"Visuals","url":"https://ar-range.app/blog-posts/category/visuals/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/showroom/#collection","name":"Showroom","url":"https://ar-range.app/blog-posts/category/showroom/"},{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/ai/#collection","name":"AI","url":"https://ar-range.app/blog-posts/category/ai/"}],"mainEntity":{"@type":"ItemList","name":"Categories, in the order a buyer asks","itemListOrder":"https://schema.org/ItemListOrderAscending","numberOfItems":9,"itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/diagnosing/#collection","name":"Diagnosing: Is my configurator working?","url":"https://ar-range.app/blog-posts/category/diagnosing/"}},{"@type":"ListItem","position":2,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/comparisons/#collection","name":"Comparisons: Which vendor?","url":"https://ar-range.app/blog-posts/category/comparisons/"}},{"@type":"ListItem","position":3,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/replacing/#collection","name":"Replacing: How do we switch without losing a quarter?","url":"https://ar-range.app/blog-posts/category/replacing/"}},{"@type":"ListItem","position":4,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/costs/#collection","name":"Costs: What does it actually cost?","url":"https://ar-range.app/blog-posts/category/costs/"}},{"@type":"ListItem","position":5,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/implementing/#collection","name":"Implementing: What will it take from us?","url":"https://ar-range.app/blog-posts/category/implementing/"}},{"@type":"ListItem","position":6,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/configurators/#collection","name":"Configurators: What kinds are there, and which fits how you sell?","url":"https://ar-range.app/blog-posts/category/configurators/"}},{"@type":"ListItem","position":7,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/visuals/#collection","name":"Visuals: Product images at catalogue scale","url":"https://ar-range.app/blog-posts/category/visuals/"}},{"@type":"ListItem","position":8,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/showroom/#collection","name":"Showroom: Selling in the room, not only online","url":"https://ar-range.app/blog-posts/category/showroom/"}},{"@type":"ListItem","position":9,"item":{"@type":"CollectionPage","@id":"https://ar-range.app/blog-posts/category/ai/#collection","name":"AI: Where does AI actually help me sell?","url":"https://ar-range.app/blog-posts/category/ai/"}}]},"blogPost":[{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/two-bed-brands-and-the-ready-made-configurator/#blogposting","headline":"Two bed brands bought the ready-made configurator. Both came back. Here is what 'ready' meant.","url":"https://ar-range.app/blog-posts/two-bed-brands-and-the-ready-made-configurator/","datePublished":"2026-09-17"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/can-customers-find-a-fabric-by-describing-it/#blogposting","headline":"Can customers find a fabric by describing it? What it takes to answer yes.","url":"https://ar-range.app/blog-posts/can-customers-find-a-fabric-by-describing-it/","datePublished":"2026-09-16"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/why-your-3d-configurator-didnt-increase-sales/#blogposting","headline":"You bought a 3D configurator. Your sales went down. Here's what actually happened.","url":"https://ar-range.app/blog-posts/why-your-3d-configurator-didnt-increase-sales/","datePublished":"2026-09-15"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/does-3d-preview-actually-reduce-returns/#blogposting","headline":"Does previewing a product in 3D actually reduce returns?","url":"https://ar-range.app/blog-posts/does-3d-preview-actually-reduce-returns/","datePublished":"2026-09-12"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/difference-between-a-3d-configurator-and-variant-visuals/#blogposting","headline":"3D configurator or variant visuals: which one does your catalogue need?","url":"https://ar-range.app/blog-posts/difference-between-a-3d-configurator-and-variant-visuals/","datePublished":"2026-09-11"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/dimensions-on-every-variant/#blogposting","headline":"From dimensions only your upholsterer knows to dimensions on every variant","url":"https://ar-range.app/blog-posts/dimensions-on-every-variant/","datePublished":"2026-09-08"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/from-simple-to-complex-why-simplest-software-solutions-are-the-best-basis-for-complex-configurators/#blogposting","headline":"Why the simplest software is the best base for a complex configurator","url":"https://ar-range.app/blog-posts/from-simple-to-complex-why-simplest-software-solutions-are-the-best-basis-for-complex-configurators/","datePublished":"2026-02-21"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/when-a-furniture-product-configurator-helps-and-when-it-doesnt/#blogposting","headline":"When a furniture product configurator helps, and when it does not","url":"https://ar-range.app/blog-posts/when-a-furniture-product-configurator-helps-and-when-it-doesnt/","datePublished":"2026-01-26"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/can-i-build-a-product-configurator-without-having-3d-models-ad21b/#blogposting","headline":"Can I build a product configurator without having 3D models?","url":"https://ar-range.app/blog-posts/can-i-build-a-product-configurator-without-having-3d-models-ad21b/","datePublished":"2026-01-24"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-the-downside-of-shopify/#blogposting","headline":"What is the downside of Shopify?","url":"https://ar-range.app/blog-posts/what-is-the-downside-of-shopify/","datePublished":"2026-01-11"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-much-does-the-cheapest-vendor-cost/#blogposting","headline":"How much does the cheapest vendor cost?","url":"https://ar-range.app/blog-posts/how-much-does-the-cheapest-vendor-cost/","datePublished":"2026-01-05"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-to-use-digital-transformation-to-sell-the-idea-of-product-instead-of-planks-and-fabric/#blogposting","headline":"Selling the idea of a product, instead of planks and fabric","url":"https://ar-range.app/blog-posts/how-to-use-digital-transformation-to-sell-the-idea-of-product-instead-of-planks-and-fabric/","datePublished":"2025-12-09"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/post-visit-follow-ups-that-dont-feel-like-spam/#blogposting","headline":"Post-visit follow-ups that don't feel like spam","url":"https://ar-range.app/blog-posts/post-visit-follow-ups-that-dont-feel-like-spam/","datePublished":"2025-11-10"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/why-lifestyle-images-outperform-silo-shots-for-configurable-goods/#blogposting","headline":"Do lifestyle images outperform studio shots for customizable furniture?","url":"https://ar-range.app/blog-posts/why-lifestyle-images-outperform-silo-shots-for-configurable-goods/","datePublished":"2025-11-03"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-augmented-reality/#blogposting","headline":"What is Augmented Reality and when NOT to use it?","url":"https://ar-range.app/blog-posts/what-is-augmented-reality/","datePublished":"2025-10-31"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-a-parametric-configurator/#blogposting","headline":"What is a parametric configurator?","url":"https://ar-range.app/blog-posts/what-is-a-parametric-configurator/","datePublished":"2025-10-30"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/360s-that-load-fast-how-many-images-per-360-do-you-need/#blogposting","headline":"360s that load fast: how many images per 360 do you need?","url":"https://ar-range.app/blog-posts/360s-that-load-fast-how-many-images-per-360-do-you-need/","datePublished":"2025-10-28"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-to-choose-a-right-configurator-for-a-furniture-brand/#blogposting","headline":"How to choose the right configurator for a furniture brand","url":"https://ar-range.app/blog-posts/how-to-choose-a-right-configurator-for-a-furniture-brand/","datePublished":"2025-10-27"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/showroom-continuity-opening-the-customers-saved-config-in-store/#blogposting","headline":"Showroom continuity: opening the customer's saved configuration in store","url":"https://ar-range.app/blog-posts/showroom-continuity-opening-the-customers-saved-config-in-store/","datePublished":"2025-10-23"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-many-images-per-pdp/#blogposting","headline":"How many images per PDP?","url":"https://ar-range.app/blog-posts/how-many-images-per-pdp/","datePublished":"2025-10-22"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/furniture-emotion-and-conversion-inside-the-customers-mind-in-2025/#blogposting","headline":"Furniture, emotion and conversion: what goes on in the buyer's mind","url":"https://ar-range.app/blog-posts/furniture-emotion-and-conversion-inside-the-customers-mind-in-2025/","datePublished":"2025-10-15"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-much-does-a-product-configurator-cost-in-2025/#blogposting","headline":"How much does a product configurator cost?","url":"https://ar-range.app/blog-posts/how-much-does-a-product-configurator-cost-in-2025/","datePublished":"2025-10-06"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/photoreal-closeups-that-sell-fabrics/#blogposting","headline":"Photoreal close-ups that sell fabrics","url":"https://ar-range.app/blog-posts/photoreal-closeups-that-sell-fabrics/","datePublished":"2025-09-29"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-parametric-design/#blogposting","headline":"What is parametric design?","url":"https://ar-range.app/blog-posts/what-is-parametric-design/","datePublished":"2025-09-08"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/selling-modular-sofas-with-3d-sofa-configurators/#blogposting","headline":"Selling modular sofas with a 3D sofa configurator","url":"https://ar-range.app/blog-posts/selling-modular-sofas-with-3d-sofa-configurators/","datePublished":"2025-08-29"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/5-ways-for-your-furniture-renders-to-stand-out-using-automation-and-ai/#blogposting","headline":"5 ways to make furniture renders stand out with automation and AI","url":"https://ar-range.app/blog-posts/5-ways-for-your-furniture-renders-to-stand-out-using-automation-and-ai/","datePublished":"2025-08-26"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/parametric-configurator-explained-faster-quotes-smarter-sales-fewer-errors/#blogposting","headline":"Parametric configurator explained: faster quotes, fewer errors","url":"https://ar-range.app/blog-posts/parametric-configurator-explained-faster-quotes-smarter-sales-fewer-errors/","datePublished":"2025-08-0
17"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-a-home-theater-configurator---and-how-can-it-improve-your-sales/#blogposting","headline":"What Is a home theater configurator - and how can it improve your sales?","url":"https://ar-range.app/blog-posts/what-is-a-home-theater-configurator---and-how-can-it-improve-your-sales/","datePublished":"2025-08-04"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/sofa-configurator-the-ultimate-2025-guide/#blogposting","headline":"Sofa configurator: the complete guide for furniture brands","url":"https://ar-range.app/blog-posts/sofa-configurator-the-ultimate-2025-guide/","datePublished":"2025-07-24"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/why-b2b-habits-fail-in-b2c-furniture-buying-a-vision-not-a-sku-0f0c8/#blogposting","headline":"Why B2B habits fail in B2C furniture: buying a vision not a SKU","url":"https://ar-range.app/blog-posts/why-b2b-habits-fail-in-b2c-furniture-buying-a-vision-not-a-sku-0f0c8/","datePublished":"2025-04-30"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/ar-range-at-meble-polska-2025---new-technologies-in-the-furniture-industry/#blogposting","headline":"Ar-range at Meble Polska 2025: new technologies in the furniture industry","url":"https://ar-range.app/blog-posts/ar-range-at-meble-polska-2025---new-technologies-in-the-furniture-industry/","datePublished":"2025-03-03"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/3d-furniture-configurator/#blogposting","headline":"3D furniture configurator: what it actually is","url":"https://ar-range.app/blog-posts/3d-furniture-configurator/","datePublished":"2025-01-26"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/five-faces-of-product-customization/#blogposting","headline":"The five kinds of product customization, and which one you sell","url":"https://ar-range.app/blog-posts/five-faces-of-product-customization/","datePublished":"2024-11-29"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/custom-furniture-on-the-rise-the-role-of-shelving-system-configurators/#blogposting","headline":"Shelving system configurators: selling made-to-measure storage online","url":"https://ar-range.app/blog-posts/custom-furniture-on-the-rise-the-role-of-shelving-system-configurators/","datePublished":"2024-11-20"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/transform-your-personalized-bike-sales-with-a-bike-configurator/#blogposting","headline":"Transform your personalized bike sales with a bike configurator","url":"https://ar-range.app/blog-posts/transform-your-personalized-bike-sales-with-a-bike-configurator/","datePublished":"2024-11-07"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-to-quickly-provide-customers-with-multiple-offering-options-for-a-custom-made-product/#blogposting","headline":"How to give a customer several options for a custom piece, fast","url":"https://ar-range.app/blog-posts/how-to-quickly-provide-customers-with-multiple-offering-options-for-a-custom-made-product/","datePublished":"2024-10-10"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/sale-of-custom-made-furniture-with-a-parametric-configurator/#blogposting","headline":"Selling custom-made furniture with a parametric configurator","url":"https://ar-range.app/blog-posts/sale-of-custom-made-furniture-with-a-parametric-configurator/","datePublished":"2024-10-09"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/easily-visualize-all-kinds-of-modular-products/#blogposting","headline":"How to show every version of a modular product","url":"https://ar-range.app/blog-posts/easily-visualize-all-kinds-of-modular-products/","datePublished":"2024-09-09"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/prequalify-leads-by-instantly-providing-a-ballpark-estimate-online/#blogposting","headline":"Prequalify leads with an instant ballpark estimate online","url":"https://ar-range.app/blog-posts/prequalify-leads-by-instantly-providing-a-ballpark-estimate-online/","datePublished":"2024-08-13"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/integrating-of-a-product-configurator-with-an-online-store/#blogposting","headline":"Integrating a product configurator with an online store","url":"https://ar-range.app/blog-posts/integrating-of-a-product-configurator-with-an-online-store/","datePublished":"2024-0
17-25"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/4-examples-of-using-3d-configurators-in-online-sales/#blogposting","headline":"4 examples of 3D configurators in online sales","url":"https://ar-range.app/blog-posts/4-examples-of-using-3d-configurators-in-online-sales/","datePublished":"2024-03-04"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/the-power-of-web-product-3d-customizers-across-industries/#blogposting","headline":"The Power of Web Product 3D Customizers Across Industries","url":"https://ar-range.app/blog-posts/the-power-of-web-product-3d-customizers-across-industries/","datePublished":"2023-11-07"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-is-a-product-configurator-how-it-works-types-examples-benefits/#blogposting","headline":"What is a product configurator? How it works, the types, and examples","url":"https://ar-range.app/blog-posts/what-is-a-product-configurator-how-it-works-types-examples-benefits/","datePublished":"2023-10-18"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/what-to-expect-when-implementing-augmented-reality-ar-or-product-configurator/#blogposting","headline":"What to expect when you implement a product configurator","url":"https://ar-range.app/blog-posts/what-to-expect-when-implementing-augmented-reality-ar-or-product-configurator/","datePublished":"2023-08-08"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/is-augmented-reality-good-for-your-industry-and-business/#blogposting","headline":"Is Augmented reality good for your industry and business?","url":"https://ar-range.app/blog-posts/is-augmented-reality-good-for-your-industry-and-business/","datePublished":"2023-05-29"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/in-2023-stay-up-to-date-with-competitive-methods-for-furniture-ecommerce/#blogposting","headline":"In 2023 stay up-to-date with competitive methods for furniture ecommerce","url":"https://ar-range.app/blog-posts/in-2023-stay-up-to-date-with-competitive-methods-for-furniture-ecommerce/","datePublished":"2023-02-02"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/engage-customers-and-deliver-an-unmatched-shopping-experience-with-ar/#blogposting","headline":"Engage customers and deliver an unmatched shopping experience with AR","url":"https://ar-range.app/blog-posts/engage-customers-and-deliver-an-unmatched-shopping-experience-with-ar/","datePublished":"2023-02-01"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/product-configurator-in-wordpress/#blogposting","headline":"Product configurator in WordPress: what works and what to expect","url":"https://ar-range.app/blog-posts/product-configurator-in-wordpress/","datePublished":"2023-01-30"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/3d-configurator-for-the-sale-of-custom-products/#blogposting","headline":"3D configurator for the sale of custom products","url":"https://ar-range.app/blog-posts/3d-configurator-for-the-sale-of-custom-products/","datePublished":"2023-01-08"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/use-of-augmented-reality-in-furniture-e-commerce/#blogposting","headline":"Use of augmented reality in furniture e-commerce: where it sells and where nobody taps it","url":"https://ar-range.app/blog-posts/use-of-augmented-reality-in-furniture-e-commerce/","datePublished":"2022-12-05"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/how-to-use-augmented-reality-as-an-advantage-in-selling-your-products/#blogposting","headline":"How to use augmented reality as an advantage in selling your products?","url":"https://ar-range.app/blog-posts/how-to-use-augmented-reality-as-an-advantage-in-selling-your-products/","datePublished":"2022-10-05"},{"@type":"BlogPosting","@id":"https://ar-range.app/blog-posts/best-tools-to-boost-online-furniture-sales/#blogposting","headline":"The tools that sell furniture online, and which to buy first","url":"https://ar-range.app/blog-posts/best-tools-to-boost-online-furniture-sales/","datePublished":"2022-10-02"}]}</script>
1<!-- Per-page locale alternates: absolute, self-referential, and emitted ONLY where a 2 real twin exists (see src/i18n/alternates.ts). --><link rel="preload" href="/fonts/dm-sans-400-latin.woff2" as="font" type="font/woff2" crossorigin fetchpriority="high"><link rel="preload" href="/fonts/playfair-display-600-latin.woff2" as="font" type="font/woff2" crossorigin fetchpriority="high"><link rel="preload" href="/img/fonts/amp.woff2?v=4" as="font" type="font/woff2" crossorigin><style>/* Generated by scripts/gen-fonts.py â do not edit by hand. 3 Self-hosted so the LCP text does not wait on fonts.googleapis.com and 4 fonts.gstatic.com; Base.astro inlines this file into <head>. */ 5@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(/fonts/dm-sans-400-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 6@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(/fonts/dm-sans-400-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 7@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(/fonts/dm-sans-500-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 8@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(/fonts/dm-sans-500-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 9@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 600; font-display: swap; src: url(/fonts/dm-sans-600-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 10@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 600; font-display: swap; src: url(/fonts/dm-sans-600-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 11@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(/fonts/dm-sans-700-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 12@font-face { font-family: 'DM Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(/fonts/dm-sans-700-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 13@font-face { font-family: 'Playfair Display'; font-style: italic; font-weight: 500; font-display: swap; src: url(/fonts/playfair-display-500-italic-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 14@font-face { font-family: 'Playfair Display'; font-style: italic; font-weight: 500; font-display: swap; src: url(/fonts/playfair-display-500-italic-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 15@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 500; font-display: swap; src: url(/fonts/playfair-display-500-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1D
15BF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 16@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 500; font-display: swap; src: url(/fonts/playfair-display-500-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 17@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 600; font-display: swap; src: url(/fonts/playfair-display-600-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 18@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 600; font-display: swap; src: url(/fonts/playfair-display-600-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 19@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 700; font-display: swap; src: url(/fonts/playfair-display-700-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 20@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 700; font-display: swap; src: url(/fonts/playfair-display-700-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 21</style>
21<script> 22 (function () { 23 var m = /[?&]freeze=([\d.]+)/.exec(location.search); 24 if (!m) return; 25 var at = parseFloat(m[1]) * 1000; 26 function park() { 27 if (!document.getAnimations) return; 28 document.getAnimations().forEach(function (a) { 29 try { a.currentTime = at; a.pause(); } catch (e) {} 30 }); 31 } 32 addEventListener('load', function () { park(); setTimeout(park, 120); }); 33 })(); 34 </script>
34<style>@font-face{font-family:'AmpOnly';src:url('/img/fonts/amp.woff2?v=4') format('woff2');unicode-range:U+0026;font-weight:100 900;font-display:swap;}</style><link rel="preconnect" href="https://www.googletagmanager.com"><link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
34<script> 35 window.dataLayer = window.dataLayer || []; 36 function gtag() { dataLayer.push(arguments); } 37 gtag('consent', 'default', { 38 ad_personalization: 'denied', 39 ad_storage: 'denied', 40 ad_user_data: 'denied', 41 analytics_storage: 'denied', 42 functionality_storage: 'denied', 43 personalization_storage: 'denied', 44 security_storage: 'granted', 45 wait_for_update: 500, 46 }); 47 gtag('set', 'ads_data_redaction', true); 48 gtag('set', 'url_passthrough', false); 49 50 window.ccApplyConsent = function (cats) { 51 var a = cats.indexOf('analytics') > -1 ? 'granted' : 'denied'; 52 var m = cats.indexOf('marketing') > -1 ? 'granted' : 'denied'; 53 gtag('consent', 'update', { 54 analytics_storage: a, 55 personalization_storage: a, 56 functionality_storage: 'granted', 57 ad_storage: m, 58 ad_user_data: m, 59 ad_personalization: m, 60 }); 61 // Clarity has its own consent signal and, for EEA/UK/CH visitors, sets no cookie 62 // until it gets one. On a later "denied" it deletes its cookies and ends the 63 // session, which is the behaviour the banner promises. 64 if (typeof window.clarity === 'function') { 65 window.clarity('consentv2', { ad_Storage: m, analytics_Storage: a }); 66 } 67 }; 68 69 // Returning visitor: restore consent from the cookie immediately, before gtag.js 70 // has a chance to send the page_view as denied. The banner itself is wired up 71 // later, on DOMContentLoaded (see below for why it cannot run any earlier). 72 (function () { 73 try { 74 var raw = document.cookie.split('; ').find(function (c) { return c.indexOf('cc_cookie=') === 0; }); 75 if (!raw) return; 76 var stored = JSON.parse(decodeURIComponent(raw.slice(10))); 77 if (stored && Array.isArray(stored.categories)) window.ccApplyConsent(stored.categories); 78 } catch (e) {} 79 })(); 80 </script>
vendor: 63 bytes, line 80
80<script async src="https://www.googletagmanager.com/gtag/js?id=
80G-13MV50VXFC
vendor: 11 bytes, line 80
80"></script>
80<script>(function(){const GA_ID = "G-13MV50VXFC"; 81 82 gtag('js', new Date()); 83 gtag('config', GA_ID); 84 })();</script>
84<script type="text/plain" data-category="analytics"> 85 (function (c, l, a, r, i, t, y) { 86 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 87 t = l.createElement(r); t.async = 1; t.src = 'https://www.clarity.ms/tag/' + i; 88 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 89 })(window, document, 'clarity', 'script', 'yis5y15i8d'); 90 (function () { 91 var cats = []; 92 try { cats = CookieConsent.getUserPreferences().acceptedCategories || []; } catch (e) {} 93 window.clarity('consentv2', { 94 ad_Storage: cats.indexOf('marketing') > -1 ? 'granted' : 'denied', 95 analytics_Storage: 'granted', 96 }); 97 })(); 98</script>
98<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.css" media="print" onload="this.media='all'">
98<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.umd.js"></script>
98<script> 99 document.addEventListener('DOMContentLoaded', function () { 100 function sync() { window.ccApplyConsent(CookieConsent.getUserPreferences().acceptedCategories); } 101 CookieConsent.run({ 102 onConsent: sync, 103 onChange: sync, 104 cookie: { name: 'cc_cookie', domain: 'ar-range.app', expiresAfterDays: 182 }, 105 categories: { 106 necessary: { enabled: true, readOnly: true }, 107 analytics: {}, 108 marketing: {}, 109 }, 110 language: { 111 default: 'en', 112 translations: { 113 en: { 114 consentModal: { 115 title: 'We use cookies', 116 description: 117 'We use cookies to measure traffic and to show relevant content. You can change your choice at any time.', 118 acceptAllBtn: 'Accept all', 119 acceptNecessaryBtn: 'Reject all', 120 showPreferencesBtn: 'Manage preferences', 121 }, 122 preferencesModal: { 123 title: 'Cookie preferences', 124 acceptAllBtn: 'Accept all', 125 acceptNecessaryBtn: 'Reject all', 126 savePreferencesBtn: 'Save my choices', 127 closeIconLabel: 'Close', 128 sections: [ 129 { 130 title: 'Strictly necessary', 131 description: 'Required for the site to work. Cannot be switched off.', 132 linkedCategory: 'necessary', 133 }, 134 { 135 title: 'Analytics', 136 description: 137 'Google Analytics, so we can see which pages are useful, and Microsoft Clarity, which records how pages are used (heatmaps and session replays). Text you type into forms is never recorded.', 138 linkedCategory: 'analytics', 139 }, 140 { 141 title: 'Marketing', 142 description: 'Advertising and remarketing tags.', 143 linkedCategory: 'marketing', 144 }, 145 ], 146 }, 147 }, 148 }, 149 }, 150 }); 151 }); 152 </script>
152<style>:root{--accent:#2d5a3d;--accent-strong:#234a31;--accent-light:#63c48b;--accent-mid:#4a8c63;--terracotta:#a85a34;--terracotta-line:#c67d4a;--preset-blue:#3a4a7a;--preset-plum:#6a3a5a;--ink:#15161c;--text:#3d3d5c;--text-alt:#4a4a5e;--muted:#8a8578;--muted-2:#9a9789;--on-dark:#f4f2ee;--on-dark-muted:#a7a5b3;--on-dark-faint:#8f8d9b;--on-dark-line:#ffffff1a;--on-dark-line-2:#ffffff2e;--paper:#faf9f7;--white:#fff;--cream:#f6f4ef;--cream-2:#f2eee4;--cream-3:#f1ede4;--line:#ece8e0;--line-2:#e7e1d4;--line-3:#e3ddd0;--dot-red:#e0685a;--dot-amber:#e3b04b;--dot-green:#5fb865;--live:#34c759} 153[hidden]{display:none!important}*{box-sizing:border-box}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;background:var(--paper);margin:0}h1,h2,h3,h4{font-family:var(--font-display,"Playfair Display",serif)!important;font-weight:var(--heading-weight,600)!important;letter-spacing:var(--heading-tracking,-.01em)!important}.doc-head h1,.doc-body h2,.doc-body h3,.doc-body h4,.dx-head h1,.dx-group-head h2,.dx-card h3,.dx-side h2{font-family:var(--font-body,system-ui,sans-serif)!important;letter-spacing:-.011em!important;font-weight:650!important}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-strong)}html,body{max-width:100%;overflow-x:clip}[data-tone=plain]+[data-tone=plain]{border-top:1px solid var(--line)}[data-tone=plain]+[data-tone=plain][data-join]{border-top:0}.mk{border-radius:16px}.mk img,.mk video{width:100%;display:block}.mk-browser,.mk-frame{border:1px solid var(--line-3);background:var(--mk-fill,var(--white));overflow:hidden;box-shadow:0 30px 70px #1a1a2e24}.mk-browser img,.mk-browser video,.mk-frame img,.mk-frame video{background:var(--mk-fill,var(--cream))}.mk-shadow{filter:drop-shadow(0 30px 50px #1a1a2e29)}.mk-shadow img,.mk-shadow video,.mk-plain img,.mk-plain video{border-radius:16px}.mk-blend{filter:none}.mk-blend img,.mk-blend video{mix-blend-mode:multiply;border-radius:0}.mk-bar{background:var(--cream-3);border-bottom:1px solid var(--line-2);align-items:center;gap:14px;padding:11px 15px;display:none}.mk-browser .mk-bar{display:flex}.mk-dots{flex-shrink:0;gap:7px;display:flex}.mk-dots span{border-radius:50%;width:11px;height:11px}.mk-dots span:first-child{background:var(--dot-red)}.mk-dots span:nth-child(2){background:var(--dot-amber)}.mk-dots span:nth-child(3){background:var(--dot-green)}.mk-url{background:var(--white);border:1px solid var(--line-2);color:#9a9587;white-space:nowrap;border-radius:7px;flex:1;align-items:center;gap:8px;min-width:0;padding:6px 12px;font-family:ui-monospace,Menlo,monospace;font-size:11.5px;display:flex;overflow:hidden}.mk-url>span{background:color-mix(in oklab,var(--accent),var(--white) 30%);border-radius:50%;flex-shrink:0;width:9px;height:9px}.mk-ctl{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}.mk-ctl-g{background:var(--white);border:1px solid var(--line-2);border-radius:999px;align-items:center;gap:4px;padding:3px;display:inline-flex;box-shadow:0 4px 14px #1a1a2e14}.mk-ctl-b{cursor:pointer;color:var(--muted);background:0 0;border:0;border-radius:999px;padding:5px 11px;font:700 11.5px system-ui,sans-serif}.mk-ctl-b:hover{background:var(--cream-2);color:var(--ink)}.mk-ctl-b.is-on{background:var(--accent);color:var(--white)}.mk-ctl-s{border:1px solid var(--line-2);cursor:pointer;border-radius:50%;width:20px;height:20px;padding:0}.mk-ctl-s.is-on{outline:2px solid var(--accent);outline-offset:1px}img,svg,video{max-width:100%;height:auto}h1,h2,h3,h4{text-wrap:balance}.feat-row,.feat-row-rev{flex-direction:row;align-items:center;gap:64px;display:flex}.feat-row>*,.feat-row-rev>*{flex:1 1 0;min-width:0}.faq-item>summary::-webkit-details-marker{display:none}.faq-item>summary{list-style:none}.faq-item .faq-chev{color:var(--muted-2);flex-shrink:0;justify-content:center;align-items:center;transition:transform .22s;display:inline-flex}.faq-item[open] .faq-chev{color:var(--ink);transform:rotate(180deg)}.feat-row-c{flex-direction:row;align-items:center;gap:56px;display:flex}.feat-row-c>*{min-width:0}.feat-row-c .fr-txt{flex:1 1 0;max-width:430px}.feat-row-c .fr-vis{flex:1.35 1 0}.feat-row-c.is-rev .fr-vis{order:-1}@media (width<=1320px){.nav-tagline{display:none!important}}@media (width<=1150px){.nav-links,.nav-tagline{display:none!important}.site-nav{background:var(--paper)!important}.site-nav .site-nav-bar{padding:10px 18px!important}.nav-cta{display:none!important}}.nav-item{align-items:center;display:inline-flex;position:relative}.nav-caret{opacity:.55;align-items:center;margin-left:5px;transition:transform .2s,opacity .2s;display:inline-flex}.nav-item:hover .nav-caret,.nav-item:focus-within .nav-caret{opacity:.9;transform:rotate(180deg)}.nav-menu{background:var(--white);border:1px solid var(--line);opacity:0;visibility:hidden;z-index:60;border-radius:14px;min-width:236px;margin-top:12px;padding:8px;transition:opacity .18s,transform .18s;position:absolute;top:100%;left:50%;transform:translate(-50%,6px);box-shadow:0 20px 44px #1a1a2e21}.nav-menu:before{content:"";height:14px;position:absolute;top:-14px;left:0;right:0}.nav-item:hover .nav-menu,.nav-item:focus-within .nav-menu{opacity:1;visibility:visible;transform:translate(-50%)}.nav-menu a{color:var(--text);white-space:nowrap;border-radius:9px;padding:9px 12px;font-size:14px;font-weight:600;display:block}.nav-menu a small{color:var(--muted-2);margin-top:1px;font-size:11.5px;font-weight:400;display:block}.nav-menu a:hover{background:var(--cream);color:var(--accent)}.nav-burger{cursor:pointer;border-radius:9px;flex-direction:column;justify-content:center;gap:5px;width:38px;height:38px;padding:8px;display:none}.nav-burger span{background:var(--ink);border-radius:2px;width:100%;height:2px;transition:transform .2s,opacity .2s;display:block}#nav-toggle{opacity:0;pointer-events:none;position:absolute}.nav-mobile{background:var(--paper);border-bottom:1px solid var(--line);flex-direction:column;padding:8px 24px 22px;display:none;box-shadow:0 24px 44px #1a1a2e1f}.nav-mobile a{color:var(--text);border-radius:9px;padding:11px 8px;font-size:15.5px;font-weight:500;display:block}.nav-mobile a:hover{background:var(--cream-2);color:var(--accent)}.nav-mobile .grp{letter-spacing:1.5px;text-transform:uppercase;color:var(--muted-2);padding:16px 8px 4px;font-size:11px;font-weight:700}.nav-mobile .grp:first-child{padding-top:4px}@media (width<=1150px){.nav-burger{display:flex}.nav-actions{margin-left:auto}#nav-toggle:checked~.nav-mobile{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 66px);display:flex;overflow-y:auto}#nav-toggle:checked~* .nav-burger span:first-child{transform:translateY(7px)rotate(45deg)}#nav-toggle:checked~* .nav-burger span:nth-child(2){opacity:0}
153#nav-toggle:checked~* .nav-burger span:nth-child(3){transform:translateY(-7px)rotate(-45deg)}}@media (width>=1151px){.nav-mobile,.nav-burger{display:none!important}}@media (width<=900px){[style*=grid-template-columns]{grid-template-columns:minmax(0,1fr)!important}.feat-row{flex-direction:column;align-items:stretch;gap:28px}.feat-row-rev{flex-direction:column-reverse;align-items:stretch;gap:28px}.feat-row>*,.feat-row-rev>*{flex:none;width:100%}.feat-row-c{flex-direction:column;align-items:stretch;gap:28px}.feat-row-c>*{flex:none;width:100%}.feat-row-c.is-rev .fr-vis{order:0}[style*=height\:250px]{aspect-ratio:540/250;height:auto!important}.svg-mock{aspect-ratio:540/200!important}.sec-wrap{padding-left:24px!important;padding-right:24px!important}[style*=gap\:56px],[style*=gap\:48px]{gap:36px!important}}@media (width<=760px){.cards-grid{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:14px;margin:0 -24px;padding:16px 24px 32px;scroll-padding-left:24px;overflow-x:auto;display:flex!important}.cards-grid::-webkit-scrollbar{display:none}.cards-grid>*{scroll-snap-align:start;flex:0 0 84%;box-shadow:0 8px 16px #1a1a2e1a!important}}@media (width<=640px){.hero-results{scroll-snap-type:x mandatory;scrollbar-width:none;gap:10px;overflow-x:auto}.hero-results::-webkit-scrollbar{display:none}.hero-results>*{scroll-snap-align:start;box-shadow:none!important;flex:0 0 43%!important}}@media (width<=600px){.stat-band{flex-wrap:wrap}.stat-band>*{box-sizing:border-box;margin-bottom:8px;border-left:none!important;flex:0 0 50%!important;padding:10px 16px!important}.stat-band>:nth-child(2n){border-left:1px solid #ffffff1f!important}.stat-cols{flex-wrap:wrap}.stat-cols>*{box-sizing:border-box;margin-bottom:14px;border-left:none!important;flex:0 0 50%!important;padding:10px 16px!important}.stat-cols>:nth-child(2n){border-left:1px solid #ddd6c6!important}}@media (width<=760px){.render-grid{grid-template-columns:1fr 1fr!important;gap:1px!important;display:grid!important}}@media (width<=640px){.chip-scroll{gap:10px!important}.chip-scroll>*{padding:9px 15px!important;font-size:12.5px!important}}@media (width<=560px){.contact-card{text-align:center!important;flex-direction:column!important;gap:14px!important}.contact-card>span:nth-child(2){flex:none!important}.contact-card .btn-primary{text-align:center;width:100%}}@media (width<=640px){.sec-wrap:not([style*=clamp\(]){padding-top:40px!important;padding-bottom:40px!important}h1{font-size:38px!important;line-height:1.08!important}h2{font-size:31px!important;line-height:1.12!important}h3{font-size:26px!important}.hero-wrap{--hero-pt:40px!important;--hero-px:24px!important;--hero-pb:48px!important}.demo{padding-top:56px!important;padding-bottom:56px!important}}.demo{max-width:1180px;margin:0 auto;padding:100px 40px}.ctrl-label{letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin-bottom:13px;font-size:11px;font-weight:700}.swatch-row{flex-wrap:wrap;gap:12px;display:flex}.la-row{flex-wrap:wrap;gap:40px;display:flex}.pill-row{flex-wrap:wrap;gap:10px;display:flex}.demo-capline{display:none}@media (width>=901px){.demo-grid{grid-template-columns:.78fr 1.22fr;align-items:center;column-gap:48px;display:grid}.demo-card{display:contents}.demo-intro{grid-area:1/1}.demo-fabric{grid-area:2/1;margin-bottom:24px}.demo-pills{grid-area:3/1}.demo-render{border:1px solid var(--line-3);cursor:zoom-in;background:#f5f3ee;border-radius:20px;grid-area:1/2/span 3;align-self:center;min-height:580px;position:relative;overflow:hidden;box-shadow:0 30px 70px #1a1a2e1f}.demo-render #vvImg{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}.demo-note{color:var(--muted);grid-area:4/2;max-width:520px;margin:16px 2px 0;font-size:13px;line-height:1.5}.demo-intro p{max-width:460px}}@media (width<=900px){.demo-card{background:var(--white);border-radius:18px;margin-top:8px;display:block;overflow:hidden;box-shadow:0 30px 70px #1a1a2e1a}.demo-intro{text-align:center;max-width:560px;margin:0 auto 30px}.demo-fabric{padding:26px 26px 4px}.demo-render{background:var(--white);cursor:zoom-in;position:relative}.demo-render #vvImg{width:100%;height:auto;display:block}.demo-badge,.demo-capbox{display:none!important}.demo-capline{text-align:center;color:var(--muted);margin:2px 0 0;font-family:ui-monospace,Menlo,monospace;font-size:12px;display:block}.demo-pills{padding:14px 26px 28px}.la-row{flex-wrap:nowrap;gap:16px}.la-group{flex:1;min-width:0}.ctrl-label{text-align:center}.swatch-row{justify-content:center}.pill-row{justify-content:center;gap:8px}.ctrl-pill{padding:7px 13px!important;font-size:12.5px!important}.demo-note{text-align:center;max-width:520px;color:var(--muted);margin:22px auto 0;font-size:13px;line-height:1.5}}:root{--accent:#2d5a3d}.btn-primary{background:var(--accent);color:var(--white);border-radius:10px;padding:15px 28px;font-size:15.5px;font-weight:700;transition:background .18s;display:inline-block}.btn-primary:hover{background:color-mix(in oklab, var(--accent), #000 16%);color:var(--white)}.btn-primary.sm{border-radius:9px;padding:11px 20px;font-size:14px}
153.link-underline{color:var(--ink);border-bottom:2px solid var(--terracotta-line);padding-bottom:2px;font-size:15px;font-weight:600}.link-underline:hover{color:var(--ink)}#cases .link-underline,#contact .link-underline,.on-dark .link-underline,[data-nav-dark] .link-underline{color:var(--cream)}#cases .link-underline:hover,#contact .link-underline:hover,.on-dark .link-underline:hover,[data-nav-dark] .link-underline:hover{color:#fff}.nav-links>a:hover,.nav-item>a:hover{color:var(--accent)}a{transition:color .15s}.count-row{--rh:1.25em;align-items:center;line-height:1;display:inline-flex}.count-reel{height:var(--rh);vertical-align:middle;display:inline-block;overflow:hidden}.count-col{will-change:transform;transition:transform 1.25s cubic-bezier(.16,.9,.24,1);display:block;transform:translateY(0)}.count-col>span{height:var(--rh);justify-content:center;align-items:center;line-height:1;display:flex}.count-fixed{height:var(--rh);align-items:center;display:inline-flex}.rt-scene *,.ai-hero *,.vv-scene *{animation-play-state:paused}.rt-scene.in-view *,.ai-hero.in-view *,.vv-scene.in-view *{animation-play-state:running}a.is-current{opacity:.45;pointer-events:none;cursor:default}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.site-nav a.is-current,.nav-mobile a.is-current{opacity:.45;pointer-events:none;cursor:default}.site-nav .nav-item>a[data-in-section]{color:var(--accent)!important}.site-nav.on-dark .nav-item>a[data-in-section]{color:color-mix(in oklab,var(--accent),#fff 55%)!important}.site-nav .nav-menu a.is-current{opacity:1;background:color-mix(in oklab,var(--accent),transparent 92%);color:var(--accent)}.site-nav .nav-menu a.is-current small{color:color-mix(in oklab,var(--accent),transparent 45%)}.site-nav.on-dark .nav-menu a.is-current{background:#ffffff0f}.site-nav{transition:background .3s,border-color .3s}.site-nav .nav-links a,.site-nav .lang-switch,.site-nav .site-nav-bar>a,.site-nav .nav-tagline,.site-nav .site-nav-bar>a svg{transition:color .3s,background-color .3s}.site-nav.on-dark{background:#101116b8!important;border-bottom-color:#ffffff1a!important}.site-nav.on-dark .nav-links a,.site-nav.on-dark .lang-switch{color:#d9d8e2!important}.site-nav.on-dark .site-nav-bar>a,.site-nav.on-dark .site-nav-bar>a svg{color:var(--white)!important}.site-nav.on-dark .nav-tagline{color:#9c9aa8!important}.site-nav.on-dark span.nav-tagline[aria-hidden]{background:#ffffff38!important}.site-nav.on-dark .nav-burger span{background:#f0eff4!important}.site-nav .nav-menu{transition:background .3s,border-color .3s}.site-nav.on-dark .nav-menu{background:#14161cf5!important;border-color:#ffffff1f!important;box-shadow:0 20px 44px #00000073!important}.site-nav.on-dark .nav-menu a{color:#e7e6ee!important}.site-nav.on-dark .nav-menu a small{color:#9c9aa8!important}.site-nav.on-dark .nav-menu a:hover{color:var(--white)!important;background:#ffffff14!important}.cta-section[data-astro-cid-zvmdtend]{background:var(--paper);padding:clamp(40px,6vw,88px) 40px}.cta-card[data-astro-cid-zvmdtend]{background:var(--ink);max-width:1100px;color:var(--on-dark);border-radius:22px;grid-template-columns:1.1fr .9fr;align-items:center;gap:clamp(28px,4vw,48px);margin:0 auto;padding:clamp(28px,4vw,52px);display:grid;box-shadow:0 40px 90px -40px #15161c80}.cta-card[data-astro-cid-zvmdtend] h2[data-astro-cid-zvmdtend]{font-family:var(--font-display), serif;letter-spacing:-.01em;color:var(--white);max-width:15em;margin:0;font-size:clamp(26px,3.2vw,40px);font-weight:500;line-height:1.1}.cta-card[data-astro-cid-zvmdtend] p[data-astro-cid-zvmdtend]{color:var(--on-dark-muted);max-width:34em;margin:14px 0 0;font-size:15.5px;line-height:1.65}.cta-proof[data-astro-cid-zvmdtend]{grid-template-columns:repeat(3,1fr);gap:26px;margin-top:26px;display:grid}.cta-pf[data-astro-cid-zvmdtend]{color:var(--on-dark-faint);font-size:12.5px;line-height:1.4}.cta-pf[data-astro-cid-zvmdtend] b[data-astro-cid-zvmdtend]{color:var(--white);font-family:var(--font-display), serif;margin-bottom:2px;font-size:22px;font-weight:700;display:block}.cta-logos[data-astro-cid-zvmdtend]{grid-template-columns:repeat(4,1fr);place-items:center start;gap:20px;margin-top:26px;
153display:grid}.cta-logos[data-astro-cid-zvmdtend] img[data-astro-cid-zvmdtend]{object-fit:contain;opacity:.7;filter:brightness(.9)invert()saturate(0);width:auto;max-width:110px;height:24px}.cta-form[data-astro-cid-zvmdtend]{background:var(--white);border-radius:16px;padding:26px}.cta-or[data-astro-cid-zvmdtend]{border-top:1px solid var(--line-2);color:var(--muted);text-align:center;margin:14px 0 0;padding-top:14px;font-size:13.5px}.cta-or[data-astro-cid-zvmdtend] a[data-astro-cid-zvmdtend]{color:var(--ink);border-bottom:1px solid var(--line);font-weight:650;text-decoration:none}.cta-or[data-astro-cid-zvmdtend] a[data-astro-cid-zvmdtend]:hover{border-bottom-color:var(--accent)}.cta-form[data-astro-cid-zvmdtend] label[data-astro-cid-zvmdtend]{color:var(--ink);margin:0 0 6px;font-size:13px;font-weight:600;display:block}.cta-trap[data-astro-cid-zvmdtend]{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.cta-url[data-astro-cid-zvmdtend]{border:1px solid var(--line-2);background:var(--paper);border-radius:9px;align-items:center;margin-bottom:16px;display:flex}.cta-url[data-astro-cid-zvmdtend]:focus-within{border-color:var(--accent);background:var(--white)}.cta-url-pre[data-astro-cid-zvmdtend]{color:var(--muted);user-select:none;padding:11px 0 11px 13px;font:15px system-ui,sans-serif}.cta-form[data-astro-cid-zvmdtend] .cta-url[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend]{background:0 0;border:0;min-width:0;margin:0;padding-left:1px}.cta-form[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend][aria-invalid=true],.cta-url[data-astro-cid-zvmdtend]:has(input[aria-invalid=true]){border-color:#c2412d}.cta-form[data-astro-cid-zvmdtend] .cta-url[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend][aria-invalid=true]{border:0}.cta-form[data-astro-cid-zvmdtend] .cta-check[data-astro-cid-zvmdtend]:has(input[aria-invalid=true]) span[data-astro-cid-zvmdtend]{color:#c2412d}.cta-form[data-astro-cid-zvmdtend] .cta-check[data-astro-cid-zvmdtend]{color:var(--muted);cursor:pointer;align-items:flex-start;gap:10px;margin:0 0 12px;font-size:12px;font-weight:400;line-height:1.45;display:flex}.cta-form[data-astro-cid-zvmdtend] .cta-check[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend][type=checkbox]{width:auto;accent-color:var(--accent);flex:none;margin:2px 0 0}.cta-form[data-astro-cid-zvmdtend] .cta-check[data-astro-cid-zvmdtend] a[data-astro-cid-zvmdtend]{color:var(--ink);text-decoration:underline}.cta-form[data-astro-cid-zvmdtend] .cta-check[data-astro-cid-zvmdtend]+.cta-submit[data-astro-cid-zvmdtend]{margin-top:6px}.cta-form[data-astro-cid-zvmdtend] textarea[data-astro-cid-zvmdtend]{box-sizing:border-box;border:1px solid var(--line-2);width:100%;color:var(--ink);background:var(--paper);resize:vertical;border-radius:9px;margin-bottom:16px;padding:11px 13px;font:15px system-ui,sans-serif}.cta-form[data-astro-cid-zvmdtend] textarea[data-astro-cid-zvmdtend]:focus{border-color:var(--accent);background:var(--white);outline:none}.cta-form[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend]{box-sizing:border-box;border:1px solid var(--line-2);width:100%;color:var(--ink);background:var(--paper);border-radius:9px;margin-bottom:16px;padding:11px 13px;font:15px system-ui,sans-serif}.cta-form[data-astro-cid-zvmdtend] input[data-astro-cid-zvmdtend]:focus{border-color:var(--accent);background:var(--white);outline:none}.cta-submit[data-astro-cid-zvmdtend]{box-sizing:border-box;text-align:center;background:var(--ink);width:100%;color:var(--white);cursor:pointer;border:0;border-radius:10px;padding:13px;font:700 14.5px system-ui,sans-serif;text-decoration:none;transition:background .15s;display:block}.cta-submit[data-astro-cid-zvmdtend]:hover{background:var(--accent-strong)}.cta-submit[data-astro-cid-zvmdtend]:disabled{opacity:.6;cursor:default}.cta-flip[data-astro-cid-zvmdtend]{perspective:1600px}.cta-flip-inner[data-astro-cid-zvmdtend]{transform-style:preserve-3d;transition:transform .9s cubic-bezier(.2,.75,.25,1);display:grid}.cta-flip-inner[data-astro-cid-zvmdtend]>.cta-face[data-astro-cid-zvmdtend]{backface-visibility:hidden;grid-area:1/1}.cta-back[data-astro-cid-zvmdtend]{text-align:center;background:#23242d;border:1px solid #ffffff1f;border-radius:16px;outline:none;flex-direction:column;justify-content:center;align-items:center;padding:26px;
153display:flex;transform:rotateY(180deg)}.cta-flip[data-astro-cid-zvmdtend].is-flipped .cta-flip-inner[data-astro-cid-zvmdtend]{transform:rotateY(180deg)}.cta-flip[data-astro-cid-zvmdtend].cta-no-anim .cta-flip-inner[data-astro-cid-zvmdtend]{transition:none}.cta-back-mark[data-astro-cid-zvmdtend]{color:var(--accent-light);margin-bottom:18px}.cta-back[data-astro-cid-zvmdtend] h3[data-astro-cid-zvmdtend]{font-family:var(--font-display), serif;color:var(--white);margin:0;font-size:clamp(30px,3.4vw,40px);font-weight:500;line-height:1.1}.cta-card[data-astro-cid-zvmdtend] .cta-back[data-astro-cid-zvmdtend] p[data-astro-cid-zvmdtend]{color:var(--on-dark-muted);max-width:24em;margin:12px 0 0;font-size:15.5px;line-height:1.6}@media (prefers-reduced-motion:reduce){.cta-flip-inner[data-astro-cid-zvmdtend]{transition:none;transform:none!important}.cta-flip-inner[data-astro-cid-zvmdtend]>.cta-face[data-astro-cid-zvmdtend]{backface-visibility:visible;transition:opacity .3s}.cta-back[data-astro-cid-zvmdtend]{opacity:0;transform:none}.cta-flip[data-astro-cid-zvmdtend].is-flipped .cta-back[data-astro-cid-zvmdtend]{opacity:1}.cta-flip[data-astro-cid-zvmdtend].is-flipped .cta-form[data-astro-cid-zvmdtend]{opacity:0}}.cta-form[data-astro-cid-zvmdtend] small[data-astro-cid-zvmdtend]{text-align:center;color:var(--muted);margin-top:12px;font-size:12px;line-height:1.5;display:block}.cta-form[data-astro-cid-zvmdtend] .cta-alt[data-astro-cid-zvmdtend]{border-top:1px solid var(--line);margin-top:10px;padding-top:10px}.cta-form[data-astro-cid-zvmdtend] .cta-alt[data-astro-cid-zvmdtend] a[data-astro-cid-zvmdtend]{color:var(--accent);font-weight:600}@media (width<=980px){.cta-card[data-astro-cid-zvmdtend]{grid-template-columns:1fr;gap:26px}.cta-copy[data-astro-cid-zvmdtend]{display:contents}.cta-card[data-astro-cid-zvmdtend] h2[data-astro-cid-zvmdtend]{order:1}.cta-card[data-astro-cid-zvmdtend] p[data-astro-cid-zvmdtend]{order:2}.cta-form[data-astro-cid-zvmdtend]{order:3}.cta-proof[data-astro-cid-zvmdtend]{order:4;margin-top:4px}.cta-logos[data-astro-cid-zvmdtend]{order:5;margin-top:2px}.cta-proof[data-astro-cid-zvmdtend]{gap:14px 18px}.cta-logos[data-astro-cid-zvmdtend]{gap:14px 16px}.cta-logos[data-astro-cid-zvmdtend] img[data-astro-cid-zvmdtend]{max-width:84px;height:18px}}@media (width<=820px){.cta-section[data-astro-cid-zvmdtend]{background:var(--ink);border-top:0;padding:34px 0 0}.cta-card[data-astro-cid-zvmdtend]{max-width:none;box-shadow:none;border-bottom:1px solid var(--on-dark-line-2,#ffffff1f);border-radius:0;padding:0 18px 34px}.cta-form[data-astro-cid-zvmdtend]{padding:18px}.cta-proof[data-astro-cid-zvmdtend]{gap:12px 16px}.cta-logos[data-astro-cid-zvmdtend]{gap:12px 14px}.cta-pf[data-astro-cid-zvmdtend] b[data-astro-cid-zvmdtend]{font-size:19px}.cta-pf[data-astro-cid-zvmdtend]{font-size:12.5px;line-height:1.35}.cta-logos[data-astro-cid-zvmdtend] img[data-astro-cid-zvmdtend]{max-width:78px;height:17px}}@media (width<=380px){.cta-proof[data-astro-cid-zvmdtend]{grid-template-columns:repeat(2,1fr)}.cta-logos[data-astro-cid-zvmdtend]{grid-template-columns:repeat(3,1fr)}}.cw[data-astro-cid-cmcn3ymj]{z-index:60;font-family:var(--font-body), system-ui, sans-serif;position:fixed;bottom:22px;right:22px}.cw-fab[data-astro-cid-cmcn3ymj]{cursor:pointer;background:var(--ink);color:var(--white);font:600 14px/1 var(--font-body), system-ui, sans-serif;border:0;border-radius:999px;align-items:center;gap:9px;padding:13px 18px;transition:transform .15s,background .15s;display:inline-flex;box-shadow:0 14px 34px -12px #1a1a2e8c}.cw-fab[data-astro-cid-cmcn3ymj]:hover{background:var(--accent-strong,#1f4530);transform:translateY(-1px)}.cw-panel[data-astro-cid-cmcn3ymj]{background:var(--white);border:1px solid var(--line-2);text-align:left;border-radius:14px;width:268px;padding:14px;position:absolute;bottom:58px;right:0;box-shadow:0 24px 60px -22px #1a1a2e73}.cw-lead[data-astro-cid-cmcn3ymj]{color:var(--text-alt);margin:0 0 12px;font-size:13px;line-height:1.5}.cw-opt[data-astro-cid-cmcn3ymj]{border:1px solid var(--line-2);background:var(--paper);border-radius:10px;flex-direction:column;gap:2px;margin-bottom:8px;padding:11px 12px;text-decoration:none;transition:border-color .15s,background .15s;display:flex}.cw-opt[data-astro-cid-cmcn3ymj]:last-child{margin-bottom:0}.cw-opt[data-astro-cid-cmcn3ymj]:hover{border-color:color-mix(in oklab, var(--accent), transparent 55%);background:var(--white)}.cw-opt-t[data-astro-cid-cmcn3ymj]{color:var(--ink);font-size:14.5px;font-weight:650}.cw-opt-s[data-astro-cid-cmcn3ymj]{color:var(--text-alt);font-size:12.5px}.cw[data-astro-cid-cmcn3ymj]{transition:opacity .25s,transform .25s}.cw[data-astro-cid-cmcn3ymj].cw-away{opacity:0;pointer-events:none;transform:translateY(10px)}@media (width<=640px){.cw[data-astro-cid-cmcn3ymj]{bottom:14px;right:14px}.cw-panel[data-astro-cid-cmcn3ymj]{width:min(268px,80vw)}}@media print{.cw[data-astro-cid-cmcn3ymj]{display:none}}a[data-astro-cid-jo6i4kqk].is-current{opacity:.4;pointer-events:none;cursor:default}.site-foot[data-astro-cid-jo6i4kqk]{background:var(--ink);color:var(--on-dark-muted);padding:60px 0 30px}.site-foot[data-astro-cid-jo6i4kqk] .foot-wrap[data-astro-cid-jo6i4kqk]{max-width:1180px;margin:0 auto;padding:0 40px}.site-foot[data-astro-cid-jo6i4kqk] .foot-brand[data-astro-cid-jo6i4kqk]{margin:0 0 44px}.site-foot[data-astro-cid-jo6i4kqk] .foot-grid[data-astro-cid-jo6i4kqk]{grid-template-columns:repeat(6,minmax(0,1fr));align-items:start;gap:32px 24px;display:grid}.site-foot[data-astro-cid-jo6i4kqk] .foot-more[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);margin-top:12px;font-size:12.5px;font-weight:600;text-decoration:none;display:inline-block}.site-foot[data-astro-cid-jo6i4kqk] .foot-more[data-astro-cid-jo6i4kqk]:hover{color:var(--white)}.site-foot[data-astro-cid-jo6i4kqk] .foot-brandline[data-astro-cid-jo6i4kqk]{align-items:center;gap:10px;text-decoration:none;display:inline-flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-div[data-astro-cid-jo6i4kqk]{background:var(--on-dark-line-2);width:1px;height:17px;
153display:inline-block}.site-foot[data-astro-cid-jo6i4kqk] .foot-tag[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);letter-spacing:.2px;white-space:nowrap;font-size:12.5px;font-weight:500}.site-foot[data-astro-cid-jo6i4kqk] .foot-blurb[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);margin:14px 0 0;font-size:13px;line-height:1.6}.site-foot[data-astro-cid-jo6i4kqk] .foot-social[data-astro-cid-jo6i4kqk]{flex-wrap:wrap;align-items:center;gap:16px;margin-top:20px;display:flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-social[data-astro-cid-jo6i4kqk]>a[data-astro-cid-jo6i4kqk]:not(.foot-clutch){color:var(--on-dark-muted);transition:color .15s;display:inline-flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-social[data-astro-cid-jo6i4kqk]>a[data-astro-cid-jo6i4kqk]:not(.foot-clutch):hover{color:var(--white)}.site-foot[data-astro-cid-jo6i4kqk] .foot-clutch[data-astro-cid-jo6i4kqk]{border:1px solid var(--on-dark-line-2);color:var(--on-dark-muted);border-radius:10px;grid-template-columns:auto auto;align-items:baseline;column-gap:8px;padding:6px 12px;font-size:12px;line-height:1.3;text-decoration:none;transition:border-color .15s;display:inline-grid}.site-foot[data-astro-cid-jo6i4kqk] .foot-clutch[data-astro-cid-jo6i4kqk]:hover{border-color:var(--on-dark-muted)}.site-foot[data-astro-cid-jo6i4kqk] .fc-top[data-astro-cid-jo6i4kqk]{color:var(--white);font-size:14px}.site-foot[data-astro-cid-jo6i4kqk] .fc-top[data-astro-cid-jo6i4kqk] b[data-astro-cid-jo6i4kqk]{font-weight:700}.site-foot[data-astro-cid-jo6i4kqk] .fc-star[data-astro-cid-jo6i4kqk]{color:#ef4335;margin-right:4px}.site-foot[data-astro-cid-jo6i4kqk] .fc-rev[data-astro-cid-jo6i4kqk]{color:var(--on-dark-muted)}.site-foot[data-astro-cid-jo6i4kqk] .fc-by[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);letter-spacing:.3px;grid-column:1/-1;font-size:11px}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] h4[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:inherit;text-decoration:none}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] h4[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--accent-light)}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] h4[data-astro-cid-jo6i4kqk]{color:var(--white);text-transform:uppercase;letter-spacing:.09em;margin:0 0 14px;font-size:12px;font-weight:700}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] ul[data-astro-cid-jo6i4kqk]{flex-direction:column;gap:15px;margin:0;padding:0;list-style:none;display:flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] li[data-astro-cid-jo6i4kqk]{text-wrap:balance;line-height:1.18}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:var(--on-dark-muted);font-size:13.5px;line-height:1.18;text-decoration:none;transition:color .15s}.site-foot[data-astro-cid-jo6i4kqk] .foot-col[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--white)}.site-foot[data-astro-cid-jo6i4kqk] .foot-base[data-astro-cid-jo6i4kqk]{border-top:1px solid var(--on-dark-line);color:var(--on-dark-faint);flex-wrap:wrap;justify-content:space-between;gap:16px;margin-top:44px;padding-top:22px;font-size:12.5px;display:flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-links[data-astro-cid-jo6i4kqk]{flex-wrap:wrap;gap:6px 16px;display:flex}.site-foot[data-astro-cid-jo6i4kqk] .foot-links[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);text-decoration:none;transition:color .15s}.site-foot[data-astro-cid-jo6i4kqk] .foot-links[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--white)}.site-foot[data-astro-cid-jo6i4kqk] .foot-contact[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:var(--on-dark-faint);text-decoration:none}.site-foot[data-astro-cid-jo6i4kqk] .foot-contact[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--white)}@media (width<=900px){.site-foot[data-astro-cid-jo6i4kqk]{padding:44px 0 26px}.site-foot[data-astro-cid-jo6i4kqk] .foot-grid[data-astro-cid-jo6i4kqk]{grid-template-columns:1fr 1fr;gap:28px 24px}.site-foot[data-astro-cid-jo6i4kqk] .foot-brand[data-astro-cid-jo6i4kqk]{margin-bottom:34px}.site-foot[data-astro-cid-jo6i4kqk] .foot-base[data-astro-cid-jo6i4kqk]{flex-direction:column;gap:8px}} 154.pcard[data-astro-cid-sbmovh4h]{background:var(--white);border:1px solid var(--line-2);border-radius:14px;flex-direction:column;height:100%;transition:border-color .16s,transform .16s,box-shadow .16s;display:flex;position:relative;overflow:hidden}.pcard[data-astro-cid-sbmovh4h]:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:0 14px 34px #1a1a2e12}.pcard-img[data-astro-cid-sbmovh4h]{aspect-ratio:16/9;background:var(--cream-2);position:relative;overflow:hidden}.pcard-img[data-astro-cid-sbmovh4h] img[data-astro-cid-sbmovh4h]{object-fit:cover;width:100%;height:100%;display:block}.pcard-badge[data-astro-cid-sbmovh4h]{color:var(--ink);letter-spacing:.05em;text-transform:uppercase;background:#ffffffed;border-radius:999px;padding:6px 10px;font:600 11.5px/1 system-ui,sans-serif;position:absolute;top:12px;left:12px}.pcard-body[data-astro-cid-sbmovh4h]{flex-direction:column;flex:1;padding:22px 24px 24px;display:flex}.pcard-meta[data-astro-cid-sbmovh4h]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.pcard-body[data-astro-cid-sbmovh4h] time[data-astro-cid-sbmovh4h]{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font:600 12px/1 system-ui,sans-serif}.pcard-cat[data-astro-cid-sbmovh4h]{z-index:2;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);font:700 12px/1 system-ui,sans-serif;text-decoration:none;position:relative}.pcard-cat[data-astro-cid-sbmovh4h]:hover{text-decoration:underline}.pcard-cat[data-astro-cid-sbmovh4h]+time[data-astro-cid-sbmovh4h]:before{content:"·";color:var(--muted);margin-right:8px}.pcard-body[data-astro-cid-sbmovh4h] h3[data-astro-cid-sbmovh4h]{font-family:var(--font-display);font-weight:var(--heading-weight);letter-spacing:var(--heading-tracking);text-wrap:balance;margin:11px 0 10px;font-size:20px;line-height:1.28}.pcard-title[data-astro-cid-sbmovh4h]{color:var(--ink);text-decoration:none}.pcard-title[data-astro-cid-sbmovh4h]:after{content:"";z-index:1;position:absolute;inset:0}.pcard-body[data-astro-cid-sbmovh4h] p[data-astro-cid-sbmovh4h]{color:var(--text-alt);-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;margin:0 0 18px;font-size:14.5px;line-height:1.6;
154display:-webkit-box;overflow:hidden}.pcard-foot[data-astro-cid-sbmovh4h]{color:var(--muted);justify-content:space-between;align-items:center;margin-top:auto;font:600 12.5px/1 system-ui,sans-serif;display:flex}.pcard-arrow[data-astro-cid-sbmovh4h]{color:var(--accent);font-size:15px;transition:transform .16s}.pcard[data-astro-cid-sbmovh4h]:hover .pcard-arrow[data-astro-cid-sbmovh4h]{transform:translate(4px)}@media (width>=860px){.pcard[data-astro-cid-sbmovh4h].is-wide{flex-direction:row;grid-column:1/-1}.pcard[data-astro-cid-sbmovh4h].is-wide .pcard-img[data-astro-cid-sbmovh4h]{aspect-ratio:auto;flex:0 0 52%}.pcard[data-astro-cid-sbmovh4h].is-wide .pcard-body[data-astro-cid-sbmovh4h]{justify-content:center;padding:40px 44px}.pcard[data-astro-cid-sbmovh4h].is-wide .pcard-body[data-astro-cid-sbmovh4h] h3[data-astro-cid-sbmovh4h]{font-size:28px}.pcard[data-astro-cid-sbmovh4h].is-wide .pcard-body[data-astro-cid-sbmovh4h] p[data-astro-cid-sbmovh4h]{-webkit-line-clamp:4;line-clamp:4;font-size:15.5px}} 155.bo[data-astro-cid-n6xwmutv]{max-width:1180px;margin:0 auto;padding:56px 40px 88px}.bo-head[data-astro-cid-n6xwmutv]{max-width:760px;margin-bottom:36px}.bo-eyebrow[data-astro-cid-n6xwmutv]{letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin:0 0 10px;font-size:12px;font-weight:700}.bo-head[data-astro-cid-n6xwmutv] h1[data-astro-cid-n6xwmutv]{font-family:var(--font-display);font-weight:var(--heading-weight);letter-spacing:var(--heading-tracking);text-wrap:balance;margin:0 0 14px;font-size:clamp(32px,4.6vw,48px);line-height:1.1}.bo-sub[data-astro-cid-n6xwmutv]{color:var(--text-alt);margin:0;font-size:17px;line-height:1.6}.bo-hero[data-astro-cid-n6xwmutv]{margin-bottom:40px;display:grid}.bo-chooser[data-astro-cid-n6xwmutv]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:64px;display:grid}.bo-chooser[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]{border:1px solid var(--line-2);color:inherit;background:var(--white);border-radius:12px;flex-direction:column;gap:4px;padding:14px 16px;text-decoration:none;transition:border-color .16s,transform .16s;display:flex}.bo-chooser[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]:hover{border-color:var(--accent);transform:translateY(-2px)}.bo-chooser[data-astro-cid-n6xwmutv] strong[data-astro-cid-n6xwmutv]{color:var(--ink);font-size:15px}.bo-chooser[data-astro-cid-n6xwmutv] span[data-astro-cid-n6xwmutv]{color:var(--muted);font-size:13px;line-height:1.4}.bo-block[data-astro-cid-n6xwmutv]{border-top:1px solid var(--line);padding:40px 0}.bo-block-head[data-astro-cid-n6xwmutv]{justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:24px;display:flex}.bo-block-head[data-astro-cid-n6xwmutv] h2[data-astro-cid-n6xwmutv]{font-family:var(--font-display);font-weight:var(--heading-weight);letter-spacing:var(--heading-tracking);margin:0 0 4px;font-size:30px}.bo-block-head[data-astro-cid-n6xwmutv] h2[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]{color:inherit;text-decoration:none}.bo-block-head[data-astro-cid-n6xwmutv] h2[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]:hover{color:var(--accent)}.bo-block-head[data-astro-cid-n6xwmutv] p[data-astro-cid-n6xwmutv]{color:var(--text-alt);margin:0;font-size:15px}.bo-more[data-astro-cid-n6xwmutv]{white-space:nowrap;color:var(--accent);font-size:14px;font-weight:600;text-decoration:none}.bo-more[data-astro-cid-n6xwmutv]:hover{text-decoration:underline}.bo-block-grid[data-astro-cid-n6xwmutv]{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:start;gap:28px;display:grid}.bo-list[data-astro-cid-n6xwmutv]{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.bo-list[data-astro-cid-n6xwmutv] li[data-astro-cid-n6xwmutv]+li[data-astro-cid-n6xwmutv]{border-top:1px solid var(--line)}.bo-list[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]{color:inherit;align-items:center;gap:16px;padding:14px 0;text-decoration:none;display:flex}.bo-list[data-astro-cid-n6xwmutv] img[data-astro-cid-n6xwmutv]{object-fit:cover;background:var(--cream-2);border-radius:8px;flex:none;width:96px;height:64px}.bo-list[data-astro-cid-n6xwmutv] span[data-astro-cid-n6xwmutv]{flex-direction:column;gap:4px;min-width:0;display:flex}.bo-list[data-astro-cid-n6xwmutv] strong[data-astro-cid-n6xwmutv]{color:var(--ink);font-size:16px;line-height:1.35}.bo-list[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]:hover strong[data-astro-cid-n6xwmutv]{color:var(--accent)}.bo-list[data-astro-cid-n6xwmutv] time[data-astro-cid-n6xwmutv]{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font:600 12px/1 system-ui,sans-serif}.bo-foot[data-astro-cid-n6xwmutv]{border-top:1px solid var(--line);padding-top:28px}.bo-foot[data-astro-cid-n6xwmutv] p[data-astro-cid-n6xwmutv]{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0 0 12px;font-size:12px;font-weight:700}.bo-foot[data-astro-cid-n6xwmutv] ul[data-astro-cid-n6xwmutv]{flex-wrap:wrap;gap:8px 22px;margin:0;padding:0;list-style:none;display:flex}.bo-foot[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]{color:var(--ink);font-weight:600;text-decoration:none}.bo-foot[data-astro-cid-n6xwmutv] a[data-astro-cid-n6xwmutv]:hover{color:var(--accent)}@media (width<=900px){.bo[data-astro-cid-n6xwmutv]{padding:40px 22px 64px}.bo-chooser[data-astro-cid-n6xwmutv]{grid-template-columns:repeat(2,minmax(0,1fr))}.bo-block-grid[data-astro-cid-n6xwmutv]{grid-template-columns:1fr}.bo-block-head[data-astro-cid-n6xwmutv]{flex-direction:column;align-items:flex-start;gap:8px}} 156</style></head><body style="--accent:#2d5a3d;
156--font-display:'AmpOnly','Playfair Display',serif;--font-body:'DM Sans',system-ui,sans-serif;--heading-weight:600;--heading-tracking:-0.01em;--body-leading:1.6;background:#faf9f7;color:#1a1a2e;font-family:var(--font-body);line-height:var(--body-leading);margin:0;"><nav class="site-nav" style="position:sticky;top:0;z-index:50;background:rgba(250,249,247,.82);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);"><div class="site-nav-bar" style="max-width:1180px;margin:0 auto;padding:15px 40px;display:flex;align-items:center;gap:26px;"><a href="/" data-selflink="keep" style="display:flex;align-items:center;gap:10px;color:var(--ink);"><svg viewBox="0 0 77 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="height:19px;width:auto;display:block;color:var(--ink);" aria-label="Ar-range"><path d="M5.79875 0.183594L6.19257 0.447533L11.0247 12.1778L10.6304 12.7665H10.1267L9.73244 12.5021L8.53555 9.59048H2.4891L1.29222 12.5021L0.897975 12.7665H0.394243L0 12.1778L4.83208 0.447533L5.22591 0.183594H5.79875ZM2.99825 8.32074H8.04931L5.52357 2.13233L2.99825 8.32074Z" fill="currentColor"></path><path d="M19.158 3.90164C19.158 3.14531 18.8974 2.53337 18.4736 2.11151C18.0496 1.68948 17.4345 1.43043 16.676 1.43043H13.5528V6.39657H16.676C17.4321 6.39657 18.0469 6.13289 18.4719 5.70508C18.8971 5.27699 19.158 4.65833 19.158 3.90164ZM20.4914 3.90164C20.4914 5.16414 20.0204 6.11518 19.2829 6.74418C18.7259 7.21915 18.037 7.49338 17.3283 7.59595L20.9798 12.7665H19.3832L15.8567 7.64299H13.5757V12.7665H12.2881V0.183594H16.676L16.85 0.186924C17.7215 0.219753 18.6005 0.500547 19.2821 1.07866C20.0194 1.7041 20.4914 2.64932 20.4914 3.90164Z" fill="currentColor"></path><path d="M61.7441 0C63.5295 0.000106249 65.015 0.625413 66.2412 1.8916C66.3975 2.05334 66.4006 2.30931 66.249 2.47559L65.9746 2.77637C65.8935 2.86527 65.7785 2.91636 65.6582 2.91602C65.5379 2.91559 65.4233 2.86384 65.3428 2.77441C64.493 1.83032 63.193 1.26965 61.7441 1.26953C58.9151 1.26953 56.8575 3.43912 56.8574 6.52344C56.8576 9.53792 58.9837 11.7764 61.7441 11.7764C63.4996 11.7762 64.6747 10.8034 65.1191 10.377V7.62207H60.7129C60.4776 7.62191 60.2871 7.43065 60.2871 7.19531V6.80176C60.2871 6.56642 60.4776 6.37516 60.7129 6.375H65.957C66.1925 6.375 66.3838 6.56632 66.3838 6.80176V10.7188C66.3838 10.8233 66.345 10.9248 66.2754 11.0029C65.1382 12.2792 63.4868 12.9999 61.7441 13C58.1901 13 55.547 10.1679 55.5469 6.5C55.547 2.80783 58.1912 0 61.7441 0ZM44.707 0.161133C44.8431 0.161283 44.9706 0.226919 45.0508 0.336914L52.2959 10.2891V0.611328C52.2959 0.375906 52.4863 0.184597 52.7217 0.18457H53.1572C53.3924 0.184881 53.583 0.376082 53.583 0.611328V12.3408C53.5829 12.576 53.3923 12.7673 53.1572 12.7676H52.6992C52.5625 12.7676 52.4337 12.7016 52.3535 12.5908L45.0869 2.55176V12.3184C45.0867 12.5535 44.8963 12.7439 44.6611 12.7441H44.249C44.0137 12.7441 43.8225 12.5536 43.8223 12.3184V0.587891L43.8242 0.543945C43.8461 0.329035 44.0283 0.161133 44.249 0.161133H44.707ZM23.2949 0.183594C23.5304 0.183594 23.7217 0.374913 23.7217 0.610352V6.39648H26.8447C27.6008 6.39645 28.2157 6.13286 28.6406 5.70508C29.0656 5.27708 29.3261 4.65873 29.3262 3.90234C29.3261 3.14601 29.0664 2.53319 28.6426 2.11133C28.2186 1.68934 27.6032 1.4307 26.8447 1.43066H26.5928C26.3574 1.43063 26.1661 1.23926 26.166 1.00391V0.610352C26.166 0.374932 26.3574 0.183624 26.5928 0.183594H26.8447C27.7721 0.183621 28.7233 0.462638 29.4502 1.0791C30.1876 1.70455 30.6601 2.65003 30.6602 3.90234C30.66 5.16462 30.1886 6.11521 29.4512 6.74414C28.8948 7.21853 28.2068 7.49285 27.499 7.5957L30.6963 12.0938C30.7884 12.2237 30.8005 12.3946 30.7275 12.5361C30.6544 12.6776 30.5079 12.7665 30.3486 12.7666H29.7988C29.659 12.7666 29.5279 12.6979 29.4482 12.583L26.0254 7.64355H23.7217V12.3408C23.7215 12.5761 23.5302 12.7666 23.2949 12.7666H22.8604C22.6251 12.7666 22.4338 12.5761 22.4336 12.3408V0.610352L22.4355 0.566406C22.4574 0.351496 22.6397 0.183594 22.8604 0.183594H23.2949ZM37.2178 0.183594C37.3597 0.183649 37.4931 0.254309 37.5723 0.37207C37.6514 0.490014 37.6661 0.640042 37.6123 0.771484L34.5098 8.34375H40.6992L40.7627 8.34863C40.9092 8.37079 41.0353 8.46852 41.0928 8.6084L42.5586 12.1787C42.6125 12.3101 42.5976 12.4601 42.5186 12.5781C42.4394 12.696 42.3061 12.7666 42.1641 12.7666H41.6611C41.4883 12.7666 41.3323 12.6618 41.2666 12.502L40.0693 9.59082H34.0234L32.8262 12.502C32.7605 12.6618 32.6045 12.7666 32.4316 12.7666H31.9512C31.8092 12.7666 31.6769 12.6959 31.5977 12.5781C31.5186 12.4602 31.5029 12.3101 31.5566 12.1787L36.3652 0.448242L36.3945 0.391602C36.4706 0.264447 36.6085 0.18371 36.7598 0.183594H37.2178ZM75.8496 0.183594C76.0849 0.183752 76.2754 0.375011 76.2754 0.610352V1.00391C76.2753 1.23918 76.0849 1.43051 75.8496 1.43066H69.6572V5.67773H75.7119C75.9473 5.67773 76.1386 5.86915 76.1387 6.10449V6.49805C76.1387 6.73349 75.9474 6.9248 75.7119 6.9248H69.6572V11.5195H75.8262C76.0616 11.5195 76.2529 11.7109 76.2529 11.9463V12.3408C76.2527 12.5761 76.0615 12.7666 75.8262 12.7666H68.7959C68.5608 12.7664 68.3703 12.576 68.3701 12.3408V0.610352L68.3721 0.566406C68.394 0.35162 68.5754 0.183763
15668.7959 0.183594H75.8496Z" fill="#D9B589"></path></svg><span class="nav-tagline" aria-hidden="true" style="width:1px;height:20px;background:#d8d2c4;display:inline-block;"></span><span class="nav-tagline" style="font-size:12.5px;font-weight:500;color:var(--muted);letter-spacing:.2px;white-space:nowrap;">the visual selling layer</span></a><div class="nav-links" style="margin-left:auto;display:flex;align-items:center;gap:26px;font-size:14.5px;font-weight:500;white-space:nowrap;"><span class="nav-item"><a href="/products/" style="color:#5b5b74;">Products<span class="nav-caret" aria-hidden="true"><svg width="11" height="7" viewBox="0 0 13 8"><path d="M1.4 1.4 6.5 6.5l5.1-5.1" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a><div class="nav-menu"><a href="/products/variant-visuals/">Variant Visuals<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/products/item/variant-visuals">Every variant, prerendered</small></a><a href="/products/content-hub/">Content Hub<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/products/item/content-hub">The catalog engine</small></a><a href="/products/modular-configurator/">Modular Configurator<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/products/item/modular-configurator">a 3D product configurator</small></a><a href="/products/ai-search/">AI Search<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/products/item/ai-search">Find it in plain words</small></a><a href="/products/fabric-digitization/">Fabric Digitization<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/products/item/fabric-digitization">Scanned once, rendered everywhere</small></a></div></span><span class="nav-item"><a href="/solutions/" style="color:#5b5b74;">Solutions<span class="nav-caret" aria-hidden="true"><svg width="11" height="7" viewBox="0 0 13 8"><path d="M1.4 1.4 6.5 6.5l5.1-5.1" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a><div class="nav-menu"><a href="/solutions/visualize-every-variant/">Visualize Every Variant<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/solutions/item/visualize-every-variant">The e-commerce floor</small></a><a href="/solutions/showroom-suite/">Showroom Suite<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/solutions/item/showroom-suite">The dealer's full deck</small></a><a href="/solutions/selling-internationally/">Selling Internationally<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/solutions/item/selling-internationally">Localized product pages</small></a><a href="/solutions/help-buyers-find-the-right-product/">Help Buyers Find the Right Product<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/solutions/item/help-buyers-find-the-right-product">Search that understands</small></a><a href="/solutions/sell-to-new-markets/">Sell To New Markets<small data-edit="Menu tagline & order" data-ksfield="Tagline" data-editurl="/keystatic/collection/solutions/item/sell-to-new-markets">One catalog, every country</small></a></div></span><div class="nav-item"><a href="/industries/" style="color:#5b5b74;">Built for<span class="nav-caret" aria-hidden="true"><svg width="11" height="7" viewBox="0 0 13 8"><path d="M1.4 1.4 6.5 6.5l5.1-5.1" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a><div class="nav-menu"><a href="/industries/modular-sofas/">Modular Sofas<small>Sectionals that sell</small></a><a href="/industries/upholstered-beds/">Upholstered Beds<small>Every headboard, every fabric</small></a><a href="/industries/shelving-systems/">Shelving Systems<small>Configurable by definition</small></a><a href="/industries/outdoor-kitchens/">Outdoor Kitchens<small>Configured on the floor, ordered in the room</small></a><a href="/industries/wardrobes-and-cabinetry/">Wardrobes & Cabinetry<small>Visual CPQ for made-to-measure</small></a><a href="/industries/home-cinema-seating/">Home Cinema Seating<small>Recliners, rows and rooms</small></a><a href="/industries/bicycles/">Bicycles & Sports Equipment<small>Builds, quotes and finishes</small></a><a href="/industries/bathroom-cabinets/">
156Bathroom Cabinets & Vanities<small>Made to the room, priced on the spot</small></a><a href="/industries/print-personalisation/">Print Personalisation & Packaging<small>Their artwork on your product, checked before it prints</small></a></div></div><a href="/case-studies/" style="color:#5b5b74;">Case studies</a><a href="/blog-posts/" aria-current="page" class="is-current" style="color:#5b5b74;">Blog</a><div class="nav-item"><a href="/meet-us/" style="color:#5b5b74;">Company<span class="nav-caret" aria-hidden="true"><svg width="11" height="7" viewBox="0 0 13 8"><path d="M1.4 1.4 6.5 6.5l5.1-5.1" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a><div class="nav-menu"><a href="/#who">Who it's for<small>Who gets the most out of this</small></a><a href="/meet-us/">Meet us<small>The people behind Ar-range</small></a></div></div></div><div class="nav-actions" style="display:flex;align-items:center;gap:14px;"><a href="#contact" class="btn-primary sm nav-cta">Talk to our team</a><label class="nav-burger" for="nav-toggle" aria-label="Open menu"><span></span><span></span><span></span></label></div></div><input type="checkbox" id="nav-toggle" aria-hidden="true" tabindex="-1"><div class="nav-mobile"><div class="grp">Products</div><a href="/products/variant-visuals/">Variant Visuals</a><a href="/products/content-hub/">Content Hub</a><a href="/products/modular-configurator/">Modular Configurator</a><a href="/products/ai-search/">AI Search</a><a href="/products/fabric-digitization/">Fabric Digitization</a><div class="grp">Solutions</div><a href="/solutions/visualize-every-variant/">Visualize Every Variant</a><a href="/solutions/showroom-suite/">Showroom Suite</a><a href="/solutions/selling-internationally/">Selling Internationally</a><a href="/solutions/help-buyers-find-the-right-product/">Help Buyers Find the Right Product</a><a href="/solutions/sell-to-new-markets/">Sell To New Markets</a><div class="grp">Built for</div><a href="/industries/modular-sofas/">Modular Sofas</a><a href="/industries/upholstered-beds/">Upholstered Beds</a><a href="/industries/shelving-systems/">Shelving Systems</a><a href="/industries/outdoor-kitchens/">Outdoor Kitchens</a><a href="/industries/wardrobes-and-cabinetry/">Wardrobes & Cabinetry</a><a href="/industries/home-cinema-seating/">Home Cinema Seating</a><a href="/industries/bicycles/">Bicycles & Sports Equipment</a><a href="/industries/bathroom-cabinets/">Bathroom Cabinets & Vanities</a><a href="/industries/print-personalisation/">Print Personalisation & Packaging</a><div class="grp">Case studies & Blog</div><a href="/case-studies/">Case studies</a><a href="/blog-posts/" aria-current="page" class="is-current">Blog</a><div class="grp">Company</div><a href="/#who">Who it's for</a><a href="/meet-us/">Meet us</a><a href="#contact" style="margin-top:10px;color:var(--accent);font-weight:700;">Talk to our team â</a></div></nav>
156<script> 157 (function () { 158 var nav = document.querySelector('.site-nav'); 159 if (!nav) return; 160 var dark = document.querySelectorAll('[data-nav-dark]'); 161 162 // Which dark sections currently sit under the bar. Answered by an observer watching a 1px 163 // band just below the nav, not by asking the layout on every scroll frame: elementFromPoint 164 // plus offsetHeight cost 175 ms of forced reflow on a phone (PageSpeed, 16.09.2026). 165 var io = null, showing = new Set(); 166 function observe() { 167 if (io) io.disconnect(); 168 showing.clear(); 169 nav.classList.remove('on-dark'); 170 if (!dark.length || !('IntersectionObserver' in window)) return; 171 var h = nav.offsetHeight || 64; // one read, on load and on resize 172 var band = 'px 0px -' + Math.max(0, innerHeight - h - 3) + 'px 0px'; 173 io = new IntersectionObserver(function (entries) { 174 // A Set, not a counter: the first callback reports every section, most of them not 175 // intersecting, and a counter would go negative and never recover. 176 entries.forEach(function (e) { e.isIntersecting ? showing.add(e.target) : showing.delete(e.target); }); 177 nav.classList.toggle('on-dark', showing.size > 0); 178 }, { rootMargin: '-' + (h + 2) + band }); 179 dark.forEach(function (s) { io.observe(s); }); 180 } 181 observe(); 182 addEventListener('resize', function () { clearTimeout(observe.t); observe.t = setTimeout(observe, 150); }); 183 })(); 184</script>
184<section class="bo" data-astro-cid-n6xwmutv><header class="bo-head" data-astro-cid-n6xwmutv><p class="bo-eyebrow" data-astro-cid-n6xwmutv>Blog</p><h1 data-astro-cid-n6xwmutv>What we learn building the visual selling layer</h1><p class="bo-sub" data-astro-cid-n6xwmutv>Configurators, rendering pipelines, product data: written by the people who ship it.</p></header><div class="bo-hero" data-astro-cid-n6xwmutv><article class="pcard is-wide" data-url="/blog-posts/dimensions-on-every-variant/" data-title="from dimensions only your upholsterer knows to dimensions on every variant" data-tags="Configurator|dimensions|catalog data|variant visuals" data-date="2026-09-08" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/dimensions-on-every-variant.png" alt="An upholstered bed render with the dimension grid drawn over it: width, length, headboard height and base height, generated from the variant record" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2026-09-08" data-astro-cid-sbmovh4h>8 September 2026</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/dimensions-on-every-variant/" data-astro-cid-sbmovh4h>From dimensions only your upholsterer knows to dimensions on every variant</a></h3><p data-astro-cid-sbmovh4h>Every brand already has the numbers. Almost none can put the right number on the right variant at the moment a buyer is deciding. The fix is a change of where the measurement lives, not a bigger drawing effort.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>7 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article></div><nav class="bo-chooser" aria-label="Categories" data-astro-cid-n6xwmutv><a href="/blog-posts/category/diagnosing/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Diagnosing</strong><span data-astro-cid-n6xwmutv>Is my configurator working?</span></a><a href="/blog-posts/category/comparisons/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Comparisons</strong><span data-astro-cid-n6xwmutv>Which vendor?</span></a><a href="/blog-posts/category/replacing/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Replacing</strong><span data-astro-cid-n6xwmutv>How do we switch without losing a quarter?</span></a><a href="/blog-posts/category/costs/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Costs</strong><span data-astro-cid-n6xwmutv>What does it actually cost?</span></a><a href="/blog-posts/category/implementing/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Implementing</strong><span data-astro-cid-n6xwmutv>What will it take from us?</span></a><a href="/blog-posts/category/configurators/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Configurators</strong><span data-astro-cid-n6xwmutv>What kinds are there, and which fits how you sell?</span></a><a href="/blog-posts/category/visuals/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Visuals</strong><span data-astro-cid-n6xwmutv>Product images at catalogue scale</span></a><a href="/blog-posts/category/showroom/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Showroom</strong><span data-astro-cid-n6xwmutv>Selling in the room, not only online</span></a><a href="/blog-posts/category/ai/" data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>AI</strong><span data-astro-cid-n6xwmutv>Where does AI actually help me sell?</span></a></nav><section class="bo-block" aria-labelledby="cat-diagnosing" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-diagnosing" data-astro-cid-n6xwmutv><a href="/blog-posts/category/diagnosing/" data-astro-cid-n6xwmutv>Diagnosing</a></h2><p data-astro-cid-n6xwmutv>Symptoms in a sales director's words, the likely cause, and a check you can run in your own analytics.</p></div><a class="bo-more" href="/blog-posts/category/diagnosing/" data-astro-cid-n6xwmutv>See more diagnosing posts (10) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/why-your-3d-configurator-didnt-increase-sales/" data-title="you bought a 3d configurator. your sales went down. here's what actually happened." data-tags="Configurator|3D|fabrics" data-date="2026-09-15" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/why-your-3d-configurator-didnt-increase-sales.png" alt="An armchair rendered in Fargotex Golden chenille, the fabric a real-time 3D tool cannot show, under the question why the configurator didn't sell more" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2026-09-15" data-astro-cid-sbmovh4h>15 September 2026</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/why-your-3d-configurator-didnt-increase-sales/" data-astro-cid-sbmovh4h>You bought a 3D configurator. Your sales went down. Here's what actually happened.</a></h3><p data-astro-cid-sbmovh4h>A 3D configurator went live, looked good, and sales didn't move. Usually for three reasons: an unreliable button, a renderer that cannot show the fabric, and five hundred choices with no guidance. What we saw at MyBed, and what we built instead.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>8 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/does-3d-preview-actually-reduce-returns/" data-astro-cid-n6xwmutv><img src="/img/pdp-hero.webp" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Does previewing a product in 3D actually reduce returns?</strong><time datetime="2026-09-12" data-astro-cid-n6xwmutv>12 Sept 2026</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/dimensions-on-every-variant/" data-astro-cid-n6xwmutv><img src="/img/blog/dimensions-on-every-variant.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>From dimensions only your upholsterer knows to dimensions on every variant</strong><time datetime="2026-09-08" data-astro-cid-n6xwmutv>8 Sept 2026</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/when-a-furniture-product-configurator-helps-and-when-it-doesnt/" data-astro-cid-n6xwmutv><img src="/img/blog/when-a-furniture-product-configurator-helps-and-when-it-doesnt.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>When a furniture product configurator helps, and when it does not<
184/strong><time datetime="2026-01-26" data-astro-cid-n6xwmutv>26 Jan 2026</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-comparisons" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-comparisons" data-astro-cid-n6xwmutv><a href="/blog-posts/category/comparisons/" data-astro-cid-n6xwmutv>Comparisons</a></h2><p data-astro-cid-n6xwmutv>The rubric for judging a vendor, then applied to one vendor at a time on behaviour we verified.</p></div><a class="bo-more" href="/blog-posts/category/comparisons/" data-astro-cid-n6xwmutv>See more comparisons posts (1) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/how-to-choose-a-right-configurator-for-a-furniture-brand/" data-title="how to choose the right configurator for a furniture brand" data-tags data-date="2025-10-27" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/how-to-choose-a-right-configurator-for-a-furniture-brand.png" alt="How to Choose the Right Configurator for a Furniture Brand?" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2025-10-27" data-astro-cid-sbmovh4h>27 October 2025</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/how-to-choose-a-right-configurator-for-a-furniture-brand/" data-astro-cid-sbmovh4h>How to choose the right configurator for a furniture brand</a></h3><p data-astro-cid-sbmovh4h>Discover the world of furniture configurators, digital tools that allow customers to customize and visualize furnishings before purchase. Learn about the different types, including 3D, modular, and parametric configurators, their technological integration, and strategic roles in sales processes. Understand how these tools enhance ecommerce operations by improving customer engagement, conversion rates, and product personalization while integrating with existing systems like ERP, CRM, and PIM. Explore key considerations and avoid pitfalls when choosing a configurator to streamline the buying process in a hybrid online-offline commerce landscape.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>5 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article></div></section><section class="bo-block" aria-labelledby="cat-replacing" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-replacing" data-astro-cid-n6xwmutv><a href="/blog-posts/category/replacing/" data-astro-cid-n6xwmutv>Replacing</a></h2><p data-astro-cid-n6xwmutv>What carries over from the platform you have, what does not, and how to switch without a quarter of lost sales.</p></div><a class="bo-more" href="/blog-posts/category/replacing/" data-astro-cid-n6xwmutv>See more replacing posts (5) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/two-bed-brands-and-the-ready-made-configurator/" data-title="two bed brands bought the ready-made configurator. both came back. here is what 'ready' meant." data-tags="Configurator|replacing|upholstery" data-date="2026-09-17" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/two-bed-brands-and-the-ready-made-configurator.png" alt="The same bed rendered twice side by side: on the left with its fabric filtered away, flat and plastic, as a real-time configurator drew it; on the right the real render, navy velvet with its pile and sheen" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2026-09-17" data-astro-cid-sbmovh4h>17 September 2026</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/two-bed-brands-and-the-ready-made-configurator/" data-astro-cid-sbmovh4h>Two bed brands bought the ready-made configurator. Both came back. Here is what 'ready' meant.</a></h3><p data-astro-cid-sbmovh4h>Two bed brands chose the ready-made 3D configurator: finished software, own interface, upload the models and go. Both came back, one after two years and one after three. What 'ready' meant on the product page, and what carried over.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>7 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/from-simple-to-complex-why-simplest-software-solutions-are-the-best-basis-for-complex-configurators/" data-astro-cid-n6xwmutv><img src="/img/blog/from-simple-to-complex.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Why the simplest software is the best base for a complex configurator
184</strong><time datetime="2026-02-21" data-astro-cid-n6xwmutv>21 Feb 2026</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/3d-furniture-configurator/" data-astro-cid-n6xwmutv><img src="/img/blog/3d-furniture-configurator.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>3D furniture configurator: what it actually is</strong><time datetime="2025-01-26" data-astro-cid-n6xwmutv>26 Jan 2025</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/five-faces-of-product-customization/" data-astro-cid-n6xwmutv><img src="/img/blog/five-faces-of-product-customization.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>The five kinds of product customization, and which one you sell</strong><time datetime="2024-11-29" data-astro-cid-n6xwmutv>29 Nov 2024</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-costs" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-costs" data-astro-cid-n6xwmutv><a href="/blog-posts/category/costs/" data-astro-cid-n6xwmutv>Costs</a></h2><p data-astro-cid-n6xwmutv>Models times fabrics times views: what each part costs and which ones move the total.</p></div><a class="bo-more" href="/blog-posts/category/costs/" data-astro-cid-n6xwmutv>See more costs posts (4) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/how-much-does-a-product-configurator-cost-in-2025/" data-title="how much does a product configurator cost?" data-tags="Configurator|Visualiser|Custom software|AR" data-date="2025-10-06" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/how-much-does-a-product-configurator-cost-in-2025.jpg" alt="How Much Does a Product Configurator Cost in 2025?" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2025-10-06" data-astro-cid-sbmovh4h>6 October 2025</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/how-much-does-a-product-configurator-cost-in-2025/" data-astro-cid-sbmovh4h>How much does a product configurator cost?</a></h3><p data-astro-cid-sbmovh4h>If your business needs a product configurator in 2025, how much should you actually budget? What are the critical factors, from product complexity to AR visualization and system integration, that will affect your price? How does utilizing automation revolutionize the cost structure, making sophisticated 3D and AR experiences accessible while ensuring a definitive return on investment by reducing returns and shortening?</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>2 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/how-much-does-the-cheapest-vendor-cost/" data-astro-cid-n6xwmutv><img src="/img/blog/how-much-does-the-cheapest-vendor-cost.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>How much does the cheapest vendor cost?</strong><time datetime="2026-01-05" data-astro-cid-n6xwmutv>5 Jan 2026</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/360s-that-load-fast-how-many-images-per-360-do-you-need/" data-astro-cid-n6xwmutv><img src="/img/blog/360s-that-load-fast-how-many-images-per-360-do-you-need.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>360s that load fast: how many images per 360 do you need?</strong><time datetime="2025-10-28" data-astro-cid-n6xwmutv>28 Oct 2025</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/how-many-images-per-pdp/" data-astro-cid-n6xwmutv><img src="/img/blog/how-many-images-per-pdp.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>How many images per PDP?</strong><time datetime="2025-10-22" data-astro-cid-n6xwmutv>22 Oct 2025</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-implementing" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-implementing" data-astro-cid-n6xwmutv><a href="/blog-posts/category/implementing/" data-astro-cid-n6xwmutv>Implementing</a></h2><p data-astro-cid-n6xwmutv>What we need from you, in what order, and how long each step takes when it goes well.</p></div><a class="bo-more" href="/blog-posts/category/implementing/" data-astro-cid-n6xwmutv>See more implementing posts (6) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/can-i-build-a-product-configurator-without-having-3d-models-ad21b/" data-title="can i build a product configurator without having 3d models?" data-tags="Configurator" data-date="2026-01-24" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/can-i-build-a-product-configurator-without-having-3d-models-ad21b.jpg" alt="Can I build a product configurator without having 3D models?" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2026-01-24" data-astro-cid-sbmovh4h>24 January 2026</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/can-i-build-a-product-configurator-without-having-3d-models-ad21b/" data-astro-cid-sbmovh4h>Can I build a product configurator without having 3D models?</a></h3><p data-astro-cid-sbmovh4h>Yes, a configurator can run on photos, 2D layers or AI images instead of 3D models. It holds while the catalogue is small and the rules are simple. Past that point the pictures stop agreeing with each other, and the checking costs more than the models would have.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>5 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/what-is-the-downside-of-shopify/" data-astro-cid-n6xwmutv><img src="/img/blog/what-is-the-downside-of-shopify.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>What is the downside of Shopify?</strong><time datetime="2026-01-11" data-astro-cid-n6xwmutv>11 Jan 2026</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/integrating-of-a-product-configurator-with-an-online-store/" data-astro-cid-n6xwmutv><img src="/img/blog/integrating-of-a-product-configurator-with-an-online-store.webp" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Integrating a product configurator with an online store</strong>
184<time datetime="2024-07-25" data-astro-cid-n6xwmutv>25 Jul 2024</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/what-to-expect-when-implementing-augmented-reality-ar-or-product-configurator/" data-astro-cid-n6xwmutv><img src="/img/blog/what-to-expect-when-implementing-augmented-reality-ar-or-product-confi.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>What to expect when you implement a product configurator</strong><time datetime="2023-08-08" data-astro-cid-n6xwmutv>8 Aug 2023</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-configurators" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-configurators" data-astro-cid-n6xwmutv><a href="/blog-posts/category/configurators/" data-astro-cid-n6xwmutv>Configurators</a></h2><p data-astro-cid-n6xwmutv>Showroom, online, dealer, parametric, modular: which kind fits how you sell.</p></div><a class="bo-more" href="/blog-posts/category/configurators/" data-astro-cid-n6xwmutv>See more configurators posts (11) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/what-is-a-product-configurator-how-it-works-types-examples-benefits/" data-title="what is a product configurator? how it works, the types, and examples" data-tags="Configurator" data-date="2023-10-18" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/what-is-a-product-configurator-how-it-works-types-examples-benefits.jpg" alt="A smartphone displaying a "Siku Sofa" customisation interface. Users can select different options for frame colour, rattan colour, fabric, and metal arches." loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2023-10-18" data-astro-cid-sbmovh4h>18 October 2023</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/what-is-a-product-configurator-how-it-works-types-examples-benefits/" data-astro-cid-sbmovh4h>What is a product configurator? How it works, the types, and examples</a></h3><p data-astro-cid-sbmovh4h>A product configurator lets a buyer choose size, fabric and options, see the result and the price, and order it. What one is, how it works, the kinds that exist, and examples from furniture brands.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>4 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/what-is-a-parametric-configurator/" data-astro-cid-n6xwmutv><img src="/img/blog/what-is-a-parametric-configurator.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>What is a parametric configurator?</strong><time datetime="2025-10-30" data-astro-cid-n6xwmutv>30 Oct 2025</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/what-is-parametric-design/" data-astro-cid-n6xwmutv><img src="/img/blog/what-is-parametric-design.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>What is parametric design?</strong><time datetime="2025-09-08" data-astro-cid-n6xwmutv>8 Sept 2025</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/selling-modular-sofas-with-3d-sofa-configurators/" data-astro-cid-n6xwmutv><img src="/img/blog/selling-modular-sofas-with-3d-sofa-configurators.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Selling modular sofas with a 3D sofa configurator</strong><time datetime="2025-08-29" data-astro-cid-n6xwmutv>29 Aug 2025</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-visuals" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-visuals" data-astro-cid-n6xwmutv><a href="/blog-posts/category/visuals/" data-astro-cid-n6xwmutv>Visuals</a></h2><p data-astro-cid-n6xwmutv>Renders that pass for photographs, how many images a page needs, and what to show when the buyer cannot touch the fabric.</p></div><a class="bo-more" href="/blog-posts/category/visuals/" data-astro-cid-n6xwmutv>See more visuals posts (2) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/photoreal-closeups-that-sell-fabrics/" data-title="photoreal close-ups that sell fabrics" data-tags data-date="2025-09-29" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/photoreal-closeups-that-sell-fabrics.jpg" alt="Photoreal Closeups That Sell" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2025-09-29" data-astro-cid-sbmovh4h>29 September 2025</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/photoreal-closeups-that-sell-fabrics/" data-astro-cid-sbmovh4h>Photoreal close-ups that sell fabrics</a></h3><p data-astro-cid-sbmovh4h>This article delves into the importance of fabric closeups in e-commerce, highlighting photorealistic visuals, prerendered variant imagery, and automated mass rendering for enhanced online shopping experiences. Learn how these strategies improve customer trust, decrease return rates, and increase conversions, bridging the gap between digital impressions and physical purchases. Explore the balance between online visual
184s and in-store swatches, ensuring your e-commerce strategy effectively showcases customizable furniture.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>4 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/5-ways-for-your-furniture-renders-to-stand-out-using-automation-and-ai/" data-astro-cid-n6xwmutv><img src="/img/blog/5-ways-for-your-furniture-renders-to-stand-out-using-automation-and-ai.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>5 ways to make furniture renders stand out with automation and AI</strong><time datetime="2025-08-26" data-astro-cid-n6xwmutv>26 Aug 2025</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-showroom" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-showroom" data-astro-cid-n6xwmutv><a href="/blog-posts/category/showroom/" data-astro-cid-n6xwmutv>Showroom</a></h2><p data-astro-cid-n6xwmutv>Quoting a custom piece in minutes, reopening the online configuration in the store, and follow-up that is not spam.</p></div><a class="bo-more" href="/blog-posts/category/showroom/" data-astro-cid-n6xwmutv>See more showroom posts (4) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/showroom-continuity-opening-the-customers-saved-config-in-store/" data-title="showroom continuity: opening the customer's saved configuration in store" data-tags data-date="2025-10-23" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/blog/showroom-continuity-opening-the-customers-saved-config-in-store.png" alt="Showroom Continuity: Opening the Customer's Saved Config In-Store" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2025-10-23" data-astro-cid-sbmovh4h>23 October 2025</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/showroom-continuity-opening-the-customers-saved-config-in-store/" data-astro-cid-sbmovh4h>Showroom continuity: opening the customer's saved configuration in store</a></h3><p data-astro-cid-sbmovh4h>This article explores the concept of furniture conversion, detailing how to create a seamless transition between online configuration and showroom experiences. It highlights the importance of integrating digital tools such as interactive configurators, augmented reality, and centralized data systems to enhance customer engagement, reduce errors, and achieve higher conversion rates. Practical steps for retailers include mapping customer journeys, implementing configurators, and training staff to create a connected and consistent shopping experience. Learn how these strategies foster emotional investment and trust in the purchasing process.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>5 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article><ul class="bo-list" data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/post-visit-follow-ups-that-dont-feel-like-spam/" data-astro-cid-n6xwmutv><img src="/img/blog/post-visit-follow-ups-that-dont-feel-like-spam.jpg" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Post-visit follow-ups that don't feel like spam</strong><time datetime="2025-11-10" data-astro-cid-n6xwmutv>10 Nov 2025</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/how-to-quickly-provide-customers-with-multiple-offering-options-for-a-custom-made-product/" data-astro-cid-n6xwmutv><img src="/img/blog/how-to-quickly-provide-customers-with-multiple-offering-options-for-a-.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>How to give a customer several options for a custom piece, fast</strong><time datetime="2024-10-10" data-astro-cid-n6xwmutv>10 Oct 2024</time></span></a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/prequalify-leads-by-instantly-providing-a-ballpark-estimate-online/" data-astro-cid-n6xwmutv><img src="/img/blog/prequalify-leads-by-instantly-providing-a-ballpark-estimate-online.png" alt="" loading="lazy" width="96" height="64" data-astro-cid-n6xwmutv><span data-astro-cid-n6xwmutv><strong data-astro-cid-n6xwmutv>Prequalify leads with an instant ballpark estimate online</strong><time datetime="2024-08-13" data-astro-cid-n6xwmutv>13 Aug 2024</time></span></a></li></ul></div></section><section class="bo-block" aria-labelledby="cat-ai" data-astro-cid-n6xwmutv><div class="bo-block-head" data-astro-cid-n6xwmutv><div data-astro-cid-n6xwmutv><h2 id="cat-ai" data-astro-cid-n6xwmutv><a href="/blog-posts/category/ai/" data-astro-cid-n6xwmutv>AI</a></h2><p data-astro-cid-n6xwmutv>What AI does in a furniture store today, what it costs once someone checks the output, and where the 3D model stays the source of truth.</p></div><a class="bo-more" href="/blog-posts/category/ai/" data-astro-cid-n6xwmutv>
184See more ai posts (1) â</a></div><div class="bo-block-grid" data-astro-cid-n6xwmutv><article class="pcard" data-url="/blog-posts/can-customers-find-a-fabric-by-describing-it/" data-title="can customers find a fabric by describing it? what it takes to answer yes." data-tags="AI|fabrics|search" data-date="2026-09-16" data-astro-cid-sbmovh4h><div class="pcard-img" data-astro-cid-sbmovh4h><img src="/img/product/ai-search-card.webp" alt="A search box over a grid of upholstery fabrics, with a plain-language query returning a handful of matching swatches" loading="lazy" data-astro-cid-sbmovh4h></div><div class="pcard-body" data-astro-cid-sbmovh4h><div class="pcard-meta" data-astro-cid-sbmovh4h><time datetime="2026-09-16" data-astro-cid-sbmovh4h>16 September 2026</time></div><h3 data-astro-cid-sbmovh4h><a class="pcard-title" href="/blog-posts/can-customers-find-a-fabric-by-describing-it/" data-astro-cid-sbmovh4h>Can customers find a fabric by describing it? What it takes to answer yes.</a></h3><p data-astro-cid-sbmovh4h>A showroom salesperson turns 'soft, autumn colours, survives two cats' into three fabrics. Your website turns it into a filter. What it takes to put that conversation online: structured fabric data, the looks-like and feels-like knowledge, and the words your buyers actually use.</p><span class="pcard-foot" data-astro-cid-sbmovh4h><span data-astro-cid-sbmovh4h>8 min read</span><span class="pcard-arrow" aria-hidden="true" data-astro-cid-sbmovh4h>â</span></span></div></article></div></section><footer class="bo-foot" data-astro-cid-n6xwmutv><p data-astro-cid-n6xwmutv>More to read</p><ul data-astro-cid-n6xwmutv><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/diagnosing/" data-astro-cid-n6xwmutv>Diagnosing</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/comparisons/" data-astro-cid-n6xwmutv>Comparisons</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/replacing/" data-astro-cid-n6xwmutv>Replacing</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/costs/" data-astro-cid-n6xwmutv>Costs</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/implementing/" data-astro-cid-n6xwmutv>Implementing</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/configurators/" data-astro-cid-n6xwmutv>Configurators</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/visuals/" data-astro-cid-n6xwmutv>Visuals</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/showroom/" data-astro-cid-n6xwmutv>Showroom</a></li><li data-astro-cid-n6xwmutv><a href="/blog-posts/category/ai/" data-astro-cid-n6xwmutv>AI</a></li></ul></footer></section><section id="contact" class="cta-section" data-tone="plain" style="scroll-margin-top:80px;" data-astro-cid-zvmdtend><div class="cta-card" data-reveal data-astro-cid-zvmdtend><div class="cta-copy" data-astro-cid-zvmdtend><h2 data-astro-cid-zvmdtend>If they can't see it, they won't buy it. Let's show them.</h2><p data-astro-cid-zvmdtend>Leave your details and we arrange a free consultation with the people who have spent years helping brands sell customised products. You bring the catalogue and the questions. We bring what has worked, what has not, and what it would take for you.</p><div class="cta-proof" data-astro-cid-zvmdtend><div class="cta-pf" data-astro-cid-zvmdtend><b data-astro-cid-zvmdtend>1M</b>variants from one source</div><div class="cta-pf" data-astro-cid-zvmdtend><b data-astro-cid-zvmdtend>Same day</b>price changes live in the shop</div><div class="cta-pf" data-astro-cid-zvmdtend><b data-astro-cid-zvmdtend>No-code</b>configurators the client runs</div></div><div class="cta-logos" data-astro-cid-zvmdtend><img src="/img/logos/mybed.svg" alt="" loading="lazy" data-astro-cid-zvmdtend><img src="/img/logos/scandic-sofa.svg" alt="" loading="lazy" data-astro-cid-zvmdtend><img src="/img/logos/hovden.svg" alt="" loading="lazy" data-astro-cid-zvmdtend><img src="/img/logos/paradise-grills.svg" alt="" loading="lazy" data-astro-cid-zvmdtend></div></div><div class="cta-flip" data-cta-flip data-astro-cid-zvmdtend><div class="cta-flip-inner" data-astro-cid-zvmdtend><form class="cta-form cta-face" data-contact-form data-mail="[email protected]" data-free-mail="{"_about":"Free and personal mailbox providers the contact form turns away (
184Marcin, 2026-09-17: business addresses only). One list for three readers: src/components/CtaFooter.astro, api/_enquiry.php and src/dev-routes/enquiry.ts. 'prefixes' matches a provider under any country ending (yahoo.co.uk, hotmail.de); 'domains' matches exactly.","prefixes":["gmail","googlemail","yahoo","ymail","rocketmail","hotmail","outlook","live","msn","aol","gmx","yandex","icloud","protonmail","tutanota","libero"],"domains":["me.com","mac.com","proton.me","pm.me","tuta.io","tuta.com","mail.com","email.com","zoho.com","zohomail.com","zohomail.eu","fastmail.com","fastmail.fm","hushmail.com","mailfence.com","inbox.com","web.de","freenet.de","t-online.de","orange.fr","free.fr","laposte.net","sfr.fr","wanadoo.fr","seznam.cz","centrum.cz","mail.ru","bk.ru","list.ru","inbox.ru","rambler.ru","qq.com","163.com","126.com","sina.com","btinternet.com","sky.com","virginmedia.com","talktalk.net","ntlworld.com","blueyonder.co.uk","comcast.net","verizon.net","att.net","sbcglobal.net","cox.net","bigpond.com","wp.pl","o2.pl","tlen.pl","onet.pl","onet.eu","op.pl","poczta.onet.pl","vp.pl","interia.pl","interia.eu","poczta.fm","gazeta.pl","autograf.pl","buziaczek.pl","go2.pl","spoko.pl","vip.onet.pl"]}" novalidate data-astro-cid-zvmdtend><label for="cta-name" data-astro-cid-zvmdtend>Name</label><input id="cta-name" name="name" type="text" placeholder="Your name" autocomplete="name" required data-astro-cid-zvmdtend><label for="cta-email" data-astro-cid-zvmdtend>Business email</label><input id="cta-email" name="email" type="email" placeholder="[email protected]" autocomplete="email" required data-astro-cid-zvmdtend><label for="cta-company" data-astro-cid-zvmdtend>Company name</label><input id="cta-company" name="company" type="text" placeholder="Your company" autocomplete="organization" required data-astro-cid-zvmdtend><label for="cta-website" data-astro-cid-zvmdtend>Company website</label><div class="cta-url" data-astro-cid-zvmdtend><span class="cta-url-pre" aria-hidden="true" data-astro-cid-zvmdtend>https://</span><input id="cta-website" name="website" type="text" inputmode="url" placeholder="yourcompany.com" autocomplete="url" autocapitalize="off" spellcheck="false" required data-astro-cid-zvmdtend></div><div class="cta-trap" aria-hidden="true" data-astro-cid-zvmdtend><label data-astro-cid-zvmdtend>Fax<input name="fax" tabindex="-1" autocomplete="off" data-astro-cid-zvmdtend></label></div><label class="cta-check" data-astro-cid-zvmdtend><input type="checkbox" name="consent" required data-astro-cid-zvmdtend><span data-astro-cid-zvmdtend>I consent to the processing of the e-mail address provided above by Ar-range (Big Banda Sp. z o. o.) with its registered office in PoznaÅ for the purpose of direct contact.</span></label><label class="cta-check" data-astro-cid-zvmdtend><input type="checkbox" name="marketing" data-astro-cid-zvmdtend><span data-astro-cid-zvmdtend>I agree to the processing of my personal data by Ar-range (Big Banda Sp. z o. o.) for the purpose of marketing communication, including sending me a newsletter, information about services, promotions or new products, in accordance with the <a href="/privacy-policy/" class="astro-zvmdtend" data-astro-cid-zvmdtend>privacy policy</a>.</span></label><button class="cta-submit" type="submit" data-astro-cid-zvmdtend>Start the conversation</button><small data-cta-note data-astro-cid-zvmdtend>No demo booking, no sales sequence. We reply by email and take it from there.</small></form><div class="cta-face cta-back" data-cta-back tabindex="-1" aria-hidden="true" inert data-astro-cid-zvmdtend><svg class="cta-back-mark" viewBox="0 0 48 48" width="56" height="56" aria-hidden="true" data-astro-cid-zvmdtend><circle cx="24" cy="24" r="22" fill="none" stroke="currentColor" stroke-width="2.5" data-astro-cid-zvmdtend></circle><path d="M14.5 24.5l6.5 6.5 13-14" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-zvmdtend></path></svg><h3 data-astro-cid-zvmdtend>Thank you</h3><p data-astro-cid-zvmdtend>Your message is on its way. We will reply by email.</p></div></div></div></div></section>
184<script type="module" src="/_astro/CtaFooter.astro_astro_type_script_index_0_lang.BVanbI9_.js"></script>
184<footer class="site-foot" data-nav-dark data-editsite data-astro-cid-jo6i4kqk><div class="foot-wrap" data-astro-cid-jo6i4kqk><div class="foot-brand" data-astro-cid-jo6i4kqk><a href="/" data-selflink="keep" class="foot-brandline" aria-label="Ar-range" data-astro-cid-jo6i4kqk><svg viewBox="0 0 77 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="height:17px;width:auto;display:block;color:var(--on-dark);" aria-label="Ar-range"><path d="M5.79875 0.183594L6.19257 0.447533L11.0247 12.1778L10.6304 12.7665H10.1267L9.73244 12.5021L8.53555 9.59048H2.4891L1.29222 12.5021L0.897975 12.7665H0.394243L0 12.1778L4.83208 0.447533L5.22591 0.183594H5.79875ZM2.99825 8.32074H8.04931L5.52357 2.13233L2.99825 8.32074Z" fill="currentColor"></path><path d="M19.158 3.90164C19.158 3.14531 18.8974 2.53337 18.4736 2.11151C18.0496 1.68948 17.4345 1.43043 16.676 1.43043H13.5528V6.39657H16.676C17.4321 6.39657 18.0469 6.13289 18.4719 5.70508C18.8971 5.27699 19.158 4.65833 19.158 3.90164ZM20.4914 3.90164C20.4914 5.16414 20.0204 6.11518 19.2829 6.74418C18.7259 7.21915 18.037 7.49338 17.3283 7.59595L20.9798 12.7665H19.3832L15.8567 7.64299H13.5757V12.7665H12.2881V0.183594H16.676L16.85 0.186924C17.7215 0.219753 18.6005 0.500547 19.2821 1.07866C20.0194 1.7041 20.4914 2.64932 20.4914 3.90164Z" fill="currentColor"></path><path d="M61.7441 0C63.5295 0.000106249 65.015 0.625413 66.2412 1.8916C66.3975 2.05334 66.4006 2.30931 66.249 2.47559L65.9746 2.77637C65.8935 2.86527 65.7785 2.91636 65.6582 2.91602C65.5379 2.91559 65.4233 2.86384 65.3428 2.77441C64.493 1.83032 63.193 1.26965 61.7441 1.26953C58.9151 1.26953 56.8575 3.43912 56.8574 6.52344C56.8576 9.53792 58.9837 11.7764 61.7441 11.7764C63.4996 11.7762 64.6747 10.8034 65.1191 10.377V7.62207H60.7129C60.4776 7.62191 60.2871 7.43065 60.2871 7.19531V6.80176C60.2871 6.56642 60.4776 6.37516 60.7129 6.375H65.957C66.1925 6.375 66.3838 6.56632 66.3838 6.80176V10.7188C66.3838 10.8233 66.345 10.9248 66.2754 11.0029C65.1382 12.2792 63.4868 12.9999 61.7441 13C58.1901 13 55.547 10.1679 55.5469 6.5C55.547 2.80783 58.1912 0 61.7441 0ZM44.707 0.161133C44.8431 0.161283 44.9706 0.226919 45.0508 0.336914L52.2959 10.2891V0.611328C52.2959 0.375906 52.4863 0.184597 52.7217 0.18457H53.1572C53.3924 0.184881 53.583 0.376082 53.583 0.611328V12.3408C53.5829 12.576 53.3923 12.7673 53.1572 12.7676H52.6992C52.5625 12.7676 52.4337 12.7016 52.3535 12.5908L45.0869 2.55176V12.3184C45.0867 12.5535 44.8963 12.7439 44.6611 12.7441H44.249C44.0137 12.7441 43.8225 12.5536 43.8223 12.3184V0.587891L43.8242 0.543945C43.8461 0.329035 44.0283 0.161133 44.249 0.161133H44.707ZM23.2949 0.183594C23.5304 0.183594 23.7217 0.374913 23.7217 0.610352V6.39648H26.8447C27.6008 6.39645 28.2157 6.13286 28.6406 5.70508C29.0656 5.27708 29.3261 4.65873 29.3262 3.90234C29.3261 3.14601 29.0664 2.53319 28.6426 2.11133C28.2186 1.68934 27.6032 1.4307 26.8447 1.43066H26.5928C26.3574 1.43063 26.1661 1.23926 26.166 1.00391V0.610352C26.166 0.374932 26.3574 0.183624 26.5928 0.183594H26.8447C27.7721 0.183621 28.7233 0.462638 29.4502 1.0791C30.1876 1.70455 30.6601 2.65003 30.6602 3.90234C30.66 5.16462 30.1886 6.11521 29.4512 6.74414C28.8948 7.21853 28.2068 7.49285 27.499 7.5957L30.6963 12.0938C30.7884 12.2237 30.8005 12.3946 30.7275 12.5361C30.6544 12.6776 30.5079 12.7665 30.3486 12.7666H29.7988C29.659 12.7666 29.5279 12.6979 29.4482 12.583L26.0254 7.64355H23.7217V12.3408C23.7215 12.5761 23.5302 12.7666 23.2949 12.7666H22.8604C22.6251 12.7666 22.4338 12.5761 22.4336 12.3408V0.610352L22.4355 0.566406C22.4574 0.351496 22.6397 0.183594 22.8604 0.183594H23.2949ZM37.2178 0.183594C37.3597 0.183649 37.4931 0.254309 37.5723 0.37207C37.6514 0.490014 37.6661 0.640042 37.6123 0.771484L34.5098 8.34375H40.6992L40.7627 8.34863C40.9092 8.37079 41.0353 8.46852 41.0928 8.6084L42.5586 12.1787C42.6125 12.3101 42.5976 12.4601 42.5186 12.5781C42.4394 12.696 42.3061 12.7666 42.1641 12.7666H41.6611C41.4883 12.7666 41.3323 12.6618 41.2666 12.502L40.0693 9.59082H34.0234L32.8262 12.502C32.7605 12.6618 32.6045 12.7666 32.4316 12.7666H31.9512C31.8092 12.7666 31.6769 12.6959 31.5977 12.5781C31.5186 12.4602 31.5029 12.3101 31.5566 12.1787L36.3652 0.448242L36.3945 0.391602C36.4706 0.264447 36.6085 0.18371 36.7598 0.183594H37.2178ZM75.8496 0.183594C76.0849 0.183752 76.2754 0.375011 76.2754 0.610352V1.00391C76.2753 1.23918 76.0849 1.43051 75.8496 1.43066H69.6572V5.67773H75.7119C75.9473 5.67773 76.1386 5.86915 76.1387 6.10449V6.49805C76.1387 6.73349 75.9474 6.9248 75.7119 6.9248H69.6572V11.5195H75.8262C76.0616 11.5195 76.2529 11.7109 76.2529 11.9463V12.3408C76.2527 12.5761 76.0615 12.7666 75.8262 12.7666H68.7959C68.5608 12.7664 68.3703 12.576 68.3701 12.3408V0.610352L68.3721 0.566406C68.394 0.35162 68.5754 0.183763
18468.7959 0.183594H75.8496Z" fill="#D9B589"></path></svg><span aria-hidden="true" class="foot-div" data-astro-cid-jo6i4kqk></span><span class="foot-tag" data-edit="Footer · tagline" data-editkey="tagline" data-astro-cid-jo6i4kqk>the visual selling layer</span></a><p class="foot-blurb" data-edit="Footer · blurb" data-editkey="footerBlurb" data-astro-cid-jo6i4kqk>Online product personalization systems for furniture brands. One source, every output.</p><div class="foot-social" data-astro-cid-jo6i4kqk><a href="https://www.linkedin.com/company/arrange-augmented-reality/" rel="noopener" target="_blank" aria-label="Ar-range on LinkedIn" title="LinkedIn" data-astro-cid-jo6i4kqk><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" data-astro-cid-jo6i4kqk><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5ZM3 9.75h4v11.5H3V9.75Zm6.5 0h3.83v1.57h.06c.53-1 1.84-2.07 3.79-2.07 4.05 0 4.8 2.67 4.8 6.13v5.87h-4v-5.2c0-1.24-.02-2.84-1.73-2.84-1.73 0-2 1.35-2 2.75v5.29h-4V9.75Z"/></svg></a><a href="https://www.facebook.com/arrangeConfigurators/" rel="noopener" target="_blank" aria-label="Ar-range on Facebook" title="Facebook" data-astro-cid-jo6i4kqk><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" data-astro-cid-jo6i4kqk><path d="M13.5 21.5v-7.6h2.55l.4-3h-2.95V9.03c0-.86.24-1.45 1.48-1.45h1.57V4.9a21 21 0 0 0-2.3-.12c-2.27 0-3.83 1.39-3.83 3.94v2.18H7.85v3h2.57v7.6h3.08Z"/></svg></a><a href="https://www.youtube.com/@ar-range6288" rel="noopener" target="_blank" aria-label="Ar-range on YouTube" title="YouTube" data-astro-cid-jo6i4kqk><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" data-astro-cid-jo6i4kqk><path d="M21.6 7.2a2.5 2.5 0 0 0-1.76-1.77C18.29 5 12 5 12 5s-6.29 0-7.84.43A2.5 2.5 0 0 0 2.4 7.2 26 26 0 0 0 2 12a26 26 0 0 0 .4 4.8 2.5 2.5 0 0 0 1.76 1.77C5.71 19 12 19 12 19s6.29 0 7.84-.43a2.5 2.5 0 0 0 1.76-1.77A26 26 0 0 0 22 12a26 26 0 0 0-.4-4.8ZM10 15V9l5.2 3-5.2 3Z"/></svg></a><a href="https://www.g2.com/products/big-banda-sp-z-o-o/reviews" rel="noopener" target="_blank" aria-label="Ar-range on G2" title="G2" data-astro-cid-jo6i4kqk><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" data-astro-cid-jo6i4kqk><circle cx="12" cy="12" r="10.5"/><text x="12" y="15.6" text-anchor="middle" font-size="10" font-weight="800" font-family="system-ui,sans-serif" fill="#1a1a2e">G2</text></svg></a><a class="foot-clutch" href="https://clutch.co/profile/ar-range#reviews" rel="noopener" target="_blank" aria-label="Rated 4.9 out of 5 from 8 reviews on Clutch" data-astro-cid-jo6i4kqk><span class="fc-top" data-astro-cid-jo6i4kqk><span class="fc-star" aria-hidden="true" data-astro-cid-jo6i4kqk>â
</span><b data-astro-cid-jo6i4kqk>4.9</b>/5</span><span class="fc-rev" data-astro-cid-jo6i4kqk>8 reviews</span><span class="fc-by" data-astro-cid-jo6i4kqk>on Clutch</span></a></div></div><div class="foot-grid" data-astro-cid-jo6i4kqk><nav class="foot-col" aria-label="Products" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk><a href="/products/" data-astro-cid-jo6i4kqk>Products</a></h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/products/variant-visuals/" data-astro-cid-jo6i4kqk>Variant Visuals</a></li><li data-astro-cid-jo6i4kqk><a href="/products/content-hub/" data-astro-cid-jo6i4kqk>Content Hub</a></li><li data-astro-cid-jo6i4kqk><a href="/products/modular-configurator/" data-astro-cid-jo6i4kqk>Modular Configurator</a></li><li data-astro-cid-jo6i4kqk><a href="/products/ai-search/" data-astro-cid-jo6i4kqk>AI Search</a></li><li data-astro-cid-jo6i4kqk><a href="/products/fabric-digitization/" data-astro-cid-jo6i4kqk>Fabric Digitization</a></li><li data-astro-cid-jo6i4kqk><a href="/3d-parametric-configurator/" data-astro-cid-jo6i4kqk>Parametric Configurator</a></li></ul></nav><nav class="foot-col" aria-label="Solutions" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk><a href="/solutions/" data-astro-cid-jo6i4kqk>Solutions</a></h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/solutions/visualize-every-variant/" data-astro-cid-jo6i4kqk>Visualize Every Variant</a></li><li data-astro-cid-jo6i4kqk><a href="/solutions/showroom-suite/" data-astro-cid-jo6i4kqk>Showroom Suite</a></li><li data-astro-cid-jo6i4kqk><a href="/solutions/selling-internationally/" data-astro-cid-jo6i4kqk>Selling Internationally</a></li><li data-astro-cid-jo6i4kqk><a href="/solutions/help-buyers-find-the-right-product/" data-astro-cid-jo6i4kqk>Help Buyers Find the Right Product</a></li><li data-astro-cid-jo6i4kqk><a href="/solutions/sell-to-new-markets/" data-astro-cid-jo6i4kqk>Sell To New Markets</a></li></ul></nav><nav class="foot-col" aria-label="Built for" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk><a href="/industries/" data-astro-cid-jo6i4kqk>Built for</a></h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/industries/modular-sofas/" data-astro-cid-jo6i4kqk>Modular Sofas</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/upholstered-beds/" data-astro-cid-jo6i4kqk>Upholstered Beds</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/shelving-systems/" data-astro-cid-jo6i4kqk>Shelving Systems</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/outdoor-kitchens/" data-astro-cid-jo6i4kqk>Outdoor Kitchens</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/wardrobes-and-cabinetry/" data-astro-cid-jo6i4kqk>Wardrobes & Cabinetry</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/home-cinema-seating/" data-astro-cid-jo6i4kqk>Home Cinema Seating</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/bicycles/" data-astro-cid-jo6i4kqk>Bicycles & Sports Equipment</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/bathroom-cabinets/" data-astro-cid-jo6i4kqk>
184Bathroom Cabinets & Vanities</a></li><li data-astro-cid-jo6i4kqk><a href="/industries/print-personalisation/" data-astro-cid-jo6i4kqk>Print Personalisation & Packaging</a></li></ul></nav><nav class="foot-col" aria-label="Case studies" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk><a href="/case-studies/" data-astro-cid-jo6i4kqk>Case studies</a></h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/case-studies/mybed/" data-astro-cid-jo6i4kqk>2.2 million product visuals</a></li><li data-astro-cid-jo6i4kqk><a href="/case-studies/paradise-grills/" data-astro-cid-jo6i4kqk>30 min â 5 min to close</a></li><li data-astro-cid-jo6i4kqk><a href="/case-studies/mitto-home/" data-astro-cid-jo6i4kqk>54,000 renders, fabric-true down to the weave</a></li><li data-astro-cid-jo6i4kqk><a href="/case-studies/mybed-ai-search/" data-astro-cid-jo6i4kqk>542 fabrics, one sentence</a></li><li data-astro-cid-jo6i4kqk><a href="/case-studies/garden-houses-in-augmented-reality/" data-astro-cid-jo6i4kqk>3 weeks to an AR garden office</a></li></ul><a class="foot-more" href="/case-studies/" data-astro-cid-jo6i4kqk>All case studies (8) â</a></nav><nav class="foot-col" aria-label="Blog" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk><a href="/blog-posts/" data-astro-cid-jo6i4kqk>Blog</a></h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/diagnosing/" data-astro-cid-jo6i4kqk>Diagnosing</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/comparisons/" data-astro-cid-jo6i4kqk>Comparisons</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/replacing/" data-astro-cid-jo6i4kqk>Replacing</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/costs/" data-astro-cid-jo6i4kqk>Costs</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/implementing/" data-astro-cid-jo6i4kqk>Implementing</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/configurators/" data-astro-cid-jo6i4kqk>Configurators</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/visuals/" data-astro-cid-jo6i4kqk>Visuals</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/showroom/" data-astro-cid-jo6i4kqk>Showroom</a></li><li data-astro-cid-jo6i4kqk><a href="/blog-posts/category/ai/" data-astro-cid-jo6i4kqk>AI</a></li></ul></nav><nav class="foot-col" aria-label="Company" data-astro-cid-jo6i4kqk><h4 data-astro-cid-jo6i4kqk>Company</h4><ul data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/meet-us/" data-astro-cid-jo6i4kqk>Meet us</a></li><li data-astro-cid-jo6i4kqk><a href="/docs/" data-astro-cid-jo6i4kqk>Docs</a></li><li data-astro-cid-jo6i4kqk><a href="/labs/" data-astro-cid-jo6i4kqk>Labs</a></li><li data-astro-cid-jo6i4kqk><a href="/ar-wall/" data-astro-cid-jo6i4kqk>AR Wall</a></li></ul></nav></div><div class="foot-base" data-astro-cid-jo6i4kqk><span data-astro-cid-jo6i4kqk>© 2026 Ar‑range · Online product personalization systems</span><span class="foot-links" data-astro-cid-jo6i4kqk><a href="/privacy-policy/" class="astro-jo6i4kqk" data-astro-cid-jo6i4kqk>Privacy policy</a></span><span class="foot-contact" data-edit="Footer · email" data-editkey="contactEmail" data-astro-cid-jo6i4kqk><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="533b363f3f3c1332217e21323d34367d322323">[email protected]</a></span></div></div></footer>
vendor: 108 bytes, line 184
184<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
184<script type="module">document.querySelectorAll(`[data-contact-widget]`).forEach(function(e){var t=e.querySelector(`[data-cw-toggle]`),n=e.querySelector(`.cw-panel`);if(!t||!n)return;function r(e,t){window.dataLayer=window.dataLayer||[],window.dataLayer.push(Object.assign({event:e},t||{}));try{var n=`ar-contact-tally`,r=JSON.parse(localStorage.getItem(n)||`{}`);r[e]=(r[e]||0)+1,localStorage.setItem(n,JSON.stringify(r))}catch{}}window.arContactTally=function(){try{return JSON.parse(localStorage.getItem(`ar-contact-tally`)||`{}`)}catch{return{}}};function i(e){n.hidden=!e,t.setAttribute(`aria-expanded`,String(e)),e&&r(`contact_widget_open`)}t.addEventListener(`click`,function(){i(n.hidden)}),e.querySelectorAll(`[data-cw-choice]`).forEach(function(e){e.addEventListener(`click`,function(){r(`contact_choice`,{method:e.dataset.cwChoice})})}),document.addEventListener(`click`,function(t){e.contains(t.target)||i(!1)}),document.addEventListener(`keydown`,function(e){e.key===`Escape`&&i(!1)});var a=window.scrollY;addEventListener(`scroll`,function(){Math.abs(window.scrollY-a)<40||(a=window.scrollY,n.hidden||i(!1))},{passive:!0});var o=document.getElementById(`contact`);o&&`IntersectionObserver`in window&&new IntersectionObserver(function(t){t.forEach(function(t){e.classList.toggle(`cw-away`,t.isIntersecting),t.isIntersecting&&i(!1)})},{threshold:.18}).observe(o)});</script>
184<script> 185 // Looping mockup animations start (from 0%) only once their scene scrolls into view , 186 // nobody sits waiting for a cycle that began at page load. The scene CSS gates its 187 // `animation` on `.in-view`; leaving the viewport removes it so it replays on return. 188 (function () { 189 var scenes = document.querySelectorAll('.rt-scene, .ai-hero, .vv-scene'); 190 if (!scenes.length) return; 191 if (!('IntersectionObserver' in window)) { for (var i = 0; i < scenes.length; i++) scenes[i].classList.add('in-view'); return; } 192 var io = new IntersectionObserver(function (entries) { 193 entries.forEach(function (e) { e.target.classList.toggle('in-view', e.isIntersecting); }); 194 }, { threshold: 0.25 }); 195 scenes.forEach(function (s) { io.observe(s); }); 196 })(); 197 </script>
197<script> 198 // Safety net for self-links: any <a> pointing at the page you're already on 199 // gets aria-current + .is-current (dimmed, inert). Nav/Footer already do this 200 // at build time; this catches content links (cards, CTAs, feature rows) too. 201 // Skipped in ?edit mode: pointer-events:none would block inline editing. 202 (function () { 203 if (new URLSearchParams(location.search).has('edit')) return; 204 var here = (location.pathname.replace(/\/+$/, '') || '/'); 205 document.querySelectorAll('a[href]').forEach(function (a) { 206 // data-selflink="keep" opts out, the logo stays lit on the homepage. 207 // href="#" is a placeholder, not a self-link: JS reports an EMPTY hash for it, so it 208 // slipped past the a.hash guard and every placeholder card rendered dimmed. 209 if (a.getAttribute('href') === '#') return; 210 if (a.hash || a.target || a.origin !== location.origin) return; 211 if (a.dataset.selflink === 'keep') return; 212 if ((a.pathname.replace(/\/+$/, '') || '/') !== here) return; 213 a.setAttribute('aria-current', 'page'); 214 a.classList.add('is-current'); 215 }); 216 })(); 217 </script>
217<script type="module">(function(){var e=Array.prototype.slice.call(document.querySelectorAll(`[data-count]`));if(!e.length)return;var t=2;window.__editing===void 0&&(window.__editing=new URLSearchParams(location.search).has(`edit`));function n(e){e.dataset.counted=``,e.dataset.plain!==void 0&&(e.textContent=e.dataset.plain)}function r(e){if(!window.__editing&&!e.dataset.counted){e.dataset.counted=`1`;var n=(e.textContent||``).trim();if(/\d/.test(n)){e.dataset.plain=n,e.textContent=``;var r=document.createElement(`span`);r.className=`count-row`;for(var i=[],a=0,o=0;o<n.length;o++){var s=n[o];if(s>=`0`&&s<=`9`){var c=+s,l=document.createElement(`span`);l.className=`count-reel`;var u=document.createElement(`span`);u.className=`count-col`;for(var d=``,f=0;f<t;f++)for(var p=0;p<=9;p++)d+=`<span>`+p+`</span>`;for(var m=0;m<=c;m++)d+=`<span>`+m+`</span>`;u.innerHTML=d,u.style.transitionDelay=a*110+`ms`,l.appendChild(u),r.appendChild(l),i.push({col:u,to:t*10+c}),a++}else{var h=document.createElement(`span`);h.className=`count-fixed`,h.textContent=s,r.appendChild(h)}}e.appendChild(r),requestAnimationFrame(function(){requestAnimationFrame(function(){i.forEach(function(e){e.col.style.transform=`translateY(calc(-`+e.to+` * var(--rh)))`})})})}}}if(`IntersectionObserver`in window){var i=new IntersectionObserver(function(e){e.forEach(function(e){e.isIntersecting&&(r(e.target),i.unobserve(e.target))})},{threshold:.35});e.forEach(function(e){i.observe(e)})}else e.forEach(r);window.__reels={build:r,plainify:n}})();</script>
217<script type="module">var e=Array.from(document.querySelectorAll(`[data-reveal]`)),t=e=>{e.style.opacity=`1`,e.style.transform=`none`};if(e.forEach(e=>{e.style.opacity=`0`,e.style.transform=`translateY(22px)`,e.style.transition=`opacity .7s cubic-bezier(.2,.7,.2,1), transform .7s cubic-bezier(.2,.7,.2,1)`}),`IntersectionObserver`in window){let n=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(t(e.target),n.unobserve(e.target))})},{threshold:.1,rootMargin:`0px 0px -6% 0px`});e.forEach(e=>n.observe(e)),setTimeout(()=>e.forEach(t),4e3)}else e.forEach(t);</script>
217<script> 218 // ?tune: generic drag-to-position dev helper. Any composition marks its container with 219 // `data-tune`, its movable children with `data-tune-el="css-class"`, and any croppable 220 // image with `data-tune-crop="css-class"`. One floating panel lists every tunable element 221 // on the page; drag an element (or its row) to move it, drag a crop image (or its row) to 222 // pan, wheel/slider to scale-or-zoom, then Copy CSS to paste the values back into source. 223 // Add `data-tune-nowidth` to anything sized by its text (labels, pills): Copy CSS then 224 // leaves its width out, because a % width shrinks the box while nowrap text does not. 225 // Rides ?tune OR ?edit. Purely a design aid: nothing renders for real visitors. 226 (function () { 227 var qs = location.search; 228 if (qs.indexOf('tune') < 0 && qs.indexOf('edit') < 0) return; 229 var els = Array.prototype.slice.call(document.querySelectorAll('[data-tune-el],[data-tune-crop]')); 230 if (!els.length) return; 231 var isCrop = function (e) { return e.hasAttribute('data-tune-crop'); }; 232 var nameOf = function (e) { return e.getAttribute('data-tune-crop') || e.getAttribute('data-tune-el'); }; 233 var cont = function (e) { return e.closest('[data-tune]') || e.offsetParent || document.body; }; 234 var pct = function (e) { var r = e.getBoundingClientRect(), h = cont(e).getBoundingClientRect(); 235 return { left: (r.left - h.left) / h.width * 100, top: (r.top - h.top) / h.height * 100, w: r.width / h.width * 100 }; }; 236 var getCrop = function (e) { var t = e.style.transform || ''; var z = parseFloat((t.match(/scale\(([^)]+)\)/) || [])[1] || '1'); 237 var tr = t.match(/translate\(([^)]+)\)/); var tx = 0, ty = 0; if (tr) { var p = tr[1].split(','); tx = parseFloat(p[0]) || 0; ty = parseFloat(p[1]) || 0; } return { tx: tx, ty: ty, z: z }; }; 238 var setCrop = function (e, c) { e.style.transform = 'translate(' + c.tx.toFixed(1) + '%,' + c.ty.toFixed(1) + '%) scale(' + c.z.toFixed(2) + ')'; }; 239 var drag = null, sel = els[0]; 240 var panel = document.createElement('div'); 241 panel.style.cssText = 'position:fixed;top:12px;right:12px;z-index:99999;background:#14120f;color:#efe9dc;font:11px/1.5 ui-monospace,Menlo,monospace;padding:12px 14px;border-radius:9px;width:300px;max-height:92vh;overflow:auto;box-shadow:0 10px 34px rgba(0,0,0,.55)'; 242 panel.innerHTML = '<b style="color:#c9805a">?tune</b>: drag row/element · scroll or slider to size<div id="tnlist" style="margin:6px 0"></div>' 243 + '<div style="display:grid;grid-template-columns:76px 1fr 42px;gap:7px;align-items:center;border-top:1px solid #39322a;padding-top:9px">' 244 + '<span id="tnsel">, </span><input type="range" id="tnscale" min="15" max="280" step="1" style="width:100%;accent-color:#c9805a"><b id="tnv">, </b></div>' 245 + '<button id="tncopy" style="margin-top:10px;width:100%;padding:7px;background:#c9805a;border:0;border-radius:6px;color:#201509;font-weight:700;cursor:pointer">Copy CSS</button>'; 246 document.body.appendChild(panel); 247 var $ = function (id) { return document.getElementById(id); }; 248 var fmt = function (e) { if (isCrop(e)) { var c = getCrop(e); return '.' + nameOf(e) + ' { pan ' + c.tx.toFixed(0) + '/' + c.ty.toFixed(0) + ' · zoom ' + c.z.toFixed(2) + ' }'; } var p = pct(e); return '.' + nameOf(e) + ' { left:' + p.left.toFixed(1) + '% top:' + p.top.toFixed(1) + '% w:' + p.w.toFixed(1) + '% }'; }; 249 function renderList() { $('tnlist').innerHTML = els.map(function (e, i) { return '<div data-i="' + i + '" style="cursor:pointer;padding:1px 3px;border-radius:3px;' + (e === sel ? 'color:#14120f;background:#c9805a' : '') + '">' + fmt(e) + '</div>'; }).join(''); } 250 function selectEl(e) { sel = e; $('tnsel').textContent = '.' + nameOf(e); 251 if (isCrop(e)) { var c = getCrop(e); $('tnscale').min = 100; $('tnscale').max = 300; $('tnscale').value = (c.z * 100).toFixed(0); $('tnv').textContent = 'z ' + c.z.toFixed(2); } 252 else { var p = pct(e); $('tnscale').min = 15; $('tnscale').max = 280; $('tnscale').value = p.w.toFixed(0); $('tnv').textContent = p.w.toFixed(0) + '%'; } 253 renderList(); } 254 function startDrag(t, ev) { var p = pct(t); drag = { e: t, sx: ev.clientX, sy: ev.clientY, crop: isCrop(t) ? getCrop(t) : null, sl: p.left, st: p.top }; selectEl(t); } 255 $('tnlist').addEventListener('pointerdown', function (ev) { var d = ev.target.closest('[data-i]'); if (!d) return; ev.preventDefault(); startDrag(els[+d.dataset.i], ev); try { $('tnlist').setPointerCapture(ev.pointerId); } catch (x) {} }); 256 $('tnscale').addEventListener('input', function (ev) { if (!sel) return; 257 if (isCrop(sel)) { var c = getCrop(sel); c.z = (+ev.target.value) / 100; setCrop(sel, c); $('tnv').textContent = 'z ' + c.z.toFixed(2); } 258 else { sel.style.width = ev.target.value + '%'; $('tnv').textContent = ev.target.value + '%'; } 259 renderList(); }); 260 $('tncopy').onclick = function () { var t = els.map(function (e) { if (isCrop(e)) { var c = getCrop(e); return '.' + nameOf(e) + '{transform:translate(' + c.tx.toFixed(1) + '%,' + c.ty.toFixed(1) + '%) scale(' + c.z.toFixed(2) + ');}'; }
260 var p = pct(e); return '.' + nameOf(e) + '{left:' + p.left.toFixed(1) + '%;top:' + p.top.toFixed(1) + '%;right:auto;bottom:auto;' + (e.hasAttribute('data-tune-nowidth') ? '' : 'width:' + p.w.toFixed(1) + '%;') + '}'; }).join('\n'); if (navigator.clipboard) navigator.clipboard.writeText(t); $('tncopy').textContent = 'Copied â'; setTimeout(function () { $('tncopy').textContent = 'Copy CSS'; }, 1400); }; 261 els.forEach(function (e) { e.style.cursor = 'move'; 262 e.addEventListener('pointerdown', function (ev) { ev.preventDefault(); ev.stopPropagation(); 263 var target = (isCrop(e) && ev.shiftKey) ? e.parentElement : e; // Shift on a crop image = move its container 264 startDrag(target, ev); try { target.setPointerCapture(ev.pointerId); } catch (x) {} }); 265 e.addEventListener('wheel', function (ev) { ev.preventDefault(); 266 if (isCrop(e)) { var c = getCrop(e); c.z = Math.max(1, Math.min(3, c.z + (ev.deltaY < 0 ? 0.05 : -0.05))); setCrop(e, c); if (e === sel) { $('tnscale').value = (c.z * 100).toFixed(0); $('tnv').textContent = 'z ' + c.z.toFixed(2); } } 267 else { var p = pct(e); var w = Math.max(4, p.w + (ev.deltaY < 0 ? 1 : -1)); e.style.width = w + '%'; if (e === sel) { $('tnscale').value = w.toFixed(0); $('tnv').textContent = w.toFixed(0) + '%'; } } 268 renderList(); }, { passive: false }); 269 }); 270 addEventListener('pointermove', function (ev) { if (!drag) return; var h = cont(drag.e).getBoundingClientRect(); 271 if (drag.crop) { var cr = drag.e.parentElement.getBoundingClientRect(), c = drag.crop; 272 setCrop(drag.e, { tx: c.tx + (ev.clientX - drag.sx) / cr.width * 100, ty: c.ty + (ev.clientY - drag.sy) / cr.height * 100, z: c.z }); } 273 else { drag.e.style.left = drag.sl + (ev.clientX - drag.sx) / h.width * 100 + '%'; 274 drag.e.style.top = drag.st + (ev.clientY - drag.sy) / h.height * 100 + '%'; 275 drag.e.style.right = 'auto'; drag.e.style.bottom = 'auto'; } 276 renderList(); }); 277 addEventListener('pointerup', function () { drag = null; }); 278 selectEl(sel); 279 })(); 280 </script>
280<script>(function(){const contactEmail = "[email protected]"; 281 282(() => { 283 const mc = navigator.modelContext; 284 if (!mc || typeof mc.registerTool !== 'function') return; 285 286 const controller = new AbortController(); 287 addEventListener('pagehide', () => controller.abort(), { once: true }); 288 const text = (value) => ({ content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }] }); 289 290 let index; 291 const loadIndex = () => (index ||= fetch('/search.json').then((r) => r.json())); 292 293 const tools = [ 294 { 295 name: 'search_site', 296 description: 'Search ar-range.app: Content Hub documentation, products, solutions, industries, case studies and blog posts. Returns titles, URLs and one-line summaries, best match first.', 297 inputSchema: { 298 type: 'object', 299 properties: { 300 query: { type: 'string', description: 'Words to look for, e.g. "layer order" or "upholstered beds".' }, 301 limit: { type: 'integer', minimum: 1, maximum: 20, default: 8 }, 302 }, 303 required: ['query'], 304 }, 305 async execute({ query, limit = 8 }) { 306 const terms = String(query || '').toLowerCase().split(/\s+/).filter(Boolean); 307 if (!terms.length) return text({ error: 'Empty query' }); 308 const pages = await loadIndex(); 309 const scored = pages.map((p) => { 310 const fields = [[p.t, 6], [p.h, 3], [p.s, 3], [p.c, 2], [p.b, 1]]; 311 let score = 0; 312 for (const term of terms) { 313 for (const [value, weight] of fields) if ((value || '').toLowerCase().includes(term)) score += weight; 314 } 315 return { score, title: p.t, url: new URL(p.u, location.origin).href, summary: p.s || '', section: p.k }; 316 }).filter((r) => r.score > 0).sort((a, b) => b.score - a.score); 317 return text(scored.slice(0, Math.min(Math.max(limit, 1), 20)).map(({ score, ...r }) => r)); 318 }, 319 }, 320 { 321 name: 'read_page', 322 description: 'Read one ar-range.app page as Markdown: title, description, canonical URL and the page text without navigation or decorative mockups.', 323 inputSchema: { 324 type: 'object', 325 properties: { url: { type: 'string', description: 'A path such as "/docs/add-a-layer/" or a full https://ar-range.app URL.' } }, 326 required: ['url'], 327 }, 328 async execute({ url }) { 329 let target; 330 try { target = new URL(String(url || ''), location.origin); } catch { return text({ error: 'Not a URL' }); } 331 if (target.origin !== location.origin) return text({ error: 'Only pages on this site can be read' }); 332 if (!target.pathname.endsWith('/')) target.pathname += '/'; 333 const res = await fetch(target.pathname + 'index.md'); 334 if (!res.ok) return text({ error: `No Markdown version of ${target.pathname} (HTTP ${res.status})` }); 335 return text(await res.text()); 336 }, 337 }, 338 { 339 name: 'get_contact_options', 340 description: 'How a person reaches the Ar-range team for a quote, a demo or a question the site does not answer. Informational: it does not send anything.', 341 inputSchema: { type: 'object', properties: {} }, 342 async execute() { 343 return text({ 344 email: contactEmail, 345 contact_form: new URL('#contact', location.href.split('#')[0]).href, 346 note: 'Every page ends with a contact form. Ask the person to send the enquiry themselves; include company, website, what they sell and roughly how many variants.', 347 }); 348 }, 349 }, 350 ]; 351 352 for (const tool of tools) { 353 try { mc.registerTool(tool, { signal: controller.signal }); } catch (e) { /* an older draft of the API: skip quietly */ } 354 } 355})(); 356})();</script>
356<script type="module">(function(){if(!(`IntersectionObserver`in window))return;let e=new WeakMap,t=t=>{e.get(t)&&!document.hidden&&t.muted?t.play().catch(()=>{}):t.pause()},n=new IntersectionObserver(n=>n.forEach(n=>{e.set(n.target,n.isIntersecting),t(n.target)}),{threshold:.01}),r=()=>document.querySelectorAll(`video`).forEach(t=>{t.dataset.iov||(t.dataset.iov=`1`,e.set(t,!1),n.observe(t))});r(),new MutationObserver(r).observe(document.body,{childList:!0,subtree:!0}),document.addEventListener(`visibilitychange`,()=>document.querySelectorAll(`video`).forEach(t))})();</script>
356<script> 357 // Videos below the first screen carry data-lazy-src and preload="none": nothing is 358 // fetched until one comes within 300px of the viewport, then it loads and plays. The 359 // homepage alone had 55 MB of autoplay video starting on arrival (PageSpeed, 2026-09-15). 360 (function () { 361 var vs = document.querySelectorAll('video[data-lazy-src]'); 362 if (!vs.length) return; 363 function go(v) { 364 if (v.src) return; 365 v.src = v.getAttribute('data-lazy-src'); 366 var p = v.play(); if (p && p.catch) p.catch(function () {}); 367 } 368 if (!('IntersectionObserver' in window)) { vs.forEach(go); return; } 369 var io = new IntersectionObserver(function (es) { 370 es.forEach(function (e) { if (e.isIntersecting) { go(e.target); io.unobserve(e.target); } }); 371 }, { rootMargin: '300px 0px' }); 372 vs.forEach(function (v) { io.observe(v); }); 373 })(); 374 </script>
374<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"a4d24672c45b413aab9a1b1ed2af546e","r":1,"spa":2}' crossorigin="anonymous"></script>
374 375</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.