Dashboard
| Order | Date | Status | Total |
|---|---|---|---|
| TRN-284710 | Feb 5 | Delivered | $581.93 |
| TRN-284698 | Feb 3 | In Transit | $1,247.50 |
| TRN-284655 | Jan 29 | Delivered | $214.94 |
| TRN-284612 | Jan 25 | Partial | $892.40 |
| TRN-284580 | Jan 21 | Delivered | $367.80 |
The visual language for transend™ — the intelligent auto parts ordering platform by Transtar / NexaMotion Group. Built for professional repair shops who need precision, speed, and clarity. Hard edges. No fluff.
The 7 rules that define the transend™ visual language. Every component, page, and feature must follow these.
Use border-radius: 0 on structural UI surfaces (buttons, cards, inputs, tables, dialogs, containers, badges). Rounded shapes are reserved for dots, avatars, and toggle thumbs.
Primary red (#D7252C) is reserved for CTAs, active states, and primary links. Never use it decoratively or on passive elements. Never use blue for links.
Headings and labels use font-display (Barlow Condensed) in uppercase. Body text is never uppercase — use font-body (Inter) in sentence case.
Neutrals are warm charcoal (hue 40–60), never blue-gray. The darkest black is #141413, not #000.
Part numbers, prices, codes, dates, and tabular data always use font-mono (IBM Plex Mono). Never use proportional fonts for data.
Product and workflow surfaces should stay compact and information-dense. Marketing pages can open spacing when needed, but hierarchy should remain tight and purposeful.
Every component must work in both light and dark mode. Use CSS variables for colors, never hardcoded hex values in markup.
ShadCN semantic tokens mapped to transend™ brand. Primary extracted from logo SVG #D7252C. Warm charcoal neutrals.
primary for CTAs, active nav, and primary links (red + underline)destructive for error states and delete actionsdestructive and primary interchangeably — they serve different rolestd-red-* scale for tinting (backgrounds, badges) — never for text on whitetext-primary underline. Secondary links: text-foreground underline or text-muted-foreground underlineinfo alert backgrounds and badgesBarlow Condensed (700/600 weight) for all-caps display type. Inter for body. IBM Plex Mono for data and part numbers.
K77900AX), prices, VINs, and order IDsShadCN button variants: default, secondary, outline, ghost, destructive. All rounded-none.
outline for filters and toggles, ghost for navigation-style linkssm for tables/cards, default for forms, lg for hero sectionsShadCN Input/Select/Checkbox patterns. Square fields with brand red focus ring.
font-display font-bold text-[0.7rem] uppercase)space-y-5 within a form grouprounded-noneEnter OE or aftermarket part number
Quantity must be at least 1
ShadCN Card component with transend product data. Sharp edges, prominent pricing, quick-add CTA.
font-mono, prices in font-display font-semibold text-xlhover:bg-muted/50 patternsShadCN Badge variants mapped to transend semantic colors.
ShadCN Alert component with left-border accent and transend semantic colors.
ShadCN Table with dense part data. Mono part numbers, red hover accent.
font-mono font-semibold| Part # | Description | Brand | Status | Price |
|---|---|---|---|---|
| D124420A | 6F50/55 Solenoid Body | Transtar | In Stock | $342.00 |
| K77900AX | 4L60E Master Rebuild Kit | Transmaxx | In Stock | $189.95 |
| B95721C | Torque Converter — Reman | RECON | Low Stock | $478.50 |
| P44821E | Front Ceramic Brake Pads | ProMax | Out | $47.99 |
Application navigation shell and responsive grid patterns.
flex-1 between logo and authtext-foreground›max-w-[1200px] mx-auto for all content sectionsgap-4 for card grids, gap-6 for section-level layoutsmax-w-[1200px]
max-w-[1400px]
max-w-[420px]
max-w-[640px]
grid grid-cols-1 lg:grid-cols-2 gap-6grid grid-cols-1 md:grid-cols-3 gap-4grid grid-cols-2 md:grid-cols-4 gap-4grid grid-cols-1 xl:grid-cols-[1fr_320px] gap-4Inline SVG icon system using Lucide-style stroke icons. Consistent attributes, three size tiers, semantic color mapping.
stroke-width="2" stroke-linecap="round"text-muted-foreground for passive, text-primary for active<svg class="w-4 h-4" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
w-3.5 h-3.5
w-4 h-4
w-5 h-5
Filled SVG icons from transend.us product categories. Use fill="currentColor" and size with w-5 h-5. These are not Lucide stroke icons — they use solid fills at a 20x20 viewBox.
Search hero, stat cards, dialog, sheet, tabs, and accordion patterns.
Search 680,000+ SKUs across transmission, driveline, brake, and suspension.
Enter part details to add to your recurring order template.
Review before checkout
The 6F50/55 Solenoid Body is a complete remanufactured assembly for GM 6-speed transmissions. All solenoids, wiring, and pressure switches pre-installed.
UI Kit patterns (avatars, progress, toasts, pagination) and a full dashboard layout with sidebar, KPI cards, and activity feed.
primary (default), td-amber (partial), td-green (complete)Showing 1–20 of 234 results
sidebar-item active class (primary bg tint + red left border)| Order | Date | Status | Total |
|---|---|---|---|
| TRN-284710 | Feb 5 | Delivered | $581.93 |
| TRN-284698 | Feb 3 | In Transit | $1,247.50 |
| TRN-284655 | Jan 29 | Delivered | $214.94 |
| TRN-284612 | Jan 25 | Partial | $892.40 |
| TRN-284580 | Jan 21 | Delivered | $367.80 |
Design tokens, theme configuration, and AI integration artifacts. Everything needed to wire a real shadcn/ui project with the transend™ brand.
--primary, --background) for all themed elementstd-* classes for brand elements that are theme-independent (logo red, dark topbar):root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 358 71% 49%; /* #D7252C */
--primary-foreground: 0 0% 100%;
--secondary: 40 4% 95%; /* warm neutral */
--secondary-foreground: 50 3% 17%;
--muted: 40 4% 95%;
--muted-foreground: 40 3% 45%;
--accent: 40 4% 95%;
--accent-foreground: 50 3% 17%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 40 6% 88%;
--input: 40 6% 88%;
--ring: 0 0% 3.9%;
--radius: 0px; /* HARD EDGES */
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
}
.dark {
--background: 60 3% 7%; /* warm black */
--foreground: 40 6% 95%;
--card: 60 3% 9%;
--card-foreground: 40 6% 95%;
--popover: 50 3% 10%;
--popover-foreground: 40 6% 95%;
--primary: 358 71% 49%;
--primary-foreground: 0 0% 100%;
--secondary: 50 3% 14%;
--secondary-foreground: 40 6% 95%;
--muted: 50 3% 14%;
--muted-foreground: 40 3% 55%;
--accent: 50 3% 14%;
--accent-foreground: 40 6% 95%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 50 4% 24%;
--input: 50 4% 24%;
--ring: 40 6% 95%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
}
@import "tailwindcss";
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 358 71% 49%; /* #D7252C */
--primary-foreground: 0 0% 100%;
--secondary: 40 4% 95%;
--secondary-foreground: 50 3% 17%;
--muted: 40 4% 95%;
--muted-foreground: 40 3% 45%;
--accent: 40 4% 95%;
--accent-foreground: 50 3% 17%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 40 6% 88%;
--input: 40 6% 88%;
--ring: 0 0% 3.9%;
--radius: 0px; /* HARD EDGES */
--sidebar-background: 0 0% 100%;
--sidebar-foreground: 0 0% 3.9%;
--sidebar-primary: 358 71% 49%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 40 4% 95%;
--sidebar-accent-foreground: 50 3% 17%;
--sidebar-border: 40 6% 88%;
--sidebar-ring: 358 71% 49%;
}
.dark {
--background: 60 3% 7%;
--foreground: 40 6% 95%;
/* ... dark values as shown in Tokens section */
}
}
export default {
theme: {
extend: {
fontFamily: {
display: ["Barlow Condensed", "Impact", "sans-serif"],
body: ["Inter", "sans-serif"],
mono: ["IBM Plex Mono", "monospace"],
},
borderRadius: {
lg: "0px", md: "0px", sm: "0px",
xl: "0px", "2xl": "0px",
},
},
},
}
These CSS rules target data-component attributes to apply transend brand styling on top of standard shadcn/ui output. Add these to your globals.css or a separate brand.css file.
/* Buttons — display font, uppercase */
[data-component^="button-"] {
font-family: "Barlow Condensed", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* Badges — display font, uppercase */
[data-component^="badge-"] {
font-family: "Barlow Condensed", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
border-radius: 0;
}
/* Alerts — left-stripe accent */
[data-component^="alert-"] {
border-left: 4px solid;
border-radius: 0;
}
/* Table headers — display font */
[data-component^="table-"] th {
font-family: "Barlow Condensed", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.68rem;
}
<!-- Add to <head> -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=
Inter:opsz,wght@14..32,100..900&
family=Barlow+Condensed:wght@400;500;600;700;800&
family=IBM+Plex+Mono:wght@400;500;600
&display=swap" rel="stylesheet">
/* Font mapping in tailwind.config.ts */
font-display → Barlow Condensed (headings, labels, buttons — always uppercase)
font-body → Inter (body text, descriptions — sentence case)
font-mono → IBM Plex Mono (part numbers, prices, data)
Extend shadcn/ui's buttonVariants with transend brand classes using cn(). This approach keeps the shadcn base intact while layering brand styling.
import { cva } from "class-variance-authority"
const buttonVariants = cva(
`inline-flex items-center justify-center gap-2
whitespace-nowrap rounded-md text-sm font-medium
transition-all disabled:pointer-events-none
disabled:opacity-50 [&_svg]:pointer-events-none
[&_svg]:size-4 [&_svg]:shrink-0
font-display uppercase tracking-wider`, // ← brand classes
{
variants: {
variant: {
default: "bg-primary text-primary-foreground
shadow-xs hover:bg-primary/90",
secondary: "bg-secondary text-secondary-foreground
shadow-xs hover:bg-secondary/80",
// ... other variants
},
size: {
sm: "h-8 px-3",
default: "h-9 px-4 py-2",
lg: "h-10 px-6",
icon: "size-9",
},
},
}
)
Paste this block into any AI tool's system instructions or custom rules file. It provides the complete brand context needed to generate on-brand transend components.
You are generating UI for transend™, an intelligent auto parts ordering
platform by Transtar / NexaMotion Group.
Framework: Next.js + shadcn/ui + Tailwind CSS
Component library: shadcn/ui (CVA variants, data-slot attributes)
Color tokens (HSL, no hsl() wrapper in CSS vars):
--primary: 358 71% 49% (#D7252C — brand red)
--primary-foreground: 0 0% 100%
--secondary: 40 4% 95% (warm neutral)
--muted: 40 4% 95%
--muted-foreground: 40 3% 45%
--border: 40 6% 88%
--destructive: 0 84.2% 60.2%
Neutrals are warm charcoal tones (never blue-gray).
Typography:
font-display = Barlow Condensed — headings, labels, buttons (ALWAYS uppercase)
font-body = Inter — body text, descriptions (sentence case)
font-mono = IBM Plex Mono — part numbers, prices, data values
Border radius: ALWAYS 0px. All structural surfaces have hard edges.
Rounded shapes are reserved only for dots, avatars, and toggles.
Component brand overrides:
Buttons → font-display, font-bold, uppercase, tracking-wider
Badges → font-display, font-bold, uppercase, tracking-wider, rounded-none
Alerts → border-left: 4px solid (semantic color), rounded-none
Tables → th: font-display, font-bold, uppercase, tracking-widest, text-[0.68rem]
Cards → rounded-xl (resolves to 0px), border border-border, shadow-sm
Dialog → no rounded corners, data-slot attributes on sub-elements
DO:
✓ Use shadcn/ui base classes exactly, then layer brand via CSS overrides
✓ Add data-component attributes to every component root element
✓ Add data-slot attributes to sub-components (card-header, dialog-footer, etc.)
✓ Use role attributes for accessibility (alert, dialog, tab, tablist, tabpanel)
✓ Use primary red for CTAs and active states
✓ Use warm neutrals (bg-secondary, bg-muted) for surfaces
DON'T:
✗ Never use blue-gray neutrals (zinc, slate, gray) — always warm tones
✗ Never use rounded corners on structural elements
✗ Never use blue for links — use text-primary or text-foreground
✗ Never put body font (Inter) on buttons, badges, or headings
✗ Never omit the display font uppercase treatment on headings
Every shadcn component mapped to its exact Tailwind classes. Use this as a class lookup when generating components. Brand overrides are applied via CSS targeting data-component attributes.
/* ── Button ──────────────────────────────────────────── */
// base
inline-flex items-center justify-center gap-2 whitespace-nowrap
rounded-md text-sm font-medium transition-all
disabled:pointer-events-none disabled:opacity-50
[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0
// variants
default: bg-primary text-primary-foreground shadow-xs hover:bg-primary/90
secondary: bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80
outline: border border-input bg-background shadow-xs
hover:bg-accent hover:text-accent-foreground
ghost: hover:bg-accent hover:text-accent-foreground
destructive: bg-destructive text-destructive-foreground shadow-xs
hover:bg-destructive/90
link: text-primary underline-offset-4 hover:underline
// sizes
sm: h-8 px-3
default: h-9 px-4 py-2
lg: h-10 px-6
icon: size-9
/* ── Input ───────────────────────────────────────────── */
// base
file:text-foreground placeholder:text-muted-foreground selection:bg-primary
selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md
border border-input bg-transparent px-3 py-1 text-base shadow-xs
transition-[color,box-shadow] outline-none
file:inline-flex file:items-center file:gap-2 file:border-0
file:bg-transparent file:text-sm file:font-medium
focus-visible:border-ring focus-visible:ring-ring/50
focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50
md:text-sm
// error state: add
border-destructive focus-visible:border-destructive focus-visible:ring-destructive/50
/* ── Card ────────────────────────────────────────────── */
// base
bg-card text-card-foreground flex flex-col rounded-xl border
border-border shadow-sm overflow-hidden
// data-slots
card-header: flex flex-col gap-1.5 px-6 pt-6
card-title: font-semibold leading-none
card-description: text-sm text-muted-foreground
card-content: px-6 pb-6
card-footer: flex items-center px-6 pb-6
/* ── Badge ───────────────────────────────────────────── */
// base
inline-flex items-center justify-center rounded-none border
border-transparent px-2 py-0.5 text-xs font-medium w-fit
whitespace-nowrap shrink-0
// variants
default: bg-primary text-primary-foreground [a&]:hover:bg-primary/90
secondary: bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90
destructive: bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90
outline: border-border text-foreground [a&]:hover:bg-accent
[a&]:hover:text-accent-foreground
// product stock badges — semantic colors
stock-in: bg-td-green-100 dark:bg-td-green/10 text-td-green-700 dark:text-td-green-300
stock-low: bg-td-amber-100 dark:bg-td-amber/10 text-td-amber-700 dark:text-td-amber-300
stock-out: bg-td-red-100 dark:bg-td-red/10 text-td-red-700 dark:text-td-red-300
/* ── Alert ───────────────────────────────────────────── */
// base
relative w-full rounded-lg border px-4 py-3 text-sm
grid grid-cols-[16px_1fr] gap-x-3 gap-y-0.5 items-start
[&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current
// semantic variants (colors + left-stripe via CSS)
info: bg-td-blue-100 dark:bg-td-blue/5 text-td-blue-700 dark:text-td-blue-300
success: bg-td-green-100 dark:bg-td-green/5 text-td-green-700 dark:text-td-green-300
warning: bg-td-amber-100 dark:bg-td-amber/5 text-td-amber-700 dark:text-td-amber-300
error: bg-destructive/10 text-destructive dark:text-red-400
// data-slots
alert-title: col-start-2 font-medium leading-none tracking-tight
alert-description: col-start-2 text-sm [&_p]:leading-relaxed
/* ── Table ───────────────────────────────────────────── */
// wrapper
relative w-full overflow-x-auto border border-border bg-card
// elements
th: h-10 px-4 text-left align-middle font-medium text-muted-foreground
td: p-4 align-middle
tr: border-b border-border transition-colors hover:bg-muted/50
/* ── Dialog ──────────────────────────────────────────── */
// base
relative bg-background border border-border shadow-lg w-full
max-w-[420px] gap-4 p-6
// data-slots
dialog-header: flex flex-col gap-2
dialog-title: text-lg leading-none font-semibold
dialog-description: text-muted-foreground text-sm
dialog-footer: flex flex-col-reverse gap-2 sm:flex-row sm:justify-end
/* ── Tabs ────────────────────────────────────────────── */
// underline variant — tab trigger
inline-flex items-center justify-center whitespace-nowrap
px-3 py-1.5 text-sm font-medium border-b-2 border-transparent
text-muted-foreground transition-all
data-state="active": text-foreground border-primary
// pill variant — tablist
bg-muted rounded-lg p-[3px] inline-flex w-fit items-center
justify-center text-muted-foreground h-9 gap-1
// pill variant — tab trigger
inline-flex items-center justify-center whitespace-nowrap
rounded-md px-3 py-1 text-sm font-medium transition-all
data-state="active": bg-background text-foreground shadow-sm
/* ── Accordion ───────────────────────────────────────── */
// data-slots
accordion-item: border-b border-border
accordion-trigger: flex flex-1 items-center justify-between gap-4
py-4 text-left text-sm font-medium
hover:underline
Full, unabridged CSS variables for both light and dark mode, plus brand override rules. Copy this entire block into your project's globals.css.
@import "tailwindcss";
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 358 71% 49%; /* #D7252C */
--primary-foreground: 0 0% 100%;
--secondary: 40 4% 95%;
--secondary-foreground: 50 3% 17%;
--muted: 40 4% 95%;
--muted-foreground: 40 3% 45%;
--accent: 40 4% 95%;
--accent-foreground: 50 3% 17%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 40 6% 88%;
--input: 40 6% 88%;
--ring: 0 0% 3.9%;
--radius: 0px; /* HARD EDGES */
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
--sidebar-background: 0 0% 100%;
--sidebar-foreground: 0 0% 3.9%;
--sidebar-primary: 358 71% 49%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 40 4% 95%;
--sidebar-accent-foreground: 50 3% 17%;
--sidebar-border: 40 6% 88%;
--sidebar-ring: 358 71% 49%;
}
.dark {
--background: 60 3% 7%; /* warm black, not pure */
--foreground: 40 6% 95%;
--card: 60 3% 9%;
--card-foreground: 40 6% 95%;
--popover: 50 3% 10%;
--popover-foreground: 40 6% 95%;
--primary: 358 71% 49%;
--primary-foreground: 0 0% 100%;
--secondary: 50 3% 14%;
--secondary-foreground: 40 6% 95%;
--muted: 50 3% 14%;
--muted-foreground: 40 3% 55%;
--accent: 50 3% 14%;
--accent-foreground: 40 6% 95%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 50 4% 16%;
--input: 50 4% 16%;
--ring: 40 6% 95%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
--sidebar-background: 60 3% 9%;
--sidebar-foreground: 40 6% 95%;
--sidebar-primary: 358 71% 49%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 50 3% 14%;
--sidebar-accent-foreground: 40 6% 95%;
--sidebar-border: 50 4% 24%;
--sidebar-ring: 358 71% 49%;
}
}
/* ── Brand Overrides ─────────────────────────────────── */
/* Buttons — display font, uppercase */
[data-component^="button-"] {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 0.82rem;
}
/* Badges — display font, uppercase */
[data-component^="badge-"] {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
border-radius: 0;
}
/* Alerts — left-stripe accent */
[data-component^="alert-"] {
border-left: 4px solid;
border-radius: 0;
}
[data-component="alert-info"] { border-left-color: hsl(var(--chart-1)); }
[data-component="alert-success"] { border-left-color: #0F9D43; }
[data-component="alert-warning"] { border-left-color: #D97706; }
[data-component="alert-error"] { border-left-color: hsl(var(--destructive)); }
/* Alert titles — display font */
[data-component^="alert-"] [data-slot="alert-title"] {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
}
/* Table headers — display font */
[data-component^="table-"] th {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.68rem;
}
/* Form labels — display font */
[data-component^="input-"] ~ label,
label:has(+ [data-component^="input-"]) {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
}
/* Dialog/Sheet — display font for footer buttons */
[data-component="dialog"] [data-slot="dialog-footer"] button,
[data-component="sheet-cart"] button {
font-family: "Barlow Condensed", Impact, "Arial Narrow", sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
}
Full Tailwind config with all color tokens, fonts, shadows, keyframes, and animations. Copy into your project's tailwind.config.ts.
import type { Config } from "tailwindcss"
export default {
darkMode: "class",
theme: {
extend: {
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
secondary: {
DEFAULT: "hsl(var(--secondary))",
foreground: "hsl(var(--secondary-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))",
},
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
sidebar: {
DEFAULT: "hsl(var(--sidebar-background))",
foreground: "hsl(var(--sidebar-foreground))",
primary: "hsl(var(--sidebar-primary))",
"primary-foreground": "hsl(var(--sidebar-primary-foreground))",
accent: "hsl(var(--sidebar-accent))",
"accent-foreground": "hsl(var(--sidebar-accent-foreground))",
border: "hsl(var(--sidebar-border))",
ring: "hsl(var(--sidebar-ring))",
},
chart: {
"1": "hsl(var(--chart-1))",
"2": "hsl(var(--chart-2))",
"3": "hsl(var(--chart-3))",
"4": "hsl(var(--chart-4))",
"5": "hsl(var(--chart-5))",
},
},
fontFamily: {
display: ["Barlow Condensed", "Impact", "Arial Narrow", "sans-serif"],
body: ["Inter", "sans-serif"],
mono: ["IBM Plex Mono", "Courier New", "monospace"],
},
borderRadius: {
lg: "0px",
md: "0px",
sm: "0px",
xl: "0px",
"2xl": "0px", /* HARD EDGES */
},
boxShadow: {
"td-sm": "0 1px 3px rgba(20,20,19,0.06)",
"td-md": "0 4px 12px rgba(20,20,19,0.08)",
"td-lg": "0 12px 40px rgba(20,20,19,0.12)",
"td-glow": "0 0 40px rgba(215,37,44,0.15)",
},
keyframes: {
"fade-up": {
"0%": { opacity: "0", transform: "translateY(16px)" },
"100%": { opacity: "1", transform: "translateY(0)" },
},
"fade-in": {
"0%": { opacity: "0" },
"100%": { opacity: "1" },
},
"slide-in": {
"0%": { opacity: "0", transform: "translateX(-12px)" },
"100%": { opacity: "1", transform: "translateX(0)" },
},
"scale-in": {
"0%": { opacity: "0", transform: "scale(0.96)" },
"100%": { opacity: "1", transform: "scale(1)" },
},
"progress-fill": { from: { width: "0" } },
"bar-grow": { from: { height: "0" } },
},
animation: {
"fade-up": "fade-up 0.5s ease-out forwards",
"fade-in": "fade-in 0.4s ease-out forwards",
"slide-in": "slide-in 0.4s ease-out forwards",
"scale-in": "scale-in 0.35s ease-out forwards",
"progress-fill": "progress-fill 1.2s ease-out",
"bar-grow": "bar-grow 0.8s ease-out",
},
},
},
} satisfies Config