Audited from catalenahatters.com

Catalena Hatters
Design System

The visual language of a Texas custom hat shop, captured from the live store and rebuilt as tokens and components so research pages and redesign work start from the same ground.

Source
catalenahatters.com, Shopify Turbo theme 2.0.10
Audited
6 September 2026
Fonts
Old Standard TT, Lora, Oswald
Entry
design-system/css/catalena.css
Tokens
design-system/tokens.json

Brand

Catalena Hatters has made felt hats by hand in Bryan, Texas since 1983. The site speaks in the shop's own voice: uppercase serif titles like a hat-box label, condensed sans for wayfinding, warm cream grounds and one gold that reads as a hat band. Photography of the workshop and the hats does the persuading.

Logo assets/logo.png
Catalena Hatters primary logo, dark ink on cream Small line drawing of a cowboy hat used as a section divider

Primary mark at 96px in the header, 48px when sticky, 104px in the footer. The hat glyph sits on the section-title rule.

Principles
  • By hand, one at a time. Nothing glossy. Square corners, hairline rules, honest photography, no gradients.
  • Photography leads. Full-bleed workshop and product images carry the story; type sits on top in a translucent box or on cream.
  • Serif titles, condensed utility. Old Standard TT in uppercase for anything that names a thing; Oswald for anything you click or scan.
  • Gold is for action and price. Buttons, prices, hover states and the cart. Never for large fills or backgrounds.

Color

Warm neutrals from cream to ink, one gold accent in three strengths, and a small set of signals. Raw values are named after felt and paper; components only ever reference the semantic roles.

Neutrals

  • White#ffffff--cat-whiteInner-page ground, cards, inputs
  • Cream#f7f6f1--cat-creamHomepage ground, nav, callouts
  • Parchment#efede6--cat-parchmentFooter, secondary bands
  • Linen#e4e3dd--cat-linenActive tab rule, subtle fills
  • Sand#dcd8ce--cat-sandHairline borders and rules
  • Pebble#d8d7d3--cat-pebbleInput borders
  • Stone#6f6a62--cat-stoneMuted text, AA-safe (replaces #96948f)
  • Walnut#474138--cat-walnutBody copy, outline buttons
  • Bark#3d3a36--cat-barkTop bar, nav text, footer text, overlays
  • Ink#32312e--cat-inkHeadings

Accent and signals

  • Gold#e3ab3d--cat-goldButtons, prices, links, cart, badges
  • Gold dark#c69536--cat-gold-darkButton hover
  • Gold deep#cd9a38--cat-gold-deepLink hover, current page, focus ring
  • Gold text#8f6a1f--cat-gold-textSmall gold text when AA contrast is required
  • Red#cc3a2b--cat-redSale price, errors, required marks
  • Green#3f6b3a--cat-greenSuccess notices (added for redesign)

Felt colors

The eleven felt colors a customer chooses from on the product page. Swatches are approximations of the shop's samples and exist so option pickers, filters and guides can show color instead of a dropdown label.

  • Black--felt-black
  • Chocolate--felt-chocolate
  • Dark Belly--felt-darkbelly
  • Saddle Tan--felt-saddle-tan
  • Dark Grey--felt-dark-grey
  • Steel Grey--felt-steel-grey
  • Medium Grey--felt-medium-grey
  • Silvermist--felt-silvermist
  • Silverbelly--felt-silverbelly
  • Bone--felt-bone
  • Natural--felt-natural

Contrast

PairRatioWCAG AA textNote
Walnut on white10.1 : 1PassBody copy
Ink on cream12.0 : 1PassHeadings
Cream on bark10.5 : 1PassTop bar, overlays
Gold on white2.1 : 1FailPrices and links on the live site
White on gold2.1 : 1FailButton labels on the live site
Gold text (#8f6a1f) on white4.9 : 1PassRecommended for small gold text
Ink on gold6.2 : 1PassRecommended button label color
Stone (#6f6a62) on white5.4 : 1PassMuted text; the live site's #96948f is 3.0
Red on white5.0 : 1PassSale, errors

Add data-contrast="aa" to the html element to switch link, price and button-label roles to the passing values without touching any component. The toggle in the Accessibility section does this live.

Typography

Three Google Fonts, each with one job. Old Standard TT is always uppercase when it names something and italic when it quotes someone. Lora carries paragraphs and prices. Oswald handles anything you scan or click, uppercase with a touch of tracking.

Old Standard TTDisplay · 400, 400 italic, 700
--font-display
Headings, product titles, logo type, testimonials, footer headings

By hand.
One at a time.

LoraBody · 400, 400 italic, 700
--font-body
Running text at 15px / 1.6, prices, descriptions, footer links

We take pride in making quality custom hats that look right, feel right, and are shaped right for every customer.

OswaldUtility · 300, 400, 500
--font-ui
Navigation, buttons, labels, badges, breadcrumbs, table headers

Custom felt hats · Find your fit · Add to cart

Scale

  • Display--text-6xl · 52px · 1.0

    World-class quality

  • Product title / banner--text-5xl · 42px · 1.25

    Silverbelly Cutter

  • Quote--text-4xl · 28px · italic

    “Without a doubt, the best in the business.”

  • H1--text-3xl · 24px · 1.25

    Custom felt hats

  • H2 section title--text-2xl · 22px · 1.5

    Every style. Every fit.

  • H3--text-xl · 20px

    10X, starts at $389

  • H4--text-lg · 18px

    Related items

  • H5 / H6--text-md · 16px
    Customer service
  • Body--text-base · 15px · 1.6

    Silverbelly Cutter crease with a medium set brim. Shown with a matching two-cord ribbon. Use the options below to customize this hat to your liking.

  • Small--text-sm · 13px

    Crown height 5 3/4" (standard). Brim length 4" (standard). Hat band: 2-cord ribbon.

  • Nav / button--font-ui · 14px · +0.07em

    Custom felt hats   Rodeo King felt   Straw hats   Kids hats   Find your fit

  • Label / top bar--font-ui · 12px · +0.07em

    Hat color*   Brim length*   833-430-HATS

Spacing

A 4px scale. The live theme mixes 10, 15, 20, 25, 30 and 40px; these snap to the nearest step. Sections breathe at 40px on phones and 64px on desktop, with a 96px option for the biggest bands.

  • --space-14px
  • --space-28px
  • --space-312px
  • --space-416px
  • --space-520px
  • --space-624px
  • --space-832px
  • --space-1040px
  • --space-1248px
  • --space-1664px
  • --space-2080px
  • --space-2496px

Control sizes

TokenValueUsed by
--size-control42pxInputs, selects, buttons, newsletter form
--size-control-sm34pxHeader search, pagination, small buttons
--size-control-lg52pxAdd to cart on product pages
--size-topbar40pxUtility bar and the gold cart block
--size-header / -sticky106px / 66pxLogo row at rest and when scrolled
--size-tap-min44pxMinimum touch target on mobile

Layout

A 1200px container with 20px gutters, matching the theme's 16-column skeleton at desktop, expressed here as a 12-column CSS grid. Photography sections break out to the viewport edge; content sections stay in the container.

Breakpoints

  • sm · 480pxLarge phones
  • md · 768pxTablets: two-up layouts, gutters widen to 20px
  • lg · 960pxDesktop nav appears, four-up product grid
  • xl · 1200pxContainer reaches full width
  • 2xl · 1400pxWide container for photo-led pages

Grid

12 columns .grid .col-*
3
3
3
3
4
8
6
6

Columns are full-width under 768px. .cols-2, .cols-3, .cols-4 give equal columns that collapse sensibly; .product-grid is 2 → 3 → 4 across; .split is the two-up photo-and-copy layout; .with-sidebar is the collection page.

Buttons

Oswald, uppercase, 42px tall, square corners. Gold fill is the one primary action on a page. Outline buttons sit on cream and photography. The hover shifts the gold darker rather than adding a shadow.

Variants .c-button
On photography .c-button--outline-light
Rule button .c-button--rule

The cart's quiet secondary action: text between two hairlines, full width.

<button class="c-button">Add to cart</button>
<a class="c-button c-button--outline" href="/collections/all">View all</a>
<a class="c-button c-button--outline-light" href="#">Quick shop</a>
<button class="c-button c-button--block c-button--lg">Add to cart</button>

Forms

Every custom hat is an eight-field form, so inputs matter. Labels are Oswald 12px uppercase; fields are 42px white boxes with a pebble border that darkens on focus. Required marks are red. Guide links sit under the field in bold Lora.

Product options .c-field .c-select .c-input .c-textarea .c-checkbox
View hat color guide
Choose a size. Not sure? Use the size chart.
Other options
Have a photo of a hat you want yours to look like?

Upload the photo here

Inline form and search .c-inline-form .c-search
Notices .c-notice

Custom felt hats take 6 to 8 weeks. We'll email you when yours is on the block.

Added to cart. Silverbelly Cutter, 20X, size 7 1/4.

We couldn't add this hat. Choose a head oval shape and try again.

Wayfinding

Breadcrumbs in Oswald with gold slashes, page titles underlined by a full-width hairline, and the centered section title with the hat glyph resting on its rule.

Breadcrumb + page title .c-breadcrumb .c-page-title
  1. Home
  2. Custom felt hats
  3. Page 1 of 3

Custom felt hats

Section title with hat .c-section-title.c-section-title--hat

Every style. Every fit.

Authentic straw hats, custom fit for you

The hat version is for cream sections; the plain version (no glyph) is used on white brand-logo sections, matching the live site.

Tabs + pagination .c-tabs .c-pagination

Commerce

The product card is the most repeated object on the site: square photo, uppercase serif name, gold price with an italic "from" when the quality grade changes the price. Hover darkens the photo and offers a quick shop.

Product grid .product-grid .c-product-card
Price, badges, swatches .c-price .c-badge .c-swatch

from$389.00

$339.00$389.00

New Sale Sold out Made to order

Swatches are new; the live site uses a dropdown for hat color. They're here for the redesign.

Brand and collection tiles .c-tile

Brand logos are third-party artwork and are stood in for by their names here. On the live site the tile is the maker's logo on white with the name beneath.

Product page

Gallery left, summary right. The summary stacks vendor, a 42px title over a hairline, the price row with the guide link, description with a bold spec list, then the option form and a full-width add to cart.

Product summary .c-product-summary .c-spec-list
Bone Gus felt hat photographed from the front on a burlap-covered stand
Catalena Hatters

Bone Gus

Gus crease with a medium set brim. Shown with a braided horsehair band.

The picture shown is sporting these specs:

  • Color: Bone
  • Crown height: 5 3/4" (standard)
  • Brim length: 4" (standard)
  • Hat band: Horsehair

Use the options below to customize this hat to your liking.

Lists & filters

Collection pages put a filter sidebar beside the product grid. Group titles are Oswald 16px; links are Lora with a 9px gold rail marking the active filter.

Sidebar + intro .with-sidebar .c-sidebar .c-collection-intro

Find the style you're after,
then customize it just for you.

Catalena Hatters has been recognized by industry professionals and hat connoisseurs as the best handmade custom felt hat in the world.

Callouts .c-callout

Need help finding the right fit for you?

Use the felt hat guide for quality grades, colors, sizes and head shapes, or call the shop at 833-430-HATS.

Hat restoration quotes are given in person or from photos. Turnaround is 4 to 6 weeks.

Page sections

The homepage is a stack of photo-led bands. Each one is a component that takes an image and a few lines of copy.

Banner with caption .c-banner
Inside the Catalena workshop: hat blocks and pressing machines in a long row

We make our hats the old fashioned way

By hand.
One at a time.

Feature split .c-feature
Silverbelly felt hat with a leather band and silver buckle on a cedar counter

World-class quality

Catalena Hatters has been recognized by industry professionals and hat connoisseurs as the best custom handmade felt hat in the world.

View all
Hatter in a black hat steaming a felt hat at the shop counter

Make your priceless hat like new again

Do you have a hat too sentimental to discard, but too stained or damaged to wear? We are one of only a handful of hat restoration professionals in the world.

Hat restoration
Testimonial band .c-testimonial
Wide view of the shop floor lined with shelves of felt and straw hats
“Only place my husband will take or buy his hats. Two and a half hour drive each time, one way. But so worth it.”

Amy B.

Newsletter band .c-newsletter

Story sections

Added for the redesign homepage (pages/redesign/home.html): the page is the making of one hat. A full-viewport hero, five chapters beside a sticky image stage on the dark ink ground, then a ruled "where do I start?" ledger. Chapter and path titles are sentences, so they stay in sentence case. Photography here is Higgsfield-generated and stands in for the shop's own.

Story hero .c-story-hero with lead-time chip .c-lead-time
A finished silverbelly felt hat on a workbench with hat blocks and an iron press behind it

By hand.One at a time.

Custom felt hats built to your head in our shop on Main Street in Bryan, Texas. Same family, same machines, since 1983.

Build your hatHelp me choose

Made to orderShips in about 8 weeks

Four felt qualities, from $389

On load the photo settles from a 1.06 scale and the lines rise in sequence (--duration-hero, --stagger). The page sets [data-settled] afterwards so scroll-driven transforms can take over. .c-lead-time--light for cream grounds. The lead-time value is a placeholder until the shop confirms it.

Chapters with sticky stage .c-chapters .c-chapter and tier list .c-tier-list
  1. Step one of five. The body

    It starts as a soft cone of fur felt.

    No crown, no brim, no shape yet. The fur decides how the hat wears. We build four grades and we price every one of them plainly.

    • 10X$389100% rabbit. A good first real hat.
    • 20X$549Rabbit and beaver blend.
    • 50X$749Higher beaver blend. Silk lining.
    • 100X$999100% beaver. Lambskin sweatband.

One .c-chapters__frame per chapter; JS sets [data-active] on the frame and aria-current="step" on the index link for the chapter in view. Under 960px the stage is 52svh tall and the text scrolls beneath it. Swatches on this ground use .c-swatch-list--inverse.

Path list .c-path-list .c-path
  • I know my style

    Pick one of 21 creases, choose your felt and color, and build it online in about five minutes.

    Shop custom felt hats
  • Help me choose

    Five questions about where you'll wear it and how often. We suggest a style, a grade and a color.

    Find your fit
  • Bring an old hat back

    Restoration is $255 with return shipping and takes four to six months.

    Start a restoration

A ruled ledger, not cards. The whole row is the link. The action column is fixed at --size-path-link so descriptions line up.

Style strip .c-style-strip of .c-tile

Snap-scrolls horizontally; tiles are --size-style-tile wide.

Fact list .c-fact-list .c-fact and quote .c-quote

Only place my husband will take or buy his hats. Two and a half hour drive each time, one way.

Google review, one of 233 at 4.5 stars

Family owned since
October 1983
Hats made each year
About 4,000
Monday to Friday
9am to 6pm

The fact list doubles as the hours table on the visit block. Only real quotes go in .c-quote.

Page anatomy

How the live pages are assembled, top to bottom, with the component that reproduces each band. Use these as the starting stack for research mockups and as the baseline to redesign against.

Homepage

  1. Top bar.c-topbar
  2. Header + nav.c-header
  3. Promo tiles ×2.c-promo-tiles
  4. Featured products ×12.product-grid
  5. Workshop banner.c-banner
  6. Feature split ×2.c-feature
  7. Testimonials.c-testimonial
  8. Straw brands ×8.c-tile
  9. Newsletter.c-newsletter
  10. Footer.c-footer

Collection

  1. Top bar.c-topbar
  2. Header + nav.c-header
  3. Breadcrumb.c-breadcrumb
  4. Page title + rule.c-page-title
  5. Sidebar filters.c-sidebar
  6. Intro + tiles / cards.c-collection-intro
  7. Pagination.c-pagination
  8. Newsletter.c-newsletter
  9. Footer.c-footer

Product

  1. Top bar.c-topbar
  2. Header + nav.c-header
  3. Breadcrumb.c-breadcrumb
  4. Gallery + summary.c-product-summary
  5. Options form ×8 fields.c-field
  6. Add to cart.c-button--block
  7. Felt hat guide.c-callout
  8. Related items ×4.c-product-card
  9. Newsletter.c-newsletter
  10. Footer.c-footer

Accessibility

The audit found the brand gold failing text contrast wherever it carries small type. The system keeps the brand-faithful mapping by default so research pages match the live store, and offers a one-attribute switch for redesign pages.

Contrast mode html[data-contrast="aa"]
View hat color guide

from$389.00

  1. Home
  2. Products

Everything on this page re-colors when you toggle, because components read --color-link, --color-price and --color-text-on-accent rather than the raw gold.

Findings from the live site

  • Gold text on white is 2.1 : 1. Prices, links, breadcrumbs and vendor names. Use --color-accent-text (#8f6a1f) or the AA mode.
  • White on gold buttons is 2.1 : 1. Ink on gold is 6.2 : 1 and still reads as the brand. AA mode makes this switch.
  • Muted grey #96948f is 3.0 : 1. Replaced by stone #6f6a62 in every token; the old value is kept only as --cat-ash for reference.
  • Focus states were invisible. Base styles add a 2px gold-deep outline on :focus-visible for every interactive element.
  • Top bar links are 12px with 40px rows. Rows already meet the 44px target on tap; keep the hit area, not the type size.
  • Product cards link twice. The card component makes the title the single link and stretches it over the whole card.
  • Motion. Hover overlays and image zooms respect prefers-reduced-motion and are disabled on touch devices.

Usage

Drop the entry stylesheet and the Google Fonts link into any page, then compose from the component classes. Nothing in the system depends on Shopify; the same CSS works in plain HTML, Liquid sections or a Next.js page.

<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Old+Standard+TT:ital,wght@0,400;0,700;1,400&family=Oswald:wght@300;400;500&family=Lora:ital,wght@0,400;0,700;1,400&display=swap">
<link rel="stylesheet" href="design-system/css/catalena.css">

<body class="page--cream">                 <!-- cream ground like the homepage -->
<html data-contrast="aa">                  <!-- optional: AA-safe gold text -->

Files

design-system/
├─ css/tokens.css      every value, one place
├─ css/base.css        reset + element defaults
├─ css/layout.css      container, grid, sections
├─ css/components.css  the c- classes
├─ css/catalena.css    entry (imports the four)
├─ tokens.json         W3C tokens for Figma / tooling
├─ assets/             logo, hat glyph, reference photos
├─ DESIGN-SYSTEM.md    the written guide
├─ index.html          this page
└─ build.py           bundles this page into dist/

Rules

  • Tokens only. No hex codes or pixel values in component or page CSS. If a value is missing, add it to tokens.css first.
  • One semantic class first. Every wrapper gets a descriptive class before anything else; component roots use the c- prefix, inner parts use __, variants use --.
  • Compose, don't restyle. Build pages from the components; extend with a modifier rather than overriding in page CSS.
  • Photography first. Every band needs a real image with real alt text. Never ship a placeholder gradient where the store would show a hat.