hermes-hub/.agents/skills/frontend-design/examples/example-brutalist.html

1023 lines
33 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Constellation Records — Independent label since 2009</title>
<meta name="description" content="Constellation is an independent record label based in Montréal and Lisbon. We release music by artists we believe in. Nothing else.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
/* ============================================================
CONSTELLATION RECORDS — independent label
Style: Brutalist / Working Format
Palette: pure black + warm white + electric red accent
Typography: Inter (display heavy) + JetBrains Mono (metadata)
============================================================ */
:root {
--surface: #F4F1EB;
--surface-1: #EAE6DC;
--surface-2: #DDD8CC;
--ink: #0A0A0A;
--ink-muted: #4A4A4A;
--ink-subtle: #7A7A7A;
--hairline: #1F1F1F;
--hairline-strong: #2E2E2E;
--accent: #FF2400; /* electric red, used as punctuation */
--accent-soft: #FFE5E0;
--font-text: 'Inter', -apple-system, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
--text-xs: 0.6875rem;
--text-sm: 0.8125rem;
--text-base: 0.9375rem;
--text-md: 1.0625rem;
--text-lg: 1.25rem;
--text-xl: 1.5rem;
--text-2xl: 2rem;
--text-3xl: 2.75rem;
--text-4xl: 3.75rem;
--text-5xl: 5rem;
--text-6xl: 6.5rem;
--text-7xl: 8.5rem;
--lead-tight: 1.0;
--lead-snug: 1.15;
--lead-normal: 1.45;
--lead-loose: 1.6;
--track-tightest: -0.04em;
--track-tight: -0.025em;
--track-wide: 0.05em;
--track-widest: 0.18em;
--sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px;
--sp-5: 24px; --sp-6: 32px; --sp-7: 48px; --sp-8: 64px;
--sp-9: 96px; --sp-10: 128px;
--r-sm: 0px; /* sharp corners, brutalist */
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
margin: 0;
font-family: var(--font-text);
font-size: var(--text-base);
line-height: var(--lead-normal);
color: var(--ink);
background: var(--surface);
font-feature-settings: 'kern' 1, 'liga' 1, 'ss01' 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
img, svg { display: block; max-width: 100%; }
a {
color: inherit;
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 3px;
text-decoration-color: var(--ink);
transition: color 120ms ease;
}
a:hover { color: var(--accent); text-decoration-color: var(--accent); }
a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.mono { font-family: var(--font-mono); }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
/* ----- Marquee -------------------------------------------------- */
.marquee {
background: var(--ink);
color: var(--surface);
padding: var(--sp-2) 0;
overflow: hidden;
border-bottom: 1px solid var(--ink);
}
.marquee__track {
display: inline-flex;
gap: var(--sp-7);
white-space: nowrap;
animation: marquee 60s linear infinite;
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
}
.marquee__track span { color: var(--accent); }
@keyframes marquee {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
/* ----- Nav ------------------------------------------------------ */
.nav {
border-bottom: 2px solid var(--ink);
padding: var(--sp-3) clamp(20px, 4vw, 48px);
background: var(--surface);
}
.nav__inner {
max-width: 1280px;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--sp-5);
}
.nav__brand {
display: inline-flex;
align-items: center;
gap: var(--sp-3);
font-weight: 800;
font-size: var(--text-lg);
letter-spacing: var(--track-tight);
color: var(--ink);
text-decoration: none;
}
.nav__brand-mark {
width: 24px;
height: 24px;
background: var(--ink);
position: relative;
flex-shrink: 0;
}
.nav__brand-mark::before {
content: '';
position: absolute;
inset: 4px;
background: var(--accent);
}
.nav__brand-mark::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 4px;
height: 4px;
background: var(--ink);
transform: translate(-50%, -50%);
}
.nav__links {
display: flex;
align-items: center;
gap: var(--sp-5);
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
}
.nav__links a {
text-decoration: none;
color: var(--ink);
font-weight: 500;
}
.nav__links a:hover { color: var(--accent); }
@media (max-width: 720px) {
.nav__links a:not(:last-child) { display: none; }
}
/* ----- Hero ----------------------------------------------------- */
.hero {
padding: clamp(48px, 8vw, 96px) clamp(20px, 4vw, 48px);
border-bottom: 2px solid var(--ink);
max-width: 1280px;
margin: 0 auto;
}
.hero__grid {
display: grid;
grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
gap: clamp(40px, 6vw, 80px);
align-items: end;
}
.hero__kicker {
display: inline-flex;
align-items: center;
gap: var(--sp-2);
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--ink);
margin-bottom: var(--sp-6);
}
.hero__kicker-dot {
width: 8px;
height: 8px;
background: var(--accent);
flex-shrink: 0;
}
.hero__title {
font-size: clamp(3rem, 9vw, 8.5rem);
font-weight: 800;
letter-spacing: var(--track-tightest);
line-height: 0.9;
margin: 0;
}
.hero__title em {
font-style: italic;
font-weight: 800;
color: var(--accent);
}
.hero__meta {
display: grid;
gap: var(--sp-4);
padding: var(--sp-5);
background: var(--ink);
color: var(--surface);
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
}
.hero__meta-row {
display: grid;
grid-template-columns: 100px 1fr;
gap: var(--sp-3);
padding: var(--sp-2) 0;
border-bottom: 1px solid var(--surface-1);
}
.hero__meta-row:last-child { border-bottom: 0; }
.hero__meta-row strong { color: var(--accent); font-weight: 500; }
@media (max-width: 880px) {
.hero__grid { grid-template-columns: 1fr; }
}
/* ----- Featured release (latest) ------------------------------- */
.latest {
padding: clamp(48px, 8vw, 96px) clamp(20px, 4vw, 48px);
max-width: 1280px;
margin: 0 auto;
border-bottom: 2px solid var(--ink);
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
gap: clamp(40px, 6vw, 80px);
align-items: center;
}
/* Cover art — CSS-only abstract composition */
.cover {
aspect-ratio: 1;
background: var(--ink);
position: relative;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.cover svg { width: 80%; height: 80%; }
.latest__body {
display: grid;
gap: var(--sp-5);
}
.latest__kicker {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--accent);
margin: 0;
}
.latest__title {
font-size: clamp(2.25rem, 5vw, 4rem);
font-weight: 800;
letter-spacing: var(--track-tight);
line-height: 1;
margin: 0;
}
.latest__artist {
font-size: clamp(1.25rem, 2vw, 1.75rem);
font-weight: 600;
margin: 0;
color: var(--ink);
}
.latest__byline {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
color: var(--ink-muted);
border-top: 1px solid var(--ink);
padding-top: var(--sp-4);
}
.latest__byline strong { color: var(--ink); font-weight: 500; }
.latest__desc {
font-size: var(--text-md);
line-height: 1.5;
max-width: 50ch;
color: var(--ink);
margin: 0;
}
.latest__actions {
display: flex;
gap: var(--sp-3);
flex-wrap: wrap;
align-items: center;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
height: 44px;
padding: 0 20px;
font-family: var(--font-mono);
font-size: var(--text-xs);
font-weight: 600;
letter-spacing: var(--track-wide);
text-transform: uppercase;
border: 2px solid var(--ink);
background: transparent;
color: var(--ink);
text-decoration: none;
cursor: pointer;
transition: background 120ms ease, color 120ms ease, transform 80ms ease;
white-space: nowrap;
}
.btn:active { transform: translateY(1px); }
.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.btn--primary { background: var(--ink); color: var(--surface); }
.btn--primary:hover { background: var(--accent); border-color: var(--accent); color: var(--surface); }
.btn--ghost:hover { background: var(--ink); color: var(--surface); }
@media (max-width: 880px) {
.latest { grid-template-columns: 1fr; }
}
/* ----- Catalog (releases list) -------------------------------- */
.catalog {
padding: clamp(48px, 8vw, 96px) clamp(20px, 4vw, 48px);
max-width: 1280px;
margin: 0 auto;
}
.catalog__head {
display: flex;
justify-content: space-between;
align-items: baseline;
padding-bottom: var(--sp-4);
border-bottom: 2px solid var(--ink);
margin-bottom: var(--sp-2);
}
.catalog__title {
font-size: clamp(1.75rem, 3vw, 2.5rem);
font-weight: 800;
letter-spacing: var(--track-tight);
margin: 0;
}
.catalog__count {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--ink-muted);
}
.release {
display: grid;
grid-template-columns: 80px minmax(0, 1.4fr) minmax(0, 1fr) 100px 60px;
gap: var(--sp-5);
align-items: center;
padding: var(--sp-5) 0;
border-bottom: 1px solid var(--ink);
text-decoration: none;
color: var(--ink);
transition: padding 200ms ease, background 200ms ease;
}
.release:hover {
padding-left: var(--sp-3);
background: var(--surface-1);
}
.release:hover .release__title { color: var(--accent); }
.release:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.release__cat {
aspect-ratio: 1;
background: var(--ink);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.release__cat::before {
content: '';
position: absolute;
inset: 20%;
background: var(--accent);
}
.release__cat--alt::before { background: var(--surface-2); }
.release__cat--alt2::before { background: var(--accent); border-radius: 50%; }
.release__body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.release__title {
font-size: clamp(1.125rem, 1.6vw, 1.375rem);
font-weight: 700;
letter-spacing: var(--track-tight);
line-height: 1.15;
transition: color 200ms ease;
}
.release__artist {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
color: var(--ink-muted);
}
.release__format {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
color: var(--ink-muted);
}
.release__format strong {
color: var(--accent);
font-weight: 500;
}
.release__year {
font-family: var(--font-mono);
font-size: var(--text-sm);
font-weight: 600;
letter-spacing: var(--track-wide);
color: var(--ink);
}
.release__price {
font-family: var(--font-mono);
font-size: var(--text-sm);
font-weight: 600;
text-align: right;
}
@media (max-width: 720px) {
.release {
grid-template-columns: 60px 1fr;
grid-template-rows: auto auto auto;
gap: var(--sp-2);
padding: var(--sp-4) 0;
}
.release__cat { grid-row: 1 / 3; grid-column: 1; }
.release__body { grid-column: 2; }
.release__format, .release__year, .release__price {
grid-column: 2; text-align: left;
}
}
/* ----- Manifesto ---------------------------------------------- */
.manifesto {
padding: clamp(80px, 12vw, 160px) clamp(20px, 4vw, 48px);
background: var(--ink);
color: var(--surface);
border-bottom: 2px solid var(--ink);
}
.manifesto__inner {
max-width: 900px;
margin: 0 auto;
display: grid;
gap: var(--sp-7);
}
.manifesto__kicker {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--accent);
margin: 0;
}
.manifesto__body {
font-size: clamp(1.5rem, 2.8vw, 2.25rem);
font-weight: 600;
letter-spacing: var(--track-tight);
line-height: 1.25;
margin: 0;
}
.manifesto__body em {
font-style: italic;
color: var(--accent);
font-weight: 600;
}
.manifesto__sig {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--surface-2);
margin: 0;
padding-top: var(--sp-5);
border-top: 1px solid var(--surface-2);
}
.manifesto__sig strong { color: var(--surface); font-weight: 500; }
/* ----- Tour --------------------------------------------------- */
.tour {
padding: clamp(48px, 8vw, 96px) clamp(20px, 4vw, 48px);
max-width: 1280px;
margin: 0 auto;
}
.tour__head {
padding-bottom: var(--sp-4);
border-bottom: 2px solid var(--ink);
margin-bottom: var(--sp-2);
}
.tour__title {
font-size: clamp(1.75rem, 3vw, 2.5rem);
font-weight: 800;
letter-spacing: var(--track-tight);
margin: 0;
}
.date {
display: grid;
grid-template-columns: 110px minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr) 100px;
gap: var(--sp-5);
align-items: center;
padding: var(--sp-4) 0;
border-bottom: 1px solid var(--ink);
font-size: var(--text-sm);
}
.date:hover { background: var(--surface-1); }
.date__day {
font-family: var(--font-mono);
font-weight: 600;
font-size: var(--text-sm);
}
.date__day span {
display: block;
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
color: var(--ink-muted);
font-weight: 400;
text-transform: uppercase;
}
.date__city {
font-weight: 600;
font-size: var(--text-base);
}
.date__city span {
display: block;
font-size: var(--text-xs);
font-weight: 400;
color: var(--ink-muted);
}
.date__venue {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
color: var(--ink-muted);
}
.date__status {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
text-transform: uppercase;
font-weight: 600;
text-align: right;
}
.date__status--on-sale { color: var(--accent); }
.date__status--sold { color: var(--ink-subtle); }
@media (max-width: 720px) {
.date {
grid-template-columns: 80px 1fr;
grid-template-rows: auto auto;
gap: var(--sp-2);
}
.date__venue, .date__status { grid-column: 2; text-align: left; }
}
/* ----- Footer ------------------------------------------------- */
.footer {
padding: clamp(48px, 6vw, 80px) clamp(20px, 4vw, 48px);
background: var(--ink);
color: var(--surface);
}
.footer__inner {
max-width: 1280px;
margin: 0 auto;
display: grid;
grid-template-columns: minmax(0, 1.5fr) repeat(3, minmax(0, 1fr));
gap: var(--sp-7);
}
.footer__brand {
font-size: clamp(1.5rem, 2.5vw, 2rem);
font-weight: 800;
letter-spacing: var(--track-tight);
color: var(--surface);
margin: 0 0 var(--sp-4) 0;
}
.footer__brand-line {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
color: var(--surface-2);
margin: 0;
}
.footer__col h4 {
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-widest);
text-transform: uppercase;
color: var(--accent);
margin: 0 0 var(--sp-3) 0;
font-weight: 500;
}
.footer__col a {
display: block;
font-size: var(--text-sm);
color: var(--surface);
padding: 4px 0;
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 120ms ease;
}
.footer__col a:hover { border-color: var(--accent); color: var(--accent); }
.footer__bottom {
max-width: 1280px;
margin: var(--sp-7) auto 0;
padding-top: var(--sp-5);
border-top: 1px solid var(--surface-1);
display: flex;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--sp-3);
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: var(--track-wide);
color: var(--surface-2);
}
@media (max-width: 720px) {
.footer__inner { grid-template-columns: 1fr 1fr; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
.marquee__track { animation: none; }
}
</style>
</head>
<body>
<!-- ====== MARQUEE =========================================== -->
<div class="marquee" aria-label="Announcements">
<div class="marquee__track">
<span></span> New: MIRA OKAFOR —&nbsp;<em>Tide Marks</em>&nbsp;out Nov 14 · pre-order now
&nbsp;&nbsp;<span></span>&nbsp; Constellation #142 — limited 500-copy vinyl run
&nbsp;&nbsp;<span></span>&nbsp; Field Notes tour begins Mar 2027 — Berlin, Lisbon, NYC, Tokyo
&nbsp;&nbsp;<span></span>&nbsp; New: MIRA OKAFOR —&nbsp;<em>Tide Marks</em>&nbsp;out Nov 14 · pre-order now
&nbsp;&nbsp;<span></span>&nbsp; Constellation #142 — limited 500-copy vinyl run
&nbsp;&nbsp;<span></span>&nbsp; Field Notes tour begins Mar 2027 — Berlin, Lisbon, NYC, Tokyo
</div>
</div>
<!-- ====== NAV =============================================== -->
<header class="nav" role="banner">
<div class="nav__inner">
<a href="#" class="nav__brand">
<span class="nav__brand-mark" aria-hidden="true"></span>
<span>CONSTELLATION</span>
</a>
<nav class="nav__links" aria-label="Primary">
<a href="#latest">Latest</a>
<a href="#catalog">Catalog</a>
<a href="#tour">Tour</a>
<a href="#">Store</a>
<a href="#">About</a>
</nav>
</div>
</header>
<main id="main">
<!-- ====== HERO ============================================== -->
<section class="hero" aria-labelledby="hero-title">
<div class="hero__grid">
<div>
<p class="hero__kicker">
<span class="hero__kicker-dot" aria-hidden="true"></span>
Independent label · Est. Montréal, 2009
</p>
<h1 id="hero-title" class="hero__title">
Music by<br>
<em>artists we</em><br>
believe in.<br>
Nothing else.
</h1>
</div>
<aside class="hero__meta" aria-label="Label facts">
<div class="hero__meta-row"><strong>Founded</strong><span>2009, Montréal</span></div>
<div class="hero__meta-row"><strong>Releases</strong><span>142 albums · 38 EPs</span></div>
<div class="hero__meta-row"><strong>Catalog</strong><span>Vinyl · CD · digital</span></div>
<div class="hero__meta-row"><strong>Office</strong><span>Montréal · Lisbon</span></div>
<div class="hero__meta-row"><strong>Next</strong><span>CST 142 · Nov 14, 2026</span></div>
<div class="hero__meta-row"><strong>Currently</strong><span>Pressing the new vinyl</span></div>
</aside>
</div>
</section>
<!-- ====== LATEST RELEASE ==================================== -->
<article id="latest" class="latest" aria-labelledby="latest-title">
<figure class="cover" aria-hidden="true">
<!-- Geometric composition — concentric arcs / tide marks -->
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#F4F1EB" stroke-width="1">
<circle cx="100" cy="100" r="20"/>
<circle cx="100" cy="100" r="40"/>
<circle cx="100" cy="100" r="60"/>
<circle cx="100" cy="100" r="80"/>
</g>
<g fill="#FF2400">
<circle cx="100" cy="100" r="6"/>
</g>
<g fill="#F4F1EB">
<circle cx="140" cy="100" r="2"/>
<circle cx="60" cy="100" r="2"/>
<circle cx="100" cy="60" r="2"/>
<circle cx="100" cy="140" r="2"/>
<circle cx="135" cy="135" r="2"/>
<circle cx="65" cy="65" r="2"/>
</g>
</svg>
</figure>
<div class="latest__body">
<p class="latest__kicker">CST 142 · Out 14 November 2026 · Pre-order now</p>
<h2 id="latest-title" class="latest__title">Tide Marks</h2>
<p class="latest__artist">Mira Okafor</p>
<p class="latest__byline">
<strong>Format</strong> LP · CD · Cassette · Digital
&nbsp;&nbsp;<strong>Edition</strong> First press: 500 (black), 200 (clear w/ red)
&nbsp;&nbsp;<strong>Cat. №</strong> CST 142
</p>
<p class="latest__desc">
Recorded over eighteen months in a converted boat-shed on
the Saint Lawrence, <em>Tide Marks</em> is the most expansive
record Mira has made — eight pieces that move between
percussion, voice, and the sounds of the river itself.
Mastered by Harris Newman at Grey Market. Sleeve design by
Constellation's in-house studio.
</p>
<div class="latest__actions">
<a href="#" class="btn btn--primary">Pre-order LP — €32</a>
<a href="#" class="btn btn--ghost">Stream / digital</a>
<a href="#" class="btn btn--ghost">Listen to "Rim"</a>
</div>
</div>
</article>
<!-- ====== CATALOG =========================================== -->
<section id="catalog" class="catalog" aria-labelledby="catalog-title">
<div class="catalog__head">
<h2 id="catalog-title" class="catalog__title">Catalog · 142 releases</h2>
<span class="catalog__count">Showing 1 — 8 of 142</span>
</div>
<ul role="list" style="list-style: none; margin: 0; padding: 0;">
<li>
<a href="#" class="release">
<div class="release__cat" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Tide Marks</span>
<span class="release__artist">Mira Okafor</span>
</div>
<span class="release__format"><strong>NEW</strong> · LP · 8 tracks</span>
<span class="release__year">2026</span>
<span class="release__price">€32</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat release__cat--alt" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Notes Toward a Model Village</span>
<span class="release__artist">Tomas Belo &amp; the Lisbon Quartet</span>
</div>
<span class="release__format">LP · 11 tracks</span>
<span class="release__year">2025</span>
<span class="release__price">€28</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat release__cat--alt2" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Slow Boats, Loud Engines</span>
<span class="release__artist">Soren Ø.</span>
</div>
<span class="release__format">EP · 5 tracks</span>
<span class="release__year">2024</span>
<span class="release__price">€16</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Field Recordings, Vol. III</span>
<span class="release__artist">Helen Marstrand</span>
</div>
<span class="release__format">LP · 9 tracks</span>
<span class="release__year">2024</span>
<span class="release__price">€28</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat release__cat--alt" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">A Year of Tuesdays</span>
<span class="release__artist">Markus Becker</span>
</div>
<span class="release__format">CD · 12 tracks</span>
<span class="release__year">2023</span>
<span class="release__price">€14</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat release__cat--alt2" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Hymns for the Slightly Bewildered</span>
<span class="release__artist">The Common Review Choir</span>
</div>
<span class="release__format">LP · 10 tracks</span>
<span class="release__year">2023</span>
<span class="release__price">€28</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Two Songs, One Letter</span>
<span class="release__artist">Mira Okafor &amp; Imani Okafor</span>
</div>
<span class="release__format">Single · 2 tracks</span>
<span class="release__year">2022</span>
<span class="release__price">€6</span>
</a>
</li>
<li>
<a href="#" class="release">
<div class="release__cat release__cat--alt" aria-hidden="true"></div>
<div class="release__body">
<span class="release__title">Instruments of the Cold Sea</span>
<span class="release__artist">Jon Lindqvist</span>
</div>
<span class="release__format">LP · 7 tracks</span>
<span class="release__year">2022</span>
<span class="release__price">€28</span>
</a>
</li>
</ul>
</section>
<!-- ====== MANIFESTO ========================================= -->
<section class="manifesto" aria-labelledby="manifesto-title">
<div class="manifesto__inner">
<p class="manifesto__kicker">— A short manifesto —</p>
<h2 id="manifesto-title" class="manifesto__body">
We release music by artists we believe in, on formats
worth keeping, with care taken at every stage.
We do <em>not</em> release music to fill a release calendar.
We do <em>not</em> chase trends. We do <em>not</em> believe
the algorithm knows what's good.
</h2>
<p class="manifesto__sig">
<strong>— Constellation, founded 2009</strong>
&nbsp;·&nbsp; run by four people who answer the email themselves
</p>
</div>
</section>
<!-- ====== TOUR ============================================== -->
<section id="tour" class="tour" aria-labelledby="tour-title">
<div class="tour__head">
<h2 id="tour-title" class="tour__title">Tour · Spring 2027</h2>
</div>
<ul role="list" style="list-style: none; margin: 0; padding: 0;">
<li>
<a href="#" class="date">
<span class="date__day">14 Mar<span>Saturday</span></span>
<span class="date__city">Berlin<span>Constellation night</span></span>
<span class="date__venue">Silent Green</span>
<span class="date__venue">Mira Okafor · Helen Marstrand</span>
<span class="date__status date__status--on-sale">On sale →</span>
</a>
</li>
<li>
<a href="#" class="date">
<span class="date__day">22 Mar<span>Sunday</span></span>
<span class="date__city">Lisbon<span>Record release</span></span>
<span class="date__venue">Zé dos Bois</span>
<span class="date__venue">Mira Okafor · full band</span>
<span class="date__status date__status--on-sale">On sale →</span>
</a>
</li>
<li>
<a href="#" class="date">
<span class="date__day">02 Apr<span>Thursday</span></span>
<span class="date__city">New York<span>North American tour begins</span></span>
<span class="date__venue">Le Poisson Rouge</span>
<span class="date__venue">Mira Okafor · solo</span>
<span class="date__status date__status--sold">Sold out</span>
</a>
</li>
<li>
<a href="#" class="date">
<span class="date__day">18 Apr<span>Saturday</span></span>
<span class="date__city">Tokyo<span>Far East run</span></span>
<span class="date__venue">Wombat</span>
<span class="date__venue">Mira Okafor · Helen Marstrand</span>
<span class="date__status date__status--on-sale">On sale →</span>
</a>
</li>
<li>
<a href="#" class="date">
<span class="date__day">29 Apr<span>Wednesday</span></span>
<span class="date__city">Montréal<span>Home show</span></span>
<span class="date__venue">Casa del Popolo</span>
<span class="date__venue">All four CST artists</span>
<span class="date__status date__status--on-sale">On sale →</span>
</a>
</li>
</ul>
</section>
</main>
<!-- ====== FOOTER ============================================ -->
<footer class="footer" role="contentinfo">
<div class="footer__inner">
<div>
<p class="footer__brand">CONSTELLATION</p>
<p class="footer__brand-line">
2009 — present · Montréal + Lisbon<br>
Pressed in Quebec. Sleeves in Lisbon.<br>
Sleeve notes written by hand.
</p>
</div>
<div class="footer__col">
<h4>Catalog</h4>
<a href="#">Latest releases</a>
<a href="#">Full catalog</a>
<a href="#">Reissue program</a>
<a href="#">Tape series</a>
</div>
<div class="footer__col">
<h4>Visit</h4>
<a href="#">Store (€)</a>
<a href="#">Store ($)</a>
<a href="#">Bandcamp mirror</a>
<a href="#">Tour dates</a>
</div>
<div class="footer__col">
<h4>Contact</h4>
<a href="mailto:office@constellation.fm">office@constellation.fm</a>
<a href="#">Press inquiries</a>
<a href="#">Demo policy</a>
<a href="#">Wholesale</a>
</div>
</div>
<div class="footer__bottom">
<span>© 20092026 Constellation Records</span>
<span>CST 142 · MIRA OKAFOR — TIDE MARKS · NOV 14 2026</span>
</div>
</footer>
</body>
</html>