@le-space/ui 0.6.42 → 0.6.44

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.
package/react/index.js CHANGED
@@ -43,7 +43,7 @@ var RECENT_INSTANCE_RUNTIME_GRACE_MS = 10 * 60 * 1e3;
43
43
  var DEPLOYMENT_PENDING_WARNING_MS = 3 * 60 * 1e3;
44
44
 
45
45
  // src/shared/package-version.ts
46
- var UI_PACKAGE_VERSION = "0.6.42";
46
+ var UI_PACKAGE_VERSION = "0.6.44";
47
47
 
48
48
  // src/shared/format.ts
49
49
  function shortHash(value, head = 8, tail = 6) {
@@ -3425,12 +3425,30 @@ async function waitForVmBootstrapConfigSignal(args) {
3425
3425
  }).catch(() => []);
3426
3426
  const match = signals.find((entry) => entry.status === expectedStatus) ?? null;
3427
3427
  if (match) return match;
3428
+ if (args.shouldAbort && await args.shouldAbort().catch(() => false)) {
3429
+ return null;
3430
+ }
3428
3431
  if (attempt < attempts - 1) {
3429
3432
  await sleep2(delayMs);
3430
3433
  }
3431
3434
  }
3432
3435
  return null;
3433
3436
  }
3437
+ async function crnExecutionAbsent(args) {
3438
+ const base = String(args.crnUrl ?? "").trim();
3439
+ if (!base) return false;
3440
+ try {
3441
+ const response = await args.fetch(new URL("/about/executions/list", base).toString(), {
3442
+ cache: "no-store"
3443
+ });
3444
+ if (!response.ok) return false;
3445
+ const payload = await response.json();
3446
+ if (!payload || typeof payload !== "object") return false;
3447
+ return !(args.itemHash in payload);
3448
+ } catch {
3449
+ return false;
3450
+ }
3451
+ }
3434
3452
 
3435
3453
  // ../core/src/bootstrap-reconcile.ts
3436
3454
  function createRelayBootstrapRegistrationId(profile, instanceName, itemHash) {
@@ -4552,7 +4570,37 @@ var SponsorRelayController = class {
4552
4570
  // recovery path, which used to poll the guest over plain HTTP (mixed
4553
4571
  // content on an HTTPS origin).
4554
4572
  attempts: 100,
4555
- delayMs: 3e3
4573
+ delayMs: 3e3,
4574
+ // Early failover (relay-button#83): a silently broken CRN accepts the
4575
+ // allocation but never schedules the VM. Probe the CRN's execution
4576
+ // list alongside the signal wait; after 4 consecutive "absent"
4577
+ // sightings (~2 min into the window) stop waiting — the full window
4578
+ // costs ~5 min and the VM will never publish a signal.
4579
+ shouldAbort: /* @__PURE__ */ (() => {
4580
+ let absentStreak = 0;
4581
+ let probeCountdown = 0;
4582
+ return async () => {
4583
+ if (probeCountdown > 0) {
4584
+ probeCountdown -= 1;
4585
+ return false;
4586
+ }
4587
+ probeCountdown = 9;
4588
+ const absent = await crnExecutionAbsent({
4589
+ crnUrl: args.crnUrl,
4590
+ itemHash: args.itemHash,
4591
+ fetch: asJsonFetch
4592
+ });
4593
+ absentStreak = absent ? absentStreak + 1 : 0;
4594
+ if (absentStreak >= 4) {
4595
+ this.trace("deploy:crn-execution-absent-abort", {
4596
+ itemHash: args.itemHash,
4597
+ crnUrl: args.crnUrl ?? null
4598
+ });
4599
+ return true;
4600
+ }
4601
+ return false;
4602
+ };
4603
+ })()
4556
4604
  });
4557
4605
  this.trace("deploy:bootstrap-config-signal-visible", {
4558
4606
  itemHash: args.itemHash,
@@ -5738,7 +5786,8 @@ var SponsorRelayController = class {
5738
5786
  await this.configureRelayBootstrapRegistration({
5739
5787
  itemHash: result.itemHash,
5740
5788
  runtime,
5741
- deploymentToken: attemptDeploymentToken
5789
+ deploymentToken: attemptDeploymentToken,
5790
+ crnUrl: candidateCrn.address ?? null
5742
5791
  });
5743
5792
  this.patch({
5744
5793
  busy: { deploying: false }
@@ -6222,6 +6271,57 @@ function useSponsorRelayController(props) {
6222
6271
 
6223
6272
  // src/react/SponsorRelayFab.tsx
6224
6273
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6274
+ var THEME_CSS = `
6275
+ :root {
6276
+ --rb-font-body: "Inter", -apple-system, "Segoe UI", Roboto, sans-serif;
6277
+ --rb-font-heading: var(--rb-font-body);
6278
+ --rb-font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", "Noto Sans Mono", Menlo, monospace;
6279
+ --rb-border: #232b3d;
6280
+ --rb-text: #edf1f8;
6281
+ --rb-muted: #a8b3c7;
6282
+ --rb-comet: #6b7690;
6283
+ --rb-coral: #ff6b5b;
6284
+ --rb-cyan: #58c7f3;
6285
+ --rb-success: #3edc97;
6286
+ --rb-warning: #ffc24b;
6287
+ --rb-danger: #ff4d6a;
6288
+ --rb-panel-bg: rgba(20, 25, 38, 0.97);
6289
+ --rb-panel-shadow: 0 28px 80px rgba(4, 6, 12, 0.55);
6290
+ --rb-surface: rgba(11, 14, 21, 0.55);
6291
+ --rb-field-bg: rgba(11, 14, 21, 0.85);
6292
+ --rb-accent: var(--rb-coral);
6293
+ --rb-accent-contrast: #0b0e15;
6294
+ --rb-link: var(--rb-cyan);
6295
+ --rb-launcher-start: #10151f;
6296
+ --rb-launcher-end: #0b0e15;
6297
+ --rb-launcher-text: #edf1f8;
6298
+ --rb-launcher-badge-bg: rgba(20, 25, 38, 0.92);
6299
+ --rb-backdrop-accent: rgba(255, 107, 91, 0.14);
6300
+ }
6301
+ [data-theme="light"],
6302
+ [data-relay-theme="light"] {
6303
+ --rb-border: #d9e0ec;
6304
+ --rb-text: #141b2e;
6305
+ --rb-muted: #4d5a74;
6306
+ --rb-comet: #6b7690;
6307
+ --rb-coral: #e8503f;
6308
+ --rb-cyan: #0e86c4;
6309
+ --rb-success: #0f9d6a;
6310
+ --rb-warning: #a8690a;
6311
+ --rb-danger: #d5365a;
6312
+ --rb-panel-bg: rgba(255, 255, 255, 0.98);
6313
+ --rb-panel-shadow: 0 28px 80px rgba(20, 27, 46, 0.18);
6314
+ --rb-surface: rgba(20, 27, 46, 0.04);
6315
+ --rb-field-bg: #ffffff;
6316
+ --rb-accent-contrast: #ffffff;
6317
+ --rb-launcher-start: #ffffff;
6318
+ --rb-launcher-end: #f2f5fa;
6319
+ --rb-launcher-text: #141b2e;
6320
+ --rb-launcher-badge-bg: rgba(20, 27, 46, 0.05);
6321
+ --rb-backdrop-accent: rgba(232, 80, 63, 0.1);
6322
+ }
6323
+ @keyframes leSpaceRelayPulse { 0%, 100% { transform: scale(1); opacity: 0.74; } 50% { transform: scale(1.22); opacity: 1; } }
6324
+ `;
6225
6325
  var basePanelStyle = {
6226
6326
  position: "fixed",
6227
6327
  zIndex: 9999,
@@ -6233,52 +6333,54 @@ var basePanelStyle = {
6233
6333
  overflowY: "auto",
6234
6334
  overflowWrap: "anywhere",
6235
6335
  wordBreak: "break-word",
6236
- border: "1px solid var(--le-space-sponsor-relay-panel-border, rgba(199, 210, 254, 0.22))",
6237
- borderRadius: "1.4rem",
6238
- background: "var(--le-space-sponsor-relay-panel-bg, rgba(49, 46, 129, 0.94))",
6239
- color: "#f8fafc",
6240
- boxShadow: "var(--le-space-sponsor-relay-panel-shadow, 0 28px 80px rgba(49, 46, 129, 0.34))",
6336
+ border: "1px solid var(--le-space-sponsor-relay-panel-border, var(--rb-border))",
6337
+ borderRadius: "0.625rem",
6338
+ background: "var(--le-space-sponsor-relay-panel-bg, var(--rb-panel-bg))",
6339
+ color: "var(--rb-text)",
6340
+ boxShadow: "var(--le-space-sponsor-relay-panel-shadow, var(--rb-panel-shadow))",
6241
6341
  padding: "1rem",
6242
- fontFamily: '"DM Sans", "Inter", sans-serif'
6342
+ fontFamily: "var(--rb-font-body)",
6343
+ fontSize: "0.8125rem",
6344
+ lineHeight: 1.5
6243
6345
  };
6244
6346
  var fieldStyle = {
6245
6347
  width: "100%",
6246
6348
  minWidth: 0,
6247
6349
  boxSizing: "border-box",
6248
- borderRadius: "0.8rem",
6249
- border: "1px solid rgba(255,255,255,0.16)",
6250
- background: "rgba(248,250,252,0.98)",
6251
- color: "#111827",
6252
- padding: "0.7rem 0.85rem",
6253
- fontFamily: '"DM Sans", "Inter", sans-serif',
6254
- fontSize: "0.98rem",
6255
- lineHeight: 1.45
6350
+ borderRadius: "0.5rem",
6351
+ border: "1px solid var(--rb-border)",
6352
+ background: "var(--rb-field-bg)",
6353
+ color: "var(--rb-text)",
6354
+ padding: "0.65rem 0.8rem",
6355
+ fontFamily: "var(--rb-font-body)",
6356
+ fontSize: "0.8125rem",
6357
+ lineHeight: 1.4
6256
6358
  };
6257
6359
  var secondaryButtonStyle = {
6258
- borderRadius: "0.95rem",
6259
- border: "1px solid rgba(255,255,255,0.22)",
6260
- background: "rgba(255,255,255,0.10)",
6261
- color: "#f8fafc",
6262
- padding: "0.72rem 0.95rem",
6263
- fontFamily: '"DM Sans", "Inter", sans-serif',
6264
- fontSize: "0.92rem",
6265
- fontWeight: 700,
6360
+ borderRadius: "0.5rem",
6361
+ border: "1px solid var(--rb-border)",
6362
+ background: "var(--rb-surface)",
6363
+ color: "var(--rb-text)",
6364
+ padding: "0.65rem 0.9rem",
6365
+ fontFamily: "var(--rb-font-body)",
6366
+ fontSize: "0.8125rem",
6367
+ fontWeight: 600,
6266
6368
  lineHeight: 1.1,
6267
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06)",
6268
- backdropFilter: "blur(8px)"
6369
+ cursor: "pointer"
6269
6370
  };
6270
6371
  var primaryButtonStyle = {
6271
6372
  boxSizing: "border-box",
6272
- borderRadius: "0.95rem",
6273
- border: "1px solid rgba(251, 191, 36, 0.42)",
6274
- background: "linear-gradient(135deg, #f6c453 0%, #f59e0b 100%)",
6275
- color: "#281606",
6276
- padding: "0.82rem 1rem",
6277
- fontFamily: '"DM Sans", "Inter", sans-serif',
6278
- fontSize: "0.96rem",
6279
- fontWeight: 800,
6373
+ borderRadius: "0.5rem",
6374
+ border: "1px solid transparent",
6375
+ background: "var(--rb-accent)",
6376
+ color: "var(--rb-accent-contrast)",
6377
+ padding: "0.78rem 1rem",
6378
+ fontFamily: "var(--rb-font-body)",
6379
+ fontSize: "0.875rem",
6380
+ fontWeight: 700,
6280
6381
  lineHeight: 1.1,
6281
- boxShadow: "0 10px 24px rgba(245, 158, 11, 0.24)"
6382
+ cursor: "pointer",
6383
+ boxShadow: "0 10px 24px rgba(255, 107, 91, 0.22)"
6282
6384
  };
6283
6385
  var containedContentStyle = {
6284
6386
  minWidth: 0,
@@ -6289,42 +6391,43 @@ var containedContentStyle = {
6289
6391
  whiteSpace: "normal"
6290
6392
  };
6291
6393
  var dangerButtonStyle = {
6292
- borderRadius: "0.95rem",
6293
- border: "1px solid rgba(248, 113, 113, 0.45)",
6294
- background: "rgba(239, 68, 68, 0.18)",
6295
- color: "#ffe2e2",
6296
- padding: "0.72rem 0.95rem",
6297
- fontFamily: '"DM Sans", "Inter", sans-serif',
6298
- fontSize: "0.9rem",
6299
- fontWeight: 700,
6300
- lineHeight: 1.1
6394
+ borderRadius: "0.5rem",
6395
+ border: "1px solid rgba(255, 77, 106, 0.45)",
6396
+ background: "transparent",
6397
+ color: "var(--rb-danger)",
6398
+ padding: "0.65rem 0.9rem",
6399
+ fontFamily: "var(--rb-font-body)",
6400
+ fontSize: "0.8125rem",
6401
+ fontWeight: 600,
6402
+ lineHeight: 1.1,
6403
+ cursor: "pointer"
6301
6404
  };
6302
6405
  var warningButtonStyle = {
6303
- borderRadius: "0.95rem",
6304
- border: "1px solid rgba(251, 146, 60, 0.4)",
6305
- background: "rgba(251, 146, 60, 0.16)",
6306
- color: "#fed7aa",
6307
- padding: "0.72rem 0.95rem",
6308
- fontFamily: '"DM Sans", "Inter", sans-serif',
6309
- fontSize: "0.9rem",
6310
- fontWeight: 700,
6311
- lineHeight: 1.1
6406
+ borderRadius: "0.5rem",
6407
+ border: "1px solid rgba(255, 194, 75, 0.45)",
6408
+ background: "transparent",
6409
+ color: "var(--rb-warning)",
6410
+ padding: "0.65rem 0.9rem",
6411
+ fontFamily: "var(--rb-font-body)",
6412
+ fontSize: "0.8125rem",
6413
+ fontWeight: 600,
6414
+ lineHeight: 1.1,
6415
+ cursor: "pointer"
6312
6416
  };
6313
- var themedLauncherBackground = "linear-gradient(135deg, var(--le-space-sponsor-relay-launcher-start, #4f46e5) 0%, var(--le-space-sponsor-relay-launcher-end, #6366f1) 100%)";
6314
- var themedLauncherBorder = "var(--le-space-sponsor-relay-launcher-border, rgba(199, 210, 254, 0.42))";
6315
- var themedLauncherBadgeBackground = "var(--le-space-sponsor-relay-launcher-badge-bg, rgba(49, 46, 129, 0.92))";
6316
- var themedLauncherBadgeBorder = "var(--le-space-sponsor-relay-launcher-badge-border, rgba(191, 219, 254, 0.24))";
6317
- var themedLauncherDot = "var(--le-space-sponsor-relay-launcher-dot, #f59e0b)";
6417
+ var themedLauncherBackground = "linear-gradient(135deg, var(--le-space-sponsor-relay-launcher-start, var(--rb-launcher-start)) 0%, var(--le-space-sponsor-relay-launcher-end, var(--rb-launcher-end)) 100%)";
6418
+ var themedLauncherBorder = "var(--le-space-sponsor-relay-launcher-border, var(--rb-border))";
6419
+ var themedLauncherBadgeBackground = "var(--le-space-sponsor-relay-launcher-badge-bg, var(--rb-launcher-badge-bg))";
6420
+ var themedLauncherBadgeBorder = "var(--le-space-sponsor-relay-launcher-badge-border, var(--rb-border))";
6318
6421
  function progressToneColor(status) {
6319
6422
  switch (status) {
6320
6423
  case "success":
6321
- return "#37d67a";
6424
+ return "#3edc97";
6322
6425
  case "warning":
6323
- return "#ffc83f";
6426
+ return "#ffc24b";
6324
6427
  case "error":
6325
- return "#e91315";
6428
+ return "#ff4d6a";
6326
6429
  default:
6327
- return "#0176ce";
6430
+ return "#58c7f3";
6328
6431
  }
6329
6432
  }
6330
6433
  function progressBadgeLabel(stage) {
@@ -6548,7 +6651,7 @@ function SponsorRelayFab(props) {
6548
6651
  const deploymentProgressVisible = isDeploymentProgressVisible(state);
6549
6652
  const pollingState = pollingIndicator(state);
6550
6653
  const pulseScale = progressActive ? 1.03 : hovered ? 1.015 : 1;
6551
- const pulseShadow = progressActive ? `0 0 0 4px ${progressToneColor(indicator.tone)}22, 0 12px 28px rgba(15, 23, 42, 0.22)` : successFlash ? `0 0 0 5px rgba(55, 214, 122, 0.22), 0 14px 32px rgba(55, 214, 122, 0.22)` : launcherMode === "inline" ? hovered ? "var(--le-space-sponsor-relay-launcher-hover-shadow, 0 14px 30px rgba(79, 70, 229, 0.28))" : "var(--le-space-sponsor-relay-launcher-shadow, 0 10px 24px rgba(99, 102, 241, 0.22))" : void 0;
6654
+ const pulseShadow = progressActive ? `0 0 0 4px ${progressToneColor(indicator.tone)}22, 0 12px 28px rgba(15, 23, 42, 0.22)` : successFlash ? `0 0 0 5px rgba(55, 214, 122, 0.22), 0 14px 32px rgba(55, 214, 122, 0.22)` : launcherMode === "inline" ? hovered ? "var(--le-space-sponsor-relay-launcher-hover-shadow, 0 14px 30px rgba(4, 6, 12, 0.5))" : "var(--le-space-sponsor-relay-launcher-shadow, 0 10px 24px rgba(4, 6, 12, 0.4))" : void 0;
6552
6655
  const inlineButtonBackground = themedLauncherBackground;
6553
6656
  const inlineButtonBorder = `1px solid ${themedLauncherBorder}`;
6554
6657
  const inlineBadgeBackground = themedLauncherBadgeBackground;
@@ -6569,7 +6672,7 @@ function SponsorRelayFab(props) {
6569
6672
  const rootfsBlocked = state.rootfsHealth.tone === "error";
6570
6673
  const deployCallToAction = state.wallet.connected ? state.busy.deploying ? "Deploying\u2026" : rootfsBlocked ? "Deployment blocked \u2014 Rootfs unavailable" : deploymentButtonLabel(state) : "Connect MetaMask";
6571
6674
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6572
- /* @__PURE__ */ jsx("style", { children: `@keyframes leSpaceRelayPulse { 0%, 100% { transform: scale(1); opacity: 0.74; } 50% { transform: scale(1.22); opacity: 1; } }` }),
6675
+ /* @__PURE__ */ jsx("style", { children: THEME_CSS }),
6573
6676
  /* @__PURE__ */ jsxs(
6574
6677
  "button",
6575
6678
  {
@@ -6587,14 +6690,14 @@ function SponsorRelayFab(props) {
6587
6690
  bottom: launcherMode === "floating" ? "5.8rem" : void 0,
6588
6691
  zIndex: launcherMode === "floating" ? 1e4 : "auto",
6589
6692
  borderRadius: "999px",
6590
- border: launcherMode === "floating" ? `2px solid ${themedLauncherBorder}` : inlineButtonBorder,
6693
+ border: launcherMode === "floating" ? `1px solid ${themedLauncherBorder}` : inlineButtonBorder,
6591
6694
  background: launcherMode === "floating" ? themedLauncherBackground : inlineButtonBackground,
6592
- color: "white",
6695
+ color: "var(--rb-launcher-text)",
6593
6696
  minHeight: launcherMode === "floating" ? void 0 : "2.25rem",
6594
- padding: launcherMode === "floating" ? "0.9rem 1.2rem" : "0.42rem 0.56rem 0.42rem 0.76rem",
6595
- fontFamily: '"Epilogue", sans-serif',
6697
+ padding: launcherMode === "floating" ? "0.8rem 1.15rem" : "0.42rem 0.56rem 0.42rem 0.76rem",
6698
+ fontFamily: "var(--rb-font-mono)",
6596
6699
  fontWeight: 700,
6597
- fontSize: launcherMode === "floating" ? "0.84rem" : "0.73rem",
6700
+ fontSize: launcherMode === "floating" ? "0.78rem" : "0.7rem",
6598
6701
  textTransform: "uppercase",
6599
6702
  letterSpacing: "0.08em",
6600
6703
  cursor: "pointer",
@@ -6616,17 +6719,42 @@ function SponsorRelayFab(props) {
6616
6719
  gap: "0.36rem"
6617
6720
  },
6618
6721
  children: [
6619
- /* @__PURE__ */ jsx(
6620
- "span",
6722
+ /* @__PURE__ */ jsxs(
6723
+ "svg",
6621
6724
  {
6622
6725
  "aria-hidden": "true",
6726
+ viewBox: "0 0 32 32",
6623
6727
  style: {
6624
- width: launcherMode === "floating" ? "0.5rem" : "0.42rem",
6625
- height: launcherMode === "floating" ? "0.5rem" : "0.42rem",
6626
- borderRadius: "999px",
6627
- background: launcherMode === "floating" ? "rgba(255,255,255,0.96)" : themedLauncherDot,
6628
- boxShadow: launcherMode === "floating" ? "0 0 0 3px rgba(255,255,255,0.22)" : "0 0 0 3px var(--le-space-sponsor-relay-launcher-dot-ring, rgba(245, 158, 11, 0.18))"
6629
- }
6728
+ width: launcherMode === "floating" ? "1.1rem" : "0.95rem",
6729
+ height: launcherMode === "floating" ? "1.1rem" : "0.95rem",
6730
+ flex: "none"
6731
+ },
6732
+ children: [
6733
+ /* @__PURE__ */ jsx(
6734
+ "line",
6735
+ {
6736
+ x1: "17",
6737
+ y1: "15.4",
6738
+ x2: "19.6",
6739
+ y2: "13",
6740
+ stroke: "var(--rb-cyan)",
6741
+ strokeWidth: 2.4,
6742
+ strokeLinecap: "round"
6743
+ }
6744
+ ),
6745
+ /* @__PURE__ */ jsx("circle", { cx: "11.5", cy: "20.5", r: "7", fill: "var(--rb-coral)" }),
6746
+ /* @__PURE__ */ jsx(
6747
+ "circle",
6748
+ {
6749
+ cx: "23.5",
6750
+ cy: "9.5",
6751
+ r: "4.2",
6752
+ fill: "none",
6753
+ stroke: "var(--rb-cyan)",
6754
+ strokeWidth: 2.8
6755
+ }
6756
+ )
6757
+ ]
6630
6758
  }
6631
6759
  ),
6632
6760
  /* @__PURE__ */ jsx("span", { children: launcherLabel })
@@ -6643,8 +6771,8 @@ function SponsorRelayFab(props) {
6643
6771
  padding: launcherMode === "floating" ? "0.2rem 0.42rem" : "0.21rem 0.5rem",
6644
6772
  minWidth: launcherMode === "floating" ? void 0 : "3.8rem",
6645
6773
  borderRadius: "999px",
6646
- background: launcherMode === "floating" ? "rgba(15, 23, 42, 0.18)" : inlineBadgeBackground,
6647
- border: launcherMode === "floating" ? "1px solid rgba(255,255,255,0.18)" : inlineBadgeBorder,
6774
+ background: launcherMode === "floating" ? "var(--rb-launcher-badge-bg)" : inlineBadgeBackground,
6775
+ border: launcherMode === "floating" ? "1px solid var(--rb-border)" : inlineBadgeBorder,
6648
6776
  fontSize: launcherMode === "floating" ? "0.62rem" : "0.61rem",
6649
6777
  fontWeight: launcherMode === "floating" ? 700 : 800,
6650
6778
  lineHeight: 1,
@@ -6685,7 +6813,7 @@ function SponsorRelayFab(props) {
6685
6813
  position: "fixed",
6686
6814
  inset: 0,
6687
6815
  zIndex: 9998,
6688
- background: "radial-gradient(circle at 88% 82%, var(--le-space-sponsor-relay-backdrop-accent, rgba(79, 70, 229, 0.2)), transparent 34%)"
6816
+ background: "radial-gradient(circle at 88% 82%, var(--le-space-sponsor-relay-backdrop-accent, var(--rb-backdrop-accent)), transparent 34%)"
6689
6817
  }
6690
6818
  }
6691
6819
  ),
@@ -6708,8 +6836,10 @@ function SponsorRelayFab(props) {
6708
6836
  display: "flex",
6709
6837
  alignItems: "center",
6710
6838
  gap: "0.45rem",
6711
- color: "#9fb2ca",
6712
- fontSize: "0.72rem",
6839
+ color: "var(--rb-accent)",
6840
+ fontFamily: "var(--rb-font-mono)",
6841
+ fontWeight: 700,
6842
+ fontSize: "0.6563rem",
6713
6843
  textTransform: "uppercase",
6714
6844
  letterSpacing: "0.08em"
6715
6845
  },
@@ -6719,10 +6849,11 @@ function SponsorRelayFab(props) {
6719
6849
  "span",
6720
6850
  {
6721
6851
  style: {
6722
- fontSize: "0.62rem",
6852
+ fontWeight: 400,
6853
+ fontSize: "0.625rem",
6723
6854
  letterSpacing: "0.04em",
6724
6855
  textTransform: "none",
6725
- color: "rgba(191, 219, 254, 0.82)"
6856
+ color: "var(--rb-comet)"
6726
6857
  },
6727
6858
  children: versionLabel
6728
6859
  }
@@ -6735,7 +6866,9 @@ function SponsorRelayFab(props) {
6735
6866
  {
6736
6867
  style: {
6737
6868
  margin: "0.2rem 0 0",
6738
- fontFamily: '"Epilogue", sans-serif'
6869
+ fontFamily: "var(--rb-font-heading)",
6870
+ fontSize: "1.125rem",
6871
+ fontWeight: 700
6739
6872
  },
6740
6873
  children: deploymentPanelTitle(state)
6741
6874
  }
@@ -6753,8 +6886,8 @@ function SponsorRelayFab(props) {
6753
6886
  ]
6754
6887
  }
6755
6888
  ),
6756
- /* @__PURE__ */ jsx("p", { style: { color: "#9fb2ca" }, children: state.statusText }),
6757
- state.errorText ? /* @__PURE__ */ jsx("p", { style: { color: "#ffd9d9" }, children: state.errorText }) : null,
6889
+ /* @__PURE__ */ jsx("p", { style: { color: "var(--rb-muted)" }, children: state.statusText }),
6890
+ state.errorText ? /* @__PURE__ */ jsx("p", { style: { color: "var(--rb-danger)" }, children: state.errorText }) : null,
6758
6891
  pollingState ? /* @__PURE__ */ jsxs(
6759
6892
  "div",
6760
6893
  {
@@ -6764,8 +6897,8 @@ function SponsorRelayFab(props) {
6764
6897
  marginBottom: "0.8rem",
6765
6898
  padding: "0.7rem 0.8rem",
6766
6899
  borderRadius: "1rem",
6767
- border: "1px solid rgba(125, 211, 252, 0.18)",
6768
- background: "linear-gradient(180deg, rgba(59, 130, 246, 0.12), rgba(59, 130, 246, 0.05))",
6900
+ border: "1px solid rgba(88, 199, 243, 0.22)",
6901
+ background: "rgba(88, 199, 243, 0.08)",
6769
6902
  display: "grid",
6770
6903
  gap: "0.28rem"
6771
6904
  },
@@ -6797,7 +6930,7 @@ function SponsorRelayFab(props) {
6797
6930
  ]
6798
6931
  }
6799
6932
  ),
6800
- /* @__PURE__ */ jsx("small", { style: { color: "#9fb2ca", lineHeight: 1.35 }, children: pollingState.detail })
6933
+ /* @__PURE__ */ jsx("small", { style: { color: "var(--rb-muted)", lineHeight: 1.35 }, children: pollingState.detail })
6801
6934
  ]
6802
6935
  }
6803
6936
  ) : null,
@@ -6808,9 +6941,8 @@ function SponsorRelayFab(props) {
6808
6941
  marginTop: "0.85rem",
6809
6942
  padding: "0.75rem 0.8rem",
6810
6943
  borderRadius: "1rem",
6811
- border: "1px solid rgba(255,255,255,0.1)",
6812
- background: "linear-gradient(180deg, rgba(255,255,255,0.05), rgba(255,255,255,0.03))",
6813
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.04)"
6944
+ border: "1px solid var(--rb-border)",
6945
+ background: "var(--rb-surface)"
6814
6946
  },
6815
6947
  children: [
6816
6948
  /* @__PURE__ */ jsxs(
@@ -6876,8 +7008,8 @@ function SponsorRelayFab(props) {
6876
7008
  {
6877
7009
  style: {
6878
7010
  fontSize: "0.72rem",
6879
- color: "#9fb2ca",
6880
- fontFamily: '"DM Mono", monospace'
7011
+ color: "var(--rb-muted)",
7012
+ fontFamily: "var(--rb-font-mono)"
6881
7013
  },
6882
7014
  children: [
6883
7015
  String(
@@ -6898,7 +7030,7 @@ function SponsorRelayFab(props) {
6898
7030
  width: "100%",
6899
7031
  height: "0.34rem",
6900
7032
  borderRadius: "999px",
6901
- background: "rgba(255,255,255,0.08)",
7033
+ background: "rgba(168, 179, 199, 0.18)",
6902
7034
  overflow: "hidden"
6903
7035
  },
6904
7036
  children: /* @__PURE__ */ jsx(
@@ -6930,9 +7062,9 @@ function SponsorRelayFab(props) {
6930
7062
  "div",
6931
7063
  {
6932
7064
  style: {
6933
- color: "#9fb2ca",
7065
+ color: "var(--rb-muted)",
6934
7066
  fontSize: "0.7rem",
6935
- fontFamily: '"DM Mono", monospace',
7067
+ fontFamily: "var(--rb-font-mono)",
6936
7068
  whiteSpace: "nowrap",
6937
7069
  overflow: "hidden",
6938
7070
  textOverflow: "ellipsis"
@@ -6947,10 +7079,10 @@ function SponsorRelayFab(props) {
6947
7079
  "div",
6948
7080
  {
6949
7081
  style: {
6950
- color: "#9fb2ca",
7082
+ color: "var(--rb-muted)",
6951
7083
  fontSize: "0.72rem",
6952
7084
  lineHeight: 1.3,
6953
- fontFamily: state.deploymentProgress.detail.includes("0x") || state.deploymentProgress.detail.includes("Qm") ? '"DM Mono", monospace' : void 0
7085
+ fontFamily: state.deploymentProgress.detail.includes("0x") || state.deploymentProgress.detail.includes("Qm") ? "var(--rb-font-mono)" : void 0
6954
7086
  },
6955
7087
  children: state.deploymentProgress.detail
6956
7088
  }
@@ -6959,7 +7091,7 @@ function SponsorRelayFab(props) {
6959
7091
  "div",
6960
7092
  {
6961
7093
  style: {
6962
- color: "#ffd9d9",
7094
+ color: "var(--rb-danger)",
6963
7095
  fontSize: "0.72rem",
6964
7096
  lineHeight: 1.3
6965
7097
  },
@@ -7005,7 +7137,7 @@ function SponsorRelayFab(props) {
7005
7137
  "div",
7006
7138
  {
7007
7139
  style: {
7008
- color: "#9fb2ca",
7140
+ color: "var(--rb-muted)",
7009
7141
  fontSize: "0.74rem",
7010
7142
  lineHeight: 1.35,
7011
7143
  marginTop: "-0.15rem"
@@ -7212,7 +7344,7 @@ function SponsorRelayFab(props) {
7212
7344
  "div",
7213
7345
  {
7214
7346
  style: {
7215
- color: "#9fb2ca",
7347
+ color: "var(--rb-muted)",
7216
7348
  fontSize: "0.74rem",
7217
7349
  lineHeight: 1.35,
7218
7350
  marginTop: "-0.15rem"
@@ -7263,9 +7395,9 @@ function SponsorRelayFab(props) {
7263
7395
  marginTop: "1rem",
7264
7396
  padding: "0.9rem",
7265
7397
  borderRadius: "1rem",
7266
- border: "1px solid rgba(248, 113, 113, 0.58)",
7267
- background: "rgba(127, 29, 29, 0.34)",
7268
- color: "#fee2e2"
7398
+ border: "1px solid rgba(255, 77, 106, 0.5)",
7399
+ background: "rgba(255, 77, 106, 0.1)",
7400
+ color: "var(--rb-text)"
7269
7401
  },
7270
7402
  children: [
7271
7403
  /* @__PURE__ */ jsx("strong", { children: "Rootfs unavailable \u2014 deployment blocked" }),
@@ -7283,7 +7415,7 @@ function SponsorRelayFab(props) {
7283
7415
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: [
7284
7416
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void controller.refresh(), disabled: state.busy.refreshing, style: { ...secondaryButtonStyle, padding: "0.55rem 0.7rem" }, children: state.busy.refreshing ? "Checking\u2026" : "Retry validation" }),
7285
7417
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => controller.setShowAdvanced(true), style: { ...secondaryButtonStyle, padding: "0.55rem 0.7rem" }, children: "Edit manifest URL" }),
7286
- /^https?:\/\//.test(state.manifestUrl) ? /* @__PURE__ */ jsx("a", { href: state.manifestUrl, target: "_blank", rel: "noreferrer", style: { color: "#bfdbfe", alignSelf: "center", fontSize: "0.78rem" }, children: "Open manifest" }) : null
7418
+ /^https?:\/\//.test(state.manifestUrl) ? /* @__PURE__ */ jsx("a", { href: state.manifestUrl, target: "_blank", rel: "noreferrer", style: { color: "var(--rb-link)", alignSelf: "center", fontSize: "0.78rem" }, children: "Open manifest" }) : null
7287
7419
  ] })
7288
7420
  ]
7289
7421
  }
@@ -7299,7 +7431,7 @@ function SponsorRelayFab(props) {
7299
7431
  ...primaryButtonStyle,
7300
7432
  width: "100%",
7301
7433
  marginTop: "1rem",
7302
- ...rootfsBlocked ? { background: "rgba(148, 163, 184, 0.22)", borderColor: "rgba(248, 113, 113, 0.45)", color: "#fee2e2", boxShadow: "none", cursor: "not-allowed" } : {}
7434
+ ...rootfsBlocked ? { background: "var(--rb-surface)", borderColor: "rgba(255, 77, 106, 0.45)", color: "var(--rb-text)", boxShadow: "none", cursor: "not-allowed" } : {}
7303
7435
  },
7304
7436
  children: deployCallToAction
7305
7437
  }
@@ -7348,8 +7480,8 @@ function SponsorRelayFab(props) {
7348
7480
  gap: "0.32rem",
7349
7481
  padding: "0.16rem 0.45rem",
7350
7482
  borderRadius: "999px",
7351
- background: "rgba(34, 197, 94, 0.16)",
7352
- color: "#86efac",
7483
+ background: "rgba(62, 220, 151, 0.14)",
7484
+ color: "var(--rb-success)",
7353
7485
  fontSize: "0.7rem",
7354
7486
  fontWeight: 700
7355
7487
  },
@@ -7362,8 +7494,8 @@ function SponsorRelayFab(props) {
7362
7494
  width: "0.45rem",
7363
7495
  height: "0.45rem",
7364
7496
  borderRadius: "999px",
7365
- background: "#22c55e",
7366
- boxShadow: "0 0 0 3px rgba(34, 197, 94, 0.18)"
7497
+ background: "var(--rb-success)",
7498
+ boxShadow: "0 0 0 3px rgba(62, 220, 151, 0.18)"
7367
7499
  }
7368
7500
  }
7369
7501
  ),
@@ -7452,13 +7584,13 @@ function SponsorRelayFab(props) {
7452
7584
  gap: "0.7rem",
7453
7585
  padding: "0.85rem",
7454
7586
  borderRadius: "1rem",
7455
- border: "1px solid rgba(248, 113, 113, 0.22)",
7456
- background: "linear-gradient(180deg, rgba(127, 29, 29, 0.18), rgba(69, 10, 10, 0.12))"
7587
+ border: "1px solid rgba(255, 77, 106, 0.3)",
7588
+ background: "rgba(255, 77, 106, 0.06)"
7457
7589
  },
7458
7590
  children: [
7459
7591
  /* @__PURE__ */ jsxs("div", { style: { display: "grid", gap: "0.2rem" }, children: [
7460
7592
  /* @__PURE__ */ jsx("strong", { children: "Orphan bootstrap registrations" }),
7461
- /* @__PURE__ */ jsx("small", { style: { color: "#fecaca", lineHeight: 1.35 }, children: "Current-wallet registrations without a matching instance. Forget them directly from here." })
7593
+ /* @__PURE__ */ jsx("small", { style: { color: "var(--rb-muted)", lineHeight: 1.35 }, children: "Current-wallet registrations without a matching instance. Forget them directly from here." })
7462
7594
  ] }),
7463
7595
  orphanRegistrations.map((entry) => {
7464
7596
  const registrationHash = entry.messageHash ?? entry.hash ?? null;
@@ -7471,8 +7603,8 @@ function SponsorRelayFab(props) {
7471
7603
  gap: "0.35rem",
7472
7604
  padding: "0.75rem",
7473
7605
  borderRadius: "0.9rem",
7474
- background: "rgba(15, 23, 42, 0.22)",
7475
- border: "1px solid rgba(255,255,255,0.08)"
7606
+ background: "var(--rb-surface)",
7607
+ border: "1px solid var(--rb-border)"
7476
7608
  },
7477
7609
  children: [
7478
7610
  /* @__PURE__ */ jsx(
package/shared/index.d.ts CHANGED
@@ -341,7 +341,7 @@ declare const STALE_INSTANCE_ALLOCATION_COOLDOWN_MS: number;
341
341
  declare const RECENT_INSTANCE_RUNTIME_GRACE_MS: number;
342
342
  declare const DEPLOYMENT_PENDING_WARNING_MS: number;
343
343
 
344
- declare const UI_PACKAGE_VERSION = "0.6.42";
344
+ declare const UI_PACKAGE_VERSION = "0.6.44";
345
345
 
346
346
  interface RootfsRequiredPortForward {
347
347
  port: number;