Design Specification — Ravoor
| Field | Value |
| Site / Project | https://app.ravoor.com/dashboard |
| Analyzed on | 2026-08-25 |
| Analysis mode | Automated code extraction (no AI) |
Overview
This design system was extracted programmatically from the source page. It is built on a light canvas (#FFFFFF), ink text (#000000), a vivid accent (#7234E6). All type is set in 'IBM Plex Sans Arabic'. Detected font weights: 400, 500, 600, 700. Detected style signatures: technical / mono accents.
Logo asset(s): https://app.ravoor.com/favicon-96x96.png
Color System
Detected palette (by frequency)
| Hex | RGB | HSL | Count |
#000000 | 0, 0, 0 | 0° 0% 0% | 77 |
#FFFFFF | 255, 255, 255 | 0° 0% 100% | 14 |
#F99C00 | 249, 156, 0 | 38° 100% 49% | 10 |
#7234E6 | 114, 52, 230 | 261° 78% 55% | 9 |
#3E3E3A | 62, 62, 58 | 60° 3% 24% | 8 |
#00BB7F | 0, 187, 127 | 161° 100% 37% | 7 |
#9B66FF | 155, 102, 255 | 261° 100% 70% | 7 |
#461901 | 70, 25, 1 | 21° 97% 14% | 6 |
#002C22 | 0, 44, 34 | 166° 100% 9% | 6 |
#4D0218 | 77, 2, 24 | 342° 95% 15% | 6 |
#F0F5F2 | 240, 245, 242 | 144° 20% 95% | 6 |
#3080FF | 48, 128, 255 | 217° 100% 59% | 5 |
#00C758 | 0, 199, 88 | 147° 100% 39% | 5 |
#1A1A18 | 26, 26, 24 | 60° 4% 10% | 5 |
#191400 | 25, 20, 0 | 48° 100% 5% | 4 |
#E3E3E0 | 227, 227, 224 | 60° 5% 88% | 4 |
#FB2C36 | 251, 44, 54 | 357° 96% 58% | 4 |
#EDB200 | 237, 178, 0 | 45° 100% 46% | 4 |
#1B1B18 | 27, 27, 24 | 60° 6% 10% | 4 |
#FFFBEB | 255, 251, 235 | 48° 100% 96% | 4 |
Assigned roles
Roles are taken from the page's own semantic CSS custom properties when present, otherwise inferred from usage frequency + luminance/saturation.
| Token | Hex | RGB | HSL |
--color-primary | #F99C00 | 249, 156, 0 | 38° 100% 49% |
--color-accent | #7234E6 | 114, 52, 230 | 261° 78% 55% |
--color-background | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-surface | #F0F5F2 | 240, 245, 242 | 144° 20% 95% |
--color-text-primary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-secondary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-text-secondary | #3E3E3A | 62, 62, 58 | 60° 3% 24% |
--color-border | #E3E3E0 | 227, 227, 224 | 60° 5% 88% |
--color-on-primary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-on-secondary | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-on-accent | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
Surface ramp (derived from detected light neutrals)
| Token | Hex |
--color-surface-container-lowest | #FFFFFF |
--color-surface-container-low | #FDFDFC |
--color-surface-container | #FAFAFA |
--color-surface-container-high | #F0F5F2 |
--color-surface-container-highest | #EEEEEC |
Gradients
linear-gradient(in lab,red,red))
> 1 additional gradient definitions were framework utility templates (unresolvable var(--tw-gradient-stops)) and were omitted.
Typography
Primary typeface: IBM Plex Sans Arabic — stack: 'IBM Plex Sans Arabic'
Font stacks (most used first)
'IBM Plex Sans Arabic'
'Noto Sans Arabic'
'Instrument Sans'
var(--font-sans)
var(--font-mono)
var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji")
var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace)
Web font sources
- fonts.googleapis.com/css2?family=IBM+Plex+Sans+Arabic:wght@400;500;600;700&display=swap
- fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;500;700&display=swap
Derived type scale
| Token | Size |
| body-md | 16px |
| label-md | 13px |
| label-sm | 11px |
Font sizes (by frequency)
| Size | Count |
| 11px | 2 |
| 1em | 1 |
| 7px | 1 |
| 8px | 1 |
| 9px | 1 |
| 10px | 1 |
| 13px | 1 |
Weights in use: 400, 500, 600, 700
Line heights (by frequency)
| Value | Count |
| 1 | 5 |
| 1.5 | 2 |
| 1.2 | 1 |
| 0 | 1 |
| 20px | 1 |
Letter spacing (by frequency)
| Value | Count |
| .1em | 1 |
| .2em | 1 |
| .3em | 1 |
| .4em | 1 |
Spacing
Derived spacing scale
Raw values (by frequency)
Borders & Radius
Derived radius tokens
Raw values (resolved, by frequency)
| Radius | Count |
0 | 4 |
.25rem | 1 |
2px | 1 |
4px | 1 |
inherit | 1 |
3.40282e38px | 1 |
Layout
Container max-width: 768px
Grid columns (largest detected grid): 12
Breakpoints
- 360px
- 380px
- 420px
- 40rem
- 48rem
- 64rem
- 80rem
- 96rem
Animation & Motion
Easing curves
cubic-bezier(.4,0,1,1)
cubic-bezier(0,0,.2,1)
cubic-bezier(.4,0,.2,1)
cubic-bezier(.4,0,.6,1)
cubic-bezier(.4,0,.2,1)
var(--tw-ease,var(--default-transition-timing-function))
var(--ease-in)
var(--ease-in-out)
Keyframes
@keyframes spin { to{transform:rotate(360deg)} }
@keyframes ping { 75%,to{opacity:0;transform:scale(2)} }
@keyframes pulse { 50%{opacity:.5} }
@keyframes enter { 0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))} }
@keyframes exit { to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))} }
@keyframes caret-blink { 0%,70%,to{opacity:1}20%,50%{opacity:0} }
Animations
1.25s ease-out infinite caret-blink
enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)
var(--animate-ping)
var(--animate-pulse)
var(--animate-spin)
exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)
Source Design Tokens (CSS custom properties)
:root {
--font-sans: "IBM Plex Sans Arabic","Instrument Sans",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
--font-mono: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
--color-red-50: oklch(97.1% .013 17.38);
--color-red-100: oklch(93.6% .032 17.717);
--color-red-200: oklch(88.5% .062 18.334);
--color-red-300: oklch(80.8% .114 19.571);
--color-red-400: oklch(70.4% .191 22.216);
--color-red-500: oklch(63.7% .237 25.331);
--color-red-600: oklch(57.7% .245 27.325);
--color-red-700: oklch(50.5% .213 27.518);
--color-red-800: oklch(44.4% .177 26.899);
--color-red-900: oklch(39.6% .141 25.723);
--color-red-950: oklch(25.8% .092 26.042);
--color-orange-200: oklch(90.1% .076 70.697);
--color-orange-500: oklch(70.5% .213 47.604);
--color-orange-600: oklch(64.6% .222 41.116);
--color-orange-700: oklch(55.3% .195 38.402);
--color-amber-50: oklch(98.7% .022 95.277);
--color-amber-100: oklch(96.2% .059 95.617);
--color-amber-200: oklch(92.4% .12 95.746);
--color-amber-300: oklch(87.9% .169 91.605);
--color-amber-400: oklch(82.8% .189 84.429);
--color-amber-500: oklch(76.9% .188 70.08);
--color-amber-600: oklch(66.6% .179 58.318);
--color-amber-700: oklch(55.5% .163 48.998);
--color-amber-800: oklch(47.3% .137 46.201);
--color-amber-900: oklch(41.4% .112 45.904);
--color-amber-950: oklch(27.9% .077 45.635);
--color-yellow-50: oklch(98.7% .026 102.212);
--color-yellow-200: oklch(94.5% .129 101.54);
--color-yellow-500: oklch(79.5% .184 86.047);
--color-yellow-600: oklch(68.1% .162 75.834);
--color-yellow-700: oklch(55.4% .135 66.442);
--color-yellow-900: oklch(42.1% .095 57.708);
--color-green-50: oklch(98.2% .018 155.826);
--color-green-100: oklch(96.2% .044 156.743);
--color-green-200: oklch(92.5% .084 155.995);
--color-green-500: oklch(72.3% .219 149.579);
--color-green-600: oklch(62.7% .194 149.214);
--color-green-700: oklch(52.7% .154 150.069);
--color-green-800: oklch(44.8% .119 151.328);
--color-emerald-50: oklch(97.9% .021 166.113);
--color-emerald-100: oklch(95% .052 163.051);
--color-emerald-200: oklch(90.5% .093 164.15);
--color-emerald-300: oklch(84.5% .143 164.978);
--color-emerald-400: oklch(76.5% .177 163.223);
--color-emerald-500: oklch(69.6% .17 162.48);
--color-emerald-600: oklch(59.6% .145 163.225);
--color-emerald-700: oklch(50.8% .118 165.612);
--color-emerald-800: oklch(43.2% .095 166.913);
--color-emerald-900: oklch(37.8% .077 168.94);
--color-emerald-950: oklch(26.2% .051 172.552);
--color-blue-50: oklch(97% .014 254.604);
--color-blue-100: oklch(93.2% .032 255.585);
--color-blue-200: oklch(88.2% .059 254.128);
--color-blue-300: oklch(80.9% .105 251.813);
--color-blue-500: oklch(62.3% .214 259.815);
--color-blue-600: oklch(54.6% .245 262.881);
--color-blue-700: oklch(48.8% .243 264.376);
--color-blue-800: oklch(42.4% .199 265.638);
}
Do's and Don'ts
Do
- Do reserve the accent
#7234E6 for interactive highlights and key moments — it is used sparingly on the source page.
- Do keep the canvas at
#FFFFFF; surfaces should stay within the detected neutral ramp.
- Do stick to the detected font weight(s): 400, 500, 600, 700.
Don't
- Don't introduce colors outside the detected palette — every hue above was found in the source.
- Don't add drop shadows; the source page relies on borders and surface shifts for depth, not elevation.
Design Tokens (copy-paste)
:root {
--color-primary: #F99C00;
--color-accent: #7234E6;
--color-background: #FFFFFF;
--color-surface: #F0F5F2;
--color-text-primary: #000000;
--color-secondary: #000000;
--color-text-secondary: #3E3E3A;
--color-border: #E3E3E0;
--color-on-primary: #000000;
--color-on-secondary: #FFFFFF;
--color-on-accent: #FFFFFF;
--color-surface-container-lowest: #FFFFFF;
--color-surface-container-low: #FDFDFC;
--color-surface-container: #FAFAFA;
--color-surface-container-high: #F0F5F2;
--color-surface-container-highest: #EEEEEC;
--font-sans: 'IBM Plex Sans Arabic';
--font-size-body-md: 16px;
--font-size-label-md: 13px;
--font-size-label-sm: 11px;
--radius-sm: 2px;
--space-xs: 3px;
--tracking-label: .1em;
--container-max: 768px;
}