@jirawatpyk/aura-react 5.32.0 → 5.33.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.
package/README.md CHANGED
@@ -186,6 +186,14 @@ DataTable with sort and page in the URL (4.17): `onStateChange={({ sort, page })
186
186
  - **Time zone**: `timeZone` on AuraProvider, DatePicker, DateRangePicker and Calendar decides "today" (the marker, `min`/`max="today"`, the first month shown); or pass `today` as an ISO date. `todayIn('Asia/Bangkok')` is exported from the root and `/server`.
187
187
  - **Toasts** queue past three instead of dropping: six in a row all show, in order, three at a time.
188
188
 
189
+ ## 5.33 — DxT Monitor requests 5–8
190
+
191
+ - **Hover shows on the canvas** (request 5): in light, `aura-bg-surface-hover` is zinc-50 — the canvas itself — so SideNav's rows, an IconButton or ghost Button in its header or footer (Sign out), and the same on the page's canvas (PageHeader actions, Pagination, a selectable Tag) showed no hover. A new token, `aura-bg-canvas-hover` (zinc-100 light, zinc-800 dark), is the hover inside AppShell and SideNav; cards, tables, inputs, the top bar, dialogs, drawers and popovers inside them keep `aura-bg-surface-hover`. Hover fills now read `--aura-hover`, falling back to the surface hover: outside AppShell, set `--aura-hover: var(--aura-bg-canvas-hover)` on your own canvas-coloured area.
192
+ - **AppShell `headerHideFrom="lg"`** (request 6): the top bar, `header` and all, shows only below 1024px — where the menu button is — as a header-less bar does: from lg up it is hidden and `--aura-shell-bar-height` is 0. For apps whose phone pages draw a top bar (brand, avatar) and whose desktop pages don't. Default: the bar shows at every width.
193
+ - **PageHeader `breadcrumb`** (request 7): a `<Breadcrumb>` above the title, 4px from it like the eyebrow, in its own `div` — a `nav` can't sit in the eyebrow's `p` (invalid HTML, a hydration error) — with Breadcrumb's own 13px sans. With an eyebrow too, the breadcrumb comes first.
194
+ - **Phone drawer header = bar height** (request 8): in AppShell's phone drawer, a SideNav with `headerDivider` takes the top bar's height (56px, or more when the bar's header wraps), content centred, so its line meets the bar's line beside it; the close button is centred on it. The fixed desktop sidebar keeps 72px.
195
+ - **Also:** the nav drawer's close button is a 44px target on phones and touch screens (the header leaves it 60px); the divided header's layout no longer needs `:has()` (older Safari and Firefox centre the close button too); a DatePicker's or read-only Select's toggle shows its hover on the grey read-only ground.
196
+
189
197
  ## 5.32 — Icon tips, PageHeader, SideNav header divider, pill skeletons (DxT Monitor requests 1–4)
190
198
 
191
199
  ### DxT Monitor requests 1, 3, 4
@@ -7637,6 +7637,7 @@ window.Aura = (() => {
7637
7637
  h8(
7638
7638
  "div",
7639
7639
  { className: "aura-page-header__text" },
7640
+ props.breadcrumb != null && props.breadcrumb !== false ? h8("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
7640
7641
  props.eyebrow != null && props.eyebrow !== false ? h8("p", { className: "aura-page-header__eyebrow" }, props.eyebrow) : null,
7641
7642
  h8("h" + level, { className: "aura-page-header__title", id: props.titleId }, props.title),
7642
7643
  props.meta != null && props.meta !== false ? h8("div", { className: "aura-page-header__meta" }, props.meta) : null
@@ -7669,12 +7670,15 @@ window.Aura = (() => {
7669
7670
  const barRef = React44.useRef(null);
7670
7671
  const mergedRef = useMergedRef(ref, rootRef);
7671
7672
  const hasBar = !!(props.header || props.nav);
7673
+ const barH = React44.useState(null);
7672
7674
  useIsoLayoutEffect(
7673
7675
  function() {
7674
7676
  const root = rootRef.current, bar = barRef.current;
7675
7677
  if (!root || !bar) return;
7676
7678
  function sync() {
7677
- root.style.setProperty("--aura-shell-bar-height", bar.getBoundingClientRect().height + "px");
7679
+ const h10 = bar.getBoundingClientRect().height;
7680
+ root.style.setProperty("--aura-shell-bar-height", h10 + "px");
7681
+ if (h10 > 0) barH[1](Math.round(h10));
7678
7682
  }
7679
7683
  sync();
7680
7684
  const ro = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(sync);
@@ -7712,6 +7716,8 @@ window.Aura = (() => {
7712
7716
  /* 5.14: no top bar at all, or one that only holds the menu button (gone from lg up): the bar-height token is 0. */
7713
7717
  !props.header && !props.nav && "aura-shell--no-bar",
7714
7718
  !props.header && props.nav && "aura-shell--menu-bar",
7719
+ /* 5.33 (DxT Monitor #6): a header bar for phones only. */
7720
+ props.header && props.headerHideFrom === "lg" && "aura-shell--menu-bar",
7715
7721
  props.className
7716
7722
  )
7717
7723
  },
@@ -7726,23 +7732,37 @@ window.Aura = (() => {
7726
7732
  side: "left",
7727
7733
  size: "nav",
7728
7734
  "aria-label": props.navLabel || t.navigation,
7729
- dismissible: true
7735
+ dismissible: true,
7736
+ closeProps: { touchHeight: true },
7737
+ className: navEl && navEl.props.headerDivider && navEl.props.header ? "aura-drawer--nav-divided" : void 0,
7738
+ style: barH[0] ? { "--aura-shell-bar-height": barH[0] + "px" } : void 0
7730
7739
  },
7731
7740
  drawerNav
7732
7741
  ) : null,
7733
- /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React44.createElement("header", { ref: barRef, className: cx("aura-shell__bar", !props.header && "aura-shell__bar--menu-only") }, props.nav ? /* @__PURE__ */ React44.createElement(
7734
- IconButton,
7742
+ /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React44.createElement(
7743
+ "header",
7735
7744
  {
7736
- className: "aura-shell__menu",
7737
- icon: /* @__PURE__ */ React44.createElement(IconMenu, null),
7738
- label: props.menuLabel || t.openNav,
7739
- size: "md",
7740
- onClick: function() {
7741
- setOpen(true);
7742
- },
7743
- "aria-expanded": open
7744
- }
7745
- ) : null, /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__bar-content" }, props.header)) : null, /* @__PURE__ */ React44.createElement(
7745
+ ref: barRef,
7746
+ className: cx(
7747
+ "aura-shell__bar",
7748
+ (!props.header || props.headerHideFrom === "lg") && "aura-shell__bar--menu-only"
7749
+ )
7750
+ },
7751
+ props.nav ? /* @__PURE__ */ React44.createElement(
7752
+ IconButton,
7753
+ {
7754
+ className: "aura-shell__menu",
7755
+ icon: /* @__PURE__ */ React44.createElement(IconMenu, null),
7756
+ label: props.menuLabel || t.openNav,
7757
+ size: "md",
7758
+ onClick: function() {
7759
+ setOpen(true);
7760
+ },
7761
+ "aria-expanded": open
7762
+ }
7763
+ ) : null,
7764
+ /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__bar-content" }, props.header)
7765
+ ) : null, /* @__PURE__ */ React44.createElement(
7746
7766
  "main",
7747
7767
  {
7748
7768
  className: cx("aura-shell__content", props.contentPadding === false && "is-flush"),
@@ -7619,6 +7619,7 @@ var PageHeader = React43.forwardRef(function PageHeader2(props, ref) {
7619
7619
  h8(
7620
7620
  "div",
7621
7621
  { className: "aura-page-header__text" },
7622
+ props.breadcrumb != null && props.breadcrumb !== false ? h8("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
7622
7623
  props.eyebrow != null && props.eyebrow !== false ? h8("p", { className: "aura-page-header__eyebrow" }, props.eyebrow) : null,
7623
7624
  h8("h" + level, { className: "aura-page-header__title", id: props.titleId }, props.title),
7624
7625
  props.meta != null && props.meta !== false ? h8("div", { className: "aura-page-header__meta" }, props.meta) : null
@@ -7651,12 +7652,15 @@ var AppShell = React44.forwardRef(function AppShell2(props, ref) {
7651
7652
  const barRef = React44.useRef(null);
7652
7653
  const mergedRef = useMergedRef(ref, rootRef);
7653
7654
  const hasBar = !!(props.header || props.nav);
7655
+ const barH = React44.useState(null);
7654
7656
  useIsoLayoutEffect(
7655
7657
  function() {
7656
7658
  const root = rootRef.current, bar = barRef.current;
7657
7659
  if (!root || !bar) return;
7658
7660
  function sync() {
7659
- root.style.setProperty("--aura-shell-bar-height", bar.getBoundingClientRect().height + "px");
7661
+ const h10 = bar.getBoundingClientRect().height;
7662
+ root.style.setProperty("--aura-shell-bar-height", h10 + "px");
7663
+ if (h10 > 0) barH[1](Math.round(h10));
7660
7664
  }
7661
7665
  sync();
7662
7666
  const ro = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(sync);
@@ -7694,6 +7698,8 @@ var AppShell = React44.forwardRef(function AppShell2(props, ref) {
7694
7698
  /* 5.14: no top bar at all, or one that only holds the menu button (gone from lg up): the bar-height token is 0. */
7695
7699
  !props.header && !props.nav && "aura-shell--no-bar",
7696
7700
  !props.header && props.nav && "aura-shell--menu-bar",
7701
+ /* 5.33 (DxT Monitor #6): a header bar for phones only. */
7702
+ props.header && props.headerHideFrom === "lg" && "aura-shell--menu-bar",
7697
7703
  props.className
7698
7704
  )
7699
7705
  },
@@ -7708,23 +7714,37 @@ var AppShell = React44.forwardRef(function AppShell2(props, ref) {
7708
7714
  side: "left",
7709
7715
  size: "nav",
7710
7716
  "aria-label": props.navLabel || t.navigation,
7711
- dismissible: true
7717
+ dismissible: true,
7718
+ closeProps: { touchHeight: true },
7719
+ className: navEl && navEl.props.headerDivider && navEl.props.header ? "aura-drawer--nav-divided" : void 0,
7720
+ style: barH[0] ? { "--aura-shell-bar-height": barH[0] + "px" } : void 0
7712
7721
  },
7713
7722
  drawerNav
7714
7723
  ) : null,
7715
- /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React44.createElement("header", { ref: barRef, className: cx("aura-shell__bar", !props.header && "aura-shell__bar--menu-only") }, props.nav ? /* @__PURE__ */ React44.createElement(
7716
- IconButton,
7724
+ /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React44.createElement(
7725
+ "header",
7717
7726
  {
7718
- className: "aura-shell__menu",
7719
- icon: /* @__PURE__ */ React44.createElement(IconMenu, null),
7720
- label: props.menuLabel || t.openNav,
7721
- size: "md",
7722
- onClick: function() {
7723
- setOpen(true);
7724
- },
7725
- "aria-expanded": open
7726
- }
7727
- ) : null, /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__bar-content" }, props.header)) : null, /* @__PURE__ */ React44.createElement(
7727
+ ref: barRef,
7728
+ className: cx(
7729
+ "aura-shell__bar",
7730
+ (!props.header || props.headerHideFrom === "lg") && "aura-shell__bar--menu-only"
7731
+ )
7732
+ },
7733
+ props.nav ? /* @__PURE__ */ React44.createElement(
7734
+ IconButton,
7735
+ {
7736
+ className: "aura-shell__menu",
7737
+ icon: /* @__PURE__ */ React44.createElement(IconMenu, null),
7738
+ label: props.menuLabel || t.openNav,
7739
+ size: "md",
7740
+ onClick: function() {
7741
+ setOpen(true);
7742
+ },
7743
+ "aria-expanded": open
7744
+ }
7745
+ ) : null,
7746
+ /* @__PURE__ */ React44.createElement("div", { className: "aura-shell__bar-content" }, props.header)
7747
+ ) : null, /* @__PURE__ */ React44.createElement(
7728
7748
  "main",
7729
7749
  {
7730
7750
  className: cx("aura-shell__content", props.contentPadding === false && "is-flush"),
@@ -28,12 +28,15 @@ const AppShell = React.forwardRef(function AppShell2(props, ref) {
28
28
  const barRef = React.useRef(null);
29
29
  const mergedRef = useMergedRef(ref, rootRef);
30
30
  const hasBar = !!(props.header || props.nav);
31
+ const barH = React.useState(null);
31
32
  useIsoLayoutEffect(
32
33
  function() {
33
34
  const root = rootRef.current, bar = barRef.current;
34
35
  if (!root || !bar) return;
35
36
  function sync() {
36
- root.style.setProperty("--aura-shell-bar-height", bar.getBoundingClientRect().height + "px");
37
+ const h = bar.getBoundingClientRect().height;
38
+ root.style.setProperty("--aura-shell-bar-height", h + "px");
39
+ if (h > 0) barH[1](Math.round(h));
37
40
  }
38
41
  sync();
39
42
  const ro = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(sync);
@@ -71,6 +74,8 @@ const AppShell = React.forwardRef(function AppShell2(props, ref) {
71
74
  /* 5.14: no top bar at all, or one that only holds the menu button (gone from lg up): the bar-height token is 0. */
72
75
  !props.header && !props.nav && "aura-shell--no-bar",
73
76
  !props.header && props.nav && "aura-shell--menu-bar",
77
+ /* 5.33 (DxT Monitor #6): a header bar for phones only. */
78
+ props.header && props.headerHideFrom === "lg" && "aura-shell--menu-bar",
74
79
  props.className
75
80
  )
76
81
  },
@@ -85,23 +90,37 @@ const AppShell = React.forwardRef(function AppShell2(props, ref) {
85
90
  side: "left",
86
91
  size: "nav",
87
92
  "aria-label": props.navLabel || t.navigation,
88
- dismissible: true
93
+ dismissible: true,
94
+ closeProps: { touchHeight: true },
95
+ className: navEl && navEl.props.headerDivider && navEl.props.header ? "aura-drawer--nav-divided" : void 0,
96
+ style: barH[0] ? { "--aura-shell-bar-height": barH[0] + "px" } : void 0
89
97
  },
90
98
  drawerNav
91
99
  ) : null,
92
- /* @__PURE__ */ React.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React.createElement("header", { ref: barRef, className: cx("aura-shell__bar", !props.header && "aura-shell__bar--menu-only") }, props.nav ? /* @__PURE__ */ React.createElement(
93
- IconButton,
100
+ /* @__PURE__ */ React.createElement("div", { className: "aura-shell__main" }, props.header || props.nav ? /* @__PURE__ */ React.createElement(
101
+ "header",
94
102
  {
95
- className: "aura-shell__menu",
96
- icon: /* @__PURE__ */ React.createElement(IconMenu, null),
97
- label: props.menuLabel || t.openNav,
98
- size: "md",
99
- onClick: function() {
100
- setOpen(true);
101
- },
102
- "aria-expanded": open
103
- }
104
- ) : null, /* @__PURE__ */ React.createElement("div", { className: "aura-shell__bar-content" }, props.header)) : null, /* @__PURE__ */ React.createElement(
103
+ ref: barRef,
104
+ className: cx(
105
+ "aura-shell__bar",
106
+ (!props.header || props.headerHideFrom === "lg") && "aura-shell__bar--menu-only"
107
+ )
108
+ },
109
+ props.nav ? /* @__PURE__ */ React.createElement(
110
+ IconButton,
111
+ {
112
+ className: "aura-shell__menu",
113
+ icon: /* @__PURE__ */ React.createElement(IconMenu, null),
114
+ label: props.menuLabel || t.openNav,
115
+ size: "md",
116
+ onClick: function() {
117
+ setOpen(true);
118
+ },
119
+ "aria-expanded": open
120
+ }
121
+ ) : null,
122
+ /* @__PURE__ */ React.createElement("div", { className: "aura-shell__bar-content" }, props.header)
123
+ ) : null, /* @__PURE__ */ React.createElement(
105
124
  "main",
106
125
  {
107
126
  className: cx("aura-shell__content", props.contentPadding === false && "is-flush"),
@@ -15,6 +15,7 @@ const PageHeader = React.forwardRef(function PageHeader2(props, ref) {
15
15
  h(
16
16
  "div",
17
17
  { className: "aura-page-header__text" },
18
+ props.breadcrumb != null && props.breadcrumb !== false ? h("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
18
19
  props.eyebrow != null && props.eyebrow !== false ? h("p", { className: "aura-page-header__eyebrow" }, props.eyebrow) : null,
19
20
  h("h" + level, { className: "aura-page-header__title", id: props.titleId }, props.title),
20
21
  props.meta != null && props.meta !== false ? h("div", { className: "aura-page-header__meta" }, props.meta) : null
package/dist/index.d.cts CHANGED
@@ -1210,6 +1210,10 @@ export interface AppShellProps {
1210
1210
  nav?: React$1.ReactElement | undefined;
1211
1211
  /** Top bar content (title, search, account menu). */
1212
1212
  header?: React$1.ReactNode | undefined;
1213
+ /** 5.33 (DxT Monitor #6): `'lg'` shows the top bar, `header` and all, only below 1024px — where the menu button is —
1214
+ * as when there is no `header`: from lg up it is hidden and `--aura-shell-bar-height` is 0. For apps whose phone
1215
+ * pages have a top bar (brand, avatar) and whose desktop pages don't. Default: the bar shows at every width. */
1216
+ headerHideFrom?: "lg" | undefined;
1213
1217
  children?: React$1.ReactNode | undefined;
1214
1218
  navLabel?: string | undefined;
1215
1219
  menuLabel?: string | undefined;
@@ -1802,6 +1806,10 @@ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps
1802
1806
  export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir" | "role">, React$1.AriaAttributes, DataAttributes {
1803
1807
  /** Small mono line above the title — a section or breadcrumb-like context ("Monitor / Sites"). */
1804
1808
  eyebrow?: React$1.ReactNode | undefined;
1809
+ /** 5.33 (DxT Monitor #7): a `<Breadcrumb>` above the title, 4px from it like the eyebrow, in its own `div` (a `nav`
1810
+ * can't sit in the eyebrow's `p`) and its own 13px sans. Detail pages show a breadcrumb or an eyebrow; with both,
1811
+ * the breadcrumb comes first. */
1812
+ breadcrumb?: React$1.ReactNode | undefined;
1805
1813
  /** The page's heading. */
1806
1814
  title: React$1.ReactNode;
1807
1815
  /** A line under the title — counts, last update, owner. */
package/dist/index.d.ts CHANGED
@@ -1210,6 +1210,10 @@ export interface AppShellProps {
1210
1210
  nav?: React$1.ReactElement | undefined;
1211
1211
  /** Top bar content (title, search, account menu). */
1212
1212
  header?: React$1.ReactNode | undefined;
1213
+ /** 5.33 (DxT Monitor #6): `'lg'` shows the top bar, `header` and all, only below 1024px — where the menu button is —
1214
+ * as when there is no `header`: from lg up it is hidden and `--aura-shell-bar-height` is 0. For apps whose phone
1215
+ * pages have a top bar (brand, avatar) and whose desktop pages don't. Default: the bar shows at every width. */
1216
+ headerHideFrom?: "lg" | undefined;
1213
1217
  children?: React$1.ReactNode | undefined;
1214
1218
  navLabel?: string | undefined;
1215
1219
  menuLabel?: string | undefined;
@@ -1802,6 +1806,10 @@ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps
1802
1806
  export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir" | "role">, React$1.AriaAttributes, DataAttributes {
1803
1807
  /** Small mono line above the title — a section or breadcrumb-like context ("Monitor / Sites"). */
1804
1808
  eyebrow?: React$1.ReactNode | undefined;
1809
+ /** 5.33 (DxT Monitor #7): a `<Breadcrumb>` above the title, 4px from it like the eyebrow, in its own `div` (a `nav`
1810
+ * can't sit in the eyebrow's `p`) and its own 13px sans. Detail pages show a breadcrumb or an eyebrow; with both,
1811
+ * the breadcrumb comes first. */
1812
+ breadcrumb?: React$1.ReactNode | undefined;
1805
1813
  /** The page's heading. */
1806
1814
  title: React$1.ReactNode;
1807
1815
  /** A line under the title — counts, last update, owner. */
@@ -1393,6 +1393,7 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1393
1393
  h4(
1394
1394
  "div",
1395
1395
  { className: "aura-page-header__text" },
1396
+ props.breadcrumb != null && props.breadcrumb !== false ? h4("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
1396
1397
  props.eyebrow != null && props.eyebrow !== false ? h4("p", { className: "aura-page-header__eyebrow" }, props.eyebrow) : null,
1397
1398
  h4("h" + level, { className: "aura-page-header__title", id: props.titleId }, props.title),
1398
1399
  props.meta != null && props.meta !== false ? h4("div", { className: "aura-page-header__meta" }, props.meta) : null
@@ -412,6 +412,10 @@ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps
412
412
  export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir" | "role">, React$1.AriaAttributes, DataAttributes {
413
413
  /** Small mono line above the title — a section or breadcrumb-like context ("Monitor / Sites"). */
414
414
  eyebrow?: React$1.ReactNode | undefined;
415
+ /** 5.33 (DxT Monitor #7): a `<Breadcrumb>` above the title, 4px from it like the eyebrow, in its own `div` (a `nav`
416
+ * can't sit in the eyebrow's `p`) and its own 13px sans. Detail pages show a breadcrumb or an eyebrow; with both,
417
+ * the breadcrumb comes first. */
418
+ breadcrumb?: React$1.ReactNode | undefined;
415
419
  /** The page's heading. */
416
420
  title: React$1.ReactNode;
417
421
  /** A line under the title — counts, last update, owner. */
@@ -412,6 +412,10 @@ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps
412
412
  export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir" | "role">, React$1.AriaAttributes, DataAttributes {
413
413
  /** Small mono line above the title — a section or breadcrumb-like context ("Monitor / Sites"). */
414
414
  eyebrow?: React$1.ReactNode | undefined;
415
+ /** 5.33 (DxT Monitor #7): a `<Breadcrumb>` above the title, 4px from it like the eyebrow, in its own `div` (a `nav`
416
+ * can't sit in the eyebrow's `p`) and its own 13px sans. Detail pages show a breadcrumb or an eyebrow; with both,
417
+ * the breadcrumb comes first. */
418
+ breadcrumb?: React$1.ReactNode | undefined;
415
419
  /** The page's heading. */
416
420
  title: React$1.ReactNode;
417
421
  /** A line under the title — counts, last update, owner. */
@@ -1332,6 +1332,7 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1332
1332
  h4(
1333
1333
  "div",
1334
1334
  { className: "aura-page-header__text" },
1335
+ props.breadcrumb != null && props.breadcrumb !== false ? h4("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
1335
1336
  props.eyebrow != null && props.eyebrow !== false ? h4("p", { className: "aura-page-header__eyebrow" }, props.eyebrow) : null,
1336
1337
  h4("h" + level, { className: "aura-page-header__title", id: props.titleId }, props.title),
1337
1338
  props.meta != null && props.meta !== false ? h4("div", { className: "aura-page-header__meta" }, props.meta) : null
package/dist/styles.css CHANGED
@@ -70,10 +70,10 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
70
70
  .aura-btn--primary:hover { background: var(--aura-button-primary-bg-hover); }
71
71
 
72
72
  .aura-btn--secondary { border: 1px solid var(--aura-button-secondary-border); color: var(--aura-fg-primary); }
73
- .aura-btn--secondary:hover { background: var(--aura-bg-surface-hover); }
73
+ .aura-btn--secondary:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
74
74
  /* Destructive: filled for the confirm step, outline beside other actions. Loading keeps the colour (busy, not unavailable). */
75
75
  .aura-btn--ghost { color: var(--aura-fg-primary); }
76
- .aura-btn--ghost:hover { background: var(--aura-bg-surface-hover); }
76
+ .aura-btn--ghost:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
77
77
  /* size="sm" (4.16): 32px for toolbars, table rows and card footers. On touch the pill stays 32px and a transparent
78
78
  * ::after grows the hit area to 44px, as IconButton does. */
79
79
  .aura-btn--sm { height: var(--aura-button-height-sm); padding: 0 var(--aura-space-3); gap: 6px; }
@@ -128,7 +128,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
128
128
  font-size: 13px;
129
129
  }
130
130
  .aura-table__row:last-child { border-bottom: 0; }
131
- .aura-table__row:hover { background: var(--aura-bg-surface-hover); }
131
+ .aura-table__row:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
132
132
  .aura-table__row.is-actionable { cursor: pointer; }
133
133
  .aura-table__row--skeleton:hover { background: var(--aura-bg-surface); }
134
134
  .aura-table__row--skeleton .aura-table__td { display: flex; align-items: center; }
@@ -236,7 +236,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
236
236
  }
237
237
  .aura-table__th:hover .aura-table__menu-btn, .aura-table__th:focus-within .aura-table__menu-btn,
238
238
  .aura-table__th:focus .aura-table__menu-btn, .aura-table__menu-btn[aria-expanded="true"] { opacity: 1; }
239
- .aura-table__menu-btn:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
239
+ .aura-table__menu-btn:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
240
240
  @media (hover: none) { .aura-table__menu-btn { opacity: 1; } }
241
241
 
242
242
  /* Drag to reorder */
@@ -273,7 +273,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
273
273
  border: 0; border-radius: var(--aura-radius-sm); background: transparent;
274
274
  color: inherit; font: inherit; text-align: left; cursor: pointer; white-space: nowrap;
275
275
  }
276
- .aura-menu__item:hover, .aura-menu__item:focus { background: var(--aura-bg-surface-hover); outline: none; }
276
+ .aura-menu__item:hover, .aura-menu__item:focus { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: none; }
277
277
  .aura-menu__item:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
278
278
  .aura-menu__item:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
279
279
  /* 5.10: a disabled item is dimmed but focusable; its reason stays at full strength (it is the information). */
@@ -328,7 +328,7 @@ a.aura-icon-btn { text-decoration: none; }
328
328
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-primary);
329
329
  cursor: pointer; transition: background var(--aura-duration-fast) var(--aura-ease);
330
330
  }
331
- .aura-icon-btn:hover { background: var(--aura-bg-surface-hover); }
331
+ .aura-icon-btn:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
332
332
  .aura-icon-btn--danger { color: var(--aura-fg-danger); }
333
333
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
334
334
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
@@ -507,7 +507,7 @@ a.aura-icon-btn { text-decoration: none; }
507
507
  .aura-field.is-disabled .aura-input__control { cursor: not-allowed; }
508
508
  /* A read-only text field. Only an input: `:read-only` also matches any element that isn't editable — a
509
509
  * Select's trigger <button> — which painted every custom Select with the disabled ground (5.16.1, Chamber-OS 109). */
510
- .aura-input:has(input.aura-input__control:read-only) { background: var(--aura-bg-input-disabled); }
510
+ .aura-input:has(input.aura-input__control:read-only) { background: var(--aura-bg-input-disabled); --aura-hover: var(--aura-bg-canvas-hover); } /* 5.33: a DatePicker's toggle shows its hover on the grey ground */
511
511
  /* A read-only Textarea looks like a read-only TextField (it is its own .aura-input, so the rule above can't reach it). */
512
512
  .aura-textarea:read-only:not(:disabled) { background: var(--aura-bg-input-disabled); }
513
513
 
@@ -530,7 +530,7 @@ a.aura-icon-btn { text-decoration: none; }
530
530
  .aura-select.is-open .aura-select__chevron { transform: rotate(180deg); }
531
531
  /* 5.19 (Chamber-OS 114): a read-only Select looks like a read-only TextField — the same ground, no chevron (it doesn't
532
532
  * open), no pointer; the value keeps full contrast. */
533
- .aura-select.is-readonly { background: var(--aura-bg-input-disabled); }
533
+ .aura-select.is-readonly { background: var(--aura-bg-input-disabled); --aura-hover: var(--aura-bg-canvas-hover); }
534
534
  .aura-select.is-readonly .aura-input__control { cursor: default; padding-right: var(--aura-space-3); }
535
535
 
536
536
  .aura-radio-group > legend { margin-bottom: 6px; }
@@ -644,7 +644,7 @@ a.aura-icon-btn { text-decoration: none; }
644
644
  .aura-toast__action::after { content: ''; position: absolute; top: 50%; left: 50%; width: max(100%, var(--aura-touch-target)); height: max(100%, var(--aura-touch-target)); transform: translate(-50%, -50%); }
645
645
  .aura-toast__text a { padding-block: 2px; }
646
646
  }
647
- .aura-toast__action:hover { background: var(--aura-bg-surface-hover); }
647
+ .aura-toast__action:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
648
648
  .aura-toast__action:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
649
649
  .aura-toast__close { margin-top: -6px; margin-bottom: -6px; }
650
650
 
@@ -784,7 +784,17 @@ a.aura-tab { text-decoration: none; }
784
784
  text-decoration: none; text-align: left; cursor: pointer;
785
785
  transition: background var(--aura-duration-fast) var(--aura-ease), color var(--aura-duration-fast) var(--aura-ease);
786
786
  }
787
- .aura-nav__item:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
787
+ .aura-nav__item:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
788
+ /* 5.33 (DxT Monitor #5): hover fills read --aura-hover, else aura-bg-surface-hover. On the canvas — AppShell, which
789
+ * is canvas, and SideNav — the surface hover (zinc-50 in light, the canvas itself) didn't show, so there it is
790
+ * aura-bg-canvas-hover; white surfaces inside set it back. A :root override of aura-bg-surface-hover still applies
791
+ * on surfaces; override aura-bg-canvas-hover for the canvas. */
792
+ .aura-shell, .aura-nav { --aura-hover: var(--aura-bg-canvas-hover); }
793
+ .aura-card, .aura-surface, .aura-stat, .aura-tbl-wrap, .aura-table, .aura-shell__bar, .aura-bottomnav, .aura-actionbar,
794
+ .aura-input, .aura-upload, .aura-upload__list, .aura-tag, .aura-dialog, .aura-drawer, .aura-popover, .aura-combo__popover,
795
+ .aura-cal__popover, .aura-menu, .aura-toast, .aura-command { --aura-hover: var(--aura-bg-surface-hover); }
796
+ /* Canvas-coloured bands inside those surfaces: SideNav in the drawer, the DataTable header, picker corner and totals. */
797
+ .aura-drawer .aura-nav, .aura-table__head, .aura-table__picker, .aura-table__total { --aura-hover: var(--aura-bg-canvas-hover); }
788
798
  .aura-nav__item.is-active { background: var(--aura-bg-selected); color: var(--aura-fg-primary); }
789
799
  .aura-nav__item.is-active .aura-icon { color: var(--aura-fg-accent); }
790
800
  .aura-nav__item:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: -2px; }
@@ -896,7 +906,7 @@ a.aura-tab { text-decoration: none; }
896
906
  }
897
907
  .aura-combo__toggle { right: 6px; }
898
908
  .aura-combo__clear { right: calc(6px + var(--aura-control-sm) - 4px); }
899
- .aura-combo__clear:hover, .aura-combo__toggle:hover, .aura-date__toggle:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
909
+ .aura-combo__clear:hover, .aura-combo__toggle:hover, .aura-date__toggle:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
900
910
  .aura-combo__toggle .aura-icon { transition: transform var(--aura-duration-fast) var(--aura-ease); }
901
911
  .aura-combo.is-open .aura-combo__toggle .aura-icon { transform: rotate(180deg); }
902
912
  .aura-date__toggle:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
@@ -912,7 +922,7 @@ a.aura-tab { text-decoration: none; }
912
922
  border-radius: var(--aura-radius-sm); cursor: pointer;
913
923
  }
914
924
  .aura-combo__option > .aura-icon { color: var(--aura-fg-secondary); }
915
- .aura-combo__option.is-active { background: var(--aura-bg-surface-hover); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
925
+ .aura-combo__option.is-active { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
916
926
  .aura-combo__option.is-selected { font-weight: 500; }
917
927
  .aura-combo__option.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
918
928
  .aura-combo__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
@@ -945,7 +955,7 @@ a.aura-tab { text-decoration: none; }
945
955
  border: 0; border-radius: var(--aura-radius-sm); background: transparent; color: var(--aura-fg-primary);
946
956
  font: inherit; font-size: 14px; font-weight: 600; cursor: pointer;
947
957
  }
948
- .aura-cal__title:hover { background: var(--aura-bg-surface-hover); }
958
+ .aura-cal__title:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
949
959
  .aura-cal__title:focus-visible, .aura-cal__link:focus-visible, .aura-cal__year:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
950
960
  .aura-cal__grid { border-collapse: separate; border-spacing: 0 2px; width: 100%; }
951
961
  .aura-cal__grid th { height: 28px; padding: 0; font-size: 12px; font-weight: 500; color: var(--aura-fg-secondary); }
@@ -954,7 +964,7 @@ a.aura-tab { text-decoration: none; }
954
964
  width: var(--aura-cal-cell); height: var(--aura-cal-cell); padding: 0; border: 0; border-radius: var(--aura-radius-full);
955
965
  background: transparent; color: var(--aura-fg-primary); font: inherit; font-size: 13px; font-variant-numeric: tabular-nums; cursor: pointer;
956
966
  }
957
- .aura-cal__day:hover { background: var(--aura-bg-surface-hover); }
967
+ .aura-cal__day:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
958
968
  .aura-cal__day.is-outside { color: var(--aura-fg-tertiary); }
959
969
  .aura-cal__day.is-today { box-shadow: inset 0 0 0 1px var(--aura-border-control); font-weight: 600; }
960
970
  .aura-cal__day.is-selected { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); box-shadow: none; }
@@ -969,14 +979,14 @@ a.aura-tab { text-decoration: none; }
969
979
  height: 40px; border: 0; border-radius: var(--aura-radius-sm); background: transparent; color: var(--aura-fg-primary);
970
980
  font: inherit; font-size: 13px; font-variant-numeric: tabular-nums; cursor: pointer;
971
981
  }
972
- .aura-cal__year:hover { background: var(--aura-bg-surface-hover); }
982
+ .aura-cal__year:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
973
983
  .aura-cal__year.is-selected { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); }
974
984
  .aura-cal__foot { display: flex; justify-content: space-between; margin-top: var(--aura-space-2); padding-top: var(--aura-space-2); border-top: 1px solid var(--aura-border-subtle); }
975
985
  .aura-cal__link {
976
986
  height: var(--aura-control-sm); padding: 0 var(--aura-space-2); border: 0; border-radius: var(--aura-radius-sm);
977
987
  background: transparent; color: var(--aura-fg-accent); font: inherit; font-size: 13px; font-weight: 500; cursor: pointer;
978
988
  }
979
- .aura-cal__link:hover { background: var(--aura-bg-surface-hover); }
989
+ .aura-cal__link:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
980
990
  .aura-cal__link:disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
981
991
 
982
992
  /* ---------- Drawer ---------- */
@@ -1008,6 +1018,12 @@ a.aura-tab { text-decoration: none; }
1008
1018
  .aura-drawer--nav .aura-nav { width: 100%; border-right: 0; }
1009
1019
  /* 5.32: the phone drawer's close button (32px, 8px in) sits over the header's end: keep the brand clear of it. */
1010
1020
  .aura-drawer--nav .aura-nav__header { padding-inline-end: 48px; }
1021
+ /* 5.33: the drawer's close button is 44px on phones and touch screens (touchHeight), so the header leaves 60px. */
1022
+ @media (max-width: 639.98px), (pointer: coarse) { .aura-drawer--nav .aura-nav__header { padding-inline-end: 60px; } }
1023
+ /* 5.33 (DxT Monitor #8): in the phone drawer a divided header takes the top bar's height (its line meets the bar's
1024
+ * line beside it), its content centred; the close button is centred on it. The desktop sidebar keeps 72px. */
1025
+ .aura-drawer--nav .aura-nav--header-divider > .aura-nav__header { box-sizing: border-box; min-height: var(--aura-shell-bar-height, 56px); padding-top: 0; padding-bottom: 0; display: flex; align-items: center; }
1026
+ .aura-drawer--nav-divided .aura-drawer__head { top: 0; height: var(--aura-shell-bar-height, 56px); } /* a class from AppShell, not :has(), so older browsers centre it too */
1011
1027
  .aura-drawer__foot { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: var(--aura-space-3); padding: var(--aura-space-4) var(--aura-space-6); border-top: 1px solid var(--aura-border-default); }
1012
1028
  @media (prefers-reduced-motion: reduce) { .aura-drawer { animation: none; } }
1013
1029
 
@@ -1093,6 +1109,7 @@ a.aura-tab { text-decoration: none; }
1093
1109
  .aura-page-header__text { display: flex; flex-direction: column; gap: var(--aura-space-1); flex: 1 1 320px; min-width: 0; }
1094
1110
  .aura-page-header__eyebrow { margin: 0; font-family: var(--font-mono); font-size: 12px; line-height: 1.7; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1095
1111
  .aura-page-header__title { margin: 0; font-family: var(--font-display); font-size: 28px; line-height: 1.15; font-weight: 600; letter-spacing: -0.01em; color: var(--aura-fg-primary); overflow-wrap: anywhere; }
1112
+ .aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
1096
1113
  .aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1097
1114
  .aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
1098
1115
  @media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
@@ -1216,7 +1233,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1216
1233
  }
1217
1234
  .aura-tag__text { overflow: hidden; text-overflow: ellipsis; max-width: 24ch; }
1218
1235
  .aura-tag.is-selectable { cursor: pointer; transition: background var(--aura-duration-fast) var(--aura-ease), border-color var(--aura-duration-fast) var(--aura-ease); }
1219
- .aura-tag.is-selectable:hover { background: var(--aura-bg-surface-hover); }
1236
+ .aura-tag.is-selectable:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1220
1237
  .aura-tag.is-selected { background: var(--aura-bg-selected); border-color: var(--aura-fg-accent); color: var(--aura-fg-primary); }
1221
1238
  .aura-tag.is-selectable:focus-visible, .aura-tag__remove:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1222
1239
  .aura-tag.is-selectable:disabled, .aura-tag.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
@@ -1224,7 +1241,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1224
1241
  display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-right: -6px; padding: 0; border: 0; border-radius: var(--aura-radius-full);
1225
1242
  background: transparent; color: var(--aura-fg-secondary); cursor: pointer;
1226
1243
  }
1227
- .aura-tag__remove:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1244
+ .aura-tag__remove:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1228
1245
 
1229
1246
  /* ---------- Progress ---------- */
1230
1247
  .aura-progress { display: flex; flex-direction: column; gap: 6px; font-family: var(--font-sans); }
@@ -1277,7 +1294,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1277
1294
  display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; padding: 0 var(--aura-space-2); box-sizing: border-box;
1278
1295
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-primary); font: inherit; font-variant-numeric: tabular-nums; text-decoration: none; cursor: pointer;
1279
1296
  }
1280
- .aura-page:hover { background: var(--aura-bg-surface-hover); }
1297
+ .aura-page:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1281
1298
  .aura-page.is-current { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); font-weight: 600; }
1282
1299
  .aura-page:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1283
1300
  .aura-pagination__gap { min-width: 24px; text-align: center; color: var(--aura-fg-secondary); }
@@ -1295,7 +1312,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1295
1312
  display: flex; align-items: center; gap: var(--aura-space-3); width: 100%; min-height: 48px; padding: var(--aura-space-3) var(--aura-space-1); box-sizing: border-box;
1296
1313
  border: 0; background: transparent; color: var(--aura-fg-primary); font: inherit; text-align: left; cursor: pointer;
1297
1314
  }
1298
- .aura-accordion__heading > button:hover { background: var(--aura-bg-surface-hover); }
1315
+ .aura-accordion__heading > button:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1299
1316
  .aura-accordion__heading > button:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); border-radius: var(--aura-radius-sm); }
1300
1317
  .aura-accordion__heading > button:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1301
1318
  .aura-accordion__title { flex: 1; display: flex; flex-direction: column; gap: 2px; }
@@ -1336,7 +1353,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1336
1353
  display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0;
1337
1354
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-secondary); cursor: pointer;
1338
1355
  }
1339
- .aura-combo__chip-remove:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1356
+ .aura-combo__chip-remove:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1340
1357
  .aura-combo__chip-remove .aura-icon { width: 14px; height: 14px; }
1341
1358
 
1342
1359
  /* ---------- NumberField ---------- */
@@ -1352,7 +1369,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1352
1369
  }
1353
1370
  .aura-number__step + .aura-number__step { border-left: 1px solid var(--aura-border-default); }
1354
1371
  .aura-number__step:last-child { border-radius: 0 calc(var(--aura-radius-md) - 1px) calc(var(--aura-radius-md) - 1px) 0; }
1355
- .aura-number__step:hover:not(:disabled) { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1372
+ .aura-number__step:hover:not(:disabled) { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1356
1373
  .aura-number__step:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1357
1374
 
1358
1375
  /* ---------- Stepper ---------- */
@@ -1599,7 +1616,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1599
1616
  border: 0; background: transparent; padding: 4px var(--aura-space-2); border-radius: var(--aura-radius-sm);
1600
1617
  font: inherit; font-size: 13px; font-weight: 500; color: var(--aura-fg-accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px;
1601
1618
  }
1602
- .aura-filterbar__clear:hover { background: var(--aura-bg-surface-hover); }
1619
+ .aura-filterbar__clear:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1603
1620
  .aura-filterbar__clear:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1604
1621
  @media (max-width: 767.98px) {
1605
1622
  .aura-filterbar__search { flex-basis: 100%; max-width: none; }
@@ -1684,7 +1701,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1684
1701
  .aura-command__heading { padding: var(--aura-space-2) var(--aura-space-2) var(--aura-space-1); font-family: var(--font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--aura-fg-secondary); }
1685
1702
  .aura-command__item { display: flex; align-items: center; gap: var(--aura-space-3); min-height: 40px; padding: 6px var(--aura-space-2); border-radius: var(--aura-radius-sm); cursor: pointer; font-size: 14px; }
1686
1703
  .aura-command__item > .aura-icon { color: var(--aura-fg-secondary); }
1687
- .aura-command__item.is-active { background: var(--aura-bg-surface-hover); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1704
+ .aura-command__item.is-active { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1688
1705
  .aura-command__item.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1689
1706
  .aura-command__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
1690
1707
  .aura-command__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -72,10 +72,10 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
72
72
  .aura-btn--primary:hover { background: var(--aura-button-primary-bg-hover); }
73
73
 
74
74
  .aura-btn--secondary { border: 1px solid var(--aura-button-secondary-border); color: var(--aura-fg-primary); }
75
- .aura-btn--secondary:hover { background: var(--aura-bg-surface-hover); }
75
+ .aura-btn--secondary:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
76
76
  /* Destructive: filled for the confirm step, outline beside other actions. Loading keeps the colour (busy, not unavailable). */
77
77
  .aura-btn--ghost { color: var(--aura-fg-primary); }
78
- .aura-btn--ghost:hover { background: var(--aura-bg-surface-hover); }
78
+ .aura-btn--ghost:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
79
79
  /* size="sm" (4.16): 32px for toolbars, table rows and card footers. On touch the pill stays 32px and a transparent
80
80
  * ::after grows the hit area to 44px, as IconButton does. */
81
81
  .aura-btn--sm { height: var(--aura-button-height-sm); padding: 0 var(--aura-space-3); gap: 6px; }
@@ -130,7 +130,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
130
130
  font-size: 13px;
131
131
  }
132
132
  .aura-table__row:last-child { border-bottom: 0; }
133
- .aura-table__row:hover { background: var(--aura-bg-surface-hover); }
133
+ .aura-table__row:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
134
134
  .aura-table__row.is-actionable { cursor: pointer; }
135
135
  .aura-table__row--skeleton:hover { background: var(--aura-bg-surface); }
136
136
  .aura-table__row--skeleton .aura-table__td { display: flex; align-items: center; }
@@ -238,7 +238,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
238
238
  }
239
239
  .aura-table__th:hover .aura-table__menu-btn, .aura-table__th:focus-within .aura-table__menu-btn,
240
240
  .aura-table__th:focus .aura-table__menu-btn, .aura-table__menu-btn[aria-expanded="true"] { opacity: 1; }
241
- .aura-table__menu-btn:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
241
+ .aura-table__menu-btn:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
242
242
  @media (hover: none) { .aura-table__menu-btn { opacity: 1; } }
243
243
 
244
244
  /* Drag to reorder */
@@ -275,7 +275,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
275
275
  border: 0; border-radius: var(--aura-radius-sm); background: transparent;
276
276
  color: inherit; font: inherit; text-align: left; cursor: pointer; white-space: nowrap;
277
277
  }
278
- .aura-menu__item:hover, .aura-menu__item:focus { background: var(--aura-bg-surface-hover); outline: none; }
278
+ .aura-menu__item:hover, .aura-menu__item:focus { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: none; }
279
279
  .aura-menu__item:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
280
280
  .aura-menu__item:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
281
281
  /* 5.10: a disabled item is dimmed but focusable; its reason stays at full strength (it is the information). */
@@ -330,7 +330,7 @@ a.aura-icon-btn { text-decoration: none; }
330
330
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-primary);
331
331
  cursor: pointer; transition: background var(--aura-duration-fast) var(--aura-ease);
332
332
  }
333
- .aura-icon-btn:hover { background: var(--aura-bg-surface-hover); }
333
+ .aura-icon-btn:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
334
334
  .aura-icon-btn--danger { color: var(--aura-fg-danger); }
335
335
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
336
336
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
@@ -509,7 +509,7 @@ a.aura-icon-btn { text-decoration: none; }
509
509
  .aura-field.is-disabled .aura-input__control { cursor: not-allowed; }
510
510
  /* A read-only text field. Only an input: `:read-only` also matches any element that isn't editable — a
511
511
  * Select's trigger <button> — which painted every custom Select with the disabled ground (5.16.1, Chamber-OS 109). */
512
- .aura-input:has(input.aura-input__control:read-only) { background: var(--aura-bg-input-disabled); }
512
+ .aura-input:has(input.aura-input__control:read-only) { background: var(--aura-bg-input-disabled); --aura-hover: var(--aura-bg-canvas-hover); } /* 5.33: a DatePicker's toggle shows its hover on the grey ground */
513
513
  /* A read-only Textarea looks like a read-only TextField (it is its own .aura-input, so the rule above can't reach it). */
514
514
  .aura-textarea:read-only:not(:disabled) { background: var(--aura-bg-input-disabled); }
515
515
 
@@ -532,7 +532,7 @@ a.aura-icon-btn { text-decoration: none; }
532
532
  .aura-select.is-open .aura-select__chevron { transform: rotate(180deg); }
533
533
  /* 5.19 (Chamber-OS 114): a read-only Select looks like a read-only TextField — the same ground, no chevron (it doesn't
534
534
  * open), no pointer; the value keeps full contrast. */
535
- .aura-select.is-readonly { background: var(--aura-bg-input-disabled); }
535
+ .aura-select.is-readonly { background: var(--aura-bg-input-disabled); --aura-hover: var(--aura-bg-canvas-hover); }
536
536
  .aura-select.is-readonly .aura-input__control { cursor: default; padding-right: var(--aura-space-3); }
537
537
 
538
538
  .aura-radio-group > legend { margin-bottom: 6px; }
@@ -646,7 +646,7 @@ a.aura-icon-btn { text-decoration: none; }
646
646
  .aura-toast__action::after { content: ''; position: absolute; top: 50%; left: 50%; width: max(100%, var(--aura-touch-target)); height: max(100%, var(--aura-touch-target)); transform: translate(-50%, -50%); }
647
647
  .aura-toast__text a { padding-block: 2px; }
648
648
  }
649
- .aura-toast__action:hover { background: var(--aura-bg-surface-hover); }
649
+ .aura-toast__action:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
650
650
  .aura-toast__action:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
651
651
  .aura-toast__close { margin-top: -6px; margin-bottom: -6px; }
652
652
 
@@ -786,7 +786,17 @@ a.aura-tab { text-decoration: none; }
786
786
  text-decoration: none; text-align: left; cursor: pointer;
787
787
  transition: background var(--aura-duration-fast) var(--aura-ease), color var(--aura-duration-fast) var(--aura-ease);
788
788
  }
789
- .aura-nav__item:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
789
+ .aura-nav__item:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
790
+ /* 5.33 (DxT Monitor #5): hover fills read --aura-hover, else aura-bg-surface-hover. On the canvas — AppShell, which
791
+ * is canvas, and SideNav — the surface hover (zinc-50 in light, the canvas itself) didn't show, so there it is
792
+ * aura-bg-canvas-hover; white surfaces inside set it back. A :root override of aura-bg-surface-hover still applies
793
+ * on surfaces; override aura-bg-canvas-hover for the canvas. */
794
+ .aura-shell, .aura-nav { --aura-hover: var(--aura-bg-canvas-hover); }
795
+ .aura-card, .aura-surface, .aura-stat, .aura-tbl-wrap, .aura-table, .aura-shell__bar, .aura-bottomnav, .aura-actionbar,
796
+ .aura-input, .aura-upload, .aura-upload__list, .aura-tag, .aura-dialog, .aura-drawer, .aura-popover, .aura-combo__popover,
797
+ .aura-cal__popover, .aura-menu, .aura-toast, .aura-command { --aura-hover: var(--aura-bg-surface-hover); }
798
+ /* Canvas-coloured bands inside those surfaces: SideNav in the drawer, the DataTable header, picker corner and totals. */
799
+ .aura-drawer .aura-nav, .aura-table__head, .aura-table__picker, .aura-table__total { --aura-hover: var(--aura-bg-canvas-hover); }
790
800
  .aura-nav__item.is-active { background: var(--aura-bg-selected); color: var(--aura-fg-primary); }
791
801
  .aura-nav__item.is-active .aura-icon { color: var(--aura-fg-accent); }
792
802
  .aura-nav__item:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: -2px; }
@@ -898,7 +908,7 @@ a.aura-tab { text-decoration: none; }
898
908
  }
899
909
  .aura-combo__toggle { right: 6px; }
900
910
  .aura-combo__clear { right: calc(6px + var(--aura-control-sm) - 4px); }
901
- .aura-combo__clear:hover, .aura-combo__toggle:hover, .aura-date__toggle:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
911
+ .aura-combo__clear:hover, .aura-combo__toggle:hover, .aura-date__toggle:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
902
912
  .aura-combo__toggle .aura-icon { transition: transform var(--aura-duration-fast) var(--aura-ease); }
903
913
  .aura-combo.is-open .aura-combo__toggle .aura-icon { transform: rotate(180deg); }
904
914
  .aura-date__toggle:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
@@ -914,7 +924,7 @@ a.aura-tab { text-decoration: none; }
914
924
  border-radius: var(--aura-radius-sm); cursor: pointer;
915
925
  }
916
926
  .aura-combo__option > .aura-icon { color: var(--aura-fg-secondary); }
917
- .aura-combo__option.is-active { background: var(--aura-bg-surface-hover); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
927
+ .aura-combo__option.is-active { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
918
928
  .aura-combo__option.is-selected { font-weight: 500; }
919
929
  .aura-combo__option.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
920
930
  .aura-combo__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
@@ -947,7 +957,7 @@ a.aura-tab { text-decoration: none; }
947
957
  border: 0; border-radius: var(--aura-radius-sm); background: transparent; color: var(--aura-fg-primary);
948
958
  font: inherit; font-size: 14px; font-weight: 600; cursor: pointer;
949
959
  }
950
- .aura-cal__title:hover { background: var(--aura-bg-surface-hover); }
960
+ .aura-cal__title:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
951
961
  .aura-cal__title:focus-visible, .aura-cal__link:focus-visible, .aura-cal__year:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 0; }
952
962
  .aura-cal__grid { border-collapse: separate; border-spacing: 0 2px; width: 100%; }
953
963
  .aura-cal__grid th { height: 28px; padding: 0; font-size: 12px; font-weight: 500; color: var(--aura-fg-secondary); }
@@ -956,7 +966,7 @@ a.aura-tab { text-decoration: none; }
956
966
  width: var(--aura-cal-cell); height: var(--aura-cal-cell); padding: 0; border: 0; border-radius: var(--aura-radius-full);
957
967
  background: transparent; color: var(--aura-fg-primary); font: inherit; font-size: 13px; font-variant-numeric: tabular-nums; cursor: pointer;
958
968
  }
959
- .aura-cal__day:hover { background: var(--aura-bg-surface-hover); }
969
+ .aura-cal__day:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
960
970
  .aura-cal__day.is-outside { color: var(--aura-fg-tertiary); }
961
971
  .aura-cal__day.is-today { box-shadow: inset 0 0 0 1px var(--aura-border-control); font-weight: 600; }
962
972
  .aura-cal__day.is-selected { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); box-shadow: none; }
@@ -971,14 +981,14 @@ a.aura-tab { text-decoration: none; }
971
981
  height: 40px; border: 0; border-radius: var(--aura-radius-sm); background: transparent; color: var(--aura-fg-primary);
972
982
  font: inherit; font-size: 13px; font-variant-numeric: tabular-nums; cursor: pointer;
973
983
  }
974
- .aura-cal__year:hover { background: var(--aura-bg-surface-hover); }
984
+ .aura-cal__year:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
975
985
  .aura-cal__year.is-selected { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); }
976
986
  .aura-cal__foot { display: flex; justify-content: space-between; margin-top: var(--aura-space-2); padding-top: var(--aura-space-2); border-top: 1px solid var(--aura-border-subtle); }
977
987
  .aura-cal__link {
978
988
  height: var(--aura-control-sm); padding: 0 var(--aura-space-2); border: 0; border-radius: var(--aura-radius-sm);
979
989
  background: transparent; color: var(--aura-fg-accent); font: inherit; font-size: 13px; font-weight: 500; cursor: pointer;
980
990
  }
981
- .aura-cal__link:hover { background: var(--aura-bg-surface-hover); }
991
+ .aura-cal__link:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
982
992
  .aura-cal__link:disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
983
993
 
984
994
  /* ---------- Drawer ---------- */
@@ -1010,6 +1020,12 @@ a.aura-tab { text-decoration: none; }
1010
1020
  .aura-drawer--nav .aura-nav { width: 100%; border-right: 0; }
1011
1021
  /* 5.32: the phone drawer's close button (32px, 8px in) sits over the header's end: keep the brand clear of it. */
1012
1022
  .aura-drawer--nav .aura-nav__header { padding-inline-end: 48px; }
1023
+ /* 5.33: the drawer's close button is 44px on phones and touch screens (touchHeight), so the header leaves 60px. */
1024
+ @media (max-width: 639.98px), (pointer: coarse) { .aura-drawer--nav .aura-nav__header { padding-inline-end: 60px; } }
1025
+ /* 5.33 (DxT Monitor #8): in the phone drawer a divided header takes the top bar's height (its line meets the bar's
1026
+ * line beside it), its content centred; the close button is centred on it. The desktop sidebar keeps 72px. */
1027
+ .aura-drawer--nav .aura-nav--header-divider > .aura-nav__header { box-sizing: border-box; min-height: var(--aura-shell-bar-height, 56px); padding-top: 0; padding-bottom: 0; display: flex; align-items: center; }
1028
+ .aura-drawer--nav-divided .aura-drawer__head { top: 0; height: var(--aura-shell-bar-height, 56px); } /* a class from AppShell, not :has(), so older browsers centre it too */
1013
1029
  .aura-drawer__foot { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: var(--aura-space-3); padding: var(--aura-space-4) var(--aura-space-6); border-top: 1px solid var(--aura-border-default); }
1014
1030
  @media (prefers-reduced-motion: reduce) { .aura-drawer { animation: none; } }
1015
1031
 
@@ -1095,6 +1111,7 @@ a.aura-tab { text-decoration: none; }
1095
1111
  .aura-page-header__text { display: flex; flex-direction: column; gap: var(--aura-space-1); flex: 1 1 320px; min-width: 0; }
1096
1112
  .aura-page-header__eyebrow { margin: 0; font-family: var(--font-mono); font-size: 12px; line-height: 1.7; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1097
1113
  .aura-page-header__title { margin: 0; font-family: var(--font-display); font-size: 28px; line-height: 1.15; font-weight: 600; letter-spacing: -0.01em; color: var(--aura-fg-primary); overflow-wrap: anywhere; }
1114
+ .aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
1098
1115
  .aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1099
1116
  .aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
1100
1117
  @media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
@@ -1218,7 +1235,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1218
1235
  }
1219
1236
  .aura-tag__text { overflow: hidden; text-overflow: ellipsis; max-width: 24ch; }
1220
1237
  .aura-tag.is-selectable { cursor: pointer; transition: background var(--aura-duration-fast) var(--aura-ease), border-color var(--aura-duration-fast) var(--aura-ease); }
1221
- .aura-tag.is-selectable:hover { background: var(--aura-bg-surface-hover); }
1238
+ .aura-tag.is-selectable:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1222
1239
  .aura-tag.is-selected { background: var(--aura-bg-selected); border-color: var(--aura-fg-accent); color: var(--aura-fg-primary); }
1223
1240
  .aura-tag.is-selectable:focus-visible, .aura-tag__remove:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1224
1241
  .aura-tag.is-selectable:disabled, .aura-tag.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
@@ -1226,7 +1243,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1226
1243
  display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-right: -6px; padding: 0; border: 0; border-radius: var(--aura-radius-full);
1227
1244
  background: transparent; color: var(--aura-fg-secondary); cursor: pointer;
1228
1245
  }
1229
- .aura-tag__remove:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1246
+ .aura-tag__remove:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1230
1247
 
1231
1248
  /* ---------- Progress ---------- */
1232
1249
  .aura-progress { display: flex; flex-direction: column; gap: 6px; font-family: var(--font-sans); }
@@ -1279,7 +1296,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1279
1296
  display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; padding: 0 var(--aura-space-2); box-sizing: border-box;
1280
1297
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-primary); font: inherit; font-variant-numeric: tabular-nums; text-decoration: none; cursor: pointer;
1281
1298
  }
1282
- .aura-page:hover { background: var(--aura-bg-surface-hover); }
1299
+ .aura-page:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1283
1300
  .aura-page.is-current { background: var(--aura-control-checked-bg); color: var(--aura-control-checked-fg); font-weight: 600; }
1284
1301
  .aura-page:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1285
1302
  .aura-pagination__gap { min-width: 24px; text-align: center; color: var(--aura-fg-secondary); }
@@ -1297,7 +1314,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1297
1314
  display: flex; align-items: center; gap: var(--aura-space-3); width: 100%; min-height: 48px; padding: var(--aura-space-3) var(--aura-space-1); box-sizing: border-box;
1298
1315
  border: 0; background: transparent; color: var(--aura-fg-primary); font: inherit; text-align: left; cursor: pointer;
1299
1316
  }
1300
- .aura-accordion__heading > button:hover { background: var(--aura-bg-surface-hover); }
1317
+ .aura-accordion__heading > button:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1301
1318
  .aura-accordion__heading > button:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); border-radius: var(--aura-radius-sm); }
1302
1319
  .aura-accordion__heading > button:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1303
1320
  .aura-accordion__title { flex: 1; display: flex; flex-direction: column; gap: 2px; }
@@ -1338,7 +1355,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1338
1355
  display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0;
1339
1356
  border: 0; border-radius: var(--aura-radius-full); background: transparent; color: var(--aura-fg-secondary); cursor: pointer;
1340
1357
  }
1341
- .aura-combo__chip-remove:hover { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1358
+ .aura-combo__chip-remove:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1342
1359
  .aura-combo__chip-remove .aura-icon { width: 14px; height: 14px; }
1343
1360
 
1344
1361
  /* ---------- NumberField ---------- */
@@ -1354,7 +1371,7 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1354
1371
  }
1355
1372
  .aura-number__step + .aura-number__step { border-left: 1px solid var(--aura-border-default); }
1356
1373
  .aura-number__step:last-child { border-radius: 0 calc(var(--aura-radius-md) - 1px) calc(var(--aura-radius-md) - 1px) 0; }
1357
- .aura-number__step:hover:not(:disabled) { background: var(--aura-bg-surface-hover); color: var(--aura-fg-primary); }
1374
+ .aura-number__step:hover:not(:disabled) { background: var(--aura-hover, var(--aura-bg-surface-hover)); color: var(--aura-fg-primary); }
1358
1375
  .aura-number__step:disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1359
1376
 
1360
1377
  /* ---------- Stepper ---------- */
@@ -1601,7 +1618,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1601
1618
  border: 0; background: transparent; padding: 4px var(--aura-space-2); border-radius: var(--aura-radius-sm);
1602
1619
  font: inherit; font-size: 13px; font-weight: 500; color: var(--aura-fg-accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px;
1603
1620
  }
1604
- .aura-filterbar__clear:hover { background: var(--aura-bg-surface-hover); }
1621
+ .aura-filterbar__clear:hover { background: var(--aura-hover, var(--aura-bg-surface-hover)); }
1605
1622
  .aura-filterbar__clear:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1606
1623
  @media (max-width: 767.98px) {
1607
1624
  .aura-filterbar__search { flex-basis: 100%; max-width: none; }
@@ -1686,7 +1703,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1686
1703
  .aura-command__heading { padding: var(--aura-space-2) var(--aura-space-2) var(--aura-space-1); font-family: var(--font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--aura-fg-secondary); }
1687
1704
  .aura-command__item { display: flex; align-items: center; gap: var(--aura-space-3); min-height: 40px; padding: 6px var(--aura-space-2); border-radius: var(--aura-radius-sm); cursor: pointer; font-size: 14px; }
1688
1705
  .aura-command__item > .aura-icon { color: var(--aura-fg-secondary); }
1689
- .aura-command__item.is-active { background: var(--aura-bg-surface-hover); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1706
+ .aura-command__item.is-active { background: var(--aura-hover, var(--aura-bg-surface-hover)); outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1690
1707
  .aura-command__item.is-disabled { opacity: var(--aura-disabled-opacity); cursor: default; }
1691
1708
  .aura-command__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
1692
1709
  .aura-command__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.32.0",
3
+ "version": "5.33.0",
4
4
  "description": "AURA Design System — React components (Enterprise Standard, Human Creative). Thai-first: Buddhist-era dates, Thai collation.",
5
5
  "license": "MIT",
6
6
  "type": "module",