Aruba Webstudio · internal · v2 · from the mark

Theme Book

Every decision, once. This page is styled by the same tokens.css it documents. If the system breaks, this page breaks with it.

01

The mark

A divi-divi, the tree the trade winds bend permanently southwest, and the thing on this island everyone recognises without being told. Not a palm. It carries the whole positioning by itself: shaped by where it grows, and still standing.

The full mark
logo-mark.svg · 48px and up
The small-size mark
favicon.svg · under 48px
The mark on a dark ground
logo-mark-dark.svg
The mark in one colour
logo-mark-mono.svg · one ink
The small mark on a dark ground
logo-mark-small-dark.svg · no tile

Vector, not raster. The mark is traced paths, so it is sharp on any screen and at any print size, and the whole file is under 2 KB. That's smaller than the 32px PNG it replaces. The PNG set stays for the places that still demand one: the .ico, the Apple touch icon, the web manifest, and the social card.

Horizontal lockup
logo-lockup.svg
Horizontal lockup on a dark ground
logo-lockup-dark.svg
Lockup with the location strapline
logo-lockup-strap.svg · for print and profiles

The lockup carries its own font. Bodoni Moda is embedded in each lockup file, so it sets identically on a machine that has never heard of the typeface: in a client's deck, an invoice, a partner's footer. That costs about 60 KB per file, which is why the lockups are for handing out and the site's own header sets the name in live HTML instead. Regenerate them with python3 brand/build-logo.py.

Two marks, on purpose. At 32px the ring goes fragile and the canopy layers collapse into noise, so small sizes drop the ring and let the tree fill the frame. We checked that by magnifying a 16px render, not by assuming it scaled. The site's own header sets the mark at 30px and therefore uses the small one, not the full mark shrunk: a rule the studio publishes and then breaks on its own homepage is not a rule.

The small mark comes with a navy tile and without. The tile is for a favicon, which lands on browser chrome of unknown colour and has to bring its own ground. Anywhere the background is already known, like the nav or a dark deck, use the transparent one. The tile shows up as a patch of not-quite-matching navy.

02

The idea

Aruban light, technical structure. The ground is warm and sun-bleached like limestone at midday. The accent is the deep blue of the flag, not the turquoise gradient every Caribbean business defaults to. Structure is visible in the hairline rules, the grid and the monospace annotations, because the work is engineering and the design should say so before the copy does.

The tension is deliberate: an island studio that ships to app stores. Warm light says where we are; the grid says what we can do.

03

Colour

Ten tokens, every one taken from or derived from the mark. The neutral ramp is the logo navy mixed toward the logo cream, so every grey carries a trace of the brand and is not an imported neutral. Ratios are measured, not estimated, and verified in CI.

ink
#0B2F48
12.1:1 · from the tree
amber
#FABA5E
1.5:1 · decorative only
ground
#F3EFE3
from the mark
panel
#FBF9F3
cards
panel-2
#E9E4D6
tinted surfaces
ink-soft
#3E596A
6.4:1
muted
#506876
5.1:1
sea
#1B6CA8
4.9:1 · links
amber-deep
#896633
4.6:1 · amber as text
rule
#D7D2C4
hairlines

The one rule that matters. The logo amber is 1.49:1 on cream, so it can't carry text at any size. It is the ring, large graphic shapes, and marks on navy. Anything with words in it uses --amber-deep. This is the constraint people break first, because amber is the colour they remember from the logo.

Beyond that: one accent per page, and --sea carries every link. Dark mode grounds in the navy, not a neutral black, so the brand survives the theme switch, and amber needs no darkened variant there because it has 9.6:1 against a dark ground.

04

Type

Three faces, three jobs. Bodoni Moda is the display face: high contrast, fine hairlines, and enough character to be recognisable at a glance, which is the whole point of one. Archivo is a workhorse that stays readable at 17px on a phone in sunlight, which is where most of this work gets read. IBM Plex Mono carries anything technical: labels, specs, prices.

This page said Bricolage Grotesque until recently, and loaded it, while the homepage set every heading in Bodoni and never loaded Bricolage at all. The design system and the shipped site disagreed about what the studio's face is. The site is what clients see, so the site won.

Bodoni needs size. Its thin strokes thicken and thin across a single letter, which is what makes it beautiful at 60px and mushy at 15px. Use it for display only: headlines, section titles, the lockup. Below roughly 20px, or anywhere the text has to be read instead of seen, use Archivo. A weight of 500 is the ceiling. Heavier fills the counters in and the elegance goes.

--text-4xl · display · 400 · tracking −0.015em
Built in Aruba.
--text-2xl · display · 500
Section heading
--text-base · body · 400 · 1.62 · max 68ch
We design and build websites, mobile apps and APIs for businesses that need more than a template. Running text sits at 17px, not 16, because a small difference that matters on a phone held at arm's length in bright light.
--text-xs · mono · 500 · tracking 0.14em · uppercase
Oranjestad, Aruba · websites · apps · apis
05

Space

A 4px base. Every margin in the system is one of these steps. Arbitrary values are how a layout starts looking accidental, and the difference is visible even to people who cannot name it.

--space-1 · 4px · icon gaps
--space-2 · 8px · label to value
--space-3 · 12px · inside buttons
--space-4 · 16px · paragraph rhythm
--space-5 · 24px · card padding, gutters
--space-6 · 32px · between blocks
--space-7 · 48px · sub-sections
--space-8 · 72px · section padding
--space-9 · 104px · major breaks
06

Components

The handful that appear on every client site. All of them live in tokens.css. Nothing below is styled by this page.

Grid

Cells share a hairline instead of a gap, so the structure stays visible. The house look.

Card

Raised surface, hairline border, near-square corners. Heavy rounding reads consumer-app.

Focus

Never removed. Tab to the button above and you'll see it. That ring is the most commonly deleted accessibility feature on hand-built sites.

07

Voice

How the studio writes. The test: would you say this out loud to a restaurant owner across a table? If not, rewrite it.

We writeNot
Live in a week, fixed price.Rapid turnaround, competitive rates
We'd rather tell you it's not a fit.We tailor bespoke solutions to every client
Half up front, half when it's live.Flexible payment terms available
The piece tells its own story.Leveraging cutting-edge AR to drive engagement
Nos ta papia Papiamento.Multilingual support available

No em dashes. Nobody reaches for one out loud or in a quick email, so a page full of them reads as written by something that doesn't talk to people. Use a full stop, a comma, or two sentences. This page had twenty and the homepage had five, which is how the rule came to exist.

Contract your verbs. "Your POS and your website probably do not share data" is not a sentence anyone says. It was on the homepage, next to "we have been through both review processes" and "tell us what you are building". No contractions anywhere is the loudest tell there is, louder than any single word choice.

Both are enforced by brand/check-voice.py, which runs in CI beside the contrast check and for the same reason: this page claimed a standard the site did not meet, and nobody caught it by reading.

08

Using this on client work

This is the part that makes the studio faster over time. A client project overrides three tokens and inherits everything else.

<link rel="stylesheet" href="tokens.css">
<style>
  :root {
    --sea:    #C8452E;   /* client accent  */
    --ground: #FBFAF8;   /* client ground  */
    --ink:    #1A1A1A;   /* client text    */
  }
</style>