01
Inventory is the hero
The homepage's job is to put a relevant property in front of someone in under three interactions. Nothing decorative may sit above the first search affordance.
Public website · Design system v1.0
The grotesk is the agency speaking; the serif is the journal. Everything else is drawn out of the mark's two unequal gabled volumes — near-black ink on paper, hairlines instead of shadow, one deep marine accent used at most twice a screen, and a 45° chamfer that appears exactly once.
01
Four rules that settle most arguments before they start. When a decision is not covered below, ask which of the five primary jobs it serves; if the answer is none, remove it.
01
The homepage's job is to put a relevant property in front of someone in under three interactions. Nothing decorative may sit above the first search affordance.
02
Call, WhatsApp and visit request are the same intent. One of them is solid on a given screen; the other two are secondary. Three solid buttons is a failure.
03
Missing data is shown as missing — Non communiqué — never rounded, guessed or quietly dropped. Transparency is the differentiator.
04
The public site is a property journal. Staff reach /app through one quiet text link in the footer — never a dashboard-shaped CTA.
02
The mark is white on black and carries no second colour, so the system is monochrome by default. One accent — vert marine — is permitted, capped at two visible uses per screen. Canonical values are OKLch; the hex is handoff only.
--bg · #f9f9f8Default field for every page.
--surface · #f0f0eeFilter bar, table zebra, recessed panels.
--fg · #131311All primary text and solid marks.
--muted · #5e5e5aMetadata and captions. 6.2:1 on paper.
--border · #d9d9d6Structure. Never a shadow substitute.
--accent · #235f4eTwice per screen, no more.
Generated from the six above. The accent is never placed on --plate — it drops to 2.1:1 there. Use --accent-on-dark, which is the same hue re-lightened.
--surface-hoverRow and ghost-button hover field.
--border-strongInputs and controls. 3.5:1 — meets the UI minimum.
--accent-hoverDarker on hover, never lighter.
--accent-washActive filter field only.
--plate · #141412Masthead, footer, owner band.
--accent-on-dark9.5:1 on plate.
Rendered as a 7px solid square plus a label — never a filled pill, which would compete with the accent.
| Pair | Ratio | Required | Verdict |
|---|---|---|---|
| Ink on paper | 17.7:1 | 4.5:1 | Pass |
| Muted on paper | 6.2:1 | 4.5:1 | Pass |
| Muted on surface | 5.7:1 | 4.5:1 | Pass |
| Accent on paper | 7.1:1 | 4.5:1 | Pass |
| White on accent (button rest) | 7.5:1 | 4.5:1 | Pass |
| White on accent hover | 10.5:1 | 4.5:1 | Pass — contrast rises |
| Control edge on paper | 3.5:1 | 3:1 | Pass |
| Plate text on plate | 16.7:1 | 4.5:1 | Pass |
| Plate muted on plate | 7.4:1 | 4.5:1 | Pass |
| Accent-on-dark on plate | 9.5:1 | 4.5:1 | Pass |
| Sous compromis on paper | 4.7:1 | 4.5:1 | Pass |
03
Two families with a role split that is the brief made literal. Archivo is the agency — every headline, label, price and table cell. Newsreader is the journal — property narrative, advisory writing, pull quotes. A serif never appears inside a button; a grotesk never carries long-form prose.
Display 60
Annaba, bien par bien
H1 42
Villa avec vue mer, Seraïdi
H2 28
Nos biens en vente
H3 20
Appartement F4, Saint-Cloud
UI 15
Demander une visite
Prose 18 · serif
Le bien occupe le troisième étage d'un immeuble de 1958, ravalé en 2022. L'ascenseur dessert tous les niveaux. Le séjour et deux des trois chambres donnent sur la baie ; la cuisine et la salle d'eau sont orientées cour.
Caps 12
Référence & statut du bien
Small 13
Mis à jour le 4 août 2026 · Mandat simple
Mono 12
AIC-2419 · DPE non communiqué
Two failures make a page read as machine-made: uppercase set without positive tracking, and display type set without negative tracking. Both are lint-level errors here.
| Context | Letter-spacing | Weight | Line-height |
|---|---|---|---|
| Display ≥48px | −0.03em | 650 | 1.02–1.1 |
| Heading 32–47px | −0.02em | 650 | 1.1 |
| Heading 20–31px | −0.01em | 600 | 1.2–1.3 |
| Body, both families | 0 | 400 | 1.55–1.66 |
| Small 12–13px | 0.01em | 400 | 1.5 |
| UI labels & buttons | 0.02em | 550 | 1.4 |
| ALL CAPS | 0.08em | 600 | 1.4 |
Every price, surface area, room count and date uses font-variant-numeric: tabular-nums so figures align down a column. Prices are grouped with a thin space and end in DA; rents carry / mois.
| Bien | Surface | Pièces | Prix |
|---|---|---|---|
| Villa · Seraïdi | 312 m² | 7 | 78 500 000 DA |
| Appartement F4 · Saint-Cloud | 104 m² | 4 | 24 900 000 DA |
| Local commercial · Menadia | 86 m² | — | 95 000 DA / mois |
| Terrain · Chetaïbi | 1 240 m² | — | Prix non communiqué |
04
Every edge in the mark is vertical, horizontal or a clean 45°. The system inherits that literally: nothing is rounded, structure is carried by hairlines rather than shadow, and the one diagonal in the mark becomes the one flourish on the site.
RADIUS
Cards, buttons, inputs, chips, dialogs and focus rings are square. The only circle on the site is a person's avatar. Status markers are squares.
CHAMFER
The roofline's 45° cut appears on the top-right corner of the featured card and nowhere else. Not on buttons, not on images, never twice in a viewport.
STRUCTURE
1px solid var(--border) divides everything. Shadow is reserved for a single case: an overlay lifted off a photograph.
GRID
1280px shell, 24px gutters. Scale: 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 · 128. Nothing lands off the 8px baseline.
The mark is two volumes of unequal width sharing a seam. Sections repeat that proportion: a narrow index field carrying the section number and framing, a wide content field, and a 1px seam between them. This page is built on it — the column you are reading now is the wide field.
Index field
3 of 12 columns. Section number, title, framing note. Sticky on desktop.
Content field
9 of 12 columns. Specimens, inventory grids, prose. Collapses to a single column below 900px, index field first.
Monoline, 1.6px stroke, currentColor, 20px on a 24px box, square caps to match the mark. Never an emoji, never a filled glyph, never an icon beside a heading.
05
Photography carries the whole premium claim, so it is governed harder than anything else in the system. Architectural, not lifestyle. Empty, not staged. Taken at the property, or not published.


Required
Rejected
06
Call, WhatsApp and viewing request are three routes to one intent, so only one of them is solid on a given screen. WhatsApp never ships in its brand green — it would out-shout the primary CTA and drag the page toward a template.
One solid button. Two outlined. One text link. The copy never repeats word for word between them.
Hover moves the background along the OKLch L channel and leaves contrast equal or higher. The foreground is never shifted toward --muted. Disabled is the only state permitted to lose contrast.
Propriétaires
Estimation sur place sous 72 h, mandat clair, diffusion immédiate dès publication.
The owner band is the one place the primary button inverts to paper-on-plate. The accent stays out of this block entirely — on --plate it would fail contrast, and the band already owns the page's attention.
07
Search is the homepage's real hero, so it is built as a first-class component rather than a hero decoration. Every control is 48px tall or more, every control has a visible label, and errors state what to do next.
5 biens correspondent · achat, tous types, tout Annaba
Four fields is the ceiling. Anything the CRM can derive is not asked for. The reference is carried in, never retyped.
08
Three card forms, one information order: reference and status, then title, then locality, then the three specs that decide a click, then price. Never reorder it — the scan pattern is the product.
Specimen content. The values below are placeholders for layout testing, not live inventory. Prices, surfaces and references come from the CRM.

Seraïdi · Route de la corniche

Saint-Cloud · Rue des Frères Bouhired

Les Caroubiers · Boulevard du 1er Novembre

Menadia · Face au marché couvert

Chetaïbi · Piste du Cap
Used on the search results page below the fold, and in the "biens similaires" rail. Identical information order.

Saint-Cloud · 104 m² · 4 pièces · Ascenseur

Chetaïbi · 1 240 m² · Accès carrossable · Viabilisé
Unknown values are published as unknown. This is the transparency principle made mechanical.
| Surface habitable | 104 m² |
|---|---|
| Surface terrain | — |
| Étage | 3e sur 5, avec ascenseur |
| Année de construction | 1958, ravalé en 2022 |
| Charges mensuelles | Non communiqué |
| Type de mandat | Mandat simple |
| Référence | AIC-2388 |
09
The journal register. Property narrative, market notes and advisory writing are set in Newsreader at a 62–68 character measure. This is the only place the serif appears, and it is what separates the site from a listings portal.
Saint-Cloud n'est pas un quartier homogène. La bande qui longe le boulevard a été construite entre 1954 et 1961, avec des hauteurs sous plafond de 3,10 m et des cages d'escalier larges ; les immeubles édifiés après 1980, deux rues en arrière, offrent des surfaces comparables pour un prix au mètre carré inférieur d'environ un cinquième.
La différence tient moins à la vue qu'à l'ascenseur et au ravalement. Un acheteur qui cherche un F4 familial a donc deux marchés distincts dans un rayon de trois cents mètres, et les visiter dans le désordre fait perdre du temps à tout le monde.
Nous publions les deux, séparément, avec l'année de construction en clair.
« Une annonce qui cache une information la remplace par une visite inutile. » Note de méthode · Adel ImmoConseils
Pull quotes sit in the index field, rule above, 26px serif. One per article. Never centred, never in quotation-mark graphics.
10
Five pages carry the five jobs. Each is specified as an ordered block list so a build cannot silently reorder it. Deviations need a reason written into the ticket.
Job 1 · find something fast
Job 1 · narrow it down
Job 2 · convert
Job 3 · win a mandate
Jobs 4 & 5 · trust and staff
11
French is primary; Arabic is a first-class second language, not a bolted-on translation. Mirroring is structural — the whole component flips, including the spec dividers and the price row — while numerals, references and the logo stay in their reading direction.

Saint-Cloud · Rue des Frères Bouhired
Mirrors
Never mirrors
12
Foreground and background are defined as a pair for every state. Contrast after a state change is equal or higher than at rest, with one exception. This table is the acceptance criteria, not a suggestion.
| Element | State | Background | Foreground | Contrast |
|---|---|---|---|---|
| Primary button | Rest | --accent | #fff | 7.5:1 |
| Hover | --accent-hover | #fff | 10.5:1 | |
| Focus | --accent | #fff | 7.5:1 + 2px ring | |
| Disabled | --surface | --muted | 5.7:1 — the only permitted drop | |
| Secondary button | Rest | transparent | --fg | 17.7:1 |
| Hover | --surface-hover | --fg | 14.0:1 | |
| Inverted primary on --plate only | Rest | oklch(0.90 …) | --plate | 13.9:1 |
| Hover | --bg | --plate | 17.4:1 — ΔL +0.08 | |
| Filter chip | Rest | --bg | --fg | 17.7:1 |
| Selected | --fg | --bg | 17.7:1 — inverted as a pair | |
| Text input | Rest | --bg | --border-strong | 3.5:1 edge |
| Focus | --bg | --accent | 7.1:1 edge, 2px | |
| Error | --bg | --status-offer | 4.7:1 + message | |
| Property card | Rest | --bg | --border | hairline |
| Hover | --bg | --fg | edge darkens, −2px lift |
Enforced
Rejected on sight
13
The brief's word was restraint. These are the specific failures that would read as a template, a luxury cliché, or a piece of software — the three things this site must not be.
Premium here means
Premium here never means
Reads as an agency
Reads as software