Brand & Design System · v1.0

The QR Library design language

A precise, developer-first system for a corporate QR platform — built on ocean blues, the Figtree typeface, and a disciplined icon set.

01 — Concept

Website concept

QR Library is a paid, API-first platform that lets businesses in Saudi Arabia generate unlimited QR codes in their corporate identity, then trace and manage every code after it's printed. The site speaks to technical and commercial buyers alike: confident, exact, and quietly premium — never playful or noisy. Powered by DuckDeals.sa.

all_inclusive
Unlimited
Generate any volume of codes via one API.
palette
Branded
Corporate identity baked into every code.
travel_explore
Traceable
Every scan logged and attributable.
tune
Manageable
Re-route, pause and organize at scale.
02 — Logo

Logo lockup

The mark is the Material Symbols qr_code_scanner glyph in a rounded square carrying the brand gradient, paired with the Figtree wordmark. Maintain clear space equal to the height of the mark on all sides.

QR Library
QR Library
check_circleKeep the gradient direction (140°) cancelDon't stretch, recolor or outline the mark cancelDon't place the mark on busy imagery
03 — Color

Palette

An ocean-blue system: deep navies ground the dark sections, ocean blue carries primary actions, and sea cyan is the single accent. Neutrals stay cool and lightly tinted.

Core
Deep Navy
#041A2E
Ocean Night
#07263F
Ocean Blue · Primary
#0B74C4
Ocean Deep
#0959A8
Sea Cyan · Accent
#1FB8D4
Neutrals & system
Ink · Text
#08263F
Slate · Muted
#5A7488
Foam · Tint
#E4F1FB
Mist · Section
#F4F9FD
Success
#0B8A5F
Primary gradient · 140° #0B74C4 → #0959A8
Brand gradient · 140° #0B74C4 → #1FB8D4
04 — Typography

Typefaces

Primary
Figtree
Headings & body. Weights 400 / 500 / 600 / 700 / 800.
Monospace
JetBrains Mono
Code, numerics, CR/VAT & technical labels.
H1 · 800 · -3%Own, trace, manage
H2 · 800Section heading
Body · 400Generate unlimited branded QR codes from one API.
Eyebrow · 700The platform
05 — Iconography

Material Symbols

All UI icons come from Google Material Symbols (Outlined, weight 400). One family, one weight — never mix icon sets. Use Ocean Blue on light surfaces and Sea Cyan on dark.

all_inclusive
all_inclusive
palette
palette
travel_explore
travel_explore
tune
tune
qr_code_2
qr_code_2
insights
insights
api
api
webhook
webhook
shield_lock
shield_lock
local_shipping
local_shipping
payments
payments
support_agent
support_agent
06 — Symbols

Brand symbols

QR mark
qr_code_scanner

The product signature, also embedded at the center of every generated code.

Saudi Riyal
currency symbol

Used in place of the word "SAR" across pricing. Tint to match its context.

07 — Components

Buttons & surfaces

Primary Secondary Tonal Pill / eyebrow
Card · 18px radius
1px #E6EEF5 border, white surface.
Tinted card
Mist #F4F9FD fill for nested panels.
Dark card
Ocean Night with Sea Cyan accents.
08 — Voice & tone

How we write

check_circleDo
Precise & technical — "one API call, infinite codes".Lead with the outcome, then the mechanism.Confident, calm, enterprise-ready.
cancelDon't
Hype or exclamation-heavy marketing speak.Emoji or playful slang.Vague claims without a number or mechanism.
09 — Developer library

qrlib.css

Every component below ships in one namespaced stylesheet. Load the fonts, then qrlib.css, and use the .ql- classes. All colors, radii and spacing are driven by CSS custom properties on :root — override them once to retheme everything.

downloadDownload qrlib.css
<!-- 1. fonts  2. library -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Figtree:wght@300..900&family=JetBrains+Mono&family=Material+Symbols+Outlined">
<link rel="stylesheet" href="qrlib.css">

/* retheme by overriding tokens */
:root{ --ql-blue:#0b74c4; --ql-cyan:#1fb8d4; --ql-r:11px; }

<div class="ql"> <!-- wrap your app to inherit type --> </div>
10 — Buttons

Buttons & states

Primary Secondary Tonal Ghost Danger Small Large Disabled rocket_launchWith icon favorite Loading
<button class="ql-btn ql-btn--primary">Primary</button>
<button class="ql-btn ql-btn--secondary ql-btn--sm">Small</button>
<button class="ql-btn ql-btn--primary ql-btn--loading">Saving</button>
// + .ql-btn--tonal .ql-btn--ghost .ql-btn--danger .ql-btn--lg .ql-btn--block .ql-btn--icon
11 — Form controls

Inputs & pickers

search
+966
Enter a valid email address.
upload_fileDrop a file or browse
Switch
Slider{{ range }}%
<div class="ql-field">
  <label class="ql-label">Work email</label>
  <input class="ql-input" type="email">
</div>
<select class="ql-select">…</select>
<input class="ql-input" type="date">   <input class="ql-input" type="time">
<label class="ql-switch"><input type="checkbox"><span class="ql-track"></span></label>
<input class="ql-range" type="range">
// states: .is-error .is-valid on inputs; .ql-input-icon / .ql-input-group wrappers
12 — Tables & pagination

Data tables

Code ID Campaign Scans Status
qr_9Fk2aLSpring Launch412,008Active
qr_3Lp8vQMenu QR · Riyadh288,540Paused
qr_7Zt1cRParcel labels201,112Expired
Showing 1–3 of 3,914
chevron_left 1 2 3 chevron_right
<div class="ql-table-wrap">
  <table class="ql-table ql-table--hover ql-table--zebra">…</table>
</div>
<span class="ql-badge ql-badge--success"><i class="ql-dot"></i>Active</span>
<nav class="ql-pagination"><a class="ql-page is-active">1</a>…</nav>
13 — Navigation & disclosure

Tabs, accordion, breadcrumb

Dashboard/Codes/Spring Launch

Overview — a summary of this code's destination, brand profile and lifecycle.

Analytics — scans over time, by city and by device, with attribution.

Settings — re-route the destination, pause, expire or archive this code.

A short tracking URL you control — re-route it any time without reprinting.

Yes — POST a batch and receive print-ready assets plus tracking URLs.

<div class="ql-tabs"><button class="ql-tab is-active">Overview</button>…</div>
<div class="ql-accordion"><div class="ql-acc-item is-open">
  <button class="ql-acc-head">…</button><div class="ql-acc-body">…</div>
</div></div>
<nav class="ql-breadcrumb">…<span class="is-current">Spring Launch</span></nav>
14 — Feedback

Alerts, progress & overlays

info
Heads up
Your free month ends in 6 days.
check_circle
Code created
Your branded QR is ready to download.
warning
Approaching scan limit
You've used 920 of 1,000 scans this month.
error
Generation failed
The destination URL is invalid.
cloud_doneChanges saved
Tooltip
72%
Expire this code?close

Scans will stop resolving immediately. This cannot be undone.

CancelExpire
<div class="ql-alert ql-alert--success">…</div>  // --info --warn --danger
<div class="ql-toast">…</div>   <div class="ql-spinner"></div>
<div class="ql-progress"><div class="ql-progress-bar" style="width:72%"></div></div>
<div class="ql-overlay"><div class="ql-modal">…</div></div>
15 — Badges, avatars & counters

Data bits

Info Success Warning Danger Neutral Dynamicclose
LA
LAMHSA+9
Total scans
1.28M
▲ 14.2%
Countdown — free-month offer ends in
{{ cdDays }}
Days
{{ cdHours }}
Hrs
{{ cdMins }}
Min
{{ cdSecs }}
Sec
<span class="ql-badge ql-badge--info">Info</span>   <span class="ql-chip">Dynamic</span>
<div class="ql-avatar-group"><span class="ql-avatar">LA</span>…</div>
<div class="ql-stat">…</div>   <div class="ql-counter">…</div>