@dakaio/domainscout-mcp 1.3.0 → 1.5.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/README.md +29 -1
- package/dist/constants.js +25 -0
- package/dist/constants.js.map +1 -1
- package/dist/messages/tool.js +8 -1
- package/dist/messages/tool.js.map +1 -1
- package/dist/server/results-ui.js +71 -0
- package/dist/server/results-ui.js.map +1 -0
- package/dist/server/schemas.js +3 -1
- package/dist/server/schemas.js.map +1 -1
- package/dist/server/server.js +22 -6
- package/dist/server/server.js.map +1 -1
- package/dist/server/tool-list.js +42 -0
- package/dist/server/tool-list.js.map +1 -0
- package/package.json +2 -1
- package/ui/logo.png +0 -0
- package/ui/results.css +1452 -0
- package/ui/results.html +18 -0
- package/ui/results.js +2066 -0
package/ui/results.css
ADDED
|
@@ -0,0 +1,1452 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The results panel, as on the landing page (domainscout.dakaio.com): the panel, a summary line,
|
|
3
|
+
then the free domains as a list, cards or a price table. Dark like the landing page by default,
|
|
4
|
+
light when the host or the visitor picks light.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
Dark: the landing page's colors as they come out on screen. There the panel is 4% white over
|
|
9
|
+
the page's #00030a; here it sits on the host's own background, so the result is set solid:
|
|
10
|
+
#0a0d14, with the landing page's 8% white border and 6% white dividers on top of it.
|
|
11
|
+
*/
|
|
12
|
+
:root {
|
|
13
|
+
--ds-panel: #0a0d14;
|
|
14
|
+
--ds-panel-border: #1e2027;
|
|
15
|
+
--ds-raised: #12151c;
|
|
16
|
+
--ds-tip: #181b21;
|
|
17
|
+
--ds-divider: #181b21;
|
|
18
|
+
--ds-heading: #ffffff;
|
|
19
|
+
--ds-body: #c7c9ea;
|
|
20
|
+
--ds-muted: #a3a6d1;
|
|
21
|
+
--ds-cyan: #3cc8ff;
|
|
22
|
+
--ds-violet: #bd5fff;
|
|
23
|
+
--ds-teal: #11edda;
|
|
24
|
+
--ds-amber: #facc15;
|
|
25
|
+
--ds-orange: #fb923c;
|
|
26
|
+
--ds-accent-fill: rgba(60, 200, 255, 0.14);
|
|
27
|
+
--ds-accent-border: rgba(60, 200, 255, 0.45);
|
|
28
|
+
--ds-amber-fill: rgba(250, 204, 21, 0.12);
|
|
29
|
+
--ds-thumb-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
|
|
30
|
+
--ds-font: var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
|
|
31
|
+
--ds-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;
|
|
32
|
+
/* Corners: the panel, the cards and table frame, controls, the toolbar's options, pills. */
|
|
33
|
+
--ds-radius: 16px;
|
|
34
|
+
--ds-radius-card: 12px;
|
|
35
|
+
--ds-radius-control: 8px;
|
|
36
|
+
--ds-radius-option: 6px;
|
|
37
|
+
--ds-radius-pill: 999px;
|
|
38
|
+
/* Sizes: the smallest icons, a card's narrowest width, a touch target's least height. */
|
|
39
|
+
--ds-icon-small: 12px;
|
|
40
|
+
--ds-card-min: 250px;
|
|
41
|
+
--ds-touch-target: 32px;
|
|
42
|
+
/* How quickly hover and open states change. */
|
|
43
|
+
--ds-quick: 0.15s ease;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
Light. The cyan is darker than the landing page's so that text in it keeps a 4.5:1 contrast on
|
|
48
|
+
white and on the tinted hover background alike.
|
|
49
|
+
*/
|
|
50
|
+
:root[data-theme='light'] {
|
|
51
|
+
--ds-panel: #ffffff;
|
|
52
|
+
--ds-panel-border: rgba(15, 18, 40, 0.1);
|
|
53
|
+
--ds-raised: rgba(15, 18, 40, 0.045);
|
|
54
|
+
--ds-tip: #ffffff;
|
|
55
|
+
--ds-divider: rgba(15, 18, 40, 0.08);
|
|
56
|
+
--ds-heading: #0f1228;
|
|
57
|
+
--ds-body: #3b3f63;
|
|
58
|
+
--ds-muted: #5e6288;
|
|
59
|
+
--ds-cyan: #08679a;
|
|
60
|
+
--ds-violet: #7b2fc9;
|
|
61
|
+
--ds-teal: #077a70;
|
|
62
|
+
--ds-amber: #8a6500;
|
|
63
|
+
--ds-orange: #b4520f;
|
|
64
|
+
--ds-accent-fill: rgba(8, 103, 154, 0.09);
|
|
65
|
+
--ds-accent-border: rgba(8, 103, 154, 0.45);
|
|
66
|
+
--ds-amber-fill: rgba(138, 101, 0, 0.08);
|
|
67
|
+
--ds-thumb-shadow: 0 1px 2px rgba(15, 18, 40, 0.12);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
* {
|
|
71
|
+
box-sizing: border-box;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
The host sets the frame's height from the page's own, so the page never scrolls: a scrollbar
|
|
76
|
+
that came and went while the frame caught up would shift everything sideways for a moment.
|
|
77
|
+
*/
|
|
78
|
+
html,
|
|
79
|
+
body {
|
|
80
|
+
margin: 0;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
background: transparent;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
body {
|
|
86
|
+
padding: 1px;
|
|
87
|
+
color: var(--ds-body);
|
|
88
|
+
font: 14px / 1.5 var(--ds-font);
|
|
89
|
+
-webkit-font-smoothing: antialiased;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
A host that caps the frame's height: then the page scrolls, with room for the scrollbar kept
|
|
94
|
+
from the start so nothing moves when it appears.
|
|
95
|
+
*/
|
|
96
|
+
html.is-capped {
|
|
97
|
+
overflow-y: auto;
|
|
98
|
+
scrollbar-gutter: stable;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
html.is-capped body {
|
|
102
|
+
overflow: visible;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Hidden until it has the host's theme, so it doesn't flash in the wrong one. */
|
|
106
|
+
#app {
|
|
107
|
+
visibility: hidden;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.is-ready #app {
|
|
111
|
+
visibility: visible;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
button {
|
|
115
|
+
font: inherit;
|
|
116
|
+
color: inherit;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
button:focus-visible,
|
|
121
|
+
input:focus-visible {
|
|
122
|
+
outline: 2px solid var(--ds-cyan);
|
|
123
|
+
outline-offset: 2px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.icon {
|
|
127
|
+
display: block;
|
|
128
|
+
width: 16px;
|
|
129
|
+
height: 16px;
|
|
130
|
+
fill: none;
|
|
131
|
+
stroke: currentColor;
|
|
132
|
+
stroke-width: 1.75;
|
|
133
|
+
stroke-linecap: round;
|
|
134
|
+
stroke-linejoin: round;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Icons inside controls: smaller than the toolbar's. */
|
|
138
|
+
.registrar .icon,
|
|
139
|
+
.matrix__chip .icon {
|
|
140
|
+
width: var(--ds-icon-small);
|
|
141
|
+
height: var(--ds-icon-small);
|
|
142
|
+
color: var(--ds-muted);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.toggle .icon {
|
|
146
|
+
width: var(--ds-icon-small);
|
|
147
|
+
height: var(--ds-icon-small);
|
|
148
|
+
transition: transform var(--ds-quick);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.chip-button .icon {
|
|
152
|
+
width: var(--ds-icon-small);
|
|
153
|
+
height: var(--ds-icon-small);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.sort .icon {
|
|
157
|
+
width: var(--ds-icon-small);
|
|
158
|
+
height: var(--ds-icon-small);
|
|
159
|
+
opacity: 0.6;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.action .icon {
|
|
163
|
+
width: 14px;
|
|
164
|
+
height: 14px;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.shortlist__remove .icon {
|
|
168
|
+
width: var(--ds-icon-small);
|
|
169
|
+
height: var(--ds-icon-small);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ── Panel, header and status ─────────────────────────────────────────────────────────────── */
|
|
173
|
+
|
|
174
|
+
.panel {
|
|
175
|
+
padding: 20px 24px;
|
|
176
|
+
border: 1px solid var(--ds-panel-border);
|
|
177
|
+
border-radius: var(--ds-radius);
|
|
178
|
+
background: var(--ds-panel);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.header {
|
|
182
|
+
display: flex;
|
|
183
|
+
flex-wrap: wrap;
|
|
184
|
+
align-items: center;
|
|
185
|
+
justify-content: space-between;
|
|
186
|
+
gap: 8px 12px;
|
|
187
|
+
margin-bottom: 8px;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* The logo, "DOMAINSCOUT" and "check_domains", as above the results on the landing page. */
|
|
191
|
+
.tool {
|
|
192
|
+
display: inline-flex;
|
|
193
|
+
align-items: center;
|
|
194
|
+
margin: 0;
|
|
195
|
+
font-family: var(--ds-mono);
|
|
196
|
+
font-size: 13px;
|
|
197
|
+
color: var(--ds-cyan);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.tool__logo {
|
|
201
|
+
flex: none;
|
|
202
|
+
margin-right: 8px;
|
|
203
|
+
border-radius: var(--ds-radius-option);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.tool__who {
|
|
207
|
+
margin-right: 8px;
|
|
208
|
+
font-family: var(--ds-font);
|
|
209
|
+
font-size: 12px;
|
|
210
|
+
font-weight: 600;
|
|
211
|
+
letter-spacing: 0.08em;
|
|
212
|
+
text-transform: uppercase;
|
|
213
|
+
color: var(--ds-muted);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.toolbar {
|
|
217
|
+
display: flex;
|
|
218
|
+
gap: 8px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* A button group: icons only, the pressed option a raised thumb. */
|
|
222
|
+
.segmented {
|
|
223
|
+
display: inline-flex;
|
|
224
|
+
padding: 2px;
|
|
225
|
+
border: 1px solid var(--ds-panel-border);
|
|
226
|
+
border-radius: var(--ds-radius-control);
|
|
227
|
+
background: var(--ds-raised);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.segmented[hidden] {
|
|
231
|
+
display: none;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.segmented__option {
|
|
235
|
+
display: grid;
|
|
236
|
+
place-items: center;
|
|
237
|
+
width: 28px;
|
|
238
|
+
height: 24px;
|
|
239
|
+
padding: 0;
|
|
240
|
+
border: 1px solid transparent;
|
|
241
|
+
border-radius: var(--ds-radius-option);
|
|
242
|
+
background: transparent;
|
|
243
|
+
color: var(--ds-muted);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.segmented__option:hover {
|
|
247
|
+
color: var(--ds-heading);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.segmented__option[aria-pressed='true'] {
|
|
251
|
+
border-color: var(--ds-panel-border);
|
|
252
|
+
background: var(--ds-panel);
|
|
253
|
+
color: var(--ds-cyan);
|
|
254
|
+
box-shadow: var(--ds-thumb-shadow);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* "Regenerate" on the left; the TLD filter and the toolbar on the right. They stack when the
|
|
258
|
+
line runs out, and the right group stays right while the button is away. */
|
|
259
|
+
.controls {
|
|
260
|
+
display: flex;
|
|
261
|
+
flex-wrap: wrap;
|
|
262
|
+
align-items: center;
|
|
263
|
+
justify-content: space-between;
|
|
264
|
+
gap: 6px 12px;
|
|
265
|
+
margin: 0 0 8px;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.controls__end {
|
|
269
|
+
display: flex;
|
|
270
|
+
flex-wrap: wrap;
|
|
271
|
+
align-items: center;
|
|
272
|
+
justify-content: flex-end;
|
|
273
|
+
gap: 6px 12px;
|
|
274
|
+
margin-left: auto;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.controls__action {
|
|
278
|
+
display: inline-flex;
|
|
279
|
+
flex-wrap: wrap;
|
|
280
|
+
gap: 6px;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* What a button does, under it on hover or keyboard focus: after a moment, so passing over the
|
|
284
|
+
buttons does not flash tips. Above the table, never pushing anything. */
|
|
285
|
+
.controls__action [data-tip] {
|
|
286
|
+
position: relative;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.controls__action [data-tip]::after {
|
|
290
|
+
content: attr(data-tip);
|
|
291
|
+
position: absolute;
|
|
292
|
+
top: calc(100% + 6px);
|
|
293
|
+
left: 0;
|
|
294
|
+
z-index: 2;
|
|
295
|
+
width: max-content;
|
|
296
|
+
max-width: 260px;
|
|
297
|
+
padding: 6px 10px;
|
|
298
|
+
border: 1px solid var(--ds-panel-border);
|
|
299
|
+
border-radius: var(--ds-radius-control);
|
|
300
|
+
background: var(--ds-tip);
|
|
301
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
|
|
302
|
+
color: var(--ds-body);
|
|
303
|
+
font-size: 12px;
|
|
304
|
+
font-weight: 400;
|
|
305
|
+
line-height: 1.45;
|
|
306
|
+
white-space: normal;
|
|
307
|
+
text-align: left;
|
|
308
|
+
pointer-events: none;
|
|
309
|
+
opacity: 0;
|
|
310
|
+
visibility: hidden;
|
|
311
|
+
transition:
|
|
312
|
+
opacity var(--ds-quick),
|
|
313
|
+
visibility var(--ds-quick);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.controls__action [data-tip]:hover::after,
|
|
317
|
+
.controls__action [data-tip]:focus-visible::after {
|
|
318
|
+
opacity: 1;
|
|
319
|
+
visibility: visible;
|
|
320
|
+
transition-delay: 400ms;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* The settings for the next batch, open under the controls: the TLDs, the size, the total. */
|
|
324
|
+
.settings {
|
|
325
|
+
display: grid;
|
|
326
|
+
gap: 12px;
|
|
327
|
+
margin: 0 0 8px;
|
|
328
|
+
padding: 12px;
|
|
329
|
+
border: 1px solid var(--ds-panel-border);
|
|
330
|
+
border-radius: var(--ds-radius);
|
|
331
|
+
background: var(--ds-raised);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.settings[hidden] {
|
|
335
|
+
display: none;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.settings__row {
|
|
339
|
+
display: grid;
|
|
340
|
+
gap: 6px;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.settings__name {
|
|
344
|
+
margin: 0;
|
|
345
|
+
color: var(--ds-muted);
|
|
346
|
+
font-size: 11px;
|
|
347
|
+
font-weight: 600;
|
|
348
|
+
letter-spacing: 0.08em;
|
|
349
|
+
text-transform: uppercase;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.settings__options {
|
|
353
|
+
display: flex;
|
|
354
|
+
flex-wrap: wrap;
|
|
355
|
+
align-items: center;
|
|
356
|
+
gap: 6px;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.settings__input {
|
|
360
|
+
width: 120px;
|
|
361
|
+
padding: 3px 10px;
|
|
362
|
+
border: 1px dashed var(--ds-panel-border);
|
|
363
|
+
border-radius: var(--ds-radius-pill);
|
|
364
|
+
background: transparent;
|
|
365
|
+
color: var(--ds-body);
|
|
366
|
+
font: inherit;
|
|
367
|
+
font-size: 12px;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.settings__input:focus {
|
|
371
|
+
border-style: solid;
|
|
372
|
+
border-color: var(--ds-cyan);
|
|
373
|
+
outline: none;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.settings__input[aria-invalid='true'] {
|
|
377
|
+
border-color: var(--ds-amber);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.settings__footer {
|
|
381
|
+
display: flex;
|
|
382
|
+
flex-wrap: wrap;
|
|
383
|
+
align-items: center;
|
|
384
|
+
justify-content: space-between;
|
|
385
|
+
gap: 8px 12px;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.settings__summary {
|
|
389
|
+
margin: 0;
|
|
390
|
+
color: var(--ds-muted);
|
|
391
|
+
font-size: 12px;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/* The summary, or while checking the progress, or an error: the one line read out on change. */
|
|
395
|
+
.summary {
|
|
396
|
+
margin: 0;
|
|
397
|
+
color: var(--ds-body);
|
|
398
|
+
font-size: 14px;
|
|
399
|
+
font-weight: 600;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* The result's summary: the total in quiet text, then the counts, each with its colored dot. */
|
|
403
|
+
.summary--result {
|
|
404
|
+
display: flex;
|
|
405
|
+
flex-wrap: wrap;
|
|
406
|
+
align-items: baseline;
|
|
407
|
+
gap: 4px 12px;
|
|
408
|
+
font-weight: 400;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.summary__lead {
|
|
412
|
+
color: var(--ds-muted);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.stat {
|
|
416
|
+
display: inline-flex;
|
|
417
|
+
align-items: baseline;
|
|
418
|
+
gap: 4px;
|
|
419
|
+
color: var(--ds-muted);
|
|
420
|
+
white-space: nowrap;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.stat__dot {
|
|
424
|
+
align-self: center;
|
|
425
|
+
width: 7px;
|
|
426
|
+
height: 7px;
|
|
427
|
+
border-radius: var(--ds-radius-pill);
|
|
428
|
+
background: currentColor;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.stat__value {
|
|
432
|
+
font-weight: 700;
|
|
433
|
+
font-variant-numeric: tabular-nums;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.stat--free {
|
|
437
|
+
color: var(--ds-teal);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.stat--taken .stat__value {
|
|
441
|
+
color: var(--ds-heading);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.stat--reserved {
|
|
445
|
+
color: var(--ds-amber);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.stat--unknown {
|
|
449
|
+
color: var(--ds-orange);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.summary--progress {
|
|
453
|
+
color: var(--ds-muted);
|
|
454
|
+
font-weight: 400;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.summary--error {
|
|
458
|
+
color: var(--ds-orange);
|
|
459
|
+
font-weight: 400;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.progress {
|
|
463
|
+
height: 3px;
|
|
464
|
+
margin-top: 12px;
|
|
465
|
+
border-radius: 3px;
|
|
466
|
+
background: var(--ds-divider);
|
|
467
|
+
overflow: hidden;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.progress::after {
|
|
471
|
+
content: '';
|
|
472
|
+
display: block;
|
|
473
|
+
width: 40%;
|
|
474
|
+
height: 100%;
|
|
475
|
+
border-radius: inherit;
|
|
476
|
+
background: linear-gradient(90deg, var(--ds-cyan), var(--ds-violet));
|
|
477
|
+
animation: slide 1.2s ease-in-out infinite;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/* The skeleton of the table to come: a row per name, its cells as shimmering bars. */
|
|
481
|
+
.skeleton {
|
|
482
|
+
margin-top: 12px;
|
|
483
|
+
border: 1px solid var(--ds-panel-border);
|
|
484
|
+
border-radius: var(--ds-radius-card);
|
|
485
|
+
overflow: hidden;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.skeleton__row {
|
|
489
|
+
display: grid;
|
|
490
|
+
grid-template-columns: minmax(0, 1fr) 64px 80px 64px 64px 56px;
|
|
491
|
+
align-items: center;
|
|
492
|
+
gap: 12px;
|
|
493
|
+
padding: 14px 12px;
|
|
494
|
+
border-bottom: 1px solid var(--ds-divider);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.skeleton__row:last-child {
|
|
498
|
+
border-bottom: 0;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
.skeleton__bar {
|
|
502
|
+
height: 10px;
|
|
503
|
+
border-radius: var(--ds-radius-pill);
|
|
504
|
+
background: linear-gradient(
|
|
505
|
+
90deg,
|
|
506
|
+
var(--ds-raised) 25%,
|
|
507
|
+
var(--ds-divider) 50%,
|
|
508
|
+
var(--ds-raised) 75%
|
|
509
|
+
);
|
|
510
|
+
background-size: 300% 100%;
|
|
511
|
+
animation: shimmer 1.4s ease-in-out infinite;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.skeleton__bar--name {
|
|
515
|
+
width: 60%;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
.skeleton__row:nth-child(3n + 2) .skeleton__bar--name {
|
|
519
|
+
width: 45%;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.skeleton__row:nth-child(3n) .skeleton__bar--name {
|
|
523
|
+
width: 70%;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.skeleton__bar--button {
|
|
527
|
+
height: 22px;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
@keyframes shimmer {
|
|
531
|
+
from {
|
|
532
|
+
background-position: 100% 0;
|
|
533
|
+
}
|
|
534
|
+
to {
|
|
535
|
+
background-position: 0 0;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
@keyframes slide {
|
|
540
|
+
from {
|
|
541
|
+
transform: translateX(-100%);
|
|
542
|
+
}
|
|
543
|
+
to {
|
|
544
|
+
transform: translateX(250%);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.empty {
|
|
549
|
+
margin: 8px 0 0;
|
|
550
|
+
color: var(--ds-muted);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/* A link the host would not open, offered to copy. */
|
|
554
|
+
.fallback {
|
|
555
|
+
display: flex;
|
|
556
|
+
flex-wrap: wrap;
|
|
557
|
+
align-items: center;
|
|
558
|
+
gap: 8px;
|
|
559
|
+
margin: 8px 0;
|
|
560
|
+
padding: 10px 12px;
|
|
561
|
+
border: 1px solid var(--ds-orange);
|
|
562
|
+
border-radius: var(--ds-radius-control);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/* A note under the summary, such as where a new batch will appear. */
|
|
566
|
+
.fallback--notice {
|
|
567
|
+
border-color: var(--ds-accent-border);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.notice {
|
|
571
|
+
margin: 0;
|
|
572
|
+
color: var(--ds-body);
|
|
573
|
+
font-size: 13px;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.fallback[hidden] {
|
|
577
|
+
display: none;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.fallback__note {
|
|
581
|
+
flex-basis: 100%;
|
|
582
|
+
margin: 0;
|
|
583
|
+
font-size: 13px;
|
|
584
|
+
color: var(--ds-body);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.fallback__text-field {
|
|
588
|
+
flex: 1;
|
|
589
|
+
min-width: 0;
|
|
590
|
+
max-height: 160px;
|
|
591
|
+
resize: vertical;
|
|
592
|
+
padding: 6px 8px;
|
|
593
|
+
border: 1px solid var(--ds-panel-border);
|
|
594
|
+
border-radius: var(--ds-radius-option);
|
|
595
|
+
background: var(--ds-raised);
|
|
596
|
+
color: var(--ds-heading);
|
|
597
|
+
font: 12px var(--ds-mono);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
.fallback__close {
|
|
601
|
+
padding: 6px 10px;
|
|
602
|
+
border: 1px solid var(--ds-panel-border);
|
|
603
|
+
border-radius: var(--ds-radius-option);
|
|
604
|
+
background: transparent;
|
|
605
|
+
font-size: 12px;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/* ── A free domain: a row in the list, a card in the grid ─────────────────────────────────── */
|
|
609
|
+
|
|
610
|
+
.results {
|
|
611
|
+
margin: 0;
|
|
612
|
+
padding: 0;
|
|
613
|
+
list-style: none;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
.results--grid {
|
|
617
|
+
display: grid;
|
|
618
|
+
grid-template-columns: repeat(auto-fill, minmax(var(--ds-card-min), 1fr));
|
|
619
|
+
align-items: start;
|
|
620
|
+
gap: 12px;
|
|
621
|
+
margin-top: 8px;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.result {
|
|
625
|
+
display: grid;
|
|
626
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
627
|
+
gap: 2px 12px;
|
|
628
|
+
padding: 10px 0;
|
|
629
|
+
border-top: 1px solid var(--ds-divider);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.result:focus {
|
|
633
|
+
outline: none;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
.results--grid .result {
|
|
637
|
+
gap: 6px 12px;
|
|
638
|
+
padding: 14px;
|
|
639
|
+
border: 1px solid var(--ds-panel-border);
|
|
640
|
+
border-radius: var(--ds-radius-card);
|
|
641
|
+
background: var(--ds-raised);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.result__domain {
|
|
645
|
+
display: inline-flex;
|
|
646
|
+
flex-wrap: wrap;
|
|
647
|
+
align-items: center;
|
|
648
|
+
gap: 2px 6px;
|
|
649
|
+
min-width: 0;
|
|
650
|
+
font-family: var(--ds-mono);
|
|
651
|
+
font-size: 14px;
|
|
652
|
+
color: var(--ds-heading);
|
|
653
|
+
overflow-wrap: anywhere;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
.result__name {
|
|
657
|
+
min-width: 0;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* An internationalized name's ASCII form: what is actually registered. */
|
|
661
|
+
.result__ascii {
|
|
662
|
+
flex-basis: 100%;
|
|
663
|
+
font-size: 12px;
|
|
664
|
+
color: var(--ds-muted);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/* The price range, and "All N registrars" at the end of the same line. */
|
|
668
|
+
.result__line {
|
|
669
|
+
grid-column: 1 / -1;
|
|
670
|
+
display: flex;
|
|
671
|
+
flex-wrap: wrap;
|
|
672
|
+
align-items: center;
|
|
673
|
+
justify-content: space-between;
|
|
674
|
+
gap: 4px 12px;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/* In a card the price and "All N registrars" stack, so every card has the same shape. */
|
|
678
|
+
.results--grid .result__line {
|
|
679
|
+
flex-direction: column;
|
|
680
|
+
align-items: flex-start;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
.result__actions {
|
|
684
|
+
display: inline-flex;
|
|
685
|
+
align-items: center;
|
|
686
|
+
gap: 4px 14px;
|
|
687
|
+
margin-left: auto;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.results--grid .result__actions {
|
|
691
|
+
margin-left: 0;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
.result__price {
|
|
695
|
+
font-size: 13px;
|
|
696
|
+
color: var(--ds-muted);
|
|
697
|
+
font-variant-numeric: tabular-nums;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.pill {
|
|
701
|
+
align-self: center;
|
|
702
|
+
padding: 2px 10px;
|
|
703
|
+
border: 1px solid currentColor;
|
|
704
|
+
border-radius: var(--ds-radius-pill);
|
|
705
|
+
font-size: 12px;
|
|
706
|
+
font-weight: 600;
|
|
707
|
+
white-space: nowrap;
|
|
708
|
+
color: var(--ds-teal);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.pill--premium {
|
|
712
|
+
color: var(--ds-amber);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/* "All N registrars" and the table's "N more": open a list under the domain. */
|
|
716
|
+
.toggle {
|
|
717
|
+
display: inline-flex;
|
|
718
|
+
align-items: center;
|
|
719
|
+
gap: 4px;
|
|
720
|
+
margin-left: auto;
|
|
721
|
+
padding: 2px 0;
|
|
722
|
+
border: 0;
|
|
723
|
+
background: none;
|
|
724
|
+
color: var(--ds-muted);
|
|
725
|
+
font-size: 12px;
|
|
726
|
+
line-height: 1.5;
|
|
727
|
+
white-space: nowrap;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
.toggle:hover {
|
|
731
|
+
color: var(--ds-heading);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
.results--grid .toggle,
|
|
735
|
+
.result__actions .toggle {
|
|
736
|
+
margin-left: 0;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/* A small outlined button beside a name: "☆ Save" and "✦ Similar". */
|
|
740
|
+
.chip-button {
|
|
741
|
+
display: inline-flex;
|
|
742
|
+
flex: none;
|
|
743
|
+
align-items: center;
|
|
744
|
+
gap: 4px;
|
|
745
|
+
padding: 2px 8px;
|
|
746
|
+
border: 1px solid var(--ds-panel-border);
|
|
747
|
+
border-radius: var(--ds-radius-pill);
|
|
748
|
+
background: transparent;
|
|
749
|
+
color: var(--ds-body);
|
|
750
|
+
font-family: var(--ds-font);
|
|
751
|
+
font-size: 12px;
|
|
752
|
+
font-weight: 500;
|
|
753
|
+
line-height: 1.5;
|
|
754
|
+
white-space: nowrap;
|
|
755
|
+
transition:
|
|
756
|
+
border-color var(--ds-quick),
|
|
757
|
+
color var(--ds-quick),
|
|
758
|
+
background-color var(--ds-quick);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/* "Save" and "Saved" stacked in one cell, so the button keeps the longer word's width. */
|
|
762
|
+
.swap {
|
|
763
|
+
display: inline-grid;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
.swap > * {
|
|
767
|
+
grid-area: 1 / 1;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
/* "Regenerate all" until names are marked Similar, then "Regenerate with 2", in one cell. */
|
|
771
|
+
.regenerate:not(.regenerate--with) .swap__on,
|
|
772
|
+
.regenerate--with .swap__off {
|
|
773
|
+
visibility: hidden;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/* "Sent to chat" for a moment after a click, in the same cell. */
|
|
777
|
+
.regenerate:not(.regenerate--sent) .swap__sent,
|
|
778
|
+
.regenerate.regenerate--sent .swap__off,
|
|
779
|
+
.regenerate.regenerate--sent .swap__on {
|
|
780
|
+
visibility: hidden;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.save[aria-pressed='true'] .swap__off,
|
|
784
|
+
.save:not([aria-pressed='true']) .swap__on {
|
|
785
|
+
visibility: hidden;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
/* "Similar" marks a name as an example for Regenerate: quiet until marked, then cyan. */
|
|
789
|
+
.similar:hover {
|
|
790
|
+
border-color: var(--ds-cyan);
|
|
791
|
+
color: var(--ds-cyan);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
/* "Regenerate": the panel's main request to the chat, in the brand's cyan. */
|
|
795
|
+
.regenerate {
|
|
796
|
+
border-color: var(--ds-accent-border);
|
|
797
|
+
color: var(--ds-cyan);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.regenerate:hover {
|
|
801
|
+
background: var(--ds-accent-fill);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/* How many names Regenerate will take as examples. */
|
|
805
|
+
/* Room for two digits, so the count going from 9 to 10 moves nothing either. */
|
|
806
|
+
.regenerate__count {
|
|
807
|
+
display: inline-block;
|
|
808
|
+
min-width: 2ch;
|
|
809
|
+
font-weight: 700;
|
|
810
|
+
font-variant-numeric: tabular-nums;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/* "Saved 2": quiet with nothing saved, amber once something is. */
|
|
814
|
+
.saved-jump[aria-disabled='true'] {
|
|
815
|
+
cursor: default;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.saved-jump:not(.saved-jump--some) {
|
|
819
|
+
color: var(--ds-muted);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.saved-jump--some {
|
|
823
|
+
border-color: var(--ds-amber);
|
|
824
|
+
color: var(--ds-amber);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
.saved-jump--some[aria-disabled='false']:hover {
|
|
828
|
+
background: var(--ds-amber-fill);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/* Room for two digits, as on Regenerate. */
|
|
832
|
+
.saved-jump__count {
|
|
833
|
+
display: inline-block;
|
|
834
|
+
min-width: 2ch;
|
|
835
|
+
font-weight: 700;
|
|
836
|
+
font-variant-numeric: tabular-nums;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
/* A name marked as an example: filled in the brand's cyan. */
|
|
840
|
+
.similar[aria-pressed='true'] {
|
|
841
|
+
border-color: var(--ds-cyan);
|
|
842
|
+
background: var(--ds-accent-fill);
|
|
843
|
+
color: var(--ds-cyan);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
.save:hover {
|
|
847
|
+
border-color: var(--ds-amber);
|
|
848
|
+
color: var(--ds-amber);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/* A saved domain's button: amber, its star filled. */
|
|
852
|
+
.save[aria-pressed='true'] {
|
|
853
|
+
border-color: var(--ds-amber);
|
|
854
|
+
background: var(--ds-amber-fill);
|
|
855
|
+
color: var(--ds-amber);
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
.registrars {
|
|
859
|
+
grid-column: 1 / -1;
|
|
860
|
+
margin: 6px 0 0;
|
|
861
|
+
padding: 0;
|
|
862
|
+
list-style: none;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
/*
|
|
866
|
+
One registrar: the whole row is the link. Name, price and arrow sit in three columns, so the
|
|
867
|
+
prices and the arrows line up from row to row.
|
|
868
|
+
*/
|
|
869
|
+
.registrar {
|
|
870
|
+
display: grid;
|
|
871
|
+
grid-template-columns: minmax(0, 1fr) auto var(--ds-icon-small);
|
|
872
|
+
align-items: center;
|
|
873
|
+
gap: 10px;
|
|
874
|
+
padding: 6px 10px;
|
|
875
|
+
border-radius: var(--ds-radius-control);
|
|
876
|
+
color: var(--ds-body);
|
|
877
|
+
font-size: 13px;
|
|
878
|
+
text-decoration: none;
|
|
879
|
+
transition:
|
|
880
|
+
background-color var(--ds-quick),
|
|
881
|
+
color var(--ds-quick);
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
.registrar:hover,
|
|
885
|
+
.registrar:focus-visible {
|
|
886
|
+
background: var(--ds-accent-fill);
|
|
887
|
+
color: var(--ds-heading);
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
.registrar:focus-visible {
|
|
891
|
+
outline: 2px solid var(--ds-cyan);
|
|
892
|
+
outline-offset: -2px;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
.registrar__price {
|
|
896
|
+
color: var(--ds-muted);
|
|
897
|
+
font-variant-numeric: tabular-nums;
|
|
898
|
+
text-align: right;
|
|
899
|
+
white-space: nowrap;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
.more {
|
|
903
|
+
margin: 10px 0 0;
|
|
904
|
+
padding: 0;
|
|
905
|
+
border: 0;
|
|
906
|
+
background: none;
|
|
907
|
+
color: var(--ds-muted);
|
|
908
|
+
font-size: 13px;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
.more:hover {
|
|
912
|
+
color: var(--ds-heading);
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/* ── The price table: domains down the side, registrars across the top ─────────────────────── */
|
|
916
|
+
|
|
917
|
+
/* The table scrolls sideways inside its frame when there are many registrars; the page never does. */
|
|
918
|
+
.matrix-wrap {
|
|
919
|
+
margin-top: 8px;
|
|
920
|
+
border: 1px solid var(--ds-panel-border);
|
|
921
|
+
border-radius: var(--ds-radius-card);
|
|
922
|
+
overflow-x: auto;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/* While there is more to the right, the right edge fades out. */
|
|
926
|
+
.matrix-wrap--more {
|
|
927
|
+
mask-image: linear-gradient(to right, #000 calc(100% - 32px), transparent);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.matrix {
|
|
931
|
+
width: 100%;
|
|
932
|
+
border-collapse: separate;
|
|
933
|
+
border-spacing: 0;
|
|
934
|
+
font-size: 13px;
|
|
935
|
+
font-variant-numeric: tabular-nums;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.matrix th,
|
|
939
|
+
.matrix td {
|
|
940
|
+
padding: 0;
|
|
941
|
+
border-bottom: 1px solid var(--ds-divider);
|
|
942
|
+
text-align: right;
|
|
943
|
+
white-space: nowrap;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
.matrix tbody tr:last-child > * {
|
|
947
|
+
border-bottom: 0;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.matrix thead th {
|
|
951
|
+
padding: 8px 12px;
|
|
952
|
+
font-size: 11px;
|
|
953
|
+
font-weight: 600;
|
|
954
|
+
letter-spacing: 0.06em;
|
|
955
|
+
text-transform: uppercase;
|
|
956
|
+
color: var(--ds-muted);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
/* The domains stay in view while the prices scroll. */
|
|
960
|
+
.matrix th:first-child {
|
|
961
|
+
position: sticky;
|
|
962
|
+
left: 0;
|
|
963
|
+
z-index: 1;
|
|
964
|
+
background: var(--ds-panel);
|
|
965
|
+
text-align: left;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.matrix .matrix__domain {
|
|
969
|
+
padding: 8px 12px;
|
|
970
|
+
font-weight: 400;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
/* A button's own column: as narrow as the button, beside the domain. */
|
|
974
|
+
.matrix .matrix__action {
|
|
975
|
+
width: 1%;
|
|
976
|
+
padding: 0 4px;
|
|
977
|
+
text-align: left;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.matrix__domain .result__domain {
|
|
981
|
+
font-size: 13px;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/* A heading that sorts its column; the arrows show which way once it is sorted. */
|
|
985
|
+
.sort {
|
|
986
|
+
display: inline-flex;
|
|
987
|
+
align-items: center;
|
|
988
|
+
gap: 4px;
|
|
989
|
+
padding: 0;
|
|
990
|
+
border: 0;
|
|
991
|
+
background: none;
|
|
992
|
+
color: inherit;
|
|
993
|
+
font: inherit;
|
|
994
|
+
letter-spacing: inherit;
|
|
995
|
+
text-transform: inherit;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.sort:hover,
|
|
999
|
+
.sort--ascending,
|
|
1000
|
+
.sort--descending {
|
|
1001
|
+
color: var(--ds-heading);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
.matrix__renewal {
|
|
1005
|
+
display: block;
|
|
1006
|
+
font-size: 11px;
|
|
1007
|
+
color: var(--ds-muted);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
.matrix__note {
|
|
1011
|
+
display: block;
|
|
1012
|
+
font-size: 11px;
|
|
1013
|
+
color: var(--ds-muted);
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
.matrix__note--premium {
|
|
1017
|
+
color: var(--ds-amber);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
.matrix tbody tr:hover > * {
|
|
1021
|
+
background: var(--ds-raised);
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
/* Every price is a link that fills its cell. */
|
|
1025
|
+
.matrix__link {
|
|
1026
|
+
display: block;
|
|
1027
|
+
padding: 8px 12px;
|
|
1028
|
+
color: var(--ds-body);
|
|
1029
|
+
text-decoration: none;
|
|
1030
|
+
transition:
|
|
1031
|
+
background-color var(--ds-quick),
|
|
1032
|
+
color var(--ds-quick);
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
/* A registrar without a public price: the link is there, quieter than the prices. */
|
|
1036
|
+
.matrix__link--site {
|
|
1037
|
+
color: var(--ds-muted);
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
.matrix__link:hover,
|
|
1041
|
+
.matrix__link:focus-visible {
|
|
1042
|
+
background: var(--ds-accent-fill);
|
|
1043
|
+
color: var(--ds-cyan);
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
.matrix__link:focus-visible {
|
|
1047
|
+
outline: 2px solid var(--ds-cyan);
|
|
1048
|
+
outline-offset: -2px;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
.matrix__none {
|
|
1052
|
+
display: block;
|
|
1053
|
+
padding: 8px 12px;
|
|
1054
|
+
color: var(--ds-muted);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
/* "7 more" in the Others column, and the row of links it opens under the name. */
|
|
1058
|
+
.matrix .matrix__toggle {
|
|
1059
|
+
margin: 0;
|
|
1060
|
+
padding: 8px 12px;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
.matrix__extra td {
|
|
1064
|
+
padding: 4px 12px 12px;
|
|
1065
|
+
text-align: left;
|
|
1066
|
+
white-space: normal;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
.matrix__extra-label {
|
|
1070
|
+
display: block;
|
|
1071
|
+
margin-bottom: 6px;
|
|
1072
|
+
font-size: 12px;
|
|
1073
|
+
color: var(--ds-muted);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
.matrix__extra-links {
|
|
1077
|
+
display: flex;
|
|
1078
|
+
flex-wrap: wrap;
|
|
1079
|
+
gap: 6px;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
.matrix__chip {
|
|
1083
|
+
display: inline-flex;
|
|
1084
|
+
align-items: center;
|
|
1085
|
+
gap: 6px;
|
|
1086
|
+
padding: 4px 10px;
|
|
1087
|
+
border: 1px solid var(--ds-panel-border);
|
|
1088
|
+
border-radius: var(--ds-radius-pill);
|
|
1089
|
+
color: var(--ds-body);
|
|
1090
|
+
font-size: 12px;
|
|
1091
|
+
text-decoration: none;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
.matrix__chip:hover,
|
|
1095
|
+
.matrix__chip:focus-visible {
|
|
1096
|
+
border-color: var(--ds-cyan);
|
|
1097
|
+
color: var(--ds-cyan);
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
/* ── Few free, filter, shortlist and actions ───────────────────────────────────────────────── */
|
|
1101
|
+
|
|
1102
|
+
/* Few or no free names: a note with a way to get more at once. */
|
|
1103
|
+
.few-free {
|
|
1104
|
+
display: flex;
|
|
1105
|
+
flex-wrap: wrap;
|
|
1106
|
+
align-items: center;
|
|
1107
|
+
justify-content: space-between;
|
|
1108
|
+
gap: 8px 12px;
|
|
1109
|
+
margin: 8px 0;
|
|
1110
|
+
padding: 12px 14px;
|
|
1111
|
+
border: 1px solid var(--ds-panel-border);
|
|
1112
|
+
border-radius: var(--ds-radius-card);
|
|
1113
|
+
background: var(--ds-raised);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
.few-free__text {
|
|
1117
|
+
margin: 0;
|
|
1118
|
+
color: var(--ds-body);
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
/* A button that asks the chat for something or saves a file. */
|
|
1122
|
+
.action {
|
|
1123
|
+
display: inline-flex;
|
|
1124
|
+
align-items: center;
|
|
1125
|
+
gap: 6px;
|
|
1126
|
+
padding: 6px 12px;
|
|
1127
|
+
border: 1px solid var(--ds-panel-border);
|
|
1128
|
+
border-radius: var(--ds-radius-control);
|
|
1129
|
+
background: transparent;
|
|
1130
|
+
color: var(--ds-body);
|
|
1131
|
+
font-size: 13px;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
.action:hover {
|
|
1135
|
+
border-color: var(--ds-cyan);
|
|
1136
|
+
color: var(--ds-heading);
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
.action--primary {
|
|
1140
|
+
border-color: var(--ds-cyan);
|
|
1141
|
+
color: var(--ds-cyan);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
.actions {
|
|
1145
|
+
display: flex;
|
|
1146
|
+
flex-wrap: wrap;
|
|
1147
|
+
gap: 8px;
|
|
1148
|
+
margin-top: 16px;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/* "All · .com · .ai": the free domains of one TLD. */
|
|
1152
|
+
.filter {
|
|
1153
|
+
display: flex;
|
|
1154
|
+
flex-wrap: wrap;
|
|
1155
|
+
gap: 6px;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
/* Many TLDs: the filter as a menu in a pill, its arrow drawn over the native one's place. */
|
|
1159
|
+
.filter-menu {
|
|
1160
|
+
position: relative;
|
|
1161
|
+
display: inline-flex;
|
|
1162
|
+
align-items: center;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
.filter-menu__select {
|
|
1166
|
+
appearance: none;
|
|
1167
|
+
padding: 3px 28px 3px 12px;
|
|
1168
|
+
border: 1px solid var(--ds-accent-border);
|
|
1169
|
+
border-radius: var(--ds-radius-pill);
|
|
1170
|
+
background: var(--ds-accent-fill);
|
|
1171
|
+
color: var(--ds-cyan);
|
|
1172
|
+
font: inherit;
|
|
1173
|
+
font-size: 12px;
|
|
1174
|
+
cursor: pointer;
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
.filter-menu__select option {
|
|
1178
|
+
background: var(--ds-tip);
|
|
1179
|
+
color: var(--ds-body);
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.filter-menu .icon {
|
|
1183
|
+
position: absolute;
|
|
1184
|
+
right: 10px;
|
|
1185
|
+
color: var(--ds-cyan);
|
|
1186
|
+
pointer-events: none;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
.filter__option {
|
|
1190
|
+
display: inline-flex;
|
|
1191
|
+
align-items: baseline;
|
|
1192
|
+
gap: 6px;
|
|
1193
|
+
padding: 3px 10px;
|
|
1194
|
+
border: 1px solid var(--ds-panel-border);
|
|
1195
|
+
border-radius: var(--ds-radius-pill);
|
|
1196
|
+
background: transparent;
|
|
1197
|
+
color: var(--ds-muted);
|
|
1198
|
+
font-size: 12px;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
.filter__option:hover {
|
|
1202
|
+
color: var(--ds-heading);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
.filter__option[aria-pressed='true'] {
|
|
1206
|
+
border-color: var(--ds-cyan);
|
|
1207
|
+
background: var(--ds-accent-fill);
|
|
1208
|
+
color: var(--ds-heading);
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
.filter__count {
|
|
1212
|
+
font-variant-numeric: tabular-nums;
|
|
1213
|
+
opacity: 0.7;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
/* The shortlist: the starred names, each with a way to take it off, and "Compare in chat". */
|
|
1217
|
+
.shortlist:not(:empty) {
|
|
1218
|
+
display: grid;
|
|
1219
|
+
gap: 8px;
|
|
1220
|
+
margin: 8px 0;
|
|
1221
|
+
padding: 10px 12px;
|
|
1222
|
+
border: 1px solid var(--ds-panel-border);
|
|
1223
|
+
border-radius: var(--ds-radius-card);
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
.shortlist__title {
|
|
1227
|
+
margin: 0;
|
|
1228
|
+
font-size: 12px;
|
|
1229
|
+
font-weight: 600;
|
|
1230
|
+
letter-spacing: 0.08em;
|
|
1231
|
+
text-transform: uppercase;
|
|
1232
|
+
color: var(--ds-amber);
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
.shortlist__items {
|
|
1236
|
+
display: flex;
|
|
1237
|
+
flex-wrap: wrap;
|
|
1238
|
+
gap: 6px;
|
|
1239
|
+
margin: 0;
|
|
1240
|
+
padding: 0;
|
|
1241
|
+
list-style: none;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
.shortlist__item {
|
|
1245
|
+
display: inline-flex;
|
|
1246
|
+
align-items: center;
|
|
1247
|
+
gap: 4px;
|
|
1248
|
+
padding: 2px 4px 2px 10px;
|
|
1249
|
+
border: 1px solid var(--ds-panel-border);
|
|
1250
|
+
border-radius: var(--ds-radius-pill);
|
|
1251
|
+
color: var(--ds-heading);
|
|
1252
|
+
font: 12px var(--ds-mono);
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
.shortlist__remove {
|
|
1256
|
+
display: inline-grid;
|
|
1257
|
+
place-items: center;
|
|
1258
|
+
width: 18px;
|
|
1259
|
+
height: 18px;
|
|
1260
|
+
padding: 0;
|
|
1261
|
+
border: 0;
|
|
1262
|
+
border-radius: var(--ds-radius-pill);
|
|
1263
|
+
background: none;
|
|
1264
|
+
color: var(--ds-muted);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
.shortlist__remove:hover {
|
|
1268
|
+
color: var(--ds-heading);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
/* The title and "Compare in chat" on one line: the button stays put as names are saved below. */
|
|
1272
|
+
.shortlist__header {
|
|
1273
|
+
display: flex;
|
|
1274
|
+
flex-wrap: wrap;
|
|
1275
|
+
align-items: center;
|
|
1276
|
+
justify-content: space-between;
|
|
1277
|
+
gap: 8px;
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
/* ── Taken, reserved and unverified names ─────────────────────────────────────────────────── */
|
|
1281
|
+
|
|
1282
|
+
.group {
|
|
1283
|
+
margin: 16px 0 0;
|
|
1284
|
+
padding-top: 12px;
|
|
1285
|
+
border-top: 1px solid var(--ds-divider);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
.group__header {
|
|
1289
|
+
display: flex;
|
|
1290
|
+
flex-wrap: wrap;
|
|
1291
|
+
align-items: center;
|
|
1292
|
+
justify-content: space-between;
|
|
1293
|
+
gap: 4px 12px;
|
|
1294
|
+
margin-bottom: 8px;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
.group__label {
|
|
1298
|
+
margin: 0;
|
|
1299
|
+
font-size: 12px;
|
|
1300
|
+
font-weight: 600;
|
|
1301
|
+
letter-spacing: 0.08em;
|
|
1302
|
+
text-transform: uppercase;
|
|
1303
|
+
color: var(--ds-muted);
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
.chips {
|
|
1307
|
+
display: flex;
|
|
1308
|
+
flex-wrap: wrap;
|
|
1309
|
+
gap: 6px;
|
|
1310
|
+
margin: 0;
|
|
1311
|
+
padding: 0;
|
|
1312
|
+
list-style: none;
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
.chip {
|
|
1316
|
+
padding: 2px 10px;
|
|
1317
|
+
border: 1px solid var(--ds-divider);
|
|
1318
|
+
border-radius: var(--ds-radius-pill);
|
|
1319
|
+
font-family: var(--ds-mono);
|
|
1320
|
+
font-size: 12px;
|
|
1321
|
+
color: var(--ds-muted);
|
|
1322
|
+
overflow-wrap: anywhere;
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
.chip:focus {
|
|
1326
|
+
outline: none;
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
.chip--dropping {
|
|
1330
|
+
border-color: currentColor;
|
|
1331
|
+
color: var(--ds-cyan);
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
/* "may free up soon" on a name being deleted. */
|
|
1335
|
+
.chip__note {
|
|
1336
|
+
margin-left: 6px;
|
|
1337
|
+
font-family: var(--ds-font);
|
|
1338
|
+
font-size: 11px;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
.chip--reserved {
|
|
1342
|
+
color: var(--ds-amber);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.chip--unknown {
|
|
1346
|
+
color: var(--ds-orange);
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.notes {
|
|
1350
|
+
margin: 16px 0 0;
|
|
1351
|
+
padding-left: 18px;
|
|
1352
|
+
color: var(--ds-muted);
|
|
1353
|
+
font-size: 13px;
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
.footnote {
|
|
1357
|
+
margin: 16px 0 0;
|
|
1358
|
+
color: var(--ds-muted);
|
|
1359
|
+
font-size: 12px;
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
/* Text for screen readers only. */
|
|
1363
|
+
.visually-hidden {
|
|
1364
|
+
position: absolute;
|
|
1365
|
+
width: 1px;
|
|
1366
|
+
height: 1px;
|
|
1367
|
+
margin: -1px;
|
|
1368
|
+
padding: 0;
|
|
1369
|
+
border: 0;
|
|
1370
|
+
overflow: hidden;
|
|
1371
|
+
clip: rect(0 0 0 0);
|
|
1372
|
+
white-space: nowrap;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
/* Icons that change with their control's state. */
|
|
1376
|
+
.sort--descending .icon {
|
|
1377
|
+
transform: scaleY(-1);
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
.registrar:hover .registrar__price,
|
|
1381
|
+
.registrar:hover .icon {
|
|
1382
|
+
color: var(--ds-cyan);
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
.save[aria-pressed='true'] .icon,
|
|
1386
|
+
.similar[aria-pressed='true'] .icon,
|
|
1387
|
+
.saved-jump.saved-jump--some .icon {
|
|
1388
|
+
fill: currentColor;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
.toggle[aria-expanded='true'] .icon {
|
|
1392
|
+
transform: rotate(180deg);
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
/* A phone: less padding around the panel, and the table's buttons as icons, so the prices fit. */
|
|
1396
|
+
@media (max-width: 480px) {
|
|
1397
|
+
.panel {
|
|
1398
|
+
padding: 16px;
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
.matrix .chip-button__label {
|
|
1402
|
+
display: none;
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
.matrix .chip-button {
|
|
1406
|
+
padding: 3px 6px;
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
/* Too narrow for one line: "Regenerate" and the toolbar first, the filter on a line below. */
|
|
1410
|
+
.controls {
|
|
1411
|
+
column-gap: 6px;
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
.controls__end {
|
|
1415
|
+
display: contents;
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
.toolbar {
|
|
1419
|
+
margin-left: auto;
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
.controls__filter {
|
|
1423
|
+
flex: 1 1 100%;
|
|
1424
|
+
order: 1;
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
/* Fingers need bigger targets than a pointer. */
|
|
1429
|
+
@media (pointer: coarse) {
|
|
1430
|
+
.toggle,
|
|
1431
|
+
.more,
|
|
1432
|
+
.segmented__option {
|
|
1433
|
+
min-height: var(--ds-touch-target);
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
/* With less motion the bar would only look finished: the status line says it is checking. */
|
|
1438
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1439
|
+
.progress {
|
|
1440
|
+
display: none;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
.skeleton__bar {
|
|
1444
|
+
animation: none;
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
.registrar,
|
|
1448
|
+
.matrix__link,
|
|
1449
|
+
.toggle .icon {
|
|
1450
|
+
transition: none;
|
|
1451
|
+
}
|
|
1452
|
+
}
|