- Add root biome.json that extends packages/config/biome.json - Add explicit ignore patterns for dist/, build/, .next/, .turbo/, etc. - Make a11y lints warnings instead of errors (non-blocking) - Remove invalid biome-ignore comment from Section.tsx - Apply formatting to all source files (155 files checked, 129 fixed) This fixes the CI format check that was failing with 2064+ errors because Biome was checking generated files in dist/ and .turbo/. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
287 lines
8.2 KiB
CSS
287 lines
8.2 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
/* Light mode (default) */
|
|
:root {
|
|
/* Backgrounds & Surfaces */
|
|
--background: 0 0% 100%; /* Pure white */
|
|
--surface: 210 20% 98%; /* Off-white */
|
|
--surface-elevated: 0 0% 100%; /* White (elevated) */
|
|
--surface-overlay: 0 0% 98%; /* Light gray */
|
|
|
|
/* Foreground (Text) */
|
|
--foreground: 222 47% 11%; /* Almost black */
|
|
--foreground-secondary: 215 16% 47%; /* Medium gray */
|
|
--foreground-tertiary: 215 16% 65%; /* Light gray */
|
|
--foreground-muted: 215 16% 75%; /* Very light gray */
|
|
|
|
/* Borders */
|
|
--border: 214 32% 91%; /* Light gray */
|
|
--border-strong: 214 32% 80%; /* Medium gray */
|
|
--border-subtle: 214 20% 95%; /* Very light gray */
|
|
|
|
/* Interactive States */
|
|
--primary: 222 47% 11%; /* Dark for light mode */
|
|
--primary-foreground: 210 40% 98%; /* Light text */
|
|
--secondary: 210 40% 96%; /* Light secondary */
|
|
--secondary-foreground: 222 47% 11%; /* Dark text */
|
|
--accent: 210 40% 96%; /* Accent bg */
|
|
--accent-foreground: 222 47% 11%; /* Accent text */
|
|
--muted: 210 40% 96%; /* Muted bg */
|
|
--muted-foreground: 215 16% 47%; /* Muted text */
|
|
|
|
/* Status Colors */
|
|
--success: 142 71% 45%;
|
|
--success-foreground: 142 76% 15%;
|
|
--error: 0 72% 51%;
|
|
--error-foreground: 0 86% 17%;
|
|
--warning: 38 92% 50%;
|
|
--warning-foreground: 48 96% 19%;
|
|
--info: 217 91% 60%;
|
|
--info-foreground: 214 95% 23%;
|
|
|
|
/* Destructive (legacy) */
|
|
--destructive: 0 84% 60%;
|
|
--destructive-foreground: 210 40% 98%;
|
|
|
|
/* Form Elements */
|
|
--input: 214 32% 91%;
|
|
--ring: 222 84% 5%;
|
|
--ring-offset: 0 0% 100%;
|
|
|
|
/* Grid/Blueprint Pattern */
|
|
--grid-color: 214 32% 95%;
|
|
--grid-size: 24px; /* Grid cell size */
|
|
|
|
/* Card */
|
|
--card: 0 0% 100%;
|
|
--card-foreground: 222 47% 11%;
|
|
|
|
/* Border Radii */
|
|
--radius-sm: 4px;
|
|
--radius-md: 6px;
|
|
--radius-lg: 8px;
|
|
--radius-xl: 12px;
|
|
--radius: var(--radius-md);
|
|
|
|
/* Typography */
|
|
--font-sans: "Geist", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
|
|
--font-mono: "Geist Mono", "SF Mono", Consolas, monospace;
|
|
}
|
|
|
|
/* Dark mode (opt-in) - Vercel/Cursor/Perplexity aesthetic */
|
|
.dark {
|
|
/* Backgrounds & Surfaces */
|
|
--background: 210 10% 5%; /* #0d0d0f - Almost black */
|
|
--surface: 210 10% 8%; /* #14141a - Slightly lighter */
|
|
--surface-elevated: 210 10% 12%; /* #1c1c24 - Cards, modals */
|
|
--surface-overlay: 210 10% 16%; /* #25252f - Overlays, popovers */
|
|
|
|
/* Foreground (Text) */
|
|
--foreground: 210 10% 90%; /* #e3e3e8 - Primary text */
|
|
--foreground-secondary: 210 8% 60%; /* #949499 - Secondary text */
|
|
--foreground-tertiary: 210 6% 40%; /* #64646a - Tertiary text */
|
|
--foreground-muted: 210 6% 30%; /* #4a4a50 - Muted text */
|
|
|
|
/* Borders (1px, subtle) */
|
|
--border: 210 10% 20%; /* #30303a - Default border */
|
|
--border-strong: 210 12% 30%; /* #494954 - Emphasized border */
|
|
--border-subtle: 210 8% 15%; /* #22222c - Subtle border */
|
|
|
|
/* Interactive States */
|
|
--primary: 210 10% 98%; /* White-ish for dark mode */
|
|
--primary-foreground: 210 10% 5%; /* Dark text on light bg */
|
|
--secondary: 210 10% 15%; /* Dark secondary */
|
|
--secondary-foreground: 210 10% 90%; /* Light text on dark bg */
|
|
--accent: 210 10% 18%; /* Accent background */
|
|
--accent-foreground: 210 10% 95%; /* Accent text */
|
|
--muted: 210 10% 12%; /* Muted background */
|
|
--muted-foreground: 210 8% 60%; /* Muted text */
|
|
|
|
/* Status Colors (desaturated for dark mode) */
|
|
--success: 142 71% 45%; /* #10b981 - Green */
|
|
--success-foreground: 142 76% 95%; /* Light green text */
|
|
--error: 0 72% 51%; /* #ef4444 - Red */
|
|
--error-foreground: 0 86% 97%; /* Light red text */
|
|
--warning: 38 92% 50%; /* #f59e0b - Amber */
|
|
--warning-foreground: 48 96% 89%; /* Light amber text */
|
|
--info: 217 91% 60%; /* #3b82f6 - Blue */
|
|
--info-foreground: 214 95% 93%; /* Light blue text */
|
|
|
|
/* Destructive (legacy support) */
|
|
--destructive: 0 72% 51%;
|
|
--destructive-foreground: 0 86% 97%;
|
|
|
|
/* Form Elements */
|
|
--input: 210 10% 20%; /* Input border */
|
|
--ring: 210 10% 90%; /* Focus ring */
|
|
--ring-offset: 210 10% 5%; /* Focus ring offset */
|
|
|
|
/* Grid/Blueprint Pattern */
|
|
--grid-color: 210 10% 15%; /* Grid line color */
|
|
|
|
/* Card */
|
|
--card: 210 10% 8%;
|
|
--card-foreground: 210 10% 90%;
|
|
}
|
|
|
|
/* Base element styles */
|
|
* {
|
|
@apply border-border;
|
|
}
|
|
|
|
body {
|
|
@apply bg-background text-foreground;
|
|
font-family: var(--font-sans);
|
|
font-feature-settings: "rlig" 1, "calt" 1;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
/* Grid/Blueprint background patterns */
|
|
.grid-background {
|
|
background-image: linear-gradient(hsl(var(--grid-color)) 1px, transparent 1px),
|
|
linear-gradient(90deg, hsl(var(--grid-color)) 1px, transparent 1px);
|
|
background-size: var(--grid-size) var(--grid-size);
|
|
background-position: -1px -1px;
|
|
}
|
|
|
|
.dotted-grid-background {
|
|
background-image: radial-gradient(circle, hsl(var(--grid-color)) 1px, transparent 1px);
|
|
background-size: var(--grid-size) var(--grid-size);
|
|
}
|
|
|
|
.blueprint-background {
|
|
background-color: hsl(var(--background));
|
|
/* Major grid lines (4x size) */
|
|
background-image: linear-gradient(hsl(var(--grid-color)) 1px, transparent 1px),
|
|
linear-gradient(90deg, hsl(var(--grid-color)) 1px, transparent 1px),
|
|
/* Minor grid lines (1x size) */
|
|
linear-gradient(hsl(var(--grid-color) / 0.3) 1px, transparent 1px),
|
|
linear-gradient(90deg, hsl(var(--grid-color) / 0.3) 1px, transparent 1px);
|
|
background-size: calc(var(--grid-size) * 4) calc(var(--grid-size) * 4),
|
|
calc(var(--grid-size) * 4) calc(var(--grid-size) * 4), var(--grid-size) var(--grid-size),
|
|
var(--grid-size) var(--grid-size);
|
|
}
|
|
|
|
/* Animated grid (subtle pulse) */
|
|
.grid-background-animated {
|
|
@apply grid-background;
|
|
animation: grid-pulse 8s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes grid-pulse {
|
|
0%,
|
|
100% {
|
|
opacity: 0.4;
|
|
}
|
|
50% {
|
|
opacity: 0.6;
|
|
}
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
/* Border utilities */
|
|
.border-1 {
|
|
border-width: 1px;
|
|
}
|
|
|
|
.border-dotted-1 {
|
|
border-width: 1px;
|
|
border-style: dotted;
|
|
}
|
|
|
|
.border-dashed-1 {
|
|
border-width: 1px;
|
|
border-style: dashed;
|
|
}
|
|
|
|
/* Directional dotted borders */
|
|
.border-t-dotted {
|
|
border-top-width: 1px;
|
|
border-top-style: dotted;
|
|
}
|
|
|
|
.border-b-dotted {
|
|
border-bottom-width: 1px;
|
|
border-bottom-style: dotted;
|
|
}
|
|
|
|
.border-l-dotted {
|
|
border-left-width: 1px;
|
|
border-left-style: dotted;
|
|
}
|
|
|
|
.border-r-dotted {
|
|
border-right-width: 1px;
|
|
border-right-style: dotted;
|
|
}
|
|
|
|
/* Transition presets */
|
|
.transition-base {
|
|
transition-property: background-color, border-color, color, fill, stroke;
|
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition-duration: 200ms;
|
|
}
|
|
|
|
.transition-transform {
|
|
transition-property: transform;
|
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition-duration: 200ms;
|
|
}
|
|
|
|
.transition-all-smooth {
|
|
transition-property: all;
|
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition-duration: 300ms;
|
|
}
|
|
|
|
/* Hover effects */
|
|
.hover-lift {
|
|
@apply transition-transform hover:-translate-y-0.5 hover:shadow-md;
|
|
}
|
|
|
|
/* Focus ring (modern, accessible) */
|
|
.focus-ring {
|
|
@apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background;
|
|
}
|
|
|
|
/* Custom animations */
|
|
@keyframes slide-up {
|
|
from {
|
|
transform: translateY(10px);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% {
|
|
background-position: -1000px 0;
|
|
}
|
|
100% {
|
|
background-position: 1000px 0;
|
|
}
|
|
}
|
|
|
|
.animate-slide-up {
|
|
animation: slide-up 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
.animate-shimmer {
|
|
animation: shimmer 2s infinite linear;
|
|
background: linear-gradient(
|
|
90deg,
|
|
hsl(var(--muted)) 0%,
|
|
hsl(var(--accent)) 50%,
|
|
hsl(var(--muted)) 100%
|
|
);
|
|
background-size: 1000px 100%;
|
|
}
|
|
}
|