Skip to main content

Typography System

MYMUSICK uses distinct typography strategies in each theme. The original theme features a custom Gyanko font, while the formal theme uses modern Google Fonts with a clear hierarchy.

Font Families

Gyanko Custom Font

The original theme’s primary brand font is Gyanko, a custom typeface loaded via @font-face.
@font-face {
  font-family: 'Gyanko';
  src: url("fonts/gyanko-regular.otf") format("opentype");
  font-weight: normal;
  font-style: normal;
}

Font Stack

ElementFont FamilyPurpose
Body'Segoe UI', Tahoma, Geneva, Verdana, sans-serifBody text, metadata
.title'Gyanko', sans-serifLogo/brand text
.bttlg'Gyanko', sans-serifButtons
.sidebar a'Gyanko', sans-serifNavigation links
.intxt'Gyanko', sans-serifSection headings

Character Set

Gyanko is a display font best used for headings and UI elements. Ensure the font file is available at fonts/gyanko-regular.otf relative to your CSS file.

Usage Examples

.title {
  font-family: 'Gyanko', sans-serif;
  font-size: 40px;
  letter-spacing: 2px;
  color: var(--accent);          /* #FF5757 */
  font-weight: normal;
  margin: 0;
}

Type Scale

Original Theme Sizing

ElementSizeFontUsage
.title40pxGyankoLogo/header
.intxt25pxGyankoSection heading
.sidebar a24pxGyankoNavigation
.bttlg16pxGyankoButtons
.search16pxSegoe UIInput fields
#nowPlaying18pxSegoe UIPlayer text
.song strong14pxSegoe UISong title
.song small12pxSegoe UIArtist name

Formal Theme Sizing

ElementSizeFontUsage
.intxtclamp(42px, 5vw, 72px)Bebas NeueHero heading
.login-form h332pxBebas NeueDialog heading
.title28pxBebas NeueLogo
Body15pxDM SansBase text
.sidebar a14pxDM SansNavigation
.search14pxDM SansInput
.song strong13.5pxDM SansSong title
.bttlg13pxDM SansButtons
#nowPlaying13pxDM SansPlayer text
.song small12pxDM SansMetadata

Letter Spacing

Both themes use letter-spacing for display typography to enhance readability and brand presence.
.title {
  letter-spacing: 2px;     /* Logo: moderate tracking */
}

/* No letter-spacing on other elements */
Bebas Neue naturally has condensed proportions, so increased letter-spacing improves legibility at display sizes.

Line Height

Original Theme

/* Uses browser defaults for most elements */
/* No explicit line-height declarations */

Formal Theme

.title {
  line-height: 1;          /* Tight for logo */
}

.intxt {
  line-height: .95;        /* Extra tight for hero */
}

/* Body elements use browser defaults (~1.5) */

Text Overflow Handling

Both themes implement ellipsis truncation for song metadata:
.song-info {
  overflow: hidden;
}

.song strong,
.song small {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

Text Colors

Original Theme

body {
  color: var(--text-light);      /* white */
}

.title {
  color: var(--accent);          /* #FF5757 coral */
}

#nowPlaying {
  color: black;                  /* High contrast on teal */
}

Formal Theme

body {
  color: var(--text);            /* #e8e6df warm white */
}

.title, .login-form h3 {
  color: var(--accent);          /* #e8ff47 yellow */
}

.sidebar a {
  color: var(--muted);           /* #6b6b72 gray */
}

.sidebar a:hover {
  color: var(--text);            /* Brighten on hover */
}

.song strong {
  color: var(--text);            /* Primary text */
}

.song small {
  color: var(--muted);           /* Secondary text */
  font-weight: 300;              /* Lighter weight */
}

Responsive Typography

Original Theme

@media (max-width: 600px) {
  .title {
    font-size: 28px;             /* Down from 40px */
  }

  #nowPlaying {
    font-size: 14px;             /* Down from 18px */
  }

  /* Other sizes remain constant */
}

Formal Theme

.intxt {
  font-size: clamp(42px, 5vw, 72px);
  /* Scales between 42px (mobile) and 72px (desktop) */
}

Text Alignment

.intxt {
  text-align: center;            /* Centered headings */
}

#nowPlaying {
  text-align: center;
}

/* Mobile specific */
@media (max-width: 600px) {
  #nowPlaying {
    font-size: 14px;
    /* Already centered */
  }
}

Font Loading Strategy

Self-Hosted Font

1

Font Declaration

@font-face {
  font-family: 'Gyanko';
  src: url("fonts/gyanko-regular.otf") format("opentype");
  font-weight: normal;
  font-style: normal;
}
2

File Structure

Ensure the font file exists at:
project/
├── css/
│   └── estilooriginal.css
└── fonts/
    └── gyanko-regular.otf
3

Fallback

Always include fallback fonts:
font-family: 'Gyanko', sans-serif;
If gyanko-regular.otf fails to load, the browser will fall back to the default sans-serif font, which may significantly change the appearance.

Best Practices

Limit Font Weights

Only load the weights you actually use (300, 400, 500 in formal theme)

Use Variable Fonts

Consider variable fonts for better performance if many weights are needed

Fallback Stacks

Always include system font fallbacks: sans-serif, serif, monospace

Optimize Display Fonts

Use display fonts sparingly for headings and brand elements only

Accessibility

Font Size Minimums

Ensure body text is at least 14px for readability. Both themes meet this requirement:
  • Original: 16px (search), 14px+ (song info)
  • Formal: 15px (body), 13px+ (UI elements)

Relative Units

Consider using rem instead of px for better accessibility:
/* Current (px) */
body { font-size: 15px; }

/* Accessible (rem) */
html { font-size: 100%; }  /* 16px default */
body { font-size: 0.9375rem; }  /* 15px at default zoom */
Using rem units allows users to scale text globally via browser settings without breaking your layout.

Typography Utilities

Common text treatment patterns found in both themes:
.truncate {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

Build docs developers (and LLMs) love