@nxgt/material 3.53.0 → 3.54.0

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/components/theme-tokens.css +19 -15
  3. package/dist/components/ui/overlays/dialog/dialog.css +2 -1
  4. package/dist/components/ui/overlays/popover/popover.css +3 -2
  5. package/dist/{components-DZPMvc1w.js → components-DFG2mgsM.js} +11222 -11215
  6. package/dist/components.js +1 -1
  7. package/dist/lib/components/ui/collections/data-grid/columns/row-meta.d.ts +2 -0
  8. package/dist/lib/components/ui/collections/data-grid/grid-meta.d.ts +10 -4
  9. package/dist/lib/components/ui/selection/switcher/partials/switcher-tooltip.d.ts +10 -2
  10. package/dist/main.js +1 -1
  11. package/dist/material.css +1 -1
  12. package/dist/styles.css +1 -0
  13. package/docs/components/navigation-and-layout.md +1 -1
  14. package/docs/components/selection-and-choice.md +1 -1
  15. package/docs/guides/data-grid.md +39 -2
  16. package/docs/guides/theming.md +8 -0
  17. package/docs/roadmap.md +3 -2
  18. package/docs/troubleshooting.md +15 -0
  19. package/lib/components/theme-tokens.css +19 -15
  20. package/lib/components/ui/overlays/dialog/dialog.css +2 -1
  21. package/lib/components/ui/overlays/popover/popover.css +3 -2
  22. package/lib/styles.css +1 -0
  23. package/lib/themes/ambre.css +8 -6
  24. package/lib/themes/ardoise.css +8 -6
  25. package/lib/themes/bleumono.css +8 -6
  26. package/lib/themes/bluemoon.css +8 -6
  27. package/lib/themes/corail.css +8 -6
  28. package/lib/themes/foret.css +8 -6
  29. package/lib/themes/lavande.css +8 -6
  30. package/lib/themes/menthe.css +8 -6
  31. package/lib/themes/ocean.css +8 -6
  32. package/lib/themes/pink.css +8 -6
  33. package/lib/themes/prune.css +8 -6
  34. package/lib/themes/sable.css +8 -6
  35. package/lib/themes/slate.css +8 -6
  36. package/lib/themes/teal.css +8 -6
  37. package/package.json +4 -4
package/dist/styles.css CHANGED
@@ -57,6 +57,7 @@
57
57
  --color-background-light: --alpha(var(--background) / 30%);
58
58
  --color-foreground: var(--foreground);
59
59
  --color-card: var(--card);
60
+ --color-card-edge: var(--card-edge);
60
61
  --color-card-foreground: var(--card-foreground);
61
62
  --color-popover: var(--popover);
62
63
  --color-popover-foreground: var(--popover-foreground);
@@ -7,7 +7,7 @@ documentation-site shell. Everything is imported from
7
7
 
8
8
  | | Component | What it does |
9
9
  | --- | --- | --- |
10
- | <img src="../previews/navigation-layout-appshell.webp" width="96" alt=""> | [ActivityLayout](#activitylayout) | App shell: sidebar, header, breadcrumbs, titled page; a route's `handle.title` is the page's `h1` in the app bar (it labels `main`; `usePageTitleFocus()` focuses it after a navigation), `handle.titleAfter` / `titleAfter` a node right after it, outside the `h1` (a record's `Switcher`), `headerContext` a small tenant line after it from md up, `breadcrumbRoot` a text root crumb or (`icon: true`) the home icon with its own target and name, `breadcrumb={false}` no trail, `context` the tenant line atop the phone's menu sheet; `menuOpen` / `onMenuOpenChange` control the phone's menu sheet, which closes itself on a followed link or any location change |
10
+ | <img src="../previews/navigation-layout-appshell.webp" width="96" alt=""> | [ActivityLayout](#activitylayout) | App shell: sidebar, header, breadcrumbs, titled page; a route's `handle.title` is the page's `h1` in the app bar (it labels `main`; `usePageTitleFocus()` focuses it after a navigation), `handle.titleAfter` / `titleAfter` a node right after it, outside the `h1` (a record's `Switcher`, or `<Switcher size="compact">` for an icon-only one), `headerContext` a small tenant line after it from md up, `breadcrumbRoot` a text root crumb or (`icon: true`) the home icon with its own target and name, `breadcrumb={false}` no trail, `context` the tenant line atop the phone's menu sheet; `menuOpen` / `onMenuOpenChange` control the phone's menu sheet, which closes itself on a followed link or any location change |
11
11
  | <img src="../previews/navigation-layout-accountmenu.webp" width="96" alt=""> | [AccountMenu](#accountmenu) | The app bar's avatar menu: the account, the app's links, Sign out |
12
12
  | <img src="../previews/navigation-layout-authcard.webp" width="96" alt=""> | [AuthCard](#authcard) | Signed-out page frame: one `main`, a centred card, its title the `h1` |
13
13
  | <img src="../previews/navigation-layout-sidebar.webp" width="96" alt=""> | [Sidebar](#sidebar) | Collapsible navigation sidebar |
@@ -28,7 +28,7 @@ value type each one writes. Everything is imported from
28
28
  | <img src="../previews/selection-choice-transferlist.webp" width="96" alt=""> | [TransferList](#transferlist) | Two-pane picker: search, counts, select-all, drag between panes |
29
29
  | <img src="../previews/selection-choice-sortablelist.webp" width="96" alt=""> | [SortableList](#sortablelist) | Reorderable list: drag or keyboard, announced |
30
30
  | <img src="../previews/selection-choice-treeselectfield.webp" width="96" alt=""> | [TreeSelectField](#treeselectfield) | Pick from a tree, single or multiple |
31
- | <img src="../previews/selection-choice-switcher.webp" width="96" alt=""> | [Switcher](#switcher) | Workspace, establishment or class switcher: menu, search, groups, links |
31
+ | <img src="../previews/selection-choice-switcher.webp" width="96" alt=""> | [Switcher](#switcher) | Workspace, establishment or class switcher: menu, search, groups, links; `size="compact"` an icon-only round trigger for the app bar's `titleAfter` slot |
32
32
 
33
33
  ## Select
34
34
 
@@ -44,12 +44,12 @@ Columns are DataTable's TanStack v9 column definitions. A column with no
44
44
  | `lockPosition` | `'start'` or `'end'`: the column keeps its edge when columns are reordered ([columns](#columns-resize-hide-and-reorder)) |
45
45
  | `editor` | `'text'`, `'number'`, `'select'`, `'date'`, `'checkbox'`, or your own component ([custom editor](#a-custom-editor)) |
46
46
  | `rowEditor(row)` | The built-in editor (`'text'`, `'number'`, `'select'`, `'date'`, `'checkbox'`) a row's cell has, for a column that mixes kinds ([one column, several kinds of row](#one-column-several-kinds-of-row)). It wins over `editor` |
47
- | `number` | `{ min, max, decimals }` for the number editor; `min`, `max` and `decimals` may be functions of the row. A value outside them, or with too many decimals, is an error: it is never rounded or clamped |
47
+ | `number` | `{ min, max, decimals }` for the number editor; `min`, `max` and `decimals` may be functions of the row. A value outside them, or with too many decimals, is an error: it is never rounded or clamped. A `decimals` given as a function of the row is also what the cell shows: exactly that many fraction digits (`2,50`), where a plain number shows up to that many |
48
48
  | `codes` | Symbolic values the number editor also takes ("abs", "exempt"), with the label each language shows and the aliases it accepts |
49
49
  | `options` | The select editor's `{ value, label }` list, or a function of the row returning it. The cell shows and copies the label; a typed or pasted text matches a label or a value, in any case and without accents |
50
50
  | `date` | `{ min, max }` as ISO dates (`'2026-09-01'`). The value is an ISO date, shown and read in the page's locale |
51
51
  | `parse(text, ctx)` | Text to value, replacing the editor's own: `{ value }` or `{ error }`. `ctx` has `lang`, `locale` and `row`. `{ value: null }` clears the cell, whatever the column's value type |
52
- | `format(value, ctx)` | Value to text, shown in the cell and in the editor |
52
+ | `format(value, ctx)` | Value to text, shown in the cell and in the editor. `ctx` has `lang`, `locale` and, for a cell, its `row`, optional because a total has none: guard it (`ctx.row?.scale ?? 0`) |
53
53
  | `validate(value, row)` | A message (a string) flags the cell in error; nothing means valid |
54
54
  | `schema` | Any Standard Schema (zod, valibot, ArkType), run after `validate`. An asynchronous one that has not answered after the grid's `checkTimeout` (10 s by default) flags the cell "Check timed out" ([below](#checks-that-never-answer)) |
55
55
  | `value(row, cell)` | A computed column: never editable, it follows the unsaved edits. `cell(columnId)` reads what any column's cell shows |
@@ -115,6 +115,43 @@ the same instant, and `null` with `undefined`. Any other object equals only
115
115
  itself, so a `parse` that builds a new object on every call reads as a change
116
116
  each time. Return primitives or `Date`s, or keep the object's identity.
117
117
 
118
+ ### A cell that renders a component
119
+
120
+ A column's `cell` is the TanStack renderer and returns any node: a `Badge`, a
121
+ chip, an icon with a word. It draws the cells of a **read-only column** (no
122
+ `meta.editor`) and of a **computed column** (`meta.value`), where `getValue()`
123
+ is the computed value and follows the unsaved edits. The cell stays read-only
124
+ and is never an editor.
125
+
126
+ ```tsx
127
+ import { Badge } from '@nxgt/material/components';
128
+
129
+ type Result = { id: string; value: number; high: number };
130
+
131
+ const helper = createColumnHelper<DataTableFeatures, Result>();
132
+
133
+ // `meta.value` makes the column computed; `cell` draws what it returns.
134
+ helper.accessor((row) => (row.value > row.high ? 'high' : 'normal'), {
135
+ id: 'interpretation',
136
+ header: 'Interpretation',
137
+ meta: { value: (row) => (row.value > row.high ? 'high' : 'normal') },
138
+ cell: ({ getValue }) => (
139
+ <Badge variant="soft" tone={getValue() === 'high' ? 'error' : 'success'}>
140
+ {getValue() === 'high' ? 'High' : 'Normal'}
141
+ </Badge>
142
+ ),
143
+ });
144
+ ```
145
+
146
+ Keep a word in the node: a tone alone never carries the meaning.
147
+
148
+ **Some columns replace `cell` with text**: those with `meta.format` (computed
149
+ ones included), `meta.codes`, or a built-in `editor` of `'number'`, `'select'`
150
+ or `'date'`, whose value the grid writes itself, in the cell, the editor and the
151
+ clipboard. A `'checkbox'` editor draws a checkbox, and a cell holding an invalid
152
+ unsaved edit shows that text with its error icon. A column that must draw a component leaves both out; a column that
153
+ is edited keeps its editor and its text.
154
+
118
155
  ### Checks that never answer
119
156
 
120
157
  `validate` and `schema` may return a Promise. A commit waits for it, and so
@@ -74,6 +74,7 @@ at the top are needed is in [getting started](../getting-started.md#styles).
74
74
  | `--destructive` | `bg-destructive`, `text-destructive` | deprecated alias of `--error`: the light theme sets it to `var(--error)`, the dark theme keeps its own value; use `--error` |
75
75
  | `--ground` | `bg-ground` | the page's ground under `ActivityLayout`: the tinted colour the cards stand on (see [Page ground](#page-ground)) |
76
76
  | `--card`, `--popover`, `--tooltip` (+ `-foreground`) | `bg-card`, `bg-popover`, `bg-tooltip` | surfaces |
77
+ | `--card-edge` | `border-card-edge` | the edge of a `Card`, a `Popover` and a `Dialog`: `var(--border)` in light, `color-mix(in oklab, white 8%, var(--card))` in dark, a hairline lighter than the surface so it lifts off `--ground` |
77
78
  | `--border`, `--input`, `--ring` | `border-border`, `border-input`, `ring-ring` | outlines |
78
79
  | `--chart-1` … `--chart-5` | `bg-chart-1`, … | chart series (the charts read them at runtime) |
79
80
  | `--chart-soft-1` … `--chart-soft-5`, `--chart-soft-1-ink` … `--chart-soft-5-ink` | (none) | the native charts' soft palette (`palette="soft"`, `data-chart-palette="soft"`): a pale fill per series and its ink, 3:1 or more on `--card`, for outlines, lines and points ([charts guide](charts.md#soft-palette)) |
@@ -115,6 +116,13 @@ the token (light block and dark block), written from the theme's own
115
116
  AA: foreground, muted foreground and primary text are measured on the ground in
116
117
  both modes.
117
118
 
119
+ In dark, `--card`, `--popover`, `--muted`, `--accent`, `--border` and `--input`
120
+ sit 0.03 of lightness above the former values (same hue and chroma; Lavande's
121
+ card is `oklch(0.22 0.019 289.4)`, it was `0.19`; the sidebar and
122
+ `--sidebar-border` keep their values), and a card, a popover and a dialog
123
+ draw the `--card-edge` hairline plus a faint top highlight, so a card reads
124
+ against the ground. Light is unchanged.
125
+
118
126
  The sidebar and the app bar do **not** take the tint: they stay on
119
127
  `--background` (near-white in light), flat, with no radius and no shadow, so
120
128
  only the content ground carries the colour. The cards keep `bg-card`, their
package/docs/roadmap.md CHANGED
@@ -150,8 +150,6 @@ version they shipped in, and planned entries may name the major they target.
150
150
 
151
151
  ## Next
152
152
 
153
- - **Dark cards that separate from the page ground** — in dark mode, cards
154
- stand out from the page instead of blending into it ([#1676](https://github.com/softistx/nxgt-material/issues/1676)).
155
153
  - **FilterBar "Add a filter" stays on its row** — the button no longer wraps
156
154
  alone onto a second row on a desktop screen ([#1752](https://github.com/softistx/nxgt-material/issues/1752)).
157
155
 
@@ -350,6 +348,9 @@ version they shipped in, and planned entries may name the major they target.
350
348
 
351
349
  ## Shipped
352
350
 
351
+ - **Dark cards that separate from the page ground (3.54.0)** — in dark mode, cards,
352
+ popovers and dialogs lift off the page ground (lighter surfaces and a `--card-edge`
353
+ hairline), light unchanged ([#1676](https://github.com/softistx/nxgt-material/issues/1676)).
353
354
  - **Compact `ServerTable` tiles** — `renderTile` shows a compact `ListTile`
354
355
  record row (`size="sm"` with chips) through `item.Row` ([#1766](https://github.com/softistx/nxgt-material/issues/1766)).
355
356
  - **A compact `Switcher` trigger, `size="compact"`** — an icon-only round
@@ -25,6 +25,7 @@ words in your error.
25
25
 
26
26
  **Styles & assets**
27
27
 
28
+ - [In dark, my cards are lighter, or my own card colour has no edge](#in-dark-my-cards-are-lighter-or-my-own-card-colour-has-no-edge)
28
29
  - [The page and the cards look the same](#the-page-and-the-cards-look-the-same)
29
30
  - [Components render unstyled, with no error](#components-render-unstyled-with-no-error)
30
31
  - [A link is blue and underlined on hover and focus](#a-link-of-mine-or-of-a-component-is-blue-and-underlined-on-hover-and-focus)
@@ -745,6 +746,20 @@ import { Background } from '@nxgt/material/backgrounds';
745
746
  </ActivityLayout>
746
747
  ```
747
748
 
749
+ ### In dark, my cards are lighter, or my own card colour has no edge
750
+
751
+ Since 3.54 the dark `--card`, `--popover`, `--muted`, `--accent`, `--border` and
752
+ `--input` are 0.03 of lightness higher, and `Card`, `Popover` and `Dialog` draw their edge with
753
+ `--card-edge` (a hairline 8 % lighter than `--card`; in light it is
754
+ `var(--border)`). An app that overrides `--card` under `.dark` keeps its
755
+ colour; the edge follows it only when the override is on the same selector as
756
+ the theme (`.dark` or the theme block). An override on a nested element sets
757
+ `--card-edge` beside `--card`. An app that set its own dark card to
758
+ lift it off the page can drop that override, and one that sets `--card-edge`
759
+ (or `border-color` on a card) keeps it. A theme made with `defineTheme` and
760
+ generated before 3.54 has the former values and no `--card-edge`: regenerate
761
+ it (`nxgt-theme`, or the Vite plugin on the next build).
762
+
748
763
  ### The page and the cards look the same
749
764
 
750
765
  **When:** a screen under `ActivityLayout`, after the 3.24 upgrade or on an older
@@ -11,6 +11,9 @@
11
11
  keeps the flat look with `--ground: var(--background)`. */
12
12
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
13
13
  --card: oklch(1 0 0);
14
+ /* The card's edge (Card, Popover, Dialog): the border in light; dark draws it a
15
+ hairline lighter than the card. */
16
+ --card-edge: var(--border);
14
17
  --card-foreground: oklch(0.227 0.017 290);
15
18
  --strix: oklch(45.91% 0.1864 310.75);
16
19
  --popover: oklch(1 0 0);
@@ -111,38 +114,39 @@
111
114
  var(--primary) 6%,
112
115
  color-mix(in oklab, var(--background) 55%, black)
113
116
  );
114
- --card: oklch(0.19 0.019 289.4);
117
+ --card: oklch(0.22 0.019 289.4);
118
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
115
119
  --card-foreground: oklch(0.943 0.012 291.3);
116
- --popover: oklch(0.19 0.019 289.4);
120
+ --popover: oklch(0.22 0.019 289.4);
117
121
  --popover-foreground: oklch(0.943 0.012 291.3);
118
122
  --primary: oklch(46% 0.1135 276.35);
119
123
  --primary-foreground: oklch(0.995 0.002 291.3);
120
124
  /* Mixed 60 % toward white (the tonal Button labels' recipe): readable as text
121
125
  on --background and --card. */
122
126
  --primary-text: color-mix(in oklab, var(--primary) 40%, white);
123
- /* --primary itself is 2.7:1 on --background, 2.5:1 on --card and 2.3:1 on
124
- --muted. Mixed 25 % toward white: 4.8:1, 4.5:1 and 4.2:1. */
127
+ /* --primary itself is 2.7:1 on --background, 2.4:1 on --card and 2.1:1 on
128
+ --muted. Mixed 25 % toward white: 4.8:1, 4.2:1 and 3.8:1. */
125
129
  --primary-indicator: color-mix(in oklab, var(--primary) 75%, white);
126
130
  /* Brighter than the light one: it is read as text on the dark surfaces (6.8:1
127
- on --background, 6.4:1 on --card; 5.1:1 on its own 15 % tonal tint over a
131
+ on --background, 6.0:1 on --card; 4.8:1 on its own 15 % tonal tint over a
128
132
  Card). A filled secondary surface mixes it toward --background (the opaque
129
133
  70 % mix) to keep 5.4:1 under its near-white text (4.9:1 over a Card). */
130
134
  --secondary: oklch(0.675 0.1135 245.65);
131
135
  --secondary-foreground: oklch(0.995 0.002 291.3);
132
- --muted: oklch(0.228 0.022 290);
136
+ --muted: oklch(0.258 0.022 290);
133
137
  --muted-foreground: oklch(0.725 0.03 292.2);
134
- /* 3.7:1 on --background, 3.5:1 on --card; the fill 3.3:1 on the track. */
138
+ /* 3.7:1 on --background, 3.3:1 on --card; the fill 3.3:1 on the track. */
135
139
  --track: oklch(0.53 0.03 290);
136
140
  --track-fill: oklch(0.85 0.09 276.35);
137
141
  --tooltip: oklch(0.925 0.012 291.3);
138
142
  --tooltip-foreground: oklch(0.446 0.043 291);
139
- --accent: oklch(0.25 0.022 290);
143
+ --accent: oklch(0.28 0.022 290);
140
144
  --accent-foreground: oklch(0.943 0.012 291.3);
141
145
  --error: oklch(0.577 0.245 27.325);
142
146
  --error-foreground: oklch(0.995 0.002 291.3);
143
147
  /* --error stays the fill under near-white text; as text it would give only
144
148
  4.0:1 on --background and 3.8:1 on --card. Lightened (76 % --error), 6.25
145
- and 5.9:1, and 5.2:1 on a focused error menu item (bg-error/20 over the
149
+ and 5.5:1, and 4.9:1 on a focused error menu item (bg-error/20 over the
146
150
  popover; the former 80 % missed 4.5:1 once rendered). */
147
151
  --error-text: color-mix(in oklab, var(--error) 76%, white);
148
152
  /* The light brights: on the dark surfaces they read as text and as the
@@ -152,15 +156,15 @@
152
156
  --success-foreground: oklch(0.995 0.002 291.3);
153
157
  --info: oklch(0.707 0.165 254.624);
154
158
  --info-foreground: oklch(0.995 0.002 291.3);
155
- /* Amber too, as text: 7.2:1 on --background and 6.7:1 on --card, 6.4:1 and
156
- 5.9:1 on its 10% tint; the badge's 60% fill under near-white text is
157
- 6.1:1 on a page and 5.8:1 on a Card. */
159
+ /* Amber too, as text: 7.2:1 on --background and 6.3:1 on --card, 6.4:1 and
160
+ 5.5:1 on its 10% tint; the badge's 60% fill under near-white text is
161
+ 6.1:1 on a page and 5.6:1 on a Card. */
158
162
  --warning: oklch(0.7 0.15 70);
159
163
  --warning-foreground: oklch(0.995 0.002 291.3);
160
164
  --destructive: oklch(0.704 0.191 22.216);
161
- --border: oklch(0.259 0.025 291.4);
162
- --input: oklch(0.298 0.027 291.4);
163
- /* 4.05:1 on --background, 3.80:1 on --card, 3.50:1 on --muted. */
165
+ --border: oklch(0.289 0.025 291.4);
166
+ --input: oklch(0.328 0.027 291.4);
167
+ /* 4.05:1 on --background, 3.57:1 on --card, 3.22:1 on --muted. */
164
168
  --ring: oklch(0.551 0.03 290);
165
169
  --chart-1: oklch(0.488 0.243 264.376);
166
170
  --chart-2: oklch(0.696 0.17 162.48);
@@ -39,7 +39,8 @@
39
39
  --dialog-bg: color-mix(in oklab, var(--primary) 18%, var(--card));
40
40
  box-shadow:
41
41
  var(--nxgt-elevation-3),
42
- inset 0 0 0 1px rgb(255 255 255 / 0.07);
42
+ inset 0 0 0 1px var(--card-edge),
43
+ inset 0 1px 0 rgb(255 255 255 / 0.03);
43
44
  }
44
45
  .nxgt-dialog[data-state="open"] {
45
46
  animation:
@@ -30,13 +30,14 @@
30
30
  --popover-bg: var(--popover);
31
31
  --popover-lift:
32
32
  0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
33
- border: 1px solid var(--border);
33
+ border: 1px solid var(--card-edge);
34
34
  border-radius: var(--radius-md);
35
35
  }
36
36
  :where(.dark, [data-theme="dark"]) .nxgt-popover {
37
37
  --popover-bg: color-mix(in oklab, var(--primary) 16%, var(--popover));
38
38
  --popover-lift:
39
- var(--nxgt-elevation-2), inset 0 0 0 1px rgb(255 255 255 / 0.07);
39
+ var(--nxgt-elevation-2), inset 0 0 0 1px var(--card-edge),
40
+ inset 0 1px 0 rgb(255 255 255 / 0.03);
40
41
  }
41
42
  :where(.dark, [data-theme="dark"]) .nxgt-popover[data-variant="tonal"] {
42
43
  --popover-bg: color-mix(in oklab, var(--primary) 34%, var(--popover));
package/lib/styles.css CHANGED
@@ -57,6 +57,7 @@
57
57
  --color-background-light: --alpha(var(--background) / 30%);
58
58
  --color-foreground: var(--foreground);
59
59
  --color-card: var(--card);
60
+ --color-card-edge: var(--card-edge);
60
61
  --color-card-foreground: var(--card-foreground);
61
62
  --color-popover: var(--popover);
62
63
  --color-popover-foreground: var(--popover-foreground);
@@ -9,6 +9,7 @@
9
9
  --foreground: oklch(0.227 0.0145 65);
10
10
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
11
11
  --card: oklch(1 0 0);
12
+ --card-edge: var(--border);
12
13
  --card-foreground: oklch(0.227 0.0145 65);
13
14
  --popover: oklch(1 0 0);
14
15
  --popover-foreground: oklch(0.227 0.0145 65);
@@ -76,9 +77,10 @@
76
77
  --background: oklch(0.15 0.026 273);
77
78
  --foreground: oklch(0.943 0.0102 65);
78
79
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
79
- --card: oklch(0.19 0.0161 65);
80
+ --card: oklch(0.22 0.0161 65);
81
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
80
82
  --card-foreground: oklch(0.943 0.0102 65);
81
- --popover: oklch(0.19 0.0161 65);
83
+ --popover: oklch(0.22 0.0161 65);
82
84
  --popover-foreground: oklch(0.943 0.0102 65);
83
85
  --primary: oklch(0.52 0.13 48);
84
86
  --primary-foreground: oklch(0.995 0.002 65);
@@ -89,13 +91,13 @@
89
91
  --tertiary: oklch(0.7 0.14 350);
90
92
  --tertiary-foreground: oklch(0.15 0.026 273);
91
93
  --strix: oklch(0.5 0.14 350);
92
- --muted: oklch(0.228 0.0187 65);
94
+ --muted: oklch(0.258 0.0187 65);
93
95
  --muted-foreground: oklch(0.725 0.0255 65);
94
96
  --track: oklch(0.53 0.0255 65);
95
97
  --track-fill: oklch(0.85 0.09 48);
96
98
  --tooltip: oklch(0.925 0.0102 65);
97
99
  --tooltip-foreground: oklch(0.446 0.0366 65);
98
- --accent: oklch(0.25 0.0187 65);
100
+ --accent: oklch(0.28 0.0187 65);
99
101
  --accent-foreground: oklch(0.943 0.0102 65);
100
102
  --error: oklch(0.577 0.245 27.33);
101
103
  --error-foreground: oklch(0.995 0.002 65);
@@ -107,8 +109,8 @@
107
109
  --warning: oklch(0.7 0.15 70);
108
110
  --warning-foreground: oklch(0.995 0.002 65);
109
111
  --destructive: oklch(0.704 0.191 22.216);
110
- --border: oklch(0.259 0.0213 65);
111
- --input: oklch(0.298 0.0229 65);
112
+ --border: oklch(0.289 0.0213 65);
113
+ --input: oklch(0.328 0.0229 65);
112
114
  --ring: oklch(0.551 0.0255 65);
113
115
  --sidebar: oklch(0.19 0.0161 65);
114
116
  --sidebar-foreground: oklch(0.943 0.0102 65);
@@ -8,6 +8,7 @@
8
8
  --foreground: oklch(0.227 0.0119 250);
9
9
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
10
10
  --card: oklch(1 0 0);
11
+ --card-edge: var(--border);
11
12
  --card-foreground: oklch(0.227 0.0119 250);
12
13
  --popover: oklch(1 0 0);
13
14
  --popover-foreground: oklch(0.227 0.0119 250);
@@ -75,9 +76,10 @@
75
76
  --background: oklch(0.15 0.026 273);
76
77
  --foreground: oklch(0.943 0.0084 250);
77
78
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
78
- --card: oklch(0.19 0.0133 250);
79
+ --card: oklch(0.22 0.0133 250);
80
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
79
81
  --card-foreground: oklch(0.943 0.0084 250);
80
- --popover: oklch(0.19 0.0133 250);
82
+ --popover: oklch(0.22 0.0133 250);
81
83
  --popover-foreground: oklch(0.943 0.0084 250);
82
84
  --primary: oklch(0.45 0.065 252);
83
85
  --primary-foreground: oklch(0.995 0.002 250);
@@ -88,13 +90,13 @@
88
90
  --tertiary: oklch(0.7 0.1 290);
89
91
  --tertiary-foreground: oklch(0.15 0.026 273);
90
92
  --strix: oklch(0.48 0.1 290);
91
- --muted: oklch(0.228 0.0154 250);
93
+ --muted: oklch(0.258 0.0154 250);
92
94
  --muted-foreground: oklch(0.725 0.021 250);
93
95
  --track: oklch(0.53 0.021 250);
94
96
  --track-fill: oklch(0.85 0.09 252);
95
97
  --tooltip: oklch(0.925 0.0084 250);
96
98
  --tooltip-foreground: oklch(0.446 0.0301 250);
97
- --accent: oklch(0.25 0.0154 250);
99
+ --accent: oklch(0.28 0.0154 250);
98
100
  --accent-foreground: oklch(0.943 0.0084 250);
99
101
  --error: oklch(0.577 0.245 27.33);
100
102
  --error-foreground: oklch(0.995 0.002 250);
@@ -106,8 +108,8 @@
106
108
  --warning: oklch(0.7 0.15 70);
107
109
  --warning-foreground: oklch(0.995 0.002 250);
108
110
  --destructive: oklch(0.704 0.191 22.216);
109
- --border: oklch(0.259 0.0175 250);
110
- --input: oklch(0.298 0.0189 250);
111
+ --border: oklch(0.289 0.0175 250);
112
+ --input: oklch(0.328 0.0189 250);
111
113
  --ring: oklch(0.551 0.021 250);
112
114
  --sidebar: oklch(0.19 0.0133 250);
113
115
  --sidebar-foreground: oklch(0.943 0.0084 250);
@@ -11,6 +11,7 @@
11
11
  --foreground: oklch(0.227 0.0187 255);
12
12
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
13
13
  --card: oklch(1 0 0);
14
+ --card-edge: var(--border);
14
15
  --card-foreground: oklch(0.227 0.0187 255);
15
16
  --popover: oklch(1 0 0);
16
17
  --popover-foreground: oklch(0.227 0.0187 255);
@@ -78,9 +79,10 @@
78
79
  --background: oklch(0.15 0.026 273);
79
80
  --foreground: oklch(0.943 0.0132 255);
80
81
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
81
- --card: oklch(0.19 0.0209 255);
82
+ --card: oklch(0.22 0.0209 255);
83
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
82
84
  --card-foreground: oklch(0.943 0.0132 255);
83
- --popover: oklch(0.19 0.0209 255);
85
+ --popover: oklch(0.22 0.0209 255);
84
86
  --popover-foreground: oklch(0.943 0.0132 255);
85
87
  --primary: oklch(0.46 0.13 255);
86
88
  --primary-foreground: oklch(0.995 0.002 255);
@@ -91,13 +93,13 @@
91
93
  --tertiary: oklch(0.82 0.09 255);
92
94
  --tertiary-foreground: oklch(0.15 0.026 273);
93
95
  --strix: oklch(0.38 0.1254 255);
94
- --muted: oklch(0.228 0.0242 255);
96
+ --muted: oklch(0.258 0.0242 255);
95
97
  --muted-foreground: oklch(0.725 0.033 255);
96
98
  --track: oklch(0.53 0.033 255);
97
99
  --track-fill: oklch(0.85 0.09 255);
98
100
  --tooltip: oklch(0.925 0.0132 255);
99
101
  --tooltip-foreground: oklch(0.446 0.0473 255);
100
- --accent: oklch(0.25 0.0242 255);
102
+ --accent: oklch(0.28 0.0242 255);
101
103
  --accent-foreground: oklch(0.943 0.0132 255);
102
104
  --error: oklch(0.577 0.245 27.33);
103
105
  --error-foreground: oklch(0.995 0.002 255);
@@ -109,8 +111,8 @@
109
111
  --warning: oklch(0.7 0.15 70);
110
112
  --warning-foreground: oklch(0.995 0.002 255);
111
113
  --destructive: oklch(0.704 0.191 22.216);
112
- --border: oklch(0.259 0.0275 255);
113
- --input: oklch(0.298 0.0297 255);
114
+ --border: oklch(0.289 0.0275 255);
115
+ --input: oklch(0.328 0.0297 255);
114
116
  --ring: oklch(0.551 0.033 255);
115
117
  --sidebar: oklch(0.19 0.0209 255);
116
118
  --sidebar-foreground: oklch(0.943 0.0132 255);
@@ -11,6 +11,7 @@
11
11
  --foreground: oklch(0.227 0.017 265);
12
12
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
13
13
  --card: oklch(1 0 0);
14
+ --card-edge: var(--border);
14
15
  --card-foreground: oklch(0.227 0.017 265);
15
16
  --popover: oklch(1 0 0);
16
17
  --popover-foreground: oklch(0.227 0.017 265);
@@ -78,9 +79,10 @@
78
79
  --background: oklch(0.15 0.026 273);
79
80
  --foreground: oklch(0.943 0.012 265);
80
81
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
81
- --card: oklch(0.19 0.019 265);
82
+ --card: oklch(0.22 0.019 265);
83
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
82
84
  --card-foreground: oklch(0.943 0.012 265);
83
- --popover: oklch(0.19 0.019 265);
85
+ --popover: oklch(0.22 0.019 265);
84
86
  --popover-foreground: oklch(0.943 0.012 265);
85
87
  --primary: oklch(0.45 0.12 265);
86
88
  --primary-foreground: oklch(0.995 0.002 265);
@@ -91,13 +93,13 @@
91
93
  --tertiary: oklch(0.7 0.08 290);
92
94
  --tertiary-foreground: oklch(0.15 0.026 273);
93
95
  --strix: oklch(0.5625 0.08 290);
94
- --muted: oklch(0.228 0.022 265);
96
+ --muted: oklch(0.258 0.022 265);
95
97
  --muted-foreground: oklch(0.725 0.03 265);
96
98
  --track: oklch(0.53 0.03 265);
97
99
  --track-fill: oklch(0.85 0.09 265);
98
100
  --tooltip: oklch(0.925 0.012 265);
99
101
  --tooltip-foreground: oklch(0.446 0.043 265);
100
- --accent: oklch(0.25 0.022 265);
102
+ --accent: oklch(0.28 0.022 265);
101
103
  --accent-foreground: oklch(0.943 0.012 265);
102
104
  --error: oklch(0.577 0.245 27.33);
103
105
  --error-foreground: oklch(0.995 0.002 265);
@@ -109,8 +111,8 @@
109
111
  --warning: oklch(0.7 0.15 70);
110
112
  --warning-foreground: oklch(0.995 0.002 265);
111
113
  --destructive: oklch(0.704 0.191 22.216);
112
- --border: oklch(0.259 0.025 265);
113
- --input: oklch(0.298 0.027 265);
114
+ --border: oklch(0.289 0.025 265);
115
+ --input: oklch(0.328 0.027 265);
114
116
  --ring: oklch(0.551 0.03 265);
115
117
  --sidebar: oklch(0.19 0.019 265);
116
118
  --sidebar-foreground: oklch(0.943 0.012 265);
@@ -11,6 +11,7 @@
11
11
  --foreground: oklch(0.227 0.0136 30);
12
12
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
13
13
  --card: oklch(1 0 0);
14
+ --card-edge: var(--border);
14
15
  --card-foreground: oklch(0.227 0.0136 30);
15
16
  --popover: oklch(1 0 0);
16
17
  --popover-foreground: oklch(0.227 0.0136 30);
@@ -78,9 +79,10 @@
78
79
  --background: oklch(0.15 0.026 273);
79
80
  --foreground: oklch(0.943 0.0096 30);
80
81
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
81
- --card: oklch(0.19 0.0152 30);
82
+ --card: oklch(0.22 0.0152 30);
83
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
82
84
  --card-foreground: oklch(0.943 0.0096 30);
83
- --popover: oklch(0.19 0.0152 30);
85
+ --popover: oklch(0.22 0.0152 30);
84
86
  --popover-foreground: oklch(0.943 0.0096 30);
85
87
  --primary: oklch(0.575 0.17 35);
86
88
  --primary-foreground: oklch(0.995 0.002 30);
@@ -91,13 +93,13 @@
91
93
  --tertiary: oklch(0.7 0.1 200);
92
94
  --tertiary-foreground: oklch(0.15 0.026 273);
93
95
  --strix: oklch(0.5 0.085 200);
94
- --muted: oklch(0.228 0.0176 30);
96
+ --muted: oklch(0.258 0.0176 30);
95
97
  --muted-foreground: oklch(0.725 0.024 30);
96
98
  --track: oklch(0.53 0.024 30);
97
99
  --track-fill: oklch(0.85 0.09 35);
98
100
  --tooltip: oklch(0.925 0.0096 30);
99
101
  --tooltip-foreground: oklch(0.446 0.0344 30);
100
- --accent: oklch(0.25 0.0176 30);
102
+ --accent: oklch(0.28 0.0176 30);
101
103
  --accent-foreground: oklch(0.943 0.0096 30);
102
104
  --error: oklch(0.577 0.245 27.33);
103
105
  --error-foreground: oklch(0.995 0.002 30);
@@ -109,8 +111,8 @@
109
111
  --warning: oklch(0.7 0.15 70);
110
112
  --warning-foreground: oklch(0.995 0.002 30);
111
113
  --destructive: oklch(0.704 0.191 22.216);
112
- --border: oklch(0.259 0.02 30);
113
- --input: oklch(0.298 0.0216 30);
114
+ --border: oklch(0.289 0.02 30);
115
+ --input: oklch(0.328 0.0216 30);
114
116
  --ring: oklch(0.551 0.024 30);
115
117
  --sidebar: oklch(0.19 0.0152 30);
116
118
  --sidebar-foreground: oklch(0.943 0.0096 30);
@@ -8,6 +8,7 @@
8
8
  --foreground: oklch(0.227 0.0136 140);
9
9
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
10
10
  --card: oklch(1 0 0);
11
+ --card-edge: var(--border);
11
12
  --card-foreground: oklch(0.227 0.0136 140);
12
13
  --popover: oklch(1 0 0);
13
14
  --popover-foreground: oklch(0.227 0.0136 140);
@@ -75,9 +76,10 @@
75
76
  --background: oklch(0.15 0.026 273);
76
77
  --foreground: oklch(0.943 0.0096 140);
77
78
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
78
- --card: oklch(0.19 0.0152 140);
79
+ --card: oklch(0.22 0.0152 140);
80
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
79
81
  --card-foreground: oklch(0.943 0.0096 140);
80
- --popover: oklch(0.19 0.0152 140);
82
+ --popover: oklch(0.22 0.0152 140);
81
83
  --popover-foreground: oklch(0.943 0.0096 140);
82
84
  --primary: oklch(0.48 0.1 152);
83
85
  --primary-foreground: oklch(0.995 0.002 140);
@@ -88,13 +90,13 @@
88
90
  --tertiary: oklch(0.7 0.1 55);
89
91
  --tertiary-foreground: oklch(0.15 0.026 273);
90
92
  --strix: oklch(0.5 0.1 55);
91
- --muted: oklch(0.228 0.0176 140);
93
+ --muted: oklch(0.258 0.0176 140);
92
94
  --muted-foreground: oklch(0.725 0.024 140);
93
95
  --track: oklch(0.53 0.024 140);
94
96
  --track-fill: oklch(0.85 0.09 152);
95
97
  --tooltip: oklch(0.925 0.0096 140);
96
98
  --tooltip-foreground: oklch(0.446 0.0344 140);
97
- --accent: oklch(0.25 0.0176 140);
99
+ --accent: oklch(0.28 0.0176 140);
98
100
  --accent-foreground: oklch(0.943 0.0096 140);
99
101
  --error: oklch(0.577 0.245 27.33);
100
102
  --error-foreground: oklch(0.995 0.002 140);
@@ -106,8 +108,8 @@
106
108
  --warning: oklch(0.7 0.15 70);
107
109
  --warning-foreground: oklch(0.995 0.002 140);
108
110
  --destructive: oklch(0.704 0.191 22.216);
109
- --border: oklch(0.259 0.02 140);
110
- --input: oklch(0.298 0.0216 140);
111
+ --border: oklch(0.289 0.02 140);
112
+ --input: oklch(0.328 0.0216 140);
111
113
  --ring: oklch(0.551 0.024 140);
112
114
  --sidebar: oklch(0.19 0.0152 140);
113
115
  --sidebar-foreground: oklch(0.943 0.0096 140);
@@ -8,6 +8,7 @@
8
8
  --foreground: oklch(0.227 0.017 290);
9
9
  --ground: color-mix(in oklab, var(--primary) 7%, var(--background));
10
10
  --card: oklch(1 0 0);
11
+ --card-edge: var(--border);
11
12
  --card-foreground: oklch(0.227 0.017 290);
12
13
  --popover: oklch(1 0 0);
13
14
  --popover-foreground: oklch(0.227 0.017 290);
@@ -75,9 +76,10 @@
75
76
  --background: oklch(0.15 0.026 273);
76
77
  --foreground: oklch(0.943 0.012 291.3);
77
78
  --ground: color-mix(in oklab, var(--primary) 6%, color-mix(in oklab, var(--background) 55%, black));
78
- --card: oklch(0.19 0.019 289.4);
79
+ --card: oklch(0.22 0.019 289.4);
80
+ --card-edge: color-mix(in oklab, white 8%, var(--card));
79
81
  --card-foreground: oklch(0.943 0.012 291.3);
80
- --popover: oklch(0.19 0.019 289.4);
82
+ --popover: oklch(0.22 0.019 289.4);
81
83
  --popover-foreground: oklch(0.943 0.012 291.3);
82
84
  --primary: oklch(0.46 0.1135 276.35);
83
85
  --primary-foreground: oklch(0.995 0.002 291.3);
@@ -88,13 +90,13 @@
88
90
  --tertiary: oklch(0.7 0.15 310.75);
89
91
  --tertiary-foreground: oklch(0.15 0.026 273);
90
92
  --strix: oklch(0.4591 0.1864 310.75);
91
- --muted: oklch(0.228 0.022 290);
93
+ --muted: oklch(0.258 0.022 290);
92
94
  --muted-foreground: oklch(0.725 0.03 292.2);
93
95
  --track: oklch(0.53 0.03 290);
94
96
  --track-fill: oklch(0.85 0.09 276.35);
95
97
  --tooltip: oklch(0.925 0.012 291.3);
96
98
  --tooltip-foreground: oklch(0.446 0.043 291);
97
- --accent: oklch(0.25 0.022 290);
99
+ --accent: oklch(0.28 0.022 290);
98
100
  --accent-foreground: oklch(0.943 0.012 291.3);
99
101
  --error: oklch(0.577 0.245 27.325);
100
102
  --error-foreground: oklch(0.995 0.002 291.3);
@@ -106,8 +108,8 @@
106
108
  --warning: oklch(0.7 0.15 70);
107
109
  --warning-foreground: oklch(0.995 0.002 291.3);
108
110
  --destructive: oklch(0.704 0.191 22.216);
109
- --border: oklch(0.259 0.025 291.4);
110
- --input: oklch(0.298 0.027 291.4);
111
+ --border: oklch(0.289 0.025 291.4);
112
+ --input: oklch(0.328 0.027 291.4);
111
113
  --ring: oklch(0.551 0.03 290);
112
114
  --sidebar: oklch(0.19 0.019 289.4);
113
115
  --sidebar-foreground: oklch(0.943 0.012 291.3);