LatestAutumn test campaign complete: 42 flights and 61 flight hours

Design library

Styleguide.

The living reference for the Adelt website. Tokens are generated from design/tokens/*.json (W3C DTCG) by Style Dictionary into src/styles/tokens.css. Components live in src/components/ui/. Rules and rationale are in design/README.md.

Brand

Mark and wordmark.

The mark is the search pattern the aircraft flies: lanes joined at the ends, with the aircraft as a point in the accent at the end of the last lane. It is the one place the accent appears in the brand. The earlier delta mark is retained at /brand/adelt-mark-delta.svg. The wordmark is Archivo at 125% width, weight 800, capitals. Minimum size for the lockup is 20 px high; below that use the mark alone.

Adelt
Adelt
Adelt
Adelt

Alternatives under review: ten logo explorations. Files: /brand/adelt-mark.svg, /brand/adelt-mark-reverse.svg, favicon.svg. Never rotate the mark. The lanes take ink or slate-ink; the point is always beacon.

Colour

Thirteen colours, one accent.

Components never use a raw colour. They use role variables (--bg --surface --ink --muted --line --line-2 --accent) which the .slate and .cover contexts remap. Beacon is for links, focus and markers, never for backgrounds.

Dark mode follows the system by default. One small contrast glyph in the header flips it; picking what the system already prefers returns the site to automatic. The choice is remembered in this browser only. It is a second set of role values, not a second stylesheet: the ground becomes slate, text becomes slate-ink, the accent becomes beacon-soft, and the sections that were dark step one tone lighter than the ground so the page keeps its rhythm. Photographs are untouched. Every component already works in both because it only ever used the roles.

  • paper

    Page ground

  • paper-2

    Raised surface

  • ink

    Text

  • ink-2

    Secondary text

  • line

    Hairlines

  • line-2

    Strong hairlines

  • slate

    Dark ground

  • slate-2

    Dark surface

  • slate-ink

    Text on slate

  • slate-ink-2

    Secondary on slate

  • beacon

    Accent

  • beacon-soft

    Accent on slate

  • amber

    Status only

Type

Four voices, strict roles.

Archivo (display, 105% width) for h1 and h2 and the wordmark. Familjen Grotesk (Stockholm) for body, navigation and h3 down. JetBrains Mono for data only: coordinates, timestamps, values that line up in columns. Labels and captions are sentence-case Familjen. Newsreader italic for quotes and the opening statement only. All self-hosted. Sizes are fluid between 360 px and 1440 px viewports. Labels are sentence case; nothing on the site is set in tracked capitals except the wordmark.

--text-xs

Eyes over the coast

--text-sm

Eyes over the coast

--text-0

Eyes over the coast

--text-1

Eyes over the coast

--text-2

Eyes over the coast

--text-3

Eyes over the coast

--text-4

Eyes over the coast

--text-5

Eyes over the coast

--text-6

Eyes over the coast

label

Fig. 1 Vinga, climb-out 57°41′N 11°41′E

serif

“We stopped sending a boat to look at every radar return.”

Space and layout

A twelve-column grid and a fluid space scale.

Place children with style="--c: start / span n". Below 880 px everything stacks. The left three columns are the rail for markers and metadata; content starts at column four. Rules replace boxes: .ruled for columns, .rows for lists. .bleed-right lets an image run to the viewport edge; .cover is a full-bleed photograph with a gradient for text.

  • --space-3xs
  • --space-2xs
  • --space-xs
  • --space-s
  • --space-m
  • --space-l
  • --space-xl
  • --space-2xl
  • --space-3xl
1
2
3
4
5
6
7
8
9
10
11
12

Components

What exists, and when to use it.

Readiness
a track, not a badge

Stat
value, unit, condition

90 min

Endurance

Sea level, 10 m/s wind, EO/IR payload

<3 min

Time to launch

Vehicle stop to airborne

Figure
crop marks, mono caption, coordinates

Vinga in flight
Fig. 1Vinga, climb-out57°41′N 11°41′E

Quote
serif italic, role not name

“The first time the thermal picture came up on the radio operator's screen, the whole crew went quiet.”

Station chief, volunteer sea rescue association

Aircraft drawing
placeholder for renders

Line drawing of a twin-boom VTOL aircraft, vinga, top view, wingspan 3.5 m3.5 m spanVinga, top view

Figures
drawn from data, mono for values only

matchgeo-refgeo-refhand overEO/IR gimbalAIS receiverRadar (Nidingen)Detection 0412, vesselDetection 0413, vesselDetection 0414, person in waterDetection 0415, vehicleAIS, MMSI 265…Track 07, fishing vessel, AIS matchTrack 08, no AIS, flaggedTerrain and coastline modelOperator confirmsCustomer C2, radio netFlight log, evidencesensordetectiontrackperson decides
Fig., Common operating picture, one flight
Search area, 12.4 km², drawn by the operatorAC-1, lanes 1–4AC-2, lanes 5–8AC-3, lanes 9–10Ground station, one operatorMesh relay: any aircraft carries the others' detections home
Fig., Coordinated search, three aircraft, one area

Contact band
one offer after proof

An offer with a named outcome and one primary button, placed once, after the evidence. Used on the home page at about 46 % of the scroll. Never "Get in touch".

Section head
marker in the rail

Projects

What happened on the last flight.

Header

A bar that stays, compacts, and gets out of the way on a phone.

The announcement strip scrolls away; the header is sticky. Its layout height never changes: a 16 px strip above a 56 px bar. It sticks at −16 px, so after the first scroll only the bar remains and nothing below it shifts. The lockup eases from 21 to 18 px and a hairline shadow appears; the scrolled state engages past 24 px and releases under 4 px, so it never flickers. The ground is translucent paper with a backdrop blur, so photographs read through it. On desktop it never hides: the way back to the rest of the site should not move. Under 960 px the links collapse into a full-height sheet with large links and one call to action; the header hides on scroll down and returns on scroll up. The header's measured height is written to --header-h, which anchors and sticky sidebars use.

At rest

72 px tall including the reveal strip, lockup 21 px, links in Familjen 500 at the small size, current page underlined in ink, "Talk to us" as a bordered button. One filled button per view, and that one belongs to the hero.

Scrolled

56 px visible, lockup 18 px, hairline shadow. 220 ms on the ease-out curve; the page content does not move by a pixel.

Phone

"Menu" with a two-line glyph that becomes a cross. The sheet fills the viewport below the bar, lists pages in the display face at the third size, and ends with the contact button and the sales address. Closes on navigation.

Later

Product pages get a local bar when the hero scrolls out: system name on the left, "Request the brief" on the right. Not built yet.

Motion

Seven behaviours, each with a reason.

All of them stop under prefers-reduced-motion. Nothing counts up, nothing bounces, no section fades in because it is a section. The page never scrolls on its own and never snaps to sections: usability studies on scrolljacking find most people disoriented and some reading it as a bug. Smooth scrolling applies to anchor links only, and anchors land below the sticky header.

  1. 1

    Entrance. The home hero rises once on first load, four elements 70 ms apart. Nowhere else.

  2. 2

    Reveal. Photographs and figures fade in 8 px as they enter the viewport, once. Without JavaScript nothing is hidden.

  3. 3

    Draw. Diagram strokes draw themselves when the figure comes into view. The diagrams are about process; the motion shows it.

  4. 4

    Cover drift. Scroll-driven parallax on cover photographs with CSS animation-timeline: view(). No scroll listener; unsupported browsers see a still.

  5. 5

    Video. Poster first, fades to motion on playing, plays only in view.

  6. 6

    Header. Compacts on scroll without moving the page; hides and returns on phones only.

  7. 8

    Readiness fill. The programme segments fill left to right when the track comes into view.

  8. 9

    Searching together. Three aircraft fly their lanes on one 16-second timeline; relays flash, the operator confirms, the hand-over lands, and a ground-station log beneath prints each event as it happens. Still under reduced motion.

  9. 7

    Page transitions. Links are prefetched on hover, a 180 ms cross-fade swaps the page, the header and announcement persist, and a project's or system's photograph and title morph from the list into the detail hero, and between sections the page title shapes into the next page's title. New pages open at the top; back restores position.

Viewport

Fluid first, one breakpoint, containers for the rest.

Type and space scale with the viewport between 360 and 1440 px. The grid stacks at 880 px; the header collapses at 960 px. Everything else adapts by container query. Covers use svh. Images ship as WebP and JPEG at 640, 960 and 1400 with a sizes hint. The page never scrolls sideways; a probe checks every route at 1280 and 390.

Rules

What this system refuses to do.

These came out of the survey of 27 defence and drone sites and the research on AI-generated design tells. Each one is a thing we saw and chose against.

  1. No cards, no shadows.

    Rules and whitespace separate things. A 3 px radius on photographs, video and buttons is the only softening, so the page is not newsprint either.

  2. No gradients, no glass.

    The one gradient is the darkening over a cover photograph, and it exists so text can be read.

  3. No centred hero with three cards.

    Content sits in a left rail and a right field. Asymmetry is the default.

  4. No intro animation, no scroll-triggered fades.

    Motion is limited to hover on links and the arrow. Reduced-motion is honoured.

  5. No black with amber.

    That is the uniform of our competitors. Our dark is slate, our accent is beacon blue, used sparingly.

  6. No badges, no coloured status words, no tracked uppercase mono.

    Programme status is a four-stage track with the stage and date in words. Labels are sentence case in the body face. Mono appears only where digits line up.

  7. No arrows welded to buttons.

    A link is underlined. A button says what happens.

  8. No icons.

    Numbers, labels and photographs do the work. The only pictograms are the mark and the aircraft drawing.

  9. No meta strings joined with dots.

    "Vinga · autumn campaign" becomes a sentence or a comma. Dots between fragments are template chrome.

  10. No “Get started”, “Seamless”, “Elevate”.

    Copy names what happens: “Talk to us”, “Request the brief”, “System details”.

  11. No invented numbers after launch.

    Every figure carries its condition. Placeholders are flagged in the content files until measured.