Style LibraryNew · weekly review
Tower 28-inspired
Brand-inspiredMakeupA clean, vegan, and cruelty-free beauty brand that feels like a breath of fresh air in the makeup aisle. Tower 28's visual identity is anchored on a warm, off-white canvas (`#fffaf7`) and a signature coral-orange (`#d74…
Inspired by a public brand’s design language. Use it for the look only — the prompt tells the assistant not to copy the brand’s name, logo, wording or trademarks, and neither should your app.
#d74015#ee542f#f8f2ed#121212#272d45#676986#9a9db1#dbdde4FontsCooper Lt BT headingsCooper Lt BT body
Preview
A sample page drawn from this style’s tokens — a guide to the look, not the exact output. Fonts from Google Fonts: Cooper Lt BT, Scto Grotesk A Medium.
Plan the week in ten minutes
Pull in every task, see what matters, and share one clear plan with the team.
Get startedSee how it worksDocs
Tasks done1,284+12% this week
Sign in
Emailyou@example.com
Remember meContinueToday
Review roadmapDone
Ship onboardingIn progress
Team sync3 pm
Prompt
Paste into any AI assistant before describing what to build — or attach it to a project below.
# Visual style inspired by Tower 28's storefront (Makeup)
A full style reference in DESIGN.md format: tokens in the front matter, then type scale, components, layout, do's and don'ts. Use it for colour, type, spacing and components only — never Tower 28's name, logo, product photos, copy or trademarks.
---
version: alpha
name: "Tower 28"
description: |-
A clean, vegan, and cruelty-free beauty brand that feels like a breath of fresh air in the makeup aisle. Tower 28's visual identity is anchored on a warm, off-white canvas (`#fffaf7`) and a signature coral-orange (`#d74015`) that pulses through every primary CTA, badge, and accent — a color that reads as energetic but not aggressive, like a sunlit California poppy. The brand's palette is surprisingly complex for "clean beauty": deep berry tones (`#872626`, `#892628`) suggest lip and cheek stains, while a muted lavender (`#efe3f3`) and soft pink (`#f9e5fc`) whisper toward inclusivity and gentle femininity. Cool steel blues (`#676986`, `#9a9db1`) and a pale sky (`#bcdbff`) ground the system, preventing it from tipping into saccharine. Typography leans on Cooper Lt BT for display moments — a rounded, friendly serif that feels hand-drawn and approachable — paired with Scto Grotesk A Medium for body and buttons, giving the brand a crisp, editorial edge. Corners are softly rounded (`{rounded.sm}` for buttons, `{rounded.md}` for cards), and the overall spacing is generous (`{spacing.lg}` to `{spacing.xxl}`), letting each product breathe. The brand trusts its color stories and ingredient transparency over heavy ornamentation; there are no hard corners, no aggressive contrasts, just a warm, sun-washed minimalism that says "you can wear makeup and still be good to your skin."
colors:
primary: "#d74015"
primary-active: "#ee542f"
primary-disabled: "#f8f2ed"
ink: "#121212"
body: "#272d45"
muted: "#676986"
muted-soft: "#9a9db1"
hairline: "#dbdde4"
hairline-soft: "#e5e5eb"
canvas: "#fffaf7"
surface-soft: "#f4f4f6"
surface-card: "#ffffff"
on-primary: "#ffffff"
accent-berry: "#872626"
accent-berry-light: "#892628"
accent-lavender: "#efe3f3"
accent-pink: "#f9e5fc"
accent-sky: "#bcdbff"
accent-mint: "#b2f9e9"
accent-warm: "#ebdfdd"
accent-warm-light: "#e8d8ec"
accent-coral: "#ee542f"
accent-coral-soft: "#e0d1e7"
accent-steel: "#2c3e50"
accent-blue: "#1990c6"
accent-blue-dark: "#136f99"
typography:
display-xl:
fontFamily: "'Cooper Lt BT', 'Noto Color Emoji', serif"
fontSize: 48px
fontWeight: 400
lineHeight: 1.15
letterSpacing: -1px
display-lg:
fontFamily: "'Cooper Lt BT', 'Noto Color Emoji', serif"
fontSize: 36px
fontWeight: 400
lineHeight: 1.2
letterSpacing: -0.5px
display-md:
fontFamily: "'Cooper Lt BT', 'Noto Color Emoji', serif"
fontSize: 28px
fontWeight: 400
lineHeight: 1.25
letterSpacing: -0.25px
display-sm:
fontFamily: "'Cooper Lt BT', 'Noto Color Emoji', serif"
fontSize: 22px
fontWeight: 400
lineHeight: 1.3
letterSpacing: 0
title-md:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 18px
fontWeight: 500
lineHeight: 1.3
letterSpacing: 0.25px
title-sm:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 16px
fontWeight: 500
lineHeight: 1.3
letterSpacing: 0.15px
body-md:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 16px
fontWeight: 400
lineHeight: 1.6
letterSpacing: 0
body-sm:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 14px
fontWeight: 400
lineHeight: 1.5
letterSpacing: 0
caption:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 12px
fontWeight: 400
lineHeight: 1.4
letterSpacing: 0.2px
button-md:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 14px
fontWeight: 500
lineHeight: 1.25
letterSpacing: 0.5px
textTransform: uppercase
button-sm:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 12px
fontWeight: 500
lineHeight: 1.25
letterSpacing: 0.5px
textTransform: uppercase
link:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 14px
fontWeight: 400
lineHeight: 1.5
letterSpacing: 0
textDecoration: underline
nav-link:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 14px
fontWeight: 500
lineHeight: 1.25
letterSpacing: 0.5px
textTransform: uppercase
badge:
fontFamily: "'Scto Grotesk A Medium', 'Noto Color Emoji', sans-serif"
fontSize: 11px
fontWeight: 500
lineHeight: 1.2
letterSpacing: 0.3px
textTransform: uppercase
rounded:
none: 0px
xs: 4px
sm: 8px
md: 12px
lg: 20px
xl: 32px
full: 9999px
spacing:
xxs: 2px
xs: 4px
sm: 8px
md: 12px
base: 16px
lg: 24px
xl: 32px
xxl: 48px
section: 64px
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.sm}"
padding: 14px 28px
height: 48px
button-primary-active:
backgroundColor: "{colors.primary-active}"
textColor: "{colors.on-primary}"
rounded: "{rounded.sm}"
button-primary-disabled:
backgroundColor: "{colors.primary-disabled}"
textColor: "{colors.muted}"
rounded: "{rounded.sm}"
button-secondary:
backgroundColor: "{colors.canvas}"
textColor: "{colors.primary}"
typography: "{typography.button-md}"
rounded: "{rounded.sm}"
padding: 13px 27px
height: 48px
border: "2px solid {colors.primary}"
button-secondary-active:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.primary-active}"
rounded: "{rounded.sm}"
border: "2px solid {colors.primary-active}"
button-tertiary-text:
backgroundColor: transparent
textColor: "{colors.primary}"
typography: "{typography.button-md}"
button-pill-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-sm}"
rounded: "{rounded.full}"
padding: 10px 24px
button-pill-outline:
backgroundColor: transparent
textColor: "{colors.primary}"
typography: "{typography.button-sm}"
rounded: "{rounded.full}"
padding: 9px 23px
border: "1px solid {colors.primary}"
text-input:
backgroundColor: "{colors.canvas}"
textColor: "{colors.body}"
typography: "{typography.body-md}"
rounded: "{rounded.sm}"
padding: 12px 16px
height: 48px
border: "1px solid {colors.hairline}"
text-input-focus:
border: "2px solid {colors.primary}"
text-input-error:
border: "2px solid {colors.accent-berry}"
nav-bar:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.nav-link}"
height: 72px
nav-bar-sticky:
backgroundColor: "{colors.canvas}"
boxShadow: "0 2px 8px rgba(18,18,18,0.08)"
nav-link-active:
textColor: "{colors.primary}"
borderBottom: "2px solid {colors.primary}"
product-card:
backgroundColor: "{colors.surface-card}"
textColor: "{colors.ink}"
typography: "{typography.body-sm}"
rounded: "{rounded.md}"
padding: "{spacing.base}"
product-card-image:
rounded: "{rounded.sm}"
product-card-title:
typography: "{typography.title-sm}"
textColor: "{colors.ink}"
product-card-price:
typography: "{typography.body-md}"
textColor: "{colors.body}"
product-card-badge:
backgroundColor: "{colors.accent-berry}"
textColor: "{colors.on-primary}"
typography: "{typography.badge}"
rounded: "{rounded.xs}"
padding: "2px 8px"
hero-section:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.ink}"
typography: "{typography.display-xl}"
padding: "{spacing.section} {spacing.lg}"
hero-cta:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.sm}"
padding: "14px 32px"
search-bar:
backgroundColor: "{colors.canvas}"
textColor: "{colors.body}"
typography: "{typography.body-md}"
rounded: "{rounded.full}"
padding: "12px 20px"
height: 48px
border: "1px solid {colors.hairline}"
search-bar-focus:
border: "2px solid {colors.primary}"
footer-section:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.body-sm}"
padding: "{spacing.xxl} {spacing.lg}"
footer-link:
textColor: "{colors.muted-soft}"
typography: "{typography.link}"
footer-link-hover:
textColor: "{colors.on-primary}"
badge-new:
backgroundColor: "{colors.accent-mint}"
textColor: "{colors.ink}"
typography: "{typography.badge}"
rounded: "{rounded.xs}"
padding: "2px 6px"
badge-sale:
backgroundColor: "{colors.accent-berry}"
textColor: "{colors.on-primary}"
typography: "{typography.badge}"
rounded: "{rounded.xs}"
padding: "2px 6px"
badge-clean:
backgroundColor: "{colors.accent-sky}"
textColor: "{colors.ink}"
typography: "{typography.badge}"
rounded: "{rounded.xs}"
padding: "2px 6px"
swatch-color:
rounded: "{rounded.full}"
height: 32px
width: 32px
swatch-color-selected:
outline: "2px solid {colors.primary}"
outlineOffset: "2px"
quantity-selector:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.sm}"
padding: "8px 12px"
height: 40px
border: "1px solid {colors.hairline}"
accordion-header:
backgroundColor: transparent
textColor: "{colors.ink}"
typography: "{typography.title-sm}"
padding: "{spacing.md} 0"
accordion-content:
backgroundColor: transparent
textColor: "{colors.body}"
typography: "{typography.body-sm}"
padding: "0 0 {spacing.md} 0"
---
## Components
### Buttons
**`button-primary`** — The brand's primary call-to-action, rendered in the signature coral-orange (`{colors.primary}`) with white text and a soft 8px radius (`{rounded.sm}`). On hover, it shifts to a brighter coral (`{colors.primary-active}`) for a subtle glow effect. The disabled state uses a muted off-white (`{colors.primary-disabled}`) with muted text, signaling unavailability without visual noise. Text is uppercase with generous letter-spacing, reinforcing the clean, editorial feel.
**`button-secondary`** — An outlined variant that inverts the primary: a white background with a 2px coral border and coral text. Active state swaps the border and text to the brighter coral (`{colors.primary-active}`). This button is used for secondary actions like "Add to Wishlist" or "Learn More" alongside primary CTAs.
**`button-tertiary-text`** — A text-only button with no background or border, using only the primary coral for text color. Ideal for inline actions like "View Details" or "Shop All" within cards or sections where a full button would feel heavy.
**`button-pill-primary`** — A fully pill-shaped variant (`{rounded.full}`) of the primary button, used for promotional badges, "Shop Now" calls in hero sections, or compact CTAs in navigation. The smaller text size (`{typography.button-sm}`) and tighter padding make it feel badge-like and friendly.
**`button-pill-outline`** — The outlined pill counterpart, with a transparent background and a 1px coral border. Used for "Subscribe" or "Get Notified" actions where a less assertive visual is desired.
### Cards
**`product-card`** — The standard product display card, with a white background, 12px rounded corners (`{rounded.md}`), and 16px padding. The card contains a product image with 8px rounded corners, a title in `{typography.title-sm}`, and a price in `{typography.body-md}`. Badges (new, sale, clean) are positioned at the top-left of the image area. On hover, the card may elevate with a subtle shadow.
**`hero-section`** — A full-width banner section with a soft gray background (`{colors.surface-soft}`) and large display typography. The hero CTA button sits prominently, using the primary coral with generous padding. This section is the brand's primary storytelling vehicle, often featuring lifestyle imagery and a single, clear value proposition.
### Navigation
**`nav-bar`** — A fixed or sticky top navigation bar, 72px tall, with a white background and uppercase nav links in `{typography.nav-link}`. The active link is underlined with a 2px coral border. On scroll, a subtle box shadow appears to separate the nav from the page content. The nav includes the brand logo, primary links, a search icon, and a cart icon.
**`nav-link-active`** — The active state for navigation links, distinguished by the brand's coral color and a bottom border. Inactive links use the dark ink color (`{colors.ink}`) with no underline.
### Forms
**`text-input`** — A standard text input field with a white background, 8px rounded corners, and a light gray border (`{colors.hairline}`). On focus, the border thickens to 2px and turns coral. Error states use a 2px berry border (`{colors.accent-berry}`). Padding is generous (12px vertical, 16px horizontal) for comfortable typing.
**`search-bar`** — A pill-shaped search input (`{rounded.full}`) with a white background and a light gray border. On focus, the border becomes 2px coral. Used in the navigation and on search result pages.
**`quantity-selector`** — A compact input for adjusting product quantities, with a white background, 8px rounded corners, and a light gray border. Used on product detail pages and in the cart.
### Badges
**`badge-new`** — A small, mint-green (`{colors.accent-mint}`) badge with dark text, indicating a new product launch. The 4px rounded corners and uppercase typography make it feel like a friendly sticker.
**`badge-sale`** — A berry-red (`{colors.accent-berry}`) badge with white text, used for sale or clearance items. The high contrast ensures it's immediately noticeable.
**`badge-clean`** — A sky-blue (`{colors.accent-sky}`) badge with dark text, signaling the brand's clean, vegan, and cruelty-free credentials. This badge is often used on product cards and detail pages to reinforce the brand's core values.
### Swatches
**`swatch-color`** — A 32px circular color swatch used for product shade selection. The selected state is indicated by a 2px coral outline with a 2px offset, ensuring the active shade is clearly visible even among similar colors.
### Accordion
**`accordion-header`** — A clickable header for collapsible sections (e.g., product details, ingredients, shipping info). Uses `{typography.title-sm}` with no background, and padding only on the top and bottom. The content area uses `{typography.body-sm}` with bottom padding for spacing.
## Responsive Behavior
| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 744px | Single-column layout; nav collapses to hamburger menu; product cards stack vertically; hero text reduces to `{typography.display-md}`; buttons become full-width; search bar moves to a dedicated overlay |
| Tablet | 744–1128px | Two-column grid for product cards; nav links remain visible but may be truncated; hero uses `{typography.display-lg}`; side-by-side layout for product details (image left, info right) |
| Desktop | 1128–1440px | Full three- or four-column grid for product cards; full nav bar with all links; hero uses `{typography.display-xl}`; maximum content width is 1128px, centered |
| Wide | > 1440px | Content remains centered at 1128px max-width; extra whitespace on sides; nav bar may include additional utility links; hero may feature full-bleed imagery |
### Touch Targets
- All interactive elements (buttons, links, inputs) have a minimum height of 44px and a minimum width of 44px to meet WCAG touch target guidelines.
- Navigation links have at least 48px of touch area, even if the text is smaller.
- Color swatches are 32px with additional padding to ensure a 44px touch target.
- Quantity selector buttons are 40px tall with generous clickable areas.
### Collapsing Strategy
- On mobile (< 744px), the top navigation collapses into a hamburger menu. The brand logo remains centered, and the cart icon is moved to the right of the hamburger.
- Product filters (e.g., by shade, category, price) collapse into a "Filter" button that opens a slide-out panel.
- The footer's multi-column link sections collapse into accordion-style lists to save vertical space.
- Hero sections may reduce image height and stack text above the CTA rather than overlaying it.
- Product detail pages collapse the image gallery into a single-column swipeable carousel, with thumbnails hidden.
## Known Gaps
- **Agent usage policy:** Historical tokens are unverified. Do not use them as current-site measurements or claim a faithful reconstruction.
- **Historical provenance:** The original capture time and raw evidence are unavailable. Token values have not been freshly verified; the [collection manifest](../../data/manifest.json) records this entry as historical_unverified.
- Hover and focus states for all components beyond primary/secondary buttons could not be reliably extracted (e.g., nav-link hover color, product-card hover shadow, text-input focus ring).
- Error and success states for forms (e.g., input validation messages, success banners) are not fully documented.
- Dark mode or high-contrast mode color overrides are not present in the extracted data.
- Sub-brand or seasonal palette variations (e.g., holiday collections, limited-edition drops) are not captured.
- The exact `box-shadow` values for card elevation, nav-bar sticky state, and modal overlays are inferred from common patterns but not extracted.
- Animation and transition timing (e.g., button hover duration, card hover lift) are not specified.
- The `font-weight` for Cooper Lt BT is assumed to be 400 (regular) as the extracted data does not include weight variations; the brand may use a single weight for display text.
- The `letter-spacing` and `textTransform` values for typography tokens are estimated based on common editorial beauty brand patterns and may differ from the live site's exact CSS.
- The `oke-widget-icons` font family is used for product review widgets (Okendo) and is not a core brand typeface; it is excluded from the typography system.
- The `inherit` and `serif` font-family declarations are generic fallbacks and are not used as primary tokens.
- The `!important` flag on `oke-widget-icons!important` is a specificity override and is not a design token.
Use it in an app
Create a free account to attach this style to a project: the hub adds it to the prompt your AI assistant gets, so it builds every page in this look.
From Awesome DESIGN.md — e-commerce (MIT, commit e4dc419).View source