{"version":1,"pages":[{"id":"M6kdlEvLRr6olgdxljiT","title":"Overview","pathname":"/","siteSpaceId":"sitesp_lLuyk","icon":"book-open","description":"Analog keeps layout, spacing, type, and color in theme settings so you can control the design from the theme editor."},{"id":"r3GozcC3wbiTogVn1RWo","title":"The section & block model","pathname":"/core-concepts/model","siteSpaceId":"sitesp_lLuyk","icon":"cubes","description":"How Analog builds pages from sections, blocks, and nested container blocks, and when to use a purpose-built section.","breadcrumbs":[{"label":"Core concepts"}]},{"id":"MFYzkO1X1XixXgNz8kHa","title":"Global settings & local overrides","pathname":"/core-concepts/settings-cascade","siteSpaceId":"sitesp_lLuyk","icon":"sliders","description":"How Analog settings inherit from global defaults into sections and blocks, and how to check global changes with the Styleguide section.","breadcrumbs":[{"label":"Core concepts"}]},{"id":"X3bm43jOvR8tAmfCQEQs","title":"Scaling: size, space & rhythm","pathname":"/core-concepts/scaling","siteSpaceId":"sitesp_lLuyk","icon":"ruler-combined","description":"How Analog uses responsive scales for type, gaps, margins, width, and section spacing.","breadcrumbs":[{"label":"Core concepts"}]},{"id":"vkv8URVjxIKS4eY0D2fR","title":"Typography & fonts","pathname":"/core-concepts/typography","siteSpaceId":"sitesp_lLuyk","icon":"font","description":"How Analog uses four font roles and shared type presets to control typography across the theme.","breadcrumbs":[{"label":"Core concepts"}]},{"id":"OvmXxBTmbHf1HqnK3R9n","title":"Color","pathname":"/core-concepts/color","siteSpaceId":"sitesp_lLuyk","icon":"palette","description":"How Analog builds color schemes from a few roles, including derived tints, scheme slots, and contrast colors.","breadcrumbs":[{"label":"Core concepts"}]},{"id":"dxfs2MNVYcCRGTGEresl","title":"Pair sections","pathname":"/building-pages/pair","siteSpaceId":"sitesp_lLuyk","icon":"table-columns","description":"Use Pair for two-column layouts that stack on mobile, including heroes, media with text, and linked interactive blocks.","breadcrumbs":[{"label":"Building pages"}]},{"id":"kXF4xf6xHUnSFa7WIdqA","title":"Card sections","pathname":"/building-pages/cards","siteSpaceId":"sitesp_lLuyk","icon":"grip","description":"Use Card grid, Card carousel, and Tabbed card carousels to show products, collections, articles, or custom content.","breadcrumbs":[{"label":"Building pages"}]},{"id":"XohljsRl8p57egPXdS7v","title":"The Custom section","pathname":"/building-pages/custom-section","siteSpaceId":"sitesp_lLuyk","icon":"shapes","description":"Use the Custom section to stack blocks in one vertical column with a shared gap and alignment.","breadcrumbs":[{"label":"Building pages"}]},{"id":"5R6DfH06OVzhcDtptT98","title":"Layered backgrounds","pathname":"/building-pages/backgrounds","siteSpaceId":"sitesp_lLuyk","icon":"layer-group","description":"Use Banner for one background image or video, or Banner layers to stack and position several background blocks.","breadcrumbs":[{"label":"Building pages"}]},{"id":"7UX5BpLgGTmHzdJfZbvO","title":"Layout blocks","pathname":"/building-pages/layout-blocks","siteSpaceId":"sitesp_lLuyk","icon":"object-group","description":"How to choose between the Frame, Row, Text group, Flex, and Grid editorial container blocks.","breadcrumbs":[{"label":"Building pages"}]},{"id":"0bc0HqqFtXSeIJPxhds9","title":"Header, toolbar & navigation","pathname":"/features/header","siteSpaceId":"sitesp_lLuyk","icon":"window-maximize","description":"How to configure the Menu, Toolbar, Menu drawer, transparent header, logo swapping, and mega-menus.","breadcrumbs":[{"label":"Features"}]},{"id":"zUvG2ym3nVfQi4sjJVZm","title":"Search","pathname":"/features/search","siteSpaceId":"sitesp_lLuyk","icon":"magnifying-glass","description":"How to configure predictive search, suggested content, and the filterable search results page.","breadcrumbs":[{"label":"Features"}]},{"id":"0tun2mnZw6TXzYwamrSk","title":"Product page & quickview","pathname":"/features/product","siteSpaceId":"sitesp_lLuyk","icon":"bag-shopping","description":"How the product page, Featured product section, quickview drawer, quick add, upsells, and breadcrumbs work.","breadcrumbs":[{"label":"Features"}]},{"id":"h82nyTojrV025PJp1SkD","title":"Collection pages","pathname":"/features/collection","siteSpaceId":"sitesp_lLuyk","icon":"filter","description":"The collection template, its filter sidebar and drawer, sorting, the shopper-adjustable grid, and in-place pagination.","breadcrumbs":[{"label":"Features"}]},{"id":"T7nHCdqh0aCWB7NM0sZE","title":"Cart page & drawer","pathname":"/features/cart","siteSpaceId":"sitesp_lLuyk","icon":"cart-shopping","description":"How to configure cart routing, the free-shipping bar, and cart upsells.","breadcrumbs":[{"label":"Features"}]},{"id":"Sb1q0vF26SA14xzXBluT","title":"Badges, ratings & preorder","pathname":"/features/merchandising","siteSpaceId":"sitesp_lLuyk","icon":"tag","description":"How Analog renders sale, sold-out, and custom badges, star ratings, and preorder products.","breadcrumbs":[{"label":"Features"}]},{"id":"ulMlPUTNSqZG6TfOhyE8","title":"Siblings & grouped variants","pathname":"/features/variants","siteSpaceId":"sitesp_lLuyk","icon":"swatchbook","description":"Use siblings to link separate product listings, or option media to have many images for each colorway.","breadcrumbs":[{"label":"Features"}]},{"id":"k1jG55KDiykY4BdO7my5","title":"Footer","pathname":"/features/footer","siteSpaceId":"sitesp_lLuyk","icon":"window-minimize","description":"How to configure footer columns, mobile accordions, and the Subfooter utility row.","breadcrumbs":[{"label":"Features"}]},{"id":"IdXrvjx6XsRK7IexBVGE","title":"Custom code","pathname":"/developer-platform/custom-code","siteSpaceId":"sitesp_lLuyk","icon":"file-code","description":"How to load and use custom.css, custom.events.js, and custom.alpine.js.","breadcrumbs":[{"label":"Developer platform"}]},{"id":"D0nxMnlrsBAuNtTcnDbt","title":"Events","pathname":"/developer-platform/events","siteSpaceId":"sitesp_lLuyk","icon":"bolt","description":"How to listen for Shopify storefront events and Analog theme events, including payloads and commands.","breadcrumbs":[{"label":"Developer platform"}]},{"id":"lNdJf0sRTDhFFtQgaxZt","title":"Developer blocks","pathname":"/developer-platform/blocks","siteSpaceId":"sitesp_lLuyk","icon":"code","description":"The Custom liquid block and section for raw Liquid, HTML, CSS, and JS, and the Page content block for rendering a page resource's stored HTML.","breadcrumbs":[{"label":"Developer platform"}]},{"id":"QRcn0S8qQP0cMLwUVsJj","title":"Product card architecture","pathname":"/developer-platform/product-cards","siteSpaceId":"sitesp_lLuyk","description":"How Analog product cards use Liquid and how to customize them.","breadcrumbs":[{"label":"Developer platform"}]},{"id":"oKYonvd0bm5QZebNCJ06","title":"Utilities & variants","pathname":"/reference/utilities","siteSpaceId":"sitesp_lLuyk","description":"The theme's Tailwind extensions: custom utility classes and variants, one page per category.","breadcrumbs":[{"label":"Reference"}]},{"id":"vJXIlUbwLF3wW4lhrkLk","title":"r-scale spacing","pathname":"/reference/utilities/spacing","siteSpaceId":"sitesp_lLuyk","description":"Utilities for spacing and sizing elements with the theme's responsive r1–r15 scale, plus the hit-area utilities for enlarging tap targets.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"xqRxIdWjlBoGMz1T9ewi","title":"Type utilities","pathname":"/reference/utilities/typography","siteSpaceId":"sitesp_lLuyk","description":"Utilities for applying the theme's type presets, font families, r1–r15 text sizes, preset resizing, and leading.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"1q3xK2R4UdRbMoJrf0sG","title":"Color utilities","pathname":"/reference/utilities/color","siteSpaceId":"sitesp_lLuyk","description":"Utilities for coloring elements from the active color scheme: the semantic palette, the mix palette, scheme-switching vars- classes, and the stain indirection.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"w5Betm6TxJBDNLoHy58b","title":"Layout utilities","pathname":"/reference/utilities/layout","siteSpaceId":"sitesp_lLuyk","description":"Utilities for arranging content: flex shorthands, grid stacking, layout-variable gaps and padding, and content alignment.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"8i8Zl2KmKkEzpjBxjz0H","title":"Custom variants","pathname":"/reference/utilities/variants","siteSpaceId":"sitesp_lLuyk","description":"Custom variants for input method, JavaScript availability, Alpine load state, viewport intersection, and feature support.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"onFGpaXc5yidk3H2cvyE","title":"Effect utilities","pathname":"/reference/utilities/effects","siteSpaceId":"sitesp_lLuyk","description":"Utilities for visual effects: enter/exit animations, staggering, attention animations, text shimmer and stroke, gradient borders, and gradient masks.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"pXTbFpjZmqsmqtHeV4Ib","title":"Miscellaneous utilities","pathname":"/reference/utilities/misc","siteSpaceId":"sitesp_lLuyk","description":"Single-purpose utilities: enlarged hit areas, child z-order, autofill and native-control resets, containment, and 3D helpers.","breadcrumbs":[{"label":"Reference"},{"label":"Utilities & variants"}]},{"id":"99GtwrBeA1eTEaPw3iuU","title":"Alpine plugins","pathname":"/reference/alpine","siteSpaceId":"sitesp_lLuyk","description":"One reference page per Alpine plugin, grouped by what the plugin is for. Pages marked (Analog) ship in the theme rather than tradecraft-ui.","breadcrumbs":[{"label":"Reference"}]},{"id":"Hk6UWtGhK5mAnP3Mmt6f","title":"x-dialog","pathname":"/reference/alpine/dialog","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for dialogs built on the native <dialog> element: modal and non-modal, animated close, and focus restore.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"m6yM2mtCjficmpAyhESr","title":"x-popover","pathname":"/reference/alpine/popover","siteSpaceId":"sitesp_lLuyk","description":"A popup whose panel renders in the browser's top layer while open, escaping clipped ancestors, with a focus trap built in.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"Mx529ID0Ew0CxI5txc19","title":"x-popup","pathname":"/reference/alpine/popup","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for small overlays that open next to a target element.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"w92BBvEoWF9Kdr2XfAVv","title":"x-menu","pathname":"/reference/alpine/menu","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for dropdown menus that follow the ARIA menu-button pattern: arrow-key focus, type-ahead, and disabled items.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"eKe9TcIm1qbUSubKPiP5","title":"x-listbox","pathname":"/reference/alpine/listbox","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for accessible listboxes, including options, selection state, and form values.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"dOAiOISfZZwPCSrqNOYf","title":"x-select","pathname":"/reference/alpine/select","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for select-only dropdowns: a listbox in a floating panel, with a button that shows the current selection.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"X1cNmd7fOOnIZx9YaiR1","title":"x-tooltip","pathname":"/reference/alpine/tooltip","siteSpaceId":"sitesp_lLuyk","description":"Directives for tooltips: a hover-and-focus trigger and a panel that floats next to it.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"Dm4Av65kPnrlwzeuayKV","title":"x-disclosure","pathname":"/reference/alpine/disclosure","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for disclosures (a button that shows and hides a panel) and for accordion groups.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"PXJIDvlZF2SrDXgzu7sO","title":"x-tabs","pathname":"/reference/alpine/tabs","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for accessible tabs, built on disclosure groups.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"cJKfFyc0NpXlUcXxNRnp","title":"x-float","pathname":"/reference/alpine/float","siteSpaceId":"sitesp_lLuyk","description":"The directive and magic for floating one element next to another with Floating UI: placement, collision handling, sizing, and update strategies.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"Sqo6wz1gvKUrJQItXh5E","title":"x-header-dropdown (Analog)","pathname":"/reference/alpine/header-dropdown","siteSpaceId":"sitesp_lLuyk","description":"The header's dropdown menu: a small panel of links that floats under a top-level nav item.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"XLl32a3NuVbmMFlWm1at","title":"x-megamenu (Analog)","pathname":"/reference/alpine/megamenu","siteSpaceId":"sitesp_lLuyk","description":"The header's megamenu: one shared full-width panel that reveals, swaps, and closes flyout content for the whole nav.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"rlX9I0V6U2VCP5fnzV1c","title":"header-menu (Analog)","pathname":"/reference/alpine/header-menu","siteSpaceId":"sitesp_lLuyk","description":"The store and directives behind the desktop nav: which popup is open, and the nav items and popups that open and close it.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"1NGgjz2RHssEw8cuDjKG","title":"x-async-form","pathname":"/reference/alpine/async-form","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for forms that submit with fetch instead of a page reload, with a request state you can render.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"GvZfx0GeLgl5WSwNrXQo","title":"x-product-form","pathname":"/reference/alpine/product-form","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for product forms: add to cart with fetch, with cart sections updated in place.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"UDMunR2ImZjTaZPaYjyl","title":"x-cart-form","pathname":"/reference/alpine/cart-form","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for cart forms: cart updates with fetch, with cart sections updated in place.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"RLciDVfl0lK2NB6JOqNK","title":"x-cart-item","pathname":"/reference/alpine/cart-item","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for changing or removing one cart line item with fetch.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"73lB0sYxHdtADIXEBy77","title":"x-cart-api-section","pathname":"/reference/alpine/cart-api-section","siteSpaceId":"sitesp_lLuyk","description":"A directive that keeps a section in step with the cart: cart requests return the section's HTML, and the section morphs it in.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"wMdlOdzwhPWti4nHke76","title":"x-stepper","pathname":"/reference/alpine/stepper","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for a number input with plus and minus buttons.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"yzhkAP9PkovYJaGWv74O","title":"x-predictive-search","pathname":"/reference/alpine/predictive-search","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for Shopify's predictive search API: a live search form, section-rendered results, and a combobox options list.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"Hdvqi5DXhsABOv6Uo7ho","title":"x-notification","pathname":"/reference/alpine/notification","siteSpaceId":"sitesp_lLuyk","description":"A directive and magic that turn a popover panel into a self-dismissing notification with hover and focus aware timing.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"z3mKXCY4lqcQeBSMIfy5","title":"x-countdown","pathname":"/reference/alpine/countdown","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for countdown timers: a target date, per-unit display elements, screen-reader text, and an expiry flag.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"QIPCwV9YhXpNMHPNkKzT","title":"x-submittable-textarea","pathname":"/reference/alpine/submittable-textarea","siteSpaceId":"sitesp_lLuyk","description":"A directive that adds Cmd+Enter or Ctrl+Enter as a textarea submit shortcut.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"0PshtYENrYLwdyEtkKJJ","title":"Currency magics","pathname":"/reference/alpine/currency","siteSpaceId":"sitesp_lLuyk","description":"Magics for money formatting in the browser: cents to a locale-aware money string, and conversion to the presented currency.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"7zwex4jZSFE6FlKuYPqQ","title":"x-slideshow","pathname":"/reference/alpine/slideshow","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for slideshows: slide registration, autoplay, and controls that stay in sync.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"upWpVIJsSSs2EdvQELvq","title":"x-carousel","pathname":"/reference/alpine/carousel","siteSpaceId":"sitesp_lLuyk","description":"Mouse-drag panning with momentum for horizontal scrollers, landing on CSS scroll-snap points.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"NjwJO2YI02HEWAomScq1","title":"x-photoswipe","pathname":"/reference/alpine/photoswipe","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for the PhotoSwipe lightbox: slide data read from the DOM at open time, open buttons, and a slide counter.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"N8aGTqhayzLhpSN9VyLZ","title":"x-marquee","pathname":"/reference/alpine/marquee","siteSpaceId":"sitesp_lLuyk","description":"A continuously scrolling row of content: a source row, a cloned target row, and one shared offset so the loop never jumps.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"0HuZqRgd9OxmrhwYxEN5","title":"x-video (Analog)","pathname":"/reference/alpine/video","siteSpaceId":"sitesp_lLuyk","description":"Lazy playback for a video inside the component: the video renders only when it is needed, and window events drive playback from outside.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"p7DkunkxVSpzvke6ulSk","title":"x-read-more","pathname":"/reference/alpine/read-more","siteSpaceId":"sitesp_lLuyk","description":"Truncated content with a smooth height expand, a truncation state for the button, and automatic expansion for focus, print, hash links, and find-in-page.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"yGVToUozZiKor4tuenLl","title":"x-clone","pathname":"/reference/alpine/clone","siteSpaceId":"sitesp_lLuyk","description":"Copies an element from another part of the DOM to the location of a template.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"sUQK2ZXkBw6oTzNollEC","title":"x-shared-layout","pathname":"/reference/alpine/shared-layout","siteSpaceId":"sitesp_lLuyk","description":"FLIP animations between elements that take turns being visible: an underline that slides between links, a pill that hops between tabs.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"OOB5LYmXTDMANflLhrnF","title":"x-img-loading-placeholder","pathname":"/reference/alpine/image-loading-placeholder","siteSpaceId":"sitesp_lLuyk","description":"Shows a placeholder element until a neighbouring image finishes loading, then hides it.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"UOSxKTARxLATekq0uRtA","title":"x-parallax","pathname":"/reference/alpine/parallax","siteSpaceId":"sitesp_lLuyk","description":"Directives for compositor-driven scroll parallax: a root timeline and elements that translate against it.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"zyxQKmb2UYKTtFnR0dB5","title":"x-scroll-stagger","pathname":"/reference/alpine/scroll-stagger","siteSpaceId":"sitesp_lLuyk","description":"Directives for staggered scroll animations: a Motion timeline over a set of items, scrubbed by scroll progress.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"VR5Va0X8opIu6L9MStwp","title":"x-scroll-list","pathname":"/reference/alpine/scroll-list","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for scroll-snap lists: item registration, visibility tracking, and buttons that page through the list.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"COuAYgi8SwpkZA3N9T7i","title":"x-scroll-lock","pathname":"/reference/alpine/scroll-lock","siteSpaceId":"sitesp_lLuyk","description":"A directive that locks page scrolling while an expression is true, with counted locks and an iOS-specific path.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"4YBhLbaVwdDm9ls7W025","title":"x-sticky-columns","pathname":"/reference/alpine/sticky-columns","siteSpaceId":"sitesp_lLuyk","description":"Directives that coordinate sticky behaviour between sibling columns: the root measures, the columns report state to CSS.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"Ug0J60ckNOhky7fBkfuV","title":"x-slider-reveal","pathname":"/reference/alpine/slider-reveal","siteSpaceId":"sitesp_lLuyk","description":"Directives and a magic for the before/after slider: a spring-animated reveal with a draggable handle and optional scroll control.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"AxAuu96RxWhgYoPoY38S","title":"Gesture & motion internals","pathname":"/reference/alpine/scroll-motion-internals","siteSpaceId":"sitesp_lLuyk","description":"The gesture primitives behind the interactive plugins: hover, press, hold, pan, and the animated number wheel.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"bw8WwBDVCZ690Mo3df7C","title":"x-section-api","pathname":"/reference/alpine/section-api","siteSpaceId":"sitesp_lLuyk","description":"Directives and magics for the Shopify Section Rendering API: fetch a section's HTML and morph it into the page without a reload.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"iqH6YFiuLi8DM7daHZYX","title":"x-roving-tab","pathname":"/reference/alpine/roving-tab","siteSpaceId":"sitesp_lLuyk","description":"Roving tabindex for groups of controls: one tab stop for the whole group, arrow keys to move between the items.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"qFVmcfCkjEJqrlwidRZE","title":"State & structure internals","pathname":"/reference/alpine/state-structure","siteSpaceId":"sitesp_lLuyk","description":"Internal Alpine modules for per-section data, morphing, shared selection, overflow, focus, and deferred initialization.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"JsZ2sFe4G8FOw3Y3C4Fb","title":"Plugin internals","pathname":"/reference/alpine/internals","siteSpaceId":"sitesp_lLuyk","description":"Internal Alpine plugins for caching, theme-editor integration, prefetching, pointer effects, media players, and section updates.","breadcrumbs":[{"label":"Reference"},{"label":"Alpine plugins"}]},{"id":"rpWwKTp5ba56S9ydoxFX","title":"Utils","pathname":"/reference/utils","siteSpaceId":"sitesp_lLuyk","description":"The plain TypeScript helpers exported from @groupthought/tradecraft-ui/utils: DOM checks, layout measurement, focus preservation, state machines, and directive modifier parsing.","breadcrumbs":[{"label":"Reference"}]},{"id":"dlEm3b7IxwoYUl5idzo2","title":"Metafields reference","pathname":"/reference/metafields","siteSpaceId":"sitesp_lLuyk","icon":"database","description":"Every metafield and metaobject Analog reads, the theme setting that names each key, and the exact data shape expected.","breadcrumbs":[{"label":"Reference"}]}]}