@momoi-labs/kiso 0.11.0 → 0.12.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.
|
@@ -69,7 +69,7 @@ it is a section with a heading, not a Card.
|
|
|
69
69
|
This is the shared panel contract. Card, [Table](table.md) wrapper,
|
|
70
70
|
[ModalDialog](modal-dialog.md), [Drawer](drawer.md),
|
|
71
71
|
[CommandPalette](command-palette.md), and code or log blocks are **panels**:
|
|
72
|
-
square (`--radius-surface`) with corner marks. Popover, DropdownMenu, Toast,
|
|
72
|
+
square (`--radius-surface`) with corner marks by default. Popover, DropdownMenu, Toast,
|
|
73
73
|
Alert, and Tooltip are transient chrome, not panels: they keep a small radius
|
|
74
74
|
and carry no marks.
|
|
75
75
|
|
|
@@ -91,11 +91,11 @@ accidental.
|
|
|
91
91
|
|
|
92
92
|
The gap is the mark. Close it and this is just a thicker border.
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
Applications can change panel borders, radii, mark shapes, and mark sizes
|
|
95
|
+
with the [appearance attributes](../tokens.md#appearance-attributes).
|
|
96
|
+
Without these attributes, panels keep the square frame and tick marks.
|
|
97
97
|
|
|
98
|
-
Draw
|
|
98
|
+
Draw default ticks on one pseudo-element inset by `calc(-1 * (var(--corner-mark-tick) +
|
|
99
99
|
var(--corner-mark-gap)))`, so no markup and no images are needed. If the panel
|
|
100
100
|
scrolls, move `overflow` to an inner element — the marks sit just outside the
|
|
101
101
|
frame and a scrolling wrapper clips them away.
|
|
@@ -27,7 +27,7 @@ Drawer Root
|
|
|
27
27
|
|
|
28
28
|
Content uses `--color-elevated-surface`, `--color-foreground`,
|
|
29
29
|
`--color-border`, `--spacing-lg` padding, `--radius-surface`, and
|
|
30
|
-
`--shadow-lg`. The scrim uses `--color-overlay`. Panels are square (`--radius-surface`) and carry corner marks. See
|
|
30
|
+
`--shadow-lg`. The scrim uses `--color-overlay`. Panels are square (`--radius-surface`) and carry corner marks by default. See
|
|
31
31
|
[Card](card.md#corner-marks) for the shared panel contract.
|
|
32
32
|
Entry/exit uses `--motion-duration-normal` and `--motion-easing-standard`, with
|
|
33
33
|
no travel under reduced motion.
|
|
@@ -26,7 +26,7 @@ Dialog Root
|
|
|
26
26
|
Content uses `--color-elevated-surface`, `--color-foreground`,
|
|
27
27
|
`--color-border`, `--radius-surface`, `--spacing-lg` padding, and
|
|
28
28
|
`--shadow-lg`. A Dialog is a panel: it carries corner marks. The scrim uses
|
|
29
|
-
`--color-overlay`. Panels are square (`--radius-surface`) and carry corner marks. See
|
|
29
|
+
`--color-overlay`. Panels are square (`--radius-surface`) and carry corner marks by default. See
|
|
30
30
|
[Card](card.md#corner-marks) for the shared panel contract.
|
|
31
31
|
Overlay transitions use `--motion-duration-normal` and
|
|
32
32
|
`--motion-easing-standard`.
|
package/kiso/docs/tokens.md
CHANGED
|
@@ -277,9 +277,9 @@ Layout sizes: `--size-sidebar` (248px) is the shell navigation column;
|
|
|
277
277
|
`--size-icon-sm` (14px), `--size-icon-md` (16px, the default), and
|
|
278
278
|
`--size-icon-lg` (20px).
|
|
279
279
|
|
|
280
|
-
## Corners
|
|
280
|
+
## Corners and appearance
|
|
281
281
|
|
|
282
|
-
Panels are square. `--radius-surface` is `0px`, and a panel's corner treatment
|
|
282
|
+
Panels are square by default. `--radius-surface` is `0px`, and a panel's corner treatment
|
|
283
283
|
is a **corner mark** instead: two 1px ticks per corner, each lying along the
|
|
284
284
|
frame line it extends and stopping `--corner-mark-gap` short of it, so the mark
|
|
285
285
|
points at the corner without touching it.
|
|
@@ -296,8 +296,8 @@ the paint and makes the hollow centre explicit rather than accidental.
|
|
|
296
296
|
|
|
297
297
|
The gap **is** the mark. Close it and this is just a thicker border.
|
|
298
298
|
|
|
299
|
-
Marks appear on
|
|
300
|
-
|
|
299
|
+
Marks appear on panels by default. Applications can select another treatment
|
|
300
|
+
with the appearance attributes below.
|
|
301
301
|
|
|
302
302
|
The remaining radii only take the bite off controls:
|
|
303
303
|
|
|
@@ -308,7 +308,38 @@ The remaining radii only take the bite off controls:
|
|
|
308
308
|
| `--radius-md` | 4px | **Buttons, inputs, menu items** — the control default. |
|
|
309
309
|
| `--radius-lg` | 5px | Segmented tracks and other control groups. |
|
|
310
310
|
| `--radius-full` | 9999px | Pills, dots, switches, avatars. |
|
|
311
|
-
| `--radius-surface` | 0px | **Panels, cards, tables, dialogs**
|
|
311
|
+
| `--radius-surface` | 0px | **Panels, cards, tables, dialogs** by default. |
|
|
312
|
+
|
|
313
|
+
### Appearance attributes
|
|
314
|
+
|
|
315
|
+
Set these attributes on `<html>` so they also reach portalled dialogs and menus.
|
|
316
|
+
They ship in `@momoi-labs/kiso/ui.css`, which React's stylesheet imports.
|
|
317
|
+
No gallery CSS or JavaScript is required.
|
|
318
|
+
|
|
319
|
+
| Attribute | Values | Default when omitted |
|
|
320
|
+
| --- | --- | --- |
|
|
321
|
+
| `data-border-style` | `square`, `soft`, `round`, `asym`, `rail`, `dash`, `bevel`, `double`, `base`, `offset` | Square panels and existing control radii |
|
|
322
|
+
| `data-corner-size` | `off`, `small`, `medium`, `large` | `medium` |
|
|
323
|
+
| `data-corner-marks` | `none`, `ticks`, `brackets`, `arcs`, `dots` | `ticks` |
|
|
324
|
+
| `data-mark-size` | `small`, `medium`, `large` | `medium` |
|
|
325
|
+
|
|
326
|
+
`data-corner-size` scales the radii selected by `data-border-style`: `off`
|
|
327
|
+
sets them to zero; `small`, `medium`, and `large` use 0.5, 1, and 1.5 times
|
|
328
|
+
that style's radii. Square panels stay square and their control radii stay
|
|
329
|
+
unchanged unless the size is `off`. Size does not hide marks; use
|
|
330
|
+
`data-corner-marks="none"` for that.
|
|
331
|
+
|
|
332
|
+
Mark sizes set `--corner-mark-tick` and `--corner-mark-gap` to 2px/1px,
|
|
333
|
+
4px/2px, or 8px/4px. Border styles override the existing radius tokens.
|
|
334
|
+
The generated token defaults remain unchanged.
|
|
335
|
+
|
|
336
|
+
```html
|
|
337
|
+
<html lang="en" data-accent="terracotta" data-border-style="soft"
|
|
338
|
+
data-corner-size="small" data-corner-marks="arcs" data-mark-size="medium">
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Keep scrolling on `.log-scroll`, `.table-scroll`, dialog bodies, and
|
|
342
|
+
`pre > code`. The outer frame owns the marks, which extend outside it.
|
|
312
343
|
|
|
313
344
|
## Hatch
|
|
314
345
|
|
package/kiso/ui.css
CHANGED
|
@@ -798,6 +798,7 @@ table.table { width: 100%; border-collapse: collapse; font-size: var(--type-size
|
|
|
798
798
|
}
|
|
799
799
|
|
|
800
800
|
.palette {
|
|
801
|
+
position: relative;
|
|
801
802
|
width: 100%; max-width: 560px;
|
|
802
803
|
background: var(--color-popover);
|
|
803
804
|
border: 1px solid var(--color-border);
|
|
@@ -1072,59 +1073,171 @@ pre code { display: block; overflow-x: auto; padding: 0; background: none; borde
|
|
|
1072
1073
|
}
|
|
1073
1074
|
|
|
1074
1075
|
|
|
1075
|
-
/*
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1076
|
+
/* Appearance attributes. Set these on html to include portalled content. */
|
|
1077
|
+
:root {
|
|
1078
|
+
--appearance-scale: 1;
|
|
1079
|
+
--appearance-square-scale: 1;
|
|
1080
|
+
--appearance-panel-shadow: 0 0 transparent;
|
|
1081
|
+
--appearance-panel-border: solid;
|
|
1082
|
+
}
|
|
1083
|
+
[data-corner-size="off"] { --appearance-scale: 0; --appearance-square-scale: 0; }
|
|
1084
|
+
[data-corner-size="small"] { --appearance-scale: .5; }
|
|
1085
|
+
[data-corner-size="medium"] { --appearance-scale: 1; }
|
|
1086
|
+
[data-corner-size="large"] { --appearance-scale: 1.5; }
|
|
1087
|
+
[data-border-style] {
|
|
1088
|
+
--appearance-base-radius: 8px;
|
|
1089
|
+
--appearance-control-base: 4px;
|
|
1090
|
+
--appearance-panel-border: solid;
|
|
1091
|
+
--appearance-panel-shadow: 0 0 transparent;
|
|
1092
|
+
--appearance-overlay-content: none;
|
|
1093
|
+
--appearance-footer-start: var(--radius-surface);
|
|
1094
|
+
--appearance-overlay-inset: 0;
|
|
1095
|
+
--appearance-overlay-border: 0;
|
|
1096
|
+
--appearance-overlay-radius: var(--appearance-corners);
|
|
1097
|
+
--radius-surface: calc(var(--appearance-base-radius) * var(--appearance-scale));
|
|
1098
|
+
--radius-md: calc(var(--appearance-control-base) * var(--appearance-scale));
|
|
1099
|
+
--radius-xs: calc(var(--radius-md) / 2);
|
|
1100
|
+
--radius-sm: calc(var(--radius-md) * .75);
|
|
1101
|
+
--radius-lg: calc(var(--radius-md) * 1.25);
|
|
1102
|
+
--appearance-corners: var(--radius-surface);
|
|
1103
|
+
--appearance-control-corners: var(--radius-md);
|
|
1104
|
+
}
|
|
1105
|
+
[data-border-style="square"] {
|
|
1106
|
+
--appearance-base-radius: 0px;
|
|
1107
|
+
--radius-xs: calc(2px * var(--appearance-square-scale));
|
|
1108
|
+
--radius-sm: calc(3px * var(--appearance-square-scale));
|
|
1109
|
+
--radius-md: calc(4px * var(--appearance-square-scale));
|
|
1110
|
+
--radius-lg: calc(5px * var(--appearance-square-scale));
|
|
1111
|
+
}
|
|
1112
|
+
[data-border-style="soft"] { --appearance-base-radius: 8px; }
|
|
1113
|
+
[data-border-style="round"] { --appearance-base-radius: 16px; --appearance-control-base: 8px; }
|
|
1114
|
+
[data-border-style="asym"] {
|
|
1115
|
+
--appearance-footer-start: calc(3px * var(--appearance-scale));
|
|
1116
|
+
--appearance-base-radius: 12px;
|
|
1117
|
+
--appearance-control-base: 6px;
|
|
1118
|
+
--appearance-corners: var(--radius-surface) calc(3px * var(--appearance-scale));
|
|
1119
|
+
--appearance-control-corners: var(--radius-md) calc(2px * var(--appearance-scale));
|
|
1120
|
+
}
|
|
1121
|
+
[data-border-style="rail"] { --appearance-overlay-content: ""; --appearance-base-radius: 6px; --appearance-control-base: 3px; --appearance-panel-shadow: inset 3px 0 var(--color-border-strong); }
|
|
1122
|
+
[data-border-style="dash"] { --appearance-panel-border: dashed; }
|
|
1123
|
+
[data-border-style="bevel"] { --appearance-overlay-content: ""; --appearance-panel-shadow: inset 1px 1px 1px var(--color-shadow-contact), inset -1px -1px var(--color-border-strong); }
|
|
1124
|
+
[data-border-style="double"] { --appearance-overlay-content: ""; --appearance-overlay-inset: 3px; --appearance-overlay-border: 1px solid var(--color-border); --appearance-overlay-radius: max(0px, calc(var(--radius-surface) - 3px)); }
|
|
1125
|
+
[data-border-style="base"] { --appearance-overlay-content: "";
|
|
1126
|
+
/* Match the outer frame so the thick base covers its bottom hairline. */
|
|
1127
|
+
--appearance-overlay-inset: -1px;
|
|
1128
|
+
--appearance-panel-shadow: inset 0 -3px var(--color-border-strong);
|
|
1129
|
+
}
|
|
1130
|
+
[data-border-style="offset"] { --appearance-overlay-content: "";
|
|
1131
|
+
--appearance-overlay-inset: -1px;
|
|
1132
|
+
/* An opaque, hard shadow keeps underlying content out of the offset. */
|
|
1133
|
+
--appearance-panel-shadow: 3px 3px 0 0 var(--color-border-strong);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
:where([data-border-style]) :is(.card, .dialog, .table-wrap, .logview, .marked, .palette, pre) {
|
|
1137
|
+
border-radius: var(--appearance-corners);
|
|
1138
|
+
border-style: var(--appearance-panel-border);
|
|
1139
|
+
}
|
|
1140
|
+
/* Paint decorative edges above table headers and panel footers. */
|
|
1141
|
+
:is(.card, .dialog, .table-wrap, .logview, .marked, .palette, pre)::before {
|
|
1142
|
+
content: var(--appearance-overlay-content, none);
|
|
1143
|
+
position: absolute;
|
|
1144
|
+
inset: var(--appearance-overlay-inset);
|
|
1145
|
+
border: var(--appearance-overlay-border);
|
|
1146
|
+
border-radius: var(--appearance-overlay-radius);
|
|
1147
|
+
box-shadow: var(--appearance-panel-shadow);
|
|
1148
|
+
pointer-events: none;
|
|
1149
|
+
z-index: 1;
|
|
1150
|
+
}
|
|
1151
|
+
:where([data-border-style]) .palette { overflow: visible; }
|
|
1152
|
+
:where([data-border-style]) .palette-list { border-end-start-radius: var(--radius-surface); border-end-end-radius: var(--radius-surface); }
|
|
1153
|
+
:where([data-border-style]) :is(.card-footer, .dialog-footer) {
|
|
1154
|
+
border-end-start-radius: var(--appearance-footer-start);
|
|
1155
|
+
border-end-end-radius: var(--radius-surface);
|
|
1156
|
+
}
|
|
1157
|
+
:where([data-border-style]) :is(.btn:not(.btn-xs), .input, .select, .textarea, .nav-item, .menu-item) {
|
|
1158
|
+
border-radius: var(--appearance-control-corners);
|
|
1159
|
+
}
|
|
1086
1160
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1161
|
+
[data-mark-size="small"] { --corner-mark-tick: 2px; --corner-mark-gap: 1px; }
|
|
1162
|
+
[data-mark-size="medium"] { --corner-mark-tick: 4px; --corner-mark-gap: 2px; }
|
|
1163
|
+
[data-mark-size="large"] { --corner-mark-tick: 8px; --corner-mark-gap: 4px; }
|
|
1164
|
+
[data-corner-marks] {
|
|
1165
|
+
--corner-mark: 1;
|
|
1166
|
+
--appearance-palette-marks: "";
|
|
1167
|
+
--appearance-mark-mask: none;
|
|
1168
|
+
--appearance-mark-bg: transparent;
|
|
1169
|
+
--appearance-mark-inset: initial;
|
|
1170
|
+
--appearance-mark-images: initial;
|
|
1171
|
+
}
|
|
1172
|
+
[data-corner-marks="none"] { --corner-mark: 0; }
|
|
1173
|
+
:is(.card, .dialog, .table-wrap, .logview, .marked, .palette, pre)::after {
|
|
1096
1174
|
content: "";
|
|
1097
1175
|
position: absolute;
|
|
1098
|
-
/* Reach far enough out that a tick clears the frame by the gap. */
|
|
1099
|
-
inset: calc(-1 * (var(--corner-mark-tick) + var(--corner-mark-gap)));
|
|
1100
1176
|
pointer-events: none;
|
|
1101
1177
|
opacity: var(--corner-mark);
|
|
1102
1178
|
background-repeat: no-repeat;
|
|
1103
|
-
background-image:
|
|
1104
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1105
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1106
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1107
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1108
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1109
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1110
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1111
|
-
linear-gradient(var(--color-corner-mark), var(--color-corner-mark));
|
|
1112
1179
|
background-size:
|
|
1113
1180
|
var(--corner-mark-tick) 1px, 1px var(--corner-mark-tick),
|
|
1114
1181
|
var(--corner-mark-tick) 1px, 1px var(--corner-mark-tick),
|
|
1115
1182
|
var(--corner-mark-tick) 1px, 1px var(--corner-mark-tick),
|
|
1116
1183
|
var(--corner-mark-tick) 1px, 1px var(--corner-mark-tick);
|
|
1117
|
-
/* The offset lands each tick exactly on the 1px frame line it extends. */
|
|
1118
1184
|
background-position:
|
|
1119
|
-
left 0 top
|
|
1120
|
-
left
|
|
1121
|
-
right 0 top
|
|
1185
|
+
left 0 top calc(var(--corner-mark-tick) + var(--corner-mark-gap)),
|
|
1186
|
+
left calc(var(--corner-mark-tick) + var(--corner-mark-gap)) top 0,
|
|
1187
|
+
right 0 top calc(var(--corner-mark-tick) + var(--corner-mark-gap)),
|
|
1122
1188
|
right calc(var(--corner-mark-tick) + var(--corner-mark-gap)) top 0,
|
|
1123
|
-
left 0 bottom
|
|
1124
|
-
left
|
|
1189
|
+
left 0 bottom calc(var(--corner-mark-tick) + var(--corner-mark-gap)),
|
|
1190
|
+
left calc(var(--corner-mark-tick) + var(--corner-mark-gap)) bottom 0,
|
|
1125
1191
|
right 0 bottom calc(var(--corner-mark-tick) + var(--corner-mark-gap)),
|
|
1126
1192
|
right calc(var(--corner-mark-tick) + var(--corner-mark-gap)) bottom 0;
|
|
1127
|
-
|
|
1193
|
+
inset: var(--appearance-mark-inset, calc(-1 * (var(--corner-mark-tick) + var(--corner-mark-gap))));
|
|
1194
|
+
background-image: var(--appearance-mark-images,
|
|
1195
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1196
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1197
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1198
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1199
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1200
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1201
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)),
|
|
1202
|
+
linear-gradient(var(--color-corner-mark), var(--color-corner-mark)));
|
|
1203
|
+
background-color: var(--appearance-mark-bg, transparent);
|
|
1204
|
+
mask-image: var(--appearance-mark-mask, none);
|
|
1205
|
+
mask-size: calc(var(--corner-mark-tick) + 1px) calc(var(--corner-mark-tick) + 1px);
|
|
1206
|
+
mask-position: left top, right top, left bottom, right bottom;
|
|
1207
|
+
mask-repeat: no-repeat;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
[data-corner-marks="brackets"] {
|
|
1211
|
+
--appearance-mark-images: none;
|
|
1212
|
+
--appearance-mark-bg: var(--color-corner-mark);
|
|
1213
|
+
--appearance-mark-inset: calc(-1 * (var(--corner-mark-gap) + 1px));
|
|
1214
|
+
--appearance-mark-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5V.5H9.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1215
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%200%29%20scale%28-1%201%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5V.5H9.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1216
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%280%2010%29%20scale%281%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5V.5H9.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1217
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%2010%29%20scale%28-1%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5V.5H9.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
[data-corner-marks="arcs"] {
|
|
1221
|
+
--appearance-mark-images: none;
|
|
1222
|
+
--appearance-mark-bg: var(--color-corner-mark);
|
|
1223
|
+
--appearance-mark-inset: calc(-1 * (var(--corner-mark-gap) + 1px));
|
|
1224
|
+
--appearance-mark-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5Q.5%20.5%209.5%20.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1225
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%200%29%20scale%28-1%201%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5Q.5%20.5%209.5%20.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1226
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%280%2010%29%20scale%281%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5Q.5%20.5%209.5%20.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1227
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%2010%29%20scale%28-1%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Cpath%20d%3D%22M.5%209.5Q.5%20.5%209.5%20.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
[data-corner-marks="dots"] {
|
|
1231
|
+
--appearance-mark-images: none;
|
|
1232
|
+
--appearance-mark-bg: var(--color-corner-mark);
|
|
1233
|
+
--appearance-mark-inset: calc(-1 * (var(--corner-mark-gap) + 1px));
|
|
1234
|
+
--appearance-mark-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Ccircle%20cx%3D%225%22%20cy%3D%225%22%20r%3D%223%22%20fill%3D%22black%22%20stroke%3D%22none%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1235
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%200%29%20scale%28-1%201%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Ccircle%20cx%3D%225%22%20cy%3D%225%22%20r%3D%223%22%20fill%3D%22black%22%20stroke%3D%22none%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1236
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%280%2010%29%20scale%281%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Ccircle%20cx%3D%225%22%20cy%3D%225%22%20r%3D%223%22%20fill%3D%22black%22%20stroke%3D%22none%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
|
|
1237
|
+
url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2010%2010%22%3E%3Cg%20transform%3D%22translate%2810%2010%29%20scale%28-1%20-1%29%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20%3E%3Ccircle%20cx%3D%225%22%20cy%3D%225%22%20r%3D%223%22%20fill%3D%22black%22%20stroke%3D%22none%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
.palette::after { content: var(--appearance-palette-marks, none); }
|
|
1128
1241
|
.marked { position: relative; }
|
|
1129
1242
|
|
|
1130
1243
|
/* ===========================================================================
|
|
@@ -1305,3 +1418,13 @@ button.step-row:focus-visible { outline: 2px solid var(--color-focus); outline-o
|
|
|
1305
1418
|
@media (pointer: coarse) {
|
|
1306
1419
|
.chart-series-button { min-height: var(--size-touch-min); min-width: var(--size-touch-min); }
|
|
1307
1420
|
}
|
|
1421
|
+
|
|
1422
|
+
/* Respect reduced motion in every consumer, including React controls. */
|
|
1423
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1424
|
+
*,
|
|
1425
|
+
*::before,
|
|
1426
|
+
*::after {
|
|
1427
|
+
animation: none !important;
|
|
1428
|
+
transition: none !important;
|
|
1429
|
+
}
|
|
1430
|
+
}
|