Files

242 lines
8.4 KiB
CSS
Raw Permalink Normal View History

@import "tailwindcss";
@source "../../layouts/**/*.html";
@source "../../content/**/*.md";
@source "../../assets/js/**/*.js";
@custom-variant hover (&:hover);
/* ── Design tokens ─────────────────────────────────────────────────────────── */
@theme {
/* Core palette — exact match to design */
--color-bg: #14100c;
--color-bg-deep: #0d0a07;
--color-surface: #1c1611;
--color-surface-2: #241c15;
--color-warm: #e9d2b4; /* base for line/border via opacity modifiers */
/* Text scale */
--color-ink: #efe6da;
--color-ink-soft: #c9bbab;
--color-ink-mute: #8d8073;
--color-ink-faint: #5f574d;
/* Amber gold accent */
--color-gold: #cf9648;
--color-gold-2: #e3ad5e;
--color-gold-deep: #9c6a2c;
/* Typography — overrides Tailwind defaults */
--font-serif: "Cormorant Garamond", Georgia, serif;
--font-sans: "Hanken Grotesk", system-ui, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
}
/* ── Base ──────────────────────────────────────────────────────────────────── */
@layer base {
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
background-color: var(--color-bg);
color: var(--color-ink);
font-family: var(--font-sans);
font-size: 16px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
overflow-x: hidden;
}
/* Warm ambient vignette */
body::before {
content: "";
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
background:
radial-gradient(120% 80% at 50% -10%, rgba(207,150,72,0.07), transparent 60%),
radial-gradient(100% 100% at 50% 120%, rgba(0,0,0,0.5), transparent 55%);
}
#main-content { position: relative; z-index: 1; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
img { display: block; max-width: 100%; }
::selection { background: rgba(207,150,72,0.16); color: var(--color-gold-2); }
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-track { background: var(--color-bg-deep); }
::-webkit-scrollbar-thumb { background: #33291f; border-radius: 20px; border: 3px solid var(--color-bg-deep); }
::-webkit-scrollbar-thumb:hover { background: #473829; }
[x-cloak] { display: none !important; }
}
/* ── Components — only things that cannot be expressed with utilities alone ── */
@layer components {
/* Eyebrow label — reused across many templates */
.eyebrow {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.34em;
text-transform: uppercase;
color: var(--color-gold);
font-weight: 500;
}
/* Display type — large serif headlines */
.display {
font-family: var(--font-serif);
font-weight: 500;
line-height: 0.98;
letter-spacing: -0.01em;
}
/* Chip — inline tag with hover states, used everywhere */
.chip {
display: inline-flex;
align-items: center;
gap: 7px;
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--color-ink-soft);
background: rgba(233,210,180,0.04);
border: 1px solid rgba(233,210,180,0.10);
padding: 6px 12px;
border-radius: 30px;
transition: 0.18s;
white-space: nowrap;
cursor: pointer;
text-decoration: none;
}
.chip:hover { border-color: var(--color-gold); color: var(--color-gold-2); }
.chip.on { background: var(--color-gold); color: #1a1206; border-color: var(--color-gold); font-weight: 600; }
.chip .dot { width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: 0.8; flex: none; }
/* Buttons */
.btn {
display: inline-flex;
align-items: center;
gap: 9px;
font-family: var(--font-sans);
font-size: 13.5px;
letter-spacing: 0.02em;
padding: 13px 24px;
border-radius: 30px;
border: 1px solid transparent;
transition: 0.22s;
text-decoration: none;
}
.btn-gold { background: var(--color-gold); color: #1a1206; font-weight: 600; }
.btn-gold:hover { background: var(--color-gold-2); transform: translateY(-1px); box-shadow: 0 10px 30px -10px var(--color-gold); }
.btn-ghost { border-color: rgba(233,210,180,0.18); color: var(--color-ink); background: transparent; }
.btn-ghost:hover { border-color: var(--color-gold); color: var(--color-gold-2); background: rgba(207,150,72,0.16); }
/* Cellar header button */
.cellar-btn {
margin-left: auto;
display: inline-flex;
align-items: center;
gap: 9px;
font-family: var(--font-sans);
font-size: 12.5px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--color-gold);
border: 1.5px solid rgba(207,150,72,0.55);
border-radius: 30px;
padding: 10px 20px;
transition: background .2s, color .2s, border-color .2s, box-shadow .2s;
white-space: nowrap;
text-decoration: none;
}
.cellar-btn:hover {
background: var(--color-gold);
color: #1a1206;
border-color: var(--color-gold);
box-shadow: 0 6px 24px -8px rgba(207,150,72,0.45);
}
.cellar-btn.active {
background: var(--color-gold);
color: #1a1206;
border-color: var(--color-gold);
}
/* Rise animation class */
.rise { animation: rise .55s cubic-bezier(.2,.7,.3,1); }
/* Art Deco home separator lines — gradient cannot be expressed with utilities */
/* Frame pseudo-overlay — bottom gradient on framed images */
.frame-overlay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(13,10,7,.5), transparent 42%);
pointer-events: none;
}
/* Card image hover scale — needs descendant selector */
.card-img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s; }
.card-wrap:hover .card-img { transform: scale(1.05); }
/* Archive editorial search input placeholder */
.arch-input::placeholder { color: var(--color-ink-faint); font-style: italic; }
/* Filter dropdown menu — absolutely positioned, can't be expressed with utilities */
.fmenu {
position: absolute;
top: calc(100% + 8px);
left: 0;
z-index: 40;
min-width: 230px;
max-height: 340px;
overflow: auto;
background: var(--color-surface-2);
border: 1px solid rgba(233,210,180,0.18);
border-radius: 13px;
padding: 7px;
box-shadow: 0 30px 60px -28px #000;
animation: rise .2s ease both;
}
/* HTMX progress bar */
#progress-bar {
position: fixed;
top: 0; left: 0; right: 0;
z-index: 999;
height: 2px;
opacity: 0;
transition: opacity .2s;
background: linear-gradient(to right, var(--color-gold), var(--color-gold-2), var(--color-gold));
background-size: 200% 100%;
}
#progress-bar.htmx-request {
opacity: 1;
animation: progress-sweep 1.5s ease-in-out infinite;
}
}
/* ── Keyframes ─────────────────────────────────────────────────────────────── */
@keyframes rise { from { transform: translateY(14px); } to { transform: none; } }
@keyframes page-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes page-out { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(-8px); } }
@keyframes progress-sweep { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
/* ── View Transitions ──────────────────────────────────────────────────────── */
::view-transition-old(root) { animation: 200ms ease-in page-out; }
::view-transition-new(root) { animation: 300ms ease-out page-in; }
/* ── Reduced motion ────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
.rise { animation: none; }
::view-transition-old(root),
::view-transition-new(root) { animation: none; }
}