Mojo Stylesby Mojo Layers

StylesAssay

Style 10 of 12 · bench and night shift

Assay

Corporate science for regulated manufacturers: every claim measured, every result shown inside its limits.

ExactSoberEvidential

Best for

  • Pharma manufacturers
  • Medicinal cannabis (AU)
  • Testing laboratories
  • Biotech
  • Medical devices
Newsreader · Albert Sans · JetBrains Mono
Assay template home page: a serif headline with a blue italic clause beside a chromatogram with labelled, shaded peaks and a peak table
Assay template on a phone

STYLE.md ·

How Assay works. Every rule, written down.

Corporate science for regulated manufacturers: every claim measured, every result shown inside its limits.

Exact · sober · evidential

Best for

  • Pharmaceutical and medicinal manufacturers, including Australian medicinal cannabis companies whose public sites must not promote their products (see "Regulated health in Australia" below)
  • Contract testing and analytical laboratories, CDMOs, compounding and specialty manufacturers
  • Biotech and clinical-stage companies, medical device makers, research institutes
  • Audiences: business partners, regulators, healthcare professionals, investors and job seekers, mostly on desktop, reading carefully

Less suited to: consumer retail or lifestyle (Atelier, Pebble), community pharmacy (Remedy, which is warmer and local), or any brand that sells on feeling rather than evidence.

Personality and voice

Measured and plain, like a well-written quality report. Claims come with a number, a unit or a standard. No hype, no superlatives, no promises about outcomes.

  • Headlines: "Medicines made to a standard you can check." · "Nothing leaves until every result is in." · "Air that only flows one way."
  • Buttons: "How we release a batch" · "Partner with us" · "See open roles" · "Healthcare professionals"
  • Microcopy: "Price-sensitive announcements are marked." · "Product codes and results on this page are illustrations." · "Replies within two working days."
  • Words to avoid: "best", "leading", "breakthrough", "miracle", "cure", "safe and effective", "natural", "plant", any product, brand or ingredient name on a public page of a regulated-health site.

Colour

Token Bench (light) Night shift (dark) Role
--paper #f5f6f8 #070b15 Page: bench white, cool
--card #ffffff #0e1424 Cards, instrument panels, records
--well #eceef3 #0a101d Alternate sections, inputs
--line #d9dde6 #1f2a42 Hairlines
--grid #e3e7ef #172036 Graph-paper grid
--ink #0b1324 #e8edf7 All text
--muted #586276 #8e99b1 Quiet text, units
--cobalt #2443c9 #8ea4ff The one meaningful colour: links, buttons, the trace, "released"
--cobalt-soft #e4e9fc #16214a Spec windows, selected tiles, icon wells
--t2 amber #c26a00 #ffb454 Data and decoration only: cursor, air flow, notices, focus
--t3 magenta #b02a72 #ff7ab8 Data only (integrated peaks, charts)
--t4 teal #0f7f86 #4fd1d9 Data only
--alert #b42318 #ff8a7a Out of specification, safety notices

Measured contrast (WCAG): ink on paper 17.1:1 · muted on paper 5.7:1 (on well 5.3:1) · cobalt on card 7.7:1 · white on cobalt 7.7:1 · alert 6.6:1. Night shift: ink 16.8:1 · muted 6.9:1 (on card 6.4:1) · cobalt 7.8:1 · text on cobalt 7.9:1 · alert 8.0:1. Amber (3.9:1 in light) is never used for text.

No green. It reads as "natural" or "plant" and as pass/fail at the same time; Assay's pass colour is cobalt.

Typography

  • Display: Newsreader 400–600 with optical sizes: a journal serif with authority, never stiff.
  • Body: Albert Sans 400–700: clear, technical, quiet.
  • Data: JetBrains Mono 400–700: every number, unit, code and eyebrow.
Token Size Use
--fs-h1 clamp(44px, 5.8vw, 88px), weight 450, tracking −0.028em, line 0.98 Page headline
--fs-h2 clamp(32px, 3.9vw, 56px), weight 450 Section headline
--fs-h3 22px, weight 550 Card titles
--fs-lead clamp(17px, 1.35vw, 20px) Intro paragraphs
--fs-body 16.5px Body
--fs-label 11.5px mono caps, tracking 0.08em Eyebrows, column heads

The signature move: the headline states the standard and ends in a cobalt italic clause that names the evidence: "Medicines made to a standard you can check." Numbers are never set in the serif's old-style figures: big figures use lining numerals, units drop into small mono beside them (2,600 m²).

Layout

  • 1240px wrap, gutter max(20px, 4vw). Spacing scale --s-1…--s-8 (4 to 104px).
  • The hero and page heads sit on graph paper (--grid, 28px), fading out downwards or to the left.
  • Hero: copy on the left, an instrument panel (the chromatogram) on the right; it stacks below the copy on phones.
  • Sections alternate paper and well; heads stack or split (headline left, lead right). Figures run in a ruled strip of four.
  • Tables are first-class: anything with a limit gets a spec bar.

Shape

  • Squared and exact: buttons and inputs --r-s 6px, cards --r-m 10px, panels --r-l 16px. No pills except the switch track.
  • Hairline borders do the work; shadows are short and cool. One shadow (--shadow-lift) for instrument panels and records.
  • The eyebrow mark is an axis corner (└), the brand mark an integrated peak in a square.

Motion language

  • The run: the chromatogram draws left to right under an amber cursor over 5.6s, the time and signal readouts tick with it, each peak is labelled as the cursor reaches it and shaded (integrated) as it passes; the peak table fills in row by row. "Run again" repeats it.
  • The release: the batch record ticks each test 380ms apart, then the RELEASED stamp lands (a short overshoot, then still).
  • Spec bars: each result slides into its window (1.1s).
  • The process line draws across its stations; figures count up; the air flow on the facility plan moves from high to low pressure.
  • Reveals: 12px rise and fade, 700ms. The phone menu opens like an instrument drawer, links indexed 01, 02, 03.
  • Motion switch in the footer ([data-motion-toggle], html.calm, remembered as site-motion, default from prefers-reduced-motion). Calm shows the finished run, the released record and the final values; nothing is hidden.
  • Night shift switch ([data-theme-toggle]): the dark mode, remembered as site-theme; the trace glows faintly; theme-color follows.

Imagery and illustration

The pictures are evidence: chromatograms, batch records, spec tables, a drawn facility plan, a process line. Line icons at 1.6px stroke on a cobalt-soft tile. Real photography only of real facilities and people (labs, suites, teams) in daylight, desaturated slightly, 10px radius. Never stock imagery of pills, leaves, droplets, flowers or smiling patients.

Signature components

  • .chroma[data-run]: the chromatogram (.chroma-head, .chroma-plot with .axis-y, .axis-x, .chroma-foot with [data-rt], [data-au] and [data-rerun], and table.peaks). The run is JSON in data-run (see below).
  • .lot: the batch record (.lot-head, .lot-checks li with .tick, .res, .lot-foot with .stamp).
  • .spec (--lo, --hi, --v as percentages): a result inside its specification window; .spec.fail for out of limits.
  • .figures ([data-count]), .cap capability cards, .process (--n stations), .plan facility plan with .room.g7/.g8 and .flow, .ann announcements with .badge.ps, .gate audience chooser, .notice / .notice.safety, .close-card with a trace.

A run, in data-run (retention time and width in minutes, height 0–1):

{"t": 12, "duration": 5600, "peaks": [
  {"rt": 1.42, "h": 0.09, "w": 0.06, "n": "Imp. A"},
  {"rt": 6.12, "h": 0.92, "w": 0.16, "n": "Active"}
]}

Multi-page kit

  • Phone menu: .menu-btn[aria-controls] opens .site-menu (an indexed drawer); Escape, outside click and links close it; focus stays inside while open.
  • Current page: aria-current="page" (cobalt underline).
  • Inner pages: .page-head with .crumbs, a .tag and a smaller .h1, on graph paper.
  • Fields: .field, .fields, .field-wide, fieldset.field-set, .select, .form-card; form[data-template] shows "This is a template" on submit.
  • Tiles: .choices › label.choice > input + span.
  • Segmented control: .seg with button[aria-pressed]; add data-filter="#list" and data-value on buttons to filter items with data-tags (count in [data-filter-count="#list"]).
  • Gate: [data-gate] with button[data-show="panel-id"]: shows one panel, hides the others.
  • Slider, switch, tables: input.range, .switch[role=switch], .table / .table.stack, td.r, td.m.
  • Rendered later: Assay.refresh(root); Assay.run(el) reruns a chromatogram.

Regulated health in Australia

Assay was written for companies whose public websites are tightly limited. For medicinal cannabis and other prescription medicines in Australia, the TGA's advertising rules apply to the whole public site:

  • No promotion of prescription medicines to the public, including indirect references (product names, ingredients, "THC", "CBD", "plant medicine", strains, imagery of leaves or flowers), condition or treatment claims, and anything that steers people towards asking for a product.
  • No eligibility quizzes, symptom checkers or "do I qualify" flows, and no testimonials or reviews.
  • Product information for healthcare professionals sits behind a gate (.gate) and, on a real site, behind verified sign-in. The public side says plainly that it can't help patients choose a medicine and points them to their doctor or pharmacist.
  • Corporate content is fine: the company, its quality system, facilities, people, investors, careers and contact details, written factually.
  • Every page carries a footer line saying the site doesn't advertise or promote any medicine, and how to report a side effect.

These notes are design guidance, not legal advice; a real launch needs a review against the current TGA guidance and the client's own regulatory advice.

Do and don't

  • Do give every claim a number, unit, standard or date.
  • Do label sample data as an illustration on template and demo pages.
  • Do use spec bars whenever a result has limits.
  • Don't use green, leaves, droplets, pill stock or "natural" language anywhere.
  • Don't put product names, ingredients or conditions on public pages of a regulated-health site.
  • Don't set text in amber, magenta or teal; they're for data.

Accessibility

AA contrast throughout (measured above). Skip link, visible amber focus ring, real buttons for reruns and gates, the chromatogram's table carries the same data as the picture (the plot itself is aria-hidden), the facility plan has a title and focusable rooms. Forms label every field. Tables stack with labels on phones. Responsive to 360px; tested with motion on and off, in Bench and Night shift.

How to make it yours

Dial Range
Accent Cobalt (default), deep teal-blue, ink violet or oxblood: any hue that holds 4.5:1 with white and isn't green
Trace palette Three data colours, distinct from the accent and from each other
Hero instrument Chromatogram (default), spectrum, dissolution curve, or a batch record
Ground Graph paper (default) or plain
Night shift On (default) or light only
Not negotiable Newsreader with the cobalt italic clause, mono numbers and units, hairline structure, spec bars for anything with limits, the Motion switch, and on regulated-health sites no product promotion

Start with Assay

Your business, in Assay. Fixed price, your content.

We set your logo, palette and words within Assay's rules and build the site. Prices in AUD, no GST added, 50% upfront and 50% on delivery.

Industry templates in Assay

Pricing and FAQOpen the live templateWant something bespoke instead?

The other eleven