@tailwind base;
@tailwind components;
@tailwind utilities;
@import "./theme.css";
/* ---- Base ---------------------------------------------------------------- */
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
}
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
body {
margin: 0;
background: var(--bg);
color: var(--ink);
font-family: "Geist", system-ui, sans-serif;
font-weight: 400;
font-feature-settings: "ss01", "ss02", "cv11";
transition: background 500ms cubic-bezier(0.16, 1, 0.3, 1),
color 500ms cubic-bezier(0.16, 1, 0.3, 1);
}
::selection {
background: var(--accent);
color: var(--surface);
}
/* Editorial paper grain — the whole point of the aesthetic. Overlaid on the
entire document at low opacity. Uses SVG feTurbulence for zero-request grain. */
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
z-index: 100;
opacity: var(--grain);
mix-blend-mode: multiply;
background-image: url("data:image/svg+xml;utf8,");
background-size: 240px 240px;
}
[data-theme="dark"] body::before {
mix-blend-mode: screen;
background-image: url("data:image/svg+xml;utf8,");
}
/* ---- Type utilities ----------------------------------------------------- */
.font-display {
font-family: "Instrument Serif", serif;
font-weight: 400;
letter-spacing: -0.015em;
line-height: 0.92;
}
.font-display-italic {
font-family: "Instrument Serif", serif;
font-style: italic;
font-weight: 400;
letter-spacing: -0.02em;
line-height: 0.92;
}
.font-mono {
font-family: "JetBrains Mono", ui-monospace, monospace;
font-feature-settings: "calt", "liga", "ss01";
}
/* Small caps + tracking for section labels — the "chapter marker" of the site */
.eyebrow {
font-family: "Geist", system-ui, sans-serif;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-mute);
}
/* ---- Focus rings — replaced with editorial underline ------------------- */
:focus-visible {
outline: 2px solid var(--focus);
outline-offset: 3px;
border-radius: 2px;
}
/* Hide the default focus on decorative elements */
button:focus,
a:focus {
outline: none;
}
button:focus-visible,
a:focus-visible {
outline: 2px solid var(--focus);
outline-offset: 3px;
}
/* ---- Custom cursor — soft ink dot on interactive elements -------------- */
.cursor-ink {
cursor: none;
}
/* ---- Scrollbar --------------------------------------------------------- */
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--rule);
border-radius: 6px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--ink-mute);
}
/* ---- Motion — respect user preference ---------------------------------- */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.001ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
}
}