@gurupanguji

Leica Black Theme Design

Date: 2026-03-19 Repo: gurupanguji.github.io Branch: feature/leica-black-theme Status: Approved design

Goal

Add a second site theme inspired by Leica black paint, while preserving the current silver-chrome look as the light theme. The site should:

Design Direction

The current theme already uses a material story: off-white surfaces, chrome-like borders, Leica red, and sparse editorial typography. The dark theme should extend that same logic instead of behaving like a generic dark mode.

Light theme

Dark theme

Brass should stay restrained. It can appear in separators, active states, focus rings, and the homepage finish module, but it should not compete with the red accent or become a recurring decorative color on every surface.

Architecture

Use one shared theme engine for the whole site.

Theme source of truth

Default behavior

Paint timing

No-JS fallback

UI Components

Shared header control

Add a compact finish control to the shared header across the site shell.

Requirements:

The approved direction is the quieter header treatment paired with a richer homepage explanation. This control applies to pages that already use the shared sticky header. The homepage remains headerless in this pass.

Homepage finish module

Add a small editorial module on the homepage near the intro and nav cluster.

Requirements:

This module should feel like a considered part of the homepage composition, not a floating settings box.

Theme Tokens

Refactor the shared stylesheet to use semantic variables instead of page-specific hard-coded grays where possible.

Expected token groups:

The goal is to let most pages inherit the theme change through variables instead of duplicating dark-specific rules.

Affected Files

Primary shared layer:

Pages and templates that likely need follow-up replacement of hard-coded colors:

Pages to verify and patch if needed because they duplicate header or page-specific styling:

Interaction Model

Initial load

  1. Read stored theme override if present
  2. Otherwise read prefers-color-scheme
  3. Set root data-theme
  4. Render the matching control state

Manual theme change

  1. User activates Chrome or Black
  2. Update root data-theme
  3. Persist choice to localStorage
  4. Sync all visible controls on the page

The homepage module control and the interior header control must always reflect the same active theme.

Accessibility

Visual Rules

Shared rules

Dark theme specific rules

Risks

Inline style drift

Several pages use inline style blocks with hard-coded colors. If these are missed, dark mode will look inconsistent or break readability.

Mitigation:

Header duplication

The header markup is duplicated across several pages instead of being centralized in one include.

Mitigation:

Theme flash

If the root theme is applied too late, the site will flash light before dark.

Mitigation:

Verification Plan

Run a local Jekyll preview and check at least these views in both themes:

Check:

Out of Scope

Implementation Summary

Build a semantic token-based theme layer in the shared CSS, set the default theme from system preference, persist manual overrides, add a quiet two-state finish control to shared headers, add a small homepage finish module, and patch page-specific inline color rules so both Leica-inspired finishes remain coherent across the site.