flexdesk 0.17.9 → 0.17.11
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/CHANGELOG.md +42 -0
- package/css/base.css +83 -83
- package/css/flexdesk.css +123 -123
- package/css/overrides.css +19 -19
- package/css/tokens.css +16 -2
- package/dist/flexdesk.css +123 -123
- package/dist/tokens.css +16 -2
- package/docs/concepts/styling.md +134 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.17.11 (2026-10-25)
|
|
4
|
+
|
|
5
|
+
A patch release: everything below is additive. Every fix is documented in a
|
|
6
|
+
section of the docs headed "(0.17.11)"; each entry links to it.
|
|
7
|
+
|
|
8
|
+
### Added and changed
|
|
9
|
+
|
|
10
|
+
- [Retheming the accent shades](docs/concepts/styling.md#retheming-the-accent-shades-01711): the accent blues that 0.17.10 left as literals, in shades no mix of an accent token gives exactly, are now derived from the accent tokens too, so setting `--accent`, `--accent-hover` and `--accent-bright` on `:root` rethemes the primary buttons' hover, the selected tile, the row cursor, the window bar, the plot window, the spinner and the flow lanes as well. Three tokens are new in tokens.css: `--accent-bright-hover` (`color-mix(in srgb, var(--accent-bright) 90%, white)`, about `#1987d1`), `--accent-pressed` (`color-mix(in srgb, var(--accent-hover) 90%, black)`, about `#0f6ba8`) and `--accent-lightest` (`color-mix(in srgb, var(--accent-bright) 36%, white)`, about `#a3cfed`). None of the old colours is an exact mix, so each moves to the nearest one (ΔE in OKLab × 100, tints measured over `--surface-0`): `.twm-btn--primary:hover` `#1486cf` → `#1987d1` (0.4); the modal's primary button hover `#1683c4` → `#1987d1` (2.2); `.twm-bar-windows__item:hover` `#268bd2` → `#1987d1` (1.3); `.twm-bar-windows__item:active` `#1a6aa5` → `#0f6ba8` (0.6); the plot series and plot config checkboxes' `accent-color` and the plot config select's focus border `#268bd2` → `#218bd3` (0.3); the plot window toolbar's active button and the computing spinner `#4a90d9` → `#3395d6` (2.1), with the active button's tint and hover tint and the plot table's hovered row (`rgba(74, 144, 217, a)`) following at the same alpha (0.5 to 0.9); the selected tile's border and title, the tile header buttons' and tile menu's hover icons and the action dropdown's icons `#78b9ff` → `#73b6e3` (`--accent-lighter`, 4.1, the largest shift), with the selected tile's ring and header tint (`rgba(120, 185, 255, a)`) following (1.6, 0.6); the action dropdown's hovered or focused icon `#9ecfff` → `#a3cfed` (2.6); the notebook autocomplete's focused border `#79b8f8` → `#73b6e3` (3.2); `.twm-row-cursor`, the focused landing pane's head, `.twm-action-btn:hover` (`rgba(17, 119, 179, a)`) and `.twm-snap-preview` (`rgba(23, 119, 179, 0.18)`) now `--accent-hover` at the same alpha (0.2); `--twm-lanes-wire` `#5b9bd5` → `var(--accent-light)`, about `#4da2db` (2.0); `--twm-lanes-ring` `#1683c4` → `var(--accent-bright-hover)`, about `#1987d1` (2.2); the flow lanes' pressed show button `#0f6fa8` → `#0f6ba8` (1.2); the selected card's glow and a new or changed cell and column (`rgba(22, 131, 196, a)`) now `--twm-lanes-ring` at the same alpha (0.3 to 1.7); a new or changed column's type `#9fd0f0` → `#a3cfed` (0.6). `--accent` and `--accent-bright` stay two tokens. Still literals, because they are not the accent: the colours listed in the (0.17.10) section, the charts' series palette and the Monaco editor theme's selection colours (BUG-0045).
|
|
11
|
+
|
|
12
|
+
### Removed or renamed exports
|
|
13
|
+
|
|
14
|
+
None. Compared with 0.17.10, across every entry point (`core`, `widgets`, `wm`,
|
|
15
|
+
`host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
|
|
16
|
+
`exports` map, no export was added, removed or renamed. Not an export but
|
|
17
|
+
worth knowing: tokens.css defines three new custom properties,
|
|
18
|
+
`--accent-bright-hover`, `--accent-pressed` and `--accent-lightest`;
|
|
19
|
+
`--twm-lanes-wire` and `--twm-lanes-ring` keep their names but default to
|
|
20
|
+
`var(--accent-light)` and `var(--accent-bright-hover)` (were `#5b9bd5` and
|
|
21
|
+
`#1683c4`); and the default colours listed above move by up to 4.1 ΔE, the
|
|
22
|
+
largest being the selected tile's `#78b9ff`, now about `#73b6e3` (see above).
|
|
23
|
+
|
|
24
|
+
## 0.17.10 (2026-10-25)
|
|
25
|
+
|
|
26
|
+
A patch release: everything below is additive. Every fix is documented in a
|
|
27
|
+
section of the docs headed "(0.17.10)"; each entry links to it.
|
|
28
|
+
|
|
29
|
+
### Added and changed
|
|
30
|
+
|
|
31
|
+
- [Retheming the accent](docs/concepts/styling.md#retheming-the-accent-01710): the accent colours in flexdesk.css that were the literal `#007acc` (`rgb(0, 122, 204)`), its tints, and the light accent `#569cd6` / `#6eb3e9` are now derived from `--accent-bright`, so setting `--accent`, `--accent-hover` and `--accent-bright` on `:root` rethemes all of them. In tokens.css, `--state-selected` and `--shadow-glow` are now mixes of `--accent-bright` (the same colours as before), and three tokens are new: `--twm-dt-new-bg` (the colour a DataTable row or cell that has just arrived flashes from, which the stylesheet read before with an `rgba(0, 122, 204, 0.22)` fallback but nothing defined), `--accent-light` (about `#4da2db`, replacing `#569cd6`) and `--accent-lighter` (about `#73b6e3`, replacing `#6eb3e9`). The `rgba(0, 122, 204, a)` tints are now `color-mix(in srgb, var(--accent-bright) a%, transparent)`, with the same colour by default: the DataTable's selected rows and cells, the filter chip when on, the autocomplete's namespace pill and active item, `.add-widget-btn`, `.tile.resizing`, `.tile-ghost`, the focused leaf's inset shadow, the document outline's active link, the canvas marquee and the flow graph's port dots. The SliderField thumb, the SortableList drop line, add button and input focus, the DataTable filter inputs' focus border and the notebook autocomplete's border read `--accent-light`, and the active thumb `--accent-lighter`; since `#569cd6` cannot be mixed exactly from `#007acc`, these move to the nearest mix with white, a difference of about 1.5 to 1.7 ΔE (OKLab × 100). `var(--accent-bright, …)`, `var(--state-selected, …)`, `var(--ea-accent, …)` and `var(--accent, …)` no longer carry fallbacks, so no computed colour changes but flexdesk.css now needs tokens.css (or your own definitions of these tokens). Accent blues in other shades that no mix of an accent token gives exactly stay literals (BUG-0044).
|
|
32
|
+
|
|
33
|
+
### Removed or renamed exports
|
|
34
|
+
|
|
35
|
+
None. Compared with 0.17.9, across every entry point (`core`, `widgets`, `wm`,
|
|
36
|
+
`host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
|
|
37
|
+
`exports` map, no export was added, removed or renamed. Not an export but
|
|
38
|
+
worth knowing: tokens.css defines three new custom properties,
|
|
39
|
+
`--accent-light`, `--accent-lighter` and `--twm-dt-new-bg`, and derives
|
|
40
|
+
`--state-selected` and `--shadow-glow` from `--accent-bright`; flexdesk.css
|
|
41
|
+
reads the accent tokens without fallbacks, so it needs tokens.css; and the
|
|
42
|
+
SliderField thumb is about `#4da2db` (was `#569cd6`) and its active state
|
|
43
|
+
about `#73b6e3` (was `#6eb3e9`) (see above).
|
|
44
|
+
|
|
3
45
|
## 0.17.9 (2026-10-25)
|
|
4
46
|
|
|
5
47
|
A patch release: everything below is additive. Every fix is documented in a
|
package/css/base.css
CHANGED
|
@@ -731,7 +731,7 @@ body.twm-dt-col-resizing {
|
|
|
731
731
|
/* `activeRow` — the row that is OPEN. A left edge, not a background: hover
|
|
732
732
|
* and selection keep theirs. */
|
|
733
733
|
.twm-preview-table tbody tr.twm-dt-row--active > td:first-child {
|
|
734
|
-
box-shadow: inset 2px 0 0 0 var(--accent-bright
|
|
734
|
+
box-shadow: inset 2px 0 0 0 var(--accent-bright);
|
|
735
735
|
}
|
|
736
736
|
/* `rowIcon` — drawn from `data-twm-icon` so the icon's NAME is not cell
|
|
737
737
|
* text (not in a copy, not in the clipped-cell tooltip). The span carries the
|
|
@@ -878,7 +878,7 @@ body.twm-dt-col-resizing {
|
|
|
878
878
|
}
|
|
879
879
|
.twm-preview-table td .twm-dt-detail-toggle:focus-visible {
|
|
880
880
|
opacity: 1;
|
|
881
|
-
outline: 1px solid var(--accent-bright
|
|
881
|
+
outline: 1px solid var(--accent-bright);
|
|
882
882
|
}
|
|
883
883
|
/* The detail's row: one cell across every column. It is often the body's
|
|
884
884
|
* FIRST cell of its row, so the time column's rules reach it (see the note
|
|
@@ -911,7 +911,7 @@ body.twm-dt-col-resizing {
|
|
|
911
911
|
}
|
|
912
912
|
/* `follow` / `refresh()` — a row the last answer did not have, for a moment. */
|
|
913
913
|
@keyframes twm-dt-row-new {
|
|
914
|
-
from { background: var(--twm-dt-new-bg
|
|
914
|
+
from { background: var(--twm-dt-new-bg); }
|
|
915
915
|
to { background: transparent; }
|
|
916
916
|
}
|
|
917
917
|
.twm-preview-table tbody tr.twm-dt-row--new > td {
|
|
@@ -955,11 +955,11 @@ body.twm-dt-col-resizing {
|
|
|
955
955
|
background: rgba(255, 255, 255, 0.06);
|
|
956
956
|
}
|
|
957
957
|
.twm-dt-filter-chip:focus-visible {
|
|
958
|
-
outline: 1px solid var(--accent-bright
|
|
958
|
+
outline: 1px solid var(--accent-bright);
|
|
959
959
|
}
|
|
960
960
|
.twm-dt-filter-chip.twm-dt-filter-chip--on {
|
|
961
|
-
border-color: var(--accent-bright
|
|
962
|
-
background:
|
|
961
|
+
border-color: var(--accent-bright);
|
|
962
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
963
963
|
color: #ddd;
|
|
964
964
|
}
|
|
965
965
|
.twm-dt-filter-chip.twm-dt-filter-chip--empty {
|
|
@@ -1029,14 +1029,14 @@ body.twm-dt-col-resizing {
|
|
|
1029
1029
|
width: 16px;
|
|
1030
1030
|
height: 16px;
|
|
1031
1031
|
border-radius: 50%;
|
|
1032
|
-
background:
|
|
1032
|
+
background: var(--accent-light);
|
|
1033
1033
|
margin-top: -5px;
|
|
1034
1034
|
cursor: grab;
|
|
1035
1035
|
border: 2px solid var(--surface-0);
|
|
1036
1036
|
}
|
|
1037
1037
|
.twm-slider-field__input::-webkit-slider-thumb:active {
|
|
1038
1038
|
cursor: grabbing;
|
|
1039
|
-
background:
|
|
1039
|
+
background: var(--accent-lighter);
|
|
1040
1040
|
}
|
|
1041
1041
|
.twm-slider-field__input::-moz-range-track {
|
|
1042
1042
|
height: 6px;
|
|
@@ -1048,7 +1048,7 @@ body.twm-dt-col-resizing {
|
|
|
1048
1048
|
width: 16px;
|
|
1049
1049
|
height: 16px;
|
|
1050
1050
|
border-radius: 50%;
|
|
1051
|
-
background:
|
|
1051
|
+
background: var(--accent-light);
|
|
1052
1052
|
cursor: grab;
|
|
1053
1053
|
border: 2px solid var(--surface-0);
|
|
1054
1054
|
}
|
|
@@ -1171,7 +1171,7 @@ body.twm-dt-col-resizing {
|
|
|
1171
1171
|
.twm-sortable-list__drop {
|
|
1172
1172
|
height: 2px;
|
|
1173
1173
|
margin: 1px 0;
|
|
1174
|
-
background:
|
|
1174
|
+
background: var(--accent-light);
|
|
1175
1175
|
pointer-events: none;
|
|
1176
1176
|
}
|
|
1177
1177
|
.twm-sortable-list__content {
|
|
@@ -1218,12 +1218,12 @@ body.twm-dt-col-resizing {
|
|
|
1218
1218
|
margin-top: var(--space-md);
|
|
1219
1219
|
}
|
|
1220
1220
|
.twm-sortable-list__add:hover {
|
|
1221
|
-
border-color:
|
|
1222
|
-
color:
|
|
1223
|
-
background:
|
|
1221
|
+
border-color: var(--accent-light);
|
|
1222
|
+
color: var(--accent-light);
|
|
1223
|
+
background: color-mix(in srgb, var(--accent-light) 12%, transparent);
|
|
1224
1224
|
}
|
|
1225
1225
|
.twm-sortable-list__add:active {
|
|
1226
|
-
background:
|
|
1226
|
+
background: color-mix(in srgb, var(--accent-light) 20%, transparent);
|
|
1227
1227
|
}
|
|
1228
1228
|
.twm-sortable-list__empty {
|
|
1229
1229
|
padding: var(--space-xl);
|
|
@@ -1248,7 +1248,7 @@ body.twm-dt-col-resizing {
|
|
|
1248
1248
|
}
|
|
1249
1249
|
.twm-sortable-list__input:focus {
|
|
1250
1250
|
outline: none;
|
|
1251
|
-
border-color:
|
|
1251
|
+
border-color: var(--accent-light);
|
|
1252
1252
|
}
|
|
1253
1253
|
/* Global Top Bar (fixed at top) */
|
|
1254
1254
|
.twm-global-top-bar {
|
|
@@ -1698,19 +1698,19 @@ body.twm-dt-col-resizing {
|
|
|
1698
1698
|
padding: var(--space-xxs) 8px;
|
|
1699
1699
|
font-size: var(--font-size-xs);
|
|
1700
1700
|
color: #c7f1ff;
|
|
1701
|
-
background:
|
|
1702
|
-
border: 1px solid
|
|
1701
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
1702
|
+
border: 1px solid color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
1703
1703
|
border-radius: var(--radius-pill);
|
|
1704
1704
|
white-space: nowrap;
|
|
1705
1705
|
text-transform: none;
|
|
1706
1706
|
cursor: default;
|
|
1707
|
-
box-shadow: inset 0 0 0 1px
|
|
1707
|
+
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
1708
1708
|
}
|
|
1709
1709
|
.twm-autocomplete-field__namespace--toggle {
|
|
1710
1710
|
cursor: pointer;
|
|
1711
|
-
background: linear-gradient(90deg,
|
|
1711
|
+
background: linear-gradient(90deg, color-mix(in srgb, var(--accent-bright) 24%, transparent) 0%, color-mix(in srgb, var(--accent-bright) 12%, transparent) 100%);
|
|
1712
1712
|
transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
|
|
1713
|
-
border: 1px solid
|
|
1713
|
+
border: 1px solid color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
1714
1714
|
color: #e7f5ff;
|
|
1715
1715
|
outline: none;
|
|
1716
1716
|
}
|
|
@@ -2063,7 +2063,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2063
2063
|
box-sizing: border-box;
|
|
2064
2064
|
}
|
|
2065
2065
|
.twm-data-table__filter-input:focus {
|
|
2066
|
-
border-color:
|
|
2066
|
+
border-color: var(--accent-light);
|
|
2067
2067
|
background: #252525;
|
|
2068
2068
|
}
|
|
2069
2069
|
.twm-data-table__filter-input::placeholder {
|
|
@@ -2124,7 +2124,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2124
2124
|
}
|
|
2125
2125
|
.twm-data-table__filter-dropdown-select:focus,
|
|
2126
2126
|
.twm-data-table__filter-dropdown-input:focus {
|
|
2127
|
-
border-color:
|
|
2127
|
+
border-color: var(--accent-light);
|
|
2128
2128
|
}
|
|
2129
2129
|
.twm-data-table__filter-dropdown-select {
|
|
2130
2130
|
appearance: auto;
|
|
@@ -2474,11 +2474,11 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2474
2474
|
color: var(--text-bright);
|
|
2475
2475
|
}
|
|
2476
2476
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active {
|
|
2477
|
-
color:
|
|
2478
|
-
background:
|
|
2477
|
+
color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
2478
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 15%, transparent);
|
|
2479
2479
|
}
|
|
2480
2480
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active:hover {
|
|
2481
|
-
background:
|
|
2481
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 25%, transparent);
|
|
2482
2482
|
}
|
|
2483
2483
|
.twm-plot-window-content {
|
|
2484
2484
|
flex: 1;
|
|
@@ -2549,7 +2549,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2549
2549
|
background: rgba(255, 255, 255, 0.02);
|
|
2550
2550
|
}
|
|
2551
2551
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table tbody tr:hover {
|
|
2552
|
-
background:
|
|
2552
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 10%, transparent);
|
|
2553
2553
|
}
|
|
2554
2554
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table td {
|
|
2555
2555
|
color: #aaa;
|
|
@@ -2622,7 +2622,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2622
2622
|
background: rgba(255, 255, 255, 0.05);
|
|
2623
2623
|
}
|
|
2624
2624
|
.twm-plot-series-toggle-panel__item input[type="checkbox"] {
|
|
2625
|
-
accent-color:
|
|
2625
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
2626
2626
|
flex-shrink: 0;
|
|
2627
2627
|
}
|
|
2628
2628
|
.twm-plot-series-toggle-panel__line-indicator {
|
|
@@ -2731,7 +2731,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2731
2731
|
outline: none;
|
|
2732
2732
|
}
|
|
2733
2733
|
.twm-data-series-plot-config select:focus {
|
|
2734
|
-
border-color:
|
|
2734
|
+
border-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
2735
2735
|
}
|
|
2736
2736
|
.twm-data-series-plot-config__columns {
|
|
2737
2737
|
max-height: 200px;
|
|
@@ -2773,7 +2773,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2773
2773
|
border-radius: 1px;
|
|
2774
2774
|
}
|
|
2775
2775
|
.twm-data-series-plot-config input[type="checkbox"] {
|
|
2776
|
-
accent-color:
|
|
2776
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
2777
2777
|
flex-shrink: 0;
|
|
2778
2778
|
}
|
|
2779
2779
|
/* Computing Status Window */
|
|
@@ -2790,7 +2790,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2790
2790
|
width: 32px;
|
|
2791
2791
|
height: 32px;
|
|
2792
2792
|
border: 3px solid #333;
|
|
2793
|
-
border-top-color:
|
|
2793
|
+
border-top-color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
2794
2794
|
border-radius: 50%;
|
|
2795
2795
|
animation: computing-spin 0.8s linear infinite;
|
|
2796
2796
|
}
|
|
@@ -3223,14 +3223,14 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3223
3223
|
/* Add Widget is the toolbar's one primary verb, so it is the one that carries
|
|
3224
3224
|
the accent. */
|
|
3225
3225
|
.add-widget-btn {
|
|
3226
|
-
background:
|
|
3227
|
-
border-color:
|
|
3226
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
3227
|
+
border-color: color-mix(in srgb, var(--accent-bright) 30%, transparent);
|
|
3228
3228
|
color: var(--text-bright);
|
|
3229
3229
|
}
|
|
3230
3230
|
|
|
3231
3231
|
.add-widget-btn:hover {
|
|
3232
|
-
background:
|
|
3233
|
-
border-color:
|
|
3232
|
+
background: color-mix(in srgb, var(--accent-bright) 25%, transparent);
|
|
3233
|
+
border-color: color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
3234
3234
|
}
|
|
3235
3235
|
|
|
3236
3236
|
/* The other two are secondary — Export is an aside and Reset Layout throws the
|
|
@@ -3279,24 +3279,25 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3279
3279
|
.tile.resizing {
|
|
3280
3280
|
z-index: var(--z-dropdown);
|
|
3281
3281
|
border-color: var(--accent-bright);
|
|
3282
|
-
box-shadow: 0 0 0 2px
|
|
3282
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-bright) 30%, transparent);
|
|
3283
3283
|
}
|
|
3284
3284
|
|
|
3285
3285
|
/* Selected — set by `_onConfigClick()` while the config dialog is open, and
|
|
3286
|
-
cleared from every sibling by the same handler.
|
|
3287
|
-
|
|
3288
|
-
|
|
3286
|
+
cleared from every sibling by the same handler. It reads `--accent-lighter`
|
|
3287
|
+
(BUG-0045): `--accent-bright` is a border colour on this background and not
|
|
3288
|
+
a text one. It was #78b9ff, which no mix of `--accent-bright` with white
|
|
3289
|
+
gives exactly; `--accent-lighter` (about #73b6e3) is the nearest. */
|
|
3289
3290
|
.tile.tile--selected {
|
|
3290
|
-
border-color:
|
|
3291
|
-
box-shadow: 0 0 0 2px
|
|
3291
|
+
border-color: var(--accent-lighter);
|
|
3292
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-lighter) 30%, transparent), var(--shadow-md);
|
|
3292
3293
|
}
|
|
3293
3294
|
|
|
3294
3295
|
.tile.tile--selected .tile-header {
|
|
3295
|
-
background:
|
|
3296
|
+
background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
|
|
3296
3297
|
}
|
|
3297
3298
|
|
|
3298
3299
|
.tile.tile--selected .tile-title {
|
|
3299
|
-
color:
|
|
3300
|
+
color: var(--accent-lighter);
|
|
3300
3301
|
}
|
|
3301
3302
|
|
|
3302
3303
|
/* Read-only. `_buildChrome()`'s read-only branch emits no drag handle, no
|
|
@@ -3399,7 +3400,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3399
3400
|
.tile-menu-btn:hover,
|
|
3400
3401
|
.tile-expand-btn:hover {
|
|
3401
3402
|
background: var(--state-hover);
|
|
3402
|
-
color:
|
|
3403
|
+
color: var(--accent-lighter);
|
|
3403
3404
|
}
|
|
3404
3405
|
|
|
3405
3406
|
.tile-remove-btn:hover {
|
|
@@ -3487,7 +3488,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3487
3488
|
}
|
|
3488
3489
|
|
|
3489
3490
|
.tile-menu-item:hover .material-symbols-outlined {
|
|
3490
|
-
color:
|
|
3491
|
+
color: var(--accent-lighter);
|
|
3491
3492
|
}
|
|
3492
3493
|
|
|
3493
3494
|
/* ── the content area ────────────────────────────────────────────────── */
|
|
@@ -3556,8 +3557,8 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3556
3557
|
/* The drop preview, positioned by `_updateGhost()` in grid coordinates. */
|
|
3557
3558
|
.tile-ghost {
|
|
3558
3559
|
position: absolute;
|
|
3559
|
-
background:
|
|
3560
|
-
border: 2px dashed
|
|
3560
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
3561
|
+
border: 2px dashed color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
3561
3562
|
border-radius: var(--radius-sm);
|
|
3562
3563
|
pointer-events: none;
|
|
3563
3564
|
z-index: 50;
|
|
@@ -3692,12 +3693,12 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3692
3693
|
}
|
|
3693
3694
|
.twm-action-dropdown-option .twm-option-icon {
|
|
3694
3695
|
font-size: 20px;
|
|
3695
|
-
color:
|
|
3696
|
+
color: var(--accent-lighter);
|
|
3696
3697
|
flex-shrink: 0;
|
|
3697
3698
|
}
|
|
3698
3699
|
.twm-action-dropdown-option:hover .twm-option-icon,
|
|
3699
3700
|
.twm-action-dropdown-option:focus .twm-option-icon {
|
|
3700
|
-
color:
|
|
3701
|
+
color: var(--accent-lightest);
|
|
3701
3702
|
}
|
|
3702
3703
|
.twm-action-dropdown-option .twm-option-label {
|
|
3703
3704
|
font-weight: 500;
|
|
@@ -4070,12 +4071,11 @@ button.twm-managed-window__btn svg rect {
|
|
|
4070
4071
|
transition: background-color 0.1s, color 0.1s;
|
|
4071
4072
|
}
|
|
4072
4073
|
.twm-bar-windows__item:hover {
|
|
4073
|
-
|
|
4074
|
-
background: #268bd2;
|
|
4074
|
+
background: var(--accent-bright-hover);
|
|
4075
4075
|
color: var(--text-bright);
|
|
4076
4076
|
}
|
|
4077
4077
|
.twm-bar-windows__item:active {
|
|
4078
|
-
background:
|
|
4078
|
+
background: var(--accent-pressed);
|
|
4079
4079
|
}
|
|
4080
4080
|
/* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
4081
4081
|
.twm-bar-windows__item-icon,
|
|
@@ -4677,12 +4677,12 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4677
4677
|
/* ─── Autocomplete field — notebook variant ──────────────── */
|
|
4678
4678
|
|
|
4679
4679
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper {
|
|
4680
|
-
border: 1px solid
|
|
4680
|
+
border: 1px solid var(--accent-light);
|
|
4681
4681
|
font-size: var(--font-size-sm);
|
|
4682
4682
|
}
|
|
4683
4683
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
4684
|
-
border-color:
|
|
4685
|
-
box-shadow: 0 0 3px
|
|
4684
|
+
border-color: var(--accent-lighter);
|
|
4685
|
+
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
4686
4686
|
}
|
|
4687
4687
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
4688
4688
|
font-family: 'Courier New', Courier, monospace;
|
|
@@ -4867,7 +4867,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4867
4867
|
second keeps the readonly tables, which hover never claimed, working. */
|
|
4868
4868
|
.twm-preview-table:not(.twm-preview-table--readonly) tbody tr.selected td,
|
|
4869
4869
|
.twm-preview-table tbody tr.selected td {
|
|
4870
|
-
background: var(--state-selected
|
|
4870
|
+
background: var(--state-selected);
|
|
4871
4871
|
}
|
|
4872
4872
|
|
|
4873
4873
|
padding: 0;
|
|
@@ -4915,8 +4915,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4915
4915
|
is the keyboard's, and it is deliberately the stronger of the two so that
|
|
4916
4916
|
moving the pointer across the list does not hide where the cursor is. */
|
|
4917
4917
|
.twm-autocomplete-field__item.active {
|
|
4918
|
-
background-color: var(--state-selected
|
|
4919
|
-
box-shadow: inset 2px 0 0 var(--accent-bright
|
|
4918
|
+
background-color: var(--state-selected);
|
|
4919
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
4920
4920
|
}
|
|
4921
4921
|
|
|
4922
4922
|
/* A `<button role="menuitem">`, not a div — that is what makes the menu
|
|
@@ -4982,7 +4982,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4982
4982
|
position: absolute;
|
|
4983
4983
|
z-index: 5999;
|
|
4984
4984
|
pointer-events: none;
|
|
4985
|
-
background:
|
|
4985
|
+
background: color-mix(in srgb, var(--accent-hover) 18%, transparent);
|
|
4986
4986
|
border: 1px solid var(--accent-bright);
|
|
4987
4987
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
4988
4988
|
transition: left 0.09s ease, top 0.09s ease, width 0.09s ease, height 0.09s ease;
|
|
@@ -5449,7 +5449,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5449
5449
|
inset: 0 0 auto 0;
|
|
5450
5450
|
height: 2px;
|
|
5451
5451
|
pointer-events: none;
|
|
5452
|
-
background: var(--accent-bright
|
|
5452
|
+
background: var(--accent-bright);
|
|
5453
5453
|
}
|
|
5454
5454
|
|
|
5455
5455
|
/* A PREVIEW tab — opened by a single click and replaced by the next one.
|
|
@@ -5506,7 +5506,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5506
5506
|
flex: 0 0 auto;
|
|
5507
5507
|
font-size: 9px;
|
|
5508
5508
|
line-height: 1;
|
|
5509
|
-
color: var(--accent-bright
|
|
5509
|
+
color: var(--accent-bright);
|
|
5510
5510
|
}
|
|
5511
5511
|
|
|
5512
5512
|
.notebook-tabs .twm-tab-close {
|
|
@@ -5548,7 +5548,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5548
5548
|
flex: 0 0 auto;
|
|
5549
5549
|
align-self: stretch;
|
|
5550
5550
|
width: 2px;
|
|
5551
|
-
background: var(--accent-bright
|
|
5551
|
+
background: var(--accent-bright);
|
|
5552
5552
|
pointer-events: none;
|
|
5553
5553
|
}
|
|
5554
5554
|
|
|
@@ -5576,8 +5576,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5576
5576
|
* stylesheet, so nothing here is in its scope at all. */
|
|
5577
5577
|
.notebook-tabs--drop-target,
|
|
5578
5578
|
.notebook-editor-container--drop-target {
|
|
5579
|
-
background: color-mix(in srgb, var(--accent-bright
|
|
5580
|
-
box-shadow: inset 0 0 0 1px var(--accent-bright
|
|
5579
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
5580
|
+
box-shadow: inset 0 0 0 1px var(--accent-bright);
|
|
5581
5581
|
}
|
|
5582
5582
|
|
|
5583
5583
|
/* ── The tab bar's own context menu ──────────────────────────────────
|
|
@@ -5725,7 +5725,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5725
5725
|
}
|
|
5726
5726
|
.split-pane-divider:hover,
|
|
5727
5727
|
.split-pane-divider--active {
|
|
5728
|
-
background: var(--accent-bright
|
|
5728
|
+
background: var(--accent-bright);
|
|
5729
5729
|
}
|
|
5730
5730
|
/* A pane is its tab bar over its body. The tab bar's own rule says
|
|
5731
5731
|
* `height: 100%` (it fills a tile's strip); here it is a fixed 26px row, the
|
|
@@ -5748,7 +5748,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5748
5748
|
* `setPanes()`, which is why `SplitPaneContainer` ADDS `.split-pane` to a
|
|
5749
5749
|
* pane instead of replacing its classes with it. */
|
|
5750
5750
|
.split-pane-container--split .editor-pane--focused > .tabs.notebook-tabs {
|
|
5751
|
-
box-shadow: inset 0 -1px 0 var(--accent-bright
|
|
5751
|
+
box-shadow: inset 0 -1px 0 var(--accent-bright);
|
|
5752
5752
|
}
|
|
5753
5753
|
/* The body is the positioning anchor; the editor container fills it
|
|
5754
5754
|
* absolutely, so its height is the body's whatever its content is and the
|
|
@@ -5811,7 +5811,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5811
5811
|
font: inherit;
|
|
5812
5812
|
outline: none;
|
|
5813
5813
|
}
|
|
5814
|
-
.nb-search-bar__input:focus { border-color: var(--accent-bright
|
|
5814
|
+
.nb-search-bar__input:focus { border-color: var(--accent-bright); }
|
|
5815
5815
|
.nb-search-bar__match-info {
|
|
5816
5816
|
min-width: 64px;
|
|
5817
5817
|
color: var(--text-muted);
|
|
@@ -5844,7 +5844,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5844
5844
|
.nb-search-bar__btn--active,
|
|
5845
5845
|
.nb-search-bar__btn--active:hover {
|
|
5846
5846
|
background: var(--state-selected);
|
|
5847
|
-
border-color: var(--accent-bright
|
|
5847
|
+
border-color: var(--accent-bright);
|
|
5848
5848
|
color: var(--text-bright);
|
|
5849
5849
|
}
|
|
5850
5850
|
/* Two classes, for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
@@ -6158,12 +6158,12 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6158
6158
|
.twm-record--state-error { box-shadow: inset 2px 0 0 0 var(--color-danger, #c74e4e); }
|
|
6159
6159
|
/* `activeKey` — the record that is OPEN: the accent on the left edge, as
|
|
6160
6160
|
* DataTable's `twm-dt-row--active`. It wins over a state's edge. */
|
|
6161
|
-
.twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright
|
|
6161
|
+
.twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright); }
|
|
6162
6162
|
.twm-record-list--clickable .twm-record { cursor: pointer; }
|
|
6163
6163
|
.twm-record-list--clickable .twm-record:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); }
|
|
6164
6164
|
.twm-record:focus { outline: none; }
|
|
6165
6165
|
.twm-record:focus-visible {
|
|
6166
|
-
outline: 1px solid var(--accent-bright
|
|
6166
|
+
outline: 1px solid var(--accent-bright);
|
|
6167
6167
|
outline-offset: -1px;
|
|
6168
6168
|
}
|
|
6169
6169
|
.twm-record-list__empty {
|
|
@@ -6861,7 +6861,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6861
6861
|
cursor: pointer;
|
|
6862
6862
|
}
|
|
6863
6863
|
.twm-doc-outline__link:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); color: var(--text-primary, #e0e0e0); }
|
|
6864
|
-
.twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright
|
|
6864
|
+
.twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
|
|
6865
6865
|
.twm-doc-outline__item--level-1 > .twm-doc-outline__link { color: var(--text-primary, #e0e0e0); }
|
|
6866
6866
|
.twm-doc-outline__number {
|
|
6867
6867
|
flex: 0 0 auto;
|
|
@@ -6876,8 +6876,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6876
6876
|
white-space: nowrap;
|
|
6877
6877
|
}
|
|
6878
6878
|
.twm-doc-outline__item.twm-doc-outline__item--active > .twm-doc-outline__link {
|
|
6879
|
-
border-left-color: var(--accent-bright
|
|
6880
|
-
background:
|
|
6879
|
+
border-left-color: var(--accent-bright);
|
|
6880
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
6881
6881
|
color: var(--text-primary, #e0e0e0);
|
|
6882
6882
|
}
|
|
6883
6883
|
/* Listed, but nothing in the document answers to it. */
|
|
@@ -6905,7 +6905,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6905
6905
|
border-radius: var(--radius-sm, 4px);
|
|
6906
6906
|
cursor: text;
|
|
6907
6907
|
}
|
|
6908
|
-
.twm-tag-input:focus-within { border-color: var(--accent-bright
|
|
6908
|
+
.twm-tag-input:focus-within { border-color: var(--accent-bright); }
|
|
6909
6909
|
.twm-tag-input--readonly {
|
|
6910
6910
|
background: transparent;
|
|
6911
6911
|
border-color: transparent;
|
|
@@ -8020,7 +8020,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8020
8020
|
position: absolute;
|
|
8021
8021
|
pointer-events: none;
|
|
8022
8022
|
border: 1px solid var(--accent-bright);
|
|
8023
|
-
background:
|
|
8023
|
+
background: color-mix(in srgb, var(--accent-bright) 12%, transparent);
|
|
8024
8024
|
}
|
|
8025
8025
|
.twm-canvas__marquee[hidden] { display: none; }
|
|
8026
8026
|
|
|
@@ -8513,7 +8513,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8513
8513
|
.twm-flow-graph__port--data .twm-flow-graph__port-dot { border-color: #8a8f98; border-radius: 2px; }
|
|
8514
8514
|
.twm-flow-graph--connecting .twm-flow-graph__port--in:not(:disabled) .twm-flow-graph__port-dot {
|
|
8515
8515
|
background: var(--twm-flow-focus);
|
|
8516
|
-
box-shadow: 0 0 0 3px
|
|
8516
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
8517
8517
|
}
|
|
8518
8518
|
.twm-flow-graph__port--taken .twm-flow-graph__port-dot { border-color: var(--twm-flow-ok); background: var(--twm-flow-ok); }
|
|
8519
8519
|
.twm-flow-graph__port--taken .twm-flow-graph__port-count { color: var(--twm-flow-ok); }
|
|
@@ -8525,7 +8525,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8525
8525
|
}
|
|
8526
8526
|
.twm-flow-graph__port--can-drop .twm-flow-graph__port-dot {
|
|
8527
8527
|
background: var(--twm-flow-focus);
|
|
8528
|
-
box-shadow: 0 0 0 3px
|
|
8528
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
8529
8529
|
}
|
|
8530
8530
|
|
|
8531
8531
|
/* ── a line ─────────────────────────────────────────────────────────── */
|
|
@@ -9342,9 +9342,9 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9342
9342
|
display: none !important;
|
|
9343
9343
|
}
|
|
9344
9344
|
.twm-flow-lanes {
|
|
9345
|
-
--twm-lanes-wire:
|
|
9345
|
+
--twm-lanes-wire: var(--accent-light);
|
|
9346
9346
|
--twm-lanes-surface: #1b1b1c;
|
|
9347
|
-
--twm-lanes-ring:
|
|
9347
|
+
--twm-lanes-ring: var(--accent-bright-hover);
|
|
9348
9348
|
display: flex;
|
|
9349
9349
|
flex-direction: column;
|
|
9350
9350
|
box-sizing: border-box;
|
|
@@ -9467,7 +9467,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9467
9467
|
border-left: 1px solid var(--surface-3);
|
|
9468
9468
|
}
|
|
9469
9469
|
.twm-flow-lanes__show-btn[aria-pressed="true"] {
|
|
9470
|
-
background:
|
|
9470
|
+
background: var(--accent-pressed);
|
|
9471
9471
|
color: var(--text-bright);
|
|
9472
9472
|
}
|
|
9473
9473
|
.twm-flow-lanes__show-btn:focus-visible,
|
|
@@ -9710,7 +9710,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9710
9710
|
.twm-flow-lanes__node--selected .twm-flow-lanes__card,
|
|
9711
9711
|
.twm-flow-lanes__card:focus-visible {
|
|
9712
9712
|
filter: drop-shadow(0 0 1px var(--twm-lanes-ring)) drop-shadow(0 0 1px var(--twm-lanes-ring))
|
|
9713
|
-
drop-shadow(0 0 5px
|
|
9713
|
+
drop-shadow(0 0 5px color-mix(in srgb, var(--twm-lanes-ring) 80%, transparent));
|
|
9714
9714
|
}
|
|
9715
9715
|
.twm-flow-lanes__card:hover .twm-flow-lanes__body {
|
|
9716
9716
|
filter: brightness(1.12);
|
|
@@ -10033,7 +10033,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10033
10033
|
}
|
|
10034
10034
|
.twm-flow-lanes__cell--new,
|
|
10035
10035
|
.twm-flow-lanes__cell--changed {
|
|
10036
|
-
background:
|
|
10036
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 7%, transparent);
|
|
10037
10037
|
}
|
|
10038
10038
|
.twm-flow-lanes__error {
|
|
10039
10039
|
flex: 0 0 auto;
|
|
@@ -10067,7 +10067,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10067
10067
|
}
|
|
10068
10068
|
.twm-flow-lanes__column--new,
|
|
10069
10069
|
.twm-flow-lanes__column--changed {
|
|
10070
|
-
background:
|
|
10070
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 14%, transparent);
|
|
10071
10071
|
}
|
|
10072
10072
|
.twm-flow-lanes__column-name {
|
|
10073
10073
|
font-family: var(--font-family-mono);
|
|
@@ -10080,7 +10080,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10080
10080
|
}
|
|
10081
10081
|
.twm-flow-lanes__column--new .twm-flow-lanes__column-type,
|
|
10082
10082
|
.twm-flow-lanes__column--changed .twm-flow-lanes__column-type {
|
|
10083
|
-
color:
|
|
10083
|
+
color: var(--accent-lightest);
|
|
10084
10084
|
}
|
|
10085
10085
|
.twm-flow-lanes__column-origin {
|
|
10086
10086
|
margin-left: auto;
|