@takodotid/circuit 0.20.0 → 0.21.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 +1 -1
- package/dist/chunks/{index-jtzfw679.js → index-n4zpd25n.js} +92 -92
- package/dist/chunks/{index-xm9nma2t.js → index-v8zgr7wm.js} +14 -14
- package/dist/chunks/{new-7n8qvtjd.js → new-ny89s7y7.js} +4 -6
- package/dist/chunks/{server-5shmsmse.js → server-zapfzhv4.js} +9 -11
- package/dist/cli/index.js +406 -411
- package/dist/index.js +20 -21
- package/dist/presets/index.js +20 -21
- package/package.json +7 -7
- package/src/core/files.ts +5 -3
- package/src/studio/public/app.js +24 -6
- package/src/studio/public/favicon.svg +10 -4
- package/src/studio/public/graph.js +82 -13
- package/src/studio/public/index.html +16 -12
- package/src/studio/public/special-gothic-latin-ext.woff2 +0 -0
- package/src/studio/public/special-gothic-latin.woff2 +0 -0
- package/src/studio/public/special-gothic-license.txt +93 -0
- package/src/studio/public/style.css +997 -356
- package/src/studio/server.ts +2 -1
- package/dist/chunks/index-fq57hya4.js +0 -20
|
@@ -1,305 +1,550 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* The documentation site's cobalt, white and highlighter yellow, set in Special Gothic, at working density. */
|
|
2
|
+
|
|
3
|
+
@font-face {
|
|
4
|
+
font-family: "Special Gothic";
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-weight: 400 700;
|
|
7
|
+
font-stretch: 75% 125%;
|
|
8
|
+
font-display: swap;
|
|
9
|
+
src: url("special-gothic-latin-ext.woff2") format("woff2");
|
|
10
|
+
unicode-range:
|
|
11
|
+
U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF,
|
|
12
|
+
U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: "Special Gothic";
|
|
17
|
+
font-style: normal;
|
|
18
|
+
font-weight: 400 700;
|
|
19
|
+
font-stretch: 75% 125%;
|
|
20
|
+
font-display: swap;
|
|
21
|
+
src: url("special-gothic-latin.woff2") format("woff2");
|
|
22
|
+
unicode-range:
|
|
23
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
24
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
25
|
+
}
|
|
26
|
+
|
|
2
27
|
:root {
|
|
3
|
-
|
|
28
|
+
/* The shell: the same in both themes. */
|
|
29
|
+
--cobalt: #0a47b8;
|
|
30
|
+
--cobalt-deep: #08337f;
|
|
31
|
+
--navy: #0a1a36;
|
|
32
|
+
--yellow: #f8e347;
|
|
33
|
+
--yellow-deep: #e8cd1c;
|
|
34
|
+
--on-cobalt: #ffffff;
|
|
35
|
+
--on-cobalt-soft: #c9d7f5;
|
|
36
|
+
|
|
37
|
+
/* The page. */
|
|
38
|
+
--bg: #eff2f9;
|
|
4
39
|
--surface: #ffffff;
|
|
5
|
-
--
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--
|
|
10
|
-
--accent
|
|
11
|
-
--
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--
|
|
15
|
-
--
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--
|
|
40
|
+
--surface-raised: #f4f6fb;
|
|
41
|
+
--line: #d3d9e7;
|
|
42
|
+
--text: #11141b;
|
|
43
|
+
--muted: #49536a;
|
|
44
|
+
--edge: #7b86a0;
|
|
45
|
+
--accent: #0a47b8;
|
|
46
|
+
--accent-strong: #f8e347;
|
|
47
|
+
--on-accent: #11141b;
|
|
48
|
+
--selected: #fff7c2;
|
|
49
|
+
--error: #c0262c;
|
|
50
|
+
--error-strong: #c0262c;
|
|
51
|
+
--warning: #b35a00;
|
|
52
|
+
--warning-strong: #f0a030;
|
|
53
|
+
--ok: #11733b;
|
|
54
|
+
--segment: rgba(248, 227, 71, 0.32);
|
|
55
|
+
--dots: rgba(10, 71, 184, 0.14);
|
|
56
|
+
--heading-dots: var(--cobalt);
|
|
57
|
+
|
|
58
|
+
--font:
|
|
59
|
+
"Special Gothic", "Segoe UI", system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
60
|
+
--display: "Special Gothic", "Segoe UI", system-ui, sans-serif;
|
|
61
|
+
--mono: ui-monospace, "Cascadia Code", "SFMono-Regular", Menlo, Consolas, monospace;
|
|
21
62
|
}
|
|
63
|
+
|
|
22
64
|
@media (prefers-color-scheme: dark) {
|
|
23
65
|
:root {
|
|
24
|
-
--bg: #
|
|
25
|
-
--surface: #
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--accent
|
|
32
|
-
--
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
--
|
|
66
|
+
--bg: #0b1122;
|
|
67
|
+
--surface: #121a30;
|
|
68
|
+
--surface-raised: #182241;
|
|
69
|
+
--line: #26314d;
|
|
70
|
+
--text: #f1f4fb;
|
|
71
|
+
--muted: #a9b4cc;
|
|
72
|
+
--edge: #7c89a8;
|
|
73
|
+
--accent: #9cb9ff;
|
|
74
|
+
--on-accent: #11141b;
|
|
75
|
+
--selected: #3a3510;
|
|
76
|
+
--error: #ff8086;
|
|
77
|
+
--error-strong: #c0262c;
|
|
78
|
+
--warning: #ffad4f;
|
|
79
|
+
--warning-strong: #e08a1e;
|
|
80
|
+
--ok: #5fd38f;
|
|
81
|
+
--segment: rgba(248, 227, 71, 0.16);
|
|
82
|
+
--dots: rgba(156, 185, 255, 0.12);
|
|
38
83
|
}
|
|
39
84
|
}
|
|
85
|
+
|
|
40
86
|
* {
|
|
41
87
|
box-sizing: border-box;
|
|
42
88
|
}
|
|
89
|
+
|
|
43
90
|
html,
|
|
44
91
|
body {
|
|
45
92
|
margin: 0;
|
|
46
93
|
height: 100%;
|
|
47
94
|
background: var(--bg);
|
|
48
95
|
color: var(--text);
|
|
49
|
-
font:
|
|
96
|
+
font: 15px/1.5 var(--font);
|
|
97
|
+
scrollbar-color: var(--edge) transparent;
|
|
50
98
|
}
|
|
99
|
+
|
|
51
100
|
body {
|
|
52
101
|
display: flex;
|
|
53
102
|
flex-direction: column;
|
|
54
103
|
}
|
|
104
|
+
|
|
105
|
+
::selection {
|
|
106
|
+
color: #11141b;
|
|
107
|
+
background: var(--yellow);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:focus-visible {
|
|
111
|
+
outline: 3px solid var(--accent);
|
|
112
|
+
outline-offset: 2px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* On the cobalt rail a cobalt ring would vanish, so it is yellow there. */
|
|
116
|
+
header :focus-visible {
|
|
117
|
+
outline-color: var(--yellow);
|
|
118
|
+
}
|
|
119
|
+
|
|
55
120
|
button {
|
|
56
|
-
|
|
57
|
-
|
|
121
|
+
min-height: 36px;
|
|
122
|
+
padding: 6px 12px;
|
|
123
|
+
border: 1.5px solid var(--edge);
|
|
124
|
+
border-radius: 2px;
|
|
58
125
|
background: var(--surface);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
126
|
+
color: inherit;
|
|
127
|
+
font: inherit;
|
|
128
|
+
font-weight: 600;
|
|
62
129
|
cursor: pointer;
|
|
63
130
|
}
|
|
131
|
+
|
|
64
132
|
button:hover {
|
|
65
133
|
border-color: var(--accent);
|
|
134
|
+
color: var(--accent);
|
|
66
135
|
}
|
|
136
|
+
|
|
67
137
|
button[aria-pressed="true"] {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
color:
|
|
138
|
+
border-color: var(--cobalt);
|
|
139
|
+
background: var(--cobalt);
|
|
140
|
+
color: #ffffff;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
input,
|
|
144
|
+
select,
|
|
145
|
+
button {
|
|
146
|
+
box-sizing: border-box;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
code {
|
|
150
|
+
font-family: var(--mono);
|
|
151
|
+
font-size: 0.92em;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
a {
|
|
155
|
+
color: var(--accent);
|
|
156
|
+
font-weight: 600;
|
|
157
|
+
text-decoration: underline dotted 1.5px;
|
|
158
|
+
text-underline-offset: 3px;
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
a:hover {
|
|
163
|
+
text-decoration-style: solid;
|
|
71
164
|
}
|
|
165
|
+
|
|
166
|
+
.muted {
|
|
167
|
+
color: var(--muted);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* The rail: the wordmark, the views and the search, on cobalt. */
|
|
171
|
+
|
|
72
172
|
header {
|
|
73
173
|
display: flex;
|
|
74
174
|
flex-wrap: wrap;
|
|
75
|
-
align-items:
|
|
76
|
-
gap:
|
|
77
|
-
padding:
|
|
78
|
-
background: var(--
|
|
79
|
-
|
|
175
|
+
align-items: stretch;
|
|
176
|
+
gap: 0;
|
|
177
|
+
padding: 0;
|
|
178
|
+
background: var(--cobalt);
|
|
179
|
+
color: var(--on-cobalt);
|
|
80
180
|
}
|
|
81
|
-
|
|
181
|
+
|
|
82
182
|
header .brand {
|
|
83
183
|
display: flex;
|
|
84
|
-
align-items:
|
|
85
|
-
gap:
|
|
184
|
+
align-items: center;
|
|
185
|
+
gap: 10px;
|
|
186
|
+
padding: 0 18px;
|
|
187
|
+
color: inherit;
|
|
188
|
+
text-decoration: none;
|
|
86
189
|
}
|
|
190
|
+
|
|
191
|
+
header .brand:hover .wordmark {
|
|
192
|
+
color: var(--yellow);
|
|
193
|
+
}
|
|
194
|
+
|
|
87
195
|
header .wordmark {
|
|
88
|
-
font-family: var(--
|
|
89
|
-
font-size:
|
|
90
|
-
font-weight:
|
|
91
|
-
|
|
196
|
+
font-family: var(--display);
|
|
197
|
+
font-size: 21px;
|
|
198
|
+
font-weight: 700;
|
|
199
|
+
font-stretch: 125%;
|
|
200
|
+
letter-spacing: 0.04em;
|
|
201
|
+
text-transform: uppercase;
|
|
92
202
|
}
|
|
203
|
+
|
|
93
204
|
header .product {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
205
|
+
padding: 2px 7px;
|
|
206
|
+
border-radius: 2px;
|
|
207
|
+
background: var(--yellow);
|
|
208
|
+
color: #0a1a36;
|
|
209
|
+
font-size: 11px;
|
|
210
|
+
font-weight: 700;
|
|
211
|
+
font-stretch: 118%;
|
|
212
|
+
letter-spacing: 0.1em;
|
|
213
|
+
text-transform: uppercase;
|
|
103
214
|
}
|
|
215
|
+
|
|
104
216
|
nav,
|
|
105
217
|
.actions {
|
|
106
218
|
display: flex;
|
|
107
219
|
flex-wrap: wrap;
|
|
108
220
|
gap: 6px;
|
|
109
221
|
}
|
|
222
|
+
|
|
223
|
+
header > nav {
|
|
224
|
+
gap: 0;
|
|
225
|
+
padding-inline: 6px;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
header > nav button {
|
|
229
|
+
position: relative;
|
|
230
|
+
min-height: 52px;
|
|
231
|
+
padding: 0 11px;
|
|
232
|
+
border: 0;
|
|
233
|
+
border-radius: 0;
|
|
234
|
+
background: transparent;
|
|
235
|
+
color: var(--on-cobalt-soft);
|
|
236
|
+
font-size: 12.5px;
|
|
237
|
+
font-weight: 700;
|
|
238
|
+
font-stretch: 112%;
|
|
239
|
+
letter-spacing: 0.06em;
|
|
240
|
+
text-transform: uppercase;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
header > nav button:hover {
|
|
244
|
+
color: #ffffff;
|
|
245
|
+
background: rgba(255, 255, 255, 0.08);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
header > nav button[aria-pressed="true"] {
|
|
249
|
+
color: #ffffff;
|
|
250
|
+
background: transparent;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
header > nav button[aria-pressed="true"]::after {
|
|
254
|
+
content: "";
|
|
255
|
+
position: absolute;
|
|
256
|
+
right: 9px;
|
|
257
|
+
bottom: 0;
|
|
258
|
+
left: 9px;
|
|
259
|
+
height: 4px;
|
|
260
|
+
background: var(--yellow);
|
|
261
|
+
}
|
|
262
|
+
|
|
110
263
|
.count {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
264
|
+
margin-left: 6px;
|
|
265
|
+
padding: 0 5px;
|
|
266
|
+
border-radius: 2px;
|
|
267
|
+
background: var(--yellow);
|
|
268
|
+
color: #0a1a36;
|
|
269
|
+
font-size: 11px;
|
|
270
|
+
letter-spacing: 0;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.count:empty {
|
|
274
|
+
display: none;
|
|
114
275
|
}
|
|
276
|
+
|
|
115
277
|
header input[type="search"] {
|
|
116
|
-
|
|
117
|
-
color: inherit;
|
|
118
|
-
background: var(--bg);
|
|
119
|
-
border: 1px solid var(--line);
|
|
120
|
-
border-radius: 6px;
|
|
121
|
-
padding: 4px 10px;
|
|
122
|
-
width: 220px;
|
|
278
|
+
width: 230px;
|
|
123
279
|
max-width: 100%;
|
|
280
|
+
min-height: 36px;
|
|
281
|
+
margin: 8px 16px 8px auto;
|
|
282
|
+
padding: 4px 12px;
|
|
283
|
+
border: 1.5px solid rgba(201, 215, 245, 0.7);
|
|
284
|
+
border-radius: 2px;
|
|
285
|
+
background: rgba(8, 28, 64, 0.35);
|
|
286
|
+
color: #ffffff;
|
|
287
|
+
font: inherit;
|
|
124
288
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
289
|
+
|
|
290
|
+
header input[type="search"]::placeholder {
|
|
291
|
+
color: var(--on-cobalt-soft);
|
|
128
292
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
293
|
+
|
|
294
|
+
header input[type="search"]:focus {
|
|
295
|
+
border-color: #ffffff;
|
|
296
|
+
outline: 3px solid var(--yellow);
|
|
297
|
+
outline-offset: 1px;
|
|
133
298
|
}
|
|
134
|
-
|
|
135
|
-
|
|
299
|
+
|
|
300
|
+
/* The status rail: the network's health in counts, each with a mark as well as a colour. */
|
|
301
|
+
|
|
302
|
+
.status-rail {
|
|
303
|
+
order: 10;
|
|
304
|
+
display: flex;
|
|
305
|
+
flex: 1 0 100%;
|
|
306
|
+
align-items: center;
|
|
307
|
+
min-height: 38px;
|
|
308
|
+
padding: 0 18px;
|
|
309
|
+
background: var(--surface);
|
|
310
|
+
border-bottom: 1px solid var(--line);
|
|
311
|
+
color: var(--text);
|
|
136
312
|
}
|
|
137
|
-
|
|
313
|
+
|
|
314
|
+
.status-rail .summary {
|
|
315
|
+
display: flex;
|
|
316
|
+
flex-wrap: wrap;
|
|
317
|
+
align-items: center;
|
|
138
318
|
color: var(--muted);
|
|
319
|
+
font-size: 13px;
|
|
139
320
|
}
|
|
140
|
-
|
|
141
|
-
|
|
321
|
+
|
|
322
|
+
.summary-item {
|
|
323
|
+
display: inline-flex;
|
|
324
|
+
align-items: center;
|
|
325
|
+
min-height: 24px;
|
|
326
|
+
padding: 0 12px;
|
|
327
|
+
border-left: 1px solid var(--line);
|
|
328
|
+
color: var(--text);
|
|
142
329
|
font-size: 13px;
|
|
330
|
+
font-weight: 700;
|
|
143
331
|
}
|
|
144
|
-
|
|
145
|
-
|
|
332
|
+
|
|
333
|
+
.summary-item:first-child {
|
|
334
|
+
padding-left: 0;
|
|
335
|
+
border-left: 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.summary-item::before {
|
|
339
|
+
content: "";
|
|
340
|
+
width: 8px;
|
|
341
|
+
height: 8px;
|
|
342
|
+
margin-right: 7px;
|
|
343
|
+
border: 1.5px solid currentColor;
|
|
344
|
+
border-radius: 50%;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.summary-item.error {
|
|
348
|
+
color: var(--error);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.summary-item.warning,
|
|
352
|
+
.summary-item.changed {
|
|
353
|
+
color: var(--warning);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.summary-item.error::before,
|
|
357
|
+
.summary-item.warning::before,
|
|
358
|
+
.summary-item.changed::before {
|
|
359
|
+
background: currentColor;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.summary-item.changed::before {
|
|
363
|
+
border-radius: 1px;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.summary-item.quiet {
|
|
146
367
|
color: var(--muted);
|
|
147
|
-
font-
|
|
368
|
+
font-weight: 600;
|
|
148
369
|
}
|
|
149
|
-
|
|
370
|
+
|
|
371
|
+
.status-rail .live {
|
|
372
|
+
display: inline-flex;
|
|
373
|
+
align-items: center;
|
|
374
|
+
margin-left: auto;
|
|
375
|
+
white-space: nowrap;
|
|
376
|
+
color: var(--text);
|
|
377
|
+
font-size: 13px;
|
|
378
|
+
font-weight: 700;
|
|
379
|
+
text-transform: capitalize;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.status-rail .live::before {
|
|
150
383
|
content: "";
|
|
151
384
|
display: inline-block;
|
|
152
385
|
width: 8px;
|
|
153
386
|
height: 8px;
|
|
387
|
+
margin-right: 7px;
|
|
154
388
|
border-radius: 50%;
|
|
155
389
|
background: var(--warning);
|
|
156
|
-
margin-right: 6px;
|
|
157
390
|
}
|
|
158
|
-
|
|
391
|
+
|
|
392
|
+
.status-rail .live.on::before {
|
|
159
393
|
background: var(--ok);
|
|
160
394
|
}
|
|
395
|
+
|
|
161
396
|
.banner {
|
|
162
397
|
margin: 0;
|
|
163
|
-
padding: 10px
|
|
398
|
+
padding: 10px 18px;
|
|
164
399
|
background: var(--error-strong);
|
|
165
|
-
color:
|
|
400
|
+
color: #ffffff;
|
|
166
401
|
white-space: pre-wrap;
|
|
167
|
-
font: 12px/1.
|
|
402
|
+
font: 12px/1.45 var(--mono);
|
|
168
403
|
max-height: 30vh;
|
|
169
404
|
overflow: auto;
|
|
170
405
|
}
|
|
406
|
+
|
|
171
407
|
main {
|
|
172
408
|
flex: 1;
|
|
173
409
|
display: flex;
|
|
174
410
|
flex-direction: column;
|
|
175
411
|
min-height: 0;
|
|
176
412
|
}
|
|
413
|
+
|
|
177
414
|
.view {
|
|
178
415
|
flex: 1;
|
|
179
416
|
display: flex;
|
|
180
417
|
flex-direction: column;
|
|
181
418
|
min-height: 0;
|
|
182
419
|
}
|
|
420
|
+
|
|
183
421
|
.view[hidden] {
|
|
184
422
|
display: none;
|
|
185
423
|
}
|
|
424
|
+
|
|
425
|
+
/* The graph's toolbar: the layers as one segmented control, the actions to the right. */
|
|
426
|
+
|
|
186
427
|
.toolbar {
|
|
187
428
|
display: flex;
|
|
188
429
|
flex-wrap: wrap;
|
|
189
430
|
align-items: center;
|
|
431
|
+
justify-content: space-between;
|
|
190
432
|
gap: 8px 16px;
|
|
191
|
-
|
|
433
|
+
min-height: 52px;
|
|
434
|
+
padding: 8px 18px;
|
|
192
435
|
background: var(--surface);
|
|
193
436
|
border-bottom: 1px solid var(--line);
|
|
194
437
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
.tables {
|
|
201
|
-
flex: 1;
|
|
202
|
-
overflow: auto;
|
|
203
|
-
padding: 16px 24px 48px;
|
|
204
|
-
}
|
|
205
|
-
.tables h2 {
|
|
206
|
-
font-family: var(--serif);
|
|
207
|
-
font-size: 30px;
|
|
208
|
-
font-weight: 400;
|
|
209
|
-
letter-spacing: -0.01em;
|
|
210
|
-
line-height: 1.25;
|
|
211
|
-
margin: 4px 0 8px;
|
|
212
|
-
display: flex;
|
|
213
|
-
align-items: center;
|
|
214
|
-
flex-wrap: wrap;
|
|
215
|
-
gap: 8px;
|
|
216
|
-
}
|
|
217
|
-
.tables h3 {
|
|
218
|
-
font-size: 14px;
|
|
219
|
-
margin: 24px 0 8px;
|
|
438
|
+
|
|
439
|
+
.toolbar nav {
|
|
440
|
+
gap: 0;
|
|
441
|
+
border: 1.5px solid var(--text);
|
|
442
|
+
border-radius: 2px;
|
|
220
443
|
}
|
|
221
|
-
|
|
444
|
+
|
|
445
|
+
.toolbar nav button {
|
|
446
|
+
min-height: 32px;
|
|
447
|
+
padding: 4px 12px;
|
|
448
|
+
border: 0;
|
|
449
|
+
border-radius: 0;
|
|
450
|
+
background: transparent;
|
|
222
451
|
font-size: 13px;
|
|
223
|
-
margin: 16px 0 6px;
|
|
224
|
-
font-family: var(--mono);
|
|
225
|
-
font-weight: 600;
|
|
226
|
-
}
|
|
227
|
-
.tables p {
|
|
228
|
-
margin: 4px 0 8px;
|
|
229
452
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
453
|
+
|
|
454
|
+
.toolbar nav button + button {
|
|
455
|
+
border-left: 1.5px solid var(--line);
|
|
233
456
|
}
|
|
234
|
-
|
|
235
|
-
|
|
457
|
+
|
|
458
|
+
.toolbar nav button[aria-pressed="true"] {
|
|
459
|
+
background: var(--cobalt);
|
|
460
|
+
color: #ffffff;
|
|
236
461
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
462
|
+
|
|
463
|
+
.toolbar nav button .count,
|
|
464
|
+
.toolbar nav button small {
|
|
465
|
+
background: none;
|
|
466
|
+
color: inherit;
|
|
467
|
+
opacity: 0.7;
|
|
241
468
|
}
|
|
242
|
-
|
|
243
|
-
|
|
469
|
+
|
|
470
|
+
.toolbar .actions {
|
|
471
|
+
align-items: center;
|
|
472
|
+
gap: 6px;
|
|
244
473
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
474
|
+
|
|
475
|
+
.toolbar .actions button,
|
|
476
|
+
.menu summary {
|
|
477
|
+
min-height: 34px;
|
|
478
|
+
padding: 4px 12px;
|
|
249
479
|
font-size: 13px;
|
|
250
|
-
background: var(--surface);
|
|
251
|
-
border: 1px solid var(--line);
|
|
252
|
-
border-radius: 8px;
|
|
253
480
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
padding: 6px 10px;
|
|
258
|
-
border-bottom: 1px solid var(--line);
|
|
259
|
-
vertical-align: top;
|
|
260
|
-
overflow-wrap: break-word;
|
|
261
|
-
}
|
|
262
|
-
table.data tr:last-child > td,
|
|
263
|
-
table.data tr:last-child > th {
|
|
264
|
-
border-bottom: 0;
|
|
481
|
+
|
|
482
|
+
.menu {
|
|
483
|
+
position: relative;
|
|
265
484
|
}
|
|
266
|
-
|
|
267
|
-
|
|
485
|
+
|
|
486
|
+
.menu summary {
|
|
487
|
+
display: flex;
|
|
488
|
+
align-items: center;
|
|
489
|
+
gap: 8px;
|
|
490
|
+
border: 1.5px solid var(--edge);
|
|
491
|
+
border-radius: 2px;
|
|
492
|
+
background: var(--surface);
|
|
268
493
|
font-weight: 600;
|
|
269
|
-
|
|
270
|
-
|
|
494
|
+
list-style: none;
|
|
495
|
+
cursor: pointer;
|
|
271
496
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
text-underline-offset: 3px;
|
|
497
|
+
|
|
498
|
+
.menu summary::-webkit-details-marker {
|
|
499
|
+
display: none;
|
|
276
500
|
}
|
|
277
|
-
|
|
278
|
-
|
|
501
|
+
|
|
502
|
+
.menu summary::after {
|
|
503
|
+
content: "";
|
|
504
|
+
width: 7px;
|
|
505
|
+
height: 7px;
|
|
506
|
+
margin-top: -4px;
|
|
507
|
+
border-right: 1.5px solid currentColor;
|
|
508
|
+
border-bottom: 1.5px solid currentColor;
|
|
509
|
+
transform: rotate(45deg);
|
|
279
510
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
511
|
+
|
|
512
|
+
.menu summary:hover {
|
|
513
|
+
border-color: var(--accent);
|
|
514
|
+
color: var(--accent);
|
|
283
515
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
516
|
+
|
|
517
|
+
.menu-items {
|
|
518
|
+
position: absolute;
|
|
519
|
+
top: calc(100% + 4px);
|
|
520
|
+
right: 0;
|
|
521
|
+
z-index: 5;
|
|
522
|
+
display: grid;
|
|
523
|
+
min-width: 120px;
|
|
524
|
+
padding: 4px;
|
|
525
|
+
border: 1.5px solid var(--text);
|
|
526
|
+
border-radius: 2px;
|
|
527
|
+
background: var(--surface);
|
|
528
|
+
box-shadow: 0 8px 20px rgba(10, 26, 54, 0.18);
|
|
289
529
|
}
|
|
290
|
-
|
|
291
|
-
|
|
530
|
+
|
|
531
|
+
.menu-items button {
|
|
532
|
+
justify-content: flex-start;
|
|
533
|
+
border: 0;
|
|
534
|
+
text-align: left;
|
|
292
535
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
536
|
+
|
|
537
|
+
/* The drawing board. */
|
|
538
|
+
|
|
539
|
+
.stage {
|
|
540
|
+
flex: 1;
|
|
541
|
+
display: flex;
|
|
542
|
+
min-height: 0;
|
|
543
|
+
background-color: var(--bg);
|
|
544
|
+
background-image: radial-gradient(circle, var(--dots) 1.2px, transparent 1.6px);
|
|
545
|
+
background-size: 24px 24px;
|
|
302
546
|
}
|
|
547
|
+
|
|
303
548
|
svg.canvas {
|
|
304
549
|
flex: 1;
|
|
305
550
|
min-width: 0;
|
|
@@ -308,258 +553,520 @@ svg.canvas {
|
|
|
308
553
|
touch-action: none;
|
|
309
554
|
user-select: none;
|
|
310
555
|
}
|
|
556
|
+
|
|
311
557
|
svg.canvas.panning {
|
|
312
558
|
cursor: grabbing;
|
|
313
559
|
}
|
|
560
|
+
|
|
561
|
+
.edge path {
|
|
562
|
+
fill: none;
|
|
563
|
+
stroke: var(--edge);
|
|
564
|
+
stroke-width: 2;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.edge text {
|
|
568
|
+
font-size: 12.5px;
|
|
569
|
+
fill: var(--muted);
|
|
570
|
+
paint-order: stroke;
|
|
571
|
+
stroke: var(--bg);
|
|
572
|
+
stroke-width: 5px;
|
|
573
|
+
stroke-linejoin: round;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.edge .hit {
|
|
577
|
+
stroke: transparent;
|
|
578
|
+
stroke-width: 12;
|
|
579
|
+
cursor: pointer;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.edge.one-sided path:not(.hit) {
|
|
583
|
+
stroke: var(--warning);
|
|
584
|
+
stroke-width: 3;
|
|
585
|
+
stroke-dasharray: 4 4;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
.edge.selected path:not(.hit),
|
|
589
|
+
.edge.lit path:not(.hit) {
|
|
590
|
+
stroke: var(--accent);
|
|
591
|
+
stroke-width: 4;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.edge.selected text,
|
|
595
|
+
.edge.lit text {
|
|
596
|
+
fill: var(--text);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.edge.added path:not(.hit) {
|
|
600
|
+
stroke: var(--ok);
|
|
601
|
+
stroke-width: 4;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.edge.gone path:not(.hit) {
|
|
605
|
+
stroke: var(--error);
|
|
606
|
+
stroke-width: 4;
|
|
607
|
+
stroke-dasharray: 10 5;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
.node {
|
|
611
|
+
cursor: pointer;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
.node > rect {
|
|
615
|
+
fill: var(--surface);
|
|
616
|
+
stroke: var(--text);
|
|
617
|
+
stroke-width: 2;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.node.segment > rect {
|
|
621
|
+
fill: var(--segment);
|
|
622
|
+
stroke: var(--yellow-deep);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.node.outside > rect {
|
|
626
|
+
fill: var(--bg);
|
|
627
|
+
stroke: var(--edge);
|
|
628
|
+
stroke-dasharray: 2 4;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
.node.error > rect {
|
|
632
|
+
stroke: var(--error);
|
|
633
|
+
stroke-width: 4;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
.node.warning > rect {
|
|
637
|
+
stroke: var(--warning);
|
|
638
|
+
stroke-width: 4;
|
|
639
|
+
stroke-dasharray: 10 3;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
.node.selected > rect {
|
|
643
|
+
fill: var(--selected);
|
|
644
|
+
stroke: var(--cobalt);
|
|
645
|
+
stroke-width: 4;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
.node .chassis > rect:first-child {
|
|
649
|
+
fill: var(--cobalt);
|
|
650
|
+
stroke: none;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
.node .chassis .socket {
|
|
654
|
+
fill: #ffffff;
|
|
655
|
+
stroke: none;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.node.selected .chassis .socket {
|
|
659
|
+
fill: var(--yellow);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
.node text {
|
|
663
|
+
fill: var(--text);
|
|
664
|
+
font-size: 14px;
|
|
665
|
+
text-anchor: middle;
|
|
666
|
+
dominant-baseline: central;
|
|
667
|
+
pointer-events: none;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.node.device text {
|
|
671
|
+
text-anchor: start;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.node text.name {
|
|
675
|
+
font-size: 18px;
|
|
676
|
+
font-weight: 700;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
.node text.sub {
|
|
680
|
+
fill: var(--muted);
|
|
681
|
+
font-size: 13px;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.node.segment text,
|
|
685
|
+
.node.outside text {
|
|
686
|
+
font-family: var(--mono);
|
|
687
|
+
font-size: 12px;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.dim {
|
|
691
|
+
opacity: 0.18;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
svg.far .edge text {
|
|
695
|
+
display: none;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/* The side panel: what is selected, or the layer's legend. */
|
|
699
|
+
|
|
314
700
|
aside {
|
|
315
|
-
width:
|
|
701
|
+
width: 390px;
|
|
316
702
|
overflow: auto;
|
|
317
|
-
padding:
|
|
703
|
+
padding: 20px 22px 32px;
|
|
318
704
|
background: var(--surface);
|
|
319
705
|
border-left: 1px solid var(--line);
|
|
320
706
|
}
|
|
707
|
+
|
|
321
708
|
aside h2 {
|
|
322
|
-
|
|
323
|
-
font-
|
|
324
|
-
font-
|
|
325
|
-
|
|
709
|
+
margin: 0 0 8px;
|
|
710
|
+
font-family: var(--display);
|
|
711
|
+
font-size: 26px;
|
|
712
|
+
font-weight: 700;
|
|
713
|
+
letter-spacing: -0.015em;
|
|
714
|
+
line-height: 1.15;
|
|
326
715
|
overflow-wrap: anywhere;
|
|
716
|
+
display: table;
|
|
717
|
+
padding-bottom: 12px;
|
|
718
|
+
background: radial-gradient(circle, var(--heading-dots) 48%, transparent 52%) left bottom / 14px 7px space no-repeat;
|
|
327
719
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
720
|
+
|
|
721
|
+
aside h3,
|
|
722
|
+
.tables h3 {
|
|
723
|
+
margin: 26px 0 8px;
|
|
724
|
+
color: var(--text);
|
|
725
|
+
font-size: 11px;
|
|
726
|
+
font-weight: 700;
|
|
727
|
+
font-stretch: 115%;
|
|
728
|
+
letter-spacing: 0.1em;
|
|
729
|
+
text-transform: uppercase;
|
|
333
730
|
}
|
|
731
|
+
|
|
334
732
|
aside ul {
|
|
335
733
|
list-style: none;
|
|
336
734
|
margin: 0;
|
|
337
735
|
padding: 0;
|
|
338
736
|
}
|
|
737
|
+
|
|
339
738
|
aside li {
|
|
340
739
|
padding: 3px 0;
|
|
341
740
|
overflow-wrap: anywhere;
|
|
342
741
|
}
|
|
742
|
+
|
|
343
743
|
aside .kind {
|
|
344
744
|
color: var(--muted);
|
|
345
745
|
font-size: 12px;
|
|
346
746
|
}
|
|
747
|
+
|
|
347
748
|
aside pre {
|
|
348
749
|
margin: 0;
|
|
349
|
-
|
|
750
|
+
padding: 10px;
|
|
751
|
+
border-radius: 2px;
|
|
752
|
+
background: var(--navy);
|
|
753
|
+
color: #e6ecfa;
|
|
754
|
+
font: 12px/1.5 var(--mono);
|
|
350
755
|
white-space: pre-wrap;
|
|
351
756
|
overflow-wrap: anywhere;
|
|
352
|
-
background: var(--bg);
|
|
353
|
-
padding: 8px;
|
|
354
|
-
border-radius: 6px;
|
|
355
757
|
}
|
|
758
|
+
|
|
759
|
+
.legend li {
|
|
760
|
+
display: flex;
|
|
761
|
+
align-items: center;
|
|
762
|
+
gap: 10px;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.legend svg {
|
|
766
|
+
flex: none;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* Marks that pair a colour with a word. */
|
|
770
|
+
|
|
356
771
|
.badge {
|
|
357
772
|
display: inline-block;
|
|
358
|
-
font-size: 11px;
|
|
359
|
-
font-weight: 600;
|
|
360
|
-
padding: 0 6px;
|
|
361
|
-
border-radius: 4px;
|
|
362
773
|
margin-right: 6px;
|
|
363
|
-
|
|
774
|
+
padding: 1px 6px;
|
|
775
|
+
border-radius: 2px;
|
|
364
776
|
font-family: var(--font);
|
|
777
|
+
font-size: 11px;
|
|
778
|
+
font-weight: 700;
|
|
779
|
+
font-stretch: 112%;
|
|
780
|
+
letter-spacing: 0.06em;
|
|
781
|
+
text-transform: uppercase;
|
|
365
782
|
}
|
|
783
|
+
|
|
366
784
|
.badge.error {
|
|
367
785
|
background: var(--error-strong);
|
|
786
|
+
color: #ffffff;
|
|
368
787
|
}
|
|
788
|
+
|
|
369
789
|
.badge.warning {
|
|
370
790
|
background: var(--warning-strong);
|
|
791
|
+
color: #11141b;
|
|
371
792
|
}
|
|
793
|
+
|
|
372
794
|
.chips {
|
|
373
795
|
display: flex;
|
|
374
796
|
flex-wrap: wrap;
|
|
375
797
|
gap: 6px;
|
|
376
798
|
}
|
|
799
|
+
|
|
377
800
|
.chips button {
|
|
378
|
-
|
|
801
|
+
min-height: 28px;
|
|
802
|
+
padding: 2px 9px;
|
|
379
803
|
font-size: 12px;
|
|
380
804
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
805
|
+
|
|
806
|
+
/* The tables. */
|
|
807
|
+
|
|
808
|
+
.tables {
|
|
809
|
+
flex: 1;
|
|
810
|
+
overflow: auto;
|
|
811
|
+
padding: 28px clamp(16px, 4vw, 56px) 64px;
|
|
385
812
|
}
|
|
386
|
-
|
|
387
|
-
|
|
813
|
+
|
|
814
|
+
.tables h2 {
|
|
815
|
+
margin: 6px 0 18px;
|
|
816
|
+
font-family: var(--display);
|
|
817
|
+
font-size: clamp(30px, 3.2vw, 44px);
|
|
818
|
+
font-weight: 700;
|
|
819
|
+
letter-spacing: -0.03em;
|
|
820
|
+
line-height: 1.2;
|
|
821
|
+
display: table;
|
|
822
|
+
padding-bottom: 14px;
|
|
823
|
+
background: radial-gradient(circle, var(--heading-dots) 48%, transparent 52%) left bottom / 18px 9px space no-repeat;
|
|
388
824
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
825
|
+
|
|
826
|
+
.tables h2 .badge {
|
|
827
|
+
margin-left: 10px;
|
|
828
|
+
vertical-align: middle;
|
|
829
|
+
letter-spacing: 0.06em;
|
|
393
830
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
831
|
+
|
|
832
|
+
@media (prefers-color-scheme: dark) {
|
|
833
|
+
:root {
|
|
834
|
+
--heading-dots: var(--accent);
|
|
835
|
+
}
|
|
397
836
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
stroke-linejoin: round;
|
|
837
|
+
|
|
838
|
+
.tables h4 {
|
|
839
|
+
margin: 16px 0 6px;
|
|
840
|
+
font-family: var(--mono);
|
|
841
|
+
font-size: 13px;
|
|
842
|
+
font-weight: 600;
|
|
405
843
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
cursor: pointer;
|
|
844
|
+
|
|
845
|
+
.tables p {
|
|
846
|
+
margin: 4px 0 8px;
|
|
410
847
|
}
|
|
411
|
-
|
|
412
|
-
.
|
|
413
|
-
|
|
414
|
-
|
|
848
|
+
|
|
849
|
+
.tables .crumbs {
|
|
850
|
+
margin: 0;
|
|
851
|
+
font-size: 13px;
|
|
415
852
|
}
|
|
416
|
-
|
|
417
|
-
.
|
|
418
|
-
|
|
853
|
+
|
|
854
|
+
.tables .findings {
|
|
855
|
+
list-style: none;
|
|
856
|
+
margin: 0;
|
|
857
|
+
padding: 0;
|
|
419
858
|
}
|
|
420
|
-
|
|
421
|
-
|
|
859
|
+
|
|
860
|
+
.tables .findings li {
|
|
861
|
+
padding: 3px 0;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
.tables .tabs {
|
|
865
|
+
display: flex;
|
|
866
|
+
flex-wrap: wrap;
|
|
867
|
+
gap: 0;
|
|
868
|
+
margin: 18px 0 14px;
|
|
869
|
+
border-bottom: 1.5px solid var(--line);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
.tabs button {
|
|
873
|
+
position: relative;
|
|
874
|
+
min-height: 40px;
|
|
875
|
+
padding: 8px 12px 10px;
|
|
876
|
+
border: 0;
|
|
877
|
+
border-radius: 0;
|
|
878
|
+
background: transparent;
|
|
879
|
+
color: var(--muted);
|
|
880
|
+
font-size: 14px;
|
|
422
881
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
882
|
+
|
|
883
|
+
.tabs button:hover {
|
|
884
|
+
color: var(--text);
|
|
885
|
+
background: var(--surface-raised);
|
|
427
886
|
}
|
|
428
|
-
|
|
429
|
-
|
|
887
|
+
|
|
888
|
+
.tabs button[aria-pressed="true"] {
|
|
889
|
+
background: transparent;
|
|
890
|
+
color: var(--text);
|
|
430
891
|
}
|
|
431
|
-
|
|
432
|
-
|
|
892
|
+
|
|
893
|
+
.tabs button[aria-pressed="true"]::after {
|
|
894
|
+
content: "";
|
|
895
|
+
position: absolute;
|
|
896
|
+
right: 8px;
|
|
897
|
+
bottom: -1.5px;
|
|
898
|
+
left: 8px;
|
|
899
|
+
height: 4px;
|
|
900
|
+
background: var(--cobalt);
|
|
433
901
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
902
|
+
|
|
903
|
+
.table-block {
|
|
904
|
+
max-width: 100%;
|
|
905
|
+
overflow-x: auto;
|
|
437
906
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
907
|
+
|
|
908
|
+
table.data tbody th,
|
|
909
|
+
table.data td:first-child {
|
|
910
|
+
white-space: nowrap;
|
|
441
911
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
912
|
+
|
|
913
|
+
.table-actions {
|
|
914
|
+
margin: 0 0 6px;
|
|
915
|
+
font-size: 13px;
|
|
916
|
+
text-align: right;
|
|
445
917
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
918
|
+
|
|
919
|
+
table.data {
|
|
920
|
+
width: 100%;
|
|
921
|
+
border: 0;
|
|
922
|
+
border-collapse: collapse;
|
|
923
|
+
background: var(--surface);
|
|
924
|
+
font-size: 13.5px;
|
|
925
|
+
font-variant-numeric: tabular-nums;
|
|
452
926
|
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
927
|
+
|
|
928
|
+
table.data th,
|
|
929
|
+
table.data td {
|
|
930
|
+
padding: 8px 12px;
|
|
931
|
+
border-bottom: 1px solid var(--line);
|
|
932
|
+
overflow-wrap: break-word;
|
|
933
|
+
text-align: left;
|
|
934
|
+
vertical-align: top;
|
|
456
935
|
}
|
|
457
|
-
|
|
458
|
-
|
|
936
|
+
|
|
937
|
+
table.data thead th {
|
|
938
|
+
border-bottom: 2px solid var(--text);
|
|
939
|
+
background: var(--surface);
|
|
940
|
+
color: var(--text);
|
|
459
941
|
font-size: 11px;
|
|
942
|
+
font-weight: 700;
|
|
943
|
+
font-stretch: 112%;
|
|
944
|
+
letter-spacing: 0.08em;
|
|
945
|
+
text-transform: uppercase;
|
|
946
|
+
white-space: nowrap;
|
|
460
947
|
}
|
|
461
|
-
|
|
462
|
-
.
|
|
463
|
-
|
|
464
|
-
|
|
948
|
+
|
|
949
|
+
table.data th[title] {
|
|
950
|
+
cursor: help;
|
|
951
|
+
text-decoration: underline dotted;
|
|
952
|
+
text-underline-offset: 3px;
|
|
465
953
|
}
|
|
466
|
-
|
|
467
|
-
|
|
954
|
+
|
|
955
|
+
table.data tbody tr:hover > td,
|
|
956
|
+
table.data tbody tr:hover > th {
|
|
957
|
+
background: var(--surface-raised);
|
|
468
958
|
}
|
|
469
|
-
|
|
470
|
-
|
|
959
|
+
|
|
960
|
+
table.data tr.muted td {
|
|
961
|
+
color: var(--muted);
|
|
471
962
|
}
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
aside {
|
|
477
|
-
width: auto;
|
|
478
|
-
height: 40%;
|
|
479
|
-
border-left: 0;
|
|
480
|
-
border-top: 1px solid var(--line);
|
|
481
|
-
}
|
|
482
|
-
.tables {
|
|
483
|
-
padding: 12px 16px 40px;
|
|
484
|
-
}
|
|
485
|
-
header input[type="search"] {
|
|
486
|
-
width: 100%;
|
|
487
|
-
}
|
|
963
|
+
|
|
964
|
+
table.settings {
|
|
965
|
+
width: auto;
|
|
966
|
+
min-width: min(560px, 100%);
|
|
488
967
|
}
|
|
489
968
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
font-
|
|
494
|
-
|
|
969
|
+
table.settings > tbody > tr > th {
|
|
970
|
+
width: 1%;
|
|
971
|
+
color: var(--muted);
|
|
972
|
+
font-weight: 600;
|
|
973
|
+
white-space: nowrap;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
table.data table.data {
|
|
977
|
+
margin: 0;
|
|
495
978
|
}
|
|
496
979
|
|
|
497
|
-
/* The row a port's square points to. */
|
|
498
980
|
tr.flash td {
|
|
499
|
-
background: var(--
|
|
981
|
+
background: var(--selected) !important;
|
|
500
982
|
transition: background 0.4s;
|
|
501
983
|
}
|
|
502
984
|
|
|
503
|
-
|
|
985
|
+
pre.code {
|
|
986
|
+
margin: 0;
|
|
987
|
+
padding: 14px;
|
|
988
|
+
overflow: auto;
|
|
989
|
+
border-radius: 2px;
|
|
990
|
+
background: var(--navy);
|
|
991
|
+
color: #e6ecfa;
|
|
992
|
+
font: 12.5px/1.55 var(--mono);
|
|
993
|
+
white-space: pre;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
/* A device's front panel: a square per port, by speed. Each use has its own fill and edge, not colour alone. */
|
|
997
|
+
|
|
504
998
|
.faceplate {
|
|
505
999
|
display: flex;
|
|
506
1000
|
flex-wrap: wrap;
|
|
507
|
-
gap:
|
|
508
|
-
|
|
1001
|
+
gap: 16px 28px;
|
|
1002
|
+
max-width: 100%;
|
|
509
1003
|
margin: 8px 0;
|
|
1004
|
+
padding: 18px;
|
|
1005
|
+
overflow-x: auto;
|
|
1006
|
+
border: 2px solid var(--text);
|
|
1007
|
+
border-radius: 2px;
|
|
510
1008
|
background: var(--surface);
|
|
511
|
-
border: 1px solid var(--line);
|
|
512
|
-
border-radius: 8px;
|
|
513
1009
|
}
|
|
1010
|
+
|
|
514
1011
|
.faceplate .speed {
|
|
515
1012
|
display: flex;
|
|
516
1013
|
align-items: center;
|
|
517
1014
|
gap: 10px;
|
|
1015
|
+
min-width: max-content;
|
|
518
1016
|
}
|
|
1017
|
+
|
|
519
1018
|
.faceplate .speed-name {
|
|
1019
|
+
min-width: 36px;
|
|
1020
|
+
color: var(--muted);
|
|
520
1021
|
font-family: var(--mono);
|
|
521
1022
|
font-size: 12px;
|
|
522
|
-
color: var(--muted);
|
|
523
|
-
min-width: 36px;
|
|
524
1023
|
}
|
|
1024
|
+
|
|
525
1025
|
.faceplate .ports {
|
|
526
1026
|
display: grid;
|
|
527
1027
|
grid-template-rows: repeat(2, auto);
|
|
528
1028
|
grid-auto-flow: column;
|
|
529
1029
|
gap: 4px;
|
|
530
1030
|
}
|
|
1031
|
+
|
|
531
1032
|
.port {
|
|
532
1033
|
position: relative;
|
|
533
1034
|
display: inline-block;
|
|
534
1035
|
width: 28px;
|
|
535
1036
|
height: 24px;
|
|
536
1037
|
padding: 0;
|
|
537
|
-
|
|
538
|
-
border-radius:
|
|
539
|
-
border: 1px solid var(--line);
|
|
1038
|
+
border: 1.5px solid var(--edge);
|
|
1039
|
+
border-radius: 2px;
|
|
540
1040
|
background: var(--surface);
|
|
541
1041
|
color: var(--text);
|
|
1042
|
+
font: 600 11px var(--font);
|
|
542
1043
|
}
|
|
1044
|
+
|
|
543
1045
|
.port.shut {
|
|
544
|
-
border-style: dashed;
|
|
545
1046
|
color: var(--muted);
|
|
546
|
-
background: var(--
|
|
1047
|
+
background: repeating-linear-gradient(135deg, var(--surface) 0 3px, var(--line) 3px 5px);
|
|
547
1048
|
}
|
|
1049
|
+
|
|
548
1050
|
.port.access {
|
|
549
|
-
background: var(--
|
|
550
|
-
border
|
|
1051
|
+
background: var(--surface);
|
|
1052
|
+
border: 2px solid var(--cobalt);
|
|
551
1053
|
}
|
|
1054
|
+
|
|
552
1055
|
.port.trunk {
|
|
553
|
-
background: var(--
|
|
554
|
-
border
|
|
555
|
-
color:
|
|
1056
|
+
background: var(--yellow);
|
|
1057
|
+
border: 2px solid var(--text);
|
|
1058
|
+
color: #11141b;
|
|
556
1059
|
}
|
|
1060
|
+
|
|
557
1061
|
.port.routed {
|
|
558
|
-
|
|
1062
|
+
background: var(--surface);
|
|
1063
|
+
border: 3px double var(--text);
|
|
559
1064
|
}
|
|
1065
|
+
|
|
560
1066
|
.port.lag {
|
|
561
|
-
border: 2px
|
|
1067
|
+
border: 2px dashed var(--cobalt);
|
|
562
1068
|
}
|
|
1069
|
+
|
|
563
1070
|
.port.linked::after {
|
|
564
1071
|
content: "";
|
|
565
1072
|
position: absolute;
|
|
@@ -570,124 +1077,258 @@ tr.flash td {
|
|
|
570
1077
|
border-radius: 50%;
|
|
571
1078
|
background: var(--ok);
|
|
572
1079
|
}
|
|
1080
|
+
|
|
573
1081
|
.faceplate-legend {
|
|
574
1082
|
display: flex;
|
|
575
1083
|
flex-wrap: wrap;
|
|
576
1084
|
gap: 6px 16px;
|
|
577
|
-
list-style: none;
|
|
578
|
-
padding: 0;
|
|
579
1085
|
margin: 0 0 12px;
|
|
580
|
-
|
|
1086
|
+
padding: 0;
|
|
581
1087
|
color: var(--muted);
|
|
1088
|
+
font-size: 12px;
|
|
1089
|
+
list-style: none;
|
|
582
1090
|
}
|
|
1091
|
+
|
|
583
1092
|
.faceplate-legend li {
|
|
584
1093
|
display: flex;
|
|
585
1094
|
align-items: center;
|
|
586
1095
|
gap: 6px;
|
|
587
1096
|
}
|
|
1097
|
+
|
|
588
1098
|
.faceplate-legend .port {
|
|
589
1099
|
width: 18px;
|
|
590
1100
|
height: 14px;
|
|
591
1101
|
}
|
|
592
1102
|
|
|
593
1103
|
/* A line diff: removed lines, added lines, and runs of the same folded away. */
|
|
1104
|
+
|
|
594
1105
|
pre.diff .removed,
|
|
595
1106
|
p .removed {
|
|
596
1107
|
color: var(--error);
|
|
597
1108
|
}
|
|
1109
|
+
|
|
598
1110
|
pre.diff .added,
|
|
599
1111
|
p .added {
|
|
600
1112
|
color: var(--ok);
|
|
601
1113
|
}
|
|
1114
|
+
|
|
1115
|
+
pre.code.diff .removed {
|
|
1116
|
+
color: #ff9ca0;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
pre.code.diff .added {
|
|
1120
|
+
color: #7fe0a6;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
602
1123
|
pre.diff .fold {
|
|
603
1124
|
display: block;
|
|
1125
|
+
margin: 4px 0;
|
|
604
1126
|
color: var(--muted);
|
|
605
1127
|
font-style: italic;
|
|
606
|
-
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
pre.code.diff .fold {
|
|
1131
|
+
color: #9db3e0;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
.added {
|
|
1135
|
+
color: var(--ok);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.removed {
|
|
1139
|
+
color: var(--error);
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
details.change {
|
|
1143
|
+
margin: 6px 0;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
details.change summary {
|
|
1147
|
+
padding: 4px 0;
|
|
1148
|
+
font-weight: 600;
|
|
1149
|
+
cursor: pointer;
|
|
607
1150
|
}
|
|
608
1151
|
|
|
609
1152
|
/* The tools' forms: a field per line on a narrow screen, several side by side on a wide one. */
|
|
1153
|
+
|
|
610
1154
|
.tool-form {
|
|
611
1155
|
display: flex;
|
|
612
1156
|
flex-wrap: wrap;
|
|
613
|
-
align-items: flex-
|
|
1157
|
+
align-items: flex-start;
|
|
614
1158
|
gap: 12px 16px;
|
|
615
|
-
margin: 12px 0
|
|
616
|
-
padding:
|
|
1159
|
+
margin: 12px 0 18px;
|
|
1160
|
+
padding: 16px;
|
|
1161
|
+
border: 2px solid var(--text);
|
|
1162
|
+
border-radius: 2px;
|
|
617
1163
|
background: var(--surface);
|
|
618
|
-
border: 1px solid var(--line);
|
|
619
|
-
border-radius: 8px;
|
|
620
1164
|
}
|
|
1165
|
+
|
|
1166
|
+
.tool-form > button {
|
|
1167
|
+
margin-top: 24px;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
621
1170
|
.field {
|
|
622
1171
|
display: flex;
|
|
623
1172
|
flex-direction: column;
|
|
624
1173
|
gap: 4px;
|
|
625
|
-
font-size: 13px;
|
|
626
1174
|
color: var(--muted);
|
|
1175
|
+
font-size: 13px;
|
|
1176
|
+
font-weight: 600;
|
|
627
1177
|
}
|
|
1178
|
+
|
|
628
1179
|
.field input[type="text"],
|
|
629
1180
|
.field select {
|
|
630
|
-
font: inherit;
|
|
631
|
-
color: var(--text);
|
|
632
|
-
background: var(--bg);
|
|
633
|
-
border: 1px solid var(--line);
|
|
634
|
-
border-radius: 6px;
|
|
635
|
-
padding: 5px 8px;
|
|
636
1181
|
min-width: 150px;
|
|
1182
|
+
min-height: 36px;
|
|
1183
|
+
padding: 5px 9px;
|
|
1184
|
+
border: 1.5px solid var(--edge);
|
|
1185
|
+
border-radius: 2px;
|
|
1186
|
+
background: var(--bg);
|
|
1187
|
+
color: var(--text);
|
|
1188
|
+
font: inherit;
|
|
1189
|
+
font-weight: 400;
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
.field input[type="text"]:focus,
|
|
1193
|
+
.field select:focus {
|
|
1194
|
+
border-color: var(--cobalt);
|
|
637
1195
|
}
|
|
1196
|
+
|
|
638
1197
|
.field small {
|
|
639
1198
|
font-size: 11px;
|
|
1199
|
+
font-weight: 400;
|
|
640
1200
|
}
|
|
1201
|
+
|
|
641
1202
|
.flags {
|
|
642
1203
|
display: flex;
|
|
643
1204
|
flex-wrap: wrap;
|
|
644
1205
|
gap: 4px 12px;
|
|
645
1206
|
color: var(--text);
|
|
646
1207
|
}
|
|
1208
|
+
|
|
647
1209
|
.flag {
|
|
648
1210
|
display: flex;
|
|
649
1211
|
align-items: center;
|
|
650
1212
|
gap: 4px;
|
|
651
1213
|
}
|
|
1214
|
+
|
|
652
1215
|
button.primary {
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
color:
|
|
1216
|
+
border-color: var(--text);
|
|
1217
|
+
background: var(--yellow);
|
|
1218
|
+
color: #11141b;
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
button.primary:hover {
|
|
1222
|
+
background: var(--yellow-deep);
|
|
1223
|
+
color: #11141b;
|
|
656
1224
|
}
|
|
1225
|
+
|
|
657
1226
|
.verdict {
|
|
658
|
-
font-weight:
|
|
1227
|
+
font-weight: 700;
|
|
659
1228
|
}
|
|
1229
|
+
|
|
660
1230
|
.verdict.accept {
|
|
661
1231
|
color: var(--ok);
|
|
662
1232
|
}
|
|
1233
|
+
|
|
663
1234
|
.verdict.drop,
|
|
664
1235
|
.verdict.reject {
|
|
665
1236
|
color: var(--error);
|
|
666
1237
|
}
|
|
1238
|
+
|
|
667
1239
|
.verdict.unknown {
|
|
668
1240
|
color: var(--warning);
|
|
669
1241
|
}
|
|
670
1242
|
|
|
671
|
-
/*
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
}
|
|
680
|
-
.added {
|
|
681
|
-
color: var(--ok);
|
|
682
|
-
}
|
|
683
|
-
.removed {
|
|
684
|
-
color: var(--error);
|
|
1243
|
+
/* Narrower windows: the search drops under the views, then the panel moves under the graph. */
|
|
1244
|
+
|
|
1245
|
+
@media (max-width: 1180px) {
|
|
1246
|
+
header input[type="search"] {
|
|
1247
|
+
order: 5;
|
|
1248
|
+
width: calc(100% - 36px);
|
|
1249
|
+
margin: 0 18px 10px;
|
|
1250
|
+
}
|
|
685
1251
|
}
|
|
686
|
-
|
|
687
|
-
|
|
1252
|
+
|
|
1253
|
+
@media (max-width: 760px) {
|
|
1254
|
+
header .brand {
|
|
1255
|
+
width: 100%;
|
|
1256
|
+
min-height: 52px;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
header > nav {
|
|
1260
|
+
width: 100%;
|
|
1261
|
+
overflow-x: auto;
|
|
1262
|
+
flex-wrap: nowrap;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
header > nav button {
|
|
1266
|
+
flex: none;
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
.status-rail {
|
|
1270
|
+
align-items: flex-start;
|
|
1271
|
+
gap: 8px;
|
|
1272
|
+
padding-block: 8px;
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
.summary-item,
|
|
1276
|
+
.summary-item:first-child {
|
|
1277
|
+
min-height: 28px;
|
|
1278
|
+
padding: 0 14px 0 0;
|
|
1279
|
+
border-left: 0;
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
.toolbar nav {
|
|
1283
|
+
flex-wrap: nowrap;
|
|
1284
|
+
max-width: 100%;
|
|
1285
|
+
overflow-x: auto;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
.toolbar nav button {
|
|
1289
|
+
flex: none;
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
.stage {
|
|
1293
|
+
flex-direction: column;
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
svg.canvas {
|
|
1297
|
+
flex: 1 1 auto;
|
|
1298
|
+
width: 100%;
|
|
1299
|
+
min-height: 320px;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
aside {
|
|
1303
|
+
width: auto;
|
|
1304
|
+
height: 42%;
|
|
1305
|
+
border-top: 2px solid var(--text);
|
|
1306
|
+
border-left: 0;
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
.tables {
|
|
1310
|
+
padding: 20px 16px 40px;
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
.port {
|
|
1314
|
+
width: 44px;
|
|
1315
|
+
height: 40px;
|
|
1316
|
+
font-size: 13px;
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
.faceplate-legend .port {
|
|
1320
|
+
width: 24px;
|
|
1321
|
+
height: 18px;
|
|
1322
|
+
}
|
|
688
1323
|
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
1324
|
+
|
|
1325
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1326
|
+
*,
|
|
1327
|
+
*::before,
|
|
1328
|
+
*::after {
|
|
1329
|
+
scroll-behavior: auto !important;
|
|
1330
|
+
transition-duration: 0.01ms !important;
|
|
1331
|
+
animation-duration: 0.01ms !important;
|
|
1332
|
+
animation-iteration-count: 1 !important;
|
|
1333
|
+
}
|
|
693
1334
|
}
|