@azure-id/orc 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2907 -2814
- package/README.md +631 -657
- package/bin/cli.js +36866 -36780
- package/bin/webui/api.js +1283 -1272
- package/bin/webui/css/04-motion.css +43 -0
- package/bin/webui/css/06-responsive.css +14 -0
- package/bin/webui/css/panels/hookui.css +287 -71
- package/bin/webui/fixtures/hookui.js +431 -409
- package/bin/webui/i18n/en/hookui.json +104 -43
- package/bin/webui/i18n/id/hookui.json +123 -62
- package/bin/webui/js/panels/hookui.js +784 -362
- package/package.json +1 -1
|
@@ -37,6 +37,43 @@
|
|
|
37
37
|
from { opacity: 0; transform: translateY(8px); }
|
|
38
38
|
to { opacity: 1; transform: none; }
|
|
39
39
|
}
|
|
40
|
+
/* ── the CLI Hook Interface (v1.4.1) ─────────────────────────────────────── */
|
|
41
|
+
/* The board is a thing you BUILD, so it moves the way a thing you build moves:
|
|
42
|
+
a chip arrives, a chip you just staged breathes once so you can find it, and
|
|
43
|
+
a row in the part picker slides in as the list narrows under your typing.
|
|
44
|
+
Every one of them is a FINITE animation with a real end state, so the cap in
|
|
45
|
+
the reduced-motion block below leaves each one at rest rather than frozen
|
|
46
|
+
part-way. */
|
|
47
|
+
.hk-chip { animation: hk-chip-in 200ms var(--ease) backwards; }
|
|
48
|
+
@keyframes hk-chip-in {
|
|
49
|
+
from { opacity: 0; transform: translateY(6px) scale(0.97); }
|
|
50
|
+
to { opacity: 1; transform: none; }
|
|
51
|
+
}
|
|
52
|
+
/* Staged, not written — and the one thing on the board that has to be findable
|
|
53
|
+
the instant it appears. Three pulses and it stops: an infinite one would have
|
|
54
|
+
to be REMOVED below rather than capped, and this one reads correctly at rest.
|
|
55
|
+
*/
|
|
56
|
+
.hk-chip-new { animation: hk-chip-in 200ms var(--ease) backwards, hk-chip-mark 900ms var(--ease) 3; }
|
|
57
|
+
@keyframes hk-chip-mark {
|
|
58
|
+
0%, 100% { box-shadow: inset 0 0 0 0 var(--accent); }
|
|
59
|
+
50% { box-shadow: inset 0 0 0 2px var(--accent); }
|
|
60
|
+
}
|
|
61
|
+
/* Position, drop marker, and the zone's own border: transitions rather than
|
|
62
|
+
animations, so an interrupted drag never leaves a chip mid-flight. */
|
|
63
|
+
.hk-chip, .hk-zone, .hk-add, .hk-act, .hk-pick-row, .hk-theme, .hk-sample {
|
|
64
|
+
transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease),
|
|
65
|
+
box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease),
|
|
66
|
+
transform var(--dur) var(--ease);
|
|
67
|
+
}
|
|
68
|
+
.hk-chip:hover:not(.hk-chip-dragging) { transform: translateY(-2px); }
|
|
69
|
+
.hk-add:hover:not(:disabled) { transform: translateY(-2px); }
|
|
70
|
+
.hk-pick-row { animation: hk-row-in 160ms var(--ease) backwards; }
|
|
71
|
+
@keyframes hk-row-in {
|
|
72
|
+
from { opacity: 0; transform: translateX(-6px); }
|
|
73
|
+
to { opacity: 1; transform: none; }
|
|
74
|
+
}
|
|
75
|
+
button.hk-pick-row:hover { transform: translateX(3px); }
|
|
76
|
+
|
|
40
77
|
/* ---------------------------------------------------------- REDUCED MOTION */
|
|
41
78
|
/* Non-negotiable: every animation and transition above is off. */
|
|
42
79
|
|
|
@@ -55,6 +92,12 @@
|
|
|
55
92
|
nudges are removed outright rather than sped up. */
|
|
56
93
|
.nav a:hover, .btn:active:not(:disabled), .action:hover,
|
|
57
94
|
.todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
|
|
95
|
+
/* The board's own nudges, removed rather than shortened — a chip that lifts
|
|
96
|
+
under the pointer is an affordance, and a fast lift is still a lift. The
|
|
97
|
+
border and box-shadow changes stay: THEY are what says where a drop lands,
|
|
98
|
+
and a drop marker carried by motion alone would not exist here at all. */
|
|
99
|
+
.hk-chip:hover:not(.hk-chip-dragging), .hk-add:hover:not(:disabled),
|
|
100
|
+
button.hk-pick-row:hover { transform: none !important; }
|
|
58
101
|
/* The vault pulse is one of two INFINITE animations on the page. Capping it to
|
|
59
102
|
a single 1ms run would still leave a dash frozen mid-edge, so it is removed
|
|
60
103
|
outright and the edge reads as a plain line. */
|
|
@@ -138,6 +138,20 @@
|
|
|
138
138
|
.hk-prow-id {
|
|
139
139
|
min-width: 0;
|
|
140
140
|
}
|
|
141
|
+
/* v1.4.1 — the editor's two-column field (a name plus the sentence that
|
|
142
|
+
explains it, then the control) stacks; and DRAG IS OFF below this width. A
|
|
143
|
+
40-pixel drop gap on a phone is not a target, so the three buttons on every
|
|
144
|
+
chip are the path — which is why they are buttons on the chip and not a
|
|
145
|
+
menu behind one. */
|
|
146
|
+
.hk-chip {
|
|
147
|
+
max-width: none;
|
|
148
|
+
flex-basis: 100%;
|
|
149
|
+
cursor: default;
|
|
150
|
+
}
|
|
151
|
+
.hk-grip { display: none; }
|
|
152
|
+
.hk-add { flex-basis: 100%; }
|
|
153
|
+
.hk-picker, .hk-editor { min-width: 0; }
|
|
154
|
+
.hk-theme { flex-basis: 100%; max-width: none; }
|
|
141
155
|
/* The caution KEEPS its two columns. The mark and the sentence belong to each
|
|
142
156
|
other, and stacking them puts a lone ✕ on a line of its own above the text
|
|
143
157
|
it is about. The mark column narrows instead. */
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
Every colour comes from a token defined once, on bare :root, in
|
|
4
4
|
00-tokens.css. This file defines none.
|
|
5
5
|
|
|
6
|
-
Nothing here declares an animation, deliberately: the motion
|
|
7
|
-
04-motion.css and nowhere else
|
|
8
|
-
|
|
6
|
+
Nothing here declares an animation or a @keyframes, deliberately: the motion
|
|
7
|
+
rules live in 04-motion.css and nowhere else, because THE ONE reduced-motion
|
|
8
|
+
media block lives there and a rule in this file — which loads BEFORE it —
|
|
9
|
+
could not be switched off from there at equal specificity. What is here is
|
|
10
|
+
state that survives a reader who asked for less motion: borders, opacity and
|
|
11
|
+
a drop marker drawn as a real edge. */
|
|
9
12
|
|
|
10
13
|
/* ── the preview ───────────────────────────────────────────────────────── */
|
|
11
14
|
/* A terminal is a monospaced grid, so the preview has to be one too. Anything
|
|
@@ -89,14 +92,21 @@
|
|
|
89
92
|
|
|
90
93
|
/* ── the board ─────────────────────────────────────────────────────────── */
|
|
91
94
|
.hk-line-wrap {
|
|
92
|
-
margin-bottom:
|
|
95
|
+
margin-bottom: 18px;
|
|
93
96
|
}
|
|
94
97
|
.hk-line-head {
|
|
95
98
|
display: flex;
|
|
96
99
|
justify-content: space-between;
|
|
97
|
-
align-items:
|
|
100
|
+
align-items: center;
|
|
101
|
+
flex-wrap: wrap;
|
|
102
|
+
gap: 8px;
|
|
98
103
|
margin-bottom: 6px;
|
|
99
104
|
}
|
|
105
|
+
.hk-line-title {
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: baseline;
|
|
108
|
+
gap: 10px;
|
|
109
|
+
}
|
|
100
110
|
.hk-line-name {
|
|
101
111
|
font-size: 12px;
|
|
102
112
|
font-weight: 600;
|
|
@@ -113,13 +123,23 @@
|
|
|
113
123
|
.hk-zone {
|
|
114
124
|
display: flex;
|
|
115
125
|
flex-wrap: wrap;
|
|
116
|
-
gap:
|
|
117
|
-
padding:
|
|
126
|
+
gap: 10px;
|
|
127
|
+
padding: 12px;
|
|
118
128
|
border: 1px dashed var(--line);
|
|
119
129
|
border-radius: 10px;
|
|
120
|
-
min-height:
|
|
130
|
+
min-height: 84px;
|
|
121
131
|
align-items: stretch;
|
|
122
132
|
}
|
|
133
|
+
/* The zone under a chip being dragged over it. A border change, not a glow:
|
|
134
|
+
the affordance has to survive a reader who asked for less motion. */
|
|
135
|
+
.hk-zone-hot {
|
|
136
|
+
border-color: var(--accent);
|
|
137
|
+
border-style: solid;
|
|
138
|
+
background: var(--bg-sunken);
|
|
139
|
+
}
|
|
140
|
+
.hk-zone-why {
|
|
141
|
+
flex-basis: 100%;
|
|
142
|
+
}
|
|
123
143
|
/* An illegal line is DISABLED with its reason on the zone itself — never a
|
|
124
144
|
toast after the fact, never a validation error on Apply. A user should not be
|
|
125
145
|
able to do the wrong thing and then be told off for it. */
|
|
@@ -142,82 +162,125 @@
|
|
|
142
162
|
padding: 8px;
|
|
143
163
|
}
|
|
144
164
|
|
|
145
|
-
/* A chip's child count CHANGES with its state —
|
|
146
|
-
|
|
147
|
-
child count changes with its state must not have a row template; that
|
|
148
|
-
put a 250px ellipse on the Extra panel. */
|
|
165
|
+
/* A chip's child count CHANGES with its state — a part with no description is
|
|
166
|
+
one row shorter — so it is a FLEX COLUMN and never declares its rows. A card
|
|
167
|
+
whose child count changes with its state must not have a row template; that
|
|
168
|
+
is what put a 250px ellipse on the Extra panel. */
|
|
149
169
|
.hk-chip {
|
|
150
170
|
display: flex;
|
|
151
171
|
flex-direction: column;
|
|
152
|
-
gap:
|
|
153
|
-
padding:
|
|
172
|
+
gap: 5px;
|
|
173
|
+
padding: 9px 10px;
|
|
154
174
|
border: 1px solid var(--line);
|
|
155
|
-
border-radius:
|
|
175
|
+
border-radius: 9px;
|
|
156
176
|
background: var(--bg-raised);
|
|
157
|
-
min-width:
|
|
177
|
+
min-width: 150px;
|
|
178
|
+
max-width: 280px;
|
|
179
|
+
cursor: grab;
|
|
180
|
+
/* The drop marker is drawn on this edge, so the space for it is reserved
|
|
181
|
+
always — a border that appears on hover would shift every chip to its
|
|
182
|
+
right by two pixels at the moment of the drop decision. */
|
|
183
|
+
box-shadow: inset 0 0 0 0 var(--accent);
|
|
158
184
|
}
|
|
159
185
|
.hk-chip:focus-visible {
|
|
160
186
|
outline: 2px solid var(--accent);
|
|
161
187
|
outline-offset: 2px;
|
|
162
188
|
}
|
|
163
|
-
.hk-chip
|
|
189
|
+
.hk-chip:active {
|
|
190
|
+
cursor: grabbing;
|
|
191
|
+
}
|
|
192
|
+
.hk-chip-dragging {
|
|
193
|
+
opacity: 0.4;
|
|
194
|
+
border-style: dashed;
|
|
195
|
+
}
|
|
196
|
+
/* WHERE IT WILL LAND, on the edge it will land on. A gap that opens up would
|
|
197
|
+
move every other chip while the pointer is deciding. */
|
|
198
|
+
.hk-drop-before {
|
|
199
|
+
box-shadow: inset 3px 0 0 0 var(--accent);
|
|
200
|
+
}
|
|
201
|
+
.hk-drop-after {
|
|
202
|
+
box-shadow: inset -3px 0 0 0 var(--accent);
|
|
203
|
+
}
|
|
204
|
+
/* Staged, not written. The dashed accent edge is the same language the edit bar
|
|
205
|
+
uses at the bottom of the page. */
|
|
206
|
+
.hk-chip-new {
|
|
164
207
|
border-color: var(--accent);
|
|
165
|
-
|
|
208
|
+
border-style: dashed;
|
|
166
209
|
}
|
|
167
210
|
.hk-chip-face {
|
|
168
|
-
min-height: 24px;
|
|
169
|
-
}
|
|
170
|
-
.hk-chip-foot {
|
|
171
211
|
display: flex;
|
|
172
|
-
justify-content: space-between;
|
|
173
212
|
align-items: center;
|
|
174
213
|
gap: 6px;
|
|
214
|
+
min-height: 24px;
|
|
215
|
+
}
|
|
216
|
+
.hk-grip {
|
|
217
|
+
color: var(--fg-dim);
|
|
218
|
+
font-size: 14px;
|
|
219
|
+
line-height: 1;
|
|
220
|
+
cursor: grab;
|
|
221
|
+
user-select: none;
|
|
175
222
|
}
|
|
176
223
|
.hk-chip-id {
|
|
177
224
|
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
178
225
|
font-size: 11px;
|
|
179
226
|
color: var(--fg-dim);
|
|
180
227
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
228
|
+
/* "What is this thing" is the first question anybody asks of a bar full of
|
|
229
|
+
symbols, and until v1.4.1 the answer lived only in a tooltip. */
|
|
230
|
+
.hk-chip-desc {
|
|
231
|
+
font-size: 11px;
|
|
232
|
+
line-height: 1.45;
|
|
184
233
|
color: var(--fg-dim);
|
|
185
|
-
cursor: pointer;
|
|
186
|
-
font-size: 14px;
|
|
187
|
-
line-height: 1;
|
|
188
|
-
padding: 2px 4px;
|
|
189
|
-
border-radius: 4px;
|
|
190
234
|
}
|
|
191
|
-
.hk-
|
|
192
|
-
background: var(--bg-sunken);
|
|
193
|
-
color: var(--fg);
|
|
194
|
-
}
|
|
195
|
-
.hk-move {
|
|
235
|
+
.hk-chip-acts {
|
|
196
236
|
display: flex;
|
|
197
237
|
gap: 4px;
|
|
198
238
|
flex-wrap: wrap;
|
|
239
|
+
margin-top: 2px;
|
|
240
|
+
}
|
|
241
|
+
.hk-act {
|
|
242
|
+
font-size: 11px;
|
|
243
|
+
padding: 3px 8px;
|
|
244
|
+
border: 1px solid var(--line);
|
|
245
|
+
border-radius: 5px;
|
|
246
|
+
background: var(--bg-sunken);
|
|
247
|
+
color: var(--fg-dim);
|
|
248
|
+
cursor: pointer;
|
|
249
|
+
}
|
|
250
|
+
.hk-act:hover {
|
|
251
|
+
border-color: var(--accent);
|
|
252
|
+
color: var(--fg);
|
|
253
|
+
}
|
|
254
|
+
.hk-act-remove:hover {
|
|
255
|
+
border-color: var(--bad);
|
|
256
|
+
color: var(--bad);
|
|
199
257
|
}
|
|
258
|
+
|
|
200
259
|
.hk-add {
|
|
201
260
|
border: 1px dashed var(--line);
|
|
202
261
|
background: none;
|
|
203
262
|
color: var(--fg-dim);
|
|
204
|
-
border-radius:
|
|
205
|
-
padding:
|
|
263
|
+
border-radius: 9px;
|
|
264
|
+
padding: 10px 18px;
|
|
206
265
|
cursor: pointer;
|
|
207
266
|
font-size: 12px;
|
|
267
|
+
min-width: 150px;
|
|
208
268
|
}
|
|
209
|
-
.hk-add:hover {
|
|
269
|
+
.hk-add:hover:not(:disabled) {
|
|
210
270
|
border-color: var(--accent);
|
|
211
271
|
color: var(--fg);
|
|
212
272
|
}
|
|
273
|
+
.hk-add:disabled {
|
|
274
|
+
cursor: not-allowed;
|
|
275
|
+
opacity: 0.5;
|
|
276
|
+
}
|
|
213
277
|
|
|
214
278
|
.hk-line-opts {
|
|
215
279
|
display: flex;
|
|
216
280
|
align-items: center;
|
|
217
281
|
gap: 8px;
|
|
218
|
-
margin-top: 6px;
|
|
219
282
|
}
|
|
220
|
-
.hk-
|
|
283
|
+
.hk-select,
|
|
221
284
|
.hk-input {
|
|
222
285
|
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
223
286
|
font-size: 12px;
|
|
@@ -226,34 +289,132 @@
|
|
|
226
289
|
border-radius: 6px;
|
|
227
290
|
background: var(--bg-sunken);
|
|
228
291
|
color: var(--fg);
|
|
229
|
-
max-width:
|
|
292
|
+
max-width: 260px;
|
|
230
293
|
}
|
|
231
294
|
|
|
232
|
-
/* ── the
|
|
233
|
-
.hk-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
295
|
+
/* ── the part picker ───────────────────────────────────────────────────── */
|
|
296
|
+
.hk-picker {
|
|
297
|
+
display: flex;
|
|
298
|
+
flex-direction: column;
|
|
299
|
+
gap: 10px;
|
|
300
|
+
min-width: min(560px, 76vw);
|
|
301
|
+
}
|
|
302
|
+
.hk-picker-search {
|
|
303
|
+
display: flex;
|
|
304
|
+
align-items: center;
|
|
305
|
+
gap: 10px;
|
|
306
|
+
}
|
|
307
|
+
.hk-picker-input {
|
|
308
|
+
flex: 1 1 auto;
|
|
309
|
+
max-width: none;
|
|
310
|
+
}
|
|
311
|
+
.hk-picker-list {
|
|
312
|
+
display: flex;
|
|
313
|
+
flex-direction: column;
|
|
314
|
+
gap: 6px;
|
|
315
|
+
max-height: 46vh;
|
|
316
|
+
overflow-y: auto;
|
|
317
|
+
scrollbar-width: thin;
|
|
318
|
+
scrollbar-color: var(--line) transparent;
|
|
319
|
+
}
|
|
320
|
+
.hk-picker-list::-webkit-scrollbar {
|
|
321
|
+
width: 8px;
|
|
322
|
+
}
|
|
323
|
+
.hk-picker-list::-webkit-scrollbar-track {
|
|
324
|
+
background: transparent;
|
|
325
|
+
}
|
|
326
|
+
.hk-picker-list::-webkit-scrollbar-thumb {
|
|
327
|
+
background: var(--line);
|
|
328
|
+
border-radius: 4px;
|
|
329
|
+
}
|
|
330
|
+
/* One click, one part. A refused row is drawn as a plain div and gets NO button
|
|
331
|
+
at all — never a disabled one: "we decided against this" and "we forgot" must
|
|
332
|
+
not look the same. */
|
|
333
|
+
.hk-pick-row {
|
|
334
|
+
display: flex;
|
|
335
|
+
flex-direction: column;
|
|
336
|
+
align-items: stretch;
|
|
337
|
+
gap: 4px;
|
|
338
|
+
width: 100%;
|
|
339
|
+
padding: 9px 11px;
|
|
340
|
+
border: 1px solid var(--line);
|
|
341
|
+
border-radius: 8px;
|
|
342
|
+
background: var(--bg-raised);
|
|
343
|
+
text-align: left;
|
|
344
|
+
cursor: pointer;
|
|
345
|
+
color: inherit;
|
|
346
|
+
}
|
|
347
|
+
button.hk-pick-row:hover {
|
|
348
|
+
border-color: var(--accent);
|
|
349
|
+
background: var(--bg-sunken);
|
|
350
|
+
}
|
|
351
|
+
.hk-pick-row-off {
|
|
352
|
+
cursor: default;
|
|
353
|
+
opacity: 0.7;
|
|
354
|
+
background: none;
|
|
355
|
+
}
|
|
356
|
+
.hk-pick-top {
|
|
357
|
+
display: flex;
|
|
358
|
+
align-items: center;
|
|
238
359
|
gap: 8px;
|
|
360
|
+
flex-wrap: wrap;
|
|
239
361
|
}
|
|
240
|
-
.hk-
|
|
241
|
-
font-
|
|
242
|
-
|
|
243
|
-
|
|
362
|
+
.hk-pick-desc {
|
|
363
|
+
font-size: 12px;
|
|
364
|
+
line-height: 1.5;
|
|
365
|
+
color: var(--fg-dim);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* ── move ──────────────────────────────────────────────────────────────── */
|
|
369
|
+
.hk-move-line {
|
|
370
|
+
display: flex;
|
|
371
|
+
flex-direction: column;
|
|
372
|
+
gap: 6px;
|
|
373
|
+
padding: 9px 0;
|
|
374
|
+
border-bottom: 1px solid var(--line);
|
|
375
|
+
}
|
|
376
|
+
.hk-move-slots {
|
|
377
|
+
display: flex;
|
|
378
|
+
gap: 6px;
|
|
379
|
+
flex-wrap: wrap;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/* ── the part editor ───────────────────────────────────────────────────── */
|
|
383
|
+
.hk-editor {
|
|
384
|
+
display: flex;
|
|
385
|
+
flex-direction: column;
|
|
386
|
+
gap: 9px;
|
|
387
|
+
min-width: min(620px, 78vw);
|
|
388
|
+
}
|
|
389
|
+
.hk-editor-live {
|
|
390
|
+
position: sticky;
|
|
391
|
+
top: 0;
|
|
392
|
+
z-index: 1;
|
|
393
|
+
background: var(--bg-raised);
|
|
394
|
+
padding-bottom: 4px;
|
|
395
|
+
}
|
|
396
|
+
/* The editor is a flex COLUMN that stretches its children, which turned a small
|
|
397
|
+
secondary button into a full-width box that read as a text field. */
|
|
398
|
+
.hk-swap {
|
|
399
|
+
align-self: flex-start;
|
|
400
|
+
}
|
|
401
|
+
.hk-section-wrap {
|
|
402
|
+
display: flex;
|
|
403
|
+
flex-direction: column;
|
|
404
|
+
gap: 3px;
|
|
405
|
+
margin-top: 10px;
|
|
244
406
|
}
|
|
245
407
|
.hk-section {
|
|
246
408
|
font-size: 11px;
|
|
247
409
|
text-transform: uppercase;
|
|
248
410
|
letter-spacing: 0.06em;
|
|
249
411
|
color: var(--fg-dim);
|
|
250
|
-
margin-top: 8px;
|
|
251
412
|
border-bottom: 1px solid var(--line);
|
|
252
413
|
padding-bottom: 3px;
|
|
253
414
|
}
|
|
254
415
|
/* THE SHAPE PICKER IS A GALLERY, NOT A DROPDOWN: every option drawn with this
|
|
255
|
-
component's real value. A dropdown containing
|
|
256
|
-
|
|
416
|
+
component's real value. A dropdown containing a renderer's name tells nobody
|
|
417
|
+
anything. */
|
|
257
418
|
.hk-gallery {
|
|
258
419
|
display: grid;
|
|
259
420
|
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
|
@@ -271,6 +432,9 @@
|
|
|
271
432
|
cursor: pointer;
|
|
272
433
|
text-align: left;
|
|
273
434
|
}
|
|
435
|
+
.hk-sample:hover {
|
|
436
|
+
border-color: var(--accent);
|
|
437
|
+
}
|
|
274
438
|
.hk-sample-on {
|
|
275
439
|
border-color: var(--accent);
|
|
276
440
|
background: var(--bg-raised);
|
|
@@ -281,15 +445,24 @@
|
|
|
281
445
|
color: var(--fg-dim);
|
|
282
446
|
}
|
|
283
447
|
|
|
448
|
+
/* A control, its name, and the sentence that says what it does. The sentence is
|
|
449
|
+
why this is a two-line left column rather than a label. */
|
|
284
450
|
.hk-field {
|
|
285
451
|
display: grid;
|
|
286
|
-
grid-template-columns:
|
|
287
|
-
gap:
|
|
288
|
-
align-items:
|
|
452
|
+
grid-template-columns: 190px 1fr;
|
|
453
|
+
gap: 12px;
|
|
454
|
+
align-items: start;
|
|
455
|
+
padding: 5px 0;
|
|
456
|
+
}
|
|
457
|
+
.hk-field-left {
|
|
458
|
+
display: flex;
|
|
459
|
+
flex-direction: column;
|
|
460
|
+
gap: 2px;
|
|
289
461
|
}
|
|
290
462
|
.hk-field-name {
|
|
291
463
|
font-size: 12px;
|
|
292
|
-
|
|
464
|
+
font-weight: 600;
|
|
465
|
+
color: var(--fg);
|
|
293
466
|
}
|
|
294
467
|
.hk-picks {
|
|
295
468
|
display: flex;
|
|
@@ -306,6 +479,9 @@
|
|
|
306
479
|
color: var(--fg-dim);
|
|
307
480
|
cursor: pointer;
|
|
308
481
|
}
|
|
482
|
+
.hk-pick:hover {
|
|
483
|
+
border-color: var(--accent);
|
|
484
|
+
}
|
|
309
485
|
.hk-pick-on {
|
|
310
486
|
border-color: var(--accent);
|
|
311
487
|
color: var(--fg);
|
|
@@ -323,30 +499,33 @@
|
|
|
323
499
|
font-size: 12px;
|
|
324
500
|
}
|
|
325
501
|
|
|
326
|
-
/* ── the
|
|
502
|
+
/* ── the reference list ────────────────────────────────────────────────── */
|
|
327
503
|
.hk-palette-search {
|
|
328
|
-
font-size: 12px;
|
|
329
|
-
padding: 4px 10px;
|
|
330
|
-
border: 1px solid var(--line);
|
|
331
|
-
border-radius: 6px;
|
|
332
|
-
background: var(--bg-sunken);
|
|
333
|
-
color: var(--fg);
|
|
334
504
|
min-width: 180px;
|
|
335
505
|
}
|
|
336
|
-
/* A row's child count changes with its state — a refused row carries a reason
|
|
337
|
-
|
|
506
|
+
/* A row's child count changes with its state — a refused row carries a reason —
|
|
507
|
+
so it is a flex column, not a grid with declared columns. */
|
|
338
508
|
.hk-prow {
|
|
339
509
|
display: flex;
|
|
340
|
-
flex-
|
|
510
|
+
flex-direction: column;
|
|
511
|
+
gap: 4px;
|
|
512
|
+
padding: 9px 0;
|
|
513
|
+
border-bottom: 1px solid var(--line);
|
|
514
|
+
}
|
|
515
|
+
.hk-prow-head {
|
|
516
|
+
display: flex;
|
|
341
517
|
align-items: center;
|
|
342
518
|
gap: 10px;
|
|
343
|
-
|
|
344
|
-
border-bottom: 1px solid var(--line);
|
|
519
|
+
flex-wrap: wrap;
|
|
345
520
|
}
|
|
346
521
|
.hk-prow-id {
|
|
347
522
|
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
348
523
|
font-size: 12px;
|
|
349
|
-
|
|
524
|
+
}
|
|
525
|
+
.hk-prow-desc {
|
|
526
|
+
font-size: 12px;
|
|
527
|
+
line-height: 1.5;
|
|
528
|
+
color: var(--fg-dim);
|
|
350
529
|
}
|
|
351
530
|
.hk-prow-why {
|
|
352
531
|
flex-basis: 100%;
|
|
@@ -365,6 +544,43 @@
|
|
|
365
544
|
align-items: center;
|
|
366
545
|
}
|
|
367
546
|
|
|
547
|
+
/* ── the colour set picker ─────────────────────────────────────────────── */
|
|
548
|
+
/* Each option carries the CLI's own sentence about what it is FOR, so it is a
|
|
549
|
+
card and not a word in a row of words. */
|
|
550
|
+
.hk-theme-list {
|
|
551
|
+
display: flex;
|
|
552
|
+
flex-wrap: wrap;
|
|
553
|
+
gap: 8px;
|
|
554
|
+
}
|
|
555
|
+
.hk-theme {
|
|
556
|
+
display: flex;
|
|
557
|
+
flex-direction: column;
|
|
558
|
+
align-items: flex-start;
|
|
559
|
+
gap: 3px;
|
|
560
|
+
flex: 1 1 220px;
|
|
561
|
+
max-width: 320px;
|
|
562
|
+
padding: 8px 10px;
|
|
563
|
+
border: 1px solid var(--line);
|
|
564
|
+
border-radius: 8px;
|
|
565
|
+
background: var(--bg-sunken);
|
|
566
|
+
cursor: pointer;
|
|
567
|
+
text-align: left;
|
|
568
|
+
color: inherit;
|
|
569
|
+
}
|
|
570
|
+
.hk-theme:hover {
|
|
571
|
+
border-color: var(--accent);
|
|
572
|
+
}
|
|
573
|
+
.hk-theme-on {
|
|
574
|
+
border-color: var(--accent);
|
|
575
|
+
background: var(--bg-raised);
|
|
576
|
+
}
|
|
577
|
+
.hk-theme-name {
|
|
578
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
579
|
+
font-size: 12px;
|
|
580
|
+
font-weight: 600;
|
|
581
|
+
color: var(--fg);
|
|
582
|
+
}
|
|
583
|
+
|
|
368
584
|
/* A number field is a NUMBER field: wide enough for three digits and its
|
|
369
585
|
spinner, and no wider. A 200px box for a value between 0 and 8 reads as a
|
|
370
586
|
free-text field somebody has to think about. */
|