@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.
@@ -11501,7 +11501,7 @@ function HealthBar({
11501
11501
  "div",
11502
11502
  {
11503
11503
  className: cn(
11504
- "relative overflow-hidden rounded-full bg-gray-700",
11504
+ "relative overflow-hidden rounded-full bg-muted",
11505
11505
  sizes.bar,
11506
11506
  "w-24",
11507
11507
  className
@@ -11511,7 +11511,7 @@ function HealthBar({
11511
11511
  {
11512
11512
  className: cn(
11513
11513
  "absolute inset-y-0 left-0 rounded-full",
11514
- percentage > 66 ? "bg-green-500" : percentage > 33 ? "bg-yellow-500" : "bg-red-500",
11514
+ percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
11515
11515
  animated && "transition-all duration-300"
11516
11516
  ),
11517
11517
  style: { width: `${percentage}%` }
@@ -11533,7 +11533,7 @@ var init_HealthBar = __esm({
11533
11533
  heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
11534
11534
  "svg",
11535
11535
  {
11536
- className: cn("transition-all duration-200", size, filled ? "text-red-500" : "text-gray-400"),
11536
+ className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
11537
11537
  viewBox: "0 0 24 24",
11538
11538
  fill: filled ? "currentColor" : "none",
11539
11539
  stroke: "currentColor",
@@ -11597,7 +11597,7 @@ function ScoreDisplay({
11597
11597
  ),
11598
11598
  children: [
11599
11599
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
11600
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
11600
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
11601
11601
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
11602
11602
  ]
11603
11603
  }
@@ -11710,8 +11710,8 @@ var init_ControlButton = __esm({
11710
11710
  };
11711
11711
  shapeMap = {
11712
11712
  circle: "rounded-full",
11713
- rounded: "rounded-xl",
11714
- square: "rounded-md"
11713
+ rounded: "rounded-interactive",
11714
+ square: "rounded-interactive"
11715
11715
  };
11716
11716
  variantMap = {
11717
11717
  primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
@@ -11879,12 +11879,12 @@ function TimerDisplay({
11879
11879
  "div",
11880
11880
  {
11881
11881
  className: cn(
11882
- "inline-flex items-center justify-center rounded-lg",
11883
- "bg-[var(--color-card)]/80 border border-gray-600 font-mono font-bold tabular-nums",
11882
+ "inline-flex items-center justify-center rounded-container",
11883
+ "bg-card/80 border border-muted font-mono font-bold tabular-nums",
11884
11884
  sizeMap4[size],
11885
- running && "border-green-500/50",
11886
- isLow && "text-red-400 border-red-500/50 animate-pulse",
11887
- !isLow && "text-[var(--color-foreground)]",
11885
+ running && "border-success/50",
11886
+ isLow && "text-error border-error/50 animate-pulse",
11887
+ !isLow && "text-foreground",
11888
11888
  className
11889
11889
  ),
11890
11890
  children: formatTime(seconds, format)
@@ -11917,17 +11917,17 @@ function ResourceCounter({
11917
11917
  "div",
11918
11918
  {
11919
11919
  className: cn(
11920
- "inline-flex items-center rounded-md",
11921
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
11920
+ "inline-flex items-center rounded-container",
11921
+ "bg-card/80 border border-muted font-medium text-foreground",
11922
11922
  sizes.wrapper,
11923
11923
  className
11924
11924
  ),
11925
11925
  children: [
11926
11926
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
11927
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
11927
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
11928
11928
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
11929
11929
  value,
11930
- max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500", children: [
11930
+ max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
11931
11931
  "/",
11932
11932
  max
11933
11933
  ] })
@@ -11968,18 +11968,18 @@ function ItemSlot({
11968
11968
  disabled: !isClickable,
11969
11969
  title: label,
11970
11970
  className: cn(
11971
- "relative flex items-center justify-center rounded-lg border-2",
11972
- "bg-[var(--color-card)]/80 transition-all duration-150",
11971
+ "relative flex items-center justify-center rounded-interactive border-2",
11972
+ "bg-card/80 transition-all duration-150",
11973
11973
  sizeMap6[size],
11974
- empty ? "border-gray-700 bg-[var(--color-card)]/50" : rarityBorderMap[rarity],
11974
+ empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
11975
11975
  !empty && rarityGlowMap[rarity],
11976
- selected && "ring-2 ring-white ring-offset-1 ring-offset-gray-900",
11976
+ selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
11977
11977
  isClickable && !empty && "hover:brightness-125 cursor-pointer",
11978
- isClickable && empty && "hover:border-gray-500 cursor-pointer",
11978
+ isClickable && empty && "hover:border-muted cursor-pointer",
11979
11979
  !isClickable && "cursor-default",
11980
11980
  className
11981
11981
  ),
11982
- children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600 text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11982
+ children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11983
11983
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
11984
11984
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
11985
11985
  "span",
@@ -11987,7 +11987,7 @@ function ItemSlot({
11987
11987
  className: cn(
11988
11988
  "absolute -bottom-1 -right-1 flex items-center justify-center",
11989
11989
  "min-w-[18px] h-[18px] rounded-full px-1",
11990
- "bg-[var(--color-surface,#374151)] border border-gray-500 text-xs font-bold text-[var(--color-foreground)]"
11990
+ "bg-surface border border-muted text-xs font-bold text-foreground"
11991
11991
  ),
11992
11992
  children: quantity
11993
11993
  }
@@ -12007,18 +12007,18 @@ var init_ItemSlot = __esm({
12007
12007
  lg: "w-18 h-18 text-3xl"
12008
12008
  };
12009
12009
  rarityBorderMap = {
12010
- common: "border-gray-500",
12011
- uncommon: "border-green-500",
12012
- rare: "border-blue-500",
12013
- epic: "border-purple-500",
12014
- legendary: "border-amber-400"
12010
+ common: "border-muted",
12011
+ uncommon: "border-success",
12012
+ rare: "border-info",
12013
+ epic: "border-accent",
12014
+ legendary: "border-warning"
12015
12015
  };
12016
12016
  rarityGlowMap = {
12017
12017
  common: "",
12018
12018
  uncommon: "",
12019
- rare: "shadow-[0_0_6px_rgba(59,130,246,0.3)]",
12020
- epic: "shadow-[0_0_8px_rgba(168,85,247,0.4)]",
12021
- legendary: "shadow-[0_0_10px_rgba(251,191,36,0.5)]"
12019
+ rare: "shadow-sm",
12020
+ epic: "shadow-lg",
12021
+ legendary: "shadow-lg"
12022
12022
  };
12023
12023
  ItemSlot.displayName = "ItemSlot";
12024
12024
  }
@@ -12036,8 +12036,8 @@ function TurnIndicator({
12036
12036
  "div",
12037
12037
  {
12038
12038
  className: cn(
12039
- "inline-flex items-center rounded-lg",
12040
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
12039
+ "inline-flex items-center rounded-container",
12040
+ "bg-card/80 border border-muted font-medium text-foreground",
12041
12041
  sizes.wrapper,
12042
12042
  className
12043
12043
  ),
@@ -12045,19 +12045,19 @@ function TurnIndicator({
12045
12045
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
12046
12046
  "Turn ",
12047
12047
  currentTurn,
12048
- maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-400", children: [
12048
+ maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
12049
12049
  "/",
12050
12050
  maxTurns
12051
12051
  ] })
12052
12052
  ] }),
12053
12053
  phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12054
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
12055
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-300", children: phase })
12054
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
12055
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
12056
12056
  ] }),
12057
12057
  activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12058
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
12059
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-green-500/20", sizes.dot) }),
12060
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-400", children: activeTeam })
12058
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
12059
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
12060
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
12061
12061
  ] })
12062
12062
  ]
12063
12063
  }
@@ -12076,10 +12076,10 @@ var init_TurnIndicator = __esm({
12076
12076
  }
12077
12077
  });
12078
12078
  function getComboIntensity(combo) {
12079
- if (combo >= 10) return "text-red-400 animate-pulse";
12080
- if (combo >= 7) return "text-orange-400";
12081
- if (combo >= 4) return "text-yellow-400";
12082
- return "text-[var(--color-foreground)]";
12079
+ if (combo >= 10) return "text-error animate-pulse";
12080
+ if (combo >= 7) return "text-warning";
12081
+ if (combo >= 4) return "text-warning";
12082
+ return "text-foreground";
12083
12083
  }
12084
12084
  function getComboScale(combo) {
12085
12085
  if (combo >= 10) return "scale-110";
@@ -12100,19 +12100,19 @@ function ComboCounter({
12100
12100
  {
12101
12101
  className: cn(
12102
12102
  "inline-flex flex-col items-center justify-center",
12103
- "rounded-xl bg-[var(--color-card)]/80 border border-gray-600 px-3 py-1.5",
12103
+ "rounded-container bg-card/80 border border-muted px-3 py-1.5",
12104
12104
  "transition-transform duration-200",
12105
12105
  getComboScale(combo),
12106
12106
  className
12107
12107
  ),
12108
12108
  children: [
12109
12109
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
12110
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-gray-400", sizes.label), children: "combo" }),
12111
- multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-amber-400 tabular-nums", sizes.multiplier), children: [
12110
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
12111
+ multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
12112
12112
  "x",
12113
12113
  multiplier.toFixed(1)
12114
12114
  ] }),
12115
- streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-500 tabular-nums", sizes.label), children: [
12115
+ streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
12116
12116
  streak,
12117
12117
  " streak"
12118
12118
  ] })
@@ -12148,8 +12148,8 @@ function XPBar({
12148
12148
  "span",
12149
12149
  {
12150
12150
  className: cn(
12151
- "flex-shrink-0 rounded-md font-bold",
12152
- "bg-indigo-600 text-white border border-indigo-400",
12151
+ "flex-shrink-0 rounded-interactive font-bold",
12152
+ "bg-accent text-foreground border border-accent",
12153
12153
  sizes.badge
12154
12154
  ),
12155
12155
  children: [
@@ -12163,7 +12163,7 @@ function XPBar({
12163
12163
  "div",
12164
12164
  {
12165
12165
  className: cn(
12166
- "relative w-full overflow-hidden rounded-full bg-gray-700 border border-gray-600",
12166
+ "relative w-full overflow-hidden rounded-full bg-muted border border-muted",
12167
12167
  sizes.bar
12168
12168
  ),
12169
12169
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -12171,7 +12171,7 @@ function XPBar({
12171
12171
  {
12172
12172
  className: cn(
12173
12173
  "absolute inset-y-0 left-0 rounded-full",
12174
- "bg-gradient-to-r from-indigo-600 to-purple-500",
12174
+ "bg-gradient-to-r from-accent to-info",
12175
12175
  animated && "transition-all duration-500 ease-out"
12176
12176
  ),
12177
12177
  style: { width: `${percentage}%` }
@@ -12179,7 +12179,7 @@ function XPBar({
12179
12179
  )
12180
12180
  }
12181
12181
  ),
12182
- showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-400 tabular-nums", sizes.text), children: [
12182
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
12183
12183
  current,
12184
12184
  " / ",
12185
12185
  max,
@@ -12215,7 +12215,7 @@ function WaypointMarker({
12215
12215
  "div",
12216
12216
  {
12217
12217
  className: cn(
12218
- "absolute rounded-full border-2 border-blue-400 animate-ping opacity-50",
12218
+ "absolute rounded-full border-2 border-info animate-ping opacity-50",
12219
12219
  sizes.ring
12220
12220
  )
12221
12221
  }
@@ -12224,7 +12224,7 @@ function WaypointMarker({
12224
12224
  "div",
12225
12225
  {
12226
12226
  className: cn(
12227
- "absolute rounded-full border-2 border-blue-400",
12227
+ "absolute rounded-full border-2 border-info",
12228
12228
  sizes.ring
12229
12229
  )
12230
12230
  }
@@ -12235,9 +12235,9 @@ function WaypointMarker({
12235
12235
  className: cn(
12236
12236
  "relative flex items-center justify-center rounded-full transition-all duration-200",
12237
12237
  sizes.dot,
12238
- completed && "bg-green-500 text-white",
12239
- active && !completed && "bg-blue-500 text-white",
12240
- !active && !completed && "bg-gray-500"
12238
+ completed && "bg-success text-foreground",
12239
+ active && !completed && "bg-info text-foreground",
12240
+ !active && !completed && "bg-muted"
12241
12241
  ),
12242
12242
  children: completed ? checkIcon : icon
12243
12243
  }
@@ -12249,7 +12249,7 @@ function WaypointMarker({
12249
12249
  className: cn(
12250
12250
  "text-center whitespace-nowrap",
12251
12251
  sizes.label,
12252
- completed ? "text-green-400" : active ? "text-blue-400" : "text-gray-400"
12252
+ completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
12253
12253
  ),
12254
12254
  children: label
12255
12255
  }
@@ -12290,7 +12290,7 @@ function StatusEffect({
12290
12290
  "div",
12291
12291
  {
12292
12292
  className: cn(
12293
- "relative flex items-center justify-center rounded border-2",
12293
+ "relative flex items-center justify-center rounded-interactive border-2",
12294
12294
  sizes.container,
12295
12295
  variantStyles7[variant]
12296
12296
  ),
@@ -12301,7 +12301,7 @@ function StatusEffect({
12301
12301
  "span",
12302
12302
  {
12303
12303
  className: cn(
12304
- "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-white bg-black/60 leading-tight",
12304
+ "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
12305
12305
  sizes.timer
12306
12306
  ),
12307
12307
  children: formatDuration(duration)
@@ -12314,7 +12314,7 @@ function StatusEffect({
12314
12314
  "span",
12315
12315
  {
12316
12316
  className: cn(
12317
- "absolute flex items-center justify-center rounded-full bg-[var(--color-card)] text-[var(--color-foreground)] font-bold leading-none",
12317
+ "absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
12318
12318
  sizes.badge
12319
12319
  ),
12320
12320
  children: stacks
@@ -12333,9 +12333,9 @@ var init_StatusEffect = __esm({
12333
12333
  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" }
12334
12334
  };
12335
12335
  variantStyles7 = {
12336
- buff: "border-green-500 bg-green-500/20",
12337
- debuff: "border-red-500 bg-red-500/20",
12338
- neutral: "border-gray-500 bg-gray-500/20"
12336
+ buff: "border-success bg-success/20",
12337
+ debuff: "border-error bg-error/20",
12338
+ neutral: "border-muted bg-muted/20"
12339
12339
  };
12340
12340
  StatusEffect.displayName = "StatusEffect";
12341
12341
  }
@@ -12374,10 +12374,10 @@ var init_DamageNumber = __esm({
12374
12374
  lg: "text-2xl"
12375
12375
  };
12376
12376
  typeStyles = {
12377
- damage: "text-red-500 font-bold",
12378
- heal: "text-green-500 font-bold",
12379
- crit: "text-orange-400 font-extrabold",
12380
- miss: "text-gray-400 italic"
12377
+ damage: "text-error font-bold",
12378
+ heal: "text-success font-bold",
12379
+ crit: "text-warning font-extrabold",
12380
+ miss: "text-muted-foreground italic"
12381
12381
  };
12382
12382
  floatKeyframes = `
12383
12383
  @keyframes damageFloat {
@@ -12400,12 +12400,12 @@ function DialogueBubble({
12400
12400
  "div",
12401
12401
  {
12402
12402
  className: cn(
12403
- "flex items-start gap-3 rounded-lg bg-black/80 backdrop-blur-sm px-4 py-3 border border-white/10",
12403
+ "flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
12404
12404
  position === "top" ? "rounded-bl-none" : "rounded-tl-none",
12405
12405
  className
12406
12406
  ),
12407
12407
  children: [
12408
- 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(
12408
+ 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(
12409
12409
  "img",
12410
12410
  {
12411
12411
  src: portrait,
@@ -12414,8 +12414,8 @@ function DialogueBubble({
12414
12414
  }
12415
12415
  ) }),
12416
12416
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
12417
- speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-yellow-400", children: speaker }),
12418
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--color-foreground)] leading-relaxed", children: text })
12417
+ speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
12418
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
12419
12419
  ] })
12420
12420
  ]
12421
12421
  }
@@ -12442,7 +12442,7 @@ function ChoiceButton({
12442
12442
  disabled,
12443
12443
  onClick,
12444
12444
  className: cn(
12445
- "w-full text-left px-4 py-2.5 rounded-md border transition-all duration-150",
12445
+ "w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
12446
12446
  "flex items-center gap-2",
12447
12447
  selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
12448
12448
  disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
@@ -12495,7 +12495,7 @@ function ActionButton({
12495
12495
  disabled: isDisabled,
12496
12496
  onClick,
12497
12497
  className: cn(
12498
- "relative inline-flex items-center gap-1.5 rounded-md border font-medium overflow-hidden transition-colors duration-150",
12498
+ "relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
12499
12499
  sizes.button,
12500
12500
  variantStyles8[variant],
12501
12501
  isDisabled && "opacity-60 cursor-not-allowed",
@@ -12538,9 +12538,9 @@ var init_ActionButton = __esm({
12538
12538
  init_cn();
12539
12539
  init_Icon();
12540
12540
  sizeMap13 = {
12541
- sm: { button: "px-3 py-1.5 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
12542
- md: { button: "px-4 py-2 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
12543
- lg: { button: "px-5 py-2.5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
12541
+ sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
12542
+ md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
12543
+ lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
12544
12544
  };
12545
12545
  variantStyles8 = {
12546
12546
  primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
@@ -12620,7 +12620,7 @@ function MiniMap({
12620
12620
  "div",
12621
12621
  {
12622
12622
  className: cn(
12623
- "relative inline-block border border-white/20 rounded",
12623
+ "relative inline-block border border-border/20 rounded-container",
12624
12624
  className
12625
12625
  ),
12626
12626
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -15336,7 +15336,7 @@ function ActionTile({
15336
15336
  {
15337
15337
  display: "flex",
15338
15338
  className: cn(
15339
- "flex-col items-center gap-1 rounded-lg border-2 transition-all select-none",
15339
+ "flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
15340
15340
  config.px,
15341
15341
  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",
15342
15342
  className
@@ -16680,12 +16680,12 @@ function IsometricCanvas({
16680
16680
  return /* @__PURE__ */ jsxRuntime.jsx(
16681
16681
  Box,
16682
16682
  {
16683
- className: cn("relative w-full overflow-hidden rounded-lg", className),
16683
+ className: cn("relative w-full overflow-hidden rounded-container", className),
16684
16684
  style: { height: viewportSize.height },
16685
16685
  "data-testid": "game-canvas-empty",
16686
- 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: [
16686
+ 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: [
16687
16687
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
16688
- /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-slate-400", children: t("canvas.emptyMessage") || "No map data loaded" })
16688
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
16689
16689
  ] }) })
16690
16690
  }
16691
16691
  );
@@ -17083,19 +17083,19 @@ function BattleBoard({
17083
17083
  }
17084
17084
  )
17085
17085
  ] }),
17086
- 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: [
17086
+ 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: [
17087
17087
  /* @__PURE__ */ jsxRuntime.jsx(
17088
17088
  Typography,
17089
17089
  {
17090
17090
  variant: "h2",
17091
17091
  className: cn(
17092
17092
  "text-4xl font-black tracking-widest uppercase",
17093
- gameResult === "victory" ? "text-yellow-400" : "text-red-500"
17093
+ gameResult === "victory" ? "text-warning" : "text-error"
17094
17094
  ),
17095
17095
  children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
17096
17096
  }
17097
17097
  ),
17098
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-gray-300", children: [
17098
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
17099
17099
  t("battle.turnsPlayed"),
17100
17100
  ": ",
17101
17101
  currentTurn
@@ -21141,7 +21141,7 @@ function BuilderBoard({
21141
21141
  backgroundPosition: "center"
21142
21142
  },
21143
21143
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
21144
- 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,
21144
+ 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,
21145
21145
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
21146
21146
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
21147
21147
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -21179,7 +21179,7 @@ function BuilderBoard({
21179
21179
  {
21180
21180
  gap: "sm",
21181
21181
  align: "center",
21182
- className: `p-3 border-2 rounded ${result ? result.correct ? "border-green-500" : "border-red-500" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
21182
+ className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
21183
21183
  onClick: () => handlePlaceComponent(slot.id),
21184
21184
  children: [
21185
21185
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
@@ -21194,7 +21194,7 @@ function BuilderBoard({
21194
21194
  ] }) : null,
21195
21195
  placedComp.label
21196
21196
  ] }),
21197
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-green-600" : "text-red-600" })
21197
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
21198
21198
  ] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
21199
21199
  ]
21200
21200
  },
@@ -21203,10 +21203,10 @@ function BuilderBoard({
21203
21203
  }) })
21204
21204
  ] }) }),
21205
21205
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
21206
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
21206
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
21207
21207
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
21208
21208
  ] }) }),
21209
- 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 }) }),
21209
+ 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 }) }),
21210
21210
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
21211
21211
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
21212
21212
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
@@ -22828,7 +22828,7 @@ function CanvasEffectEngine({
22828
22828
  flash && /* @__PURE__ */ jsxRuntime.jsx(
22829
22829
  Box,
22830
22830
  {
22831
- className: "absolute inset-0 z-20 pointer-events-none rounded-lg",
22831
+ className: "absolute inset-0 z-20 pointer-events-none rounded-container",
22832
22832
  style: { backgroundColor: flash.color, opacity: flash.alpha }
22833
22833
  }
22834
22834
  ),
@@ -22896,7 +22896,7 @@ function EmojiEffect({
22896
22896
  /* @__PURE__ */ jsxRuntime.jsx(
22897
22897
  Box,
22898
22898
  {
22899
- className: "absolute rounded-full animate-ping",
22899
+ className: "absolute rounded-pill animate-ping",
22900
22900
  style: {
22901
22901
  width: 48 * intensity,
22902
22902
  height: 48 * intensity,
@@ -24713,7 +24713,7 @@ function ClassifierBoard({
24713
24713
  backgroundPosition: "center"
24714
24714
  },
24715
24715
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
24716
- 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,
24716
+ 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,
24717
24717
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
24718
24718
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
24719
24719
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -24728,7 +24728,7 @@ function ClassifierBoard({
24728
24728
  /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
24729
24729
  const catItems = items.filter((item) => assignments[item.id] === cat.id);
24730
24730
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
24731
- 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" }) }),
24731
+ 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" }) }),
24732
24732
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
24733
24733
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
24734
24734
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
@@ -24739,12 +24739,12 @@ function ClassifierBoard({
24739
24739
  Badge,
24740
24740
  {
24741
24741
  size: "sm",
24742
- 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" : ""}`,
24742
+ className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
24743
24743
  onClick: () => handleUnassign(item.id),
24744
24744
  children: [
24745
24745
  item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
24746
24746
  item.label,
24747
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-green-600" : "text-red-600" })
24747
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
24748
24748
  ]
24749
24749
  },
24750
24750
  item.id
@@ -24767,11 +24767,11 @@ function ClassifierBoard({
24767
24767
  ] }) }, cat.id);
24768
24768
  }) }),
24769
24769
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
24770
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
24770
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
24771
24771
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
24772
24772
  !allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
24773
24773
  ] }) }),
24774
- 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 }) }),
24774
+ 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 }) }),
24775
24775
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
24776
24776
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
24777
24777
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -25819,7 +25819,7 @@ function CraftingRecipe({
25819
25819
  Box,
25820
25820
  {
25821
25821
  className: cn(
25822
- "flex flex-wrap items-center gap-3 rounded-lg bg-gray-800/50 border border-gray-700/50 p-3",
25822
+ "flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
25823
25823
  className
25824
25824
  ),
25825
25825
  children: [
@@ -25836,10 +25836,10 @@ function CraftingRecipe({
25836
25836
  className: cn(!hasSufficient && "opacity-50")
25837
25837
  }
25838
25838
  ) }),
25839
- index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-gray-500" })
25839
+ index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
25840
25840
  ] }, index);
25841
25841
  }) }),
25842
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-gray-400" }),
25842
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
25843
25843
  /* @__PURE__ */ jsxRuntime.jsx(
25844
25844
  ItemSlot,
25845
25845
  {
@@ -25927,7 +25927,7 @@ function DPad({
25927
25927
  createButton("up"),
25928
25928
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
25929
25929
  createButton("left"),
25930
- /* @__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" }) }),
25930
+ /* @__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" }) }),
25931
25931
  createButton("right"),
25932
25932
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
25933
25933
  createButton("down"),
@@ -30112,7 +30112,7 @@ function StatBadge({
30112
30112
  "div",
30113
30113
  {
30114
30114
  className: cn(
30115
- "inline-flex items-center gap-2 rounded-lg border backdrop-blur-sm",
30115
+ "inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
30116
30116
  sizeMap17[size] ?? sizeMap17.md,
30117
30117
  variantMap2[variant] ?? variantMap2.default,
30118
30118
  className
@@ -30258,10 +30258,10 @@ function QuestTracker({
30258
30258
  Box,
30259
30259
  {
30260
30260
  className: cn(
30261
- "flex items-start gap-3 rounded-lg px-3 py-2 transition-colors",
30262
- isActive && !isCompleted && "bg-blue-900/20 border border-blue-800/50",
30263
- isCompleted && "bg-green-900/10 border border-green-800/30 opacity-70",
30264
- !isActive && !isCompleted && "bg-gray-800/30 border border-gray-700/30"
30261
+ "flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
30262
+ isActive && !isCompleted && "bg-info/20 border border-info/50",
30263
+ isCompleted && "bg-success/10 border border-success/30 opacity-70",
30264
+ !isActive && !isCompleted && "bg-muted/30 border border-border/30"
30265
30265
  ),
30266
30266
  children: [
30267
30267
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -30279,9 +30279,9 @@ function QuestTracker({
30279
30279
  variant: "body2",
30280
30280
  className: cn(
30281
30281
  "font-medium truncate",
30282
- isCompleted && "line-through text-gray-500",
30283
- isActive && !isCompleted && "text-blue-300",
30284
- !isActive && !isCompleted && "text-gray-300"
30282
+ isCompleted && "line-through text-muted-foreground",
30283
+ isActive && !isCompleted && "text-info",
30284
+ !isActive && !isCompleted && "text-muted-foreground"
30285
30285
  ),
30286
30286
  children: quest.title
30287
30287
  }
@@ -30299,7 +30299,7 @@ function QuestTracker({
30299
30299
  Typography,
30300
30300
  {
30301
30301
  variant: "caption",
30302
- className: "text-gray-500 mt-1",
30302
+ className: "text-muted-foreground mt-1",
30303
30303
  children: [
30304
30304
  quest.progress,
30305
30305
  " / ",
@@ -30356,14 +30356,14 @@ function PowerupSlots({
30356
30356
  {
30357
30357
  className: cn(
30358
30358
  "absolute -bottom-1 left-1/2 -translate-x-1/2",
30359
- "rounded px-1 py-px",
30360
- "bg-black/80 border border-gray-600"
30359
+ "rounded-interactive px-1 py-px",
30360
+ "bg-background/80 border border-border"
30361
30361
  ),
30362
30362
  children: /* @__PURE__ */ jsxRuntime.jsx(
30363
30363
  Typography,
30364
30364
  {
30365
30365
  variant: "caption",
30366
- className: "text-[9px] font-mono font-bold text-yellow-300 whitespace-nowrap",
30366
+ className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
30367
30367
  children: formatTime2(powerup.remainingTime)
30368
30368
  }
30369
30369
  )
@@ -30396,6 +30396,8 @@ function GameCanvas2D({
30396
30396
  height = 600,
30397
30397
  onDraw,
30398
30398
  onTick,
30399
+ tickEvent,
30400
+ drawEvent,
30399
30401
  fps = 60,
30400
30402
  className
30401
30403
  }) {
@@ -30403,10 +30405,17 @@ function GameCanvas2D({
30403
30405
  const rafRef = React98__namespace.useRef(0);
30404
30406
  const frameRef = React98__namespace.useRef(0);
30405
30407
  const lastTimeRef = React98__namespace.useRef(0);
30408
+ const emit = useEmitEvent();
30406
30409
  const onDrawRef = React98__namespace.useRef(onDraw);
30407
30410
  onDrawRef.current = onDraw;
30408
30411
  const onTickRef = React98__namespace.useRef(onTick);
30409
30412
  onTickRef.current = onTick;
30413
+ const tickEventRef = React98__namespace.useRef(tickEvent);
30414
+ tickEventRef.current = tickEvent;
30415
+ const drawEventRef = React98__namespace.useRef(drawEvent);
30416
+ drawEventRef.current = drawEvent;
30417
+ const emitRef = React98__namespace.useRef(emit);
30418
+ emitRef.current = emit;
30410
30419
  React98__namespace.useEffect(() => {
30411
30420
  const canvas = canvasRef.current;
30412
30421
  if (!canvas) return;
@@ -30423,8 +30432,15 @@ function GameCanvas2D({
30423
30432
  if (elapsed >= interval) {
30424
30433
  const dt = elapsed / 1e3;
30425
30434
  lastTimeRef.current = timestamp - elapsed % interval;
30435
+ const frame = frameRef.current;
30426
30436
  onTickRef.current?.(dt);
30427
- onDrawRef.current?.(ctx, frameRef.current);
30437
+ if (tickEventRef.current) {
30438
+ emitRef.current(tickEventRef.current, { dt, frame });
30439
+ }
30440
+ onDrawRef.current?.(ctx, frame);
30441
+ if (drawEventRef.current) {
30442
+ emitRef.current(drawEventRef.current, { frame });
30443
+ }
30428
30444
  frameRef.current += 1;
30429
30445
  }
30430
30446
  rafRef.current = requestAnimationFrame(loop);
@@ -30450,6 +30466,7 @@ var init_GameCanvas2D = __esm({
30450
30466
  "use client";
30451
30467
  init_cn();
30452
30468
  init_Box();
30469
+ init_useEventBus();
30453
30470
  GameCanvas2D.displayName = "GameCanvas2D";
30454
30471
  }
30455
30472
  });
@@ -30468,7 +30485,7 @@ function HealthPanel({
30468
30485
  Box,
30469
30486
  {
30470
30487
  className: cn(
30471
- "rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm",
30488
+ "rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
30472
30489
  sizes.padding,
30473
30490
  className
30474
30491
  ),
@@ -30479,7 +30496,7 @@ function HealthPanel({
30479
30496
  {
30480
30497
  variant: "caption",
30481
30498
  weight: "bold",
30482
- className: "text-gray-300 uppercase tracking-wider",
30499
+ className: "text-muted-foreground uppercase tracking-wider",
30483
30500
  children: label
30484
30501
  }
30485
30502
  ),
@@ -30500,7 +30517,7 @@ function HealthPanel({
30500
30517
  as: "span",
30501
30518
  variant: "caption",
30502
30519
  weight: "bold",
30503
- className: "text-blue-400 ml-1",
30520
+ className: "text-info ml-1",
30504
30521
  children: [
30505
30522
  "+",
30506
30523
  shield
@@ -30525,14 +30542,14 @@ function HealthPanel({
30525
30542
  Box,
30526
30543
  {
30527
30544
  className: cn(
30528
- "relative overflow-hidden rounded-full bg-gray-700",
30545
+ "relative overflow-hidden rounded-container bg-muted",
30529
30546
  size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
30530
30547
  "w-full"
30531
30548
  ),
30532
30549
  children: /* @__PURE__ */ jsxRuntime.jsx(
30533
30550
  Box,
30534
30551
  {
30535
- className: "absolute inset-y-0 left-0 rounded-full bg-blue-500 transition-all duration-300",
30552
+ className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
30536
30553
  style: { width: `${Math.min(100, shield / max * 100)}%` }
30537
30554
  }
30538
30555
  )
@@ -30591,7 +30608,7 @@ function ScoreBoard({
30591
30608
  Card,
30592
30609
  {
30593
30610
  className: cn(
30594
- "bg-[var(--color-card)]/90 border-gray-700 backdrop-blur-sm",
30611
+ "bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
30595
30612
  className
30596
30613
  ),
30597
30614
  children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
@@ -30708,7 +30725,7 @@ function TurnPanel({
30708
30725
  Box,
30709
30726
  {
30710
30727
  className: cn(
30711
- "flex items-center gap-3 rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm px-3 py-2",
30728
+ "flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
30712
30729
  className
30713
30730
  ),
30714
30731
  children: [
@@ -30760,7 +30777,7 @@ function EnemyPlate({
30760
30777
  Box,
30761
30778
  {
30762
30779
  className: cn(
30763
- "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",
30780
+ "inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
30764
30781
  "min-w-[120px]",
30765
30782
  className
30766
30783
  ),
@@ -30854,7 +30871,7 @@ function UnitCommandBar({
30854
30871
  Box,
30855
30872
  {
30856
30873
  className: cn(
30857
- "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",
30874
+ "flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
30858
30875
  className
30859
30876
  ),
30860
30877
  children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
@@ -30939,8 +30956,8 @@ function GameHud({
30939
30956
  className: cn(
30940
30957
  "relative z-10",
30941
30958
  positionMap[position],
30942
- transparent && "bg-gradient-to-b from-black/50 to-transparent",
30943
- position === "bottom" && "bg-gradient-to-t from-black/50 to-transparent",
30959
+ transparent && "bg-gradient-to-b from-background/50 to-transparent",
30960
+ position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
30944
30961
  className
30945
30962
  ),
30946
30963
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
@@ -31098,8 +31115,8 @@ function DialogueBox({
31098
31115
  tabIndex: 0,
31099
31116
  role: "dialog",
31100
31117
  "aria-label": "Dialogue",
31101
- 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: [
31102
- dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-gray-700", children: /* @__PURE__ */ jsxRuntime.jsx(
31118
+ 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: [
31119
+ dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
31103
31120
  "img",
31104
31121
  {
31105
31122
  src: dialogue.portrait,
@@ -31109,7 +31126,7 @@ function DialogueBox({
31109
31126
  }
31110
31127
  ) }),
31111
31128
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
31112
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-yellow-400 font-bold mb-2", children: dialogue.speaker }),
31129
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
31113
31130
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
31114
31131
  displayedText,
31115
31132
  isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
@@ -31119,9 +31136,9 @@ function DialogueBox({
31119
31136
  {
31120
31137
  type: "button",
31121
31138
  className: cn(
31122
- "block w-full text-left px-4 py-2 rounded transition-colors",
31123
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-yellow-400",
31124
- selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-yellow-400" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
31139
+ "block w-full text-left px-4 py-2 rounded-interactive transition-colors",
31140
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
31141
+ selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
31125
31142
  ),
31126
31143
  onClick: (e) => {
31127
31144
  e.stopPropagation();
@@ -31129,7 +31146,7 @@ function DialogueBox({
31129
31146
  onChoice?.(choice);
31130
31147
  },
31131
31148
  children: [
31132
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500 mr-2", children: [
31149
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
31133
31150
  index + 1,
31134
31151
  "."
31135
31152
  ] }),
@@ -31138,7 +31155,7 @@ function DialogueBox({
31138
31155
  },
31139
31156
  index
31140
31157
  )) }),
31141
- !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..." })
31158
+ !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..." })
31142
31159
  ] })
31143
31160
  ] }) })
31144
31161
  }
@@ -31241,7 +31258,7 @@ function InventoryPanel({
31241
31258
  /* @__PURE__ */ jsxRuntime.jsx(
31242
31259
  "div",
31243
31260
  {
31244
- className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-lg border border-gray-700",
31261
+ className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
31245
31262
  style: {
31246
31263
  gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
31247
31264
  gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
@@ -31253,8 +31270,8 @@ function InventoryPanel({
31253
31270
  className: cn(
31254
31271
  "relative flex items-center justify-center",
31255
31272
  "bg-[var(--color-card)] border rounded transition-colors",
31256
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-blue-500",
31257
- selectedSlot === index ? "border-yellow-400 bg-[var(--color-surface,#374151)]" : "border-gray-600"
31273
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
31274
+ selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
31258
31275
  ),
31259
31276
  style: { width: slotSize, height: slotSize },
31260
31277
  onClick: () => handleSlotClick(index),
@@ -31273,8 +31290,8 @@ function InventoryPanel({
31273
31290
  className: "w-8 h-8 object-contain",
31274
31291
  style: { imageRendering: "pixelated" }
31275
31292
  }
31276
- ) : /* @__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() }),
31277
- 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 })
31293
+ ) : /* @__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() }),
31294
+ 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 })
31278
31295
  ] })
31279
31296
  },
31280
31297
  index
@@ -31284,7 +31301,7 @@ function InventoryPanel({
31284
31301
  showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
31285
31302
  "div",
31286
31303
  {
31287
- className: "fixed z-50 bg-[var(--color-card)] border border-gray-600 rounded-lg p-2 shadow-lg pointer-events-none",
31304
+ className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
31288
31305
  style: {
31289
31306
  left: tooltipPosition.x,
31290
31307
  top: tooltipPosition.y,
@@ -31292,8 +31309,8 @@ function InventoryPanel({
31292
31309
  },
31293
31310
  children: [
31294
31311
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
31295
- hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-gray-400 mt-1", children: hoveredItem.description }),
31296
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-gray-500 mt-1", children: [
31312
+ hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
31313
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
31297
31314
  "Quantity: ",
31298
31315
  hoveredItem.quantity
31299
31316
  ] })
@@ -31371,7 +31388,7 @@ function GameMenu({
31371
31388
  children: title
31372
31389
  }
31373
31390
  ),
31374
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-gray-400 tracking-widest uppercase", children: subtitle })
31391
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
31375
31392
  ] }),
31376
31393
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
31377
31394
  "button",
@@ -31379,10 +31396,10 @@ function GameMenu({
31379
31396
  onClick: () => handleOptionClick(option),
31380
31397
  disabled: option.disabled,
31381
31398
  className: cn(
31382
- "w-full py-4 px-8 rounded-xl border-2 font-bold text-lg",
31399
+ "w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
31383
31400
  "transition-all duration-200 transform",
31384
31401
  "hover:scale-105 active:scale-95",
31385
- "focus:outline-none focus:ring-4 focus:ring-white/25",
31402
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
31386
31403
  variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
31387
31404
  option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
31388
31405
  ),
@@ -31394,8 +31411,8 @@ function GameMenu({
31394
31411
  index
31395
31412
  )) }),
31396
31413
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
31397
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-blue-500/10 rounded-full blur-3xl" }),
31398
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-purple-500/10 rounded-full blur-3xl" })
31414
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
31415
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
31399
31416
  ] })
31400
31417
  ]
31401
31418
  }
@@ -31408,9 +31425,9 @@ var init_GameMenu = __esm({
31408
31425
  init_cn();
31409
31426
  init_useEventBus();
31410
31427
  variantMap3 = {
31411
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400 shadow-lg shadow-blue-500/25",
31412
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
31413
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
31428
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
31429
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
31430
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
31414
31431
  };
31415
31432
  GameMenu.displayName = "GameMenu";
31416
31433
  }
@@ -31478,13 +31495,13 @@ function GameOverScreen({
31478
31495
  children: title
31479
31496
  }
31480
31497
  ),
31481
- message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-gray-300 mb-8 text-center max-w-md", children: message }),
31482
- 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}" }) }),
31498
+ message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
31499
+ 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}" }) }),
31483
31500
  stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
31484
31501
  "div",
31485
31502
  {
31486
31503
  className: cn(
31487
- "mb-8 p-6 rounded-xl border-2 bg-black/30",
31504
+ "mb-8 p-6 rounded-container border-2 bg-background/30",
31488
31505
  colors.accent
31489
31506
  ),
31490
31507
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
@@ -31493,7 +31510,7 @@ function GameOverScreen({
31493
31510
  displayValue = formatTime3(displayValue);
31494
31511
  }
31495
31512
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
31496
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-gray-400 text-sm mb-1", children: stat.label }),
31513
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
31497
31514
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
31498
31515
  stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
31499
31516
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
@@ -31507,10 +31524,10 @@ function GameOverScreen({
31507
31524
  {
31508
31525
  onClick: () => handleActionClick(action),
31509
31526
  className: cn(
31510
- "px-8 py-4 rounded-xl border-2 font-bold text-lg",
31527
+ "px-8 py-4 rounded-container border-2 font-bold text-lg",
31511
31528
  "transition-all duration-200",
31512
31529
  "hover:scale-105 active:scale-95",
31513
- "focus:outline-none focus:ring-4 focus:ring-white/25",
31530
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
31514
31531
  buttonVariants[action.variant ?? "secondary"]
31515
31532
  ),
31516
31533
  children: action.label
@@ -31529,25 +31546,25 @@ var init_GameOverScreen = __esm({
31529
31546
  init_useEventBus();
31530
31547
  variantColors = {
31531
31548
  victory: {
31532
- bg: "from-green-900/90 to-emerald-950/90",
31533
- title: "text-green-400",
31534
- accent: "border-green-500"
31549
+ bg: "from-success/90 to-success/90",
31550
+ title: "text-success",
31551
+ accent: "border-success"
31535
31552
  },
31536
31553
  defeat: {
31537
- bg: "from-red-900/90 to-gray-950/90",
31538
- title: "text-red-400",
31539
- accent: "border-red-500"
31554
+ bg: "from-error/90 to-background/90",
31555
+ title: "text-error",
31556
+ accent: "border-error"
31540
31557
  },
31541
31558
  neutral: {
31542
- bg: "from-gray-900/90 to-gray-950/90",
31543
- title: "text-white",
31544
- accent: "border-gray-500"
31559
+ bg: "from-muted/90 to-background/90",
31560
+ title: "text-foreground",
31561
+ accent: "border-muted"
31545
31562
  }
31546
31563
  };
31547
31564
  buttonVariants = {
31548
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400",
31549
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
31550
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
31565
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
31566
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
31567
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
31551
31568
  };
31552
31569
  GameOverScreen.displayName = "GameOverScreen";
31553
31570
  }
@@ -31781,7 +31798,7 @@ function PlatformerCanvas({
31781
31798
  {
31782
31799
  ref: canvasRef,
31783
31800
  style: { width: canvasWidth, height: canvasHeight },
31784
- className: cn("block rounded-lg border border-white/10", className),
31801
+ className: cn("block rounded-container border border-border/10", className),
31785
31802
  "data-testid": "platformer-canvas",
31786
31803
  tabIndex: 0
31787
31804
  }
@@ -38921,7 +38938,7 @@ function DebuggerBoard({
38921
38938
  backgroundPosition: "center"
38922
38939
  },
38923
38940
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
38924
- 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,
38941
+ 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,
38925
38942
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
38926
38943
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
38927
38944
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
@@ -38934,11 +38951,11 @@ function DebuggerBoard({
38934
38951
  const isFlagged = flaggedLines.has(line.id);
38935
38952
  let lineStyle = "";
38936
38953
  if (submitted) {
38937
- if (line.isBug && isFlagged) lineStyle = "bg-green-50 dark:bg-green-950";
38938
- else if (line.isBug && !isFlagged) lineStyle = "bg-yellow-50 dark:bg-yellow-950";
38939
- else if (!line.isBug && isFlagged) lineStyle = "bg-red-50 dark:bg-red-950";
38954
+ if (line.isBug && isFlagged) lineStyle = "bg-success/10";
38955
+ else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
38956
+ else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
38940
38957
  } else if (isFlagged) {
38941
- lineStyle = "bg-red-50 dark:bg-red-950";
38958
+ lineStyle = "bg-error/10";
38942
38959
  }
38943
38960
  return /* @__PURE__ */ jsxRuntime.jsxs(
38944
38961
  HStack,
@@ -38951,8 +38968,8 @@ function DebuggerBoard({
38951
38968
  /* @__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 }) }),
38952
38969
  /* @__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 }) }),
38953
38970
  /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
38954
- isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-red-600" }),
38955
- submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-yellow-600" })
38971
+ isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
38972
+ submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
38956
38973
  ] })
38957
38974
  ]
38958
38975
  },
@@ -38967,7 +38984,7 @@ function DebuggerBoard({
38967
38984
  {
38968
38985
  icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
38969
38986
  size: "xs",
38970
- className: flaggedLines.has(line.id) ? "text-green-600 mt-0.5" : "text-yellow-600 mt-0.5"
38987
+ className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
38971
38988
  }
38972
38989
  ),
38973
38990
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
@@ -38976,7 +38993,7 @@ function DebuggerBoard({
38976
38993
  ] })
38977
38994
  ] }, line.id))
38978
38995
  ] }) }),
38979
- 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 }) }),
38996
+ 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 }) }),
38980
38997
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
38981
38998
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
38982
38999
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -39699,7 +39716,7 @@ function LinearView({
39699
39716
  className
39700
39717
  }) {
39701
39718
  const currentIdx = trait.states.indexOf(trait.currentState);
39702
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
39719
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
39703
39720
  trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
39704
39721
  /* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
39705
39722
  const isDone = i < currentIdx;
@@ -39721,10 +39738,10 @@ function LinearView({
39721
39738
  {
39722
39739
  display: "inline-flex",
39723
39740
  className: cn(
39724
- "items-center justify-center rounded-full px-3 py-1 border-2 transition-all",
39741
+ "items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
39725
39742
  SIZE_CONFIG2[size || "md"].fontSize,
39726
39743
  isDone && "bg-success/20 border-success text-success",
39727
- isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-md shadow-primary/20",
39744
+ isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
39728
39745
  !isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
39729
39746
  ),
39730
39747
  children: [
@@ -39746,7 +39763,7 @@ function CompactView({
39746
39763
  const { t } = useTranslate();
39747
39764
  const config = SIZE_CONFIG2[size || "md"];
39748
39765
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
39749
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
39766
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
39750
39767
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
39751
39768
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
39752
39769
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -39782,7 +39799,7 @@ function FullView({
39782
39799
  const { t } = useTranslate();
39783
39800
  const config = SIZE_CONFIG2[size || "md"];
39784
39801
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
39785
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
39802
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
39786
39803
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
39787
39804
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
39788
39805
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -39796,9 +39813,9 @@ function FullView({
39796
39813
  {
39797
39814
  display: "flex",
39798
39815
  className: cn(
39799
- "items-center justify-center rounded-md border-2 transition-all px-2",
39816
+ "items-center justify-center rounded-container border-2 transition-all px-2",
39800
39817
  config.nodeSize,
39801
- isCurrent && "bg-primary/20 border-primary shadow-md shadow-primary/20",
39818
+ isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
39802
39819
  !isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
39803
39820
  !isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
39804
39821
  onStateClick && "cursor-pointer"
@@ -40228,7 +40245,7 @@ function EventHandlerBoard({
40228
40245
  backgroundPosition: "center"
40229
40246
  },
40230
40247
  children: [
40231
- 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,
40248
+ 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,
40232
40249
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
40233
40250
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
40234
40251
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -40243,7 +40260,7 @@ function EventHandlerBoard({
40243
40260
  Box,
40244
40261
  {
40245
40262
  className: cn(
40246
- "p-3 rounded-lg border-2 cursor-pointer transition-all hover:scale-105",
40263
+ "p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
40247
40264
  selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
40248
40265
  ),
40249
40266
  onClick: () => setSelectedObjectId(obj.id),
@@ -40265,10 +40282,10 @@ function EventHandlerBoard({
40265
40282
  }
40266
40283
  ),
40267
40284
  eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
40268
- 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") }) }),
40285
+ 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") }) }),
40269
40286
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
40270
- /* @__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) }) }),
40271
- 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: [
40287
+ /* @__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) }) }),
40288
+ 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: [
40272
40289
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
40273
40290
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
40274
40291
  ] }) })
@@ -43441,7 +43458,7 @@ function NegotiatorBoard({
43441
43458
  backgroundPosition: "center"
43442
43459
  },
43443
43460
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
43444
- 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,
43461
+ 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,
43445
43462
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
43446
43463
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
43447
43464
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
@@ -43487,7 +43504,7 @@ function NegotiatorBoard({
43487
43504
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
43488
43505
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
43489
43506
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
43490
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-green-600", children: [
43507
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
43491
43508
  "+",
43492
43509
  round.playerPayoff
43493
43510
  ] }),
@@ -43498,7 +43515,7 @@ function NegotiatorBoard({
43498
43515
  ] }, round.round))
43499
43516
  ] }) }),
43500
43517
  isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
43501
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-green-600" : "text-red-600" }),
43518
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
43502
43519
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
43503
43520
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
43504
43521
  t("negotiator.finalScore"),
@@ -43508,7 +43525,7 @@ function NegotiatorBoard({
43508
43525
  entity.targetScore
43509
43526
  ] })
43510
43527
  ] }) }),
43511
- 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 }) }),
43528
+ 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 }) }),
43512
43529
  isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
43513
43530
  ] })
43514
43531
  }
@@ -46112,7 +46129,7 @@ function TraitSlot({
46112
46129
  display: "flex",
46113
46130
  position: "relative",
46114
46131
  className: cn(
46115
- "items-center justify-center rounded-lg transition-all duration-200",
46132
+ "items-center justify-center rounded-container transition-all duration-200 bg-card/50",
46116
46133
  !locked && "cursor-pointer",
46117
46134
  locked && "cursor-not-allowed opacity-50",
46118
46135
  isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
@@ -46128,7 +46145,7 @@ function TraitSlot({
46128
46145
  style: {
46129
46146
  width: config.box,
46130
46147
  height: config.box,
46131
- backgroundColor: catColor?.bg || "rgba(30,41,59,0.5)",
46148
+ backgroundColor: catColor?.bg || void 0,
46132
46149
  borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
46133
46150
  },
46134
46151
  onClick: handleClick,
@@ -46157,7 +46174,7 @@ function TraitSlot({
46157
46174
  Box,
46158
46175
  {
46159
46176
  position: "absolute",
46160
- 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",
46177
+ 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",
46161
46178
  onClick: handleRemove,
46162
46179
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
46163
46180
  }
@@ -46167,14 +46184,14 @@ function TraitSlot({
46167
46184
  Box,
46168
46185
  {
46169
46186
  position: "absolute",
46170
- className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-full flex items-center justify-center border border-border",
46187
+ className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
46171
46188
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
46172
46189
  }
46173
46190
  ),
46174
46191
  showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
46175
46192
  Box,
46176
46193
  {
46177
- className: "p-3 bg-background border border-border rounded-lg shadow-xl",
46194
+ className: "p-3 bg-background border border-border rounded-container shadow-xl",
46178
46195
  style: {
46179
46196
  ...getTooltipStyle(),
46180
46197
  minWidth: 200,
@@ -46424,12 +46441,12 @@ function SequencerBoard({
46424
46441
  backgroundPosition: "center"
46425
46442
  },
46426
46443
  children: [
46427
- 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,
46444
+ 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,
46428
46445
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
46429
46446
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
46430
46447
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
46431
46448
  ] }),
46432
- 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: [
46449
+ 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: [
46433
46450
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
46434
46451
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
46435
46452
  ] }) }),
@@ -46467,8 +46484,8 @@ function SequencerBoard({
46467
46484
  label: t("sequencer.dragActions")
46468
46485
  }
46469
46486
  ),
46470
- 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) }) }),
46471
- 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") }) }),
46487
+ 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) }) }),
46488
+ 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") }) }),
46472
46489
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
46473
46490
  /* @__PURE__ */ jsxRuntime.jsx(
46474
46491
  Button,
@@ -47144,7 +47161,7 @@ function SimulationCanvas({
47144
47161
  ref: canvasRef,
47145
47162
  width,
47146
47163
  height,
47147
- className: "rounded-md block max-w-full h-auto"
47164
+ className: "rounded-container block max-w-full h-auto"
47148
47165
  }
47149
47166
  ) });
47150
47167
  }
@@ -47352,7 +47369,7 @@ function SimulatorBoard({
47352
47369
  backgroundPosition: "center"
47353
47370
  },
47354
47371
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
47355
- 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,
47372
+ 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,
47356
47373
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
47357
47374
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
47358
47375
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -47403,8 +47420,8 @@ function SimulatorBoard({
47403
47420
  entity.outputUnit
47404
47421
  ] }),
47405
47422
  submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
47406
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-green-600" : "text-red-600" }),
47407
- /* @__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") })
47423
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
47424
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
47408
47425
  ] }),
47409
47426
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
47410
47427
  t("simulator.target"),
@@ -47417,7 +47434,7 @@ function SimulatorBoard({
47417
47434
  ")"
47418
47435
  ] })
47419
47436
  ] }) }),
47420
- 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 }) }),
47437
+ 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 }) }),
47421
47438
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
47422
47439
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
47423
47440
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
@@ -47818,7 +47835,7 @@ function StateNode2({
47818
47835
  position: "absolute",
47819
47836
  display: "flex",
47820
47837
  className: cn(
47821
- "items-center justify-center rounded-full border-3 transition-all cursor-pointer select-none",
47838
+ "items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
47822
47839
  "min-w-[80px] h-[80px] px-3",
47823
47840
  isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
47824
47841
  isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
@@ -48131,7 +48148,7 @@ function StateArchitectBoard({
48131
48148
  backgroundPosition: "center"
48132
48149
  },
48133
48150
  children: [
48134
- 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,
48151
+ 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,
48135
48152
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
48136
48153
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
48137
48154
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -48150,7 +48167,7 @@ function StateArchitectBoard({
48150
48167
  Box,
48151
48168
  {
48152
48169
  position: "relative",
48153
- className: "rounded-lg border border-border bg-background overflow-hidden",
48170
+ className: "rounded-container border border-border bg-background overflow-hidden",
48154
48171
  style: { width: GRAPH_W, height: GRAPH_H },
48155
48172
  children: [
48156
48173
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -48209,7 +48226,7 @@ function StateArchitectBoard({
48209
48226
  children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
48210
48227
  }
48211
48228
  ) }),
48212
- transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
48229
+ transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
48213
48230
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
48214
48231
  transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
48215
48232
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
@@ -48243,7 +48260,7 @@ function StateArchitectBoard({
48243
48260
  variables
48244
48261
  }
48245
48262
  ),
48246
- testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-lg bg-card border border-border", gap: "xs", children: [
48263
+ testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
48247
48264
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
48248
48265
  testResults.map((r2, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
48249
48266
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r2.passed ? "text-success" : "text-error", children: r2.passed ? "\u2714" : "\u2717" }),
@@ -48254,10 +48271,10 @@ function StateArchitectBoard({
48254
48271
  entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
48255
48272
  ] })
48256
48273
  ] }),
48257
- 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") }) }),
48274
+ 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") }) }),
48258
48275
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
48259
- /* @__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]) }) }),
48260
- 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: [
48276
+ /* @__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]) }) }),
48277
+ 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: [
48261
48278
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
48262
48279
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
48263
48280
  ] }) })