01 — Principles

Five rules that explain everything else.

Every color, component or text decision in this template comes from one of these principles. If a new screen contradicts them, the screen is wrong, not the principle.

01Gold is an accent, not a background

Warm black carries the visual weight; gold marks what matters: a hairline, a reduced price, an emphasis border. A screen is never bathed in gold.

02The badge says what the button does

Availability and interaction read the same inventory value. There can never be a “Sold out” badge next to an active buy button.

03Everything is visible at load

No block starts at opacity:0 waiting for a scroll. Animation reinforces what is already visible; it never reveals it.

04Urgency only if it is true

No countdown clocks or “374 people viewing this”. The only urgency shown is the one that is already true: one unit left, a reduced price.

05Visual honesty

It looks precise because the data is real, not because the design disguises it. The spec sheet borrows the language of a gemological report without pretending a certification exists.

06No gray is neutral by accident

Ivory, ink and hairlines all lean warm toward gold, just like the macro product photography, which is the best thing the site has today.

02 — Color

Ivory, warm black and antique gold.

Seventeen tokens, defined once in css/tokens.css. Components never use a loose hex value: always var(--token).

Surfaces

Ivory
--paper#FAF7F1
Page background. Never pure white.
Warm white
--card#FFFEFA
Cards, pop-ups, raised surfaces.
Hairline
--line#E4DCC8
Card borders, main dividers.
Soft hairline
--line-soft#EEE8D8
Dividers between sections, image placeholder while loading.

Ink

Warm black
--ink#1B1712
Text, primary button, announcement bar, offer cards.
Toasted haze
--ink-soft#5A4E3D
Secondary text. Never a cold gray.
Faint ink
--ink-faint#8B8070
Metadata, footers, struck-through price.

Golds

Gold
--gold#A6741C
Hairlines and emphasis borders. Not for small text.
Deep gold
--gold-deep#7E5A16
Accent text on ivory, hover, eyebrow.
Bright gold
--gold-bright#C9A227
Accent on dark backgrounds (primary button text).
Gold wash
--gold-tint#F3E8CE
Soft panels; text on black.

Inventory states

Available
Available
--state-available#3F6B4A · tint #E5EDE3
Emerald green, borrowed from the stones themselves.
Low stock
Low stock
--state-low#AD6A22 · tint #F3E6D2
Amber. Also used for the “On Sale” flag and savings.
Sold
Sold
--state-soldout#7A7263 · tint #EBE7DC
Neutral, not red: sold is not an alarm.

Third parties & elevation

PayPal
--paypal-bg / --paypal-ink#FFC439 · #003087
Only on the payment mark. Not used anywhere else.
Shadow
--shadowrgba(27,23,18,.14)
Warm ink with alpha, never pure black.
03 — Typography

Serif for the stone, sans for the interface, mono for the data.

Three families with three different jobs. Cormorant Garamond gives the editorial tone of fine jewelry; Inter carries the cart, forms and navigation; JetBrains Mono is reserved for figures: prices, carats, measurements, codes.

DISPLAY / H1
Cormorant 600
clamp(34–50px) · 1.08

The Yellow Sapphire almost nobody saw.

TITLE / H2
Cormorant 600
30px

All 12 pieces, real status

SUBTITLE / H3
Cormorant 600
19–26px

10% off your first gem

BODY
Inter 400
16px · 1.6 / 15px · 1.75

Every gem leaves the workshop with its own data sheet: item ID, dimensions, weight, color, shape, cut, enhancement and origin.

UI
Inter 600
13px · .03em
Add to cart · View the full collection
NAVIGATION
Inter 500 · UPPERCASE
12.5px · .04em
Gemstones · Offers · Gift card
EYEBROW
JetBrains Mono 500
11px · .14em
Back on display
PRICE / DATA
JetBrains Mono 600
14–36px · tabular
USD $425.00 · 4.20 CT · 9.1 × 7.4 MM
SUPPORT
Inter 400
11–12.5px
Prices and availability as shown on each piece’s page.

Weights loaded: Cormorant 500–700 (with italics for emphasis), Inter 400–700, JetBrains Mono 400–600, from Google Fonts. Fallbacks: Georgia, system-ui, ui-monospace. Headlines use text-wrap:balance.

04 — Layout, shape & elevation

Restraint, fine hairlines and nearly square corners.

A jeweler does not use heavily rounded corners. Radii are rationed: 2px for almost everything, full circle only for pills and selection chips.

ElementValue
Content width1180px max · 32px side padding
Space between sections72px top and bottom
Catalog grid4 col · gap 20px → 2 col ≤920px
Offers grid3 col · gap 16px → 1 col ≤920px
Trust strip3 col separated by a 1px hairline
Breakpoint920px (layout) · 760px (sticky bar)
Headersticky · ivory 95% + 8px blur
RadiusUsed on
2pxButtons, cards, fields, labels
3–4pxOffer card, gem frame, pop-up
6pxGift card (an object, not a container)
20pxBadges, chips, amounts, payment marks
50%Cart counter, chat button

Elevation & layers (z-index)

Real shadows
Card at rest
hairline only
Card on hover
0 14 30 -16 + 2px up
Object (gift card)
0 20 40 -18
Floating (chat)
0 10 26
Layerz-indexComponent
Header50Sticky bar
Mobile sticky bar55Product + “Add”
Chat60Bubble and teaser
Cart70 / 71Overlay / side panel
Pop-up90Always above everything
05 — Buttons

One accent per decision, not per button.

The primary button is black with gold text, not solid gold. Solid gold is reserved for what is truly expensive. Each screen zone has a single primary button.

Variants · interactive
ClassRestHoverUse
.btn-primaryBlack · bright gold textDeep gold · ink textMain action: add, pay, buy gift card
.btn-secondaryTransparent · black hairlineDeep gold hairline and textAlternative action next to a primary
.btn-smSame, padding 10×16 · 11.5px—Mobile sticky bar
.add-btnSoft hairline · uppercase 10.5pxInverts to black/goldProduct card
:disabledSold-out background · faint textNo change · cursor not-allowedSold, empty cart

Visible focus on all of them: 2px deep-gold outline with a 2px offset. Pressed state: moves down 1px.

06 — Availability

The badge says what the button does.

The badge and the button read the same inventory variable: they cannot contradict each other.

Three states
AvailableLow stockSold On Sale Save $50
✓ Badge, price and button agree
Yellow Sapphire Princess CutLow stock
Yellow Sapphire Princess Cut
Princess cut · 1 in stock
$650$600

Badge, price and button all come from the same state: state: "low".

Data rule

stateBadgeButtonImage
availableAvailable (green)“Add” enabledNormal color
lowLow stock (amber)“Add” enabledNormal color
soldoutSold (neutral)“Sold” disabled35% grayscale

Sold pieces are sorted to the end of the catalog, with a restock notice and similar available pieces; never a dead end.

07 — Product card & catalog

Real catalog, real status.

Try the filters and add to cart.

Interactive
Browse by · Color
Browse by · Price point

Card anatomy

PartSpecification
ImageSquare (1:1), object-fit:cover, lazy-loaded except the hero. Badge anchored top-left at 10px.
NameInter 600 · 13.5px
Short descriptionInter 11px · faint ink · color/cut/stock
PriceJetBrains Mono 600 · 14px; previous price struck through at 11px to its left
Action.add-btn to the right of the price, aligned to the bottom of the card
HoverLifts 2px and gains a shadow; the touch equivalent is tapping “Add” directly
LoupeMoving over the photo opens a 2.2× round lens that follows the pointer, like a jeweler’s loupe. On touch, press and drag; the lens sits above the finger.
Flags.flag top-right: New (black and gold), On Sale (amber) and Sold (neutral, in place of the availability badge).
08 — Hero

Visible at rest, not after the first scroll.

The headline, price and buttons paint in the first frame, and the text sits on ivory, not on the photo.

Hero
Back on display

The Yellow Sapphire almost nobody saw.

Princess cut, intense yellow tone, one of a kind. On sale now, with its full spec sheet.

$600$650Save $50
✓ Insured shipping✓ Spec sheet included✓ Pay by card, PayPal or Apple Pay
Yellow Sapphire Princess CutOn Sale
Left in stock1 unit
01One commercial actionOne primary button (“Add to cart”) and one secondary (“View the full collection”).
02Text on ivoryThe headline never overlaps the photo: the photo has its own frame.
03Photo without lazy-loadThe hero image uses loading="eager"; everything else is deferred. It is the image that defines LCP.
04Mobile: photo firstBelow 920px the photo moves to the top (max 420px) and the text goes below.
09 — Trust & offers

No fake clocks.

The trust strip sums up three verifiable promises. The offer cards are the only dark block on the page: they stand out because they contrast, not because they shout.

Trust strip

Real spec sheetItem ID, dimensions, weight, color and origin for every piece.
Real availabilityActive button = piece in stock. No exceptions.
Protected paymentCredit cards and PayPal — see below.

Offer cards

Active offer

Yellow Sapphire

$650 → $600 — while the last unit lasts.

1 UNIT · NO HOLDS
Shipping

Free over $300

Applies automatically when the cart passes the amount.

NO CODE NEEDED
Gift

Gift box included

Every order arrives in the same packaging MV Gems already uses.

NO EXTRA COST
ⓘCondition of use. Each offer carries a verifiable condition in its footer (one unit, no code, no cost).
10 — Spec sheet · for the product page

Real data, with the visual weight of a report.

This pattern does not invent a certification, but it treats the gem’s real data with the seriousness of one, for the day it exists.

Hebei Peridot — real catalog photo
Hebei Peridot
Spec sheet
Item IDMVG-0004
Dimensions9.1 × 7.4 mm
Weight4.20 ct
ColorVivid green
ShapeOval
CutBrilliant
EnhancementNone
OriginHebei, China
Illustrative example of the visual pattern — the real values are filled in for each piece. It does not represent an issued laboratory certification.
100% Natural Gemstones 14-Day No-Hassle Return Policy Quick Shipping

Why mono and why a double rule

The JetBrains Mono fields and the double-rule frame (gold border + an inner hairline at 6px) borrow the language of a real gemological report without pretending one exists. It looks precise because the data is real, not because the design disguises it.

Field order

Item ID · Dimensions · Weight · Color · Shape · Cut · Enhancement · Origin · GIA Certified (only if applicable). At the bottom of each description go three promises with an icon: 100% Natural Gemstones, 14-Day No-Hassle Return Policy and Quick Shipping (gem, return arrow and truck).

▲The values in this example (ID, measurements, 4.20 ct, oval) are illustrative. The component footer must stay visible as long as no laboratory report exists; the “GIA Certified” row only appears when the piece has one.
11 — Gift card

It closes the sale for someone who does not know which gem to pick.

A loose gem is a personal purchase: the giver rarely gets the color or cut right. The gift card turns that doubt into a sale today and lets the recipient choose their own stone.

Interactive · pick an amount
MV GemsGift card
$100
MVG-GIFT-XXXXXX · no expiration

The gift card is delivered instantly by email. The code in the example is a placeholder, not a real code.

The gift card is the only object with a gradient in the system (black → deep gold): it is a physical object, not an interface surface.

12 — Payment methods

All the major methods, not just PayPal.

Every method visible at first glance is one less reason to abandon the cart.

We accept:Credit cardPayPalApple PayGoogle Pay

Legal notice before paying

Right before the payment is completed, the buyer confirms with a checkbox that they accept the terms and the return policy. With the box unchecked, the payment buttons stay inactive. Try it:

Checkout · last step
▲Which methods are shown depends on what the payment provider enables. If one is not enabled, it is removed from this row; a method that does not work is never shown.
14 — Cart, pop-up & micro-moments

The small things that keep someone from leaving.

These components are shown static, and you can open them for real with the buttons.

Try them

Cart (side panel)

Welcome pop-up

Chat & mobile sticky bar

Questions about the cut or the real color of a piece? Message us.
01Pop-up: once, never on loadIt appears after 4 seconds and is saved in sessionStorage: once per visit. It closes with ✕, a click outside or Esc. The discount in the example is illustrative.
02Chat: only if someone is on the other endA bot or a dead icon breaks the same trust the system is trying to build. It is turned on only if a real person is answering.
03Sticky bar: mobile only, after the heroIt appears once the hero is scrolled past on screens under 760px and repeats the main action.
04Cart: a panel, not a pageAdding an item opens the side panel (380px, max 92vw) without taking the buyer away from the piece. “Checkout” stays inactive until the checkout is designed.
15 — Motion & interaction

Content doesn’t move; it only responds.

01Always visible at restNo block starts at opacity:0 waiting for an IntersectionObserver. If it animates, it starts visible and is reinforced.
02Hover is decoration, not a requirementEvery hover state has a touch equivalent; nothing is mouse-only.
03Transitions of 150 to 250 msNeither instant nor slow. Only cheap properties: color, border, shadow, transform, opacity.
04Respects “reduce motion”With prefers-reduced-motion all transitions drop to 0.01 ms, without exception.

Durations in use

DurationComponentProperty
150 msNavigation links, chips, gift card amounts, “Add” buttoncolor · border · background
180 msButtonsbackground · color · border · 1px shift
200 msProduct card · cart overlayshadow + 2px up · opacity
250 msCart panel · mobile sticky bartranslate
Real hover
Hover or tap:
Card
lifts 2px
ⓘNo autonomous animation. Nothing plays on its own: everything is still on load and only responds to the mouse or touch.
16 — Accessibility

Measured on the real CSS, not estimated.

The tables below are calculated in your browser from the tokens and the elements of this very page. WCAG 2.1 thresholds: 4.5:1 for text, 3:1 for hairlines and interface.

Contrast of real pairs

Pair (text on background)WhereRatioThresholdResult

Touch targets measured on this page

The rule is 44×44 px minimum. This is what each control measures:

ControlHeightWidthMeets 44 px?

Built in

Visible focus2px deep-gold outline on buttons, chips, icons and the chat bubble
Labelsaria-label on cart, close, chat, email field and “Remove” per piece
Languagelang="en" on the document
Motionprefers-reduced-motion cancels transitions
Alt textEvery photo carries the name of the piece

To resolve when building: focus trap and focus return when closing the cart and the pop-up; role="dialog" and aria-modal on both; a “skip to content” link; a single <h1> per page.

17 — Voice & copy

Precise, warm and without extra ornament.

The tone is that of a jeweler who knows every piece: says what they know, does not promise what they cannot prove.

Do

“Active button = piece in stock. No exceptions.”
“One unit, a reduced price, a verifiable condition.”
“Item ID, dimensions, weight, color and origin for every piece.”
Concrete data: 4.20 ct · 9.1 × 7.4 mm
Direct verbs: Add · Buy gift card · View collection

Don’t

Countdowns or “Last hours!”
“374 people viewing this” or any other invented social proof
“100% authentic” without a certificate to back it up
Empty superlatives: “the best gems in the world”
Testimonials without a date, product or way to verify them
ⓘLanguage. The text is in English, the primary language for the U.S. market, in US dollars. Product names are kept as in the catalog.
Questions about the cut or the real color of a piece? Message us.