Loop

Loop

Loop

EST. 2026COMING SOON
Brand & UI reference

LOOP Design System

A living reference for LOOP's colors, typography, and UI components. Click any tagged value to copy it, then paste it directly into your markup.

Building with an AI agent? See guides/design-system.md for a condensed, agent-friendly summary of this page.

Colors

Always reference these tokens by name (e.g. bg-primary) rather than hardcoding hex values — tokens automatically adapt between LOOP's light and dark themes.

Primary

CTAs, REC indicator, active states

Secondary

Secondary actions

Accent

Stereo pair / connected state

Neutral

Dark panels, footer

Invert

Hard black/white flip — opposite of the current theme

Base 100

Page background

Base 200

Recessed / matte surfaces

Base 300

Dividers, disabled

Info

Informative messaging

Success

Success messaging

Warning

Warning messaging

Error

Errors — distinct from CTA red

Typography

Heading 1

Heading 2

Heading 3

Heading 4

Body copy

Small / uppercase label

Font weight

Aa100
Aa200
Aa300
Aa400
Aa500
Aa600
Aa700
Aa800
Aa900

Letter spacing

Aa Bb Cc-0.05em
Aa Bb Cc-0.025em
Aa Bb Cc0em
Aa Bb Cc0.025em
Aa Bb Cc0.05em
Aa Bb Cc0.1em

Line height

1.25
1.375
1.5
1.625
2

Sizing

Font size, spacing, and border widths available for layout — plus the size scale daisyUI components share.

Font size

Aa12px
Aa14px
Aa16px
Aa18px
Aa20px
Aa24px
Aa30px
Aa36px
Aa48px
Aa60px
Aa72px
Aa96px
Aa128px

Spacing

Same scale applies to padding (p-*), margin (m-*), and gap (gap-*).

4px
8px
12px
16px
24px
32px
48px
64px
96px
128px

Border width

1px
2px
4px
8px

Max width

Default Tailwind scale — this project doesn't override the --container-* theme variables.

256px
288px
320px
384px
448px
512px
576px
672px
768px
896px
1024px
1152px
1280px

Keyword variants — not part of the numeric scale

No max-width constraint
100% of parent
65ch — optimal reading measure
fit-content
min-content
max-content
Matches sm breakpoint — 640px
Matches lg breakpoint — 1024px

Border radius (Tailwind)

Independent of daisyUI's --radius-* theme tokens (see Shape below) — use these directly on any element.

2px
4px
6px
8px
12px
16px
24px
32px
9999px

Box shadow

Blur

4px
8px
12px
16px
24px
40px
64px

Breakpoints

Prefix any utility — e.g. md:flex-row — to apply it from that viewport width up.

640px
768px
1024px
1280px
1536px

Buttons

Default to the unstyled `btn` unless a specific brand color is called for.

Component sizes — same xs–xl scale applies to badge, input, and other daisyUI components

Modifiers

Badges

Neutral
Primary
Secondary
Accent
Info
Success
Warning
Error

Styles

Outline
Dash
Soft
Ghost

Sizes

badge-xs
badge-sm
badge-md
badge-lg
badge-xl

Alerts

Cards

LOOP Camera

LOOP Camera

Five lenses. One press. Photos that move the way you remember them.

Container
Title
Body
Actions

Modifiers

Sizes

Stat blocks

Used for compact spec callouts, as seen on the homepage hero.

Lenses

x5

Format

.GIF/.MP4

Aperture

F2.4

Pocket

YES

Forms

Input sizes

Other controls

Shape

Applied automatically to every daisyUI component via the LOOP theme — flat, print-like, no gloss or blur.

Radius (box)

Cards, modals, alerts

Radius (field)

Buttons, inputs, tabs

Radius (selector)

Checkboxes, toggles, badges

Border

Hairline on every component

Size (field)

Buttons, inputs, tabs

Size (selector)

Checkboxes, toggles, badges

Depth

Flat surfaces — no 3D/shadow effect

Noise

No background grain texture

More daisyUI

The rest of daisyUI's component catalogue — CSS-only, so every one below is live rather than referenced. mockup-browser/-code/-phone/-window and the theme-controller are skipped as out of scope for a brand reference.

Actions

Dropdown

Modal

Swap

Data display

Avatar

Avatar
LC

Mask

Carousel

Chat

Does the LOOP camera work in low light?
It has a built-in flash for exactly that.

Collapse (accordion)

How long is shipping?
3–5 business days within the US.
What's the warranty?
One year, covering manufacturing defects.

Countdown

12hours
34min
56sec

Diff

Before
After

Kbd

Ctrl+Shift+R

List

  • Sunset Loop
  • Midnight Loop
  • Studio Loop

Table

ModelFormatPrice
1LOOP Camera — SunsetWigglegram$399.00
2LOOP Camera — MidnightWigglegram$399.00
3LOOP Carry StrapWigglegram$39.00

Timeline

  • Ordered


  • Shipped


  • Delivered

Navigation

Breadcrumbs

Link

Menu — with submenu

Navbar

Pagination

Steps

  • Register
  • Choose plan
  • Purchase
  • Receive Product

Tabs

Five lenses, one press, an instant wigglegram.
F2.4 aperture, .GIF/.MP4 export, pocketable.

Feedback

Loading

Progress

Radial progress

70%
40%

Skeleton

Status

Toast

Normally fixed to the viewport — pinned to this box instead so it doesn't escape the page.

New firmware available.

Tooltip

Layout

Divider

Item 1
OR
Item 2

Drawer

Footer (daisyUI classes)

Distinct from the project's own React component below — these are daisyUI's raw footer-* utility classes.

Hero

Photos that move

Five lenses. One press. LOOP captures wigglegrams instantly.

Indicator

3
Cart
Camera

Stack

1
2
3

Shopify components

The project's own React components in app/components/. Most are wired directly to Hydrogen data — where it's safe to do so, they're demoed live below using the app's real (mock-store) data and context, rather than hand-built fakes.

Product — ProductPrice, ProductImage, ProductItem

Rendered with a mocked product fragment — this store isn't linked to real product data.

PaginatedResourceSection

Same mock products, wrapped in Hydrogen's real <Pagination> — Previous/Next are inert since this mock connection reports no further pages.

AddToCartButton

Disabled here to avoid submitting a real cart mutation from this reference page — it renders unstyled, exactly as it does in ProductForm, which supplies its own button styles.

Aside, Header, Footer, CartMain, CartLineItem, CartSummary, SearchFormPredictive, SearchResultsPredictive

These are already mounted once for the whole app by — Header is the nav at the very top of this page, Footer is at the very bottom, and the buttons below open the same cart/search/menu Asides you'd get from anywhere on the site.

SearchForm

A real form that submits to /search — distinct from the predictive search shown in the search Aside above.

MockShopNotice

Welcome to Hydrogen!

You’re seeing mocked products because no store is connected to this project yet.

Link a store by running npx shopify hydrogen link in your terminal.

Full component index

PageLayout (the shell containing this very page) and ProductForm (needs Hydrogen's processed variant-option data) aren't demoed above — everything else is.

Header

Demoed above

Top nav — logo, menu, search and cart triggers.

Needs: header, cart, isLoggedIn, publicStoreDomain (from root loader)

Footer

Demoed above

Site footer nav and social links.

Needs: footer, header, publicStoreDomain (from root loader)

PageLayout

Reference only

App shell — wires up Header, Footer, and the search/cart/mobile Aside panels around page content.

Needs: cart, footer, header, isLoggedIn, publicStoreDomain, children

Aside

Demoed above

Slide-out panel + context provider behind the search, cart, and mobile-menu drawers. Exposes a useAside() hook.

Needs: type (search/cart/mobile/closed), heading, children

AddToCartButton

Demoed above

Wraps Hydrogen's CartForm to add line items to the cart.

Needs: lines, children, disabled?, onClick?, analytics?

CartMain

Demoed above

Cart contents — empty state, line items, and the summary/checkout panel.

Needs: cart (CartApiQueryFragment), layout ('page' | 'aside')

CartLineItem

Demoed above

A single cart line — image, title, price, quantity controls, and nested child lines (e.g. warranties).

Needs: layout, line (CartLine)

CartSummary

Demoed above

Subtotal, discounts, gift cards, and checkout button.

Needs: cart, layout

ProductItem

Demoed above

Product grid/list card — image, title, price.

Needs: product (collection/search/recommended fragment), loading?

ProductForm

Reference only

Variant option selectors plus the Add to Cart button.

Needs: productOptions, selectedVariant

ProductImage

Demoed above

A single product/variant image via Hydrogen's <Image>.

Needs: image

ProductPrice

Demoed above

Price display, with compare-at (sale) price support.

Needs: price?, compareAtPrice?

SearchForm

Demoed above

Bare form wrapper that submits to the /search route.

Needs: children (render prop)

SearchFormPredictive

Demoed above

Debounced fetcher-backed instant-search input wrapper.

Needs: children (render prop)

SearchResults

Reference only

Renders full /search results via a render-prop.

Needs: term, result, children

SearchResultsPredictive

Demoed above

Renders the instant-search dropdown results.

Needs: children (render prop)

PaginatedResourceSection

Demoed above

Wraps Hydrogen's <Pagination> with Previous/Next links for any connection.

Needs: connection, children (render prop)

MockShopNotice

Demoed above

Banner shown on the homepage when no store is linked yet.

Needs: none — presentational