Pikanté’s visual language is defined by a single file —Documentation Index
Fetch the complete documentation index at: https://mintlify.com/luigitemu/pikante-landing/llms.txt
Use this file to discover all available pages before exploring further.
src/styles/global.css — that combines two complementary systems: a hand-authored set of OKLCH CSS custom properties that encode every design decision, and Tailwind CSS v4 for utility classes where they accelerate layout work. Neither system is a fallback for the other; they run side-by-side throughout the project.
Tailwind CSS v4 utility classes (e.g.
flex, gap-4, text-sm) are available everywhere in .astro templates at the same time as the custom CSS classes and design-token variables defined in global.css. Both systems are active simultaneously — you do not have to choose one or the other within a component.Two styling systems, one file
@import "tailwindcss" directive at the top of global.css activates the full Tailwind utility layer. Tailwind v4 requires no tailwind.config.js — configuration happens entirely through the Vite plugin registered in astro.config.mjs:
@import line is authored in plain CSS — no preprocessor, no @apply abuse, no build-time configuration beyond the Vite plugin.
OKLCH color system
All color values inglobal.css use the oklch() functional notation rather than hsl() or hex. OKLCH (Oklab Lightness-Chroma-Hue) offers two concrete advantages for this design system:
- Perceptual uniformity. Two colors at the same
Lvalue in OKLCH will appear equally bright to the human eye, regardless of hue. This makes it safe to derive tints and shades by adjusting onlyLwithout shifting perceived contrast. - Consistent chroma. The
C(chroma) axis is device-independent, so aC: 0.21fire orange and aC: 0.21lime green will appear equally saturated. This is not true in HSL, where the sameSvalue produces wildly different visual saturation across hues.
color-mix(in oklab, ...) is used throughout to derive --accent-soft, --accent-glow, and per-hover states without hardcoding additional color stops.
CSS custom properties (design tokens)
All tokens are declared on:root. The complete set from global.css:
Token groups at a glance
Background scale
Five steps from near-black
--bg to dark charcoal --line-2. All use hue 260° (cool blue-violet) to create a thermal contrast against the warm fire accent. Sections alternate between --bg, --carbon, and --char to create depth without color.Fire / chile palette
Six named colors spanning orange-red (
--fire) through deep chile crimson (--dark-red) and lime green (--lime). Every color in this group uses a different hue but sits at a carefully chosen chroma so they feel cohesive when used together.Accent aliases
--accent is always --fire. --accent-soft and --accent-glow are color-mix() derivatives used for glows, shadows, and hover fills. Swapping the single --fire value would re-theme every accent in the entire site.Text hierarchy
Four numeric tiers (
--text-1 → --text-4) plus --smoke, --paper, and --white. All share hue 260° with minimal chroma, keeping text neutral against the warm accents. --paper shifts to hue 60° for a slightly warm tone that reads softer than pure white.Utility and component classes
Beyond design tokens,global.css defines a set of reusable classes used throughout the component templates:
| Class | Purpose |
|---|---|
.container | Max-width 1440px, auto margins, responsive --gutter horizontal padding |
.eyebrow | JetBrains Mono, 11 px, all-caps, tracked; prepends an --accent horizontal rule via ::before |
.mono | JetBrains Mono, 14 px, .22em letter-spacing, uppercase — used for labels and data tags |
.h-display | Anton font, weight 400, line-height: .86, uppercase — base class for all display headings |
.btn | Base pill button: border-radius: 999px, JetBrains Mono, 12 px, uppercase, tracked |
.btn-primary | Fire gradient fill, dark text — primary CTA button skin |
.btn-ghost | Semi-transparent fill with a --line-2 inset border — secondary CTA skin |
.section-head | Two-column grid (heading left, body text right) with responsive single-column breakpoint at 780 px |
.reveal | Scroll-reveal base: opacity: 0, translateY(28px) — transitions to visible when .in is added |
Typography
Three typefaces are loaded via Google Fonts in the<head> of index.astro:
| Typeface | Role | CSS assignment |
|---|---|---|
| Anton | Display headings, section titles, large numerals | .h-display, .section-head h2, .what-n, .step-body h3, etc. |
| Inter | Body copy, paragraph text, UI labels | body { font-family: 'Inter', system-ui, sans-serif } |
| JetBrains Mono | Eyebrows, pill labels, prices, meta tags, buttons | .mono, .eyebrow, .btn, .variant-pill, .nav-links a, etc. |
Film grain overlay
A full-viewport SVG noise texture is layered over the entire page via abody::after pseudo-element. The texture uses an inline SVG data URI with an feTurbulence filter — no external image request needed:
mix-blend-mode: overlay ensures the grain blends naturally with both the dark backgrounds and the bright accent highlights rather than simply sitting on top. At opacity: .18 the effect is subtle — it reads as cinematic texture rather than visible noise.
Responsive strategy
The design is mobile-considered but desktop-first. Most layout shifts happen at three breakpoints defined inline per component section using@media:
| Breakpoint | Typical change |
|---|---|
max-width: 980px | Hero grid collapses to single column |
max-width: 880px | Products, HowTo steps, Stores city grid go single-column |
max-width: 760px | Nav links hidden; sticky mobile CTA bar appears |
max-width: 640px | City grid fully stacked |
clamp() extensively — --gutter, section headings, hero text, and display numerals all scale continuously between a minimum and maximum value rather than snapping at fixed breakpoints.