@bongos/core 1.24.46 → 1.24.48

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.
@@ -201,16 +201,8 @@
201
201
  capitals — .btn-ghost lowercases its label, and this one is a named action the
202
202
  owner wrote, so it does not borrow that class. */
203
203
  .cb-ask { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 7px 0 0; }
204
- .cb-ask__door {
205
- font: inherit;
206
- font-size: 12.5px;
207
- color: var(--accent-ink);
208
- background: none;
209
- border: 0;
210
- padding: 0;
211
- cursor: pointer;
212
- }
213
- .cb-ask__door:hover { text-decoration: underline; }
204
+ /* .cb-ask__door is the shared text button (controls.css, task 1005084): it
205
+ measured 19px tall as a bare text control, under the 24px floor. */
214
206
  .cb-ask__copy {
215
207
  font: inherit;
216
208
  font-size: 12px;
@@ -290,22 +282,11 @@
290
282
  condensed to three rows precisely so the page stays readable. */
291
283
  .cb-reply-form { margin: 9px 0 0; max-width: var(--measure); }
292
284
  .cb-reply-input {
285
+ /* the shared textarea (controls.css, task 1005084); the form only sizes it */
293
286
  width: 100%;
294
- font: inherit;
295
- font-size: 13px;
296
287
  line-height: 1.55;
297
- color: var(--ink);
298
- background: var(--glass);
299
- border: 1px solid var(--rule);
300
- border-radius: var(--radius-sm);
301
- padding: 9px 11px;
302
288
  resize: vertical;
303
289
  }
304
- /* NO `outline: none` HERE. The shell already draws the hall's one focus ring on
305
- :focus-visible, and dropping it to style a field is exactly what the hall's
306
- own audit refuses — it caught this line. The border tint is an ADDITION to
307
- that ring, not a replacement for it. */
308
- .cb-reply-input:focus { border-color: var(--accent-ink); }
309
290
  .cb-reply-actions { display: flex; gap: 8px; margin: 7px 0 0; }
310
291
 
311
292
  /* ---- the archive (task 1004224) -------------------------------------------
@@ -0,0 +1,223 @@
1
+ /* modules/hall-ui/public/controls.css — THE HALL'S ONE BUTTON AND ONE FIELD
2
+ (task 1005084, goal 1000138 "One Cloud Bongos design system").
3
+
4
+ The UI audit counted eight main-button heights (24 / 26 / 30 / 34 / 36 / 38 /
5
+ 40 / 46px) and five field styles in the hall. This sheet is the one of each
6
+ that replaces them. style.css @imports it right after the shared token sheet,
7
+ so a page sheet can still place a button (margin, align-self, width) but no
8
+ longer re-draws one.
9
+
10
+ THE BUTTON — `.btn` and three modifiers:
11
+ .btn primary: the accent fill with --accent-on, the DARK ink.
12
+ White on the salmon fails AA and DESIGN.md bans it.
13
+ 46px, a full pill: DESIGN.md's door height.
14
+ .btn--ghost the quiet sibling: no fill, one hairline, soft ink.
15
+ .btn--sm the row size, for a button that repeats down a list or
16
+ sits in a table: 30px, still over the 24px floor.
17
+ .btn--text a button that reads as a link: no fill, no edge, the
18
+ accent ink, underlined on hover; 24px so it keeps the floor.
19
+ Two sizes, not eight. A page picks the size by where the button lives: once
20
+ on the page → the default; once per row → --sm.
21
+
22
+ THE NAMES PAGES ALREADY WRITE. Markup across ~40 scripts and a dozen tests
23
+ spells the older vocabularies (.btn-accent, .btn-ghost, .td-btn, .pbtn …).
24
+ Renaming them would move nothing on screen, so each joins the shared rule it
25
+ always meant instead, by size and by fill:
26
+ primary .btn-accent .landing__btn .task__claim .td-btn--primary
27
+ .setup-gate__save .pbtn--save .craft-save
28
+ ghost .btn--quiet .btn-ghost .landing__btn--quiet .td-btn .wip__release
29
+ .pbtn .settings-btn .sessions-row__end .event-sound-preview
30
+ small .btn-ghost .task__claim .td-btn .wip__release
31
+ text .cb-ask__door
32
+ A new page writes `.btn` and its modifiers, never a new name.
33
+
34
+ THE FIELD — one text input / select / textarea, `.input` for a field the
35
+ element selectors do not reach. 40px, a pill (a textarea takes the tile
36
+ corner), an edge that clears 3:1 against the card in both modes so the
37
+ field is findable (WCAG 1.4.11), the ink edge on focus inside DESIGN.md's
38
+ two-tone ring.
39
+
40
+ Every colour here is a token or a color-mix of tokens; both terms of every
41
+ mix flip with the mode, so nothing here needs a dark twin.
42
+ tests/hall_controls.mjs measures the pairs in both modes. */
43
+
44
+ /* ---------- the button ---------- */
45
+ .btn, .btn-accent, .btn-ghost, .btn--text,
46
+ .landing__btn, .task__claim, .td-btn, .wip__release, .setup-gate__save,
47
+ .pbtn, .settings-btn, .sessions-row__end, .event-sound-preview, button.craft-save,
48
+ .cb-ask__door {
49
+ display: inline-flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ gap: var(--ds-space-hair);
53
+ box-sizing: border-box;
54
+ min-height: 46px;
55
+ min-width: 46px;
56
+ padding: 0 var(--ds-space-md);
57
+ font-family: var(--font-body);
58
+ font-size: var(--ds-text-lg);
59
+ font-weight: 500;
60
+ line-height: 1.2;
61
+ text-transform: lowercase;
62
+ text-decoration: none;
63
+ white-space: nowrap;
64
+ /* transparent rather than absent: a modifier that sets only a border COLOUR
65
+ (collab.css's .btn--quiet) cannot paint an edge that was never reserved. */
66
+ border: var(--line) solid transparent;
67
+ border-radius: var(--radius-pill);
68
+ cursor: pointer;
69
+ transition: background-color var(--ds-dur-fast) var(--ds-ease),
70
+ border-color var(--ds-dur-fast) var(--ds-ease),
71
+ color var(--ds-dur-fast) var(--ds-ease);
72
+ }
73
+
74
+ /* primary — the accent door */
75
+ .btn, .btn-accent, .landing__btn, .task__claim, .setup-gate__save {
76
+ color: var(--accent-on);
77
+ background: var(--accent);
78
+ }
79
+
80
+ .btn:hover:not(:disabled), .btn-accent:hover:not(:disabled), .landing__btn:hover,
81
+ .task__claim:hover:not(:disabled), .setup-gate__save:hover:not(:disabled) {
82
+ color: var(--accent-on);
83
+ background: var(--accent-lift);
84
+ text-decoration: none;
85
+ }
86
+ .btn:disabled, .btn-accent:disabled, .task__claim:disabled, .setup-gate__save:disabled {
87
+ color: var(--ink-faint);
88
+ background: var(--glass);
89
+ border-color: transparent;
90
+ cursor: default;
91
+ }
92
+
93
+ /* ghost — after primary, so `.btn btn--ghost` takes it. Each state is written
94
+ in the same three layers (primary, ghost, primary-on-a-ghost-base) and with
95
+ no :not() in the selector, so a page's own modifier at one class
96
+ (record.css's .td-btn--danger) still wins on source order. */
97
+ .btn--ghost, .btn--quiet, .btn-ghost, .landing__btn--quiet, .td-btn, .wip__release,
98
+ .pbtn, .settings-btn, .sessions-row__end, .event-sound-preview {
99
+ color: var(--ink-soft);
100
+ background: transparent;
101
+ border-color: var(--rule);
102
+ }
103
+ .btn--ghost:hover:not(:disabled), .btn--quiet:hover:not(:disabled), .btn-ghost:hover:not(:disabled),
104
+ .landing__btn--quiet:hover, .td-btn:hover:not(:disabled), .wip__release:hover:not(:disabled),
105
+ .pbtn:hover:not(:disabled), .settings-btn:hover:not(:disabled),
106
+ .sessions-row__end:hover:not(:disabled), .event-sound-preview:hover:not(:disabled) {
107
+ color: var(--ink);
108
+ background: transparent;
109
+ border-color: var(--ink-faint);
110
+ text-decoration: none;
111
+ }
112
+ .btn--ghost:disabled, .btn--quiet:disabled, .btn-ghost:disabled, .td-btn:disabled,
113
+ .wip__release:disabled, .pbtn:disabled, .settings-btn:disabled, .sessions-row__end:disabled,
114
+ .pbtn[aria-disabled="true"], .settings-btn[aria-disabled="true"] {
115
+ color: var(--ink-faint);
116
+ background: transparent;
117
+ border-color: var(--rule-soft);
118
+ cursor: default;
119
+ }
120
+
121
+ /* primary on a ghost base — after ghost, so `.td-btn td-btn--primary` takes it */
122
+ .td-btn--primary, .pbtn--save, .craft-save {
123
+ color: var(--accent-on);
124
+ background: var(--accent);
125
+ border-color: transparent;
126
+ }
127
+ .td-btn--primary:hover:not(:disabled), .pbtn--save:hover:not(:disabled),
128
+ .craft-save:hover:not(:disabled) {
129
+ color: var(--accent-on);
130
+ background: var(--accent-lift);
131
+ border-color: transparent;
132
+ }
133
+ .td-btn--primary:disabled, .pbtn--save:disabled, .craft-save:disabled {
134
+ color: var(--ink-faint);
135
+ background: var(--glass);
136
+ border-color: transparent;
137
+ }
138
+
139
+ /* small — the row size */
140
+ .btn--sm, .btn-ghost, .task__claim, .td-btn, .wip__release {
141
+ min-height: 30px;
142
+ min-width: 30px;
143
+ padding: 0 var(--ds-space-sm);
144
+ font-size: var(--ds-text-sm);
145
+ }
146
+
147
+ /* text — a button that reads as a link: the sentence's own size and case, the
148
+ accent ink, underlined on hover; 24px so it keeps the floor in a line that
149
+ has no rhythm of its own. collab's "Reply" door is one. */
150
+ .btn--text, .cb-ask__door {
151
+ min-height: 24px;
152
+ min-width: 24px;
153
+ padding: 0 2px;
154
+ font-size: inherit;
155
+ font-weight: inherit;
156
+ text-transform: none;
157
+ color: var(--accent-ink);
158
+ background: transparent;
159
+ border-color: transparent;
160
+ }
161
+ .btn--text:hover:not(:disabled), .cb-ask__door:hover:not(:disabled) {
162
+ color: var(--accent-ink);
163
+ background: transparent;
164
+ text-decoration: underline;
165
+ text-underline-offset: 3px;
166
+ }
167
+ .btn--text:disabled { color: var(--ink-faint); background: transparent; }
168
+
169
+ /* Focus keeps the pill. The shell's two-tone ring (style.css :focus-visible)
170
+ sets the tile corner for the general case; a pill under it would square off. */
171
+ .btn:focus-visible, .btn-accent:focus-visible, .btn-ghost:focus-visible,
172
+ .landing__btn:focus-visible, .task__claim:focus-visible, .td-btn:focus-visible,
173
+ .wip__release:focus-visible, .setup-gate__save:focus-visible, .pbtn:focus-visible,
174
+ .settings-btn:focus-visible, .sessions-row__end:focus-visible,
175
+ .event-sound-preview:focus-visible, button.craft-save:focus-visible {
176
+ border-radius: var(--radius-pill);
177
+ }
178
+
179
+ /* ---------- the field ----------
180
+ The four element selectors the hall always styled keep their weight (0,1,1),
181
+ so nothing that leaned on them moves in the cascade. The other text types
182
+ join inside :where(), as a floor a page's own class can still sit on. */
183
+ select, input[type="text"], input[type="search"], textarea,
184
+ :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]),
185
+ .input {
186
+ box-sizing: border-box;
187
+ min-height: 40px;
188
+ padding: 0 var(--ds-space-sm);
189
+ font-family: var(--font-body);
190
+ font-size: var(--ds-text-md);
191
+ line-height: 1.4;
192
+ color: var(--ink);
193
+ background: transparent;
194
+ /* the edge clears 3:1 on both grounds in both modes; --rule (1.6:1) did not */
195
+ border: var(--line) solid color-mix(in srgb, var(--ink) 60%, var(--bg-card));
196
+ border-radius: var(--radius-pill);
197
+ transition: border-color var(--ds-dur-fast) var(--ds-ease);
198
+ }
199
+ textarea {
200
+ padding: var(--ds-space-xs) var(--ds-space-sm);
201
+ border-radius: var(--radius-sm);
202
+ }
203
+ select:hover, input[type="text"]:hover, input[type="search"]:hover, textarea:hover,
204
+ :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]):hover,
205
+ .input:hover {
206
+ border-color: var(--ink-faint);
207
+ }
208
+ /* Focus: the ink edge inside the shell's two-tone ring, keeping the field's
209
+ own corner (the ring's rule sets the tile corner for the general case). */
210
+ select:focus-visible, input[type="text"]:focus-visible, input[type="search"]:focus-visible,
211
+ :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]):focus-visible,
212
+ .input:focus-visible {
213
+ border-color: var(--ink);
214
+ border-radius: var(--radius-pill);
215
+ }
216
+ textarea:focus-visible { border-color: var(--ink); border-radius: var(--radius-sm); }
217
+ select:disabled, input[type="text"]:disabled, input[type="search"]:disabled, textarea:disabled,
218
+ :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]):disabled,
219
+ .input:disabled {
220
+ opacity: .55;
221
+ cursor: not-allowed;
222
+ }
223
+ select option { background: var(--bg-card); color: var(--ink); }
@@ -92,25 +92,9 @@
92
92
  .goal-conflicts-card--live .count-pill { background: var(--warn-weak); color: var(--warn); }
93
93
  #goal-conflicts-view-card.goal-conflicts-card--live { background: var(--bg-card); border-color: color-mix(in srgb, var(--warn) 42%, transparent); }
94
94
 
95
- /* task 1828 — inline Claim on a ready To-do row + the conflicts "view all". */
96
- .goal-claim-btn {
97
- display: inline-flex; align-items: center; justify-content: center;
98
- height: 24px; padding: 0 12px; border-radius: var(--radius-sm);
99
- border: var(--line) solid var(--accent); background: var(--accent); color: var(--accent-on);
100
- font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap;
101
- }
102
- .goal-claim-btn:hover:not(:disabled) { background: var(--accent-lift); }
103
- .goal-claim-btn:disabled { opacity: 0.55; cursor: default; }
104
- /* task 1828 — Release on the viewer's OWN active claim (ghost, not accent —
105
- it's the undo of a claim); a muted label for another builder's claim. */
106
- .goal-release-btn {
107
- display: inline-flex; align-items: center; justify-content: center;
108
- height: 24px; padding: 0 12px; border-radius: var(--radius-sm);
109
- border: var(--line) solid var(--rule); background: var(--bg-card); color: var(--ink-soft);
110
- font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap;
111
- }
112
- .goal-release-btn:hover:not(:disabled) { background: var(--glass); color: var(--ink); }
113
- .goal-release-btn:disabled { opacity: 0.55; cursor: default; }
95
+ /* The To-do row's Claim and Release are the shared .task__claim / .wip__release
96
+ (controls.css, task 1005084); the old .goal-claim-btn / .goal-release-btn had
97
+ no markup left. */
114
98
  .ledger__claimed { font-size: 12px; color: var(--ink-faint); white-space: nowrap; }
115
99
  .ledger__action { text-align: right; white-space: nowrap; }
116
100
  /* task 1828 — shared "View all N →" foot under a capped band column. */
@@ -211,10 +195,7 @@
211
195
  .uat-form { display: flex; flex-direction: column; gap: 8px; }
212
196
  .uat-field { display: flex; flex-direction: column; gap: 4px; }
213
197
  .uat-field input[type="file"] { min-height: 24px; font: inherit; font-size: 12px; }
214
- .uat-field textarea {
215
- font: inherit; font-size: 12.5px; padding: 6px 8px; border-radius: var(--radius);
216
- border: var(--line) solid var(--rule); background: var(--bg-card); color: var(--ink); resize: vertical;
217
- }
198
+ .uat-field textarea { resize: vertical; } /* the shared field (controls.css) */
218
199
  .uat-check-input { display: inline-flex; align-items: center; gap: 8px; min-height: 24px; cursor: pointer; }
219
200
  .uat-check-input input { width: 16px; height: 16px; margin: 0; }
220
201
  .uat-hint { margin: 0; }
@@ -260,32 +260,10 @@ html[data-theme="dark"] body[data-page="my-agents"] {
260
260
  .ma-know .prow__hint { margin: 4px 0 0; max-width: var(--measure); font-size: 13px; line-height: 1.5; color: var(--ink-soft); }
261
261
  .ma-know .prow__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
262
262
  .ma-know .speciality-create__h { margin: 4px 0 0; font-size: 14px; font-weight: 500; color: var(--ink); }
263
- .ma-know .btn,
264
- .ma-know .pbtn {
265
- display: inline-flex;
266
- align-items: center;
267
- justify-content: center;
268
- min-height: 30px;
269
- min-width: 30px;
270
- padding: 0 14px;
271
- border: var(--line) solid var(--rule);
272
- border-radius: var(--radius-pill);
273
- background: none;
274
- color: var(--ink-soft);
275
- font: inherit;
276
- font-size: 13px;
277
- font-weight: 400;
278
- text-transform: lowercase;
279
- white-space: nowrap;
280
- cursor: pointer;
281
- }
282
- .ma-know .btn:hover:not(:disabled),
283
- .ma-know .pbtn:hover:not(:disabled) { background: none; color: var(--ink); border-color: var(--ink-faint); }
284
- .ma-know .btn:disabled,
285
- .ma-know .pbtn:disabled { background: none; color: var(--ink-faint); border-color: var(--rule-soft); cursor: default; }
263
+ /* the row's buttons are the shared ghost at the row size (controls.css, task
264
+ 1005084): speciality-tools.js writes btn--sm on them */
286
265
  /* the walkthrough's answer you gave, and its one commit, read as a chosen chip */
287
- .ma-know .pbtn[aria-pressed="true"],
288
- .ma-know .pbtn--save:not(:disabled) { background: var(--glass-strong); color: var(--ink); border-color: var(--ink-soft); }
266
+ .ma-know .pbtn[aria-pressed="true"] { background: var(--glass-strong); color: var(--ink); border-color: var(--ink-soft); }
289
267
  /* the 24px floor, drawn in ink: the create form's "for sale" box and the skill picker */
290
268
  .ma-know input[type="checkbox"] { width: 24px; height: 24px; margin: 0; flex: none; accent-color: var(--ink); cursor: pointer; }
291
269
  .ma-know .speciality-field > span { color: var(--ink-soft); }
@@ -249,23 +249,9 @@ a.fact-chip:hover { color: var(--accent-ink); border-color: var(--accent-ink); t
249
249
  text-transform: var(--label-case);
250
250
  color: var(--ink-faint);
251
251
  }
252
- /* The shell styles text and search inputs; a number input (the builder id) would
253
- otherwise render at the browser's 21px and fail the 24px floor, so the field
254
- restates the shell's hairline pill for every control it holds. */
255
- .ov-field input, .ov-field select, .ov-field textarea {
256
- width: 100%;
257
- box-sizing: border-box;
258
- min-height: 30px;
259
- padding: 5px 12px;
260
- font-family: var(--font-body);
261
- font-size: 14px;
262
- color: var(--ink);
263
- background: none;
264
- border: var(--line) solid var(--rule);
265
- border-radius: var(--radius-pill);
266
- }
267
- .ov-field textarea { border-radius: var(--radius-sm); }
268
- .ov-field input:hover, .ov-field select:hover, .ov-field textarea:hover { border-color: var(--ink-faint); }
252
+ /* The field is the shared one (controls.css, task 1005084) — it covers the
253
+ number input (the builder id) too; the form only stretches it to the row. */
254
+ .ov-field input, .ov-field select, .ov-field textarea { width: 100%; box-sizing: border-box; }
269
255
  .ov-field input::placeholder, .ov-field textarea::placeholder { color: var(--ink-faint); }
270
256
  /* The one line under the row. A max-width here would cap the flex basis and let
271
257
  the line ride beside the button, so the line takes the full row instead. */
@@ -109,42 +109,8 @@
109
109
  .craft-actions .settings-status { margin: 0; }
110
110
 
111
111
  /* ---- the controls: every one clears 24px on both axes ------------------- */
112
- /* the family button: a glass pill, 38px, quiet by default. `--save` is the
113
- accent door — the panel's one primary act — and takes --accent-on, the dark
114
- ink for the salmon; white on it fails AA and DESIGN.md bans it. */
115
- .pbtn,
116
- .settings-btn, .sessions-row__end, .event-sound-preview {
117
- display: inline-flex;
118
- align-items: center;
119
- justify-content: center;
120
- gap: 8px;
121
- min-height: 38px;
122
- min-width: 38px;
123
- padding: 0 15px;
124
- border: var(--line) solid var(--glass-edge);
125
- border-radius: var(--radius-pill);
126
- background: var(--glass);
127
- color: var(--ink);
128
- font: inherit;
129
- font-size: 14px;
130
- line-height: 1.2;
131
- white-space: nowrap;
132
- text-decoration: none;
133
- cursor: pointer;
134
- transition: background 200ms cubic-bezier(.2,.7,.3,1), border-color 200ms cubic-bezier(.2,.7,.3,1), color 200ms cubic-bezier(.2,.7,.3,1);
135
- }
136
- .pbtn:hover:not(:disabled), .settings-btn:hover:not(:disabled), .sessions-row__end:hover:not(:disabled),
137
- .event-sound-preview:hover:not(:disabled) { background: var(--glass-strong); color: var(--ink); text-decoration: none; }
138
- .pbtn:disabled, .settings-btn:disabled, .sessions-row__end:disabled,
139
- .pbtn[aria-disabled="true"], .settings-btn[aria-disabled="true"] { color: var(--ink-faint); background: var(--glass); cursor: default; }
140
- .pbtn--quiet, .settings-btn--quiet, .sessions-row__end, .event-sound-preview { background: transparent; }
141
- .pbtn--save,
142
- .craft-save { background: var(--accent); border-color: var(--accent); color: var(--accent-on); font-weight: 500; }
143
- .pbtn--save:hover:not(:disabled), .craft-save:hover:not(:disabled) { background: var(--accent-lift); border-color: var(--accent-lift); color: var(--accent-on); }
144
- .craft-save:disabled, .pbtn--save:disabled { background: var(--glass); border-color: var(--glass-edge); color: var(--ink-faint); }
145
- /* the shell's `.craft-save` was a bordered box; it is the family's save button
146
- now, so it carries the pill's own box model too */
147
- button.craft-save { display: inline-flex; align-items: center; justify-content: center; min-height: 38px; min-width: 38px; padding: 0 15px; border-radius: var(--radius-pill); font: inherit; font-size: 14px; cursor: pointer; }
112
+ /* the family button (.pbtn / .settings-btn, ghost; --save the accent door) is
113
+ the hall's shared button, default size (controls.css, task 1005084). */
148
114
 
149
115
  /* the field: label above, input and its button on one line */
150
116
  .field-label,
@@ -160,28 +126,20 @@ button.craft-save { display: inline-flex; align-items: center; justify-content:
160
126
  .field,
161
127
  .display-name-row, .artkey-entry-row, .join { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-xs); margin-top: 0; }
162
128
  .field .field-label { flex: 1 1 100%; margin-top: 0; }
129
+ /* the input is the shared field (controls.css, task 1005084); the family only
130
+ sizes it on the row */
163
131
  .pinput,
164
132
  .display-name-input, .artkey-input, .join input, .join-note {
165
133
  flex: 1 1 260px;
166
134
  max-width: 420px;
167
- min-height: 38px;
168
- padding: 0 16px;
169
- font: inherit;
170
- font-size: 15px;
171
- color: var(--ink);
172
- background: var(--glass);
173
- border: var(--line) solid var(--glass-edge);
174
- border-radius: var(--radius-pill);
175
- transition: border-color 200ms cubic-bezier(.2,.7,.3,1);
176
135
  }
177
136
  .pinput::placeholder, .display-name-input::placeholder, .artkey-input::placeholder, .join input::placeholder, .join-note::placeholder { color: var(--ink-faint); }
178
- .pinput:hover, .display-name-input:hover, .artkey-input:hover, .join input:hover, .join-note:hover { border-color: var(--rule); }
179
137
  .pinput[aria-invalid="true"], .display-name-input[aria-invalid="true"] { border-color: var(--danger); }
180
138
  /* a secret is typed in the mono face so a pasted key reads as what it is */
181
139
  .artkey-input { font-family: var(--font-mono); font-size: 13.5px; }
140
+ /* the select is the shared field too (controls.css) */
182
141
  .psel,
183
- .event-sound-select, .voices__select { min-height: 38px; padding: 0 var(--sp-xs); font: inherit; font-size: 14px; color: var(--ink); background: var(--glass); border: var(--line) solid var(--glass-edge); border-radius: var(--radius-pill); cursor: pointer; }
184
- .psel:hover, .event-sound-select:hover, .voices__select:hover { border-color: var(--rule); }
142
+ .event-sound-select, .voices__select { cursor: pointer; }
185
143
  .prange,
186
144
  .sound-volume input[type="range"] { flex: 1 1 200px; max-width: 260px; height: 38px; margin: 0; accent-color: var(--accent); cursor: pointer; }
187
145
  .pradio { width: 24px; height: 24px; flex: none; margin: 0; accent-color: var(--accent); cursor: pointer; }
@@ -159,9 +159,9 @@
159
159
  ${guessed}
160
160
  ${was ? '<p class="prow__hint">You have this one on at the moment.</p>' : ''}
161
161
  <div class="speciality-actions skill-walk__actions">
162
- ${i > 0 ? '<button type="button" class="pbtn pbtn--quiet" data-walk="back">Back</button>' : ''}
163
- <button type="button" class="pbtn" data-walk="off" aria-pressed="${decided === false}">Leave it off</button>
164
- <button type="button" class="pbtn" data-walk="on" aria-pressed="${decided === true}">Turn it on</button>
162
+ ${i > 0 ? '<button type="button" class="pbtn pbtn--quiet btn--sm" data-walk="back">Back</button>' : ''}
163
+ <button type="button" class="pbtn btn--sm" data-walk="off" aria-pressed="${decided === false}">Leave it off</button>
164
+ <button type="button" class="pbtn btn--sm" data-walk="on" aria-pressed="${decided === true}">Turn it on</button>
165
165
  </div>`;
166
166
  }
167
167
 
@@ -181,8 +181,8 @@
181
181
  </ul>
182
182
  ${gone.length ? `<p class="prow__hint">Also offered, but no longer on this project, so it cannot be turned on: ${gone.map((k) => `<code>${escapeHtml(k.name)}</code>`).join(', ')}.</p>` : ''}
183
183
  <div class="speciality-actions skill-walk__actions">
184
- <button type="button" class="pbtn pbtn--quiet" data-walk="restart">Go through them again</button>
185
- <button type="button" class="pbtn pbtn--save" data-walk="save" ${w.saving ? 'disabled' : ''}>Save my choices</button>
184
+ <button type="button" class="pbtn pbtn--quiet btn--sm" data-walk="restart">Go through them again</button>
185
+ <button type="button" class="pbtn pbtn--save btn--sm" data-walk="save" ${w.saving ? 'disabled' : ''}>Save my choices</button>
186
186
  </div>`;
187
187
  }
188
188
 
@@ -298,7 +298,7 @@
298
298
  <h4 class="speciality-create__h">What ${escapeHtml(s.name)} offers</h4>
299
299
  <div class="speciality-offer__choices">${state.offerChoices || '<p class="hall-loading hall-loading--inline" role="status">Loading this project’s skills…</p>'}</div>
300
300
  <div class="speciality-actions">
301
- <button type="submit" class="btn" ${state.offerChoices ? '' : 'disabled'}>Save what it offers</button>
301
+ <button type="submit" class="btn btn--ghost btn--sm" ${state.offerChoices ? '' : 'disabled'}>Save what it offers</button>
302
302
  </div>
303
303
  </form>`;
304
304
  }
@@ -357,12 +357,12 @@
357
357
  </p>
358
358
  </div>
359
359
  <div class="prow__actions">
360
- ${s.active && offered && !walking ? `<button type="button" class="btn btn--quiet" data-act="walk" data-id="${escapeHtml(String(s.id))}">Choose its skills</button>` : ''}
361
- ${s.mine ? `<button type="button" class="btn btn--quiet" data-act="train" data-id="${escapeHtml(String(s.id))}">${open ? 'Close' : 'Train'}</button>` : ''}
362
- ${s.mine ? `<button type="button" class="btn btn--quiet" data-act="offer" data-id="${escapeHtml(String(s.id))}" aria-expanded="${offering}">${offering ? 'Close' : 'Offered skills'}</button>` : ''}
360
+ ${s.active && offered && !walking ? `<button type="button" class="btn btn--ghost btn--sm" data-act="walk" data-id="${escapeHtml(String(s.id))}">Choose its skills</button>` : ''}
361
+ ${s.mine ? `<button type="button" class="btn btn--ghost btn--sm" data-act="train" data-id="${escapeHtml(String(s.id))}">${open ? 'Close' : 'Train'}</button>` : ''}
362
+ ${s.mine ? `<button type="button" class="btn btn--ghost btn--sm" data-act="offer" data-id="${escapeHtml(String(s.id))}" aria-expanded="${offering}">${offering ? 'Close' : 'Offered skills'}</button>` : ''}
363
363
  ${s.active
364
- ? `<button type="button" class="btn btn--quiet" data-act="abandon" data-id="${escapeHtml(String(s.id))}">Stop using</button>`
365
- : `<button type="button" class="btn" data-act="adopt" data-id="${escapeHtml(String(s.id))}" ${s.adoptable ? '' : 'disabled'}>Use this</button>`}
364
+ ? `<button type="button" class="btn btn--ghost btn--sm" data-act="abandon" data-id="${escapeHtml(String(s.id))}">Stop using</button>`
365
+ : `<button type="button" class="btn btn--ghost btn--sm" data-act="adopt" data-id="${escapeHtml(String(s.id))}" ${s.adoptable ? '' : 'disabled'}>Use this</button>`}
366
366
  </div>
367
367
  ${open ? trainHtml(s) : ''}
368
368
  ${offering ? offerFormHtml(s) : ''}
@@ -386,7 +386,7 @@
386
386
  <textarea name="body_md" rows="6" required placeholder="Paste or write it here."></textarea>
387
387
  </label>
388
388
  <div class="speciality-actions">
389
- <button type="submit" class="btn">Add to what it knows</button>
389
+ <button type="submit" class="btn btn--ghost btn--sm">Add to what it knows</button>
390
390
  </div>
391
391
  </form>`;
392
392
  }
@@ -423,7 +423,7 @@
423
423
  ${contractHtml(s)}
424
424
  </div>
425
425
  <div class="prow__actions">
426
- <button type="button" class="btn" data-act="adopt" data-id="${escapeHtml(String(s.id))}">Use this</button>
426
+ <button type="button" class="btn btn--ghost btn--sm" data-act="adopt" data-id="${escapeHtml(String(s.id))}">Use this</button>
427
427
  </div>
428
428
  </li>`;
429
429
  }
@@ -655,7 +655,7 @@
655
655
  <div id="speciality-create-skills"><p class="hall-loading hall-loading--inline" role="status">Loading this project’s skills…</p></div>
656
656
  </details>
657
657
  <div class="speciality-actions">
658
- <button type="submit" class="btn">Create speciality</button>
658
+ <button type="submit" class="btn btn--ghost btn--sm">Create speciality</button>
659
659
  </div>
660
660
  `;
661
661
  }