Skip to main content

Design philosophy

Stripe-inspired sophistication meets tropical warmth. Every visual element serves the brand’s core tension: premium and authoritative, yet warm and approachable. Green-tinted shadows ground the interface in the brand palette. Cream backgrounds create breathing room. Glass effects add depth without weight.

Shadow system

All shadows use a green undertone — rgba(24, 99, 77, X) — instead of neutral black. This subtly reinforces the Pine Green brand color throughout the interface, creating a cohesive visual layer that feels intentional rather than generic.
LevelCSS valueUsage
xs0 1px 2px rgba(24, 99, 77, 0.04)Subtle depth for flat elements
sm0 2px 4px rgba(24, 99, 77, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04)Cards at rest, input fields
md0 4px 12px rgba(24, 99, 77, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04)Elevated cards, dropdowns
lg0 8px 24px rgba(24, 99, 77, 0.10), 0 4px 8px rgba(0, 0, 0, 0.06)Modals, floating panels
xl0 16px 48px rgba(24, 99, 77, 0.12), 0 8px 16px rgba(0, 0, 0, 0.08)Major floating elements
2xl0 24px 64px rgba(24, 99, 77, 0.16), 0 12px 24px rgba(0, 0, 0, 0.10)Maximum elevation
Special shadowCSS valueUsage
hover0 20px 40px rgba(24, 99, 77, 0.15), 0 8px 16px rgba(0, 0, 0, 0.08)Card hover states
focus0 0 0 3px rgba(24, 99, 77, 0.15)Focus rings
glow0 0 24px rgba(24, 99, 77, 0.25)Highlighted/featured elements

Strain-typed shadows

Strain type shadows add a colored glow that reinforces the sativa/indica/hybrid identity on hover or feature states.
TypeCSS value
Sativa0 8px 24px rgba(249, 115, 22, 0.20)
Indica0 8px 24px rgba(147, 51, 234, 0.20)
Hybrid0 8px 24px rgba(16, 185, 129, 0.20)

Gradient system

The primary page background gradient. A radial ellipse of Pine Green overlays a cream-to-white linear gradient, creating a subtle green glow at the top of pages.
radial-gradient(ellipse 80% 50% at 50% -20%, rgba(24, 99, 77, 0.15), transparent),
linear-gradient(180deg, #F7F4ED 0%, white 100%)
Subtle cream-to-transparent for section backgrounds. Creates visual separation between content blocks without hard borders.
linear-gradient(180deg, #F7F4ED 0%, rgba(247, 244, 237, 0.5) 100%)
An inset highlight effect with a white highlight at the top darkening to the bottom. Adds subtle dimension to filled buttons.
linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%, rgba(0, 0, 0, 0.05) 100%)
A 135-degree white sweep used as a pseudo-element for premium hover effects on cards. The transparent-white-transparent pattern creates a polished surface reflection.
linear-gradient(135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0) 100%)
Low-opacity colored overlays that tint card backgrounds to match strain types. Applied as background gradients on strain cards, detail pages, and collection views.
TypeGradient
Sativalinear-gradient(135deg, rgba(249, 115, 22, 0.1) 0%, rgba(249, 115, 22, 0.05) 100%)
Indicalinear-gradient(135deg, rgba(147, 51, 234, 0.1) 0%, rgba(147, 51, 234, 0.05) 100%)
Hybridlinear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(16, 185, 129, 0.05) 100%)

Glassmorphism

Glass effects create depth through translucent, blurred backgrounds. The system defines multiple glass tiers for different elevation contexts.
Cream at 75% opacity with a 16px blur radius. Used for content cards that float over page backgrounds.
PropertyValue
Backgroundrgba(247, 244, 237, 0.75)
Backdrop blur16px
Borderrgba(255, 255, 255, 0.4)
Shadow0 8px 32px rgba(24, 99, 77, 0.08), 0 0 1px rgba(24, 99, 77, 0.12)
A glassmorphism badge system with pill and square variants. Badges accept a configurable accent color and render a multi-stop gradient background with backdrop blur, colored borders, and inner glow shadows. Used for tags, status indicators, strain type labels, and category markers.
PropertyValue
Backdrop blur12px
Backdrop saturate150%
Border radiusFull (pill) or xl (square)
Background opacity20% (light stop), 18% (mid stop), 12% (dark stop)
Gradient angle135deg

Animation system

Animations use a constrained duration scale and premium easing curves. Every motion should feel purposeful — fast enough to not block the user, smooth enough to feel refined.
TokenDurationUsage
instant100msToggles, state changes
fast150msHovers, small reveals
normal250msStandard transitions
slow400msPanel slides, complex reveals
slower600msFull-page transitions

Easing curves

CurveCSSUsage
easeOutcubic-bezier(0, 0, 0.2, 1)General transitions
easeInOutcubic-bezier(0.4, 0, 0.2, 1)Symmetrical animations
easeOutExpocubic-bezier(0.16, 1, 0.3, 1)Premium reveals (preferred)
springcubic-bezier(0.175, 0.885, 0.32, 1.275)Bouncy, playful effects
easeOutBackcubic-bezier(0.34, 1.56, 0.64, 1)Overshoot for emphasis
Keep animations under 400ms for perceived speed. Use easeOutExpo for premium-feeling transitions — it decelerates dramatically, making elements feel like they glide into place. Stagger sequential animations by 50-100ms for visual flow.

Interaction patterns

PatternEffectTiming
Card hovertranslateY(-6px) + enhanced shadownormal (250ms), easeOutExpo
Button hovertranslateY(-1px) + slight liftfast (150ms), easeOutExpo
Button presstranslateY(0) on activeinstant (100ms), easeOut
Image hoverscale(1.08)slow (400ms), easeOut

Touch target minimums

All interactive elements must meet minimum sizing for comfortable touch interaction, following WCAG 2.2 Target Size guidelines.
ElementMinimum size
Button48px
Icon button44px
List item56px
Input field52px
Spacing between targets8px

Pre-built transitions

These shorthand transition values are available as design tokens for the most common interaction patterns:
TokenValue
cardHovertransform 250ms easeOutExpo, box-shadow 250ms easeOutExpo
buttonall 150ms easeOutExpo
fadeopacity 200ms ease-out
transformtransform 250ms easeOutExpo
colorcolor 150ms ease-out, background-color 150ms ease-out, border-color 150ms ease-out

For developers

Source of truth files:
  • apps/website/src/config/design-system/effects.ts — shadows, animation durations, easing curves, pre-built transitions
  • apps/website/src/config/design-system/interactive-tokens.ts — card tokens, button tokens, glass effects, gradients, focus states, touch targets
  • apps/website/src/config/design-system/glassmorphism.ts — badge system with pill/square variants, inline style generators, CSS string generators, Tailwind class utilities
  • apps/mobile/src/_config/design-system/effects.ts — mobile animation and shadow tokens