@almadar/ui 5.9.5 → 5.9.7

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.
@@ -7145,7 +7145,7 @@ function HealthBar({
7145
7145
  "div",
7146
7146
  {
7147
7147
  className: cn(
7148
- "relative overflow-hidden rounded-full bg-gray-700",
7148
+ "relative overflow-hidden rounded-full bg-muted",
7149
7149
  sizes.bar,
7150
7150
  "w-24",
7151
7151
  className
@@ -7155,7 +7155,7 @@ function HealthBar({
7155
7155
  {
7156
7156
  className: cn(
7157
7157
  "absolute inset-y-0 left-0 rounded-full",
7158
- percentage > 66 ? "bg-green-500" : percentage > 33 ? "bg-yellow-500" : "bg-red-500",
7158
+ percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
7159
7159
  animated && "transition-all duration-300"
7160
7160
  ),
7161
7161
  style: { width: `${percentage}%` }
@@ -7177,7 +7177,7 @@ var init_HealthBar = __esm({
7177
7177
  heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
7178
7178
  "svg",
7179
7179
  {
7180
- className: cn("transition-all duration-200", size, filled ? "text-red-500" : "text-gray-400"),
7180
+ className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
7181
7181
  viewBox: "0 0 24 24",
7182
7182
  fill: filled ? "currentColor" : "none",
7183
7183
  stroke: "currentColor",
@@ -7241,7 +7241,7 @@ function ScoreDisplay({
7241
7241
  ),
7242
7242
  children: [
7243
7243
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
7244
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
7244
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
7245
7245
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
7246
7246
  ]
7247
7247
  }
@@ -7354,8 +7354,8 @@ var init_ControlButton = __esm({
7354
7354
  };
7355
7355
  shapeMap = {
7356
7356
  circle: "rounded-full",
7357
- rounded: "rounded-xl",
7358
- square: "rounded-md"
7357
+ rounded: "rounded-interactive",
7358
+ square: "rounded-interactive"
7359
7359
  };
7360
7360
  variantMap = {
7361
7361
  primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
@@ -7523,12 +7523,12 @@ function TimerDisplay({
7523
7523
  "div",
7524
7524
  {
7525
7525
  className: cn(
7526
- "inline-flex items-center justify-center rounded-lg",
7527
- "bg-[var(--color-card)]/80 border border-gray-600 font-mono font-bold tabular-nums",
7526
+ "inline-flex items-center justify-center rounded-container",
7527
+ "bg-card/80 border border-muted font-mono font-bold tabular-nums",
7528
7528
  sizeMap4[size],
7529
- running && "border-green-500/50",
7530
- isLow && "text-red-400 border-red-500/50 animate-pulse",
7531
- !isLow && "text-[var(--color-foreground)]",
7529
+ running && "border-success/50",
7530
+ isLow && "text-error border-error/50 animate-pulse",
7531
+ !isLow && "text-foreground",
7532
7532
  className
7533
7533
  ),
7534
7534
  children: formatTime(seconds, format)
@@ -7561,17 +7561,17 @@ function ResourceCounter({
7561
7561
  "div",
7562
7562
  {
7563
7563
  className: cn(
7564
- "inline-flex items-center rounded-md",
7565
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
7564
+ "inline-flex items-center rounded-container",
7565
+ "bg-card/80 border border-muted font-medium text-foreground",
7566
7566
  sizes.wrapper,
7567
7567
  className
7568
7568
  ),
7569
7569
  children: [
7570
7570
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
7571
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
7571
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
7572
7572
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
7573
7573
  value,
7574
- max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500", children: [
7574
+ max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
7575
7575
  "/",
7576
7576
  max
7577
7577
  ] })
@@ -7612,18 +7612,18 @@ function ItemSlot({
7612
7612
  disabled: !isClickable,
7613
7613
  title: label,
7614
7614
  className: cn(
7615
- "relative flex items-center justify-center rounded-lg border-2",
7616
- "bg-[var(--color-card)]/80 transition-all duration-150",
7615
+ "relative flex items-center justify-center rounded-interactive border-2",
7616
+ "bg-card/80 transition-all duration-150",
7617
7617
  sizeMap6[size],
7618
- empty ? "border-gray-700 bg-[var(--color-card)]/50" : rarityBorderMap[rarity],
7618
+ empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
7619
7619
  !empty && rarityGlowMap[rarity],
7620
- selected && "ring-2 ring-white ring-offset-1 ring-offset-gray-900",
7620
+ selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
7621
7621
  isClickable && !empty && "hover:brightness-125 cursor-pointer",
7622
- isClickable && empty && "hover:border-gray-500 cursor-pointer",
7622
+ isClickable && empty && "hover:border-muted cursor-pointer",
7623
7623
  !isClickable && "cursor-default",
7624
7624
  className
7625
7625
  ),
7626
- children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600 text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7626
+ children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7627
7627
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
7628
7628
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
7629
7629
  "span",
@@ -7631,7 +7631,7 @@ function ItemSlot({
7631
7631
  className: cn(
7632
7632
  "absolute -bottom-1 -right-1 flex items-center justify-center",
7633
7633
  "min-w-[18px] h-[18px] rounded-full px-1",
7634
- "bg-[var(--color-surface,#374151)] border border-gray-500 text-xs font-bold text-[var(--color-foreground)]"
7634
+ "bg-surface border border-muted text-xs font-bold text-foreground"
7635
7635
  ),
7636
7636
  children: quantity
7637
7637
  }
@@ -7651,18 +7651,18 @@ var init_ItemSlot = __esm({
7651
7651
  lg: "w-18 h-18 text-3xl"
7652
7652
  };
7653
7653
  rarityBorderMap = {
7654
- common: "border-gray-500",
7655
- uncommon: "border-green-500",
7656
- rare: "border-blue-500",
7657
- epic: "border-purple-500",
7658
- legendary: "border-amber-400"
7654
+ common: "border-muted",
7655
+ uncommon: "border-success",
7656
+ rare: "border-info",
7657
+ epic: "border-accent",
7658
+ legendary: "border-warning"
7659
7659
  };
7660
7660
  rarityGlowMap = {
7661
7661
  common: "",
7662
7662
  uncommon: "",
7663
- rare: "shadow-[0_0_6px_rgba(59,130,246,0.3)]",
7664
- epic: "shadow-[0_0_8px_rgba(168,85,247,0.4)]",
7665
- legendary: "shadow-[0_0_10px_rgba(251,191,36,0.5)]"
7663
+ rare: "shadow-sm",
7664
+ epic: "shadow-lg",
7665
+ legendary: "shadow-lg"
7666
7666
  };
7667
7667
  ItemSlot.displayName = "ItemSlot";
7668
7668
  }
@@ -7680,8 +7680,8 @@ function TurnIndicator({
7680
7680
  "div",
7681
7681
  {
7682
7682
  className: cn(
7683
- "inline-flex items-center rounded-lg",
7684
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
7683
+ "inline-flex items-center rounded-container",
7684
+ "bg-card/80 border border-muted font-medium text-foreground",
7685
7685
  sizes.wrapper,
7686
7686
  className
7687
7687
  ),
@@ -7689,19 +7689,19 @@ function TurnIndicator({
7689
7689
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
7690
7690
  "Turn ",
7691
7691
  currentTurn,
7692
- maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-400", children: [
7692
+ maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
7693
7693
  "/",
7694
7694
  maxTurns
7695
7695
  ] })
7696
7696
  ] }),
7697
7697
  phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7698
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
7699
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-300", children: phase })
7698
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
7699
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
7700
7700
  ] }),
7701
7701
  activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7702
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
7703
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-green-500/20", sizes.dot) }),
7704
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-400", children: activeTeam })
7702
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
7703
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
7704
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
7705
7705
  ] })
7706
7706
  ]
7707
7707
  }
@@ -7720,10 +7720,10 @@ var init_TurnIndicator = __esm({
7720
7720
  }
7721
7721
  });
7722
7722
  function getComboIntensity(combo) {
7723
- if (combo >= 10) return "text-red-400 animate-pulse";
7724
- if (combo >= 7) return "text-orange-400";
7725
- if (combo >= 4) return "text-yellow-400";
7726
- return "text-[var(--color-foreground)]";
7723
+ if (combo >= 10) return "text-error animate-pulse";
7724
+ if (combo >= 7) return "text-warning";
7725
+ if (combo >= 4) return "text-warning";
7726
+ return "text-foreground";
7727
7727
  }
7728
7728
  function getComboScale(combo) {
7729
7729
  if (combo >= 10) return "scale-110";
@@ -7744,19 +7744,19 @@ function ComboCounter({
7744
7744
  {
7745
7745
  className: cn(
7746
7746
  "inline-flex flex-col items-center justify-center",
7747
- "rounded-xl bg-[var(--color-card)]/80 border border-gray-600 px-3 py-1.5",
7747
+ "rounded-container bg-card/80 border border-muted px-3 py-1.5",
7748
7748
  "transition-transform duration-200",
7749
7749
  getComboScale(combo),
7750
7750
  className
7751
7751
  ),
7752
7752
  children: [
7753
7753
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
7754
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-gray-400", sizes.label), children: "combo" }),
7755
- multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-amber-400 tabular-nums", sizes.multiplier), children: [
7754
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
7755
+ multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
7756
7756
  "x",
7757
7757
  multiplier.toFixed(1)
7758
7758
  ] }),
7759
- streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-500 tabular-nums", sizes.label), children: [
7759
+ streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
7760
7760
  streak,
7761
7761
  " streak"
7762
7762
  ] })
@@ -7792,8 +7792,8 @@ function XPBar({
7792
7792
  "span",
7793
7793
  {
7794
7794
  className: cn(
7795
- "flex-shrink-0 rounded-md font-bold",
7796
- "bg-indigo-600 text-white border border-indigo-400",
7795
+ "flex-shrink-0 rounded-interactive font-bold",
7796
+ "bg-accent text-foreground border border-accent",
7797
7797
  sizes.badge
7798
7798
  ),
7799
7799
  children: [
@@ -7807,7 +7807,7 @@ function XPBar({
7807
7807
  "div",
7808
7808
  {
7809
7809
  className: cn(
7810
- "relative w-full overflow-hidden rounded-full bg-gray-700 border border-gray-600",
7810
+ "relative w-full overflow-hidden rounded-full bg-muted border border-muted",
7811
7811
  sizes.bar
7812
7812
  ),
7813
7813
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -7815,7 +7815,7 @@ function XPBar({
7815
7815
  {
7816
7816
  className: cn(
7817
7817
  "absolute inset-y-0 left-0 rounded-full",
7818
- "bg-gradient-to-r from-indigo-600 to-purple-500",
7818
+ "bg-gradient-to-r from-accent to-info",
7819
7819
  animated && "transition-all duration-500 ease-out"
7820
7820
  ),
7821
7821
  style: { width: `${percentage}%` }
@@ -7823,7 +7823,7 @@ function XPBar({
7823
7823
  )
7824
7824
  }
7825
7825
  ),
7826
- showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-400 tabular-nums", sizes.text), children: [
7826
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
7827
7827
  current,
7828
7828
  " / ",
7829
7829
  max,
@@ -7859,7 +7859,7 @@ function WaypointMarker({
7859
7859
  "div",
7860
7860
  {
7861
7861
  className: cn(
7862
- "absolute rounded-full border-2 border-blue-400 animate-ping opacity-50",
7862
+ "absolute rounded-full border-2 border-info animate-ping opacity-50",
7863
7863
  sizes.ring
7864
7864
  )
7865
7865
  }
@@ -7868,7 +7868,7 @@ function WaypointMarker({
7868
7868
  "div",
7869
7869
  {
7870
7870
  className: cn(
7871
- "absolute rounded-full border-2 border-blue-400",
7871
+ "absolute rounded-full border-2 border-info",
7872
7872
  sizes.ring
7873
7873
  )
7874
7874
  }
@@ -7879,9 +7879,9 @@ function WaypointMarker({
7879
7879
  className: cn(
7880
7880
  "relative flex items-center justify-center rounded-full transition-all duration-200",
7881
7881
  sizes.dot,
7882
- completed && "bg-green-500 text-white",
7883
- active && !completed && "bg-blue-500 text-white",
7884
- !active && !completed && "bg-gray-500"
7882
+ completed && "bg-success text-foreground",
7883
+ active && !completed && "bg-info text-foreground",
7884
+ !active && !completed && "bg-muted"
7885
7885
  ),
7886
7886
  children: completed ? checkIcon : icon
7887
7887
  }
@@ -7893,7 +7893,7 @@ function WaypointMarker({
7893
7893
  className: cn(
7894
7894
  "text-center whitespace-nowrap",
7895
7895
  sizes.label,
7896
- completed ? "text-green-400" : active ? "text-blue-400" : "text-gray-400"
7896
+ completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
7897
7897
  ),
7898
7898
  children: label
7899
7899
  }
@@ -7934,7 +7934,7 @@ function StatusEffect({
7934
7934
  "div",
7935
7935
  {
7936
7936
  className: cn(
7937
- "relative flex items-center justify-center rounded border-2",
7937
+ "relative flex items-center justify-center rounded-interactive border-2",
7938
7938
  sizes.container,
7939
7939
  variantStyles7[variant]
7940
7940
  ),
@@ -7945,7 +7945,7 @@ function StatusEffect({
7945
7945
  "span",
7946
7946
  {
7947
7947
  className: cn(
7948
- "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-white bg-black/60 leading-tight",
7948
+ "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
7949
7949
  sizes.timer
7950
7950
  ),
7951
7951
  children: formatDuration(duration)
@@ -7958,7 +7958,7 @@ function StatusEffect({
7958
7958
  "span",
7959
7959
  {
7960
7960
  className: cn(
7961
- "absolute flex items-center justify-center rounded-full bg-[var(--color-card)] text-[var(--color-foreground)] font-bold leading-none",
7961
+ "absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
7962
7962
  sizes.badge
7963
7963
  ),
7964
7964
  children: stacks
@@ -7977,9 +7977,9 @@ var init_StatusEffect = __esm({
7977
7977
  lg: { container: "w-12 h-12", icon: "text-lg", badge: "text-sm -top-1.5 -right-1.5 w-6 h-6", timer: "text-xs" }
7978
7978
  };
7979
7979
  variantStyles7 = {
7980
- buff: "border-green-500 bg-green-500/20",
7981
- debuff: "border-red-500 bg-red-500/20",
7982
- neutral: "border-gray-500 bg-gray-500/20"
7980
+ buff: "border-success bg-success/20",
7981
+ debuff: "border-error bg-error/20",
7982
+ neutral: "border-muted bg-muted/20"
7983
7983
  };
7984
7984
  StatusEffect.displayName = "StatusEffect";
7985
7985
  }
@@ -8018,10 +8018,10 @@ var init_DamageNumber = __esm({
8018
8018
  lg: "text-2xl"
8019
8019
  };
8020
8020
  typeStyles = {
8021
- damage: "text-red-500 font-bold",
8022
- heal: "text-green-500 font-bold",
8023
- crit: "text-orange-400 font-extrabold",
8024
- miss: "text-gray-400 italic"
8021
+ damage: "text-error font-bold",
8022
+ heal: "text-success font-bold",
8023
+ crit: "text-warning font-extrabold",
8024
+ miss: "text-muted-foreground italic"
8025
8025
  };
8026
8026
  floatKeyframes = `
8027
8027
  @keyframes damageFloat {
@@ -8044,12 +8044,12 @@ function DialogueBubble({
8044
8044
  "div",
8045
8045
  {
8046
8046
  className: cn(
8047
- "flex items-start gap-3 rounded-lg bg-black/80 backdrop-blur-sm px-4 py-3 border border-white/10",
8047
+ "flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
8048
8048
  position === "top" ? "rounded-bl-none" : "rounded-tl-none",
8049
8049
  className
8050
8050
  ),
8051
8051
  children: [
8052
- portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-yellow-400/60", children: /* @__PURE__ */ jsxRuntime.jsx(
8052
+ portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-warning/60", children: /* @__PURE__ */ jsxRuntime.jsx(
8053
8053
  "img",
8054
8054
  {
8055
8055
  src: portrait,
@@ -8058,8 +8058,8 @@ function DialogueBubble({
8058
8058
  }
8059
8059
  ) }),
8060
8060
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
8061
- speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-yellow-400", children: speaker }),
8062
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--color-foreground)] leading-relaxed", children: text })
8061
+ speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
8062
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
8063
8063
  ] })
8064
8064
  ]
8065
8065
  }
@@ -8086,7 +8086,7 @@ function ChoiceButton({
8086
8086
  disabled,
8087
8087
  onClick,
8088
8088
  className: cn(
8089
- "w-full text-left px-4 py-2.5 rounded-md border transition-all duration-150",
8089
+ "w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
8090
8090
  "flex items-center gap-2",
8091
8091
  selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
8092
8092
  disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
@@ -8139,7 +8139,7 @@ function ActionButton({
8139
8139
  disabled: isDisabled,
8140
8140
  onClick,
8141
8141
  className: cn(
8142
- "relative inline-flex items-center gap-1.5 rounded-md border font-medium overflow-hidden transition-colors duration-150",
8142
+ "relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
8143
8143
  sizes.button,
8144
8144
  variantStyles8[variant],
8145
8145
  isDisabled && "opacity-60 cursor-not-allowed",
@@ -8182,9 +8182,9 @@ var init_ActionButton = __esm({
8182
8182
  init_cn();
8183
8183
  init_Icon();
8184
8184
  sizeMap13 = {
8185
- sm: { button: "px-3 py-1.5 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
8186
- md: { button: "px-4 py-2 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
8187
- lg: { button: "px-5 py-2.5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
8185
+ sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
8186
+ md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
8187
+ lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
8188
8188
  };
8189
8189
  variantStyles8 = {
8190
8190
  primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
@@ -8264,7 +8264,7 @@ function MiniMap({
8264
8264
  "div",
8265
8265
  {
8266
8266
  className: cn(
8267
- "relative inline-block border border-white/20 rounded",
8267
+ "relative inline-block border border-border/20 rounded-container",
8268
8268
  className
8269
8269
  ),
8270
8270
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -10849,7 +10849,7 @@ function ActionTile({
10849
10849
  {
10850
10850
  display: "flex",
10851
10851
  className: cn(
10852
- "flex-col items-center gap-1 rounded-lg border-2 transition-all select-none",
10852
+ "flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
10853
10853
  config.px,
10854
10854
  disabled ? "opacity-40 cursor-not-allowed border-border bg-muted" : "cursor-grab active:cursor-grabbing hover:scale-105 hover:shadow-md border-border bg-card",
10855
10855
  className
@@ -12161,12 +12161,12 @@ function IsometricCanvas({
12161
12161
  return /* @__PURE__ */ jsxRuntime.jsx(
12162
12162
  Box,
12163
12163
  {
12164
- className: cn("relative w-full overflow-hidden rounded-lg", className),
12164
+ className: cn("relative w-full overflow-hidden rounded-container", className),
12165
12165
  style: { height: viewportSize.height },
12166
12166
  "data-testid": "game-canvas-empty",
12167
- children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { direction: "vertical", gap: "md", align: "center", children: [
12167
+ children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { direction: "vertical", gap: "md", align: "center", children: [
12168
12168
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
12169
- /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-slate-400", children: t("canvas.emptyMessage") || "No map data loaded" })
12169
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
12170
12170
  ] }) })
12171
12171
  }
12172
12172
  );
@@ -12564,19 +12564,19 @@ function BattleBoard({
12564
12564
  }
12565
12565
  )
12566
12566
  ] }),
12567
- gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm rounded-xl", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "text-center p-8", gap: "lg", children: [
12567
+ gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-sm rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "text-center p-8", gap: "lg", children: [
12568
12568
  /* @__PURE__ */ jsxRuntime.jsx(
12569
12569
  Typography,
12570
12570
  {
12571
12571
  variant: "h2",
12572
12572
  className: cn(
12573
12573
  "text-4xl font-black tracking-widest uppercase",
12574
- gameResult === "victory" ? "text-yellow-400" : "text-red-500"
12574
+ gameResult === "victory" ? "text-warning" : "text-error"
12575
12575
  ),
12576
12576
  children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
12577
12577
  }
12578
12578
  ),
12579
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-gray-300", children: [
12579
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
12580
12580
  t("battle.turnsPlayed"),
12581
12581
  ": ",
12582
12582
  currentTurn
@@ -17403,7 +17403,7 @@ function BuilderBoard({
17403
17403
  backgroundPosition: "center"
17404
17404
  },
17405
17405
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
17406
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
17406
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
17407
17407
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
17408
17408
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
17409
17409
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -17441,7 +17441,7 @@ function BuilderBoard({
17441
17441
  {
17442
17442
  gap: "sm",
17443
17443
  align: "center",
17444
- className: `p-3 border-2 rounded ${result ? result.correct ? "border-green-500" : "border-red-500" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
17444
+ className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
17445
17445
  onClick: () => handlePlaceComponent(slot.id),
17446
17446
  children: [
17447
17447
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
@@ -17456,7 +17456,7 @@ function BuilderBoard({
17456
17456
  ] }) : null,
17457
17457
  placedComp.label
17458
17458
  ] }),
17459
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-green-600" : "text-red-600" })
17459
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
17460
17460
  ] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
17461
17461
  ]
17462
17462
  },
@@ -17465,10 +17465,10 @@ function BuilderBoard({
17465
17465
  }) })
17466
17466
  ] }) }),
17467
17467
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
17468
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
17468
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
17469
17469
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
17470
17470
  ] }) }),
17471
- showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-yellow-500", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
17471
+ showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
17472
17472
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
17473
17473
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
17474
17474
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
@@ -19023,7 +19023,7 @@ function CanvasEffectEngine({
19023
19023
  flash && /* @__PURE__ */ jsxRuntime.jsx(
19024
19024
  Box,
19025
19025
  {
19026
- className: "absolute inset-0 z-20 pointer-events-none rounded-lg",
19026
+ className: "absolute inset-0 z-20 pointer-events-none rounded-container",
19027
19027
  style: { backgroundColor: flash.color, opacity: flash.alpha }
19028
19028
  }
19029
19029
  ),
@@ -19091,7 +19091,7 @@ function EmojiEffect({
19091
19091
  /* @__PURE__ */ jsxRuntime.jsx(
19092
19092
  Box,
19093
19093
  {
19094
- className: "absolute rounded-full animate-ping",
19094
+ className: "absolute rounded-pill animate-ping",
19095
19095
  style: {
19096
19096
  width: 48 * intensity,
19097
19097
  height: 48 * intensity,
@@ -20908,7 +20908,7 @@ function ClassifierBoard({
20908
20908
  backgroundPosition: "center"
20909
20909
  },
20910
20910
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
20911
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
20911
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
20912
20912
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
20913
20913
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
20914
20914
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -20923,7 +20923,7 @@ function ClassifierBoard({
20923
20923
  /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
20924
20924
  const catItems = items.filter((item) => assignments[item.id] === cat.id);
20925
20925
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
20926
- cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: cat.imageUrl, alt: "", className: "w-full h-full object-cover" }) }),
20926
+ cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: cat.imageUrl, alt: "", className: "w-full h-full object-cover" }) }),
20927
20927
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
20928
20928
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
20929
20929
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
@@ -20934,12 +20934,12 @@ function ClassifierBoard({
20934
20934
  Badge,
20935
20935
  {
20936
20936
  size: "sm",
20937
- className: `cursor-pointer ${result ? result.correct ? "border-green-500 bg-green-50 dark:bg-green-950" : "border-red-500 bg-red-50 dark:bg-red-950" : ""}`,
20937
+ className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
20938
20938
  onClick: () => handleUnassign(item.id),
20939
20939
  children: [
20940
20940
  item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
20941
20941
  item.label,
20942
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-green-600" : "text-red-600" })
20942
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
20943
20943
  ]
20944
20944
  },
20945
20945
  item.id
@@ -20962,11 +20962,11 @@ function ClassifierBoard({
20962
20962
  ] }) }, cat.id);
20963
20963
  }) }),
20964
20964
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
20965
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
20965
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
20966
20966
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
20967
20967
  !allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
20968
20968
  ] }) }),
20969
- showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-yellow-500", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
20969
+ showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
20970
20970
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
20971
20971
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
20972
20972
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -22014,7 +22014,7 @@ function CraftingRecipe({
22014
22014
  Box,
22015
22015
  {
22016
22016
  className: cn(
22017
- "flex flex-wrap items-center gap-3 rounded-lg bg-gray-800/50 border border-gray-700/50 p-3",
22017
+ "flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
22018
22018
  className
22019
22019
  ),
22020
22020
  children: [
@@ -22031,10 +22031,10 @@ function CraftingRecipe({
22031
22031
  className: cn(!hasSufficient && "opacity-50")
22032
22032
  }
22033
22033
  ) }),
22034
- index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-gray-500" })
22034
+ index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
22035
22035
  ] }, index);
22036
22036
  }) }),
22037
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-gray-400" }),
22037
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
22038
22038
  /* @__PURE__ */ jsxRuntime.jsx(
22039
22039
  ItemSlot,
22040
22040
  {
@@ -22122,7 +22122,7 @@ function DPad({
22122
22122
  createButton("up"),
22123
22123
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
22124
22124
  createButton("left"),
22125
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full bg-gray-700 border-2 border-gray-600" }) }),
22125
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-interactive bg-muted border-2 border-muted-foreground" }) }),
22126
22126
  createButton("right"),
22127
22127
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
22128
22128
  createButton("down"),
@@ -26229,7 +26229,7 @@ function StatBadge({
26229
26229
  "div",
26230
26230
  {
26231
26231
  className: cn(
26232
- "inline-flex items-center gap-2 rounded-lg border backdrop-blur-sm",
26232
+ "inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
26233
26233
  sizeMap17[size] ?? sizeMap17.md,
26234
26234
  variantMap2[variant] ?? variantMap2.default,
26235
26235
  className
@@ -26375,10 +26375,10 @@ function QuestTracker({
26375
26375
  Box,
26376
26376
  {
26377
26377
  className: cn(
26378
- "flex items-start gap-3 rounded-lg px-3 py-2 transition-colors",
26379
- isActive && !isCompleted && "bg-blue-900/20 border border-blue-800/50",
26380
- isCompleted && "bg-green-900/10 border border-green-800/30 opacity-70",
26381
- !isActive && !isCompleted && "bg-gray-800/30 border border-gray-700/30"
26378
+ "flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
26379
+ isActive && !isCompleted && "bg-info/20 border border-info/50",
26380
+ isCompleted && "bg-success/10 border border-success/30 opacity-70",
26381
+ !isActive && !isCompleted && "bg-muted/30 border border-border/30"
26382
26382
  ),
26383
26383
  children: [
26384
26384
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -26396,9 +26396,9 @@ function QuestTracker({
26396
26396
  variant: "body2",
26397
26397
  className: cn(
26398
26398
  "font-medium truncate",
26399
- isCompleted && "line-through text-gray-500",
26400
- isActive && !isCompleted && "text-blue-300",
26401
- !isActive && !isCompleted && "text-gray-300"
26399
+ isCompleted && "line-through text-muted-foreground",
26400
+ isActive && !isCompleted && "text-info",
26401
+ !isActive && !isCompleted && "text-muted-foreground"
26402
26402
  ),
26403
26403
  children: quest.title
26404
26404
  }
@@ -26416,7 +26416,7 @@ function QuestTracker({
26416
26416
  Typography,
26417
26417
  {
26418
26418
  variant: "caption",
26419
- className: "text-gray-500 mt-1",
26419
+ className: "text-muted-foreground mt-1",
26420
26420
  children: [
26421
26421
  quest.progress,
26422
26422
  " / ",
@@ -26473,14 +26473,14 @@ function PowerupSlots({
26473
26473
  {
26474
26474
  className: cn(
26475
26475
  "absolute -bottom-1 left-1/2 -translate-x-1/2",
26476
- "rounded px-1 py-px",
26477
- "bg-black/80 border border-gray-600"
26476
+ "rounded-interactive px-1 py-px",
26477
+ "bg-background/80 border border-border"
26478
26478
  ),
26479
26479
  children: /* @__PURE__ */ jsxRuntime.jsx(
26480
26480
  Typography,
26481
26481
  {
26482
26482
  variant: "caption",
26483
- className: "text-[9px] font-mono font-bold text-yellow-300 whitespace-nowrap",
26483
+ className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
26484
26484
  children: formatTime2(powerup.remainingTime)
26485
26485
  }
26486
26486
  )
@@ -26513,6 +26513,8 @@ function GameCanvas2D({
26513
26513
  height = 600,
26514
26514
  onDraw,
26515
26515
  onTick,
26516
+ tickEvent,
26517
+ drawEvent,
26516
26518
  fps = 60,
26517
26519
  className
26518
26520
  }) {
@@ -26520,10 +26522,17 @@ function GameCanvas2D({
26520
26522
  const rafRef = React85__namespace.useRef(0);
26521
26523
  const frameRef = React85__namespace.useRef(0);
26522
26524
  const lastTimeRef = React85__namespace.useRef(0);
26525
+ const emit = useEmitEvent();
26523
26526
  const onDrawRef = React85__namespace.useRef(onDraw);
26524
26527
  onDrawRef.current = onDraw;
26525
26528
  const onTickRef = React85__namespace.useRef(onTick);
26526
26529
  onTickRef.current = onTick;
26530
+ const tickEventRef = React85__namespace.useRef(tickEvent);
26531
+ tickEventRef.current = tickEvent;
26532
+ const drawEventRef = React85__namespace.useRef(drawEvent);
26533
+ drawEventRef.current = drawEvent;
26534
+ const emitRef = React85__namespace.useRef(emit);
26535
+ emitRef.current = emit;
26527
26536
  React85__namespace.useEffect(() => {
26528
26537
  const canvas = canvasRef.current;
26529
26538
  if (!canvas) return;
@@ -26540,8 +26549,15 @@ function GameCanvas2D({
26540
26549
  if (elapsed >= interval) {
26541
26550
  const dt = elapsed / 1e3;
26542
26551
  lastTimeRef.current = timestamp - elapsed % interval;
26552
+ const frame = frameRef.current;
26543
26553
  onTickRef.current?.(dt);
26544
- onDrawRef.current?.(ctx, frameRef.current);
26554
+ if (tickEventRef.current) {
26555
+ emitRef.current(tickEventRef.current, { dt, frame });
26556
+ }
26557
+ onDrawRef.current?.(ctx, frame);
26558
+ if (drawEventRef.current) {
26559
+ emitRef.current(drawEventRef.current, { frame });
26560
+ }
26545
26561
  frameRef.current += 1;
26546
26562
  }
26547
26563
  rafRef.current = requestAnimationFrame(loop);
@@ -26567,6 +26583,7 @@ var init_GameCanvas2D = __esm({
26567
26583
  "use client";
26568
26584
  init_cn();
26569
26585
  init_Box();
26586
+ init_useEventBus();
26570
26587
  GameCanvas2D.displayName = "GameCanvas2D";
26571
26588
  }
26572
26589
  });
@@ -26585,7 +26602,7 @@ function HealthPanel({
26585
26602
  Box,
26586
26603
  {
26587
26604
  className: cn(
26588
- "rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm",
26605
+ "rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
26589
26606
  sizes.padding,
26590
26607
  className
26591
26608
  ),
@@ -26596,7 +26613,7 @@ function HealthPanel({
26596
26613
  {
26597
26614
  variant: "caption",
26598
26615
  weight: "bold",
26599
- className: "text-gray-300 uppercase tracking-wider",
26616
+ className: "text-muted-foreground uppercase tracking-wider",
26600
26617
  children: label
26601
26618
  }
26602
26619
  ),
@@ -26617,7 +26634,7 @@ function HealthPanel({
26617
26634
  as: "span",
26618
26635
  variant: "caption",
26619
26636
  weight: "bold",
26620
- className: "text-blue-400 ml-1",
26637
+ className: "text-info ml-1",
26621
26638
  children: [
26622
26639
  "+",
26623
26640
  shield
@@ -26642,14 +26659,14 @@ function HealthPanel({
26642
26659
  Box,
26643
26660
  {
26644
26661
  className: cn(
26645
- "relative overflow-hidden rounded-full bg-gray-700",
26662
+ "relative overflow-hidden rounded-container bg-muted",
26646
26663
  size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
26647
26664
  "w-full"
26648
26665
  ),
26649
26666
  children: /* @__PURE__ */ jsxRuntime.jsx(
26650
26667
  Box,
26651
26668
  {
26652
- className: "absolute inset-y-0 left-0 rounded-full bg-blue-500 transition-all duration-300",
26669
+ className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
26653
26670
  style: { width: `${Math.min(100, shield / max * 100)}%` }
26654
26671
  }
26655
26672
  )
@@ -26708,7 +26725,7 @@ function ScoreBoard({
26708
26725
  Card,
26709
26726
  {
26710
26727
  className: cn(
26711
- "bg-[var(--color-card)]/90 border-gray-700 backdrop-blur-sm",
26728
+ "bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
26712
26729
  className
26713
26730
  ),
26714
26731
  children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
@@ -26825,7 +26842,7 @@ function TurnPanel({
26825
26842
  Box,
26826
26843
  {
26827
26844
  className: cn(
26828
- "flex items-center gap-3 rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm px-3 py-2",
26845
+ "flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
26829
26846
  className
26830
26847
  ),
26831
26848
  children: [
@@ -26877,7 +26894,7 @@ function EnemyPlate({
26877
26894
  Box,
26878
26895
  {
26879
26896
  className: cn(
26880
- "inline-flex flex-col gap-1 rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm px-3 py-1.5",
26897
+ "inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
26881
26898
  "min-w-[120px]",
26882
26899
  className
26883
26900
  ),
@@ -26971,7 +26988,7 @@ function UnitCommandBar({
26971
26988
  Box,
26972
26989
  {
26973
26990
  className: cn(
26974
- "flex items-center gap-1.5 rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm px-2 py-1.5",
26991
+ "flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
26975
26992
  className
26976
26993
  ),
26977
26994
  children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
@@ -27056,8 +27073,8 @@ function GameHud({
27056
27073
  className: cn(
27057
27074
  "relative z-10",
27058
27075
  positionMap[position],
27059
- transparent && "bg-gradient-to-b from-black/50 to-transparent",
27060
- position === "bottom" && "bg-gradient-to-t from-black/50 to-transparent",
27076
+ transparent && "bg-gradient-to-b from-background/50 to-transparent",
27077
+ position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
27061
27078
  className
27062
27079
  ),
27063
27080
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
@@ -27215,8 +27232,8 @@ function DialogueBox({
27215
27232
  tabIndex: 0,
27216
27233
  role: "dialog",
27217
27234
  "aria-label": "Dialogue",
27218
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-gray-600 rounded-lg overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex", children: [
27219
- dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-gray-700", children: /* @__PURE__ */ jsxRuntime.jsx(
27235
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-border rounded-container overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex", children: [
27236
+ dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
27220
27237
  "img",
27221
27238
  {
27222
27239
  src: dialogue.portrait,
@@ -27226,7 +27243,7 @@ function DialogueBox({
27226
27243
  }
27227
27244
  ) }),
27228
27245
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
27229
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-yellow-400 font-bold mb-2", children: dialogue.speaker }),
27246
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
27230
27247
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
27231
27248
  displayedText,
27232
27249
  isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
@@ -27236,9 +27253,9 @@ function DialogueBox({
27236
27253
  {
27237
27254
  type: "button",
27238
27255
  className: cn(
27239
- "block w-full text-left px-4 py-2 rounded transition-colors",
27240
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-yellow-400",
27241
- selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-yellow-400" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
27256
+ "block w-full text-left px-4 py-2 rounded-interactive transition-colors",
27257
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
27258
+ selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
27242
27259
  ),
27243
27260
  onClick: (e) => {
27244
27261
  e.stopPropagation();
@@ -27246,7 +27263,7 @@ function DialogueBox({
27246
27263
  onChoice?.(choice);
27247
27264
  },
27248
27265
  children: [
27249
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500 mr-2", children: [
27266
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
27250
27267
  index + 1,
27251
27268
  "."
27252
27269
  ] }),
@@ -27255,7 +27272,7 @@ function DialogueBox({
27255
27272
  },
27256
27273
  index
27257
27274
  )) }),
27258
- !isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-gray-500 text-sm animate-pulse", children: "Press SPACE or click to continue..." })
27275
+ !isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-muted-foreground text-sm animate-pulse", children: "Press SPACE or click to continue..." })
27259
27276
  ] })
27260
27277
  ] }) })
27261
27278
  }
@@ -27358,7 +27375,7 @@ function InventoryPanel({
27358
27375
  /* @__PURE__ */ jsxRuntime.jsx(
27359
27376
  "div",
27360
27377
  {
27361
- className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-lg border border-gray-700",
27378
+ className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
27362
27379
  style: {
27363
27380
  gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
27364
27381
  gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
@@ -27370,8 +27387,8 @@ function InventoryPanel({
27370
27387
  className: cn(
27371
27388
  "relative flex items-center justify-center",
27372
27389
  "bg-[var(--color-card)] border rounded transition-colors",
27373
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-blue-500",
27374
- selectedSlot === index ? "border-yellow-400 bg-[var(--color-surface,#374151)]" : "border-gray-600"
27390
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
27391
+ selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
27375
27392
  ),
27376
27393
  style: { width: slotSize, height: slotSize },
27377
27394
  onClick: () => handleSlotClick(index),
@@ -27390,8 +27407,8 @@ function InventoryPanel({
27390
27407
  className: "w-8 h-8 object-contain",
27391
27408
  style: { imageRendering: "pixelated" }
27392
27409
  }
27393
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-gray-600 rounded flex items-center justify-center text-xs text-gray-300", children: (item.type ?? item.name ?? "I").charAt(0).toUpperCase() }),
27394
- item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-black bg-opacity-70 text-white text-xs px-1 rounded-tl", children: item.quantity })
27410
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-muted rounded-interactive flex items-center justify-center text-xs text-muted-foreground", children: (item.type ?? item.name ?? "I").charAt(0).toUpperCase() }),
27411
+ item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-background/70 text-foreground text-xs px-1 rounded-tl", children: item.quantity })
27395
27412
  ] })
27396
27413
  },
27397
27414
  index
@@ -27401,7 +27418,7 @@ function InventoryPanel({
27401
27418
  showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
27402
27419
  "div",
27403
27420
  {
27404
- className: "fixed z-50 bg-[var(--color-card)] border border-gray-600 rounded-lg p-2 shadow-lg pointer-events-none",
27421
+ className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
27405
27422
  style: {
27406
27423
  left: tooltipPosition.x,
27407
27424
  top: tooltipPosition.y,
@@ -27409,8 +27426,8 @@ function InventoryPanel({
27409
27426
  },
27410
27427
  children: [
27411
27428
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
27412
- hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-gray-400 mt-1", children: hoveredItem.description }),
27413
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-gray-500 mt-1", children: [
27429
+ hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
27430
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
27414
27431
  "Quantity: ",
27415
27432
  hoveredItem.quantity
27416
27433
  ] })
@@ -27488,7 +27505,7 @@ function GameMenu({
27488
27505
  children: title
27489
27506
  }
27490
27507
  ),
27491
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-gray-400 tracking-widest uppercase", children: subtitle })
27508
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
27492
27509
  ] }),
27493
27510
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
27494
27511
  "button",
@@ -27496,10 +27513,10 @@ function GameMenu({
27496
27513
  onClick: () => handleOptionClick(option),
27497
27514
  disabled: option.disabled,
27498
27515
  className: cn(
27499
- "w-full py-4 px-8 rounded-xl border-2 font-bold text-lg",
27516
+ "w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
27500
27517
  "transition-all duration-200 transform",
27501
27518
  "hover:scale-105 active:scale-95",
27502
- "focus:outline-none focus:ring-4 focus:ring-white/25",
27519
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
27503
27520
  variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
27504
27521
  option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
27505
27522
  ),
@@ -27511,8 +27528,8 @@ function GameMenu({
27511
27528
  index
27512
27529
  )) }),
27513
27530
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
27514
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-blue-500/10 rounded-full blur-3xl" }),
27515
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-purple-500/10 rounded-full blur-3xl" })
27531
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
27532
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
27516
27533
  ] })
27517
27534
  ]
27518
27535
  }
@@ -27525,9 +27542,9 @@ var init_GameMenu = __esm({
27525
27542
  init_cn();
27526
27543
  init_useEventBus();
27527
27544
  variantMap3 = {
27528
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400 shadow-lg shadow-blue-500/25",
27529
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
27530
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
27545
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
27546
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27547
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27531
27548
  };
27532
27549
  GameMenu.displayName = "GameMenu";
27533
27550
  }
@@ -27595,13 +27612,13 @@ function GameOverScreen({
27595
27612
  children: title
27596
27613
  }
27597
27614
  ),
27598
- message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-gray-300 mb-8 text-center max-w-md", children: message }),
27599
- isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-yellow-500/20 border-2 border-yellow-500 rounded-full animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-yellow-400 font-bold text-lg tracking-wide", children: "\u{1F3C6} NEW HIGH SCORE! \u{1F3C6}" }) }),
27615
+ message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
27616
+ isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-warning/20 border-2 border-warning rounded-container animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-warning font-bold text-lg tracking-wide", children: "\u{1F3C6} NEW HIGH SCORE! \u{1F3C6}" }) }),
27600
27617
  stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
27601
27618
  "div",
27602
27619
  {
27603
27620
  className: cn(
27604
- "mb-8 p-6 rounded-xl border-2 bg-black/30",
27621
+ "mb-8 p-6 rounded-container border-2 bg-background/30",
27605
27622
  colors.accent
27606
27623
  ),
27607
27624
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
@@ -27610,7 +27627,7 @@ function GameOverScreen({
27610
27627
  displayValue = formatTime3(displayValue);
27611
27628
  }
27612
27629
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
27613
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-gray-400 text-sm mb-1", children: stat.label }),
27630
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
27614
27631
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
27615
27632
  stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
27616
27633
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
@@ -27624,10 +27641,10 @@ function GameOverScreen({
27624
27641
  {
27625
27642
  onClick: () => handleActionClick(action),
27626
27643
  className: cn(
27627
- "px-8 py-4 rounded-xl border-2 font-bold text-lg",
27644
+ "px-8 py-4 rounded-container border-2 font-bold text-lg",
27628
27645
  "transition-all duration-200",
27629
27646
  "hover:scale-105 active:scale-95",
27630
- "focus:outline-none focus:ring-4 focus:ring-white/25",
27647
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
27631
27648
  buttonVariants[action.variant ?? "secondary"]
27632
27649
  ),
27633
27650
  children: action.label
@@ -27646,25 +27663,25 @@ var init_GameOverScreen = __esm({
27646
27663
  init_useEventBus();
27647
27664
  variantColors = {
27648
27665
  victory: {
27649
- bg: "from-green-900/90 to-emerald-950/90",
27650
- title: "text-green-400",
27651
- accent: "border-green-500"
27666
+ bg: "from-success/90 to-success/90",
27667
+ title: "text-success",
27668
+ accent: "border-success"
27652
27669
  },
27653
27670
  defeat: {
27654
- bg: "from-red-900/90 to-gray-950/90",
27655
- title: "text-red-400",
27656
- accent: "border-red-500"
27671
+ bg: "from-error/90 to-background/90",
27672
+ title: "text-error",
27673
+ accent: "border-error"
27657
27674
  },
27658
27675
  neutral: {
27659
- bg: "from-gray-900/90 to-gray-950/90",
27660
- title: "text-white",
27661
- accent: "border-gray-500"
27676
+ bg: "from-muted/90 to-background/90",
27677
+ title: "text-foreground",
27678
+ accent: "border-muted"
27662
27679
  }
27663
27680
  };
27664
27681
  buttonVariants = {
27665
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400",
27666
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
27667
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
27682
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
27683
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27684
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27668
27685
  };
27669
27686
  GameOverScreen.displayName = "GameOverScreen";
27670
27687
  }
@@ -27898,7 +27915,7 @@ function PlatformerCanvas({
27898
27915
  {
27899
27916
  ref: canvasRef,
27900
27917
  style: { width: canvasWidth, height: canvasHeight },
27901
- className: cn("block rounded-lg border border-white/10", className),
27918
+ className: cn("block rounded-container border border-border/10", className),
27902
27919
  "data-testid": "platformer-canvas",
27903
27920
  tabIndex: 0
27904
27921
  }
@@ -35303,7 +35320,7 @@ function DebuggerBoard({
35303
35320
  backgroundPosition: "center"
35304
35321
  },
35305
35322
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
35306
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
35323
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
35307
35324
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
35308
35325
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
35309
35326
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
@@ -35316,11 +35333,11 @@ function DebuggerBoard({
35316
35333
  const isFlagged = flaggedLines.has(line.id);
35317
35334
  let lineStyle = "";
35318
35335
  if (submitted) {
35319
- if (line.isBug && isFlagged) lineStyle = "bg-green-50 dark:bg-green-950";
35320
- else if (line.isBug && !isFlagged) lineStyle = "bg-yellow-50 dark:bg-yellow-950";
35321
- else if (!line.isBug && isFlagged) lineStyle = "bg-red-50 dark:bg-red-950";
35336
+ if (line.isBug && isFlagged) lineStyle = "bg-success/10";
35337
+ else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
35338
+ else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
35322
35339
  } else if (isFlagged) {
35323
- lineStyle = "bg-red-50 dark:bg-red-950";
35340
+ lineStyle = "bg-error/10";
35324
35341
  }
35325
35342
  return /* @__PURE__ */ jsxRuntime.jsxs(
35326
35343
  HStack,
@@ -35333,8 +35350,8 @@ function DebuggerBoard({
35333
35350
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-10 flex-shrink-0 flex items-center justify-center border-r border-border text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: i + 1 }) }),
35334
35351
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 px-3 py-1.5 font-mono text-sm whitespace-pre", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "font-mono text-sm", children: line.content }) }),
35335
35352
  /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
35336
- isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-red-600" }),
35337
- submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-yellow-600" })
35353
+ isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
35354
+ submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
35338
35355
  ] })
35339
35356
  ]
35340
35357
  },
@@ -35349,7 +35366,7 @@ function DebuggerBoard({
35349
35366
  {
35350
35367
  icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
35351
35368
  size: "xs",
35352
- className: flaggedLines.has(line.id) ? "text-green-600 mt-0.5" : "text-yellow-600 mt-0.5"
35369
+ className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
35353
35370
  }
35354
35371
  ),
35355
35372
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
@@ -35358,7 +35375,7 @@ function DebuggerBoard({
35358
35375
  ] })
35359
35376
  ] }, line.id))
35360
35377
  ] }) }),
35361
- showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-yellow-500", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
35378
+ showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
35362
35379
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
35363
35380
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
35364
35381
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -36081,7 +36098,7 @@ function LinearView({
36081
36098
  className
36082
36099
  }) {
36083
36100
  const currentIdx = trait.states.indexOf(trait.currentState);
36084
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36101
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36085
36102
  trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
36086
36103
  /* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
36087
36104
  const isDone = i < currentIdx;
@@ -36103,10 +36120,10 @@ function LinearView({
36103
36120
  {
36104
36121
  display: "inline-flex",
36105
36122
  className: cn(
36106
- "items-center justify-center rounded-full px-3 py-1 border-2 transition-all",
36123
+ "items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
36107
36124
  SIZE_CONFIG2[size || "md"].fontSize,
36108
36125
  isDone && "bg-success/20 border-success text-success",
36109
- isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-md shadow-primary/20",
36126
+ isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
36110
36127
  !isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
36111
36128
  ),
36112
36129
  children: [
@@ -36128,7 +36145,7 @@ function CompactView({
36128
36145
  const { t } = useTranslate();
36129
36146
  const config = SIZE_CONFIG2[size || "md"];
36130
36147
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
36131
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36148
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36132
36149
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
36133
36150
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
36134
36151
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -36164,7 +36181,7 @@ function FullView({
36164
36181
  const { t } = useTranslate();
36165
36182
  const config = SIZE_CONFIG2[size || "md"];
36166
36183
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
36167
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36184
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36168
36185
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
36169
36186
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
36170
36187
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -36178,9 +36195,9 @@ function FullView({
36178
36195
  {
36179
36196
  display: "flex",
36180
36197
  className: cn(
36181
- "items-center justify-center rounded-md border-2 transition-all px-2",
36198
+ "items-center justify-center rounded-container border-2 transition-all px-2",
36182
36199
  config.nodeSize,
36183
- isCurrent && "bg-primary/20 border-primary shadow-md shadow-primary/20",
36200
+ isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
36184
36201
  !isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
36185
36202
  !isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
36186
36203
  onStateClick && "cursor-pointer"
@@ -36610,7 +36627,7 @@ function EventHandlerBoard({
36610
36627
  backgroundPosition: "center"
36611
36628
  },
36612
36629
  children: [
36613
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
36630
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
36614
36631
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
36615
36632
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
36616
36633
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -36625,7 +36642,7 @@ function EventHandlerBoard({
36625
36642
  Box,
36626
36643
  {
36627
36644
  className: cn(
36628
- "p-3 rounded-lg border-2 cursor-pointer transition-all hover:scale-105",
36645
+ "p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
36629
36646
  selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
36630
36647
  ),
36631
36648
  onClick: () => setSelectedObjectId(obj.id),
@@ -36647,10 +36664,10 @@ function EventHandlerBoard({
36647
36664
  }
36648
36665
  ),
36649
36666
  eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
36650
- playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-lg bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("eventHandler.chainComplete") }) }),
36667
+ playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("eventHandler.chainComplete") }) }),
36651
36668
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
36652
- /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-lg bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(encourageKey) }) }),
36653
- showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-lg bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
36669
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(encourageKey) }) }),
36670
+ showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
36654
36671
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
36655
36672
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
36656
36673
  ] }) })
@@ -39823,7 +39840,7 @@ function NegotiatorBoard({
39823
39840
  backgroundPosition: "center"
39824
39841
  },
39825
39842
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
39826
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
39843
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
39827
39844
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
39828
39845
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
39829
39846
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
@@ -39869,7 +39886,7 @@ function NegotiatorBoard({
39869
39886
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
39870
39887
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
39871
39888
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
39872
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-green-600", children: [
39889
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
39873
39890
  "+",
39874
39891
  round.playerPayoff
39875
39892
  ] }),
@@ -39880,7 +39897,7 @@ function NegotiatorBoard({
39880
39897
  ] }, round.round))
39881
39898
  ] }) }),
39882
39899
  isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
39883
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-green-600" : "text-red-600" }),
39900
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
39884
39901
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
39885
39902
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
39886
39903
  t("negotiator.finalScore"),
@@ -39890,7 +39907,7 @@ function NegotiatorBoard({
39890
39907
  entity.targetScore
39891
39908
  ] })
39892
39909
  ] }) }),
39893
- showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-yellow-500", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
39910
+ showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
39894
39911
  isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
39895
39912
  ] })
39896
39913
  }
@@ -42494,7 +42511,7 @@ function TraitSlot({
42494
42511
  display: "flex",
42495
42512
  position: "relative",
42496
42513
  className: cn(
42497
- "items-center justify-center rounded-lg transition-all duration-200",
42514
+ "items-center justify-center rounded-container transition-all duration-200 bg-card/50",
42498
42515
  !locked && "cursor-pointer",
42499
42516
  locked && "cursor-not-allowed opacity-50",
42500
42517
  isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
@@ -42510,7 +42527,7 @@ function TraitSlot({
42510
42527
  style: {
42511
42528
  width: config.box,
42512
42529
  height: config.box,
42513
- backgroundColor: catColor?.bg || "rgba(30,41,59,0.5)",
42530
+ backgroundColor: catColor?.bg || void 0,
42514
42531
  borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
42515
42532
  },
42516
42533
  onClick: handleClick,
@@ -42539,7 +42556,7 @@ function TraitSlot({
42539
42556
  Box,
42540
42557
  {
42541
42558
  position: "absolute",
42542
- className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-full flex items-center justify-center cursor-pointer hover:bg-error/80 transition-colors",
42559
+ className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-pill flex items-center justify-center cursor-pointer hover:bg-error/80 transition-colors",
42543
42560
  onClick: handleRemove,
42544
42561
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
42545
42562
  }
@@ -42549,14 +42566,14 @@ function TraitSlot({
42549
42566
  Box,
42550
42567
  {
42551
42568
  position: "absolute",
42552
- className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-full flex items-center justify-center border border-border",
42569
+ className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
42553
42570
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
42554
42571
  }
42555
42572
  ),
42556
42573
  showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
42557
42574
  Box,
42558
42575
  {
42559
- className: "p-3 bg-background border border-border rounded-lg shadow-xl",
42576
+ className: "p-3 bg-background border border-border rounded-container shadow-xl",
42560
42577
  style: {
42561
42578
  ...getTooltipStyle(),
42562
42579
  minWidth: 200,
@@ -42806,12 +42823,12 @@ function SequencerBoard({
42806
42823
  backgroundPosition: "center"
42807
42824
  },
42808
42825
  children: [
42809
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
42826
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
42810
42827
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
42811
42828
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
42812
42829
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
42813
42830
  ] }),
42814
- showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-lg bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
42831
+ showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
42815
42832
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
42816
42833
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
42817
42834
  ] }) }),
@@ -42849,8 +42866,8 @@ function SequencerBoard({
42849
42866
  label: t("sequencer.dragActions")
42850
42867
  }
42851
42868
  ),
42852
- hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-lg bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: t(encourageKey) }) }),
42853
- playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-lg bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("sequencer.levelComplete") }) }),
42869
+ hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: t(encourageKey) }) }),
42870
+ playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("sequencer.levelComplete") }) }),
42854
42871
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
42855
42872
  /* @__PURE__ */ jsxRuntime.jsx(
42856
42873
  Button,
@@ -43526,7 +43543,7 @@ function SimulationCanvas({
43526
43543
  ref: canvasRef,
43527
43544
  width,
43528
43545
  height,
43529
- className: "rounded-md block max-w-full h-auto"
43546
+ className: "rounded-container block max-w-full h-auto"
43530
43547
  }
43531
43548
  ) });
43532
43549
  }
@@ -43734,7 +43751,7 @@ function SimulatorBoard({
43734
43751
  backgroundPosition: "center"
43735
43752
  },
43736
43753
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
43737
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
43754
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
43738
43755
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
43739
43756
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
43740
43757
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -43785,8 +43802,8 @@ function SimulatorBoard({
43785
43802
  entity.outputUnit
43786
43803
  ] }),
43787
43804
  submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
43788
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-green-600" : "text-red-600" }),
43789
- /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-green-600" : "text-red-600", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
43805
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
43806
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
43790
43807
  ] }),
43791
43808
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
43792
43809
  t("simulator.target"),
@@ -43799,7 +43816,7 @@ function SimulatorBoard({
43799
43816
  ")"
43800
43817
  ] })
43801
43818
  ] }) }),
43802
- showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-yellow-500", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
43819
+ showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
43803
43820
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
43804
43821
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
43805
43822
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
@@ -44200,7 +44217,7 @@ function StateNode2({
44200
44217
  position: "absolute",
44201
44218
  display: "flex",
44202
44219
  className: cn(
44203
- "items-center justify-center rounded-full border-3 transition-all cursor-pointer select-none",
44220
+ "items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
44204
44221
  "min-w-[80px] h-[80px] px-3",
44205
44222
  isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
44206
44223
  isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
@@ -44513,7 +44530,7 @@ function StateArchitectBoard({
44513
44530
  backgroundPosition: "center"
44514
44531
  },
44515
44532
  children: [
44516
- entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-lg bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
44533
+ entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
44517
44534
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
44518
44535
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
44519
44536
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -44532,7 +44549,7 @@ function StateArchitectBoard({
44532
44549
  Box,
44533
44550
  {
44534
44551
  position: "relative",
44535
- className: "rounded-lg border border-border bg-background overflow-hidden",
44552
+ className: "rounded-container border border-border bg-background overflow-hidden",
44536
44553
  style: { width: GRAPH_W, height: GRAPH_H },
44537
44554
  children: [
44538
44555
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -44591,7 +44608,7 @@ function StateArchitectBoard({
44591
44608
  children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
44592
44609
  }
44593
44610
  ) }),
44594
- transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
44611
+ transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
44595
44612
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
44596
44613
  transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
44597
44614
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
@@ -44625,7 +44642,7 @@ function StateArchitectBoard({
44625
44642
  variables
44626
44643
  }
44627
44644
  ),
44628
- testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-lg bg-card border border-border", gap: "xs", children: [
44645
+ testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
44629
44646
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
44630
44647
  testResults.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
44631
44648
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r.passed ? "text-success" : "text-error", children: r.passed ? "\u2714" : "\u2717" }),
@@ -44636,10 +44653,10 @@ function StateArchitectBoard({
44636
44653
  entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
44637
44654
  ] })
44638
44655
  ] }),
44639
- playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-lg bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("stateArchitect.allPassed") }) }),
44656
+ playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("stateArchitect.allPassed") }) }),
44640
44657
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
44641
- /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-lg bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(ENCOURAGEMENT_KEYS3[Math.min(attempts - 1, ENCOURAGEMENT_KEYS3.length - 1)] ?? ENCOURAGEMENT_KEYS3[0]) }) }),
44642
- attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-lg bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
44658
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(ENCOURAGEMENT_KEYS3[Math.min(attempts - 1, ENCOURAGEMENT_KEYS3.length - 1)] ?? ENCOURAGEMENT_KEYS3[0]) }) }),
44659
+ attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
44643
44660
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
44644
44661
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
44645
44662
  ] }) })