@burdenoff/website-sdk 2026.924.11 → 2026.924.12

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.
@@ -3994,6 +3994,24 @@ var EXPLORE_CSS = `
3994
3994
  mask-image: linear-gradient(to left, hsl(var(--foreground)) calc(100% - 2rem), hsl(var(--foreground) / 0));
3995
3995
  }
3996
3996
 
3997
+ /* The concept rail had the chip row's problem: the card at its edge was cut hard mid-word
3998
+ ("Apparatus Rig", "CONCEPT ILLUST") on a dozen sites. It fades an edge only while there are
3999
+ more cards beyond it \u2014 the same state that lights the arrow on that side \u2014 so a rail
4000
+ scrolled to its end shows its last card whole. Physical edges, because that state is
4001
+ physical: it is measured from the left in either reading direction. */
4002
+ .boff-explore-rail-fade-left {
4003
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
4004
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
4005
+ }
4006
+ .boff-explore-rail-fade-right {
4007
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
4008
+ mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
4009
+ }
4010
+ .boff-explore-rail-fade-left.boff-explore-rail-fade-right {
4011
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
4012
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
4013
+ }
4014
+
3997
4015
  @keyframes boff-explore-fade-in {
3998
4016
  from { opacity: 0; transform: translateY(2px); }
3999
4017
  to { opacity: 1; transform: none; }
@@ -4172,8 +4190,18 @@ var EXPLORE_CSS = `
4172
4190
  .boff-explore-scroll .boff-explore-capabilities { display: none; }
4173
4191
  }
4174
4192
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[1])}) {
4175
- /* Step 2. */
4193
+ /* Step 2. At a 4:1 crop the picture is ~44px tall, and the full-size caveat badge covered
4194
+ half of it \u2014 on ten sites, every card, whenever the consent banner was up. It stays (the
4195
+ picture is still a mockup), just smaller and tucked into the corner. */
4176
4196
  .boff-explore-scroll .boff-explore-concept-media { aspect-ratio: 4 / 1; }
4197
+ .boff-explore-scroll .boff-explore-concept-badge {
4198
+ top: 0.25rem;
4199
+ left: 0.25rem;
4200
+ padding: 0 0.3125rem;
4201
+ font-size: 0.5rem;
4202
+ line-height: 0.75rem;
4203
+ letter-spacing: 0.02em;
4204
+ }
4177
4205
  }
4178
4206
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[2])}) {
4179
4207
  /* Step 3. Title-only cards. The "concept illustration" caveat lives on the picture, so it
@@ -5332,6 +5360,7 @@ function ErrorBanner({
5332
5360
  }
5333
5361
  function PromptCarousel({
5334
5362
  strings: T,
5363
+ label,
5335
5364
  prompts,
5336
5365
  onPrompt,
5337
5366
  disabled
@@ -5363,7 +5392,7 @@ function PromptCarousel({
5363
5392
  return /* @__PURE__ */ jsxRuntime.jsxs(
5364
5393
  "div",
5365
5394
  {
5366
- className: "flex min-w-0 touch-pan-y items-center gap-1.5",
5395
+ className: "grid min-w-0 touch-pan-y grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-x-1.5 gap-y-1.5 sm:grid-cols-[auto_minmax(0,1fr)_auto]",
5367
5396
  role: "group",
5368
5397
  "aria-roledescription": "carousel",
5369
5398
  "aria-label": "Example questions",
@@ -5373,13 +5402,14 @@ function PromptCarousel({
5373
5402
  onBlurCapture: () => setPaused(false),
5374
5403
  ...swipe,
5375
5404
  children: [
5405
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "col-start-1 row-start-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground sm:col-span-3", children: label }),
5376
5406
  count > 1 ? /* @__PURE__ */ jsxRuntime.jsx(
5377
5407
  "button",
5378
5408
  {
5379
5409
  type: "button",
5380
5410
  "aria-label": T.prevSuggestion,
5381
5411
  onClick: () => go(-1),
5382
- className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5412
+ className: "col-start-2 row-start-1 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:col-start-1 sm:row-start-2",
5383
5413
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
5384
5414
  }
5385
5415
  ) : null,
@@ -5393,18 +5423,21 @@ function PromptCarousel({
5393
5423
  "aria-label": `Ask: ${current}`,
5394
5424
  "aria-live": paused ? "polite" : "off",
5395
5425
  onClick: () => onPrompt(current),
5396
- className: "group flex min-w-0 flex-1 items-center gap-2 rounded-full border border-border bg-card px-4 py-2 max-sm:min-h-[3.625rem] max-sm:rounded-2xl text-left text-sm text-card-foreground shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5426
+ className: cn(
5427
+ "group col-span-3 row-start-2 flex min-w-0 items-center gap-2 rounded-full border border-border bg-card px-4 py-2 max-sm:min-h-[3.625rem] max-sm:rounded-2xl text-left text-sm text-card-foreground shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5428
+ count > 1 ? "sm:col-span-1 sm:col-start-2" : "sm:col-span-3"
5429
+ ),
5397
5430
  children: [
5398
5431
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-3.5 w-3.5 shrink-0 text-primary" }),
5399
5432
  /* @__PURE__ */ jsxRuntime.jsx(
5400
5433
  "span",
5401
5434
  {
5402
- className: "boff-explore-fade min-w-0 max-sm:line-clamp-2 sm:truncate",
5435
+ className: "boff-explore-fade min-w-0 max-sm:line-clamp-3 sm:truncate",
5403
5436
  children: current
5404
5437
  },
5405
5438
  current
5406
5439
  ),
5407
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "ml-auto h-3.5 w-3.5 shrink-0 rotate-45 text-muted-foreground transition-colors group-hover:text-primary" })
5440
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "ml-auto h-3.5 w-3.5 shrink-0 rotate-45 text-muted-foreground transition-colors group-hover:text-primary max-sm:hidden" })
5408
5441
  ]
5409
5442
  }
5410
5443
  ),
@@ -5414,7 +5447,7 @@ function PromptCarousel({
5414
5447
  type: "button",
5415
5448
  "aria-label": T.nextSuggestion,
5416
5449
  onClick: () => go(1),
5417
- className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5450
+ className: "col-start-3 row-start-1 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:row-start-2",
5418
5451
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
5419
5452
  }
5420
5453
  ) : null
@@ -5513,8 +5546,11 @@ function ConceptStrip({
5513
5546
  const measureRail = React.useCallback(() => {
5514
5547
  const el = railRef.current;
5515
5548
  if (!el) return;
5516
- setCanLeft(el.scrollLeft > 1);
5517
- setCanRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
5549
+ const max = el.scrollWidth - el.clientWidth;
5550
+ const rtl = typeof getComputedStyle === "function" && getComputedStyle(el).direction === "rtl";
5551
+ const fromLeft = rtl ? max + el.scrollLeft : el.scrollLeft;
5552
+ setCanLeft(fromLeft > 1);
5553
+ setCanRight(fromLeft < max - 1);
5518
5554
  }, []);
5519
5555
  React.useEffect(() => {
5520
5556
  const el = railRef.current;
@@ -5583,7 +5619,11 @@ function ConceptStrip({
5583
5619
  onScroll: measureRail,
5584
5620
  "data-boff-explore": "concept-strip",
5585
5621
  "aria-label": T.conceptStripLabel,
5586
- className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
5622
+ className: cn(
5623
+ "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
5624
+ canLeft && "boff-explore-rail-fade-left",
5625
+ canRight && "boff-explore-rail-fade-right"
5626
+ ),
5587
5627
  children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
5588
5628
  "li",
5589
5629
  {
@@ -5623,7 +5663,7 @@ function ConceptStrip({
5623
5663
  "span",
5624
5664
  {
5625
5665
  "aria-hidden": "true",
5626
- className: "pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
5666
+ className: "boff-explore-concept-badge pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
5627
5667
  children: T.conceptIllustration
5628
5668
  }
5629
5669
  )
@@ -5778,18 +5818,16 @@ function WelcomeState({
5778
5818
  },
5779
5819
  i
5780
5820
  )) }),
5781
- prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: [
5782
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
5783
- /* @__PURE__ */ jsxRuntime.jsx(
5784
- PromptCarousel,
5785
- {
5786
- strings: T,
5787
- prompts,
5788
- onPrompt,
5789
- disabled
5790
- }
5791
- )
5792
- ] }) : null,
5821
+ prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
5822
+ PromptCarousel,
5823
+ {
5824
+ strings: T,
5825
+ label: T.tryAsking,
5826
+ prompts,
5827
+ onPrompt,
5828
+ disabled
5829
+ }
5830
+ ) }) : null,
5793
5831
  products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-4", children: [
5794
5832
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
5795
5833
  /* @__PURE__ */ jsxRuntime.jsx(