-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathglobals.css
More file actions
178 lines (165 loc) · 5.86 KB
/
Copy pathglobals.css
File metadata and controls
178 lines (165 loc) · 5.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
@import "tailwindcss";
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));
/*
* Design tokens — single source of truth (Phase 0.2).
*
* Colors are oklch semantic tokens: components reference `bg-background`,
* `text-primary`, etc. — never raw color values. Light theme on :root,
* dark theme on .dark (class strategy, toggled via next-themes).
*
* Every pairing of `x-foreground` on `x` (plus foreground/muted-foreground
* on background) is WCAG-AA-verified by lib/design/contrast.test.ts, which
* parses this file. Editing a value here reruns those checks in CI.
*/
:root {
--background: oklch(0.985 0.003 250);
--foreground: oklch(0.19 0.02 255);
--card: oklch(1 0 0);
--card-foreground: oklch(0.19 0.02 255);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.19 0.02 255);
/* Deep blue brand accent (UI/UX doc: "Deep Blue Accent") */
--primary: oklch(0.45 0.16 258);
--primary-foreground: oklch(0.985 0.005 250);
--secondary: oklch(0.955 0.01 252);
--secondary-foreground: oklch(0.28 0.04 256);
--muted: oklch(0.96 0.008 252);
--muted-foreground: oklch(0.45 0.025 256);
--accent: oklch(0.94 0.025 255);
--accent-foreground: oklch(0.32 0.1 258);
--destructive: oklch(0.5 0.19 27);
--destructive-foreground: oklch(0.985 0.005 250);
--border: oklch(0.905 0.01 252);
--input: oklch(0.905 0.01 252);
--ring: oklch(0.45 0.16 258);
--radius: 0.625rem;
}
.dark {
--background: oklch(0.16 0.015 256);
--foreground: oklch(0.95 0.008 250);
--card: oklch(0.205 0.018 256);
--card-foreground: oklch(0.95 0.008 250);
--popover: oklch(0.205 0.018 256);
--popover-foreground: oklch(0.95 0.008 250);
--primary: oklch(0.65 0.15 258);
--primary-foreground: oklch(0.15 0.02 256);
--secondary: oklch(0.26 0.02 256);
--secondary-foreground: oklch(0.93 0.01 250);
--muted: oklch(0.24 0.02 256);
--muted-foreground: oklch(0.72 0.02 254);
--accent: oklch(0.29 0.05 258);
--accent-foreground: oklch(0.92 0.02 254);
--destructive: oklch(0.58 0.2 26);
--destructive-foreground: oklch(0.985 0.005 250);
--border: oklch(0.28 0.02 256);
--input: oklch(0.28 0.02 256);
--ring: oklch(0.65 0.15 258);
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
/*
* Deliberate, limited type scale (enterprise / Apple + Vercel direction).
* Tailwind's defaults beyond this set are removed so hierarchy stays
* intentional: body text, two supporting sizes, three heading steps,
* one display step.
*/
--text-*: initial;
--text-xs: 0.75rem;
--text-xs--line-height: 1rem;
--text-sm: 0.875rem;
--text-sm--line-height: 1.25rem;
--text-base: 1rem;
--text-base--line-height: 1.5rem;
--text-lg: 1.125rem;
--text-lg--line-height: 1.75rem;
--text-xl: 1.25rem;
--text-xl--line-height: 1.75rem;
--text-2xl: 1.5rem;
--text-2xl--line-height: 2rem;
--text-3xl: 1.875rem;
--text-3xl--line-height: 2.25rem;
--text-4xl: 2.25rem;
--text-4xl--line-height: 2.5rem;
--text-6xl: 3.75rem;
--text-6xl--line-height: 1;
}
@layer base {
* {
@apply border-border outline-ring/50;
}
/*
* Smooth in-page scrolling (App Flow: "Smooth scrolling") with a global
* anchor offset: the sticky navbar is h-16 (4rem), so anchored sections
* stop 5rem down (1rem breathing room). Sections must NOT add their own
* scroll-mt-* — see the anchor contract in data/navigation.ts. The
* reduced-motion rule below flattens scroll-behavior back to auto.
*/
html {
@apply scroll-pt-20 scroll-smooth;
}
body {
@apply bg-background font-sans text-foreground antialiased;
}
/*
* Global focus ring (accessibility requirement): every focusable element
* gets a visible ring in the accent color, both themes. shadcn primitives
* opt out via `outline-none` and render their own ring from the same
* --ring token, so the treatment stays consistent everywhere.
*/
:focus-visible {
outline: 2px solid var(--ring);
outline-offset: 2px;
}
/*
* CSS-level reduced-motion support. Framer Motion presets additionally
* respect this via MotionConfig reducedMotion="user"; this rule covers
* CSS transitions/animations (tw-animate-css, hover transitions, smooth
* scrolling) for users who opt out of 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;
}
}
}
/*
* Glassmorphism surface — the only sanctioned glass treatment (UI/UX doc).
* Deliberately subtle: translucent card surface, backdrop blur, soft border.
* Apply to floating/overlay surfaces only, never to every card.
*/
@utility glass {
border-width: 1px;
border-color: color-mix(in oklab, var(--border) 60%, transparent);
background-color: color-mix(in oklab, var(--card) 65%, transparent);
backdrop-filter: blur(12px);
}