pike/glyph Public Public: anyone can read this; nobody can change it.

forked from apps/glyph

workbenchthis machine
Files acd87b6b6146da11e0c9272c92a02a8e707adf4a
209 lines · 4.4 KB · ~1.3k tok Raw History
1
/* The look, in the tokens' words. Every value that is a choice — a colour, a
2
   space, a radius, a size — is a var(--…) from /tokens.css, which
3
   design/tokens.json compiles to at boot; `bun run lint:design` refuses a raw
4
   colour here. Light and dark are the tokens' business, not this file's. */
5
6
/* The page. */
7
html {
8
  -webkit-text-size-adjust: 100%;
9
  text-size-adjust: 100%;
10
}
11
body {
12
  margin: 0;
13
  background: var(--color-bg);
14
  color: var(--color-fg);
15
  font: var(--text-base) / var(--leading-body) var(--font-sans);
16
}
17
.page {
18
  max-width: 40rem;
19
  margin: 0 auto;
20
  padding: var(--space-5) var(--space-4) var(--space-6);
21
}
22
.head {
23
  display: flex;
24
  flex-wrap: wrap;
25
  justify-content: space-between;
26
  align-items: flex-start;
27
  gap: var(--space-3) var(--space-4);
28
  margin-bottom: var(--space-5);
29
}
30
h1 {
31
  margin: 0;
32
  font-size: var(--text-xl);
33
  font-weight: 650;
34
  letter-spacing: -0.01em;
35
  line-height: var(--leading-tight);
36
}
37
p {
38
  margin: 0;
39
}
40
a {
41
  color: var(--color-accent);
42
  text-decoration-thickness: 1px;
43
  text-underline-offset: 0.15em;
44
}
45
code,
46
.mono {
47
  font-family: var(--font-mono);
48
  font-size: var(--text-sm);
49
}
50
:focus-visible {
51
  outline: 2px solid var(--color-accent);
52
  outline-offset: 2px;
53
}
54
.muted {
55
  color: var(--color-muted);
56
}
57
.you {
58
  color: var(--color-muted);
59
  white-space: nowrap;
60
}
61
62
/* Blocks. */
63
.card {
64
  background: var(--color-surface);
65
  border: 1px solid var(--color-line);
66
  border-radius: var(--radius-md);
67
  padding: var(--space-4);
68
  margin-bottom: var(--space-5);
69
}
70
.row {
71
  display: flex;
72
  align-items: center;
73
  gap: var(--space-2);
74
}
75
.list {
76
  list-style: none;
77
  margin: 0;
78
  padding: 0;
79
}
80
.note {
81
  display: flex;
82
  justify-content: space-between;
83
  align-items: flex-start;
84
  gap: var(--space-3);
85
  padding: var(--space-3) 0;
86
  border-top: 1px solid var(--color-line);
87
}
88
.note:first-child {
89
  border-top: 0;
90
}
91
.note p {
92
  overflow-wrap: anywhere;
93
}
94
.note small {
95
  font-size: var(--text-sm);
96
}
97
.empty {
98
  padding: var(--space-6) var(--space-4);
99
  text-align: center;
100
  color: var(--color-muted);
101
  border: 1px dashed var(--color-line);
102
  border-radius: var(--radius-md);
103
}
104
footer {
105
  margin-top: var(--space-6);
106
  font-size: var(--text-sm);
107
  display: grid;
108
  gap: var(--space-1);
109
}
110
footer code {
111
  overflow-wrap: anywhere;
112
}
113
114
/* Controls: at least 44px on a side, keyboard and mouse alike. */
115
.input {
116
  flex: 1;
117
  min-width: 0;
118
  min-height: var(--size-tap);
119
  padding: 0 var(--space-3);
120
  font: inherit;
121
  font-size: max(16px, var(--text-base));
122
  color: inherit;
123
  background: var(--color-bg);
124
  border: 1px solid var(--color-line);
125
  border-radius: var(--radius-md);
126
}
127
.input::placeholder {
128
  color: var(--color-muted);
129
}
130
.button {
131
  min-height: var(--size-tap);
132
  padding: 0 var(--space-4);
133
  font: inherit;
134
  font-weight: 600;
135
  color: var(--color-accent-fg);
136
  background: var(--color-accent);
137
  border: 1px solid transparent;
138
  border-radius: var(--radius-md);
139
  cursor: pointer;
140
  white-space: nowrap;
141
  text-decoration: none;
142
  display: inline-flex;
143
  align-items: center;
144
}
145
.button:hover {
146
  filter: brightness(1.08);
147
}
148
.button-quiet {
149
  color: var(--color-muted);
150
  background: transparent;
151
  padding: 0 var(--space-3);
152
}
153
.button-quiet:hover {
154
  color: var(--color-fg);
155
  border-color: var(--color-line);
156
  filter: none;
157
}
158
.pill {
159
  display: inline-block;
160
  padding: 0.1rem 0.6rem;
161
  font-size: var(--text-sm);
162
  font-weight: 600;
163
  color: var(--color-muted);
164
  border: 1px solid var(--color-line);
165
  border-radius: var(--radius-pill);
166
}
167
.pill[data-env="production"] {
168
  color: var(--color-accent);
169
  border-color: currentColor;
170
}
171
172
/* A word from the last request, shown once, gone in a moment. */
173
.toast {
174
  position: fixed;
175
  left: 50%;
176
  bottom: var(--space-5);
177
  transform: translateX(-50%);
178
  max-width: calc(100% - 2 * var(--space-4));
179
  padding: var(--space-3) var(--space-4);
180
  color: var(--color-toast-fg);
181
  background: var(--color-toast-bg);
182
  border-radius: var(--radius-pill);
183
  box-shadow: 0 8px 24px var(--color-shadow);
184
  animation: toast 6s forwards;
185
}
186
@keyframes toast {
187
  0%,
188
  85% {
189
    opacity: 1;
190
  }
191
  100% {
192
    opacity: 0;
193
    visibility: hidden;
194
  }
195
}
196
/* Motion is a courtesy: whoever asked for less gets none. */
197
@media (prefers-reduced-motion: reduce) {
198
  *,
199
  *::before,
200
  *::after {
201
    animation-duration: 0.01ms !important;
202
    animation-iteration-count: 1 !important;
203
    transition-duration: 0.01ms !important;
204
    scroll-behavior: auto !important;
205
  }
206
  .toast {
207
    animation: none;
208
  }
209
}
↑↓ navigate ↵ open esc close
↑↓ navigate ↵ open esc close

Keyboard shortcuts