flexdesk 0.17.9 → 0.17.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/flexdesk.css CHANGED
@@ -734,7 +734,7 @@ body.twm-dt-col-resizing {
734
734
  second keeps the readonly tables, which hover never claimed, working. */
735
735
  .twm-preview-table:not(.twm-preview-table--readonly) tbody tr.selected td,
736
736
  .twm-preview-table tbody tr.selected td {
737
- background: var(--state-selected, rgba(0, 122, 204, 0.15));
737
+ background: var(--state-selected);
738
738
  }
739
739
  /* ── 0.5.0 DataTable options. Each rule below matches only a class or an
740
740
  * attribute a 0.5.0 option sets, so a table that asks for none of them is
@@ -785,7 +785,7 @@ body.twm-dt-col-resizing {
785
785
  /* `activeRow` — the row that is OPEN. A left edge, not a background: hover
786
786
  * and selection keep theirs. */
787
787
  .twm-preview-table tbody tr.twm-dt-row--active > td:first-child {
788
- box-shadow: inset 2px 0 0 0 var(--accent-bright, #007acc);
788
+ box-shadow: inset 2px 0 0 0 var(--accent-bright);
789
789
  }
790
790
  /* STORY-0016 `selectToggle` / `selectMode` — the select column. Narrow, never
791
791
  * the time column (it is the first child, so the time rules reach it: (0,3,2)
@@ -853,17 +853,17 @@ body.twm-dt-col-resizing {
853
853
  }
854
854
  .twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle:focus-visible {
855
855
  opacity: 1;
856
- outline: 1px solid var(--accent-bright, #007acc);
856
+ outline: 1px solid var(--accent-bright);
857
857
  }
858
858
  /* STORY-0003 `selectionMode: 'cells'` — the range is a tint on its cells, the
859
859
  * cursor a ring inside its cell (inset, so it moves no column by a pixel). A
860
860
  * cell being edited gives its padding to the editor; a commit still out is
861
861
  * dimmed, and a refused one carries a red ring and its message as the title. */
862
862
  .twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--selected {
863
- background: var(--state-selected, rgba(0, 122, 204, 0.15));
863
+ background: var(--state-selected);
864
864
  }
865
865
  .twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--cursor {
866
- box-shadow: inset 0 0 0 2px var(--accent-bright, #007acc);
866
+ box-shadow: inset 0 0 0 2px var(--accent-bright);
867
867
  }
868
868
  .twm-preview-table.twm-dt--cells:focus {
869
869
  outline: none;
@@ -878,7 +878,7 @@ body.twm-dt-col-resizing {
878
878
  margin: 0;
879
879
  padding: 2px 6px;
880
880
  border: 0;
881
- outline: 2px solid var(--accent-bright, #007acc);
881
+ outline: 2px solid var(--accent-bright);
882
882
  outline-offset: -2px;
883
883
  background: var(--surface-well, #1e1e1e);
884
884
  color: inherit;
@@ -905,7 +905,7 @@ body.twm-dt-col-resizing {
905
905
  }
906
906
  /* STORY-0088 `staged`: a value typed and not yet committed. */
907
907
  .twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--staged {
908
- background: color-mix(in srgb, var(--accent-bright, #007acc) 16%, transparent);
908
+ background: color-mix(in srgb, var(--accent-bright) 16%, transparent);
909
909
  }
910
910
  /* STORY-0089 `fillHandle`: a square on the range's corner cell, the cells a
911
911
  * drag covers dashed, and a cell the fill skipped (not editable) hatched. */
@@ -919,14 +919,14 @@ body.twm-dt-col-resizing {
919
919
  width: 7px;
920
920
  height: 7px;
921
921
  box-sizing: border-box;
922
- background: var(--accent-bright, #007acc);
922
+ background: var(--accent-bright);
923
923
  border: 1px solid var(--surface-well, #1e1e1e);
924
924
  cursor: crosshair;
925
925
  z-index: 1;
926
926
  touch-action: none;
927
927
  }
928
928
  .twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--fill-preview {
929
- outline: 1px dashed var(--accent-bright, #007acc);
929
+ outline: 1px dashed var(--accent-bright);
930
930
  outline-offset: -1px;
931
931
  }
932
932
  .twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--fill-skipped {
@@ -963,10 +963,10 @@ body.twm-dt-col-resizing {
963
963
  opacity: 0.5;
964
964
  }
965
965
  .twm-preview-table th.twm-dt-col--drop {
966
- box-shadow: inset 2px 0 0 0 var(--accent-bright, #007acc);
966
+ box-shadow: inset 2px 0 0 0 var(--accent-bright);
967
967
  }
968
968
  .twm-preview-table th.twm-dt-col--drop.twm-dt-col--drop-after {
969
- box-shadow: inset -2px 0 0 0 var(--accent-bright, #007acc);
969
+ box-shadow: inset -2px 0 0 0 var(--accent-bright);
970
970
  }
971
971
  /* STORY-0066 `columnGroups` — the group row is a table of its own above the
972
972
  * header table (`twm-dt-groups`), its `<col>`s copied from the header's widths;
@@ -1029,7 +1029,7 @@ body.twm-dt-col-resizing {
1029
1029
  .twm-preview-table .twm-dt-group__action:focus-visible,
1030
1030
  .twm-preview-table .twm-dt-col-action:focus-visible {
1031
1031
  opacity: 1;
1032
- outline: 1px solid var(--accent-bright, #007acc);
1032
+ outline: 1px solid var(--accent-bright);
1033
1033
  }
1034
1034
  .twm-preview-table th.twm-dt-col--placeholder,
1035
1035
  .twm-preview-table td.twm-dt-cell--placeholder {
@@ -1095,16 +1095,16 @@ body.twm-dt-col-resizing {
1095
1095
  }
1096
1096
  .twm-preview-table.twm-dt-crosstab:not(.twm-preview-table--readonly) tbody tr.selected td.twm-dt-pin,
1097
1097
  .twm-preview-table.twm-dt-crosstab tbody tr.selected td.twm-dt-pin {
1098
- --twm-dt-pin-state: linear-gradient(var(--state-selected, rgba(0, 122, 204, 0.15)), var(--state-selected, rgba(0, 122, 204, 0.15)));
1098
+ --twm-dt-pin-state: linear-gradient(var(--state-selected), var(--state-selected));
1099
1099
  }
1100
1100
  .twm-preview-table.twm-dt-crosstab.twm-dt--clickable tbody tr:not(.twm-dt-spacer):not(.data-table__empty-row):not(.selected):hover td.twm-dt-pin {
1101
1101
  --twm-dt-pin-state: linear-gradient(var(--state-hover, rgba(255, 255, 255, 0.05)), var(--state-hover, rgba(255, 255, 255, 0.05)));
1102
1102
  }
1103
1103
  .twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--selected {
1104
- --twm-dt-pin-state: linear-gradient(var(--state-selected, rgba(0, 122, 204, 0.15)), var(--state-selected, rgba(0, 122, 204, 0.15)));
1104
+ --twm-dt-pin-state: linear-gradient(var(--state-selected), var(--state-selected));
1105
1105
  }
1106
1106
  .twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--staged {
1107
- --twm-dt-pin-state: linear-gradient(color-mix(in srgb, var(--accent-bright, #007acc) 16%, transparent), color-mix(in srgb, var(--accent-bright, #007acc) 16%, transparent));
1107
+ --twm-dt-pin-state: linear-gradient(color-mix(in srgb, var(--accent-bright) 16%, transparent), color-mix(in srgb, var(--accent-bright) 16%, transparent));
1108
1108
  }
1109
1109
  .twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--fill-skipped {
1110
1110
  --twm-dt-pin-mark: repeating-linear-gradient(45deg,
@@ -1135,7 +1135,7 @@ body.twm-dt-col-resizing {
1135
1135
  --twm-dt-pin-state: linear-gradient(rgba(255,255,255,0.04), rgba(255,255,255,0.04));
1136
1136
  }
1137
1137
  @keyframes twm-dt-pin-new {
1138
- from { --twm-dt-pin-new: var(--twm-dt-new-bg, rgba(0, 122, 204, 0.22)); }
1138
+ from { --twm-dt-pin-new: var(--twm-dt-new-bg); }
1139
1139
  to { --twm-dt-pin-new: transparent; }
1140
1140
  }
1141
1141
  .twm-preview-table.twm-dt-crosstab tbody tr.twm-dt-row--new > td.twm-dt-pin {
@@ -1151,7 +1151,7 @@ body.twm-dt-col-resizing {
1151
1151
  cursor: pointer;
1152
1152
  }
1153
1153
  .twm-preview-table.twm-dt--selecting tbody tr.twm-dt-row--cursor > td {
1154
- box-shadow: inset 0 1px 0 0 var(--accent-bright, #007acc), inset 0 -1px 0 0 var(--accent-bright, #007acc);
1154
+ box-shadow: inset 0 1px 0 0 var(--accent-bright), inset 0 -1px 0 0 var(--accent-bright);
1155
1155
  }
1156
1156
  /* `rowIcon` — drawn from `data-twm-icon` so the icon's NAME is not cell
1157
1157
  * text (not in a copy, not in the clipped-cell tooltip). The span carries the
@@ -1298,7 +1298,7 @@ body.twm-dt-col-resizing {
1298
1298
  }
1299
1299
  .twm-preview-table td .twm-dt-detail-toggle:focus-visible {
1300
1300
  opacity: 1;
1301
- outline: 1px solid var(--accent-bright, #007acc);
1301
+ outline: 1px solid var(--accent-bright);
1302
1302
  }
1303
1303
  /* The detail's row: one cell across every column. It is often the body's
1304
1304
  * FIRST cell of its row, so the time column's rules reach it (see the note
@@ -1331,7 +1331,7 @@ body.twm-dt-col-resizing {
1331
1331
  }
1332
1332
  /* `follow` / `refresh()` — a row the last answer did not have, for a moment. */
1333
1333
  @keyframes twm-dt-row-new {
1334
- from { background: var(--twm-dt-new-bg, rgba(0, 122, 204, 0.22)); }
1334
+ from { background: var(--twm-dt-new-bg); }
1335
1335
  to { background: transparent; }
1336
1336
  }
1337
1337
  .twm-preview-table tbody tr.twm-dt-row--new > td {
@@ -1375,11 +1375,11 @@ body.twm-dt-col-resizing {
1375
1375
  background: rgba(255, 255, 255, 0.06);
1376
1376
  }
1377
1377
  .twm-dt-filter-chip:focus-visible {
1378
- outline: 1px solid var(--accent-bright, #007acc);
1378
+ outline: 1px solid var(--accent-bright);
1379
1379
  }
1380
1380
  .twm-dt-filter-chip.twm-dt-filter-chip--on {
1381
- border-color: var(--accent-bright, #007acc);
1382
- background: rgba(0, 122, 204, 0.18);
1381
+ border-color: var(--accent-bright);
1382
+ background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
1383
1383
  color: #ddd;
1384
1384
  }
1385
1385
  .twm-dt-filter-chip.twm-dt-filter-chip--empty {
@@ -1449,14 +1449,14 @@ body.twm-dt-col-resizing {
1449
1449
  width: 16px;
1450
1450
  height: 16px;
1451
1451
  border-radius: 50%;
1452
- background: #569cd6;
1452
+ background: var(--accent-light);
1453
1453
  margin-top: -5px;
1454
1454
  cursor: grab;
1455
1455
  border: 2px solid var(--surface-0);
1456
1456
  }
1457
1457
  .twm-slider-field__input::-webkit-slider-thumb:active {
1458
1458
  cursor: grabbing;
1459
- background: #6eb3e9;
1459
+ background: var(--accent-lighter);
1460
1460
  }
1461
1461
  .twm-slider-field__input::-moz-range-track {
1462
1462
  height: 6px;
@@ -1468,7 +1468,7 @@ body.twm-dt-col-resizing {
1468
1468
  width: 16px;
1469
1469
  height: 16px;
1470
1470
  border-radius: 50%;
1471
- background: #569cd6;
1471
+ background: var(--accent-light);
1472
1472
  cursor: grab;
1473
1473
  border: 2px solid var(--surface-0);
1474
1474
  }
@@ -1591,7 +1591,7 @@ body.twm-dt-col-resizing {
1591
1591
  .twm-sortable-list__drop {
1592
1592
  height: 2px;
1593
1593
  margin: 1px 0;
1594
- background: #569cd6;
1594
+ background: var(--accent-light);
1595
1595
  pointer-events: none;
1596
1596
  }
1597
1597
  .twm-sortable-list__content {
@@ -1638,12 +1638,12 @@ body.twm-dt-col-resizing {
1638
1638
  margin-top: var(--space-md);
1639
1639
  }
1640
1640
  .twm-sortable-list__add:hover {
1641
- border-color: #569cd6;
1642
- color: #569cd6;
1643
- background: rgba(86, 156, 214, 0.12);
1641
+ border-color: var(--accent-light);
1642
+ color: var(--accent-light);
1643
+ background: color-mix(in srgb, var(--accent-light) 12%, transparent);
1644
1644
  }
1645
1645
  .twm-sortable-list__add:active {
1646
- background: rgba(86, 156, 214, 0.2);
1646
+ background: color-mix(in srgb, var(--accent-light) 20%, transparent);
1647
1647
  }
1648
1648
  .twm-sortable-list__empty {
1649
1649
  padding: var(--space-xl);
@@ -1668,7 +1668,7 @@ body.twm-dt-col-resizing {
1668
1668
  }
1669
1669
  .twm-sortable-list__input:focus {
1670
1670
  outline: none;
1671
- border-color: #569cd6;
1671
+ border-color: var(--accent-light);
1672
1672
  }
1673
1673
  /* Global Top Bar (fixed at top) */
1674
1674
  .twm-global-top-bar {
@@ -2142,19 +2142,19 @@ body.twm-dt-col-resizing {
2142
2142
  padding: var(--space-xxs) 8px;
2143
2143
  font-size: var(--font-size-xs);
2144
2144
  color: #c7f1ff;
2145
- background: rgba(0, 122, 204, 0.18);
2146
- border: 1px solid rgba(0, 122, 204, 0.35);
2145
+ background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
2146
+ border: 1px solid color-mix(in srgb, var(--accent-bright) 35%, transparent);
2147
2147
  border-radius: var(--radius-pill);
2148
2148
  white-space: nowrap;
2149
2149
  text-transform: none;
2150
2150
  cursor: default;
2151
- box-shadow: inset 0 0 0 1px rgba(0, 122, 204, 0.15);
2151
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent-bright) 15%, transparent);
2152
2152
  }
2153
2153
  .twm-autocomplete-field__namespace--toggle {
2154
2154
  cursor: pointer;
2155
- background: linear-gradient(90deg, rgba(0, 122, 204, 0.24) 0%, rgba(0, 122, 204, 0.12) 100%);
2155
+ background: linear-gradient(90deg, color-mix(in srgb, var(--accent-bright) 24%, transparent) 0%, color-mix(in srgb, var(--accent-bright) 12%, transparent) 100%);
2156
2156
  transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
2157
- border: 1px solid rgba(0, 122, 204, 0.5);
2157
+ border: 1px solid color-mix(in srgb, var(--accent-bright) 50%, transparent);
2158
2158
  color: #e7f5ff;
2159
2159
  outline: none;
2160
2160
  }
@@ -2197,8 +2197,8 @@ body.twm-dt-col-resizing {
2197
2197
  is the keyboard's, and it is deliberately the stronger of the two so that
2198
2198
  moving the pointer across the list does not hide where the cursor is. */
2199
2199
  .twm-autocomplete-field__item.active {
2200
- background-color: var(--state-selected, rgba(0, 122, 204, 0.15));
2201
- box-shadow: inset 2px 0 0 var(--accent-bright, #007acc);
2200
+ background-color: var(--state-selected);
2201
+ box-shadow: inset 2px 0 0 var(--accent-bright);
2202
2202
  }
2203
2203
  .twm-autocomplete-field__item {
2204
2204
  display: flex;
@@ -2588,7 +2588,7 @@ body.twm-window-maximized .twm-resize-handle {
2588
2588
  box-sizing: border-box;
2589
2589
  }
2590
2590
  .twm-data-table__filter-input:focus {
2591
- border-color: #569cd6;
2591
+ border-color: var(--accent-light);
2592
2592
  background: #252525;
2593
2593
  }
2594
2594
  .twm-data-table__filter-input::placeholder {
@@ -2649,7 +2649,7 @@ body.twm-window-maximized .twm-resize-handle {
2649
2649
  }
2650
2650
  .twm-data-table__filter-dropdown-select:focus,
2651
2651
  .twm-data-table__filter-dropdown-input:focus {
2652
- border-color: #569cd6;
2652
+ border-color: var(--accent-light);
2653
2653
  }
2654
2654
  .twm-data-table__filter-dropdown-select {
2655
2655
  appearance: auto;
@@ -3748,14 +3748,14 @@ body.twm-window-maximized .twm-resize-handle {
3748
3748
  /* Add Widget is the toolbar's one primary verb, so it is the one that carries
3749
3749
  the accent. */
3750
3750
  .add-widget-btn {
3751
- background: rgba(0, 122, 204, 0.15);
3752
- border-color: rgba(0, 122, 204, 0.3);
3751
+ background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
3752
+ border-color: color-mix(in srgb, var(--accent-bright) 30%, transparent);
3753
3753
  color: var(--text-bright);
3754
3754
  }
3755
3755
 
3756
3756
  .add-widget-btn:hover {
3757
- background: rgba(0, 122, 204, 0.25);
3758
- border-color: rgba(0, 122, 204, 0.5);
3757
+ background: color-mix(in srgb, var(--accent-bright) 25%, transparent);
3758
+ border-color: color-mix(in srgb, var(--accent-bright) 50%, transparent);
3759
3759
  }
3760
3760
 
3761
3761
  /* The other two are secondary — Export is an aside and Reset Layout throws the
@@ -3804,13 +3804,15 @@ body.twm-window-maximized .twm-resize-handle {
3804
3804
  .tile.resizing {
3805
3805
  z-index: var(--z-dropdown);
3806
3806
  border-color: var(--accent-bright);
3807
- box-shadow: 0 0 0 2px rgba(0, 122, 204, 0.3);
3807
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-bright) 30%, transparent);
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
- because there is no light-accent token: `--accent-bright` is #007acc, which
3813
- is a border colour on this background and not a text one. */
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. */
3814
3816
  .tile.tile--selected {
3815
3817
  border-color: #78b9ff;
3816
3818
  box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
@@ -4081,8 +4083,8 @@ body.twm-window-maximized .twm-resize-handle {
4081
4083
  /* The drop preview, positioned by `_updateGhost()` in grid coordinates. */
4082
4084
  .tile-ghost {
4083
4085
  position: absolute;
4084
- background: rgba(0, 122, 204, 0.15);
4085
- border: 2px dashed rgba(0, 122, 204, 0.5);
4086
+ background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
4087
+ border: 2px dashed color-mix(in srgb, var(--accent-bright) 50%, transparent);
4086
4088
  border-radius: var(--radius-sm);
4087
4089
  pointer-events: none;
4088
4090
  z-index: 50;
@@ -5591,12 +5593,12 @@ button.twm-about-dialog__btn--close:focus {
5591
5593
  /* ─── Autocomplete field — notebook variant ──────────────── */
5592
5594
 
5593
5595
  .twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper {
5594
- border: 1px solid #569cd6;
5596
+ border: 1px solid var(--accent-light);
5595
5597
  font-size: var(--font-size-sm);
5596
5598
  }
5597
5599
  .twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
5598
5600
  border-color: #79b8f8;
5599
- box-shadow: 0 0 3px rgba(86, 156, 214, 0.3);
5601
+ box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
5600
5602
  }
5601
5603
  .twm-autocomplete-field--notebook .twm-autocomplete-field__input {
5602
5604
  font-family: 'Courier New', Courier, monospace;
@@ -6299,7 +6301,7 @@ button.twm-about-dialog__btn--close:focus {
6299
6301
  }
6300
6302
  .twm-color-field__preset:hover,
6301
6303
  .twm-color-field__preset:focus-visible {
6302
- outline: 1px solid var(--ea-accent, #569cd6);
6304
+ outline: 1px solid var(--ea-accent);
6303
6305
  outline-offset: 1px;
6304
6306
  }
6305
6307
  /* Colour list: a SortableList whose rows are a colour field + move buttons. */
@@ -6325,7 +6327,7 @@ button.twm-about-dialog__btn--close:focus {
6325
6327
  cursor: pointer;
6326
6328
  }
6327
6329
  .twm-color-list__move:hover:not(:disabled) {
6328
- color: var(--ea-accent, #569cd6);
6330
+ color: var(--ea-accent);
6329
6331
  }
6330
6332
  .twm-color-list__move:disabled {
6331
6333
  opacity: 0.3;
@@ -6736,7 +6738,7 @@ button.twm-about-dialog__btn--close:focus {
6736
6738
  }
6737
6739
  .twm-entity-header__field select:focus {
6738
6740
  outline: none;
6739
- border-color: var(--ea-accent, #5aa3e8);
6741
+ border-color: var(--ea-accent);
6740
6742
  }
6741
6743
  .twm-entity-header__field select option { background: var(--ea-input-bg, #1e1e1e); color: var(--ea-text, #ddd); }
6742
6744
  .twm-landing__table table {
@@ -6980,7 +6982,7 @@ body.twm-dragging * { user-select: none; }
6980
6982
  }
6981
6983
  .twm-leaf--focused {
6982
6984
  border-color: var(--accent-bright);
6983
- box-shadow: 0 0 0 1px rgba(0, 122, 204, 0.25) inset;
6985
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent-bright) 25%, transparent) inset;
6984
6986
  }
6985
6987
  .twm-leaf__chrome {
6986
6988
  display: flex;
@@ -7190,15 +7192,15 @@ body.twm-dragging * { user-select: none; }
7190
7192
  * border, because a border changes the box and every tile in the row would
7191
7193
  * reflow by a pixel as the pointer crossed between them. */
7192
7194
  .twm-leaf--drop-target {
7193
- outline: 2px solid var(--accent-bright, #1683c4);
7195
+ outline: 2px solid var(--accent-bright);
7194
7196
  outline-offset: -2px;
7195
7197
  }
7196
7198
 
7197
7199
  /* A STRIP ARMED TO RECEIVE — the drop that adds the tab at the end of this
7198
7200
  * tile's list rather than into a zone of its body. */
7199
7201
  .twm-leaf__tabbar--drop-target {
7200
- background: color-mix(in srgb, var(--accent-bright, #1683c4) 18%, transparent);
7201
- box-shadow: inset 0 0 0 1px var(--accent-bright, #1683c4);
7202
+ background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
7203
+ box-shadow: inset 0 0 0 1px var(--accent-bright);
7202
7204
  }
7203
7205
 
7204
7206
  /* THE TAB BEING CARRIED. `DragReorder` has put `.dragging` on the TOP strip's
@@ -7279,7 +7281,7 @@ body.twm-dragging * { user-select: none; }
7279
7281
  position: absolute;
7280
7282
  inset: 0;
7281
7283
  pointer-events: none;
7282
- border-top: 1px solid var(--accent-bright, #1683c4);
7284
+ border-top: 1px solid var(--accent-bright);
7283
7285
  clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
7284
7286
  }
7285
7287
  /* Lower-casing removed here too — a tab label is the same embedder-supplied
@@ -7492,7 +7494,7 @@ body.twm-dragging * { user-select: none; }
7492
7494
  inset: 0 0 auto 0;
7493
7495
  height: 2px;
7494
7496
  pointer-events: none;
7495
- background: var(--accent-bright, #1683c4);
7497
+ background: var(--accent-bright);
7496
7498
  }
7497
7499
  /* A PREVIEW tab — opened by a single click and replaced by the next one.
7498
7500
  * Italic is the convention every editor uses for "this one is not staying". */
@@ -7544,7 +7546,7 @@ body.twm-dragging * { user-select: none; }
7544
7546
  flex: 0 0 auto;
7545
7547
  font-size: 9px;
7546
7548
  line-height: 1;
7547
- color: var(--accent-bright, #1683c4);
7549
+ color: var(--accent-bright);
7548
7550
  }
7549
7551
  .notebook-tabs .twm-tab-close {
7550
7552
  flex: 0 0 auto;
@@ -7582,7 +7584,7 @@ body.twm-dragging * { user-select: none; }
7582
7584
  flex: 0 0 auto;
7583
7585
  align-self: stretch;
7584
7586
  width: 2px;
7585
- background: var(--accent-bright, #1683c4);
7587
+ background: var(--accent-bright);
7586
7588
  pointer-events: none;
7587
7589
  }
7588
7590
 
@@ -7604,8 +7606,8 @@ body.twm-dragging * { user-select: none; }
7604
7606
  * mean "let go here and this list takes it" should look like one thing. */
7605
7607
  .notebook-tabs--drop-target,
7606
7608
  .notebook-editor-container--drop-target {
7607
- background: color-mix(in srgb, var(--accent-bright, #1683c4) 18%, transparent);
7608
- box-shadow: inset 0 0 0 1px var(--accent-bright, #1683c4);
7609
+ background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
7610
+ box-shadow: inset 0 0 0 1px var(--accent-bright);
7609
7611
  }
7610
7612
  /* ── The tab bar's own context menu ──────────────────────────────────
7611
7613
  * Reached only by a consumer that lets the component open it — the tile
@@ -7743,7 +7745,7 @@ body.twm-dragging * { user-select: none; }
7743
7745
  }
7744
7746
  .split-pane-divider:hover,
7745
7747
  .split-pane-divider--active {
7746
- background: var(--accent-bright, #1683c4);
7748
+ background: var(--accent-bright);
7747
7749
  }
7748
7750
  /* A pane is its tab bar over its body. The tab bar's own rule says
7749
7751
  * `height: 100%` (it fills a tile's strip); here it is a fixed 26px row, the
@@ -7766,7 +7768,7 @@ body.twm-dragging * { user-select: none; }
7766
7768
  * `setPanes()`, which is why `SplitPaneContainer` ADDS `.split-pane` to a
7767
7769
  * pane instead of replacing its classes with it. */
7768
7770
  .split-pane-container--split .editor-pane--focused > .tabs.notebook-tabs {
7769
- box-shadow: inset 0 -1px 0 var(--accent-bright, #1683c4);
7771
+ box-shadow: inset 0 -1px 0 var(--accent-bright);
7770
7772
  }
7771
7773
  /* The body is the positioning anchor; the editor container fills it
7772
7774
  * absolutely, so its height is the body's whatever its content is and the
@@ -7829,7 +7831,7 @@ body.twm-dragging * { user-select: none; }
7829
7831
  font: inherit;
7830
7832
  outline: none;
7831
7833
  }
7832
- .nb-search-bar__input:focus { border-color: var(--accent-bright, #1683c4); }
7834
+ .nb-search-bar__input:focus { border-color: var(--accent-bright); }
7833
7835
  .nb-search-bar__match-info {
7834
7836
  min-width: 64px;
7835
7837
  color: var(--text-muted);
@@ -7862,7 +7864,7 @@ body.twm-dragging * { user-select: none; }
7862
7864
  .nb-search-bar__btn--active,
7863
7865
  .nb-search-bar__btn--active:hover {
7864
7866
  background: var(--state-selected);
7865
- border-color: var(--accent-bright, #1683c4);
7867
+ border-color: var(--accent-bright);
7866
7868
  color: var(--text-bright);
7867
7869
  }
7868
7870
  /* Two classes, for the Material Symbols tie — see `.twm-leaf__icon`. */
@@ -8002,7 +8004,7 @@ body.twm-dragging * { user-select: none; }
8002
8004
  .twm-tile-tabmenu__item--cursor {
8003
8005
  /* Keyboard cursor reads slightly heavier than hover so a
8004
8006
  * mouse-cursor-on-a-different-row state is still legible. */
8005
- outline: 1px solid var(--accent-bright, #1683c4);
8007
+ outline: 1px solid var(--accent-bright);
8006
8008
  outline-offset: -1px;
8007
8009
  }
8008
8010
  .twm-tile-tabmenu__item-hint {
@@ -8091,13 +8093,13 @@ body.twm-dragging * { user-select: none; }
8091
8093
  color: var(--text-bright);
8092
8094
  }
8093
8095
  .twm-tile-tabswitch__item--cursor {
8094
- outline: 1px solid var(--accent-bright, #1683c4);
8096
+ outline: 1px solid var(--accent-bright);
8095
8097
  outline-offset: -1px;
8096
8098
  }
8097
8099
  .twm-tile-tabswitch__item--on { color: var(--text-bright); }
8098
8100
  /* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
8099
8101
  .twm-tile-tabswitch__check,
8100
- .twm-tile-tabswitch__check.material-symbols-outlined { font-size: 14px; color: var(--accent-bright, #1683c4); }
8102
+ .twm-tile-tabswitch__check.material-symbols-outlined { font-size: 14px; color: var(--accent-bright); }
8101
8103
  .twm-tile-tabswitch__label {
8102
8104
  overflow: hidden;
8103
8105
  text-overflow: ellipsis;
@@ -8149,8 +8151,8 @@ body.twm-dragging * { user-select: none; }
8149
8151
  align-items: center;
8150
8152
  gap: var(--space-xs);
8151
8153
  padding: 2px 4px 2px 8px;
8152
- background: var(--state-selected, rgba(17, 119, 179, 0.18));
8153
- border: 1px solid var(--accent-bright, #1683c4);
8154
+ background: var(--state-selected);
8155
+ border: 1px solid var(--accent-bright);
8154
8156
  border-radius: 2px;
8155
8157
  color: var(--text-bright, #fff);
8156
8158
  font-size: var(--font-size-xs);
@@ -8809,7 +8811,7 @@ tr:hover .twm-row-action { opacity: 1; }
8809
8811
  }
8810
8812
  .twm-data-table-component--compact .twm-pagination-controls .twm-pagination-btn:hover:not(:disabled) {
8811
8813
  color: var(--ea-text, #ddd) !important;
8812
- border-color: var(--ea-accent, #1177b3) !important;
8814
+ border-color: var(--ea-accent) !important;
8813
8815
  }
8814
8816
  /* Text labels inside the pager — the "Rows X–Y of Z" and "Page X of
8815
8817
  * Y" spans don't have classes (just inline style), so target every
@@ -8838,7 +8840,7 @@ tr:hover .twm-row-action { opacity: 1; }
8838
8840
  width: 28px;
8839
8841
  height: 28px;
8840
8842
  border: 2px solid rgba(255, 255, 255, 0.18);
8841
- border-top-color: var(--ea-accent, #1177b3);
8843
+ border-top-color: var(--ea-accent);
8842
8844
  border-radius: 50%;
8843
8845
  animation: data-table__spin 0.7s linear infinite;
8844
8846
  }
@@ -9015,7 +9017,7 @@ tr:hover .twm-row-action { opacity: 1; }
9015
9017
  width: 18px;
9016
9018
  height: 18px;
9017
9019
  border: 2px solid var(--ea-border, #333);
9018
- border-top-color: var(--accent, #4a90e2);
9020
+ border-top-color: var(--accent);
9019
9021
  border-radius: 50%;
9020
9022
  animation: twm-tile-loading-spin 0.7s linear infinite;
9021
9023
  }
@@ -9239,7 +9241,7 @@ tr:hover .twm-row-action { opacity: 1; }
9239
9241
  cursor: pointer;
9240
9242
  }
9241
9243
  .twm-tabs__tab:hover { background: var(--surface-2); color: var(--text-primary); }
9242
- .twm-tabs__tab:focus-visible { outline: 1px solid var(--accent-bright, #1683c4); outline-offset: -1px; }
9244
+ .twm-tabs__tab:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
9243
9245
  .twm-tabs__tab--on { background: var(--surface-0); color: var(--text-bright); }
9244
9246
  .twm-tabs__tab--on::before {
9245
9247
  content: '';
@@ -9247,7 +9249,7 @@ tr:hover .twm-row-action { opacity: 1; }
9247
9249
  inset: 0 0 auto 0;
9248
9250
  height: 2px;
9249
9251
  pointer-events: none;
9250
- background: var(--accent-bright, #1683c4);
9252
+ background: var(--accent-bright);
9251
9253
  }
9252
9254
  .twm-tabs__label { overflow: hidden; text-overflow: ellipsis; }
9253
9255
  /* Two classes: Google's `.material-symbols-outlined { font-size: 24px }` loads
@@ -9782,12 +9784,12 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
9782
9784
  .twm-record--state-error { box-shadow: inset 2px 0 0 0 var(--color-danger, #c74e4e); }
9783
9785
  /* `activeKey` — the record that is OPEN: the accent on the left edge, as
9784
9786
  * DataTable's `twm-dt-row--active`. It wins over a state's edge. */
9785
- .twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright, #007acc); }
9787
+ .twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright); }
9786
9788
  .twm-record-list--clickable .twm-record { cursor: pointer; }
9787
9789
  .twm-record-list--clickable .twm-record:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); }
9788
9790
  .twm-record:focus { outline: none; }
9789
9791
  .twm-record:focus-visible {
9790
- outline: 1px solid var(--accent-bright, #007acc);
9792
+ outline: 1px solid var(--accent-bright);
9791
9793
  outline-offset: -1px;
9792
9794
  }
9793
9795
  .twm-record-list__empty {
@@ -10713,7 +10715,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
10713
10715
  cursor: pointer;
10714
10716
  }
10715
10717
  .twm-doc-outline__link:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); color: var(--text-primary, #e0e0e0); }
10716
- .twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright, #007acc); outline-offset: -1px; }
10718
+ .twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
10717
10719
  .twm-doc-outline__item--level-1 > .twm-doc-outline__link { color: var(--text-primary, #e0e0e0); }
10718
10720
  .twm-doc-outline__number {
10719
10721
  flex: 0 0 auto;
@@ -10728,8 +10730,8 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
10728
10730
  white-space: nowrap;
10729
10731
  }
10730
10732
  .twm-doc-outline__item.twm-doc-outline__item--active > .twm-doc-outline__link {
10731
- border-left-color: var(--accent-bright, #007acc);
10732
- background: rgba(0, 122, 204, 0.15);
10733
+ border-left-color: var(--accent-bright);
10734
+ background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
10733
10735
  color: var(--text-primary, #e0e0e0);
10734
10736
  }
10735
10737
  /* Listed, but nothing in the document answers to it. */
@@ -10757,7 +10759,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
10757
10759
  border-radius: var(--radius-sm, 4px);
10758
10760
  cursor: text;
10759
10761
  }
10760
- .twm-tag-input:focus-within { border-color: var(--accent-bright, #007acc); }
10762
+ .twm-tag-input:focus-within { border-color: var(--accent-bright); }
10761
10763
  .twm-tag-input--readonly {
10762
10764
  background: transparent;
10763
10765
  border-color: transparent;
@@ -12282,7 +12284,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
12282
12284
  position: absolute;
12283
12285
  pointer-events: none;
12284
12286
  border: 1px solid var(--accent-bright);
12285
- background: rgba(0, 122, 204, 0.12);
12287
+ background: color-mix(in srgb, var(--accent-bright) 12%, transparent);
12286
12288
  }
12287
12289
  .twm-canvas__marquee[hidden] { display: none; }
12288
12290
 
@@ -12775,7 +12777,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
12775
12777
  .twm-flow-graph__port--data .twm-flow-graph__port-dot { border-color: #8a8f98; border-radius: 2px; }
12776
12778
  .twm-flow-graph--connecting .twm-flow-graph__port--in:not(:disabled) .twm-flow-graph__port-dot {
12777
12779
  background: var(--twm-flow-focus);
12778
- box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.35);
12780
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
12779
12781
  }
12780
12782
  .twm-flow-graph__port--taken .twm-flow-graph__port-dot { border-color: var(--twm-flow-ok); background: var(--twm-flow-ok); }
12781
12783
  .twm-flow-graph__port--taken .twm-flow-graph__port-count { color: var(--twm-flow-ok); }
@@ -12787,7 +12789,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
12787
12789
  }
12788
12790
  .twm-flow-graph__port--can-drop .twm-flow-graph__port-dot {
12789
12791
  background: var(--twm-flow-focus);
12790
- box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.35);
12792
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
12791
12793
  }
12792
12794
 
12793
12795
  /* ── a line ─────────────────────────────────────────────────────────── */
package/dist/tokens.css CHANGED
@@ -90,6 +90,13 @@
90
90
  --accent-hover: #1177bb;
91
91
  --accent-bright: #007acc; /* --layout-accent value */
92
92
 
93
+ /* Every other accent colour is DERIVED from the three above, so a
94
+ consumer that sets them (on :root) rethemes the whole accent (BUG-0044).
95
+ The light accents mix --accent-bright toward white: a slider thumb, a
96
+ sortable list's drop line and add button, a focused filter input. */
97
+ --accent-light: color-mix(in srgb, var(--accent-bright) 70%, white); /* ≈ #4da2db, was #569cd6 */
98
+ --accent-lighter: color-mix(in srgb, var(--accent-bright) 55%, white); /* ≈ #73b6e3, was #6eb3e9 */
99
+
93
100
  /* ── Semantic colors ───────────────────────────────────────── */
94
101
  --color-success: #3fb950;
95
102
  --color-warning: #ff9800;
@@ -100,7 +107,9 @@
100
107
  /* ── Surface state overlays ────────────────────────────────── */
101
108
  --state-hover: rgba(255, 255, 255, 0.05);
102
109
  --state-active: rgba(255, 255, 255, 0.08);
103
- --state-selected: rgba(0, 122, 204, 0.15);
110
+ --state-selected: color-mix(in srgb, var(--accent-bright) 15%, transparent); /* rgba(0, 122, 204, 0.15) */
111
+ /* A DataTable row or cell that has just arrived flashes from this to transparent. */
112
+ --twm-dt-new-bg: color-mix(in srgb, var(--accent-bright) 22%, transparent); /* rgba(0, 122, 204, 0.22) */
104
113
 
105
114
  /* ── Overlay scrollbars (installOverlayScrollbar) ─────────── */
106
115
  --scrollbar-size: 6px;
@@ -114,7 +123,7 @@
114
123
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
115
124
  --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
116
125
  --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
117
- --shadow-glow: 0 0 2px rgba(0, 122, 204, 0.3);
126
+ --shadow-glow: 0 0 2px color-mix(in srgb, var(--accent-bright) 30%, transparent); /* rgba(0, 122, 204, 0.3) */
118
127
 
119
128
  /* ── Z-index layers ───────────────────────────────────────── */
120
129
  --z-base: 0;