@nebutra/ui 0.2.2 → 2.0.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 (43) hide show
  1. package/dist/animate-in-BlvjVh2S.d.ts +250 -0
  2. package/dist/{canonical-CrO71UPO.d.ts → canonical-Bf4czR2u.d.ts} +225 -211
  3. package/dist/chat/index.d.ts +1 -0
  4. package/dist/chat/index.js +3 -0
  5. package/dist/chat/index.js.map +1 -0
  6. package/dist/components/index.d.ts +58 -123
  7. package/dist/components/index.js +504 -203
  8. package/dist/components/index.js.map +1 -1
  9. package/dist/editorial/index.d.ts +404 -0
  10. package/dist/editorial/index.js +868 -0
  11. package/dist/editorial/index.js.map +1 -0
  12. package/dist/icons/index.d.ts +1 -0
  13. package/dist/layout/index.d.ts +2 -2
  14. package/dist/layout/index.js +116 -26
  15. package/dist/layout/index.js.map +1 -1
  16. package/dist/layouts/index.d.ts +80 -2
  17. package/dist/layouts/index.js +13 -11
  18. package/dist/layouts/index.js.map +1 -1
  19. package/dist/patterns/index.d.ts +4 -5
  20. package/dist/patterns/index.js +221 -106
  21. package/dist/patterns/index.js.map +1 -1
  22. package/dist/primitives/canonical.d.ts +4 -3
  23. package/dist/primitives/canonical.js +609 -197
  24. package/dist/primitives/canonical.js.map +1 -1
  25. package/dist/primitives/index.d.ts +213 -21
  26. package/dist/primitives/index.js +2209 -1317
  27. package/dist/primitives/index.js.map +1 -1
  28. package/dist/tailwind.preset.d.ts +2 -2
  29. package/dist/tailwind.preset.js +1 -1
  30. package/dist/tailwind.preset.js.map +1 -1
  31. package/dist/typography/fonts.css +21 -26
  32. package/dist/typography/index.d.ts +4 -4
  33. package/dist/typography/index.js +1 -1
  34. package/dist/typography/index.js.map +1 -1
  35. package/dist/utils/auth-surfaces.d.ts +33 -0
  36. package/dist/utils/auth-surfaces.js +9 -0
  37. package/dist/utils/auth-surfaces.js.map +1 -0
  38. package/dist/utils/index.d.ts +33 -5
  39. package/dist/utils/index.js +15 -3
  40. package/dist/utils/index.js.map +1 -1
  41. package/package.json +43 -9
  42. package/src/styles/sources.css +10 -0
  43. package/src/typography/fonts.css +21 -26
@@ -30,7 +30,7 @@ function ArtifactShiftCard({
30
30
  "div",
31
31
  {
32
32
  className: cn(
33
- "group/card relative flex h-full min-h-[560px] flex-col overflow-hidden rounded-[var(--radius-panel)] border bg-background/90 transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[0_28px_90px_-64px_var(--foreground)] focus-within:-translate-y-1 focus-within:border-foreground/25",
33
+ "group/card relative flex h-full min-h-[560px] flex-col overflow-hidden rounded-[var(--radius-panel)] border bg-background/90 transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:shadow-ambient-lg focus-within:-translate-y-1 focus-within:border-foreground/25",
34
34
  className
35
35
  ),
36
36
  "data-taste": "nebutra-shift-card",
@@ -71,7 +71,7 @@ function ArtifactShiftCardPreview({
71
71
  {
72
72
  "aria-label": label,
73
73
  className: cn(
74
- "relative min-h-[260px] overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-background/80 p-3 shadow-[0_18px_60px_-46px_var(--foreground)] transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-1 group-hover/card:border-foreground/20 group-hover/card:shadow-[0_24px_80px_-52px_var(--foreground)] group-focus-within/card:-translate-y-1 group-focus-within/card:border-foreground/20 sm:p-4",
74
+ "relative min-h-[260px] overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-background/80 p-3 shadow-ambient-sm transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-1 group-hover/card:border-foreground/20 group-hover/card:shadow-ambient-md group-focus-within/card:-translate-y-1 group-focus-within/card:border-foreground/20 sm:p-4",
75
75
  className
76
76
  ),
77
77
  ...props,
@@ -122,7 +122,7 @@ function ArtifactShiftCardFooter({ className, ...props }) {
122
122
  "footer",
123
123
  {
124
124
  className: cn(
125
- "relative mt-4 flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-xl)] border border-border/60 bg-background/85 px-4 py-3 shadow-[0_14px_48px_-42px_var(--foreground)] backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-2 group-hover/card:border-foreground/20 group-hover/card:shadow-[0_22px_70px_-50px_var(--foreground)] group-focus-within/card:-translate-y-2 group-focus-within/card:border-foreground/20",
125
+ "relative mt-4 flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-xl)] border border-border/60 bg-background/85 px-4 py-3 shadow-ambient-sm backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-2 group-hover/card:border-foreground/20 group-hover/card:shadow-ambient-md group-focus-within/card:-translate-y-2 group-focus-within/card:border-foreground/20",
126
126
  className
127
127
  ),
128
128
  ...props
@@ -150,7 +150,7 @@ var CardRoot = React.forwardRef(
150
150
  {
151
151
  ref,
152
152
  className: cn(
153
- "rounded-[var(--radius-xl)] transition-[background-color,border-color,box-shadow,color] duration-200",
153
+ "rounded-[var(--radius-xl)] transition-[background-color,border-color,box-shadow,color] duration-micro",
154
154
  variantStyles[variant],
155
155
  paddingMap[padding],
156
156
  className
@@ -377,7 +377,7 @@ function DashboardCommandSurface({
377
377
  /* @__PURE__ */ jsxs("div", { className: "relative z-10 flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between", children: [
378
378
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
379
379
  status ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
380
- /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-green-9 shadow-[0_0_0_3px_var(--green-3)]" }),
380
+ /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-success shadow-[0_0_0_3px_hsl(var(--success)/0.18)]" }),
381
381
  /* @__PURE__ */ jsx("p", { className: "text-[11px] font-medium uppercase text-muted-foreground", children: status })
382
382
  ] }) : null,
383
383
  /* @__PURE__ */ jsx("h1", { className: "mt-2 text-2xl font-semibold tracking-normal text-card-foreground sm:text-[28px]", children: title }),
@@ -446,7 +446,7 @@ function DashboardMetricTile({
446
446
  {
447
447
  "data-pattern": "nebutra-dashboard-metric",
448
448
  className: cn(
449
- "group h-full rounded-[var(--radius-lg)] border border-border bg-muted/40 p-3 transition-colors duration-150",
449
+ "group h-full rounded-[var(--radius-lg)] border border-border bg-muted/40 p-3 transition-colors duration-micro",
450
450
  "hover:border-muted-foreground/30 hover:bg-muted/65",
451
451
  className
452
452
  ),
@@ -474,7 +474,7 @@ function DashboardMetricTile({
474
474
  );
475
475
  }
476
476
  var badgeVariants = cva(
477
- "inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-transparent",
477
+ "inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none border border-transparent",
478
478
  {
479
479
  variants: {
480
480
  variant: {
@@ -496,15 +496,26 @@ var badgeVariants = cva(
496
496
  purple: "bg-secondary text-secondary-foreground fill-current",
497
497
  "purple-subtle": "bg-secondary/40 text-secondary-foreground fill-current border-transparent",
498
498
  amber: "bg-warning text-warning-foreground fill-current",
499
- "amber-subtle": "bg-warning/15 text-warning fill-current border-transparent",
499
+ "amber-subtle": (
500
+ // --warning is a FILL (2.13:1). As ink on its own tint it measured 1.91:1.
501
+ // --warning-strong is the AA-safe amber foreground: 5.01:1 light / 6.20:1 dark.
502
+ "bg-warning/10 text-[hsl(var(--warning-strong))] fill-current border-transparent"
503
+ ),
500
504
  red: "bg-destructive text-destructive-foreground fill-current",
501
- "red-subtle": "bg-destructive/15 text-destructive fill-current border-transparent",
505
+ "red-subtle": (
506
+ // --destructive is fill-only in dark (2.01:1 as ink on its own tint).
507
+ // --destructive-strong: 4.58:1 light / 4.97:1 dark.
508
+ "bg-destructive/10 text-[hsl(var(--destructive-strong))] fill-current border-transparent"
509
+ ),
502
510
  pink: "bg-accent text-accent-foreground fill-current",
503
511
  "pink-subtle": "bg-accent/40 text-accent-foreground fill-current border-transparent",
504
512
  green: "bg-success text-success-foreground fill-current",
505
- "green-subtle": "bg-success/15 text-success fill-current border-transparent",
513
+ "green-subtle": (
514
+ // --success-strong closes the 4.49:1 light gap: 4.99:1 light / 4.83:1 dark.
515
+ "bg-success/10 text-[hsl(var(--success-strong))] fill-current border-transparent"
516
+ ),
506
517
  teal: "bg-info text-info-foreground fill-current",
507
- "teal-subtle": "bg-info/15 text-info fill-current border-transparent",
518
+ "teal-subtle": "bg-info/10 text-info fill-current border-transparent",
508
519
  inverted: "bg-foreground text-background fill-current",
509
520
  // Special visual treatments (intentional product design, not brand hex)
510
521
  trial: "bg-gradient-to-br from-trial-start to-trial-end text-primary-foreground fill-current",
@@ -691,17 +702,18 @@ var overlayZIndex = {
691
702
  };
692
703
  var overlayClassNames = {
693
704
  menuSurface: [
694
- "min-w-32 overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
705
+ "min-w-32 origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
695
706
  shadowClasses.xl,
696
- "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
697
- "data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0",
707
+ "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
708
+ "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0 data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0",
698
709
  "motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none"
699
710
  ].join(" "),
700
711
  tooltipSurface: [
701
- "overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
712
+ "origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
702
713
  shadowClasses.md,
703
- "transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
704
- "data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0",
714
+ "transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
715
+ "data-starting-style:scale-[0.97] data-starting-style:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0",
716
+ "data-[instant]:duration-0",
705
717
  "motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
706
718
  ].join(" ")};
707
719
 
@@ -791,6 +803,7 @@ var DropdownMenuContent = ({
791
803
  align,
792
804
  alignOffset,
793
805
  side,
806
+ style: { zIndex: overlayZIndex.popover },
794
807
  children: /* @__PURE__ */ jsx(
795
808
  Menu.Popup,
796
809
  {
@@ -854,9 +867,9 @@ var badgeToneToVariant = {
854
867
  };
855
868
  var cardClassName = cn(
856
869
  "group relative block rounded-[var(--radius-xl)] border border-border bg-card text-card-foreground p-5 text-left",
857
- "transition-[border-color,box-shadow,transform] duration-150 motion-reduce:transition-none motion-reduce:transform-none",
870
+ "transition-[border-color,box-shadow,transform] duration-micro motion-reduce:transition-none motion-reduce:transform-none",
858
871
  "hover:border-neutral-7 hover:shadow-sm hover:-translate-y-px motion-reduce:hover:translate-y-0",
859
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
872
+ "focus-visible:outline-none"
860
873
  );
861
874
  function GalleryCardActionsMenu({ actions, title }) {
862
875
  function stop(event) {
@@ -875,7 +888,7 @@ function GalleryCardActionsMenu({ actions, title }) {
875
888
  "inline-flex h-7 w-7 items-center justify-center rounded-[var(--radius-md)]",
876
889
  "text-muted-foreground transition-colors",
877
890
  "hover:bg-accent hover:text-accent-foreground",
878
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"
891
+ "focus-visible:outline-none"
879
892
  ),
880
893
  children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-4 w-4" })
881
894
  }
@@ -1023,7 +1036,6 @@ function renderIcon(icon) {
1023
1036
  }
1024
1037
  function KineticFeatureCard({
1025
1038
  icon,
1026
- eyebrow,
1027
1039
  title,
1028
1040
  description,
1029
1041
  children,
@@ -1035,7 +1047,7 @@ function KineticFeatureCard({
1035
1047
  "article",
1036
1048
  {
1037
1049
  className: cn(
1038
- "group/kinetic relative flex h-full min-h-[540px] flex-col overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/82 p-6 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_24px_90px_-70px_var(--foreground)] backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/94 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_34px_110px_-74px_var(--foreground)] focus-within:-translate-y-1 focus-within:border-foreground/25 sm:p-7",
1050
+ "group/kinetic relative flex h-full min-h-[540px] flex-col overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/82 p-6 shadow-glass-md backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/94 hover:shadow-glass-lg focus-within:-translate-y-1 focus-within:border-foreground/25 sm:p-7",
1039
1051
  className
1040
1052
  ),
1041
1053
  "data-taste": "nebutra-texture-cutout-card",
@@ -1045,20 +1057,12 @@ function KineticFeatureCard({
1045
1057
  "div",
1046
1058
  {
1047
1059
  "aria-hidden": "true",
1048
- className: "pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:18px_18px] opacity-[0.12]"
1049
- }
1050
- ),
1051
- /* @__PURE__ */ jsx(
1052
- "div",
1053
- {
1054
- "aria-hidden": "true",
1055
- className: "pointer-events-none absolute inset-x-0 top-0 h-40 bg-gradient-to-b from-primary/12 via-primary/5 to-transparent",
1060
+ className: "pointer-events-none absolute inset-x-0 top-0 h-40 bg-[radial-gradient(ellipse_at_top,hsl(var(--primary)/0.12),transparent_70%)]",
1056
1061
  style: { maskImage: "linear-gradient(to bottom, black 45%, transparent 100%)" }
1057
1062
  }
1058
1063
  ),
1059
- /* @__PURE__ */ jsx("div", { className: "absolute right-0 top-0 z-10 rounded-bl-[2rem] border-b border-l border-border/60 bg-muted/55 px-4 py-2 backdrop-blur-xl", children: /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground", children: eyebrow }) }),
1060
1064
  /* @__PURE__ */ jsxs("div", { className: "relative z-10 flex h-full flex-col", children: [
1061
- /* @__PURE__ */ jsx("div", { className: "mb-8 flex items-start justify-between gap-4 pr-16", children: renderedIcon && /* @__PURE__ */ jsx("div", { className: "grid size-14 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background/75 shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_16px_42px_-34px_var(--foreground)] transition-transform duration-500 group-hover/kinetic:-translate-y-1", children: renderedIcon }) }),
1065
+ /* @__PURE__ */ jsx("div", { className: "mb-8 flex items-start justify-between gap-4", children: renderedIcon && /* @__PURE__ */ jsx("div", { className: "grid size-14 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background/75 shadow-glass-sm transition-transform duration-500 group-hover/kinetic:-translate-y-1", children: renderedIcon }) }),
1062
1066
  /* @__PURE__ */ jsx(
1063
1067
  "h3",
1064
1068
  {
@@ -1085,7 +1089,7 @@ function KineticCodePreview({
1085
1089
  "div",
1086
1090
  {
1087
1091
  className: cn(
1088
- "relative overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-muted/30 shadow-[0_18px_70px_-56px_var(--foreground)] transition-[transform,border-color,box-shadow] duration-500 group-hover/kinetic:-translate-y-2 group-hover/kinetic:border-foreground/20 group-hover/kinetic:shadow-[0_26px_90px_-62px_var(--foreground)]",
1092
+ "relative overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-muted/30 shadow-ambient-md transition-[transform,border-color,box-shadow] duration-500 group-hover/kinetic:-translate-y-2 group-hover/kinetic:border-foreground/20 group-hover/kinetic:shadow-ambient-lg",
1089
1093
  className
1090
1094
  ),
1091
1095
  ...props,
@@ -1123,7 +1127,7 @@ function KineticConsoleFrame({
1123
1127
  "div",
1124
1128
  {
1125
1129
  className: cn(
1126
- "group/kinetic relative flex h-full min-h-[460px] w-full flex-col overflow-hidden rounded-[2rem] border border-border/65 bg-background/84 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_32px_120px_-88px_var(--foreground)] backdrop-blur-3xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_44px_140px_-90px_var(--foreground)]",
1130
+ "group/kinetic relative flex h-full min-h-[460px] w-full flex-col overflow-hidden rounded-[2rem] border border-border/65 bg-background/84 shadow-glass-md backdrop-blur-3xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-glass-lg",
1127
1131
  className
1128
1132
  ),
1129
1133
  "data-taste": "nebutra-terminal-animation",
@@ -1169,20 +1173,13 @@ function KineticMorphSurface({
1169
1173
  "div",
1170
1174
  {
1171
1175
  className: cn(
1172
- "group/kinetic relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/80 p-3 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_28px_110px_-82px_var(--foreground)] backdrop-blur-2xl transition-[border-color,box-shadow,background-color] duration-500 hover:border-foreground/20 hover:bg-background/92 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_36px_130px_-88px_var(--foreground)] sm:p-4 lg:p-5",
1176
+ "group/kinetic relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/80 p-3 shadow-glass-md backdrop-blur-2xl transition-[border-color,box-shadow,background-color] duration-500 hover:border-foreground/20 hover:bg-background/92 hover:shadow-glass-lg sm:p-4 lg:p-5",
1173
1177
  className
1174
1178
  ),
1175
1179
  "data-active-key": activeKey,
1176
1180
  "data-taste": "nebutra-morph-surface",
1177
1181
  ...props,
1178
1182
  children: [
1179
- /* @__PURE__ */ jsx(
1180
- "div",
1181
- {
1182
- "aria-hidden": "true",
1183
- className: "pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:20px_20px] opacity-[0.10]"
1184
- }
1185
- ),
1186
1183
  /* @__PURE__ */ jsx(
1187
1184
  "div",
1188
1185
  {
@@ -1206,7 +1203,7 @@ function KineticSignalMarquee({
1206
1203
  "div",
1207
1204
  {
1208
1205
  className: cn(
1209
- "group/kinetic relative mx-auto overflow-hidden rounded-[var(--radius-panel)] border border-border/55 bg-background/72 px-3 py-8 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_22px_90px_-76px_var(--foreground)] backdrop-blur-2xl sm:px-5",
1206
+ "group/kinetic relative mx-auto overflow-hidden rounded-[var(--radius-panel)] border border-border/55 bg-background/72 px-3 py-8 shadow-glass-md backdrop-blur-2xl sm:px-5",
1210
1207
  className
1211
1208
  ),
1212
1209
  "data-taste": "nebutra-provider-grid",
@@ -1256,19 +1253,12 @@ function KineticCommandBox({
1256
1253
  "div",
1257
1254
  {
1258
1255
  className: cn(
1259
- "group/kinetic relative flex flex-col items-stretch overflow-hidden rounded-[var(--radius-xl)] border border-border/65 bg-background/82 p-1.5 shadow-[inset_0_1px_0_rgb(255_255_255/0.5),0_20px_70px_-58px_var(--foreground)] backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/92 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.6),0_28px_90px_-62px_var(--foreground)] sm:flex-row sm:items-center",
1256
+ "group/kinetic relative flex flex-col items-stretch overflow-hidden rounded-[var(--radius-xl)] border border-border/65 bg-background/82 p-1.5 shadow-glass-sm backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/92 hover:shadow-glass-md sm:flex-row sm:items-center",
1260
1257
  className
1261
1258
  ),
1262
1259
  "data-taste": "nebutra-texture-command",
1263
1260
  ...props,
1264
1261
  children: [
1265
- /* @__PURE__ */ jsx(
1266
- "div",
1267
- {
1268
- "aria-hidden": "true",
1269
- className: "pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:16px_16px] opacity-[0.10]"
1270
- }
1271
- ),
1272
1262
  /* @__PURE__ */ jsxs("code", { className: "relative z-10 flex-1 overflow-x-auto whitespace-nowrap px-4 py-3.5 font-mono text-xs text-foreground sm:px-5 sm:text-sm md:text-base", children: [
1273
1263
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "$" }),
1274
1264
  " ",
@@ -1279,7 +1269,7 @@ function KineticCommandBox({
1279
1269
  {
1280
1270
  type: "button",
1281
1271
  onClick: handleCopy,
1282
- className: "relative z-10 mt-2 flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-[var(--radius-lg)] border border-primary/20 bg-foreground px-5 py-2.5 text-sm font-medium text-background shadow-[inset_0_1px_0_rgb(255_255_255/0.2)] transition-[transform,opacity] hover:-translate-y-px hover:opacity-90 sm:mt-0",
1272
+ className: "relative z-10 mt-2 flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-[var(--radius-lg)] border border-primary/20 bg-foreground px-5 py-2.5 text-sm font-medium text-background shadow-sheen transition-[transform,opacity] hover:-translate-y-px hover:opacity-90 sm:mt-0",
1283
1273
  children: [
1284
1274
  copied ? /* @__PURE__ */ jsx(Check, { className: "size-4" }) : /* @__PURE__ */ jsx(Copy, { className: "size-4" }),
1285
1275
  copied ? copiedLabel : copyLabel
@@ -1295,7 +1285,7 @@ function KineticStepRail({ className, children, ...props }) {
1295
1285
  "div",
1296
1286
  {
1297
1287
  className: cn(
1298
- "relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/78 p-6 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_24px_100px_-78px_var(--foreground)] backdrop-blur-2xl md:p-10",
1288
+ "relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/78 p-6 shadow-glass-md backdrop-blur-2xl md:p-10",
1299
1289
  className
1300
1290
  ),
1301
1291
  "data-taste": "nebutra-grid-beam",
@@ -1341,12 +1331,12 @@ function KineticStep({
1341
1331
  "article",
1342
1332
  {
1343
1333
  className: cn(
1344
- "group/kinetic relative flex h-full flex-col items-center rounded-[var(--radius-xl)] border border-border/60 bg-background/82 p-5 text-center shadow-[0_18px_70px_-58px_var(--foreground)] backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[0_28px_90px_-62px_var(--foreground)]",
1334
+ "group/kinetic relative flex h-full flex-col items-center rounded-[var(--radius-xl)] border border-border/60 bg-background/82 p-5 text-center shadow-ambient-md backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-ambient-lg",
1345
1335
  className
1346
1336
  ),
1347
1337
  ...props,
1348
1338
  children: [
1349
- /* @__PURE__ */ jsxs("div", { className: "relative mb-6 grid size-16 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_18px_56px_-42px_var(--foreground)]", children: [
1339
+ /* @__PURE__ */ jsxs("div", { className: "relative mb-6 grid size-16 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background shadow-glass-sm", children: [
1350
1340
  /* @__PURE__ */ jsx(
1351
1341
  "span",
1352
1342
  {
@@ -1407,8 +1397,8 @@ var buttonVariants = cva(
1407
1397
  "inline-flex items-center justify-center gap-2 whitespace-nowrap",
1408
1398
  "rounded-[var(--btn-default-radius,var(--radius-md))]",
1409
1399
  "text-[length:var(--control-font-size-md,0.875rem)] font-[number:var(--font-weight-medium,500)]",
1410
- "transition-colors duration-micro ease-out",
1411
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1400
+ "transition-[color,background-color,border-color,transform] duration-flow ease-[var(--ease-brand)]",
1401
+ "active:scale-[0.97] motion-reduce:active:scale-100 motion-reduce:transition-none",
1412
1402
  "disabled:pointer-events-none disabled:opacity-50",
1413
1403
  "aria-busy:cursor-wait"
1414
1404
  ].join(" "),
@@ -1435,8 +1425,30 @@ var buttonVariants = cva(
1435
1425
  },
1436
1426
  shape: {
1437
1427
  default: "",
1438
- square: "",
1439
- circle: ""
1428
+ // Radius from --btn-default-radius / --radius-md — brand-switchable.
1429
+ // Do not hardcode rounded-md here; a language must be able to retarget
1430
+ // the corner treatment of every icon trigger at once.
1431
+ square: "rounded-[var(--btn-default-radius,var(--radius-md))]",
1432
+ // Pill radius token, not Tailwind rounded-full — same 9999px default,
1433
+ // but a brand that ships a softer "circle" can override --radius-pill.
1434
+ circle: "rounded-[var(--radius-pill,9999px)]",
1435
+ pill: "rounded-[var(--radius-pill,9999px)]"
1436
+ },
1437
+ // Icon-only box size — orthogonal to `size` (which tunes text-button
1438
+ // height/padding/font together) and to `shape` (which picks the
1439
+ // corner treatment). Only takes effect combined with shape="square"
1440
+ // or shape="circle" (see compoundVariants below); every other
1441
+ // combination ignores it. 28/32/36 cover the icon-trigger sizes that
1442
+ // actually occur in the app — 24/40/48 are already reachable via
1443
+ // shape + size (tiny/default/lg). Heights read --control-height-icon-*
1444
+ // so density-aware Brand Packages can scale them with the ladder.
1445
+ iconSize: {
1446
+ sm: "",
1447
+ // 28px default
1448
+ md: "",
1449
+ // 32px default
1450
+ lg: ""
1451
+ // 36px default
1440
1452
  }
1441
1453
  },
1442
1454
  compoundVariants: [
@@ -1447,22 +1459,56 @@ var buttonVariants = cva(
1447
1459
  {
1448
1460
  shape: "circle",
1449
1461
  size: "tiny",
1450
- className: "w-[var(--control-height-tiny,1.5rem)] px-0 rounded-full"
1462
+ className: "w-[var(--control-height-tiny,1.5rem)] px-0"
1451
1463
  },
1452
1464
  {
1453
1465
  shape: "circle",
1454
1466
  size: "sm",
1455
- className: "w-[var(--control-height-sm,2rem)] px-0 rounded-full"
1467
+ className: "w-[var(--control-height-sm,2rem)] px-0"
1456
1468
  },
1457
1469
  {
1458
1470
  shape: "circle",
1459
1471
  size: "default",
1460
- className: "w-[var(--control-height-md,2.5rem)] px-0 rounded-full"
1472
+ className: "w-[var(--control-height-md,2.5rem)] px-0"
1461
1473
  },
1462
1474
  {
1463
1475
  shape: "circle",
1464
1476
  size: "lg",
1465
- className: "w-[var(--control-height-lg,3rem)] px-0 rounded-full"
1477
+ className: "w-[var(--control-height-lg,3rem)] px-0"
1478
+ },
1479
+ // iconSize wins over the size-driven box above — matched on shape +
1480
+ // iconSize only, so it applies regardless of whatever `size` was
1481
+ // passed (or left at its "default" fallback). Corner treatment stays
1482
+ // on the shape variant (token-backed); only the box is set here.
1483
+ {
1484
+ shape: "square",
1485
+ iconSize: "sm",
1486
+ className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
1487
+ },
1488
+ {
1489
+ shape: "square",
1490
+ iconSize: "md",
1491
+ className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
1492
+ },
1493
+ {
1494
+ shape: "square",
1495
+ iconSize: "lg",
1496
+ className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
1497
+ },
1498
+ {
1499
+ shape: "circle",
1500
+ iconSize: "sm",
1501
+ className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
1502
+ },
1503
+ {
1504
+ shape: "circle",
1505
+ iconSize: "md",
1506
+ className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
1507
+ },
1508
+ {
1509
+ shape: "circle",
1510
+ iconSize: "lg",
1511
+ className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
1466
1512
  }
1467
1513
  ],
1468
1514
  defaultVariants: {
@@ -1484,7 +1530,10 @@ function Spinner({ className }) {
1484
1530
  }
1485
1531
  );
1486
1532
  }
1487
- function getIconSizeClass(size) {
1533
+ function getIconSizeClass(size, iconSize) {
1534
+ if (iconSize === "sm") return "[&>svg]:size-3.5";
1535
+ if (iconSize === "md") return "[&>svg]:size-3.5";
1536
+ if (iconSize === "lg") return "[&>svg]:size-4";
1488
1537
  switch (size) {
1489
1538
  case "tiny":
1490
1539
  return "[&>svg]:size-3";
@@ -1499,7 +1548,10 @@ function getIconSizeClass(size) {
1499
1548
  return "[&>svg]:size-4";
1500
1549
  }
1501
1550
  }
1502
- function getSpinnerSizeClass(size) {
1551
+ function getSpinnerSizeClass(size, iconSize) {
1552
+ if (iconSize === "sm") return "size-3.5";
1553
+ if (iconSize === "md") return "size-3.5";
1554
+ if (iconSize === "lg") return "size-4";
1503
1555
  switch (size) {
1504
1556
  case "tiny":
1505
1557
  return "size-3";
@@ -1524,10 +1576,10 @@ function resolveShadowClass(shadow) {
1524
1576
  const level = shadow === true ? "md" : shadow;
1525
1577
  return SHADOW_CLASSES[level];
1526
1578
  }
1527
- function ButtonContent({ loading, prefix, suffix, size, children }) {
1528
- const iconSizeClass = getIconSizeClass(size);
1579
+ function ButtonContent({ loading, prefix, suffix, size, iconSize, children }) {
1580
+ const iconSizeClass = getIconSizeClass(size, iconSize);
1529
1581
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
1530
- loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size) }),
1582
+ loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size, iconSize) }),
1531
1583
  prefix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: prefix }),
1532
1584
  children,
1533
1585
  suffix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: suffix })
@@ -1538,6 +1590,7 @@ var Button = ({
1538
1590
  variant,
1539
1591
  size,
1540
1592
  shape,
1593
+ iconSize,
1541
1594
  asChild = false,
1542
1595
  loading = false,
1543
1596
  disabled,
@@ -1555,11 +1608,21 @@ var Button = ({
1555
1608
  Comp,
1556
1609
  {
1557
1610
  ref,
1558
- className: cn(buttonVariants({ variant, size, shape }), shadowClass, className),
1611
+ className: cn(buttonVariants({ variant, size, shape, iconSize }), shadowClass, className),
1559
1612
  disabled: isDisabled,
1560
1613
  "aria-busy": loading || void 0,
1561
1614
  ...props,
1562
- children: asChild ? children : /* @__PURE__ */ jsx(ButtonContent, { loading, prefix, suffix, size, children })
1615
+ children: asChild ? children : /* @__PURE__ */ jsx(
1616
+ ButtonContent,
1617
+ {
1618
+ loading,
1619
+ prefix,
1620
+ suffix,
1621
+ size,
1622
+ iconSize,
1623
+ children
1624
+ }
1625
+ )
1563
1626
  }
1564
1627
  );
1565
1628
  };
@@ -1626,23 +1689,62 @@ var tabsTokens = {
1626
1689
  };
1627
1690
 
1628
1691
  // src/utils/primitive-props.ts
1692
+ function asPlainStyle(style) {
1693
+ if (style == null || typeof style === "function") return {};
1694
+ return style;
1695
+ }
1629
1696
  function withHtmlProps(Component) {
1630
1697
  return Component;
1631
1698
  }
1632
1699
  var DEFAULT_TOOLTIP_DELAY_MS = 150;
1700
+ var SKIP_DELAY_WINDOW_MS = 400;
1701
+ var lastTooltipOpenAt = 0;
1702
+ var skipDelayListeners = /* @__PURE__ */ new Set();
1703
+ function markTooltipOpened() {
1704
+ lastTooltipOpenAt = Date.now();
1705
+ for (const listener of skipDelayListeners) listener();
1706
+ }
1707
+ function shouldSkipDelay() {
1708
+ return Date.now() - lastTooltipOpenAt < SKIP_DELAY_WINDOW_MS;
1709
+ }
1710
+ function useSkipDelay() {
1711
+ const [, tick] = React.useReducer((count) => count + 1, 0);
1712
+ React.useEffect(() => {
1713
+ skipDelayListeners.add(tick);
1714
+ return () => {
1715
+ skipDelayListeners.delete(tick);
1716
+ };
1717
+ }, []);
1718
+ return shouldSkipDelay();
1719
+ }
1720
+ var TooltipInstantContext = React.createContext(false);
1633
1721
  var TooltipProvider = ({
1634
1722
  children,
1635
1723
  delayDuration = DEFAULT_TOOLTIP_DELAY_MS
1636
1724
  }) => {
1637
- return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay: delayDuration, children });
1725
+ const skipDelay = useSkipDelay();
1726
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay: skipDelay ? 0 : delayDuration, children });
1638
1727
  };
1639
1728
  var Tooltip = ({
1640
1729
  delayDuration,
1641
1730
  children,
1731
+ onOpenChange,
1642
1732
  ...props
1643
1733
  }) => {
1644
- const delay = delayDuration ?? DEFAULT_TOOLTIP_DELAY_MS;
1645
- return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay, children: /* @__PURE__ */ jsx(Tooltip$1.Root, { ...props, children }) });
1734
+ const skipDelay = useSkipDelay();
1735
+ const instant = delayDuration == null && skipDelay;
1736
+ const delay = delayDuration ?? (instant ? 0 : DEFAULT_TOOLTIP_DELAY_MS);
1737
+ return /* @__PURE__ */ jsx(TooltipInstantContext.Provider, { value: instant, children: /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay, children: /* @__PURE__ */ jsx(
1738
+ Tooltip$1.Root,
1739
+ {
1740
+ ...props,
1741
+ onOpenChange: (open, eventDetails) => {
1742
+ if (open) markTooltipOpened();
1743
+ onOpenChange?.(open, eventDetails);
1744
+ },
1745
+ children
1746
+ }
1747
+ ) }) });
1646
1748
  };
1647
1749
  var TooltipTrigger = ({
1648
1750
  asChild,
@@ -1672,25 +1774,29 @@ var TooltipContent = ({
1672
1774
  alignOffset = 0,
1673
1775
  ref,
1674
1776
  ...props
1675
- }) => /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
1676
- Tooltip$1.Positioner,
1677
- {
1678
- side,
1679
- align,
1680
- sideOffset,
1681
- alignOffset,
1682
- style: { zIndex: overlayZIndex.tooltip },
1683
- children: /* @__PURE__ */ jsx(
1684
- Tooltip$1.Popup,
1685
- {
1686
- ref,
1687
- className: cn(overlayClassNames.tooltipSurface, className),
1688
- style: { zIndex: overlayZIndex.tooltip, ...style },
1689
- ...props
1690
- }
1691
- )
1692
- }
1693
- ) });
1777
+ }) => {
1778
+ const instant = React.use(TooltipInstantContext);
1779
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
1780
+ Tooltip$1.Positioner,
1781
+ {
1782
+ side,
1783
+ align,
1784
+ sideOffset,
1785
+ alignOffset,
1786
+ style: { zIndex: overlayZIndex.tooltip },
1787
+ children: /* @__PURE__ */ jsx(
1788
+ Tooltip$1.Popup,
1789
+ {
1790
+ ref,
1791
+ className: cn(overlayClassNames.tooltipSurface, className),
1792
+ "data-instant": instant || void 0,
1793
+ style: { zIndex: overlayZIndex.tooltip, ...style },
1794
+ ...props
1795
+ }
1796
+ )
1797
+ }
1798
+ ) });
1799
+ };
1694
1800
  TooltipContent.displayName = "TooltipContent";
1695
1801
  var BaseRoot = withHtmlProps(Tabs$1.Root);
1696
1802
  var BaseList = withHtmlProps(Tabs$1.List);
@@ -1736,7 +1842,7 @@ var tabsListVariants = cva(
1736
1842
  }
1737
1843
  );
1738
1844
  var tabsTriggerVariants = cva(
1739
- "relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0",
1845
+ "relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0",
1740
1846
  {
1741
1847
  variants: {
1742
1848
  variant: {
@@ -1773,7 +1879,7 @@ var tabsIndicatorVariants = cva(
1773
1879
  }
1774
1880
  );
1775
1881
  var tabsContentVariants = cva(
1776
- "mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background",
1882
+ "mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none",
1777
1883
  {
1778
1884
  variants: {
1779
1885
  variant: {
@@ -1815,7 +1921,7 @@ function getTabsStyle(size, style) {
1815
1921
  "--tabs-badge-font-size": `${tabsTokens.badgeFontSize}px`,
1816
1922
  "--tabs-duration": `${tabsTokens.motion.duration}ms`,
1817
1923
  "--tabs-easing": tabsTokens.motion.easing,
1818
- ...style
1924
+ ...asPlainStyle(style)
1819
1925
  };
1820
1926
  }
1821
1927
  function getFirstEnabledValue(tabs) {
@@ -2046,7 +2152,7 @@ function getTextareaStyle(size, style) {
2046
2152
  "--textarea-focus-ring-width": `${textareaTokens.focusRingWidth}px`,
2047
2153
  borderRadius: "var(--textarea-radius)",
2048
2154
  outline: "none",
2049
- ...style
2155
+ ...asPlainStyle(style)
2050
2156
  };
2051
2157
  }
2052
2158
  function getTextareaFieldStyle() {
@@ -2294,7 +2400,7 @@ function MarkdownEditor({
2294
2400
  value,
2295
2401
  onChange: (e) => onChange(e.target.value),
2296
2402
  placeholder,
2297
- className: "resize-none rounded-none border-0 font-mono text-sm shadow-none focus-visible:ring-0",
2403
+ className: "resize-none rounded-none border-0 font-mono text-sm shadow-none",
2298
2404
  style: { minHeight }
2299
2405
  }
2300
2406
  ) }),
@@ -2397,9 +2503,18 @@ function getAvatarFallbackClass(size) {
2397
2503
  }
2398
2504
  function getAvatarStyle(size, style) {
2399
2505
  if (typeof size !== "number") return style;
2400
- return {
2506
+ const numericVars = {
2401
2507
  "--avatar-size": `${size}px`,
2402
- "--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px`,
2508
+ "--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px`
2509
+ };
2510
+ if (typeof style === "function") {
2511
+ return (state) => ({
2512
+ ...numericVars,
2513
+ ...style(state)
2514
+ });
2515
+ }
2516
+ return {
2517
+ ...numericVars,
2403
2518
  ...style
2404
2519
  };
2405
2520
  }
@@ -2674,7 +2789,7 @@ function QAPage({
2674
2789
  return bScore - aScore;
2675
2790
  });
2676
2791
  }, [answers]);
2677
- return /* @__PURE__ */ jsxs("div", { className: cn("mx-auto w-full max-w-5xl p-4 md:p-6", className), children: [
2792
+ return /* @__PURE__ */ jsxs("div", { className: cn("mx-auto w-full max-w-content p-4 md:p-6", className), children: [
2678
2793
  /* @__PURE__ */ jsxs("header", { className: "mb-6", children: [
2679
2794
  /* @__PURE__ */ jsx("h1", { className: "mb-4 font-bold text-2xl leading-tight text-foreground", children: question.title }),
2680
2795
  /* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center gap-4 text-muted-foreground text-sm", children: [
@@ -3160,7 +3275,7 @@ function SidebarNav({
3160
3275
  return /* @__PURE__ */ jsxs("section", { className: "group/section", children: [
3161
3276
  section.label && !collapsed ? /* @__PURE__ */ jsxs("div", { className: "mb-1.5 flex items-center justify-between px-2.5", children: [
3162
3277
  /* @__PURE__ */ jsx("span", { className: "text-[10px] font-semibold uppercase tracking-[0.18em] text-sidebar-foreground/45", children: section.label }),
3163
- visibleActions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5 opacity-0 transition-opacity duration-150 group-hover/section:opacity-100 focus-within:opacity-100", children: visibleActions.map((action) => {
3278
+ visibleActions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5 opacity-0 transition-opacity duration-micro group-hover/section:opacity-100 focus-within:opacity-100", children: visibleActions.map((action) => {
3164
3279
  const ActionIcon = action.icon;
3165
3280
  const defaultButton = /* @__PURE__ */ jsx(
3166
3281
  "button",
@@ -3169,7 +3284,7 @@ function SidebarNav({
3169
3284
  "aria-label": action.label,
3170
3285
  title: action.label,
3171
3286
  onClick: action.onClick,
3172
- className: "inline-flex size-4 items-center justify-center rounded text-sidebar-foreground/50 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
3287
+ className: "inline-flex size-4 items-center justify-center rounded text-sidebar-foreground/50 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none",
3173
3288
  children: /* @__PURE__ */ jsx(ActionIcon, { className: "size-3" })
3174
3289
  }
3175
3290
  );
@@ -3397,7 +3512,7 @@ function DefaultTrigger({ user }) {
3397
3512
  className: cn(
3398
3513
  "inline-flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full",
3399
3514
  "outline-none transition-[box-shadow,opacity] hover:opacity-90",
3400
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3515
+ "",
3401
3516
  "hover:ring-1 hover:ring-border"
3402
3517
  ),
3403
3518
  children: /* @__PURE__ */ jsxs(Avatar, { size: "sm", children: [
@@ -3492,7 +3607,7 @@ function getInitials(workspace) {
3492
3607
  if (!trimmed) return "??";
3493
3608
  const parts = trimmed.split(/\s+/).filter(Boolean);
3494
3609
  if (parts.length >= 2) {
3495
- return `${parts[0][0] ?? ""}${parts[1][0] ?? ""}`.toUpperCase();
3610
+ return `${parts[0]?.[0] ?? ""}${parts[1]?.[0] ?? ""}`.toUpperCase();
3496
3611
  }
3497
3612
  return trimmed.slice(0, 2).toUpperCase();
3498
3613
  }
@@ -3549,7 +3664,7 @@ function TriggerButton({
3549
3664
  className: cn(
3550
3665
  "inline-flex items-center gap-1 rounded-[var(--radius-md)] p-1 outline-none transition-colors",
3551
3666
  "hover:bg-accent hover:text-accent-foreground",
3552
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
3667
+ "",
3553
3668
  "disabled:cursor-not-allowed disabled:opacity-50",
3554
3669
  className
3555
3670
  ),
@@ -3570,7 +3685,7 @@ function TriggerButton({
3570
3685
  className: cn(
3571
3686
  "inline-flex w-full items-center gap-2 rounded-[var(--radius-md)] border border-border bg-background px-2 py-1 text-left outline-none transition-colors",
3572
3687
  "hover:bg-accent hover:text-accent-foreground",
3573
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
3688
+ "",
3574
3689
  "disabled:cursor-not-allowed disabled:opacity-50",
3575
3690
  className
3576
3691
  ),