@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.
@@ -6770,7 +6770,7 @@ function HealthBar({
6770
6770
  "div",
6771
6771
  {
6772
6772
  className: cn(
6773
- "relative overflow-hidden rounded-full bg-gray-700",
6773
+ "relative overflow-hidden rounded-full bg-muted",
6774
6774
  sizes.bar,
6775
6775
  "w-24",
6776
6776
  className
@@ -6780,7 +6780,7 @@ function HealthBar({
6780
6780
  {
6781
6781
  className: cn(
6782
6782
  "absolute inset-y-0 left-0 rounded-full",
6783
- percentage > 66 ? "bg-green-500" : percentage > 33 ? "bg-yellow-500" : "bg-red-500",
6783
+ percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
6784
6784
  animated && "transition-all duration-300"
6785
6785
  ),
6786
6786
  style: { width: `${percentage}%` }
@@ -6802,7 +6802,7 @@ var init_HealthBar = __esm({
6802
6802
  heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
6803
6803
  "svg",
6804
6804
  {
6805
- className: cn("transition-all duration-200", size, filled ? "text-red-500" : "text-gray-400"),
6805
+ className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
6806
6806
  viewBox: "0 0 24 24",
6807
6807
  fill: filled ? "currentColor" : "none",
6808
6808
  stroke: "currentColor",
@@ -6866,7 +6866,7 @@ function ScoreDisplay({
6866
6866
  ),
6867
6867
  children: [
6868
6868
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
6869
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
6869
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
6870
6870
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
6871
6871
  ]
6872
6872
  }
@@ -6979,8 +6979,8 @@ var init_ControlButton = __esm({
6979
6979
  };
6980
6980
  shapeMap = {
6981
6981
  circle: "rounded-full",
6982
- rounded: "rounded-xl",
6983
- square: "rounded-md"
6982
+ rounded: "rounded-interactive",
6983
+ square: "rounded-interactive"
6984
6984
  };
6985
6985
  variantMap = {
6986
6986
  primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
@@ -7148,12 +7148,12 @@ function TimerDisplay({
7148
7148
  "div",
7149
7149
  {
7150
7150
  className: cn(
7151
- "inline-flex items-center justify-center rounded-lg",
7152
- "bg-[var(--color-card)]/80 border border-gray-600 font-mono font-bold tabular-nums",
7151
+ "inline-flex items-center justify-center rounded-container",
7152
+ "bg-card/80 border border-muted font-mono font-bold tabular-nums",
7153
7153
  sizeMap4[size],
7154
- running && "border-green-500/50",
7155
- isLow && "text-red-400 border-red-500/50 animate-pulse",
7156
- !isLow && "text-[var(--color-foreground)]",
7154
+ running && "border-success/50",
7155
+ isLow && "text-error border-error/50 animate-pulse",
7156
+ !isLow && "text-foreground",
7157
7157
  className
7158
7158
  ),
7159
7159
  children: formatTime(seconds, format)
@@ -7186,17 +7186,17 @@ function ResourceCounter({
7186
7186
  "div",
7187
7187
  {
7188
7188
  className: cn(
7189
- "inline-flex items-center rounded-md",
7190
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
7189
+ "inline-flex items-center rounded-container",
7190
+ "bg-card/80 border border-muted font-medium text-foreground",
7191
7191
  sizes.wrapper,
7192
7192
  className
7193
7193
  ),
7194
7194
  children: [
7195
7195
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
7196
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400", children: label }),
7196
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
7197
7197
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
7198
7198
  value,
7199
- max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500", children: [
7199
+ max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
7200
7200
  "/",
7201
7201
  max
7202
7202
  ] })
@@ -7237,18 +7237,18 @@ function ItemSlot({
7237
7237
  disabled: !isClickable,
7238
7238
  title: label,
7239
7239
  className: cn(
7240
- "relative flex items-center justify-center rounded-lg border-2",
7241
- "bg-[var(--color-card)]/80 transition-all duration-150",
7240
+ "relative flex items-center justify-center rounded-interactive border-2",
7241
+ "bg-card/80 transition-all duration-150",
7242
7242
  sizeMap6[size],
7243
- empty ? "border-gray-700 bg-[var(--color-card)]/50" : rarityBorderMap[rarity],
7243
+ empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
7244
7244
  !empty && rarityGlowMap[rarity],
7245
- selected && "ring-2 ring-white ring-offset-1 ring-offset-gray-900",
7245
+ selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
7246
7246
  isClickable && !empty && "hover:brightness-125 cursor-pointer",
7247
- isClickable && empty && "hover:border-gray-500 cursor-pointer",
7247
+ isClickable && empty && "hover:border-muted cursor-pointer",
7248
7248
  !isClickable && "cursor-default",
7249
7249
  className
7250
7250
  ),
7251
- children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600 text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7251
+ children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7252
7252
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
7253
7253
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
7254
7254
  "span",
@@ -7256,7 +7256,7 @@ function ItemSlot({
7256
7256
  className: cn(
7257
7257
  "absolute -bottom-1 -right-1 flex items-center justify-center",
7258
7258
  "min-w-[18px] h-[18px] rounded-full px-1",
7259
- "bg-[var(--color-surface,#374151)] border border-gray-500 text-xs font-bold text-[var(--color-foreground)]"
7259
+ "bg-surface border border-muted text-xs font-bold text-foreground"
7260
7260
  ),
7261
7261
  children: quantity
7262
7262
  }
@@ -7276,18 +7276,18 @@ var init_ItemSlot = __esm({
7276
7276
  lg: "w-18 h-18 text-3xl"
7277
7277
  };
7278
7278
  rarityBorderMap = {
7279
- common: "border-gray-500",
7280
- uncommon: "border-green-500",
7281
- rare: "border-blue-500",
7282
- epic: "border-purple-500",
7283
- legendary: "border-amber-400"
7279
+ common: "border-muted",
7280
+ uncommon: "border-success",
7281
+ rare: "border-info",
7282
+ epic: "border-accent",
7283
+ legendary: "border-warning"
7284
7284
  };
7285
7285
  rarityGlowMap = {
7286
7286
  common: "",
7287
7287
  uncommon: "",
7288
- rare: "shadow-[0_0_6px_rgba(59,130,246,0.3)]",
7289
- epic: "shadow-[0_0_8px_rgba(168,85,247,0.4)]",
7290
- legendary: "shadow-[0_0_10px_rgba(251,191,36,0.5)]"
7288
+ rare: "shadow-sm",
7289
+ epic: "shadow-lg",
7290
+ legendary: "shadow-lg"
7291
7291
  };
7292
7292
  ItemSlot.displayName = "ItemSlot";
7293
7293
  }
@@ -7305,8 +7305,8 @@ function TurnIndicator({
7305
7305
  "div",
7306
7306
  {
7307
7307
  className: cn(
7308
- "inline-flex items-center rounded-lg",
7309
- "bg-[var(--color-card)]/80 border border-gray-600 font-medium text-[var(--color-foreground)]",
7308
+ "inline-flex items-center rounded-container",
7309
+ "bg-card/80 border border-muted font-medium text-foreground",
7310
7310
  sizes.wrapper,
7311
7311
  className
7312
7312
  ),
@@ -7314,19 +7314,19 @@ function TurnIndicator({
7314
7314
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
7315
7315
  "Turn ",
7316
7316
  currentTurn,
7317
- maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-400", children: [
7317
+ maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
7318
7318
  "/",
7319
7319
  maxTurns
7320
7320
  ] })
7321
7321
  ] }),
7322
7322
  phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7323
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
7324
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-300", children: phase })
7323
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
7324
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
7325
7325
  ] }),
7326
7326
  activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7327
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-600", children: "|" }),
7328
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-green-500/20", sizes.dot) }),
7329
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-400", children: activeTeam })
7327
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
7328
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
7329
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
7330
7330
  ] })
7331
7331
  ]
7332
7332
  }
@@ -7345,10 +7345,10 @@ var init_TurnIndicator = __esm({
7345
7345
  }
7346
7346
  });
7347
7347
  function getComboIntensity(combo) {
7348
- if (combo >= 10) return "text-red-400 animate-pulse";
7349
- if (combo >= 7) return "text-orange-400";
7350
- if (combo >= 4) return "text-yellow-400";
7351
- return "text-[var(--color-foreground)]";
7348
+ if (combo >= 10) return "text-error animate-pulse";
7349
+ if (combo >= 7) return "text-warning";
7350
+ if (combo >= 4) return "text-warning";
7351
+ return "text-foreground";
7352
7352
  }
7353
7353
  function getComboScale(combo) {
7354
7354
  if (combo >= 10) return "scale-110";
@@ -7369,19 +7369,19 @@ function ComboCounter({
7369
7369
  {
7370
7370
  className: cn(
7371
7371
  "inline-flex flex-col items-center justify-center",
7372
- "rounded-xl bg-[var(--color-card)]/80 border border-gray-600 px-3 py-1.5",
7372
+ "rounded-container bg-card/80 border border-muted px-3 py-1.5",
7373
7373
  "transition-transform duration-200",
7374
7374
  getComboScale(combo),
7375
7375
  className
7376
7376
  ),
7377
7377
  children: [
7378
7378
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
7379
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-gray-400", sizes.label), children: "combo" }),
7380
- multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-amber-400 tabular-nums", sizes.multiplier), children: [
7379
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
7380
+ multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
7381
7381
  "x",
7382
7382
  multiplier.toFixed(1)
7383
7383
  ] }),
7384
- streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-500 tabular-nums", sizes.label), children: [
7384
+ streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
7385
7385
  streak,
7386
7386
  " streak"
7387
7387
  ] })
@@ -7417,8 +7417,8 @@ function XPBar({
7417
7417
  "span",
7418
7418
  {
7419
7419
  className: cn(
7420
- "flex-shrink-0 rounded-md font-bold",
7421
- "bg-indigo-600 text-white border border-indigo-400",
7420
+ "flex-shrink-0 rounded-interactive font-bold",
7421
+ "bg-accent text-foreground border border-accent",
7422
7422
  sizes.badge
7423
7423
  ),
7424
7424
  children: [
@@ -7432,7 +7432,7 @@ function XPBar({
7432
7432
  "div",
7433
7433
  {
7434
7434
  className: cn(
7435
- "relative w-full overflow-hidden rounded-full bg-gray-700 border border-gray-600",
7435
+ "relative w-full overflow-hidden rounded-full bg-muted border border-muted",
7436
7436
  sizes.bar
7437
7437
  ),
7438
7438
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -7440,7 +7440,7 @@ function XPBar({
7440
7440
  {
7441
7441
  className: cn(
7442
7442
  "absolute inset-y-0 left-0 rounded-full",
7443
- "bg-gradient-to-r from-indigo-600 to-purple-500",
7443
+ "bg-gradient-to-r from-accent to-info",
7444
7444
  animated && "transition-all duration-500 ease-out"
7445
7445
  ),
7446
7446
  style: { width: `${percentage}%` }
@@ -7448,7 +7448,7 @@ function XPBar({
7448
7448
  )
7449
7449
  }
7450
7450
  ),
7451
- showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-gray-400 tabular-nums", sizes.text), children: [
7451
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
7452
7452
  current,
7453
7453
  " / ",
7454
7454
  max,
@@ -7484,7 +7484,7 @@ function WaypointMarker({
7484
7484
  "div",
7485
7485
  {
7486
7486
  className: cn(
7487
- "absolute rounded-full border-2 border-blue-400 animate-ping opacity-50",
7487
+ "absolute rounded-full border-2 border-info animate-ping opacity-50",
7488
7488
  sizes.ring
7489
7489
  )
7490
7490
  }
@@ -7493,7 +7493,7 @@ function WaypointMarker({
7493
7493
  "div",
7494
7494
  {
7495
7495
  className: cn(
7496
- "absolute rounded-full border-2 border-blue-400",
7496
+ "absolute rounded-full border-2 border-info",
7497
7497
  sizes.ring
7498
7498
  )
7499
7499
  }
@@ -7504,9 +7504,9 @@ function WaypointMarker({
7504
7504
  className: cn(
7505
7505
  "relative flex items-center justify-center rounded-full transition-all duration-200",
7506
7506
  sizes.dot,
7507
- completed && "bg-green-500 text-white",
7508
- active && !completed && "bg-blue-500 text-white",
7509
- !active && !completed && "bg-gray-500"
7507
+ completed && "bg-success text-foreground",
7508
+ active && !completed && "bg-info text-foreground",
7509
+ !active && !completed && "bg-muted"
7510
7510
  ),
7511
7511
  children: completed ? checkIcon : icon
7512
7512
  }
@@ -7518,7 +7518,7 @@ function WaypointMarker({
7518
7518
  className: cn(
7519
7519
  "text-center whitespace-nowrap",
7520
7520
  sizes.label,
7521
- completed ? "text-green-400" : active ? "text-blue-400" : "text-gray-400"
7521
+ completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
7522
7522
  ),
7523
7523
  children: label
7524
7524
  }
@@ -7559,7 +7559,7 @@ function StatusEffect({
7559
7559
  "div",
7560
7560
  {
7561
7561
  className: cn(
7562
- "relative flex items-center justify-center rounded border-2",
7562
+ "relative flex items-center justify-center rounded-interactive border-2",
7563
7563
  sizes.container,
7564
7564
  variantStyles7[variant]
7565
7565
  ),
@@ -7570,7 +7570,7 @@ function StatusEffect({
7570
7570
  "span",
7571
7571
  {
7572
7572
  className: cn(
7573
- "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-white bg-black/60 leading-tight",
7573
+ "absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
7574
7574
  sizes.timer
7575
7575
  ),
7576
7576
  children: formatDuration(duration)
@@ -7583,7 +7583,7 @@ function StatusEffect({
7583
7583
  "span",
7584
7584
  {
7585
7585
  className: cn(
7586
- "absolute flex items-center justify-center rounded-full bg-[var(--color-card)] text-[var(--color-foreground)] font-bold leading-none",
7586
+ "absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
7587
7587
  sizes.badge
7588
7588
  ),
7589
7589
  children: stacks
@@ -7602,9 +7602,9 @@ var init_StatusEffect = __esm({
7602
7602
  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" }
7603
7603
  };
7604
7604
  variantStyles7 = {
7605
- buff: "border-green-500 bg-green-500/20",
7606
- debuff: "border-red-500 bg-red-500/20",
7607
- neutral: "border-gray-500 bg-gray-500/20"
7605
+ buff: "border-success bg-success/20",
7606
+ debuff: "border-error bg-error/20",
7607
+ neutral: "border-muted bg-muted/20"
7608
7608
  };
7609
7609
  StatusEffect.displayName = "StatusEffect";
7610
7610
  }
@@ -7643,10 +7643,10 @@ var init_DamageNumber = __esm({
7643
7643
  lg: "text-2xl"
7644
7644
  };
7645
7645
  typeStyles = {
7646
- damage: "text-red-500 font-bold",
7647
- heal: "text-green-500 font-bold",
7648
- crit: "text-orange-400 font-extrabold",
7649
- miss: "text-gray-400 italic"
7646
+ damage: "text-error font-bold",
7647
+ heal: "text-success font-bold",
7648
+ crit: "text-warning font-extrabold",
7649
+ miss: "text-muted-foreground italic"
7650
7650
  };
7651
7651
  floatKeyframes = `
7652
7652
  @keyframes damageFloat {
@@ -7669,12 +7669,12 @@ function DialogueBubble({
7669
7669
  "div",
7670
7670
  {
7671
7671
  className: cn(
7672
- "flex items-start gap-3 rounded-lg bg-black/80 backdrop-blur-sm px-4 py-3 border border-white/10",
7672
+ "flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
7673
7673
  position === "top" ? "rounded-bl-none" : "rounded-tl-none",
7674
7674
  className
7675
7675
  ),
7676
7676
  children: [
7677
- 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(
7677
+ 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(
7678
7678
  "img",
7679
7679
  {
7680
7680
  src: portrait,
@@ -7683,8 +7683,8 @@ function DialogueBubble({
7683
7683
  }
7684
7684
  ) }),
7685
7685
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
7686
- speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-yellow-400", children: speaker }),
7687
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--color-foreground)] leading-relaxed", children: text })
7686
+ speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
7687
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
7688
7688
  ] })
7689
7689
  ]
7690
7690
  }
@@ -7711,7 +7711,7 @@ function ChoiceButton({
7711
7711
  disabled,
7712
7712
  onClick,
7713
7713
  className: cn(
7714
- "w-full text-left px-4 py-2.5 rounded-md border transition-all duration-150",
7714
+ "w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
7715
7715
  "flex items-center gap-2",
7716
7716
  selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
7717
7717
  disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
@@ -7764,7 +7764,7 @@ function ActionButton({
7764
7764
  disabled: isDisabled,
7765
7765
  onClick,
7766
7766
  className: cn(
7767
- "relative inline-flex items-center gap-1.5 rounded-md border font-medium overflow-hidden transition-colors duration-150",
7767
+ "relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
7768
7768
  sizes.button,
7769
7769
  variantStyles8[variant],
7770
7770
  isDisabled && "opacity-60 cursor-not-allowed",
@@ -7807,9 +7807,9 @@ var init_ActionButton = __esm({
7807
7807
  init_cn();
7808
7808
  init_Icon();
7809
7809
  sizeMap13 = {
7810
- sm: { button: "px-3 py-1.5 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
7811
- md: { button: "px-4 py-2 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
7812
- lg: { button: "px-5 py-2.5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
7810
+ sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
7811
+ md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
7812
+ lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
7813
7813
  };
7814
7814
  variantStyles8 = {
7815
7815
  primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
@@ -7889,7 +7889,7 @@ function MiniMap({
7889
7889
  "div",
7890
7890
  {
7891
7891
  className: cn(
7892
- "relative inline-block border border-white/20 rounded",
7892
+ "relative inline-block border border-border/20 rounded-container",
7893
7893
  className
7894
7894
  ),
7895
7895
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -10961,7 +10961,7 @@ function ActionTile({
10961
10961
  {
10962
10962
  display: "flex",
10963
10963
  className: cn(
10964
- "flex-col items-center gap-1 rounded-lg border-2 transition-all select-none",
10964
+ "flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
10965
10965
  config.px,
10966
10966
  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",
10967
10967
  className
@@ -12261,12 +12261,12 @@ function IsometricCanvas({
12261
12261
  return /* @__PURE__ */ jsxRuntime.jsx(
12262
12262
  Box,
12263
12263
  {
12264
- className: cn("relative w-full overflow-hidden rounded-lg", className),
12264
+ className: cn("relative w-full overflow-hidden rounded-container", className),
12265
12265
  style: { height: viewportSize.height },
12266
12266
  "data-testid": "game-canvas-empty",
12267
- 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: [
12267
+ 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: [
12268
12268
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
12269
- /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-slate-400", children: t("canvas.emptyMessage") || "No map data loaded" })
12269
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
12270
12270
  ] }) })
12271
12271
  }
12272
12272
  );
@@ -12664,19 +12664,19 @@ function BattleBoard({
12664
12664
  }
12665
12665
  )
12666
12666
  ] }),
12667
- 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: [
12667
+ 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: [
12668
12668
  /* @__PURE__ */ jsxRuntime.jsx(
12669
12669
  Typography,
12670
12670
  {
12671
12671
  variant: "h2",
12672
12672
  className: cn(
12673
12673
  "text-4xl font-black tracking-widest uppercase",
12674
- gameResult === "victory" ? "text-yellow-400" : "text-red-500"
12674
+ gameResult === "victory" ? "text-warning" : "text-error"
12675
12675
  ),
12676
12676
  children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
12677
12677
  }
12678
12678
  ),
12679
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-gray-300", children: [
12679
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
12680
12680
  t("battle.turnsPlayed"),
12681
12681
  ": ",
12682
12682
  currentTurn
@@ -17553,7 +17553,7 @@ function BuilderBoard({
17553
17553
  backgroundPosition: "center"
17554
17554
  },
17555
17555
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
17556
- 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,
17556
+ 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,
17557
17557
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
17558
17558
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
17559
17559
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -17591,7 +17591,7 @@ function BuilderBoard({
17591
17591
  {
17592
17592
  gap: "sm",
17593
17593
  align: "center",
17594
- className: `p-3 border-2 rounded ${result ? result.correct ? "border-green-500" : "border-red-500" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
17594
+ className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
17595
17595
  onClick: () => handlePlaceComponent(slot.id),
17596
17596
  children: [
17597
17597
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
@@ -17606,7 +17606,7 @@ function BuilderBoard({
17606
17606
  ] }) : null,
17607
17607
  placedComp.label
17608
17608
  ] }),
17609
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-green-600" : "text-red-600" })
17609
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
17610
17610
  ] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
17611
17611
  ]
17612
17612
  },
@@ -17615,10 +17615,10 @@ function BuilderBoard({
17615
17615
  }) })
17616
17616
  ] }) }),
17617
17617
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
17618
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
17618
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
17619
17619
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
17620
17620
  ] }) }),
17621
- 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 }) }),
17621
+ 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 }) }),
17622
17622
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
17623
17623
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
17624
17624
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
@@ -19240,7 +19240,7 @@ function CanvasEffectEngine({
19240
19240
  flash && /* @__PURE__ */ jsxRuntime.jsx(
19241
19241
  Box,
19242
19242
  {
19243
- className: "absolute inset-0 z-20 pointer-events-none rounded-lg",
19243
+ className: "absolute inset-0 z-20 pointer-events-none rounded-container",
19244
19244
  style: { backgroundColor: flash.color, opacity: flash.alpha }
19245
19245
  }
19246
19246
  ),
@@ -19308,7 +19308,7 @@ function EmojiEffect({
19308
19308
  /* @__PURE__ */ jsxRuntime.jsx(
19309
19309
  Box,
19310
19310
  {
19311
- className: "absolute rounded-full animate-ping",
19311
+ className: "absolute rounded-pill animate-ping",
19312
19312
  style: {
19313
19313
  width: 48 * intensity,
19314
19314
  height: 48 * intensity,
@@ -21125,7 +21125,7 @@ function ClassifierBoard({
21125
21125
  backgroundPosition: "center"
21126
21126
  },
21127
21127
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
21128
- 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,
21128
+ 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,
21129
21129
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
21130
21130
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
21131
21131
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -21140,7 +21140,7 @@ function ClassifierBoard({
21140
21140
  /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
21141
21141
  const catItems = items.filter((item) => assignments[item.id] === cat.id);
21142
21142
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
21143
- 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" }) }),
21143
+ 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" }) }),
21144
21144
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
21145
21145
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
21146
21146
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
@@ -21151,12 +21151,12 @@ function ClassifierBoard({
21151
21151
  Badge,
21152
21152
  {
21153
21153
  size: "sm",
21154
- 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" : ""}`,
21154
+ className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
21155
21155
  onClick: () => handleUnassign(item.id),
21156
21156
  children: [
21157
21157
  item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
21158
21158
  item.label,
21159
- result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-green-600" : "text-red-600" })
21159
+ result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
21160
21160
  ]
21161
21161
  },
21162
21162
  item.id
@@ -21179,11 +21179,11 @@ function ClassifierBoard({
21179
21179
  ] }) }, cat.id);
21180
21180
  }) }),
21181
21181
  submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
21182
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-green-600" : "text-red-600" }),
21182
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
21183
21183
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
21184
21184
  !allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
21185
21185
  ] }) }),
21186
- 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 }) }),
21186
+ 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 }) }),
21187
21187
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
21188
21188
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
21189
21189
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -22231,7 +22231,7 @@ function CraftingRecipe({
22231
22231
  Box,
22232
22232
  {
22233
22233
  className: cn(
22234
- "flex flex-wrap items-center gap-3 rounded-lg bg-gray-800/50 border border-gray-700/50 p-3",
22234
+ "flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
22235
22235
  className
22236
22236
  ),
22237
22237
  children: [
@@ -22248,10 +22248,10 @@ function CraftingRecipe({
22248
22248
  className: cn(!hasSufficient && "opacity-50")
22249
22249
  }
22250
22250
  ) }),
22251
- index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-gray-500" })
22251
+ index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
22252
22252
  ] }, index);
22253
22253
  }) }),
22254
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-gray-400" }),
22254
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
22255
22255
  /* @__PURE__ */ jsxRuntime.jsx(
22256
22256
  ItemSlot,
22257
22257
  {
@@ -22339,7 +22339,7 @@ function DPad({
22339
22339
  createButton("up"),
22340
22340
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
22341
22341
  createButton("left"),
22342
- /* @__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" }) }),
22342
+ /* @__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" }) }),
22343
22343
  createButton("right"),
22344
22344
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
22345
22345
  createButton("down"),
@@ -26524,7 +26524,7 @@ function StatBadge({
26524
26524
  "div",
26525
26525
  {
26526
26526
  className: cn(
26527
- "inline-flex items-center gap-2 rounded-lg border backdrop-blur-sm",
26527
+ "inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
26528
26528
  sizeMap17[size] ?? sizeMap17.md,
26529
26529
  variantMap2[variant] ?? variantMap2.default,
26530
26530
  className
@@ -26670,10 +26670,10 @@ function QuestTracker({
26670
26670
  Box,
26671
26671
  {
26672
26672
  className: cn(
26673
- "flex items-start gap-3 rounded-lg px-3 py-2 transition-colors",
26674
- isActive && !isCompleted && "bg-blue-900/20 border border-blue-800/50",
26675
- isCompleted && "bg-green-900/10 border border-green-800/30 opacity-70",
26676
- !isActive && !isCompleted && "bg-gray-800/30 border border-gray-700/30"
26673
+ "flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
26674
+ isActive && !isCompleted && "bg-info/20 border border-info/50",
26675
+ isCompleted && "bg-success/10 border border-success/30 opacity-70",
26676
+ !isActive && !isCompleted && "bg-muted/30 border border-border/30"
26677
26677
  ),
26678
26678
  children: [
26679
26679
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -26691,9 +26691,9 @@ function QuestTracker({
26691
26691
  variant: "body2",
26692
26692
  className: cn(
26693
26693
  "font-medium truncate",
26694
- isCompleted && "line-through text-gray-500",
26695
- isActive && !isCompleted && "text-blue-300",
26696
- !isActive && !isCompleted && "text-gray-300"
26694
+ isCompleted && "line-through text-muted-foreground",
26695
+ isActive && !isCompleted && "text-info",
26696
+ !isActive && !isCompleted && "text-muted-foreground"
26697
26697
  ),
26698
26698
  children: quest.title
26699
26699
  }
@@ -26711,7 +26711,7 @@ function QuestTracker({
26711
26711
  Typography,
26712
26712
  {
26713
26713
  variant: "caption",
26714
- className: "text-gray-500 mt-1",
26714
+ className: "text-muted-foreground mt-1",
26715
26715
  children: [
26716
26716
  quest.progress,
26717
26717
  " / ",
@@ -26768,14 +26768,14 @@ function PowerupSlots({
26768
26768
  {
26769
26769
  className: cn(
26770
26770
  "absolute -bottom-1 left-1/2 -translate-x-1/2",
26771
- "rounded px-1 py-px",
26772
- "bg-black/80 border border-gray-600"
26771
+ "rounded-interactive px-1 py-px",
26772
+ "bg-background/80 border border-border"
26773
26773
  ),
26774
26774
  children: /* @__PURE__ */ jsxRuntime.jsx(
26775
26775
  Typography,
26776
26776
  {
26777
26777
  variant: "caption",
26778
- className: "text-[9px] font-mono font-bold text-yellow-300 whitespace-nowrap",
26778
+ className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
26779
26779
  children: formatTime2(powerup.remainingTime)
26780
26780
  }
26781
26781
  )
@@ -26808,6 +26808,8 @@ function GameCanvas2D({
26808
26808
  height = 600,
26809
26809
  onDraw,
26810
26810
  onTick,
26811
+ tickEvent,
26812
+ drawEvent,
26811
26813
  fps = 60,
26812
26814
  className
26813
26815
  }) {
@@ -26815,10 +26817,17 @@ function GameCanvas2D({
26815
26817
  const rafRef = React86__namespace.useRef(0);
26816
26818
  const frameRef = React86__namespace.useRef(0);
26817
26819
  const lastTimeRef = React86__namespace.useRef(0);
26820
+ const emit = useEmitEvent();
26818
26821
  const onDrawRef = React86__namespace.useRef(onDraw);
26819
26822
  onDrawRef.current = onDraw;
26820
26823
  const onTickRef = React86__namespace.useRef(onTick);
26821
26824
  onTickRef.current = onTick;
26825
+ const tickEventRef = React86__namespace.useRef(tickEvent);
26826
+ tickEventRef.current = tickEvent;
26827
+ const drawEventRef = React86__namespace.useRef(drawEvent);
26828
+ drawEventRef.current = drawEvent;
26829
+ const emitRef = React86__namespace.useRef(emit);
26830
+ emitRef.current = emit;
26822
26831
  React86__namespace.useEffect(() => {
26823
26832
  const canvas = canvasRef.current;
26824
26833
  if (!canvas) return;
@@ -26835,8 +26844,15 @@ function GameCanvas2D({
26835
26844
  if (elapsed >= interval) {
26836
26845
  const dt = elapsed / 1e3;
26837
26846
  lastTimeRef.current = timestamp - elapsed % interval;
26847
+ const frame = frameRef.current;
26838
26848
  onTickRef.current?.(dt);
26839
- onDrawRef.current?.(ctx, frameRef.current);
26849
+ if (tickEventRef.current) {
26850
+ emitRef.current(tickEventRef.current, { dt, frame });
26851
+ }
26852
+ onDrawRef.current?.(ctx, frame);
26853
+ if (drawEventRef.current) {
26854
+ emitRef.current(drawEventRef.current, { frame });
26855
+ }
26840
26856
  frameRef.current += 1;
26841
26857
  }
26842
26858
  rafRef.current = requestAnimationFrame(loop);
@@ -26862,6 +26878,7 @@ var init_GameCanvas2D = __esm({
26862
26878
  "use client";
26863
26879
  init_cn();
26864
26880
  init_Box();
26881
+ init_useEventBus();
26865
26882
  GameCanvas2D.displayName = "GameCanvas2D";
26866
26883
  }
26867
26884
  });
@@ -26880,7 +26897,7 @@ function HealthPanel({
26880
26897
  Box,
26881
26898
  {
26882
26899
  className: cn(
26883
- "rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm",
26900
+ "rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
26884
26901
  sizes.padding,
26885
26902
  className
26886
26903
  ),
@@ -26891,7 +26908,7 @@ function HealthPanel({
26891
26908
  {
26892
26909
  variant: "caption",
26893
26910
  weight: "bold",
26894
- className: "text-gray-300 uppercase tracking-wider",
26911
+ className: "text-muted-foreground uppercase tracking-wider",
26895
26912
  children: label
26896
26913
  }
26897
26914
  ),
@@ -26912,7 +26929,7 @@ function HealthPanel({
26912
26929
  as: "span",
26913
26930
  variant: "caption",
26914
26931
  weight: "bold",
26915
- className: "text-blue-400 ml-1",
26932
+ className: "text-info ml-1",
26916
26933
  children: [
26917
26934
  "+",
26918
26935
  shield
@@ -26937,14 +26954,14 @@ function HealthPanel({
26937
26954
  Box,
26938
26955
  {
26939
26956
  className: cn(
26940
- "relative overflow-hidden rounded-full bg-gray-700",
26957
+ "relative overflow-hidden rounded-container bg-muted",
26941
26958
  size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
26942
26959
  "w-full"
26943
26960
  ),
26944
26961
  children: /* @__PURE__ */ jsxRuntime.jsx(
26945
26962
  Box,
26946
26963
  {
26947
- className: "absolute inset-y-0 left-0 rounded-full bg-blue-500 transition-all duration-300",
26964
+ className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
26948
26965
  style: { width: `${Math.min(100, shield / max * 100)}%` }
26949
26966
  }
26950
26967
  )
@@ -27003,7 +27020,7 @@ function ScoreBoard({
27003
27020
  Card,
27004
27021
  {
27005
27022
  className: cn(
27006
- "bg-[var(--color-card)]/90 border-gray-700 backdrop-blur-sm",
27023
+ "bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
27007
27024
  className
27008
27025
  ),
27009
27026
  children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
@@ -27120,7 +27137,7 @@ function TurnPanel({
27120
27137
  Box,
27121
27138
  {
27122
27139
  className: cn(
27123
- "flex items-center gap-3 rounded-lg bg-[var(--color-card)]/90 border border-gray-700 backdrop-blur-sm px-3 py-2",
27140
+ "flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
27124
27141
  className
27125
27142
  ),
27126
27143
  children: [
@@ -27172,7 +27189,7 @@ function EnemyPlate({
27172
27189
  Box,
27173
27190
  {
27174
27191
  className: cn(
27175
- "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",
27192
+ "inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
27176
27193
  "min-w-[120px]",
27177
27194
  className
27178
27195
  ),
@@ -27266,7 +27283,7 @@ function UnitCommandBar({
27266
27283
  Box,
27267
27284
  {
27268
27285
  className: cn(
27269
- "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",
27286
+ "flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
27270
27287
  className
27271
27288
  ),
27272
27289
  children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
@@ -27351,8 +27368,8 @@ function GameHud({
27351
27368
  className: cn(
27352
27369
  "relative z-10",
27353
27370
  positionMap[position],
27354
- transparent && "bg-gradient-to-b from-black/50 to-transparent",
27355
- position === "bottom" && "bg-gradient-to-t from-black/50 to-transparent",
27371
+ transparent && "bg-gradient-to-b from-background/50 to-transparent",
27372
+ position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
27356
27373
  className
27357
27374
  ),
27358
27375
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
@@ -27510,8 +27527,8 @@ function DialogueBox({
27510
27527
  tabIndex: 0,
27511
27528
  role: "dialog",
27512
27529
  "aria-label": "Dialogue",
27513
- 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: [
27514
- dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-gray-700", children: /* @__PURE__ */ jsxRuntime.jsx(
27530
+ 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: [
27531
+ dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
27515
27532
  "img",
27516
27533
  {
27517
27534
  src: dialogue.portrait,
@@ -27521,7 +27538,7 @@ function DialogueBox({
27521
27538
  }
27522
27539
  ) }),
27523
27540
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
27524
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-yellow-400 font-bold mb-2", children: dialogue.speaker }),
27541
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
27525
27542
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
27526
27543
  displayedText,
27527
27544
  isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
@@ -27531,9 +27548,9 @@ function DialogueBox({
27531
27548
  {
27532
27549
  type: "button",
27533
27550
  className: cn(
27534
- "block w-full text-left px-4 py-2 rounded transition-colors",
27535
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-yellow-400",
27536
- selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-yellow-400" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
27551
+ "block w-full text-left px-4 py-2 rounded-interactive transition-colors",
27552
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
27553
+ selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
27537
27554
  ),
27538
27555
  onClick: (e) => {
27539
27556
  e.stopPropagation();
@@ -27541,7 +27558,7 @@ function DialogueBox({
27541
27558
  onChoice?.(choice);
27542
27559
  },
27543
27560
  children: [
27544
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-500 mr-2", children: [
27561
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
27545
27562
  index + 1,
27546
27563
  "."
27547
27564
  ] }),
@@ -27550,7 +27567,7 @@ function DialogueBox({
27550
27567
  },
27551
27568
  index
27552
27569
  )) }),
27553
- !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..." })
27570
+ !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..." })
27554
27571
  ] })
27555
27572
  ] }) })
27556
27573
  }
@@ -27653,7 +27670,7 @@ function InventoryPanel({
27653
27670
  /* @__PURE__ */ jsxRuntime.jsx(
27654
27671
  "div",
27655
27672
  {
27656
- className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-lg border border-gray-700",
27673
+ className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
27657
27674
  style: {
27658
27675
  gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
27659
27676
  gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
@@ -27665,8 +27682,8 @@ function InventoryPanel({
27665
27682
  className: cn(
27666
27683
  "relative flex items-center justify-center",
27667
27684
  "bg-[var(--color-card)] border rounded transition-colors",
27668
- "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-blue-500",
27669
- selectedSlot === index ? "border-yellow-400 bg-[var(--color-surface,#374151)]" : "border-gray-600"
27685
+ "hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
27686
+ selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
27670
27687
  ),
27671
27688
  style: { width: slotSize, height: slotSize },
27672
27689
  onClick: () => handleSlotClick(index),
@@ -27685,8 +27702,8 @@ function InventoryPanel({
27685
27702
  className: "w-8 h-8 object-contain",
27686
27703
  style: { imageRendering: "pixelated" }
27687
27704
  }
27688
- ) : /* @__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() }),
27689
- 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 })
27705
+ ) : /* @__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() }),
27706
+ 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 })
27690
27707
  ] })
27691
27708
  },
27692
27709
  index
@@ -27696,7 +27713,7 @@ function InventoryPanel({
27696
27713
  showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
27697
27714
  "div",
27698
27715
  {
27699
- className: "fixed z-50 bg-[var(--color-card)] border border-gray-600 rounded-lg p-2 shadow-lg pointer-events-none",
27716
+ className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
27700
27717
  style: {
27701
27718
  left: tooltipPosition.x,
27702
27719
  top: tooltipPosition.y,
@@ -27704,8 +27721,8 @@ function InventoryPanel({
27704
27721
  },
27705
27722
  children: [
27706
27723
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
27707
- hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-gray-400 mt-1", children: hoveredItem.description }),
27708
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-gray-500 mt-1", children: [
27724
+ hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
27725
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
27709
27726
  "Quantity: ",
27710
27727
  hoveredItem.quantity
27711
27728
  ] })
@@ -27783,7 +27800,7 @@ function GameMenu({
27783
27800
  children: title
27784
27801
  }
27785
27802
  ),
27786
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-gray-400 tracking-widest uppercase", children: subtitle })
27803
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
27787
27804
  ] }),
27788
27805
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
27789
27806
  "button",
@@ -27791,10 +27808,10 @@ function GameMenu({
27791
27808
  onClick: () => handleOptionClick(option),
27792
27809
  disabled: option.disabled,
27793
27810
  className: cn(
27794
- "w-full py-4 px-8 rounded-xl border-2 font-bold text-lg",
27811
+ "w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
27795
27812
  "transition-all duration-200 transform",
27796
27813
  "hover:scale-105 active:scale-95",
27797
- "focus:outline-none focus:ring-4 focus:ring-white/25",
27814
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
27798
27815
  variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
27799
27816
  option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
27800
27817
  ),
@@ -27806,8 +27823,8 @@ function GameMenu({
27806
27823
  index
27807
27824
  )) }),
27808
27825
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
27809
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-blue-500/10 rounded-full blur-3xl" }),
27810
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-purple-500/10 rounded-full blur-3xl" })
27826
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
27827
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
27811
27828
  ] })
27812
27829
  ]
27813
27830
  }
@@ -27820,9 +27837,9 @@ var init_GameMenu = __esm({
27820
27837
  init_cn();
27821
27838
  init_useEventBus();
27822
27839
  variantMap3 = {
27823
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400 shadow-lg shadow-blue-500/25",
27824
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
27825
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
27840
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
27841
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27842
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27826
27843
  };
27827
27844
  GameMenu.displayName = "GameMenu";
27828
27845
  }
@@ -27890,13 +27907,13 @@ function GameOverScreen({
27890
27907
  children: title
27891
27908
  }
27892
27909
  ),
27893
- message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-gray-300 mb-8 text-center max-w-md", children: message }),
27894
- 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}" }) }),
27910
+ message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
27911
+ 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}" }) }),
27895
27912
  stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
27896
27913
  "div",
27897
27914
  {
27898
27915
  className: cn(
27899
- "mb-8 p-6 rounded-xl border-2 bg-black/30",
27916
+ "mb-8 p-6 rounded-container border-2 bg-background/30",
27900
27917
  colors.accent
27901
27918
  ),
27902
27919
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
@@ -27905,7 +27922,7 @@ function GameOverScreen({
27905
27922
  displayValue = formatTime3(displayValue);
27906
27923
  }
27907
27924
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
27908
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-gray-400 text-sm mb-1", children: stat.label }),
27925
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
27909
27926
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
27910
27927
  stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
27911
27928
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
@@ -27919,10 +27936,10 @@ function GameOverScreen({
27919
27936
  {
27920
27937
  onClick: () => handleActionClick(action),
27921
27938
  className: cn(
27922
- "px-8 py-4 rounded-xl border-2 font-bold text-lg",
27939
+ "px-8 py-4 rounded-container border-2 font-bold text-lg",
27923
27940
  "transition-all duration-200",
27924
27941
  "hover:scale-105 active:scale-95",
27925
- "focus:outline-none focus:ring-4 focus:ring-white/25",
27942
+ "focus:outline-none focus:ring-4 focus:ring-foreground/25",
27926
27943
  buttonVariants[action.variant ?? "secondary"]
27927
27944
  ),
27928
27945
  children: action.label
@@ -27941,25 +27958,25 @@ var init_GameOverScreen = __esm({
27941
27958
  init_useEventBus();
27942
27959
  variantColors = {
27943
27960
  victory: {
27944
- bg: "from-green-900/90 to-emerald-950/90",
27945
- title: "text-green-400",
27946
- accent: "border-green-500"
27961
+ bg: "from-success/90 to-success/90",
27962
+ title: "text-success",
27963
+ accent: "border-success"
27947
27964
  },
27948
27965
  defeat: {
27949
- bg: "from-red-900/90 to-gray-950/90",
27950
- title: "text-red-400",
27951
- accent: "border-red-500"
27966
+ bg: "from-error/90 to-background/90",
27967
+ title: "text-error",
27968
+ accent: "border-error"
27952
27969
  },
27953
27970
  neutral: {
27954
- bg: "from-gray-900/90 to-gray-950/90",
27955
- title: "text-white",
27956
- accent: "border-gray-500"
27971
+ bg: "from-muted/90 to-background/90",
27972
+ title: "text-foreground",
27973
+ accent: "border-muted"
27957
27974
  }
27958
27975
  };
27959
27976
  buttonVariants = {
27960
- primary: "bg-[var(--color-primary)] hover:bg-blue-500 text-[var(--color-primary-foreground)] border-blue-400",
27961
- secondary: "bg-[var(--color-surface,#374151)] hover:bg-gray-600 text-[var(--color-foreground)] border-gray-500",
27962
- ghost: "bg-transparent hover:bg-white/10 text-[var(--color-foreground)] border-white/20"
27977
+ primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
27978
+ secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27979
+ ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27963
27980
  };
27964
27981
  GameOverScreen.displayName = "GameOverScreen";
27965
27982
  }
@@ -28193,7 +28210,7 @@ function PlatformerCanvas({
28193
28210
  {
28194
28211
  ref: canvasRef,
28195
28212
  style: { width: canvasWidth, height: canvasHeight },
28196
- className: cn("block rounded-lg border border-white/10", className),
28213
+ className: cn("block rounded-container border border-border/10", className),
28197
28214
  "data-testid": "platformer-canvas",
28198
28215
  tabIndex: 0
28199
28216
  }
@@ -35736,7 +35753,7 @@ function DebuggerBoard({
35736
35753
  backgroundPosition: "center"
35737
35754
  },
35738
35755
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
35739
- 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,
35756
+ 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,
35740
35757
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
35741
35758
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
35742
35759
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
@@ -35749,11 +35766,11 @@ function DebuggerBoard({
35749
35766
  const isFlagged = flaggedLines.has(line.id);
35750
35767
  let lineStyle = "";
35751
35768
  if (submitted) {
35752
- if (line.isBug && isFlagged) lineStyle = "bg-green-50 dark:bg-green-950";
35753
- else if (line.isBug && !isFlagged) lineStyle = "bg-yellow-50 dark:bg-yellow-950";
35754
- else if (!line.isBug && isFlagged) lineStyle = "bg-red-50 dark:bg-red-950";
35769
+ if (line.isBug && isFlagged) lineStyle = "bg-success/10";
35770
+ else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
35771
+ else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
35755
35772
  } else if (isFlagged) {
35756
- lineStyle = "bg-red-50 dark:bg-red-950";
35773
+ lineStyle = "bg-error/10";
35757
35774
  }
35758
35775
  return /* @__PURE__ */ jsxRuntime.jsxs(
35759
35776
  HStack,
@@ -35766,8 +35783,8 @@ function DebuggerBoard({
35766
35783
  /* @__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 }) }),
35767
35784
  /* @__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 }) }),
35768
35785
  /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
35769
- isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-red-600" }),
35770
- submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-yellow-600" })
35786
+ isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
35787
+ submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
35771
35788
  ] })
35772
35789
  ]
35773
35790
  },
@@ -35782,7 +35799,7 @@ function DebuggerBoard({
35782
35799
  {
35783
35800
  icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
35784
35801
  size: "xs",
35785
- className: flaggedLines.has(line.id) ? "text-green-600 mt-0.5" : "text-yellow-600 mt-0.5"
35802
+ className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
35786
35803
  }
35787
35804
  ),
35788
35805
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
@@ -35791,7 +35808,7 @@ function DebuggerBoard({
35791
35808
  ] })
35792
35809
  ] }, line.id))
35793
35810
  ] }) }),
35794
- 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 }) }),
35811
+ 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 }) }),
35795
35812
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
35796
35813
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
35797
35814
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
@@ -36514,7 +36531,7 @@ function LinearView({
36514
36531
  className
36515
36532
  }) {
36516
36533
  const currentIdx = trait.states.indexOf(trait.currentState);
36517
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36534
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36518
36535
  trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
36519
36536
  /* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
36520
36537
  const isDone = i < currentIdx;
@@ -36536,10 +36553,10 @@ function LinearView({
36536
36553
  {
36537
36554
  display: "inline-flex",
36538
36555
  className: cn(
36539
- "items-center justify-center rounded-full px-3 py-1 border-2 transition-all",
36556
+ "items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
36540
36557
  SIZE_CONFIG2[size || "md"].fontSize,
36541
36558
  isDone && "bg-success/20 border-success text-success",
36542
- isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-md shadow-primary/20",
36559
+ isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
36543
36560
  !isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
36544
36561
  ),
36545
36562
  children: [
@@ -36561,7 +36578,7 @@ function CompactView({
36561
36578
  const { t } = useTranslate();
36562
36579
  const config = SIZE_CONFIG2[size || "md"];
36563
36580
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
36564
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36581
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36565
36582
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
36566
36583
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
36567
36584
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -36597,7 +36614,7 @@ function FullView({
36597
36614
  const { t } = useTranslate();
36598
36615
  const config = SIZE_CONFIG2[size || "md"];
36599
36616
  const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
36600
- return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
36617
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
36601
36618
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
36602
36619
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
36603
36620
  /* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
@@ -36611,9 +36628,9 @@ function FullView({
36611
36628
  {
36612
36629
  display: "flex",
36613
36630
  className: cn(
36614
- "items-center justify-center rounded-md border-2 transition-all px-2",
36631
+ "items-center justify-center rounded-container border-2 transition-all px-2",
36615
36632
  config.nodeSize,
36616
- isCurrent && "bg-primary/20 border-primary shadow-md shadow-primary/20",
36633
+ isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
36617
36634
  !isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
36618
36635
  !isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
36619
36636
  onStateClick && "cursor-pointer"
@@ -37043,7 +37060,7 @@ function EventHandlerBoard({
37043
37060
  backgroundPosition: "center"
37044
37061
  },
37045
37062
  children: [
37046
- 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,
37063
+ 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,
37047
37064
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
37048
37065
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
37049
37066
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -37058,7 +37075,7 @@ function EventHandlerBoard({
37058
37075
  Box,
37059
37076
  {
37060
37077
  className: cn(
37061
- "p-3 rounded-lg border-2 cursor-pointer transition-all hover:scale-105",
37078
+ "p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
37062
37079
  selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
37063
37080
  ),
37064
37081
  onClick: () => setSelectedObjectId(obj.id),
@@ -37080,10 +37097,10 @@ function EventHandlerBoard({
37080
37097
  }
37081
37098
  ),
37082
37099
  eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
37083
- 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") }) }),
37100
+ 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") }) }),
37084
37101
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
37085
- /* @__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) }) }),
37086
- 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: [
37102
+ /* @__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) }) }),
37103
+ 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: [
37087
37104
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
37088
37105
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
37089
37106
  ] }) })
@@ -40256,7 +40273,7 @@ function NegotiatorBoard({
40256
40273
  backgroundPosition: "center"
40257
40274
  },
40258
40275
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
40259
- 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,
40276
+ 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,
40260
40277
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
40261
40278
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
40262
40279
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
@@ -40302,7 +40319,7 @@ function NegotiatorBoard({
40302
40319
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
40303
40320
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
40304
40321
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
40305
- /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-green-600", children: [
40322
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
40306
40323
  "+",
40307
40324
  round.playerPayoff
40308
40325
  ] }),
@@ -40313,7 +40330,7 @@ function NegotiatorBoard({
40313
40330
  ] }, round.round))
40314
40331
  ] }) }),
40315
40332
  isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
40316
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-green-600" : "text-red-600" }),
40333
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
40317
40334
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
40318
40335
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
40319
40336
  t("negotiator.finalScore"),
@@ -40323,7 +40340,7 @@ function NegotiatorBoard({
40323
40340
  entity.targetScore
40324
40341
  ] })
40325
40342
  ] }) }),
40326
- 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 }) }),
40343
+ 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 }) }),
40327
40344
  isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
40328
40345
  ] })
40329
40346
  }
@@ -42908,7 +42925,7 @@ function TraitSlot({
42908
42925
  display: "flex",
42909
42926
  position: "relative",
42910
42927
  className: cn(
42911
- "items-center justify-center rounded-lg transition-all duration-200",
42928
+ "items-center justify-center rounded-container transition-all duration-200 bg-card/50",
42912
42929
  !locked && "cursor-pointer",
42913
42930
  locked && "cursor-not-allowed opacity-50",
42914
42931
  isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
@@ -42924,7 +42941,7 @@ function TraitSlot({
42924
42941
  style: {
42925
42942
  width: config.box,
42926
42943
  height: config.box,
42927
- backgroundColor: catColor?.bg || "rgba(30,41,59,0.5)",
42944
+ backgroundColor: catColor?.bg || void 0,
42928
42945
  borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
42929
42946
  },
42930
42947
  onClick: handleClick,
@@ -42953,7 +42970,7 @@ function TraitSlot({
42953
42970
  Box,
42954
42971
  {
42955
42972
  position: "absolute",
42956
- 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",
42973
+ 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",
42957
42974
  onClick: handleRemove,
42958
42975
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
42959
42976
  }
@@ -42963,14 +42980,14 @@ function TraitSlot({
42963
42980
  Box,
42964
42981
  {
42965
42982
  position: "absolute",
42966
- className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-full flex items-center justify-center border border-border",
42983
+ className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
42967
42984
  children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
42968
42985
  }
42969
42986
  ),
42970
42987
  showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
42971
42988
  Box,
42972
42989
  {
42973
- className: "p-3 bg-background border border-border rounded-lg shadow-xl",
42990
+ className: "p-3 bg-background border border-border rounded-container shadow-xl",
42974
42991
  style: {
42975
42992
  ...getTooltipStyle(),
42976
42993
  minWidth: 200,
@@ -43220,12 +43237,12 @@ function SequencerBoard({
43220
43237
  backgroundPosition: "center"
43221
43238
  },
43222
43239
  children: [
43223
- 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,
43240
+ 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,
43224
43241
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
43225
43242
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
43226
43243
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
43227
43244
  ] }),
43228
- 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: [
43245
+ 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: [
43229
43246
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
43230
43247
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
43231
43248
  ] }) }),
@@ -43263,8 +43280,8 @@ function SequencerBoard({
43263
43280
  label: t("sequencer.dragActions")
43264
43281
  }
43265
43282
  ),
43266
- 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) }) }),
43267
- 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") }) }),
43283
+ 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) }) }),
43284
+ 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") }) }),
43268
43285
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
43269
43286
  /* @__PURE__ */ jsxRuntime.jsx(
43270
43287
  Button,
@@ -43940,7 +43957,7 @@ function SimulationCanvas({
43940
43957
  ref: canvasRef,
43941
43958
  width,
43942
43959
  height,
43943
- className: "rounded-md block max-w-full h-auto"
43960
+ className: "rounded-container block max-w-full h-auto"
43944
43961
  }
43945
43962
  ) });
43946
43963
  }
@@ -44148,7 +44165,7 @@ function SimulatorBoard({
44148
44165
  backgroundPosition: "center"
44149
44166
  },
44150
44167
  children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
44151
- 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,
44168
+ 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,
44152
44169
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
44153
44170
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
44154
44171
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
@@ -44199,8 +44216,8 @@ function SimulatorBoard({
44199
44216
  entity.outputUnit
44200
44217
  ] }),
44201
44218
  submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
44202
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-green-600" : "text-red-600" }),
44203
- /* @__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") })
44219
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
44220
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
44204
44221
  ] }),
44205
44222
  /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
44206
44223
  t("simulator.target"),
@@ -44213,7 +44230,7 @@ function SimulatorBoard({
44213
44230
  ")"
44214
44231
  ] })
44215
44232
  ] }) }),
44216
- 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 }) }),
44233
+ 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 }) }),
44217
44234
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
44218
44235
  !submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
44219
44236
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
@@ -44614,7 +44631,7 @@ function StateNode2({
44614
44631
  position: "absolute",
44615
44632
  display: "flex",
44616
44633
  className: cn(
44617
- "items-center justify-center rounded-full border-3 transition-all cursor-pointer select-none",
44634
+ "items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
44618
44635
  "min-w-[80px] h-[80px] px-3",
44619
44636
  isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
44620
44637
  isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
@@ -44927,7 +44944,7 @@ function StateArchitectBoard({
44927
44944
  backgroundPosition: "center"
44928
44945
  },
44929
44946
  children: [
44930
- 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,
44947
+ 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,
44931
44948
  /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
44932
44949
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
44933
44950
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
@@ -44946,7 +44963,7 @@ function StateArchitectBoard({
44946
44963
  Box,
44947
44964
  {
44948
44965
  position: "relative",
44949
- className: "rounded-lg border border-border bg-background overflow-hidden",
44966
+ className: "rounded-container border border-border bg-background overflow-hidden",
44950
44967
  style: { width: GRAPH_W, height: GRAPH_H },
44951
44968
  children: [
44952
44969
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -45005,7 +45022,7 @@ function StateArchitectBoard({
45005
45022
  children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
45006
45023
  }
45007
45024
  ) }),
45008
- transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
45025
+ transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
45009
45026
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
45010
45027
  transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
45011
45028
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
@@ -45039,7 +45056,7 @@ function StateArchitectBoard({
45039
45056
  variables
45040
45057
  }
45041
45058
  ),
45042
- testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-lg bg-card border border-border", gap: "xs", children: [
45059
+ testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
45043
45060
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
45044
45061
  testResults.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
45045
45062
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r.passed ? "text-success" : "text-error", children: r.passed ? "\u2714" : "\u2717" }),
@@ -45050,10 +45067,10 @@ function StateArchitectBoard({
45050
45067
  entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
45051
45068
  ] })
45052
45069
  ] }),
45053
- 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") }) }),
45070
+ 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") }) }),
45054
45071
  playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
45055
- /* @__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]) }) }),
45056
- 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: [
45072
+ /* @__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]) }) }),
45073
+ 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: [
45057
45074
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
45058
45075
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
45059
45076
  ] }) })