Styling and template overrides
Updated October 24, 2026
Match the TierMint storefront to your brand with the Appearance settings, CSS custom properties, class overrides and theme template overrides.
Set colors and fonts without CSS
Open TierMint → Settings → Appearance. Each field sets one or more of the design tokens. Leave a field empty to keep the default, which its help text shows.
| Setting | What it changes | Also set for you |
|---|---|---|
| Primary color | Buttons, links and selected states. Default #2563eb. Pick a color dark enough for white button text. |
The hover, soft and focus shades. |
| Text color | Body text inside the components. Default #111827. |
|
| Surface color | Cards, panels and form fields. Default #ffffff. |
The raised and alternate surface shades. |
| Page background | The background behind full-page areas such as the checkout and the account page. Default #f6f7f9. |
|
| Border color | Borders and dividers. Default #e5e7eb. |
The stronger border on form controls. |
| Success color | Success notices and badges. Default #15803d. |
The tinted background of a success notice. |
| Error color | Error notices and badges. Default #b91c1c. |
The tinted background of an error notice. |
| Corner radius | How rounded buttons, inputs and cards are: Default, Small or Large. | All three radius sizes. |
| Font family | A CSS font stack for every component, such as Inter, Arial, sans-serif. Empty keeps the built-in system font stack. The stack can have up to 300 characters. Each family must be a plain name or a quoted name of letters, digits, spaces, underscores or hyphens. Anything else shows an error when you save, and no change in that save is stored. |
The Font family setting does not load a font file. Use a font your theme already loads, or a system font.
These settings write the same custom properties you can set in CSS, so everything else on this page still applies. The settings cover the most used colors. For other shades, spacing and shadows, use CSS.
Override the design tokens with CSS
TierMint's CSS reads its colors, sizes and fonts from --tiermint-* custom properties, defined on :root in tiermint-tokens.css. Set any of them in your child theme's stylesheet, in WordPress's Additional CSS (Appearance → Customize → Additional CSS in a classic theme) or with a snippet plugin. Every component picks up the change.
The default colors meet WCAG AA contrast (at least 4.5:1) for text on their intended backgrounds. TierMint does not warn you about a low-contrast override, so check your own colors.
Color tokens
| Token | Default | Used for |
|---|---|---|
--tiermint-color-primary |
#2563eb |
The accent color: buttons, links, the highlighted plan's border. |
--tiermint-color-primary-hover |
#1d4ed8 |
A primary button on hover. |
--tiermint-color-primary-contrast |
#ffffff |
Text and icons on the primary color, such as button labels. |
--tiermint-color-primary-soft |
#eff6ff |
A light accent tint, such as the selected payment method row and a ghost button on hover. |
--tiermint-color-page |
#f6f7f9 |
The background behind cards on full-page areas. |
--tiermint-color-surface |
#ffffff |
Cards, panels and form fields. |
--tiermint-color-surface-alt |
#f9fafb |
Summary panels, table headers, the filter bar and other inset areas. |
--tiermint-color-surface-raised |
#ffffff |
Raised cards such as the checkout summary and order cards. In a dark theme, give it a lighter value than the surface so cards stand out. |
--tiermint-color-text |
#111827 |
Body text. |
--tiermint-color-text-muted |
#4b5563 |
Secondary text, such as helper labels and tier names. |
--tiermint-color-text-subtle |
#6b7280 |
The lightest text, such as field help, section labels and captions. |
--tiermint-color-border |
#e5e7eb |
Borders and dividers. --tiermint-border uses it too. |
--tiermint-color-border-strong |
#d1d5db |
Borders on inputs, selects and secondary buttons. |
--tiermint-color-focus |
#2563eb |
The keyboard focus ring. |
--tiermint-color-overlay |
rgba(17, 24, 39, 0.7) |
The dark backdrop behind the screenshot lightbox. |
--tiermint-color-success |
#15803d |
Success accents, such as feature list bullets and the checkout confirmation heading. |
--tiermint-color-success-bg |
#f0fdf4 |
The background of a success notice or badge. |
--tiermint-color-error |
#b91c1c |
Error text and borders, such as the cart error message. |
--tiermint-color-error-bg |
#fef2f2 |
The background of an error notice or badge. |
--tiermint-color-warning |
#b45309 |
Warning accents. |
--tiermint-color-warning-bg |
#fffbeb |
The background of a warning notice or badge. |
--tiermint-color-info |
#0369a1 |
Information accents, such as the checkout login banner. |
--tiermint-color-info-bg |
#f0f9ff |
The background of an information notice or badge. |
Shape and shadow tokens
| Token | Default | Used for |
|---|---|---|
--tiermint-radius-sm |
6px |
Small controls, such as checkboxes. |
--tiermint-radius |
8px |
Buttons, inputs and panels. |
--tiermint-radius-lg |
12px |
Cards and the outer checkout panel. |
--tiermint-radius-full |
9999px |
Pill-shaped badges. |
--tiermint-border |
1px solid var(--tiermint-color-border) |
Most borders. Change --tiermint-color-border to recolor them all. |
--tiermint-shadow-sm |
0 1px 2px rgba(17, 24, 39, 0.06) |
A light lift for cards. |
--tiermint-shadow-md |
0 4px 12px rgba(17, 24, 39, 0.08) |
A card on hover, a sticky summary. |
--tiermint-shadow-lg |
0 12px 32px rgba(17, 24, 39, 0.12) |
Overlays and popovers. |
Spacing tokens
| Token | Default | Used for |
|---|---|---|
--tiermint-space-1 |
0.25rem |
Tight inline gaps. |
--tiermint-space-2 |
0.5rem |
Gaps between closely related items. |
--tiermint-space-3 |
0.75rem |
Compact padding. |
--tiermint-space-4 |
1rem |
Gaps between stacked blocks. |
--tiermint-space-5 |
1.5rem |
Gaps between form fields and between grid items. |
--tiermint-space-6 |
2rem |
Card padding and the gap between sections in a card. |
--tiermint-space-7 |
3rem |
Larger gaps, such as between the product details columns. |
--tiermint-space-8 |
4rem |
The largest gap. |
Type tokens
| Token | Default | Used for |
|---|---|---|
--tiermint-font-sans |
a system font stack | The font of every component. |
--tiermint-font-size-xs |
0.75rem |
Badges, help text and fine print. |
--tiermint-font-size-sm |
0.875rem |
Field labels, buttons, tier names and captions. |
--tiermint-font-size-base |
1rem |
Body text and form inputs. |
--tiermint-font-size-lg |
1.125rem |
Headings inside a component, such as a plan name. |
--tiermint-font-size-xl |
1.375rem |
Larger headings, such as the checkout title. |
--tiermint-font-size-2xl |
1.75rem |
The product name on the product page. |
--tiermint-line-height-tight |
1.25 |
Headings and buttons. |
--tiermint-line-height-base |
1.6 |
Body text. |
--tiermint-font-weight-medium |
500 |
Slightly stronger text. |
--tiermint-font-weight-semibold |
600 |
Labels, buttons and headings. |
--tiermint-font-weight-bold |
700 |
Totals and titles. |
Every component takes its font from --tiermint-font-sans, so a TierMint checkout looks the same under any theme. To use your theme's font instead, set the token to inherit:
:root {
--tiermint-font-sans: inherit;
}
Shared building blocks
A small shared stylesheet, tiermint-base.css, holds the classes the components share: .tiermint-button (with --primary, --secondary, --ghost, --danger and --small variants), .tiermint-input, .tiermint-select, .tiermint-checkbox, .tiermint-field, .tiermint-card, .tiermint-notice, .tiermint-badge and .tiermint-table. Component markup carries these classes next to its own, so a token change restyles both.
How your CSS wins over TierMint's
The token stylesheet is the only TierMint stylesheet in a CSS cascade layer, @layer tiermint. CSS outside a layer always beats layered CSS. So your own :root block wins over the token defaults, with no !important and no specificity tricks:
:root {
--tiermint-color-primary: darkslateblue;
}
A color you set under TierMint → Settings → Appearance prints in a :root:root block, so it wins over a plain :root rule in your theme. If your :root override has no effect, check whether the Appearance settings set the same token. Clear it there, or give your rule more weight, for example with :root:root:root.
The component stylesheets and tiermint-base.css are not layered, so the components keep their look against a theme's own input, button, a and heading rules. Your rules for component classes work on normal specificity, and one class is often enough:
.tiermint-buy-button__button {
padding: 1rem 2rem;
}
TierMint scopes many control and button rules under .tiermint-component, so that a theme rule such as input[type="text"] cannot outrank them. If your rule has no effect, add the same scope:
.tiermint-component .tiermint-buy-button__button {
padding: 1rem 2rem;
}
Apart from the reduced-motion rule, TierMint's CSS uses no !important.
Theming recipes
Change the brand color everywhere
Set the tokens once on :root:
:root {
--tiermint-color-primary: #7c3aed;
--tiermint-color-primary-contrast: #ffffff;
--tiermint-radius: 2px;
}
Every component that reads these tokens picks them up, including ones you add later.
Restyle one component
Set the tokens on a component class instead of :root. Each component's outer element has the class tiermint-component and its own class, such as tiermint-pricing-table:
.tiermint-pricing-table {
--tiermint-color-primary: #f97316;
--tiermint-color-surface-alt: #fff7ed;
}
To change only one of several pricing tables on a page, wrap that one in an element with your own class, for example with a Group block's Additional CSS class(es) field, and scope the rule to that class.
Put a component on a dark background
Set the surface, text and border tokens together on a wrapper, so text stays readable:
.tiermint-dark-section {
--tiermint-color-surface: #111827;
--tiermint-color-surface-alt: #1f2937;
--tiermint-color-surface-raised: #1f2937;
--tiermint-color-text: #f3f4f6;
--tiermint-color-text-muted: #cbd5e1;
--tiermint-color-text-subtle: #94a3b8;
--tiermint-color-border: #374151;
--tiermint-color-border-strong: #4b5563;
--tiermint-color-primary: #3b82f6;
--tiermint-color-primary-hover: #60a5fa;
--tiermint-color-primary-contrast: #ffffff;
}
.tiermint-dark-section .tiermint-pricing-table__name {
color: var(--tiermint-color-text);
}
Plan names in the pricing table take your theme's heading color, so the second rule sets them too.
<div class="tiermint-dark-section">
[tiermint_pricing_table product_ids="12,14,19"]
</div>
Change these tokens as a set: a dark background alone leaves dark text on it. For a full dark theme, also darken the notice backgrounds (--tiermint-color-success-bg and the other -bg tokens) so notices do not glow. TierMint ships no prefers-color-scheme rule of its own, so a dark look comes only from your tokens.
Class names you can target
Components use BEM names: .tiermint-{component}__{element}, with a --{modifier} suffix for a variant. The highlighted pricing table plan, for example, is .tiermint-pricing-table__plan with .tiermint-pricing-table__plan--highlight added. Some names from the shipped markup:
.tiermint-buy-button__button,.tiermint-buy-button__price.tiermint-cart-summary__table,.tiermint-cart-summary__checkout,.tiermint-cart-summary__error.tiermint-product-grid__item,.tiermint-product-grid__filters.tiermint-pricing-table__plan--highlight,.tiermint-pricing-table__badge.tiermint-checkout__submit,.tiermint-checkout__confirmation.tiermint-login-form--logged-in,.tiermint-login-form__logout
We do not rename these classes casually between releases, so you can target them in your own CSS. Use a class rule when a token is too broad, for example to change the padding of one button.
A note after every price
Every catalog price can carry a short note after it, such as "one-time payment" or "per license". There is none by default. Add one with the tiermint_price_note filter. The note shows on every price, in the store grid, the product page, the pricing table and the buy button, so keep it store-wide. HTML tags are stripped, and an empty note shows nothing.
add_filter( 'tiermint_price_note', fn () => 'per license' );
The note sits in .tiermint-price__note, in a smaller, muted text. With a sale price it shows once, after the pair. TierMint Pro tax-inclusive pricing uses the same filter for its "incl. tax" note.
The login form inside .tiermint-login-form comes from WordPress's wp_login_form(), so it uses WordPress's ids and classes, such as #loginform, #wp-submit and .login-remember. Target them under .tiermint-login-form, as TierMint does.
To style a single Elementor widget, use the widget's Style tab. The Elementor widgets page lists its controls.
Reduced motion
When a visitor's system asks for reduced motion (prefers-reduced-motion: reduce), TierMint cuts animation and transition times to almost zero and turns off smooth scrolling inside every .tiermint-component. There is nothing to set up, and no setting turns it off.
Override a component template
CSS changes how things look. To change the markup itself, copy the component's PHP template into your theme.
- Find the template in the plugin at
templates/components/{component}.php, for exampletemplates/components/cart-summary.php. - Copy it to
tiermint/components/{component}.phpin your child theme or theme, for examplewp-content/themes/your-theme/tiermint/components/cart-summary.php. - Edit the copy.
TierMint looks for the theme copy first, with locate_template(), and uses its own template when there is none. Copy only the files you change. The component name is the shortcode name without tiermint_, with hyphens: buy-button, pricing-table, account-dashboard and so on.
Each template gets one variable, $data, an array of everything the component prepared for that render, such as product names, formatted prices and links. The comment at the top of each template lists its keys. Read values as $data['key'], the same way the shipped templates do.
Shared pieces in templates/components/partials/ always load from the plugin and cannot be overridden. Keep the require lines that load them, or copy their markup into your template.
TierMint also filters each component's markup where it reaches the page, with wp_kses() and a list of the HTML its own templates use: what WordPress allows in post content, plus forms, form fields and the editor sample image. If your copy prints something outside that list, such as an onclick attribute or an <iframe>, TierMint removes it. A <script> or <style> tag is removed too, but the code inside it then shows on the page as text, so load scripts and styles from files with wp_enqueue_script() and wp_enqueue_style(). To allow another element or attribute, add it with the tiermint_kses_allowed_html filter:
add_filter( 'tiermint_kses_allowed_html', function ( $tags ) {
$tags['input']['pattern'] = true;
return $tags;
} );
The filter also gets a second argument that names the list it is building: component for a whole component, image for WordPress image markup inside a template, and form for the sign-in form fields. The image and form lists run inside the template, and the whole component then passes the component list, so markup you add for image or form must be on the component list too. A callback that ignores the argument, like the one above, adds to all three.
If TierMint finds no template at all, the component shows nothing. It never shows a PHP warning on the page.
When TierMint loads its CSS and JavaScript
TierMint does not load its files on every page. It loads the token stylesheet, the shared stylesheet and a component's own CSS and JavaScript only on a page where that component renders. A page with only a login form loads the token, shared and login form stylesheets. Stripe's script loads only with the checkout, and only when Stripe is set up. In the block editor, all component styles load so the previews look right.
Where a component renders affects where its stylesheet prints. TierMint finds shortcodes in the content of the page being viewed, and TierMint widgets in its Elementor layout, before the page head prints, so their styles print in the head. A component that renders from somewhere else, such as a widget area or a template file that calls do_shortcode(), loads its stylesheet partway through the page, and WordPress prints it in the footer. The styles still apply, but the component can show unstyled for a moment, and an optimization plugin that only handles head styles can miss them. If you see this, move the shortcode into the page content, or let your optimization plugin include footer styles.