flexdesk 0.17.9 → 0.17.10
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 +21 -0
- package/css/base.css +57 -55
- package/css/flexdesk.css +90 -88
- package/css/overrides.css +12 -12
- package/css/tokens.css +11 -2
- package/dist/flexdesk.css +90 -88
- package/dist/tokens.css +11 -2
- package/docs/concepts/styling.md +68 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.17.10 (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.10)"; each entry links to it.
|
|
7
|
+
|
|
8
|
+
### Added and changed
|
|
9
|
+
|
|
10
|
+
- [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).
|
|
11
|
+
|
|
12
|
+
### Removed or renamed exports
|
|
13
|
+
|
|
14
|
+
None. Compared with 0.17.9, 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-light`, `--accent-lighter` and `--twm-dt-new-bg`, and derives
|
|
19
|
+
`--state-selected` and `--shadow-glow` from `--accent-bright`; flexdesk.css
|
|
20
|
+
reads the accent tokens without fallbacks, so it needs tokens.css; and the
|
|
21
|
+
SliderField thumb is about `#4da2db` (was `#569cd6`) and its active state
|
|
22
|
+
about `#73b6e3` (was `#6eb3e9`) (see above).
|
|
23
|
+
|
|
3
24
|
## 0.17.9 (2026-10-25)
|
|
4
25
|
|
|
5
26
|
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;
|
|
@@ -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,13 +3279,15 @@ 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. #78b9ff is a literal
|
|
3287
|
-
|
|
3288
|
-
|
|
3286
|
+
cleared from every sibling by the same handler. #78b9ff is a literal:
|
|
3287
|
+
`--accent-bright` is #007acc, which is a border colour on this background
|
|
3288
|
+
and not a text one, and the derived light accents (`--accent-light`,
|
|
3289
|
+
`--accent-lighter`) are less blue than this, so using them would change
|
|
3290
|
+
the colour. */
|
|
3289
3291
|
.tile.tile--selected {
|
|
3290
3292
|
border-color: #78b9ff;
|
|
3291
3293
|
box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
|
|
@@ -3556,8 +3558,8 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3556
3558
|
/* The drop preview, positioned by `_updateGhost()` in grid coordinates. */
|
|
3557
3559
|
.tile-ghost {
|
|
3558
3560
|
position: absolute;
|
|
3559
|
-
background:
|
|
3560
|
-
border: 2px dashed
|
|
3561
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
3562
|
+
border: 2px dashed color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
3561
3563
|
border-radius: var(--radius-sm);
|
|
3562
3564
|
pointer-events: none;
|
|
3563
3565
|
z-index: 50;
|
|
@@ -4677,12 +4679,12 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4677
4679
|
/* ─── Autocomplete field — notebook variant ──────────────── */
|
|
4678
4680
|
|
|
4679
4681
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper {
|
|
4680
|
-
border: 1px solid
|
|
4682
|
+
border: 1px solid var(--accent-light);
|
|
4681
4683
|
font-size: var(--font-size-sm);
|
|
4682
4684
|
}
|
|
4683
4685
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
4684
4686
|
border-color: #79b8f8;
|
|
4685
|
-
box-shadow: 0 0 3px
|
|
4687
|
+
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
4686
4688
|
}
|
|
4687
4689
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
4688
4690
|
font-family: 'Courier New', Courier, monospace;
|
|
@@ -4867,7 +4869,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4867
4869
|
second keeps the readonly tables, which hover never claimed, working. */
|
|
4868
4870
|
.twm-preview-table:not(.twm-preview-table--readonly) tbody tr.selected td,
|
|
4869
4871
|
.twm-preview-table tbody tr.selected td {
|
|
4870
|
-
background: var(--state-selected
|
|
4872
|
+
background: var(--state-selected);
|
|
4871
4873
|
}
|
|
4872
4874
|
|
|
4873
4875
|
padding: 0;
|
|
@@ -4915,8 +4917,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4915
4917
|
is the keyboard's, and it is deliberately the stronger of the two so that
|
|
4916
4918
|
moving the pointer across the list does not hide where the cursor is. */
|
|
4917
4919
|
.twm-autocomplete-field__item.active {
|
|
4918
|
-
background-color: var(--state-selected
|
|
4919
|
-
box-shadow: inset 2px 0 0 var(--accent-bright
|
|
4920
|
+
background-color: var(--state-selected);
|
|
4921
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
4920
4922
|
}
|
|
4921
4923
|
|
|
4922
4924
|
/* A `<button role="menuitem">`, not a div — that is what makes the menu
|
|
@@ -5449,7 +5451,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5449
5451
|
inset: 0 0 auto 0;
|
|
5450
5452
|
height: 2px;
|
|
5451
5453
|
pointer-events: none;
|
|
5452
|
-
background: var(--accent-bright
|
|
5454
|
+
background: var(--accent-bright);
|
|
5453
5455
|
}
|
|
5454
5456
|
|
|
5455
5457
|
/* A PREVIEW tab — opened by a single click and replaced by the next one.
|
|
@@ -5506,7 +5508,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5506
5508
|
flex: 0 0 auto;
|
|
5507
5509
|
font-size: 9px;
|
|
5508
5510
|
line-height: 1;
|
|
5509
|
-
color: var(--accent-bright
|
|
5511
|
+
color: var(--accent-bright);
|
|
5510
5512
|
}
|
|
5511
5513
|
|
|
5512
5514
|
.notebook-tabs .twm-tab-close {
|
|
@@ -5548,7 +5550,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5548
5550
|
flex: 0 0 auto;
|
|
5549
5551
|
align-self: stretch;
|
|
5550
5552
|
width: 2px;
|
|
5551
|
-
background: var(--accent-bright
|
|
5553
|
+
background: var(--accent-bright);
|
|
5552
5554
|
pointer-events: none;
|
|
5553
5555
|
}
|
|
5554
5556
|
|
|
@@ -5576,8 +5578,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5576
5578
|
* stylesheet, so nothing here is in its scope at all. */
|
|
5577
5579
|
.notebook-tabs--drop-target,
|
|
5578
5580
|
.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
|
|
5581
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
5582
|
+
box-shadow: inset 0 0 0 1px var(--accent-bright);
|
|
5581
5583
|
}
|
|
5582
5584
|
|
|
5583
5585
|
/* ── The tab bar's own context menu ──────────────────────────────────
|
|
@@ -5725,7 +5727,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5725
5727
|
}
|
|
5726
5728
|
.split-pane-divider:hover,
|
|
5727
5729
|
.split-pane-divider--active {
|
|
5728
|
-
background: var(--accent-bright
|
|
5730
|
+
background: var(--accent-bright);
|
|
5729
5731
|
}
|
|
5730
5732
|
/* A pane is its tab bar over its body. The tab bar's own rule says
|
|
5731
5733
|
* `height: 100%` (it fills a tile's strip); here it is a fixed 26px row, the
|
|
@@ -5748,7 +5750,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5748
5750
|
* `setPanes()`, which is why `SplitPaneContainer` ADDS `.split-pane` to a
|
|
5749
5751
|
* pane instead of replacing its classes with it. */
|
|
5750
5752
|
.split-pane-container--split .editor-pane--focused > .tabs.notebook-tabs {
|
|
5751
|
-
box-shadow: inset 0 -1px 0 var(--accent-bright
|
|
5753
|
+
box-shadow: inset 0 -1px 0 var(--accent-bright);
|
|
5752
5754
|
}
|
|
5753
5755
|
/* The body is the positioning anchor; the editor container fills it
|
|
5754
5756
|
* absolutely, so its height is the body's whatever its content is and the
|
|
@@ -5811,7 +5813,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5811
5813
|
font: inherit;
|
|
5812
5814
|
outline: none;
|
|
5813
5815
|
}
|
|
5814
|
-
.nb-search-bar__input:focus { border-color: var(--accent-bright
|
|
5816
|
+
.nb-search-bar__input:focus { border-color: var(--accent-bright); }
|
|
5815
5817
|
.nb-search-bar__match-info {
|
|
5816
5818
|
min-width: 64px;
|
|
5817
5819
|
color: var(--text-muted);
|
|
@@ -5844,7 +5846,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5844
5846
|
.nb-search-bar__btn--active,
|
|
5845
5847
|
.nb-search-bar__btn--active:hover {
|
|
5846
5848
|
background: var(--state-selected);
|
|
5847
|
-
border-color: var(--accent-bright
|
|
5849
|
+
border-color: var(--accent-bright);
|
|
5848
5850
|
color: var(--text-bright);
|
|
5849
5851
|
}
|
|
5850
5852
|
/* Two classes, for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
@@ -6158,12 +6160,12 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6158
6160
|
.twm-record--state-error { box-shadow: inset 2px 0 0 0 var(--color-danger, #c74e4e); }
|
|
6159
6161
|
/* `activeKey` — the record that is OPEN: the accent on the left edge, as
|
|
6160
6162
|
* 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
|
|
6163
|
+
.twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright); }
|
|
6162
6164
|
.twm-record-list--clickable .twm-record { cursor: pointer; }
|
|
6163
6165
|
.twm-record-list--clickable .twm-record:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); }
|
|
6164
6166
|
.twm-record:focus { outline: none; }
|
|
6165
6167
|
.twm-record:focus-visible {
|
|
6166
|
-
outline: 1px solid var(--accent-bright
|
|
6168
|
+
outline: 1px solid var(--accent-bright);
|
|
6167
6169
|
outline-offset: -1px;
|
|
6168
6170
|
}
|
|
6169
6171
|
.twm-record-list__empty {
|
|
@@ -6861,7 +6863,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6861
6863
|
cursor: pointer;
|
|
6862
6864
|
}
|
|
6863
6865
|
.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
|
|
6866
|
+
.twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
|
|
6865
6867
|
.twm-doc-outline__item--level-1 > .twm-doc-outline__link { color: var(--text-primary, #e0e0e0); }
|
|
6866
6868
|
.twm-doc-outline__number {
|
|
6867
6869
|
flex: 0 0 auto;
|
|
@@ -6876,8 +6878,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6876
6878
|
white-space: nowrap;
|
|
6877
6879
|
}
|
|
6878
6880
|
.twm-doc-outline__item.twm-doc-outline__item--active > .twm-doc-outline__link {
|
|
6879
|
-
border-left-color: var(--accent-bright
|
|
6880
|
-
background:
|
|
6881
|
+
border-left-color: var(--accent-bright);
|
|
6882
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
6881
6883
|
color: var(--text-primary, #e0e0e0);
|
|
6882
6884
|
}
|
|
6883
6885
|
/* Listed, but nothing in the document answers to it. */
|
|
@@ -6905,7 +6907,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6905
6907
|
border-radius: var(--radius-sm, 4px);
|
|
6906
6908
|
cursor: text;
|
|
6907
6909
|
}
|
|
6908
|
-
.twm-tag-input:focus-within { border-color: var(--accent-bright
|
|
6910
|
+
.twm-tag-input:focus-within { border-color: var(--accent-bright); }
|
|
6909
6911
|
.twm-tag-input--readonly {
|
|
6910
6912
|
background: transparent;
|
|
6911
6913
|
border-color: transparent;
|
|
@@ -8020,7 +8022,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8020
8022
|
position: absolute;
|
|
8021
8023
|
pointer-events: none;
|
|
8022
8024
|
border: 1px solid var(--accent-bright);
|
|
8023
|
-
background:
|
|
8025
|
+
background: color-mix(in srgb, var(--accent-bright) 12%, transparent);
|
|
8024
8026
|
}
|
|
8025
8027
|
.twm-canvas__marquee[hidden] { display: none; }
|
|
8026
8028
|
|
|
@@ -8513,7 +8515,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8513
8515
|
.twm-flow-graph__port--data .twm-flow-graph__port-dot { border-color: #8a8f98; border-radius: 2px; }
|
|
8514
8516
|
.twm-flow-graph--connecting .twm-flow-graph__port--in:not(:disabled) .twm-flow-graph__port-dot {
|
|
8515
8517
|
background: var(--twm-flow-focus);
|
|
8516
|
-
box-shadow: 0 0 0 3px
|
|
8518
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
8517
8519
|
}
|
|
8518
8520
|
.twm-flow-graph__port--taken .twm-flow-graph__port-dot { border-color: var(--twm-flow-ok); background: var(--twm-flow-ok); }
|
|
8519
8521
|
.twm-flow-graph__port--taken .twm-flow-graph__port-count { color: var(--twm-flow-ok); }
|
|
@@ -8525,7 +8527,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
8525
8527
|
}
|
|
8526
8528
|
.twm-flow-graph__port--can-drop .twm-flow-graph__port-dot {
|
|
8527
8529
|
background: var(--twm-flow-focus);
|
|
8528
|
-
box-shadow: 0 0 0 3px
|
|
8530
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
8529
8531
|
}
|
|
8530
8532
|
|
|
8531
8533
|
/* ── a line ─────────────────────────────────────────────────────────── */
|