All design systems
Design system

Elenxia

Violet glass, hollow rings, two languages.

The design system of QA Intelligence and FEC One: a deep violet ground, glass pop-ups, hollow ringed controls and one violet hue for the way forward, in English and Persian, dark and light.

Used by QA Intelligence and FEC One · Updated

Guidelines

Voice and content

  • Scan, never test. Visible copy says scan / اسکن and rescan; never test / تست. Screenshots are Screenshots / اسکرین‌شات, never Evidence. Stage 9 is Fix prompt.
  • Short, plain words and one action at a time: "Type its address and the scan starts right away." "Start scan", "Save without scan", "Copy prompt", "I made the change", "Check again".
  • Say the result the server confirmed: a toast appears only for a real outcome ("shop.example.com is verified"), never for an attempt.
  • Failures say what happened and what to do: "We couldn't detect the change yet." followed by Check again and Try another way.
  • Developer strings are rewritten plainly; severity codes always sit next to a word ("S0 · Critical").
  • Second person, sentence case, no emoji, no exclamation marks.
  • Two languages, equal. Every string exists in English and Persian (fa is type-checked against en). Persian sets dir="rtl" on <html>; URLs, emails and codes stay left-to-right with .ltr or dir="ltr". In Persian, eyebrows and chips drop uppercase and letter-spacing, digits are formatted with fa-IR, and the dot separator is drawn (Sep), because "·" next to a digit reads as zero.

Colour

  • Dark is the default theme; light is the alternative (stored as qa-theme). Put bg on the page, ink for text, muted for secondary text. surface and surface-2 are quiet fills, not cards.
  • violet is the only brand hue in the UI. Use it for the CTA ring, the current nav item, focus outlines, selection, progress and reached stage lines. indigo only joins it in the progress gradient. cosmic, deep and space are the brand's deep steps for marketing and share images.
  • In dark, violet text is 3.9:1 on bg: use it at 14px medium or larger (button labels, active links), not for small body copy.
  • State colours always come with a word. Use success, warning and error (plus their -solid and -foreground) for chips and messages. Lamps use lamp-online, lamp-warn and lamp-offline; offline and failed steps are orange, never red. Severity uses sev-s0–sev-s2. Finding states use the colour-blind-checked fs-* set.
  • Each specialist has a fixed hue (spec-functional … spec-infrastructure), used for its avatar ring and its slice of a chart.
  • warning is never text in light (2.1:1); use warning-foreground there.

Type

  • Set text in sans: Inter Variable, with Vazirmatn Variable covering Persian glyph by glyph. Set titles, the brand name and big numbers in display: Space Grotesk 500–700, with letter-spacing 0.02em (normal in Persian). Codes and terminal lines go in mono.
  • The scale is shifted one step down. text-base is 14px (body), text-sm 12px (body-sm), text-xs 11px (label). Most of the UI lives at 11–14px.
  • Styles in use: display-hero (home h1), display-title (modal title), popup-title, body, body-sm, label (field labels and section heads, in muted), eyebrow (uppercase, 0.18em), chip, menu-label, display-number and mono (both with tabular-nums).

Shape, edges and depth

  • Borders are switched off globally (* { border-style: none !important }). Draw every edge as a ring or an inset box-shadow (hairline line, or ink at 14–45%). Only .keep-border opts back in.
  • Radii: radius-full for every button, chip, pill, toggle and lamp; radius-xl for bento tiles, pop-ups, menus and toasts; radius-glass for glass fields and choices; radius-lg for inputs and rows; radius-card (2px) for flat cards.
  • Glass is the depth. Pop-ups, modals and drawers use blur-modal + shadow-modal over a light scrim, and the page behind blurs (blur-page). Menus and the nav pill use blur-menu + shadow-menu. Always write -webkit-backdrop-filter before backdrop-filter, or the production build drops the blur.
  • Spacing follows the 4px Tailwind scale: space-2 between siblings, space-3/space-4 inside controls and tiles, space-6/space-8 around pop-ups and pages. Pages are max-w-7xl with a 16px gutter (24px from md).
  • Layers: z-topband < z-nav < z-drawer < z-menu < z-search < z-lightbox.

Controls

  • Buttons are hollow and ringed, never filled. The one main action uses the CTA ring (2px violet); every other action uses the neutral ring (1px line, muted text); danger uses a 2px error ring. Anything clickable is a button, never bare text. Only one CTA per view.
  • Focus is a solid 2px violet outline offset by 1px on every control, in both themes.
  • Status is shown with a Chip or a StatusLamp plus its word. Progress uses the 6px ProgressBar with the number beside it.

Layout rules

  • Nothing moves when you switch. Changing a step, tab or mode never resizes, rescales or shifts anything: reserve the tallest state's height.
  • No page scroll on the project and scan screens at 100%, 120% and 150% browser zoom. Compact first, then scale. Always check at about 1215×580 CSS px as well as full width.
  • The project screen is six transparent bento tiles plus pop-ups (?panel=). Home (/home) is the address bar plus the projects table, with cards available as a second view.
  • Live-scan animations run while a scan is live, even when reduced motion is on, and stop when it ends. Everything else respects prefers-reduced-motion.

Motion

  • Fields and choices: 120ms ease. Fades: 420ms ease-out with a 3px rise. Lamps ping every 1.4s. Toasts live 8s, with at most 4 on screen.
  • framer-motion springs: bento tiles stiffness 100 / damping 10 with a 0.1s stagger; the nav pill stiffness 250–300 / damping 18–20.

Iconography

  • lucide-react, 16px (h-4 w-4), stroke 2, currentColor. Arrows and chevrons mirror in RTL. The previews here draw a few lucide shapes inline.
  • No emoji in the UI. Charts, screenshot marks (mark-now, mark-should, mark-info), the world map and the verify badge are custom inline SVG.

Logo

There is no logo file in either codebase. The header sets the name "FEC QA Intelligence" in the display face; the sign-in screen draws an animated "QA" outline in WebGL. Until a real mark exists, set the name in plain type.

Colors

55 colour tokens. Values shown for the dark theme; switch the theme above to see the other.

Brand

  • violet#7b4df2

    The one brand hue: CTA rings, active nav text, focus outline, selection, progress fills. Reads on bg and surface in light; in dark it is 3.9:1 on bg and 3.6:1 on surface (passes only at large or bold sizes), so use it for 14px+ medium labels and rings, not small body copy.

  • violet-bright#9366f8

    Brighter violet for lines and marks on dark grounds (world map, charts).

  • violet-hover#6a3ce0

    Fixed hover shade of violet (brand scale).

  • primary-hover#8d63f6

    Hover/pressed state of anything violet; lightens in dark, darkens in light.

  • indigo#4a2cc4

    Gradient partner of violet: progress bar fill (violet to indigo), share image.

  • cosmic#1b1568

    Deep brand step; dark surface-2 is the same value.

  • deep#100c40

    Brand ink; light-theme text colour and share-image start.

  • space#08061c

    Darkest brand step; theme-color meta in dark.

Surfaces and text

  • bg#0b0a1a

    Page background. Everything sits on it; most components are transparent over it.

  • surface#14113c

    Raised plain surface: toast card, select options.

  • surface-2#1b1568

    Quiet fill: input background (at 50%), hovered rows, segmented-control track, skeleton, toggle off.

  • ink#f3f1ff

    Primary text and icons on bg, surface and surface-2.

  • muted#a49fce

    Secondary text: labels, hints, idle nav items, neutral button text. 4.5:1 or more on bg and surface in both themes.

  • line#2a2660

    Hairlines drawn as box-shadow or ring (borders are globally off): neutral button ring, dividers, separators. Decorative only; never the sole edge of a control.

  • card#18181b

    Active segment pill fill in Segments (zinc alias inherited from One's floating nav).

  • scrimrgba(0,0,0,0.38)

    Pop-up scrim (the page behind also blurs 14px).

States

  • success#1f9d6b

    Good/passed fills and dark-theme good text.

  • success-solid#17805a

    Good text on light grounds; solid good chips.

  • success-foreground#ffffff

    Text on a solid success fill.

  • warning#e0a020

    Warn fills, warn text in dark theme only (2.1:1 on light bg: never text in light, use warning-foreground).

  • warning-foreground#2b1d00

    Text on warning fills; warn chip text in light.

  • error#e24868

    Danger ring/text (danger button), critical chips in dark, error messages.

  • error-solid#c93a58

    Critical text on light grounds; solid error fill.

  • error-foreground#ffffff

    Text on a solid error fill.

  • info#7b4df2

    Info tone = violet (info chip, info toast bar).

Status lamps

  • lamp-online#10b981

    Status lamp: online / done (emerald-500). Always paired with its word.

  • lamp-warn#facc15

    Status lamp: warning / needs review (yellow-400).

  • lamp-offline#f97316

    Status lamp: offline / failed step. Orange, never red (owner rule).

Severity

  • sev-s0#f87171

    Severity S0 text (red-400 dark / red-600 light) on a 15% tint of itself; always beside the word Critical.

  • sev-s1#fb923c

    Severity S1 text (orange) on a 15% tint; beside High. Source pair kept exact: light orange-600 is 3.3:1 on bg, below 4.5:1 for 10px chip text.

  • sev-s2#facc15

    Severity S2 text (yellow) on a 15% tint; beside Medium. S3/S4 use muted on ink 10%.

Finding states

  • fs-review#9085e9

    Finding-state palette (colour-blind checked): to review.

  • fs-failing#e66767

    Finding state: failing.

  • fs-selected#3987e5

    Finding state: selected for fixing.

  • fs-verify#c98500

    Finding state: verifying.

  • fs-fixed#199e70

    Finding state: fixed.

  • fs-aside#5d5d75

    Finding state: set aside.

Specialists

  • spec-functional#7b4df2

    Specialist hue: Functional (same in both themes).

  • spec-backend#3b82f6

    Specialist hue: Backend.

  • spec-security#e24868

    Specialist hue: Security.

  • spec-ux#14b8a6

    Specialist hue: UX.

  • spec-mobile#f59e0b

    Specialist hue: Mobile.

  • spec-performance#22c55e

    Specialist hue: Performance.

  • spec-chaos#f97316

    Specialist hue: Chaos.

  • spec-visual#ec4899

    Specialist hue: Visual.

  • spec-localization#06b6d4

    Specialist hue: Localization.

  • spec-privacy#8b5cf6

    Specialist hue: Privacy.

  • spec-dependency#64748b

    Specialist hue: Dependency.

  • spec-explorer#eab308

    Specialist hue: Explorer.

  • spec-infrastructure#0ea5e9

    Specialist hue: Infrastructure.

Screenshot marks and terminal

  • mark-now#ef4444

    Screenshot annotation: what is wrong now.

  • mark-should#22c55e

    Screenshot annotation: what it should be.

  • mark-info#3b82f6

    Screenshot annotation: information.

  • terminal-bg#05090a

    Live terminal panel background (same in both themes).

  • terminal-ink#4ade80

    Live terminal text on terminal-bg.

Typography

Inter for text, Space Grotesk for display, Vazirmatn for every Persian glyph. The scale is shifted one step down: body text is 14px.

Display

  • display-hero

    20px / 28px · 500 · 0.02em

    Publish with fewer bugs

    Home hero h1 (text-2xl on sm+, text-xl below). Letter-spacing normal in Persian.

  • display-title

    16px / 24px · 500 · 0.02em

    Verify example.com

    Modal title.

  • display-number

    22px / 22px · 700

    1,240

    Big readouts (credit meter). Always tabular-nums.

Text

  • popup-title

    14px / 20px · 500

    Findings & decide

    Pop-up header title (truncate).

  • body

    14px / 20px · 400

    Type its address and the scan starts right away.

    Default text (text-base is 14px: the whole scale is shifted one step down).

  • body-sm

    12px / 16px · 400

    Checked 42 pages in 3 minutes

    Dense rows, button text at size sm, hints.

  • label

    11px / 16px · 500

    Website address

    Field labels, section headings (text-xs font-medium, muted).

  • eyebrow

    11px / 16px · 600 · 0.18em

    STEP 3 OF 12

    Eyebrows: uppercase, 0.18em. In Persian: no uppercase, normal spacing.

  • chip

    10px / 10px · 600 · 0.025em

    VERIFIED

    Chip text, uppercase. Persian: 11px, normal case.

  • menu-label

    10.5px / 14px · 600 · 0.05em

    ACCOUNT

    Menu group label, uppercase, muted at 70%.

Mono

  • mono

    11px / 16px · 400

    GET /checkout 500

    Terminal lines, codes, percentages with tabular-nums.

آدرس سایت را بنویسید تا اسکن همان لحظه شروع شود.

Spacing & radius

The 4px scale in use, and the radii every component draws from.

  • space-0.5
    2px · Segmented track padding (p-0.5).
  • space-1
    4px · Icon-to-text in chips, tight gaps.
  • space-1.5
    6px · Nav link gap, address-bar inner padding.
  • space-2
    8px · Default gap between siblings (most used).
  • space-3
    12px · Input/row horizontal padding, button sm padding.
  • space-4
    16px · Bento padding, page side gutter, button padding.
  • space-5
    20px · Primary button horizontal padding, drawer header.
  • space-6
    24px · Modal padding (mobile), page gutter md+.
  • space-8
    32px · Modal padding sm+, page top padding, empty-state padding.
  • radius-card

    2px

  • radius-md

    6px

  • radius-lg

    8px

  • radius-glass

    10px

  • radius-xl

    12px

  • radius-2xl

    16px

  • radius-full

    full

Components

43 components and foundations, each drawn in its real styles with its states side by side and its motion running. Open Code for the markup and CSS, Guidelines for when to use it.

  • Foundations

    Elevation

    Shadows in Elenxia are few and named; each belongs to one kind of element.

  • Foundations

    Glass

    Glass is how Elenxia shows depth: pop-ups, menus and drawers are frosted panels over the page, never solid cards.

  • Foundations

    Motion

    Motion says something is alive or has just changed; it is never decoration.

  • Actions

    Button

    Every action is a hollow pill with a ring: violet ring for the one call to action, line ring for everything else, red ring for danger.

  • Actions

    IconButton

    A round icon-only button for close, back, theme and other tool actions; it always carries an accessible label.

  • Inputs

    Checkbox

    A labelled checkbox with an optional description line.

  • Inputs

    ChoiceGroup

    Radio-like options drawn as glass tiles; the chosen one gets a violet ring and a 14% violet wash.

  • Inputs

    Select

    A native <select> styled like the filled text field.

  • Inputs

    TextField

    A labelled single-line input (and TextArea for multi-line), in two looks: the quiet filled field on pages and the glass field inside pop-ups.

  • Inputs

    Toggle

    An on/off switch (role="switch") for settings that apply at once.

  • Status

    Chip

    A small uppercase status pill.

  • Status

    CreditMeter

    The credit and scans-left readout beside the nav pill; each number takes the colour of how much is used.

  • Status

    Delta

    A change in points, its direction said three ways: an arrow, a sign and colour.

  • Status

    ProgressBar

    A thin 6px bar for scan progress and quotas.

  • Status

    StatusLamp

    A single blinking lamp with its word, for the twelve status lights and live states.

  • Status

    StepLine

    The stage line of a scan: numbered dots joined by lines, showing done, now, review and later stages.

  • Charts

    CertificateLadder

    The certificate's four levels as seals on a line: the ones reached lit, the line filled as far as the app has come, the current one ringed.

  • Charts

    Donut

    A donut of parts (their counts) with the total in the middle; used for where findings stand.

  • Charts

    Gauge

    A half-circle gauge for a score out of 100: the scale's bands outside, the value's arc and needle, the number in the middle.

  • Charts

    PowerGauge

    The scan power as a VU meter: a 90° arc whose needle rises from the bottom edge, red, yellow and green bands over the scale.

  • Charts

    Ring

    A ring filled to a share (0–100), its number inside; used for scores in rows and cards.

  • Charts

    ScoreChart

    The score over time: a violet line with a soft area under it, a dot per scan, the latest labelled; hovering shows the scan's date, score, change and checks.

  • Charts

    Seismograph

    A strip that stays quiet while a scan runs well and jolts where something broke: one jolt per event, its height its weight.

  • Charts

    Sparkline

    A small trend line for a list row; decorative, its numbers are said next to it.

  • Charts

    SpeedGauge

    The app's health after the last scan as a speedometer: a half circle of ten segments, labels every tenth, a needle on a pivot.

  • Charts

    StackBar

    A bar of parts side by side, each its share of the whole; the compact form of the Donut.

  • Navigation

    Breadcrumbs

    A small trail of where the person is.

  • Navigation

    FloatingNav

    The menu pill at the top of every page: brand, three items, search and the account tools, on menu glass.

  • Navigation

    Segments

    The segmented control QA uses for tabs and view switches (table ↔ cards, en ↔ fa panes).

  • Patterns

    AddressBar

    The home start: type a site address and scan.

  • Patterns

    Bento

    A transparent tile on the project screen; six of them make the project's overview, each opening a pop-up.

  • Patterns

    Report

    The shared report: what anyone with the link sees — the verdict, the score and its trend, what changed in the last scan, and the open problems in the order to fix them.

  • Patterns

    ScreenshotMarks

    How a problem is marked on a screenshot: what is wrong now in red, what it should be in green dashes, information in blue, with a numbered note.

  • Patterns

    Terminal

    The live terminal of a scan: a black screen in both themes, green text, the newest line brighter, failures red, a blinking caret.

  • Overlays

    Drawer

    A side sheet from the end edge (right in English, left in Persian) for long detail beside the page.

  • Overlays

    Menu

    A dropdown anchored to a button, on menu glass: items, group labels and separators.

  • Overlays

    Modal

    A centred glass dialog for one task, with a display-face title, a close button and a footer; the page behind blurs and goes inert.

  • Overlays

    Popup

    The main detail pop-up (and Modal / Drawer, which share its glass): a glass panel over a light scrim, with the page behind blurred 14px.

  • Overlays

    Toast

    A short confirmation at the bottom end corner, shown only for an outcome the server confirmed.

  • Overlays

    Tooltip

    A small hover card that explains a term or a number.

  • Data

    Avatar

    A round photo or initials, single or stacked.

  • Data

    DataTable

    A dense table for projects, findings and audit rows.

  • Data

    EmptyState

    What a list shows before it has anything, plus the skeleton shown while it loads.