# ZLEF — Direction Artistique (Design Authority)
> The single source of truth for the visual language of every zlef.fr property.
> Dark, atmospheric, minimal. Two deep desaturated accents — OLIVE LEAF (#3E4618)
> and VINTAGE GRAPE (#4C3B4D) — over near-black. Lightly rounded corners, flat
> crisp components (no gradients, no glow). Large, legible type. No light theme,
> no web fonts, no blue. When in doubt, import the canonical stylesheet and use
> its tokens rather than inventing values.
Live guide: https://da.zlef.fr
Tokens CSS: https://da.zlef.fr/tokens.css (import this — it IS the system)
Machine JSON: https://da.zlef.fr/design.json
This file: https://da.zlef.fr/llms.txt
## How to apply (for an LLM building a zlef.fr page or component)
1. Add ``.
2. Set the page background to `var(--zl-bg)` and text to `var(--zl-text)`; use the
`.zl-body` helper on `
` or `.zl-scope` on a wrapper.
3. Build UI from the component classes below; pull every colour, size, radius and
spacing value from a `--zl-*` variable. Never hard-code a hex that isn't a token.
4. Components reference palette-agnostic roles (`--zl-accent*` = primary olive,
`--zl-accent2*` = secondary grape). Raw ramps are `--zl-olive*` / `--zl-grape*`.
5. For landing/marketing surfaces, add the shared atmospheric field:
`` (it also wires up
analytics). Keep content panels opaque enough to stay readable above it.
## Core principles
- DARK ONLY. Background is near-black `#06060a`. There is no light theme.
- TWO ACCENTS ONLY. Olive leaf `#3E4618` (primary) and vintage grape `#4C3B4D`
(secondary). Both deep and desaturated. Everything else is a neutral grey.
- LIGHT ROUNDING. Corners are subtle: 3px badges/chips, 5px buttons/inputs, 8px
cards. Never pill-shaped UI, never heavily rounded.
- FLAT, CRISP COMPONENTS. Solid fills, 1px borders, NO gradients, NO coloured glow.
Hover shifts the fill one shade — it never blooms, jumps or scales.
- LEGIBLE BY DEFAULT. Body text is 17px and never below 16px. Line-height 1.6.
Controls are ≥44px tall. "Never too small, never too big."
- SUBTLE MOTION. Ease `cubic-bezier(.22,.61,.36,1)`, 110–360ms, no bounce. Honour
`prefers-reduced-motion`.
## Palette
Surfaces: bg #06060a · surface-1 #0e0e13 · surface-2 #15151c · surface-3 #1d1d25
Text: #e9eae2 (primary) · #b6b7ad (soft) · #7d7e76 (muted) · #54554f (faint)
Olive leaf (primary): deep #2c3212 · base #3e4618 · mid #59642a · soft #9dae50 · bright #bdce74
Vintage grape (2ndary):deep #382b39 · base #4c3b4d · mid #6b5470 · soft #b095b3 · bright #cdb6cf
→ base fills solid surfaces; soft is the readable text/link tint on dark.
Semantic: success #6f9a3a · warning #c79a3e (amber) · danger #c2566a (dusty rose-red) · info #b095b3 (=grape)
Lines: rgba(255,255,255,.07) hairline · .13 strong · olive focus ring.
Grape rgba(76,59,77,.10) appears ATMOSPHERICALLY ONLY (haze) — never as a UI fill.
## Banned (do NOT do these)
- Light / white backgrounds or any light theme.
- Blue accents or blue links in UI chrome — use olive instead. (Data-series
colours from zl-charts `--zlc-cat-*` are exempt — charts may use their full
validated categorical palette.)
- Pure `#000000` surfaces — use `#06060a` and the surface ramp.
- Full pills and systematically heavy rounding — keep rounding light (3–8px);
circles stay circles.
- The "AI-generated" aesthetic: gradients on buttons, coloured glows, scale/zoom
on hover. Flat, crisp, one-shade hover shift.
- Body text below 16px; low-contrast grey-on-grey for primary copy; thin hairline.
- Web-font dependencies — use the system sans stack + a monospace for code/data.
- Glossy gradients, skeuomorphism, bouncy motion.
- Unstyled framework defaults (Bootstrap/Material) that ignore these tokens.
## Typography
Sans: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif
Mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace
Scale: xs 13 · sm 14.5 · base 17 · lg 19 · xl 22 · 2xl 28 · 3xl clamp(30,4vw,38) · 4xl clamp(40,6vw,56)
Weights: 400 normal · 550 medium · 700 bold. Headings: tight tracking -0.02em.
Eyebrows/labels: UPPERCASE, 0.14em tracking, olive-soft.
## Spacing / radius / elevation
Spacing (4px base): 4 8 12 16 24 32 48 64 → `--zl-space-1..8`
Radius (LIGHT): sm 3 (badges) · md 5 (buttons/inputs) · lg 8 (cards) · xl 12 · pill 999 (circular only)
Shadow: sm/md/lg plain dark drops. No coloured glow — flatness is intentional.
## Components (classes in tokens.css)
- Buttons: `.zl-btn` + `--primary` (solid olive) | `--secondary` (solid grape) |
`--ghost` (outline) | `--destructive` (SOLID rose-red for a destructive MAIN
action — fill `--zl-danger`, ink `--zl-on-danger`, hover `--zl-danger-mid`,
active `--zl-danger-deep`) | `--danger` (outline rose-red = the QUIET
destructive variant: table rows, toolbars) | `--loading` (pair with a
`.zl-spinner--btn` + `disabled`); sizes `--sm` / (default) / `--lg`. Flat, 5px
radius, 1px border, ≥44px tall. Hover shifts fill one shade. Works identically
as `