Button Component
Built on top of shadcn/ui and tailored for the kohl.design brand identity. Features signature Pine and Crimson palettes, dynamic var(--radius) corner radii, tactile click micro-animations, and integrated loading states.
1. Brand Style Variants
Core brand variants engineered for primary conversions, dual-register moments, and utility surfaces.
variant="default"Signature Pine Green hue with subtle elevation depth for dominant primary conversions and key CTAs.
variant="editorial"Soft blush wash with crimson typography. Pairs with Cooper headlines.
variant="secondary"Subdued neutral grey-slate fill for lower-emphasis supporting actions.
variant="outline"Crisp 1px border line for filters, navigation bars, and paired secondary buttons.
variant="ghost"Zero background until hover. Ideal for data table actions and toolbars.
variant="destructive"High-alert actions like resource deletion, project cancellations, or revocations.
variant="link"Underlined link appearance with full button semantics and keyboard accessibility.
2. Size Scale & Touch Targets
Proportional height, padding, gap, and icon sizing based on the 4px design grid with 8px corner radii.
3. Iconography & Next.js Link Composition
Composing buttons with leading icons, trailing arrows, counters, or as accessible navigation links.
Leading & Trailing Icons
Automatic optical alignment and scaling for SVG icons.
Next.js Link Integration
Using Radix asChild to render an accessible Next.js Link.
Tactile Feedback & Accessibility
Built-in active:scale-[0.98] press response with Pine focus rings.
4. Dual-Register Immersion
Verification of button contrast and aesthetics across both brand registers.
Exceeding expectations.
Deep forest canvas with high-character contrast moments and vintage Cooper headlines.
Client Project Portal
Clean grey-slate workspace surfaces for client review tools, dashboards, and data tables.
5. Interactive Playground
Customize props and instantly copy the production React code.
<Button variant="default" size="default" > Continue Project <ArrowRight /> </Button>
6. Multi-Project Token Customization
How to reuse this design language in other personal projects with custom brand colors and corner radii.
1. Token Abstraction
All components use semantic CSS tokens (var(--primary), var(--radius)) rather than hardcoded colors or pixel values. Changing 2 variables updates all components automatically.
2. Derived Scale Math
Smaller buttons dynamically compute calc(var(--radius) - 2px) while Hero buttons use calc(var(--radius) + 4px), preserving optical proportions whether sharp (2px) or round (18px).
3. Distribution
Use this repository as a GitHub starter template, copy the component bundle, or apply data-theme-variant="blush" to your root HTML element.
CSS Tokens for Active Preset: default
Drop this block into app/globals.css of your other personal project:
/* Kohl Default: Signature Pine Green + 8px pebble corners */
:root {
--radius: 0.5rem; /* 8px signature pebble */
--primary: hsla(170, 100%, 16%, 1); /* Signature Pine */
--primary-hover: hsla(170, 90%, 11%, 1);
--accent: hsla(354, 34%, 43%, 1); /* Crimson */
}