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 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: #4A90D9;
2478
- background: rgba(74, 144, 217, 0.15);
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: rgba(74, 144, 217, 0.25);
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: rgba(74, 144, 217, 0.1);
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: #268bd2;
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: #268bd2;
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: #268bd2;
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: #4a90d9;
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. #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. */
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: #78b9ff;
3293
- box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
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: rgba(120, 185, 255, 0.1);
3296
+ background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
3298
3297
  }
3299
3298
 
3300
3299
  .tile.tile--selected .tile-title {
3301
- color: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #9ecfff;
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
- /* Solarized blue */
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: #1a6aa5;
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: #79b8f8;
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: rgba(23, 119, 179, 0.18);
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: #5b9bd5;
9345
+ --twm-lanes-wire: var(--accent-light);
9348
9346
  --twm-lanes-surface: #1b1b1c;
9349
- --twm-lanes-ring: #1683c4;
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: #0f6fa8;
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 rgba(22, 131, 196, 0.8));
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: rgba(22, 131, 196, 0.07);
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: rgba(22, 131, 196, 0.14);
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: #9fd0f0;
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: #4A90D9;
3003
- background: rgba(74, 144, 217, 0.15);
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: rgba(74, 144, 217, 0.25);
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: rgba(74, 144, 217, 0.1);
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: #268bd2;
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: #268bd2;
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: #268bd2;
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: #4a90d9;
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. #78b9ff is a literal:
3812
- `--accent-bright` is #007acc, which is a border colour on this background
3813
- and not a text one, and the derived light accents (`--accent-light`,
3814
- `--accent-lighter`) are less blue than this, so using them would change
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: #78b9ff;
3818
- box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
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: rgba(120, 185, 255, 0.1);
3821
+ background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
3823
3822
  }
3824
3823
 
3825
3824
  .tile.tile--selected .tile-title {
3826
- color: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #9ecfff;
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: rgba(23, 119, 179, 0.18);
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
- /* Solarized blue */
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: #1a6aa5;
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: #79b8f8;
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: #1486cf;
5919
- border-color: #1486cf;
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: #1683c4;
6442
- border-color: #1683c4;
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: rgba(17, 119, 179, 0.10);
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: rgba(17, 119, 179, 0.12) !important;
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: rgba(17, 119, 179, 0.08);
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: #5b9bd5;
13607
+ --twm-lanes-wire: var(--accent-light);
13610
13608
  --twm-lanes-surface: #1b1b1c;
13611
- --twm-lanes-ring: #1683c4;
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: #0f6fa8;
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 rgba(22, 131, 196, 0.8));
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: rgba(22, 131, 196, 0.07);
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: rgba(22, 131, 196, 0.14);
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: #9fd0f0;
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: #1486cf;
134
- border-color: #1486cf;
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: #1683c4;
485
- border-color: #1683c4;
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: rgba(17, 119, 179, 0.10);
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: rgba(17, 119, 179, 0.12) !important;
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: rgba(17, 119, 179, 0.08);
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: #4A90D9;
3003
- background: rgba(74, 144, 217, 0.15);
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: rgba(74, 144, 217, 0.25);
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: rgba(74, 144, 217, 0.1);
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: #268bd2;
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: #268bd2;
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: #268bd2;
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: #4a90d9;
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. #78b9ff is a literal:
3812
- `--accent-bright` is #007acc, which is a border colour on this background
3813
- and not a text one, and the derived light accents (`--accent-light`,
3814
- `--accent-lighter`) are less blue than this, so using them would change
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: #78b9ff;
3818
- box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
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: rgba(120, 185, 255, 0.1);
3821
+ background: color-mix(in srgb, var(--accent-lighter) 10%, transparent);
3823
3822
  }
3824
3823
 
3825
3824
  .tile.tile--selected .tile-title {
3826
- color: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #78b9ff;
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: #9ecfff;
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: rgba(23, 119, 179, 0.18);
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
- /* Solarized blue */
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: #1a6aa5;
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: #79b8f8;
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: #1486cf;
5919
- border-color: #1486cf;
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: #1683c4;
6442
- border-color: #1683c4;
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: rgba(17, 119, 179, 0.10);
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: rgba(17, 119, 179, 0.12) !important;
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: rgba(17, 119, 179, 0.08);
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: #5b9bd5;
13607
+ --twm-lanes-wire: var(--accent-light);
13610
13608
  --twm-lanes-surface: #1b1b1c;
13611
- --twm-lanes-ring: #1683c4;
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: #0f6fa8;
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 rgba(22, 131, 196, 0.8));
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: rgba(22, 131, 196, 0.07);
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: rgba(22, 131, 196, 0.14);
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: #9fd0f0;
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;
@@ -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 notification
109
- border `#4fc1ff`, and links (`#3794ff`).
110
-
111
- Some accent blues in other shades are still literals, because no mix of an
112
- accent token gives their colour exactly. They include the selected tile
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. To retheme them, override their rules.
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexdesk",
3
- "version": "0.17.10",
3
+ "version": "0.17.11",
4
4
  "description": "A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.",
5
5
  "license": "MIT",
6
6
  "repository": {