-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.css
More file actions
271 lines (254 loc) · 9.57 KB
/
Copy pathindex.css
File metadata and controls
271 lines (254 loc) · 9.57 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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
@import 'tailwindcss';
/* ===================================================================
Kestrel console - flat dark design tokens (Linear / Raycast lineage)
ONE structural idea is borrowed from prior work: the topbar and sidebar
are fused into a single continuous frosted surface, with the content
pane inset as a bezeled card. Everything else is original.
Flat: no glossy highlights, no bevels - depth comes from hairline
borders, not shadows. Restyle by editing these tokens only.
=================================================================== */
@theme {
/* surfaces (dark, near-flat) */
--color-desktop: #0a0908; /* warm near-black, behind the frosted shell */
--color-surface: rgba(255, 255, 255, 0.04);
--color-surface-2: rgba(255, 255, 255, 0.065);
--color-bezel: #0e0f13; /* content pane, near-solid for reading */
/* text, four levels */
--color-ink: #ededf0;
--color-ink-2: #b7b8c0;
--color-ink-3: #8a8b94;
--color-ink-mute: #5f606a;
/* hairlines (translucent white; depth without shadow) */
--color-line: rgba(255, 255, 255, 0.07);
--color-line-2: rgba(255, 255, 255, 0.11);
--color-line-3: rgba(255, 255, 255, 0.16);
/* single accent (copper) - lifted from the design study. warmer + more golden
than Claude's coral; the only hue in the UI. -deep is for gradient bottoms. */
--color-accent: #e6a55e;
--color-accent-2: #f2b877; /* hover / bright */
--color-accent-ink: #f7c98d; /* bright copper on dark */
--color-accent-deep: #b97a33; /* gradient depth for buttons */
/* status */
--color-ok: #3ecf8e;
--color-warn: #e0a030;
--color-crit: #e0574b;
/* radius */
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 16px;
/* frosted shell - concept-grade: translucent enough that the blurred backdrop
reads through, a top-lighter fill gradient, and a bright-at-top hairline rim
(drawn by .glass-shell::before). */
--glass-fill: rgba(20, 22, 30, 0.42);
--glass-top: rgba(255, 255, 255, 0.055);
--glass-bot: rgba(255, 255, 255, 0.014);
--glass-rim-top: rgba(255, 255, 255, 0.18);
--glass-rim-bot: rgba(255, 255, 255, 0.03);
/* desktop soft-light glows - mood behind the frosted shell. accent (russet)
family only (single-hue rule); role-named so a future accent swaps cleanly. */
--glow-key: rgba(230, 165, 94, 0.16); /* primary, behind the fused corner */
--glow-edge: rgba(185, 122, 51, 0.11); /* down the left edge behind the sidebar */
--glow-far: rgba(210, 150, 90, 0.06); /* faint far-corner counterweight */
/* crisp grid behind the glass: SHARP high-frequency lines are what the frost
visibly softens - blurring smooth gradients shows nothing. spacing > blur
radius so the frost stays a quilt instead of averaging to flat grey. */
--grid-line: rgba(255, 255, 255, 0.05);
--grid-size: 40px;
/* type */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
'PingFang SC', 'Microsoft YaHei', sans-serif;
--font-mono: ui-monospace, 'SF Mono', 'Cascadia Code', 'Segoe UI Mono',
Consolas, 'Liberation Mono', monospace;
--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
}
@layer base {
* {
border-color: var(--color-line);
}
html {
font-size: 20px; /* root scale; all rem sizes grow with it */
}
html,
body,
#root {
height: 100%;
}
body {
margin: 0;
color: var(--color-ink);
font-family: var(--font-sans);
font-size: 15px;
line-height: 1.55;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* the scene the frosted shell blurs: a crisp grid (the SHARP thing), warm
glows for mood, and a vignette to sink the edges. the grid is what makes
the frost read - the shell softens its hard lines into a quilt. */
background-color: var(--color-desktop);
background-image:
radial-gradient(125% 125% at 50% 38%, transparent 55%, rgba(0, 0, 0, 0.5)),
linear-gradient(var(--grid-line) 1px, transparent 1px),
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
radial-gradient(92vw 74vh at 20% -12%, var(--glow-key), transparent 60%),
radial-gradient(54vw 84vh at -12% 42%, var(--glow-edge), transparent 62%),
radial-gradient(58vw 54vh at 112% 116%, var(--glow-far), transparent 55%);
background-size:
auto,
var(--grid-size) var(--grid-size),
var(--grid-size) var(--grid-size),
auto, auto, auto;
background-attachment: fixed;
}
::selection {
background: color-mix(in oklch, var(--color-accent) 32%, transparent);
}
* {
scrollbar-width: thin;
scrollbar-color: var(--color-line-3) transparent;
}
}
@layer utilities {
/* the frosted shell: topbar + sidebar live on this ONE surface.
flat - a single hairline border, no ::after highlight, no inner bevels. */
.glass-shell {
position: relative;
/* translucent fill + top-lighter gradient + a baked SVG grain. the fill is
kept transparent enough that the blurred grid behind reads through as frost;
plain backdrop-blur alone looks like translucent plastic - the grain fixes that. */
background-color: var(--glass-fill);
background-image:
linear-gradient(180deg, var(--glass-top), var(--glass-bot)),
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='0.05'/%3E%3C/svg%3E");
background-size: auto, 140px 140px;
backdrop-filter: blur(28px) saturate(140%);
-webkit-backdrop-filter: blur(28px) saturate(140%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
/* bright-at-top hairline rim: a masked 1px gradient border. this is the detail
that reads as a lit glass edge (concept's signature) - subtle, not glossy. */
.glass-shell::before {
content: '';
position: absolute;
inset: 0;
padding: 1px;
background: linear-gradient(180deg, var(--glass-rim-top), var(--glass-rim-bot) 55%);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
/* content pane: near-solid, inset, hairline border - the "bezel" */
.content-bezel {
background: var(--color-bezel);
border: 1px solid var(--color-line);
border-radius: var(--radius-lg);
}
/* the design-study card: a translucent gradient pane, lit hairline rim, and a
soft drop shadow lifting it off the page. used for the approval "main event". */
.glass-card {
position: relative;
border-radius: var(--radius-lg);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015));
backdrop-filter: blur(28px) saturate(1.3);
-webkit-backdrop-filter: blur(28px) saturate(1.3);
box-shadow:
0 30px 70px -42px rgba(0, 0, 0, 0.85),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.glass-card::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
padding: 1px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.03) 55%);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.font-mono {
font-family: var(--font-mono);
font-variant-numeric: tabular-nums;
}
.focus-ring:focus-visible {
outline: none;
box-shadow:
0 0 0 2px var(--color-desktop),
0 0 0 4px color-mix(in oklch, var(--color-accent) 55%, transparent);
border-radius: var(--radius-sm);
}
}
/* streaming style (design study): a blinking copper caret while the answer
streams, and a shimmer sweep on the "Thinking..." label while it reasons.
both are frozen by the prefers-reduced-motion block below. */
/* streaming caret: rendered as an inline ::after on the LAST block of the
markdown so it sits right after the final character (not on its own line
below). `.stream-caret` is toggled on the wrapper only while streaming. */
.stream-caret .md > :last-child::after {
content: '';
display: inline-block;
width: 7px;
height: 1.05em;
margin-left: 2px;
vertical-align: -2px;
border-radius: 1px;
background: var(--color-accent);
box-shadow: 0 0 8px color-mix(in oklch, var(--color-accent) 55%, transparent);
animation: caret-blink 1s steps(2) infinite;
}
@keyframes caret-blink {
50% {
opacity: 0;
}
}
.shimmer {
background: linear-gradient(
90deg,
var(--color-ink-mute) 30%,
var(--color-ink-2) 50%,
var(--color-ink-mute) 70%
);
background-size: 200% 100%;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: shimmer 1.8s linear infinite;
}
@keyframes shimmer {
to {
background-position: -200% 0;
}
}
/* markdown: neutralize the inline-code chip when it sits inside a fenced block
(unlayered, so it wins over the utility classes on the code element) */
.md pre code {
background: transparent;
padding: 0;
color: inherit;
border-radius: 0;
font-size: inherit;
}
/* mobile: backdrop-filter is a per-frame GPU cost; drop it, use a solid fill */
@media (max-width: 767px) {
.glass-shell {
backdrop-filter: none;
-webkit-backdrop-filter: none;
background: rgba(16, 17, 21, 0.96);
}
body {
background-attachment: scroll;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}