Brand

The Nistor mark

Six cells: the upper half of a lineage matrix. How to use the mark, the lockups and the logo animation; the colours, type and shapes of the product; and every file to download.

The mark

The mark is the lineage matrix of three assets, ordered from upstream to downstream. Read it like a table: row and column one are the first asset, row and column three the last.

  • The diagonal is the assets: three cells, always the accent.
  • Above the diagonal are the edges: the cell in row r, column c is the lineage edge from asset r to asset c, always the ink.
  • Below the diagonal is nothing: data never flows back upstream. The empty half is part of the mark.

On a 64-unit grid: cells of 16 with gaps of 4 and a corner radius of 4. It is pixel-exact at every multiple of 16 px, and hinted at every size from 12 to 64 px, with every edge on a whole pixel.

Matrix N, the same grid with the outer columns in ink and the lit diagonal between them, reads as an N. It is a state of the logo animation and an optional monogram; it never replaces the mark in the product, favicons or app icons.

Lockups

The wordmark is nistor, lowercase, in Inter SemiBold with −3.5 % tracking, always in the ink colour of the ground, never the accent. In prose and titles the name is written Nistor.

  • Horizontal (the default): the mark is 1.15 × the font size, the gap 0.32 × the mark, the mark centred on the middle of the capitals.
  • Stacked: the mark above the word, centred; the mark is twice the cap height, the gap half the cap height.
  • Each comes in four colourways: two colours on dark, two colours on light, one colour, and white.
Horizontal lockup, two colours on dark
Horizontal lockup, two colours on light
Stacked lockup, two colours on dark
Stacked lockup, two colours on light
Horizontal lockup, one colour
Horizontal lockup, white, on the indigo tile

Colours

The mark's own colours. The interface's are under UI colours, its status colours under Status colours.

  • Accent #6366f1
    The three diagonal cells, on every ground: the brand accent. The interface's accent is #4F46E5 (see UI colours).
  • Ink on dark #EAEBF2
    The edge cells and the wordmark on #0B0C12 and other dark grounds.
  • Ink on light #0B0C12
    The edge cells and the wordmark on white and #F4F5F9.
  • Ground #0B0C12
    Dark backgrounds and the dark app-icon tile.
  • Icon tile #6366f1
    The coloured app-icon tile; the mark on it is all white.

The accent reaches 4.47:1 on white and 4.37:1 on the dark ground, above the 3:1 that graphics need, and under the 4.5:1 that text needs: it is never the colour of UI text.

Clear space and size

Keep clear space of one cell, a quarter of the mark's height, on every side of the mark and of every lockup. Nothing else goes inside it.

The smallest sizes: 16 px for the mark, 80 px wide for the horizontal lockup.

The 16 px exception

The mark's minimum size is 16 px. The 16 px favicon is the one file that goes under it: its 16 px image is a dark tile, and a 16 px mark would leave the tile no margin, so it carries the mark's hinted 14 px layout (cells 4 px at 0, 5 and 10, corners 1 px) at offset 1, every cell edge on a whole pixel and 1 px of tile around it. No other file draws the mark under 16 px.

Don'ts

One-colour use keeps all six cells: the meaning then rests on their position alone. Never:

  • Rotate it.
  • Recolour or reorder the diagonal.
  • Fill the lower half.
  • Outline the cells.
  • Add gradients, shadows or effects.
  • Squash or stretch it.
  • Put the accent cells on an accent ground.
  • Change the corner radius.

The logo animation

The loader morphs the same matrix through five related drawings and always lands back on the mark. A cell's colour never changes, only its place and shape. One loop lasts 7.1 seconds; every move takes 560 ms and starts upstream.

Below 28 px, and whenever the visitor asks for reduced motion, the loop becomes a pulse: the mark stands still and the diagonal dims in turn.

  1. Six Cells: the mark (900 ms)
  2. Zeros Below: the full matrix; the empty half as three dots (520 ms)
  3. Flat Diagonal: the triangle turned, the assets along the base (520 ms)
  4. Matrix N: the outer columns in ink, the lit diagonal between them (620 ms)
  5. Node Path: the assets as discs on one line (560 ms)
  6. Bracket N: the diagonal between square brackets (620 ms)

On a page load the mark assembles once (the intro, 900 ms). A loader appears only after 400 ms of loading, stays at least 600 ms, and ends on the mark. The custom element is one dependency-free script: nistor-loader.js.

The Nistor loader: the mark morphs through its five states and back, on dark
The loop, on dark
The Nistor loader: the mark morphs through its five states and back, on light
The loop, on light
The Nistor intro: the six cells of the mark assemble, then rest, on dark
The intro, on dark
The Nistor intro: the six cells of the mark assemble, then rest, on light
The intro, on light

The same animations, as GIF and as WebM video, are in the downloads below. Under reduced motion this page shows the still mark in place of each GIF.

UI colours

The interface takes its colours from Nistor's design tokens, not from the mark. The tables below are drawn from the same token files the product ships, so they always show what it uses.

Two accents, two jobs

  • #6366F1 (indigo 500), the brand accent: the mark's diagonal, illustrations, and display type of 24 px and more. It reads 4.47:1 on white, under the 4.5:1 body text needs, so it never colours UI text or controls.
  • #4F46E5 (indigo 600), the UI accent (--primary): the primary action, links, the current nav item, selection and focus. In the dark theme the fill is #818CF8 with ink text on it, and accent text is #A5B4FC.

Indigo marks only what the user can act on, or where they are; everything else is neutral. The neutrals carry the mark's own ink, #0B0C12, and ground, #F4F5F9.

Tonal ramps

The two ramps every role is drawn from
StepIndigoNeutral
0#FFFFFF
25#F9FAFC
50#EEF2FF#F4F5F9
100#E0E7FF#EEF0F6
150#E5E7EF
200#C7D2FE#DCDFE6
300#A5B4FC#B9BDC8
400#818CF8#8D92A0
500#6366F1#7A7F8C
600#4F46E5#5F6473
700#4338CA#4A4F5E
800#3730A3#2A2E3A
850#1B1E28
900#312E81#14161E
950#1E1B4B#0B0C12

Roles

Each role's light and dark value. Code names the role (var(--primary)), never a ramp step or a literal. The status roles are under Status colours.

Roles, light and dark
RoleLightDarkUse
--page#F4F5F9#0B0C12the page ground behind the content
--surface#FFFFFF#14161Econtent: tables, panels, cards, dialogs
--surface-dim#F9FAFC#14161Ea quieter area inside content (a table header, a code block)
--surface-container#EEF0F6#1B1E28a filled control or a selected row on a surface
--ink#0B0C12#EAEBF2body text and titles
--ink-variant#4A4F5E#A9AEBDsecondary text: labels, helper text, metadata
--ink-muted#5F6473#8D92A0the quietest text: placeholders, disabled labels, timestamps
--outline#7A7F8C#8D92A0the border of a control (field, checkbox, outlined button)
--outline-variant#DCDFE6#2A2E3Ahairlines: dividers, card and table borders
--primary#4F46E5#818CF8the filled primary action (one per view)
--primary-hover#4338CA#A5B4FCthe primary action under the pointer
--primary-pressed#3730A3#C7D2FEthe primary action while pressed
--on-primary#FFFFFF#0B0C12text and icons on the primary fill
--primary-text#4F46E5#A5B4FClinks, the current nav item, selected tabs
--primary-container#E0E7FF#282B45the current nav item pill, selection, tonal buttons
--on-primary-container#312E81#E0E7FFtext and icons on the primary container
--inverse-surface#1B1E28#EEF0F6tooltips and the snackbar
--inverse-ink#EAEBF2#0B0C12text on the inverse surface
--inverse-primary#A5B4FC#4F46E5the snackbar's action
--scrimrgba(11, 12, 18, 0.4)rgba(0, 0, 0, 0.6)behind a dialog
--state-hoverrgba(11, 12, 18, 0.06)rgba(234, 235, 242, 0.08)the hover layer over any control or row
--state-pressedrgba(11, 12, 18, 0.1)rgba(234, 235, 242, 0.12)the pressed layer over any control or row
--focus-ring#4F46E5#818CF8the 2 px keyboard focus ring

Contrast

Every text role on every surface, as WCAG 2 contrast ratios rounded down. The token build fails when a pair drops under its minimum.

Text on each surface, light theme (minimum 4.5:1)
Text roleOn pageOn surfaceOn surface dimOn container
--ink17.92:119.52:118.69:117.13:1
--ink-variant7.49:18.16:17.82:17.16:1
--ink-muted5.41:15.90:15.65:15.18:1
--primary-text5.77:16.28:16.02:15.51:1
--error5.32:15.79:15.55:15.08:1
--warning4.98:15.42:15.19:14.76:1
--success4.70:15.13:14.91:14.50:1
--info4.72:15.14:14.92:14.51:1
--neutral5.41:15.90:15.65:15.18:1
Text on each surface, dark theme (minimum 4.5:1)
Text roleOn pageOn surfaceOn surface dimOn container
--ink16.42:115.18:115.18:113.98:1
--ink-variant8.81:18.14:18.14:17.50:1
--ink-muted6.27:15.80:15.80:15.34:1
--primary-text9.79:19.05:19.05:18.34:1
--error8.17:17.55:17.55:16.96:1
--warning11.97:111.07:111.07:110.20:1
--success9.96:19.21:19.21:18.48:1
--info9.26:18.56:18.56:17.88:1
--neutral6.27:15.80:15.80:15.34:1
Text on its fill (minimum 4.5:1)
TextOnLightDark
--on-primary--primary6.28:16.54:1
--on-primary--primary-hover7.90:19.79:1
--on-primary--primary-pressed9.93:113.08:1
--on-primary-container--primary-container9.27:111.20:1
--on-error-container--error-container4.92:16.66:1
--on-warning-container--warning-container4.93:18.96:1
--on-success-container--success-container5.68:17.30:1
--on-info-container--info-container5.54:16.83:1
--on-neutral-container--neutral-container7.16:17.50:1
--inverse-ink--inverse-surface13.98:117.13:1
--inverse-primary--inverse-surface8.34:15.51:1
Borders and the focus ring on each surface (minimum 3:1, light / dark)
RoleOn pageOn surfaceOn surface dimOn container
--outline3.67:1 / 6.27:14.00:1 / 5.80:13.83:1 / 5.80:13.51:1 / 5.34:1
--focus-ring5.77:1 / 6.54:16.28:1 / 6.05:16.02:1 / 6.05:15.51:1 / 5.57:1

Status colours

One set for every surface: the product and its plugins, Nistor Cloud, the status page and the extensions. Error, warning, success, info and neutral, each with a container and the text colour on that container.

  • Status colour is for status only: an icon plus its text, a status badge, a banner, or a chart series that means a state. Never a card fill, a card border, a left rail or a section tint.
  • Colour never carries a state alone: the icon and the word say it too.
  • No other red, amber, green or blue: a surface that needs a status colour takes these roles.
The status roles, light and dark
StatusThemeIcon and textContainerText on containerContrast on surfaceContrast on container
Errorlight#C5221F#FCE8E6#C5221F5.79:14.92:1
dark#F28B82#3B1715#F28B827.55:16.66:1
Warninglight#9A5B00#FEF3E0#9A5B005.42:14.93:1
dark#F2C46B#33270E#F2C46B11.07:18.96:1
Successlight#1C7D4E#E3F3EA#146C2E5.13:15.68:1
dark#81C995#12301F#81C9959.21:17.30:1
Infolight#1B6CCE#E3EEFB#185ABC5.14:15.54:1
dark#8AB4F8#102A4C#8AB4F88.56:16.83:1
Neutrallight#5F6473#EEF0F6#4A4F5E5.90:17.16:1
dark#8D92A0#1B1E28#A9AEBD5.80:17.50:1

Type

Inter for everything; JetBrains Mono only for identifiers and code (asset names, SQL, IDs, hashes), never for labels or numbers. Sentence case everywhere; uppercase only for rare overlines. The product reads at 14 px, with a 12 px floor and 13 px only inside dense tables. The display scale belongs to this website alone, for the hero and section titles. The wordmark is outlines, not type.

Product scale: the product, its plugins, Nistor Cloud, the extensions, the docs
RoleSizeLineWeightFontUse
--type-title22px28px500Interthe page title (one per page)
--type-section16px24px600Intera section or card title
--type-label14px20px600Interlabels, buttons, tab and nav items
--type-body14px20px400Interbody text, fields, menus
--type-table13px18px400Intercells of dense tables (compact density only)
--type-caption12px16px400Intercaptions, helper text, badges: the floor
--type-mono12.5px18px400JetBrains Monoidentifiers and code, nothing else
Display scale: the website only
RoleSizeLineWeightFontUse
--type-display-132px40px600Interwebsite section titles
--type-display-244px52px600Interwebsite page titles below the hero
--type-heroclamp(2.25rem, 4vw + 1rem, 3.5rem)1.1600Interthe website hero (scales with the viewport)

Shape and depth

  • Radii 4, 8, 12 and pill, nothing else. Buttons are pills.
  • Elevation 0 to 2. Cards and panels are flat and separated by 1 px hairlines; only what floats casts a shadow: menus and tooltips (1), dialogs and the snackbar (2). No card inside a card.
  • No glow, gradient or blur on any brand element: the mark, the lockups, the tiles, the social cards and the store images sit on a flat ground.
Radii
RadiusValueUseSample
--radius-44pxbadges, chips, checkboxes, small controls
--radius-88pxfields, menus, tooltips, table containers
--radius-1212pxcards, panels, dialogs
--radius-pill999pxbuttons, the current nav item, filter chips
Elevation, light and dark
ElevationLightDarkUseSample
--elevation-0nonenoneeverything on the page: cards and panels are flat, separated by hairlines
--elevation-10 1px 2px rgba(11, 12, 18, 0.10), 0 4px 12px rgba(11, 12, 18, 0.10)0 1px 2px rgba(0, 0, 0, 0.40), 0 4px 12px rgba(0, 0, 0, 0.32)menus, tooltips, popovers
--elevation-20 4px 8px rgba(11, 12, 18, 0.10), 0 12px 32px rgba(11, 12, 18, 0.18)0 4px 8px rgba(0, 0, 0, 0.40), 0 12px 32px rgba(0, 0, 0, 0.56)dialogs and the snackbar

Icons

  • lucide only, one pinned version across the product, its plugins and the extensions. Codicons only inside VS Code, where they are the editor's own icons.
  • Sizes 16, 20 and 24 px; stroke 1.75 at 16 px, 2 at 20 and 24 px. Icons take the text colour.
  • No emoji anywhere in a UI, status included: a status is its icon in the status colour, plus its text.
  • A button with only an icon has an accessible name, and a tooltip with the same words.

Illustration

Empty states carry a spot illustration drawn in the mark's own language:

  • On the Six Cells grid: a 64-unit box, cells of 16 units with 4-unit gaps and 4-unit corners. A drawing may leave the 3 × 3 layout (more cells, a partial row), never the module.
  • Two colours: the ink of the ground and the brand accent #6366F1. No third colour and no status colour: the error illustration is not red.
  • Filled cells only: no outlines, no faces or characters, no gradients or shadows.
  • 64 or 96 px, so every edge stays on a whole pixel, above the empty state's title.
  • Six to start, one per kind of empty state: no data, no results, all clear, error, not connected, locked.

Screenshots

  • Marketing pages and the docs show the real product: never a mock-up, a redrawn screen or a stock image.
  • Capture them from the demo with the product's capture tool, in the light theme, at 1440 × 900 and 2× (a 2880 × 1800 PNG).
  • Crop to the part that makes the point; never edit the pixels (no blur over data, no recoloured UI). Demo data only.
  • When the screen changes, capture it again: a screenshot that no longer matches the product comes down.

Names

Every title, page, manifest, store listing and doc uses these names. Product names are capitalised; nistor.cloud is a domain, never a name; the lowercase nistor exists only as the wordmark.

Names
ThingNameNot
ProductNistorNISTOR, or lowercase in prose
Managed service Early accessNistor Cloud“nistor.cloud” used as a name
Paid editionNistor Enterprise
Staff consoleNistor Cloud admin“nistor.cloud admin”
Chrome extensionNistor Inspector“Nistor GCP Inspector”, “Nistor Assistant”
VS Code extensionNistor (the Marketplace name may add a descriptor after a dash)
AI entry point (the button)Ask AI
AI pageAI assistant“Nistor Assistant”
Proposals featureAdvisor (a different feature from the assistant)

Partners

  • Use a partner's logo unaltered, from the vendor's own brand or press page, and note the source beside the file.
  • Full colour on light grounds; on dark grounds, the vendor's own dark (reversed) variant. Where the vendor offers none, set the colour logo on a white chip with an 8 px radius.
  • Never recolour a logo, with CSS filters (invert, hue-rotate, brightness) or by hand; never redraw, stretch or crop it.
  • A product of a larger vendor appears with that product's own logo: Google Workspace's, not Google's “G”.
  • “Works with Google Cloud” and every partner badge follow Google's partner guidelines. Partner logos are their owners' trademarks and appear only to say that Nistor works with the product.

Downloads

Every file is generated from the master mark in the Nistor repository (brand/); SVG wherever it is accepted, PNG at 1× and 2× otherwise.

Trademark

The Nistor name and the mark identify the Nistor project and its editions. The Apache License 2.0 that covers the Nistor core grants no rights to them: its section 6 excludes the licensor's trade names, trademarks and product names. You may use the name and the mark to refer to Nistor, unchanged and following this page. For anything else, such as a product name, a logo of your own or merchandise, write to info@nistor.io.