CSS Variables - Proper Usage

Complete guide to using our centralized color system.

โœ… Available CSS Variables

All variables are defined in quartz.config.ts and automatically generated for both light and dark modes.

Core Palette

var(--light)          /* Background color */
var(--lightgray)      /* Secondary backgrounds, borders */
var(--gray)           /* Body text, icons */
var(--darkgray)       /* Headers, strong text */
var(--dark)           /* Primary text */
var(--secondary)      /* Primary buttons (Deep Moss/Sage) */
var(--tertiary)       /* Accents, hover states (Clay/Buff) */
var(--highlight)      /* Subtle backgrounds (15% opacity) */
var(--textHighlight)  /* Code/text highlighting */

Brand Colors

var(--whatsapp)       /* WhatsApp green #25D366 */
var(--gmail)          /* Gmail red #EA4335 */
var(--instagram)      /* Instagram gradient */

Utility

var(--imagePlaceholder)  /* Image loading backgrounds */

Common Use Cases

Backgrounds

/* โœ… CORRECT - Auto-adapts to dark mode */
background: var(--light);          /* Main page background */
background: var(--lightgray);      /* Cards, boxes */
background: var(--highlight);      /* Subtle highlights */
 
/* โŒ WRONG - Hardcoded, breaks dark mode */
background: white;
background: #F7F5F3;

Text Colors

/* โœ… CORRECT */
color: var(--dark);         /* Primary text */
color: var(--darkgray);     /* Headers */
color: var(--gray);         /* Muted text */
 
/* โŒ WRONG */
color: black;
color: #2C2A24;

Borders

/* โœ… CORRECT */
border: 1px solid var(--lightgray);
border-left: 4px solid var(--secondary);
border-left: 4px solid var(--tertiary);
 
/* โŒ WRONG */
border: 1px solid #E5E0D8;
border-left: 4px solid #4A6741;

Buttons

/* โœ… CORRECT - Primary button */
.button-primary {
  background: var(--secondary);
  color: white;
  border: none;
}
 
/* โœ… CORRECT - Secondary button */
.button-secondary {
  background: transparent;
  color: var(--secondary);
  border: 2px solid var(--secondary);
}
 
/* โœ… CORRECT - Brand button */
.whatsapp-button {
  background: var(--whatsapp);
  color: white;
}
 
/* โŒ WRONG - Hardcoded */
.button {
  background: #4A6741;
  color: #FFFFFF;
}

Inline Styles (HTML/TSX)

<!-- โœ… CORRECT -->
<div style="background: var(--lightgray); color: var(--dark);">
 
<!-- โœ… CORRECT - Multiple properties -->
<a href="..." style="text-decoration: none; color: white; background: var(--secondary); padding: 1rem; border-radius: 8px;">
 
<!-- โŒ WRONG -->
<div style="background: white; color: black;">
<div style="background: #F7F5F3;">

How Colors Transform (Light โ†’ Dark)

VariableLight ModeDark Mode
var(--light)Warm Alabaster F7F5F3Deep Earth Black 0F0E0B
var(--lightgray)Light Sand E5E0D8Dark Soil 26231E
var(--gray)Stone 948C84Warm Stone 857F75
var(--darkgray)Bark 4E4B42Bone D6D1C9
var(--dark)Deep Peat 2C2A24Off-White F0ECE6
var(--secondary)Deep Moss Green 4A6741Light Sage 8FA876
var(--tertiary)Raw Sienna A67B5BBuff D4A373
var(--whatsapp)25D36625D366 (same)
var(--gmail)EA4335EA4335 (same)

Note: Brand colors (--whatsapp, --gmail, --instagram) remain identical across modes for brand consistency.


โŒ Common Mistakes

1. Using white instead of var(โ€”lightgray)

/* โŒ WRONG - Pure white breaks dark mode */
background: white;
background: #FFFFFF;
 
/* โœ… CORRECT - Adapts to dark mode */
background: var(--lightgray);

2. Hardcoding hex values

/* โŒ WRONG */
color: #4A6741;
border: 1px solid #E5E0D8;
 
/* โœ… CORRECT */
color: var(--secondary);
border: 1px solid var(--lightgray);

3. Not using brand variables

/* โŒ WRONG */
.whatsapp-btn { background: #25D366; }
 
/* โœ… CORRECT */
.whatsapp-btn { background: var(--whatsapp); }

Verification Checklist

Before committing code, check:

  • No hardcoded white or black
  • No hardcoded hex colors (#โ€ฆ)
  • All colors use var(--colorname)
  • Tested in both light AND dark modes
  • Brand colors use brand variables
  • Background uses var(--lightgray) not white

Where Colors Are Defined

Single Source of Truth: quartz.config.ts (Lines 30-63)

To change ANY color site-wide, edit quartz.config.ts only. Changes automatically propagate to all pages.

Type Definitions: theme.ts (ColorScheme interface)