@synqauth/react 0.2.0 → 0.4.0

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/dist/styles.css CHANGED
@@ -3,83 +3,240 @@
3
3
  *
4
4
  * import '@synqauth/react/styles.css'
5
5
  *
6
- * A theme is a few variables, set on :root or any element above the
7
- * components. Every rule is inside :where(), so the app's own CSS wins over
8
- * any of them without fighting specificity. A component with `unstyled`
9
- * carries none of these classes.
6
+ * The default look is Molly's design for Synq (design/app in the synq repo):
7
+ * dark surfaces, teal actions, pill buttons, rounded cards, with a light
8
+ * counterpart when the page prefers light. A theme is a few variables, set on
9
+ * :root or any element above the components. Every rule is inside :where(),
10
+ * so the app's own CSS wins over any of them without fighting specificity. A
11
+ * component with `unstyled` carries none of these classes.
10
12
  */
11
13
 
12
14
  :where(.synq) {
13
15
  --synq-font-family: inherit;
14
- --synq-font-size: 0.9375rem;
15
- --synq-color-text: #0f172a;
16
- --synq-color-muted: #64748b;
17
- --synq-color-background: #ffffff;
18
- --synq-color-surface: #f8fafc;
19
- --synq-color-border: #e2e8f0;
20
- --synq-color-primary: #4f46e5;
21
- --synq-color-primary-text: #ffffff;
22
- --synq-color-danger: #dc2626;
23
- --synq-radius: 0.5rem;
16
+ /*
17
+ * Kelvin's type scale (AERO-2765), as Synq's own apps have it: nothing
18
+ * under 13px, 13px (xs) only for incidental metadata, 14px (sm) for what a
19
+ * person reads to decide (labels, a row's second line, badges, notes), 16px
20
+ * (base) for body, rows, inputs and buttons. In px, so an app's own root
21
+ * size (62.5% is common) can't shrink them under the floor; from 1024px
22
+ * wide every step goes up one (below). Set any of them to retheme, and
23
+ * --synq-font-size for the components' body text.
24
+ */
25
+ --synq-text-xs: 13px;
26
+ --synq-text-sm: 14px;
27
+ --synq-text-base: 16px;
28
+ --synq-text-lg: 18px;
29
+ --synq-text-xl: 20px;
30
+ --synq-text-2xl: 24px;
31
+ --synq-text-3xl: 28px;
32
+ --synq-font-size: var(--synq-text-base);
33
+ --synq-color-text: #f5f5f7;
34
+ --synq-color-muted: #b8a5c9;
35
+ /* Inputs, addresses and the cards inside a section. */
36
+ --synq-color-background: #0a0612;
37
+ /* A section's own card. */
38
+ --synq-color-surface: #140a1f;
39
+ --synq-color-border: rgb(148 94 199 / 0.22);
40
+ --synq-color-primary: #5fd8ca;
41
+ --synq-color-primary-hover: #4fb8ab;
42
+ --synq-color-primary-text: #0a0612;
43
+ /* The primary color where it is text or a line, on the surfaces above. */
44
+ --synq-color-primary-ink: #5fd8ca;
45
+ /* Marks that aren't status: the primary wallet. */
46
+ --synq-color-accent: #fb7b56;
47
+ --synq-color-danger: #f23a30;
48
+ --synq-color-danger-text: #f5f5f7;
49
+ /* Cards and sections; inputs and inner cards take --synq-radius-control. Buttons are pills. */
50
+ --synq-radius: 1rem;
51
+ --synq-radius-control: 0.75rem;
24
52
  --synq-spacing: 0.75rem;
25
- --synq-shadow: 0 8px 24px rgb(15 23 42 / 0.12);
53
+ --synq-shadow: 0 12px 32px rgb(0 0 0 / 0.5);
54
+ --synq-backdrop: rgb(10 6 18 / 0.72);
55
+ /* Done, available, connected. */
56
+ --synq-color-success: #34d399;
57
+ /*
58
+ * A control that is off (AERO-2737): a flat grey, never the primary
59
+ * faded, its edge 3:1 against the surfaces and its words 4.5:1 on it.
60
+ */
61
+ --synq-color-disabled: #231a2e;
62
+ --synq-color-disabled-border: #786b8b;
63
+ --synq-color-disabled-text: #a497b3;
64
+ /* Titles, greetings and drawn initials: the app's display face, if it has one. */
65
+ --synq-font-display: inherit;
66
+ /* <AvatarMoment>: the ring's three colors, and the embers'. */
67
+ --synq-moment-1: var(--synq-color-primary);
68
+ --synq-moment-2: var(--synq-color-accent);
69
+ --synq-moment-3: #f5c84c;
70
+ /* <AccountPanel>: how wide its popover is, and what it sits above. */
71
+ --synq-panel-width: 400px;
72
+ --synq-panel-z: 1000;
73
+ /* <AccountPanel>'s own corners; its cards, rows and fields follow --synq-radius and --synq-radius-control. */
74
+ --synq-radius-panel: calc(var(--synq-radius) * 1.5);
75
+ /* The plate behind a provider's full-color artwork (Google's), and the face addresses are set in. */
76
+ --synq-icon-plate: #fff;
77
+ --synq-font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
78
+ /* The issuer's white provider glyphs, as they show on the panel: as they are on a dark one. */
79
+ --synq-glyph-filter: none;
26
80
 
27
81
  font-family: var(--synq-font-family);
28
82
  font-size: var(--synq-font-size);
29
83
  color: var(--synq-color-text);
30
84
  }
31
85
 
32
- @media (prefers-color-scheme: dark) {
86
+ /* A laptop's text is never smaller than a phone's: one step up from 1024px wide. */
87
+ @media (min-width: 64rem) {
33
88
  :where(.synq) {
34
- --synq-color-text: #e2e8f0;
35
- --synq-color-muted: #94a3b8;
36
- --synq-color-background: #0f172a;
37
- --synq-color-surface: #1e293b;
38
- --synq-color-border: #334155;
39
- --synq-color-primary: #818cf8;
40
- --synq-color-primary-text: #0f172a;
41
- --synq-color-danger: #f87171;
42
- --synq-shadow: 0 8px 24px rgb(0 0 0 / 0.4);
89
+ --synq-text-xs: 14px;
90
+ --synq-text-sm: 15px;
91
+ --synq-text-base: 17px;
92
+ --synq-text-lg: 19px;
93
+ --synq-text-xl: 22px;
94
+ --synq-text-2xl: 26px;
95
+ --synq-text-3xl: 30px;
43
96
  }
44
97
  }
45
98
 
99
+ @media (prefers-color-scheme: light) {
100
+ :where(.synq) {
101
+ --synq-color-text: #140a1f;
102
+ --synq-color-muted: #6b5a7b;
103
+ --synq-color-background: #ffffff;
104
+ --synq-color-surface: #faf7fc;
105
+ --synq-color-border: rgb(60 18 83 / 0.14);
106
+ --synq-color-primary-ink: #0f766e;
107
+ --synq-color-accent: #c2410c;
108
+ /* 4.5:1 as words on the danger section's own tint too, not only on white (AERO-2765). */
109
+ --synq-color-danger: #b42318;
110
+ --synq-color-danger-text: #ffffff;
111
+ --synq-shadow: 0 12px 32px rgb(20 10 31 / 0.14);
112
+ --synq-backdrop: rgb(20 10 31 / 0.4);
113
+ --synq-color-success: #047857;
114
+ --synq-color-disabled: #efeaf3;
115
+ --synq-color-disabled-border: #8b7d99;
116
+ --synq-color-disabled-text: #625571;
117
+ --synq-moment-3: #d97706;
118
+ --synq-glyph-filter: invert(1);
119
+ }
120
+ }
121
+
122
+ /* Buttons: pills. Primary is solid teal with dark text; the rest are quiet outlines. */
123
+
46
124
  :where(.synq-sign-in-button, .synq-button) {
47
125
  display: inline-flex;
48
126
  align-items: center;
127
+ justify-content: center;
49
128
  gap: 0.375rem;
50
- padding: 0.5rem 0.875rem;
129
+ min-height: 2.5rem;
130
+ padding: 0.5rem 1.25rem;
51
131
  border: 1px solid var(--synq-color-border);
52
- border-radius: var(--synq-radius);
53
- background: var(--synq-color-background);
132
+ border-radius: 999px;
133
+ background: transparent;
54
134
  color: var(--synq-color-text);
55
135
  font: inherit;
56
136
  font-weight: 500;
137
+ white-space: nowrap;
57
138
  cursor: pointer;
139
+ transition:
140
+ background-color 150ms,
141
+ border-color 150ms,
142
+ color 150ms;
143
+ }
144
+
145
+ :where(.synq-button):hover:not(:disabled) {
146
+ border-color: var(--synq-color-primary-ink);
147
+ color: var(--synq-color-primary-ink);
58
148
  }
59
149
 
60
150
  :where(.synq-sign-in-button, .synq-button-primary) {
61
151
  border-color: var(--synq-color-primary);
62
152
  background: var(--synq-color-primary);
63
153
  color: var(--synq-color-primary-text);
154
+ font-weight: 700;
64
155
  }
65
156
 
66
- :where(.synq-sign-in-button, .synq-button):disabled {
67
- opacity: 0.55;
68
- cursor: not-allowed;
157
+ :where(.synq-sign-in-button, .synq-button-primary):hover:not(:disabled) {
158
+ border-color: var(--synq-color-primary-hover);
159
+ background: var(--synq-color-primary-hover);
160
+ color: var(--synq-color-primary-text);
161
+ }
162
+
163
+ :where(.synq-button-quiet) {
164
+ min-height: 2rem;
165
+ padding: 0.25rem 0.875rem;
166
+ color: var(--synq-color-muted);
167
+ }
168
+
169
+ :where(.synq-button-danger) {
170
+ border-color: var(--synq-color-danger);
171
+ background: var(--synq-color-danger);
172
+ color: var(--synq-color-danger-text);
173
+ }
174
+
175
+ :where(.synq-button-danger):hover:not(:disabled) {
176
+ border-color: var(--synq-color-danger);
177
+ background: var(--synq-color-danger);
178
+ color: var(--synq-color-danger-text);
179
+ filter: brightness(1.1);
180
+ }
181
+
182
+ :where(.synq-button-danger-outline) {
183
+ border-color: color-mix(in srgb, var(--synq-color-danger) 50%, transparent);
184
+ color: var(--synq-color-danger);
185
+ }
186
+
187
+ :where(.synq-button-danger-outline):hover:not(:disabled) {
188
+ border-color: var(--synq-color-danger);
189
+ background: var(--synq-color-danger);
190
+ color: var(--synq-color-danger-text);
191
+ }
192
+
193
+ :where(.synq-icon-button) {
194
+ display: inline-grid;
195
+ place-items: center;
196
+ flex: none;
197
+ width: 2.25rem;
198
+ height: 2.25rem;
199
+ padding: 0;
200
+ border: 1px solid var(--synq-color-border);
201
+ border-radius: var(--synq-radius-control);
202
+ background: var(--synq-color-background);
203
+ color: var(--synq-color-muted);
204
+ cursor: pointer;
205
+ transition:
206
+ border-color 150ms,
207
+ color 150ms;
208
+ }
209
+
210
+ :where(.synq-icon-button):hover:not(:disabled) {
211
+ border-color: var(--synq-color-primary-ink);
212
+ color: var(--synq-color-primary-ink);
213
+ }
214
+
215
+ :where(.synq-icon-button-danger) {
216
+ border-color: transparent;
217
+ background: transparent;
218
+ }
219
+
220
+ :where(.synq-icon-button-danger):hover:not(:disabled) {
221
+ border-color: transparent;
222
+ color: var(--synq-color-danger);
69
223
  }
70
224
 
71
225
  :where(
72
226
  .synq-sign-in-button,
73
227
  .synq-button,
228
+ .synq-icon-button,
74
229
  .synq-user-button-trigger,
75
230
  .synq-menu-item,
76
231
  .synq-input,
77
232
  .synq-link
78
233
  ):focus-visible {
79
- outline: 2px solid var(--synq-color-primary);
234
+ outline: 2px solid var(--synq-color-primary-ink);
80
235
  outline-offset: 2px;
81
236
  }
82
237
 
238
+ /* The user button and its menu. */
239
+
83
240
  :where(.synq-user-button) {
84
241
  position: relative;
85
242
  display: inline-block;
@@ -89,39 +246,83 @@
89
246
  display: inline-flex;
90
247
  align-items: center;
91
248
  gap: 0.5rem;
92
- padding: 0.25rem 0.625rem 0.25rem 0.25rem;
249
+ padding: 0.25rem 0.75rem 0.25rem 0.25rem;
93
250
  border: 1px solid var(--synq-color-border);
94
251
  border-radius: 999px;
95
- background: var(--synq-color-background);
252
+ background: var(--synq-color-surface);
96
253
  color: inherit;
97
254
  font: inherit;
255
+ font-weight: 500;
98
256
  cursor: pointer;
257
+ transition: border-color 150ms;
258
+ }
259
+
260
+ :where(.synq-user-button-trigger):hover {
261
+ border-color: var(--synq-color-primary-ink);
99
262
  }
100
263
 
264
+ /* `<Avatar size>` sets --synq-avatar-size on the element itself. */
101
265
  :where(.synq-avatar) {
102
266
  display: inline-grid;
103
267
  place-items: center;
104
- width: 2rem;
105
- height: 2rem;
268
+ flex: none;
269
+ width: var(--synq-avatar-size, 2rem);
270
+ height: var(--synq-avatar-size, 2rem);
271
+ border: 1px solid color-mix(in srgb, var(--synq-color-primary-ink) 30%, transparent);
106
272
  border-radius: 999px;
107
- background: var(--synq-color-primary);
108
- color: var(--synq-color-primary-text);
109
- font-size: 0.8125rem;
110
- font-weight: 600;
273
+ background: color-mix(in srgb, var(--synq-color-primary) 10%, transparent);
274
+ color: var(--synq-color-primary-ink);
275
+ font-size: var(--synq-text-xs);
276
+ font-weight: 700;
111
277
  object-fit: cover;
112
278
  }
113
279
 
280
+ /* A picture, or a default drawn as an SVG that fills the circle (AERO-2704). */
281
+ :where(.synq-avatar) {
282
+ overflow: hidden;
283
+ padding: 0;
284
+ }
285
+
286
+ :where(.synq-avatar) > :where(svg) {
287
+ display: block;
288
+ width: 100%;
289
+ height: 100%;
290
+ }
291
+
292
+ /* Drawn initials take the display face; the SVG's own attributes are the fallback without this sheet. */
293
+ :where(.synq-avatar) :where(text) {
294
+ font-family: var(--synq-font-display);
295
+ font-weight: 700;
296
+ }
297
+
298
+ :where(.synq-picture) {
299
+ display: flex;
300
+ flex-wrap: wrap;
301
+ align-items: center;
302
+ gap: var(--synq-spacing);
303
+ }
304
+
305
+ :where(.synq-avatar-large) {
306
+ width: 5rem;
307
+ height: 5rem;
308
+ justify-self: start;
309
+ font-size: var(--synq-text-3xl);
310
+ }
311
+
114
312
  :where(.synq-menu) {
115
313
  position: absolute;
116
314
  right: 0;
117
315
  z-index: 50;
118
316
  display: grid;
119
317
  min-width: 12rem;
318
+ /* UserButton moves it back on screen on a narrow window (AERO-2734). */
319
+ max-width: calc(100vw - 16px);
320
+ transform: translateX(var(--synq-menu-shift, 0px));
120
321
  margin-top: 0.375rem;
121
322
  padding: 0.25rem;
122
323
  border: 1px solid var(--synq-color-border);
123
324
  border-radius: var(--synq-radius);
124
- background: var(--synq-color-background);
325
+ background: var(--synq-color-surface);
125
326
  box-shadow: var(--synq-shadow);
126
327
  }
127
328
 
@@ -129,46 +330,195 @@
129
330
  display: block;
130
331
  padding: 0.5rem 0.75rem;
131
332
  border: 0;
132
- border-radius: calc(var(--synq-radius) - 0.125rem);
333
+ border-radius: var(--synq-radius-control);
133
334
  background: none;
134
335
  color: inherit;
135
336
  font: inherit;
136
337
  text-align: left;
137
338
  text-decoration: none;
138
339
  cursor: pointer;
340
+ transition: background-color 150ms;
139
341
  }
140
342
 
141
343
  :where(.synq-menu-item):hover {
142
- background: var(--synq-color-surface);
344
+ background: var(--synq-color-background);
143
345
  }
144
346
 
347
+ /* Sections: one card each, a heading with an action beside it. */
348
+
145
349
  :where(.synq-account-manager) {
146
350
  display: grid;
351
+ /*
352
+ * Its sections take the width there is, never their content's, so at
353
+ * 320px a long address or a row's badge wraps rather than widening the
354
+ * page (AERO-2765).
355
+ */
356
+ grid-template-columns: minmax(0, 1fr);
147
357
  gap: calc(var(--synq-spacing) * 2);
148
358
  }
149
359
 
150
360
  :where(.synq-section, .synq-wallet-manager) {
151
361
  display: grid;
152
- gap: var(--synq-spacing);
153
- padding: calc(var(--synq-spacing) * 1.5);
362
+ grid-template-columns: minmax(0, 1fr);
363
+ gap: calc(var(--synq-spacing) * 1.5);
364
+ padding: calc(var(--synq-spacing) * 2);
154
365
  border: 1px solid var(--synq-color-border);
155
366
  border-radius: var(--synq-radius);
156
- background: var(--synq-color-background);
367
+ background: var(--synq-color-surface);
368
+ }
369
+
370
+ :where(.synq-section-danger) {
371
+ border-color: color-mix(in srgb, var(--synq-color-danger) 35%, transparent);
372
+ background: color-mix(in srgb, var(--synq-color-danger) 6%, var(--synq-color-surface));
373
+ }
374
+
375
+ :where(.synq-section-danger) :where(.synq-heading) {
376
+ color: var(--synq-color-danger);
377
+ }
378
+
379
+ :where(.synq-header) {
380
+ display: flex;
381
+ flex-wrap: wrap;
382
+ align-items: center;
383
+ justify-content: space-between;
384
+ gap: var(--synq-spacing);
385
+ }
386
+
387
+ :where(.synq-header-text) {
388
+ display: grid;
389
+ gap: 0.25rem;
157
390
  }
158
391
 
159
392
  :where(.synq-heading) {
160
393
  margin: 0;
161
- font-size: 1rem;
162
- font-weight: 600;
394
+ font-family: var(--synq-font-display);
395
+ font-size: var(--synq-text-xl);
396
+ font-weight: 700;
163
397
  }
164
398
 
165
- :where(.synq-form) {
399
+ :where(.synq-subheading) {
400
+ margin: 0;
401
+ font-family: var(--synq-font-display);
402
+ font-size: var(--synq-text-base);
403
+ font-weight: 700;
404
+ }
405
+
406
+ :where(.synq-link-methods) {
407
+ display: grid;
408
+ gap: var(--synq-spacing);
409
+ }
410
+
411
+ /* Cards inside a section: a wallet, a way to sign in. */
412
+
413
+ :where(.synq-cards) {
414
+ display: grid;
415
+ gap: var(--synq-spacing);
416
+ }
417
+
418
+ :where(.synq-cards-grid) {
419
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
420
+ }
421
+
422
+ :where(.synq-card) {
166
423
  display: grid;
167
424
  gap: var(--synq-spacing);
425
+ padding: calc(var(--synq-spacing) * 1.5);
426
+ border: 1px solid var(--synq-color-border);
427
+ border-radius: var(--synq-radius-control);
428
+ background: var(--synq-color-background);
429
+ transition: border-color 150ms;
430
+ }
431
+
432
+ :where(.synq-card):hover {
433
+ border-color: color-mix(in srgb, var(--synq-color-primary-ink) 50%, transparent);
434
+ }
435
+
436
+ :where(.synq-card-row) {
437
+ display: flex;
438
+ align-items: center;
439
+ justify-content: space-between;
440
+ }
441
+
442
+ :where(.synq-card-head) {
443
+ display: flex;
444
+ flex-wrap: wrap;
445
+ align-items: center;
446
+ gap: 0.5rem;
447
+ }
448
+
449
+ :where(.synq-card-title) {
450
+ font-size: var(--synq-text-lg);
451
+ font-weight: 700;
452
+ }
453
+
454
+ :where(.synq-card-foot) {
455
+ display: flex;
456
+ flex-wrap: wrap;
457
+ align-items: center;
458
+ justify-content: space-between;
459
+ gap: var(--synq-spacing);
460
+ }
461
+
462
+ :where(.synq-address) {
463
+ display: flex;
464
+ align-items: center;
465
+ gap: 0.5rem;
466
+ }
467
+
468
+ :where(.synq-code) {
469
+ flex: 1 1 auto;
470
+ min-width: 0;
471
+ padding: 0.5rem 0.875rem;
472
+ overflow: hidden;
473
+ border: 1px solid var(--synq-color-border);
474
+ border-radius: var(--synq-radius-control);
475
+ background: var(--synq-color-surface);
476
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
477
+ font-size: var(--synq-text-sm);
478
+ text-overflow: ellipsis;
479
+ white-space: nowrap;
480
+ }
481
+
482
+ :where(.synq-truncate) {
483
+ overflow: hidden;
484
+ text-overflow: ellipsis;
485
+ white-space: nowrap;
486
+ }
487
+
488
+ /* A card that is itself a button: a way to sign in they could add. */
489
+
490
+ :where(.synq-card-button) {
491
+ width: 100%;
492
+ color: inherit;
493
+ font: inherit;
494
+ text-align: left;
495
+ cursor: pointer;
496
+ }
497
+
498
+ :where(.synq-card-button):disabled {
499
+ color: var(--synq-color-disabled-text);
500
+ cursor: not-allowed;
501
+ }
502
+
503
+ :where(.synq-card-button):focus-visible {
504
+ outline: 2px solid var(--synq-color-primary-ink);
505
+ outline-offset: 2px;
506
+ }
507
+
508
+ :where(.synq-card .synq-link) {
509
+ white-space: nowrap;
510
+ }
511
+
512
+ /* Forms. */
513
+
514
+ :where(.synq-form) {
515
+ display: grid;
516
+ gap: calc(var(--synq-spacing) * 1.25);
168
517
  }
169
518
 
170
519
  :where(.synq-form-inline) {
171
520
  display: flex;
521
+ flex: 1 1 auto;
172
522
  flex-wrap: wrap;
173
523
  align-items: end;
174
524
  gap: 0.5rem;
@@ -176,29 +526,53 @@
176
526
 
177
527
  :where(.synq-field) {
178
528
  display: grid;
179
- gap: 0.25rem;
529
+ gap: 0.375rem;
180
530
  }
181
531
 
182
532
  :where(.synq-label) {
183
533
  color: var(--synq-color-muted);
184
- font-size: 0.8125rem;
534
+ font-size: var(--synq-text-sm);
535
+ font-weight: 500;
185
536
  }
186
537
 
187
538
  :where(.synq-input) {
188
- padding: 0.5rem 0.625rem;
539
+ min-height: 2.75rem;
540
+ padding: 0.5rem 0.875rem;
189
541
  border: 1px solid var(--synq-color-border);
190
- border-radius: var(--synq-radius);
542
+ border-radius: var(--synq-radius-control);
191
543
  background: var(--synq-color-background);
192
544
  color: inherit;
193
545
  font: inherit;
546
+ transition: border-color 150ms;
547
+ }
548
+
549
+ :where(.synq-input):focus {
550
+ border-color: color-mix(in srgb, var(--synq-color-primary-ink) 50%, transparent);
551
+ }
552
+
553
+ :where(.synq-input-confirm) {
554
+ text-align: center;
555
+ font-weight: 500;
194
556
  }
195
557
 
196
558
  :where(.synq-actions) {
197
559
  display: flex;
560
+ flex-wrap: wrap;
198
561
  align-items: center;
562
+ gap: 0.5rem;
563
+ }
564
+
565
+ :where(.synq-actions-split) {
566
+ justify-content: space-between;
199
567
  gap: var(--synq-spacing);
200
568
  }
201
569
 
570
+ :where(.synq-actions-split) > :where(p) {
571
+ flex: 1 1 18rem;
572
+ }
573
+
574
+ /* Lists of rows: passkeys, devices. */
575
+
202
576
  :where(.synq-list) {
203
577
  display: grid;
204
578
  margin: 0;
@@ -211,12 +585,13 @@
211
585
  flex-wrap: wrap;
212
586
  align-items: center;
213
587
  gap: 0.5rem;
214
- padding: 0.625rem 0;
588
+ padding: 0.75rem 0;
215
589
  border-top: 1px solid var(--synq-color-border);
216
590
  }
217
591
 
218
592
  :where(.synq-row):first-child {
219
593
  border-top: 0;
594
+ padding-top: 0;
220
595
  }
221
596
 
222
597
  :where(.synq-row-title) {
@@ -224,13 +599,23 @@
224
599
  font-weight: 500;
225
600
  }
226
601
 
602
+ /* Marks: teal for status, coral for the primary wallet. */
603
+
227
604
  :where(.synq-badge) {
228
- padding: 0.125rem 0.5rem;
605
+ padding: 0.0625rem 0.5rem;
606
+ border: 1px solid color-mix(in srgb, var(--synq-color-primary-ink) 30%, transparent);
229
607
  border-radius: 999px;
230
- background: var(--synq-color-surface);
231
- color: var(--synq-color-primary);
232
- font-size: 0.75rem;
233
- font-weight: 600;
608
+ background: color-mix(in srgb, var(--synq-color-primary) 8%, transparent);
609
+ color: var(--synq-color-primary-ink);
610
+ /* 13px at the least, however small the page sets its type (AERO-2757); 14px as a badge is read to decide (AERO-2765). */
611
+ font-size: var(--synq-text-sm);
612
+ font-weight: 500;
613
+ }
614
+
615
+ :where(.synq-badge-accent) {
616
+ border-color: color-mix(in srgb, var(--synq-color-accent) 30%, transparent);
617
+ background: color-mix(in srgb, var(--synq-color-accent) 10%, transparent);
618
+ color: var(--synq-color-accent);
234
619
  }
235
620
 
236
621
  :where(.synq-muted) {
@@ -238,6 +623,13 @@
238
623
  color: var(--synq-color-muted);
239
624
  }
240
625
 
626
+ :where(.synq-empty) {
627
+ padding: calc(var(--synq-spacing) * 2);
628
+ border: 1px dashed var(--synq-color-border);
629
+ border-radius: var(--synq-radius-control);
630
+ text-align: center;
631
+ }
632
+
241
633
  :where(.synq-error) {
242
634
  flex-basis: 100%;
243
635
  margin: 0;
@@ -261,8 +653,1318 @@
261
653
  padding: 0;
262
654
  border: 0;
263
655
  background: none;
264
- color: var(--synq-color-primary);
656
+ color: var(--synq-color-primary-ink);
265
657
  font: inherit;
266
658
  font-weight: 500;
267
659
  cursor: pointer;
268
660
  }
661
+
662
+ /* Why a change failed, and a way to sign in again when that is what it needs. */
663
+
664
+ :where(.synq-failure) {
665
+ display: flex;
666
+ flex-wrap: wrap;
667
+ align-items: center;
668
+ gap: 0.5rem;
669
+ }
670
+
671
+ :where(.synq-failure) > :where(.synq-error) {
672
+ flex: 1 1 14rem;
673
+ }
674
+
675
+ /* The question asked before something goes. */
676
+
677
+ :where(.synq-dialog-backdrop) {
678
+ position: fixed;
679
+ inset: 0;
680
+ z-index: 100;
681
+ display: grid;
682
+ place-items: center;
683
+ padding: 1rem;
684
+ background: var(--synq-backdrop);
685
+ }
686
+
687
+ :where(.synq-dialog) {
688
+ display: grid;
689
+ gap: var(--synq-spacing);
690
+ width: min(28rem, 100%);
691
+ padding: calc(var(--synq-spacing) * 2);
692
+ border: 1px solid color-mix(in srgb, var(--synq-color-danger) 45%, transparent);
693
+ border-radius: var(--synq-radius);
694
+ background: var(--synq-color-surface);
695
+ box-shadow: var(--synq-shadow);
696
+ color: var(--synq-color-text);
697
+ }
698
+
699
+ :where(.synq-dialog-title) {
700
+ margin: 0;
701
+ font-size: var(--synq-text-xl);
702
+ font-weight: 700;
703
+ }
704
+
705
+ :where(.synq-dialog-actions) {
706
+ justify-content: flex-end;
707
+ margin-top: 0.25rem;
708
+ }
709
+
710
+ :where(.synq-dialog-actions) > :where(button) {
711
+ flex: 1 1 0;
712
+ }
713
+
714
+ /*
715
+ * <AccountPanel> (AERO-2696): the account button, and the panel it opens, a
716
+ * popover under it from 640px wide and a bottom sheet below. Type is never
717
+ * under 13px, body and fields are 16px, and every target is 44px or more.
718
+ */
719
+
720
+ :where(.synq-account-panel) {
721
+ position: relative;
722
+ display: inline-flex;
723
+ }
724
+
725
+ :where(.synq-account-panel-trigger) {
726
+ min-height: 44px;
727
+ padding: 0 1rem;
728
+ border: 1px solid color-mix(in srgb, var(--synq-color-text) 12%, transparent);
729
+ border-radius: 999px;
730
+ background: color-mix(in srgb, var(--synq-color-text) 8%, transparent);
731
+ color: var(--synq-color-text);
732
+ font: inherit;
733
+ font-size: var(--synq-text-base);
734
+ font-weight: 600;
735
+ white-space: nowrap;
736
+ cursor: pointer;
737
+ transition: background-color 150ms;
738
+ }
739
+
740
+ :where(.synq-account-panel-trigger):hover {
741
+ background: color-mix(in srgb, var(--synq-color-text) 12%, transparent);
742
+ }
743
+
744
+ :where(.synq-account-panel-avatar-trigger) {
745
+ display: grid;
746
+ place-items: center;
747
+ width: 44px;
748
+ height: 44px;
749
+ padding: 0;
750
+ border: 1px solid color-mix(in srgb, var(--synq-color-text) 12%, transparent);
751
+ border-radius: 999px;
752
+ background: transparent;
753
+ cursor: pointer;
754
+ transition: background-color 150ms;
755
+ }
756
+
757
+ :where(.synq-account-panel-avatar-trigger):hover {
758
+ background: color-mix(in srgb, var(--synq-color-text) 5%, transparent);
759
+ }
760
+
761
+ :where(.synq-account-panel-face) {
762
+ display: inline-grid;
763
+ place-items: center;
764
+ }
765
+
766
+ /* Once the button's face swaps, the new one fades in: the avatar over 200ms, "Sign in" over 160ms. */
767
+ :where(.synq-account-panel-face[data-swap='avatar']) {
768
+ animation: synq-fade-in 200ms ease-out both;
769
+ }
770
+
771
+ :where(.synq-account-panel-face[data-swap='sign-in']) {
772
+ animation: synq-fade-in 160ms ease-out both;
773
+ }
774
+
775
+ :where(.synq-account-panel-layer) {
776
+ position: fixed;
777
+ inset: 0;
778
+ z-index: var(--synq-panel-z);
779
+ pointer-events: none;
780
+ }
781
+
782
+ :where(.synq-account-panel-backdrop) {
783
+ position: absolute;
784
+ inset: 0;
785
+ background: var(--synq-backdrop);
786
+ pointer-events: auto;
787
+ animation: synq-fade-in 220ms ease-out both;
788
+ }
789
+
790
+ :where(.synq-account-panel-backdrop[data-state='closing']) {
791
+ animation: synq-fade-out 160ms ease-in both;
792
+ }
793
+
794
+ :where(.synq-account-panel-dialog) {
795
+ position: absolute;
796
+ display: flex;
797
+ flex-direction: column;
798
+ overflow: hidden;
799
+ border: 1px solid var(--synq-color-border);
800
+ background: var(--synq-color-background);
801
+ box-shadow: var(--synq-shadow);
802
+ color: var(--synq-color-text);
803
+ font-family: var(--synq-font-family);
804
+ font-size: var(--synq-text-base);
805
+ line-height: 1.45;
806
+ text-align: left;
807
+ pointer-events: auto;
808
+ outline: none;
809
+ interpolate-size: allow-keywords;
810
+ transition: height 360ms cubic-bezier(0.22, 1, 0.36, 1);
811
+ }
812
+
813
+ :where(.synq-account-panel-dialog[data-layout='popover']) {
814
+ top: var(--synq-panel-top, 4rem);
815
+ right: var(--synq-panel-right, 1rem);
816
+ width: min(var(--synq-panel-width), calc(100vw - 16px));
817
+ max-height: var(--synq-panel-max-height, calc(100vh - 5rem));
818
+ border-radius: var(--synq-radius-panel);
819
+ transform-origin: top right;
820
+ }
821
+
822
+ :where(.synq-account-panel-dialog[data-layout='sheet']) {
823
+ right: 0;
824
+ bottom: 0;
825
+ left: 0;
826
+ max-height: 90vh;
827
+ max-height: 90dvh;
828
+ padding-bottom: env(safe-area-inset-bottom, 0px);
829
+ border-bottom: 0;
830
+ border-radius: var(--synq-radius-panel) var(--synq-radius-panel) 0 0;
831
+ }
832
+
833
+ /* A first sign-in's onboarding takes the room it may. */
834
+ :where(.synq-account-panel-dialog[data-layout='sheet'][data-view='onboarding']) {
835
+ height: 90vh;
836
+ height: 90dvh;
837
+ }
838
+
839
+ :where(.synq-account-panel-dialog[data-layout='popover'][data-view='onboarding']) {
840
+ height: var(--synq-panel-max-height, calc(100vh - 5rem));
841
+ }
842
+
843
+ :where(.synq-account-panel-grabber) {
844
+ display: flex;
845
+ flex-shrink: 0;
846
+ align-items: center;
847
+ justify-content: center;
848
+ height: 28px;
849
+ cursor: grab;
850
+ touch-action: none;
851
+ }
852
+
853
+ :where(.synq-account-panel-grabber) > :where(span) {
854
+ width: 36px;
855
+ height: 4px;
856
+ border-radius: 999px;
857
+ background: color-mix(in srgb, var(--synq-color-text) 18%, transparent);
858
+ }
859
+
860
+ :where(.synq-account-panel-body) {
861
+ display: grid;
862
+ flex: 1 1 auto;
863
+ align-content: start;
864
+ gap: 16px;
865
+ min-height: 0;
866
+ padding: 20px;
867
+ overflow-y: auto;
868
+ overscroll-behavior: contain;
869
+ }
870
+
871
+ :where(.synq-account-panel-dialog[data-layout='sheet']) :where(.synq-account-panel-body) {
872
+ padding-top: 4px;
873
+ }
874
+
875
+ :where(.synq-account-panel-footer) {
876
+ display: flex;
877
+ flex-shrink: 0;
878
+ flex-wrap: wrap;
879
+ gap: 8px;
880
+ padding: 12px 20px 16px;
881
+ border-top: 1px solid color-mix(in srgb, var(--synq-color-text) 6%, transparent);
882
+ background: var(--synq-color-background);
883
+ }
884
+
885
+ :where(.synq-account-panel-footer) > :where(*) {
886
+ flex: 1 1 0;
887
+ }
888
+
889
+ :where(.synq-account-panel-footer) > :where(.synq-account-panel-problem) {
890
+ flex-basis: 100%;
891
+ }
892
+
893
+ :where(.synq-account-panel-head) {
894
+ display: grid;
895
+ grid-template-columns: minmax(0, 1fr) 44px;
896
+ align-items: start;
897
+ gap: 8px;
898
+ }
899
+
900
+ :where(.synq-account-panel-head-back) {
901
+ grid-template-columns: 44px minmax(0, 1fr) 44px;
902
+ align-items: center;
903
+ }
904
+
905
+ :where(.synq-account-panel-title) {
906
+ margin: 0;
907
+ font-family: var(--synq-font-display);
908
+ font-size: var(--synq-text-2xl);
909
+ font-weight: 700;
910
+ line-height: 1.1;
911
+ text-wrap: balance;
912
+ }
913
+
914
+ :where(.synq-account-panel-title-small) {
915
+ font-size: var(--synq-text-xl);
916
+ }
917
+
918
+ :where(.synq-account-panel-subtitle) {
919
+ margin: 4px 0 0;
920
+ color: var(--synq-color-muted);
921
+ font-size: var(--synq-text-base);
922
+ }
923
+
924
+ :where(.synq-account-panel-icon-button) {
925
+ display: grid;
926
+ place-items: center;
927
+ width: 44px;
928
+ height: 44px;
929
+ padding: 0;
930
+ border: 0;
931
+ border-radius: 999px;
932
+ background: color-mix(in srgb, var(--synq-color-text) 5%, transparent);
933
+ color: var(--synq-color-muted);
934
+ cursor: pointer;
935
+ transition:
936
+ background-color 150ms,
937
+ color 150ms;
938
+ }
939
+
940
+ :where(.synq-account-panel-icon-button):hover {
941
+ background: color-mix(in srgb, var(--synq-color-text) 10%, transparent);
942
+ color: var(--synq-color-text);
943
+ }
944
+
945
+ :where(.synq-account-panel-methods) {
946
+ display: grid;
947
+ gap: 10px;
948
+ }
949
+
950
+ :where(.synq-account-panel-method) {
951
+ display: grid;
952
+ gap: 6px;
953
+ }
954
+
955
+ :where(.synq-account-panel-pill) {
956
+ position: relative;
957
+ display: grid;
958
+ grid-template-columns: 24px minmax(0, 1fr) auto;
959
+ align-items: center;
960
+ gap: 12px;
961
+ width: 100%;
962
+ min-height: 48px;
963
+ padding: 0 16px;
964
+ border: 1px solid color-mix(in srgb, var(--synq-color-text) 10%, transparent);
965
+ border-radius: 999px;
966
+ background: color-mix(in srgb, var(--synq-color-text) 6%, transparent);
967
+ color: var(--synq-color-text);
968
+ font: inherit;
969
+ font-size: var(--synq-text-base);
970
+ font-weight: 600;
971
+ text-align: left;
972
+ cursor: pointer;
973
+ transition:
974
+ background-color 150ms,
975
+ opacity 160ms,
976
+ border-color 160ms;
977
+ }
978
+
979
+ :where(.synq-account-panel-dialog[data-layout='popover']) :where(.synq-account-panel-pill) {
980
+ min-height: 44px;
981
+ }
982
+
983
+ :where(.synq-account-panel-pill):hover:not(:disabled) {
984
+ background: color-mix(in srgb, var(--synq-color-text) 10%, transparent);
985
+ }
986
+
987
+ :where(.synq-account-panel-pill[data-busy], .synq-account-panel-row-button[data-busy]) {
988
+ border-color: color-mix(in srgb, var(--synq-moment-2) 55%, transparent);
989
+ background: color-mix(in srgb, var(--synq-moment-2) 8%, transparent);
990
+ cursor: default;
991
+ }
992
+
993
+ :where(.synq-account-panel-pill-icon) {
994
+ display: grid;
995
+ place-items: center;
996
+ width: 24px;
997
+ height: 24px;
998
+ }
999
+
1000
+ :where(.synq-account-panel-icon) {
1001
+ display: block;
1002
+ width: 20px;
1003
+ height: 20px;
1004
+ border-radius: calc(var(--synq-radius-control) * 0.5);
1005
+ }
1006
+
1007
+ :where(.synq-account-panel-icon-color) {
1008
+ box-sizing: border-box;
1009
+ width: 24px;
1010
+ height: 24px;
1011
+ padding: 2px;
1012
+ border-radius: 50%;
1013
+ /* Color artwork is drawn for a white button, as the hosted page has it. */
1014
+ background: var(--synq-icon-plate);
1015
+ }
1016
+
1017
+ :where(.synq-account-panel-icon-glyph) {
1018
+ border-radius: 0;
1019
+ filter: var(--synq-glyph-filter);
1020
+ }
1021
+
1022
+ :where(.synq-account-panel-pill-label) {
1023
+ min-width: 0;
1024
+ overflow: hidden;
1025
+ text-overflow: ellipsis;
1026
+ white-space: nowrap;
1027
+ }
1028
+
1029
+ :where(.synq-account-panel-last-used) {
1030
+ position: absolute;
1031
+ top: -9px;
1032
+ right: 18px;
1033
+ padding: 0 8px;
1034
+ border: 1px solid color-mix(in srgb, var(--synq-color-primary-ink) 45%, transparent);
1035
+ border-radius: 999px;
1036
+ background: var(--synq-color-background);
1037
+ color: var(--synq-color-primary-ink);
1038
+ font-size: var(--synq-text-xs);
1039
+ font-weight: 600;
1040
+ line-height: 16px;
1041
+ white-space: nowrap;
1042
+ }
1043
+
1044
+ :where(.synq-account-panel-row-button) :where(.synq-account-panel-last-used) {
1045
+ position: static;
1046
+ }
1047
+
1048
+ :where(.synq-account-panel-dots) {
1049
+ display: inline-flex;
1050
+ gap: 4px;
1051
+ }
1052
+
1053
+ :where(.synq-account-panel-dots) > :where(i) {
1054
+ width: 6px;
1055
+ height: 6px;
1056
+ border-radius: 50%;
1057
+ background: var(--synq-moment-2);
1058
+ opacity: 0.3;
1059
+ animation: synq-dot 1.2s ease-in-out infinite;
1060
+ }
1061
+
1062
+ :where(.synq-account-panel-dots) > :where(i:nth-child(2)) {
1063
+ animation-delay: 0.15s;
1064
+ }
1065
+
1066
+ :where(.synq-account-panel-dots) > :where(i:nth-child(3)) {
1067
+ animation-delay: 0.3s;
1068
+ }
1069
+
1070
+ :where(.synq-account-panel-text-button) {
1071
+ justify-self: start;
1072
+ min-width: 44px;
1073
+ min-height: 44px;
1074
+ padding: 0 8px;
1075
+ border: 0;
1076
+ background: none;
1077
+ color: var(--synq-color-muted);
1078
+ font: inherit;
1079
+ font-size: var(--synq-text-base);
1080
+ font-weight: 600;
1081
+ text-decoration: underline;
1082
+ text-underline-offset: 3px;
1083
+ cursor: pointer;
1084
+ }
1085
+
1086
+ :where(.synq-account-panel-text-button):hover {
1087
+ color: var(--synq-color-text);
1088
+ }
1089
+
1090
+ :where(.synq-account-panel-cancel) {
1091
+ justify-self: center;
1092
+ }
1093
+
1094
+ :where(.synq-account-panel-more) {
1095
+ display: inline-flex;
1096
+ align-items: center;
1097
+ gap: 6px;
1098
+ padding: 0 4px;
1099
+ text-decoration: none;
1100
+ }
1101
+
1102
+ :where(.synq-account-panel-more[aria-expanded='true']) > :where(svg) {
1103
+ transform: rotate(180deg);
1104
+ }
1105
+
1106
+ :where(.synq-account-panel-wallet-hint) {
1107
+ display: flex;
1108
+ flex-wrap: wrap;
1109
+ align-items: center;
1110
+ justify-content: space-between;
1111
+ gap: 0 8px;
1112
+ padding-left: 16px;
1113
+ }
1114
+
1115
+ :where(.synq-account-panel-note) {
1116
+ margin: 0;
1117
+ color: var(--synq-color-muted);
1118
+ font-size: var(--synq-text-base);
1119
+ }
1120
+
1121
+ :where(.synq-account-panel-by) {
1122
+ margin: 0;
1123
+ color: var(--synq-color-muted);
1124
+ font-size: var(--synq-text-xs);
1125
+ text-align: center;
1126
+ }
1127
+
1128
+ :where(.synq-account-panel-problem) {
1129
+ display: grid;
1130
+ grid-template-columns: 20px minmax(0, 1fr);
1131
+ align-items: start;
1132
+ gap: 8px;
1133
+ color: var(--synq-color-text);
1134
+ font-size: var(--synq-text-base);
1135
+ }
1136
+
1137
+ :where(.synq-account-panel-problem) > :where(svg) {
1138
+ margin-top: 1px;
1139
+ color: var(--synq-color-danger);
1140
+ }
1141
+
1142
+ :where(.synq-account-panel-problem-actions) {
1143
+ display: flex;
1144
+ flex-wrap: wrap;
1145
+ grid-column: 2;
1146
+ gap: 0 12px;
1147
+ }
1148
+
1149
+ :where(.synq-account-panel-list) {
1150
+ display: grid;
1151
+ gap: 8px;
1152
+ }
1153
+
1154
+ :where(.synq-account-panel-row-button) {
1155
+ display: grid;
1156
+ grid-template-columns: 32px minmax(0, 1fr) auto;
1157
+ align-items: center;
1158
+ gap: 12px;
1159
+ width: 100%;
1160
+ min-height: 56px;
1161
+ padding: 8px 14px;
1162
+ border: 1px solid var(--synq-color-border);
1163
+ border-radius: var(--synq-radius);
1164
+ background: color-mix(in srgb, var(--synq-color-text) 4%, transparent);
1165
+ color: var(--synq-color-text);
1166
+ font: inherit;
1167
+ text-align: left;
1168
+ cursor: pointer;
1169
+ transition: background-color 150ms;
1170
+ }
1171
+
1172
+ :where(.synq-account-panel-row-button):hover:not(:disabled) {
1173
+ background: color-mix(in srgb, var(--synq-color-text) 8%, transparent);
1174
+ }
1175
+
1176
+ :where(.synq-account-panel-row-button[data-current]) {
1177
+ border-color: color-mix(in srgb, var(--synq-color-success) 45%, transparent);
1178
+ background: color-mix(in srgb, var(--synq-color-success) 6%, transparent);
1179
+ cursor: default;
1180
+ }
1181
+
1182
+ :where(.synq-account-panel-row-icon) {
1183
+ display: grid;
1184
+ place-items: center;
1185
+ width: 32px;
1186
+ height: 32px;
1187
+ overflow: hidden;
1188
+ border-radius: calc(var(--synq-radius-control) * 0.75);
1189
+ color: var(--synq-color-muted);
1190
+ }
1191
+
1192
+ :where(.synq-account-panel-row-text) {
1193
+ display: grid;
1194
+ min-width: 0;
1195
+ }
1196
+
1197
+ :where(.synq-account-panel-row-title) {
1198
+ font-size: var(--synq-text-base);
1199
+ font-weight: 600;
1200
+ }
1201
+
1202
+ :where(.synq-account-panel-row-line) {
1203
+ display: inline-flex;
1204
+ flex-wrap: wrap;
1205
+ align-items: center;
1206
+ gap: 6px;
1207
+ color: var(--synq-color-muted);
1208
+ font-size: var(--synq-text-sm);
1209
+ font-weight: 400;
1210
+ overflow-wrap: anywhere;
1211
+ }
1212
+
1213
+ :where(.synq-account-panel-showing, .synq-account-panel-ok) {
1214
+ display: inline-flex;
1215
+ align-items: center;
1216
+ gap: 6px;
1217
+ color: var(--synq-color-success);
1218
+ }
1219
+
1220
+ :where(.synq-account-panel-showing) {
1221
+ font-size: var(--synq-text-xs);
1222
+ font-weight: 600;
1223
+ white-space: nowrap;
1224
+ }
1225
+
1226
+ :where(.synq-account-panel-bad) {
1227
+ color: var(--synq-color-danger);
1228
+ }
1229
+
1230
+ /* The greeting: the moment, and what it says. */
1231
+
1232
+ :where(.synq-account-panel-welcome) {
1233
+ position: relative;
1234
+ display: grid;
1235
+ justify-items: center;
1236
+ gap: 10px;
1237
+ padding-top: 6px;
1238
+ text-align: center;
1239
+ }
1240
+
1241
+ :where(.synq-account-panel-welcome-close) {
1242
+ position: absolute;
1243
+ top: 0;
1244
+ right: 0;
1245
+ }
1246
+
1247
+ :where(.synq-account-panel-welcome-text) {
1248
+ display: grid;
1249
+ justify-items: center;
1250
+ gap: 6px;
1251
+ }
1252
+
1253
+ :where(.synq-account-panel-greeting) {
1254
+ margin: 6px 0 0;
1255
+ font-family: var(--synq-font-display);
1256
+ font-size: var(--synq-text-3xl);
1257
+ font-weight: 700;
1258
+ line-height: 1.1;
1259
+ text-wrap: balance;
1260
+ }
1261
+
1262
+ :where(.synq-account-panel-welcome) :where(.synq-account-panel-subtitle) {
1263
+ margin: 0;
1264
+ }
1265
+
1266
+ :where(.synq-account-panel-address, .synq-account-panel-mono) {
1267
+ color: var(--synq-color-muted);
1268
+ font-family: var(--synq-font-mono);
1269
+ font-size: var(--synq-text-sm);
1270
+ font-weight: 400;
1271
+ }
1272
+
1273
+ :where(.synq-account-panel-address) {
1274
+ margin: 0;
1275
+ }
1276
+
1277
+ /* Cards: the sections, and the app's own between them. */
1278
+
1279
+ :where(.synq-account-panel-cards) {
1280
+ display: grid;
1281
+ gap: 12px;
1282
+ }
1283
+
1284
+ :where(.synq-account-panel-dialog[data-view='onboarding'])
1285
+ :where(.synq-account-panel-cards)
1286
+ > :where(*) {
1287
+ animation: synq-rise 360ms cubic-bezier(0.22, 1, 0.36, 1) both;
1288
+ animation-delay: 600ms;
1289
+ }
1290
+
1291
+ :where(.synq-account-panel-dialog[data-view='onboarding'])
1292
+ :where(.synq-account-panel-cards)
1293
+ > :where(:nth-child(2)) {
1294
+ animation-delay: 640ms;
1295
+ }
1296
+
1297
+ :where(.synq-account-panel-dialog[data-view='onboarding'])
1298
+ :where(.synq-account-panel-cards)
1299
+ > :where(:nth-child(3)) {
1300
+ animation-delay: 680ms;
1301
+ }
1302
+
1303
+ :where(.synq-account-panel-dialog[data-view='onboarding'])
1304
+ :where(.synq-account-panel-cards)
1305
+ > :where(:nth-child(n + 4)) {
1306
+ animation-delay: 720ms;
1307
+ }
1308
+
1309
+ :where(.synq-account-panel-card) {
1310
+ display: grid;
1311
+ gap: 12px;
1312
+ margin: 0;
1313
+ padding: 16px;
1314
+ border: 1px solid var(--synq-color-border);
1315
+ border-radius: calc(var(--synq-radius) * 1.25);
1316
+ background: var(--synq-color-surface);
1317
+ }
1318
+
1319
+ :where(.synq-account-panel-card-title) {
1320
+ display: flex;
1321
+ align-items: center;
1322
+ gap: 8px;
1323
+ margin: 0;
1324
+ color: var(--synq-color-muted);
1325
+ font-size: var(--synq-text-sm);
1326
+ font-weight: 600;
1327
+ letter-spacing: 0.08em;
1328
+ line-height: 1.3;
1329
+ text-transform: uppercase;
1330
+ }
1331
+
1332
+ :where(.synq-account-panel-count) {
1333
+ padding: 0 8px;
1334
+ border-radius: 999px;
1335
+ background: color-mix(in srgb, var(--synq-color-text) 8%, transparent);
1336
+ color: var(--synq-color-text);
1337
+ letter-spacing: 0;
1338
+ }
1339
+
1340
+ :where(.synq-account-panel-username) {
1341
+ display: flex;
1342
+ align-items: center;
1343
+ min-height: 48px;
1344
+ padding-left: 14px;
1345
+ border: 1px solid var(--synq-color-border);
1346
+ border-radius: calc(var(--synq-radius-control) * 7 / 6);
1347
+ background: color-mix(in srgb, var(--synq-color-text) 3%, transparent);
1348
+ transition: border-color 150ms;
1349
+ }
1350
+
1351
+ :where(.synq-account-panel-username):focus-within {
1352
+ border-color: var(--synq-color-primary-ink);
1353
+ }
1354
+
1355
+ :where(.synq-account-panel-username-at) {
1356
+ color: var(--synq-color-muted);
1357
+ font-size: var(--synq-text-base);
1358
+ font-weight: 600;
1359
+ }
1360
+
1361
+ :where(.synq-account-panel-username-input) {
1362
+ flex: 1;
1363
+ min-width: 0;
1364
+ min-height: 46px;
1365
+ padding: 0 14px 0 2px;
1366
+ border: 0;
1367
+ background: none;
1368
+ color: var(--synq-color-text);
1369
+ font: inherit;
1370
+ font-size: var(--synq-text-base);
1371
+ outline: none;
1372
+ }
1373
+
1374
+ :where(.synq-account-panel-inline-save) {
1375
+ min-height: 44px;
1376
+ margin-right: 1px;
1377
+ padding: 0 16px;
1378
+ border: 0;
1379
+ border-radius: 999px;
1380
+ background: var(--synq-color-primary);
1381
+ color: var(--synq-color-primary-text);
1382
+ font: inherit;
1383
+ font-size: var(--synq-text-base);
1384
+ font-weight: 700;
1385
+ cursor: pointer;
1386
+ }
1387
+
1388
+ :where(.synq-account-panel-status) {
1389
+ display: grid;
1390
+ gap: 8px;
1391
+ min-height: 24px;
1392
+ color: var(--synq-color-muted);
1393
+ font-size: var(--synq-text-sm);
1394
+ }
1395
+
1396
+ :where(.synq-account-panel-chips) {
1397
+ display: flex;
1398
+ flex-wrap: wrap;
1399
+ gap: 6px;
1400
+ }
1401
+
1402
+ :where(.synq-account-panel-chip) {
1403
+ min-height: 44px;
1404
+ padding: 0 14px;
1405
+ border: 1px solid color-mix(in srgb, var(--synq-color-text) 12%, transparent);
1406
+ border-radius: 999px;
1407
+ background: none;
1408
+ color: var(--synq-color-text);
1409
+ font: inherit;
1410
+ font-size: var(--synq-text-sm);
1411
+ font-weight: 600;
1412
+ cursor: pointer;
1413
+ }
1414
+
1415
+ :where(.synq-account-panel-field) {
1416
+ display: grid;
1417
+ gap: 6px;
1418
+ }
1419
+
1420
+ :where(.synq-account-panel-label) {
1421
+ font-size: var(--synq-text-sm);
1422
+ font-weight: 600;
1423
+ }
1424
+
1425
+ :where(.synq-account-panel-input) {
1426
+ box-sizing: border-box;
1427
+ width: 100%;
1428
+ min-height: 48px;
1429
+ padding: 0 14px;
1430
+ border: 1px solid var(--synq-color-border);
1431
+ border-radius: calc(var(--synq-radius-control) * 7 / 6);
1432
+ background: color-mix(in srgb, var(--synq-color-text) 3%, transparent);
1433
+ color: var(--synq-color-text);
1434
+ font: inherit;
1435
+ font-size: var(--synq-text-base);
1436
+ }
1437
+
1438
+ :where(.synq-account-panel-actions) {
1439
+ display: flex;
1440
+ flex-wrap: wrap;
1441
+ align-items: center;
1442
+ gap: 8px;
1443
+ }
1444
+
1445
+ :where(
1446
+ .synq-account-panel-primary,
1447
+ .synq-account-panel-secondary,
1448
+ .synq-account-panel-small-button
1449
+ ) {
1450
+ display: inline-flex;
1451
+ align-items: center;
1452
+ justify-content: center;
1453
+ min-width: 44px;
1454
+ min-height: 44px;
1455
+ padding: 0 16px;
1456
+ border-radius: 999px;
1457
+ font: inherit;
1458
+ font-size: var(--synq-text-base);
1459
+ font-weight: 600;
1460
+ text-decoration: none;
1461
+ white-space: nowrap;
1462
+ cursor: pointer;
1463
+ }
1464
+
1465
+ :where(.synq-account-panel-primary) {
1466
+ min-height: 48px;
1467
+ padding: 0 20px;
1468
+ border: 0;
1469
+ background: var(--synq-color-primary);
1470
+ color: var(--synq-color-primary-text);
1471
+ font-size: var(--synq-text-base);
1472
+ font-weight: 700;
1473
+ }
1474
+
1475
+ :where(.synq-account-panel-dialog[data-layout='popover']) :where(.synq-account-panel-primary) {
1476
+ min-height: 44px;
1477
+ }
1478
+
1479
+ :where(.synq-account-panel-primary):hover:not(:disabled) {
1480
+ background: var(--synq-color-primary-hover);
1481
+ }
1482
+
1483
+ :where(.synq-account-panel-secondary, .synq-account-panel-small-button) {
1484
+ border: 1px solid color-mix(in srgb, var(--synq-color-text) 14%, transparent);
1485
+ background: color-mix(in srgb, var(--synq-color-text) 4%, transparent);
1486
+ color: var(--synq-color-text);
1487
+ }
1488
+
1489
+ :where(.synq-account-panel-secondary, .synq-account-panel-small-button):hover:not(:disabled) {
1490
+ background: color-mix(in srgb, var(--synq-color-text) 9%, transparent);
1491
+ }
1492
+
1493
+ :where(.synq-account-panel-sign-out, .synq-account-panel-danger) {
1494
+ border-color: color-mix(in srgb, var(--synq-color-danger) 50%, transparent);
1495
+ background: none;
1496
+ color: var(--synq-color-danger);
1497
+ }
1498
+
1499
+ :where(.synq-account-panel-nudge) {
1500
+ display: grid;
1501
+ grid-template-columns: minmax(0, 1fr) auto;
1502
+ align-items: center;
1503
+ gap: 10px;
1504
+ padding: 12px;
1505
+ border: 1px solid color-mix(in srgb, var(--synq-moment-3) 22%, transparent);
1506
+ border-radius: calc(var(--synq-radius-control) * 7 / 6);
1507
+ background: color-mix(in srgb, var(--synq-moment-3) 7%, transparent);
1508
+ }
1509
+
1510
+ :where(.synq-account-panel-nudge) > :where(p) {
1511
+ margin: 0;
1512
+ font-size: var(--synq-text-base);
1513
+ }
1514
+
1515
+ :where(.synq-account-panel-rows) {
1516
+ display: grid;
1517
+ margin: 0;
1518
+ padding: 0;
1519
+ list-style: none;
1520
+ }
1521
+
1522
+ :where(
1523
+ .synq-account-panel-wallet + .synq-account-panel-wallet,
1524
+ .synq-account-panel-link-row + .synq-account-panel-link-row
1525
+ ) {
1526
+ border-top: 1px solid color-mix(in srgb, var(--synq-color-text) 6%, transparent);
1527
+ }
1528
+
1529
+ :where(.synq-account-panel-wallet-row) {
1530
+ display: grid;
1531
+ grid-template-columns: 32px minmax(0, 1fr) auto;
1532
+ align-items: center;
1533
+ gap: 12px;
1534
+ min-height: 56px;
1535
+ }
1536
+
1537
+ :where(.synq-account-panel-wallet-icon) {
1538
+ display: grid;
1539
+ place-items: center;
1540
+ width: 32px;
1541
+ height: 32px;
1542
+ overflow: hidden;
1543
+ border-radius: calc(var(--synq-radius-control) * 0.75);
1544
+ background: color-mix(in srgb, var(--synq-color-text) 8%, transparent);
1545
+ color: var(--synq-color-muted);
1546
+ }
1547
+
1548
+ :where(.synq-account-panel-wallet-icon) > :where(img) {
1549
+ width: 32px;
1550
+ height: 32px;
1551
+ }
1552
+
1553
+ :where(.synq-account-panel-wallet-text) {
1554
+ display: grid;
1555
+ gap: 4px;
1556
+ min-width: 0;
1557
+ padding: 8px 0;
1558
+ }
1559
+
1560
+ :where(.synq-account-panel-wallet-name) {
1561
+ font-size: var(--synq-text-base);
1562
+ font-weight: 600;
1563
+ overflow-wrap: anywhere;
1564
+ }
1565
+
1566
+ :where(.synq-account-panel-tags) {
1567
+ display: flex;
1568
+ flex-wrap: wrap;
1569
+ gap: 4px;
1570
+ }
1571
+
1572
+ :where(.synq-account-panel-tag) {
1573
+ display: inline-flex;
1574
+ align-items: center;
1575
+ gap: 5px;
1576
+ padding: 1px 8px;
1577
+ border-radius: 999px;
1578
+ background: color-mix(in srgb, var(--synq-color-text) 6%, transparent);
1579
+ color: var(--synq-color-muted);
1580
+ font-size: var(--synq-text-sm);
1581
+ font-weight: 600;
1582
+ line-height: 1.3;
1583
+ white-space: nowrap;
1584
+ }
1585
+
1586
+ :where(.synq-account-panel-tag-connected) > :where(i) {
1587
+ width: 6px;
1588
+ height: 6px;
1589
+ border-radius: 50%;
1590
+ background: var(--synq-color-success);
1591
+ }
1592
+
1593
+ :where(.synq-account-panel-wallet-extra) {
1594
+ color: var(--synq-color-muted);
1595
+ font-size: var(--synq-text-sm);
1596
+ }
1597
+
1598
+ :where(.synq-account-panel-wallet-actions) {
1599
+ display: flex;
1600
+ align-items: center;
1601
+ gap: 4px;
1602
+ }
1603
+
1604
+ :where(.synq-account-panel-menu) {
1605
+ display: grid;
1606
+ margin: 0 0 12px 44px;
1607
+ overflow: hidden;
1608
+ border: 1px solid var(--synq-color-border);
1609
+ border-radius: calc(var(--synq-radius-control) * 7 / 6);
1610
+ }
1611
+
1612
+ :where(.synq-account-panel-menu-item) {
1613
+ min-height: 44px;
1614
+ padding: 0 14px;
1615
+ border: 0;
1616
+ border-top: 1px solid color-mix(in srgb, var(--synq-color-text) 6%, transparent);
1617
+ background: none;
1618
+ color: var(--synq-color-text);
1619
+ font: inherit;
1620
+ font-size: var(--synq-text-base);
1621
+ text-align: left;
1622
+ cursor: pointer;
1623
+ }
1624
+
1625
+ :where(.synq-account-panel-menu-item):first-child {
1626
+ border-top: 0;
1627
+ }
1628
+
1629
+ :where(.synq-account-panel-menu-item):hover:not(:disabled) {
1630
+ background: color-mix(in srgb, var(--synq-color-text) 5%, transparent);
1631
+ }
1632
+
1633
+ :where(.synq-account-panel-menu-item):disabled {
1634
+ color: var(--synq-color-muted);
1635
+ cursor: default;
1636
+ }
1637
+
1638
+ :where(.synq-account-panel-menu-danger) {
1639
+ color: var(--synq-color-danger);
1640
+ }
1641
+
1642
+ :where(.synq-account-panel-menu) > :where(.synq-account-panel-note) {
1643
+ padding: 8px 14px 12px;
1644
+ }
1645
+
1646
+ :where(.synq-account-panel-inline-form, .synq-account-panel-confirm) {
1647
+ display: grid;
1648
+ gap: 8px;
1649
+ padding: 0 0 12px 44px;
1650
+ }
1651
+
1652
+ :where(.synq-account-panel-confirm) > :where(p) {
1653
+ margin: 0;
1654
+ font-size: var(--synq-text-base);
1655
+ }
1656
+
1657
+ :where(.synq-account-panel-add) {
1658
+ display: flex;
1659
+ align-items: center;
1660
+ gap: 10px;
1661
+ width: 100%;
1662
+ min-height: 48px;
1663
+ padding: 0 14px;
1664
+ border: 1px dashed color-mix(in srgb, var(--synq-color-text) 18%, transparent);
1665
+ border-radius: calc(var(--synq-radius-control) * 7 / 6);
1666
+ background: none;
1667
+ color: var(--synq-color-text);
1668
+ font: inherit;
1669
+ font-size: var(--synq-text-base);
1670
+ font-weight: 600;
1671
+ cursor: pointer;
1672
+ }
1673
+
1674
+ :where(.synq-account-panel-add):hover:not(:disabled) {
1675
+ background: color-mix(in srgb, var(--synq-color-text) 4%, transparent);
1676
+ }
1677
+
1678
+ :where(.synq-account-panel-link-row) {
1679
+ display: grid;
1680
+ grid-template-columns: 40px minmax(0, 1fr) auto;
1681
+ align-items: center;
1682
+ gap: 12px;
1683
+ min-height: 64px;
1684
+ }
1685
+
1686
+ :where(.synq-account-panel-link-tile) {
1687
+ display: grid;
1688
+ place-items: center;
1689
+ width: 40px;
1690
+ height: 40px;
1691
+ border-radius: var(--synq-radius-control);
1692
+ background: color-mix(in srgb, var(--synq-color-text) 8%, transparent);
1693
+ color: var(--synq-color-text);
1694
+ }
1695
+
1696
+ :where(.synq-account-panel-row-problem) {
1697
+ grid-column: 1 / -1;
1698
+ padding-bottom: 12px;
1699
+ }
1700
+
1701
+ :where(.synq-account-panel-profile-head) {
1702
+ display: grid;
1703
+ grid-template-columns: 56px minmax(0, 1fr) auto 44px;
1704
+ align-items: center;
1705
+ gap: 12px;
1706
+ }
1707
+
1708
+ :where(.synq-account-panel-picture-button) {
1709
+ position: relative;
1710
+ display: grid;
1711
+ place-items: center;
1712
+ width: 56px;
1713
+ height: 56px;
1714
+ padding: 0;
1715
+ border: 0;
1716
+ border-radius: 50%;
1717
+ background: none;
1718
+ cursor: pointer;
1719
+ }
1720
+
1721
+ :where(.synq-account-panel-picture-badge) {
1722
+ position: absolute;
1723
+ right: -3px;
1724
+ bottom: -3px;
1725
+ display: grid;
1726
+ place-items: center;
1727
+ width: 24px;
1728
+ height: 24px;
1729
+ border-radius: 50%;
1730
+ background: var(--synq-color-surface);
1731
+ box-shadow: 0 0 0 2px var(--synq-color-background);
1732
+ color: var(--synq-color-text);
1733
+ }
1734
+
1735
+ :where(.synq-account-panel-profile-text) {
1736
+ min-width: 0;
1737
+ }
1738
+
1739
+ :where(.synq-account-panel-profile-name) {
1740
+ margin: 0;
1741
+ font-size: var(--synq-text-lg);
1742
+ font-weight: 600;
1743
+ line-height: 1.25;
1744
+ overflow-wrap: anywhere;
1745
+ }
1746
+
1747
+ :where(.synq-account-panel-profile-text) :where(.synq-account-panel-subtitle) {
1748
+ margin: 0;
1749
+ overflow: hidden;
1750
+ text-overflow: ellipsis;
1751
+ white-space: nowrap;
1752
+ }
1753
+
1754
+ :where(.synq-account-panel-picture-now) {
1755
+ display: grid;
1756
+ justify-items: center;
1757
+ gap: 10px;
1758
+ padding: 2px 0 4px;
1759
+ text-align: center;
1760
+ }
1761
+
1762
+ /* The forms an in-place sign-in borrows from <SignInForm>, at the panel's sizes. */
1763
+ :where(.synq-account-panel-dialog) :where(.synq-input) {
1764
+ min-height: 48px;
1765
+ font-size: var(--synq-text-base);
1766
+ }
1767
+
1768
+ :where(.synq-account-panel-dialog) :where(.synq-button) {
1769
+ min-height: 44px;
1770
+ }
1771
+
1772
+ :where(.synq-account-panel-dialog) :where(.synq-label) {
1773
+ font-size: var(--synq-text-sm);
1774
+ }
1775
+
1776
+ :where(
1777
+ .synq-account-panel-trigger,
1778
+ .synq-account-panel-avatar-trigger,
1779
+ .synq-account-panel-icon-button,
1780
+ .synq-account-panel-pill,
1781
+ .synq-account-panel-text-button,
1782
+ .synq-account-panel-row-button,
1783
+ .synq-account-panel-chip,
1784
+ .synq-account-panel-inline-save,
1785
+ .synq-account-panel-primary,
1786
+ .synq-account-panel-secondary,
1787
+ .synq-account-panel-small-button,
1788
+ .synq-account-panel-menu-item,
1789
+ .synq-account-panel-add,
1790
+ .synq-account-panel-picture-button,
1791
+ .synq-account-panel-input
1792
+ ):focus-visible {
1793
+ outline: 2px solid var(--synq-color-primary-ink);
1794
+ outline-offset: 2px;
1795
+ }
1796
+
1797
+ /*
1798
+ * <AvatarMoment>: a 2px ring 4px outside the avatar, a conic sweep of the
1799
+ * three moment colors, and embers off its upper arc.
1800
+ */
1801
+
1802
+ @property --synq-moment-sweep {
1803
+ syntax: '<angle>';
1804
+ inherits: false;
1805
+ initial-value: 360deg;
1806
+ }
1807
+
1808
+ :where(.synq-moment) {
1809
+ position: relative;
1810
+ display: inline-grid;
1811
+ flex: none;
1812
+ place-items: center;
1813
+ width: var(--synq-moment-size, 64px);
1814
+ height: var(--synq-moment-size, 64px);
1815
+ }
1816
+
1817
+ :where(.synq-moment-ring) {
1818
+ position: absolute;
1819
+ inset: -4px;
1820
+ border-radius: 50%;
1821
+ background: conic-gradient(
1822
+ from 210deg,
1823
+ var(--synq-moment-1),
1824
+ var(--synq-moment-2),
1825
+ var(--synq-moment-3),
1826
+ var(--synq-moment-1)
1827
+ );
1828
+ mask:
1829
+ radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px)),
1830
+ conic-gradient(#000 var(--synq-moment-sweep, 360deg), transparent 0);
1831
+ mask-composite: intersect;
1832
+ pointer-events: none;
1833
+ }
1834
+
1835
+ :where(.synq-moment-ring[data-state='waiting']) {
1836
+ --synq-moment-sweep: 0deg;
1837
+ }
1838
+
1839
+ :where(.synq-moment-ring[data-state='play']) {
1840
+ animation: synq-moment-sweep 520ms cubic-bezier(0.33, 1, 0.68, 1) both;
1841
+ }
1842
+
1843
+ :where(.synq-moment-embers) {
1844
+ position: absolute;
1845
+ top: 50%;
1846
+ left: 50%;
1847
+ width: 0;
1848
+ height: 0;
1849
+ pointer-events: none;
1850
+ }
1851
+
1852
+ :where(.synq-moment-ember) {
1853
+ position: absolute;
1854
+ top: var(--synq-ember-y);
1855
+ left: var(--synq-ember-x);
1856
+ width: var(--synq-ember-size);
1857
+ height: var(--synq-ember-size);
1858
+ border-radius: 50%;
1859
+ background: var(--synq-ember-color);
1860
+ box-shadow: 0 0 6px var(--synq-ember-color);
1861
+ opacity: 0;
1862
+ animation: synq-ember 620ms ease-out var(--synq-ember-delay) forwards;
1863
+ }
1864
+
1865
+ @keyframes synq-moment-sweep {
1866
+ from {
1867
+ --synq-moment-sweep: 0deg;
1868
+ }
1869
+ to {
1870
+ --synq-moment-sweep: 360deg;
1871
+ }
1872
+ }
1873
+
1874
+ @keyframes synq-ember {
1875
+ from {
1876
+ opacity: 1;
1877
+ transform: translate(0, 0) scale(1);
1878
+ }
1879
+ to {
1880
+ opacity: 0;
1881
+ transform: translate(var(--synq-ember-dx), var(--synq-ember-dy)) scale(0.4);
1882
+ }
1883
+ }
1884
+
1885
+ @keyframes synq-dot {
1886
+ 50% {
1887
+ opacity: 1;
1888
+ }
1889
+ }
1890
+
1891
+ @keyframes synq-rise {
1892
+ from {
1893
+ opacity: 0;
1894
+ transform: translateY(8px);
1895
+ }
1896
+ }
1897
+
1898
+ @keyframes synq-fade-in {
1899
+ from {
1900
+ opacity: 0;
1901
+ }
1902
+ }
1903
+
1904
+ @keyframes synq-fade-out {
1905
+ to {
1906
+ opacity: 0;
1907
+ }
1908
+ }
1909
+
1910
+ @media (prefers-reduced-motion: reduce) {
1911
+ :where(.synq *) {
1912
+ transition: none;
1913
+ }
1914
+
1915
+ :where(.synq-account-panel-dots) > :where(i) {
1916
+ animation: none;
1917
+ opacity: 1;
1918
+ }
1919
+
1920
+ :where(.synq-account-panel-face) {
1921
+ animation: none;
1922
+ }
1923
+
1924
+ :where(.synq-account-panel-dialog[data-view='onboarding'])
1925
+ :where(.synq-account-panel-cards)
1926
+ > :where(*) {
1927
+ animation: none;
1928
+ }
1929
+
1930
+ :where(.synq-account-panel-backdrop) {
1931
+ animation-duration: 120ms;
1932
+ }
1933
+
1934
+ :where(.synq-moment-ring) {
1935
+ animation: none;
1936
+ }
1937
+
1938
+ :where(.synq-moment-embers) {
1939
+ display: none;
1940
+ }
1941
+ }
1942
+
1943
+ /*
1944
+ * Off (AERO-2737): every button reads as off and stays legible, whatever
1945
+ * it was (the primary's teal, a danger red, an outline): a flat grey with
1946
+ * its own edge and words, from --synq-color-disabled*, never the colour
1947
+ * faded, which on a dark surface turned the primary into a muddy teal with
1948
+ * dark words that looked broken. Last in the file, so it wins over each
1949
+ * variant, all inside :where().
1950
+ */
1951
+ :where(
1952
+ .synq-sign-in-button,
1953
+ .synq-button,
1954
+ .synq-icon-button,
1955
+ .synq-account-panel-pill,
1956
+ .synq-account-panel-row-button,
1957
+ .synq-account-panel-primary,
1958
+ .synq-account-panel-secondary,
1959
+ .synq-account-panel-small-button,
1960
+ .synq-account-panel-add
1961
+ ):disabled {
1962
+ border-color: var(--synq-color-disabled-border);
1963
+ /* Its edge, also where the button draws no border of its own. */
1964
+ box-shadow: inset 0 0 0 1px var(--synq-color-disabled-border);
1965
+ background: var(--synq-color-disabled);
1966
+ color: var(--synq-color-disabled-text);
1967
+ opacity: 1;
1968
+ filter: none;
1969
+ cursor: not-allowed;
1970
+ }