Content Page Template (Font: Crimson Text)

This page is the reference for every design decision on corsetmaking.com: colors, button pairings, fonts, sizes, headings, and reusable content patterns. Everything here comes from :root tokens in corsetmaking.css. New content, templates, and Flex Components should use these tokens and classes only. If something you need isn't here, flag it before adding a new value.

Last updated: 2026-10-29 (text on photos / dark panels tokens). Contrast ratios are WCAG 2.1: 4.5:1 minimum for normal text, 3:1 for large text and UI borders.


H1: Page Title (rendered by the page shell, not editable here)

Font: var(--font-accent) (Crimson Text), Size: var(--font-size-35), Weight: 600, Color: var(--text-body). This comes from the h1.page-title-header rule and appears above the Header zone on every page using this template.

Class: h1 class="page-title-header"


1. Colors

Brand

--brand-purple (#850d70)
Primary brand color, links, purple buttons. 9.17:1 on white

--brand-magenta (#9b2a76)
Account / login accent. 7.03:1 on white

--brand-gold-accent (#d7b364)
Buttons, borders, backgrounds only - never text

--brand-gold-text (#8a6d3b)
Gold text on white. 4.85:1 on white

--brand-gold-ink (#4a3728)
Dark text on gold backgrounds. 5.63:1 on gold-accent

--brand-charcoal (#474b59)
Content-page paragraphs, mobile panels. 8.68:1 on white

Secondary Gold

--gold-cta-button (#eeb859)
Add to Cart background only

--gold-border-muted (#c19548)
Newsletter input border

Text

--text-body (#3e3e3d)
Default body text. 10.71:1 on white

--text-fine-print (#474747)
Small print. 9.29:1 on white

--text-muted (#4e4e4e)
Secondary copy. 8.32:1 on white

--text-subtle (#707070)
Lightest allowed gray text. 4.95:1 on white

--price-color (#8e5ba0)
Product prices. 5.06:1 on white

Lighter than --text-subtle is never used for text. Breadcrumbs, product codes, mini-basket text, and filter labels all use --text-subtle.

Borders and Surfaces

--border-light (#d1d3d4)
Hairline dividers and card borders (decorative only, 1.5:1)

--border-control (#808080)
Form field and control borders. 3.95:1 on white - never use --border-light for a field

--surface-subtle (#f5f5f5)
Notices, code blocks, light panels

--surface-muted (#e9e9e9)
Flyouts, newsletter bar, nav sub-lists

--overlay-scrim (rgba 0,0,0,0.85)
Modal and lightbox backdrop

On --surface-subtle: --text-body 9.82:1, --text-subtle 4.54:1. --brand-gold-text drops to 4.45:1 on gray surfaces - keep gold text on white.

Text on Photos and Dark Panels

--brand-gold-on-dark (#f6e1a8)
Gold text on dark / department panels. About 16:1 with a dark halo. Never on white (1.3:1)

--text-halo-dark (rgba 0,0,0,0.85)
Halo behind white or gold-on-dark text

--text-halo-light (rgba 255,255,255,0.85)
Halo behind dark text on light panels (Costume, Hat)

Text over a photo or a semi-transparent panel always gets a full halo on all sides: text-shadow: 0 0 1px, 0 0 2px, 0 0 4px in the halo color. WCAG treats a full halo as the text's background. An offset-only shadow (e.g. 2px 2px 1px) does not count. Tested on the homepage hero slider 2026-10-29: Corset panels over white product photos measured white 3.9:1 and gold 1.9:1 without a halo, and pass with it.

Corset panel - no halo (fails)

White text - Gold text

Corset panel - dark halo (passes)

White text - Gold text

Costume panel - light halo (passes)

Dark text

Status

--status-error-text (#a94442)
Errors, out of stock, original (strike-through) price, basket count badge. 5.85:1 on white

--status-error-bg (#f2dede) + --status-error-border (#ebccd1)
Error message box. Text on it 4.53:1

--status-success-text (#3c763d)
Success messages. 5.45:1 on white

--status-success-bg (#dff0d8) + --status-success-border (#d6e9c6)
Success message box. Text on it 4.57:1

Color Roles

Role tokens point at a brand color. New code and Flex Components use the role, so a future color change happens in one place.

Button Building Blocks (do not use directly)

These grays and hover colors are what the button tokens in section 3 are built from. Use the --btn-* tokens instead of these.

--hover-magenta (#ca2daf)

--hover-gold-light (#fed375)

--hover-gray-checkout (#e3e3e3)

--hover-gray-logout (#d0d0d0)

--btn-preorder-bg (#e57669)

Other Grays (existing uses only)

Kept so existing rules keep working. Not for new content - pick a Text, Surface, or button token instead.

--gray-btn-dark (#484848)

--gray-nav-active (#444444)

--gray-footer-contact (#373737)

--gray-form-label (#363636)

--gray-footer-newsletter (#605f5e)

--gray-tree-link (#5f5f5f)

--hover-gray-password (#8c8c8c)

--hover-gray-search (#adadad)

Department Colors

Corset, Bra, Hat, Steampunk, Leather, and Costume each have their own accent colors, used for department-tinted backgrounds and text (About page department blocks, homepage category background). These are a deliberate exception to the token system - they're hardcoded per department in corsetmaking.css and could be tokenized later if the need arises.

See: claude/cms-department-colors-reference-2026-09-25.md (Project Files)

Corset - Color 1 (rgb(133, 82, 125))

Corset - Color 2 (rgb(157, 99, 153))

Bra - Color 1 (rgb(197, 77, 112))

Bra - Color 2 (rgb(230, 65, 116))

Hat - Color 1 (rgb(0, 154, 190))

Hat - Color 2 (rgb(0, 190, 233))

Steampunk - Color 1 (rgb(119, 16, 0))

Steampunk - Color 2 (rgb(133, 30, 0))

Leather - Color 1 (rgb(35, 31, 32))

Leather - Color 2 (rgb(14, 14, 14))

Costume - Color 1 (rgb(223, 127, 32))

Costume - Color 2 (rgb(255, 135, 0))


2. Accessibility: Old vs. New

Each pair shows a value that failed WCAG AA (left) and its replacement (right). The old values are shown for reference only - never reuse them.

Gold Text (2026-08-23)

OLD - #d7b364 as text color - 2.00:1 (fails)

Sample Gold Text

Smaller sample gold text for links or labels

NEW - var(--brand-gold-text) - 4.85:1 (passes)

Sample Gold Text

Smaller sample gold text for links or labels

Light Gray Text (2026-10-26)

OLD - examples of retired grays (all fail)

Home > Corset Making > Busks - breadcrumbs, #a3a3a3, 2.52:1

Product code CM-123 - #afafaf, 2.19:1

Product name in a category list - #7d7d7d, 4.12:1

NEW - var(--text-subtle) - 4.95:1 (passes)

Home > Corset Making > Busks - breadcrumbs

Product code CM-123

Product name in a category list

Status Red (2026-10-26)

OLD - #ff0000 - 4.00:1 (fails)

Out of stock - $24.95

NEW - var(--status-error-text) - 5.85:1 (passes)

Out of stock - $24.95

Gold Buttons (2026-10-26)

OLD - white text on gold - 2.00:1 (fails)

Checkout

NEW - var(--btn-gold-text) on var(--btn-gold-bg) - 5.63:1 (passes)

Checkout

3. Buttons

Every button on the site uses one of these seven styles. Each style is a tested pair: background, text, hover background, and hover text are set together as --btn-[style]-bg / -text / -hover-bg / -hover-text (outline styles add -border). Pick the style by purpose, then use its tokens - never mix one style's background with another style's text.

Purple Purple - hover

purple - the main action on a page: log in, create account, save, submit, return, estimate shipping, continue shopping. Text 9.17:1, hover 4.66:1. Tokens: --btn-purple-*. Class: a class="content-page-button-secondary"

Purple Outline Purple Outline - hover

purple-outline - smaller actions inside cards and lists: View Order, Reorder, Make Default pills. Text 9.17:1, hover 9.17:1. Tokens: --btn-purple-outline-*. Class: a class="content-page-button-purple-outline"

Gold Gold - hover

gold - moving the order forward: Checkout, Continue, Complete Order, account destinations (My Orders, Wishlist), Save, newsletter Sign Up. Text 5.63:1, hover 14.79:1. Tokens: --btn-gold-*. Class: a class="content-page-button-primary"

Update Update - hover

gold-outline - quantity Update in the basket (switches to solid gold when the quantity has changed). Text 4.85:1, hover 14.79:1. Tokens: --btn-gold-outline-*. Class: a class="content-page-button-gold-outline"

Add to Cart

cart - Add to Cart only. Text 6.23:1. Tokens: --btn-cart-bg / --btn-cart-text. Class: a class="content-page-button-cart"

Neutral Neutral - hover

neutral - lesser or utility actions: Email Password, Log Out, Save Cart for Later, Delete Entire Cart. Text 8.34:1, hover 13.62:1. Tokens: --btn-neutral-*. Class: a class="content-page-button-neutral"

Pre-Order

preorder - pre-order products only. Deliberately different from every other button so shoppers notice it. Text 7.13:1. Tokens: --btn-preorder-bg / --btn-preorder-text. Class: .button-preorder (added to the Add to Cart button); sample class a class="content-page-button-preorder"

The first sample in each row is a live button - mouse over it (or Tab to it) to see the real hover and focus ring. The "- hover" samples are static pictures of the hover state for quick comparison. Cart and Pre-Order have no hover change. Image buttons (PNG files, e.g. in the header mini-basket flyout) are not part of this system yet - see Found in the Wild.

4. Font Families

--font-primary: Montserrat, sans-serif

Primary UI and body typeface. Role alias: --font-heading-family, --font-ui-family

--font-secondary: Open Sans, sans-serif

Navigation, breadcrumbs, category listings. Role alias: --font-body-family

--font-accent: Crimson Text, serif

Headings and display only (page titles, cart flyout headings). Role alias: --font-accent-family

Usage: style="font-family:var(--font-primary)" (or --font-secondary / --font-accent). Never type a font name directly.

Font Weights

Loaded weights (Head Tag Content, since 2026-10-28): Montserrat 400 / 500 / 600 / 700, Open Sans 400 / 600 / 700, Crimson Text 400 / 600 regular and italic (italic added 2026-10-29). Any other weight or style is faked by the browser, so stick to these. Italic is loaded for Crimson Text only. Bold text in content (b, strong) is semi-bold (600); content-page H3 / H4 / H5 are 600. Save 700 for short labels, badges, and status text that must stand out.


5. Font Size Scale

The 10 sizes below are the only font sizes in use on the site. There is no 13px, 15px, 17px, 19px, 22px, or 24px step - use the nearest step, or flag a new one before adding it.

Minimum Sizes (Typography Pass 2, 2026-10-28)

Sizes in Use

--font-size-12 / --font-size-xs (12px) - The quick brown fox jumps over the lazy dog

Labels, badges, captions, fine print only

--font-size-14 / --font-size-sm (14px) - The quick brown fox jumps over the lazy dog

Minimum for anything read or clicked

--font-size-16 / --font-size-md (16px) - The quick brown fox jumps over the lazy dog

Long reading - paragraphs, lists, form fields

--font-size-18 / --font-size-lg (18px) - The quick brown fox jumps over the lazy dog

--font-size-20 / --font-size-xl (20px) - The quick brown fox jumps over the lazy dog

--font-size-25 / --font-size-2xl (25px) - The quick brown fox jumps

--font-size-30 / --font-size-3xl (30px) - The quick brown fox

--font-size-35 / --font-size-4xl (35px) - The quick brown

--font-size-50 (50px) - The quick

--font-size-60 (60px) - Quick fox

Named sizes (xs to 4xl) are the same names and values as the Delicious Boutique site. Either name works - var(--font-size-14) and var(--font-size-sm) are the same size. 50 and 60 keep their number names only.

Usage: style="font-size:var(--font-size-sm)" or style="font-size:var(--font-size-14)". Role aliases for common cases: --font-body-size-sm / -md / -lg (14 / 16 / 18), --font-heading-size-sm / -md / -lg / -xl (18 / 20 / 25 / 30), --font-ui-size-sm / -md (12 / 14), --font-accent-size-sm / -md / -lg (16 / 25 / 30).

Retired Sizes - Do Not Use

--font-size-10, --font-size-11, --font-size-13, and --font-size-17 are still defined in :root so older templates and components don't break, but nothing in corsetmaking.css uses them anymore. Use 12 (labels only) or 14 in place of 10 / 11 / 13, and 16 or 18 in place of 17. They will be removed after the template and Flex Component audit.


6. Heading Scale

Content-page headings (classes below) and the page-type headings used by store templates. Use the content-page classes for anything you write; the store-template headings are listed so new templates and components match them.

Level Class Family Size Weight / Color Phones
H1 - page titlepage-title-header--font-accent--font-size-35600 / --text-bodysame
H2content-page-header--font-primary--font-size-20normal / --text-bodysame
H3content-page-subheader--font-primary--font-size-18600 / --text-bodysame
H4content-page-header-4--font-primary--font-size-16600 / --text-bodysame
H5content-page-header-5--font-primary--font-size-14600 / --text-bodysame
H6content-page-header-6--font-primary--font-size-12700, uppercase / --text-mutedsame
Product name (PROD H1)product-page-product-name--font-primary--font-size-25normal / --text-bodysame
Category name (CTGY H1)category-page-category-name-header--font-secondary--font-size-25normal / --text-bodysame
Department heading (category pages)e.g. div.dept-color1-bg h1inheritedinheritedinherited--font-size-20 (480-767px)
Order login page titleorder-login-page-header-text--font-primary--font-size-25600 / --text-body--font-size-20 (767px and below)
Checkout / account section (H2)e.g. ocst-page-fieldset-wrapper h2--font-primary--font-size-25normal / --text-body--font-size-20 (479px and below for checkout, 767px and below for account); address heading --font-size-18 at 400px and below

When to Use Each Level

Phones: content-page headings keep the same size on phones. Store-template headings that shrink are listed in the Phones column; none go below 16px. Flex Component content headers drop from 18 to 16 at 767px and below. Check every heading at 375px wide - headings should not wrap awkwardly on phones.

This is an H2

Class: h2 class="content-page-header"

This is an H3

Class: h3 class="content-page-subheader"

This is an H4

Class: h4 class="content-page-header-4"

This is an H5

Class: h5 class="content-page-header-5"

This is an H6

Class: h6 class="content-page-header-6"


7. Paragraph / Body Text

This is standard content-page-paragraph text. Font: var(--font-primary), Size: var(--font-size-16), Color: var(--brand-charcoal). Here is a paragraph with a link to a category page, showing the default in-paragraph link and its gold hover.

Class: p class="content-page-paragraph" (16px since 2026-10-28; lists use the same size)

This is content-page-quote-paragraph, an italic inline variant used for pull-quotes within body copy.

Class: p class="content-page-quote-paragraph"


8. Link Styles

Use one of these named link styles instead of an unstyled link. An unstyled link falls back to Bootstrap's default blue (#337ab7), because no site-wide base link color is set yet. New Flex Components use the role tokens --link-color / --link-hover (section 1).

Gold link, no underline, stays gold on hover

Class: a class="content-page-link-gold" (matches the site's telephone-link / email-link pattern). 4.85:1

Default-color link, turns gold on hover, never underlined

Class: a class="content-page-link-gold-hover" (matches the standard in-paragraph link shown above)

Gold, underlined link, fades to muted gray on hover

Class: a class="content-page-link-underline" (matches the "Read More" link pattern)

Purple link using the --link-color role token

Style: color:var(--link-color), hover var(--link-hover) - the standard for new Flex Components. 9.17:1

Unstyled link (Bootstrap default blue) - legacy look, avoid for new content

No class - this is what you get by default, seen in older custom field content and the basket "Save to Wishlist" link. 4.56:1

Opening in a new tab: add target="_blank" to any link, regardless of which style class it uses. Example: a href="..." target="_blank" class="content-page-link-gold". Seen in use on the Technical Specs custom field pattern in section 13, for a full-scale sizing chart image.

9. Blockquote

Corsetmaking is equal parts engineering and artistry. Every pattern piece has a purpose. Example attribution line

Class: blockquote class="content-page-blockquote" (with an optional cite tag inside for attribution)


10. Code / Pre

Inline code example: --font-size-14 renders using the content-page-code class.

Class: code class="content-page-code"

.my-new-button {
background-color: var(--btn-gold-bg);
color: var(--btn-gold-text);
font-family: var(--font-primary);
font-size: var(--font-size-16);
}
.my-new-button:hover {
background-color: var(--btn-gold-hover-bg);
color: var(--btn-gold-hover-text);
}

Class: pre class="content-page-pre"


11. Lists

Unordered List

Class: ul class="content-page-ul"

Ordered List

  1. Cut fabric pieces from pattern
  2. Sew panels together
  3. Insert boning channels

Class: ol class="content-page-ol"


12. Tables

Boning Type Flexibility Good For
Spiral Steel Bends in two directions Curved seams, waist and hip panels
White Steel Bends in one direction Straight channels, center front and back

Markup: div class="table-responsive" wrapping table class="table table-striped table-hover" (native Bootstrap classes). The wrapper adds horizontal scroll on phones - always include it.


13. Images and Reusable Content Patterns

Banner Image (full-width)

Corset Making Supplies logo

Class: div class="content-page-banner-image"

Inline / Product Image (centered, capped width)

Placeholder image

Class: div class="content-page-image-container"

Image Upload Sizes

Use Size Notes
Hero slider (homepage / department)1920 x 960 (2:1)Master image. Replaces the legacy 1062 x 475 (most live heroes are about 1062 x 500). Rolled out department by department. One master serves desktop and mobile - CSS crops it per screen size.
Product images1500 x 1500 (1:1)Source upload. Displayed at 515 x 515 on the product page and 800 x 800 in the enlarged pop-up. Optional 2000 x 2000 for texture-critical lines (fabrics, hardware finishes). Replaces 1001 x 1001.
Category tiles - featured and non-featured, department categories, promo / hub tiles, product-grid link cards800 x 600 (4:3)One master standard for every category-type tile. Replaces 400 x 280 (featured) and 231 x 172 (non-featured). CSS crops the master to each tile shape.
Content rows (cms-content-row) - centered and side-by-sideReuse 800 x 600 (4:3) or 1500 x 1500 (1:1)No separate size. Use the component's Image Aspect Ratio and Focus Point settings to crop.
Content rows - banner / full-widthReuse the hero master, 1920 x 960 (2:1)Don't use 1:1 product images here - they crop too heavily.
Tutorial / blog step photos (cms-tutorial-step)1200px on the long side (portrait default 675 x 1200)JPG, quality 82. Displayed capped at 560px tall (480px on mobile) with Natural fit. No duplicate crops of the same photo.
Size charts (Technical Specs tab)No fixed sizeLink + img-responsive pattern below, opens full size in a new tab.
Seasonal accent stripsAbout 12:1, canvas about 2x the theme's Strip HeightPNG-24 with transparency, zero margins, 5-8 complete repeat units per tile, seams cut in the gaps between repeats (never through a motif).
Footer "floor" motifs-Put the motif baseline near the bottom edge of the canvas so it rests on the newsletter bar border.

Legacy sizes still under review (from the 2014 spec, not yet updated for high-resolution screens): top-level category circles 200 x 200 (PNG-24, 4px white inside stroke, /Merchant2/graphics/storeswap), top-level category background 1062 x 475, testimonial background 1058 x 310, content page image 297 x 219, product tab images 300 x 300.

Never overwrite an image in place. Cloudflare caching (managed by Miva) can keep serving the old file for a long time. Upload changed images under a new name (e.g. -v2) and update the reference. Always use absolute paths (/Merchant2/graphics/...) - see the path note below.

Tutorial Link + Responsive Image (Product Custom Field)

Used in the "Tips & Tutorials" product custom field, rendered as a collapsible accordion panel on PROD pages (alongside Overview, Technical Specs, and Reviews). Pattern: a plain text link, followed by a separately link-wrapped image using img-responsive (Bootstrap's native responsive-image class). Tutorials now live at /miy/[slug].html.

Learn How to Set a BuskSetting a busk

Markup: a href="..." (link text), then a href="..." img class="img-responsive" (image)

Path note: relative image paths (graphics/...) work in the real Tips & Tutorials custom field because PROD page templates include a base href tag. The Content Page Template used for this page has no base href tag, so relative paths break here. Use the absolute /Merchant2/graphics/... path everywhere so the same markup works in every template and custom field.

Technical Specs Variant (Opens Full-Scale in New Tab)

A variant of the same pattern, used in a Technical Specs custom field, where the link text itself is the caption and target="_blank" opens the full-size chart image in a new tab.

Click the chart to see it in full-scaleSizing chart

Markup: a href="..." target="_blank" (caption link), then a href="..." target="_blank" img class="img-responsive" (image)

Product Page Accordion Sections

The Overview, Technical Specs, Tips & Tutorials, and Reviews sections on PROD pages use div.product-page-section-toggle for the collapsible toggle row.

Class: div class="product-page-section-toggle"

Sizing Table - Legacy vs. Recommended

Older product custom fields (e.g. the 1864 Spanish Jackets sizing table) hand-code tables with inline colors that predate the token system. Don't copy the colors from this one; it's shown for reference only and will phase out as those products are discontinued or updated. The recommended version uses the standard table classes from section 12.

Legacy version (as found, do not reuse colors):

Sizing A B C
Bust 30" 32" 34"

Recommended modern version (copy this for new sizing tables):

Sizing A B C
Bust 30" 32" 34"

Markup: div class="table-responsive" wrapping table class="table table-striped table-hover"


14. Form Elements

Classes: label class="content-page-form-label" (labels, with for= matching the field id) + input/select class="form-control" (native Bootstrap for fields, checkboxes, and radios). Every typed field and dropdown on the site is 16px - set once in corsetmaking.css, so don't set a smaller size on a field.


15. Muted / Fine-Print Text

This is content-page-text-muted (var(--text-muted), 14px, Open Sans). Used for secondary/supporting copy.

Class: p class="content-page-text-muted"

This is content-page-text-fine-print (var(--text-fine-print), 12px, Open Sans). Used for disclaimers and small print - not for anything a shopper needs to act on.

Class: p class="content-page-text-fine-print"


16. Notice / Callout Boxes

This is a default notice box, for general callouts.

Class: div class="content-page-notice" (background var(--surface-subtle), purple left border)

This is a success notice box.

Class: div class="content-page-notice notice-success"

This is an error notice box.

Class: div class="content-page-notice notice-error" (left border var(--status-error-text))

This is a system success message (store-generated).
This is a system error message (store-generated).

Classes: cssui-information-message / cssui-error-message - Miva system messages, using the --status-* background, border, and text tokens


17. Found in the Wild (not part of the system)

Values and patterns still on the site that aren't tokenized. Don't copy them into new work. Each is listed with what to use instead.