trailwise

Brand

How Trailwise looks, sounds and moves

Navy that speaks, one teal that never speaks, and a pale band to breathe between. Square controls against round containers. Motion that travels in a direction rather than decorating. The product's argument is that it tells you when it does not know, so the interface never performs a confidence it has not earned.

Space GroteskNoto SansWCAG AA Light theme

Foundations

Colour

Ink and paper do the work. Teal is the one accent and it is a fill, never a word: at 2.5 against white it fails as text at every size. Where teal has to be read it becomes teal deep. Sky separates one section from the next and is never a full page.

Ink--ws-ink#15344B12.93:1 · AA

Display type and dark surfaces

Teal--ws-teal#03B8A52.5:1 · Never text

The brand. Fills only, never a word

Teal deep--ws-teal-deep#00786C5.38:1 · AA

The text-safe teal

Sky--ws-sky#E2F5FFSurface · ink 11.53:1

The band that separates sections

Paper--ws-paper#FFFFFFSurface · ink 12.93:1

The default surface

Body--ws-body#00000021.0:1 · AA

Body copy is true black, not ink

Duo--ws-duo#1C5F916.78:1 · AA

The blue every duotone photograph prints in

Muted--ws-muted#6A7F8E4.17:1 · Large only

Secondary and axis text

Chart series · assign in this order, never cycled

1
2
3
4
5
6
7
8

Validated against white for lightness, chroma, colour-vision separation and contrast. All eight are safe where series sit next to each other, as in lines and bars. In a scatter or a small multiple, where any pair can meet, only the first three hold; past three, fold into Other or facet.

Sequential and diverging

Typography

Two families, and the split is strict. Space Grotesk at −0.05em is for anything that speaks. Noto Sans at +0.02em is for anything that explains. Hierarchy comes from size and weight, never from a third face. Emphasis is weight or colour, never italic.

Watching the drift, not the damage A plan written in January knows nothing about your performance this week.

Tissue takes load, adapts, takes more load, adapts again. When the load arrives faster than the adaptation can keep pace, the tissue does not fail on the spot.

Read the note
RoleSizeFaceWhere it appears
Megaclamp(3.6rem,17.6vw,261px)DisplayClosing bands only
H1clamp(2.9rem,8.1vw,120px)DisplayPage titles
H2clamp(2.2rem,4.05vw,60px)DisplaySection heads, article titles
H3clamp(1.9rem,3.1vw,46px)DisplayBlock heads
Ledeclamp(1.1rem,1.82vw,27px)BodyOne paragraph under a title
Bodyclamp(1rem,1.21vw,18px)BodyEverything else
Proseclamp(1.05rem,1.32vw,20px)BodyLong-form, capped at 68ch
Label16px, uppercaseBodyNav, buttons, kickers

The highlighter

One plan that builds around your body
One span per visual line. A marker across a wrapping headline loses its block on every line after the first.

Tokens

Containers are round, controls are square, and the contrast between the two is the look. Do not soften the controls and do not sharpen the cards.

Radius and spaceValue
Cards, dialogs--ws-radius 32px
Tool panels8px
Every control0px
Content cap--ws-maxw 1416px
Gutter20px, 32px above 1024
Header104px, 88px below 1024
Spacing4 8 12 16 24 32 48 64 96
Elevation and motionValue
Card0 30px 60px −40px / 45%
Lift on hover0 40px 80px −40px / 55%
Dialog0 60px 120px −50px / 70%
Easingcubic-bezier(.22,.61,.36,1)
Micro220ms · hover, focus, colour
Reveal800ms · opacity and a 24px rise
Focus ring3px solid, 3px offset

Components

Buttons

A chamfer at the top left running the full height, so the control leans in the direction everything else travels. One primary action per view. Hover deepens the notch rather than swapping a colour, which is the only place on the site where a hover is a gesture instead of a state change.

Get started Large, on the sky band
The angle is the constant, not the inset. 12px on a 38px button and 18px on a 57px one are both about 17.5 degrees. At any other height the cut is height times 0.315. The fill sits on a clipped layer rather than on the element, because clipping the element itself would take its focus ring with it.

Badges and status

Uppercase, tracked, square. Four reserved status colours that never become a chart series. A status colour never carries meaning alone: it always arrives with a dot or a word.

Save 30% Pro Beta Synced Stale Disconnected

Garmin connected. Last sync 4 minutes ago.

Polar has not synced in 6 days. Detail past 28 days cannot be recovered once the window closes.

We could not reach Strava. Reconnect to resume importing.

Forms

Labels are always visible, set in uppercase micro type above the field. Hints are persistent rather than appearing on error. Fields are square, 54px tall, and focus is a 3px teal ring at 1px offset.

Data and telemetry

Numbers are set in the display face with tabular figures, so a column compares down rather than shifting. Every computed signal carries its confidence, and a signal running on thin data says so instead of producing a plausible number. That last part is the one piece of this system no other brand has.

Readiness86 Full coverage
Weekly load412 +8% on the four week mean
Resting HR48 up 3 for nine days
Resilience Two days of data
SessionTypeDistanceAvg paceLoad
MondayEasy8.0 km5:3844
WednesdayIntervals10.2 km4:2192
SaturdayLong24.0 km5:55176

Patterns

Motion

One easing curve and two durations. Scroll-driven motion writes a single custom property per frame to a stage element and lets CSS do the rest, never a listener per item. The signatures are the card stack riding up into the band, the staircase that reveals a step at a time and then exits left, and the fan that opens on a scroll fraction.

PatternTimingWhat it does
Reveal on enter800msOpacity and a 24px rise. Never staggered to death.
Pin the stagetied to scrollMedia holds while copy travels through it
Hand-offtied to scrollOne passage exits left as the next arrives from the right
Button notch260msThe cut deepens. The label does not move.
Dialog420msOpacity and a 20px rise
Reduced motionrespectedEvery reveal resolves instantly and nothing is left hidden
Anything driven by a scroll variable needs an answer for when the scroll code never runs. Under reduced motion, or below a breakpoint where the stage is disabled, the variable stays at its initial value and whatever it feeds still has to render.

Photography

Real trail and real weather, never stock athleticism. Hero imagery prints in a single blue: the photograph supplies luminance and --ws-duo supplies the hue, so a misty forest and an athletics track end up in the same world. Everywhere else, evidence imagery keeps its own colour, because a chart of your own data should not be styled.

Duotone · hero only
Own colour · evidence

Brand

Voice

Expert and plain-spoken. Direct second person, short sentences mixed with longer ones, concrete over abstract. We explain the reasoning behind every call and we state the limit rather than hiding it. Where we do not know, we say so, because a signal you have quietly learned to distrust will not change what you do on the day it matters.

We sound like

  • Today is easy on purpose. Your sleep dipped, so we softened the session.
  • Not enough data yet. This needs about two more weeks before it means anything.
  • We could not reach Garmin. Your last sync was six days ago.
  • Bring any watch. Your history lives here for good.

We never sound like

  • Hype, hustle, or shouting about crushing goals.
  • Oops, something went wrong.
  • Unlock powerful insights with our comprehensive dashboard.
  • Comparisons to other apps or coaches.

Do and do not

Do

  • Let ink and paper carry the page.
  • Keep teal to fills, and to one primary action per view.
  • Hold square controls against round containers.
  • Set every metric in the display face with tabular figures.
  • Show confidence beside any number the system computed.
  • Cap a reading column in ch, not pixels.

Do not

  • Set teal as text on any surface.
  • Add a gradient. There are none anywhere in this system.
  • Round a button or square a card.
  • Introduce a second accent colour.
  • Use emoji as interface icons.
  • Use an em dash in any copy.

Downloads

The system as a page you can read, a stylesheet you can link, and the tokens as data. The brand book is the reference; the stylesheet is what an internal tool should use rather than reimplementing any of this.

Superseded. This replaces the Field Guide system: forest, cream and alpenglow, set in Hanken Grotesk and JetBrains Mono. The only thing that crossed over is the angled button geometry, re-cut against these tokens. If you find Field Guide colours in a project, they are the old system.

Start with tomorrow.

Thirty days of Trailwise Pro, your history imported on day one, and a plan that answers to what your body is actually doing.

Get started