Reading text
Islamic geometric patterns are intricate structures built from simple, repeated rules. We build software the same way: small, well-made modules, clear interfaces, a coherent system.
Roles, not hues: each name says what the colour is for. Every pair the system relies on is measured at build time.
--al-color-bgThe page--al-color-surfaceCards, panels, inputs--al-color-surface-sunkWells, hover, info--al-color-textBody text--al-color-text-mutedSecondary text--al-color-lineHairlines--al-color-controlControl borders--al-color-accentActions, focus, success--al-color-on-accentText on accent--al-color-dangerErrors, destroying--al-color-warningNeeds attention--al-color-infoInformation--al-color-inverseToasts, tooltips--al-color-chart-1Chart, first series--al-color-chart-2Chart, second series--al-color-chart-3Chart, third series--al-color-chart-4Chart, fourth seriesEight bright tints for identity and emphasis: tags, highlights, avatars. Each ink is readable on its ground.
data-tint="teal"data-tint="green"data-tint="yellow"data-tint="orange"data-tint="pink"data-tint="purple"data-tint="blue"data-tint="cyan"Jost for the interface and headings, Newsreader for reading. Arabic falls through to IBM Plex Sans Arabic, Kufam and Amiri: a little larger, more line height, no letter-spacing.
displayWhereas disregard and contempt for human rights have resulted3xlWhereas disregard and contempt for human rights have resulted2xlWhereas disregard and contempt for human rights have resultedxlWhereas disregard and contempt for human rights have resultedlgWhereas disregard and contempt for human rights have resultedmdWhereas disregard and contempt for human rights have resultedbaseWhereas disregard and contempt for human rights have resultedsmWhereas disregard and contempt for human rights have resultedxsWhereas disregard and contempt for human rights have resultedReading text
Islamic geometric patterns are intricate structures built from simple, repeated rules. We build software the same way: small, well-made modules, clear interfaces, a coherent system.
Numbers inside a sentence
It costs £12 a month for each person, or $1,440 a year for 10 people.
A 4px step for everything spatial. Corners are crisp (2px); depth comes from borders and surface steps, never shadows.
--al-space-1--al-space-2--al-space-3--al-space-4--al-space-5--al-space-6--al-space-8--al-space-12--al-space-16Quick, and only in answer to something done: 150ms for feedback, 250ms for disclosure and themes. With reduced motion, things change at once.
Line icons on a 24-unit grid. Those that point along the reading direction mirror in right-to-left.
Paragraphs, lists, a quotation, code, keys and a highlight, inside .al-prose: the reading face, the measure, and space between.
Running text in bold, italic, with a link, inline code, a key, Ctrl + S, and a highlight. And small print.
A quotation inside running text, with its source after it.
Does something. One primary per view; the label names the action and its object.
Related actions joined in a row or a column, one border between each. Each is still its own button.
A link that stands on its own: underlined in the accent, with an arrow to a next step, or an icon to another site.
A way back, before the page's title: a back link for the previous step, breadcrumbs for where a page sits.
A visible label, an optional hint, the field; optional fields say so.
We'll only use this to reply to you.
Type 5000, 5k or ٥٬٠٠٠.
Error: Enter a reference that's 2 letters then 6 numbers, like AB123456
An icon says what goes in; the label still names it.
Changed, not saved
A select for a fixed list; a combobox (a datalist) where people may also type their own.
A new group is created when you save.
For longer answers. With a limit, it says what's left in words, and lets people type past it.
A sentence or two is enough.
Three fields for dates people know. For a date near today, use the date picker.
A date near today, typed or chosen from a calendar in the page's language: in Arabic, Arabic month and day names, the week from Saturday, the chosen digits, and a grid that runs from the right.
For example, 2026-11-30
A field with its icon, and Clear once there's text. Escape clears it too.
A checkbox for all of a group, mixed while some are chosen and some aren't.
Independent options, in a fieldset with a legend; the whole row is the target.
One of several, with a sensible default where there is one.
A setting that applies the moment it's flipped: no Save.
Two to five short options, all visible: a choice in a form, or a view switch.
A value along a scale, with the value itself beside it, in the page's digits and with its unit.
Up to £2,000.
One to five, as radios drawn as the mark's star, each named in words: “4 of 5”.
Your rating, as it's shown.
When a form is submitted with errors: every error, at the top, each a link to its field. It takes focus, and the page title starts with “Error:”.
What's secondary, folded away, with the value inside shown beside its name.
Settings most people never need.
A card holds one thing people act on, with its actions at its foot; a panel is a rule above a group; a stat is a figure with its label.
Supporting text · updated today
A card groups one thing: its summary, and what you can do with it.
Recommended
A ribbon pins one word to one card; the footer holds its actions.
A rule above a group: most groupings need no box.
Code to read or copy, left to right in either language, with the lines that matter marked. A command is one line to paste.
<link rel="stylesheet" href="dist/arabesque.css">
<header class="al-site-header">…</header>
<script type="module">
import { initSiteHeaders } from "./js/site-header.js";
initSiteHeaders();
</script>import { ArabesqueProvider, SiteHeader } from "@arabesquelabs/design-system/react";
export const Top = () => (
<ArabesqueProvider lang="ar" sprite="/dist/icons.svg">
<SiteHeader links={links} />
</ArabesqueProvider>
);.al-code__pre {
direction: ltr;
text-align: start;
}npm run buildA column of tabs, each a name and a line about it, beside what the chosen one shows.
.al-toc a {
padding-inline-start: var(--al-space-3);
border-inline-start: 2px solid var(--al-color-line);
}Tab reaches every control; arrow keys move within tabs, menus and dates; Escape closes what opened.
Who uses it, as their marks in one colour, as many to a row as fit. Never a scrolling marquee.
What someone said, in their words, then who they are.
What it's about
What they said, in their own words: trimmed, never reworded, and shown with their permission.
A second person's words, beside the first.
The page's last word: one line, then what to do.
Start from the template, or take only the parts you need.
Facts about one thing, each with its own action: for checking answers, and for any record.
For comparing values: numbers line up, the total stands out, asides recede. Wide tables scroll in their own region.
| Item | Quantity | Price | Total |
|---|---|---|---|
| Item one | 2 | £12.00 | £24.00 |
| Item two | 1 | £120.00 | £120.00 |
| Item three | 4 | £2.50 | £10.00 |
| Total | £154.00 | ||
| Of which VAT, at 20% | £25.67 |
A short status beside something, in words. Sentence case, never capitals.
Colour for identity and emphasis, in eight bright tints; never for status.
Highlights draw the eye to key words, names and ideas, in any of eight tints.
The parts of a longer job, each with its status in words; done in any order.
What happened, each event at its time, along a line: a record's history or an activity feed.
Request approved
Budget changed to £1,200 a month
Sam Okafor commented
Can we start a week earlier?
Request sent
Things of one kind, one to a row: notifications, results, files. A row that opens something is a link from edge to edge.
A band of the page: a hairline from the one before, its heading and lede.
01 Who we are
Four stages, repeated as many times as it takes to get something right.
Settings most people never need.
A numbered sequence: the stages of how something is done. Only for real sequences.
1
Start with the real problem, not the assumed solution. We take time to understand the constraints before writing a line of code.
2
Structure comes before pixels. We sketch the system's shape, its data, flows and edge cases, so the build has a foundation.
3
Small, deliberate increments instead of big-bang releases. Working software, reviewed and tested at every step.
4
The first version is rarely the right one. We revisit, simplify and polish until the details hold up.
A message in the page, in four kinds, each with an icon and a title. A side-effect note says what else will change, before it does.
Done
Your changes are saved.
Planned maintenance
On Sunday, from 2am to 4am, saving may be slow.
Changes saved
Everyone with access can see them now.
Check your details
Some of your details may be out of date.
Couldn't load this page
The connection dropped. Check you're online, then try again.
Changing this also updates 2 related items.
Under the header: the product, or part of it, is new or changing, and feedback is welcome.
Code blocks now have syntax colour. See what's new
What just happened, briefly, with Undo when it can be undone.
A decision that needs attention now. It never loses what was typed, and confirms only what can't be undone. A sheet on small screens.
A short label for an icon or a mark, on hover and on focus. Never essential.
A state in a word, with a dot in its colour. The word is the meaning; the dot repeats it.
Server one Online
More about something, when it's asked for: a button opens it beside itself. Escape or a click outside closes it.
Tax code
It tells your employer how much tax to take from your pay. It's on your payslip.
Contact angle
The angle at which the pattern's lines meet the tile's edge: 67.5°.
Why there's nothing here, and the next action. Never a dead end.
No items yet
Add one to get started. You can import several at once, too.
Progress where the work happens: a skeleton, a spinner, or a bar when it can be measured.
Loading items
The end of a flow that sends something: it's done, the reference, then what happens next.
Your reference AL-4K7Q-92
Whether a change is kept, what else it touches, and which figures are being worked out again. Try them.
Changing the amount also updates 2 related items.
Working out again…
Over 12 months: £6,600
A change shown at once that the server then refused: put back where it was, with why, and Retry.
Once things are selected: how many, what can be done to all of them, and a way to clear.
The platform's modifier: ⌘ on Apple devices, Ctrl elsewhere. Single keys never fire while typing.
Values over time or across categories, grouped, with an optional target line.
The parts of a whole, in one bar, with a key.
Each value against its target, with the difference in words.
The mark beside the wordmark, built from the logo pack. One colour; never redrawn.
The 4.8.8 tessellation of the mark's tile, contact angle 67.5°, drawn by rule: as texture behind a band, or across a hero with its focal tile (as at the top of this page).
One quiet line across the section, and one focal tile in the accent, with its caption. It draws itself in once.
One tile, a whole system.
This tile is our mark. Everything around it follows from the same rule.
How the pattern is made, in three steps, each read as software.
1 Tile the plane with simple shapes.
In software: modules.
2 From each edge's midpoint, draw two lines at a fixed angle.
In software: interfaces.
3 Remove the scaffolding. The pattern holds.
In software: the system.
The questions people ask before they start, each folded under its question, each answer short, with a link for more.
Yes: every component is written for right to left as well as left to right, and every spec is in Arabic too. How right to left works
No. The CSS and the small helpers in js/ work on any page; the React components write the same markup.
The build measures every colour pair the system relies on, in both themes, and fails if any falls short.
For anything sent, or hard to take back: ask; check errors on submit, with an error summary; let people check their answers; then confirm, with what happens next. Try submitting it empty.