IronShield Army | Design System | v2.0 | April 2026
Forged tokens.
Resin-detailed UI.
Reference library and cheat-sheet for styling ironshieldarmy.com. Every token has a CSS variable, an exact value, a clear purpose, and a ready-to-paste snippet.
00 How to use
Reading the cheat sheet
Every token below is also a real CSS custom property loaded globally at assets/ironshield-ds-tokens.css. Reference it by variable name in any Liquid section or snippet no imports needed.
/* In any section.liquid or snippet */ .my-hero-title { font-family: var(--ish-font-display); /* Inter Bold 700 */ font-size: var(--ish-text-display); /* fluid clamp(2rem, 1.3rem + 2.8vw, 3.5rem) */ color: var(--ish-fg); letter-spacing: var(--ish-ls-wide); } .my-hero-cta { background: var(--ish-accent); color: var(--ish-fg-inverse); padding: var(--ish-space-3) var(--ish-space-8); border-radius: var(--ish-radius-md); transition: background var(--ish-motion-base) var(--ish-ease-standard); }
Or use pre-built component classes (.ish-btn, .ish-chip, .ish-card) that already compose the tokens correctly see section 08 Components.
01 Color
Copper on forge
Copper #C6682D does every bit of persuasion CTAs, sale, links, focus, active filter. Neutrals structure. The three fantasy surfaces (parchment, mystic, forge) give dramatic blocks their mood.
Brand
--ish-accent as the resting color.--ish-focus-ring.Foreground / text
--ish-border-hair.Surfaces / background
Semantic
--ish-accent. Sale price, sale badges, discount chips.02 Typography
Inter - one font, many weights.
Inter Bold 700 is reserved for brand moments hero H1, section openers, product titles on PDP. Inter carries 90% of text. Use font-display: swap (Google Fonts handles this) to avoid FOIT.
Families
--ish-font-display: 'Inter', ui-sans-serif, system-ui, sans-serif; /* hero H1, brand marks */ --ish-font-body: 'Inter', ui-sans-serif, system-ui, sans-serif; /* 90% of text */ --ish-font-mono: 'JetBrains Mono', ui-monospace, Menlo, monospace; /* code, specs */
Scale
03 Spacing
4-point grid
All spacing lands on multiples of 4px. Predictable, easy to remember, plays nicely with Shopify's page-width units.
Usage rules
04 Radius
Sharp or pill nothing in between
Cards, buttons, inputs stay sharp (md, 4px). Chips and variant pills go full pill (999px). No soft random rounds.
05 Shadows
Four-step elevation, copper focus
Subtle elevation the products carry the drama. Focus rings are always copper-based, never neutral.
06 Motion
Fast, predictable, respects reduced-motion
Three timing steps, two easings. Nothing over 320ms. Always wrap with @media (prefers-reduced-motion: reduce).
/* Standard usage */ .my-button { transition: background var(--ish-motion-base) var(--ish-ease-standard), transform var(--ish-motion-fast) var(--ish-ease-standard); } /* Always include */ @media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } }
07 Layout
Breakpoints & containers
Mobile-first. Main content maxes at 1200px, centered, with fluid gutters.
Breakpoints
Container
--ish-page-width: 1200px; /* max content width */ --ish-page-gutter: clamp(16px, 4vw, 40px); /* horizontal padding */ --ish-grid-gap: 20px; /* product card gap */ /* Standard wrapper */ .page { max-width: var(--ish-page-width); margin: 0 auto; padding: 0 var(--ish-page-gutter); }
Z-index stack
08 Components
Drop-in atoms
Pre-composed classes prefixed .ish-*. Copy the HTML snippet directly into any Liquid section.
Buttons .ish-btn + variant + size
<!-- Primary | copper solid --> <button class="ish-btn ish-btn--primary">Add to cart</button> <!-- Ghost | outlined --> <button class="ish-btn ish-btn--ghost">Read more</button> <!-- Forge | gradient hero CTA --> <button class="ish-btn ish-btn--forge ish-btn--lg">FORGE YOUR ARMY</button> <!-- Full-width, e.g. ATC on PDP --> <button class="ish-btn ish-btn--forge ish-btn--lg ish-btn--block">Add to cart</button>
Rule: one primary per section. Forge variant only on hero + final PDP CTA. Never two forge buttons side by side.
Chips (filter/class) .ish-chip
<a class="ish-chip" href="/collections/all?filter.p.m.custom.class=Fighter">Fighter</a> <a class="ish-chip ish-chip--active" href="...">Paladin</a>
Badges .ish-badge + variant
<span class="ish-badge ish-badge--sale">Sale</span> <span class="ish-badge ish-badge--new">New</span> <span class="ish-badge ish-badge--rare">Rare</span> /* mystic indigo bg */ <span class="ish-badge ish-badge--outline">Limited</span>
Rule: maximum one badge per product card. Use outline for contextual tags (limited, bundle), solid for status (sale, new).
Price .ish-price
<!-- Regular --> <div class="ish-price"> <span class="ish-price__value">12.90</span> </div> <!-- On sale --> <div class="ish-price"> <span class="ish-price__value ish-price__value--sale">8.90</span> <span class="ish-price__compare">12.90</span> <span class="ish-price__savings">31%</span> </div>
Input .ish-input
<input class="ish-input" type="email" placeholder="...">
Variant pill (scale) 40px radius-pill
Selected state = solid --ish-fg bg. Disabled = 50% opacity + line-through.
Quantity selector
Trust row parchment bg, copper dots
<div class="ish-trust-row"> <span class="ish-trust-row__item">Handcrafted in Poland</span> <span class="ish-trust-row__item">12K/14K resin detail</span> <span class="ish-trust-row__item">Free EU shipping 49+</span> ... </div>
Where: PDP between Judge.me stars and ATC button. Homepage below announcement bar. Never duplicate on the same page.
Announcement bar .ish-announce
Ornamental divider .ish-divider
Product card .ish-card
09 Accessibility
Non-negotiable rules
Every component passes WCAG 2.1 AA. When in doubt, test with keyboard only.
Checklist
- Every interactive element has a visible
:focus-visiblestate using--ish-focus-ring. - Minimum tap target = 4444px (WCAG 2.5.5). Chips (36px) are OK only when spaced 8px.
- All motion wrapped in
@media (prefers-reduced-motion: reduce)disable block. - Color is never the only signal sale price also gets
font-weight: 600+ "31%" chip. - Images have
altthat describes the figure, not "product" or "image". - Form fields have visible labels (not just placeholder).
10 Principles
When in doubt
- 01Function beats decoration. Fantasy comes from the product imagery, not the UI chrome.
- 02Inter carries everything. Weight 700 stays special hero H1, section openers only.
- 03Copper, not gold.
#C6682D. Feels forged, not gilded. - 04One accent per screen area. No accent-on-accent collisions.
- 05Motion 320ms. Always respect reduced-motion.
- 06No new tokens inline. Extend the token file never hardcode copper in a new section.
- 074-point grid or bust. Every margin/padding is a multiple of 4px.