flexdesk 0.17.10 → 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 +21 -0
- package/css/base.css +31 -33
- package/css/flexdesk.css +38 -40
- package/css/overrides.css +7 -7
- package/css/tokens.css +5 -0
- package/dist/flexdesk.css +38 -40
- package/dist/tokens.css +5 -0
- package/docs/concepts/styling.md +72 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
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
|
+
|
|
3
24
|
## 0.17.10 (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
|
@@ -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
|
}
|
|
@@ -3283,22 +3283,21 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
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
|
-
`--accent-bright` is
|
|
3288
|
-
|
|
3289
|
-
`--accent-lighter`
|
|
3290
|
-
the colour. */
|
|
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. */
|
|
3291
3290
|
.tile.tile--selected {
|
|
3292
|
-
border-color:
|
|
3293
|
-
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);
|
|
3294
3293
|
}
|
|
3295
3294
|
|
|
3296
3295
|
.tile.tile--selected .tile-header {
|
|
3297
|
-
background:
|
|
3296
|
+
background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
|
|
3298
3297
|
}
|
|
3299
3298
|
|
|
3300
3299
|
.tile.tile--selected .tile-title {
|
|
3301
|
-
color:
|
|
3300
|
+
color: var(--accent-lighter);
|
|
3302
3301
|
}
|
|
3303
3302
|
|
|
3304
3303
|
/* Read-only. `_buildChrome()`'s read-only branch emits no drag handle, no
|
|
@@ -3401,7 +3400,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3401
3400
|
.tile-menu-btn:hover,
|
|
3402
3401
|
.tile-expand-btn:hover {
|
|
3403
3402
|
background: var(--state-hover);
|
|
3404
|
-
color:
|
|
3403
|
+
color: var(--accent-lighter);
|
|
3405
3404
|
}
|
|
3406
3405
|
|
|
3407
3406
|
.tile-remove-btn:hover {
|
|
@@ -3489,7 +3488,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3489
3488
|
}
|
|
3490
3489
|
|
|
3491
3490
|
.tile-menu-item:hover .material-symbols-outlined {
|
|
3492
|
-
color:
|
|
3491
|
+
color: var(--accent-lighter);
|
|
3493
3492
|
}
|
|
3494
3493
|
|
|
3495
3494
|
/* ── the content area ────────────────────────────────────────────────── */
|
|
@@ -3694,12 +3693,12 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3694
3693
|
}
|
|
3695
3694
|
.twm-action-dropdown-option .twm-option-icon {
|
|
3696
3695
|
font-size: 20px;
|
|
3697
|
-
color:
|
|
3696
|
+
color: var(--accent-lighter);
|
|
3698
3697
|
flex-shrink: 0;
|
|
3699
3698
|
}
|
|
3700
3699
|
.twm-action-dropdown-option:hover .twm-option-icon,
|
|
3701
3700
|
.twm-action-dropdown-option:focus .twm-option-icon {
|
|
3702
|
-
color:
|
|
3701
|
+
color: var(--accent-lightest);
|
|
3703
3702
|
}
|
|
3704
3703
|
.twm-action-dropdown-option .twm-option-label {
|
|
3705
3704
|
font-weight: 500;
|
|
@@ -4072,12 +4071,11 @@ button.twm-managed-window__btn svg rect {
|
|
|
4072
4071
|
transition: background-color 0.1s, color 0.1s;
|
|
4073
4072
|
}
|
|
4074
4073
|
.twm-bar-windows__item:hover {
|
|
4075
|
-
|
|
4076
|
-
background: #268bd2;
|
|
4074
|
+
background: var(--accent-bright-hover);
|
|
4077
4075
|
color: var(--text-bright);
|
|
4078
4076
|
}
|
|
4079
4077
|
.twm-bar-windows__item:active {
|
|
4080
|
-
background:
|
|
4078
|
+
background: var(--accent-pressed);
|
|
4081
4079
|
}
|
|
4082
4080
|
/* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
4083
4081
|
.twm-bar-windows__item-icon,
|
|
@@ -4683,7 +4681,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4683
4681
|
font-size: var(--font-size-sm);
|
|
4684
4682
|
}
|
|
4685
4683
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
4686
|
-
border-color:
|
|
4684
|
+
border-color: var(--accent-lighter);
|
|
4687
4685
|
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
4688
4686
|
}
|
|
4689
4687
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
@@ -4984,7 +4982,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4984
4982
|
position: absolute;
|
|
4985
4983
|
z-index: 5999;
|
|
4986
4984
|
pointer-events: none;
|
|
4987
|
-
background:
|
|
4985
|
+
background: color-mix(in srgb, var(--accent-hover) 18%, transparent);
|
|
4988
4986
|
border: 1px solid var(--accent-bright);
|
|
4989
4987
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
4990
4988
|
transition: left 0.09s ease, top 0.09s ease, width 0.09s ease, height 0.09s ease;
|
|
@@ -9344,9 +9342,9 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9344
9342
|
display: none !important;
|
|
9345
9343
|
}
|
|
9346
9344
|
.twm-flow-lanes {
|
|
9347
|
-
--twm-lanes-wire:
|
|
9345
|
+
--twm-lanes-wire: var(--accent-light);
|
|
9348
9346
|
--twm-lanes-surface: #1b1b1c;
|
|
9349
|
-
--twm-lanes-ring:
|
|
9347
|
+
--twm-lanes-ring: var(--accent-bright-hover);
|
|
9350
9348
|
display: flex;
|
|
9351
9349
|
flex-direction: column;
|
|
9352
9350
|
box-sizing: border-box;
|
|
@@ -9469,7 +9467,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9469
9467
|
border-left: 1px solid var(--surface-3);
|
|
9470
9468
|
}
|
|
9471
9469
|
.twm-flow-lanes__show-btn[aria-pressed="true"] {
|
|
9472
|
-
background:
|
|
9470
|
+
background: var(--accent-pressed);
|
|
9473
9471
|
color: var(--text-bright);
|
|
9474
9472
|
}
|
|
9475
9473
|
.twm-flow-lanes__show-btn:focus-visible,
|
|
@@ -9712,7 +9710,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
9712
9710
|
.twm-flow-lanes__node--selected .twm-flow-lanes__card,
|
|
9713
9711
|
.twm-flow-lanes__card:focus-visible {
|
|
9714
9712
|
filter: drop-shadow(0 0 1px var(--twm-lanes-ring)) drop-shadow(0 0 1px var(--twm-lanes-ring))
|
|
9715
|
-
drop-shadow(0 0 5px
|
|
9713
|
+
drop-shadow(0 0 5px color-mix(in srgb, var(--twm-lanes-ring) 80%, transparent));
|
|
9716
9714
|
}
|
|
9717
9715
|
.twm-flow-lanes__card:hover .twm-flow-lanes__body {
|
|
9718
9716
|
filter: brightness(1.12);
|
|
@@ -10035,7 +10033,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10035
10033
|
}
|
|
10036
10034
|
.twm-flow-lanes__cell--new,
|
|
10037
10035
|
.twm-flow-lanes__cell--changed {
|
|
10038
|
-
background:
|
|
10036
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 7%, transparent);
|
|
10039
10037
|
}
|
|
10040
10038
|
.twm-flow-lanes__error {
|
|
10041
10039
|
flex: 0 0 auto;
|
|
@@ -10069,7 +10067,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10069
10067
|
}
|
|
10070
10068
|
.twm-flow-lanes__column--new,
|
|
10071
10069
|
.twm-flow-lanes__column--changed {
|
|
10072
|
-
background:
|
|
10070
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 14%, transparent);
|
|
10073
10071
|
}
|
|
10074
10072
|
.twm-flow-lanes__column-name {
|
|
10075
10073
|
font-family: var(--font-family-mono);
|
|
@@ -10082,7 +10080,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
10082
10080
|
}
|
|
10083
10081
|
.twm-flow-lanes__column--new .twm-flow-lanes__column-type,
|
|
10084
10082
|
.twm-flow-lanes__column--changed .twm-flow-lanes__column-type {
|
|
10085
|
-
color:
|
|
10083
|
+
color: var(--accent-lightest);
|
|
10086
10084
|
}
|
|
10087
10085
|
.twm-flow-lanes__column-origin {
|
|
10088
10086
|
margin-left: auto;
|
package/css/flexdesk.css
CHANGED
|
@@ -2999,11 +2999,11 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2999
2999
|
color: var(--text-bright);
|
|
3000
3000
|
}
|
|
3001
3001
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active {
|
|
3002
|
-
color:
|
|
3003
|
-
background:
|
|
3002
|
+
color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
3003
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 15%, transparent);
|
|
3004
3004
|
}
|
|
3005
3005
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active:hover {
|
|
3006
|
-
background:
|
|
3006
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 25%, transparent);
|
|
3007
3007
|
}
|
|
3008
3008
|
.twm-plot-window-content {
|
|
3009
3009
|
flex: 1;
|
|
@@ -3074,7 +3074,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3074
3074
|
background: rgba(255, 255, 255, 0.02);
|
|
3075
3075
|
}
|
|
3076
3076
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table tbody tr:hover {
|
|
3077
|
-
background:
|
|
3077
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 10%, transparent);
|
|
3078
3078
|
}
|
|
3079
3079
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table td {
|
|
3080
3080
|
color: #aaa;
|
|
@@ -3147,7 +3147,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3147
3147
|
background: rgba(255, 255, 255, 0.05);
|
|
3148
3148
|
}
|
|
3149
3149
|
.twm-plot-series-toggle-panel__item input[type="checkbox"] {
|
|
3150
|
-
accent-color:
|
|
3150
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3151
3151
|
flex-shrink: 0;
|
|
3152
3152
|
}
|
|
3153
3153
|
.twm-plot-series-toggle-panel__line-indicator {
|
|
@@ -3256,7 +3256,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3256
3256
|
outline: none;
|
|
3257
3257
|
}
|
|
3258
3258
|
.twm-data-series-plot-config select:focus {
|
|
3259
|
-
border-color:
|
|
3259
|
+
border-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3260
3260
|
}
|
|
3261
3261
|
.twm-data-series-plot-config__columns {
|
|
3262
3262
|
max-height: 200px;
|
|
@@ -3298,7 +3298,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3298
3298
|
border-radius: 1px;
|
|
3299
3299
|
}
|
|
3300
3300
|
.twm-data-series-plot-config input[type="checkbox"] {
|
|
3301
|
-
accent-color:
|
|
3301
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3302
3302
|
flex-shrink: 0;
|
|
3303
3303
|
}
|
|
3304
3304
|
/* Computing Status Window */
|
|
@@ -3315,7 +3315,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3315
3315
|
width: 32px;
|
|
3316
3316
|
height: 32px;
|
|
3317
3317
|
border: 3px solid #333;
|
|
3318
|
-
border-top-color:
|
|
3318
|
+
border-top-color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
3319
3319
|
border-radius: 50%;
|
|
3320
3320
|
animation: computing-spin 0.8s linear infinite;
|
|
3321
3321
|
}
|
|
@@ -3808,22 +3808,21 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3808
3808
|
}
|
|
3809
3809
|
|
|
3810
3810
|
/* Selected — set by `_onConfigClick()` while the config dialog is open, and
|
|
3811
|
-
cleared from every sibling by the same handler.
|
|
3812
|
-
`--accent-bright` is
|
|
3813
|
-
|
|
3814
|
-
`--accent-lighter`
|
|
3815
|
-
the colour. */
|
|
3811
|
+
cleared from every sibling by the same handler. It reads `--accent-lighter`
|
|
3812
|
+
(BUG-0045): `--accent-bright` is a border colour on this background and not
|
|
3813
|
+
a text one. It was #78b9ff, which no mix of `--accent-bright` with white
|
|
3814
|
+
gives exactly; `--accent-lighter` (about #73b6e3) is the nearest. */
|
|
3816
3815
|
.tile.tile--selected {
|
|
3817
|
-
border-color:
|
|
3818
|
-
box-shadow: 0 0 0 2px
|
|
3816
|
+
border-color: var(--accent-lighter);
|
|
3817
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-lighter) 30%, transparent), var(--shadow-md);
|
|
3819
3818
|
}
|
|
3820
3819
|
|
|
3821
3820
|
.tile.tile--selected .tile-header {
|
|
3822
|
-
background:
|
|
3821
|
+
background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
|
|
3823
3822
|
}
|
|
3824
3823
|
|
|
3825
3824
|
.tile.tile--selected .tile-title {
|
|
3826
|
-
color:
|
|
3825
|
+
color: var(--accent-lighter);
|
|
3827
3826
|
}
|
|
3828
3827
|
|
|
3829
3828
|
/* Read-only. `_buildChrome()`'s read-only branch emits no drag handle, no
|
|
@@ -3926,7 +3925,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3926
3925
|
.tile-menu-btn:hover,
|
|
3927
3926
|
.tile-expand-btn:hover {
|
|
3928
3927
|
background: var(--state-hover);
|
|
3929
|
-
color:
|
|
3928
|
+
color: var(--accent-lighter);
|
|
3930
3929
|
}
|
|
3931
3930
|
|
|
3932
3931
|
.tile-remove-btn:hover {
|
|
@@ -4014,7 +4013,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4014
4013
|
}
|
|
4015
4014
|
|
|
4016
4015
|
.tile-menu-item:hover .material-symbols-outlined {
|
|
4017
|
-
color:
|
|
4016
|
+
color: var(--accent-lighter);
|
|
4018
4017
|
}
|
|
4019
4018
|
|
|
4020
4019
|
/* ── the content area ────────────────────────────────────────────────── */
|
|
@@ -4528,12 +4527,12 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4528
4527
|
}
|
|
4529
4528
|
.twm-action-dropdown-option .twm-option-icon {
|
|
4530
4529
|
font-size: 20px;
|
|
4531
|
-
color:
|
|
4530
|
+
color: var(--accent-lighter);
|
|
4532
4531
|
flex-shrink: 0;
|
|
4533
4532
|
}
|
|
4534
4533
|
.twm-action-dropdown-option:hover .twm-option-icon,
|
|
4535
4534
|
.twm-action-dropdown-option:focus .twm-option-icon {
|
|
4536
|
-
color:
|
|
4535
|
+
color: var(--accent-lightest);
|
|
4537
4536
|
}
|
|
4538
4537
|
.twm-action-dropdown-option .twm-option-label {
|
|
4539
4538
|
font-weight: 500;
|
|
@@ -4692,7 +4691,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4692
4691
|
position: absolute;
|
|
4693
4692
|
z-index: 5999;
|
|
4694
4693
|
pointer-events: none;
|
|
4695
|
-
background:
|
|
4694
|
+
background: color-mix(in srgb, var(--accent-hover) 18%, transparent);
|
|
4696
4695
|
border: 1px solid var(--accent-bright);
|
|
4697
4696
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
4698
4697
|
transition: left 0.09s ease, top 0.09s ease, width 0.09s ease, height 0.09s ease;
|
|
@@ -4986,12 +4985,11 @@ button.twm-managed-window__btn svg rect {
|
|
|
4986
4985
|
transition: background-color 0.1s, color 0.1s;
|
|
4987
4986
|
}
|
|
4988
4987
|
.twm-bar-windows__item:hover {
|
|
4989
|
-
|
|
4990
|
-
background: #268bd2;
|
|
4988
|
+
background: var(--accent-bright-hover);
|
|
4991
4989
|
color: var(--text-bright);
|
|
4992
4990
|
}
|
|
4993
4991
|
.twm-bar-windows__item:active {
|
|
4994
|
-
background:
|
|
4992
|
+
background: var(--accent-pressed);
|
|
4995
4993
|
}
|
|
4996
4994
|
/* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
4997
4995
|
.twm-bar-windows__item-icon,
|
|
@@ -5597,7 +5595,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5597
5595
|
font-size: var(--font-size-sm);
|
|
5598
5596
|
}
|
|
5599
5597
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
5600
|
-
border-color:
|
|
5598
|
+
border-color: var(--accent-lighter);
|
|
5601
5599
|
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
5602
5600
|
}
|
|
5603
5601
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
@@ -5915,8 +5913,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5915
5913
|
color: var(--text-bright);
|
|
5916
5914
|
}
|
|
5917
5915
|
.twm-btn--primary:hover:not(:disabled) {
|
|
5918
|
-
background:
|
|
5919
|
-
border-color:
|
|
5916
|
+
background: var(--accent-bright-hover);
|
|
5917
|
+
border-color: var(--accent-bright-hover);
|
|
5920
5918
|
}
|
|
5921
5919
|
/* Context menu separator (matches Ecosim's .twm-context-menu look). */
|
|
5922
5920
|
.twm-context-menu__separator {
|
|
@@ -6438,8 +6436,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6438
6436
|
font-weight: 600;
|
|
6439
6437
|
}
|
|
6440
6438
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--primary:hover:not(:disabled) {
|
|
6441
|
-
background:
|
|
6442
|
-
border-color:
|
|
6439
|
+
background: var(--accent-bright-hover);
|
|
6440
|
+
border-color: var(--accent-bright-hover);
|
|
6443
6441
|
}
|
|
6444
6442
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--danger {
|
|
6445
6443
|
background: #8b2a2a;
|
|
@@ -6705,7 +6703,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6705
6703
|
font-size: 10px;
|
|
6706
6704
|
}
|
|
6707
6705
|
.twm-landing__pane--focused .twm-landing__pane-head {
|
|
6708
|
-
background:
|
|
6706
|
+
background: color-mix(in srgb, var(--accent-hover) 10%, transparent);
|
|
6709
6707
|
}
|
|
6710
6708
|
.twm-landing__pane--focused .twm-landing__pane-title {
|
|
6711
6709
|
color: var(--ea-accent);
|
|
@@ -6757,7 +6755,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6757
6755
|
so the same arrow-key affordance reads identically across modes. */
|
|
6758
6756
|
.twm-row-cursor {
|
|
6759
6757
|
box-shadow: inset 2px 0 0 var(--ea-accent);
|
|
6760
|
-
background:
|
|
6758
|
+
background: color-mix(in srgb, var(--accent-hover) 12%, transparent) !important;
|
|
6761
6759
|
}
|
|
6762
6760
|
/* Quick-action strip — horizontal bar below the tables. Same chrome
|
|
6763
6761
|
tone as `.twm-entity-header` so the page reads as a single stack:
|
|
@@ -6797,7 +6795,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6797
6795
|
}
|
|
6798
6796
|
.twm-action-btn:hover {
|
|
6799
6797
|
border-color: var(--ea-accent);
|
|
6800
|
-
background:
|
|
6798
|
+
background: color-mix(in srgb, var(--accent-hover) 8%, transparent);
|
|
6801
6799
|
}
|
|
6802
6800
|
.twm-action-btn:disabled,
|
|
6803
6801
|
.twm-action-btn[aria-disabled="true"] {
|
|
@@ -13606,9 +13604,9 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13606
13604
|
display: none !important;
|
|
13607
13605
|
}
|
|
13608
13606
|
.twm-flow-lanes {
|
|
13609
|
-
--twm-lanes-wire:
|
|
13607
|
+
--twm-lanes-wire: var(--accent-light);
|
|
13610
13608
|
--twm-lanes-surface: #1b1b1c;
|
|
13611
|
-
--twm-lanes-ring:
|
|
13609
|
+
--twm-lanes-ring: var(--accent-bright-hover);
|
|
13612
13610
|
display: flex;
|
|
13613
13611
|
flex-direction: column;
|
|
13614
13612
|
box-sizing: border-box;
|
|
@@ -13731,7 +13729,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13731
13729
|
border-left: 1px solid var(--surface-3);
|
|
13732
13730
|
}
|
|
13733
13731
|
.twm-flow-lanes__show-btn[aria-pressed="true"] {
|
|
13734
|
-
background:
|
|
13732
|
+
background: var(--accent-pressed);
|
|
13735
13733
|
color: var(--text-bright);
|
|
13736
13734
|
}
|
|
13737
13735
|
.twm-flow-lanes__show-btn:focus-visible,
|
|
@@ -13974,7 +13972,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13974
13972
|
.twm-flow-lanes__node--selected .twm-flow-lanes__card,
|
|
13975
13973
|
.twm-flow-lanes__card:focus-visible {
|
|
13976
13974
|
filter: drop-shadow(0 0 1px var(--twm-lanes-ring)) drop-shadow(0 0 1px var(--twm-lanes-ring))
|
|
13977
|
-
drop-shadow(0 0 5px
|
|
13975
|
+
drop-shadow(0 0 5px color-mix(in srgb, var(--twm-lanes-ring) 80%, transparent));
|
|
13978
13976
|
}
|
|
13979
13977
|
.twm-flow-lanes__card:hover .twm-flow-lanes__body {
|
|
13980
13978
|
filter: brightness(1.12);
|
|
@@ -14297,7 +14295,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14297
14295
|
}
|
|
14298
14296
|
.twm-flow-lanes__cell--new,
|
|
14299
14297
|
.twm-flow-lanes__cell--changed {
|
|
14300
|
-
background:
|
|
14298
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 7%, transparent);
|
|
14301
14299
|
}
|
|
14302
14300
|
.twm-flow-lanes__error {
|
|
14303
14301
|
flex: 0 0 auto;
|
|
@@ -14331,7 +14329,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14331
14329
|
}
|
|
14332
14330
|
.twm-flow-lanes__column--new,
|
|
14333
14331
|
.twm-flow-lanes__column--changed {
|
|
14334
|
-
background:
|
|
14332
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 14%, transparent);
|
|
14335
14333
|
}
|
|
14336
14334
|
.twm-flow-lanes__column-name {
|
|
14337
14335
|
font-family: var(--font-family-mono);
|
|
@@ -14344,7 +14342,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14344
14342
|
}
|
|
14345
14343
|
.twm-flow-lanes__column--new .twm-flow-lanes__column-type,
|
|
14346
14344
|
.twm-flow-lanes__column--changed .twm-flow-lanes__column-type {
|
|
14347
|
-
color:
|
|
14345
|
+
color: var(--accent-lightest);
|
|
14348
14346
|
}
|
|
14349
14347
|
.twm-flow-lanes__column-origin {
|
|
14350
14348
|
margin-left: auto;
|
package/css/overrides.css
CHANGED
|
@@ -130,8 +130,8 @@
|
|
|
130
130
|
color: var(--text-bright);
|
|
131
131
|
}
|
|
132
132
|
.twm-btn--primary:hover:not(:disabled) {
|
|
133
|
-
background:
|
|
134
|
-
border-color:
|
|
133
|
+
background: var(--accent-bright-hover);
|
|
134
|
+
border-color: var(--accent-bright-hover);
|
|
135
135
|
}
|
|
136
136
|
/* Context menu separator (matches Ecosim's .twm-context-menu look). */
|
|
137
137
|
.twm-context-menu__separator {
|
|
@@ -481,8 +481,8 @@
|
|
|
481
481
|
font-weight: 600;
|
|
482
482
|
}
|
|
483
483
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--primary:hover:not(:disabled) {
|
|
484
|
-
background:
|
|
485
|
-
border-color:
|
|
484
|
+
background: var(--accent-bright-hover);
|
|
485
|
+
border-color: var(--accent-bright-hover);
|
|
486
486
|
}
|
|
487
487
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--danger {
|
|
488
488
|
background: #8b2a2a;
|
|
@@ -748,7 +748,7 @@
|
|
|
748
748
|
font-size: 10px;
|
|
749
749
|
}
|
|
750
750
|
.twm-landing__pane--focused .twm-landing__pane-head {
|
|
751
|
-
background:
|
|
751
|
+
background: color-mix(in srgb, var(--accent-hover) 10%, transparent);
|
|
752
752
|
}
|
|
753
753
|
.twm-landing__pane--focused .twm-landing__pane-title {
|
|
754
754
|
color: var(--ea-accent);
|
|
@@ -800,7 +800,7 @@
|
|
|
800
800
|
so the same arrow-key affordance reads identically across modes. */
|
|
801
801
|
.twm-row-cursor {
|
|
802
802
|
box-shadow: inset 2px 0 0 var(--ea-accent);
|
|
803
|
-
background:
|
|
803
|
+
background: color-mix(in srgb, var(--accent-hover) 12%, transparent) !important;
|
|
804
804
|
}
|
|
805
805
|
/* Quick-action strip — horizontal bar below the tables. Same chrome
|
|
806
806
|
tone as `.twm-entity-header` so the page reads as a single stack:
|
|
@@ -840,7 +840,7 @@
|
|
|
840
840
|
}
|
|
841
841
|
.twm-action-btn:hover {
|
|
842
842
|
border-color: var(--ea-accent);
|
|
843
|
-
background:
|
|
843
|
+
background: color-mix(in srgb, var(--accent-hover) 8%, transparent);
|
|
844
844
|
}
|
|
845
845
|
.twm-action-btn:disabled,
|
|
846
846
|
.twm-action-btn[aria-disabled="true"] {
|
package/css/tokens.css
CHANGED
|
@@ -96,6 +96,11 @@
|
|
|
96
96
|
sortable list's drop line and add button, a focused filter input. */
|
|
97
97
|
--accent-light: color-mix(in srgb, var(--accent-bright) 70%, white); /* ≈ #4da2db, was #569cd6 */
|
|
98
98
|
--accent-lighter: color-mix(in srgb, var(--accent-bright) 55%, white); /* ≈ #73b6e3, was #6eb3e9 */
|
|
99
|
+
/* BUG-0045: the other accent shades. A primary button's hover, the window
|
|
100
|
+
bar's hovered item; a pressed accent control; the lightest accent text. */
|
|
101
|
+
--accent-bright-hover: color-mix(in srgb, var(--accent-bright) 90%, white); /* ≈ #1987d1, was #1486cf / #1683c4 */
|
|
102
|
+
--accent-pressed: color-mix(in srgb, var(--accent-hover) 90%, black); /* ≈ #0f6ba8, was #1a6aa5 / #0f6fa8 */
|
|
103
|
+
--accent-lightest: color-mix(in srgb, var(--accent-bright) 36%, white); /* ≈ #a3cfed, was #9ecfff / #9fd0f0 */
|
|
99
104
|
|
|
100
105
|
/* ── Semantic colors ───────────────────────────────────────── */
|
|
101
106
|
--color-success: #3fb950;
|
package/dist/flexdesk.css
CHANGED
|
@@ -2999,11 +2999,11 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2999
2999
|
color: var(--text-bright);
|
|
3000
3000
|
}
|
|
3001
3001
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active {
|
|
3002
|
-
color:
|
|
3003
|
-
background:
|
|
3002
|
+
color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
3003
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 15%, transparent);
|
|
3004
3004
|
}
|
|
3005
3005
|
.twm-plot-window-toolbar .twm-btn-icon.twm-is-active:hover {
|
|
3006
|
-
background:
|
|
3006
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 25%, transparent);
|
|
3007
3007
|
}
|
|
3008
3008
|
.twm-plot-window-content {
|
|
3009
3009
|
flex: 1;
|
|
@@ -3074,7 +3074,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3074
3074
|
background: rgba(255, 255, 255, 0.02);
|
|
3075
3075
|
}
|
|
3076
3076
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table tbody tr:hover {
|
|
3077
|
-
background:
|
|
3077
|
+
background: color-mix(in srgb, color-mix(in srgb, var(--accent-bright) 80%, white) 10%, transparent);
|
|
3078
3078
|
}
|
|
3079
3079
|
.twm-plot-window-container .twm-plot-tab-content .twm-preview-table td {
|
|
3080
3080
|
color: #aaa;
|
|
@@ -3147,7 +3147,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3147
3147
|
background: rgba(255, 255, 255, 0.05);
|
|
3148
3148
|
}
|
|
3149
3149
|
.twm-plot-series-toggle-panel__item input[type="checkbox"] {
|
|
3150
|
-
accent-color:
|
|
3150
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3151
3151
|
flex-shrink: 0;
|
|
3152
3152
|
}
|
|
3153
3153
|
.twm-plot-series-toggle-panel__line-indicator {
|
|
@@ -3256,7 +3256,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3256
3256
|
outline: none;
|
|
3257
3257
|
}
|
|
3258
3258
|
.twm-data-series-plot-config select:focus {
|
|
3259
|
-
border-color:
|
|
3259
|
+
border-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3260
3260
|
}
|
|
3261
3261
|
.twm-data-series-plot-config__columns {
|
|
3262
3262
|
max-height: 200px;
|
|
@@ -3298,7 +3298,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3298
3298
|
border-radius: 1px;
|
|
3299
3299
|
}
|
|
3300
3300
|
.twm-data-series-plot-config input[type="checkbox"] {
|
|
3301
|
-
accent-color:
|
|
3301
|
+
accent-color: color-mix(in srgb, var(--accent-bright) 87%, white);
|
|
3302
3302
|
flex-shrink: 0;
|
|
3303
3303
|
}
|
|
3304
3304
|
/* Computing Status Window */
|
|
@@ -3315,7 +3315,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3315
3315
|
width: 32px;
|
|
3316
3316
|
height: 32px;
|
|
3317
3317
|
border: 3px solid #333;
|
|
3318
|
-
border-top-color:
|
|
3318
|
+
border-top-color: color-mix(in srgb, var(--accent-bright) 80%, white);
|
|
3319
3319
|
border-radius: 50%;
|
|
3320
3320
|
animation: computing-spin 0.8s linear infinite;
|
|
3321
3321
|
}
|
|
@@ -3808,22 +3808,21 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3808
3808
|
}
|
|
3809
3809
|
|
|
3810
3810
|
/* Selected — set by `_onConfigClick()` while the config dialog is open, and
|
|
3811
|
-
cleared from every sibling by the same handler.
|
|
3812
|
-
`--accent-bright` is
|
|
3813
|
-
|
|
3814
|
-
`--accent-lighter`
|
|
3815
|
-
the colour. */
|
|
3811
|
+
cleared from every sibling by the same handler. It reads `--accent-lighter`
|
|
3812
|
+
(BUG-0045): `--accent-bright` is a border colour on this background and not
|
|
3813
|
+
a text one. It was #78b9ff, which no mix of `--accent-bright` with white
|
|
3814
|
+
gives exactly; `--accent-lighter` (about #73b6e3) is the nearest. */
|
|
3816
3815
|
.tile.tile--selected {
|
|
3817
|
-
border-color:
|
|
3818
|
-
box-shadow: 0 0 0 2px
|
|
3816
|
+
border-color: var(--accent-lighter);
|
|
3817
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-lighter) 30%, transparent), var(--shadow-md);
|
|
3819
3818
|
}
|
|
3820
3819
|
|
|
3821
3820
|
.tile.tile--selected .tile-header {
|
|
3822
|
-
background:
|
|
3821
|
+
background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
|
|
3823
3822
|
}
|
|
3824
3823
|
|
|
3825
3824
|
.tile.tile--selected .tile-title {
|
|
3826
|
-
color:
|
|
3825
|
+
color: var(--accent-lighter);
|
|
3827
3826
|
}
|
|
3828
3827
|
|
|
3829
3828
|
/* Read-only. `_buildChrome()`'s read-only branch emits no drag handle, no
|
|
@@ -3926,7 +3925,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3926
3925
|
.tile-menu-btn:hover,
|
|
3927
3926
|
.tile-expand-btn:hover {
|
|
3928
3927
|
background: var(--state-hover);
|
|
3929
|
-
color:
|
|
3928
|
+
color: var(--accent-lighter);
|
|
3930
3929
|
}
|
|
3931
3930
|
|
|
3932
3931
|
.tile-remove-btn:hover {
|
|
@@ -4014,7 +4013,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4014
4013
|
}
|
|
4015
4014
|
|
|
4016
4015
|
.tile-menu-item:hover .material-symbols-outlined {
|
|
4017
|
-
color:
|
|
4016
|
+
color: var(--accent-lighter);
|
|
4018
4017
|
}
|
|
4019
4018
|
|
|
4020
4019
|
/* ── the content area ────────────────────────────────────────────────── */
|
|
@@ -4528,12 +4527,12 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4528
4527
|
}
|
|
4529
4528
|
.twm-action-dropdown-option .twm-option-icon {
|
|
4530
4529
|
font-size: 20px;
|
|
4531
|
-
color:
|
|
4530
|
+
color: var(--accent-lighter);
|
|
4532
4531
|
flex-shrink: 0;
|
|
4533
4532
|
}
|
|
4534
4533
|
.twm-action-dropdown-option:hover .twm-option-icon,
|
|
4535
4534
|
.twm-action-dropdown-option:focus .twm-option-icon {
|
|
4536
|
-
color:
|
|
4535
|
+
color: var(--accent-lightest);
|
|
4537
4536
|
}
|
|
4538
4537
|
.twm-action-dropdown-option .twm-option-label {
|
|
4539
4538
|
font-weight: 500;
|
|
@@ -4692,7 +4691,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4692
4691
|
position: absolute;
|
|
4693
4692
|
z-index: 5999;
|
|
4694
4693
|
pointer-events: none;
|
|
4695
|
-
background:
|
|
4694
|
+
background: color-mix(in srgb, var(--accent-hover) 18%, transparent);
|
|
4696
4695
|
border: 1px solid var(--accent-bright);
|
|
4697
4696
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
4698
4697
|
transition: left 0.09s ease, top 0.09s ease, width 0.09s ease, height 0.09s ease;
|
|
@@ -4986,12 +4985,11 @@ button.twm-managed-window__btn svg rect {
|
|
|
4986
4985
|
transition: background-color 0.1s, color 0.1s;
|
|
4987
4986
|
}
|
|
4988
4987
|
.twm-bar-windows__item:hover {
|
|
4989
|
-
|
|
4990
|
-
background: #268bd2;
|
|
4988
|
+
background: var(--accent-bright-hover);
|
|
4991
4989
|
color: var(--text-bright);
|
|
4992
4990
|
}
|
|
4993
4991
|
.twm-bar-windows__item:active {
|
|
4994
|
-
background:
|
|
4992
|
+
background: var(--accent-pressed);
|
|
4995
4993
|
}
|
|
4996
4994
|
/* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
4997
4995
|
.twm-bar-windows__item-icon,
|
|
@@ -5597,7 +5595,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5597
5595
|
font-size: var(--font-size-sm);
|
|
5598
5596
|
}
|
|
5599
5597
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
5600
|
-
border-color:
|
|
5598
|
+
border-color: var(--accent-lighter);
|
|
5601
5599
|
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
5602
5600
|
}
|
|
5603
5601
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
@@ -5915,8 +5913,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5915
5913
|
color: var(--text-bright);
|
|
5916
5914
|
}
|
|
5917
5915
|
.twm-btn--primary:hover:not(:disabled) {
|
|
5918
|
-
background:
|
|
5919
|
-
border-color:
|
|
5916
|
+
background: var(--accent-bright-hover);
|
|
5917
|
+
border-color: var(--accent-bright-hover);
|
|
5920
5918
|
}
|
|
5921
5919
|
/* Context menu separator (matches Ecosim's .twm-context-menu look). */
|
|
5922
5920
|
.twm-context-menu__separator {
|
|
@@ -6438,8 +6436,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6438
6436
|
font-weight: 600;
|
|
6439
6437
|
}
|
|
6440
6438
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--primary:hover:not(:disabled) {
|
|
6441
|
-
background:
|
|
6442
|
-
border-color:
|
|
6439
|
+
background: var(--accent-bright-hover);
|
|
6440
|
+
border-color: var(--accent-bright-hover);
|
|
6443
6441
|
}
|
|
6444
6442
|
.twm-managed-window--modal .twm-modal__actions .twm-btn--danger {
|
|
6445
6443
|
background: #8b2a2a;
|
|
@@ -6705,7 +6703,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6705
6703
|
font-size: 10px;
|
|
6706
6704
|
}
|
|
6707
6705
|
.twm-landing__pane--focused .twm-landing__pane-head {
|
|
6708
|
-
background:
|
|
6706
|
+
background: color-mix(in srgb, var(--accent-hover) 10%, transparent);
|
|
6709
6707
|
}
|
|
6710
6708
|
.twm-landing__pane--focused .twm-landing__pane-title {
|
|
6711
6709
|
color: var(--ea-accent);
|
|
@@ -6757,7 +6755,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6757
6755
|
so the same arrow-key affordance reads identically across modes. */
|
|
6758
6756
|
.twm-row-cursor {
|
|
6759
6757
|
box-shadow: inset 2px 0 0 var(--ea-accent);
|
|
6760
|
-
background:
|
|
6758
|
+
background: color-mix(in srgb, var(--accent-hover) 12%, transparent) !important;
|
|
6761
6759
|
}
|
|
6762
6760
|
/* Quick-action strip — horizontal bar below the tables. Same chrome
|
|
6763
6761
|
tone as `.twm-entity-header` so the page reads as a single stack:
|
|
@@ -6797,7 +6795,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6797
6795
|
}
|
|
6798
6796
|
.twm-action-btn:hover {
|
|
6799
6797
|
border-color: var(--ea-accent);
|
|
6800
|
-
background:
|
|
6798
|
+
background: color-mix(in srgb, var(--accent-hover) 8%, transparent);
|
|
6801
6799
|
}
|
|
6802
6800
|
.twm-action-btn:disabled,
|
|
6803
6801
|
.twm-action-btn[aria-disabled="true"] {
|
|
@@ -13606,9 +13604,9 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13606
13604
|
display: none !important;
|
|
13607
13605
|
}
|
|
13608
13606
|
.twm-flow-lanes {
|
|
13609
|
-
--twm-lanes-wire:
|
|
13607
|
+
--twm-lanes-wire: var(--accent-light);
|
|
13610
13608
|
--twm-lanes-surface: #1b1b1c;
|
|
13611
|
-
--twm-lanes-ring:
|
|
13609
|
+
--twm-lanes-ring: var(--accent-bright-hover);
|
|
13612
13610
|
display: flex;
|
|
13613
13611
|
flex-direction: column;
|
|
13614
13612
|
box-sizing: border-box;
|
|
@@ -13731,7 +13729,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13731
13729
|
border-left: 1px solid var(--surface-3);
|
|
13732
13730
|
}
|
|
13733
13731
|
.twm-flow-lanes__show-btn[aria-pressed="true"] {
|
|
13734
|
-
background:
|
|
13732
|
+
background: var(--accent-pressed);
|
|
13735
13733
|
color: var(--text-bright);
|
|
13736
13734
|
}
|
|
13737
13735
|
.twm-flow-lanes__show-btn:focus-visible,
|
|
@@ -13974,7 +13972,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
13974
13972
|
.twm-flow-lanes__node--selected .twm-flow-lanes__card,
|
|
13975
13973
|
.twm-flow-lanes__card:focus-visible {
|
|
13976
13974
|
filter: drop-shadow(0 0 1px var(--twm-lanes-ring)) drop-shadow(0 0 1px var(--twm-lanes-ring))
|
|
13977
|
-
drop-shadow(0 0 5px
|
|
13975
|
+
drop-shadow(0 0 5px color-mix(in srgb, var(--twm-lanes-ring) 80%, transparent));
|
|
13978
13976
|
}
|
|
13979
13977
|
.twm-flow-lanes__card:hover .twm-flow-lanes__body {
|
|
13980
13978
|
filter: brightness(1.12);
|
|
@@ -14297,7 +14295,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14297
14295
|
}
|
|
14298
14296
|
.twm-flow-lanes__cell--new,
|
|
14299
14297
|
.twm-flow-lanes__cell--changed {
|
|
14300
|
-
background:
|
|
14298
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 7%, transparent);
|
|
14301
14299
|
}
|
|
14302
14300
|
.twm-flow-lanes__error {
|
|
14303
14301
|
flex: 0 0 auto;
|
|
@@ -14331,7 +14329,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14331
14329
|
}
|
|
14332
14330
|
.twm-flow-lanes__column--new,
|
|
14333
14331
|
.twm-flow-lanes__column--changed {
|
|
14334
|
-
background:
|
|
14332
|
+
background: color-mix(in srgb, var(--twm-lanes-ring) 14%, transparent);
|
|
14335
14333
|
}
|
|
14336
14334
|
.twm-flow-lanes__column-name {
|
|
14337
14335
|
font-family: var(--font-family-mono);
|
|
@@ -14344,7 +14342,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
14344
14342
|
}
|
|
14345
14343
|
.twm-flow-lanes__column--new .twm-flow-lanes__column-type,
|
|
14346
14344
|
.twm-flow-lanes__column--changed .twm-flow-lanes__column-type {
|
|
14347
|
-
color:
|
|
14345
|
+
color: var(--accent-lightest);
|
|
14348
14346
|
}
|
|
14349
14347
|
.twm-flow-lanes__column-origin {
|
|
14350
14348
|
margin-left: auto;
|
package/dist/tokens.css
CHANGED
|
@@ -96,6 +96,11 @@
|
|
|
96
96
|
sortable list's drop line and add button, a focused filter input. */
|
|
97
97
|
--accent-light: color-mix(in srgb, var(--accent-bright) 70%, white); /* ≈ #4da2db, was #569cd6 */
|
|
98
98
|
--accent-lighter: color-mix(in srgb, var(--accent-bright) 55%, white); /* ≈ #73b6e3, was #6eb3e9 */
|
|
99
|
+
/* BUG-0045: the other accent shades. A primary button's hover, the window
|
|
100
|
+
bar's hovered item; a pressed accent control; the lightest accent text. */
|
|
101
|
+
--accent-bright-hover: color-mix(in srgb, var(--accent-bright) 90%, white); /* ≈ #1987d1, was #1486cf / #1683c4 */
|
|
102
|
+
--accent-pressed: color-mix(in srgb, var(--accent-hover) 90%, black); /* ≈ #0f6ba8, was #1a6aa5 / #0f6fa8 */
|
|
103
|
+
--accent-lightest: color-mix(in srgb, var(--accent-bright) 36%, white); /* ≈ #a3cfed, was #9ecfff / #9fd0f0 */
|
|
99
104
|
|
|
100
105
|
/* ── Semantic colors ───────────────────────────────────────── */
|
|
101
106
|
--color-success: #3fb950;
|
package/docs/concepts/styling.md
CHANGED
|
@@ -105,11 +105,77 @@ What changed in the stylesheet:
|
|
|
105
105
|
`flexdesk.css` now needs `tokens.css` (or your own definitions of these tokens).
|
|
106
106
|
|
|
107
107
|
Not part of the accent, and still literals: the autocomplete's type colours
|
|
108
|
-
(`stock` is `#569cd6` beside `#4ec9b0`, `#ce9178`, …), the
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
(`stock` is `#569cd6` beside `#4ec9b0`, `#ce9178`, …), the DataTable header
|
|
109
|
+
icons' type colours (`flow` is `#268bd2` beside `#6c71c4`, `#cb4b16`,
|
|
110
|
+
`#859900`), the notification border `#4fc1ff`, links (`#3794ff`, the about
|
|
111
|
+
dialog's link hover `#4da6ff`, and the breadcrumb and plot-series links), and the flow kit's categorical colours
|
|
112
|
+
(`--twm-flow-blue-*` beside `--twm-flow-indigo-*`, …). The (0.17.11) section
|
|
113
|
+
lists the rest.
|
|
114
|
+
|
|
115
|
+
0.17.10 left the accent blues in other shades as literals: the selected tile
|
|
113
116
|
(`#78b9ff`), the primary button's hover (`#1683c4`, `#1486cf`), the row
|
|
114
117
|
cursor and snap preview (`rgba(17, 119, 179, a)`), and some flow-lanes and
|
|
115
|
-
plot-window colours.
|
|
118
|
+
plot-window colours. 0.17.11 derives them too (next section).
|
|
119
|
+
|
|
120
|
+
## Retheming the accent shades (0.17.11)
|
|
121
|
+
|
|
122
|
+
The accent blues that 0.17.10 left as literals, in shades no mix of an
|
|
123
|
+
accent token gives exactly, are now derived from the accent tokens too, so
|
|
124
|
+
setting `--accent`, `--accent-hover` and `--accent-bright` on `:root`
|
|
125
|
+
rethemes the primary buttons' hover, the selected tile, the row cursor, the
|
|
126
|
+
window bar, the plot window, the spinner and the flow lanes as well.
|
|
127
|
+
`--accent` and `--accent-bright` stay two tokens.
|
|
128
|
+
|
|
129
|
+
Three tokens are new in `tokens.css`, each read by more than one rule:
|
|
130
|
+
|
|
131
|
+
- `--accent-bright-hover`: `color-mix(in srgb, var(--accent-bright) 90%, white)`,
|
|
132
|
+
about `#1987d1`. A primary button's hover (the modal's too) and the window
|
|
133
|
+
bar's hovered item.
|
|
134
|
+
- `--accent-pressed`: `color-mix(in srgb, var(--accent-hover) 90%, black)`,
|
|
135
|
+
about `#0f6ba8`. The window bar's pressed item and the flow lanes' pressed
|
|
136
|
+
show button.
|
|
137
|
+
- `--accent-lightest`: `color-mix(in srgb, var(--accent-bright) 36%, white)`,
|
|
138
|
+
about `#a3cfed`. The lightest accent text, after `--accent-light` and
|
|
139
|
+
`--accent-lighter`.
|
|
140
|
+
|
|
141
|
+
They are defined from the accent tokens in `tokens.css`. If you supply your
|
|
142
|
+
own token definitions instead of `tokens.css`, define these three as well:
|
|
143
|
+
the rules that read them have no fallback.
|
|
144
|
+
|
|
145
|
+
None of the old colours is an exact mix, so each moves to the nearest one,
|
|
146
|
+
by the ΔE (OKLab × 100) below. A tint's ΔE is measured over `--surface-0`
|
|
147
|
+
(`#1e1e1e`), where it is seen, and every colour is rounded to 8 bits per
|
|
148
|
+
channel first.
|
|
149
|
+
|
|
150
|
+
| Where | Was | Now reads | Default now | ΔE |
|
|
151
|
+
|---|---|---|---|---|
|
|
152
|
+
| `.twm-btn--primary:hover` | `#1486cf` | `--accent-bright-hover` | `#1987d1` | 0.4 |
|
|
153
|
+
| the modal's primary button hover | `#1683c4` | `--accent-bright-hover` | `#1987d1` | 2.2 |
|
|
154
|
+
| `.twm-bar-windows__item:hover` | `#268bd2` | `--accent-bright-hover` | `#1987d1` | 1.3 |
|
|
155
|
+
| `.twm-bar-windows__item:active` | `#1a6aa5` | `--accent-pressed` | `#0f6ba8` | 0.6 |
|
|
156
|
+
| the plot series and plot config checkboxes (`accent-color`), the plot config select's focus border | `#268bd2` | `color-mix(in srgb, var(--accent-bright) 87%, white)` | `#218bd3` | 0.3 |
|
|
157
|
+
| the plot window toolbar's active button, the computing spinner | `#4a90d9` | `color-mix(in srgb, var(--accent-bright) 80%, white)` | `#3395d6` | 2.1 |
|
|
158
|
+
| the active button's tint and hover tint, the plot table's hovered row | `rgba(74, 144, 217, 0.15 \| 0.25 \| 0.1)` | that 80% mix at the same alpha | | 0.6, 0.9, 0.5 |
|
|
159
|
+
| the selected tile's border and title, the tile header buttons' and tile menu's hover icons, the action dropdown's icons | `#78b9ff` | `--accent-lighter` | `#73b6e3` | 4.1 |
|
|
160
|
+
| the selected tile's ring and header tint | `rgba(120, 185, 255, 0.3 \| 0.1)` | `--accent-lighter` at the same alpha | | 1.6, 0.6 |
|
|
161
|
+
| the action dropdown's hovered or focused icon | `#9ecfff` | `--accent-lightest` | `#a3cfed` | 2.6 |
|
|
162
|
+
| the notebook autocomplete's focused border | `#79b8f8` | `--accent-lighter` | `#73b6e3` | 3.2 |
|
|
163
|
+
| `.twm-row-cursor`, the focused landing pane's head, `.twm-action-btn:hover` | `rgba(17, 119, 179, 0.12 \| 0.10 \| 0.08)` | `--accent-hover` at the same alpha | | 0.2, 0.2, 0.2 |
|
|
164
|
+
| `.twm-snap-preview` | `rgba(23, 119, 179, 0.18)` | `--accent-hover` at 18% | | 0.2 |
|
|
165
|
+
| the flow lanes' wire, `--twm-lanes-wire` | `#5b9bd5` | `--accent-light` | `#4da2db` | 2.0 |
|
|
166
|
+
| the flow lanes' ring, `--twm-lanes-ring` | `#1683c4` | `--accent-bright-hover` | `#1987d1` | 2.2 |
|
|
167
|
+
| the flow lanes' pressed show button | `#0f6fa8` | `--accent-pressed` | `#0f6ba8` | 1.2 |
|
|
168
|
+
| the selected card's glow, a new or changed cell and column | `rgba(22, 131, 196, 0.8 \| 0.07 \| 0.14)` | `--twm-lanes-ring` at the same alpha | | 1.7, 0.3, 0.4 |
|
|
169
|
+
| a new or changed column's type | `#9fd0f0` | `--accent-lightest` | `#a3cfed` | 0.6 |
|
|
170
|
+
|
|
171
|
+
The largest shift is the selected tile's light blue: `#78b9ff` is bluer
|
|
172
|
+
than any mix of `#007acc` with white, and `--accent-lighter` is the nearest.
|
|
173
|
+
`--twm-lanes-wire` and `--twm-lanes-ring` are set on `.twm-flow-lanes` and
|
|
174
|
+
read `--accent-light` and `--accent-bright-hover`, so they follow the accent
|
|
175
|
+
set on `:root` and can still be set per lanes view.
|
|
176
|
+
|
|
177
|
+
Still literals, because they are not the accent: the colours listed in the
|
|
178
|
+
(0.17.10) section above, the charts' series palette (`#268bd2` first in
|
|
179
|
+
`COLOR_PALETTE`, `#1f77b4` as the colour pickers' default), and the Monaco
|
|
180
|
+
editor theme's selection colours, which Monaco takes as hex values and not
|
|
181
|
+
as CSS.
|