@ggui-ai/ui-visual-tester 0.14.0 → 0.16.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.
@@ -20069,22 +20069,23 @@
20069
20069
  function resolveToneCss(tone) {
20070
20070
  switch (tone) {
20071
20071
  case "default":
20072
- return "var(--ggui-color-onSurface, #18181b)";
20072
+ return "var(--ggui-color-onContainer, #18181b)";
20073
20073
  case "muted":
20074
- return "var(--ggui-color-onSurfaceVariant, #52525b)";
20074
+ return "var(--ggui-color-onSunken, #52525b)";
20075
20075
  case "subtle":
20076
20076
  return "var(--ggui-color-neutral-500, #71717a)";
20077
20077
  case "emphasized":
20078
20078
  return "var(--ggui-color-primary-700, #0369a1)";
20079
20079
  case "loud":
20080
20080
  return "var(--ggui-color-primary-500, #0ea5e9)";
20081
+ case "error":
20082
+ return `var(--ggui-color-error, var(--ggui-color-error-500, ${SEMANTIC_TONE_FALLBACK.error}))`;
20081
20083
  case "success":
20082
20084
  case "warning":
20083
- case "error":
20084
20085
  case "info":
20085
20086
  return `var(--ggui-color-${tone}-500, ${SEMANTIC_TONE_FALLBACK[tone]})`;
20086
20087
  case "inverse":
20087
- return "var(--ggui-color-surface, #ffffff)";
20088
+ return "var(--ggui-color-container, #ffffff)";
20088
20089
  case "inherit":
20089
20090
  return "inherit";
20090
20091
  }
@@ -20098,14 +20099,15 @@
20098
20099
  function resolveSurfaceCss(surface) {
20099
20100
  switch (surface) {
20100
20101
  case "default":
20102
+ return "var(--ggui-color-container, #ffffff)";
20101
20103
  case "elevated":
20102
- return "var(--ggui-color-surface, #ffffff)";
20104
+ return "var(--ggui-color-elevated, #ffffff)";
20103
20105
  case "sunken":
20104
- return "var(--ggui-color-surfaceVariant, #f4f4f5)";
20106
+ return "var(--ggui-color-sunken, #f4f4f5)";
20105
20107
  case "accent":
20106
20108
  return "var(--ggui-color-primary-50, #f0f9ff)";
20107
20109
  case "inverted":
20108
- return "var(--ggui-color-onSurface, #18181b)";
20110
+ return "var(--ggui-color-onContainer, #18181b)";
20109
20111
  case "transparent":
20110
20112
  return "transparent";
20111
20113
  }
@@ -20348,7 +20350,7 @@
20348
20350
  "4xl": 1.25
20349
20351
  };
20350
20352
  function Text({ children, size = "base", weight = "normal", caps = false, tone, align, truncate, is = "p", id, htmlFor, style, className }) {
20351
- const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onSurface, #18181b)";
20353
+ const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onContainer, #18181b)";
20352
20354
  const textStyle = {
20353
20355
  fontSize: sizeMap[size],
20354
20356
  fontWeight: weightMap[weight],
@@ -20454,10 +20456,25 @@
20454
20456
  };
20455
20457
 
20456
20458
  // ../design/dist/primitives/Heading.js
20459
+ var HEADING_SIZE = {
20460
+ h1: "var(--ggui-font-size-4xl, 36px)",
20461
+ h2: "var(--ggui-font-size-3xl, 30px)",
20462
+ h3: "var(--ggui-font-size-2xl, 24px)",
20463
+ h4: "var(--ggui-font-size-xl, 20px)",
20464
+ h5: "var(--ggui-font-size-lg, 18px)",
20465
+ h6: "var(--ggui-font-size-base, 16px)"
20466
+ };
20457
20467
  function Heading({ children, level = 2, tone, align, style, className }) {
20458
20468
  const tag = `h${level}`;
20459
- const headingStyle = headingStyles[tag] || headingStyles.h2;
20460
- const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onSurface, #18181b)";
20469
+ const fallback = headingStyles[tag] || headingStyles.h2;
20470
+ const headingStyle = {
20471
+ fontSize: HEADING_SIZE[tag],
20472
+ fontWeight: `var(--ggui-font-weight-heading, ${fallback.fontWeight})`,
20473
+ fontFamily: "var(--ggui-font-family-heading, var(--ggui-font-family-sans, inherit))",
20474
+ lineHeight: fallback.lineHeight,
20475
+ letterSpacing: `var(--ggui-letter-spacing-heading, ${fallback.letterSpacing})`
20476
+ };
20477
+ const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onContainer, #18181b)";
20461
20478
  return (0, import_react4.createElement)(tag, {
20462
20479
  className,
20463
20480
  style: {
@@ -20541,8 +20558,8 @@
20541
20558
  border: "none"
20542
20559
  },
20543
20560
  secondary: {
20544
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
20545
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20561
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20562
+ color: "var(--ggui-color-onSunken, #52525b)",
20546
20563
  border: "none"
20547
20564
  },
20548
20565
  outline: {
@@ -20552,7 +20569,7 @@
20552
20569
  },
20553
20570
  ghost: {
20554
20571
  backgroundColor: "transparent",
20555
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20572
+ color: "var(--ggui-color-onSunken, #52525b)",
20556
20573
  border: "none"
20557
20574
  },
20558
20575
  danger: {
@@ -20613,19 +20630,19 @@
20613
20630
  }, children: [label && (0, import_jsx_runtime7.jsxs)("label", { htmlFor: inputId, style: {
20614
20631
  fontSize: "var(--ggui-font-size-sm, 14px)",
20615
20632
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20616
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20633
+ color: "var(--ggui-color-onSunken, #52525b)"
20617
20634
  }, children: [label, required && (0, import_jsx_runtime7.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime7.jsx)("input", { id: inputId, type, placeholder, value, onChange: (e) => onChange?.(e.target.value), disabled, required, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20618
20635
  ...sizeStyles2[size],
20619
20636
  width: "100%",
20620
20637
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20621
20638
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20622
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20623
- color: "var(--ggui-color-onSurface, #18181b)",
20639
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20640
+ color: "var(--ggui-color-onContainer, #18181b)",
20624
20641
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
20625
20642
  boxSizing: "border-box"
20626
20643
  }, ...rest }), hasMessage && (0, import_jsx_runtime7.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20627
20644
  fontSize: "var(--ggui-font-size-xs, 12px)",
20628
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20645
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20629
20646
  }, children: error2 || helperText })] });
20630
20647
  }
20631
20648
 
@@ -20647,14 +20664,14 @@
20647
20664
  }, children: [label && (0, import_jsx_runtime8.jsxs)("label", { htmlFor: textareaId, style: {
20648
20665
  fontSize: "var(--ggui-font-size-sm, 14px)",
20649
20666
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20650
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20667
+ color: "var(--ggui-color-onSunken, #52525b)"
20651
20668
  }, children: [label, required && (0, import_jsx_runtime8.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime8.jsx)("textarea", { id: textareaId, placeholder, value, onChange: (e) => onChange?.(e.target.value), rows, disabled, required, maxLength, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20652
20669
  padding: "10px 12px",
20653
20670
  width: "100%",
20654
20671
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20655
20672
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20656
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20657
- color: "var(--ggui-color-onSurface, #18181b)",
20673
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20674
+ color: "var(--ggui-color-onContainer, #18181b)",
20658
20675
  fontSize: "var(--ggui-font-size-sm, 14px)",
20659
20676
  fontFamily: "inherit",
20660
20677
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
@@ -20662,10 +20679,10 @@
20662
20679
  resize: autoResize ? "none" : "vertical"
20663
20680
  }, ...rest }), (0, import_jsx_runtime8.jsxs)("div", { style: { display: "flex", justifyContent: "space-between" }, children: [hasMessage && (0, import_jsx_runtime8.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20664
20681
  fontSize: "var(--ggui-font-size-xs, 12px)",
20665
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20682
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20666
20683
  }, children: error2 || helperText }), showCount && maxLength && (0, import_jsx_runtime8.jsxs)("span", { style: {
20667
20684
  fontSize: "var(--ggui-font-size-xs, 12px)",
20668
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20685
+ color: "var(--ggui-color-onSunken, #52525b)",
20669
20686
  marginLeft: "auto"
20670
20687
  }, children: [charCount, "/", maxLength] })] })] });
20671
20688
  }
@@ -20687,14 +20704,14 @@
20687
20704
  return (0, import_jsx_runtime9.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [label && (0, import_jsx_runtime9.jsxs)("label", { htmlFor: selectId, style: {
20688
20705
  fontSize: "var(--ggui-font-size-sm, 14px)",
20689
20706
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20690
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20707
+ color: "var(--ggui-color-onSunken, #52525b)"
20691
20708
  }, children: [label, required && (0, import_jsx_runtime9.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime9.jsxs)("select", { id: selectId, value, onChange: (e) => onChange?.(e.target.value), disabled, required, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20692
20709
  ...sizeStyles3[size],
20693
20710
  width: "100%",
20694
20711
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20695
20712
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20696
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20697
- color: value ? "var(--ggui-color-onSurface, #18181b)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
20713
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20714
+ color: value ? "var(--ggui-color-onContainer, #18181b)" : "var(--ggui-color-onSunken, #52525b)",
20698
20715
  cursor: disabled ? "not-allowed" : "pointer",
20699
20716
  appearance: "none",
20700
20717
  backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M3 4.5L6 7.5L9 4.5'/%3E%3C/svg%3E")`,
@@ -20705,7 +20722,7 @@
20705
20722
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`
20706
20723
  }, ...rest, children: [placeholder && (0, import_jsx_runtime9.jsx)("option", { value: "", disabled: true, children: placeholder }), options.map((opt) => (0, import_jsx_runtime9.jsx)("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value))] }), hasMessage && (0, import_jsx_runtime9.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20707
20724
  fontSize: "var(--ggui-font-size-xs, 12px)",
20708
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20725
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20709
20726
  }, children: error2 || helperText })] });
20710
20727
  }
20711
20728
 
@@ -20740,7 +20757,7 @@
20740
20757
  height: "18px",
20741
20758
  borderRadius: "var(--ggui-shape-radius-sm, 4px)",
20742
20759
  border: `2px solid ${checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20743
- backgroundColor: checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-surface, #ffffff)",
20760
+ backgroundColor: checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-sunken, #ffffff)",
20744
20761
  display: "flex",
20745
20762
  alignItems: "center",
20746
20763
  justifyContent: "center",
@@ -20748,10 +20765,10 @@
20748
20765
  }, children: (checked || indeterminate) && (0, import_jsx_runtime10.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", style: { color: "var(--ggui-color-onPrimary, #ffffff)" }, children: indeterminate ? (0, import_jsx_runtime10.jsx)("path", { d: "M2.5 6H9.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) : (0, import_jsx_runtime10.jsx)("path", { d: "M2.5 6L5 8.5L9.5 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), (label || description) && (0, import_jsx_runtime10.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [label && (0, import_jsx_runtime10.jsx)("span", { style: {
20749
20766
  fontSize: "var(--ggui-font-size-sm, 14px)",
20750
20767
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20751
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20768
+ color: "var(--ggui-color-onSunken, #52525b)"
20752
20769
  }, children: label }), description && (0, import_jsx_runtime10.jsx)("span", { style: {
20753
20770
  fontSize: "var(--ggui-font-size-xs, 12px)",
20754
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20771
+ color: "var(--ggui-color-onSunken, #52525b)"
20755
20772
  }, children: description })] })] });
20756
20773
  }
20757
20774
 
@@ -20803,7 +20820,7 @@
20803
20820
  } }) }), label && (0, import_jsx_runtime11.jsx)("span", { style: {
20804
20821
  fontSize: "var(--ggui-font-size-sm, 14px)",
20805
20822
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20806
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20823
+ color: "var(--ggui-color-onSunken, #52525b)"
20807
20824
  }, children: label })] });
20808
20825
  }
20809
20826
 
@@ -20819,7 +20836,7 @@
20819
20836
  return (0, import_jsx_runtime12.jsxs)("div", { role: "radiogroup", "aria-labelledby": label ? labelId : void 0, "aria-describedby": hasError ? errorId : void 0, className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-2, 8px)", ...style }, children: [label && (0, import_jsx_runtime12.jsx)("span", { id: labelId, style: {
20820
20837
  fontSize: "var(--ggui-font-size-sm, 14px)",
20821
20838
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20822
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20839
+ color: "var(--ggui-color-onSunken, #52525b)"
20823
20840
  }, children: label }), (0, import_jsx_runtime12.jsx)("div", { style: {
20824
20841
  display: "flex",
20825
20842
  flexDirection: direction === "vertical" ? "column" : "row",
@@ -20852,7 +20869,7 @@
20852
20869
  height: "18px",
20853
20870
  borderRadius: "var(--ggui-shape-radius-full, 9999px)",
20854
20871
  border: `2px solid ${isSelected ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20855
- backgroundColor: "var(--ggui-color-surface, #ffffff)",
20872
+ backgroundColor: "var(--ggui-color-sunken, #ffffff)",
20856
20873
  display: "flex",
20857
20874
  alignItems: "center",
20858
20875
  justifyContent: "center",
@@ -20865,10 +20882,10 @@
20865
20882
  } }) })] }), (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [(0, import_jsx_runtime12.jsx)("span", { style: {
20866
20883
  fontSize: "var(--ggui-font-size-sm, 14px)",
20867
20884
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20868
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20885
+ color: "var(--ggui-color-onSunken, #52525b)"
20869
20886
  }, children: option.label }), option.description && (0, import_jsx_runtime12.jsx)("span", { style: {
20870
20887
  fontSize: "var(--ggui-font-size-xs, 12px)",
20871
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20888
+ color: "var(--ggui-color-onSunken, #52525b)"
20872
20889
  }, children: option.description })] })] }, option.value);
20873
20890
  }) }), error2 && (0, import_jsx_runtime12.jsx)("span", { id: errorId, role: "alert", style: {
20874
20891
  fontSize: "var(--ggui-font-size-xs, 12px)",
@@ -20887,7 +20904,7 @@
20887
20904
  return (0, import_jsx_runtime13.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-2, 8px)", ...style }, children: [(label || showValue) && (0, import_jsx_runtime13.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [label && (0, import_jsx_runtime13.jsx)("span", { id: labelId, style: {
20888
20905
  fontSize: "var(--ggui-font-size-sm, 14px)",
20889
20906
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20890
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20907
+ color: "var(--ggui-color-onSunken, #52525b)"
20891
20908
  }, children: label }), showValue && (0, import_jsx_runtime13.jsx)("span", { style: {
20892
20909
  fontSize: "var(--ggui-font-size-sm, 14px)",
20893
20910
  fontWeight: "var(--ggui-font-weight-medium, 500)",
@@ -20931,8 +20948,8 @@
20931
20948
  var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
20932
20949
  var variantStyles2 = {
20933
20950
  default: {
20934
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
20935
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20951
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20952
+ color: "var(--ggui-color-onSunken, #52525b)"
20936
20953
  },
20937
20954
  primary: {
20938
20955
  backgroundColor: "var(--ggui-color-primary-100, #e0f2fe)",
@@ -20940,7 +20957,7 @@
20940
20957
  },
20941
20958
  secondary: {
20942
20959
  backgroundColor: "var(--ggui-color-outlineVariant, #e4e4e7)",
20943
- color: "var(--ggui-color-onSurface, #18181b)"
20960
+ color: "var(--ggui-color-onContainer, #18181b)"
20944
20961
  },
20945
20962
  success: {
20946
20963
  backgroundColor: "var(--ggui-color-success-100, #dcfce7)",
@@ -20957,6 +20974,11 @@
20957
20974
  info: {
20958
20975
  backgroundColor: "var(--ggui-color-info-100, #cffafe)",
20959
20976
  color: "var(--ggui-color-info-700, #0e7490)"
20977
+ },
20978
+ // The second accent (ggui#987 §2.1): the tertiary container pair.
20979
+ tertiary: {
20980
+ backgroundColor: "var(--ggui-color-tertiaryContainer, #ccfbf1)",
20981
+ color: "var(--ggui-color-onTertiaryContainer, #134e4a)"
20960
20982
  }
20961
20983
  };
20962
20984
  var sizeStyles4 = {
@@ -20991,7 +21013,7 @@
20991
21013
  width: resolvedWidth,
20992
21014
  height: resolvedHeight,
20993
21015
  borderRadius: isCircle ? "9999px" : resolveRadius(radius2),
20994
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
21016
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20995
21017
  animation: "ggui-skeleton-pulse 1.5s ease-in-out infinite",
20996
21018
  ...style
20997
21019
  };
@@ -21131,10 +21153,10 @@
21131
21153
  const height = sizeHeights[size];
21132
21154
  const barColor = variantColors[variant];
21133
21155
  const accessibleName = label ?? "Progress";
21134
- return (0, import_jsx_runtime18.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [showLabel && (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [(0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "var(--ggui-font-size-sm, 14px)", color: "var(--ggui-color-onSurfaceVariant, #52525b)" }, children: accessibleName }), (0, import_jsx_runtime18.jsxs)("span", { style: {
21156
+ return (0, import_jsx_runtime18.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [showLabel && (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [(0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "var(--ggui-font-size-sm, 14px)", color: "var(--ggui-color-onSunken, #52525b)" }, children: accessibleName }), (0, import_jsx_runtime18.jsxs)("span", { style: {
21135
21157
  fontSize: "var(--ggui-font-size-sm, 14px)",
21136
21158
  fontWeight: "var(--ggui-font-weight-medium, 500)",
21137
- color: "var(--ggui-color-onSurface, #18181b)"
21159
+ color: "var(--ggui-color-onContainer, #18181b)"
21138
21160
  }, children: [Math.round(percentage), "%"] })] }), (0, import_jsx_runtime18.jsxs)("div", { role: "progressbar", "aria-valuenow": indeterminate ? void 0 : value, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": accessibleName, style: {
21139
21161
  width: "100%",
21140
21162
  height,
@@ -21176,7 +21198,7 @@
21176
21198
  width: resolveSize2(width) || "100%",
21177
21199
  height: resolveSize2(height) || "auto",
21178
21200
  borderRadius: resolveRadius(radius2),
21179
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
21201
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
21180
21202
  display: "flex",
21181
21203
  alignItems: "center",
21182
21204
  justifyContent: "center",
@@ -25225,7 +25247,7 @@
25225
25247
  // ../design/dist/primitives/Link.js
25226
25248
  var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
25227
25249
  function Link({ children, href, external, tone, underline = "hover", style, className, ...rest }) {
25228
- const linkColor = tone ? resolveToneCss(tone) : "var(--ggui-color-primary-600, #0284c7)";
25250
+ const linkColor = tone ? resolveToneCss(tone) : "var(--ggui-color-link, var(--ggui-color-primary-600, #0284c7))";
25229
25251
  const underlineStyle = {
25230
25252
  always: "underline",
25231
25253
  hover: "none",
@@ -25321,10 +25343,10 @@
25321
25343
  top: coords.top,
25322
25344
  left: coords.left,
25323
25345
  transform: getTransform(),
25324
- backgroundColor: "var(--ggui-color-onSurface, #18181b)",
25325
- // Inverse pair: text on the inverted (onSurface) ground is
25326
- // the surface color — white was only right for light themes.
25327
- color: "var(--ggui-color-surface, #ffffff)",
25346
+ // The inverse container pair (ggui#987 §2.1): a tooltip is
25347
+ // legible by inversion, not by lift — never `elevated`.
25348
+ backgroundColor: "var(--ggui-color-onContainer, #18181b)",
25349
+ color: "var(--ggui-color-container, #ffffff)",
25328
25350
  padding: "6px 10px",
25329
25351
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
25330
25352
  fontSize: "var(--ggui-font-size-xs, 12px)",
@@ -25360,7 +25382,7 @@
25360
25382
  textAlign: "left",
25361
25383
  fontWeight: "var(--ggui-font-weight-semibold, 600)",
25362
25384
  fontSize: "var(--ggui-font-size-xs, 12px)",
25363
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25385
+ color: "var(--ggui-color-onSunken, #52525b)",
25364
25386
  textTransform: "uppercase",
25365
25387
  letterSpacing: "0.05em",
25366
25388
  borderBottom: "2px solid var(--ggui-color-outlineVariant, #e4e4e7)",
@@ -25376,11 +25398,11 @@
25376
25398
  width: "100%",
25377
25399
  borderCollapse: "collapse",
25378
25400
  fontSize: "var(--ggui-font-size-sm, 14px)",
25379
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
25401
+ color: "var(--ggui-color-onSunken, #52525b)"
25380
25402
  }, children: [caption && (0, import_jsx_runtime23.jsx)("caption", { style: {
25381
25403
  padding: cellPadding,
25382
25404
  fontSize: "var(--ggui-font-size-sm, 14px)",
25383
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25405
+ color: "var(--ggui-color-onSunken, #52525b)",
25384
25406
  textAlign: "left",
25385
25407
  captionSide: "top"
25386
25408
  }, children: caption }), (0, import_jsx_runtime23.jsx)("thead", { children: (0, import_jsx_runtime23.jsx)("tr", { children: columns.map((col) => (0, import_jsx_runtime23.jsx)("th", { scope: "col", "aria-sort": sortKey === col.key ? sortDirection === "asc" ? "ascending" : "descending" : void 0, onClick: col.sortable ? () => handleSort(col.key) : void 0, onKeyDown: col.sortable ? (e) => {
@@ -25394,13 +25416,13 @@
25394
25416
  width: col.width,
25395
25417
  cursor: col.sortable ? "pointer" : "default"
25396
25418
  }, children: (0, import_jsx_runtime23.jsxs)("span", { style: { display: "inline-flex", alignItems: "center" }, children: [col.header, col.sortable && sortIndicator(sortKey === col.key, sortDirection)] }) }, col.key)) }) }), (0, import_jsx_runtime23.jsx)("tbody", { children: data.map((row, rowIndex) => (0, import_jsx_runtime23.jsx)("tr", { onMouseEnter: hoverable ? () => setHoveredRow(rowIndex) : void 0, onMouseLeave: hoverable ? () => setHoveredRow(null) : void 0, style: {
25397
- backgroundColor: hoverable && hoveredRow === rowIndex ? "var(--ggui-color-surface, #fafafa)" : striped && rowIndex % 2 === 1 ? "var(--ggui-color-surface, #fafafa)" : "transparent",
25419
+ backgroundColor: hoverable && hoveredRow === rowIndex ? "var(--ggui-color-sunken, #fafafa)" : striped && rowIndex % 2 === 1 ? "var(--ggui-color-sunken, #fafafa)" : "transparent",
25398
25420
  transition: "background-color 0.15s ease"
25399
25421
  }, children: columns.map((col) => (0, import_jsx_runtime23.jsx)("td", { style: {
25400
25422
  padding: cellPadding,
25401
25423
  textAlign: col.align || "left",
25402
- borderBottom: "1px solid var(--ggui-color-surfaceVariant, #f4f4f5)",
25403
- borderRight: bordered ? "1px solid var(--ggui-color-surfaceVariant, #f4f4f5)" : void 0
25424
+ borderBottom: "1px solid var(--ggui-color-sunken, #f4f4f5)",
25425
+ borderRight: bordered ? "1px solid var(--ggui-color-sunken, #f4f4f5)" : void 0
25404
25426
  }, children: col.render ? col.render(row[col.key], row, rowIndex) : row[col.key] }, col.key)) }, rowIndex)) })] }) });
25405
25427
  }
25406
25428
 
@@ -25477,7 +25499,7 @@
25477
25499
  if (variant === "line") {
25478
25500
  return {
25479
25501
  ...base,
25480
- color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25502
+ color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSunken, #52525b)",
25481
25503
  borderBottom: isActive ? "2px solid var(--ggui-color-primary-600, #0284c7)" : "2px solid transparent",
25482
25504
  marginBottom: "-1px"
25483
25505
  };
@@ -25485,17 +25507,17 @@
25485
25507
  if (variant === "pills") {
25486
25508
  return {
25487
25509
  ...base,
25488
- color: isActive ? "var(--ggui-color-onPrimary, #ffffff)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25510
+ color: isActive ? "var(--ggui-color-onPrimary, #ffffff)" : "var(--ggui-color-onSunken, #52525b)",
25489
25511
  backgroundColor: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "transparent",
25490
25512
  borderRadius: "var(--ggui-shape-radius-md, 6px)"
25491
25513
  };
25492
25514
  }
25493
25515
  return {
25494
25516
  ...base,
25495
- color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25496
- backgroundColor: isActive ? "var(--ggui-color-surface, #ffffff)" : "transparent",
25517
+ color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSunken, #52525b)",
25518
+ backgroundColor: isActive ? "var(--ggui-color-container, #ffffff)" : "transparent",
25497
25519
  border: isActive ? "1px solid var(--ggui-color-outlineVariant, #e4e4e7)" : "1px solid transparent",
25498
- borderBottom: isActive ? "1px solid var(--ggui-color-surface, #ffffff)" : "1px solid transparent",
25520
+ borderBottom: isActive ? "1px solid var(--ggui-color-container, #ffffff)" : "1px solid transparent",
25499
25521
  borderRadius: "var(--ggui-shape-radius-md, 6px) var(--ggui-shape-radius-md, 6px) 0 0",
25500
25522
  marginBottom: "-1px"
25501
25523
  };
@@ -25504,7 +25526,7 @@
25504
25526
  display: "flex",
25505
25527
  gap: variant === "pills" ? "var(--ggui-spacing-1, 4px)" : "0",
25506
25528
  borderBottom: variant === "line" || variant === "enclosed" ? "1px solid var(--ggui-color-outlineVariant, #e4e4e7)" : void 0,
25507
- backgroundColor: variant === "pills" ? "var(--ggui-color-surfaceVariant, #f4f4f5)" : void 0,
25529
+ backgroundColor: variant === "pills" ? "var(--ggui-color-sunken, #f4f4f5)" : void 0,
25508
25530
  borderRadius: variant === "pills" ? "var(--ggui-shape-radius-lg, 8px)" : void 0,
25509
25531
  padding: variant === "pills" ? "var(--ggui-spacing-1, 4px)" : void 0
25510
25532
  };
@@ -25675,25 +25697,25 @@
25675
25697
  // ../design/dist/primitives/Toast.js
25676
25698
  var variantStyles4 = {
25677
25699
  info: {
25678
- bg: "var(--ggui-color-info-50, #ecfeff)",
25700
+ bg: "var(--ggui-color-elevated, #ecfeff)",
25679
25701
  border: "var(--ggui-color-info-200, #a5f3fc)",
25680
25702
  text: "var(--ggui-color-info-800, #155e75)",
25681
25703
  icon: "var(--ggui-color-info-500, #06b6d4)"
25682
25704
  },
25683
25705
  success: {
25684
- bg: "var(--ggui-color-success-50, #f0fdf4)",
25706
+ bg: "var(--ggui-color-elevated, #f0fdf4)",
25685
25707
  border: "var(--ggui-color-success-200, #bbf7d0)",
25686
25708
  text: "var(--ggui-color-success-800, #166534)",
25687
25709
  icon: "var(--ggui-color-success-500, #22c55e)"
25688
25710
  },
25689
25711
  warning: {
25690
- bg: "var(--ggui-color-warning-50, #fffbeb)",
25712
+ bg: "var(--ggui-color-elevated, #fffbeb)",
25691
25713
  border: "var(--ggui-color-warning-200, #fde68a)",
25692
25714
  text: "var(--ggui-color-warning-800, #92400e)",
25693
25715
  icon: "var(--ggui-color-warning-500, #f59e0b)"
25694
25716
  },
25695
25717
  error: {
25696
- bg: "var(--ggui-color-error-50, #fef2f2)",
25718
+ bg: "var(--ggui-color-elevated, #fef2f2)",
25697
25719
  border: "var(--ggui-color-error-200, #fecaca)",
25698
25720
  text: "var(--ggui-color-error-800, #991b1b)",
25699
25721
  icon: "var(--ggui-color-error-500, #ef4444)"
@@ -25834,7 +25856,7 @@
25834
25856
  opacity: isDisabled ? 0.5 : 1,
25835
25857
  fontSize: "var(--ggui-font-size-sm, 14px)",
25836
25858
  fontWeight: "var(--ggui-font-weight-medium, 500)",
25837
- color: "var(--ggui-color-onSurface, #18181b)",
25859
+ color: "var(--ggui-color-onContainer, #18181b)",
25838
25860
  textAlign: "left",
25839
25861
  transition: `background-color ${duration.fast} ${easing.easeInOut}`
25840
25862
  }, children: [(0, import_jsx_runtime26.jsx)("span", { children: item.title }), chevron(isExpanded)] }) }), (0, import_jsx_runtime26.jsx)("div", { id: `${uniqueId}-panel-${item.key}`, role: "region", "aria-labelledby": `${uniqueId}-header-${item.key}`, hidden: !isExpanded, style: {
@@ -25842,7 +25864,7 @@
25842
25864
  }, children: isExpanded && (0, import_jsx_runtime26.jsx)("div", { style: {
25843
25865
  padding: "0 var(--ggui-spacing-4, 16px) var(--ggui-spacing-4, 16px)",
25844
25866
  fontSize: "var(--ggui-font-size-sm, 14px)",
25845
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25867
+ color: "var(--ggui-color-onSunken, #52525b)",
25846
25868
  lineHeight: "var(--ggui-font-lineHeight-normal, 1.5)"
25847
25869
  }, children: item.content }) })] }, item.key);
25848
25870
  }) });
@@ -26108,9 +26130,9 @@
26108
26130
  // ../design/dist/components/MenuItem.js
26109
26131
  var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
26110
26132
  function MenuItem({ label, icon, rightElement, onClick, disabled, active, danger, style, className }) {
26111
- const baseColor = danger ? colors.error[600] : colors.gray[700];
26112
- const hoverBg = danger ? colors.error[50] : colors.gray[100];
26113
- const activeBg = danger ? colors.error[100] : colors.primary[50];
26133
+ const baseColor = danger ? "var(--ggui-color-error-600, #dc2626)" : "var(--ggui-color-onElevated, #3f3f46)";
26134
+ const hoverBg = danger ? "var(--ggui-color-error-50, #fef2f2)" : "var(--ggui-color-sunken, #f4f4f5)";
26135
+ const activeBg = danger ? "var(--ggui-color-error-100, #fee2e2)" : "var(--ggui-color-primary-50, #f0f9ff)";
26114
26136
  return (0, import_jsx_runtime29.jsxs)("button", { onClick: disabled ? void 0 : onClick, disabled, className, style: {
26115
26137
  display: "flex",
26116
26138
  alignItems: "center",
@@ -26257,7 +26279,8 @@
26257
26279
  position: "absolute",
26258
26280
  ...getMenuPosition(),
26259
26281
  minWidth: "160px",
26260
- backgroundColor: colors.white,
26282
+ backgroundColor: "var(--ggui-color-elevated, #ffffff)",
26283
+ color: "var(--ggui-color-onElevated, #18181b)",
26261
26284
  border: `1px solid ${colors.gray[200]}`,
26262
26285
  borderRadius: radius.lg,
26263
26286
  boxShadow: shadow.lg,
@@ -26495,9 +26518,9 @@
26495
26518
  color: "var(--ggui-color-onPrimary, #ffffff)"
26496
26519
  },
26497
26520
  upcoming: {
26498
- backgroundColor: "var(--ggui-color-surface, #fafafa)",
26521
+ backgroundColor: "var(--ggui-color-sunken, #fafafa)",
26499
26522
  border: "1px solid var(--ggui-color-outline, #d4d4d8)",
26500
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
26523
+ color: "var(--ggui-color-onSunken, #52525b)"
26501
26524
  }
26502
26525
  };
26503
26526
  function Marker({ index, state }) {
@@ -26905,15 +26928,15 @@
26905
26928
  var CODE_INLINE = {
26906
26929
  fontFamily: "var(--ggui-font-family-mono, ui-monospace, monospace)",
26907
26930
  fontSize: "0.9em",
26908
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))",
26909
- borderRadius: "var(--ggui-radius-sm, 4px)",
26931
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))",
26932
+ borderRadius: "var(--ggui-shape-radius-sm, 4px)",
26910
26933
  padding: "0.1em 0.35em"
26911
26934
  };
26912
26935
  var CODE_FENCE = {
26913
26936
  fontFamily: "var(--ggui-font-family-mono, ui-monospace, monospace)",
26914
26937
  fontSize: "var(--ggui-font-size-sm, 14px)",
26915
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))",
26916
- borderRadius: "var(--ggui-radius-md, 8px)",
26938
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))",
26939
+ borderRadius: "var(--ggui-shape-radius-md, 8px)",
26917
26940
  padding: "var(--ggui-spacing-sm, 12px)",
26918
26941
  overflowX: "auto",
26919
26942
  whiteSpace: "pre",
@@ -26942,7 +26965,7 @@
26942
26965
  var TABLE_HEADER_CELL = {
26943
26966
  ...TABLE_CELL,
26944
26967
  fontWeight: "var(--ggui-font-weight-semibold, 600)",
26945
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))"
26968
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))"
26946
26969
  };
26947
26970
  function renderRichTextInlines(inlines) {
26948
26971
  return inlines.map((node, i) => {
@@ -27557,7 +27580,8 @@
27557
27580
  width: sizeWidths[size],
27558
27581
  maxWidth: isFullscreen ? "100%" : "calc(100vw - 48px)",
27559
27582
  maxHeight: isFullscreen ? "100%" : "calc(100vh - 48px)",
27560
- backgroundColor: colors.white,
27583
+ backgroundColor: "var(--ggui-color-elevated, #ffffff)",
27584
+ color: "var(--ggui-color-onElevated, #18181b)",
27561
27585
  borderRadius: isFullscreen ? 0 : radius.xl,
27562
27586
  boxShadow: shadow["2xl"],
27563
27587
  display: "flex",
@@ -28020,8 +28044,7 @@
28020
28044
  StreamBus: () => StreamBus,
28021
28045
  buildActionEnvelope: () => buildActionEnvelope,
28022
28046
  buildWireConfig: () => buildWireConfig,
28023
- connectionStore: () => connectionStore,
28024
- createConnectionStore: () => createConnectionStore,
28047
+ connectionSource: () => connectionSource,
28025
28048
  useAction: () => useAction,
28026
28049
  useApp: () => useApp,
28027
28050
  useAuth: () => useAuth,
@@ -28174,10 +28197,46 @@
28174
28197
  var import_react37 = __toESM(require_react(), 1);
28175
28198
 
28176
28199
  // ../wire/dist/connection-store.js
28200
+ var ConnectionWriterConflictError = class extends Error {
28201
+ owner;
28202
+ attemptedBy;
28203
+ constructor(owner, attemptedBy) {
28204
+ super(owner === attemptedBy ? `connection writer: '${owner}' already holds the claim and '${attemptedBy}' is claiming it again \u2014 two copies of '${owner}' in one document (a duplicate bundle of the runtime)` : `connection writer: '${owner}' holds the claim; '${attemptedBy}' cannot take it \u2014 exactly one party writes the connection state`);
28205
+ this.name = "ConnectionWriterConflictError";
28206
+ this.owner = owner;
28207
+ this.attemptedBy = attemptedBy;
28208
+ }
28209
+ };
28210
+ var ConnectionWriterReleasedError = class extends Error {
28211
+ claimant;
28212
+ constructor(claimant) {
28213
+ super(`connection writer: '${claimant}' released its claim and cannot set the connection state`);
28214
+ this.name = "ConnectionWriterReleasedError";
28215
+ this.claimant = claimant;
28216
+ }
28217
+ };
28218
+ var DOCUMENT_STORE_KEY = /* @__PURE__ */ Symbol.for("ai.ggui.wire/connection-store");
28219
+ var ConnectionStoreSlotError = class extends Error {
28220
+ key;
28221
+ constructor(key) {
28222
+ super(`connection store: the document slot ${String(key)} holds a value that is not a connection store \u2014 another copy of @ggui-ai/wire with an incompatible shape, or a foreign object. Refusing to adopt or overwrite it.`);
28223
+ this.key = key;
28224
+ this.name = "ConnectionStoreSlotError";
28225
+ }
28226
+ };
28227
+ function isConnectionStore(value) {
28228
+ if (typeof value !== "object" || value === null)
28229
+ return false;
28230
+ const source = Reflect.get(value, "source");
28231
+ if (typeof source !== "object" || source === null)
28232
+ return false;
28233
+ return typeof Reflect.get(value, "claim") === "function" && typeof Reflect.get(source, "subscribe") === "function" && typeof Reflect.get(source, "getSnapshot") === "function";
28234
+ }
28177
28235
  function createConnectionStore(initial = true) {
28178
28236
  let value = initial;
28237
+ let owner;
28179
28238
  const listeners = /* @__PURE__ */ new Set();
28180
- return {
28239
+ const source = {
28181
28240
  subscribe(listener) {
28182
28241
  listeners.add(listener);
28183
28242
  return () => {
@@ -28186,31 +28245,61 @@
28186
28245
  },
28187
28246
  getSnapshot() {
28188
28247
  return value;
28189
- },
28190
- set(connected) {
28191
- if (connected === value)
28192
- return;
28193
- value = connected;
28194
- for (const l of listeners)
28195
- l();
28248
+ }
28249
+ };
28250
+ return {
28251
+ source,
28252
+ claim(claimant) {
28253
+ if (owner !== void 0)
28254
+ throw new ConnectionWriterConflictError(owner, claimant);
28255
+ owner = claimant;
28256
+ let released = false;
28257
+ return {
28258
+ set(connected) {
28259
+ if (released)
28260
+ throw new ConnectionWriterReleasedError(claimant);
28261
+ if (connected === value)
28262
+ return;
28263
+ value = connected;
28264
+ for (const l of listeners)
28265
+ l();
28266
+ },
28267
+ release() {
28268
+ if (released)
28269
+ return;
28270
+ released = true;
28271
+ owner = void 0;
28272
+ }
28273
+ };
28196
28274
  }
28197
28275
  };
28198
28276
  }
28199
- var connectionStore = createConnectionStore(true);
28277
+ function documentConnectionStore() {
28278
+ const existing = Reflect.get(globalThis, DOCUMENT_STORE_KEY);
28279
+ if (existing !== void 0) {
28280
+ if (isConnectionStore(existing))
28281
+ return existing;
28282
+ throw new ConnectionStoreSlotError(DOCUMENT_STORE_KEY);
28283
+ }
28284
+ const created = createConnectionStore(true);
28285
+ Reflect.set(globalThis, DOCUMENT_STORE_KEY, created);
28286
+ return created;
28287
+ }
28288
+ var documentStore = documentConnectionStore();
28289
+ var connectionSource = documentStore.source;
28200
28290
 
28201
28291
  // ../wire/dist/useRender.js
28202
28292
  function useRender() {
28203
28293
  const { render } = useWireContext();
28204
- const isConnected = (0, import_react37.useSyncExternalStore)(connectionStore.subscribe, connectionStore.getSnapshot, connectionStore.getSnapshot);
28294
+ const isConnected = (0, import_react37.useSyncExternalStore)(connectionSource.subscribe, connectionSource.getSnapshot, connectionSource.getSnapshot);
28205
28295
  return { sessionId: render.sessionId, isConnected };
28206
28296
  }
28207
28297
 
28208
- // ../protocol/dist/version.js
28209
- var PROTOCOL_VERSION = "draft-2026-09-04";
28210
- var PROTOCOL_SCHEMA_VERSION = PROTOCOL_VERSION;
28211
- var CLIENT_SUPPORTED_VERSIONS = Object.freeze([
28212
- PROTOCOL_SCHEMA_VERSION
28213
- ]);
28298
+ // ../protocol/dist/validation/ajv-runtime.js
28299
+ var import_ajv = __toESM(require_ajv(), 1);
28300
+ var import_ajv_formats = __toESM(require_dist(), 1);
28301
+ var import_equal = __toESM(require_equal(), 1);
28302
+ var import_ucs2length = __toESM(require_ucs2length(), 1);
28214
28303
 
28215
28304
  // ../protocol/dist/validation/is-record.js
28216
28305
  function isRecord(value) {
@@ -28218,10 +28307,6 @@
28218
28307
  }
28219
28308
 
28220
28309
  // ../protocol/dist/validation/ajv-runtime.js
28221
- var import_ajv = __toESM(require_ajv(), 1);
28222
- var import_ajv_formats = __toESM(require_dist(), 1);
28223
- var import_equal = __toESM(require_equal(), 1);
28224
- var import_ucs2length = __toESM(require_ucs2length(), 1);
28225
28310
  function resolveHelperFn(imported) {
28226
28311
  if (typeof imported === "function") {
28227
28312
  return imported;
@@ -28663,6 +28748,13 @@
28663
28748
  return validateActionData(envelope.payload, spec, precompiledActions);
28664
28749
  }
28665
28750
 
28751
+ // ../protocol/dist/version.js
28752
+ var PROTOCOL_VERSION = "draft-2026-09-10";
28753
+ var PROTOCOL_SCHEMA_VERSION = PROTOCOL_VERSION;
28754
+ var CLIENT_SUPPORTED_VERSIONS = Object.freeze([
28755
+ PROTOCOL_SCHEMA_VERSION
28756
+ ]);
28757
+
28666
28758
  // ../protocol/dist/envelopes/builders.js
28667
28759
  function resolveSchemaVersion(parts) {
28668
28760
  if ("schemaVersion" in parts) {
@@ -28853,9 +28945,11 @@
28853
28945
 
28854
28946
  // ../design/dist/themes/consumed-tokens.manifest.json
28855
28947
  var consumed_tokens_manifest_default = {
28856
- version: 1,
28948
+ version: 2,
28857
28949
  tokens: [
28858
28950
  "--ggui-color-container",
28951
+ "--ggui-color-elevated",
28952
+ "--ggui-color-error",
28859
28953
  "--ggui-color-error-100",
28860
28954
  "--ggui-color-error-200",
28861
28955
  "--ggui-color-error-50",
@@ -28863,12 +28957,16 @@
28863
28957
  "--ggui-color-error-600",
28864
28958
  "--ggui-color-error-700",
28865
28959
  "--ggui-color-error-800",
28960
+ "--ggui-color-ground",
28961
+ "--ggui-color-ground-gradient",
28962
+ "--ggui-color-ground-subtle",
28866
28963
  "--ggui-color-info-100",
28867
28964
  "--ggui-color-info-200",
28868
28965
  "--ggui-color-info-50",
28869
28966
  "--ggui-color-info-500",
28870
28967
  "--ggui-color-info-700",
28871
28968
  "--ggui-color-info-800",
28969
+ "--ggui-color-link",
28872
28970
  "--ggui-color-neutral-100",
28873
28971
  "--ggui-color-neutral-200",
28874
28972
  "--ggui-color-neutral-300",
@@ -28876,11 +28974,14 @@
28876
28974
  "--ggui-color-neutral-50",
28877
28975
  "--ggui-color-neutral-500",
28878
28976
  "--ggui-color-neutral-600",
28977
+ "--ggui-color-neutral-900",
28879
28978
  "--ggui-color-onContainer",
28979
+ "--ggui-color-onElevated",
28880
28980
  "--ggui-color-onError",
28981
+ "--ggui-color-onGround",
28881
28982
  "--ggui-color-onPrimary",
28882
- "--ggui-color-onSurface",
28883
- "--ggui-color-onSurfaceVariant",
28983
+ "--ggui-color-onSunken",
28984
+ "--ggui-color-onTertiaryContainer",
28884
28985
  "--ggui-color-outline",
28885
28986
  "--ggui-color-outlineVariant",
28886
28987
  "--ggui-color-primary",
@@ -28900,11 +29001,8 @@
28900
29001
  "--ggui-color-success-500",
28901
29002
  "--ggui-color-success-700",
28902
29003
  "--ggui-color-success-800",
28903
- "--ggui-color-surface",
28904
- "--ggui-color-surface-gradient",
28905
- "--ggui-color-surface-subtle",
28906
- "--ggui-color-surface-sunken",
28907
- "--ggui-color-surfaceVariant",
29004
+ "--ggui-color-sunken",
29005
+ "--ggui-color-tertiaryContainer",
28908
29006
  "--ggui-color-warning-100",
28909
29007
  "--ggui-color-warning-200",
28910
29008
  "--ggui-color-warning-50",
@@ -28912,6 +29010,7 @@
28912
29010
  "--ggui-color-warning-700",
28913
29011
  "--ggui-color-warning-800",
28914
29012
  "--ggui-flash-color",
29013
+ "--ggui-font-family-heading",
28915
29014
  "--ggui-font-family-mono",
28916
29015
  "--ggui-font-family-sans",
28917
29016
  "--ggui-font-lineHeight-normal",
@@ -28924,11 +29023,11 @@
28924
29023
  "--ggui-font-size-xl",
28925
29024
  "--ggui-font-size-xs",
28926
29025
  "--ggui-font-weight-bold",
29026
+ "--ggui-font-weight-heading",
28927
29027
  "--ggui-font-weight-medium",
28928
29028
  "--ggui-font-weight-normal",
28929
29029
  "--ggui-font-weight-semibold",
28930
- "--ggui-radius-md",
28931
- "--ggui-radius-sm",
29030
+ "--ggui-letter-spacing-heading",
28932
29031
  "--ggui-shape-radius-full",
28933
29032
  "--ggui-shape-radius-lg",
28934
29033
  "--ggui-shape-radius-md",
@@ -29117,28 +29216,11 @@
29117
29216
  $type: "fontFamily"
29118
29217
  }
29119
29218
  },
29120
- size: {
29121
- sm: { $value: "0.8125rem", $type: "dimension" },
29122
- // 13px
29123
- base: { $value: "0.875rem", $type: "dimension" },
29124
- // 14px — brand-kit body
29125
- lg: { $value: "1rem", $type: "dimension" },
29126
- // 16px
29127
- xl: { $value: "1.125rem", $type: "dimension" },
29128
- // 18px
29129
- "2xl": { $value: "1.375rem", $type: "dimension" }
29130
- // 22px — brand-kit hero tag
29131
- },
29132
29219
  weight: {
29133
29220
  normal: { $value: "400", $type: "fontWeight" },
29134
29221
  medium: { $value: "500", $type: "fontWeight" },
29135
29222
  semibold: { $value: "600", $type: "fontWeight" },
29136
29223
  bold: { $value: "700", $type: "fontWeight" }
29137
- },
29138
- lineHeight: {
29139
- tight: { $value: "1.2", $type: "number" },
29140
- normal: { $value: "1.5", $type: "number" },
29141
- relaxed: { $value: "1.6", $type: "number" }
29142
29224
  }
29143
29225
  },
29144
29226
  spacing: {
@@ -29199,26 +29281,6 @@
29199
29281
  }
29200
29282
  },
29201
29283
  motion: {
29202
- duration: {
29203
- fast: { $value: "120ms", $type: "duration" },
29204
- normal: { $value: "200ms", $type: "duration" },
29205
- slow: { $value: "400ms", $type: "duration" },
29206
- ambient: { $value: "2000ms", $type: "duration" }
29207
- },
29208
- easing: {
29209
- default: {
29210
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
29211
- $type: "cubicBezier"
29212
- },
29213
- bounce: {
29214
- $value: "cubic-bezier(0.34, 1.56, 0.64, 1)",
29215
- $type: "cubicBezier"
29216
- },
29217
- spring: {
29218
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
29219
- $type: "cubicBezier"
29220
- }
29221
- },
29222
29284
  transition: standardTransitions,
29223
29285
  keyframes: {
29224
29286
  "accent-pulse": {
@@ -29241,7 +29303,6 @@
29241
29303
  $description: "The default ggui theme \u2014 monochrome paper + ink, architectural, no decorative flourish.",
29242
29304
  $metadata: {
29243
29305
  font: "Inter",
29244
- fontUrl: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;700&display=swap",
29245
29306
  philosophy: "The interface is the artifact, not the chrome around it."
29246
29307
  },
29247
29308
  color: {
@@ -29334,15 +29395,15 @@
29334
29395
  "800": { $value: "#181818", $type: "color" }
29335
29396
  },
29336
29397
  // Semantic surface roles
29337
- surface: { $value: "#f4f3ed", $type: "color" },
29398
+ ground: { $value: "#f4f3ed", $type: "color" },
29338
29399
  // paper
29339
- onSurface: { $value: "#292929", $type: "color" },
29400
+ onGround: { $value: "#292929", $type: "color" },
29340
29401
  // ink
29341
- surfaceVariant: { $value: "#ebe9e1", $type: "color" },
29402
+ sunken: { $value: "#ebe9e1", $type: "color" },
29342
29403
  // paper-2
29343
- onSurfaceVariant: { $value: "#5a5a5a", $type: "color" },
29404
+ onSunken: { $value: "#5a5a5a", $type: "color" },
29344
29405
  // ink-3
29345
- container: { $value: "#ebe9e1", $type: "color" },
29406
+ container: { $value: "#f4f3ed", $type: "color" },
29346
29407
  // paper-2
29347
29408
  onContainer: { $value: "#292929", $type: "color" },
29348
29409
  // ink
@@ -29397,7 +29458,6 @@
29397
29458
  $description: "The default ggui theme (dark) \u2014 ink canvas, paper text, architectural and flat.",
29398
29459
  $metadata: {
29399
29460
  font: "Inter",
29400
- fontUrl: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;700&display=swap",
29401
29461
  philosophy: "The interface is the artifact, not the chrome around it."
29402
29462
  },
29403
29463
  color: {
@@ -29487,15 +29547,15 @@
29487
29547
  "700": { $value: "#e8e8e8", $type: "color" },
29488
29548
  "800": { $value: "#f0f0f0", $type: "color" }
29489
29549
  },
29490
- surface: { $value: "#1f1f1f", $type: "color" },
29550
+ ground: { $value: "#1f1f1f", $type: "color" },
29491
29551
  // surface above ink base
29492
- onSurface: { $value: "#f4f3ed", $type: "color" },
29552
+ onGround: { $value: "#f4f3ed", $type: "color" },
29493
29553
  // paper
29494
- surfaceVariant: { $value: "#292929", $type: "color" },
29554
+ sunken: { $value: "#292929", $type: "color" },
29495
29555
  // ink
29496
- onSurfaceVariant: { $value: "#d9d9d9", $type: "color" },
29556
+ onSunken: { $value: "#d9d9d9", $type: "color" },
29497
29557
  // chrome
29498
- container: { $value: "#292929", $type: "color" },
29558
+ container: { $value: "#1f1f1f", $type: "color" },
29499
29559
  // ink
29500
29560
  onContainer: { $value: "#f4f3ed", $type: "color" },
29501
29561
  // paper
@@ -29556,23 +29616,11 @@
29556
29616
  $type: "fontFamily"
29557
29617
  }
29558
29618
  },
29559
- size: {
29560
- sm: { $value: "0.8rem", $type: "dimension" },
29561
- base: { $value: "0.95rem", $type: "dimension" },
29562
- lg: { $value: "1.1rem", $type: "dimension" },
29563
- xl: { $value: "1.3rem", $type: "dimension" },
29564
- "2xl": { $value: "1.6rem", $type: "dimension" }
29565
- },
29566
29619
  weight: {
29567
29620
  normal: { $value: "400", $type: "fontWeight" },
29568
29621
  medium: { $value: "500", $type: "fontWeight" },
29569
29622
  semibold: { $value: "600", $type: "fontWeight" },
29570
29623
  bold: { $value: "700", $type: "fontWeight" }
29571
- },
29572
- lineHeight: {
29573
- tight: { $value: "1.2", $type: "number" },
29574
- normal: { $value: "1.5", $type: "number" },
29575
- relaxed: { $value: "1.7", $type: "number" }
29576
29624
  }
29577
29625
  },
29578
29626
  spacing: {
@@ -29605,26 +29653,6 @@
29605
29653
  }
29606
29654
  },
29607
29655
  motion: {
29608
- duration: {
29609
- fast: { $value: "100ms", $type: "duration" },
29610
- normal: { $value: "200ms", $type: "duration" },
29611
- slow: { $value: "600ms", $type: "duration" },
29612
- ambient: { $value: "2000ms", $type: "duration" }
29613
- },
29614
- easing: {
29615
- default: {
29616
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
29617
- $type: "cubicBezier"
29618
- },
29619
- bounce: {
29620
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
29621
- $type: "cubicBezier"
29622
- },
29623
- spring: {
29624
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
29625
- $type: "cubicBezier"
29626
- }
29627
- },
29628
29656
  keyframes: {
29629
29657
  "glitch-flicker": {
29630
29658
  $value: "0%{opacity:1;transform:none}7%{opacity:0.8;transform:translateX(-2px) skewX(-1deg)}10%{opacity:1;transform:none}47%{opacity:1;transform:none}50%{opacity:0.6;transform:translateX(3px) skewX(2deg)}53%{opacity:1;transform:none}100%{opacity:1;transform:none}",
@@ -29675,7 +29703,6 @@
29675
29703
  $description: "Neon-lit dystopian tech \u2014 cyan neon on dark chrome with glitch animations.",
29676
29704
  $metadata: {
29677
29705
  font: "Orbitron",
29678
- fontUrl: "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&display=swap",
29679
29706
  philosophy: "Chromatic noise, electric tension, digital rebellion."
29680
29707
  },
29681
29708
  color: {
@@ -29744,12 +29771,12 @@
29744
29771
  "800": { $value: "#005266", $type: "color" }
29745
29772
  },
29746
29773
  // Semantic roles (dark theme — inverted neutral scale)
29747
- surface: { $value: "#0a0a0f", $type: "color" },
29748
- onSurface: { $value: "#e8e8f0", $type: "color" },
29749
- surfaceVariant: { $value: "#111118", $type: "color" },
29750
- onSurfaceVariant: { $value: "#8888a0", $type: "color" },
29751
- container: { $value: "#155e75", $type: "color" },
29752
- onContainer: { $value: "#cffafe", $type: "color" },
29774
+ ground: { $value: "#0a0a0f", $type: "color" },
29775
+ onGround: { $value: "#e8e8f0", $type: "color" },
29776
+ sunken: { $value: "#111118", $type: "color" },
29777
+ onSunken: { $value: "#8888a0", $type: "color" },
29778
+ container: { $value: "#0a0a0f", $type: "color" },
29779
+ onContainer: { $value: "#e8e8f0", $type: "color" },
29753
29780
  outline: { $value: "#3a3a48", $type: "color" },
29754
29781
  outlineVariant: { $value: "#25252f", $type: "color" },
29755
29782
  // Primary role pair — onPrimary is the deep night chrome, container
@@ -29796,7 +29823,6 @@
29796
29823
  $description: "Neon-lit dystopian tech (dark) \u2014 brighter cyan on pure-black chrome, cranked neon contrast.",
29797
29824
  $metadata: {
29798
29825
  font: "Orbitron",
29799
- fontUrl: "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&display=swap",
29800
29826
  philosophy: "Chromatic noise, electric tension, digital rebellion."
29801
29827
  },
29802
29828
  color: {
@@ -29871,13 +29897,13 @@
29871
29897
  "700": { $value: "#85e6ff", $type: "color" },
29872
29898
  "800": { $value: "#adeeff", $type: "color" }
29873
29899
  },
29874
- surface: { $value: "#000005", $type: "color" },
29875
- onSurface: { $value: "#e8e8f0", $type: "color" },
29876
- surfaceVariant: { $value: "#0a0a0f", $type: "color" },
29877
- onSurfaceVariant: { $value: "#aaaabe", $type: "color" },
29878
- container: { $value: "#0e7490", $type: "color" },
29900
+ ground: { $value: "#000005", $type: "color" },
29901
+ onGround: { $value: "#e8e8f0", $type: "color" },
29902
+ sunken: { $value: "#0a0a0f", $type: "color" },
29903
+ onSunken: { $value: "#aaaabe", $type: "color" },
29904
+ container: { $value: "#000005", $type: "color" },
29879
29905
  // deeper teal
29880
- onContainer: { $value: "#cffafe", $type: "color" },
29906
+ onContainer: { $value: "#e8e8f0", $type: "color" },
29881
29907
  outline: { $value: "#1a1a24", $type: "color" },
29882
29908
  outlineVariant: { $value: "#111118", $type: "color" },
29883
29909
  // Primary role pair — dark: onPrimary is pure-black-ish, container = deeper teal.
@@ -29929,23 +29955,11 @@
29929
29955
  $type: "fontFamily"
29930
29956
  }
29931
29957
  },
29932
- size: {
29933
- sm: { $value: "0.875rem", $type: "dimension" },
29934
- base: { $value: "1rem", $type: "dimension" },
29935
- lg: { $value: "1.125rem", $type: "dimension" },
29936
- xl: { $value: "1.3rem", $type: "dimension" },
29937
- "2xl": { $value: "1.6rem", $type: "dimension" }
29938
- },
29939
29958
  weight: {
29940
29959
  normal: { $value: "400", $type: "fontWeight" },
29941
29960
  medium: { $value: "500", $type: "fontWeight" },
29942
29961
  semibold: { $value: "600", $type: "fontWeight" },
29943
29962
  bold: { $value: "700", $type: "fontWeight" }
29944
- },
29945
- lineHeight: {
29946
- tight: { $value: "1.3", $type: "number" },
29947
- normal: { $value: "1.6", $type: "number" },
29948
- relaxed: { $value: "1.9", $type: "number" }
29949
29963
  }
29950
29964
  },
29951
29965
  spacing: {
@@ -29987,26 +30001,6 @@
29987
30001
  }
29988
30002
  },
29989
30003
  motion: {
29990
- duration: {
29991
- fast: { $value: "200ms", $type: "duration" },
29992
- normal: { $value: "500ms", $type: "duration" },
29993
- slow: { $value: "1500ms", $type: "duration" },
29994
- ambient: { $value: "6000ms", $type: "duration" }
29995
- },
29996
- easing: {
29997
- default: {
29998
- $value: "cubic-bezier(0.33, 0, 0.67, 1)",
29999
- $type: "cubicBezier"
30000
- },
30001
- bounce: {
30002
- $value: "cubic-bezier(0.34, 1.2, 0.64, 1)",
30003
- $type: "cubicBezier"
30004
- },
30005
- spring: {
30006
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30007
- $type: "cubicBezier"
30008
- }
30009
- },
30010
30004
  keyframes: {
30011
30005
  "slow-breathe": {
30012
30006
  $value: "0%{opacity:0.85}50%{opacity:1}100%{opacity:0.85}",
@@ -30036,7 +30030,6 @@
30036
30030
  $description: "Minimalist Japanese aesthetic \u2014 warm stone tones, deliberate space, and unhurried motion.",
30037
30031
  $metadata: {
30038
30032
  font: "Noto Serif JP",
30039
- fontUrl: "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&display=swap",
30040
30033
  philosophy: "Beauty in imperfection. Stillness as presence."
30041
30034
  },
30042
30035
  color: {
@@ -30104,12 +30097,12 @@
30104
30097
  "800": { $type: "color", $value: "#2c3d46" }
30105
30098
  },
30106
30099
  // Semantic roles
30107
- surface: { $value: "#faf9f7", $type: "color" },
30108
- onSurface: { $value: "#2a2724", $type: "color" },
30109
- surfaceVariant: { $value: "#f3f1ed", $type: "color" },
30110
- onSurfaceVariant: { $value: "#6b635b", $type: "color" },
30111
- container: { $value: "#e8ebe2", $type: "color" },
30112
- onContainer: { $value: "#33392e", $type: "color" },
30100
+ ground: { $value: "#faf9f7", $type: "color" },
30101
+ onGround: { $value: "#2a2724", $type: "color" },
30102
+ sunken: { $value: "#f3f1ed", $type: "color" },
30103
+ onSunken: { $value: "#6b635b", $type: "color" },
30104
+ container: { $value: "#faf9f7", $type: "color" },
30105
+ onContainer: { $value: "#2a2724", $type: "color" },
30113
30106
  outline: { $value: "#d5d0c8", $type: "color" },
30114
30107
  outlineVariant: { $value: "#e7e4de", $type: "color" },
30115
30108
  // Primary role pair — onPrimary is stone ivory on moss.
@@ -30153,7 +30146,6 @@
30153
30146
  $description: "Minimalist Japanese aesthetic (dark) \u2014 dusk stone surfaces with restrained moss accents and unhurried motion.",
30154
30147
  $metadata: {
30155
30148
  font: "Noto Serif JP",
30156
- fontUrl: "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&display=swap",
30157
30149
  philosophy: "Beauty in imperfection. Stillness as presence."
30158
30150
  },
30159
30151
  color: {
@@ -30222,14 +30214,14 @@
30222
30214
  "700": { $type: "color", $value: "#546771" },
30223
30215
  "800": { $type: "color", $value: "#38454d" }
30224
30216
  },
30225
- surface: { $value: "#2a2724", $type: "color" },
30226
- onSurface: { $value: "#f3f1ed", $type: "color" },
30217
+ ground: { $value: "#2a2724", $type: "color" },
30218
+ onGround: { $value: "#f3f1ed", $type: "color" },
30227
30219
  // muted off-cream, not pure white
30228
- surfaceVariant: { $value: "#3e3a36", $type: "color" },
30229
- onSurfaceVariant: { $value: "#b8b0a4", $type: "color" },
30230
- container: { $value: "#48543d", $type: "color" },
30220
+ sunken: { $value: "#3e3a36", $type: "color" },
30221
+ onSunken: { $value: "#b8b0a4", $type: "color" },
30222
+ container: { $value: "#2a2724", $type: "color" },
30231
30223
  // deep moss
30232
- onContainer: { $value: "#e8ebe2", $type: "color" },
30224
+ onContainer: { $value: "#f3f1ed", $type: "color" },
30233
30225
  // primary-100 in dark tree
30234
30226
  outline: { $value: "#5e5650", $type: "color" },
30235
30227
  outlineVariant: { $value: "#3e3a36", $type: "color" },
@@ -30281,23 +30273,11 @@
30281
30273
  $type: "fontFamily"
30282
30274
  }
30283
30275
  },
30284
- size: {
30285
- sm: { $value: "0.875rem", $type: "dimension" },
30286
- base: { $value: "1rem", $type: "dimension" },
30287
- lg: { $value: "1.125rem", $type: "dimension" },
30288
- xl: { $value: "1.25rem", $type: "dimension" },
30289
- "2xl": { $value: "1.5rem", $type: "dimension" }
30290
- },
30291
30276
  weight: {
30292
30277
  normal: { $value: "400", $type: "fontWeight" },
30293
30278
  medium: { $value: "500", $type: "fontWeight" },
30294
30279
  semibold: { $value: "600", $type: "fontWeight" },
30295
30280
  bold: { $value: "700", $type: "fontWeight" }
30296
- },
30297
- lineHeight: {
30298
- tight: { $value: "1.25", $type: "number" },
30299
- normal: { $value: "1.5", $type: "number" },
30300
- relaxed: { $value: "1.75", $type: "number" }
30301
30281
  }
30302
30282
  },
30303
30283
  spacing: {
@@ -30330,26 +30310,6 @@
30330
30310
  }
30331
30311
  },
30332
30312
  motion: {
30333
- duration: {
30334
- fast: { $value: "120ms", $type: "duration" },
30335
- normal: { $value: "250ms", $type: "duration" },
30336
- slow: { $value: "800ms", $type: "duration" },
30337
- ambient: { $value: "2500ms", $type: "duration" }
30338
- },
30339
- easing: {
30340
- default: {
30341
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30342
- $type: "cubicBezier"
30343
- },
30344
- bounce: {
30345
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
30346
- $type: "cubicBezier"
30347
- },
30348
- spring: {
30349
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30350
- $type: "cubicBezier"
30351
- }
30352
- },
30353
30313
  transition: {
30354
30314
  fast: {
30355
30315
  $value: "120ms cubic-bezier(0.4, 0, 0.2, 1)",
@@ -30397,7 +30357,6 @@
30397
30357
  $description: "Hot pink neon on dark \u2014 electric glow effects, neon flicker, and flowing magenta particles.",
30398
30358
  $metadata: {
30399
30359
  font: "Outfit",
30400
- fontUrl: "https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap",
30401
30360
  philosophy: "Midnight electricity. The city never sleeps."
30402
30361
  },
30403
30362
  color: {
@@ -30442,12 +30401,12 @@
30442
30401
  "500": { $value: "#38bdf8", $type: "color" }
30443
30402
  },
30444
30403
  // Semantic roles (dark theme — inverted neutral scale)
30445
- surface: { $value: "#09090b", $type: "color" },
30446
- onSurface: { $value: "#ececf0", $type: "color" },
30447
- surfaceVariant: { $value: "#111114", $type: "color" },
30448
- onSurfaceVariant: { $value: "#8a8a9a", $type: "color" },
30449
- container: { $value: "#9d174d", $type: "color" },
30450
- onContainer: { $value: "#fce7f3", $type: "color" },
30404
+ ground: { $value: "#09090b", $type: "color" },
30405
+ onGround: { $value: "#ececf0", $type: "color" },
30406
+ sunken: { $value: "#111114", $type: "color" },
30407
+ onSunken: { $value: "#8a8a9a", $type: "color" },
30408
+ container: { $value: "#09090b", $type: "color" },
30409
+ onContainer: { $value: "#ececf0", $type: "color" },
30451
30410
  outline: { $value: "#3b3b44", $type: "color" },
30452
30411
  outlineVariant: { $value: "#232329", $type: "color" },
30453
30412
  // Primary role pair — onPrimary is deep noir so hot pink CTAs pop.
@@ -30489,7 +30448,6 @@
30489
30448
  $description: "Hot pink neon on pure black (dark) \u2014 sharper noir contrast, brighter electric glow, deeper magenta containers.",
30490
30449
  $metadata: {
30491
30450
  font: "Outfit",
30492
- fontUrl: "https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap",
30493
30451
  philosophy: "Midnight electricity. The city never sleeps."
30494
30452
  },
30495
30453
  color: {
@@ -30535,13 +30493,13 @@
30535
30493
  ...standardSemanticScales.dark.info,
30536
30494
  "500": { $value: "#5acdff", $type: "color" }
30537
30495
  },
30538
- surface: { $value: "#000000", $type: "color" },
30539
- onSurface: { $value: "#ececf0", $type: "color" },
30540
- surfaceVariant: { $value: "#09090b", $type: "color" },
30541
- onSurfaceVariant: { $value: "#b0b0be", $type: "color" },
30542
- container: { $value: "#be185d", $type: "color" },
30496
+ ground: { $value: "#000000", $type: "color" },
30497
+ onGround: { $value: "#ececf0", $type: "color" },
30498
+ sunken: { $value: "#09090b", $type: "color" },
30499
+ onSunken: { $value: "#b0b0be", $type: "color" },
30500
+ container: { $value: "#000000", $type: "color" },
30543
30501
  // richer magenta
30544
- onContainer: { $value: "#fce7f3", $type: "color" },
30502
+ onContainer: { $value: "#ececf0", $type: "color" },
30545
30503
  outline: { $value: "#19191e", $type: "color" },
30546
30504
  outlineVariant: { $value: "#111114", $type: "color" },
30547
30505
  // Primary role pair — dark: onPrimary is pure black, container = richer magenta.
@@ -30589,23 +30547,11 @@
30589
30547
  $type: "fontFamily"
30590
30548
  }
30591
30549
  },
30592
- size: {
30593
- sm: { $value: "0.875rem", $type: "dimension" },
30594
- base: { $value: "1rem", $type: "dimension" },
30595
- lg: { $value: "1.15rem", $type: "dimension" },
30596
- xl: { $value: "1.3rem", $type: "dimension" },
30597
- "2xl": { $value: "1.625rem", $type: "dimension" }
30598
- },
30599
30550
  weight: {
30600
30551
  normal: { $value: "400", $type: "fontWeight" },
30601
30552
  medium: { $value: "500", $type: "fontWeight" },
30602
30553
  semibold: { $value: "600", $type: "fontWeight" },
30603
30554
  bold: { $value: "700", $type: "fontWeight" }
30604
- },
30605
- lineHeight: {
30606
- tight: { $value: "1.3", $type: "number" },
30607
- normal: { $value: "1.6", $type: "number" },
30608
- relaxed: { $value: "1.85", $type: "number" }
30609
30555
  }
30610
30556
  },
30611
30557
  spacing: {
@@ -30647,26 +30593,6 @@
30647
30593
  }
30648
30594
  },
30649
30595
  motion: {
30650
- duration: {
30651
- fast: { $value: "200ms", $type: "duration" },
30652
- normal: { $value: "400ms", $type: "duration" },
30653
- slow: { $value: "1200ms", $type: "duration" },
30654
- ambient: { $value: "5000ms", $type: "duration" }
30655
- },
30656
- easing: {
30657
- default: {
30658
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30659
- $type: "cubicBezier"
30660
- },
30661
- bounce: {
30662
- $value: "cubic-bezier(0.34, 1.3, 0.64, 1)",
30663
- $type: "cubicBezier"
30664
- },
30665
- spring: {
30666
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30667
- $type: "cubicBezier"
30668
- }
30669
- },
30670
30596
  keyframes: {
30671
30597
  "leaf-float": {
30672
30598
  $value: "0%{transform:translateY(0) rotate(0deg);opacity:0.7}25%{transform:translateY(-6px) rotate(3deg)}50%{transform:translateY(-2px) rotate(-2deg);opacity:1}75%{transform:translateY(-8px) rotate(2deg)}100%{transform:translateY(0) rotate(0deg);opacity:0.7}",
@@ -30689,7 +30615,6 @@
30689
30615
  $description: "Organic greens on warm cream \u2014 leaf-float animations and vine-grow motion.",
30690
30616
  $metadata: {
30691
30617
  font: "Lora",
30692
- fontUrl: "https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap",
30693
30618
  philosophy: "Rooted in nature. Growing with intention."
30694
30619
  },
30695
30620
  color: {
@@ -30738,12 +30663,12 @@
30738
30663
  },
30739
30664
  info: standardSemanticScales.light.info,
30740
30665
  // Semantic roles
30741
- surface: { $value: "#fefcf8", $type: "color" },
30742
- onSurface: { $value: "#352e20", $type: "color" },
30743
- surfaceVariant: { $value: "#fdf8ef", $type: "color" },
30744
- onSurfaceVariant: { $value: "#746448", $type: "color" },
30745
- container: { $value: "#dcfce7", $type: "color" },
30746
- onContainer: { $value: "#14532d", $type: "color" },
30666
+ ground: { $value: "#fefcf8", $type: "color" },
30667
+ onGround: { $value: "#352e20", $type: "color" },
30668
+ sunken: { $value: "#fdf8ef", $type: "color" },
30669
+ onSunken: { $value: "#746448", $type: "color" },
30670
+ container: { $value: "#fefcf8", $type: "color" },
30671
+ onContainer: { $value: "#352e20", $type: "color" },
30747
30672
  outline: { $value: "#f0e4c9", $type: "color" },
30748
30673
  outlineVariant: { $value: "#f8f0df", $type: "color" },
30749
30674
  // Primary role pair — onPrimary is cream for the leaf-green brand hex.
@@ -30785,7 +30710,6 @@
30785
30710
  $description: "Forest at night (dark) \u2014 deep soil surfaces with lifted leaf-green accents and gentle organic motion.",
30786
30711
  $metadata: {
30787
30712
  font: "Lora",
30788
- fontUrl: "https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap",
30789
30713
  philosophy: "Rooted in nature. Growing with intention."
30790
30714
  },
30791
30715
  color: {
@@ -30820,13 +30744,13 @@
30820
30744
  warning: standardSemanticScales.dark.warning,
30821
30745
  error: standardSemanticScales.dark.error,
30822
30746
  info: standardSemanticScales.dark.info,
30823
- surface: { $value: "#1f1c18", $type: "color" },
30824
- onSurface: { $value: "#fefcf8", $type: "color" },
30825
- surfaceVariant: { $value: "#352e20", $type: "color" },
30826
- onSurfaceVariant: { $value: "#dccba5", $type: "color" },
30827
- container: { $value: "#166534", $type: "color" },
30747
+ ground: { $value: "#1f1c18", $type: "color" },
30748
+ onGround: { $value: "#fefcf8", $type: "color" },
30749
+ sunken: { $value: "#352e20", $type: "color" },
30750
+ onSunken: { $value: "#dccba5", $type: "color" },
30751
+ container: { $value: "#1f1c18", $type: "color" },
30828
30752
  // deep forest
30829
- onContainer: { $value: "#dcfce7", $type: "color" },
30753
+ onContainer: { $value: "#fefcf8", $type: "color" },
30830
30754
  outline: { $value: "#504530", $type: "color" },
30831
30755
  outlineVariant: { $value: "#352e20", $type: "color" },
30832
30756
  // Primary role pair — dark: lifted leaf-green, onPrimary = forest soil.
@@ -30891,24 +30815,11 @@
30891
30815
  $type: "fontFamily"
30892
30816
  }
30893
30817
  },
30894
- size: {
30895
- sm: { $value: "0.875rem", $type: "dimension" },
30896
- base: { $value: "1rem", $type: "dimension" },
30897
- lg: { $value: "1.125rem", $type: "dimension" },
30898
- xl: { $value: "1.25rem", $type: "dimension" },
30899
- "2xl": { $value: "1.5rem", $type: "dimension" }
30900
- },
30901
30818
  weight: {
30902
30819
  normal: { $value: "400", $type: "fontWeight" },
30903
30820
  medium: { $value: "500", $type: "fontWeight" },
30904
30821
  semibold: { $value: "600", $type: "fontWeight" },
30905
30822
  bold: { $value: "700", $type: "fontWeight" }
30906
- },
30907
- lineHeight: {
30908
- tight: { $value: "1.25", $type: "number" },
30909
- normal: { $value: "1.55", $type: "number" },
30910
- // claude.ai-ish — slightly looser than Indigo
30911
- relaxed: { $value: "1.75", $type: "number" }
30912
30823
  }
30913
30824
  },
30914
30825
  // Same dual-key spacing scale as Indigo so primitives that
@@ -30966,21 +30877,6 @@
30966
30877
  motion: {
30967
30878
  // Claudic is calmer than Indigo — no `ambient` 3s breathing
30968
30879
  // duration is exposed. Animations stay snappy + functional only.
30969
- duration: {
30970
- fast: { $value: "120ms", $type: "duration" },
30971
- normal: { $value: "240ms", $type: "duration" },
30972
- slow: { $value: "480ms", $type: "duration" }
30973
- },
30974
- easing: {
30975
- default: {
30976
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30977
- $type: "cubicBezier"
30978
- },
30979
- spring: {
30980
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30981
- $type: "cubicBezier"
30982
- }
30983
- },
30984
30880
  keyframes: {
30985
30881
  entrance: {
30986
30882
  $value: "0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:none}",
@@ -31081,15 +30977,15 @@
31081
30977
  "800": { $value: "#363432", $type: "color" }
31082
30978
  },
31083
30979
  // Two-tier semantic roles
31084
- surface: { $value: "#faf9f5", $type: "color" },
30980
+ ground: { $value: "#faf9f5", $type: "color" },
31085
30981
  // Ivory
31086
- onSurface: { $value: "#141413", $type: "color" },
30982
+ onGround: { $value: "#141413", $type: "color" },
31087
30983
  // Slate
31088
- surfaceVariant: { $value: "#f5f4ee", $type: "color" },
31089
- onSurfaceVariant: { $value: "#56544f", $type: "color" },
31090
- container: { $value: "#fbf2ee", $type: "color" },
30984
+ sunken: { $value: "#f5f4ee", $type: "color" },
30985
+ onSunken: { $value: "#56544f", $type: "color" },
30986
+ container: { $value: "#faf9f5", $type: "color" },
31091
30987
  // primary-50
31092
- onContainer: { $value: "#4d2920", $type: "color" },
30988
+ onContainer: { $value: "#141413", $type: "color" },
31093
30989
  // primary-900
31094
30990
  outline: { $value: "#dad8cc", $type: "color" },
31095
30991
  outlineVariant: { $value: "#ebe9df", $type: "color" },
@@ -31221,14 +31117,14 @@
31221
31117
  "700": { $value: "#d1cfca", $type: "color" },
31222
31118
  "800": { $value: "#e6e4e0", $type: "color" }
31223
31119
  },
31224
- surface: { $value: "#262624", $type: "color" },
31120
+ ground: { $value: "#262624", $type: "color" },
31225
31121
  // Charcoal
31226
- onSurface: { $value: "#faf9f5", $type: "color" },
31122
+ onGround: { $value: "#faf9f5", $type: "color" },
31227
31123
  // Ivory
31228
- surfaceVariant: { $value: "#2d2c2a", $type: "color" },
31229
- onSurfaceVariant: { $value: "#a8a59f", $type: "color" },
31230
- container: { $value: "#3d3b39", $type: "color" },
31231
- onContainer: { $value: "#fbf2ee", $type: "color" },
31124
+ sunken: { $value: "#2d2c2a", $type: "color" },
31125
+ onSunken: { $value: "#a8a59f", $type: "color" },
31126
+ container: { $value: "#262624", $type: "color" },
31127
+ onContainer: { $value: "#faf9f5", $type: "color" },
31232
31128
  outline: { $value: "#3d3b39", $type: "color" },
31233
31129
  outlineVariant: { $value: "#2d2c2a", $type: "color" },
31234
31130
  // Primary role pair — dark: onPrimary is charcoal so text reads on the
@@ -31291,31 +31187,12 @@
31291
31187
  $type: "fontFamily"
31292
31188
  }
31293
31189
  },
31294
- size: {
31295
- sm: { $value: "0.8125rem", $type: "dimension" },
31296
- // 13px
31297
- base: { $value: "0.9375rem", $type: "dimension" },
31298
- // 15px
31299
- lg: { $value: "1.0625rem", $type: "dimension" },
31300
- // 17px
31301
- xl: { $value: "1.3125rem", $type: "dimension" },
31302
- // 21px — bumped for display headings
31303
- "2xl": { $value: "1.75rem", $type: "dimension" }
31304
- // 28px — generous display
31305
- },
31306
31190
  weight: {
31307
31191
  normal: { $value: "400", $type: "fontWeight" },
31308
31192
  medium: { $value: "500", $type: "fontWeight" },
31309
31193
  semibold: { $value: "600", $type: "fontWeight" },
31310
31194
  bold: { $value: "680", $type: "fontWeight" }
31311
31195
  // variable-axis weight; reads bold without going harsh on Inter
31312
- },
31313
- lineHeight: {
31314
- tight: { $value: "1.1", $type: "number" },
31315
- // headings
31316
- normal: { $value: "1.55", $type: "number" },
31317
- // body — generous, editorial
31318
- relaxed: { $value: "1.7", $type: "number" }
31319
31196
  }
31320
31197
  },
31321
31198
  spacing: {
@@ -31372,24 +31249,6 @@
31372
31249
  }
31373
31250
  },
31374
31251
  motion: {
31375
- duration: {
31376
- fast: { $value: "150ms", $type: "duration" },
31377
- normal: { $value: "250ms", $type: "duration" },
31378
- slow: { $value: "420ms", $type: "duration" },
31379
- ambient: { $value: "8000ms", $type: "duration" }
31380
- // background breathing
31381
- },
31382
- easing: {
31383
- // Linear's signature easing — confident, slightly overshoots arrival.
31384
- default: {
31385
- $value: "cubic-bezier(0.32, 0.72, 0, 1)",
31386
- $type: "cubicBezier"
31387
- },
31388
- spring: {
31389
- $value: "cubic-bezier(0.16, 1, 0.3, 1)",
31390
- $type: "cubicBezier"
31391
- }
31392
- },
31393
31252
  keyframes: {
31394
31253
  entrance: {
31395
31254
  $value: "0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:none}",
@@ -31488,15 +31347,15 @@
31488
31347
  "700": { $value: "#155e75", $type: "color" },
31489
31348
  "800": { $value: "#164e63", $type: "color" }
31490
31349
  },
31491
- surface: { $value: "#fafaf7", $type: "color" },
31350
+ ground: { $value: "#fafaf7", $type: "color" },
31492
31351
  // Paper
31493
- onSurface: { $value: "#15131f", $type: "color" },
31352
+ onGround: { $value: "#15131f", $type: "color" },
31494
31353
  // Ink
31495
- surfaceVariant: { $value: "#f4f4f0", $type: "color" },
31496
- onSurfaceVariant: { $value: "#4a4954", $type: "color" },
31497
- container: { $value: "#eef2ff", $type: "color" },
31354
+ sunken: { $value: "#f4f4f0", $type: "color" },
31355
+ onSunken: { $value: "#4a4954", $type: "color" },
31356
+ container: { $value: "#fafaf7", $type: "color" },
31498
31357
  // primary-50 — pale indigo whisper
31499
- onContainer: { $value: "#1e1b4b", $type: "color" },
31358
+ onContainer: { $value: "#15131f", $type: "color" },
31500
31359
  // primary-900
31501
31360
  outline: { $value: "#d4d3cf", $type: "color" },
31502
31361
  outlineVariant: { $value: "#e8e7e3", $type: "color" },
@@ -31630,13 +31489,13 @@
31630
31489
  // indistinguishable from default. Variant is now #221e35 (visible
31631
31490
  // 1-tier step) and outline #3e3c50 (matches neutral-400, gives
31632
31491
  // borders a hairline visibility on dark).
31633
- surface: { $value: "#15131f", $type: "color" },
31634
- onSurface: { $value: "#f5f4f9", $type: "color" },
31635
- surfaceVariant: { $value: "#221e35", $type: "color" },
31636
- onSurfaceVariant: { $value: "#c8c6d2", $type: "color" },
31637
- container: { $value: "#312e81", $type: "color" },
31492
+ ground: { $value: "#15131f", $type: "color" },
31493
+ onGround: { $value: "#f5f4f9", $type: "color" },
31494
+ sunken: { $value: "#221e35", $type: "color" },
31495
+ onSunken: { $value: "#c8c6d2", $type: "color" },
31496
+ container: { $value: "#15131f", $type: "color" },
31638
31497
  // primary-100 dark
31639
- onContainer: { $value: "#eef2ff", $type: "color" },
31498
+ onContainer: { $value: "#f5f4f9", $type: "color" },
31640
31499
  outline: { $value: "#3e3c50", $type: "color" },
31641
31500
  outlineVariant: { $value: "#2a2839", $type: "color" },
31642
31501
  // Primary role pair — dark: onPrimary is midnight, container = deep indigo.
@@ -31693,23 +31552,11 @@
31693
31552
  $type: "fontFamily"
31694
31553
  }
31695
31554
  },
31696
- size: {
31697
- sm: { $value: "0.875rem", $type: "dimension" },
31698
- base: { $value: "1rem", $type: "dimension" },
31699
- lg: { $value: "1.125rem", $type: "dimension" },
31700
- xl: { $value: "1.25rem", $type: "dimension" },
31701
- "2xl": { $value: "1.5rem", $type: "dimension" }
31702
- },
31703
31555
  weight: {
31704
31556
  normal: { $value: "400", $type: "fontWeight" },
31705
31557
  medium: { $value: "500", $type: "fontWeight" },
31706
31558
  semibold: { $value: "600", $type: "fontWeight" },
31707
31559
  bold: { $value: "700", $type: "fontWeight" }
31708
- },
31709
- lineHeight: {
31710
- tight: { $value: "1.25", $type: "number" },
31711
- normal: { $value: "1.5", $type: "number" },
31712
- relaxed: { $value: "1.75", $type: "number" }
31713
31560
  }
31714
31561
  },
31715
31562
  spacing: {
@@ -31729,20 +31576,6 @@
31729
31576
  // round-3 "borders looking ugly" residual's shadow half), light
31730
31577
  // wants classic soft grey.
31731
31578
  motion: {
31732
- duration: {
31733
- fast: { $value: "120ms", $type: "duration" },
31734
- normal: { $value: "200ms", $type: "duration" },
31735
- slow: { $value: "400ms", $type: "duration" },
31736
- ambient: { $value: "2000ms", $type: "duration" }
31737
- },
31738
- easing: {
31739
- default: { $value: "cubic-bezier(0.4, 0, 0.2, 1)", $type: "cubicBezier" },
31740
- bounce: {
31741
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
31742
- $type: "cubicBezier"
31743
- },
31744
- spring: { $value: "cubic-bezier(0.22, 1, 0.36, 1)", $type: "cubicBezier" }
31745
- },
31746
31579
  transition: {
31747
31580
  fast: { $value: "120ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
31748
31581
  normal: { $value: "200ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
@@ -31811,7 +31644,6 @@
31811
31644
  $description: "The guuey product brand (dark) \u2014 slate-ink surfaces, slime #B8FF3A accent, DM Sans.",
31812
31645
  $metadata: {
31813
31646
  font: "DM Sans",
31814
- fontUrl: "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
31815
31647
  philosophy: "Agent-native. Slime on slate.",
31816
31648
  // Round 5 (founder-ruled): the guuey host clips the view with its
31817
31649
  // own rounded rim — the HOST owns the card silhouette; the theme
@@ -31901,11 +31733,11 @@
31901
31733
  "800": { $value: "#BFECFF", $type: "color" }
31902
31734
  },
31903
31735
  // M3 roles — portal values verbatim.
31904
- surface: { $value: "#1A1D24", $type: "color" },
31905
- onSurface: { $value: "#F6F5EE", $type: "color" },
31906
- surfaceVariant: { $value: "#242938", $type: "color" },
31907
- onSurfaceVariant: { $value: "#B7BAC4", $type: "color" },
31908
- container: { $value: "#232630", $type: "color" },
31736
+ ground: { $value: "#1A1D24", $type: "color" },
31737
+ onGround: { $value: "#F6F5EE", $type: "color" },
31738
+ sunken: { $value: "#242938", $type: "color" },
31739
+ onSunken: { $value: "#B7BAC4", $type: "color" },
31740
+ container: { $value: "#1A1D24", $type: "color" },
31909
31741
  // elevated
31910
31742
  onContainer: { $value: "#F6F5EE", $type: "color" },
31911
31743
  // Round 4 (portal stops): .14 IS the base hairline; .18 is the
@@ -32004,11 +31836,11 @@
32004
31836
  "700": { $value: "#06455D", $type: "color" },
32005
31837
  "800": { $value: "#0A3346", $type: "color" }
32006
31838
  },
32007
- surface: { $value: "#FFFFFF", $type: "color" },
32008
- onSurface: { $value: "#1A1D24", $type: "color" },
32009
- surfaceVariant: { $value: "#F6F5EE", $type: "color" },
32010
- onSurfaceVariant: { $value: "#4A4F5C", $type: "color" },
32011
- container: { $value: "#FBFAF6", $type: "color" },
31839
+ ground: { $value: "#FFFFFF", $type: "color" },
31840
+ onGround: { $value: "#1A1D24", $type: "color" },
31841
+ sunken: { $value: "#F6F5EE", $type: "color" },
31842
+ onSunken: { $value: "#4A4F5C", $type: "color" },
31843
+ container: { $value: "#FFFFFF", $type: "color" },
32012
31844
  onContainer: { $value: "#1A1D24", $type: "color" },
32013
31845
  outline: { $value: "rgba(26, 29, 36, 0.18)", $type: "color" },
32014
31846
  outlineVariant: { $value: "rgba(26, 29, 36, 0.10)", $type: "color" },
@@ -32375,6 +32207,20 @@
32375
32207
  "@ggui-ai/wire": "wire",
32376
32208
  "@ggui-ai/gadgets": "gadgets"
32377
32209
  };
32210
+ function findBareImportSpecifiers(code) {
32211
+ const out = /* @__PURE__ */ new Set();
32212
+ const re = /(?:^|[^.\w$])(?:import|from)\s*['"]([^'"]+)['"]/g;
32213
+ let m;
32214
+ while ((m = re.exec(code)) !== null) {
32215
+ const spec = m[1];
32216
+ if (spec === void 0)
32217
+ continue;
32218
+ if (/^(?:[a-z][a-z0-9+.-]*:|\.{0,2}\/)/i.test(spec))
32219
+ continue;
32220
+ out.add(spec);
32221
+ }
32222
+ return [...out];
32223
+ }
32378
32224
  function rewriteAssetUrl(code, opts) {
32379
32225
  const base = opts.shimBaseUrl.replace(/\/$/, "");
32380
32226
  for (const [specifier, shimName] of Object.entries(ASSET_SHIM_FOR_SPECIFIER)) {
@@ -32389,7 +32235,21 @@
32389
32235
  code = replaceSpecifier(code, "react", base);
32390
32236
  return code;
32391
32237
  }
32238
+ var FORBIDDEN_IMPORT_SPECIFIERS = ["@ggui-ai/wire/internal"];
32239
+ var ForbiddenImportSpecifierError = class extends Error {
32240
+ specifier;
32241
+ constructor(specifier) {
32242
+ super(`import rewriter: generated component code imported '${specifier}', which is not available to components \u2014 it is the writer side of the wire; components read \`useRender().isConnected\` and never write it`);
32243
+ this.name = "ForbiddenImportSpecifierError";
32244
+ this.specifier = specifier;
32245
+ }
32246
+ };
32392
32247
  function rewriteImports(code, options) {
32248
+ const bare = findBareImportSpecifiers(code);
32249
+ for (const specifier of FORBIDDEN_IMPORT_SPECIFIERS) {
32250
+ if (bare.includes(specifier))
32251
+ throw new ForbiddenImportSpecifierError(specifier);
32252
+ }
32393
32253
  switch (options.mode) {
32394
32254
  case "data-url":
32395
32255
  return rewriteDataUrl(code, options);