Vytal · Styleguide

vytal.

A vital sign for fitness businesses and vitality for the athletes who train. One pulse: the brand, the colour, the type and the products that keep a gym’s heartbeat in view.


Logo

animated
static
vytal.
On dark · #080c0a
vytal.
On light · #f3f7f4

Sub-brands · pro & my

The product name leads, as one word. myVytal is the athlete’s own space; proVytal, for the people who run the space. The pulse tile never changes; the app icon is always the Vytal mark.

myVytal
my · athlete portal
proVytal
pro · staff & management

The mark, measured

A vital sign that is also a V. The vertex at 32,46.5 with arms at 27,26.5 and 37,17.5: an asymmetric V, the right arm 1.45× taller, so it reads as the spike of an electrocardiogram.

What changed on 2026-08-27
  • Centred. The stroke sat 1.5 units above the square's centre (30.5 against 32). Margins were 14 top-to-spike and 17 trough-to-bottom; now both are 15.5.
  • Stroke 5 → 5.5. At 16 px, 5 rendered 1.25 px, sub-pixel. Tried 6 and it got worse at 96: the trough merges into the spike.
  • The V was untouched. Translation only, zero rescale. Arms keep 76.0° and −80.2°, and the 1.45× asymmetry.
At the sizes it actually appears
128
96
64
48
32 · favicon
24
20
16

At 16 px no version is good. A seven-point stroke does not fit in sixteen pixels. The alternative was a second, simplified mark just for the favicon, and it was refused: there is one mark.


The green: only three work as a button

Of nine greens measured, only the dark ones carry a legible white label (at least 4.5:1, WCAG AA for normal text). Every green the fitness category uses (lime, neon, energy) fails.

There is no energetic green that works as a primary button. The choice is not clinical or fitness: it is where you put the energy. This product puts it in the twelve-hue family a gym picks from, not in the identity.

corwhite labelsurface on darksurface on lightbutton?
Esmeralda 800#065f46
7.68:12.49:17.36:1yes
Esmeralda 700#047857
5.48:13.49:15.25:1yes
Floresta#0e7a42
5.41:13.54:15.18:1yes
Teal 600#0d9488
3.74:15.12:13.59:1no
Green 600#16a34a
3.30:15.81:13.16:1no
Energia#00b45a
2.74:17.00:12.62:1no
Green 500#22c55e
2.28:18.41:12.18:1no
Green 400#4ade80
1.74:110.99:11.67:1no
Lima#84cc16
1.98:19.70:11.89:1no

The candidates, in real components

The logo, a primary button and a number, in both themes, at the size they appear. This is where you choose, not in the table.

Esmeralda 800#065f46
proVytalCreate planRevenue9 689 €
proVytalCreate planRevenue9 689 €
Esmeralda 700#047857Brand green
proVytalCreate planRevenue9 689 €
proVytalCreate planRevenue9 689 €
Floresta#0e7a42
proVytalCreate planRevenue9 689 €
proVytalCreate planRevenue9 689 €

One logo per app

The mark is the same in all four; the word changes. And there is ONE rule, not two devices: one green element per lockup, and it marks what makes that lockup different. The base has no prefix, so its logo is its green; the apps have a prefix, so the logo is the prefix.

vytal.
proVytal
myVytal
demoVytal
vytal.
proVytal
myVytal
demoVytal

The kiosk and the TV carry no logo of ours, and that is measured: both apps read the GYM's colour and brand. A kioskVytal would be our brand covering the client's, on the door of their own gym.


Colour

Green is the only brand colour. Neutrals always carry a green bias, never pure grey. Signal colours serve data and status, never the brand.

Brand green
50
#f0fdf4
100
#dcfce7
200
#bbf7d0
300
#86efac
400
#4ade80
500
#22c55e
600
#16a34a
700
#15803d
800
#166534
900
#14532d
950
#052e16

The brand is not a step of this ramp, deliberately: the old green was Tailwind's green-600 unchanged, which is to say half the web's default green.

Neutrals · green-biased ink
0
#f3f7f4
50
#dceee0
100
#c8d6cc
200
#a7b8ac
300
#7f9488
400
#5d6f64
500
#3d4f43
600
#2a382e
700
#1e2a22
800
#162018
900
#0f1610
950
#080c0a
Surfaces (dark)
Background#080c0a
Surface#0f1610
Surface raised#162018
Hairline#1e2a22
Surfaces (light)
Background#fafafa
Surface#ffffff
Surface raised#f2f1ef
Border strong#8b857c
Signal colours
Success / Data greenok · positive · on-track (série de dados, NÃO a marca)#06b044
Info / Blueneutral data · links#5399fa
Warning / Amberattention · at-risk#c09106
Danger / Rederrors · destructive#fa6b6b
AI / Purplehighlights · assistant#cd72fa
Activity / Orangemovement · activity#f77016
Roles and rules

Every colour has a job. Vytal green is identity; blue, amber, red, purple and orange communicate status or data and never replace the brand.

Brand green
#047857
use Logo, mark, primary button, active identity
avoid Do not use for small text on the DARK canvas: 3.49:1. Use green-text (#06ae7e)
Data green
#047a2f
use Chart series, veils, non-text fills (PRODUCT_HUES seed)
avoid Never paint the logo or a filled button with it
Green deep
#036449
use Text on light surfaces, focus and selected states
avoid Do not replace the logo green
Warm ink
#1a1712
use Primary text and dark logo wordmark
avoid Do not use as a brand accent
Warm canvas
#fafafa
use Light application background and clear space
avoid Do not tint the logo tile
Vytal dark
#100f0d
use Dark application background and dark lockup
avoid Do not turn every surface black
Card
#1b1916
use Raised panels, menus and dialogs
avoid Do not nest cards for page sections
Contrast pairings

The official green is used as identity or a non-text element. Measured 2026-08-27: on the LIGHT canvas (#fafafa) it is 5.25:1 and works; on the DARK canvas (#100f0d) it is 3.49:1 and does NOT work for small text. There the text takes green-text (#06ae7e, 6.72:1).

Aa · Text sampleBrand green / on-green
Aa · Text sampleLight / green text
Aa · Text sampleDark / primary text

Text colours

Text hierarchy per background. Primary for content, secondary and muted for support, accent for action.

On dark
Primary#dceee0
Secondary#a7b8ac
Muted#7f9488
Disabled#3d4f43
Accent#047857
On green#f2fbf5
On light
Primary#0f1610
Secondary#3d4f43
Muted#5d6f64
Disabled#a7b8ac
Accent#047857
On green#f2fbf5

Typography

Families
Aa
Inter
Body, interface and running text
ABCDEFGHIJKLM
abcdefghijklm 0123456789
Aa
Oswald
H1, H2 and display numbers
ABCDEFGHIJKLM
abcdefghijklm 0123456789
Aa
Instrument Serif
Editorial and campaign accents
ABCDEFGHIJKLM
abcdefghijklm 0123456789
Aa
JetBrains Mono
Code, data and labels
ABCDEFGHIJKLM
abcdefghijklm 0123456789
Type scale
vytal.
Display · 64/58 · 800
Manage your space
H1 · 42/42 · 800
Today’s operation
H2 · 30/33 · 700
At-risk members
H3 · 21/25 · 700
Book a class, log the WOD, watch the pulse.
Body L · 18/28 · 400
Book a class, log the WOD, watch the pulse.
Body · 15/23 · 400
Updated 2 minutes ago
Small · 13/20 · 500
Members · Active
Caption · 11/15 · 500
Weights · Inter
VytalRegular · 400
VytalMedium · 500
VytalSemibold · 600
VytalBold · 700
VytalExtrabold · 800

Tokens

Radius
sm · 8px
md · 12px
lg · 16px
xl · 18px
pill · 9999px
Elevation
sm
md
lg

Usage

Do
  • Pick the lockup that fits the background: light or dark.
  • Keep clear space ≈ the tile’s corner radius around the logo.
  • Let the pulse breathe; the green tile is the constant.
Don’t
  • Recolor the tile or the pulse, or add gradients.
  • Stretch, rotate, or outline the lockup.
  • Use the signal colors (cyan/amber/red) as the brand.

How this page stays true

No contrast ratio on this page is typed: every one comes from the same function the server uses to validate the colour a gym picks. If a number here is wrong, the RULE is wrong, not somebody's memory.

Vytal · vytal.fit · one pulse across the brand and its products.