Swiss International

Helvetica-era grid discipline. Red/black/white. Typography as the only decoration.

Technologies Demonstrated

[Templ] children... slot composition — reusable editorial card components
[Alpine] Interactive typographic scale demo with live size slider
[CSS] Strict modular scale via --font-size-* CSS custom properties
[CSS] Baseline grid using ruled lines as structural elements
[HTMX] hx-post form submission with editorial-style inline response
[HTMX] hx-get search filter with hx-trigger="input changed delay:300ms"
[Alpine] Button toggle demo with :class binding

Red

#e63329

Black

#1a1a1a

White

#ffffff

Click any swatch to copy hex value.

<div class="grid grid-cols-1 sm:grid-cols-3 gap-0" style="border: 2px solid var(--color-border);">
				@swissSwatch("Red", "#e63329", "#fff")
				@swissSwatch("Black", "#1a1a1a", "#fff")
				@swissSwatch("White", "#ffffff", "#1a1a1a")
			</div>

Display — 5rem / Bold

Grid

Heading — 2rem / Bold

Typographic Hierarchy

IBM Plex Sans Weights

Light — editorial captions and secondary text

Regular — body copy and running text

Medium — subheadings and navigation

Bold — headlines and typographic emphasis

Caption — 0.75rem

Fig. 1 — The International Typographic Style emerged in Switzerland in the 1950s, championed by designers at the Basel and Zurich schools.

Scale Factor 1.0x

Helvetica Neue

<div x-data="{ size: 1 }" class="swiss-rule pt-8 mt-8">
				<div class="flex items-center gap-6 mb-6 flex-wrap">
					<span class="swiss-label">Scale Factor</span>
					<input type="range" min="0.5" max="3" step="0.1" x-model="size" class="w-48 cursor-pointer"/>
					<span class="swiss-label font-mono" x-text="parseFloat(size).toFixed(1) + 'x'">1.0x</span>
				</div>
				<p
					class="font-bold leading-none"
					style="font-family: var(--font-display); color: var(--color-secondary);"
					{ templ.Attributes{":style": "'font-size: calc(var(--font-size-display) * ' + size + ')'"}... }
				>Helvetica Neue</p>
				<p class="swiss-label mt-4" x-text="'Computed: calc(5rem × ' + parseFloat(size).toFixed(1) + ')'"></p>
			</div>

Base unit: 8px (matches --baseline)

8px
16px
24px
32px
48px
64px

12-column modular grid — all columns have equal width, separated by borders

12 col

6 col

6 col

8 col

4 col

4 col

4 col

4 col

Design Systems

Grid as Foundation

The grid is not a cage — it is a liberation from chaos. When elements align to a common module, the eye can rest and the mind can read. Structure is the invisible architecture of good design.

Typography

Weight Creates Hierarchy

Bold speaks first. Regular speaks second. Light speaks last. Weight is not decoration — it is the sequence in which information is consumed. Hierarchy is direction.

Color

Red as Signal

In Swiss design, red is never decoration. It is a signal: stop, look, this matters. Black carries the content. White gives it room to breathe. Red marks what cannot be ignored.

@swissArticleCard("Design Systems", "Grid as Foundation", "The grid is not a cage — it is a liberation from chaos. When elements align to a common module, the eye can rest and the mind can read. Structure is the invisible architecture of good design.")
			@swissArticleCard("Typography", "Weight Creates Hierarchy", "Bold speaks first. Regular speaks second. Light speaks last. Weight is not decoration — it is the sequence in which information is consumed. Hierarchy is direction.")
			@swissArticleCard("Color", "Red as Signal", "In Swiss design, red is never decoration. It is a signal: stop, look, this matters. Black carries the content. White gives it room to breathe. Red marks what cannot be ignored.")

"

Good design is as little design as possible.

— Dieter Rams — Ten Principles of Good Design

"

Typography is what language looks like.

— Ellen Lupton — Thinking with Type

"

The grid system is an aid, not a guarantee.

— Josef Müller-Brockmann — Grid Systems

Variants

Toggle Demo [Alpine]

State: OFF

<div x-data="{ active: false }" class="flex items-center gap-6">
						<button
							class="text-sm"
							{ templ.Attributes{
								":class": "active ? 'swiss-btn' : 'swiss-btn-outline'",
								"@click": "active = !active",
							}... }
						>
							<span x-text="active ? 'ACTIVE' : 'INACTIVE'">INACTIVE</span>
						</button>
						<p class="swiss-label" x-text="active ? 'State: ON' : 'State: OFF'">State: OFF</p>
					</div>

Preferred Era

<form
				hx-post="/guides/swiss/demo-form"
				hx-target="#swiss-form-response"
				hx-swap="innerHTML"
				class="space-y-6"
			>
				<div>
					<label class="block swiss-label mb-2" for="swiss-name">Name</label>
					<input id="swiss-name" name="name" type="text" placeholder="Your name" class="swiss-input"/>
				</div>
				<div>
					<label class="block swiss-label mb-2" for="swiss-email">Email</label>
					<input id="swiss-email" name="email" type="email" placeholder="your@email.com" class="swiss-input"/>
				</div>
				<div>
					<label class="block swiss-label mb-2" for="swiss-role">Role</label>
					<select id="swiss-role" name="role" class="swiss-input cursor-pointer">
						<option value="">— Select role —</option>
						<option value="designer">Designer</option>
						<option value="developer">Developer</option>
						<option value="director">Art Director</option>
					</select>
				</div>
				<div class="flex items-center gap-3">
					<input type="checkbox" id="swiss-grid" name="grid" class="w-4 h-4 cursor-pointer" style="accent-color: var(--color-primary);"/>
					<label for="swiss-grid" class="swiss-label cursor-pointer">I believe in the grid</label>
				</div>
				<!-- Radio buttons -->
				<div>
					<p class="swiss-label mb-3">Preferred Era</p>
					<div class="space-y-2">
						<label class="flex items-center gap-3 cursor-pointer" style="font-size: 0.875rem;">
							<input type="radio" name="era" value="1950s" class="w-4 h-4 cursor-pointer" style="accent-color: var(--color-primary);"/>
							1950s — Basel School
						</label>
						<label class="flex items-center gap-3 cursor-pointer" style="font-size: 0.875rem;">
							<input type="radio" name="era" value="1960s" checked class="w-4 h-4 cursor-pointer" style="accent-color: var(--color-primary);"/>
							1960s — International Style
						</label>
						<label class="flex items-center gap-3 cursor-pointer" style="font-size: 0.875rem;">
							<input type="radio" name="era" value="1970s" class="w-4 h-4 cursor-pointer" style="accent-color: var(--color-primary);"/>
							1970s — Post-Modernist Reaction
						</label>
					</div>
				</div>
				<div class="swiss-rule pt-4">
					<button type="submit" class="swiss-btn text-sm">Submit via HTMX</button>
				</div>
			</form>

Static Card

Information Module

A bordered container with no radius and no shadow. The border itself creates separation. Swiss design relies on rules, not decorative flourishes.

Expandable Module

Click to expand

+

The expand/collapse pattern demonstrates Alpine.js reactive state without page navigation. Content becomes visible or hidden based on a simple boolean flag — no CSS classes toggled manually.

State:

<div style="border: 2px solid var(--color-border);" x-data="{ expanded: false }">
					<div
						class="p-5 flex items-center justify-between cursor-pointer"
						{ templ.Attributes{"@click": "expanded = !expanded"}... }
					>
						<div>
							<p class="swiss-label mb-1">Expandable Module</p>
							<h3 class="font-bold" style="font-family: var(--font-display); color: var(--color-secondary);">Click to expand</h3>
						</div>
						<span
							class="text-2xl font-bold transition-transform duration-200"
							style="color: var(--color-primary); font-family: var(--font-body);"
							{ templ.Attributes{":class": "expanded ? 'rotate-45' : ''"}... }
						>+</span>
					</div>
					<div x-show="expanded" style="border-top: 2px solid var(--color-border);">
						<div class="p-5">
							<p style="color: var(--color-text-muted); font-size: 0.875rem; max-width: 55ch;">The expand/collapse pattern demonstrates Alpine.js reactive state without page navigation. Content becomes visible or hidden based on a simple boolean flag — no CSS classes toggled manually.</p>
							<div class="mt-4 p-3" style="background: var(--color-surface-2); border-left: 3px solid var(--color-primary);">
								<p class="swiss-label">State: <span x-text="expanded ? 'EXPANDED' : 'COLLAPSED'" style="color: var(--color-primary);"></span></p>
							</div>
						</div>
					</div>
				</div>

Live search with hx-get + hx-trigger="input changed delay:300ms"

Design Systems

Grid as Foundation

The grid is not a cage — it is a liberation from chaos.

Typography

Weight Creates Hierarchy

Bold speaks first. Regular speaks second. Light speaks last.

Color

Red as Signal

In Swiss design, red is never decoration. It is a signal.

<div>
				<input
					type="text"
					name="q"
					placeholder="Filter articles..."
					class="swiss-input mb-4"
					hx-get="/guides/swiss/search"
					hx-target="#swiss-search-results"
					hx-swap="innerHTML"
					hx-trigger="input changed delay:300ms, search"
				/>
				<div id="swiss-search-results">
					@swissArticleCard("Design Systems", "Grid as Foundation", "The grid is not a cage — it is a liberation from chaos.")
					@swissArticleCard("Typography", "Weight Creates Hierarchy", "Bold speaks first. Regular speaks second. Light speaks last.")
					@swissArticleCard("Color", "Red as Signal", "In Swiss design, red is never decoration. It is a signal.")
				</div>
			</div>