Skip to content

Typography System

The NETWRIX project uses two primary typefaces that complement each other to create a modern, professional, and accessible typography system.

Location: src/scss/framework/_var/_vars.scss and src/scss/framework/foundation/font/


Font Name: Hubot Sans

  • Variable: $type-a
  • Usage: Headings, titles, large display text, hero sections
  • Characteristics: Modern, geometric, excellent for large sizes
  • Fallbacks: "Hubot Sans", "HubotSans-fallback", "Courier New", monospace
$type-a: "Hubot Sans", "HubotSans-fallback", "Courier New", monospace;

Font Name: Syne

  • Variable: $type-b
  • Usage: Body text, paragraphs, small text, UI elements
  • Characteristics: Clean, readable, optimized for long-form content
  • Fallbacks: "Syne", "Syne-fallback", "Trebuchet MS", "Verdana", sans-serif
$type-b: "Syne", "Syne-fallback", "Trebuchet MS", "Verdana", sans-serif;

Location: public/fonts/

File Structure:

public/fonts/
├── HubotSans/
│ ├── HubotSans-Regular.woff2
│ ├── HubotSans-Medium.woff2
│ ├── HubotSans-Bold.woff2
│ └── ... (various weights)
└── Syne/
├── Syne-Regular.woff2
├── Syne-Medium.woff2
├── Syne-Bold.woff2
└── ... (various weights)

Font faces are defined in src/scss/framework/foundation/font/_font-face.scss using @font-face rules with optimized loading strategies.

Font Face Definition:

// Example pattern (actual definitions in _font-face.scss)
@font-face {
font-family: 'Hubot Sans';
src: url('/fonts/HubotSans/HubotSans-Regular.woff2') format('woff2');
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: 'Syne';
src: url('/fonts/Syne/Syne-Regular.woff2') format('woff2');
font-weight: 400;
font-display: swap;
}

Loading Strategy:

  • Uses font-display: swap to prevent invisible text during font loading
  • WOFF2 format for optimal compression and browser support
  • Fallback fonts ensure text remains readable during loading

The typography system uses 7 font tokens (f—font-a through f—font-g) that provide a consistent scale across the application. Each token is fully responsive.

Location: src/scss/framework/foundation/font/_make-font.scss

  • Desktop: 4.375rem (70px)
  • Tablets: 2.5rem (40px)
  • Mobile: 2rem (32px)
  • Font Family: Hubot Sans
  • Line Height: 1.1 (desktop), 1.2 (responsive)
  • Usage: Main hero headings, primary page titles

SCSS Mixin:

@mixin make-font-a($weight: 400) {
font-family: $type-a;
font-weight: $weight;
line-height: 1.1;
font-size: 4.375rem;
@media all and ($viewport-type: $tablets) {
line-height: 1.2;
font-size: 2.5rem;
}
@media all and ($viewport-type: $mobile) {
font-size: 2rem;
}
}
  • Desktop: 2.5rem (40px)
  • Tablets: 2rem (32px)
  • Mobile: 1.6rem (25.6px)
  • Font Family: Hubot Sans
  • Line Height: 1.2
  • Usage: Section headings, secondary hero titles

SCSS Mixin:

@mixin make-font-b($weight: 400) {
font-family: $type-a;
font-weight: $weight;
line-height: 1.2;
font-size: 2.5rem;
@media all and ($viewport-type: $tablets) {
font-size: 2rem;
}
@media all and ($viewport-type: $mobile) {
font-size: 1.6rem;
}
}
  • Desktop: 1.5rem (24px)
  • Tablets: 1.375rem (22px)
  • Mobile: 1.1rem (17.6px)
  • Font Family: Hubot Sans
  • Line Height: 1.25
  • Usage: Card titles, subsection headings

SCSS Mixin:

@mixin make-font-c($weight: 400) {
font-family: $type-a;
font-weight: $weight;
line-height: 1.25;
font-size: 1.5rem;
@media all and ($viewport-type: $tablets) {
font-size: 1.375rem;
}
@media all and ($viewport-type: $mobile) {
font-size: 1.1rem;
}
}
  • Desktop: 1.3125rem (21px)
  • Tablets: 1.25rem (20px)
  • Mobile: 1rem (16px)
  • Font Family: Hubot Sans
  • Line Height: 1.3
  • Usage: Small headings, prominent labels

SCSS Mixin:

@mixin make-font-d($weight: 400) {
font-family: $type-a;
font-weight: $weight;
line-height: 1.3;
font-size: 1.3125rem;
@media all and ($viewport-type: $tablets) {
font-size: 1.25rem;
}
@media all and ($viewport-type: $mobile) {
font-size: 1rem;
}
}
  • Desktop: 1.125rem (18px)
  • Mobile: 1rem (16px)
  • Font Family: Syne
  • Font Weight: 500
  • Line Height: 1.4
  • Usage: Lead paragraphs, introductory text, important body text

SCSS Mixin:

@mixin make-font-e($weight: 500) {
font-family: $type-b;
font-weight: $weight;
line-height: 1.4;
font-size: 1.125rem;
@media all and ($viewport-type: $mobile) {
font-size: 1rem;
}
}
  • Desktop: 1rem (16px)
  • Mobile: 0.9rem (14.4px)
  • Font Family: Syne
  • Line Height: 1.4
  • Usage: Standard body text, paragraphs, main content

SCSS Mixin:

@mixin make-font-f($weight: 400) {
font-family: $type-b;
font-weight: $weight;
line-height: 1.4;
font-size: 1rem;
@media all and ($viewport-type: $mobile) {
font-size: 0.9rem;
}
}
  • Size: 0.75rem (12px) - same across all breakpoints
  • Font Family: Syne
  • Line Height: 1.4
  • Usage: Captions, fine print, metadata, labels

SCSS Mixin:

@mixin make-font-g($weight: 400) {
font-family: $type-b;
font-weight: $weight;
line-height: 1.4;
font-size: 0.75rem;
}

HTML Examples:

<!-- Extra large display heading (Font A) -->
<h1 class="f--font-a">Transform Your Security Posture</h1>
<!-- Large heading (Font B) -->
<h2 class="f--font-b">Key Features</h2>
<!-- Medium heading (Font C) -->
<h3 class="f--font-c">Real-Time Threat Detection</h3>
<!-- Small heading (Font D) -->
<h4 class="f--font-d">Advanced Analytics</h4>
<!-- Large body text (Font E) -->
<p class="f--font-e">
Discover how NETWRIX helps organizations secure their critical data
with enterprise-grade solutions.
</p>
<!-- Regular body text (Font F) -->
<p class="f--font-f">
Our platform provides comprehensive visibility across your entire
IT infrastructure, enabling proactive security measures.
</p>
<!-- Small text (Font G) -->
<small class="f--font-g">Last updated: November 17, 2025</small>

You can also use typography mixins directly in your component styles for more control:

src/scss/framework/components/[your-component]/_c--your-component.scss
@use "@scssFoundation/foundation.scss" as *;
@use "@scssUtilities/utilities.scss" as *;
.c--my-custom-heading {
@extend .f--font-a; // Extend font-a
@extend .u--font-bold; // Extend font-bold
color: $color-a;
margin-bottom: $measure * 4;
}
.c--my-custom-paragraph {
@extend .f--font-f; // Extend font-f
color: $color-f;
}
.c--my-hero-title {
@extend .f--font-b; // Extend font-b
@extend .u--font-semibold; // Extend font-semibold
// You can add custom overrides if needed (only if necessary)
text-transform: uppercase;
letter-spacing: 0.05em;
}

  • ✅ Use .f--font-* utility classes for consistent typography
  • ✅ Use Hubot Sans ($type-a) for headings and display text
  • ✅ Use Syne ($type-b) for body text and UI elements
  • ✅ Let the responsive scaling work automatically (don’t override breakpoints unless absolutely necessary)
  • ✅ Use appropriate font weights utilities (400 for regular, 500 for medium, 600-700 for bold)
  • ✅ Reference Figma to verify which font token to use for each element
  • ❌ Don’t use arbitrary font sizes like font-size: 23px - always use the defined font tokens
  • ❌ Don’t mix font families randomly (headings should use Hubot Sans, body should use Syne)
  • ❌ Don’t create new font sizes without consulting the design team
  • ❌ Don’t override line-heights unless there’s a specific design requirement
  • ❌ Don’t forget to test responsive breakpoints to ensure text remains readable

<section class="u--pt-10 u--pb-10">
<div class="f--container">
<div class="f--row">
<div class="f--col-8">
<h1 class="f--font-a f--color-a">Secure Your Enterprise</h1>
<p class="f--font-e f--color-h">
Enterprise-grade security solutions for modern organizations.
</p>
</div>
</div>
</div>
</section>
<section class="u--pt-7 u--pb-7">
<div class="f--container">
<div class="f--row">
<div class="f--col-10">
<h2 class="f--font-b">Features Overview</h2>
<h3 class="f--font-c">Real-time Monitoring</h3>
<p class="f--font-f">
Monitor your infrastructure in real-time with advanced analytics.
</p>
<small class="f--font-g f--color-h">Available in Enterprise plan</small>
</div>
</div>
</div>
</section>

ClassSize (Desktop)Size (Mobile)Font FamilyUsage
.f--font-a70px32pxHubot SansMain hero headings
.f--font-b40px25.6pxHubot SansSection headings
.f--font-c24px17.6pxHubot SansSubsection headings
.f--font-d21px16pxHubot SansSmall headings
.f--font-e18px16pxSyneLead paragraphs
.f--font-f16px14.4pxSyneBody text
.f--font-g12px12pxSyneSmall text, captions

When using typography mixins, you can specify font weights:

WeightNameWhen to Use
400RegularDefault body text, standard headings
500MediumLead paragraphs, emphasized text
600Semi-BoldSubheadings, important labels
700BoldPrimary headings, strong emphasis

Example:

.c--my-heading {
@extend .u--font-bold; // Extend font-bold
}
.c--my-paragraph {
@extend .u--font-medium; // Extend font-medium
}

Check out the Utility Classes Reference for a complete list of available font utilities.


Continue to Spacing System to learn about the measure-based spacing system and spacing utilities.