@wix/himalaya-cli 0.1168.0 → 0.1170.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -8265,6 +8265,8 @@ var init_a11y_contract = __esm({
8265
8265
  StepIndicator: { role: "group", name: "required", state: ["step N of M", "current"], decorative: false },
8266
8266
  // ---- Status, feedback, and overlays -------------------------------------------------
8267
8267
  ProgressBar: { role: "progressbar", name: "conditional", state: ["value/pct or indeterminate"], decorative: false },
8268
+ // The SPINNER's row: status + busy. A determinate ring (`value` / `valuePath`) is announced as a
8269
+ // progressbar with its value instead — RFC 0058 §3.3 "STATUS / PROGRESSBAR" (#3260).
8268
8270
  ActivityIndicator: { role: "status", name: "conditional", state: ["busy"], decorative: false },
8269
8271
  Gauge: { role: "progressbar", name: "required", state: ["value + unit"], decorative: false },
8270
8272
  Skeleton: { role: "decorative", name: "none", state: [], decorative: true },
@@ -27540,6 +27542,9 @@ function assertSitePage(page) {
27540
27542
  if (!page || typeof page.id !== "string" || !PAGE_ID.test(page.id)) {
27541
27543
  throw new Error(`site page id ${JSON.stringify(page?.id)} must match ${PAGE_ID}`);
27542
27544
  }
27545
+ if (page.id.startsWith("drawer_")) {
27546
+ throw new Error(`site page id ${JSON.stringify(page.id)} must not start with "drawer_" (reserved for drawer and native rows)`);
27547
+ }
27543
27548
  if (siteScreenId(page) === SITE_PAGE_SCREEN_ID) {
27544
27549
  throw new Error(`site page id "page" is reserved for the ${SITE_PAGE_SCREEN_ID} fallback screen`);
27545
27550
  }
@@ -27562,13 +27567,17 @@ function assertSiteShellConfig(site) {
27562
27567
  seen.add(page.id);
27563
27568
  sitePageUrl(site.origin, page.path);
27564
27569
  }
27570
+ if (site.layout !== void 0 && !SITE_LAYOUTS.includes(site.layout)) {
27571
+ throw new Error(`site layout ${JSON.stringify(site.layout)} must be one of ${SITE_LAYOUTS.join(", ")}`);
27572
+ }
27565
27573
  if (!site.pages.some((page) => (page.placement ?? "tab") === "tab")) {
27566
27574
  throw new Error('a site shell needs at least one page with placement "tab"');
27567
27575
  }
27568
27576
  }
27569
- var SITE_SHELL_MAX_TABS, SITE_SCREEN_PREFIX, SITE_PAGE_SCREEN_ID, PAGE_ID;
27577
+ var SITE_LAYOUTS, SITE_SHELL_MAX_TABS, SITE_SCREEN_PREFIX, SITE_PAGE_SCREEN_ID, PAGE_ID;
27570
27578
  var init_site_shell = __esm({
27571
27579
  "../../core/ts/src/site-shell.ts"() {
27580
+ SITE_LAYOUTS = ["auto", "tabs", "drawer", "sidebar", "single"];
27572
27581
  SITE_SHELL_MAX_TABS = 4;
27573
27582
  SITE_SCREEN_PREFIX = "site_";
27574
27583
  SITE_PAGE_SCREEN_ID = "site_page";
@@ -31811,7 +31820,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31811
31820
  onChange: (e) => setLink({ ...link, text: e.currentTarget.value })
31812
31821
  }
31813
31822
  ),
31814
- link.error && /* @__PURE__ */ jsx4("div", { role: "alert", style: { color: C("danger", "#E62214"), fontSize: 13 }, children: link.error }),
31823
+ link.error && /* @__PURE__ */ jsx4("div", { role: "alert", style: { color: C("danger", "#E62214"), fontSize: pxToRem(13) }, children: link.error }),
31815
31824
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
31816
31825
  /* @__PURE__ */ jsx4("button", { type: "button", "data-component-id": `${id}/link_apply`, onClick: applyLink, children: "Apply" }),
31817
31826
  /* @__PURE__ */ jsx4("button", { type: "button", "data-component-id": `${id}/link_cancel`, onClick: () => setLink(null), children: "Cancel" })
@@ -31841,7 +31850,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31841
31850
  onChange: onPickFile
31842
31851
  }
31843
31852
  ),
31844
- uploadError && /* @__PURE__ */ jsx4("div", { role: "status", "data-component-id": `${id}/upload_error`, style: { padding: "6px 8px", color: C("danger", "#E62214"), fontSize: 13 }, children: "Couldn't add the image. Try again." }),
31853
+ uploadError && /* @__PURE__ */ jsx4("div", { role: "status", "data-component-id": `${id}/upload_error`, style: { padding: "6px 8px", color: C("danger", "#E62214"), fontSize: pxToRem(13) }, children: "Couldn't add the image. Try again." }),
31845
31854
  status === "loading" && /* @__PURE__ */ jsx4(
31846
31855
  "div",
31847
31856
  {
@@ -31849,7 +31858,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31849
31858
  role: "progressbar",
31850
31859
  "aria-label": "Loading editor",
31851
31860
  "aria-busy": "true",
31852
- style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "none", fontSize: 13, color: C("textSecondary", "#636B78") },
31861
+ style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "none", fontSize: pxToRem(13), color: C("textSecondary", "#636B78") },
31853
31862
  children: "Loading editor\u2026"
31854
31863
  }
31855
31864
  )
@@ -31862,6 +31871,7 @@ var init_richContentEditor = __esm({
31862
31871
  init_formBag();
31863
31872
  init_modifiers();
31864
31873
  init_bindings2();
31874
+ init_tokens2();
31865
31875
  init_protocol();
31866
31876
  init_paths3();
31867
31877
  init_host_session();
@@ -31994,7 +32004,7 @@ var init_controls = __esm({
31994
32004
  } : void 0;
31995
32005
  const rowStretch = ctx.rowStretch === true;
31996
32006
  return /* @__PURE__ */ jsxs2("div", { style: rowShareFloor({ display: "flex", alignItems: "center", justifyContent: "space-between", width: rowStretch ? "auto" : "100%", flex: rowStretch ? "1 1 0" : void 0, ...wrap }, rowStretch, "min-content"), children: [
31997
- props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, color: C("textPrimary", "#111") }, children: labelText(props.label, ctx) }),
32007
+ props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111") }, children: labelText(props.label, ctx) }),
31998
32008
  /* @__PURE__ */ jsx5(
31999
32009
  "button",
32000
32010
  {
@@ -32195,7 +32205,7 @@ var init_controls = __esm({
32195
32205
  style: { all: "unset", display: "inline-flex", alignItems: "center", gap: 10, cursor: fire ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, outlineOffset: 2, ...wrap },
32196
32206
  children: [
32197
32207
  box,
32198
- props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: labelText(props.label, ctx) })
32208
+ props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: labelText(props.label, ctx) })
32199
32209
  ]
32200
32210
  }
32201
32211
  );
@@ -32250,10 +32260,10 @@ var init_controls = __esm({
32250
32260
  "aria-selected": on3,
32251
32261
  tabIndex: on3 ? 0 : -1,
32252
32262
  onClick: () => select(i),
32253
- style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: 14, cursor: "pointer", color: on3 ? accentTextColor(ctx) : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${C("accentPrimary", "#116DFF")}` : "2px solid transparent", marginBottom: -1 },
32263
+ style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(14), cursor: "pointer", color: on3 ? accentTextColor(ctx) : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${C("accentPrimary", "#116DFF")}` : "2px solid transparent", marginBottom: -1 },
32254
32264
  children: [
32255
32265
  asText2(t.label),
32256
- t.badge && /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { fontSize: 10, fontWeight: 700, background: C("surfaceTertiary", "#eee"), color: C("textSecondary", "#666"), padding: "1px 6px", borderRadius: 999 }, children: t.badge })
32266
+ t.badge && /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { fontSize: pxToRem(10), fontWeight: 700, background: C("surfaceTertiary", "#eee"), color: C("textSecondary", "#666"), padding: "1px 6px", borderRadius: 999 }, children: t.badge })
32257
32267
  ]
32258
32268
  },
32259
32269
  t.id ?? i
@@ -32299,7 +32309,7 @@ var init_controls = __esm({
32299
32309
  "aria-checked": on3,
32300
32310
  tabIndex: on3 || selId == null && i === 0 ? 0 : -1,
32301
32311
  onClick: () => select(i),
32302
- style: { all: "unset", flex: 1, minWidth: 44, minHeight: seg.height - 2 * seg.trackPadding, textAlign: "center", padding: "7px 4px", borderRadius: outerR, fontFamily: FONT(ctx), fontWeight: 600, fontSize: 13, cursor: "pointer", boxSizing: "border-box", background: on3 ? C("surfacePrimary", "#fff") : seg.outlined ? C(pickRole(ctx.tokens.colors, seg.roles.inactive), "#eee") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 && !seg.outlined ? "0 1px 3px rgba(0,0,0,.12)" : "none", ...outlinedShape },
32312
+ style: { all: "unset", flex: 1, minWidth: 44, minHeight: seg.height - 2 * seg.trackPadding, textAlign: "center", padding: "7px 4px", borderRadius: outerR, fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(13), cursor: "pointer", boxSizing: "border-box", background: on3 ? C("surfacePrimary", "#fff") : seg.outlined ? C(pickRole(ctx.tokens.colors, seg.roles.inactive), "#eee") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 && !seg.outlined ? "0 1px 3px rgba(0,0,0,.12)" : "none", ...outlinedShape },
32303
32313
  children: [
32304
32314
  on3 && seg.selectedCheck ? /* @__PURE__ */ jsx5("span", { "aria-hidden": "true", children: "\u2713 " }) : null,
32305
32315
  asText2(o.label ?? o.title ?? o.id) || `Option ${i + 1}`
@@ -32330,8 +32340,8 @@ var init_controls = __esm({
32330
32340
  children: [
32331
32341
  /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { display: "inline-flex", alignItems: "center", transition: "transform .15s", transform: open ? "rotate(90deg)" : "none", color: C("textSecondary", "#888") }, children: iconSvg("chevron_right", { size: 16 }) }),
32332
32342
  /* @__PURE__ */ jsxs2("span", { style: { flex: 1, display: "flex", flexDirection: "column" }, children: [
32333
- /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(title) ?? "" }),
32334
- subtitle != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 13, color: C("textSecondary", "#888") }, children: asText2(subtitle) })
32343
+ /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(title) ?? "" }),
32344
+ subtitle != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888") }, children: asText2(subtitle) })
32335
32345
  ] })
32336
32346
  ]
32337
32347
  }
@@ -32464,6 +32474,7 @@ var PULL_THRESHOLD, SWIPE_OPEN, PullToRefreshList, SwipeRow, DISMISS_THRESHOLD,
32464
32474
  var init_listGestures = __esm({
32465
32475
  "../../core/web-renderer/src/listGestures.tsx"() {
32466
32476
  "use strict";
32477
+ init_tokens2();
32467
32478
  PULL_THRESHOLD = 56;
32468
32479
  SWIPE_OPEN = 76;
32469
32480
  PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label2 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children }) => {
@@ -32589,7 +32600,7 @@ var init_listGestures = __esm({
32589
32600
  cursor: "pointer",
32590
32601
  color: "#fff",
32591
32602
  fontWeight: 600,
32592
- fontSize: 13,
32603
+ fontSize: pxToRem(13),
32593
32604
  fontFamily,
32594
32605
  minWidth: SWIPE_OPEN,
32595
32606
  padding: "0 16px",
@@ -33663,7 +33674,7 @@ function hasInteractiveDescendant(node) {
33663
33674
  if (["MonthCalendar", "TimeGrid", "Agenda"].includes(nested.type) && (nested.props?.onSelect || nested.props?.onChange)) return true;
33664
33675
  if (nested.type === "ColorPicker" && nested.props?.onChange) return true;
33665
33676
  if (nested.type === "Fab" && nested.props?.onTap) return true;
33666
- const nestedModifierTap = nested.modifiers?.onTap ?? nested.modifiers?.on_tap;
33677
+ const nestedModifierTap = nested.modifiers?.onTap ?? nested.modifiers?.on_tap ?? nested.modifiers?.onDoubleTap ?? nested.modifiers?.on_double_tap;
33667
33678
  const nestedTapDisabled = nested.props?.disabled === true || nested.props?.loading === true || nested.modifiers?.disabled === true || nested.modifiers?.hitTestable === false || nested.modifiers?.hit_testable === false;
33668
33679
  if (nestedModifierTap && !nestedTapDisabled) return true;
33669
33680
  return Object.values(nested.props ?? {}).some(visit);
@@ -34245,7 +34256,7 @@ function actionTextButton(ctx, action, label2, color, extra) {
34245
34256
  {
34246
34257
  type: "button",
34247
34258
  onClick,
34248
- style: { display: "block", margin: 0, padding: 0, appearance: "none", WebkitAppearance: "none", background: "none", border: "none", textAlign: "left", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 13, color, cursor: onClick ? "pointer" : "default", ...extra },
34259
+ style: { display: "block", margin: 0, padding: 0, appearance: "none", WebkitAppearance: "none", background: "none", border: "none", textAlign: "left", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(13), color, cursor: onClick ? "pointer" : "default", ...extra },
34249
34260
  children: label2
34250
34261
  }
34251
34262
  );
@@ -34527,6 +34538,27 @@ function renderNodeInner(node, ctx) {
34527
34538
  const a11yHidden = extra["aria-hidden"] === "true";
34528
34539
  const tap = node?.modifiers?.onTap ?? node?.modifiers?.on_tap;
34529
34540
  const tapDisabled = normalize(node).props?.disabled === true || normalize(node).props?.loading === true || node?.modifiers?.disabled === true || node?.modifiers?.hitTestable === false || node?.modifiers?.hit_testable === false;
34541
+ const giveControlContract = (activate) => {
34542
+ if (a11yHidden || isNativeInteractiveElement(el) || hasInteractiveDescendant(node)) return;
34543
+ if (extra.role == null) {
34544
+ extra.role = "button";
34545
+ if (typeof el.type !== "string") extra[SYNTHETIC_TAP_ROLE] = true;
34546
+ }
34547
+ const defaultedTabIndex = extra.tabIndex == null || extra.tabIndex === -1 && extra[SYNTHETIC_TABINDEX] === true;
34548
+ if (defaultedTabIndex) {
34549
+ extra.tabIndex = 0;
34550
+ if (typeof el.type !== "string") extra[SYNTHETIC_TABINDEX] = true;
34551
+ }
34552
+ const prevOnKeyDown = el.props.onKeyDown;
34553
+ extra.onKeyDown = (e) => {
34554
+ prevOnKeyDown?.(e);
34555
+ if (e.defaultPrevented || e.target !== e.currentTarget || e.repeat) return;
34556
+ if (e.key !== "Enter" && e.key !== " ") return;
34557
+ e.preventDefault();
34558
+ e.stopPropagation();
34559
+ activate(e);
34560
+ };
34561
+ };
34530
34562
  if (tap && ctx.onAction && !tapDisabled) {
34531
34563
  const prevOnClick = el.props.onClick;
34532
34564
  extra.onClick = (e) => {
@@ -34534,27 +34566,10 @@ function renderNodeInner(node, ctx) {
34534
34566
  prevOnClick?.(e);
34535
34567
  ctx.onAction(resolveItemDeep2(tap, ctx));
34536
34568
  };
34537
- if (!a11yHidden && !isNativeInteractiveElement(el) && !hasInteractiveDescendant(node)) {
34538
- if (extra.role == null) {
34539
- extra.role = "button";
34540
- if (typeof el.type !== "string") extra[SYNTHETIC_TAP_ROLE] = true;
34541
- }
34542
- const defaultedTabIndex = extra.tabIndex == null || extra.tabIndex === -1 && extra[SYNTHETIC_TABINDEX] === true;
34543
- if (defaultedTabIndex) {
34544
- extra.tabIndex = 0;
34545
- if (typeof el.type !== "string") extra[SYNTHETIC_TABINDEX] = true;
34546
- }
34547
- const prevOnKeyDown = el.props.onKeyDown;
34548
- extra.onKeyDown = (e) => {
34549
- prevOnKeyDown?.(e);
34550
- if (e.defaultPrevented || e.target !== e.currentTarget || e.repeat) return;
34551
- if (e.key !== "Enter" && e.key !== " ") return;
34552
- e.preventDefault();
34553
- e.stopPropagation();
34554
- prevOnClick?.(e);
34555
- ctx.onAction(resolveItemDeep2(tap, ctx));
34556
- };
34557
- }
34569
+ giveControlContract((e) => {
34570
+ prevOnClick?.(e);
34571
+ ctx.onAction(resolveItemDeep2(tap, ctx));
34572
+ });
34558
34573
  ensurePressStyles();
34559
34574
  extra["data-himalaya-tap"] = "1";
34560
34575
  const idiomPressed = idiomPress(ctx, "tappable");
@@ -34566,6 +34581,16 @@ function renderNodeInner(node, ctx) {
34566
34581
  e.stopPropagation();
34567
34582
  ctx.onAction(resolveItemDeep2(dtap, ctx));
34568
34583
  };
34584
+ if (!tap && !tapDisabled) {
34585
+ giveControlContract(() => {
34586
+ ctx.onAction(resolveItemDeep2(dtap, ctx));
34587
+ });
34588
+ extra.onClick = (e) => {
34589
+ if (e.detail !== 0) return;
34590
+ e.stopPropagation();
34591
+ ctx.onAction(resolveItemDeep2(dtap, ctx));
34592
+ };
34593
+ }
34569
34594
  }
34570
34595
  const pf = node?.modifiers?.pressFeedback ?? node?.modifiers?.press_feedback;
34571
34596
  if (pf && pf !== "none" && !(ctx.reduceMotion() && (node?.modifiers?.respectReducedMotion ?? node?.modifiers?.respect_reduced_motion) !== false)) {
@@ -34896,7 +34921,7 @@ function renderInner(node, ctx) {
34896
34921
  ] });
34897
34922
  }
34898
34923
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 6, ...wrap }, children: [
34899
- !ctx.runtimeDegraded && /* @__PURE__ */ jsxs5("div", { style: { fontSize: 10, color: C("textSecondary", "#9aa2ad"), fontStyle: "italic" }, children: [
34924
+ !ctx.runtimeDegraded && /* @__PURE__ */ jsxs5("div", { style: { fontSize: pxToRem(10), color: C("textSecondary", "#9aa2ad"), fontStyle: "italic" }, children: [
34900
34925
  "dynamic list",
34901
34926
  itemsPath ? ` \xB7 ${itemsPath.replace(/^\$service:/, "")}` : ""
34902
34927
  ] }),
@@ -34935,8 +34960,8 @@ function renderInner(node, ctx) {
34935
34960
  case "EmptyState":
34936
34961
  return /* @__PURE__ */ jsxs5("div", { style: { textAlign: "center", width: "100%", padding: 12, boxSizing: "border-box", ...wrap }, children: [
34937
34962
  /* @__PURE__ */ jsx8("div", { style: { width: 46, height: 46, borderRadius: 13, background: C("surfaceTertiary", "#eee"), display: "grid", placeItems: "center", margin: "0 auto 12px", color: C("textSecondary", "#9aa2ad") }, children: iconSvg(props.icon, { size: 24 }) }),
34938
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 16, color: C("textPrimary", "#111") }, children: asBoundText(props.title, ctx) || "Empty" }),
34939
- props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#888"), marginTop: 3 }, children: txt(props.subtitle, ctx) }),
34963
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(16), color: C("textPrimary", "#111") }, children: asBoundText(props.title, ctx) || "Empty" }),
34964
+ props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888"), marginTop: 3 }, children: txt(props.subtitle, ctx) }),
34940
34965
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", accentTextColor(ctx), { margin: "12px auto 0", textAlign: "center" })
34941
34966
  ] });
34942
34967
  // ───────────── atoms ─────────────
@@ -34977,13 +35002,13 @@ function renderInner(node, ctx) {
34977
35002
  const badgeLabel = m?.accessibilityLabel ?? m?.accessibility_label;
34978
35003
  const badgeRole = roleDeclared ? void 0 : liveCount ? "status" : typeof badgeLabel === "string" && badgeLabel.trim() !== "" ? "img" : void 0;
34979
35004
  const fg = _bt ? c : sevTextColor(ctx, props.style ?? "info");
34980
- return /* @__PURE__ */ jsx8("span", { role: badgeRole, style: { display: "inline-flex", alignItems: "center", padding: "3px 9px", borderRadius: 999, fontSize: 12, fontWeight: 700, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 16%, ${C("surfacePrimary", "#fff")})`, color: fg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Badge" });
35005
+ return /* @__PURE__ */ jsx8("span", { role: badgeRole, style: { display: "inline-flex", alignItems: "center", padding: "3px 9px", borderRadius: 999, fontSize: pxToRem(12), fontWeight: 700, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 16%, ${C("surfacePrimary", "#fff")})`, color: fg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Badge" });
34981
35006
  }
34982
35007
  case "Tag": {
34983
35008
  const tagToken = boundTokenName(props.tokenPath, props.token, ctx);
34984
35009
  const c = C(tagToken ?? "accentPrimary", "#116DFF");
34985
35010
  const tagFg = tagToken ? c : accentTextColor(ctx);
34986
- return /* @__PURE__ */ jsx8("span", { style: { display: "inline-flex", alignItems: "center", padding: "5px 11px", borderRadius: 999, fontSize: 13, fontWeight: 600, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 14%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${c} 30%, transparent)`, color: tagFg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Tag" });
35011
+ return /* @__PURE__ */ jsx8("span", { style: { display: "inline-flex", alignItems: "center", padding: "5px 11px", borderRadius: 999, fontSize: pxToRem(13), fontWeight: 600, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 14%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${c} 30%, transparent)`, color: tagFg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Tag" });
34987
35012
  }
34988
35013
  case "ProgressBar":
34989
35014
  return /* @__PURE__ */ jsx8(ProgressBarNode, { props, ctx, wrap });
@@ -35015,7 +35040,7 @@ function renderInner(node, ctx) {
35015
35040
  } : void 0;
35016
35041
  const leadingEl = props.leading && /* @__PURE__ */ jsx8("div", { style: { flex: "none", display: "flex" }, children: renderNode(props.leading, ctx) });
35017
35042
  const textEl = /* @__PURE__ */ jsxs5("div", { style: { flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: 2 }, children: [
35018
- props.overline != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C(props.overlineColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.overline, ctx) }),
35043
+ props.overline != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C(props.overlineColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.overline, ctx) }),
35019
35044
  /* @__PURE__ */ jsx8("span", { style: { fontFamily: fontStack(titleF.family, ctx.idiom), fontSize: titleF.remSize, fontWeight: titleF.weight, color: C(props.titleColor ?? "textPrimary", "#13171e"), ...ell }, children: txt(props.title, ctx) ?? (ctx.empty ? "" : "") }),
35020
35045
  props.subtitle != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: fontStack(subF.family, ctx.idiom), fontSize: subF.remSize, color: C(props.subtitleColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.subtitle, ctx) })
35021
35046
  ] });
@@ -35039,7 +35064,7 @@ function renderInner(node, ctx) {
35039
35064
  // Menu popup renders inside this slot, menu-item clicks don't double-fire
35040
35065
  // the row either. Mirrors the Button node, which stops for the same reason.
35041
35066
  /* @__PURE__ */ jsx8("div", { onClick: (e) => e.stopPropagation(), style: { flex: "none", display: "flex", alignItems: "center" }, children: renderNode(props.trailing, ctx) })
35042
- ) : accessoryGlyph && /* @__PURE__ */ jsx8("span", { "aria-hidden": props.accessory === "chevron" ? true : void 0, style: { flex: "none", color: C("textTertiary", "#c0c4cc"), fontSize: 20, lineHeight: 1 }, children: accessoryGlyph })
35067
+ ) : accessoryGlyph && /* @__PURE__ */ jsx8("span", { "aria-hidden": props.accessory === "chevron" ? true : void 0, style: { flex: "none", color: C("textTertiary", "#c0c4cc"), fontSize: pxToRem(20), lineHeight: 1 }, children: accessoryGlyph })
35043
35068
  ] });
35044
35069
  }
35045
35070
  case "Slider":
@@ -35056,7 +35081,7 @@ function renderInner(node, ctx) {
35056
35081
  case "Tooltip": {
35057
35082
  const rich = props.title != null && props.title !== "";
35058
35083
  return /* @__PURE__ */ jsxs5("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "flex-start", gap: 6, ...wrap }, children: [
35059
- /* @__PURE__ */ jsxs5("div", { role: "tooltip", style: { maxWidth: 240, width: "fit-content", background: C("textPrimary", "#13171e"), color: C("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: 13, lineHeight: 1.35 }, children: [
35084
+ /* @__PURE__ */ jsxs5("div", { role: "tooltip", style: { maxWidth: 240, width: "fit-content", background: C("textPrimary", "#13171e"), color: C("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35 }, children: [
35060
35085
  rich && /* @__PURE__ */ jsx8("div", { style: { fontWeight: 700, marginBottom: 3 }, children: txt(props.title, ctx) }),
35061
35086
  txt(props.text, ctx)
35062
35087
  ] }),
@@ -35074,17 +35099,17 @@ function renderInner(node, ctx) {
35074
35099
  case "Section": {
35075
35100
  const inset = props.inset === true;
35076
35101
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", width: "100%", boxSizing: "border-box", ...wrap }, children: [
35077
- props.header != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C("textSecondary", "#888"), padding: inset ? "0 4px 6px" : "6px 16px" }, children: txt(props.header, ctx) }),
35102
+ props.header != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C("textSecondary", "#888"), padding: inset ? "0 4px 6px" : "6px 16px" }, children: txt(props.header, ctx) }),
35078
35103
  /* @__PURE__ */ jsx8("div", { style: inset ? { background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e8eaed")}`, borderRadius: 12, overflow: "hidden", padding: "2px 14px", boxSizing: "border-box" } : void 0, children: kids2(props.children, ctx) }),
35079
- props.footer != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888"), padding: inset ? "6px 4px 0" : "6px 16px" }, children: txt(props.footer, ctx) })
35104
+ props.footer != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888"), padding: inset ? "6px 4px 0" : "6px 16px" }, children: txt(props.footer, ctx) })
35080
35105
  ] });
35081
35106
  }
35082
35107
  case "DisclosureGroup":
35083
35108
  return /* @__PURE__ */ jsx8(DisclosureGroupNode, { props, ctx, wrap });
35084
35109
  case "LabeledContent": {
35085
35110
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 12, width: "100%", padding: "8px 2px", boxSizing: "border-box", ...wrap }, children: [
35086
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) ?? "" }),
35087
- props.content ? /* @__PURE__ */ jsx8("div", { style: { flex: "none" }, children: renderNode(props.content, ctx) }) : /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textSecondary", "#636b78"), textAlign: "right" }, children: txt(props.value, ctx) })
35111
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) ?? "" }),
35112
+ props.content ? /* @__PURE__ */ jsx8("div", { style: { flex: "none" }, children: renderNode(props.content, ctx) }) : /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textSecondary", "#636b78"), textAlign: "right" }, children: txt(props.value, ctx) })
35088
35113
  ] });
35089
35114
  }
35090
35115
  case "Label": {
@@ -35155,7 +35180,7 @@ function renderInner(node, ctx) {
35155
35180
  const onClick = ctx.onAction && props.action ? () => ctx.onAction(resolveItemDeep2(props.action, ctx)) : void 0;
35156
35181
  return /* @__PURE__ */ jsxs5("div", { onClick, style: { display: "inline-flex", alignItems: "center", justifyContent: "center", gap: extended ? 10 : 0, height: dim, width: extended ? void 0 : dim, padding: extended ? "0 20px" : 0, borderRadius: extended ? dim / 2 : "50%", background: bg, color: fg, boxShadow: "0 4px 12px rgba(0,0,0,.22)", cursor: onClick ? "pointer" : "default", ...wrap }, children: [
35157
35182
  props.icon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: isz, height: isz }, children: iconSvg(props.icon, { size: isz, color: fg }) }),
35158
- extended && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15 }, children: txt(props.label, ctx) })
35183
+ extended && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15) }, children: txt(props.label, ctx) })
35159
35184
  ] });
35160
35185
  }
35161
35186
  case "Map":
@@ -35211,13 +35236,13 @@ function renderInner(node, ctx) {
35211
35236
  const fieldLabel = asBoundText(props.label, ctx);
35212
35237
  const showOwnError = !isTextKind && props.errorMessage;
35213
35238
  return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", ...wrap }, children: [
35214
- (fieldLabel || props.required) && /* @__PURE__ */ jsxs5("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 13, color: C("textPrimary", "#111"), marginBottom: 6 }, children: [
35239
+ (fieldLabel || props.required) && /* @__PURE__ */ jsxs5("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(13), color: C("textPrimary", "#111"), marginBottom: 6 }, children: [
35215
35240
  fieldLabel,
35216
35241
  props.required && /* @__PURE__ */ jsx8("span", { style: { color: C("danger", "#e62214") }, children: " *" })
35217
35242
  ] }),
35218
35243
  renderNode(inner, ctx),
35219
- props.helpText && /* @__PURE__ */ jsx8("div", { style: { fontSize: 12, color: C("textSecondary", "#888"), marginTop: 4 }, children: txt(props.helpText, ctx) }),
35220
- showOwnError && /* @__PURE__ */ jsx8("div", { role: "alert", style: { fontSize: 12, color: C("danger", "#E62214"), marginTop: 4 }, children: txt(props.errorMessage, ctx) })
35244
+ props.helpText && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(12), color: C("textSecondary", "#888"), marginTop: 4 }, children: txt(props.helpText, ctx) }),
35245
+ showOwnError && /* @__PURE__ */ jsx8("div", { role: "alert", style: { fontSize: pxToRem(12), color: C("danger", "#E62214"), marginTop: 4 }, children: txt(props.errorMessage, ctx) })
35221
35246
  ] });
35222
35247
  }
35223
35248
  case "FieldError":
@@ -35231,8 +35256,8 @@ function renderInner(node, ctx) {
35231
35256
  const branch = isNodeLike(props.data) ? "data" : isNodeLike(props.loading) ? "loading" : isNodeLike(props.error) ? "error" : null;
35232
35257
  const cfg = !branch ? props.state === "error" ? props.error ?? props.empty : props.empty ?? props.error : null;
35233
35258
  return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: 6, width: "100%", ...wrap }, children: branch ? renderNode(props[branch], ctx) : cfg && typeof cfg === "object" ? /* @__PURE__ */ jsxs5("div", { style: { textAlign: "center", padding: "24px 12px", color: C("textSecondary", "#9aa2ad") }, children: [
35234
- cfg.title && /* @__PURE__ */ jsx8("div", { style: { fontSize: 15, fontWeight: 600, color: C("textPrimary", "#111") }, children: asText2(cfg.title) }),
35235
- (cfg.subtitle ?? cfg.message) && /* @__PURE__ */ jsx8("div", { style: { fontSize: 13, marginTop: 4 }, children: asText2(cfg.subtitle ?? cfg.message) }),
35259
+ cfg.title && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#111") }, children: asText2(cfg.title) }),
35260
+ (cfg.subtitle ?? cfg.message) && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(13), marginTop: 4 }, children: asText2(cfg.subtitle ?? cfg.message) }),
35236
35261
  actionTextButton(ctx, cfg.retry ?? cfg.action, asText2(cfg.retryLabel) || asText2(cfg.actionLabel) || (cfg.retry != null ? "Retry" : "Take action"), accentTextColor(ctx), { margin: "12px auto 0", textAlign: "center" })
35237
35262
  ] }) : null });
35238
35263
  }
@@ -35286,15 +35311,15 @@ function renderInner(node, ctx) {
35286
35311
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 11, width: "100%", boxSizing: "border-box", borderRadius: ctx.radius("md", 10), padding: 13, background: `color-mix(in srgb, ${accent} 12%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${accent} 32%, transparent)`, ...wrap }, children: [
35287
35312
  /* @__PURE__ */ jsx8("div", { style: { width: 3, borderRadius: 3, background: accent, flex: "none" } }),
35288
35313
  /* @__PURE__ */ jsxs5("div", { children: [
35289
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 14, color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35290
- props.message && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, lineHeight: 1.4, color: C("textSecondary", "#666"), marginTop: 2 }, children: txt(props.message, ctx) }),
35314
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(14), color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35315
+ props.message && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.4, color: C("textSecondary", "#666"), marginTop: 2 }, children: txt(props.message, ctx) }),
35291
35316
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", C("textPrimary", "#111"), { marginTop: 7, textDecoration: "underline" })
35292
35317
  ] })
35293
35318
  ] });
35294
35319
  }
35295
35320
  case "Snackbar": {
35296
35321
  const dot = sevColor(ctx, props.severity ?? "info");
35297
- return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10, background: "#1c1f26", color: "#fff", borderRadius: ctx.radius("md", 10), padding: "12px 14px", width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: 14, ...wrap }, children: [
35322
+ return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10, background: "#1c1f26", color: "#fff", borderRadius: ctx.radius("md", 10), padding: "12px 14px", width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(14), ...wrap }, children: [
35298
35323
  /* @__PURE__ */ jsx8("span", { style: { width: 18, height: 18, borderRadius: "50%", background: dot, display: "grid", placeItems: "center", fontSize: 11, flex: "none" }, children: "\u2713" }),
35299
35324
  /* @__PURE__ */ jsx8("span", { style: { flex: 1, minWidth: 0 }, children: txt(props.message, ctx) }),
35300
35325
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", "#fff", { flex: "none", textDecoration: "underline" })
@@ -35310,11 +35335,11 @@ function renderInner(node, ctx) {
35310
35335
  // draws as its own modal dialog.
35311
35336
  case "AlertDialog":
35312
35337
  return /* @__PURE__ */ jsxs5("div", { role: "alertdialog", "aria-label": props.title != null ? asBoundText(props.title, ctx) : "Alert", style: { background: C("surfacePrimary", "#fff"), borderRadius: ctx.radius("lg", 14), padding: 18, width: "100%", boxSizing: "border-box", border: `1px solid ${C("border", "#e3e3e3")}`, boxShadow: "0 12px 30px -12px rgba(0,0,0,.4)", ...wrap }, children: [
35313
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 17, color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35314
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 14, lineHeight: 1.45, color: C("textSecondary", "#666"), margin: "6px 0 16px" }, children: txt(props.message, ctx) }),
35338
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(17), color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35339
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(14), lineHeight: 1.45, color: C("textSecondary", "#666"), margin: "6px 0 16px" }, children: txt(props.message, ctx) }),
35315
35340
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 10 }, children: [
35316
- props.cancelAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.cancelAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15, background: C("surfaceTertiary", "#eee"), color: C("textPrimary", "#111"), cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.cancelLabel, ctx) || "Cancel" }),
35317
- props.confirmAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.confirmAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15, background: props.destructive ? C("danger", "#E62214") : C("accentPrimary", "#116DFF"), color: "#fff", cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.confirmLabel, ctx) || (props.destructive ? "Delete" : "Confirm") })
35341
+ props.cancelAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.cancelAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15), background: C("surfaceTertiary", "#eee"), color: C("textPrimary", "#111"), cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.cancelLabel, ctx) || "Cancel" }),
35342
+ props.confirmAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.confirmAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15), background: props.destructive ? C("danger", "#E62214") : C("accentPrimary", "#116DFF"), color: "#fff", cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.confirmLabel, ctx) || (props.destructive ? "Delete" : "Confirm") })
35318
35343
  ] })
35319
35344
  ] });
35320
35345
  // ───────────── embeddable WebView ─────────────
@@ -35326,13 +35351,13 @@ function renderInner(node, ctx) {
35326
35351
  if (intent) return /* @__PURE__ */ jsx8("div", { style: { alignSelf: "stretch", ...wrap }, children: intent(props, ctx) });
35327
35352
  const childKeys = Object.entries(props).filter(([, v]) => isNodeLike(v) || Array.isArray(v) && v.some(isNodeLike));
35328
35353
  return /* @__PURE__ */ jsxs5("div", { "data-unknown-type": type, style: { display: "flex", flexDirection: "column", gap: 6, padding: 6, border: `1px dashed ${C("border", "#c5cdd6")}`, borderRadius: 6, ...wrap }, children: [
35329
- /* @__PURE__ */ jsx8("div", { style: { alignSelf: "flex-start", fontSize: 9, fontWeight: 700, letterSpacing: 0.4, padding: "1px 6px", borderRadius: 999, background: C("surfaceTertiary", "#f0f0f3"), color: C("textSecondary", "#9aa2ad"), fontFamily: "ui-monospace, monospace" }, children: type }),
35354
+ /* @__PURE__ */ jsx8("div", { style: { alignSelf: "flex-start", fontSize: pxToRem(9), fontWeight: 700, letterSpacing: 0.4, padding: "1px 6px", borderRadius: 999, background: C("surfaceTertiary", "#f0f0f3"), color: C("textSecondary", "#9aa2ad"), fontFamily: "ui-monospace, monospace" }, children: type }),
35330
35355
  childKeys.map(([k, v]) => /* @__PURE__ */ jsx8(React7.Fragment, { children: Array.isArray(v) ? kids2(v.filter(isNodeLike), ctx) : renderNode(v, ctx) }, k))
35331
35356
  ] });
35332
35357
  }
35333
35358
  }
35334
35359
  }
35335
- var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
35360
+ var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
35336
35361
  var init_renderNode = __esm({
35337
35362
  "../../core/web-renderer/src/renderNode.tsx"() {
35338
35363
  "use strict";
@@ -35877,7 +35902,7 @@ var init_renderNode = __esm({
35877
35902
  e.preventDefault();
35878
35903
  submit();
35879
35904
  };
35880
- const inputBase = { flex: 1, minWidth: 0, minHeight: multilineBox ? 44 : void 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: multilineBox ? 0 : "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e"), resize: "none" };
35905
+ const inputBase = { flex: 1, minWidth: 0, minHeight: multilineBox ? 44 : void 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: multilineBox ? 0 : "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e"), resize: "none" };
35881
35906
  const accIcon = (name) => /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, flex: "none" }, children: iconSvg(name, { size: 17, color: muted }) });
35882
35907
  const box = borderless ? { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", ...wrap } : { display: "flex", alignItems: "center", gap: 8, width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${errored ? C("danger", "#E62214") : C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: multilineBox ? "11px 14px" : "0 14px", boxSizing: "border-box", minHeight: multilineBox ? 48 : 44, ...wrap };
35883
35908
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 4, width: "100%" }, children: [
@@ -35892,7 +35917,7 @@ var init_renderNode = __esm({
35892
35917
  }, style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, borderRadius: "50%", background: C("surfaceTertiary", "#e3e6ea"), color: muted, fontSize: 12, flex: "none", cursor: "pointer" }, children: "\xD7" }),
35893
35918
  props.trailingIcon && accIcon(props.trailingIcon)
35894
35919
  ] }),
35895
- revealed ? /* @__PURE__ */ jsx8("span", { id: errorId, role: "alert", style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("danger", "#E62214"), paddingLeft: 2 }, children: message }) : (props.helperText ?? cfg.helperText) != null ? /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: errored ? C("danger", "#E62214") : muted, paddingLeft: 2 }, children: txt(props.helperText ?? cfg.helperText, ctx) }) : null
35920
+ revealed ? /* @__PURE__ */ jsx8("span", { id: errorId, role: "alert", style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("danger", "#E62214"), paddingLeft: 2 }, children: message }) : (props.helperText ?? cfg.helperText) != null ? /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: errored ? C("danger", "#E62214") : muted, paddingLeft: 2 }, children: txt(props.helperText ?? cfg.helperText, ctx) }) : null
35896
35921
  ] });
35897
35922
  };
35898
35923
  MenuNode = withExtras("MenuNode", ({ props, ctx, wrap }) => {
@@ -36005,7 +36030,7 @@ var init_renderNode = __esm({
36005
36030
  setOpen(false);
36006
36031
  ctx.onAction(resolveItemDeep2(it.action, ctx));
36007
36032
  } : void 0,
36008
- style: { display: "flex", alignItems: "center", gap: 10, padding: "9px 10px", borderRadius: 8, cursor: it?.disabled ? "default" : "pointer", opacity: it?.disabled ? 0.4 : 1, color: it?.destructive ? C("danger", "#E62214") : C("textPrimary", "#13171e"), fontFamily: bodyFont(ctx), fontSize: 15 },
36033
+ style: { display: "flex", alignItems: "center", gap: 10, padding: "9px 10px", borderRadius: 8, cursor: it?.disabled ? "default" : "pointer", opacity: it?.disabled ? 0.4 : 1, color: it?.destructive ? C("danger", "#E62214") : C("textPrimary", "#13171e"), fontFamily: bodyFont(ctx), fontSize: pxToRem(15) },
36009
36034
  children: [
36010
36035
  it?.icon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 20, height: 20 }, children: iconSvg(it.icon, { size: 18, color: it?.destructive ? C("danger", "#E62214") : C("textSecondary", "#636b78") }) }),
36011
36036
  /* @__PURE__ */ jsx8("span", { children: asText2(it?.label) || "Item" })
@@ -36048,7 +36073,7 @@ var init_renderNode = __esm({
36048
36073
  if (props.visible === false) return null;
36049
36074
  if (isBoundText && !text8) return null;
36050
36075
  const c = (props.severity ?? "error") === "warning" ? C("warning", "#E89F00") : C("danger", "#E62214");
36051
- return /* @__PURE__ */ jsxs5("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c, fontSize: 13, fontFamily: bodyFont(ctx), ...wrap }, children: [
36076
+ return /* @__PURE__ */ jsxs5("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c, fontSize: pxToRem(13), fontFamily: bodyFont(ctx), ...wrap }, children: [
36052
36077
  /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", children: "\u26A0" }),
36053
36078
  text8
36054
36079
  ] });
@@ -36448,15 +36473,15 @@ var init_renderNode = __esm({
36448
36473
  return `${Math.floor(safe / 60)}:${String(Math.floor(safe % 60)).padStart(2, "0")}`;
36449
36474
  };
36450
36475
  const builtInControls = /* @__PURE__ */ jsxs5("div", { "data-media-controls": "builtIn", style: { display: "grid", gridTemplateColumns: "auto auto 1fr auto auto", gap: 10, alignItems: "center", width: "100%", padding: "10px 12px", boxSizing: "border-box", color: foreground, background: "linear-gradient(transparent,rgba(0,0,0,.82))" }, children: [
36451
- items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Previous", onClick: () => select(index - 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u25C0\u25C0" }),
36476
+ items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Previous", onClick: () => select(index - 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u25C0\u25C0" }),
36452
36477
  /* @__PURE__ */ jsx8("button", { "aria-label": status === "playing" ? "Pause" : "Play", onClick: () => status === "playing" ? pause() : void play(), style: { width: 38, height: 38, borderRadius: "50%", color: background, background: foreground, border: 0, fontSize: 18 }, children: status === "playing" ? "\u275A\u275A" : "\u25B6" }),
36453
36478
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 8, minWidth: 0 }, children: [
36454
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 11, whiteSpace: "nowrap" }, children: time(position) }),
36479
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(11), whiteSpace: "nowrap" }, children: time(position) }),
36455
36480
  /* @__PURE__ */ jsx8("input", { "aria-label": "Media position", type: "range", min: 0, max: Math.max(duration2, 1), step: 0.1, value: Math.min(position, Math.max(duration2, 1)), onChange: (event) => seek(Number(event.currentTarget.value)), style: { width: "100%", accentColor: accent } }),
36456
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 11, whiteSpace: "nowrap" }, children: time(duration2) })
36481
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(11), whiteSpace: "nowrap" }, children: time(duration2) })
36457
36482
  ] }),
36458
- items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Next", onClick: () => select(index + 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u25B6\u25B6" }),
36459
- props.fullscreen !== "disabled" && /* @__PURE__ */ jsx8("button", { "aria-label": "Fullscreen", onClick: () => void toggleFullscreen(), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u26F6" })
36483
+ items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Next", onClick: () => select(index + 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u25B6\u25B6" }),
36484
+ props.fullscreen !== "disabled" && /* @__PURE__ */ jsx8("button", { "aria-label": "Fullscreen", onClick: () => void toggleFullscreen(), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u26F6" })
36460
36485
  ] });
36461
36486
  const customControls = chrome === "custom" ? slot("controls") : null;
36462
36487
  const showBuiltIn = chrome === "builtIn";
@@ -36515,7 +36540,7 @@ var init_renderNode = __esm({
36515
36540
  slot("audioBackground"),
36516
36541
  isUnsupportedProvider ? /* @__PURE__ */ jsxs5("div", { role: "status", style: { flex: 1, minHeight: 0, display: "grid", placeItems: "center", gap: 8, padding: 24, textAlign: "center", background: "#17191f", color: foreground }, children: [
36517
36542
  /* @__PURE__ */ jsx8("div", { style: { fontWeight: 700 }, children: "Provider playback unavailable" }),
36518
- /* @__PURE__ */ jsxs5("div", { style: { opacity: 0.75, fontSize: 13 }, children: [
36543
+ /* @__PURE__ */ jsxs5("div", { style: { opacity: 0.75, fontSize: pxToRem(13) }, children: [
36519
36544
  "This course uses an unsupported provider adapter: ",
36520
36545
  provider,
36521
36546
  "."
@@ -36653,7 +36678,7 @@ var init_renderNode = __esm({
36653
36678
  const bandColor = typeof props.coverBandColor === "string" && props.coverBandColor.length > 0 ? props.coverBandColor : void 0;
36654
36679
  return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", position: "relative", ...bandColor ? { background: bandColor, borderRadius: ctx.radius("md", 8), overflow: "hidden" } : {}, ...wrap }, children: [
36655
36680
  bandColor ? /* @__PURE__ */ jsx8("div", { "data-testid": "webview-cover-band", style: { height: 8, background: bandColor } }) : null,
36656
- htmlStr ? /* @__PURE__ */ jsx8("iframe", { title: "webview", srcDoc: htmlStr, sandbox: "allow-scripts", style: frameStyle }) : urlFrame ? /* @__PURE__ */ jsx8("iframe", { title: "webview", src: urlFrame.src, sandbox: urlFrame.sandbox, style: frameStyle }) : /* @__PURE__ */ jsx8("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: 11, border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" })
36681
+ htmlStr ? /* @__PURE__ */ jsx8("iframe", { title: "webview", srcDoc: htmlStr, sandbox: "allow-scripts", style: frameStyle }) : urlFrame ? /* @__PURE__ */ jsx8("iframe", { title: "webview", src: urlFrame.src, sandbox: urlFrame.sandbox, style: frameStyle }) : /* @__PURE__ */ jsx8("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" })
36657
36682
  ] });
36658
36683
  });
36659
36684
  InteractivePicker = withExtras("InteractivePicker", ({ props, ctx, wrap }) => {
@@ -36684,7 +36709,7 @@ var init_renderNode = __esm({
36684
36709
  const staticSel = ctx.empty ? null : selectedId;
36685
36710
  return /* @__PURE__ */ jsx8("div", { style: { display: "flex", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 8), padding: 3, width: "100%", boxSizing: "border-box", ...wrap }, children: opts.map((o, i) => {
36686
36711
  const on3 = o.id === staticSel;
36687
- return /* @__PURE__ */ jsx8("span", { style: { flex: 1, textAlign: "center", padding: "8px 4px", borderRadius: ctx.radius("sm", 6), fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 14, background: on3 ? C("surfacePrimary", "#fff") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 ? "0 1px 3px rgba(0,0,0,.12)" : "none" }, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i);
36712
+ return /* @__PURE__ */ jsx8("span", { style: { flex: 1, textAlign: "center", padding: "8px 4px", borderRadius: ctx.radius("sm", 6), fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(14), background: on3 ? C("surfacePrimary", "#fff") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 ? "0 1px 3px rgba(0,0,0,.12)" : "none" }, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i);
36688
36713
  }) });
36689
36714
  }
36690
36715
  const emit = (id) => {
@@ -36699,7 +36724,7 @@ var init_renderNode = __esm({
36699
36724
  value: sel,
36700
36725
  onChange: (e) => emit(e.currentTarget.value),
36701
36726
  "aria-label": String(placeholderText || "Select"),
36702
- style: { width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "11px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap },
36727
+ style: { width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "11px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap },
36703
36728
  children: [
36704
36729
  props.placeholder && /* @__PURE__ */ jsx8("option", { value: "", disabled: true, children: placeholderText }),
36705
36730
  opts.map((o, i) => /* @__PURE__ */ jsx8("option", { value: o.id, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i))
@@ -36751,9 +36776,9 @@ var init_renderNode = __esm({
36751
36776
  const d = new Date(props.valueUnix * 1e3);
36752
36777
  label2 = timeMode ? d.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
36753
36778
  }
36754
- return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap }, children: [
36779
+ return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap }, children: [
36755
36780
  /* @__PURE__ */ jsx8("span", { children: label2 }),
36756
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 18 }, children: "\u{1F4C5}" })
36781
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(18) }, children: "\u{1F4C5}" })
36757
36782
  ] });
36758
36783
  }
36759
36784
  const onChange = props.onChange;
@@ -36781,7 +36806,7 @@ var init_renderNode = __esm({
36781
36806
  value: val,
36782
36807
  onChange: (e) => emit(e.currentTarget.value),
36783
36808
  "aria-label": timeMode ? "Select time" : "Select date",
36784
- style: { width: "100%", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap }
36809
+ style: { width: "100%", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap }
36785
36810
  }
36786
36811
  );
36787
36812
  });
@@ -36793,7 +36818,7 @@ var init_renderNode = __esm({
36793
36818
  /* @__PURE__ */ jsx8("circle", { cx: "11", cy: "11", r: "7" }),
36794
36819
  /* @__PURE__ */ jsx8("path", { d: "m21 21-4.3-4.3" })
36795
36820
  ] });
36796
- const box = { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 10), padding: "0 14px", minHeight: 44, color: muted, fontFamily: bodyFont(ctx), fontSize: 15, ...wrap };
36821
+ const box = { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 10), padding: "0 14px", minHeight: 44, color: muted, fontFamily: bodyFont(ctx), fontSize: pxToRem(15), ...wrap };
36797
36822
  if (!ctx.onAction) {
36798
36823
  return /* @__PURE__ */ jsxs5("div", { style: box, children: [
36799
36824
  icon,
@@ -36836,7 +36861,7 @@ var init_renderNode = __esm({
36836
36861
  },
36837
36862
  placeholder: String(placeholderText || "Search\u2026"),
36838
36863
  "aria-label": String(placeholderText || "Search"),
36839
- style: { flex: 1, minWidth: 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }
36864
+ style: { flex: 1, minWidth: 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }
36840
36865
  }
36841
36866
  ),
36842
36867
  local && /* @__PURE__ */ jsx8("span", { onClick: () => onInput(""), style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, borderRadius: "50%", background: C("surfaceTertiary", "#e3e6ea"), color: muted, fontSize: 12, flex: "none", cursor: "pointer" }, children: "\xD7" })
@@ -36913,7 +36938,7 @@ var init_renderNode = __esm({
36913
36938
  background: C("surfacePrimary", "#fff"),
36914
36939
  display: "grid",
36915
36940
  placeItems: "center",
36916
- fontSize: 18,
36941
+ fontSize: pxToRem(18),
36917
36942
  color: accentTextColor(ctx),
36918
36943
  // #3275 — a glyph on a neutral key
36919
36944
  border: `1px solid ${C("border", "#e3e3e3")}`,
@@ -36931,20 +36956,20 @@ var init_renderNode = __esm({
36931
36956
  if (ctx.empty) {
36932
36957
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36933
36958
  /* @__PURE__ */ jsx8("span", { style: btn("min"), children: "\u2212" }),
36934
- /* @__PURE__ */ jsx8("b", { ...valueA11y, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
36959
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
36935
36960
  /* @__PURE__ */ jsx8("span", { style: btn("max"), children: "+" })
36936
36961
  ] });
36937
36962
  }
36938
36963
  if (!ctx.onAction) {
36939
36964
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36940
36965
  /* @__PURE__ */ jsx8("span", { style: btn("min"), children: "\u2212" }),
36941
- /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, "aria-readonly": "true", style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
36966
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, "aria-readonly": "true", style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
36942
36967
  /* @__PURE__ */ jsx8("span", { style: btn("max"), children: "+" })
36943
36968
  ] });
36944
36969
  }
36945
36970
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36946
36971
  /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Decrease", disabled: disabled("min"), onClick: () => press(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
36947
- /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, tabIndex: 0, onKeyDown: onValueKeyDown, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
36972
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, tabIndex: 0, onKeyDown: onValueKeyDown, style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
36948
36973
  /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Increase", disabled: disabled("max"), onClick: () => press(step), style: { ...btn("max"), font: "inherit" }, children: "+" }),
36949
36974
  /* @__PURE__ */ jsx8("span", { "aria-live": "polite", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }, children: pressed.text + (pressed.count % 2 ? "\xA0" : "") })
36950
36975
  ] });
@@ -37148,7 +37173,7 @@ var init_renderNode = __esm({
37148
37173
  const side2 = typeof w === "number" ? w : 40;
37149
37174
  return /* @__PURE__ */ jsx8("div", { style: { width: side2, height: side2, borderRadius: "50%", background: ph ?? C("surfaceTertiary", "#e6e6e6"), display: "grid", placeItems: "center", flex: "none", ...wrap }, children: iconSvg(props.icon, { size: Math.max(14, Math.round(side2 * 0.5)), color: accentTextColor(ctx) }) });
37150
37175
  }
37151
- return /* @__PURE__ */ jsx8("div", { style: { width: w, height: boxHeight, aspectRatio: ar, borderRadius: r, background: ph ?? (hasSource ? `linear-gradient(135deg, ${C("surfaceTertiary", "#e6e6e6")}, ${C("surfaceSecondary", "#f2f2f2")})` : "transparent"), color: C("textSecondary", "#999"), display: "flex", alignItems: "center", justifyContent: "center", fontFamily: "ui-monospace, monospace", fontSize: 11, flex: "none", ...wrap }, children: banner || !hasSource ? "" : "\u2022" });
37176
+ return /* @__PURE__ */ jsx8("div", { style: { width: w, height: boxHeight, aspectRatio: ar, borderRadius: r, background: ph ?? (hasSource ? `linear-gradient(135deg, ${C("surfaceTertiary", "#e6e6e6")}, ${C("surfaceSecondary", "#f2f2f2")})` : "transparent"), color: C("textSecondary", "#999"), display: "flex", alignItems: "center", justifyContent: "center", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), flex: "none", ...wrap }, children: banner || !hasSource ? "" : "\u2022" });
37152
37177
  });
37153
37178
  ANIMATION_LEAF = { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [SELF_RENDERED_LEAF]: true, [ROLE_WHEN_NAMED]: "img" };
37154
37179
  LottieNode = withExtras("LottieNode", ({ props, ctx, wrap }) => {
@@ -37343,6 +37368,7 @@ var init_renderNode = __esm({
37343
37368
  };
37344
37369
  return /* @__PURE__ */ jsx8("div", { ...a11y, style: { width: "100%", height: 6, borderRadius: 999, background: C(boundTokenName(props.trackColorPath, props.trackColor, ctx) ?? "surfaceTertiary", "#eee"), overflow: "hidden", ...wrap }, children: /* @__PURE__ */ jsx8("div", { style: { width: `${Math.round((p ?? 0.4) * 100)}%`, height: "100%", borderRadius: 999, background: C(boundTokenName(props.tintPath, props.tint, ctx) ?? "accentPrimary", "#116DFF"), opacity: p == null ? 0.45 : 1, ...animatedFill ? { transition: ctx.motionTransition(ctx.kit?.motion) } : {} } }) });
37345
37370
  });
37371
+ ACTIVITY_DEFAULT_NAME = "Loading";
37346
37372
  ActivityIndicatorNode = withExtras("ActivityIndicatorNode", ({ props, ctx, wrap }) => {
37347
37373
  const C = ctx.color;
37348
37374
  const size = props.size ?? 24;
@@ -37357,10 +37383,10 @@ var init_renderNode = __esm({
37357
37383
  const pct = Math.max(0, Math.min(1, aiNum));
37358
37384
  const ringMask = `radial-gradient(farthest-side, transparent calc(100% - ${thick}px), #000 calc(100% - ${thick}px))`;
37359
37385
  const a11y = { "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(pct * 100) };
37360
- return /* @__PURE__ */ jsx8("div", { role: "progressbar", ...a11y, style: { width: size, height: size, borderRadius: "50%", flex: "none", background: `conic-gradient(${tint} ${pct * 360}deg, ${track} 0deg)`, WebkitMask: ringMask, mask: ringMask, ...wrap } });
37386
+ return /* @__PURE__ */ jsx8("div", { role: "progressbar", "aria-label": ACTIVITY_DEFAULT_NAME, ...a11y, style: { width: size, height: size, borderRadius: "50%", flex: "none", background: `conic-gradient(${tint} ${pct * 360}deg, ${track} 0deg)`, WebkitMask: ringMask, mask: ringMask, ...wrap } });
37361
37387
  }
37362
37388
  ensureSpinKeyframes();
37363
- return /* @__PURE__ */ jsx8("div", { role: "progressbar", style: { width: size, height: size, borderRadius: "50%", border: `${thick}px solid ${track}`, borderTopColor: tint, boxSizing: "border-box", flex: "none", animation: ctx.empty ? void 0 : "himalaya-spin 0.8s linear infinite", ...wrap } });
37389
+ return /* @__PURE__ */ jsx8("div", { role: "status", "aria-busy": "true", "aria-label": ACTIVITY_DEFAULT_NAME, style: { width: size, height: size, borderRadius: "50%", border: `${thick}px solid ${track}`, borderTopColor: tint, boxSizing: "border-box", flex: "none", animation: ctx.empty ? void 0 : "himalaya-spin 0.8s linear infinite", ...wrap } });
37364
37390
  });
37365
37391
  NATIVELY_TABBABLE = 'a[href], area[href], button, input:not([type="hidden"]), select, textarea, iframe, object, embed, audio[controls], video[controls], summary, [contenteditable]:not([contenteditable="false"]), [tabindex]';
37366
37392
  BottomSheetNode = withExtras("BottomSheetNode", ({ props, ctx, wrap }) => {
@@ -37444,11 +37470,11 @@ var init_renderNode = __esm({
37444
37470
  const raw = props.valuesPath != null ? bound : props.values;
37445
37471
  const values = Array.isArray(raw) ? raw : [];
37446
37472
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexWrap: "wrap", alignItems: "center", gap: 6, width: "100%", minHeight: 44, padding: "8px 10px", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), opacity: props.disabled ? 0.5 : 1, ...wrap }, children: [
37447
- values.map((v, i) => /* @__PURE__ */ jsxs5("span", { style: { display: "inline-flex", alignItems: "center", gap: 5, padding: "4px 9px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: 13, background: C("surfaceTertiary", "#eef0f3"), color: C("textPrimary", "#13171e") }, children: [
37473
+ values.map((v, i) => /* @__PURE__ */ jsxs5("span", { style: { display: "inline-flex", alignItems: "center", gap: 5, padding: "4px 9px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: pxToRem(13), background: C("surfaceTertiary", "#eef0f3"), color: C("textPrimary", "#13171e") }, children: [
37448
37474
  asText2(v),
37449
- /* @__PURE__ */ jsx8("span", { onClick: ctx.onAction && props.onRemove ? () => ctx.onAction(resolveItemDeep2(props.onRemove, ctx)) : void 0, style: { opacity: 0.6, cursor: "pointer", fontSize: 13 }, children: "\xD7" })
37475
+ /* @__PURE__ */ jsx8("span", { onClick: ctx.onAction && props.onRemove ? () => ctx.onAction(resolveItemDeep2(props.onRemove, ctx)) : void 0, style: { opacity: 0.6, cursor: "pointer", fontSize: pxToRem(13) }, children: "\xD7" })
37450
37476
  ] }, i)),
37451
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 14, color: C("textSecondary", "#888") }, children: values.length ? "" : placeholderText || "Add\u2026" })
37477
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C("textSecondary", "#888") }, children: values.length ? "" : placeholderText || "Add\u2026" })
37452
37478
  ] });
37453
37479
  });
37454
37480
  ChipNode = withExtras("ChipNode", ({ props, ctx, wrap }) => {
@@ -37459,7 +37485,7 @@ var init_renderNode = __esm({
37459
37485
  const accent = C(boundTokenName(props.tokenPath, props.token, ctx) ?? "accentPrimary", "#116DFF");
37460
37486
  const onClick = ctx.onAction && props.onTap && !props.disabled ? () => ctx.onAction(resolveItemDeep2(props.onTap, ctx)) : void 0;
37461
37487
  const fg = selected ? C("textOnAccent", "#fff") : C("textPrimary", "#13171e");
37462
- return /* @__PURE__ */ jsxs5("span", { onClick, style: { display: "inline-flex", alignItems: "center", gap: 6, padding: "6px 12px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: 14, cursor: onClick ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, color: fg, background: selected ? accent : C("surfaceSecondary", "#f2f3f5"), border: `1px solid ${selected ? accent : C("border", "#d8dce2")}`, boxShadow: props.elevated ? "0 1px 4px rgba(0,0,0,.14)" : "none", ...wrap }, children: [
37488
+ return /* @__PURE__ */ jsxs5("span", { onClick, style: { display: "inline-flex", alignItems: "center", gap: 6, padding: "6px 12px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: pxToRem(14), cursor: onClick ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, color: fg, background: selected ? accent : C("surfaceSecondary", "#f2f3f5"), border: `1px solid ${selected ? accent : C("border", "#d8dce2")}`, boxShadow: props.elevated ? "0 1px 4px rgba(0,0,0,.14)" : "none", ...wrap }, children: [
37463
37489
  props.leadingAvatarUrl && !isBinding(props.leadingAvatarUrl) && /* @__PURE__ */ jsx8("img", { src: String(props.leadingAvatarUrl), alt: "", style: { width: 20, height: 20, borderRadius: "50%", objectFit: "cover", margin: "-2px 0 -2px -4px" } }),
37464
37490
  props.leadingIcon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 16, height: 16 }, children: iconSvg(props.leadingIcon, { size: 15, color: fg }) }),
37465
37491
  /* @__PURE__ */ jsx8("span", { children: txt(props.label, ctx) }),
@@ -37475,7 +37501,7 @@ var init_renderNode = __esm({
37475
37501
  const cols = Array.isArray(props.columns) ? props.columns : [];
37476
37502
  const rawRows = props.rowsPath != null ? bound : props.rows;
37477
37503
  const rows = Array.isArray(rawRows) ? rawRows : [];
37478
- const cellStyle = (head) => ({ padding: "8px 12px", fontFamily: bodyFont(ctx), fontSize: 14, textAlign: "left", borderBottom: `1px solid ${C("border", "#eceef1")}`, color: head ? C("textSecondary", "#636b78") : C("textPrimary", "#13171e"), fontWeight: head ? 600 : 400, whiteSpace: "nowrap" });
37504
+ const cellStyle = (head) => ({ padding: "8px 12px", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), textAlign: "left", borderBottom: `1px solid ${C("border", "#eceef1")}`, color: head ? C("textSecondary", "#636b78") : C("textPrimary", "#13171e"), fontWeight: head ? 600 : 400, whiteSpace: "nowrap" });
37479
37505
  return /* @__PURE__ */ jsx8("div", { style: { width: "100%", boxSizing: "border-box", overflowX: "auto", border: `1px solid ${C("border", "#e8eaed")}`, borderRadius: 10, ...wrap }, children: /* @__PURE__ */ jsxs5("table", { style: { width: "100%", borderCollapse: "collapse" }, children: [
37480
37506
  cols.length > 0 && /* @__PURE__ */ jsx8("thead", { children: /* @__PURE__ */ jsx8("tr", { children: cols.map((c, i) => /* @__PURE__ */ jsx8("th", { style: cellStyle(true), children: asText2(c) }, i)) }) }),
37481
37507
  /* @__PURE__ */ jsx8("tbody", { children: rows.map((r, ri) => {
@@ -37515,7 +37541,7 @@ var init_renderNode = __esm({
37515
37541
  }
37516
37542
  if (props.kind === "linear") {
37517
37543
  return /* @__PURE__ */ jsxs5("div", { ...a11y, style: { width: "100%", ...wrap }, children: [
37518
- props.label != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78"), marginBottom: 4 }, children: txt(props.label, ctx) }),
37544
+ props.label != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78"), marginBottom: 4 }, children: txt(props.label, ctx) }),
37519
37545
  /* @__PURE__ */ jsx8("div", { style: { width: "100%", height: 8, borderRadius: 999, background: track, overflow: "hidden" }, children: /* @__PURE__ */ jsx8("div", { style: { width: `${pct * 100}%`, height: "100%", background: tint, ...gaugeAnim } }) })
37520
37546
  ] });
37521
37547
  }
@@ -37587,7 +37613,7 @@ var init_renderNode = __esm({
37587
37613
  overflow
37588
37614
  ] }) })
37589
37615
  ] }),
37590
- props.caption && /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "derived-name" }, style: { fontSize: 13, color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
37616
+ props.caption && /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "derived-name" }, style: { fontSize: pxToRem(13), color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
37591
37617
  ] });
37592
37618
  });
37593
37619
  CHART_STROKE_CYCLE = ["solid", "dashed", "dotted"];
@@ -37739,8 +37765,8 @@ var init_renderNode = __esm({
37739
37765
  gap: 2,
37740
37766
  pointerEvents: "none"
37741
37767
  }, children: [
37742
- props.centerTitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 20, fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(props.centerTitle, ctx) }),
37743
- props.centerSubtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 12, color: C("textSecondary", "#888") }, children: txt(props.centerSubtitle, ctx) })
37768
+ props.centerTitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(20), fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(props.centerTitle, ctx) }),
37769
+ props.centerSubtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: txt(props.centerSubtitle, ctx) })
37744
37770
  ] })
37745
37771
  ] }) });
37746
37772
  });
@@ -37780,8 +37806,8 @@ var init_renderNode = __esm({
37780
37806
  ...wrap
37781
37807
  }, children: items.map((it, i) => /* @__PURE__ */ jsxs5("li", { style: { display: "flex", alignItems: "center", gap: 6, minWidth: 0 }, children: [
37782
37808
  /* @__PURE__ */ jsx8(LegendMarker, { marker: it.marker, color: it.color ? C(it.color, "#116DFF") : C("accentPrimary", "#116DFF") }),
37783
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 13, color: C("textSecondary", "#888"), minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: txt(it.label, ctx) }),
37784
- it.value && /* @__PURE__ */ jsx8("span", { style: { fontSize: 13, fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(it.value, ctx) })
37809
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(13), color: C("textSecondary", "#888"), minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: txt(it.label, ctx) }),
37810
+ it.value && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(13), fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(it.value, ctx) })
37785
37811
  ] }, i)) });
37786
37812
  });
37787
37813
  cellAlign = (align) => align === "center" ? "center" : align === "trailing" ? "right" : "left";
@@ -37796,8 +37822,8 @@ var init_renderNode = __esm({
37796
37822
  const totalsRow = props.totalsPath != null ? boundTotals : props.totals;
37797
37823
  if (columns.length === 0) return /* @__PURE__ */ jsx8("div", { style: { ...wrap } });
37798
37824
  const totalWeight = columns.reduce((a, c) => a + c.weight, 0) || 1;
37799
- const th = { fontSize: 12, fontWeight: 600, color: C("textSecondary", "#888"), padding: "8px 10px", borderBottom: `1px solid ${C("border", "#e5e5e5")}` };
37800
- const td = { fontSize: 14, color: C("textPrimary", "#111"), padding: "8px 10px" };
37825
+ const th = { fontSize: pxToRem(12), fontWeight: 600, color: C("textSecondary", "#888"), padding: "8px 10px", borderBottom: `1px solid ${C("border", "#e5e5e5")}` };
37826
+ const td = { fontSize: pxToRem(14), color: C("textPrimary", "#111"), padding: "8px 10px" };
37801
37827
  return (
37802
37828
  // Tables are the one shape allowed to exceed the content width, in their own
37803
37829
  // scroller — the page body must not scroll horizontally because of one.
@@ -38009,9 +38035,9 @@ var init_renderNode = __esm({
38009
38035
  }
38010
38036
  ),
38011
38037
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 8, fontFamily: bodyFont(ctx) }, children: [
38012
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, fontWeight: 500, fontVariantNumeric: "tabular-nums", color: isFailed ? danger : secondary }, children: voiceNoteClock(clockMs) }),
38013
- isUploading && /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, color: secondary }, children: "Sending\u2026" }),
38014
- isFailed && /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, color: danger }, children: "Not sent" }),
38038
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), fontWeight: 500, fontVariantNumeric: "tabular-nums", color: isFailed ? danger : secondary }, children: voiceNoteClock(clockMs) }),
38039
+ isUploading && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), color: secondary }, children: "Sending\u2026" }),
38040
+ isFailed && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), color: danger }, children: "Not sent" }),
38015
38041
  /* @__PURE__ */ jsx8("span", { style: { flex: 1 } }),
38016
38042
  rates.length > 0 && isPlayable && /* @__PURE__ */ jsx8(
38017
38043
  "button",
@@ -38027,7 +38053,7 @@ var init_renderNode = __esm({
38027
38053
  style: {
38028
38054
  border: "none",
38029
38055
  cursor: "pointer",
38030
- fontSize: 11,
38056
+ fontSize: pxToRem(11),
38031
38057
  fontWeight: 600,
38032
38058
  fontFamily: "inherit",
38033
38059
  color: accentLabel,
@@ -38058,10 +38084,10 @@ var init_renderNode = __esm({
38058
38084
  ] }),
38059
38085
  /* @__PURE__ */ jsxs5("div", { style: { paddingBottom: last ? 0 : 14, minWidth: 0 }, children: [
38060
38086
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 8, alignItems: "baseline" }, children: [
38061
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(e?.title) }),
38062
- e?.time && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888") }, children: asText2(e.time) })
38087
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(e?.title) }),
38088
+ e?.time && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: asText2(e.time) })
38063
38089
  ] }),
38064
- e?.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(e.subtitle) })
38090
+ e?.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(e.subtitle) })
38065
38091
  ] })
38066
38092
  ] }, i);
38067
38093
  }) });
@@ -38074,7 +38100,7 @@ var init_renderNode = __esm({
38074
38100
  const opts = Array.isArray(rawOpts) ? rawOpts : [];
38075
38101
  const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
38076
38102
  const selIdx = Math.max(0, opts.findIndex((o) => o?.id === selectedId));
38077
- const row = (o, dist) => /* @__PURE__ */ jsx8("div", { style: { height: 32, display: "flex", alignItems: "center", justifyContent: "center", fontFamily: bodyFont(ctx), fontSize: 16, fontWeight: dist === 0 ? 700 : 400, color: dist === 0 ? C("textPrimary", "#13171e") : C("textSecondary", "#9aa3ad"), opacity: 1 - Math.min(0.7, Math.abs(dist) * 0.35) }, children: asText2(o?.label) ?? asText2(o?.id) }, o?.id);
38103
+ const row = (o, dist) => /* @__PURE__ */ jsx8("div", { style: { height: 32, display: "flex", alignItems: "center", justifyContent: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(16), fontWeight: dist === 0 ? 700 : 400, color: dist === 0 ? C("textPrimary", "#13171e") : C("textSecondary", "#9aa3ad"), opacity: 1 - Math.min(0.7, Math.abs(dist) * 0.35) }, children: asText2(o?.label) ?? asText2(o?.id) }, o?.id);
38078
38104
  const window_ = [-2, -1, 0, 1, 2].map((d) => ({ o: opts[selIdx + d], d })).filter((x) => x.o);
38079
38105
  return /* @__PURE__ */ jsxs5("div", { style: { position: "relative", width: "100%", maxWidth: 220, height: 160, overflow: "hidden", background: C("surfaceSecondary", "#f5f7fa"), borderRadius: 12, ...wrap }, children: [
38080
38106
  /* @__PURE__ */ jsx8("div", { style: { position: "absolute", top: "50%", left: 8, right: 8, transform: "translateY(-50%)", height: 32, background: C("surfacePrimary", "#fff"), borderRadius: 8, boxShadow: "inset 0 0 0 1px rgba(0,0,0,.06)" } }),
@@ -38091,8 +38117,8 @@ var init_renderNode = __esm({
38091
38117
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 8, ...wrap }, children: [
38092
38118
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: [
38093
38119
  /* @__PURE__ */ jsx8("span", { style: { width: 28, height: 28, borderRadius: 8, background: C(cur, cur), border: `1px solid ${C("border", "#e3e3e3")}`, flex: "none" } }),
38094
- props.label != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) }),
38095
- /* @__PURE__ */ jsx8("span", { style: { marginLeft: "auto", fontFamily: "ui-monospace, monospace", fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(cur) })
38120
+ props.label != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) }),
38121
+ /* @__PURE__ */ jsx8("span", { style: { marginLeft: "auto", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(cur) })
38096
38122
  ] }),
38097
38123
  /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexWrap: "wrap", gap: 8 }, children: swatches.map((s, i) => /* @__PURE__ */ jsx8("span", { onClick: onPick(s), style: { width: 26, height: 26, borderRadius: "50%", background: C(s, s), cursor: onPick(s) ? "pointer" : "default", boxShadow: s === cur ? `0 0 0 2px ${C("surfacePrimary", "#fff")}, 0 0 0 4px ${C(s, s)}` : "inset 0 0 0 1px rgba(0,0,0,.08)" } }, i)) })
38098
38124
  ] });
@@ -38123,12 +38149,12 @@ var init_renderNode = __esm({
38123
38149
  // pushed a sibling count onto two lines (#3080, #3004).
38124
38150
  /* @__PURE__ */ jsx8("div", { role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c, i) => {
38125
38151
  const on3 = selected.includes(c.id);
38126
- const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: 13, border: `1px solid ${on3 ? "transparent" : C("border", "#ddd")}`, background: on3 ? C("accentPrimary", "#116DFF") : "transparent", color: on3 ? C("textOnAccent", "#fff") : C("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
38152
+ const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(13), border: `1px solid ${on3 ? "transparent" : C("border", "#ddd")}`, background: on3 ? C("accentPrimary", "#116DFF") : "transparent", color: on3 ? C("textOnAccent", "#fff") : C("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
38127
38153
  const inner = /* @__PURE__ */ jsxs5(Fragment4, { children: [
38128
38154
  asText2(c.label),
38129
38155
  c.count != null && /* @__PURE__ */ jsxs5(Fragment4, { children: [
38130
38156
  " ",
38131
- /* @__PURE__ */ jsx8("span", { style: { ...on3 ? {} : { opacity: 0.7 }, fontSize: 11 }, children: c.count })
38157
+ /* @__PURE__ */ jsx8("span", { style: { ...on3 ? {} : { opacity: 0.7 }, fontSize: pxToRem(11) }, children: c.count })
38132
38158
  ] })
38133
38159
  ] });
38134
38160
  return interactive ? /* @__PURE__ */ jsx8("button", { type: "button", "aria-pressed": on3, onClick: () => toggle(c.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c.id ?? i) : /* @__PURE__ */ jsx8("span", { style: chipStyle, children: inner }, c.id ?? i);
@@ -38415,8 +38441,8 @@ var init_renderNode = __esm({
38415
38441
  /* @__PURE__ */ jsxs5("div", { style: { position: "relative", height: Math.min(props.expandedHeight ?? 120, 160), borderRadius: ctx.radius("md", 10), overflow: "hidden", background: imageUrl ? void 0 : `linear-gradient(135deg, ${C("accentPrimary", "#116DFF")}, ${C("accentSecondary", "#0E5FE3")})` }, children: [
38416
38442
  imageUrl && /* @__PURE__ */ jsx8("img", { src: imageUrl, alt: "", style: { width: "100%", height: "100%", objectFit: "cover" } }),
38417
38443
  /* @__PURE__ */ jsxs5("div", { style: { position: "absolute", left: 14, bottom: 12, color: "#fff", textShadow: "0 1px 4px rgba(0,0,0,.5)" }, children: [
38418
- /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "node" }, role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: 20 }, children: txt(props.title, ctx) }),
38419
- props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 13, opacity: 0.9 }, children: txt(props.subtitle, ctx) })
38444
+ /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "node" }, role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: pxToRem(20) }, children: txt(props.title, ctx) }),
38445
+ props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(13), opacity: 0.9 }, children: txt(props.subtitle, ctx) })
38420
38446
  ] })
38421
38447
  ] }),
38422
38448
  items.length > 0 && /* @__PURE__ */ jsx8("div", { style: { paddingTop: 12 }, children: kids2(items, ctx) })
@@ -38550,11 +38576,11 @@ var init_renderNode = __esm({
38550
38576
  "aria-label": "Previous month",
38551
38577
  onClick: () => changeMonth(-1),
38552
38578
  disabled: !canPage,
38553
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, padding: 6, opacity: canPage ? 1 : 0.4 },
38579
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), padding: 6, opacity: canPage ? 1 : 0.4 },
38554
38580
  children: "\u2039"
38555
38581
  }
38556
38582
  ),
38557
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 15, color: C("textPrimary", "#13171e") }, children: monthLabel }),
38583
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: monthLabel }),
38558
38584
  /* @__PURE__ */ jsx8(
38559
38585
  "button",
38560
38586
  {
@@ -38562,12 +38588,12 @@ var init_renderNode = __esm({
38562
38588
  "aria-label": "Next month",
38563
38589
  onClick: () => changeMonth(1),
38564
38590
  disabled: !canPage,
38565
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, padding: 6, opacity: canPage ? 1 : 0.4 },
38591
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), padding: 6, opacity: canPage ? 1 : 0.4 },
38566
38592
  children: "\u203A"
38567
38593
  }
38568
38594
  )
38569
38595
  ] }),
38570
- /* @__PURE__ */ jsx8("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, marginBottom: 4 }, children: heads.map((h, i) => /* @__PURE__ */ jsx8("div", { style: { textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, color: C("textSecondary", "#888"), textTransform: "uppercase" }, children: h }, i)) }),
38596
+ /* @__PURE__ */ jsx8("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, marginBottom: 4 }, children: heads.map((h, i) => /* @__PURE__ */ jsx8("div", { style: { textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, color: C("textSecondary", "#888"), textTransform: "uppercase" }, children: h }, i)) }),
38571
38597
  /* @__PURE__ */ jsx8("div", { ref: gridRef, role: "grid", "aria-label": monthLabel, style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, width: "100%" }, children: rows.flatMap(
38572
38598
  (row, ri) => row.map((cell, ci) => {
38573
38599
  if (!cell.inMonth && !showAdjacent) return /* @__PURE__ */ jsx8("div", { "aria-hidden": "true" }, `${ri}-${ci}`);
@@ -38608,14 +38634,14 @@ var init_renderNode = __esm({
38608
38634
  opacity: disabled ? 0.4 : 1,
38609
38635
  cursor: disabled ? "default" : "pointer",
38610
38636
  fontFamily: bodyFont(ctx),
38611
- fontSize: 14,
38637
+ fontSize: pxToRem(14),
38612
38638
  fontWeight: cell.isToday ? 700 : 400,
38613
38639
  boxShadow: cell.isToday && !selected ? `inset 0 0 0 1.5px ${C("accentPrimary", "#116DFF")}` : "none"
38614
38640
  },
38615
38641
  children: [
38616
38642
  /* @__PURE__ */ jsx8("span", { children: cell.day }),
38617
38643
  dotCount > 0 && /* @__PURE__ */ jsx8("span", { style: { display: "flex", gap: 2 }, children: Array.from({ length: dotCount }).map((_, i) => /* @__PURE__ */ jsx8("span", { style: { width: 4, height: 4, borderRadius: "50%", background: selected ? C("textOnAccent", "#fff") : dotColor } }, i)) }),
38618
- dec?.badge != null && /* @__PURE__ */ jsx8("span", { style: { fontSize: 9, lineHeight: 1, maxWidth: "100%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: selected ? C("textOnAccent", "#fff") : C("textSecondary", "#888") }, children: asText2(dec.badge) })
38644
+ dec?.badge != null && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(9), lineHeight: 1, maxWidth: "100%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: selected ? C("textOnAccent", "#fff") : C("textSecondary", "#888") }, children: asText2(dec.badge) })
38619
38645
  ]
38620
38646
  },
38621
38647
  cell.date
@@ -38687,11 +38713,11 @@ var init_renderNode = __esm({
38687
38713
  "aria-label": "Previous",
38688
38714
  onClick: () => shiftRange(-rangeStep),
38689
38715
  disabled: !canPage,
38690
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, opacity: canPage ? 1 : 0.4 },
38716
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), opacity: canPage ? 1 : 0.4 },
38691
38717
  children: "\u2039"
38692
38718
  }
38693
38719
  ),
38694
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 14, color: C("textPrimary", "#13171e") }, children: rangeLabel }),
38720
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(14), color: C("textPrimary", "#13171e") }, children: rangeLabel }),
38695
38721
  /* @__PURE__ */ jsx8(
38696
38722
  "button",
38697
38723
  {
@@ -38699,12 +38725,12 @@ var init_renderNode = __esm({
38699
38725
  "aria-label": "Next",
38700
38726
  onClick: () => shiftRange(rangeStep),
38701
38727
  disabled: !canPage,
38702
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, opacity: canPage ? 1 : 0.4 },
38728
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), opacity: canPage ? 1 : 0.4 },
38703
38729
  children: "\u203A"
38704
38730
  }
38705
38731
  )
38706
38732
  ] }),
38707
- /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, minWidth: days.length * 90 }, children: laneMode ? laneCols.map((lane) => /* @__PURE__ */ jsx8("div", { "data-lane": lane.id, style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 600, color: C("textSecondary", "#888"), padding: "4px 2px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: laneTitle(lane.id) }, lane.id)) : days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, color: dayKeys[i] === nowKey ? accentTextColor(ctx) : C("textSecondary", "#888") }, children: d.toLocaleDateString(void 0, { weekday: "short", day: "numeric" }) }, i)) }),
38733
+ /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, minWidth: days.length * 90 }, children: laneMode ? laneCols.map((lane) => /* @__PURE__ */ jsx8("div", { "data-lane": lane.id, style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 600, color: C("textSecondary", "#888"), padding: "4px 2px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: laneTitle(lane.id) }, lane.id)) : days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, color: dayKeys[i] === nowKey ? accentTextColor(ctx) : C("textSecondary", "#888") }, children: d.toLocaleDateString(void 0, { weekday: "short", day: "numeric" }) }, i)) }),
38708
38734
  days.some((_, i) => (byDay.get(dayKeys[i])?.allDay.length ?? 0) > 0) && /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, gap: 2, marginBottom: 4, minWidth: days.length * 90 }, children: days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, display: "flex", flexDirection: "column", gap: 2, padding: "0 1px" }, children: (byDay.get(dayKeys[i])?.allDay ?? []).map((ev, j) => {
38709
38735
  const tappable = !!(ev?.onTap || props.onSelectEvent);
38710
38736
  return /* @__PURE__ */ jsx8(
@@ -38714,14 +38740,14 @@ var init_renderNode = __esm({
38714
38740
  onKeyDown: calKeyActivate(!!ctx.onAction && tappable, () => onSelect(ev)),
38715
38741
  role: tappable ? "button" : void 0,
38716
38742
  tabIndex: ctx.onAction && tappable ? 0 : void 0,
38717
- style: { fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, padding: "2px 6px", borderRadius: 4, background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), color: C("textOnAccent", "#fff"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38743
+ style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, padding: "2px 6px", borderRadius: 4, background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), color: C("textOnAccent", "#fff"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38718
38744
  children: asText2(ev?.title)
38719
38745
  },
38720
38746
  j
38721
38747
  );
38722
38748
  }) }, i)) }),
38723
38749
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", position: "relative", minWidth: 44 + days.length * 90 }, children: [
38724
- /* @__PURE__ */ jsx8("div", { style: { width: 44, flex: "none" }, children: Array.from({ length: Math.max(0, endHour - startHour) }).map((_, i) => /* @__PURE__ */ jsxs5("div", { style: { height: HOUR_PX, boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 10, color: C("textTertiary", "#aab2bd"), textAlign: "right", paddingRight: 6 }, children: [
38750
+ /* @__PURE__ */ jsx8("div", { style: { width: 44, flex: "none" }, children: Array.from({ length: Math.max(0, endHour - startHour) }).map((_, i) => /* @__PURE__ */ jsxs5("div", { style: { height: HOUR_PX, boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(10), color: C("textTertiary", "#aab2bd"), textAlign: "right", paddingRight: 6 }, children: [
38725
38751
  String(startHour + i).padStart(2, "0"),
38726
38752
  ":00"
38727
38753
  ] }, i)) }),
@@ -38800,7 +38826,7 @@ var init_renderNode = __esm({
38800
38826
  borderRadius: 6,
38801
38827
  padding: "2px 5px",
38802
38828
  fontFamily: bodyFont(ctx),
38803
- fontSize: 11,
38829
+ fontSize: pxToRem(11),
38804
38830
  overflow: "hidden",
38805
38831
  cursor: ctx.onAction && tappable ? "pointer" : "default",
38806
38832
  boxSizing: "border-box"
@@ -38909,7 +38935,7 @@ var init_renderNode = __esm({
38909
38935
  return () => io.disconnect();
38910
38936
  }, [hasMore, windowEnd]);
38911
38937
  if (groups.length === 0) {
38912
- return /* @__PURE__ */ jsx8("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 14, color: C("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
38938
+ return /* @__PURE__ */ jsx8("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
38913
38939
  }
38914
38940
  const sticky = props.stickyHeaders === true;
38915
38941
  const todayKey = localDayKey(/* @__PURE__ */ new Date());
@@ -38922,7 +38948,7 @@ var init_renderNode = __esm({
38922
38948
  };
38923
38949
  return /* @__PURE__ */ jsxs5("div", { ref: containerRef, "data-agenda-days": shown2.length, style: { width: "100%", boxSizing: "border-box", ...wrap }, children: [
38924
38950
  shown2.map((g) => /* @__PURE__ */ jsxs5("div", { "data-daygroup": g.key, children: [
38925
- /* @__PURE__ */ jsx8("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C("surfacePrimary", "#fff"), fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: C("textSecondary", "#888"), padding: "8px 4px" }, children: dayHeaderLabel(g.key) }),
38951
+ /* @__PURE__ */ jsx8("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C("surfacePrimary", "#fff"), fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: C("textSecondary", "#888"), padding: "8px 4px" }, children: dayHeaderLabel(g.key) }),
38926
38952
  g.items.map((ev, i) => {
38927
38953
  const start = parseLocalDate(ev.start);
38928
38954
  const timeStr = ev.allDay === true ? "All day" : start ? localTimeLabel(start) : "";
@@ -38953,10 +38979,10 @@ var init_renderNode = __esm({
38953
38979
  style: { display: "flex", alignItems: "center", gap: 10, padding: "10px 4px", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38954
38980
  children: [
38955
38981
  /* @__PURE__ */ jsx8("div", { style: { width: 6, height: 6, borderRadius: "50%", background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), flex: "none" } }),
38956
- /* @__PURE__ */ jsx8("div", { style: { width: 52, flex: "none", fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888") }, children: timeStr }),
38982
+ /* @__PURE__ */ jsx8("div", { style: { width: 52, flex: "none", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: timeStr }),
38957
38983
  /* @__PURE__ */ jsxs5("div", { style: { flex: 1, minWidth: 0 }, children: [
38958
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: asText2(ev?.title) }),
38959
- ev?.subtitle != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(ev.subtitle) })
38984
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: asText2(ev?.title) }),
38985
+ ev?.subtitle != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(ev.subtitle) })
38960
38986
  ] })
38961
38987
  ]
38962
38988
  },
@@ -38973,7 +38999,7 @@ var init_renderNode = __esm({
38973
38999
  ref: sentinelRef,
38974
39000
  "data-agenda-more": groups.length - shown2.length,
38975
39001
  onClick: () => setVisibleDays((n) => n + CAL_AGENDA_PAGE_DAYS),
38976
- style: { padding: "12px 4px", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#888"), cursor: "pointer" },
39002
+ style: { padding: "12px 4px", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888"), cursor: "pointer" },
38977
39003
  children: `${groups.length - shown2.length} more ${groups.length - shown2.length === 1 ? "day" : "days"}`
38978
39004
  }
38979
39005
  )
@@ -60218,21 +60244,21 @@ var init_preview_assets_generated = __esm({
60218
60244
  "../../packages/serve/src/preview-assets.generated.ts"() {
60219
60245
  init_preview_assets_format();
60220
60246
  PREVIEW_ASSET_MANIFEST = [
60221
- { key: "assets/index-CgEMkQNe.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1131220, sha256: "d0b5be86126447265c936cd40214f202c42599ced51615dc63f3fd997168c11f" },
60222
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1131228, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
60223
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1135838, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
60224
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1624422, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
60225
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1715346, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
60226
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1806330, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
60227
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1897310, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
60228
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1988182, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
60229
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2079162, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
60230
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2187798, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
60231
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2296882, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
60232
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2405930, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
60233
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2513630, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
60234
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2601738, length: 4947, sha256: "bbb6379db6e3a9fee982a074008d4a860210436259db9f6f4d441d842fc7f74f" },
60235
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2606685, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
60247
+ { key: "assets/index-B1fE1B9T.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1131811, sha256: "ead747f6e5d3d289965dc0d3486f678d999616cec487643300b3103983bc9462" },
60248
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1131819, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
60249
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1136429, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
60250
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1625013, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
60251
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1715937, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
60252
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1806921, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
60253
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1897901, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
60254
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1988773, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
60255
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2079753, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
60256
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2188389, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
60257
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2297473, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
60258
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2406521, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
60259
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2514221, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
60260
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2602329, length: 4947, sha256: "4c3de9771721e41385e297f5e97c0ecd9a76e557a3584d3e6e7820e4bc615c96" },
60261
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2607276, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
60236
60262
  ];
60237
60263
  }
60238
60264
  });
@@ -68130,9 +68156,143 @@ function parsePublishedHtml2(html, base) {
68130
68156
  }
68131
68157
  return out2;
68132
68158
  }
68159
+ function codeMask(js) {
68160
+ const code = new Uint8Array(js.length);
68161
+ const templates = [];
68162
+ let i = 0;
68163
+ const inHole = () => templates.length > 0 && templates[templates.length - 1] >= 0;
68164
+ let prev = "";
68165
+ let word = "";
68166
+ const regexMayStart = () => prev === "" || "(,=:[!&|?{};+-*%<>~^".includes(prev) || /^(?:return|typeof|case|do|else|in|of|new|delete|void|throw|instanceof|yield|await)$/.test(word);
68167
+ while (i < js.length) {
68168
+ const c = js[i];
68169
+ if (templates.length > 0 && !inHole()) {
68170
+ if (c === "\\") {
68171
+ i += 2;
68172
+ continue;
68173
+ }
68174
+ if (c === "`") {
68175
+ templates.pop();
68176
+ i++;
68177
+ continue;
68178
+ }
68179
+ if (c === "$" && js[i + 1] === "{") {
68180
+ templates[templates.length - 1] = 0;
68181
+ i += 2;
68182
+ continue;
68183
+ }
68184
+ i++;
68185
+ continue;
68186
+ }
68187
+ if (c === '"' || c === "'") {
68188
+ let j = i + 1;
68189
+ while (j < js.length && js[j] !== c && js[j] !== "\n") j += js[j] === "\\" ? 2 : 1;
68190
+ i = j + 1;
68191
+ prev = c;
68192
+ word = "";
68193
+ continue;
68194
+ }
68195
+ if (c === "`") {
68196
+ templates.push(-1);
68197
+ i++;
68198
+ prev = c;
68199
+ word = "";
68200
+ continue;
68201
+ }
68202
+ if (c === "/" && js[i + 1] === "*") {
68203
+ const e = js.indexOf("*/", i + 2);
68204
+ i = e < 0 ? js.length : e + 2;
68205
+ continue;
68206
+ }
68207
+ if (c === "/" && js[i + 1] === "/") {
68208
+ const e = js.indexOf("\n", i + 2);
68209
+ i = e < 0 ? js.length : e;
68210
+ continue;
68211
+ }
68212
+ if (c === "/" && regexMayStart()) {
68213
+ let j = i + 1, cls = false;
68214
+ for (; j < js.length && js[j] !== "\n"; j++) {
68215
+ const r = js[j];
68216
+ if (r === "\\") {
68217
+ j++;
68218
+ continue;
68219
+ }
68220
+ if (r === "[") cls = true;
68221
+ else if (r === "]") cls = false;
68222
+ else if (r === "/" && !cls) break;
68223
+ }
68224
+ i = j + 1;
68225
+ prev = "/";
68226
+ word = "";
68227
+ continue;
68228
+ }
68229
+ if (inHole()) {
68230
+ const t = templates.length - 1;
68231
+ if (c === "{") templates[t]++;
68232
+ else if (c === "}") {
68233
+ if (templates[t] === 0) {
68234
+ templates[t] = -1;
68235
+ i++;
68236
+ continue;
68237
+ }
68238
+ templates[t]--;
68239
+ }
68240
+ }
68241
+ code[i] = 1;
68242
+ if (!/\s/.test(c)) {
68243
+ word = /[A-Za-z0-9_$]/.test(c) ? /[A-Za-z0-9_$]/.test(prev) ? word + c : c : "";
68244
+ prev = c;
68245
+ }
68246
+ i++;
68247
+ }
68248
+ return code;
68249
+ }
68250
+ function enclosingObject(js, at2, code) {
68251
+ let depth = 0;
68252
+ let start = -1;
68253
+ for (let i = at2; i >= Math.max(0, at2 - OBJECT_SCAN); i--) {
68254
+ if (!code[i]) continue;
68255
+ const c = js[i];
68256
+ if (c === "}") depth++;
68257
+ else if (c === "{") {
68258
+ if (depth === 0) {
68259
+ start = i;
68260
+ break;
68261
+ }
68262
+ depth--;
68263
+ }
68264
+ }
68265
+ if (start < 0) return void 0;
68266
+ let out2 = "";
68267
+ depth = 0;
68268
+ for (let i = start; i < Math.min(js.length, start + 2 * OBJECT_SCAN); i++) {
68269
+ const c = js[i];
68270
+ if (code[i] && c === "{") {
68271
+ depth++;
68272
+ if (depth === 1) out2 += c;
68273
+ else if (depth === 2) out2 += "{}";
68274
+ continue;
68275
+ }
68276
+ if (code[i] && c === "}") {
68277
+ depth--;
68278
+ if (depth === 0) return out2 + c;
68279
+ continue;
68280
+ }
68281
+ if (depth === 1) {
68282
+ if (code[i]) out2 += c;
68283
+ else if (code[i - 1]) out2 += '""';
68284
+ }
68285
+ }
68286
+ return void 0;
68287
+ }
68133
68288
  function routesFromBundle(js) {
68134
68289
  const out2 = /* @__PURE__ */ new Set();
68290
+ const code = codeMask(js);
68135
68291
  for (const m of js.matchAll(/\bpath\s*:\s*["'`](\/[A-Za-z0-9_\-/:.*]*|\*)["'`]/g)) {
68292
+ if (!code[m.index]) continue;
68293
+ const own3 = enclosingObject(js, m.index, code);
68294
+ const before = js.slice(Math.max(0, m.index - 80), m.index);
68295
+ if (!(own3 && ROUTE_KEY.test(own3)) && !NAV_LABEL_BEFORE.test(before)) continue;
68136
68296
  out2.add(m[1]);
68137
68297
  if (out2.size >= MAX_ROUTES) break;
68138
68298
  }
@@ -68209,7 +68369,7 @@ async function visitorPass(url, siteFetch) {
68209
68369
  }
68210
68370
  return { identity, routes: routes.slice(0, MAX_ROUTES), gaps };
68211
68371
  }
68212
- var MAX_HTML_BYTES, MAX_BUNDLE_BYTES, MAX_BUNDLES, MAX_ROUTES, APP_ID2, attr2, decodeEntities;
68372
+ var MAX_HTML_BYTES, MAX_BUNDLE_BYTES, MAX_BUNDLES, MAX_ROUTES, APP_ID2, attr2, decodeEntities, ROUTE_KEY, OBJECT_SCAN, NAV_LABEL_BEFORE;
68213
68373
  var init_visitor = __esm({
68214
68374
  "src/base44-analyze/visitor.ts"() {
68215
68375
  init_write_artifacts();
@@ -68223,6 +68383,9 @@ var init_visitor = __esm({
68223
68383
  return m ? m[2] ?? m[3] : void 0;
68224
68384
  };
68225
68385
  decodeEntities = (s) => s.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").trim();
68386
+ ROUTE_KEY = /[{,]\s*(?:element|Component|lazy|loader|children|errorElement|ErrorBoundary|index|action|handle)\s*:/;
68387
+ OBJECT_SCAN = 1200;
68388
+ NAV_LABEL_BEFORE = /\blabel\s*:\s*["'`][^"'`]*["'`]\s*,\s*$/;
68226
68389
  }
68227
68390
  });
68228
68391
 
@@ -73299,6 +73462,12 @@ function assertNotCommitted(path2, forbidden) {
73299
73462
  );
73300
73463
  }
73301
73464
  }
73465
+ function keepSiteLayout(prev, next) {
73466
+ if (!next || typeof next !== "object" || Array.isArray(next)) return next;
73467
+ const layout = prev && typeof prev === "object" ? prev.layout : void 0;
73468
+ if (layout === void 0 || next.layout !== void 0) return next;
73469
+ return { ...next, layout };
73470
+ }
73302
73471
  function mergeCustomerOwned(committed, overlay) {
73303
73472
  const CUSTOMER_OWNED = [
73304
73473
  "version",
@@ -73322,6 +73491,7 @@ function mergeCustomerOwned(committed, overlay) {
73322
73491
  if (value !== void 0) customer[key2] = value;
73323
73492
  }
73324
73493
  if (committed.site === void 0) delete customer.site;
73494
+ customer.site = keepSiteLayout(committed.site, customer.site);
73325
73495
  const overlayBranding = { ...customer.branding ?? {} };
73326
73496
  delete overlayBranding.appIconPath;
73327
73497
  delete overlayBranding.fonts;
@@ -73710,8 +73880,9 @@ function isHomePage(page, mainPageId) {
73710
73880
  function pageId(c, used) {
73711
73881
  const fromPath = (c.path.split("/").filter(Boolean).pop() ?? "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
73712
73882
  const base = c.role !== "other" && c.role !== "home" && !used.has(c.role) ? c.role : fromPath || "page_1";
73713
- let id = base === "page" ? "page_1" : base;
73714
- for (let n = 2; used.has(id); n++) id = `${base}_${n}`;
73883
+ const safe = base === "page" ? "page_1" : base.startsWith("drawer_") ? `page_${base}` : base;
73884
+ let id = safe;
73885
+ for (let n = 2; used.has(id); n++) id = `${safe}_${n}`;
73715
73886
  used.add(id);
73716
73887
  return id;
73717
73888
  }
@@ -73794,6 +73965,14 @@ function deriveSiteShell(input) {
73794
73965
  }
73795
73966
  }
73796
73967
  }
73968
+ for (const p of placed) {
73969
+ if (p.placement === "overflow" || !RESERVED_PAGE_IDS.has(p.id)) continue;
73970
+ used.delete(p.id);
73971
+ let id = `page_${p.id}`;
73972
+ for (let n = 2; used.has(id); n++) id = `page_${p.id}_${n}`;
73973
+ used.add(id);
73974
+ p.id = id;
73975
+ }
73797
73976
  const pages = [
73798
73977
  { id: "home", title: homeTitle, path: "/", icon: "home" },
73799
73978
  ...placed.map(({ c, id, placement }) => ({
@@ -73837,7 +74016,7 @@ function routeTitle(r) {
73837
74016
  const seg = r.path.split("/").filter(Boolean).pop() ?? r.path;
73838
74017
  return seg.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
73839
74018
  }
73840
- var DERIVED_SITE_MAX_PAGES, SITE_PAGE_TITLE_MAX, ROLE_ICON, TAB_ROLES, SYSTEM_SEGMENT, SYSTEM_TITLE, HOME_WORD, oneLine2;
74019
+ var DERIVED_SITE_MAX_PAGES, SITE_PAGE_TITLE_MAX, ROLE_ICON, TAB_ROLES, SYSTEM_SEGMENT, SYSTEM_TITLE, HOME_WORD, oneLine2, RESERVED_PAGE_IDS;
73841
74020
  var init_site_shell_derive = __esm({
73842
74021
  "src/site-analyze/site-shell-derive.ts"() {
73843
74022
  init_site_shell();
@@ -73865,6 +74044,7 @@ var init_site_shell_derive = __esm({
73865
74044
  SYSTEM_TITLE = /\b(thank you|\(popup\)|leave (a )?review|notifications|followers|side cart|order error|pending approval|my (rewards|subscriptions|bookings|orders|groups|wallet))\b|\b(group|service|product|project|collection|category|cart|payment request) pages?$|\b(event|experience|reservation|item) details\b/i;
73866
74045
  HOME_WORD = /^(home|home ?page|main|start|accueil|inicio|início|startseite|home ?sweet ?home|בית|דף הבית|ראשי|الرئيسية|ホーム|首页|홈)$/i;
73867
74046
  oneLine2 = (s) => s.replace(/[\u0000-\u001F\u007F\s]+/g, " ").trim();
74047
+ RESERVED_PAGE_IDS = /* @__PURE__ */ new Set(["account", "notifications"]);
73868
74048
  }
73869
74049
  });
73870
74050
 
@@ -74556,7 +74736,15 @@ async function runSiteAnalyze(opts) {
74556
74736
  const routes = book?.routes;
74557
74737
  if (book?.skipped) result.warnings = [...result.warnings ?? [], book.skipped];
74558
74738
  const derived = deriveSiteShell({ siteUrl: result.book.input.siteUrl, look: result.book.look, kind, routes });
74559
- result.provisioningOverlay.site = derived.site;
74739
+ const prevOverlayPath = resolve55(outDir, "provisioning.overlay.json");
74740
+ const prevSite = existsSync71(prevOverlayPath) ? (() => {
74741
+ try {
74742
+ return JSON.parse(readFileSync88(prevOverlayPath, "utf8")).site;
74743
+ } catch {
74744
+ return void 0;
74745
+ }
74746
+ })() : void 0;
74747
+ result.provisioningOverlay.site = keepSiteLayout(prevSite, derived.site);
74560
74748
  const warnings2 = (result.warnings ?? []).map(
74561
74749
  (w) => !opts.clientId?.trim() && w.startsWith("no --client-id:") ? `no --client-id: fine for --shell ${opts.shell} \u2014 a site shell binds no client, so --apply works without one. Only the vertical probes were skipped, so the catalog has no counts.` : w
74562
74750
  );