initial commit
This commit is contained in:
@@ -0,0 +1,256 @@
|
||||
@import 'tailwindcss';
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Fonts — Geist Sans + Geist Mono (self-hosted, .woff2) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
@font-face {
|
||||
font-family: 'Geist';
|
||||
font-style: normal;
|
||||
font-weight: 100 900;
|
||||
font-display: swap;
|
||||
src: url('/fonts/Geist-Variable.woff2') format('woff2-variations');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Geist Mono';
|
||||
font-style: normal;
|
||||
font-weight: 100 900;
|
||||
font-display: swap;
|
||||
src: url('/fonts/GeistMono-Variable.woff2') format('woff2-variations');
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Material Symbols (variable) — used for the icon set */
|
||||
/* Add new icons in markup as <span class="material-symbols-outlined"> */
|
||||
/* ------------------------------------------------------------------ */
|
||||
.material-symbols-outlined {
|
||||
font-family: 'Material Symbols Outlined';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-transform: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
direction: ltr;
|
||||
font-variation-settings:
|
||||
'FILL' 0,
|
||||
'wght' 400,
|
||||
'GRAD' 0,
|
||||
'opsz' 24;
|
||||
}
|
||||
.material-symbols-outlined.fill-1 {
|
||||
font-variation-settings:
|
||||
'FILL' 1,
|
||||
'wght' 400,
|
||||
'GRAD' 0,
|
||||
'opsz' 24;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Design tokens — lifted from .opencode/stitch/DESIGN.md */
|
||||
/* ------------------------------------------------------------------ */
|
||||
@theme {
|
||||
/* surfaces */
|
||||
--color-background: #ffffff;
|
||||
--color-surface: #ffffff;
|
||||
--color-surface-dim: #f9fafb;
|
||||
--color-surface-raised: #f9fafb;
|
||||
--color-surface-container-low: #ffffff;
|
||||
--color-surface-container: #f9fafb;
|
||||
--color-surface-container-high: #f3f4f6;
|
||||
--color-surface-container-highest: #f3f4f6;
|
||||
--color-surface-variant: #f3f4f6;
|
||||
--color-border-subtle: #e5e7eb;
|
||||
--color-outline: #d1d5db;
|
||||
--color-outline-variant: #e5e7eb;
|
||||
|
||||
/* text */
|
||||
--color-on-surface: #111827;
|
||||
--color-on-surface-variant: #4b5563;
|
||||
--color-on-background: #111827;
|
||||
--color-text-secondary: #4b5563;
|
||||
--color-text-tertiary: #6b7280;
|
||||
--color-inverse-surface: #111827;
|
||||
--color-inverse-on-surface: #ffffff;
|
||||
|
||||
/* brand */
|
||||
--color-primary: #318db8;
|
||||
--color-primary-container: #dcf0fa;
|
||||
--color-on-primary: #ffffff;
|
||||
--color-on-primary-container: #001e2c;
|
||||
--color-accent-blue: #318db8;
|
||||
--color-accent-gold: #eab308;
|
||||
|
||||
/* secondary */
|
||||
--color-secondary: #4b5563;
|
||||
--color-on-secondary: #ffffff;
|
||||
--color-secondary-container: #f3f4f6;
|
||||
--color-on-secondary-container: #4b5563;
|
||||
|
||||
/* tertiary */
|
||||
--color-tertiary: #ffb95f;
|
||||
--color-on-tertiary: #ffffff;
|
||||
|
||||
/* status */
|
||||
--color-error: #ef4444;
|
||||
--color-on-error: #ffffff;
|
||||
--color-success: #10b981;
|
||||
|
||||
/* radius */
|
||||
--radius-sm: 0.25rem;
|
||||
--radius-md: 0.5rem;
|
||||
--radius-lg: 0.75rem;
|
||||
--radius-xl: 0.75rem;
|
||||
--radius-2xl: 1rem;
|
||||
--radius-full: 9999px;
|
||||
|
||||
/* type */
|
||||
--font-sans:
|
||||
'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
|
||||
sans-serif;
|
||||
--font-display: 'Geist', ui-sans-serif, system-ui, sans-serif;
|
||||
--font-mono: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
|
||||
|
||||
--text-display-lg: 48px;
|
||||
--text-display-lg--line-height: 1.1;
|
||||
--text-display-lg--letter-spacing: -0.04em;
|
||||
--text-display-lg--font-weight: 700;
|
||||
|
||||
--text-headline-lg: 32px;
|
||||
--text-headline-lg--line-height: 1.2;
|
||||
--text-headline-lg--letter-spacing: -0.02em;
|
||||
--text-headline-lg--font-weight: 600;
|
||||
|
||||
--text-headline-md: 24px;
|
||||
--text-headline-md--line-height: 1.3;
|
||||
--text-headline-md--letter-spacing: -0.01em;
|
||||
--text-headline-md--font-weight: 600;
|
||||
|
||||
--text-body-lg: 18px;
|
||||
--text-body-lg--line-height: 1.6;
|
||||
|
||||
--text-body-md: 16px;
|
||||
--text-body-md--line-height: 1.5;
|
||||
|
||||
--text-label-md: 14px;
|
||||
--text-label-md--line-height: 1;
|
||||
--text-label-md--letter-spacing: 0.02em;
|
||||
--text-label-md--font-weight: 500;
|
||||
|
||||
--text-code: 14px;
|
||||
--text-code--line-height: 1.6;
|
||||
|
||||
/* spacing (4px baseline) */
|
||||
--spacing-gutter: 24px;
|
||||
--spacing-margin-mobile: 16px;
|
||||
--spacing-margin-desktop: 40px;
|
||||
--spacing-section: 80px;
|
||||
--spacing-xxl: 80px;
|
||||
|
||||
/* containers */
|
||||
--container-site: 1440px;
|
||||
--container-article: 720px;
|
||||
--container-reading-lane: 800px;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Base layer */
|
||||
/* ------------------------------------------------------------------ */
|
||||
@layer base {
|
||||
html {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-rendering: optimizeLegibility;
|
||||
background-color: var(--color-background);
|
||||
color: var(--color-on-surface);
|
||||
font-family: var(--font-sans);
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--color-background);
|
||||
color: var(--color-on-surface);
|
||||
font-size: var(--text-body-md);
|
||||
line-height: var(--text-body-md--line-height);
|
||||
min-height: 100dvh;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: color-mix(in oklab, var(--color-primary) 20%, transparent);
|
||||
}
|
||||
|
||||
:focus-visible {
|
||||
outline: 2px solid var(--color-primary);
|
||||
outline-offset: 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
img,
|
||||
video,
|
||||
svg {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Utilities (component classes referenced across pages) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
@layer components {
|
||||
.hairline {
|
||||
border: 1px solid var(--color-border-subtle);
|
||||
}
|
||||
.hairline-hover {
|
||||
border: 1px solid var(--color-border-subtle);
|
||||
transition: border-color 0.2s ease;
|
||||
}
|
||||
.hairline-hover:hover {
|
||||
border-color: var(--color-primary);
|
||||
}
|
||||
.mask-fade-b {
|
||||
mask-image: linear-gradient(to bottom, black 80%, transparent 100%);
|
||||
-webkit-mask-image: linear-gradient(to bottom, black 80%, transparent 100%);
|
||||
}
|
||||
.glass-nav {
|
||||
background-color: color-mix(in oklab, var(--color-background) 80%, transparent);
|
||||
backdrop-filter: saturate(180%) blur(12px);
|
||||
-webkit-backdrop-filter: saturate(180%) blur(12px);
|
||||
}
|
||||
.grid-noise {
|
||||
background-image:
|
||||
linear-gradient(var(--color-border-subtle) 1px, transparent 1px),
|
||||
linear-gradient(90deg, var(--color-border-subtle) 1px, transparent 1px);
|
||||
background-size: 40px 40px;
|
||||
}
|
||||
.text-balance {
|
||||
text-wrap: balance;
|
||||
}
|
||||
.scrollbar-none {
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
}
|
||||
.scrollbar-none::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Reduced motion */
|
||||
/* ------------------------------------------------------------------ */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user