Skip to content
Envío gratuito en pedidos superiores a 50 € · Usa el código WELCOME10 para un 10% de descuento · ¡Ir!
CuevasLab Storefront

Design System

Visual reference for design tokens, typography, spacing, shadows, and components used across the storefront. All values come directly from tailwind.config.js.

Colors

Brand palette

primary#C4923D
primary-light#D4A85C
primary-dark#7A5D10
secondary#2E2A24
secondary-foreground#F7F5F2
accent#C87A5C
cream#F7F5F2

Grey scale

0
5
10
20
30
40
50
60
70
80
90

Typography

Type scale — Outfit

4xl — HeroProduct name
3xl — DisplayKitchen robots
2xl — HeadingProduct categories
xl — SubheadingFree shipping on all orders
lg — LeadPower, precision and elegance.
base — BodyDiscover our selection of professional kitchen robots.
sm — Secondary30-day returns · 2-year warranty · 24h support
xs — Caption© 2026 CuevasLab. All rights reserved.

Source Serif 4 — editorial / quotes

“Power, precision and elegance — designed for those who demand more.”

Families

--font-outfitOutfitHeadings · Body · UI labels
--font-serifSource Serif 4Editorial · Quotes

Border Radius

rounded-none0px
rounded-soft2px
rounded-base4px
rounded-rounded8px
rounded-large16px
rounded-circle9999px

Shadows

shadow-subtle
0 1px 3px rgba(0,0,0,0.06)
shadow-card
0 4px 16px rgba(0,0,0,0.08)
shadow-dropdown
0 8px 24px rgba(0,0,0,0.12)

Components

Buttons

Primary uses bg-primary with !important overrides where @medusajs/ui preset takes precedence.

Form inputs

This field is required

Badges & tags

In stockNewFree shippingSold out

Cards

Product nameFood processor · 5 colors
€ 299.00
Info cardFlat card with subtle shadow and muted border.

Checkout Components

Tab cards — selection toggle

Used in checkout for delivery method and payment method selection. Pattern: border-2 + aria-pressed + focus-visible:ring-2.

Phone input — country code dropdown

common/components/phone-input— EU country code selector + national number. Stores full phone with prefix (e.g. "+34 612345678"). 27 EU countries.

Bank transfer info card

Conditional card shown in checkout, confirmation page, and email when payment method is Bank Transfer. Data fetched from Strapi CMS bank-transfer single type.

Transfer Details

IBAN:ES91 2100 0418 4502 0005 1332BIC:CAIXESBBXXXBank:CaixaBankHolder:CuevasLab S.L.

Shipping speed radios

Radio cards for shipping method selection. Selected state uses border-primary bg-primary/5.

Address card — radio selection

checkout/components/address-card — Replaces the address dropdown in checkout. Shows alias (or street summary), full address with country, phone. Radio selection with default badge.

Form validation states

Input states for address validation feedback. Used when Google Address Validation returns different verdicts.

Please review the highlighted address fields

Suggested correction: Calle Gran Vía 123

Address verified

012 345 678

Phone input — with format validation

Updated phone-input now validates on blur against eu-countries.ts phone format regex. Shows format hint and error state.

012 345 678

Expected format: 012 345 678

Address validation modal

common/components/address-validation-modal — Shown when Google Address Validation returns verdict: "confirm". User picks suggested or original.

Verify address

We found a possible correction for your address.

VAT format hint

Shows example VAT format based on billing country. Updates dynamically when country changes. Uses eu-countries.ts vatExample data.

Format: ESA12345678

Modal — base pattern

common/components/modal — Used for address add/edit, validation confirmation. Structure: Title → Body (scrollable) → Footer with Cancel/Save.

Add address

Form fields go here (scrollable area with max-h).

Inline messages — error, warning, success, info

Inline feedback messages used throughout checkout and forms. Semantic colors: text-error, text-warning, text-success.

Suggested correction: Calle Gran Vía 123
VAT number valid ✓ — CuevasLab S.L.
Format: ESA12345678
Validating VAT number...

reCAPTCHA — v2 challenge fallback

common/components/recaptcha/use-recaptcha— v3 runs invisibly. If score < 0.5, v2 checkbox challenge renders in a centered container. Used in register, login, forgot-password.

reCAPTCHA v2 challenge

Rendered here when v3 score is too low

checkbox widget

Modules

layout/templates/nav

Top navigation bar with logo, category bar, search, cart, account, and language switcher.

layout/templates/footer

Footer with brand tagline, category links, store links, and developer section.

layout/components/cart-dropdown

Cart flyout panel. Shows line items with quantity controls, a draggable Embla carousel for recommended products, total, and checkout CTA. Auto-opens on item add.

home/components/hero

Full-width CMS-driven hero section. Fetches from Strapi. Wrapped in Suspense with SkeletonHero fallback.

home/components/category-cards

CMS-driven category grid (desktop) / horizontal scroll (mobile). Fetches from Strapi. Wrapped in Suspense with SkeletonCategoryCards fallback.

home/components/hero/skeleton

SkeletonHero — animated pulse placeholder matching the 80vh hero layout. Used as Suspense fallback while Strapi CMS data loads.

home/components/category-cards/skeleton

SkeletonCategoryCards — animated pulse placeholder matching 4-col desktop / scroll mobile grid.

products/components

Product card (ProductPreview), Thumbnail (supports priority + lazy loading), image gallery, price, variants selector, rating stars, and tabs.

products/components/product-preview

Product card with image (lazy-loaded), badge, WishlistButton (shown when wishlistIds prop provided), color swatches, price, and quick-view overlay.

account/components/wishlist-button

WishlistButton — client component. Receives productId + isWishlisted. Calls toggleWishlist server action on click with optimistic state update. Heart icon fills accent when wishlisted.

cart/templates

Cart page with line items, quantity controls, and order summary.

checkout/components/single-page-checkout

Single-page checkout: Contact → Delivery (tabs) → AddressForm → Shipping → Invoice opt-in + Company/VAT → Payment (tabs) → Place Order.

order/templates

Order confirmation and order details templates.

account/templates

Account dashboard with profile, addresses, orders, and wishlist sections.

common/components/address-form

Reusable address form: Name, Surname, Street, Street No, Additional info, Postal Code, City, Province, Country, Phone. Supports alias, Google Autocomplete, and field prefix.

common/components/google-autocomplete

Google Places Autocomplete using PlaceAutocompleteElement (new API). Loads script dynamically, parses address components into form fields.

common/components/address-validation-modal

Modal for Google Address Validation corrections. Shows suggested vs original address with radio selection and confirmation checkbox.

common/components/recaptcha

reCAPTCHA v3 + v2 fallback. useReCaptcha hook loads v3 invisibly, shows v2 challenge widget if score is too low. Used in register and forgot password.

account/components/pickup-points

Pickup Points placeholder section with 'Coming soon' dummy card.

common/components

Shared primitives: Input, PhoneInput, NativeSelect, Modal, Checkbox, LineItem, CartTotals, LocalizedClientLink.

common/icons

Custom SVG icons: BankTransfer, Spinner, Trash, FastDelivery, MapPin, etc.

Pages

/Homepage — hero, trust bar, and product grid.
/storeProduct listing page with filters, sorting, and view modes.
/products/[handle]Product detail page with gallery, variants, and add-to-cart.
/category/[slug]Category listing — filtered PLP.
/cartCart page with summary and checkout CTA.
/checkoutSingle-page checkout: contact, delivery tabs, address + phone, shipping speed, billing + VAT, payment tabs, Place Order.
/order/confirmed/[id]Order confirmation page.
/accountAccount dashboard overview.
/account/@dashboard/profileProfile: Access Data (email, password) → Delivery Methods (address book with alias/default + pickup points placeholder) → Billing Address (invoice opt-in + Company/VAT).
/account/@dashboard/addressesSaved addresses book (also accessible from profile).
/account/@dashboard/ordersOrder history list.
/account/@dashboard/orders/details/[id]Order detail view.
/account/@dashboard/wishlistWishlist page. Fetches wishlisted product IDs from customer.metadata.wishlistIds, loads full product data, renders product grid. Shows empty state with store CTA.
/page/design-systemThis page — design token and component reference.