@crewlethq/ui 0.6.3 → 0.7.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 +109 -0
- package/dist/AddPill/index.js +1 -1
- package/dist/{AddPill-IJQYCY6C.css → AddPill-V4TQXJ53.css} +23 -22
- package/dist/AppShell/index.js +2 -2
- package/dist/{AppShell-XARELGIH.css → AppShell-CEVLW4QG.css} +3 -1
- package/dist/Button/index.js +1 -1
- package/dist/{Button-EXU36DEH.css → Button-UWKBTKYD.css} +18 -0
- package/dist/Canvas/Canvas.d.ts +16 -1
- package/dist/Canvas/index.d.ts +1 -1
- package/dist/Canvas/index.js +3 -3
- package/dist/{Canvas-Q6JETCWR.css → Canvas-YVXHMWLN.css} +13 -0
- package/dist/Card/index.js +1 -1
- package/dist/{Card-GLP7SUV6.css → Card-KJOYHDTJ.css} +5 -1
- package/dist/Checkbox/index.js +1 -1
- package/dist/{Checkbox-BOXQ747I.css → Checkbox-UE7TEPAM.css} +9 -1
- package/dist/CodeBlock/index.js +4 -4
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +6 -6
- package/dist/Copyable/index.js +3 -3
- package/dist/DataTable/index.js +6 -6
- package/dist/{DataTable-OLHPF7D4.css → DataTable-WZK3V62B.css} +11 -0
- package/dist/DataView/index.js +11 -11
- package/dist/DateTimePicker/index.js +4 -4
- package/dist/{DateTimePicker-22VNXRWC.css → DateTimePicker-4AZBTODT.css} +11 -6
- package/dist/ErrorBoundary/index.js +2 -2
- package/dist/FilterChip/index.js +1 -1
- package/dist/{FilterChip-GTGLLOXE.css → FilterChip-EZ4QMW4E.css} +4 -1
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-TVEUWK6L.css → IconButton-VYWP6SGW.css} +15 -0
- package/dist/ImageUpload/index.js +1 -1
- package/dist/{ImageUpload-YCHJMUGX.css → ImageUpload-L2GE4JUM.css} +5 -1
- package/dist/Input/index.js +2 -2
- package/dist/{Input-2PU5CPKK.css → Input-DRFNI26F.css} +40 -10
- package/dist/Kbd/index.js +1 -1
- package/dist/{Kbd-JPLDVJIP.css → Kbd-MCWJTRTT.css} +11 -0
- package/dist/ListInput/index.js +4 -4
- package/dist/Menu/index.js +3 -3
- package/dist/Modal/index.js +3 -3
- package/dist/NewItemsNotice/index.js +1 -1
- package/dist/{NewItemsNotice-T4DSSPVV.css → NewItemsNotice-Q5ED73BQ.css} +3 -1
- package/dist/OrgLabel/OrgLabel.d.ts +12 -3
- package/dist/OrgLabel/index.js +1 -1
- package/dist/{OrgLabel-CR233G34.css → OrgLabel-6WSKJQOT.css} +38 -0
- package/dist/OrgNode/OrgNode.d.ts +7 -4
- package/dist/OrgNode/index.js +2 -2
- package/dist/{OrgNode-BT7T2Q2X.css → OrgNode-TCHJH5FO.css} +89 -45
- package/dist/OrgTable/index.js +5 -5
- package/dist/{OrgTable-VWMFC3TB.css → OrgTable-JZSYTUIK.css} +28 -4
- package/dist/Popover/index.js +1 -1
- package/dist/{Popover-WJGCF3ZQ.css → Popover-QCINR7WG.css} +5 -2
- package/dist/PricingCard/index.js +2 -2
- package/dist/{PricingCard-7EFXRSD2.css → PricingCard-HTAHG4ST.css} +5 -1
- package/dist/SearchTrigger/index.js +1 -1
- package/dist/{SearchTrigger-Z5D4AAY7.css → SearchTrigger-KIZLWBEH.css} +4 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts +19 -1
- package/dist/SegmentedControl/index.d.ts +1 -1
- package/dist/SegmentedControl/index.js +2 -2
- package/dist/SegmentedControl-76HODRBT.css +160 -0
- package/dist/Select/index.js +1 -1
- package/dist/{Select-E24U5LBC.css → Select-4ANVLHUY.css} +4 -4
- package/dist/Switch/index.js +1 -1
- package/dist/{Switch-U4OWK4CL.css → Switch-66RAQCRE.css} +8 -5
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-XCNPHA7B.css → Tabs-BWFQSWY3.css} +12 -0
- package/dist/Tag/index.js +1 -1
- package/dist/{Tag-4OXGO2DU.css → Tag-4BRQS6GN.css} +28 -1
- package/dist/TagGroup/index.js +1 -1
- package/dist/{TagGroup-APC2EFH4.css → TagGroup-BCQZD7ZD.css} +4 -1
- package/dist/TagsInput/index.js +3 -3
- package/dist/{TagsInput-W4P36PRJ.css → TagsInput-P2HS5QL4.css} +2 -2
- package/dist/ThemeSwitcher/index.js +3 -3
- package/dist/ThemeToggle/index.js +2 -2
- package/dist/TimeWindowPicker/index.js +6 -6
- package/dist/{TimeWindowPicker-7I7KWCMU.css → TimeWindowPicker-GBF4JDFI.css} +21 -8
- package/dist/Tree/layout.d.ts +3 -3
- package/dist/TreeCanvas/TreeCanvas.d.ts +7 -5
- package/dist/TreeCanvas/index.js +4 -4
- package/dist/{TreeCanvas-HVOV4SQN.css → TreeCanvas-L2XYONWL.css} +80 -74
- package/dist/TreeGrid/index.js +2 -2
- package/dist/{chunk-SVNXOK25.js → chunk-26SCUACK.js} +2 -2
- package/dist/{chunk-4UQ7SMPK.js → chunk-4FQT6ZAY.js} +1 -1
- package/dist/{chunk-IBYO2IJN.js → chunk-5I56UXBJ.js} +4 -4
- package/dist/{chunk-ZFATEERP.js → chunk-5YLON2PW.js} +1 -1
- package/dist/{chunk-EFYPAJT3.js → chunk-6DRDCT22.js} +1 -1
- package/dist/{chunk-PQNILU27.js → chunk-6HXH57BL.js} +3 -3
- package/dist/{chunk-BNCCEER3.js → chunk-6SIG5I72.js} +22 -11
- package/dist/{chunk-OM5E3TTK.js → chunk-74WGARJE.js} +5 -2
- package/dist/{chunk-EV6IMYJ6.js → chunk-A722MUNR.js} +1 -1
- package/dist/{chunk-WOFOMTGB.js → chunk-B47YUQGM.js} +6 -2
- package/dist/{chunk-MV2E3QZM.js → chunk-BTHX2FS3.js} +2 -2
- package/dist/{chunk-2QLOH454.js → chunk-BXPLX7YU.js} +3 -3
- package/dist/{chunk-V34H2YCY.js → chunk-CEOXFO3E.js} +1 -1
- package/dist/{chunk-KKLITCMF.js → chunk-CLPDVL46.js} +8 -8
- package/dist/{chunk-AGQ3YLA5.js → chunk-CVB7O3SZ.js} +6 -6
- package/dist/{chunk-QY7UU5ZB.js → chunk-DRHXRGB6.js} +1 -1
- package/dist/{chunk-V2XMNLMS.js → chunk-E6UWRXNM.js} +1 -1
- package/dist/{chunk-NQ2HQ6P5.js → chunk-HVPC2GHY.js} +6 -6
- package/dist/{chunk-FFKYL7Z3.js → chunk-L7THQMFB.js} +4 -2
- package/dist/{chunk-PAWGBSHU.js → chunk-LOECRMHA.js} +1 -1
- package/dist/{chunk-LSJZUA5V.js → chunk-LSB3EHBW.js} +2 -2
- package/dist/{chunk-ERHSECG2.js → chunk-MORLKUGM.js} +1 -1
- package/dist/{chunk-UWQWTGQH.js → chunk-MPXI6FM6.js} +3 -3
- package/dist/{chunk-DHPUMOTX.js → chunk-N5KCGFWI.js} +8 -4
- package/dist/{chunk-ZAO4HHXI.js → chunk-OG6CL3EB.js} +1 -1
- package/dist/{chunk-C5WJUZVR.js → chunk-ORNOOMVY.js} +1 -1
- package/dist/{chunk-WUVZDFHS.js → chunk-OVLJEVQS.js} +2 -2
- package/dist/{chunk-AUS5FNQE.js → chunk-PDUZO35I.js} +1 -1
- package/dist/{chunk-YLYOWZ4V.js → chunk-PXU6HOZB.js} +1 -1
- package/dist/{chunk-S7KW47IQ.js → chunk-RHHGLTXJ.js} +1 -1
- package/dist/{chunk-SJQ546ID.js → chunk-SEFMO2EV.js} +1 -1
- package/dist/{chunk-KJ34ZBBI.js → chunk-SMBKXWML.js} +1 -1
- package/dist/{chunk-FIFNP6PL.js → chunk-SX2DFTQV.js} +1 -1
- package/dist/{chunk-L6XZOCP4.js → chunk-UCYIRDND.js} +2 -2
- package/dist/{chunk-D6EVJUGU.js → chunk-UYK72NOS.js} +1 -1
- package/dist/{chunk-TIWAHZZ6.js → chunk-VCOELPCT.js} +2 -2
- package/dist/{chunk-2HY7I3NT.js → chunk-VE6LD3KM.js} +5 -3
- package/dist/{chunk-CAIHUYXV.js → chunk-W4GQWFRX.js} +1 -1
- package/dist/{chunk-BWIPKSWA.js → chunk-XX2VQE55.js} +1 -1
- package/dist/{chunk-UA7O3KKJ.js → chunk-YCTMKKRA.js} +1 -1
- package/dist/{chunk-DSUY5F4E.js → chunk-ZGX2DP7F.js} +2 -2
- package/dist/generated/index.js +41 -41
- package/dist/index.js +41 -41
- package/dist/styles.css +621 -222
- package/package.json +3 -3
- package/dist/SegmentedControl-X3BI3XU4.css +0 -68
package/dist/styles.css
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
/* AddPill-
|
|
91
|
+
/* AddPill-V4TQXJ53.css */
|
|
92
92
|
/*
|
|
93
93
|
* The control that adds a child (AddPill.tsx).
|
|
94
94
|
*
|
|
@@ -180,7 +180,6 @@
|
|
|
180
180
|
* card's own translucent step, in one declaration, which is exactly what a
|
|
181
181
|
* node is painted with: the two are the same grey wherever the chart is
|
|
182
182
|
* scrolled to, and the pair is OPAQUE, which the card's step alone is not.
|
|
183
|
-
* The resting hairline and the 150ms it fades over are that chart's as well.
|
|
184
183
|
*
|
|
185
184
|
* FULLY OPAQUE, ALWAYS. It used to fade with the rest of the control at rest,
|
|
186
185
|
* and a mask at a little over half opacity is not a mask: the branch was drawn
|
|
@@ -192,11 +191,12 @@
|
|
|
192
191
|
height: var(--spacing-4);
|
|
193
192
|
background-color: var(--color-surface-background);
|
|
194
193
|
background-image: linear-gradient(var(--color-surface-subtle), var(--color-surface-subtle));
|
|
195
|
-
|
|
194
|
+
/* NO BOUNDARY OF ITS OWN: the mark drawn over it is the console's
|
|
195
|
+
add-circle, whose ring sits at the disc's edge, and a hairline under it
|
|
196
|
+
was a second ring a pixel outside the first. */
|
|
197
|
+
border: 0;
|
|
196
198
|
border-radius: var(--radius-circle);
|
|
197
|
-
transition:
|
|
198
|
-
background-color var(--motion-duration-base) var(--motion-easing-default),
|
|
199
|
-
border-color var(--motion-duration-base) var(--motion-easing-default);
|
|
199
|
+
transition: background-color var(--motion-duration-base) var(--motion-easing-default);
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
/* A row has no branch to mask, so there is no disc and no boundary either:
|
|
@@ -209,11 +209,6 @@
|
|
|
209
209
|
border-color: transparent;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
.crewlet-add-pill__mark:hover .crewlet-add-pill__disc,
|
|
213
|
-
.crewlet-add-pill__mark:focus-visible .crewlet-add-pill__disc {
|
|
214
|
-
border-color: var(--color-node-green-line);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
212
|
/*
|
|
218
213
|
* QUIET IS THE PLUS ITSELF. It is one mark per branch on a chart of a hundred,
|
|
219
214
|
* and at rest it says a child can go here and nothing more. The step is the
|
|
@@ -233,9 +228,11 @@
|
|
|
233
228
|
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
234
229
|
}
|
|
235
230
|
|
|
231
|
+
/* The console table's own add-circle, 18px across: at the 20px step the plus
|
|
232
|
+
stood heavier than every other control on the row. */
|
|
236
233
|
.crewlet-add-pill[data-size='md'] .crewlet-add-pill__mark svg {
|
|
237
|
-
width: var(--spacing-
|
|
238
|
-
height: var(--spacing-
|
|
234
|
+
width: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
235
|
+
height: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
239
236
|
}
|
|
240
237
|
|
|
241
238
|
.crewlet-add-pill__mark:hover svg,
|
|
@@ -283,8 +280,10 @@
|
|
|
283
280
|
animation: crewlet-add-pill-open var(--motion-duration-moderate) var(--motion-easing-spring);
|
|
284
281
|
}
|
|
285
282
|
|
|
283
|
+
/* The console table's pill is 18px tall, under half the row: drawn at the
|
|
284
|
+
row's whole control step it was a second row of buttons inside the row. */
|
|
286
285
|
.crewlet-add-pill[data-size='md'] .crewlet-add-pill__sections {
|
|
287
|
-
height: var(--
|
|
286
|
+
height: calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
288
287
|
}
|
|
289
288
|
|
|
290
289
|
.crewlet-add-pill[data-layout='split'] .crewlet-add-pill__sections {
|
|
@@ -393,12 +392,14 @@
|
|
|
393
392
|
background-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
394
393
|
}
|
|
395
394
|
|
|
396
|
-
/* A
|
|
395
|
+
/* A ROW'S CHOICE IS HIT AT THE ROW'S CONTROL STEP, by the same overhang the
|
|
396
|
+
branch's pill takes: padding past the drawn 18px pill, with the tint clipped
|
|
397
|
+
to its content box, so a hovered choice tints the pill and stops at its
|
|
398
|
+
edges. Its width is the pointer-target floor every choice keeps. */
|
|
397
399
|
.crewlet-add-pill[data-size='md'] .crewlet-add-pill__section {
|
|
398
|
-
width: var(--size-control-sm);
|
|
399
400
|
height: var(--size-control-sm);
|
|
400
|
-
margin: 0;
|
|
401
|
-
padding: 0;
|
|
401
|
+
margin: calc((var(--spacing-4) + var(--spacing-1) / 2 - var(--size-control-sm)) / 2) 0;
|
|
402
|
+
padding: calc((var(--size-control-sm) - var(--spacing-4) - var(--spacing-1) / 2) / 2) 0;
|
|
402
403
|
}
|
|
403
404
|
|
|
404
405
|
/*
|
|
@@ -426,7 +427,7 @@
|
|
|
426
427
|
}
|
|
427
428
|
|
|
428
429
|
.crewlet-add-pill[data-size='md'] .crewlet-add-pill__divider {
|
|
429
|
-
height: var(--spacing-
|
|
430
|
+
height: var(--spacing-3);
|
|
430
431
|
}
|
|
431
432
|
|
|
432
433
|
/*
|
|
@@ -481,8 +482,8 @@
|
|
|
481
482
|
* of each caller, because the pill is what decides it is drawn in one colour.
|
|
482
483
|
*/
|
|
483
484
|
.crewlet-add-pill__section svg {
|
|
484
|
-
width: var(--spacing-
|
|
485
|
-
height: var(--spacing-
|
|
485
|
+
width: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
486
|
+
height: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
486
487
|
}
|
|
487
488
|
|
|
488
489
|
.crewlet-add-pill__section svg,
|
|
@@ -506,8 +507,8 @@
|
|
|
506
507
|
}
|
|
507
508
|
|
|
508
509
|
.crewlet-add-pill[data-size='md'] .crewlet-add-pill__section svg {
|
|
509
|
-
width: var(--spacing-
|
|
510
|
-
height: var(--spacing-
|
|
510
|
+
width: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
511
|
+
height: calc(var(--spacing-2) + var(--spacing-1) / 2);
|
|
511
512
|
}
|
|
512
513
|
|
|
513
514
|
/*
|
|
@@ -534,7 +535,7 @@
|
|
|
534
535
|
}
|
|
535
536
|
|
|
536
537
|
|
|
537
|
-
/* AppShell-
|
|
538
|
+
/* AppShell-CEVLW4QG.css */
|
|
538
539
|
/*
|
|
539
540
|
* The application frame: a rail on the FRAME, and the screen on a SHEET that
|
|
540
541
|
* floats beside it.
|
|
@@ -615,10 +616,12 @@
|
|
|
615
616
|
transition: transform var(--motion-duration-fast) var(--motion-easing-default);
|
|
616
617
|
}
|
|
617
618
|
|
|
619
|
+
/* One ring, over the link's own boundary rather than 2px off it, which is two
|
|
620
|
+
edges with a gap between them: the rule every field keeps (see Input.css). */
|
|
618
621
|
.crewlet-app-shell__skip:focus-visible {
|
|
619
622
|
transform: translateY(0);
|
|
620
623
|
outline: 2px solid var(--color-focus);
|
|
621
|
-
outline-offset:
|
|
624
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
622
625
|
}
|
|
623
626
|
|
|
624
627
|
/*
|
|
@@ -1480,7 +1483,7 @@
|
|
|
1480
1483
|
}
|
|
1481
1484
|
|
|
1482
1485
|
|
|
1483
|
-
/* Button-
|
|
1486
|
+
/* Button-UWKBTKYD.css */
|
|
1484
1487
|
/*
|
|
1485
1488
|
* The button, and the link drawn as one.
|
|
1486
1489
|
*
|
|
@@ -1556,6 +1559,24 @@
|
|
|
1556
1559
|
outline-offset: 2px;
|
|
1557
1560
|
}
|
|
1558
1561
|
|
|
1562
|
+
/*
|
|
1563
|
+
* ONE RING, OVER THE BOUNDARY, on every button that draws one. A secondary,
|
|
1564
|
+
* an outline, a danger and a pressed toggle each carry a visible border, and a
|
|
1565
|
+
* ring standing 2px off it was two edges with a gap between them, which reads
|
|
1566
|
+
* as a second outline rather than as focus. On the inset offset the ring
|
|
1567
|
+
* covers the border instead, the rule every field keeps (see Input.css).
|
|
1568
|
+
*
|
|
1569
|
+
* A FILLED OR BORDERLESS BUTTON KEEPS THE OUTSET RING. There is no edge for it
|
|
1570
|
+
* to double, and an inset ring on the accent fill would be drawn in nearly the
|
|
1571
|
+
* fill's own colour, which is a focus nobody can see.
|
|
1572
|
+
*/
|
|
1573
|
+
.crewlet-btn--secondary:focus-visible,
|
|
1574
|
+
.crewlet-btn--outline:focus-visible,
|
|
1575
|
+
.crewlet-btn--danger:focus-visible,
|
|
1576
|
+
.crewlet-btn[aria-pressed='true']:focus-visible {
|
|
1577
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1559
1580
|
.crewlet-btn:disabled,
|
|
1560
1581
|
.crewlet-btn[aria-disabled='true'] {
|
|
1561
1582
|
opacity: 0.5;
|
|
@@ -2061,7 +2082,7 @@
|
|
|
2061
2082
|
}
|
|
2062
2083
|
|
|
2063
2084
|
|
|
2064
|
-
/* Canvas-
|
|
2085
|
+
/* Canvas-YVXHMWLN.css */
|
|
2065
2086
|
/*
|
|
2066
2087
|
* A bounded viewport (Canvas.tsx). It fills the box it is given and clips; the
|
|
2067
2088
|
* page's own scroller is never involved.
|
|
@@ -2084,6 +2105,19 @@
|
|
|
2084
2105
|
border-radius: var(--radius-lg);
|
|
2085
2106
|
}
|
|
2086
2107
|
|
|
2108
|
+
/*
|
|
2109
|
+
* A DOTTED FIELD, for content that is moved by dragging the field itself: the
|
|
2110
|
+
* dots say it pans before anybody drags it. They are the strong hairline's ink
|
|
2111
|
+
* in both themes, one spacing step apart so density scales the grid with the
|
|
2112
|
+
* cards on it, and drawn on the frame rather than on the world, so they stay
|
|
2113
|
+
* put while the content moves over them. Longhands, so the ground under them
|
|
2114
|
+
* is the canvas's own.
|
|
2115
|
+
*/
|
|
2116
|
+
.crewlet-canvas[data-ground='dotted'] {
|
|
2117
|
+
background-image: radial-gradient(var(--color-border-strong) 1px, transparent 1.2px);
|
|
2118
|
+
background-size: var(--spacing-5) var(--spacing-5);
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2087
2121
|
.crewlet-canvas__viewport {
|
|
2088
2122
|
position: absolute;
|
|
2089
2123
|
inset: 0;
|
|
@@ -2379,7 +2413,7 @@
|
|
|
2379
2413
|
}
|
|
2380
2414
|
|
|
2381
2415
|
|
|
2382
|
-
/* Card-
|
|
2416
|
+
/* Card-KJOYHDTJ.css */
|
|
2383
2417
|
/*
|
|
2384
2418
|
* Card, THE surface. Everything on a screen is a card, a row inside one, or a
|
|
2385
2419
|
* control.
|
|
@@ -2580,9 +2614,13 @@
|
|
|
2580
2614
|
border-color: var(--color-border-hover);
|
|
2581
2615
|
}
|
|
2582
2616
|
|
|
2617
|
+
/* One ring, over the card's own boundary rather than 2px off it, which is two
|
|
2618
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
2619
|
+
A chosen card keeps an accent line inside the ring, since the selection
|
|
2620
|
+
ring below is two pixels deep and the focus ring covers one of them. */
|
|
2583
2621
|
.crewlet-card.is-interactive:focus-visible {
|
|
2584
2622
|
outline: 2px solid var(--color-focus);
|
|
2585
|
-
outline-offset:
|
|
2623
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
2586
2624
|
}
|
|
2587
2625
|
|
|
2588
2626
|
/*
|
|
@@ -3584,7 +3622,7 @@
|
|
|
3584
3622
|
}
|
|
3585
3623
|
|
|
3586
3624
|
|
|
3587
|
-
/* Checkbox-
|
|
3625
|
+
/* Checkbox-UE7TEPAM.css */
|
|
3588
3626
|
/*
|
|
3589
3627
|
* Checkbox: a box, its label and its consequence as one target.
|
|
3590
3628
|
*
|
|
@@ -3692,9 +3730,17 @@
|
|
|
3692
3730
|
opacity: 0.6;
|
|
3693
3731
|
}
|
|
3694
3732
|
|
|
3733
|
+
/*
|
|
3734
|
+
* OUTSIDE THE BOX, AND AGAINST IT. The box IS the target, and 2px eaten off a
|
|
3735
|
+
* 16px square leaves no middle, so the ring stays outside it. But it stands on
|
|
3736
|
+
* the box's own edge rather than 2px off it: a ring with a gap round a box
|
|
3737
|
+
* that already draws its own boundary is two edges, which reads as a second
|
|
3738
|
+
* outline rather than as focus. Flush, the ring and the box are one edge, and
|
|
3739
|
+
* the ring is still drawn whole on the ground around it.
|
|
3740
|
+
*/
|
|
3695
3741
|
.crewlet-checkbox__control:focus-visible {
|
|
3696
3742
|
outline: 2px solid var(--color-focus);
|
|
3697
|
-
outline-offset:
|
|
3743
|
+
outline-offset: 0;
|
|
3698
3744
|
}
|
|
3699
3745
|
|
|
3700
3746
|
|
|
@@ -4440,7 +4486,7 @@
|
|
|
4440
4486
|
}
|
|
4441
4487
|
|
|
4442
4488
|
|
|
4443
|
-
/* DataTable-
|
|
4489
|
+
/* DataTable-WZK3V62B.css */
|
|
4444
4490
|
/* ─────────────────────────────────────────────────────────────────
|
|
4445
4491
|
* Default variant.
|
|
4446
4492
|
*
|
|
@@ -4822,8 +4868,19 @@ body.crewlet-data-table-resizing {
|
|
|
4822
4868
|
color: var(--color-text-on-accent);
|
|
4823
4869
|
}
|
|
4824
4870
|
|
|
4871
|
+
/*
|
|
4872
|
+
* One ring, over the chip's own boundary rather than 2px off it, which is two
|
|
4873
|
+
* edges with a gap between them: the rule every field keeps (see Input.css).
|
|
4874
|
+
* The active size is filled with the accent and its border is the fill, so
|
|
4875
|
+
* there is no edge to double there, and an inset ring on that fill would be
|
|
4876
|
+
* drawn in nearly the fill's own colour: it keeps the outset ring.
|
|
4877
|
+
*/
|
|
4825
4878
|
.crewlet-data-table__items-per-page-btn:focus-visible {
|
|
4826
4879
|
outline: 2px solid var(--color-focus);
|
|
4880
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
4881
|
+
}
|
|
4882
|
+
|
|
4883
|
+
.crewlet-data-table__items-per-page-btn.is-active:focus-visible {
|
|
4827
4884
|
outline-offset: 2px;
|
|
4828
4885
|
}
|
|
4829
4886
|
|
|
@@ -6909,7 +6966,7 @@ body.crewlet-data-table-resizing {
|
|
|
6909
6966
|
}
|
|
6910
6967
|
|
|
6911
6968
|
|
|
6912
|
-
/* DateTimePicker-
|
|
6969
|
+
/* DateTimePicker-4AZBTODT.css */
|
|
6913
6970
|
/*
|
|
6914
6971
|
* DateTimePicker: a Select-shaped trigger over a calendar dialog.
|
|
6915
6972
|
*
|
|
@@ -6953,12 +7010,17 @@ body.crewlet-data-table-resizing {
|
|
|
6953
7010
|
* Focus and open are drawn alike, and the ring is an OUTLINE: forced-colors
|
|
6954
7011
|
* mode drops every box-shadow and keeps outlines, so a ring drawn as a shadow
|
|
6955
7012
|
* disappears for exactly the readers who most need one.
|
|
7013
|
+
*
|
|
7014
|
+
* ONE RING, OVER THE BOUNDARY. It stood 2px off the box with the border
|
|
7015
|
+
* recoloured to the focus colour as well, which is an accent hairline, a gap
|
|
7016
|
+
* and an accent band: two rings from one state. On the inset offset the ring
|
|
7017
|
+
* covers the border, and the border keeps its own colour under it, the rule
|
|
7018
|
+
* every field keeps (see Input.css).
|
|
6956
7019
|
*/
|
|
6957
7020
|
.crewlet-datetime:focus-visible,
|
|
6958
7021
|
.crewlet-datetime.is-open {
|
|
6959
|
-
outline:
|
|
6960
|
-
outline-offset:
|
|
6961
|
-
border-color: var(--color-focus);
|
|
7022
|
+
outline: 1px solid var(--color-focus);
|
|
7023
|
+
outline-offset: -1px;
|
|
6962
7024
|
}
|
|
6963
7025
|
|
|
6964
7026
|
.crewlet-datetime.is-disabled,
|
|
@@ -7081,10 +7143,10 @@ svg.crewlet-datetime__chevron {
|
|
|
7081
7143
|
margin: 0;
|
|
7082
7144
|
}
|
|
7083
7145
|
|
|
7146
|
+
/* The same one ring the trigger draws, over the box's own boundary. */
|
|
7084
7147
|
.crewlet-datetime__time-input:focus-visible {
|
|
7085
|
-
outline:
|
|
7086
|
-
outline-offset:
|
|
7087
|
-
border-color: var(--color-focus);
|
|
7148
|
+
outline: 1px solid var(--color-focus);
|
|
7149
|
+
outline-offset: -1px;
|
|
7088
7150
|
}
|
|
7089
7151
|
|
|
7090
7152
|
.crewlet-datetime__footer {
|
|
@@ -7718,7 +7780,7 @@ svg.crewlet-datetime__chevron {
|
|
|
7718
7780
|
}
|
|
7719
7781
|
|
|
7720
7782
|
|
|
7721
|
-
/* FilterChip-
|
|
7783
|
+
/* FilterChip-EZ4QMW4E.css */
|
|
7722
7784
|
/*
|
|
7723
7785
|
* The filter chip: neutral until it is on, and then the accent.
|
|
7724
7786
|
*
|
|
@@ -7789,9 +7851,12 @@ svg.crewlet-datetime__chevron {
|
|
|
7789
7851
|
color: var(--color-text-primary);
|
|
7790
7852
|
}
|
|
7791
7853
|
|
|
7854
|
+
/* One ring, over the chip's own boundary rather than 2px off it, which is two
|
|
7855
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
7856
|
+
A chip that is on still says so under the ring, in its fill and its ink. */
|
|
7792
7857
|
.crewlet-filter-chip:focus-visible {
|
|
7793
7858
|
outline: 2px solid var(--color-focus);
|
|
7794
|
-
outline-offset:
|
|
7859
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
7795
7860
|
}
|
|
7796
7861
|
|
|
7797
7862
|
.crewlet-filter-chip:disabled {
|
|
@@ -7828,7 +7893,7 @@ svg.crewlet-datetime__chevron {
|
|
|
7828
7893
|
}
|
|
7829
7894
|
|
|
7830
7895
|
|
|
7831
|
-
/* IconButton-
|
|
7896
|
+
/* IconButton-VYWP6SGW.css */
|
|
7832
7897
|
/*
|
|
7833
7898
|
* IconButton: a square icon-only control.
|
|
7834
7899
|
*
|
|
@@ -7865,6 +7930,21 @@ svg.crewlet-datetime__chevron {
|
|
|
7865
7930
|
outline-offset: 2px;
|
|
7866
7931
|
}
|
|
7867
7932
|
|
|
7933
|
+
/*
|
|
7934
|
+
* ONE RING, OVER THE BOUNDARY, on every square that draws one: the secondary
|
|
7935
|
+
* and the soft-brand at rest, and the ghost-brand, which grows one under the
|
|
7936
|
+
* pointer. A ring standing 2px off a visible border is two edges with a gap
|
|
7937
|
+
* between them, which reads as a second outline rather than as focus; on the
|
|
7938
|
+
* inset offset it covers the border instead, the rule every field keeps (see
|
|
7939
|
+
* Input.css). The other ghosts never draw an edge, so they keep the outset
|
|
7940
|
+
* ring.
|
|
7941
|
+
*/
|
|
7942
|
+
.crewlet-icon-btn--secondary:focus-visible,
|
|
7943
|
+
.crewlet-icon-btn--soft-brand:focus-visible,
|
|
7944
|
+
.crewlet-icon-btn--ghost-brand:focus-visible {
|
|
7945
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
7946
|
+
}
|
|
7947
|
+
|
|
7868
7948
|
.crewlet-icon-btn:disabled,
|
|
7869
7949
|
.crewlet-icon-btn[aria-disabled='true'] {
|
|
7870
7950
|
opacity: 0.5;
|
|
@@ -7989,7 +8069,7 @@ svg.crewlet-datetime__chevron {
|
|
|
7989
8069
|
}
|
|
7990
8070
|
|
|
7991
8071
|
|
|
7992
|
-
/* ImageUpload-
|
|
8072
|
+
/* ImageUpload-L2GE4JUM.css */
|
|
7993
8073
|
/*
|
|
7994
8074
|
* ImageUpload, the click-to-upload affordance built on Avatar.
|
|
7995
8075
|
*
|
|
@@ -8173,9 +8253,13 @@ svg.crewlet-datetime__chevron {
|
|
|
8173
8253
|
cursor: default;
|
|
8174
8254
|
}
|
|
8175
8255
|
|
|
8256
|
+
/* One ring, drawn OVER the badge's knockout ring rather than 2px outside it:
|
|
8257
|
+
over the image the knockout is an edge of its own, and a ring standing off
|
|
8258
|
+
it was two rings round one small disc. On the inset offset the focus ring
|
|
8259
|
+
takes the knockout's place, which still parts the disc from the image. */
|
|
8176
8260
|
.crewlet-image-upload__remove:focus-visible {
|
|
8177
8261
|
outline: 2px solid var(--color-focus);
|
|
8178
|
-
outline-offset:
|
|
8262
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
8179
8263
|
}
|
|
8180
8264
|
|
|
8181
8265
|
.crewlet-image-upload__input {
|
|
@@ -8267,7 +8351,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8267
8351
|
}
|
|
8268
8352
|
|
|
8269
8353
|
|
|
8270
|
-
/* Input-
|
|
8354
|
+
/* Input-DRFNI26F.css */
|
|
8271
8355
|
/*
|
|
8272
8356
|
* The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
|
|
8273
8357
|
* ReadOnlyField.
|
|
@@ -8344,11 +8428,14 @@ svg.crewlet-datetime__chevron {
|
|
|
8344
8428
|
* forced-colors mode drops every box-shadow and keeps outlines: a ring drawn
|
|
8345
8429
|
* as a shadow disappears for exactly the readers who most need one.
|
|
8346
8430
|
*
|
|
8347
|
-
* It is
|
|
8348
|
-
*
|
|
8349
|
-
*
|
|
8350
|
-
*
|
|
8351
|
-
*
|
|
8431
|
+
* It is ONE PIXEL, LAID EXACTLY ON THE BOUNDARY: the field's own hairline,
|
|
8432
|
+
* drawn in the focus colour, which is how the console's fields say focus. At
|
|
8433
|
+
* two pixels it was a heavy band round every box a caret landed in, and on a
|
|
8434
|
+
* form of them the field being typed in read as the loudest thing on the page.
|
|
8435
|
+
* Drawn on the boundary rather than outside it, a scroller cannot clip it and
|
|
8436
|
+
* the field does not grow a halo the moment a caret lands in it, which is what
|
|
8437
|
+
* a filter box in a toolbar of them did to the row it sits in. Every boxed
|
|
8438
|
+
* field in the package rings this way (`Input.test.tsx` holds them to it).
|
|
8352
8439
|
*
|
|
8353
8440
|
* THE BORDER IS LEFT ALONE. Recolouring it under the ring says nothing the
|
|
8354
8441
|
* ring has not already said, and it is what cost the error state its own
|
|
@@ -8364,8 +8451,8 @@ svg.crewlet-datetime__chevron {
|
|
|
8364
8451
|
* on a pointer press as well as on a tab.
|
|
8365
8452
|
*/
|
|
8366
8453
|
.crewlet-input:has(.crewlet-input__control:focus-visible) {
|
|
8367
|
-
outline:
|
|
8368
|
-
outline-offset:
|
|
8454
|
+
outline: 1px solid var(--color-focus);
|
|
8455
|
+
outline-offset: -1px;
|
|
8369
8456
|
}
|
|
8370
8457
|
|
|
8371
8458
|
.crewlet-input.is-error {
|
|
@@ -8624,8 +8711,8 @@ svg.crewlet-datetime__chevron {
|
|
|
8624
8711
|
on the control itself: a textarea is the field, with nothing wrapped round
|
|
8625
8712
|
it and nothing focusable inside it. */
|
|
8626
8713
|
.crewlet-textarea:focus-visible {
|
|
8627
|
-
outline:
|
|
8628
|
-
outline-offset:
|
|
8714
|
+
outline: 1px solid var(--color-focus);
|
|
8715
|
+
outline-offset: -1px;
|
|
8629
8716
|
}
|
|
8630
8717
|
|
|
8631
8718
|
.crewlet-textarea.is-error {
|
|
@@ -8641,10 +8728,37 @@ svg.crewlet-datetime__chevron {
|
|
|
8641
8728
|
cursor: not-allowed;
|
|
8642
8729
|
}
|
|
8643
8730
|
|
|
8731
|
+
/*
|
|
8732
|
+
* ONE LINE THAT GROWS STARTS AT THE SINGLE-LINE FIELD'S HEIGHT. A box that
|
|
8733
|
+
* grows to fit what is typed was drawn at the large control step while it held
|
|
8734
|
+
* one line, so the box a list item is written in stood sixteen pixels taller
|
|
8735
|
+
* than the fields above and below it. One line now stands at the medium step,
|
|
8736
|
+
* the height of every single-line field, with the line centred in it as an
|
|
8737
|
+
* input's is: the block padding is what that step leaves once the two border
|
|
8738
|
+
* pixels and one line are paid for. Each line past the first grows it from
|
|
8739
|
+
* there.
|
|
8740
|
+
*/
|
|
8644
8741
|
.crewlet-textarea.is-auto-resize {
|
|
8645
8742
|
resize: none;
|
|
8646
8743
|
overflow: hidden;
|
|
8647
|
-
min-height: var(--size-control-
|
|
8744
|
+
min-height: var(--size-control-md);
|
|
8745
|
+
padding-block: max(
|
|
8746
|
+
0px,
|
|
8747
|
+
calc((var(--size-control-md) - 2px - var(--font-line-height-normal) * var(--font-size-compact)) / 2)
|
|
8748
|
+
);
|
|
8749
|
+
}
|
|
8750
|
+
|
|
8751
|
+
/*
|
|
8752
|
+
* AND WHAT TRAILS IT SITS ON ITS FIRST LINE, centred in the band one line
|
|
8753
|
+
* takes, which is exactly where an input's trailing hint sits. Pinned a spacing
|
|
8754
|
+
* step from the top, it sat above the line's middle and level with nothing;
|
|
8755
|
+
* on the first line it stays put as the box grows under it.
|
|
8756
|
+
*/
|
|
8757
|
+
.crewlet-textarea-shell:has(> .crewlet-textarea.is-auto-resize) > .crewlet-input__trailing {
|
|
8758
|
+
top: 0;
|
|
8759
|
+
display: flex;
|
|
8760
|
+
align-items: center;
|
|
8761
|
+
height: var(--size-control-md);
|
|
8648
8762
|
}
|
|
8649
8763
|
|
|
8650
8764
|
.crewlet-textarea::placeholder {
|
|
@@ -8886,7 +9000,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8886
9000
|
}
|
|
8887
9001
|
|
|
8888
9002
|
|
|
8889
|
-
/* Kbd-
|
|
9003
|
+
/* Kbd-MCWJTRTT.css */
|
|
8890
9004
|
/*
|
|
8891
9005
|
* A keycap: the key's name on a small raised tile.
|
|
8892
9006
|
*
|
|
@@ -8931,9 +9045,20 @@ svg.crewlet-datetime__chevron {
|
|
|
8931
9045
|
* platform prints a chord. It is a `kbd` of its own because that is what a key
|
|
8932
9046
|
* inside a key combination is, and a user agent's `kbd` rule would otherwise
|
|
8933
9047
|
* set its own face and size on it.
|
|
9048
|
+
*
|
|
9049
|
+
* AND IT TAKES NO BOX FROM ANYBODY ELSE. An application stylesheet that draws
|
|
9050
|
+
* a bare `kbd` as a cap of its own (a common enough rule) reached each key in
|
|
9051
|
+
* here and framed it, so one chord drew a frame round a run of framed keys.
|
|
9052
|
+
* The key states every part of its box, so whatever a page says about `kbd`,
|
|
9053
|
+
* a chord is one cap.
|
|
8934
9054
|
*/
|
|
8935
9055
|
.crewlet-kbd__key {
|
|
8936
9056
|
font: inherit;
|
|
9057
|
+
color: inherit;
|
|
9058
|
+
padding: 0;
|
|
9059
|
+
background: none;
|
|
9060
|
+
border: 0;
|
|
9061
|
+
border-radius: 0;
|
|
8937
9062
|
}
|
|
8938
9063
|
|
|
8939
9064
|
/*
|
|
@@ -10610,7 +10735,7 @@ svg.crewlet-datetime__chevron {
|
|
|
10610
10735
|
}
|
|
10611
10736
|
|
|
10612
10737
|
|
|
10613
|
-
/* NewItemsNotice-
|
|
10738
|
+
/* NewItemsNotice-Q5ED73BQ.css */
|
|
10614
10739
|
/*
|
|
10615
10740
|
* The pill that holds finished rows back.
|
|
10616
10741
|
*
|
|
@@ -10661,9 +10786,11 @@ svg.crewlet-datetime__chevron {
|
|
|
10661
10786
|
color: var(--color-brand-accent-ink);
|
|
10662
10787
|
}
|
|
10663
10788
|
|
|
10789
|
+
/* One ring, over the pill's own boundary rather than 2px off it, which is two
|
|
10790
|
+
edges with a gap between them: the rule every field keeps (see Input.css). */
|
|
10664
10791
|
.crewlet-new-items:focus-visible {
|
|
10665
10792
|
outline: 2px solid var(--color-focus);
|
|
10666
|
-
outline-offset:
|
|
10793
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
10667
10794
|
}
|
|
10668
10795
|
|
|
10669
10796
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -10673,7 +10800,7 @@ svg.crewlet-datetime__chevron {
|
|
|
10673
10800
|
}
|
|
10674
10801
|
|
|
10675
10802
|
|
|
10676
|
-
/* OrgLabel-
|
|
10803
|
+
/* OrgLabel-6WSKJQOT.css */
|
|
10677
10804
|
/*
|
|
10678
10805
|
* What a node of an org chart and a row of an org table both say
|
|
10679
10806
|
* (OrgLabel.tsx).
|
|
@@ -10762,6 +10889,44 @@ svg.crewlet-datetime__chevron {
|
|
|
10762
10889
|
fill: currentColor;
|
|
10763
10890
|
}
|
|
10764
10891
|
|
|
10892
|
+
/*
|
|
10893
|
+
* A PERSON IS A FIGURE INSIDE A DASHED RING, as the console chart draws one:
|
|
10894
|
+
* the boundary says this seat is held by someone outside the system. The ring
|
|
10895
|
+
* is the 24px target step and the figure inside it a step smaller than a
|
|
10896
|
+
* container's glyph, which leaves the air a boundary needs to read as one: at
|
|
10897
|
+
* the zone's own step the figure touched the ring on every side.
|
|
10898
|
+
*
|
|
10899
|
+
* THE RING IS DECORATION, drawn in the step kept for it, and the figure is the
|
|
10900
|
+
* mark: the ring says how the seat is held, never what it is.
|
|
10901
|
+
*/
|
|
10902
|
+
.crewlet-org-label__icon--ring {
|
|
10903
|
+
position: relative;
|
|
10904
|
+
}
|
|
10905
|
+
|
|
10906
|
+
.crewlet-org-label__icon--ring::before {
|
|
10907
|
+
content: '';
|
|
10908
|
+
position: absolute;
|
|
10909
|
+
top: 50%;
|
|
10910
|
+
left: 50%;
|
|
10911
|
+
width: var(--size-target-min);
|
|
10912
|
+
height: var(--size-target-min);
|
|
10913
|
+
border: 1px dashed var(--color-text-muted);
|
|
10914
|
+
border-radius: var(--radius-circle);
|
|
10915
|
+
transform: translate(-50%, -50%);
|
|
10916
|
+
pointer-events: none;
|
|
10917
|
+
}
|
|
10918
|
+
|
|
10919
|
+
.crewlet-org-label__icon--ring > svg {
|
|
10920
|
+
width: var(--font-size-md);
|
|
10921
|
+
height: var(--font-size-md);
|
|
10922
|
+
}
|
|
10923
|
+
|
|
10924
|
+
/* A ROW DRAWS THE FIGURE ALONE, as the console table does: a ring on a line
|
|
10925
|
+
of text is a second boundary inside the row's own. */
|
|
10926
|
+
.crewlet-org-label--row .crewlet-org-label__icon--ring::before {
|
|
10927
|
+
content: none;
|
|
10928
|
+
}
|
|
10929
|
+
|
|
10765
10930
|
/* ---- The name and its caption -------------------------------------------- */
|
|
10766
10931
|
|
|
10767
10932
|
/*
|
|
@@ -10960,7 +11125,7 @@ svg.crewlet-datetime__chevron {
|
|
|
10960
11125
|
}
|
|
10961
11126
|
|
|
10962
11127
|
|
|
10963
|
-
/* OrgNode-
|
|
11128
|
+
/* OrgNode-TCHJH5FO.css */
|
|
10964
11129
|
/*
|
|
10965
11130
|
* What a node of an org chart carries beyond what it says (OrgNode.tsx).
|
|
10966
11131
|
*
|
|
@@ -10996,6 +11161,15 @@ svg.crewlet-datetime__chevron {
|
|
|
10996
11161
|
|
|
10997
11162
|
/* ---- A unit's lead ------------------------------------------------------ */
|
|
10998
11163
|
|
|
11164
|
+
/*
|
|
11165
|
+
* NO LINE OF ITS OWN. The console chart rules a hairline over this strip and
|
|
11166
|
+
* frames a set lead's pill inside it, 4px in from the node's own edge: inside
|
|
11167
|
+
* a card that is already framed, that is a box drawn twice, with a second line
|
|
11168
|
+
* running beside the card's edge on three sides and a third across the top.
|
|
11169
|
+
* A set lead is a ground instead, and a ground needs no line to divide it from
|
|
11170
|
+
* the name above. Only an EMPTY slot keeps an edge, dashed (below), because
|
|
11171
|
+
* the dash is what says a place is waiting rather than a frame round a value.
|
|
11172
|
+
*/
|
|
10999
11173
|
.crewlet-org-node-lead {
|
|
11000
11174
|
position: relative;
|
|
11001
11175
|
display: flex;
|
|
@@ -11004,28 +11178,11 @@ svg.crewlet-datetime__chevron {
|
|
|
11004
11178
|
padding: 0 var(--spacing-1) var(--spacing-1);
|
|
11005
11179
|
}
|
|
11006
11180
|
|
|
11007
|
-
/*
|
|
11008
|
-
* THE SEPARATOR IS INSET, like every hairline inside a node of the console
|
|
11009
|
-
* chart (it draws this one from 4 to `nw - 4`). Edge to edge it cut the card
|
|
11010
|
-
* in two and the node read as two stacked cells rather than as a card with a
|
|
11011
|
-
* fact along its bottom edge. Drawn rather than bordered for that reason
|
|
11012
|
-
* alone: a border cannot be shorter than the box it is on.
|
|
11013
|
-
*/
|
|
11014
|
-
.crewlet-org-node-lead::before {
|
|
11015
|
-
content: '';
|
|
11016
|
-
position: absolute;
|
|
11017
|
-
top: 0;
|
|
11018
|
-
right: var(--spacing-1);
|
|
11019
|
-
left: var(--spacing-1);
|
|
11020
|
-
height: 1px;
|
|
11021
|
-
background: var(--color-border-default);
|
|
11022
|
-
}
|
|
11023
|
-
|
|
11024
11181
|
/*
|
|
11025
11182
|
* A PILL RATHER THAN A LINE OF TEXT, so the lead reads as one value attached
|
|
11026
|
-
* to this unit rather than as a second caption.
|
|
11027
|
-
*
|
|
11028
|
-
*
|
|
11183
|
+
* to this unit rather than as a second caption. RAISED, on the step a chip
|
|
11184
|
+
* with no boundary of its own takes (the palette suite holds it off the card
|
|
11185
|
+
* on both themes), so it is found by its ground rather than by a frame.
|
|
11029
11186
|
*/
|
|
11030
11187
|
.crewlet-org-node-lead__pill {
|
|
11031
11188
|
display: flex;
|
|
@@ -11040,32 +11197,30 @@ svg.crewlet-datetime__chevron {
|
|
|
11040
11197
|
font-weight: var(--font-weight-medium);
|
|
11041
11198
|
line-height: var(--font-line-height-tight);
|
|
11042
11199
|
color: var(--color-text-secondary);
|
|
11043
|
-
|
|
11044
|
-
* THE BOUNDARY IS THE HOVER STEP, not the resting hairline, which is what
|
|
11045
|
-
* the console chart draws around this one pill and nowhere else inside a
|
|
11046
|
-
* node: every other line in there is the separator step and this is a
|
|
11047
|
-
* boundary around a value. At the separator's own alpha the pill was a
|
|
11048
|
-
* rectangle a reader had to look for, on the one fact a unit's node states.
|
|
11049
|
-
*/
|
|
11050
|
-
border: 1px solid var(--color-border-hover);
|
|
11200
|
+
background: var(--color-surface-elevated);
|
|
11051
11201
|
border-radius: var(--radius-sm);
|
|
11052
11202
|
}
|
|
11053
11203
|
|
|
11054
11204
|
/*
|
|
11055
|
-
* AND AN EMPTY ONE IS
|
|
11056
|
-
*
|
|
11057
|
-
*
|
|
11058
|
-
*
|
|
11205
|
+
* AND AN EMPTY ONE IS AN EMPTY SLOT: no ground, a dashed edge and the word
|
|
11206
|
+
* alone in the quieter ink, as the console chart draws it. A unit with no lead
|
|
11207
|
+
* has a place for one, and the dash is what says the place is waiting to be
|
|
11208
|
+
* filled, which is what invites the reader to set it. It is the one edge drawn
|
|
11209
|
+
* inside a node, and only while the slot is empty: a set lead is a raised
|
|
11210
|
+
* ground with no edge at all. The edge is the hover step rather than the
|
|
11211
|
+
* resting hairline, because at the hairline's own step the slot was a
|
|
11212
|
+
* rectangle a reader had to look for.
|
|
11059
11213
|
*/
|
|
11060
11214
|
.crewlet-org-node-lead__pill--empty {
|
|
11061
11215
|
color: var(--color-text-tertiary);
|
|
11062
|
-
|
|
11216
|
+
background: none;
|
|
11217
|
+
border: 1px dashed var(--color-border-hover);
|
|
11063
11218
|
}
|
|
11064
11219
|
|
|
11065
11220
|
/*
|
|
11066
11221
|
* A LEAD THAT CAN BE CHANGED IS STILL A LEAD. Where the pill holds a control
|
|
11067
11222
|
* rather than a word, the control IS the pill: it fills it, carries the pill's
|
|
11068
|
-
* own type and ink, and draws no
|
|
11223
|
+
* own type and ink, and draws no boundary or ground of its own on the pill's.
|
|
11069
11224
|
* Left at its own size, a control step inside a half-rank strip is a button
|
|
11070
11225
|
* that overflows the node it sits in.
|
|
11071
11226
|
*
|
|
@@ -11092,6 +11247,35 @@ svg.crewlet-datetime__chevron {
|
|
|
11092
11247
|
color: var(--color-text-primary);
|
|
11093
11248
|
}
|
|
11094
11249
|
|
|
11250
|
+
/*
|
|
11251
|
+
* WHATEVER WRAPS THE CONTROL FILLS THE PILL TOO. A menu's trigger arrives
|
|
11252
|
+
* inside the menu's own anchor, and the anchor was a shrink-wrapped item of
|
|
11253
|
+
* the pill's row: the control was the width of the word "Lead" in a pill as
|
|
11254
|
+
* wide as the node, and a press anywhere else in the pill did nothing.
|
|
11255
|
+
*/
|
|
11256
|
+
.crewlet-org-node-lead__pill > :has(> .crewlet-btn) {
|
|
11257
|
+
display: flex;
|
|
11258
|
+
flex: 1;
|
|
11259
|
+
min-width: 0;
|
|
11260
|
+
}
|
|
11261
|
+
|
|
11262
|
+
/*
|
|
11263
|
+
* REACHED, THE WHOLE PILL LIGHTS, because the whole pill is the control. The
|
|
11264
|
+
* ghost control's own hover and press grounds were a patch the size of the
|
|
11265
|
+
* word inside the pill, so it paints neither, and the pill takes the row hover
|
|
11266
|
+
* step over its own ground while the control is pointed at or its menu is
|
|
11267
|
+
* open. Its ink still goes to full, above.
|
|
11268
|
+
*/
|
|
11269
|
+
.crewlet-org-node-lead__pill
|
|
11270
|
+
.crewlet-btn:is(:hover, :active):not(:disabled):not([aria-disabled='true']) {
|
|
11271
|
+
background: none;
|
|
11272
|
+
}
|
|
11273
|
+
|
|
11274
|
+
.crewlet-org-node-lead__pill:has(.crewlet-btn:hover:not(:disabled):not([aria-disabled='true'])),
|
|
11275
|
+
.crewlet-org-node-lead__pill:has(.crewlet-btn[aria-expanded='true']) {
|
|
11276
|
+
background-image: linear-gradient(var(--color-surface-hover), var(--color-surface-hover));
|
|
11277
|
+
}
|
|
11278
|
+
|
|
11095
11279
|
/* The name of the lead, not the chevron beside it, is what truncates. */
|
|
11096
11280
|
.crewlet-org-node-lead__pill .crewlet-btn > span {
|
|
11097
11281
|
overflow: hidden;
|
|
@@ -11110,25 +11294,42 @@ svg.crewlet-datetime__chevron {
|
|
|
11110
11294
|
*
|
|
11111
11295
|
* DRAWN SMALL, HIT FULL SIZE, the rule the whole node keeps: the strip is half
|
|
11112
11296
|
* a rank, so the target is grown past the pill's own edge into the node's
|
|
11113
|
-
* bottom padding, exactly as the lead's own control is.
|
|
11114
|
-
*
|
|
11115
|
-
*
|
|
11116
|
-
*
|
|
11297
|
+
* bottom padding, exactly as the lead's own control is.
|
|
11298
|
+
*
|
|
11299
|
+
* AND IT DOES NOT MOVE THE NAME. Taking its room from the row, it pushed the
|
|
11300
|
+
* name half its own width off the pill's middle, so "Lead: Ada" sat left of
|
|
11301
|
+
* centre on every unit that had one. It is drawn over the pill's right end
|
|
11302
|
+
* instead, out of the row, and the lead's control keeps the same room at both
|
|
11303
|
+
* of its ends while it is there: the name is centred on the whole pill and
|
|
11304
|
+
* truncates before it reaches the clear, and the control is still the whole
|
|
11305
|
+
* pill to press.
|
|
11117
11306
|
*/
|
|
11118
11307
|
.crewlet-org-node-lead__clear {
|
|
11119
|
-
position:
|
|
11308
|
+
position: absolute;
|
|
11309
|
+
top: 50%;
|
|
11310
|
+
right: 0;
|
|
11311
|
+
z-index: 1;
|
|
11120
11312
|
display: inline-flex;
|
|
11121
|
-
flex: none;
|
|
11122
11313
|
align-items: center;
|
|
11123
11314
|
justify-content: center;
|
|
11315
|
+
transform: translateY(-50%);
|
|
11316
|
+
}
|
|
11317
|
+
|
|
11318
|
+
.crewlet-org-node-lead__pill:has(> .crewlet-org-node-lead__clear) {
|
|
11319
|
+
position: relative;
|
|
11320
|
+
}
|
|
11321
|
+
|
|
11322
|
+
.crewlet-org-node-lead__pill:has(> .crewlet-org-node-lead__clear)
|
|
11323
|
+
.crewlet-btn:not(.crewlet-org-node-lead__clear *) {
|
|
11324
|
+
padding-inline: var(--spacing-4);
|
|
11124
11325
|
}
|
|
11125
11326
|
|
|
11126
11327
|
/*
|
|
11127
|
-
* THE
|
|
11128
|
-
*
|
|
11129
|
-
*
|
|
11130
|
-
* would disappear on half the deployments
|
|
11131
|
-
*
|
|
11328
|
+
* THE DISC IS ITS RING. Its ground is the raised step the pill itself is
|
|
11329
|
+
* drawn on, rather than that chart's own alpha (0.08 of white is the card's
|
|
11330
|
+
* own value on this package's light theme, so a disc drawn by its ground
|
|
11331
|
+
* would disappear on half the deployments), and so what draws it on the pill
|
|
11332
|
+
* is the hairline round it.
|
|
11132
11333
|
*/
|
|
11133
11334
|
.crewlet-org-node-lead__disc {
|
|
11134
11335
|
position: absolute;
|
|
@@ -11166,6 +11367,14 @@ svg.crewlet-datetime__chevron {
|
|
|
11166
11367
|
color: var(--color-text-primary);
|
|
11167
11368
|
}
|
|
11168
11369
|
|
|
11370
|
+
/* AND NOTHING ELSE FILLS EITHER: a ghost control's own hover and press grounds
|
|
11371
|
+
are painted on its whole 24px target, which drew a circle twice the disc's
|
|
11372
|
+
size round a 12px mark the moment it was pointed at. */
|
|
11373
|
+
.crewlet-org-node-lead__clear
|
|
11374
|
+
:is(.crewlet-btn, .crewlet-icon-btn):is(:hover, :active):not(:disabled):not([aria-disabled='true']) {
|
|
11375
|
+
background: none;
|
|
11376
|
+
}
|
|
11377
|
+
|
|
11169
11378
|
.crewlet-org-node-lead__clear:hover .crewlet-org-node-lead__disc {
|
|
11170
11379
|
border-color: var(--color-border-control);
|
|
11171
11380
|
}
|
|
@@ -11177,7 +11386,7 @@ svg.crewlet-datetime__chevron {
|
|
|
11177
11386
|
}
|
|
11178
11387
|
|
|
11179
11388
|
|
|
11180
|
-
/* OrgTable-
|
|
11389
|
+
/* OrgTable-JZSYTUIK.css */
|
|
11181
11390
|
/*
|
|
11182
11391
|
* An organization as an indented table of rows (OrgTable.tsx).
|
|
11183
11392
|
*
|
|
@@ -11204,8 +11413,11 @@ svg.crewlet-datetime__chevron {
|
|
|
11204
11413
|
*/
|
|
11205
11414
|
--crewlet-org-table-indent: var(--spacing-8);
|
|
11206
11415
|
/* The wire arriving at a row, and what it fades to at the row's own end.
|
|
11207
|
-
|
|
11208
|
-
|
|
11416
|
+
It leaves the trunk in the TRUNK'S own step, as the console table's does,
|
|
11417
|
+
so the two read as one line; started brighter than the trunk, every
|
|
11418
|
+
branch was a dash floating beside a trunk nobody could see. Rebound per
|
|
11419
|
+
hue below. */
|
|
11420
|
+
--crewlet-org-table-wire: var(--color-border-strong);
|
|
11209
11421
|
--crewlet-org-table-wire-fade: var(--color-border-default);
|
|
11210
11422
|
/* What a row's name and its mark are drawn in. Rebound per hue below. */
|
|
11211
11423
|
--crewlet-org-table-ink: var(--color-text-primary);
|
|
@@ -11314,8 +11526,15 @@ svg.crewlet-datetime__chevron {
|
|
|
11314
11526
|
* follows, so the trunk is one line down the whole table rather than one per
|
|
11315
11527
|
* level. The cell's padding is taken back and the wire element carries the
|
|
11316
11528
|
* level instead.
|
|
11529
|
+
*
|
|
11530
|
+
* AND THE CELL IS THE ROW'S FULL HEIGHT, because the wire in it is. The grid
|
|
11531
|
+
* centres its cells in a row taller than they are, and a trunk drawn down a
|
|
11532
|
+
* centred cell stopped short of both edges of every row, so the line its
|
|
11533
|
+
* segments were meant to stack into read as one dash per row. The cell still
|
|
11534
|
+
* centres what it holds.
|
|
11317
11535
|
*/
|
|
11318
11536
|
.crewlet-org-table [role='gridcell']:first-child {
|
|
11537
|
+
align-self: stretch;
|
|
11319
11538
|
padding-inline-start: var(--spacing-2);
|
|
11320
11539
|
}
|
|
11321
11540
|
|
|
@@ -11350,12 +11569,19 @@ svg.crewlet-datetime__chevron {
|
|
|
11350
11569
|
* segments stack into one line. Neutral, always: it belongs to the table
|
|
11351
11570
|
* rather than to any row, and a trunk that took each row's hue in turn would
|
|
11352
11571
|
* be a striped line saying nothing.
|
|
11572
|
+
*
|
|
11573
|
+
* IN THE STRONG STEP, where the console table draws its trunk a notch above
|
|
11574
|
+
* the row's ground. In the plain border step it all but vanished on the
|
|
11575
|
+
* table's own ground, and the branches beside it read as loose dashes.
|
|
11576
|
+
*
|
|
11577
|
+
* It starts one hairline above the cell, over the grid's rule between rows,
|
|
11578
|
+
* so the segments meet rather than being cut by that rule.
|
|
11353
11579
|
*/
|
|
11354
11580
|
.crewlet-org-table__wire[data-trunk]::before {
|
|
11355
|
-
inset-block: 0;
|
|
11581
|
+
inset-block: -1px 0;
|
|
11356
11582
|
inset-inline-start: 0;
|
|
11357
11583
|
width: 2px;
|
|
11358
|
-
background: var(--color-border-
|
|
11584
|
+
background: var(--color-border-strong);
|
|
11359
11585
|
}
|
|
11360
11586
|
|
|
11361
11587
|
/* A root row's trunk starts at the row's middle: nothing hangs above the
|
|
@@ -11364,6 +11590,13 @@ svg.crewlet-datetime__chevron {
|
|
|
11364
11590
|
inset-block-start: 50%;
|
|
11365
11591
|
}
|
|
11366
11592
|
|
|
11593
|
+
/* The last row a root shows ends the trunk at its own branch: no row below it
|
|
11594
|
+
hangs off the line, and a trunk run on to the next tree or the table's edge
|
|
11595
|
+
is a line to nowhere. */
|
|
11596
|
+
.crewlet-org-table__wire[data-last][data-trunk]::before {
|
|
11597
|
+
inset-block-end: 50%;
|
|
11598
|
+
}
|
|
11599
|
+
|
|
11367
11600
|
/*
|
|
11368
11601
|
* THE BRANCH: from the trunk across the gutter to the row's own mark, fading
|
|
11369
11602
|
* as it arrives. It reaches one cell gap past the wire's own width, which is
|
|
@@ -11631,7 +11864,7 @@ svg.crewlet-datetime__chevron {
|
|
|
11631
11864
|
}
|
|
11632
11865
|
|
|
11633
11866
|
|
|
11634
|
-
/* Popover-
|
|
11867
|
+
/* Popover-QCINR7WG.css */
|
|
11635
11868
|
/*
|
|
11636
11869
|
* The anchored panel.
|
|
11637
11870
|
*
|
|
@@ -11674,10 +11907,13 @@ svg.crewlet-datetime__chevron {
|
|
|
11674
11907
|
transform-origin: bottom left;
|
|
11675
11908
|
}
|
|
11676
11909
|
|
|
11677
|
-
/* A panel that takes focus shows it on the panel, not only on what is inside
|
|
11910
|
+
/* A panel that takes focus shows it on the panel, not only on what is inside,
|
|
11911
|
+
and shows it ONCE: over the panel's own boundary rather than 2px off it,
|
|
11912
|
+
which is two edges with a gap between them (the rule every field keeps, see
|
|
11913
|
+
Input.css). */
|
|
11678
11914
|
.crewlet-popover:focus-visible {
|
|
11679
11915
|
outline: 2px solid var(--color-focus);
|
|
11680
|
-
outline-offset:
|
|
11916
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
11681
11917
|
}
|
|
11682
11918
|
|
|
11683
11919
|
/* Up from under its anchor, which is where it is about to be. */
|
|
@@ -11819,7 +12055,7 @@ svg.crewlet-datetime__chevron {
|
|
|
11819
12055
|
}
|
|
11820
12056
|
|
|
11821
12057
|
|
|
11822
|
-
/* PricingCard-
|
|
12058
|
+
/* PricingCard-HTAHG4ST.css */
|
|
11823
12059
|
/*
|
|
11824
12060
|
* PricingCard, the plan-tier card surface.
|
|
11825
12061
|
*
|
|
@@ -11886,9 +12122,13 @@ svg.crewlet-datetime__chevron {
|
|
|
11886
12122
|
border-color: var(--color-brand-accent-soft-strong);
|
|
11887
12123
|
}
|
|
11888
12124
|
|
|
12125
|
+
/* One ring, over the card's own boundary rather than 2px off it, which is two
|
|
12126
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
12127
|
+
The chosen plan keeps an accent line inside the ring, since the selection
|
|
12128
|
+
ring below is two pixels deep and the focus ring covers one of them. */
|
|
11889
12129
|
.crewlet-pricing-card:focus-visible {
|
|
11890
12130
|
outline: 2px solid var(--color-focus);
|
|
11891
|
-
outline-offset:
|
|
12131
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
11892
12132
|
}
|
|
11893
12133
|
|
|
11894
12134
|
/* The chosen plan takes the selection ring, which is the same inset rule
|
|
@@ -12214,7 +12454,7 @@ svg.crewlet-datetime__chevron {
|
|
|
12214
12454
|
}
|
|
12215
12455
|
|
|
12216
12456
|
|
|
12217
|
-
/* SearchTrigger-
|
|
12457
|
+
/* SearchTrigger-KIZLWBEH.css */
|
|
12218
12458
|
/*
|
|
12219
12459
|
* A button drawn as the field it stands in for.
|
|
12220
12460
|
*
|
|
@@ -12275,9 +12515,12 @@ svg.crewlet-datetime__chevron {
|
|
|
12275
12515
|
color: var(--color-text-primary);
|
|
12276
12516
|
}
|
|
12277
12517
|
|
|
12518
|
+
/* One ring, over the trigger's own boundary rather than 2px off it, which is
|
|
12519
|
+
two edges with a gap between them: the rule every field keeps (see
|
|
12520
|
+
Input.css). */
|
|
12278
12521
|
.crewlet-search-trigger:focus-visible {
|
|
12279
12522
|
outline: 2px solid var(--color-focus);
|
|
12280
|
-
outline-offset:
|
|
12523
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
12281
12524
|
}
|
|
12282
12525
|
|
|
12283
12526
|
.crewlet-search-trigger__icon {
|
|
@@ -12459,7 +12702,7 @@ svg.crewlet-datetime__chevron {
|
|
|
12459
12702
|
}
|
|
12460
12703
|
|
|
12461
12704
|
|
|
12462
|
-
/* SegmentedControl-
|
|
12705
|
+
/* SegmentedControl-76HODRBT.css */
|
|
12463
12706
|
/*
|
|
12464
12707
|
* SegmentedControl: the pill row, drawn with the Tabs classes.
|
|
12465
12708
|
*
|
|
@@ -12509,6 +12752,13 @@ svg.crewlet-datetime__chevron {
|
|
|
12509
12752
|
font-size: var(--font-size-compact);
|
|
12510
12753
|
}
|
|
12511
12754
|
|
|
12755
|
+
/* One ring, over the card's own boundary rather than 2px off it, which is two
|
|
12756
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
12757
|
+
The chosen card still says so under the ring, in its tint and its ink. */
|
|
12758
|
+
.crewlet-segmented--cards .crewlet-segmented__option:focus-visible {
|
|
12759
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
12760
|
+
}
|
|
12761
|
+
|
|
12512
12762
|
/* The one card that is chosen takes the accent, which is what "here, this
|
|
12513
12763
|
one" means everywhere else in the product. */
|
|
12514
12764
|
.crewlet-segmented--cards .crewlet-segmented__option.is-active {
|
|
@@ -12517,6 +12767,91 @@ svg.crewlet-datetime__chevron {
|
|
|
12517
12767
|
color: var(--color-brand-accent-ink);
|
|
12518
12768
|
}
|
|
12519
12769
|
|
|
12770
|
+
/*
|
|
12771
|
+
* A ROW OF SEPARATE CHIPS, for a setting with more choices than a well holds
|
|
12772
|
+
* on one line: the console's own row of unit types. It wraps rather than
|
|
12773
|
+
* running off the panel it sits in, and each chip stands on the raised ground
|
|
12774
|
+
* a chip with no edge of its own takes (held off the card by the palette
|
|
12775
|
+
* suite), so no chip draws a frame inside the panel's. Two classes, for the
|
|
12776
|
+
* reason the card row gives above.
|
|
12777
|
+
*/
|
|
12778
|
+
.crewlet-tabs.crewlet-segmented--chips {
|
|
12779
|
+
/* The chip's own drawing (below) is the --crewlet-segmented-chip-height
|
|
12780
|
+
band inside a target-floor box, so it is the same height at every
|
|
12781
|
+
density the console's 11px chip is drawn at. */
|
|
12782
|
+
--crewlet-segmented-chip-height: calc(var(--size-target-min) - var(--spacing-1));
|
|
12783
|
+
display: flex;
|
|
12784
|
+
flex-wrap: wrap;
|
|
12785
|
+
align-items: center;
|
|
12786
|
+
/* No gap between ROWS: each chip's target already overhangs its drawing by
|
|
12787
|
+
half a step above and below, so two rows' drawings stand a whole step
|
|
12788
|
+
apart while their targets meet. */
|
|
12789
|
+
gap: 0 var(--spacing-1);
|
|
12790
|
+
}
|
|
12791
|
+
|
|
12792
|
+
/*
|
|
12793
|
+
* SMALL, AS THE CONSOLE'S ARE, AND DRAWN SMALL BUT HIT FULL SIZE, the rule the
|
|
12794
|
+
* org chart's own controls keep. A chip is a word in the 11px face with a step
|
|
12795
|
+
* of room either side, drawn as a band shorter than the pointer-target floor;
|
|
12796
|
+
* the button around it stays at the floor, so the band can be the console's
|
|
12797
|
+
* size without being a target a finger misses. At the small control step a
|
|
12798
|
+
* row of ten was a second row of buttons under the field's label rather than a
|
|
12799
|
+
* row of answers to it.
|
|
12800
|
+
*
|
|
12801
|
+
* The band is the button's own ::before, behind the label, rather than its
|
|
12802
|
+
* background clipped to the content box: a clip takes the corner's curve in by
|
|
12803
|
+
* the padding it removes, and a chip this small would lose its radius.
|
|
12804
|
+
*/
|
|
12805
|
+
.crewlet-segmented--chips .crewlet-segmented__option {
|
|
12806
|
+
position: relative;
|
|
12807
|
+
isolation: isolate;
|
|
12808
|
+
min-height: var(--size-target-min);
|
|
12809
|
+
padding: 0 var(--spacing-2);
|
|
12810
|
+
border-radius: var(--radius-sm);
|
|
12811
|
+
background: none;
|
|
12812
|
+
color: var(--color-text-secondary);
|
|
12813
|
+
font-size: var(--font-size-2xs);
|
|
12814
|
+
}
|
|
12815
|
+
|
|
12816
|
+
.crewlet-segmented--chips .crewlet-segmented__option::before {
|
|
12817
|
+
content: '';
|
|
12818
|
+
position: absolute;
|
|
12819
|
+
inset: calc((var(--size-target-min) - var(--crewlet-segmented-chip-height)) / 2) 0;
|
|
12820
|
+
z-index: -1;
|
|
12821
|
+
border-radius: var(--radius-sm);
|
|
12822
|
+
background: var(--color-surface-elevated);
|
|
12823
|
+
pointer-events: none;
|
|
12824
|
+
}
|
|
12825
|
+
|
|
12826
|
+
/* The chosen chip is FILLED with the accent: on a row of up to ten raised
|
|
12827
|
+
chips, a fill is the one thing that says "this one" at a glance, as the
|
|
12828
|
+
console's row says it. Its ring stands off it, because an edge drawn on an
|
|
12829
|
+
accent fill in the focus colour is nearly the fill's own colour. */
|
|
12830
|
+
.crewlet-segmented--chips .crewlet-segmented__option.is-active {
|
|
12831
|
+
color: var(--color-text-on-accent);
|
|
12832
|
+
}
|
|
12833
|
+
|
|
12834
|
+
.crewlet-segmented--chips .crewlet-segmented__option.is-active::before {
|
|
12835
|
+
background: var(--color-brand-accent);
|
|
12836
|
+
}
|
|
12837
|
+
|
|
12838
|
+
/* What completes the last choice sits in the row, at the chips' own height
|
|
12839
|
+
and in their face: a field at its own control step stood taller than every
|
|
12840
|
+
chip beside it. */
|
|
12841
|
+
.crewlet-segmented__trailing {
|
|
12842
|
+
display: inline-flex;
|
|
12843
|
+
align-items: center;
|
|
12844
|
+
min-width: 0;
|
|
12845
|
+
}
|
|
12846
|
+
|
|
12847
|
+
.crewlet-segmented--chips .crewlet-segmented__trailing .crewlet-input {
|
|
12848
|
+
min-height: var(--crewlet-segmented-chip-height);
|
|
12849
|
+
}
|
|
12850
|
+
|
|
12851
|
+
.crewlet-segmented--chips .crewlet-segmented__trailing .crewlet-input__control {
|
|
12852
|
+
font-size: var(--font-size-2xs);
|
|
12853
|
+
}
|
|
12854
|
+
|
|
12520
12855
|
.crewlet-segmented__description {
|
|
12521
12856
|
font-size: var(--font-size-xs);
|
|
12522
12857
|
font-weight: var(--font-weight-regular);
|
|
@@ -12642,7 +12977,7 @@ svg.crewlet-datetime__chevron {
|
|
|
12642
12977
|
}
|
|
12643
12978
|
|
|
12644
12979
|
|
|
12645
|
-
/* Select-
|
|
12980
|
+
/* Select-4ANVLHUY.css */
|
|
12646
12981
|
/*
|
|
12647
12982
|
* Select: one chrome over two controls, and the product's only dropdown.
|
|
12648
12983
|
*
|
|
@@ -12713,8 +13048,8 @@ svg.crewlet-datetime__chevron {
|
|
|
12713
13048
|
* leave the other bare.
|
|
12714
13049
|
*/
|
|
12715
13050
|
.crewlet-select:focus-within {
|
|
12716
|
-
outline:
|
|
12717
|
-
outline-offset:
|
|
13051
|
+
outline: 1px solid var(--color-focus);
|
|
13052
|
+
outline-offset: -1px;
|
|
12718
13053
|
}
|
|
12719
13054
|
|
|
12720
13055
|
/*
|
|
@@ -12992,8 +13327,8 @@ svg.crewlet-select__chevron {
|
|
|
12992
13327
|
* outset ring on the input would be cut by the menu's own `overflow: hidden`.
|
|
12993
13328
|
*/
|
|
12994
13329
|
.crewlet-select__search:focus-within {
|
|
12995
|
-
outline:
|
|
12996
|
-
outline-offset:
|
|
13330
|
+
outline: 1px solid var(--color-focus);
|
|
13331
|
+
outline-offset: -1px;
|
|
12997
13332
|
}
|
|
12998
13333
|
|
|
12999
13334
|
.crewlet-select__search {
|
|
@@ -14537,7 +14872,7 @@ svg.crewlet-select__chevron {
|
|
|
14537
14872
|
}
|
|
14538
14873
|
|
|
14539
14874
|
|
|
14540
|
-
/* Switch-
|
|
14875
|
+
/* Switch-66RAQCRE.css */
|
|
14541
14876
|
/*
|
|
14542
14877
|
* Switch: a setting that takes effect as it moves.
|
|
14543
14878
|
*
|
|
@@ -14651,14 +14986,17 @@ svg.crewlet-select__chevron {
|
|
|
14651
14986
|
* control's own :focus-visible. The track is the same box: the control is
|
|
14652
14987
|
* `inset: 0` over it.
|
|
14653
14988
|
*
|
|
14654
|
-
*
|
|
14655
|
-
* room to draw a ring inside itself
|
|
14656
|
-
*
|
|
14657
|
-
*
|
|
14989
|
+
* OUTSIDE THE TRACK, like a Checkbox's and unlike a text field's: a 20px pill
|
|
14990
|
+
* has no room to draw a ring inside itself. But AGAINST it, not 2px off it.
|
|
14991
|
+
* Off, the track draws a real boundary of its own, and a ring standing off
|
|
14992
|
+
* that boundary was two edges with a gap between them, which reads as a
|
|
14993
|
+
* second outline rather than as focus. Flush, the ring and the track are one
|
|
14994
|
+
* edge in both states, and the ring is still drawn whole on the ground around
|
|
14995
|
+
* the pill, where it is measured.
|
|
14658
14996
|
*/
|
|
14659
14997
|
.crewlet-switch__track:has(.crewlet-switch__control:focus-visible) {
|
|
14660
14998
|
outline: 2px solid var(--color-focus);
|
|
14661
|
-
outline-offset:
|
|
14999
|
+
outline-offset: 0;
|
|
14662
15000
|
}
|
|
14663
15001
|
|
|
14664
15002
|
.crewlet-switch__text {
|
|
@@ -14881,7 +15219,7 @@ svg.crewlet-select__chevron {
|
|
|
14881
15219
|
}
|
|
14882
15220
|
|
|
14883
15221
|
|
|
14884
|
-
/* Tabs-
|
|
15222
|
+
/* Tabs-BWFQSWY3.css */
|
|
14885
15223
|
/*
|
|
14886
15224
|
* The pill register: Tabs and SegmentedControl.
|
|
14887
15225
|
*
|
|
@@ -15172,6 +15510,18 @@ svg.crewlet-select__chevron {
|
|
|
15172
15510
|
outline-offset: 2px;
|
|
15173
15511
|
}
|
|
15174
15512
|
|
|
15513
|
+
/*
|
|
15514
|
+
* A CHIP RINGS ON ITS OWN EDGE, flush rather than 2px off it. The chip that
|
|
15515
|
+
* is on draws a hairline round itself, and a ring standing off that hairline
|
|
15516
|
+
* was two edges with a gap between them, which reads as a second outline
|
|
15517
|
+
* rather than as focus. Flush, the ring covers the hairline, and it stays
|
|
15518
|
+
* inside the well's 2px inset: two pixels wide, it meets the well's own
|
|
15519
|
+
* boundary rather than leaving a sliver of the well between the two.
|
|
15520
|
+
*/
|
|
15521
|
+
.crewlet-tabs--pill .crewlet-tabs__tab:focus-visible {
|
|
15522
|
+
outline-offset: 0;
|
|
15523
|
+
}
|
|
15524
|
+
|
|
15175
15525
|
.crewlet-tabs__tab.is-disabled,
|
|
15176
15526
|
.crewlet-tabs__tab:disabled {
|
|
15177
15527
|
opacity: 0.55;
|
|
@@ -15211,7 +15561,7 @@ svg.crewlet-select__chevron {
|
|
|
15211
15561
|
}
|
|
15212
15562
|
|
|
15213
15563
|
|
|
15214
|
-
/* Tag-
|
|
15564
|
+
/* Tag-4BRQS6GN.css */
|
|
15215
15565
|
/*
|
|
15216
15566
|
* The tag: a small pill naming a state, a category or a value.
|
|
15217
15567
|
*
|
|
@@ -15478,11 +15828,38 @@ svg.crewlet-select__chevron {
|
|
|
15478
15828
|
box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
|
|
15479
15829
|
}
|
|
15480
15830
|
|
|
15831
|
+
/*
|
|
15832
|
+
* ONE RING, ON THE PILL'S OWN EDGE, never off it. A pill draws a border
|
|
15833
|
+
* whenever it is neutral, pointed at or pressed, and a ring standing off that
|
|
15834
|
+
* border is two edges with a gap between them, which reads as a second
|
|
15835
|
+
* outline rather than as focus. So every control here rings over the pill's
|
|
15836
|
+
* border, and the offset that puts it there is each control's own, because
|
|
15837
|
+
* the three boxes meet that border in different places:
|
|
15838
|
+
*
|
|
15839
|
+
* - a whole actionable tag IS the pill, so -1px covers the border and one
|
|
15840
|
+
* pixel outside it;
|
|
15841
|
+
* - the press half of a split pill stops at the border's inside edge, so 0
|
|
15842
|
+
* puts its ring on the same two pixels;
|
|
15843
|
+
* - the remove reaches over the border at the top and the bottom (see its
|
|
15844
|
+
* rule below), so -1px puts its ring there as well.
|
|
15845
|
+
*
|
|
15846
|
+
* ONE PIXEL INTO THE PILL AT MOST, not a field's two, because a pressed tag
|
|
15847
|
+
* says so in an ink line just inside its border: a ring two pixels deep would
|
|
15848
|
+
* cover the one change that pressing it makes.
|
|
15849
|
+
*/
|
|
15481
15850
|
.crewlet-tag--actionable:focus-visible,
|
|
15482
15851
|
.crewlet-tag__press:focus-visible,
|
|
15483
15852
|
.crewlet-tag__remove:focus-visible {
|
|
15484
15853
|
outline: 2px solid var(--color-focus);
|
|
15485
|
-
|
|
15854
|
+
}
|
|
15855
|
+
|
|
15856
|
+
.crewlet-tag--actionable:focus-visible,
|
|
15857
|
+
.crewlet-tag__remove:focus-visible {
|
|
15858
|
+
outline-offset: -1px;
|
|
15859
|
+
}
|
|
15860
|
+
|
|
15861
|
+
.crewlet-tag__press:focus-visible {
|
|
15862
|
+
outline-offset: 0;
|
|
15486
15863
|
}
|
|
15487
15864
|
|
|
15488
15865
|
/* ── the pill that holds two controls ──────────────────────────────────── */
|
|
@@ -15618,7 +15995,7 @@ svg.crewlet-select__chevron {
|
|
|
15618
15995
|
}
|
|
15619
15996
|
|
|
15620
15997
|
|
|
15621
|
-
/* TagGroup-
|
|
15998
|
+
/* TagGroup-BCQZD7ZD.css */
|
|
15622
15999
|
/*
|
|
15623
16000
|
* A labelled list of tags with the tail behind a count.
|
|
15624
16001
|
*
|
|
@@ -15684,9 +16061,12 @@ svg.crewlet-select__chevron {
|
|
|
15684
16061
|
color: var(--color-text-primary);
|
|
15685
16062
|
}
|
|
15686
16063
|
|
|
16064
|
+
/* One ring, over the dashed boundary rather than 2px off it, which is two
|
|
16065
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
16066
|
+
The list above has no edge of its own, so its ring stays outset. */
|
|
15687
16067
|
.crewlet-tag-group__more:focus-visible {
|
|
15688
16068
|
outline: 2px solid var(--color-focus);
|
|
15689
|
-
outline-offset:
|
|
16069
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
15690
16070
|
}
|
|
15691
16071
|
|
|
15692
16072
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -15696,7 +16076,7 @@ svg.crewlet-select__chevron {
|
|
|
15696
16076
|
}
|
|
15697
16077
|
|
|
15698
16078
|
|
|
15699
|
-
/* TagsInput-
|
|
16079
|
+
/* TagsInput-P2HS5QL4.css */
|
|
15700
16080
|
/*
|
|
15701
16081
|
* TagsInput: several values in one field.
|
|
15702
16082
|
*
|
|
@@ -15771,8 +16151,8 @@ svg.crewlet-select__chevron {
|
|
|
15771
16151
|
* the whole reason they sit above the field instead of inside it.
|
|
15772
16152
|
*/
|
|
15773
16153
|
.crewlet-tags-input__box:focus-visible {
|
|
15774
|
-
outline:
|
|
15775
|
-
outline-offset:
|
|
16154
|
+
outline: 1px solid var(--color-focus);
|
|
16155
|
+
outline-offset: -1px;
|
|
15776
16156
|
}
|
|
15777
16157
|
|
|
15778
16158
|
.crewlet-tags-input.is-disabled {
|
|
@@ -16024,7 +16404,7 @@ svg.crewlet-select__chevron {
|
|
|
16024
16404
|
}
|
|
16025
16405
|
|
|
16026
16406
|
|
|
16027
|
-
/* TimeWindowPicker-
|
|
16407
|
+
/* TimeWindowPicker-GBF4JDFI.css */
|
|
16028
16408
|
/*
|
|
16029
16409
|
* TimeWindowPicker: one trigger over one panel.
|
|
16030
16410
|
*
|
|
@@ -16064,11 +16444,17 @@ svg.crewlet-select__chevron {
|
|
|
16064
16444
|
border-color: var(--color-border-hover);
|
|
16065
16445
|
}
|
|
16066
16446
|
|
|
16447
|
+
/*
|
|
16448
|
+
* ONE RING, OVER THE BOUNDARY, for focus and for open alike. It stood 2px off
|
|
16449
|
+
* the box with the border recoloured to the focus colour as well, which is an
|
|
16450
|
+
* accent hairline, a gap and an accent band: two rings from one state. On the
|
|
16451
|
+
* inset offset the ring covers the border, and the border keeps its own colour
|
|
16452
|
+
* under it, the rule every field keeps (see Input.css).
|
|
16453
|
+
*/
|
|
16067
16454
|
.crewlet-time-window:focus-visible,
|
|
16068
16455
|
.crewlet-time-window.is-open {
|
|
16069
|
-
outline:
|
|
16070
|
-
outline-offset:
|
|
16071
|
-
border-color: var(--color-focus);
|
|
16456
|
+
outline: 1px solid var(--color-focus);
|
|
16457
|
+
outline-offset: -1px;
|
|
16072
16458
|
}
|
|
16073
16459
|
|
|
16074
16460
|
.crewlet-time-window.is-disabled,
|
|
@@ -16328,11 +16714,18 @@ svg.crewlet-time-window__tick {
|
|
|
16328
16714
|
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
16329
16715
|
}
|
|
16330
16716
|
|
|
16331
|
-
|
|
16332
|
-
|
|
16333
|
-
|
|
16334
|
-
|
|
16335
|
-
|
|
16717
|
+
/*
|
|
16718
|
+
* THE BOX RINGS ONCE, AS A FIELD DOES. It drew the field register's old
|
|
16719
|
+
* indicator: the border recoloured to the focus colour AND --shadow-focus,
|
|
16720
|
+
* which is itself a ring (a background-coloured gap, then a band), so a
|
|
16721
|
+
* focused box showed two accent edges with a gap between them, and the
|
|
16722
|
+
* transparent outline under them was a third that forced-colors mode paints.
|
|
16723
|
+
* What is left is the field's one outline on the inset offset, over the box's
|
|
16724
|
+
* own boundary (see Input.css), keyed on the box's own input.
|
|
16725
|
+
*/
|
|
16726
|
+
.crewlet-time-window__masked:has(.crewlet-time-window__masked-input:focus-visible) {
|
|
16727
|
+
outline: 1px solid var(--color-focus);
|
|
16728
|
+
outline-offset: -1px;
|
|
16336
16729
|
}
|
|
16337
16730
|
|
|
16338
16731
|
.crewlet-time-window__masked-input {
|
|
@@ -17013,7 +17406,7 @@ svg.crewlet-time-window__tick {
|
|
|
17013
17406
|
}
|
|
17014
17407
|
|
|
17015
17408
|
|
|
17016
|
-
/* TreeCanvas-
|
|
17409
|
+
/* TreeCanvas-L2XYONWL.css */
|
|
17017
17410
|
/*
|
|
17018
17411
|
* A hierarchy drawn as cards on a canvas (TreeCanvas.tsx).
|
|
17019
17412
|
*
|
|
@@ -17119,32 +17512,21 @@ svg.crewlet-time-window__tick {
|
|
|
17119
17512
|
}
|
|
17120
17513
|
|
|
17121
17514
|
/*
|
|
17122
|
-
*
|
|
17123
|
-
* of the hue's
|
|
17124
|
-
*
|
|
17125
|
-
*
|
|
17126
|
-
*
|
|
17127
|
-
*
|
|
17128
|
-
|
|
17129
|
-
|
|
17130
|
-
|
|
17131
|
-
|
|
17132
|
-
|
|
17133
|
-
border: 1px solid var(--crewlet-tree-canvas-card-halo);
|
|
17134
|
-
border-radius: var(--radius-lg);
|
|
17135
|
-
pointer-events: none;
|
|
17136
|
-
}
|
|
17137
|
-
|
|
17138
|
-
/*
|
|
17139
|
-
* The six hues, each as the four steps a toned card draws: the fill it sits
|
|
17140
|
-
* on, the boundary around it, the halo outside that, and the ink its name is
|
|
17141
|
-
* written in. The ink is published as a variable rather than applied here
|
|
17142
|
-
* because WHICH text is the name is the caller's to say.
|
|
17515
|
+
* ONE BOUNDARY, AND NO HALO. A toned card used to carry a second hairline ring
|
|
17516
|
+
* 3px outside its boundary, at the lightest of the hue's alphas, so a toned
|
|
17517
|
+
* card was framed twice: two parallel lines round one node read as a double
|
|
17518
|
+
* border, which is the one thing no box in this package draws. The fill and
|
|
17519
|
+
* the boundary in the hue already say the card is toned from across a chart.
|
|
17520
|
+
*
|
|
17521
|
+
* The six hues, each as the steps a toned card draws: the fill it sits on, the
|
|
17522
|
+
* boundary around it, the ink its name is written in and the accent its mark
|
|
17523
|
+
* takes. The ink and the accent are published as variables rather than applied
|
|
17524
|
+
* here because WHICH text is the name and which drawing the mark is are the
|
|
17525
|
+
* caller's to say.
|
|
17143
17526
|
*/
|
|
17144
17527
|
.crewlet-tree-canvas__card[data-tone='purple'] {
|
|
17145
17528
|
--crewlet-tree-canvas-card-fill: var(--color-node-purple-fill);
|
|
17146
17529
|
--crewlet-tree-canvas-card-line: var(--color-node-purple-line);
|
|
17147
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-purple-halo);
|
|
17148
17530
|
--crewlet-tree-canvas-card-ink: var(--color-node-purple-ink);
|
|
17149
17531
|
--crewlet-tree-canvas-card-accent: var(--color-node-purple);
|
|
17150
17532
|
}
|
|
@@ -17152,7 +17534,6 @@ svg.crewlet-time-window__tick {
|
|
|
17152
17534
|
.crewlet-tree-canvas__card[data-tone='cyan'] {
|
|
17153
17535
|
--crewlet-tree-canvas-card-fill: var(--color-node-cyan-fill);
|
|
17154
17536
|
--crewlet-tree-canvas-card-line: var(--color-node-cyan-line);
|
|
17155
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-cyan-halo);
|
|
17156
17537
|
--crewlet-tree-canvas-card-ink: var(--color-node-cyan-ink);
|
|
17157
17538
|
--crewlet-tree-canvas-card-accent: var(--color-node-cyan);
|
|
17158
17539
|
}
|
|
@@ -17160,7 +17541,6 @@ svg.crewlet-time-window__tick {
|
|
|
17160
17541
|
.crewlet-tree-canvas__card[data-tone='green'] {
|
|
17161
17542
|
--crewlet-tree-canvas-card-fill: var(--color-node-green-fill);
|
|
17162
17543
|
--crewlet-tree-canvas-card-line: var(--color-node-green-line);
|
|
17163
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-green-halo);
|
|
17164
17544
|
--crewlet-tree-canvas-card-ink: var(--color-node-green-ink);
|
|
17165
17545
|
--crewlet-tree-canvas-card-accent: var(--color-node-green);
|
|
17166
17546
|
}
|
|
@@ -17168,7 +17548,6 @@ svg.crewlet-time-window__tick {
|
|
|
17168
17548
|
.crewlet-tree-canvas__card[data-tone='amber'] {
|
|
17169
17549
|
--crewlet-tree-canvas-card-fill: var(--color-node-amber-fill);
|
|
17170
17550
|
--crewlet-tree-canvas-card-line: var(--color-node-amber-line);
|
|
17171
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-amber-halo);
|
|
17172
17551
|
--crewlet-tree-canvas-card-ink: var(--color-node-amber-ink);
|
|
17173
17552
|
--crewlet-tree-canvas-card-accent: var(--color-node-amber);
|
|
17174
17553
|
}
|
|
@@ -17176,7 +17555,6 @@ svg.crewlet-time-window__tick {
|
|
|
17176
17555
|
.crewlet-tree-canvas__card[data-tone='rose'] {
|
|
17177
17556
|
--crewlet-tree-canvas-card-fill: var(--color-node-rose-fill);
|
|
17178
17557
|
--crewlet-tree-canvas-card-line: var(--color-node-rose-line);
|
|
17179
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-rose-halo);
|
|
17180
17558
|
--crewlet-tree-canvas-card-ink: var(--color-node-rose-ink);
|
|
17181
17559
|
--crewlet-tree-canvas-card-accent: var(--color-node-rose);
|
|
17182
17560
|
}
|
|
@@ -17184,7 +17562,6 @@ svg.crewlet-time-window__tick {
|
|
|
17184
17562
|
.crewlet-tree-canvas__card[data-tone='blue'] {
|
|
17185
17563
|
--crewlet-tree-canvas-card-fill: var(--color-node-blue-fill);
|
|
17186
17564
|
--crewlet-tree-canvas-card-line: var(--color-node-blue-line);
|
|
17187
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-blue-halo);
|
|
17188
17565
|
--crewlet-tree-canvas-card-ink: var(--color-node-blue-ink);
|
|
17189
17566
|
--crewlet-tree-canvas-card-accent: var(--color-node-blue);
|
|
17190
17567
|
}
|
|
@@ -17220,18 +17597,43 @@ svg.crewlet-time-window__tick {
|
|
|
17220
17597
|
* canvas clips, so an outset ring is cut away on the cards nearest the frame.
|
|
17221
17598
|
* This component hands out the tab stop, so the indicator is its to draw; left
|
|
17222
17599
|
* to the caller it was drawn on some charts and on others not at all.
|
|
17223
|
-
|
|
17224
|
-
.
|
|
17600
|
+
*
|
|
17601
|
+
* A CARD'S OWN NODE RINGS THE WHOLE CARD. Where the treeitem is the card's
|
|
17602
|
+
* direct child, the card's edge IS the node's edge, and a ring drawn on the
|
|
17603
|
+
* treeitem did two things wrong: it stopped short of anything the card holds
|
|
17604
|
+
* under the node (a unit's lead), and it stood beside the card's boundary as a
|
|
17605
|
+
* second line. So the ring is drawn on the card, over its boundary, and the
|
|
17606
|
+
* treeitem draws none in any state, the way a field's control leaves its ring
|
|
17607
|
+
* to the field. A row deeper inside a card (`*` between the two, because a row
|
|
17608
|
+
* is always inside something the caller drew) has no boundary of its own, and
|
|
17609
|
+
* keeps its ring.
|
|
17610
|
+
*/
|
|
17611
|
+
.crewlet-tree-canvas__card * [role='treeitem']:focus-visible,
|
|
17612
|
+
.crewlet-tree-canvas__card:has(> [role='treeitem']:focus-visible) {
|
|
17225
17613
|
outline: 2px solid var(--color-focus);
|
|
17226
17614
|
outline-offset: var(--size-focus-ring-inset-offset);
|
|
17227
17615
|
}
|
|
17228
17616
|
|
|
17617
|
+
.crewlet-tree-canvas__card > [role='treeitem'] {
|
|
17618
|
+
outline: none;
|
|
17619
|
+
}
|
|
17620
|
+
|
|
17229
17621
|
/* The selection is where the reader is, so it takes the accent. Inset, for the
|
|
17230
17622
|
same reason the ring is. */
|
|
17231
17623
|
.crewlet-tree-canvas__card [role='treeitem'][aria-selected='true'] {
|
|
17232
17624
|
box-shadow: inset 0 0 0 1px var(--color-brand-accent);
|
|
17233
17625
|
}
|
|
17234
17626
|
|
|
17627
|
+
/* On a card's own node the selection IS the card's boundary, in the accent: an
|
|
17628
|
+
inset ring beside the boundary drew two lines where one says it. */
|
|
17629
|
+
.crewlet-tree-canvas__card:has(> [role='treeitem'][aria-selected='true']) {
|
|
17630
|
+
border-color: var(--color-brand-accent);
|
|
17631
|
+
}
|
|
17632
|
+
|
|
17633
|
+
.crewlet-tree-canvas__card > [role='treeitem'][aria-selected='true'] {
|
|
17634
|
+
box-shadow: none;
|
|
17635
|
+
}
|
|
17636
|
+
|
|
17235
17637
|
/*
|
|
17236
17638
|
* THE POINTER'S CONTROLS, drawn over the end of the card and quiet until it is
|
|
17237
17639
|
* reached.
|
|
@@ -17376,8 +17778,8 @@ svg.crewlet-time-window__tick {
|
|
|
17376
17778
|
* The space around the whole chart, as a token, for the reason the gaps are
|
|
17377
17779
|
* one. None by default: a chart of panels is read inside its own frame, and
|
|
17378
17780
|
* the space around it is the page's. The `node` appearance takes the console
|
|
17379
|
-
* chart's own margin below, which is what keeps the
|
|
17380
|
-
*
|
|
17781
|
+
* chart's own margin below, which is what keeps the control hanging under the
|
|
17782
|
+
* outermost node off the canvas's clip.
|
|
17381
17783
|
*/
|
|
17382
17784
|
.crewlet-tree-canvas__margin {
|
|
17383
17785
|
width: var(--spacing-0);
|
|
@@ -17651,8 +18053,8 @@ svg.crewlet-time-window__tick {
|
|
|
17651
18053
|
* drawn distance is the same number either way, and the room simply moved
|
|
17652
18054
|
* from the card's box into the gap with the control that needs it.
|
|
17653
18055
|
* - AROUND: `--spacing-8`, 40px against 36, and deliberately the step above
|
|
17654
|
-
* rather than below: the canvas CLIPS, and
|
|
17655
|
-
*
|
|
18056
|
+
* rather than below: the canvas CLIPS, and what hangs under the outermost
|
|
18057
|
+
* node has to clear the frame.
|
|
17656
18058
|
*/
|
|
17657
18059
|
.crewlet-tree-canvas--node .crewlet-tree-canvas__gap {
|
|
17658
18060
|
width: var(--spacing-9);
|
|
@@ -17996,6 +18398,27 @@ svg.crewlet-time-window__tick {
|
|
|
17996
18398
|
border-radius: 0;
|
|
17997
18399
|
}
|
|
17998
18400
|
|
|
18401
|
+
/*
|
|
18402
|
+
* AND THEY ANSWER THE POINTER WITH THEIR INK, NOT A GROUND, as the console
|
|
18403
|
+
* chart's do: the edit mark turns to the accent and the trash to the critical
|
|
18404
|
+
* hue, and nothing is painted under either. A cell is a whole share of the
|
|
18405
|
+
* node's corner, so a ground painted over it was a square standing past the
|
|
18406
|
+
* card's rounded corner, the one place on a node with no room for a square.
|
|
18407
|
+
*/
|
|
18408
|
+
.crewlet-tree-canvas--node
|
|
18409
|
+
.crewlet-tree-canvas__actions
|
|
18410
|
+
.crewlet-icon-btn:hover:not(:disabled):not([aria-disabled='true']) {
|
|
18411
|
+
background: none;
|
|
18412
|
+
border-color: transparent;
|
|
18413
|
+
color: var(--color-brand-accent-ink);
|
|
18414
|
+
}
|
|
18415
|
+
|
|
18416
|
+
.crewlet-tree-canvas--node
|
|
18417
|
+
.crewlet-tree-canvas__actions
|
|
18418
|
+
.crewlet-icon-btn--ghost-danger:hover:not(:disabled):not([aria-disabled='true']) {
|
|
18419
|
+
color: var(--color-feedback-danger-ink);
|
|
18420
|
+
}
|
|
18421
|
+
|
|
17999
18422
|
/*
|
|
18000
18423
|
* A CONTROL ON AN EDGE IS A DISC: a ground of its own, so the line it sits on,
|
|
18001
18424
|
* or the card it straddles, stops at its edge rather than running through it.
|
|
@@ -18097,38 +18520,29 @@ svg.crewlet-time-window__tick {
|
|
|
18097
18520
|
background-image: linear-gradient(var(--color-surface-subtle), var(--color-surface-subtle));
|
|
18098
18521
|
border: 1px dashed var(--color-brand-accent-soft-strong);
|
|
18099
18522
|
box-shadow: var(--shadow-md);
|
|
18100
|
-
|
|
18101
|
-
|
|
18102
|
-
|
|
18103
|
-
|
|
18104
|
-
|
|
18105
|
-
|
|
18106
|
-
|
|
18107
|
-
|
|
18108
|
-
* over the gap the next card's controls reach into, so it takes no pointer.
|
|
18109
|
-
*/
|
|
18110
|
-
.crewlet-tree-canvas__card--composing::after {
|
|
18111
|
-
content: '';
|
|
18112
|
-
position: absolute;
|
|
18113
|
-
inset: -3px;
|
|
18114
|
-
border: 1px solid var(--color-brand-accent-soft-strong);
|
|
18115
|
-
border-radius: var(--radius-lg);
|
|
18116
|
-
pointer-events: none;
|
|
18523
|
+
/*
|
|
18524
|
+
* THE BOUNDARY BREATHES, which is what says the card is waiting for the
|
|
18525
|
+
* reader from the far end of a chart, where a dashed hairline is a few
|
|
18526
|
+
* pixels. It used to be a second ring 3px outside the boundary that
|
|
18527
|
+
* breathed instead, two lines round one card where every box in this
|
|
18528
|
+
* package draws one, so the dashed boundary itself moves between the soft
|
|
18529
|
+
* accent and the full one.
|
|
18530
|
+
*/
|
|
18117
18531
|
animation:
|
|
18118
|
-
crewlet-tree-canvas-ghost-
|
|
18119
|
-
var(--motion-duration-
|
|
18532
|
+
crewlet-tree-canvas-ghost-card var(--motion-duration-slow) var(--motion-easing-emphasized)
|
|
18533
|
+
var(--motion-duration-base) both,
|
|
18120
18534
|
/* A BREATH RATHER THAN A TRANSITION, so it is a multiple of the scale's
|
|
18121
18535
|
longest step (1.8s) rather than a number off it: the scale tops out at
|
|
18122
18536
|
one UI transition, and a pulse held there would strobe. The console
|
|
18123
|
-
chart's own is 2s. It starts where the
|
|
18537
|
+
chart's own is 2s. It starts where the card's arrival ends. */
|
|
18124
18538
|
crewlet-tree-canvas-ghost-pulse calc(var(--motion-duration-slow) * 6)
|
|
18125
|
-
var(--motion-easing-in-out)
|
|
18126
|
-
|
|
18539
|
+
var(--motion-easing-in-out) calc(var(--motion-duration-base) + var(--motion-duration-slow))
|
|
18540
|
+
infinite;
|
|
18127
18541
|
}
|
|
18128
18542
|
|
|
18129
18543
|
/*
|
|
18130
18544
|
* THE FORM ARRIVES LAST, and from slightly above and behind: the wire, then
|
|
18131
|
-
* the card, then
|
|
18545
|
+
* the card, then what is inside it, which is the order a reader
|
|
18132
18546
|
* follows from the node they pressed to the thing they have to fill in. The
|
|
18133
18547
|
* caller's own element, whatever it drew, because the ghost's contents are
|
|
18134
18548
|
* entirely the caller's.
|
|
@@ -18172,24 +18586,14 @@ svg.crewlet-time-window__tick {
|
|
|
18172
18586
|
}
|
|
18173
18587
|
}
|
|
18174
18588
|
|
|
18175
|
-
@keyframes crewlet-tree-canvas-ghost-glow {
|
|
18176
|
-
from {
|
|
18177
|
-
opacity: 0;
|
|
18178
|
-
}
|
|
18179
|
-
|
|
18180
|
-
to {
|
|
18181
|
-
opacity: 1;
|
|
18182
|
-
}
|
|
18183
|
-
}
|
|
18184
|
-
|
|
18185
18589
|
@keyframes crewlet-tree-canvas-ghost-pulse {
|
|
18186
18590
|
0%,
|
|
18187
18591
|
100% {
|
|
18188
|
-
|
|
18592
|
+
border-color: var(--color-brand-accent-soft-strong);
|
|
18189
18593
|
}
|
|
18190
18594
|
|
|
18191
18595
|
50% {
|
|
18192
|
-
|
|
18596
|
+
border-color: var(--color-brand-accent);
|
|
18193
18597
|
}
|
|
18194
18598
|
}
|
|
18195
18599
|
|
|
@@ -18209,8 +18613,8 @@ svg.crewlet-time-window__tick {
|
|
|
18209
18613
|
* A READER WHO ASKED FOR LESS gets the ghost DRAWN, in place, at once. Nothing
|
|
18210
18614
|
* about the add is behind the motion: the chart still makes room, the branch
|
|
18211
18615
|
* is still dashed, the view still moves onto it and focus still lands in the
|
|
18212
|
-
* form. Only the arrival, the breath and the rise are dropped, and the
|
|
18213
|
-
*
|
|
18616
|
+
* form. Only the arrival, the breath and the rise are dropped, and the
|
|
18617
|
+
* boundary rests at the soft step it breathes from.
|
|
18214
18618
|
*/
|
|
18215
18619
|
@media (prefers-reduced-motion: reduce) {
|
|
18216
18620
|
/* NOT `transform` on the card itself: its transform is where the layout
|
|
@@ -18230,11 +18634,6 @@ svg.crewlet-time-window__tick {
|
|
|
18230
18634
|
transform: none;
|
|
18231
18635
|
animation: none;
|
|
18232
18636
|
}
|
|
18233
|
-
|
|
18234
|
-
.crewlet-tree-canvas__card--composing::after {
|
|
18235
|
-
opacity: 1;
|
|
18236
|
-
animation: none;
|
|
18237
|
-
}
|
|
18238
18637
|
}
|
|
18239
18638
|
|
|
18240
18639
|
|