@tapizlabs/ui 0.2.10 → 0.2.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.
package/dist/index.js CHANGED
@@ -237,6 +237,18 @@ var ExternalLink = ({ size = 14, className, style }) => /* @__PURE__ */ jsxs2("s
237
237
  /* @__PURE__ */ jsx2("polyline", { points: "15 3 21 3 21 9" }),
238
238
  /* @__PURE__ */ jsx2("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
239
239
  ] });
240
+ var GitHubIcon = ({ size = 14, className, style }) => /* @__PURE__ */ jsx2(
241
+ "svg",
242
+ {
243
+ width: size,
244
+ height: size,
245
+ viewBox: "0 0 24 24",
246
+ fill: "currentColor",
247
+ style,
248
+ className,
249
+ children: /* @__PURE__ */ jsx2("path", { d: "M12 .5C5.37.5 0 5.87 0 12.5c0 5.3 3.44 9.8 8.2 11.38.6.11.82-.26.82-.58 0-.29-.01-1.04-.02-2.05-3.34.73-4.04-1.61-4.04-1.61-.55-1.38-1.33-1.75-1.33-1.75-1.09-.74.08-.73.08-.73 1.2.09 1.84 1.24 1.84 1.24 1.08 1.84 2.81 1.31 3.49 1 .11-.78.42-1.31.76-1.61-2.67-.31-5.47-1.33-5.47-5.93 0-1.31.47-2.39 1.24-3.23-.12-.3-.54-1.54.12-3.2 0 0 1.01-.32 3.3 1.23a11.38 11.38 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.66 1.66.24 2.9.12 3.2.77.84 1.23 1.92 1.23 3.23 0 4.61-2.8 5.62-5.48 5.92.43.37.82 1.1.82 2.21 0 1.6-.01 2.88-.01 3.27 0 .32.21.7.83.58A12.01 12.01 0 0 0 24 12.5C24 5.87 18.63.5 12 .5Z" })
250
+ }
251
+ );
240
252
  var Image = ({ size = 14, className, style }) => /* @__PURE__ */ jsxs2("svg", { ...base(null, size, style), className, children: [
241
253
  /* @__PURE__ */ jsx2("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }),
242
254
  /* @__PURE__ */ jsx2("circle", { cx: "8.5", cy: "8.5", r: "1.5" }),
@@ -498,85 +510,122 @@ var LogoMark = ({
498
510
  bgClassName,
499
511
  bgFill = "#1496b3",
500
512
  bgOpacity = 1,
513
+ tone: tone2 = "solid",
501
514
  variant = "lms"
502
- }) => /* @__PURE__ */ jsxs6(
503
- "svg",
504
- {
505
- width: size,
506
- height: size,
507
- className,
508
- viewBox: "0 0 64 64",
509
- fill: "none",
510
- children: [
511
- /* @__PURE__ */ jsx6("rect", { width: "64", height: "64", rx: "14", fill: bgFill, opacity: bgOpacity, className: bgClassName }),
512
- variant === "lms" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
513
- /* @__PURE__ */ jsx6("rect", { x: "14", y: "14", width: "36", height: "10", rx: "3" }),
514
- /* @__PURE__ */ jsx6("rect", { x: "27", y: "14", width: "10", height: "36", rx: "3" })
515
- ] }),
516
- variant === "boards" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
517
- /* @__PURE__ */ jsx6("rect", { x: "13", y: "15", width: "10", height: "26", rx: "5" }),
518
- /* @__PURE__ */ jsx6("rect", { x: "27", y: "15", width: "10", height: "34", rx: "5" }),
519
- /* @__PURE__ */ jsx6("rect", { x: "41", y: "15", width: "10", height: "20", rx: "5" })
520
- ] }),
521
- variant === "playground" && /* @__PURE__ */ jsxs6(Fragment, { children: [
522
- /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
523
- /* @__PURE__ */ jsx6("rect", { x: "13", y: "12", width: "38", height: "9", rx: "3" }),
524
- /* @__PURE__ */ jsx6("rect", { x: "27", y: "12", width: "10", height: "30", rx: "3" })
525
- ] }),
526
- /* @__PURE__ */ jsx6(
527
- "path",
528
- {
529
- d: "M16 46 L23 51 L16 56",
530
- stroke: "#d4ff3a",
531
- strokeWidth: "4.5",
532
- strokeLinecap: "round",
533
- strokeLinejoin: "round",
534
- fill: "none"
535
- }
536
- ),
537
- /* @__PURE__ */ jsx6("rect", { x: "30", y: "52.5", width: "14", height: "4.5", rx: "2.25", fill: "#fff" })
538
- ] }),
539
- variant === "whiteboard" && /* @__PURE__ */ jsxs6(Fragment, { children: [
540
- /* @__PURE__ */ jsx6("rect", { x: "12", y: "15", width: "40", height: "28", rx: "4", fill: "#fff" }),
541
- /* @__PURE__ */ jsx6(
542
- "path",
543
- {
544
- d: "M19 35 C24 24, 30 24, 33 31 C35.5 37, 41 36, 45 27",
545
- stroke: "#1496b3",
546
- strokeWidth: "3.4",
547
- strokeLinecap: "round",
548
- strokeLinejoin: "round",
549
- fill: "none"
550
- }
551
- ),
552
- /* @__PURE__ */ jsx6("circle", { cx: "19", cy: "35", r: "2.6", fill: "#1496b3" }),
553
- /* @__PURE__ */ jsx6("circle", { cx: "45", cy: "27", r: "2.6", fill: "#d4ff3a" }),
554
- /* @__PURE__ */ jsx6(
555
- "path",
556
- {
557
- d: "M22 43 L19 51 M42 43 L45 51",
558
- stroke: "#fff",
559
- strokeWidth: "4",
560
- strokeLinecap: "round"
561
- }
562
- )
563
- ] }),
564
- variant === "cloud" && /* @__PURE__ */ jsxs6(Fragment, { children: [
515
+ }) => {
516
+ const outline = tone2 === "outline";
517
+ const glyph = outline ? "currentColor" : "#fff";
518
+ const accentDetail = outline ? bgFill : "#1496b3";
519
+ return /* @__PURE__ */ jsxs6(
520
+ "svg",
521
+ {
522
+ width: size,
523
+ height: size,
524
+ className,
525
+ viewBox: "0 0 64 64",
526
+ fill: "none",
527
+ children: [
565
528
  /* @__PURE__ */ jsx6(
566
- "path",
529
+ "rect",
567
530
  {
568
- fill: "#fff",
569
- d: "M23 45 q-4.6 0-7.8-3.2Q12 38.6 12 34 q0-3.95 2.5-7 2.5-3.05 6.4-3.83 1.05-4.25 4.6-6.91Q29.05 13.6 33.7 13.6 q5.75 0 9.78 3.9 4.03 3.9 4.22 9.52 3.26.29 5.38 2.69 2.12 2.4 2.12 5.63 0 3.58-2.56 6.11T46 47 H23Z"
531
+ width: "64",
532
+ height: "64",
533
+ rx: "14",
534
+ fill: outline ? "none" : bgFill,
535
+ opacity: outline ? 1 : bgOpacity,
536
+ stroke: outline ? "currentColor" : void 0,
537
+ strokeWidth: outline ? 4 : void 0,
538
+ className: bgClassName
570
539
  }
571
540
  ),
572
- /* @__PURE__ */ jsxs6("g", { fill: "#1496b3", children: [
573
- /* @__PURE__ */ jsx6("rect", { x: "25", y: "30", width: "16", height: "3.6", rx: "1.6" }),
574
- /* @__PURE__ */ jsx6("rect", { x: "31.2", y: "30", width: "3.6", height: "12", rx: "1.6" })
541
+ variant === "lms" && /* @__PURE__ */ jsxs6("g", { fill: glyph, children: [
542
+ /* @__PURE__ */ jsx6("rect", { x: "14", y: "14", width: "36", height: "10", rx: "3" }),
543
+ /* @__PURE__ */ jsx6("rect", { x: "27", y: "14", width: "10", height: "36", rx: "3" })
544
+ ] }),
545
+ variant === "boards" && /* @__PURE__ */ jsxs6("g", { fill: glyph, children: [
546
+ /* @__PURE__ */ jsx6("rect", { x: "13", y: "15", width: "10", height: "26", rx: "5" }),
547
+ /* @__PURE__ */ jsx6("rect", { x: "27", y: "15", width: "10", height: "34", rx: "5" }),
548
+ /* @__PURE__ */ jsx6("rect", { x: "41", y: "15", width: "10", height: "20", rx: "5" })
549
+ ] }),
550
+ variant === "playground" && /* @__PURE__ */ jsxs6(Fragment, { children: [
551
+ /* @__PURE__ */ jsxs6("g", { fill: glyph, children: [
552
+ /* @__PURE__ */ jsx6("rect", { x: "13", y: "12", width: "38", height: "9", rx: "3" }),
553
+ /* @__PURE__ */ jsx6("rect", { x: "27", y: "12", width: "10", height: "30", rx: "3" })
554
+ ] }),
555
+ /* @__PURE__ */ jsx6(
556
+ "path",
557
+ {
558
+ d: "M16 46 L23 51 L16 56",
559
+ stroke: "#d4ff3a",
560
+ strokeWidth: "4.5",
561
+ strokeLinecap: "round",
562
+ strokeLinejoin: "round",
563
+ fill: "none"
564
+ }
565
+ ),
566
+ /* @__PURE__ */ jsx6("rect", { x: "30", y: "52.5", width: "14", height: "4.5", rx: "2.25", fill: glyph })
567
+ ] }),
568
+ variant === "whiteboard" && /* @__PURE__ */ jsxs6(Fragment, { children: [
569
+ /* @__PURE__ */ jsx6("rect", { x: "12", y: "15", width: "40", height: "28", rx: "4", fill: glyph }),
570
+ /* @__PURE__ */ jsx6(
571
+ "path",
572
+ {
573
+ d: "M19 35 C24 24, 30 24, 33 31 C35.5 37, 41 36, 45 27",
574
+ stroke: accentDetail,
575
+ strokeWidth: "3.4",
576
+ strokeLinecap: "round",
577
+ strokeLinejoin: "round",
578
+ fill: "none"
579
+ }
580
+ ),
581
+ /* @__PURE__ */ jsx6("circle", { cx: "19", cy: "35", r: "2.6", fill: accentDetail }),
582
+ /* @__PURE__ */ jsx6("circle", { cx: "45", cy: "27", r: "2.6", fill: "#d4ff3a" }),
583
+ /* @__PURE__ */ jsx6(
584
+ "path",
585
+ {
586
+ d: "M22 43 L19 51 M42 43 L45 51",
587
+ stroke: glyph,
588
+ strokeWidth: "4",
589
+ strokeLinecap: "round"
590
+ }
591
+ )
592
+ ] }),
593
+ variant === "cloud" && /* @__PURE__ */ jsxs6(Fragment, { children: [
594
+ /* @__PURE__ */ jsx6(
595
+ "path",
596
+ {
597
+ fill: glyph,
598
+ d: "M23 45 q-4.6 0-7.8-3.2Q12 38.6 12 34 q0-3.95 2.5-7 2.5-3.05 6.4-3.83 1.05-4.25 4.6-6.91Q29.05 13.6 33.7 13.6 q5.75 0 9.78 3.9 4.03 3.9 4.22 9.52 3.26.29 5.38 2.69 2.12 2.4 2.12 5.63 0 3.58-2.56 6.11T46 47 H23Z"
599
+ }
600
+ ),
601
+ /* @__PURE__ */ jsxs6("g", { fill: accentDetail, children: [
602
+ /* @__PURE__ */ jsx6("rect", { x: "25", y: "30", width: "16", height: "3.6", rx: "1.6" }),
603
+ /* @__PURE__ */ jsx6("rect", { x: "31.2", y: "30", width: "3.6", height: "12", rx: "1.6" })
604
+ ] })
605
+ ] }),
606
+ variant === "specs" && /* @__PURE__ */ jsxs6(Fragment, { children: [
607
+ /* @__PURE__ */ jsx6("rect", { x: "16", y: "12", width: "32", height: "40", rx: "4", fill: glyph }),
608
+ /* @__PURE__ */ jsxs6("g", { fill: accentDetail, children: [
609
+ /* @__PURE__ */ jsx6("rect", { x: "21", y: "19", width: "22", height: "3.4", rx: "1.7" }),
610
+ /* @__PURE__ */ jsx6("rect", { x: "21", y: "26", width: "22", height: "3.4", rx: "1.7" }),
611
+ /* @__PURE__ */ jsx6("rect", { x: "21", y: "33", width: "14", height: "3.4", rx: "1.7" })
612
+ ] }),
613
+ /* @__PURE__ */ jsx6(
614
+ "path",
615
+ {
616
+ d: "M22 43 L26 47 L34 39",
617
+ stroke: "#d4ff3a",
618
+ strokeWidth: "4",
619
+ strokeLinecap: "round",
620
+ strokeLinejoin: "round",
621
+ fill: "none"
622
+ }
623
+ )
575
624
  ] })
576
- ] })
577
- ]
578
- }
579
- );
625
+ ]
626
+ }
627
+ );
628
+ };
580
629
 
581
630
  // src/components/icons/FormsIcons.tsx
582
631
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
@@ -1599,8 +1648,27 @@ function InfoBanner(props) {
1599
1648
  );
1600
1649
  }
1601
1650
 
1651
+ // src/components/shared/ThemeIconButton.tsx
1652
+ import { jsx as jsx33 } from "react/jsx-runtime";
1653
+ function ThemeIconButton({
1654
+ icon,
1655
+ className = "",
1656
+ type = "button",
1657
+ ...props
1658
+ }) {
1659
+ return /* @__PURE__ */ jsx33(
1660
+ "button",
1661
+ {
1662
+ type,
1663
+ className: `inline-flex h-9 w-9 cursor-pointer items-center justify-center border-0 bg-transparent p-1.5 text-txt-3 transition-colors duration-150 hover:text-primary-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--tapiz-border-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-[color:var(--tapiz-bg-surface)] ${className}`.trim(),
1664
+ ...props,
1665
+ children: /* @__PURE__ */ jsx33("span", { className: "inline-flex h-4 w-4 items-center justify-center", children: icon })
1666
+ }
1667
+ );
1668
+ }
1669
+
1602
1670
  // src/components/shared/PageHeader.tsx
1603
- import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1671
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
1604
1672
  function PageHeader({
1605
1673
  title,
1606
1674
  subtitle,
@@ -1617,25 +1685,25 @@ function PageHeader({
1617
1685
  const resolvedActions = actions ?? action;
1618
1686
  const variantClass = variant === "brutal" ? "border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-5 shadow-[var(--tapiz-shadow-brutal)]" : variant === "enterprise" ? "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5 shadow-[var(--tapiz-shadow-sm)]" : "border-b border-[var(--tapiz-border-subtle)] pb-4";
1619
1687
  return /* @__PURE__ */ jsxs23("div", { className: `page-header mb-5 flex flex-col gap-3 animate-fade-in-up ${variantClass} ${className}`.trim(), children: [
1620
- breadcrumbs ? /* @__PURE__ */ jsx33("div", { className: "font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: breadcrumbs }) : null,
1688
+ breadcrumbs ? /* @__PURE__ */ jsx34("div", { className: "font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: breadcrumbs }) : null,
1621
1689
  /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
1622
1690
  /* @__PURE__ */ jsxs23("div", { className: "min-w-0", children: [
1623
- subtitle ? /* @__PURE__ */ jsx33("div", { className: "kicker mb-1.5", children: subtitle }) : null,
1691
+ subtitle ? /* @__PURE__ */ jsx34("div", { className: "kicker mb-1.5", children: subtitle }) : null,
1624
1692
  /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2.5", children: [
1625
- icon ? /* @__PURE__ */ jsx33("span", { className: "text-[var(--tapiz-accent)]", children: icon }) : null,
1626
- /* @__PURE__ */ jsx33("h2", { className: "font-(--font-display) text-[22px] tracking-[-0.03em] text-[var(--tapiz-text-primary)] md:text-[26px]", children: title })
1693
+ icon ? /* @__PURE__ */ jsx34("span", { className: "text-[var(--tapiz-accent)]", children: icon }) : null,
1694
+ /* @__PURE__ */ jsx34("h2", { className: "font-(--font-display) text-[22px] tracking-[-0.03em] text-[var(--tapiz-text-primary)] md:text-[26px]", children: title })
1627
1695
  ] }),
1628
- description ? /* @__PURE__ */ jsx33("div", { className: "mt-2 max-w-3xl text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null,
1629
- meta ? /* @__PURE__ */ jsx33("div", { className: "mt-3 font-mono text-[11px] text-[var(--tapiz-text-disabled)]", children: meta }) : null
1696
+ description ? /* @__PURE__ */ jsx34("div", { className: "mt-2 max-w-3xl text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null,
1697
+ meta ? /* @__PURE__ */ jsx34("div", { className: "mt-3 font-mono text-[11px] text-[var(--tapiz-text-disabled)]", children: meta }) : null
1630
1698
  ] }),
1631
- resolvedActions ? /* @__PURE__ */ jsx33("div", { className: "flex shrink-0 flex-wrap gap-2", children: resolvedActions }) : null
1699
+ resolvedActions ? /* @__PURE__ */ jsx34("div", { className: "flex shrink-0 flex-wrap gap-2", children: resolvedActions }) : null
1632
1700
  ] }),
1633
1701
  banner ? banner : null
1634
1702
  ] });
1635
1703
  }
1636
1704
 
1637
1705
  // src/components/shared/MetricCard.tsx
1638
- import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1706
+ import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
1639
1707
  var trendClasses = {
1640
1708
  positive: "border-[var(--tapiz-success)] text-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)]",
1641
1709
  negative: "border-[var(--tapiz-danger)] text-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)]",
@@ -1655,22 +1723,22 @@ function MetricCard({
1655
1723
  return /* @__PURE__ */ jsxs24(Card, { variant, padding: "md", hover: true, className: `relative overflow-hidden ${className}`, children: [
1656
1724
  /* @__PURE__ */ jsxs24("div", { className: "flex items-start justify-between gap-4", children: [
1657
1725
  /* @__PURE__ */ jsxs24("div", { className: "min-w-0", children: [
1658
- /* @__PURE__ */ jsx34("p", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
1659
- /* @__PURE__ */ jsx34("div", { className: "mt-2 font-display text-3xl font-semibold tracking-[-0.05em] text-[var(--tapiz-text-primary)]", children: value })
1726
+ /* @__PURE__ */ jsx35("p", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
1727
+ /* @__PURE__ */ jsx35("div", { className: "mt-2 font-display text-3xl font-semibold tracking-[-0.05em] text-[var(--tapiz-text-primary)]", children: value })
1660
1728
  ] }),
1661
- icon ? /* @__PURE__ */ jsx34("div", { className: "grid h-10 w-10 shrink-0 place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--color-icon-bg)] text-[var(--tapiz-accent)]", children: icon }) : null
1729
+ icon ? /* @__PURE__ */ jsx35("div", { className: "grid h-10 w-10 shrink-0 place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--color-icon-bg)] text-[var(--tapiz-accent)]", children: icon }) : null
1662
1730
  ] }),
1663
1731
  description || trend ? /* @__PURE__ */ jsxs24("div", { className: "mt-4 flex flex-wrap items-center gap-2", children: [
1664
- trend ? /* @__PURE__ */ jsx34("span", { className: `inline-flex border px-2 py-0.5 font-mono text-[10px] font-bold uppercase tracking-widest ${trendClasses[trendTone]}`, children: trend }) : null,
1665
- description ? /* @__PURE__ */ jsx34("p", { className: "text-xs text-[var(--tapiz-text-muted)]", children: description }) : null
1732
+ trend ? /* @__PURE__ */ jsx35("span", { className: `inline-flex border px-2 py-0.5 font-mono text-[10px] font-bold uppercase tracking-widest ${trendClasses[trendTone]}`, children: trend }) : null,
1733
+ description ? /* @__PURE__ */ jsx35("p", { className: "text-xs text-[var(--tapiz-text-muted)]", children: description }) : null
1666
1734
  ] }) : null
1667
1735
  ] });
1668
1736
  }
1669
1737
 
1670
1738
  // src/components/shared/StatGrid.tsx
1671
- import { jsx as jsx35 } from "react/jsx-runtime";
1739
+ import { jsx as jsx36 } from "react/jsx-runtime";
1672
1740
  function StatGrid({ children, className = "", minColumnWidth = "14rem" }) {
1673
- return /* @__PURE__ */ jsx35(
1741
+ return /* @__PURE__ */ jsx36(
1674
1742
  "div",
1675
1743
  {
1676
1744
  className: `grid gap-4 ${className}`,
@@ -1681,23 +1749,23 @@ function StatGrid({ children, className = "", minColumnWidth = "14rem" }) {
1681
1749
  }
1682
1750
 
1683
1751
  // src/components/shared/SectionCard.tsx
1684
- import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
1752
+ import { jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
1685
1753
  function SectionCard({ title, eyebrow, description, action, children, className = "" }) {
1686
1754
  return /* @__PURE__ */ jsxs25(Card, { variant: "surface", padding: "none", className, children: [
1687
1755
  title || eyebrow || description || action ? /* @__PURE__ */ jsxs25("div", { className: "flex flex-col gap-3 border-b border-[var(--tapiz-border-subtle)] px-5 py-4 sm:flex-row sm:items-start sm:justify-between", children: [
1688
1756
  /* @__PURE__ */ jsxs25("div", { className: "min-w-0", children: [
1689
- eyebrow ? /* @__PURE__ */ jsx36("div", { className: "kicker mb-1", children: eyebrow }) : null,
1690
- title ? /* @__PURE__ */ jsx36("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
1691
- description ? /* @__PURE__ */ jsx36("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null
1757
+ eyebrow ? /* @__PURE__ */ jsx37("div", { className: "kicker mb-1", children: eyebrow }) : null,
1758
+ title ? /* @__PURE__ */ jsx37("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
1759
+ description ? /* @__PURE__ */ jsx37("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null
1692
1760
  ] }),
1693
- action ? /* @__PURE__ */ jsx36("div", { className: "shrink-0", children: action }) : null
1761
+ action ? /* @__PURE__ */ jsx37("div", { className: "shrink-0", children: action }) : null
1694
1762
  ] }) : null,
1695
- /* @__PURE__ */ jsx36("div", { className: "p-5", children })
1763
+ /* @__PURE__ */ jsx37("div", { className: "p-5", children })
1696
1764
  ] });
1697
1765
  }
1698
1766
 
1699
1767
  // src/components/shared/SearchInput.tsx
1700
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
1768
+ import { jsx as jsx38, jsxs as jsxs26 } from "react/jsx-runtime";
1701
1769
  function SearchInput({
1702
1770
  value,
1703
1771
  onChange,
@@ -1711,8 +1779,8 @@ function SearchInput({
1711
1779
  ...props
1712
1780
  }) {
1713
1781
  return /* @__PURE__ */ jsxs26("div", { className: `relative ${wrapperClassName}`.trim(), style: wrapperStyle, children: [
1714
- /* @__PURE__ */ jsx37("span", { className: `pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 ${iconClassName}`.trim(), children: /* @__PURE__ */ jsx37(Search, { size: 15 }) }),
1715
- /* @__PURE__ */ jsx37(
1782
+ /* @__PURE__ */ jsx38("span", { className: `pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 ${iconClassName}`.trim(), children: /* @__PURE__ */ jsx38(Search, { size: 15 }) }),
1783
+ /* @__PURE__ */ jsx38(
1716
1784
  Input,
1717
1785
  {
1718
1786
  ...props,
@@ -1723,21 +1791,21 @@ function SearchInput({
1723
1791
  className: `pl-9 ${inputClassName}`.trim()
1724
1792
  }
1725
1793
  ),
1726
- clearable && value ? /* @__PURE__ */ jsx37(
1794
+ clearable && value ? /* @__PURE__ */ jsx38(
1727
1795
  "button",
1728
1796
  {
1729
1797
  type: "button",
1730
1798
  onClick: () => onChange(""),
1731
1799
  className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-lg p-1 text-txt-4 transition-colors hover:bg-ink-300 hover:text-txt-2",
1732
1800
  title: clearTitle,
1733
- children: /* @__PURE__ */ jsx37(X, { size: 14 })
1801
+ children: /* @__PURE__ */ jsx38(X, { size: 14 })
1734
1802
  }
1735
1803
  ) : null
1736
1804
  ] });
1737
1805
  }
1738
1806
 
1739
1807
  // src/components/shared/Pagination.tsx
1740
- import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
1808
+ import { jsx as jsx39, jsxs as jsxs27 } from "react/jsx-runtime";
1741
1809
  function getPageNumbers(page, totalPages) {
1742
1810
  if (totalPages <= 7) return Array.from({ length: totalPages }, (_, i) => i + 1);
1743
1811
  const pages = [1];
@@ -1762,7 +1830,7 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1762
1830
  const from = pageSize ? (page - 1) * pageSize + 1 : null;
1763
1831
  const to = pageSize && totalItems ? Math.min(page * pageSize, totalItems) : null;
1764
1832
  return /* @__PURE__ */ jsxs27("div", { className: "flex flex-col items-center justify-between gap-3 border-t border-border pt-3 sm:flex-row", children: [
1765
- totalItems != null && from != null && to != null ? /* @__PURE__ */ jsx38("span", { className: "order-2 font-mono text-[12px] text-txt-4 sm:order-1", children: copy.showing({ from, to, total: totalItems }) }) : /* @__PURE__ */ jsx38("span", { className: "order-2 font-mono text-[11px] text-txt-4 sm:order-1", children: copy.page({ page, totalPages }) }),
1833
+ totalItems != null && from != null && to != null ? /* @__PURE__ */ jsx39("span", { className: "order-2 font-mono text-[12px] text-txt-4 sm:order-1", children: copy.showing({ from, to, total: totalItems }) }) : /* @__PURE__ */ jsx39("span", { className: "order-2 font-mono text-[11px] text-txt-4 sm:order-1", children: copy.page({ page, totalPages }) }),
1766
1834
  /* @__PURE__ */ jsxs27("div", { className: "order-1 flex items-center gap-1 sm:order-2", children: [
1767
1835
  /* @__PURE__ */ jsxs27(
1768
1836
  "button",
@@ -1773,13 +1841,13 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1773
1841
  title: copy.prevTitle,
1774
1842
  className: "flex items-center gap-1 border border-border px-2.5 py-1.5 font-mono text-[11px] text-txt-3 transition-colors hover:border-border-hi hover:text-txt-1 disabled:cursor-not-allowed disabled:opacity-30",
1775
1843
  children: [
1776
- /* @__PURE__ */ jsx38(ChevronLeft, { size: 12 }),
1777
- /* @__PURE__ */ jsx38("span", { className: "hidden sm:inline", children: copy.prev })
1844
+ /* @__PURE__ */ jsx39(ChevronLeft, { size: 12 }),
1845
+ /* @__PURE__ */ jsx39("span", { className: "hidden sm:inline", children: copy.prev })
1778
1846
  ]
1779
1847
  }
1780
1848
  ),
1781
- /* @__PURE__ */ jsx38("div", { className: "flex items-center gap-1", children: pageNumbers.map(
1782
- (entry, index) => entry === "\u2026" ? /* @__PURE__ */ jsx38("span", { className: "w-7 text-center font-mono text-[11px] text-txt-4", children: "\u2026" }, `ellipsis-${index}`) : /* @__PURE__ */ jsx38(
1849
+ /* @__PURE__ */ jsx39("div", { className: "flex items-center gap-1", children: pageNumbers.map(
1850
+ (entry, index) => entry === "\u2026" ? /* @__PURE__ */ jsx39("span", { className: "w-7 text-center font-mono text-[11px] text-txt-4", children: "\u2026" }, `ellipsis-${index}`) : /* @__PURE__ */ jsx39(
1783
1851
  "button",
1784
1852
  {
1785
1853
  type: "button",
@@ -1799,8 +1867,8 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1799
1867
  title: copy.nextTitle,
1800
1868
  className: "flex items-center gap-1 border border-border px-2.5 py-1.5 font-mono text-[10px] text-txt-3 transition-colors hover:border-border-hi hover:text-txt-1 disabled:cursor-not-allowed disabled:opacity-30",
1801
1869
  children: [
1802
- /* @__PURE__ */ jsx38("span", { className: "hidden sm:inline", children: copy.next }),
1803
- /* @__PURE__ */ jsx38(ChevronRight, { size: 12 })
1870
+ /* @__PURE__ */ jsx39("span", { className: "hidden sm:inline", children: copy.next }),
1871
+ /* @__PURE__ */ jsx39(ChevronRight, { size: 12 })
1804
1872
  ]
1805
1873
  }
1806
1874
  )
@@ -1809,13 +1877,13 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1809
1877
  }
1810
1878
 
1811
1879
  // src/components/shared/SectionTitle.tsx
1812
- import { jsx as jsx39 } from "react/jsx-runtime";
1880
+ import { jsx as jsx40 } from "react/jsx-runtime";
1813
1881
  function SectionTitle({ children, className = "" }) {
1814
- return /* @__PURE__ */ jsx39("h3", { className: `mb-1 text-sm font-semibold text-txt-1 ${className}`.trim(), children });
1882
+ return /* @__PURE__ */ jsx40("h3", { className: `mb-1 text-sm font-semibold text-txt-1 ${className}`.trim(), children });
1815
1883
  }
1816
1884
 
1817
1885
  // src/components/shared/StatusBadge.tsx
1818
- import { jsx as jsx40 } from "react/jsx-runtime";
1886
+ import { jsx as jsx41 } from "react/jsx-runtime";
1819
1887
  var BASE = "inline-flex items-center border px-2 py-0.5 font-mono text-[9px] font-bold uppercase tracking-[0.15em]";
1820
1888
  var variantStyles = {
1821
1889
  default: "border-[var(--tapiz-border-strong)] text-[var(--tapiz-text-secondary)] bg-[var(--tapiz-bg-surface-muted)]",
@@ -1828,13 +1896,13 @@ var variantStyles = {
1828
1896
  pending: "border-[var(--tapiz-text-muted)] text-[var(--tapiz-text-muted)] bg-transparent"
1829
1897
  };
1830
1898
  function StatusBadge({ label, variant = "default", className = "" }) {
1831
- return /* @__PURE__ */ jsx40("span", { className: `${BASE} ${variantStyles[variant]} ${className}`.trim(), children: label });
1899
+ return /* @__PURE__ */ jsx41("span", { className: `${BASE} ${variantStyles[variant]} ${className}`.trim(), children: label });
1832
1900
  }
1833
1901
 
1834
1902
  // src/components/shared/ActionMenu.tsx
1835
1903
  import { useEffect as useEffect2, useLayoutEffect, useRef as useRef2, useState as useState5 } from "react";
1836
1904
  import { createPortal as createPortal4 } from "react-dom";
1837
- import { Fragment as Fragment2, jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
1905
+ import { Fragment as Fragment2, jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
1838
1906
  var defaultMenuStyle = {
1839
1907
  background: "var(--color-ink-200)",
1840
1908
  border: "1px solid var(--color-border-hi)",
@@ -1919,8 +1987,8 @@ function ActionMenu({
1919
1987
  };
1920
1988
  }, [open]);
1921
1989
  const menuNode = open && pos ? /* @__PURE__ */ jsxs28(Fragment2, { children: [
1922
- /* @__PURE__ */ jsx41("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
1923
- /* @__PURE__ */ jsx41(
1990
+ /* @__PURE__ */ jsx42("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
1991
+ /* @__PURE__ */ jsx42(
1924
1992
  "div",
1925
1993
  {
1926
1994
  ref: menuRef,
@@ -1938,7 +2006,7 @@ function ActionMenu({
1938
2006
  ...menuStyle
1939
2007
  },
1940
2008
  children: items.map((item, index) => /* @__PURE__ */ jsxs28("div", { children: [
1941
- index > 0 && item.danger ? /* @__PURE__ */ jsx41("div", { style: { borderTop: "1px solid var(--color-border)" } }) : null,
2009
+ index > 0 && item.danger ? /* @__PURE__ */ jsx42("div", { style: { borderTop: "1px solid var(--color-border)" } }) : null,
1942
2010
  /* @__PURE__ */ jsxs28(
1943
2011
  "button",
1944
2012
  {
@@ -1951,8 +2019,8 @@ function ActionMenu({
1951
2019
  item.onSelect();
1952
2020
  },
1953
2021
  children: [
1954
- item.loading ? /* @__PURE__ */ jsx41(Spinner, { color: "text-[var(--color-txt-3)]" }) : /* @__PURE__ */ jsx41("span", { className: item.danger ? "shrink-0 text-warn" : "shrink-0 text-primary-300", children: item.icon }),
1955
- /* @__PURE__ */ jsx41("span", { children: item.label })
2022
+ item.loading ? /* @__PURE__ */ jsx42(Spinner, { color: "text-[var(--color-txt-3)]" }) : /* @__PURE__ */ jsx42("span", { className: item.danger ? "shrink-0 text-warn" : "shrink-0 text-primary-300", children: item.icon }),
2023
+ /* @__PURE__ */ jsx42("span", { children: item.label })
1956
2024
  ]
1957
2025
  }
1958
2026
  )
@@ -1961,13 +2029,13 @@ function ActionMenu({
1961
2029
  )
1962
2030
  ] }) : null;
1963
2031
  return /* @__PURE__ */ jsxs28("div", { ref: btnRef, className: fullWidth ? "relative w-full" : "relative inline-block max-w-full", children: [
1964
- /* @__PURE__ */ jsx41(
2032
+ /* @__PURE__ */ jsx42(
1965
2033
  Button,
1966
2034
  {
1967
2035
  size: buttonSize,
1968
2036
  variant: buttonVariant,
1969
2037
  icon,
1970
- iconRight: /* @__PURE__ */ jsx41(ChevronDown, { size: 11 }),
2038
+ iconRight: /* @__PURE__ */ jsx42(ChevronDown, { size: 11 }),
1971
2039
  onClick: () => setOpen((value) => !value),
1972
2040
  className: buttonClassName,
1973
2041
  fullWidth,
@@ -1983,7 +2051,7 @@ import { useMemo as useMemo2, useState as useState6 } from "react";
1983
2051
 
1984
2052
  // src/components/table/DataTableRow.tsx
1985
2053
  import { memo } from "react";
1986
- import { jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
2054
+ import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
1987
2055
  var ALIGN_CLASS = {
1988
2056
  left: "text-left",
1989
2057
  center: "text-center",
@@ -1997,7 +2065,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
1997
2065
  onClick: clickable ? () => onRowClick?.(row) : void 0,
1998
2066
  className: `border-b border-[var(--tapiz-border-subtle)] transition-colors hover:bg-[var(--tapiz-bg-surface-muted)] ${striped ? "even:bg-[color-mix(in_srgb,var(--tapiz-bg-surface-muted)_35%,var(--tapiz-bg-surface))]" : ""} ${clickable ? "cursor-pointer" : ""}`,
1999
2067
  children: [
2000
- columns.map((column) => /* @__PURE__ */ jsx42(
2068
+ columns.map((column) => /* @__PURE__ */ jsx43(
2001
2069
  "td",
2002
2070
  {
2003
2071
  className: `${densityCellClass} text-xs text-[var(--tapiz-text-secondary)] ${ALIGN_CLASS[column.align ?? "left"]} ${column.className ?? ""}`,
@@ -2005,7 +2073,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
2005
2073
  },
2006
2074
  column.id
2007
2075
  )),
2008
- rowActions !== void 0 && /* @__PURE__ */ jsx42("td", { className: `${densityCellClass} text-right`, children: rowActions(row) })
2076
+ rowActions !== void 0 && /* @__PURE__ */ jsx43("td", { className: `${densityCellClass} text-right`, children: rowActions(row) })
2009
2077
  ]
2010
2078
  }
2011
2079
  );
@@ -2013,7 +2081,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
2013
2081
  var DataTableRow = memo(DataTableRowInner);
2014
2082
 
2015
2083
  // src/components/table/DataTable.tsx
2016
- import { jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
2084
+ import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2017
2085
  var ALIGN_CLASS2 = {
2018
2086
  left: "text-left",
2019
2087
  center: "text-center",
@@ -2082,17 +2150,17 @@ function DataTable({
2082
2150
  className
2083
2151
  ].filter(Boolean).join(" ");
2084
2152
  return /* @__PURE__ */ jsxs30("div", { className: wrapperClass, children: [
2085
- mobileCard !== void 0 && /* @__PURE__ */ jsx43("div", { className: "md:hidden", children: isLoading ? Array.from({ length: loadingRows }).map((_, i) => /* @__PURE__ */ jsx43("div", { className: "h-16 animate-pulse bg-ink-300" }, i)) : sortedData.length === 0 ? emptyState : sortedData.map((row) => /* @__PURE__ */ jsx43("div", { children: mobileCard(row) }, rowKey(row))) }),
2153
+ mobileCard !== void 0 && /* @__PURE__ */ jsx44("div", { className: "md:hidden", children: isLoading ? Array.from({ length: loadingRows }).map((_, i) => /* @__PURE__ */ jsx44("div", { className: "h-16 animate-pulse bg-ink-300" }, i)) : sortedData.length === 0 ? emptyState : sortedData.map((row) => /* @__PURE__ */ jsx44("div", { children: mobileCard(row) }, rowKey(row))) }),
2086
2154
  /* @__PURE__ */ jsxs30("table", { className: tableClass, children: [
2087
- /* @__PURE__ */ jsx43("thead", { children: /* @__PURE__ */ jsxs30("tr", { className: "border-b border-border bg-ink-300", children: [
2155
+ /* @__PURE__ */ jsx44("thead", { children: /* @__PURE__ */ jsxs30("tr", { className: "border-b border-border bg-ink-300", children: [
2088
2156
  columns.map((column) => {
2089
2157
  const baseClass = `${densityHeaderClass} ${stickyHeader ? "sticky top-0 z-10" : ""} ${ALIGN_CLASS2[column.align ?? "left"]} font-mono text-[11px] tracking-[.08em] text-txt-4 font-semibold whitespace-nowrap`;
2090
2158
  if (!column.sortable || !column.sortAccessor) {
2091
- return /* @__PURE__ */ jsx43("th", { scope: "col", className: baseClass, children: column.header }, column.id);
2159
+ return /* @__PURE__ */ jsx44("th", { scope: "col", className: baseClass, children: column.header }, column.id);
2092
2160
  }
2093
2161
  const active = serverSort ? serverSort.field === column.id : sort?.columnId === column.id;
2094
2162
  const direction = serverSort ? serverSort.dir : sort?.direction ?? "asc";
2095
- return /* @__PURE__ */ jsx43(
2163
+ return /* @__PURE__ */ jsx44(
2096
2164
  "th",
2097
2165
  {
2098
2166
  scope: "col",
@@ -2106,7 +2174,7 @@ function DataTable({
2106
2174
  className: `inline-flex items-center gap-1 select-none transition-colors hover:text-txt-1 ${active ? "text-txt-1" : ""}`,
2107
2175
  children: [
2108
2176
  column.header,
2109
- active && (direction === "asc" ? /* @__PURE__ */ jsx43(ChevronUp, { size: 12 }) : /* @__PURE__ */ jsx43(ChevronDown, { size: 12 }))
2177
+ active && (direction === "asc" ? /* @__PURE__ */ jsx44(ChevronUp, { size: 12 }) : /* @__PURE__ */ jsx44(ChevronDown, { size: 12 }))
2110
2178
  ]
2111
2179
  }
2112
2180
  )
@@ -2114,9 +2182,9 @@ function DataTable({
2114
2182
  column.id
2115
2183
  );
2116
2184
  }),
2117
- hasActions && /* @__PURE__ */ jsx43("th", { scope: "col", className: "px-3 py-2.5 text-right font-mono text-[11px] tracking-[.08em] text-txt-4 font-semibold whitespace-nowrap" })
2185
+ hasActions && /* @__PURE__ */ jsx44("th", { scope: "col", className: "px-3 py-2.5 text-right font-mono text-[11px] tracking-[.08em] text-txt-4 font-semibold whitespace-nowrap" })
2118
2186
  ] }) }),
2119
- /* @__PURE__ */ jsx43("tbody", { children: isLoading ? Array.from({ length: loadingRows }).map((_, rowIndex) => /* @__PURE__ */ jsx43("tr", { className: "border-b border-[var(--tapiz-border-subtle)]", children: Array.from({ length: colCount }).map((__, colIndex) => /* @__PURE__ */ jsx43("td", { className: densityCellClass, children: /* @__PURE__ */ jsx43("div", { className: "h-4 w-24 animate-pulse bg-[var(--tapiz-bg-surface-muted)]" }) }, colIndex)) }, rowIndex)) : sortedData.length === 0 ? /* @__PURE__ */ jsx43("tr", { children: /* @__PURE__ */ jsx43("td", { colSpan: colCount, className: "px-4 py-10 text-center text-txt-4 text-sm font-mono", children: emptyState }) }) : sortedData.map((row) => /* @__PURE__ */ jsx43(
2187
+ /* @__PURE__ */ jsx44("tbody", { children: isLoading ? Array.from({ length: loadingRows }).map((_, rowIndex) => /* @__PURE__ */ jsx44("tr", { className: "border-b border-[var(--tapiz-border-subtle)]", children: Array.from({ length: colCount }).map((__, colIndex) => /* @__PURE__ */ jsx44("td", { className: densityCellClass, children: /* @__PURE__ */ jsx44("div", { className: "h-4 w-24 animate-pulse bg-[var(--tapiz-bg-surface-muted)]" }) }, colIndex)) }, rowIndex)) : sortedData.length === 0 ? /* @__PURE__ */ jsx44("tr", { children: /* @__PURE__ */ jsx44("td", { colSpan: colCount, className: "px-4 py-10 text-center text-txt-4 text-sm font-mono", children: emptyState }) }) : sortedData.map((row) => /* @__PURE__ */ jsx44(
2120
2188
  DataTableRow,
2121
2189
  {
2122
2190
  row,
@@ -2134,9 +2202,9 @@ function DataTable({
2134
2202
  }
2135
2203
 
2136
2204
  // src/components/marketing/MarketingShell.tsx
2137
- import { jsx as jsx44 } from "react/jsx-runtime";
2205
+ import { jsx as jsx45 } from "react/jsx-runtime";
2138
2206
  function MarketingShell({ children, className = "", grid = true, noise = true }) {
2139
- return /* @__PURE__ */ jsx44(
2207
+ return /* @__PURE__ */ jsx45(
2140
2208
  "main",
2141
2209
  {
2142
2210
  className: [
@@ -2151,93 +2219,93 @@ function MarketingShell({ children, className = "", grid = true, noise = true })
2151
2219
  }
2152
2220
 
2153
2221
  // src/components/marketing/HeroFrame.tsx
2154
- import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2222
+ import { jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
2155
2223
  function HeroFrame({ eyebrow, title, description, actions, visual, meta, className = "" }) {
2156
2224
  return /* @__PURE__ */ jsxs31("section", { className: `mx-auto grid max-w-7xl gap-10 px-[var(--tapiz-space-page-x)] py-[var(--tapiz-space-section-y)] lg:grid-cols-[1fr_0.9fr] lg:items-center ${className}`, children: [
2157
2225
  /* @__PURE__ */ jsxs31("div", { className: "animate-fade-in-up", children: [
2158
- eyebrow ? /* @__PURE__ */ jsx45("div", { className: "kicker mb-4", children: eyebrow }) : null,
2159
- /* @__PURE__ */ jsx45("h1", { className: "max-w-4xl text-5xl font-semibold leading-[0.95] tracking-[-0.07em] text-[var(--tapiz-text-primary)] md:text-7xl", children: title }),
2160
- description ? /* @__PURE__ */ jsx45("p", { className: "mt-6 max-w-2xl text-base leading-7 text-[var(--tapiz-text-secondary)] md:text-lg", children: description }) : null,
2161
- actions ? /* @__PURE__ */ jsx45("div", { className: "mt-8 flex flex-wrap gap-3", children: actions }) : null,
2162
- meta ? /* @__PURE__ */ jsx45("div", { className: "mt-8 border-l-2 border-[var(--tapiz-accent)] pl-4 font-mono text-xs text-[var(--tapiz-text-muted)]", children: meta }) : null
2226
+ eyebrow ? /* @__PURE__ */ jsx46("div", { className: "kicker mb-4", children: eyebrow }) : null,
2227
+ /* @__PURE__ */ jsx46("h1", { className: "max-w-4xl text-5xl font-semibold leading-[0.95] tracking-[-0.07em] text-[var(--tapiz-text-primary)] md:text-7xl", children: title }),
2228
+ description ? /* @__PURE__ */ jsx46("p", { className: "mt-6 max-w-2xl text-base leading-7 text-[var(--tapiz-text-secondary)] md:text-lg", children: description }) : null,
2229
+ actions ? /* @__PURE__ */ jsx46("div", { className: "mt-8 flex flex-wrap gap-3", children: actions }) : null,
2230
+ meta ? /* @__PURE__ */ jsx46("div", { className: "mt-8 border-l-2 border-[var(--tapiz-accent)] pl-4 font-mono text-xs text-[var(--tapiz-text-muted)]", children: meta }) : null
2163
2231
  ] }),
2164
- visual ? /* @__PURE__ */ jsx45("div", { className: "animate-scale-in border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-brutal-lg)]", children: visual }) : null
2232
+ visual ? /* @__PURE__ */ jsx46("div", { className: "animate-scale-in border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-brutal-lg)]", children: visual }) : null
2165
2233
  ] });
2166
2234
  }
2167
2235
 
2168
2236
  // src/components/marketing/FeatureCard.tsx
2169
- import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
2237
+ import { jsx as jsx47, jsxs as jsxs32 } from "react/jsx-runtime";
2170
2238
  function FeatureCard({ title, description, icon, eyebrow, children, className = "", variant = "surface" }) {
2171
2239
  return /* @__PURE__ */ jsxs32(Card, { variant, hover: true, className: `group ${className}`, children: [
2172
2240
  /* @__PURE__ */ jsxs32("div", { className: "flex items-start gap-4", children: [
2173
- icon ? /* @__PURE__ */ jsx46("div", { className: "grid h-11 w-11 shrink-0 place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--color-icon-bg)] text-[var(--tapiz-accent)] group-hover:translate-x-[-1px] group-hover:translate-y-[-1px]", children: icon }) : null,
2241
+ icon ? /* @__PURE__ */ jsx47("div", { className: "grid h-11 w-11 shrink-0 place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--color-icon-bg)] text-[var(--tapiz-accent)] group-hover:translate-x-[-1px] group-hover:translate-y-[-1px]", children: icon }) : null,
2174
2242
  /* @__PURE__ */ jsxs32("div", { className: "min-w-0", children: [
2175
- eyebrow ? /* @__PURE__ */ jsx46("div", { className: "kicker mb-1", children: eyebrow }) : null,
2176
- /* @__PURE__ */ jsx46("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2177
- description ? /* @__PURE__ */ jsx46("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
2243
+ eyebrow ? /* @__PURE__ */ jsx47("div", { className: "kicker mb-1", children: eyebrow }) : null,
2244
+ /* @__PURE__ */ jsx47("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2245
+ description ? /* @__PURE__ */ jsx47("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
2178
2246
  ] })
2179
2247
  ] }),
2180
- children ? /* @__PURE__ */ jsx46("div", { className: "mt-5", children }) : null
2248
+ children ? /* @__PURE__ */ jsx47("div", { className: "mt-5", children }) : null
2181
2249
  ] });
2182
2250
  }
2183
2251
 
2184
2252
  // src/components/marketing/FeatureGrid.tsx
2185
- import { jsx as jsx47 } from "react/jsx-runtime";
2253
+ import { jsx as jsx48 } from "react/jsx-runtime";
2186
2254
  function FeatureGrid({ children, className = "" }) {
2187
- return /* @__PURE__ */ jsx47("div", { className: `grid gap-4 md:grid-cols-2 xl:grid-cols-3 ${className}`, children });
2255
+ return /* @__PURE__ */ jsx48("div", { className: `grid gap-4 md:grid-cols-2 xl:grid-cols-3 ${className}`, children });
2188
2256
  }
2189
2257
 
2190
2258
  // src/components/marketing/CTASection.tsx
2191
- import { jsx as jsx48, jsxs as jsxs33 } from "react/jsx-runtime";
2259
+ import { jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
2192
2260
  function CTASection({ eyebrow, title, description, actions, className = "" }) {
2193
- return /* @__PURE__ */ jsx48("section", { className: `mx-auto max-w-7xl px-[var(--tapiz-space-page-x)] py-[var(--tapiz-space-section-y)] ${className}`, children: /* @__PURE__ */ jsxs33("div", { className: "border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-8 shadow-[var(--tapiz-shadow-brutal-lg)] md:p-12", children: [
2194
- eyebrow ? /* @__PURE__ */ jsx48("div", { className: "kicker mb-3", children: eyebrow }) : null,
2261
+ return /* @__PURE__ */ jsx49("section", { className: `mx-auto max-w-7xl px-[var(--tapiz-space-page-x)] py-[var(--tapiz-space-section-y)] ${className}`, children: /* @__PURE__ */ jsxs33("div", { className: "border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-8 shadow-[var(--tapiz-shadow-brutal-lg)] md:p-12", children: [
2262
+ eyebrow ? /* @__PURE__ */ jsx49("div", { className: "kicker mb-3", children: eyebrow }) : null,
2195
2263
  /* @__PURE__ */ jsxs33("div", { className: "grid gap-6 lg:grid-cols-[1fr_auto] lg:items-end", children: [
2196
2264
  /* @__PURE__ */ jsxs33("div", { children: [
2197
- /* @__PURE__ */ jsx48("h2", { className: "max-w-3xl text-3xl font-semibold tracking-[-0.05em] md:text-5xl", children: title }),
2198
- description ? /* @__PURE__ */ jsx48("p", { className: "mt-4 max-w-2xl text-base leading-7 text-[var(--tapiz-text-secondary)]", children: description }) : null
2265
+ /* @__PURE__ */ jsx49("h2", { className: "max-w-3xl text-3xl font-semibold tracking-[-0.05em] md:text-5xl", children: title }),
2266
+ description ? /* @__PURE__ */ jsx49("p", { className: "mt-4 max-w-2xl text-base leading-7 text-[var(--tapiz-text-secondary)]", children: description }) : null
2199
2267
  ] }),
2200
- actions ? /* @__PURE__ */ jsx48("div", { className: "flex flex-wrap gap-3", children: actions }) : null
2268
+ actions ? /* @__PURE__ */ jsx49("div", { className: "flex flex-wrap gap-3", children: actions }) : null
2201
2269
  ] })
2202
2270
  ] }) });
2203
2271
  }
2204
2272
 
2205
2273
  // src/components/marketing/MockupFrame.tsx
2206
- import { jsx as jsx49, jsxs as jsxs34 } from "react/jsx-runtime";
2274
+ import { jsx as jsx50, jsxs as jsxs34 } from "react/jsx-runtime";
2207
2275
  function MockupFrame({ children, title, toolbar, className = "" }) {
2208
2276
  return /* @__PURE__ */ jsxs34("div", { className: `overflow-hidden border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] shadow-[var(--tapiz-shadow-brutal)] ${className}`, children: [
2209
2277
  /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-between border-b border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] px-3 py-2", children: [
2210
2278
  /* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-1.5", children: [
2211
- /* @__PURE__ */ jsx49("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-danger)]" }),
2212
- /* @__PURE__ */ jsx49("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-warning)]" }),
2213
- /* @__PURE__ */ jsx49("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-success)]" })
2279
+ /* @__PURE__ */ jsx50("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-danger)]" }),
2280
+ /* @__PURE__ */ jsx50("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-warning)]" }),
2281
+ /* @__PURE__ */ jsx50("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-success)]" })
2214
2282
  ] }),
2215
- title ? /* @__PURE__ */ jsx49("div", { className: "font-mono text-[10px] uppercase tracking-widest text-[var(--tapiz-text-muted)]", children: title }) : null,
2216
- /* @__PURE__ */ jsx49("div", { children: toolbar })
2283
+ title ? /* @__PURE__ */ jsx50("div", { className: "font-mono text-[10px] uppercase tracking-widest text-[var(--tapiz-text-muted)]", children: title }) : null,
2284
+ /* @__PURE__ */ jsx50("div", { children: toolbar })
2217
2285
  ] }),
2218
- /* @__PURE__ */ jsx49("div", { className: "p-4", children })
2286
+ /* @__PURE__ */ jsx50("div", { className: "p-4", children })
2219
2287
  ] });
2220
2288
  }
2221
2289
 
2222
2290
  // src/components/marketing/ComparisonTable.tsx
2223
- import { jsx as jsx50, jsxs as jsxs35 } from "react/jsx-runtime";
2291
+ import { jsx as jsx51, jsxs as jsxs35 } from "react/jsx-runtime";
2224
2292
  function ComparisonTable({ rows, featureHeader = "Feature", includedHeader = "Tapiz", alternativeHeader = "Other", className = "" }) {
2225
- return /* @__PURE__ */ jsx50("div", { className: `overflow-x-auto border border-[var(--tapiz-border-strong)] ${className}`, children: /* @__PURE__ */ jsxs35("table", { className: "w-full text-sm", children: [
2226
- /* @__PURE__ */ jsx50("thead", { children: /* @__PURE__ */ jsxs35("tr", { children: [
2227
- /* @__PURE__ */ jsx50("th", { className: "px-4 py-3 text-left", children: featureHeader }),
2228
- /* @__PURE__ */ jsx50("th", { className: "px-4 py-3 text-left", children: includedHeader }),
2229
- /* @__PURE__ */ jsx50("th", { className: "px-4 py-3 text-left", children: alternativeHeader })
2293
+ return /* @__PURE__ */ jsx51("div", { className: `overflow-x-auto border border-[var(--tapiz-border-strong)] ${className}`, children: /* @__PURE__ */ jsxs35("table", { className: "w-full text-sm", children: [
2294
+ /* @__PURE__ */ jsx51("thead", { children: /* @__PURE__ */ jsxs35("tr", { children: [
2295
+ /* @__PURE__ */ jsx51("th", { className: "px-4 py-3 text-left", children: featureHeader }),
2296
+ /* @__PURE__ */ jsx51("th", { className: "px-4 py-3 text-left", children: includedHeader }),
2297
+ /* @__PURE__ */ jsx51("th", { className: "px-4 py-3 text-left", children: alternativeHeader })
2230
2298
  ] }) }),
2231
- /* @__PURE__ */ jsx50("tbody", { children: rows.map((row, index) => /* @__PURE__ */ jsxs35("tr", { className: "border-t border-[var(--tapiz-border-subtle)]", children: [
2232
- /* @__PURE__ */ jsx50("td", { className: "px-4 py-3 font-medium text-[var(--tapiz-text-primary)]", children: row.feature }),
2233
- /* @__PURE__ */ jsx50("td", { className: "px-4 py-3 text-[var(--tapiz-text-secondary)]", children: row.included }),
2234
- /* @__PURE__ */ jsx50("td", { className: "px-4 py-3 text-[var(--tapiz-text-muted)]", children: row.alternative })
2299
+ /* @__PURE__ */ jsx51("tbody", { children: rows.map((row, index) => /* @__PURE__ */ jsxs35("tr", { className: "border-t border-[var(--tapiz-border-subtle)]", children: [
2300
+ /* @__PURE__ */ jsx51("td", { className: "px-4 py-3 font-medium text-[var(--tapiz-text-primary)]", children: row.feature }),
2301
+ /* @__PURE__ */ jsx51("td", { className: "px-4 py-3 text-[var(--tapiz-text-secondary)]", children: row.included }),
2302
+ /* @__PURE__ */ jsx51("td", { className: "px-4 py-3 text-[var(--tapiz-text-muted)]", children: row.alternative })
2235
2303
  ] }, index)) })
2236
2304
  ] }) });
2237
2305
  }
2238
2306
 
2239
2307
  // src/components/layout/AppShell.tsx
2240
- import { jsx as jsx51, jsxs as jsxs36 } from "react/jsx-runtime";
2308
+ import { jsx as jsx52, jsxs as jsxs36 } from "react/jsx-runtime";
2241
2309
  var variantClasses4 = {
2242
2310
  default: "bg-[var(--tapiz-bg-page)]",
2243
2311
  grid: "bg-[var(--tapiz-bg-page)] tapiz-grid-bg",
@@ -2247,15 +2315,15 @@ function AppShell({ sidebar, topbar, children, aside, className = "", contentCla
2247
2315
  return /* @__PURE__ */ jsxs36("div", { className: `min-h-screen text-[var(--tapiz-text-primary)] ${variantClasses4[variant]} ${className}`, children: [
2248
2316
  topbar,
2249
2317
  /* @__PURE__ */ jsxs36("div", { className: "mx-auto flex w-full max-w-[1600px]", children: [
2250
- sidebar ? /* @__PURE__ */ jsx51("aside", { className: "hidden min-h-[calc(100vh-1px)] w-72 shrink-0 border-r border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] lg:block", children: sidebar }) : null,
2251
- /* @__PURE__ */ jsx51("main", { className: `min-w-0 flex-1 px-[var(--tapiz-space-page-x)] py-6 ${contentClassName}`, children }),
2252
- aside ? /* @__PURE__ */ jsx51("aside", { className: "hidden w-80 shrink-0 border-l border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] xl:block", children: aside }) : null
2318
+ sidebar ? /* @__PURE__ */ jsx52("aside", { className: "hidden min-h-[calc(100vh-1px)] w-72 shrink-0 border-r border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] lg:block", children: sidebar }) : null,
2319
+ /* @__PURE__ */ jsx52("main", { className: `min-w-0 flex-1 px-[var(--tapiz-space-page-x)] py-6 ${contentClassName}`, children }),
2320
+ aside ? /* @__PURE__ */ jsx52("aside", { className: "hidden w-80 shrink-0 border-l border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] xl:block", children: aside }) : null
2253
2321
  ] })
2254
2322
  ] });
2255
2323
  }
2256
2324
 
2257
2325
  // src/components/layout/SplitPane.tsx
2258
- import { jsx as jsx52, jsxs as jsxs37 } from "react/jsx-runtime";
2326
+ import { jsx as jsx53, jsxs as jsxs37 } from "react/jsx-runtime";
2259
2327
  var ratios = {
2260
2328
  "50/50": "lg:grid-cols-2",
2261
2329
  "60/40": "lg:grid-cols-[minmax(0,3fr)_minmax(320px,2fr)]",
@@ -2263,48 +2331,48 @@ var ratios = {
2263
2331
  };
2264
2332
  function SplitPane({ primary, secondary, ratio = "60/40", reverseOnMobile = false, className = "" }) {
2265
2333
  return /* @__PURE__ */ jsxs37("div", { className: `grid gap-5 ${ratios[ratio]} ${className}`, children: [
2266
- /* @__PURE__ */ jsx52("div", { className: reverseOnMobile ? "order-2 lg:order-1" : "", children: primary }),
2267
- /* @__PURE__ */ jsx52("div", { className: reverseOnMobile ? "order-1 lg:order-2" : "", children: secondary })
2334
+ /* @__PURE__ */ jsx53("div", { className: reverseOnMobile ? "order-2 lg:order-1" : "", children: primary }),
2335
+ /* @__PURE__ */ jsx53("div", { className: reverseOnMobile ? "order-1 lg:order-2" : "", children: secondary })
2268
2336
  ] });
2269
2337
  }
2270
2338
 
2271
2339
  // src/components/layout/Stack.tsx
2272
- import { jsx as jsx53 } from "react/jsx-runtime";
2340
+ import { jsx as jsx54 } from "react/jsx-runtime";
2273
2341
  var gapClasses = { xs: "gap-1", sm: "gap-2", md: "gap-4", lg: "gap-6", xl: "gap-8" };
2274
2342
  var alignClasses = { start: "items-start", center: "items-center", end: "items-end", stretch: "items-stretch" };
2275
2343
  var justifyClasses = { start: "justify-start", center: "justify-center", between: "justify-between", end: "justify-end" };
2276
2344
  function Stack({ children, gap = "md", direction = "vertical", align = "stretch", justify = "start", wrap = false, className = "" }) {
2277
- return /* @__PURE__ */ jsx53("div", { className: `flex ${direction === "vertical" ? "flex-col" : "flex-row"} ${gapClasses[gap]} ${alignClasses[align]} ${justifyClasses[justify]} ${wrap ? "flex-wrap" : ""} ${className}`, children });
2345
+ return /* @__PURE__ */ jsx54("div", { className: `flex ${direction === "vertical" ? "flex-col" : "flex-row"} ${gapClasses[gap]} ${alignClasses[align]} ${justifyClasses[justify]} ${wrap ? "flex-wrap" : ""} ${className}`, children });
2278
2346
  }
2279
2347
 
2280
2348
  // src/components/layout/Cluster.tsx
2281
- import { jsx as jsx54 } from "react/jsx-runtime";
2349
+ import { jsx as jsx55 } from "react/jsx-runtime";
2282
2350
  var gapClasses2 = { xs: "gap-1", sm: "gap-2", md: "gap-3", lg: "gap-5" };
2283
2351
  var alignClasses2 = { start: "items-start", center: "items-center", end: "items-end" };
2284
2352
  var justifyClasses2 = { start: "justify-start", center: "justify-center", between: "justify-between", end: "justify-end" };
2285
2353
  function Cluster({ children, gap = "sm", align = "center", justify = "start", className = "" }) {
2286
- return /* @__PURE__ */ jsx54("div", { className: `flex flex-wrap ${gapClasses2[gap]} ${alignClasses2[align]} ${justifyClasses2[justify]} ${className}`, children });
2354
+ return /* @__PURE__ */ jsx55("div", { className: `flex flex-wrap ${gapClasses2[gap]} ${alignClasses2[align]} ${justifyClasses2[justify]} ${className}`, children });
2287
2355
  }
2288
2356
 
2289
2357
  // src/components/navigation/Breadcrumbs.tsx
2290
- import { jsx as jsx55, jsxs as jsxs38 } from "react/jsx-runtime";
2358
+ import { jsx as jsx56, jsxs as jsxs38 } from "react/jsx-runtime";
2291
2359
  function Breadcrumbs({ items, separator = "/", className = "" }) {
2292
- return /* @__PURE__ */ jsx55("nav", { "aria-label": "Breadcrumb", className: `font-mono text-[10px] uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)] ${className}`, children: /* @__PURE__ */ jsx55("ol", { className: "flex flex-wrap items-center gap-2", children: items.map((item, index) => /* @__PURE__ */ jsxs38("li", { className: "flex items-center gap-2", children: [
2293
- index > 0 ? /* @__PURE__ */ jsx55("span", { "aria-hidden": "true", className: "text-[var(--tapiz-text-disabled)]", children: separator }) : null,
2294
- item.href && !item.current ? /* @__PURE__ */ jsx55("a", { className: "hover:text-[var(--tapiz-accent)]", href: item.href, children: item.label }) : /* @__PURE__ */ jsx55("span", { "aria-current": item.current ? "page" : void 0, className: item.current ? "text-[var(--tapiz-text-primary)]" : "", children: item.label })
2360
+ return /* @__PURE__ */ jsx56("nav", { "aria-label": "Breadcrumb", className: `font-mono text-[10px] uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)] ${className}`, children: /* @__PURE__ */ jsx56("ol", { className: "flex flex-wrap items-center gap-2", children: items.map((item, index) => /* @__PURE__ */ jsxs38("li", { className: "flex items-center gap-2", children: [
2361
+ index > 0 ? /* @__PURE__ */ jsx56("span", { "aria-hidden": "true", className: "text-[var(--tapiz-text-disabled)]", children: separator }) : null,
2362
+ item.href && !item.current ? /* @__PURE__ */ jsx56("a", { className: "hover:text-[var(--tapiz-accent)]", href: item.href, children: item.label }) : /* @__PURE__ */ jsx56("span", { "aria-current": item.current ? "page" : void 0, className: item.current ? "text-[var(--tapiz-text-primary)]" : "", children: item.label })
2295
2363
  ] }, index)) }) });
2296
2364
  }
2297
2365
 
2298
2366
  // src/components/navigation/SidebarNav.tsx
2299
- import { Fragment as Fragment3, jsx as jsx56, jsxs as jsxs39 } from "react/jsx-runtime";
2367
+ import { Fragment as Fragment3, jsx as jsx57, jsxs as jsxs39 } from "react/jsx-runtime";
2300
2368
  function SidebarNav({ groups, header, footer, className = "" }) {
2301
2369
  return /* @__PURE__ */ jsxs39("div", { className: `flex h-full min-h-screen flex-col bg-[var(--tapiz-bg-surface)] ${className}`, children: [
2302
- header ? /* @__PURE__ */ jsx56("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-4", children: header }) : null,
2303
- /* @__PURE__ */ jsx56("nav", { className: "flex-1 space-y-6 p-3", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs39("div", { children: [
2304
- group.label ? /* @__PURE__ */ jsx56("div", { className: "mb-2 px-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: group.label }) : null,
2305
- /* @__PURE__ */ jsx56("div", { className: "space-y-1", children: group.items.map((item, itemIndex) => /* @__PURE__ */ jsx56(SidebarNavLink, { item }, itemIndex)) })
2370
+ header ? /* @__PURE__ */ jsx57("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-4", children: header }) : null,
2371
+ /* @__PURE__ */ jsx57("nav", { className: "flex-1 space-y-6 p-3", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs39("div", { children: [
2372
+ group.label ? /* @__PURE__ */ jsx57("div", { className: "mb-2 px-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: group.label }) : null,
2373
+ /* @__PURE__ */ jsx57("div", { className: "space-y-1", children: group.items.map((item, itemIndex) => /* @__PURE__ */ jsx57(SidebarNavLink, { item }, itemIndex)) })
2306
2374
  ] }, groupIndex)) }),
2307
- footer ? /* @__PURE__ */ jsx56("div", { className: "border-t border-[var(--tapiz-border-subtle)] p-4", children: footer }) : null
2375
+ footer ? /* @__PURE__ */ jsx57("div", { className: "border-t border-[var(--tapiz-border-subtle)] p-4", children: footer }) : null
2308
2376
  ] });
2309
2377
  }
2310
2378
  function SidebarNavLink({ item }) {
@@ -2314,28 +2382,28 @@ function SidebarNavLink({ item }) {
2314
2382
  item.disabled ? "pointer-events-none opacity-40" : ""
2315
2383
  ].filter(Boolean).join(" ");
2316
2384
  const content = /* @__PURE__ */ jsxs39(Fragment3, { children: [
2317
- item.icon ? /* @__PURE__ */ jsx56("span", { className: "grid size-5 place-items-center text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2318
- /* @__PURE__ */ jsx56("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
2319
- item.badge ? /* @__PURE__ */ jsx56("span", { children: item.badge }) : null
2385
+ item.icon ? /* @__PURE__ */ jsx57("span", { className: "grid size-5 place-items-center text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2386
+ /* @__PURE__ */ jsx57("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
2387
+ item.badge ? /* @__PURE__ */ jsx57("span", { children: item.badge }) : null
2320
2388
  ] });
2321
- return item.href ? /* @__PURE__ */ jsx56("a", { className, href: item.href, children: content }) : /* @__PURE__ */ jsx56("button", { type: "button", className, onClick: item.onClick, disabled: item.disabled, children: content });
2389
+ return item.href ? /* @__PURE__ */ jsx57("a", { className, href: item.href, children: content }) : /* @__PURE__ */ jsx57("button", { type: "button", className, onClick: item.onClick, disabled: item.disabled, children: content });
2322
2390
  }
2323
2391
 
2324
2392
  // src/components/navigation/TopNav.tsx
2325
- import { jsx as jsx57, jsxs as jsxs40 } from "react/jsx-runtime";
2393
+ import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
2326
2394
  function TopNav({ brand, links = [], actions, className = "", sticky = true }) {
2327
- return /* @__PURE__ */ jsx57("header", { className: `${sticky ? "sticky top-0 z-40" : ""} border-b border-[var(--tapiz-border-subtle)] bg-[color-mix(in_srgb,var(--tapiz-bg-surface)_88%,transparent)] backdrop-blur-xl ${className}`, children: /* @__PURE__ */ jsxs40("div", { className: "mx-auto flex h-16 max-w-[1600px] items-center gap-6 px-[var(--tapiz-space-page-x)]", children: [
2328
- brand ? /* @__PURE__ */ jsx57("div", { className: "shrink-0", children: brand }) : null,
2329
- /* @__PURE__ */ jsx57("nav", { className: "hidden items-center gap-1 md:flex", children: links.map((link, index) => {
2395
+ return /* @__PURE__ */ jsx58("header", { className: `${sticky ? "sticky top-0 z-40" : ""} border-b border-[var(--tapiz-border-subtle)] bg-[color-mix(in_srgb,var(--tapiz-bg-surface)_88%,transparent)] backdrop-blur-xl ${className}`, children: /* @__PURE__ */ jsxs40("div", { className: "mx-auto flex h-16 max-w-[1600px] items-center gap-6 px-[var(--tapiz-space-page-x)]", children: [
2396
+ brand ? /* @__PURE__ */ jsx58("div", { className: "shrink-0", children: brand }) : null,
2397
+ /* @__PURE__ */ jsx58("nav", { className: "hidden items-center gap-1 md:flex", children: links.map((link, index) => {
2330
2398
  const cls = `border px-3 py-1.5 text-sm font-medium ${link.active ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] text-[var(--tapiz-text-primary)]" : "border-transparent text-[var(--tapiz-text-secondary)] hover:border-[var(--tapiz-border-subtle)] hover:text-[var(--tapiz-text-primary)]"}`;
2331
- return link.href ? /* @__PURE__ */ jsx57("a", { href: link.href, className: cls, children: link.label }, index) : /* @__PURE__ */ jsx57("button", { type: "button", onClick: link.onClick, className: cls, children: link.label }, index);
2399
+ return link.href ? /* @__PURE__ */ jsx58("a", { href: link.href, className: cls, children: link.label }, index) : /* @__PURE__ */ jsx58("button", { type: "button", onClick: link.onClick, className: cls, children: link.label }, index);
2332
2400
  }) }),
2333
- actions ? /* @__PURE__ */ jsx57("div", { className: "ml-auto flex items-center gap-2", children: actions }) : null
2401
+ actions ? /* @__PURE__ */ jsx58("div", { className: "ml-auto flex items-center gap-2", children: actions }) : null
2334
2402
  ] }) });
2335
2403
  }
2336
2404
 
2337
2405
  // src/components/disclosure/Tabs.tsx
2338
- import { jsx as jsx58, jsxs as jsxs41 } from "react/jsx-runtime";
2406
+ import { jsx as jsx59, jsxs as jsxs41 } from "react/jsx-runtime";
2339
2407
  var variants = {
2340
2408
  line: "border-b border-[var(--tapiz-border-subtle)]",
2341
2409
  boxed: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-1",
@@ -2344,7 +2412,7 @@ var variants = {
2344
2412
  function Tabs({ items, activeId, onChange, className = "", variant = "line" }) {
2345
2413
  const active = items.find((item) => item.id === activeId) ?? items[0];
2346
2414
  return /* @__PURE__ */ jsxs41("div", { className, children: [
2347
- /* @__PURE__ */ jsx58("div", { role: "tablist", className: `flex flex-wrap gap-1 ${variants[variant]}`, children: items.map((item) => {
2415
+ /* @__PURE__ */ jsx59("div", { role: "tablist", className: `flex flex-wrap gap-1 ${variants[variant]}`, children: items.map((item) => {
2348
2416
  const selected = item.id === active?.id;
2349
2417
  return /* @__PURE__ */ jsxs41(
2350
2418
  "button",
@@ -2363,14 +2431,14 @@ function Tabs({ items, activeId, onChange, className = "", variant = "line" }) {
2363
2431
  item.id
2364
2432
  );
2365
2433
  }) }),
2366
- /* @__PURE__ */ jsx58("div", { role: "tabpanel", className: "pt-4", children: active?.content })
2434
+ /* @__PURE__ */ jsx59("div", { role: "tabpanel", className: "pt-4", children: active?.content })
2367
2435
  ] });
2368
2436
  }
2369
2437
 
2370
2438
  // src/components/disclosure/Accordion.tsx
2371
- import { jsx as jsx59, jsxs as jsxs42 } from "react/jsx-runtime";
2439
+ import { jsx as jsx60, jsxs as jsxs42 } from "react/jsx-runtime";
2372
2440
  function Accordion({ items, openIds = [], onToggle, className = "" }) {
2373
- return /* @__PURE__ */ jsx59("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item) => {
2441
+ return /* @__PURE__ */ jsx60("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item) => {
2374
2442
  const open = openIds.includes(item.id);
2375
2443
  return /* @__PURE__ */ jsxs42("section", { children: [
2376
2444
  /* @__PURE__ */ jsxs42(
@@ -2382,21 +2450,21 @@ function Accordion({ items, openIds = [], onToggle, className = "" }) {
2382
2450
  onClick: () => onToggle?.(item.id),
2383
2451
  className: "flex w-full items-center justify-between gap-4 px-4 py-3 text-left disabled:opacity-40",
2384
2452
  children: [
2385
- /* @__PURE__ */ jsx59("span", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
2453
+ /* @__PURE__ */ jsx60("span", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
2386
2454
  /* @__PURE__ */ jsxs42("span", { className: "flex items-center gap-3 text-[var(--tapiz-text-muted)]", children: [
2387
2455
  item.meta,
2388
- /* @__PURE__ */ jsx59("span", { "aria-hidden": "true", className: "font-mono text-lg", children: open ? "\u2212" : "+" })
2456
+ /* @__PURE__ */ jsx60("span", { "aria-hidden": "true", className: "font-mono text-lg", children: open ? "\u2212" : "+" })
2389
2457
  ] })
2390
2458
  ]
2391
2459
  }
2392
2460
  ),
2393
- open ? /* @__PURE__ */ jsx59("div", { className: "border-t border-[var(--tapiz-border-subtle)] px-4 py-4 text-sm text-[var(--tapiz-text-secondary)]", children: item.content }) : null
2461
+ open ? /* @__PURE__ */ jsx60("div", { className: "border-t border-[var(--tapiz-border-subtle)] px-4 py-4 text-sm text-[var(--tapiz-text-secondary)]", children: item.content }) : null
2394
2462
  ] }, item.id);
2395
2463
  }) });
2396
2464
  }
2397
2465
 
2398
2466
  // src/components/disclosure/Stepper.tsx
2399
- import { jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
2467
+ import { jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
2400
2468
  var tone = {
2401
2469
  complete: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)] text-[var(--tapiz-success)]",
2402
2470
  current: "border-[var(--tapiz-accent)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-accent)]",
@@ -2404,65 +2472,65 @@ var tone = {
2404
2472
  error: "border-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)] text-[var(--tapiz-danger)]"
2405
2473
  };
2406
2474
  function Stepper({ steps, orientation = "horizontal", className = "" }) {
2407
- return /* @__PURE__ */ jsx60("ol", { className: `grid gap-3 ${orientation === "horizontal" ? "md:grid-cols-[repeat(auto-fit,minmax(0,1fr))]" : ""} ${className}`, children: steps.map((step, index) => {
2475
+ return /* @__PURE__ */ jsx61("ol", { className: `grid gap-3 ${orientation === "horizontal" ? "md:grid-cols-[repeat(auto-fit,minmax(0,1fr))]" : ""} ${className}`, children: steps.map((step, index) => {
2408
2476
  const status = step.status ?? "upcoming";
2409
2477
  return /* @__PURE__ */ jsxs43("li", { className: "flex gap-3", children: [
2410
- /* @__PURE__ */ jsx60("span", { className: `grid size-8 shrink-0 place-items-center border font-mono text-xs font-bold ${tone[status]}`, children: status === "complete" ? "\u2713" : index + 1 }),
2478
+ /* @__PURE__ */ jsx61("span", { className: `grid size-8 shrink-0 place-items-center border font-mono text-xs font-bold ${tone[status]}`, children: status === "complete" ? "\u2713" : index + 1 }),
2411
2479
  /* @__PURE__ */ jsxs43("span", { className: "min-w-0", children: [
2412
- /* @__PURE__ */ jsx60("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: step.label }),
2413
- step.description ? /* @__PURE__ */ jsx60("span", { className: "mt-1 block text-xs text-[var(--tapiz-text-muted)]", children: step.description }) : null
2480
+ /* @__PURE__ */ jsx61("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: step.label }),
2481
+ step.description ? /* @__PURE__ */ jsx61("span", { className: "mt-1 block text-xs text-[var(--tapiz-text-muted)]", children: step.description }) : null
2414
2482
  ] })
2415
2483
  ] }, step.id);
2416
2484
  }) });
2417
2485
  }
2418
2486
 
2419
2487
  // src/components/overlays/Drawer.tsx
2420
- import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
2488
+ import { jsx as jsx62, jsxs as jsxs44 } from "react/jsx-runtime";
2421
2489
  function Drawer({ open, onClose, title, description, children, footer, side = "right", className = "" }) {
2422
2490
  if (!open) return null;
2423
2491
  return /* @__PURE__ */ jsxs44("div", { className: "fixed inset-0 z-50", children: [
2424
- /* @__PURE__ */ jsx61("button", { type: "button", "aria-label": "Close drawer", className: "absolute inset-0 bg-(--tapiz-bg-overlay)", onClick: onClose }),
2492
+ /* @__PURE__ */ jsx62("button", { type: "button", "aria-label": "Close drawer", className: "absolute inset-0 bg-(--tapiz-bg-overlay)", onClick: onClose }),
2425
2493
  /* @__PURE__ */ jsxs44("section", { className: `absolute top-0 h-full w-full max-w-md border-(--tapiz-border-strong) bg-(--tapiz-bg-surface) shadow-(--tapiz-shadow-lg) ${side === "right" ? "right-0 border-l" : "left-0 border-r"} ${className}`, children: [
2426
2494
  /* @__PURE__ */ jsxs44("header", { className: "flex items-start justify-between gap-4 border-b border-(--tapiz-border-subtle) p-5", children: [
2427
2495
  /* @__PURE__ */ jsxs44("div", { children: [
2428
- title ? /* @__PURE__ */ jsx61("h2", { className: "text-lg font-semibold text-(--tapiz-text-primary)", children: title }) : null,
2429
- description ? /* @__PURE__ */ jsx61("p", { className: "mt-1 text-sm text-(--tapiz-text-muted)", children: description }) : null
2496
+ title ? /* @__PURE__ */ jsx62("h2", { className: "text-lg font-semibold text-(--tapiz-text-primary)", children: title }) : null,
2497
+ description ? /* @__PURE__ */ jsx62("p", { className: "mt-1 text-sm text-(--tapiz-text-muted)", children: description }) : null
2430
2498
  ] }),
2431
- /* @__PURE__ */ jsx61("button", { type: "button", onClick: onClose, className: "border border-(--tapiz-border-subtle) px-2 py-1 font-mono text-sm text-(--tapiz-text-muted) hover:text-(--tapiz-text-primary)", children: "\xD7" })
2499
+ /* @__PURE__ */ jsx62("button", { type: "button", onClick: onClose, className: "border border-(--tapiz-border-subtle) px-2 py-1 font-mono text-sm text-(--tapiz-text-muted) hover:text-(--tapiz-text-primary)", children: "\xD7" })
2432
2500
  ] }),
2433
- /* @__PURE__ */ jsx61("div", { className: "max-h-[calc(100vh-9rem)] overflow-auto p-5", children }),
2434
- footer ? /* @__PURE__ */ jsx61("footer", { className: "border-t border-(--tapiz-border-subtle) p-4", children: footer }) : null
2501
+ /* @__PURE__ */ jsx62("div", { className: "max-h-[calc(100vh-9rem)] overflow-auto p-5", children }),
2502
+ footer ? /* @__PURE__ */ jsx62("footer", { className: "border-t border-(--tapiz-border-subtle) p-4", children: footer }) : null
2435
2503
  ] })
2436
2504
  ] });
2437
2505
  }
2438
2506
 
2439
2507
  // src/components/overlays/Popover.tsx
2440
- import { jsx as jsx62, jsxs as jsxs45 } from "react/jsx-runtime";
2508
+ import { jsx as jsx63, jsxs as jsxs45 } from "react/jsx-runtime";
2441
2509
  function Popover({ trigger, children, open = false, align = "start", className = "" }) {
2442
2510
  return /* @__PURE__ */ jsxs45("div", { className: `relative inline-block ${className}`, children: [
2443
2511
  trigger,
2444
- open ? /* @__PURE__ */ jsx62("div", { className: `absolute top-full z-40 mt-2 min-w-64 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-2 shadow-[var(--tapiz-shadow-md)] ${align === "end" ? "right-0" : "left-0"}`, children }) : null
2512
+ open ? /* @__PURE__ */ jsx63("div", { className: `absolute top-full z-40 mt-2 min-w-64 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-2 shadow-[var(--tapiz-shadow-md)] ${align === "end" ? "right-0" : "left-0"}`, children }) : null
2445
2513
  ] });
2446
2514
  }
2447
2515
 
2448
2516
  // src/components/overlays/CommandMenu.tsx
2449
- import { jsx as jsx63, jsxs as jsxs46 } from "react/jsx-runtime";
2517
+ import { jsx as jsx64, jsxs as jsxs46 } from "react/jsx-runtime";
2450
2518
  function CommandMenu({ open, onClose, query = "", onQueryChange, groups, placeholder = "Search commands\u2026", empty = "No commands found." }) {
2451
2519
  if (!open) return null;
2452
2520
  const hasItems = groups.some((group) => group.items.length > 0);
2453
- return /* @__PURE__ */ jsx63("div", { className: "fixed inset-0 z-50 grid place-items-start bg-[var(--tapiz-bg-overlay)] px-4 pt-[12vh]", onClick: onClose, children: /* @__PURE__ */ jsxs46("div", { className: "mx-auto w-full max-w-2xl border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] shadow-[var(--tapiz-shadow-brutal-lg)]", onClick: (e) => e.stopPropagation(), children: [
2454
- /* @__PURE__ */ jsx63("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-3", children: /* @__PURE__ */ jsx63(SearchInput, { value: query, onChange: (value) => onQueryChange?.(value), placeholder, autoFocus: true }) }),
2521
+ return /* @__PURE__ */ jsx64("div", { className: "fixed inset-0 z-50 grid place-items-start bg-[var(--tapiz-bg-overlay)] px-4 pt-[12vh]", onClick: onClose, children: /* @__PURE__ */ jsxs46("div", { className: "mx-auto w-full max-w-2xl border-2 border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] shadow-[var(--tapiz-shadow-brutal-lg)]", onClick: (e) => e.stopPropagation(), children: [
2522
+ /* @__PURE__ */ jsx64("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-3", children: /* @__PURE__ */ jsx64(SearchInput, { value: query, onChange: (value) => onQueryChange?.(value), placeholder, autoFocus: true }) }),
2455
2523
  /* @__PURE__ */ jsxs46("div", { className: "max-h-[50vh] overflow-auto p-2", children: [
2456
- !hasItems ? /* @__PURE__ */ jsx63("div", { className: "p-6 text-center text-sm text-[var(--tapiz-text-muted)]", children: empty }) : null,
2524
+ !hasItems ? /* @__PURE__ */ jsx64("div", { className: "p-6 text-center text-sm text-[var(--tapiz-text-muted)]", children: empty }) : null,
2457
2525
  groups.map((group, groupIndex) => /* @__PURE__ */ jsxs46("div", { className: "py-2", children: [
2458
- group.label ? /* @__PURE__ */ jsx63("div", { className: "px-2 pb-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: group.label }) : null,
2526
+ group.label ? /* @__PURE__ */ jsx64("div", { className: "px-2 pb-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: group.label }) : null,
2459
2527
  group.items.map((item) => /* @__PURE__ */ jsxs46("button", { type: "button", disabled: item.disabled, onClick: item.onSelect, className: "flex w-full items-center gap-3 border border-transparent px-3 py-2 text-left hover:border-[var(--tapiz-border-subtle)] hover:bg-[var(--tapiz-bg-surface-muted)] disabled:opacity-40", children: [
2460
- item.icon ? /* @__PURE__ */ jsx63("span", { className: "grid size-8 place-items-center border border-[var(--tapiz-border-subtle)] text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2528
+ item.icon ? /* @__PURE__ */ jsx64("span", { className: "grid size-8 place-items-center border border-[var(--tapiz-border-subtle)] text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2461
2529
  /* @__PURE__ */ jsxs46("span", { className: "min-w-0 flex-1", children: [
2462
- /* @__PURE__ */ jsx63("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.label }),
2463
- item.description ? /* @__PURE__ */ jsx63("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: item.description }) : null
2530
+ /* @__PURE__ */ jsx64("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.label }),
2531
+ item.description ? /* @__PURE__ */ jsx64("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: item.description }) : null
2464
2532
  ] }),
2465
- item.shortcut ? /* @__PURE__ */ jsx63("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.shortcut }) : null
2533
+ item.shortcut ? /* @__PURE__ */ jsx64("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.shortcut }) : null
2466
2534
  ] }, item.id))
2467
2535
  ] }, groupIndex))
2468
2536
  ] })
@@ -2470,7 +2538,7 @@ function CommandMenu({ open, onClose, query = "", onQueryChange, groups, placeho
2470
2538
  }
2471
2539
 
2472
2540
  // src/components/forms/FormField.tsx
2473
- import { jsx as jsx64, jsxs as jsxs47 } from "react/jsx-runtime";
2541
+ import { jsx as jsx65, jsxs as jsxs47 } from "react/jsx-runtime";
2474
2542
  function FormField({ label, hint, error, required, htmlFor, children, className = "" }) {
2475
2543
  return /* @__PURE__ */ jsxs47("div", { className: `space-y-1.5 ${className}`, children: [
2476
2544
  label ? /* @__PURE__ */ jsxs47(FieldLabel, { htmlFor, children: [
@@ -2478,15 +2546,15 @@ function FormField({ label, hint, error, required, htmlFor, children, className
2478
2546
  required ? " *" : ""
2479
2547
  ] }) : null,
2480
2548
  children,
2481
- error ? /* @__PURE__ */ jsx64(FormError, { message: String(error) }) : hint ? /* @__PURE__ */ jsx64(FieldHint, { children: hint }) : null
2549
+ error ? /* @__PURE__ */ jsx65(FormError, { message: String(error) }) : hint ? /* @__PURE__ */ jsx65(FieldHint, { children: hint }) : null
2482
2550
  ] });
2483
2551
  }
2484
2552
 
2485
2553
  // src/components/forms/Switch.tsx
2486
- import { jsx as jsx65, jsxs as jsxs48 } from "react/jsx-runtime";
2554
+ import { jsx as jsx66, jsxs as jsxs48 } from "react/jsx-runtime";
2487
2555
  function Switch({ checked = false, onChange, disabled, label, description, className = "" }) {
2488
2556
  return /* @__PURE__ */ jsxs48("label", { className: `flex cursor-pointer items-start gap-3 ${disabled ? "cursor-not-allowed opacity-50" : ""} ${className}`, children: [
2489
- /* @__PURE__ */ jsx65(
2557
+ /* @__PURE__ */ jsx66(
2490
2558
  "button",
2491
2559
  {
2492
2560
  type: "button",
@@ -2495,22 +2563,22 @@ function Switch({ checked = false, onChange, disabled, label, description, class
2495
2563
  disabled,
2496
2564
  onClick: () => onChange?.(!checked),
2497
2565
  className: `relative mt-0.5 h-6 w-11 border border-[var(--tapiz-border-strong)] ${checked ? "bg-[var(--tapiz-accent)]" : "bg-[var(--tapiz-bg-surface-muted)]"}`,
2498
- children: /* @__PURE__ */ jsx65("span", { className: `absolute top-0.5 size-4 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] transition-transform ${checked ? "left-5" : "left-0.5"}` })
2566
+ children: /* @__PURE__ */ jsx66("span", { className: `absolute top-0.5 size-4 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] transition-transform ${checked ? "left-5" : "left-0.5"}` })
2499
2567
  }
2500
2568
  ),
2501
2569
  label || description ? /* @__PURE__ */ jsxs48("span", { children: [
2502
- label ? /* @__PURE__ */ jsx65("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2503
- description ? /* @__PURE__ */ jsx65("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: description }) : null
2570
+ label ? /* @__PURE__ */ jsx66("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2571
+ description ? /* @__PURE__ */ jsx66("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: description }) : null
2504
2572
  ] }) : null
2505
2573
  ] });
2506
2574
  }
2507
2575
 
2508
2576
  // src/components/forms/ToggleGroup.tsx
2509
- import { jsx as jsx66 } from "react/jsx-runtime";
2577
+ import { jsx as jsx67 } from "react/jsx-runtime";
2510
2578
  function ToggleGroup({ options, value, onChange, className = "", fullWidth = false }) {
2511
- return /* @__PURE__ */ jsx66("div", { className: `inline-flex border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] p-1 ${fullWidth ? "w-full" : ""} ${className}`, children: options.map((option) => {
2579
+ return /* @__PURE__ */ jsx67("div", { className: `inline-flex border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] p-1 ${fullWidth ? "w-full" : ""} ${className}`, children: options.map((option) => {
2512
2580
  const selected = option.value === value;
2513
- return /* @__PURE__ */ jsx66(
2581
+ return /* @__PURE__ */ jsx67(
2514
2582
  "button",
2515
2583
  {
2516
2584
  type: "button",
@@ -2525,17 +2593,17 @@ function ToggleGroup({ options, value, onChange, className = "", fullWidth = fal
2525
2593
  }
2526
2594
 
2527
2595
  // src/components/forms/InputGroup.tsx
2528
- import { jsx as jsx67, jsxs as jsxs49 } from "react/jsx-runtime";
2596
+ import { jsx as jsx68, jsxs as jsxs49 } from "react/jsx-runtime";
2529
2597
  function InputGroup({ prefix, suffix, children, className = "" }) {
2530
2598
  return /* @__PURE__ */ jsxs49("div", { className: `flex items-stretch border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] focus-within:border-[var(--tapiz-border-focus)] focus-within:shadow-[inset_3px_0_0_var(--tapiz-signal)] ${className}`, children: [
2531
- prefix ? /* @__PURE__ */ jsx67("div", { className: "flex items-center border-r border-[var(--tapiz-border-subtle)] px-3 text-sm text-[var(--tapiz-text-muted)]", children: prefix }) : null,
2532
- /* @__PURE__ */ jsx67("div", { className: "min-w-0 flex-1 [&_input]:border-0 [&_input]:shadow-none [&_input]:focus:shadow-none", children }),
2533
- suffix ? /* @__PURE__ */ jsx67("div", { className: "flex items-center border-l border-[var(--tapiz-border-subtle)] px-3 text-sm text-[var(--tapiz-text-muted)]", children: suffix }) : null
2599
+ prefix ? /* @__PURE__ */ jsx68("div", { className: "flex items-center border-r border-[var(--tapiz-border-subtle)] px-3 text-sm text-[var(--tapiz-text-muted)]", children: prefix }) : null,
2600
+ /* @__PURE__ */ jsx68("div", { className: "min-w-0 flex-1 [&_input]:border-0 [&_input]:shadow-none [&_input]:focus:shadow-none", children }),
2601
+ suffix ? /* @__PURE__ */ jsx68("div", { className: "flex items-center border-l border-[var(--tapiz-border-subtle)] px-3 text-sm text-[var(--tapiz-text-muted)]", children: suffix }) : null
2534
2602
  ] });
2535
2603
  }
2536
2604
 
2537
2605
  // src/components/feedback/Alert.tsx
2538
- import { jsx as jsx68, jsxs as jsxs50 } from "react/jsx-runtime";
2606
+ import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
2539
2607
  var toneClasses = {
2540
2608
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)] text-[var(--tapiz-info)]",
2541
2609
  success: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)] text-[var(--tapiz-success)]",
@@ -2545,17 +2613,17 @@ var toneClasses = {
2545
2613
  };
2546
2614
  function Alert2({ tone: tone2 = "info", title, children, icon, actions, className = "" }) {
2547
2615
  return /* @__PURE__ */ jsxs50("div", { className: `flex gap-3 border p-4 ${toneClasses[tone2]} ${className}`, children: [
2548
- icon ? /* @__PURE__ */ jsx68("div", { className: "mt-0.5 shrink-0", children: icon }) : null,
2616
+ icon ? /* @__PURE__ */ jsx69("div", { className: "mt-0.5 shrink-0", children: icon }) : null,
2549
2617
  /* @__PURE__ */ jsxs50("div", { className: "min-w-0 flex-1", children: [
2550
- title ? /* @__PURE__ */ jsx68("div", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2551
- children ? /* @__PURE__ */ jsx68("div", { className: "mt-1 text-sm text-[var(--tapiz-text-secondary)]", children }) : null
2618
+ title ? /* @__PURE__ */ jsx69("div", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2619
+ children ? /* @__PURE__ */ jsx69("div", { className: "mt-1 text-sm text-[var(--tapiz-text-secondary)]", children }) : null
2552
2620
  ] }),
2553
- actions ? /* @__PURE__ */ jsx68("div", { className: "shrink-0", children: actions }) : null
2621
+ actions ? /* @__PURE__ */ jsx69("div", { className: "shrink-0", children: actions }) : null
2554
2622
  ] });
2555
2623
  }
2556
2624
 
2557
2625
  // src/components/feedback/Progress.tsx
2558
- import { jsx as jsx69, jsxs as jsxs51 } from "react/jsx-runtime";
2626
+ import { jsx as jsx70, jsxs as jsxs51 } from "react/jsx-runtime";
2559
2627
  var tones = {
2560
2628
  accent: "bg-[var(--tapiz-accent)]",
2561
2629
  success: "bg-[var(--tapiz-success)]",
@@ -2566,32 +2634,32 @@ function Progress({ value, max = 100, label, showValue = false, tone: tone2 = "a
2566
2634
  const percentage = Math.max(0, Math.min(100, value / max * 100));
2567
2635
  return /* @__PURE__ */ jsxs51("div", { className, children: [
2568
2636
  label || showValue ? /* @__PURE__ */ jsxs51("div", { className: "mb-1 flex items-center justify-between gap-3 text-xs text-[var(--tapiz-text-muted)]", children: [
2569
- label ? /* @__PURE__ */ jsx69("span", { children: label }) : /* @__PURE__ */ jsx69("span", {}),
2637
+ label ? /* @__PURE__ */ jsx70("span", { children: label }) : /* @__PURE__ */ jsx70("span", {}),
2570
2638
  showValue ? /* @__PURE__ */ jsxs51("span", { className: "font-mono", children: [
2571
2639
  Math.round(percentage),
2572
2640
  "%"
2573
2641
  ] }) : null
2574
2642
  ] }) : null,
2575
- /* @__PURE__ */ jsx69("div", { className: "h-2 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx69("div", { className: `h-full ${tones[tone2]}`, style: { width: `${percentage}%` } }) })
2643
+ /* @__PURE__ */ jsx70("div", { className: "h-2 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx70("div", { className: `h-full ${tones[tone2]}`, style: { width: `${percentage}%` } }) })
2576
2644
  ] });
2577
2645
  }
2578
2646
 
2579
2647
  // src/components/shared/Avatar.tsx
2580
- import { jsx as jsx70 } from "react/jsx-runtime";
2648
+ import { jsx as jsx71 } from "react/jsx-runtime";
2581
2649
  var sizes = { xs: "size-6 text-[10px]", sm: "size-8 text-xs", md: "size-10 text-sm", lg: "size-14 text-base" };
2582
2650
  function Avatar({ src, name = "?", size = "md", className = "" }) {
2583
2651
  const initials = name.split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase()).join("") || "?";
2584
- return src ? /* @__PURE__ */ jsx70("img", { src, alt: name, className: `border border-[var(--tapiz-border-strong)] object-cover ${sizes[size]} ${className}` }) : /* @__PURE__ */ jsx70("span", { className: `inline-grid place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] font-mono font-bold text-[var(--tapiz-accent)] ${sizes[size]} ${className}`, children: initials });
2652
+ return src ? /* @__PURE__ */ jsx71("img", { src, alt: name, className: `border border-[var(--tapiz-border-strong)] object-cover ${sizes[size]} ${className}` }) : /* @__PURE__ */ jsx71("span", { className: `inline-grid place-items-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] font-mono font-bold text-[var(--tapiz-accent)] ${sizes[size]} ${className}`, children: initials });
2585
2653
  }
2586
2654
 
2587
2655
  // src/components/shared/Kbd.tsx
2588
- import { jsx as jsx71 } from "react/jsx-runtime";
2656
+ import { jsx as jsx72 } from "react/jsx-runtime";
2589
2657
  function Kbd({ children, className = "" }) {
2590
- return /* @__PURE__ */ jsx71("kbd", { className: `inline-flex min-w-5 items-center justify-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] px-1.5 py-0.5 font-mono text-[10px] font-bold text-[var(--tapiz-text-secondary)] shadow-[1px_1px_0_var(--tapiz-border-strong)] ${className}`, children });
2658
+ return /* @__PURE__ */ jsx72("kbd", { className: `inline-flex min-w-5 items-center justify-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] px-1.5 py-0.5 font-mono text-[10px] font-bold text-[var(--tapiz-text-secondary)] shadow-[1px_1px_0_var(--tapiz-border-strong)] ${className}`, children });
2591
2659
  }
2592
2660
 
2593
2661
  // src/components/shared/Timeline.tsx
2594
- import { jsx as jsx72, jsxs as jsxs52 } from "react/jsx-runtime";
2662
+ import { jsx as jsx73, jsxs as jsxs52 } from "react/jsx-runtime";
2595
2663
  var tones2 = {
2596
2664
  neutral: "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] text-[var(--tapiz-text-muted)]",
2597
2665
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)] text-[var(--tapiz-info)]",
@@ -2600,53 +2668,53 @@ var tones2 = {
2600
2668
  danger: "border-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)] text-[var(--tapiz-danger)]"
2601
2669
  };
2602
2670
  function Timeline({ items, className = "" }) {
2603
- return /* @__PURE__ */ jsx72("ol", { className: `relative space-y-4 before:absolute before:left-4 before:top-2 before:h-[calc(100%-1rem)] before:w-px before:bg-[var(--tapiz-border-subtle)] ${className}`, children: items.map((item) => /* @__PURE__ */ jsxs52("li", { className: "relative flex gap-3", children: [
2604
- /* @__PURE__ */ jsx72("span", { className: `z-10 grid size-8 shrink-0 place-items-center border text-xs ${tones2[item.tone ?? "neutral"]}`, children: item.icon ?? "\u2022" }),
2671
+ return /* @__PURE__ */ jsx73("ol", { className: `relative space-y-4 before:absolute before:left-4 before:top-2 before:h-[calc(100%-1rem)] before:w-px before:bg-[var(--tapiz-border-subtle)] ${className}`, children: items.map((item) => /* @__PURE__ */ jsxs52("li", { className: "relative flex gap-3", children: [
2672
+ /* @__PURE__ */ jsx73("span", { className: `z-10 grid size-8 shrink-0 place-items-center border text-xs ${tones2[item.tone ?? "neutral"]}`, children: item.icon ?? "\u2022" }),
2605
2673
  /* @__PURE__ */ jsxs52("span", { className: "min-w-0 flex-1 pb-2", children: [
2606
2674
  /* @__PURE__ */ jsxs52("span", { className: "flex flex-wrap items-baseline justify-between gap-2", children: [
2607
- /* @__PURE__ */ jsx72("span", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
2608
- item.time ? /* @__PURE__ */ jsx72("span", { className: "font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: item.time }) : null
2675
+ /* @__PURE__ */ jsx73("span", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
2676
+ item.time ? /* @__PURE__ */ jsx73("span", { className: "font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: item.time }) : null
2609
2677
  ] }),
2610
- item.description ? /* @__PURE__ */ jsx72("span", { className: "mt-1 block text-sm text-[var(--tapiz-text-secondary)]", children: item.description }) : null
2678
+ item.description ? /* @__PURE__ */ jsx73("span", { className: "mt-1 block text-sm text-[var(--tapiz-text-secondary)]", children: item.description }) : null
2611
2679
  ] })
2612
2680
  ] }, item.id)) });
2613
2681
  }
2614
2682
 
2615
2683
  // src/components/shared/KeyValueList.tsx
2616
- import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
2684
+ import { jsx as jsx74, jsxs as jsxs53 } from "react/jsx-runtime";
2617
2685
  function KeyValueList({ items, className = "", density = "normal" }) {
2618
- return /* @__PURE__ */ jsx73("dl", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item, index) => /* @__PURE__ */ jsxs53("div", { className: `grid gap-2 ${density === "compact" ? "p-3 md:grid-cols-[160px_1fr]" : "p-4 md:grid-cols-[220px_1fr]"}`, children: [
2619
- /* @__PURE__ */ jsx73("dt", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: item.keyLabel }),
2686
+ return /* @__PURE__ */ jsx74("dl", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item, index) => /* @__PURE__ */ jsxs53("div", { className: `grid gap-2 ${density === "compact" ? "p-3 md:grid-cols-[160px_1fr]" : "p-4 md:grid-cols-[220px_1fr]"}`, children: [
2687
+ /* @__PURE__ */ jsx74("dt", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: item.keyLabel }),
2620
2688
  /* @__PURE__ */ jsxs53("dd", { children: [
2621
- /* @__PURE__ */ jsx73("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.value }),
2622
- item.description ? /* @__PURE__ */ jsx73("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.description }) : null
2689
+ /* @__PURE__ */ jsx74("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.value }),
2690
+ item.description ? /* @__PURE__ */ jsx74("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.description }) : null
2623
2691
  ] })
2624
2692
  ] }, index)) });
2625
2693
  }
2626
2694
 
2627
2695
  // src/components/shared/CodeBlock.tsx
2628
- import { jsx as jsx74, jsxs as jsxs54 } from "react/jsx-runtime";
2696
+ import { jsx as jsx75, jsxs as jsxs54 } from "react/jsx-runtime";
2629
2697
  function CodeBlock({ children, language, title, actions, className = "" }) {
2630
2698
  return /* @__PURE__ */ jsxs54("figure", { className: `overflow-hidden border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] ${className}`, children: [
2631
2699
  title || language || actions ? /* @__PURE__ */ jsxs54("figcaption", { className: "flex items-center justify-between gap-3 border-b border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] px-3 py-2", children: [
2632
- /* @__PURE__ */ jsx74("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: title ?? language }),
2700
+ /* @__PURE__ */ jsx75("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: title ?? language }),
2633
2701
  actions
2634
2702
  ] }) : null,
2635
- /* @__PURE__ */ jsx74("pre", { className: "overflow-auto p-4 text-sm leading-6 text-[var(--tapiz-text-secondary)]", children: /* @__PURE__ */ jsx74("code", { children }) })
2703
+ /* @__PURE__ */ jsx75("pre", { className: "overflow-auto p-4 text-sm leading-6 text-[var(--tapiz-text-secondary)]", children: /* @__PURE__ */ jsx75("code", { children }) })
2636
2704
  ] });
2637
2705
  }
2638
2706
 
2639
2707
  // src/components/marketing/LogoCloud.tsx
2640
- import { jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
2708
+ import { jsx as jsx76, jsxs as jsxs55 } from "react/jsx-runtime";
2641
2709
  function LogoCloud({ title, items, className = "" }) {
2642
- return /* @__PURE__ */ jsx75("section", { className: `border-y border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] py-8 ${className}`, children: /* @__PURE__ */ jsxs55("div", { className: "mx-auto max-w-7xl px-[var(--tapiz-space-page-x)]", children: [
2643
- title ? /* @__PURE__ */ jsx75("p", { className: "mb-6 text-center font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: title }) : null,
2644
- /* @__PURE__ */ jsx75("div", { className: "grid grid-cols-2 gap-3 md:grid-cols-4 lg:grid-cols-6", children: items.map((item) => /* @__PURE__ */ jsx75("div", { className: "grid min-h-20 place-items-center border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] px-4 text-center text-sm font-semibold text-[var(--tapiz-text-secondary)]", children: item.logo ?? item.name }, item.name)) })
2710
+ return /* @__PURE__ */ jsx76("section", { className: `border-y border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] py-8 ${className}`, children: /* @__PURE__ */ jsxs55("div", { className: "mx-auto max-w-7xl px-[var(--tapiz-space-page-x)]", children: [
2711
+ title ? /* @__PURE__ */ jsx76("p", { className: "mb-6 text-center font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: title }) : null,
2712
+ /* @__PURE__ */ jsx76("div", { className: "grid grid-cols-2 gap-3 md:grid-cols-4 lg:grid-cols-6", children: items.map((item) => /* @__PURE__ */ jsx76("div", { className: "grid min-h-20 place-items-center border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] px-4 text-center text-sm font-semibold text-[var(--tapiz-text-secondary)]", children: item.logo ?? item.name }, item.name)) })
2645
2713
  ] }) });
2646
2714
  }
2647
2715
 
2648
2716
  // src/components/marketing/TestimonialCard.tsx
2649
- import { jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
2717
+ import { jsx as jsx77, jsxs as jsxs56 } from "react/jsx-runtime";
2650
2718
  function TestimonialCard({ quote, author, role, avatarSrc, className = "", variant = "surface" }) {
2651
2719
  return /* @__PURE__ */ jsxs56("figure", { className: `border bg-[var(--tapiz-bg-surface)] p-5 ${variant === "brutal" ? "border-2 border-[var(--tapiz-border-strong)] shadow-[var(--tapiz-shadow-brutal)]" : "border-[var(--tapiz-border-subtle)] shadow-[var(--tapiz-shadow-sm)]"} ${className}`, children: [
2652
2720
  /* @__PURE__ */ jsxs56("blockquote", { className: "text-base leading-7 text-[var(--tapiz-text-secondary)]", children: [
@@ -2655,39 +2723,39 @@ function TestimonialCard({ quote, author, role, avatarSrc, className = "", varia
2655
2723
  "\u201D"
2656
2724
  ] }),
2657
2725
  /* @__PURE__ */ jsxs56("figcaption", { className: "mt-5 flex items-center gap-3", children: [
2658
- /* @__PURE__ */ jsx76(Avatar, { name: author, src: avatarSrc, size: "sm" }),
2726
+ /* @__PURE__ */ jsx77(Avatar, { name: author, src: avatarSrc, size: "sm" }),
2659
2727
  /* @__PURE__ */ jsxs56("span", { children: [
2660
- /* @__PURE__ */ jsx76("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: author }),
2661
- role ? /* @__PURE__ */ jsx76("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: role }) : null
2728
+ /* @__PURE__ */ jsx77("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: author }),
2729
+ role ? /* @__PURE__ */ jsx77("span", { className: "block text-xs text-[var(--tapiz-text-muted)]", children: role }) : null
2662
2730
  ] })
2663
2731
  ] })
2664
2732
  ] });
2665
2733
  }
2666
2734
 
2667
2735
  // src/components/marketing/PricingCard.tsx
2668
- import { jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
2736
+ import { jsx as jsx78, jsxs as jsxs57 } from "react/jsx-runtime";
2669
2737
  function PricingCard({ name, price, description, features = [], cta, highlighted = false, className = "" }) {
2670
2738
  return /* @__PURE__ */ jsxs57("section", { className: `flex h-full flex-col border bg-[var(--tapiz-bg-surface)] p-6 ${highlighted ? "border-2 border-[var(--tapiz-border-strong)] shadow-[var(--tapiz-shadow-brutal-lg)]" : "border-[var(--tapiz-border-subtle)] shadow-[var(--tapiz-shadow-sm)]"} ${className}`, children: [
2671
2739
  /* @__PURE__ */ jsxs57("div", { className: "flex-1", children: [
2672
- /* @__PURE__ */ jsx77("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: name }),
2673
- description ? /* @__PURE__ */ jsx77("p", { className: "mt-2 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
2674
- /* @__PURE__ */ jsx77("div", { className: "mt-6 text-4xl font-semibold tracking-tight text-[var(--tapiz-text-primary)]", children: price }),
2675
- /* @__PURE__ */ jsx77("ul", { className: "mt-6 space-y-3 text-sm text-[var(--tapiz-text-secondary)]", children: features.map((feature, index) => /* @__PURE__ */ jsxs57("li", { className: "flex gap-2", children: [
2676
- /* @__PURE__ */ jsx77("span", { className: "text-[var(--tapiz-success)]", children: "\u2713" }),
2677
- /* @__PURE__ */ jsx77("span", { children: feature })
2740
+ /* @__PURE__ */ jsx78("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: name }),
2741
+ description ? /* @__PURE__ */ jsx78("p", { className: "mt-2 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
2742
+ /* @__PURE__ */ jsx78("div", { className: "mt-6 text-4xl font-semibold tracking-tight text-[var(--tapiz-text-primary)]", children: price }),
2743
+ /* @__PURE__ */ jsx78("ul", { className: "mt-6 space-y-3 text-sm text-[var(--tapiz-text-secondary)]", children: features.map((feature, index) => /* @__PURE__ */ jsxs57("li", { className: "flex gap-2", children: [
2744
+ /* @__PURE__ */ jsx78("span", { className: "text-[var(--tapiz-success)]", children: "\u2713" }),
2745
+ /* @__PURE__ */ jsx78("span", { children: feature })
2678
2746
  ] }, index)) })
2679
2747
  ] }),
2680
- /* @__PURE__ */ jsx77("div", { className: "mt-6", children: cta ?? /* @__PURE__ */ jsx77(Button, { variant: highlighted ? "primary" : "secondary", fullWidth: true, children: "Get started" }) })
2748
+ /* @__PURE__ */ jsx78("div", { className: "mt-6", children: cta ?? /* @__PURE__ */ jsx78(Button, { variant: highlighted ? "primary" : "secondary", fullWidth: true, children: "Get started" }) })
2681
2749
  ] });
2682
2750
  }
2683
2751
 
2684
2752
  // src/components/marketing/StatsBand.tsx
2685
- import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
2753
+ import { jsx as jsx79, jsxs as jsxs58 } from "react/jsx-runtime";
2686
2754
  function StatsBand({ items, className = "" }) {
2687
- return /* @__PURE__ */ jsx78("section", { className: `border-y border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-inverse)] text-[var(--tapiz-text-inverse)] ${className}`, children: /* @__PURE__ */ jsx78("div", { className: "mx-auto grid max-w-7xl divide-y divide-[color-mix(in_srgb,var(--tapiz-text-inverse)_24%,transparent)] px-[var(--tapiz-space-page-x)] md:grid-cols-3 md:divide-x md:divide-y-0", children: items.map((item, index) => /* @__PURE__ */ jsxs58("div", { className: "p-6 md:p-8", children: [
2688
- /* @__PURE__ */ jsx78("div", { className: "text-3xl font-semibold tracking-tight", children: item.value }),
2689
- /* @__PURE__ */ jsx78("div", { className: "mt-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] opacity-70", children: item.label }),
2690
- item.description ? /* @__PURE__ */ jsx78("div", { className: "mt-3 text-sm opacity-70", children: item.description }) : null
2755
+ return /* @__PURE__ */ jsx79("section", { className: `border-y border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-inverse)] text-[var(--tapiz-text-inverse)] ${className}`, children: /* @__PURE__ */ jsx79("div", { className: "mx-auto grid max-w-7xl divide-y divide-[color-mix(in_srgb,var(--tapiz-text-inverse)_24%,transparent)] px-[var(--tapiz-space-page-x)] md:grid-cols-3 md:divide-x md:divide-y-0", children: items.map((item, index) => /* @__PURE__ */ jsxs58("div", { className: "p-6 md:p-8", children: [
2756
+ /* @__PURE__ */ jsx79("div", { className: "text-3xl font-semibold tracking-tight", children: item.value }),
2757
+ /* @__PURE__ */ jsx79("div", { className: "mt-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] opacity-70", children: item.label }),
2758
+ item.description ? /* @__PURE__ */ jsx79("div", { className: "mt-3 text-sm opacity-70", children: item.description }) : null
2691
2759
  ] }, index)) }) });
2692
2760
  }
2693
2761
 
@@ -2726,7 +2794,7 @@ var tapizFrameworkPresets = {
2726
2794
  };
2727
2795
 
2728
2796
  // src/components/layout/Container.tsx
2729
- import { jsx as jsx79 } from "react/jsx-runtime";
2797
+ import { jsx as jsx80 } from "react/jsx-runtime";
2730
2798
  var sizeClasses2 = {
2731
2799
  sm: "max-w-3xl",
2732
2800
  md: "max-w-5xl",
@@ -2735,7 +2803,7 @@ var sizeClasses2 = {
2735
2803
  full: "max-w-none"
2736
2804
  };
2737
2805
  function Container({ children, size = "lg", padded = true, className = "", style }) {
2738
- return /* @__PURE__ */ jsx79(
2806
+ return /* @__PURE__ */ jsx80(
2739
2807
  "div",
2740
2808
  {
2741
2809
  className: ["mx-auto w-full", sizeClasses2[size], padded ? "px-[var(--tapiz-space-page-x)]" : "", className].filter(Boolean).join(" "),
@@ -2746,7 +2814,7 @@ function Container({ children, size = "lg", padded = true, className = "", style
2746
2814
  }
2747
2815
 
2748
2816
  // src/components/layout/Surface.tsx
2749
- import { jsx as jsx80 } from "react/jsx-runtime";
2817
+ import { jsx as jsx81 } from "react/jsx-runtime";
2750
2818
  var variantClasses5 = {
2751
2819
  canvas: "bg-[var(--tapiz-bg-page)] text-[var(--tapiz-text-primary)]",
2752
2820
  surface: "bg-[var(--tapiz-bg-surface)] text-[var(--tapiz-text-primary)]",
@@ -2763,7 +2831,7 @@ var paddingClasses2 = {
2763
2831
  xl: "p-8"
2764
2832
  };
2765
2833
  function Surface({ children, variant = "surface", padding = "md", bordered = true, className = "", style }) {
2766
- return /* @__PURE__ */ jsx80(
2834
+ return /* @__PURE__ */ jsx81(
2767
2835
  "section",
2768
2836
  {
2769
2837
  className: [variantClasses5[variant], paddingClasses2[padding], bordered && variant !== "brutal" ? "border border-[var(--tapiz-border-subtle)]" : "", className].filter(Boolean).join(" "),
@@ -2774,23 +2842,23 @@ function Surface({ children, variant = "surface", padding = "md", bordered = tru
2774
2842
  }
2775
2843
 
2776
2844
  // src/components/layout/Divider.tsx
2777
- import { jsx as jsx81, jsxs as jsxs59 } from "react/jsx-runtime";
2845
+ import { jsx as jsx82, jsxs as jsxs59 } from "react/jsx-runtime";
2778
2846
  function Divider({ orientation = "horizontal", label, className = "" }) {
2779
2847
  if (orientation === "vertical") {
2780
- return /* @__PURE__ */ jsx81("div", { className: `mx-2 min-h-6 w-px bg-[var(--tapiz-border-subtle)] ${className}`, "aria-hidden": "true" });
2848
+ return /* @__PURE__ */ jsx82("div", { className: `mx-2 min-h-6 w-px bg-[var(--tapiz-border-subtle)] ${className}`, "aria-hidden": "true" });
2781
2849
  }
2782
2850
  if (label) {
2783
2851
  return /* @__PURE__ */ jsxs59("div", { className: `flex items-center gap-3 ${className}`, children: [
2784
- /* @__PURE__ */ jsx81("div", { className: "h-px flex-1 bg-[var(--tapiz-border-subtle)]" }),
2785
- /* @__PURE__ */ jsx81("span", { className: "font-mono text-[10px] uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
2786
- /* @__PURE__ */ jsx81("div", { className: "h-px flex-1 bg-[var(--tapiz-border-subtle)]" })
2852
+ /* @__PURE__ */ jsx82("div", { className: "h-px flex-1 bg-[var(--tapiz-border-subtle)]" }),
2853
+ /* @__PURE__ */ jsx82("span", { className: "font-mono text-[10px] uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
2854
+ /* @__PURE__ */ jsx82("div", { className: "h-px flex-1 bg-[var(--tapiz-border-subtle)]" })
2787
2855
  ] });
2788
2856
  }
2789
- return /* @__PURE__ */ jsx81("hr", { className: `border-[var(--tapiz-border-subtle)] ${className}` });
2857
+ return /* @__PURE__ */ jsx82("hr", { className: `border-[var(--tapiz-border-subtle)] ${className}` });
2790
2858
  }
2791
2859
 
2792
2860
  // src/components/layout/ResponsiveGrid.tsx
2793
- import { jsx as jsx82 } from "react/jsx-runtime";
2861
+ import { jsx as jsx83 } from "react/jsx-runtime";
2794
2862
  var gapClasses3 = {
2795
2863
  sm: "gap-3",
2796
2864
  md: "gap-4",
@@ -2798,7 +2866,7 @@ var gapClasses3 = {
2798
2866
  xl: "gap-8"
2799
2867
  };
2800
2868
  function ResponsiveGrid({ children, min = "18rem", gap = "md", className = "", style }) {
2801
- return /* @__PURE__ */ jsx82(
2869
+ return /* @__PURE__ */ jsx83(
2802
2870
  "div",
2803
2871
  {
2804
2872
  className: `grid ${gapClasses3[gap]} ${className}`,
@@ -2809,7 +2877,7 @@ function ResponsiveGrid({ children, min = "18rem", gap = "md", className = "", s
2809
2877
  }
2810
2878
 
2811
2879
  // src/components/data-display/Sparkline.tsx
2812
- import { jsx as jsx83, jsxs as jsxs60 } from "react/jsx-runtime";
2880
+ import { jsx as jsx84, jsxs as jsxs60 } from "react/jsx-runtime";
2813
2881
  function Sparkline({ values, width = 160, height = 48, label = "Trend", className = "", style }) {
2814
2882
  const safeValues = values.length ? values : [0];
2815
2883
  const min = Math.min(...safeValues);
@@ -2822,30 +2890,30 @@ function Sparkline({ values, width = 160, height = 48, label = "Trend", classNam
2822
2890
  return `${x},${y}`;
2823
2891
  }).join(" ");
2824
2892
  return /* @__PURE__ */ jsxs60("svg", { className, style, width, height, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": label, children: [
2825
- /* @__PURE__ */ jsx83("polyline", { points, fill: "none", stroke: "var(--tapiz-accent)", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "miter" }),
2826
- /* @__PURE__ */ jsx83("line", { x1: "0", x2: width, y1: height - 1, y2: height - 1, stroke: "var(--tapiz-border-subtle)", strokeWidth: "1" })
2893
+ /* @__PURE__ */ jsx84("polyline", { points, fill: "none", stroke: "var(--tapiz-accent)", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "miter" }),
2894
+ /* @__PURE__ */ jsx84("line", { x1: "0", x2: width, y1: height - 1, y2: height - 1, stroke: "var(--tapiz-border-subtle)", strokeWidth: "1" })
2827
2895
  ] });
2828
2896
  }
2829
2897
 
2830
2898
  // src/components/data-display/BarList.tsx
2831
- import { jsx as jsx84, jsxs as jsxs61 } from "react/jsx-runtime";
2899
+ import { jsx as jsx85, jsxs as jsxs61 } from "react/jsx-runtime";
2832
2900
  function BarList({ items, max, valueFormatter = (value) => value, className = "" }) {
2833
2901
  const computedMax = max ?? Math.max(1, ...items.map((item) => item.value));
2834
- return /* @__PURE__ */ jsx84("div", { className: `space-y-3 ${className}`, children: items.map((item, index) => {
2902
+ return /* @__PURE__ */ jsx85("div", { className: `space-y-3 ${className}`, children: items.map((item, index) => {
2835
2903
  const percent = Math.max(0, Math.min(100, item.value / computedMax * 100));
2836
2904
  return /* @__PURE__ */ jsxs61("div", { children: [
2837
2905
  /* @__PURE__ */ jsxs61("div", { className: "mb-1 flex items-center justify-between gap-3 text-sm", children: [
2838
- /* @__PURE__ */ jsx84("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: item.label }),
2839
- /* @__PURE__ */ jsx84("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: valueFormatter(item.value) })
2906
+ /* @__PURE__ */ jsx85("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: item.label }),
2907
+ /* @__PURE__ */ jsx85("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: valueFormatter(item.value) })
2840
2908
  ] }),
2841
- /* @__PURE__ */ jsx84("div", { className: "h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx84("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${percent}%` } }) }),
2842
- item.detail ? /* @__PURE__ */ jsx84("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.detail }) : null
2909
+ /* @__PURE__ */ jsx85("div", { className: "h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx85("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${percent}%` } }) }),
2910
+ item.detail ? /* @__PURE__ */ jsx85("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.detail }) : null
2843
2911
  ] }, index);
2844
2912
  }) });
2845
2913
  }
2846
2914
 
2847
2915
  // src/components/data-display/DonutMetric.tsx
2848
- import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
2916
+ import { jsx as jsx86, jsxs as jsxs62 } from "react/jsx-runtime";
2849
2917
  function DonutMetric({ value, max = 100, label, caption, size = 112, className = "" }) {
2850
2918
  const radius = 42;
2851
2919
  const circumference = 2 * Math.PI * radius;
@@ -2853,8 +2921,8 @@ function DonutMetric({ value, max = 100, label, caption, size = 112, className =
2853
2921
  const offset = circumference * (1 - ratio);
2854
2922
  return /* @__PURE__ */ jsxs62("div", { className: `inline-flex items-center gap-4 ${className}`, children: [
2855
2923
  /* @__PURE__ */ jsxs62("svg", { width: size, height: size, viewBox: "0 0 112 112", role: "img", "aria-label": `${Math.round(ratio * 100)}%`, children: [
2856
- /* @__PURE__ */ jsx85("circle", { cx: "56", cy: "56", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
2857
- /* @__PURE__ */ jsx85(
2924
+ /* @__PURE__ */ jsx86("circle", { cx: "56", cy: "56", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
2925
+ /* @__PURE__ */ jsx86(
2858
2926
  "circle",
2859
2927
  {
2860
2928
  cx: "56",
@@ -2875,14 +2943,14 @@ function DonutMetric({ value, max = 100, label, caption, size = 112, className =
2875
2943
  ] })
2876
2944
  ] }),
2877
2945
  label || caption ? /* @__PURE__ */ jsxs62("div", { children: [
2878
- label ? /* @__PURE__ */ jsx85("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2879
- caption ? /* @__PURE__ */ jsx85("div", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: caption }) : null
2946
+ label ? /* @__PURE__ */ jsx86("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2947
+ caption ? /* @__PURE__ */ jsx86("div", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: caption }) : null
2880
2948
  ] }) : null
2881
2949
  ] });
2882
2950
  }
2883
2951
 
2884
2952
  // src/components/data-display/FilterChip.tsx
2885
- import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
2953
+ import { jsx as jsx87, jsxs as jsxs63 } from "react/jsx-runtime";
2886
2954
  function FilterChip({ children, active = false, onRemove, className = "" }) {
2887
2955
  return /* @__PURE__ */ jsxs63(
2888
2956
  "span",
@@ -2894,56 +2962,56 @@ function FilterChip({ children, active = false, onRemove, className = "" }) {
2894
2962
  ].join(" "),
2895
2963
  children: [
2896
2964
  children,
2897
- onRemove ? /* @__PURE__ */ jsx86("button", { type: "button", onClick: onRemove, className: "text-[var(--tapiz-text-muted)] hover:text-[var(--tapiz-danger)]", "aria-label": "Remove filter", children: "\xD7" }) : null
2965
+ onRemove ? /* @__PURE__ */ jsx87("button", { type: "button", onClick: onRemove, className: "text-[var(--tapiz-text-muted)] hover:text-[var(--tapiz-danger)]", "aria-label": "Remove filter", children: "\xD7" }) : null
2898
2966
  ]
2899
2967
  }
2900
2968
  );
2901
2969
  }
2902
2970
 
2903
2971
  // src/components/data-display/DataToolbar.tsx
2904
- import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
2972
+ import { jsx as jsx88, jsxs as jsxs64 } from "react/jsx-runtime";
2905
2973
  function DataToolbar({ title, description, search, filters, actions, className = "" }) {
2906
2974
  return /* @__PURE__ */ jsxs64("div", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4 ${className}`, children: [
2907
2975
  /* @__PURE__ */ jsxs64("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between", children: [
2908
2976
  /* @__PURE__ */ jsxs64("div", { children: [
2909
- title ? /* @__PURE__ */ jsx87("h3", { className: "text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2910
- description ? /* @__PURE__ */ jsx87("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null
2977
+ title ? /* @__PURE__ */ jsx88("h3", { className: "text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2978
+ description ? /* @__PURE__ */ jsx88("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null
2911
2979
  ] }),
2912
- actions ? /* @__PURE__ */ jsx87("div", { className: "flex flex-wrap gap-2", children: actions }) : null
2980
+ actions ? /* @__PURE__ */ jsx88("div", { className: "flex flex-wrap gap-2", children: actions }) : null
2913
2981
  ] }),
2914
2982
  search || filters ? /* @__PURE__ */ jsxs64("div", { className: "mt-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between", children: [
2915
- search ? /* @__PURE__ */ jsx87("div", { className: "min-w-0 flex-1", children: search }) : null,
2916
- filters ? /* @__PURE__ */ jsx87("div", { className: "flex flex-wrap gap-2", children: filters }) : null
2983
+ search ? /* @__PURE__ */ jsx88("div", { className: "min-w-0 flex-1", children: search }) : null,
2984
+ filters ? /* @__PURE__ */ jsx88("div", { className: "flex flex-wrap gap-2", children: filters }) : null
2917
2985
  ] }) : null
2918
2986
  ] });
2919
2987
  }
2920
2988
 
2921
2989
  // src/components/framework/ResourceCard.tsx
2922
- import { Fragment as Fragment4, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
2990
+ import { Fragment as Fragment4, jsx as jsx89, jsxs as jsxs65 } from "react/jsx-runtime";
2923
2991
  function ResourceCard({ title, description, eyebrow, icon, meta, status, actions, href, className = "" }) {
2924
2992
  const content = /* @__PURE__ */ jsxs65(Fragment4, { children: [
2925
2993
  /* @__PURE__ */ jsxs65("div", { className: "flex items-start justify-between gap-4", children: [
2926
2994
  /* @__PURE__ */ jsxs65("div", { className: "flex min-w-0 items-start gap-3", children: [
2927
- icon ? /* @__PURE__ */ jsx88("div", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-2 text-[var(--tapiz-accent)]", children: icon }) : null,
2995
+ icon ? /* @__PURE__ */ jsx89("div", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-2 text-[var(--tapiz-accent)]", children: icon }) : null,
2928
2996
  /* @__PURE__ */ jsxs65("div", { className: "min-w-0", children: [
2929
- eyebrow ? /* @__PURE__ */ jsx88("div", { className: "kicker mb-2", children: eyebrow }) : null,
2930
- /* @__PURE__ */ jsx88("h3", { className: "truncate text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2931
- description ? /* @__PURE__ */ jsx88("p", { className: "mt-2 line-clamp-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
2997
+ eyebrow ? /* @__PURE__ */ jsx89("div", { className: "kicker mb-2", children: eyebrow }) : null,
2998
+ /* @__PURE__ */ jsx89("h3", { className: "truncate text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2999
+ description ? /* @__PURE__ */ jsx89("p", { className: "mt-2 line-clamp-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
2932
3000
  ] })
2933
3001
  ] }),
2934
- status ? /* @__PURE__ */ jsx88(Badge, { children: status }) : null
3002
+ status ? /* @__PURE__ */ jsx89(Badge, { children: status }) : null
2935
3003
  ] }),
2936
3004
  meta || actions ? /* @__PURE__ */ jsxs65("div", { className: "mt-5 flex flex-wrap items-center justify-between gap-3 border-t border-[var(--tapiz-border-subtle)] pt-4", children: [
2937
- meta ? /* @__PURE__ */ jsx88("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: meta }) : /* @__PURE__ */ jsx88("span", {}),
2938
- actions ? /* @__PURE__ */ jsx88("div", { className: "flex flex-wrap gap-2", children: actions }) : null
3005
+ meta ? /* @__PURE__ */ jsx89("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: meta }) : /* @__PURE__ */ jsx89("span", {}),
3006
+ actions ? /* @__PURE__ */ jsx89("div", { className: "flex flex-wrap gap-2", children: actions }) : null
2939
3007
  ] }) : null
2940
3008
  ] });
2941
3009
  const classes = `block border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5 shadow-[var(--tapiz-shadow-sm)] hover:border-[var(--tapiz-border-strong)] hover:shadow-[var(--tapiz-shadow-md)] ${className}`;
2942
- return href ? /* @__PURE__ */ jsx88("a", { href, className: classes, children: content }) : /* @__PURE__ */ jsx88("article", { className: classes, children: content });
3010
+ return href ? /* @__PURE__ */ jsx89("a", { href, className: classes, children: content }) : /* @__PURE__ */ jsx89("article", { className: classes, children: content });
2943
3011
  }
2944
3012
 
2945
3013
  // src/components/framework/IntegrationCard.tsx
2946
- import { jsx as jsx89, jsxs as jsxs66 } from "react/jsx-runtime";
3014
+ import { jsx as jsx90, jsxs as jsxs66 } from "react/jsx-runtime";
2947
3015
  var statusLabel = {
2948
3016
  connected: "Connected",
2949
3017
  disconnected: "Disconnected",
@@ -2960,23 +3028,23 @@ function IntegrationCard({ name, description, logo, status = "disconnected", las
2960
3028
  return /* @__PURE__ */ jsxs66("article", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5 ${className}`, children: [
2961
3029
  /* @__PURE__ */ jsxs66("div", { className: "flex items-start justify-between gap-4", children: [
2962
3030
  /* @__PURE__ */ jsxs66("div", { className: "flex items-start gap-3", children: [
2963
- /* @__PURE__ */ jsx89("div", { className: "flex size-11 items-center justify-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] text-[var(--tapiz-accent)]", children: logo ?? /* @__PURE__ */ jsx89("span", { className: "font-mono text-xs", children: "API" }) }),
3031
+ /* @__PURE__ */ jsx90("div", { className: "flex size-11 items-center justify-center border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)] text-[var(--tapiz-accent)]", children: logo ?? /* @__PURE__ */ jsx90("span", { className: "font-mono text-xs", children: "API" }) }),
2964
3032
  /* @__PURE__ */ jsxs66("div", { children: [
2965
- /* @__PURE__ */ jsx89("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: name }),
2966
- description ? /* @__PURE__ */ jsx89("p", { className: "mt-1 text-sm leading-5 text-[var(--tapiz-text-muted)]", children: description }) : null
3033
+ /* @__PURE__ */ jsx90("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: name }),
3034
+ description ? /* @__PURE__ */ jsx90("p", { className: "mt-1 text-sm leading-5 text-[var(--tapiz-text-muted)]", children: description }) : null
2967
3035
  ] })
2968
3036
  ] }),
2969
- /* @__PURE__ */ jsx89(StatusBadge, { variant: statusVariant[status], label: statusLabel[status] })
3037
+ /* @__PURE__ */ jsx90(StatusBadge, { variant: statusVariant[status], label: statusLabel[status] })
2970
3038
  ] }),
2971
3039
  /* @__PURE__ */ jsxs66("div", { className: "mt-5 flex flex-wrap items-center justify-between gap-3 border-t border-[var(--tapiz-border-subtle)] pt-4", children: [
2972
- /* @__PURE__ */ jsx89("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: lastSync ?? "No sync yet" }),
2973
- actions ? /* @__PURE__ */ jsx89("div", { className: "flex gap-2", children: actions }) : null
3040
+ /* @__PURE__ */ jsx90("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: lastSync ?? "No sync yet" }),
3041
+ actions ? /* @__PURE__ */ jsx90("div", { className: "flex gap-2", children: actions }) : null
2974
3042
  ] })
2975
3043
  ] });
2976
3044
  }
2977
3045
 
2978
3046
  // src/components/framework/HealthIndicator.tsx
2979
- import { jsx as jsx90, jsxs as jsxs67 } from "react/jsx-runtime";
3047
+ import { jsx as jsx91, jsxs as jsxs67 } from "react/jsx-runtime";
2980
3048
  var toneClasses2 = {
2981
3049
  operational: "bg-[var(--tapiz-success)]",
2982
3050
  degraded: "bg-[var(--tapiz-warning)]",
@@ -2991,33 +3059,33 @@ var defaultLabel = {
2991
3059
  };
2992
3060
  function HealthIndicator({ tone: tone2 = "unknown", label, detail, className = "" }) {
2993
3061
  return /* @__PURE__ */ jsxs67("div", { className: `inline-flex items-center gap-3 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] px-3 py-2 ${className}`, children: [
2994
- /* @__PURE__ */ jsx90("span", { className: `size-2.5 ${toneClasses2[tone2]}`, "aria-hidden": "true" }),
2995
- /* @__PURE__ */ jsx90("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label ?? defaultLabel[tone2] }),
2996
- detail ? /* @__PURE__ */ jsx90("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: detail }) : null
3062
+ /* @__PURE__ */ jsx91("span", { className: `size-2.5 ${toneClasses2[tone2]}`, "aria-hidden": "true" }),
3063
+ /* @__PURE__ */ jsx91("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label ?? defaultLabel[tone2] }),
3064
+ detail ? /* @__PURE__ */ jsx91("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: detail }) : null
2997
3065
  ] });
2998
3066
  }
2999
3067
 
3000
3068
  // src/components/framework/AuditLog.tsx
3001
- import { jsx as jsx91, jsxs as jsxs68 } from "react/jsx-runtime";
3069
+ import { jsx as jsx92, jsxs as jsxs68 } from "react/jsx-runtime";
3002
3070
  function AuditLog({ items, className = "" }) {
3003
- return /* @__PURE__ */ jsx91("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item, index) => /* @__PURE__ */ jsxs68("div", { className: "flex gap-3 p-4", children: [
3004
- /* @__PURE__ */ jsx91(Avatar, { name: item.initials ?? item.actor, size: "sm" }),
3071
+ return /* @__PURE__ */ jsx92("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item, index) => /* @__PURE__ */ jsxs68("div", { className: "flex gap-3 p-4", children: [
3072
+ /* @__PURE__ */ jsx92(Avatar, { name: item.initials ?? item.actor, size: "sm" }),
3005
3073
  /* @__PURE__ */ jsxs68("div", { className: "min-w-0 flex-1", children: [
3006
3074
  /* @__PURE__ */ jsxs68("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
3007
3075
  /* @__PURE__ */ jsxs68("p", { className: "text-sm text-[var(--tapiz-text-secondary)]", children: [
3008
- /* @__PURE__ */ jsx91("strong", { className: "text-[var(--tapiz-text-primary)]", children: item.actor }),
3076
+ /* @__PURE__ */ jsx92("strong", { className: "text-[var(--tapiz-text-primary)]", children: item.actor }),
3009
3077
  " ",
3010
3078
  item.action
3011
3079
  ] }),
3012
- /* @__PURE__ */ jsx91("span", { className: "font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.timestamp })
3080
+ /* @__PURE__ */ jsx92("span", { className: "font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.timestamp })
3013
3081
  ] }),
3014
- item.detail ? /* @__PURE__ */ jsx91("div", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: item.detail }) : null
3082
+ item.detail ? /* @__PURE__ */ jsx92("div", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: item.detail }) : null
3015
3083
  ] })
3016
3084
  ] }, index)) });
3017
3085
  }
3018
3086
 
3019
3087
  // src/components/framework/KanbanBoard.tsx
3020
- import { jsx as jsx92, jsxs as jsxs69 } from "react/jsx-runtime";
3088
+ import { jsx as jsx93, jsxs as jsxs69 } from "react/jsx-runtime";
3021
3089
  var toneClasses3 = {
3022
3090
  default: "border-[var(--tapiz-border-subtle)]",
3023
3091
  accent: "border-[var(--tapiz-accent)]",
@@ -3026,65 +3094,65 @@ var toneClasses3 = {
3026
3094
  danger: "border-[var(--tapiz-danger)]"
3027
3095
  };
3028
3096
  function KanbanBoard({ columns, className = "" }) {
3029
- return /* @__PURE__ */ jsx92("div", { className: `grid gap-4 overflow-x-auto md:grid-flow-col md:auto-cols-[minmax(18rem,1fr)] ${className}`, children: columns.map((column) => /* @__PURE__ */ jsxs69("section", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-3", children: [
3097
+ return /* @__PURE__ */ jsx93("div", { className: `grid gap-4 overflow-x-auto md:grid-flow-col md:auto-cols-[minmax(18rem,1fr)] ${className}`, children: columns.map((column) => /* @__PURE__ */ jsxs69("section", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-3", children: [
3030
3098
  /* @__PURE__ */ jsxs69("div", { className: "mb-3 flex items-start justify-between gap-3", children: [
3031
3099
  /* @__PURE__ */ jsxs69("div", { children: [
3032
- /* @__PURE__ */ jsx92("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: column.title }),
3033
- column.description ? /* @__PURE__ */ jsx92("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: column.description }) : null
3100
+ /* @__PURE__ */ jsx93("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: column.title }),
3101
+ column.description ? /* @__PURE__ */ jsx93("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: column.description }) : null
3034
3102
  ] }),
3035
- /* @__PURE__ */ jsx92("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: column.items.length })
3103
+ /* @__PURE__ */ jsx93("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: column.items.length })
3036
3104
  ] }),
3037
- /* @__PURE__ */ jsx92("div", { className: "space-y-3", children: column.items.map((item) => /* @__PURE__ */ jsxs69("article", { className: `border-l-2 bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-sm)] ${toneClasses3[item.tone ?? "default"]}`, children: [
3038
- /* @__PURE__ */ jsx92("h4", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3039
- item.description ? /* @__PURE__ */ jsx92("p", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3040
- item.meta ? /* @__PURE__ */ jsx92("div", { className: "mt-3 font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3105
+ /* @__PURE__ */ jsx93("div", { className: "space-y-3", children: column.items.map((item) => /* @__PURE__ */ jsxs69("article", { className: `border-l-2 bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-sm)] ${toneClasses3[item.tone ?? "default"]}`, children: [
3106
+ /* @__PURE__ */ jsx93("h4", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3107
+ item.description ? /* @__PURE__ */ jsx93("p", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3108
+ item.meta ? /* @__PURE__ */ jsx93("div", { className: "mt-3 font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3041
3109
  ] }, item.id)) })
3042
3110
  ] }, column.id)) });
3043
3111
  }
3044
3112
 
3045
3113
  // src/components/framework/AccessMatrix.tsx
3046
- import { jsx as jsx93, jsxs as jsxs70 } from "react/jsx-runtime";
3114
+ import { jsx as jsx94, jsxs as jsxs70 } from "react/jsx-runtime";
3047
3115
  function AccessMatrix({ roles, permissions, className = "" }) {
3048
- return /* @__PURE__ */ jsx93("div", { className: `overflow-x-auto border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: /* @__PURE__ */ jsxs70("table", { className: "min-w-full text-sm", children: [
3049
- /* @__PURE__ */ jsx93("thead", { children: /* @__PURE__ */ jsxs70("tr", { children: [
3050
- /* @__PURE__ */ jsx93("th", { className: "px-4 py-3 text-left", children: "Permission" }),
3051
- roles.map((role) => /* @__PURE__ */ jsx93("th", { className: "px-4 py-3 text-center", children: role.label }, role.key))
3116
+ return /* @__PURE__ */ jsx94("div", { className: `overflow-x-auto border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: /* @__PURE__ */ jsxs70("table", { className: "min-w-full text-sm", children: [
3117
+ /* @__PURE__ */ jsx94("thead", { children: /* @__PURE__ */ jsxs70("tr", { children: [
3118
+ /* @__PURE__ */ jsx94("th", { className: "px-4 py-3 text-left", children: "Permission" }),
3119
+ roles.map((role) => /* @__PURE__ */ jsx94("th", { className: "px-4 py-3 text-center", children: role.label }, role.key))
3052
3120
  ] }) }),
3053
- /* @__PURE__ */ jsx93("tbody", { children: permissions.map((permission) => /* @__PURE__ */ jsxs70("tr", { children: [
3121
+ /* @__PURE__ */ jsx94("tbody", { children: permissions.map((permission) => /* @__PURE__ */ jsxs70("tr", { children: [
3054
3122
  /* @__PURE__ */ jsxs70("td", { className: "px-4 py-3", children: [
3055
- /* @__PURE__ */ jsx93("div", { className: "font-medium text-[var(--tapiz-text-primary)]", children: permission.label }),
3056
- permission.description ? /* @__PURE__ */ jsx93("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: permission.description }) : null
3123
+ /* @__PURE__ */ jsx94("div", { className: "font-medium text-[var(--tapiz-text-primary)]", children: permission.label }),
3124
+ permission.description ? /* @__PURE__ */ jsx94("div", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: permission.description }) : null
3057
3125
  ] }),
3058
- roles.map((role) => /* @__PURE__ */ jsx93("td", { className: "px-4 py-3 text-center", children: /* @__PURE__ */ jsx93("span", { className: permission.roles[role.key] ? "text-[var(--tapiz-success)]" : "text-[var(--tapiz-text-disabled)]", children: permission.roles[role.key] ? "\u2713" : "\u2014" }) }, role.key))
3126
+ roles.map((role) => /* @__PURE__ */ jsx94("td", { className: "px-4 py-3 text-center", children: /* @__PURE__ */ jsx94("span", { className: permission.roles[role.key] ? "text-[var(--tapiz-success)]" : "text-[var(--tapiz-text-disabled)]", children: permission.roles[role.key] ? "\u2713" : "\u2014" }) }, role.key))
3059
3127
  ] }, permission.key)) })
3060
3128
  ] }) });
3061
3129
  }
3062
3130
 
3063
3131
  // src/components/framework/CalendarGrid.tsx
3064
- import { jsx as jsx94, jsxs as jsxs71 } from "react/jsx-runtime";
3132
+ import { jsx as jsx95, jsxs as jsxs71 } from "react/jsx-runtime";
3065
3133
  var defaultWeekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
3066
3134
  function CalendarGrid({ days, weekdays = defaultWeekdays, className = "" }) {
3067
3135
  return /* @__PURE__ */ jsxs71("div", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: [
3068
- /* @__PURE__ */ jsx94("div", { className: "grid grid-cols-7 border-b border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: weekdays.map((day, index) => /* @__PURE__ */ jsx94("div", { className: "px-3 py-2 font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: day }, index)) }),
3069
- /* @__PURE__ */ jsx94("div", { className: "grid grid-cols-7", children: days.map((day, index) => /* @__PURE__ */ jsxs71("div", { className: `min-h-28 border-b border-r border-[var(--tapiz-border-subtle)] p-2 ${day.muted ? "opacity-45" : ""} ${day.selected ? "bg-[var(--tapiz-accent-soft)]" : ""}`, children: [
3136
+ /* @__PURE__ */ jsx95("div", { className: "grid grid-cols-7 border-b border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: weekdays.map((day, index) => /* @__PURE__ */ jsx95("div", { className: "px-3 py-2 font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: day }, index)) }),
3137
+ /* @__PURE__ */ jsx95("div", { className: "grid grid-cols-7", children: days.map((day, index) => /* @__PURE__ */ jsxs71("div", { className: `min-h-28 border-b border-r border-[var(--tapiz-border-subtle)] p-2 ${day.muted ? "opacity-45" : ""} ${day.selected ? "bg-[var(--tapiz-accent-soft)]" : ""}`, children: [
3070
3138
  /* @__PURE__ */ jsxs71("div", { className: "flex items-center justify-between gap-2", children: [
3071
- /* @__PURE__ */ jsx94("span", { className: "font-mono text-xs text-[var(--tapiz-text-primary)]", children: day.date }),
3072
- day.label ? /* @__PURE__ */ jsx94("span", { className: "text-[10px] text-[var(--tapiz-text-muted)]", children: day.label }) : null
3139
+ /* @__PURE__ */ jsx95("span", { className: "font-mono text-xs text-[var(--tapiz-text-primary)]", children: day.date }),
3140
+ day.label ? /* @__PURE__ */ jsx95("span", { className: "text-[10px] text-[var(--tapiz-text-muted)]", children: day.label }) : null
3073
3141
  ] }),
3074
- day.events?.length ? /* @__PURE__ */ jsx94("div", { className: "mt-2 space-y-1", children: day.events.map((event, eventIndex) => /* @__PURE__ */ jsx94("div", { className: "truncate border-l-2 border-[var(--tapiz-accent)] bg-[var(--tapiz-bg-surface-muted)] px-2 py-1 text-[11px] text-[var(--tapiz-text-secondary)]", children: event }, eventIndex)) }) : null
3142
+ day.events?.length ? /* @__PURE__ */ jsx95("div", { className: "mt-2 space-y-1", children: day.events.map((event, eventIndex) => /* @__PURE__ */ jsx95("div", { className: "truncate border-l-2 border-[var(--tapiz-accent)] bg-[var(--tapiz-bg-surface-muted)] px-2 py-1 text-[11px] text-[var(--tapiz-text-secondary)]", children: event }, eventIndex)) }) : null
3075
3143
  ] }, index)) })
3076
3144
  ] });
3077
3145
  }
3078
3146
 
3079
3147
  // src/components/forms/Slider.tsx
3080
- import { jsx as jsx95, jsxs as jsxs72 } from "react/jsx-runtime";
3148
+ import { jsx as jsx96, jsxs as jsxs72 } from "react/jsx-runtime";
3081
3149
  function Slider({ label, valueLabel, className = "", ...props }) {
3082
3150
  return /* @__PURE__ */ jsxs72("label", { className: `block ${className}`, children: [
3083
3151
  label || valueLabel ? /* @__PURE__ */ jsxs72("span", { className: "mb-2 flex items-center justify-between gap-3 text-sm", children: [
3084
- label ? /* @__PURE__ */ jsx95("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: label }) : /* @__PURE__ */ jsx95("span", {}),
3085
- valueLabel ? /* @__PURE__ */ jsx95("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: valueLabel }) : null
3152
+ label ? /* @__PURE__ */ jsx96("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: label }) : /* @__PURE__ */ jsx96("span", {}),
3153
+ valueLabel ? /* @__PURE__ */ jsx96("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: valueLabel }) : null
3086
3154
  ] }) : null,
3087
- /* @__PURE__ */ jsx95(
3155
+ /* @__PURE__ */ jsx96(
3088
3156
  "input",
3089
3157
  {
3090
3158
  ...props,
@@ -3096,19 +3164,19 @@ function Slider({ label, valueLabel, className = "", ...props }) {
3096
3164
  }
3097
3165
 
3098
3166
  // src/components/forms/FileDropzone.tsx
3099
- import { jsx as jsx96, jsxs as jsxs73 } from "react/jsx-runtime";
3167
+ import { jsx as jsx97, jsxs as jsxs73 } from "react/jsx-runtime";
3100
3168
  function FileDropzone({ title = "Drop files here", description, actionLabel = "Browse", className = "", ...props }) {
3101
3169
  return /* @__PURE__ */ jsxs73("label", { className: `block cursor-pointer border-2 border-dashed border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] p-6 text-center hover:bg-[var(--tapiz-bg-surface-muted)] ${className}`, children: [
3102
- /* @__PURE__ */ jsx96("input", { ...props, type: "file", className: "sr-only" }),
3103
- /* @__PURE__ */ jsx96("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3104
- description ? /* @__PURE__ */ jsx96("span", { className: "mt-2 block text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
3105
- /* @__PURE__ */ jsx96("span", { className: "mt-4 inline-flex border border-[var(--tapiz-border-strong)] px-3 py-1.5 font-mono text-xs uppercase tracking-[0.12em] text-[var(--tapiz-accent)]", children: actionLabel })
3170
+ /* @__PURE__ */ jsx97("input", { ...props, type: "file", className: "sr-only" }),
3171
+ /* @__PURE__ */ jsx97("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3172
+ description ? /* @__PURE__ */ jsx97("span", { className: "mt-2 block text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
3173
+ /* @__PURE__ */ jsx97("span", { className: "mt-4 inline-flex border border-[var(--tapiz-border-strong)] px-3 py-1.5 font-mono text-xs uppercase tracking-[0.12em] text-[var(--tapiz-accent)]", children: actionLabel })
3106
3174
  ] });
3107
3175
  }
3108
3176
 
3109
3177
  // src/components/forms/PasswordInput.tsx
3110
3178
  import { useState as useState7 } from "react";
3111
- import { jsx as jsx97, jsxs as jsxs74 } from "react/jsx-runtime";
3179
+ import { jsx as jsx98, jsxs as jsxs74 } from "react/jsx-runtime";
3112
3180
  function PasswordInput({
3113
3181
  revealLabel = "Show password",
3114
3182
  className = "",
@@ -3120,7 +3188,7 @@ function PasswordInput({
3120
3188
  {
3121
3189
  className: `flex border border-(--tapiz-border-strong) bg-(--tapiz-bg-surface) focus-within:border-(--tapiz-border-focus) focus-within:shadow-[inset_3px_0_0_0_var(--tapiz-signal)] ${className}`,
3122
3190
  children: [
3123
- /* @__PURE__ */ jsx97(
3191
+ /* @__PURE__ */ jsx98(
3124
3192
  "input",
3125
3193
  {
3126
3194
  ...props,
@@ -3128,7 +3196,7 @@ function PasswordInput({
3128
3196
  className: "min-w-0 flex-1 border-0 bg-transparent px-3 py-2 text-sm text-(--tapiz-text-primary) outline-none focus:shadow-none!"
3129
3197
  }
3130
3198
  ),
3131
- /* @__PURE__ */ jsx97(
3199
+ /* @__PURE__ */ jsx98(
3132
3200
  "button",
3133
3201
  {
3134
3202
  type: "button",
@@ -3137,7 +3205,7 @@ function PasswordInput({
3137
3205
  onClick: () => setVisible((v) => !v),
3138
3206
  tabIndex: -1,
3139
3207
  className: "grid place-items-center px-3 text-(--tapiz-text-muted) transition-colors hover:text-(--tapiz-text-primary)",
3140
- children: visible ? /* @__PURE__ */ jsx97(EyeOff, { size: 15 }) : /* @__PURE__ */ jsx97(Eye, { size: 15 })
3208
+ children: visible ? /* @__PURE__ */ jsx98(EyeOff, { size: 15 }) : /* @__PURE__ */ jsx98(Eye, { size: 15 })
3141
3209
  }
3142
3210
  )
3143
3211
  ]
@@ -3146,11 +3214,11 @@ function PasswordInput({
3146
3214
  }
3147
3215
 
3148
3216
  // src/components/forms/TextareaCounter.tsx
3149
- import { jsx as jsx98, jsxs as jsxs75 } from "react/jsx-runtime";
3217
+ import { jsx as jsx99, jsxs as jsxs75 } from "react/jsx-runtime";
3150
3218
  function TextareaCounter({ maxLength, value = "", className = "", ...props }) {
3151
3219
  const count = value.length;
3152
3220
  return /* @__PURE__ */ jsxs75("div", { className, children: [
3153
- /* @__PURE__ */ jsx98("textarea", { ...props, value, maxLength, className: "input-field min-h-28" }),
3221
+ /* @__PURE__ */ jsx99("textarea", { ...props, value, maxLength, className: "input-field min-h-28" }),
3154
3222
  /* @__PURE__ */ jsxs75("div", { className: "mt-1 text-right font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: [
3155
3223
  count,
3156
3224
  "/",
@@ -3160,7 +3228,7 @@ function TextareaCounter({ maxLength, value = "", className = "", ...props }) {
3160
3228
  }
3161
3229
 
3162
3230
  // src/components/feedback/Callout.tsx
3163
- import { jsx as jsx99, jsxs as jsxs76 } from "react/jsx-runtime";
3231
+ import { jsx as jsx100, jsxs as jsxs76 } from "react/jsx-runtime";
3164
3232
  var toneClasses4 = {
3165
3233
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)]",
3166
3234
  success: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)]",
@@ -3169,73 +3237,73 @@ var toneClasses4 = {
3169
3237
  neutral: "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]"
3170
3238
  };
3171
3239
  function Callout({ title, children, tone: tone2 = "info", icon, actions, className = "" }) {
3172
- return /* @__PURE__ */ jsx99("aside", { className: `border-l-4 p-4 ${toneClasses4[tone2]} ${className}`, children: /* @__PURE__ */ jsxs76("div", { className: "flex gap-3", children: [
3173
- icon ? /* @__PURE__ */ jsx99("div", { className: "text-[var(--tapiz-text-primary)]", children: icon }) : null,
3240
+ return /* @__PURE__ */ jsx100("aside", { className: `border-l-4 p-4 ${toneClasses4[tone2]} ${className}`, children: /* @__PURE__ */ jsxs76("div", { className: "flex gap-3", children: [
3241
+ icon ? /* @__PURE__ */ jsx100("div", { className: "text-[var(--tapiz-text-primary)]", children: icon }) : null,
3174
3242
  /* @__PURE__ */ jsxs76("div", { className: "min-w-0 flex-1", children: [
3175
- title ? /* @__PURE__ */ jsx99("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
3176
- children ? /* @__PURE__ */ jsx99("div", { className: "mt-1 text-sm leading-6 text-[var(--tapiz-text-secondary)]", children }) : null,
3177
- actions ? /* @__PURE__ */ jsx99("div", { className: "mt-3 flex flex-wrap gap-2", children: actions }) : null
3243
+ title ? /* @__PURE__ */ jsx100("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
3244
+ children ? /* @__PURE__ */ jsx100("div", { className: "mt-1 text-sm leading-6 text-[var(--tapiz-text-secondary)]", children }) : null,
3245
+ actions ? /* @__PURE__ */ jsx100("div", { className: "mt-3 flex flex-wrap gap-2", children: actions }) : null
3178
3246
  ] })
3179
3247
  ] }) });
3180
3248
  }
3181
3249
 
3182
3250
  // src/components/feedback/LoadingOverlay.tsx
3183
- import { jsx as jsx100, jsxs as jsxs77 } from "react/jsx-runtime";
3251
+ import { jsx as jsx101, jsxs as jsxs77 } from "react/jsx-runtime";
3184
3252
  function LoadingOverlay({ visible = false, label = "Loading", children, className = "" }) {
3185
3253
  return /* @__PURE__ */ jsxs77("div", { className: `relative ${className}`, children: [
3186
3254
  children,
3187
- visible ? /* @__PURE__ */ jsx100("div", { className: "absolute inset-0 grid place-items-center border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-overlay)] backdrop-blur-sm", children: /* @__PURE__ */ jsxs77("div", { className: "flex items-center gap-3 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] px-4 py-3 text-sm text-[var(--tapiz-text-primary)] shadow-[var(--tapiz-shadow-brutal)]", children: [
3188
- /* @__PURE__ */ jsx100(Spinner, {}),
3189
- /* @__PURE__ */ jsx100("span", { children: label })
3255
+ visible ? /* @__PURE__ */ jsx101("div", { className: "absolute inset-0 grid place-items-center border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-overlay)] backdrop-blur-sm", children: /* @__PURE__ */ jsxs77("div", { className: "flex items-center gap-3 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] px-4 py-3 text-sm text-[var(--tapiz-text-primary)] shadow-[var(--tapiz-shadow-brutal)]", children: [
3256
+ /* @__PURE__ */ jsx101(Spinner, {}),
3257
+ /* @__PURE__ */ jsx101("span", { children: label })
3190
3258
  ] }) }) : null
3191
3259
  ] });
3192
3260
  }
3193
3261
 
3194
3262
  // src/components/feedback/NotificationList.tsx
3195
- import { jsx as jsx101, jsxs as jsxs78 } from "react/jsx-runtime";
3263
+ import { jsx as jsx102, jsxs as jsxs78 } from "react/jsx-runtime";
3196
3264
  function NotificationList({ items, className = "" }) {
3197
- return /* @__PURE__ */ jsx101("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item) => /* @__PURE__ */ jsxs78("article", { className: "flex gap-3 p-4", children: [
3198
- /* @__PURE__ */ jsx101("span", { className: `mt-1 size-2.5 ${item.unread ? "bg-[var(--tapiz-accent)]" : "bg-[var(--tapiz-border-subtle)]"}`, "aria-hidden": "true" }),
3265
+ return /* @__PURE__ */ jsx102("div", { className: `divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: items.map((item) => /* @__PURE__ */ jsxs78("article", { className: "flex gap-3 p-4", children: [
3266
+ /* @__PURE__ */ jsx102("span", { className: `mt-1 size-2.5 ${item.unread ? "bg-[var(--tapiz-accent)]" : "bg-[var(--tapiz-border-subtle)]"}`, "aria-hidden": "true" }),
3199
3267
  /* @__PURE__ */ jsxs78("div", { className: "min-w-0 flex-1", children: [
3200
3268
  /* @__PURE__ */ jsxs78("div", { className: "flex items-start justify-between gap-3", children: [
3201
- /* @__PURE__ */ jsx101("h3", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3202
- item.time ? /* @__PURE__ */ jsx101("span", { className: "font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3269
+ /* @__PURE__ */ jsx102("h3", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3270
+ item.time ? /* @__PURE__ */ jsx102("span", { className: "font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3203
3271
  ] }),
3204
- item.description ? /* @__PURE__ */ jsx101("p", { className: "mt-1 text-sm leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3205
- item.action ? /* @__PURE__ */ jsx101("div", { className: "mt-3", children: item.action }) : null
3272
+ item.description ? /* @__PURE__ */ jsx102("p", { className: "mt-1 text-sm leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3273
+ item.action ? /* @__PURE__ */ jsx102("div", { className: "mt-3", children: item.action }) : null
3206
3274
  ] })
3207
3275
  ] }, item.id)) });
3208
3276
  }
3209
3277
 
3210
3278
  // src/components/layout/MasonryGrid.tsx
3211
- import { jsx as jsx102 } from "react/jsx-runtime";
3279
+ import { jsx as jsx103 } from "react/jsx-runtime";
3212
3280
  var columnClasses = { 2: "md:columns-2", 3: "md:columns-2 xl:columns-3", 4: "md:columns-2 lg:columns-3 xl:columns-4" };
3213
3281
  var gapClasses4 = { sm: "gap-3", md: "gap-5", lg: "gap-8" };
3214
3282
  function MasonryGrid({ children, columns = 3, gap = "md", className = "", style }) {
3215
- return /* @__PURE__ */ jsx102("div", { className: [columnClasses[columns], gapClasses4[gap], className].filter(Boolean).join(" "), style, children });
3283
+ return /* @__PURE__ */ jsx103("div", { className: [columnClasses[columns], gapClasses4[gap], className].filter(Boolean).join(" "), style, children });
3216
3284
  }
3217
3285
 
3218
3286
  // src/components/layout/PageRail.tsx
3219
- import { Fragment as Fragment5, jsx as jsx103, jsxs as jsxs79 } from "react/jsx-runtime";
3287
+ import { Fragment as Fragment5, jsx as jsx104, jsxs as jsxs79 } from "react/jsx-runtime";
3220
3288
  function PageRail({ title, items, actions, className = "", style }) {
3221
3289
  return /* @__PURE__ */ jsxs79("aside", { className: ["sticky top-20 rounded-none border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-sm)]", className].filter(Boolean).join(" "), style, children: [
3222
- title ? /* @__PURE__ */ jsx103("div", { className: "kicker mb-3 px-2", children: title }) : null,
3223
- /* @__PURE__ */ jsx103("nav", { className: "flex flex-col gap-1", children: items.map((item, index) => {
3290
+ title ? /* @__PURE__ */ jsx104("div", { className: "kicker mb-3 px-2", children: title }) : null,
3291
+ /* @__PURE__ */ jsx104("nav", { className: "flex flex-col gap-1", children: items.map((item, index) => {
3224
3292
  const content = /* @__PURE__ */ jsxs79(Fragment5, { children: [
3225
- /* @__PURE__ */ jsx103("span", { className: "truncate", children: item.label }),
3226
- item.meta ? /* @__PURE__ */ jsx103("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3293
+ /* @__PURE__ */ jsx104("span", { className: "truncate", children: item.label }),
3294
+ item.meta ? /* @__PURE__ */ jsx104("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3227
3295
  ] });
3228
3296
  const classes = ["flex items-center justify-between gap-3 border px-3 py-2 text-sm transition", item.active ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-text-primary)]" : "border-transparent text-[var(--tapiz-text-muted)] hover:border-[var(--tapiz-border-subtle)] hover:text-[var(--tapiz-text-primary)]"].join(" ");
3229
- return item.href ? /* @__PURE__ */ jsx103("a", { href: item.href, className: classes, children: content }, index) : /* @__PURE__ */ jsx103("div", { className: classes, children: content }, index);
3297
+ return item.href ? /* @__PURE__ */ jsx104("a", { href: item.href, className: classes, children: content }, index) : /* @__PURE__ */ jsx104("div", { className: classes, children: content }, index);
3230
3298
  }) }),
3231
- actions ? /* @__PURE__ */ jsx103("div", { className: "mt-3 border-t border-[var(--tapiz-border-subtle)] pt-3", children: actions }) : null
3299
+ actions ? /* @__PURE__ */ jsx104("div", { className: "mt-3 border-t border-[var(--tapiz-border-subtle)] pt-3", children: actions }) : null
3232
3300
  ] });
3233
3301
  }
3234
3302
 
3235
3303
  // src/components/layout/StickyBar.tsx
3236
- import { jsx as jsx104 } from "react/jsx-runtime";
3304
+ import { jsx as jsx105 } from "react/jsx-runtime";
3237
3305
  function StickyBar({ children, position = "top", className = "", style }) {
3238
- return /* @__PURE__ */ jsx104(
3306
+ return /* @__PURE__ */ jsx105(
3239
3307
  "div",
3240
3308
  {
3241
3309
  className: ["z-30 border-[var(--tapiz-border-subtle)] bg-[color-mix(in_srgb,var(--tapiz-bg-canvas)_88%,transparent)] px-4 py-3 backdrop-blur-xl", position === "top" ? "sticky top-0 border-b" : "sticky bottom-0 border-t", className].filter(Boolean).join(" "),
@@ -3246,53 +3314,53 @@ function StickyBar({ children, position = "top", className = "", style }) {
3246
3314
  }
3247
3315
 
3248
3316
  // src/components/forms/Combobox.tsx
3249
- import { jsx as jsx105, jsxs as jsxs80 } from "react/jsx-runtime";
3317
+ import { jsx as jsx106, jsxs as jsxs80 } from "react/jsx-runtime";
3250
3318
  function Combobox({ options, placeholder = "Select option", invalid = false, className = "", ...props }) {
3251
3319
  return /* @__PURE__ */ jsxs80("select", { ...props, className: ["input-field appearance-none bg-[var(--tapiz-bg-surface)]", invalid ? "border-warn focus:border-warn" : "", className].filter(Boolean).join(" "), children: [
3252
- /* @__PURE__ */ jsx105("option", { value: "", children: placeholder }),
3253
- options.map((option) => /* @__PURE__ */ jsx105("option", { value: option.value, children: String(option.label) }, option.value))
3320
+ /* @__PURE__ */ jsx106("option", { value: "", children: placeholder }),
3321
+ options.map((option) => /* @__PURE__ */ jsx106("option", { value: option.value, children: String(option.label) }, option.value))
3254
3322
  ] });
3255
3323
  }
3256
3324
 
3257
3325
  // src/components/forms/DateRangePicker.tsx
3258
- import { jsx as jsx106, jsxs as jsxs81 } from "react/jsx-runtime";
3326
+ import { jsx as jsx107, jsxs as jsxs81 } from "react/jsx-runtime";
3259
3327
  function DateRangePicker({ startLabel = "From", endLabel = "To", startProps, endProps, className = "" }) {
3260
3328
  return /* @__PURE__ */ jsxs81("div", { className: ["grid gap-3 md:grid-cols-2", className].filter(Boolean).join(" "), children: [
3261
3329
  /* @__PURE__ */ jsxs81("label", { className: "flex flex-col gap-1.5 text-sm text-[var(--tapiz-text-muted)]", children: [
3262
- /* @__PURE__ */ jsx106("span", { children: startLabel }),
3263
- /* @__PURE__ */ jsx106("input", { type: "date", ...startProps, className: ["input-field", startProps?.className || ""].join(" ") })
3330
+ /* @__PURE__ */ jsx107("span", { children: startLabel }),
3331
+ /* @__PURE__ */ jsx107("input", { type: "date", ...startProps, className: ["input-field", startProps?.className || ""].join(" ") })
3264
3332
  ] }),
3265
3333
  /* @__PURE__ */ jsxs81("label", { className: "flex flex-col gap-1.5 text-sm text-[var(--tapiz-text-muted)]", children: [
3266
- /* @__PURE__ */ jsx106("span", { children: endLabel }),
3267
- /* @__PURE__ */ jsx106("input", { type: "date", ...endProps, className: ["input-field", endProps?.className || ""].join(" ") })
3334
+ /* @__PURE__ */ jsx107("span", { children: endLabel }),
3335
+ /* @__PURE__ */ jsx107("input", { type: "date", ...endProps, className: ["input-field", endProps?.className || ""].join(" ") })
3268
3336
  ] })
3269
3337
  ] });
3270
3338
  }
3271
3339
 
3272
3340
  // src/components/forms/ColorSwatchPicker.tsx
3273
- import { jsx as jsx107, jsxs as jsxs82 } from "react/jsx-runtime";
3341
+ import { jsx as jsx108, jsxs as jsxs82 } from "react/jsx-runtime";
3274
3342
  function ColorSwatchPicker({ options, value, onChange, className = "" }) {
3275
- return /* @__PURE__ */ jsx107("div", { className: ["flex flex-wrap gap-2", className].filter(Boolean).join(" "), children: options.map((option) => {
3343
+ return /* @__PURE__ */ jsx108("div", { className: ["flex flex-wrap gap-2", className].filter(Boolean).join(" "), children: options.map((option) => {
3276
3344
  const selected = option.value === value;
3277
3345
  return /* @__PURE__ */ jsxs82("button", { type: "button", "aria-pressed": selected, onClick: () => onChange?.(option.value), className: ["flex items-center gap-2 border px-3 py-2 text-sm transition", selected ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)]" : "border-[var(--tapiz-border-subtle)] hover:border-[var(--tapiz-border-strong)]"].join(" "), children: [
3278
- /* @__PURE__ */ jsx107("span", { className: "h-4 w-4 border border-[var(--tapiz-border-strong)]", style: { background: option.color } }),
3279
- /* @__PURE__ */ jsx107("span", { children: option.label })
3346
+ /* @__PURE__ */ jsx108("span", { className: "h-4 w-4 border border-[var(--tapiz-border-strong)]", style: { background: option.color } }),
3347
+ /* @__PURE__ */ jsx108("span", { children: option.label })
3280
3348
  ] }, option.value);
3281
3349
  }) });
3282
3350
  }
3283
3351
 
3284
3352
  // src/components/forms/RatingInput.tsx
3285
- import { jsx as jsx108 } from "react/jsx-runtime";
3353
+ import { jsx as jsx109 } from "react/jsx-runtime";
3286
3354
  function RatingInput({ value = 0, max = 5, icon = "\u2605", onChange, label = "Rating", className = "" }) {
3287
- return /* @__PURE__ */ jsx108("div", { className: ["inline-flex items-center gap-1", className].filter(Boolean).join(" "), role: "radiogroup", "aria-label": label, children: Array.from({ length: max }, (_, index) => {
3355
+ return /* @__PURE__ */ jsx109("div", { className: ["inline-flex items-center gap-1", className].filter(Boolean).join(" "), role: "radiogroup", "aria-label": label, children: Array.from({ length: max }, (_, index) => {
3288
3356
  const score = index + 1;
3289
3357
  const active = score <= value;
3290
- return /* @__PURE__ */ jsx108("button", { type: "button", role: "radio", "aria-checked": active, onClick: () => onChange?.(score), className: ["grid h-9 w-9 place-items-center border text-base transition", active ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-accent)]" : "border-[var(--tapiz-border-subtle)] text-[var(--tapiz-text-muted)] hover:border-[var(--tapiz-border-strong)]"].join(" "), children: icon }, score);
3358
+ return /* @__PURE__ */ jsx109("button", { type: "button", role: "radio", "aria-checked": active, onClick: () => onChange?.(score), className: ["grid h-9 w-9 place-items-center border text-base transition", active ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-accent)]" : "border-[var(--tapiz-border-subtle)] text-[var(--tapiz-text-muted)] hover:border-[var(--tapiz-border-strong)]"].join(" "), children: icon }, score);
3291
3359
  }) });
3292
3360
  }
3293
3361
 
3294
3362
  // src/components/data-display/ScoreRing.tsx
3295
- import { jsx as jsx109, jsxs as jsxs83 } from "react/jsx-runtime";
3363
+ import { jsx as jsx110, jsxs as jsxs83 } from "react/jsx-runtime";
3296
3364
  function ScoreRing({ value, max = 100, label, size = 112, className = "" }) {
3297
3365
  const normalized = Math.max(0, Math.min(1, value / max));
3298
3366
  const radius = 42;
@@ -3300,131 +3368,131 @@ function ScoreRing({ value, max = 100, label, size = 112, className = "" }) {
3300
3368
  const dash = circumference * normalized;
3301
3369
  return /* @__PURE__ */ jsxs83("div", { className: ["inline-grid place-items-center", className].filter(Boolean).join(" "), style: { width: size, height: size }, children: [
3302
3370
  /* @__PURE__ */ jsxs83("svg", { viewBox: "0 0 100 100", className: "h-full w-full -rotate-90", children: [
3303
- /* @__PURE__ */ jsx109("circle", { cx: "50", cy: "50", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
3304
- /* @__PURE__ */ jsx109("circle", { cx: "50", cy: "50", r: radius, fill: "none", stroke: "var(--tapiz-accent)", strokeWidth: "10", strokeLinecap: "square", strokeDasharray: `${dash} ${circumference - dash}` })
3371
+ /* @__PURE__ */ jsx110("circle", { cx: "50", cy: "50", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
3372
+ /* @__PURE__ */ jsx110("circle", { cx: "50", cy: "50", r: radius, fill: "none", stroke: "var(--tapiz-accent)", strokeWidth: "10", strokeLinecap: "square", strokeDasharray: `${dash} ${circumference - dash}` })
3305
3373
  ] }),
3306
3374
  /* @__PURE__ */ jsxs83("div", { className: "absolute text-center", children: [
3307
3375
  /* @__PURE__ */ jsxs83("div", { className: "font-display text-2xl font-semibold text-[var(--tapiz-text-primary)]", children: [
3308
3376
  Math.round(normalized * 100),
3309
3377
  "%"
3310
3378
  ] }),
3311
- label ? /* @__PURE__ */ jsx109("div", { className: "font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: label }) : null
3379
+ label ? /* @__PURE__ */ jsx110("div", { className: "font-mono text-[10px] uppercase tracking-[0.16em] text-[var(--tapiz-text-muted)]", children: label }) : null
3312
3380
  ] })
3313
3381
  ] });
3314
3382
  }
3315
3383
 
3316
3384
  // src/components/data-display/HeatmapGrid.tsx
3317
- import { jsx as jsx110 } from "react/jsx-runtime";
3385
+ import { jsx as jsx111 } from "react/jsx-runtime";
3318
3386
  function HeatmapGrid({ cells, columns = 7, max, className = "" }) {
3319
3387
  const peak = max ?? Math.max(1, ...cells.map((cell) => cell.value));
3320
- return /* @__PURE__ */ jsx110("div", { className: ["grid gap-1", className].filter(Boolean).join(" "), style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }, children: cells.map((cell, index) => {
3388
+ return /* @__PURE__ */ jsx111("div", { className: ["grid gap-1", className].filter(Boolean).join(" "), style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }, children: cells.map((cell, index) => {
3321
3389
  const opacity = 0.15 + Math.min(1, cell.value / peak) * 0.75;
3322
- return /* @__PURE__ */ jsx110("div", { title: cell.title, className: "aspect-square border border-[var(--tapiz-border-subtle)]", style: { background: `color-mix(in srgb, var(--tapiz-accent) ${Math.round(opacity * 100)}%, transparent)` }, children: cell.label ? /* @__PURE__ */ jsx110("span", { className: "sr-only", children: cell.label }) : null }, index);
3390
+ return /* @__PURE__ */ jsx111("div", { title: cell.title, className: "aspect-square border border-[var(--tapiz-border-subtle)]", style: { background: `color-mix(in srgb, var(--tapiz-accent) ${Math.round(opacity * 100)}%, transparent)` }, children: cell.label ? /* @__PURE__ */ jsx111("span", { className: "sr-only", children: cell.label }) : null }, index);
3323
3391
  }) });
3324
3392
  }
3325
3393
 
3326
3394
  // src/components/data-display/FunnelChart.tsx
3327
- import { jsx as jsx111, jsxs as jsxs84 } from "react/jsx-runtime";
3395
+ import { jsx as jsx112, jsxs as jsxs84 } from "react/jsx-runtime";
3328
3396
  function FunnelChart({ steps, className = "" }) {
3329
3397
  const max = Math.max(1, ...steps.map((step) => step.value));
3330
- return /* @__PURE__ */ jsx111("div", { className: ["space-y-3", className].filter(Boolean).join(" "), children: steps.map((step, index) => {
3398
+ return /* @__PURE__ */ jsx112("div", { className: ["space-y-3", className].filter(Boolean).join(" "), children: steps.map((step, index) => {
3331
3399
  const width = Math.max(8, step.value / max * 100);
3332
3400
  return /* @__PURE__ */ jsxs84("div", { children: [
3333
3401
  /* @__PURE__ */ jsxs84("div", { className: "mb-1 flex items-center justify-between gap-3 text-sm", children: [
3334
- /* @__PURE__ */ jsx111("span", { className: "font-medium text-[var(--tapiz-text-primary)]", children: step.label }),
3402
+ /* @__PURE__ */ jsx112("span", { className: "font-medium text-[var(--tapiz-text-primary)]", children: step.label }),
3335
3403
  /* @__PURE__ */ jsxs84("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: [
3336
3404
  step.value,
3337
3405
  step.meta ? ` \xB7 ${String(step.meta)}` : ""
3338
3406
  ] })
3339
3407
  ] }),
3340
- /* @__PURE__ */ jsx111("div", { className: "h-9 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx111("div", { className: "h-full border-r border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)]", style: { width: `${width}%` } }) })
3408
+ /* @__PURE__ */ jsx112("div", { className: "h-9 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx112("div", { className: "h-full border-r border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)]", style: { width: `${width}%` } }) })
3341
3409
  ] }, index);
3342
3410
  }) });
3343
3411
  }
3344
3412
 
3345
3413
  // src/components/data-display/ComparisonMeter.tsx
3346
- import { jsx as jsx112, jsxs as jsxs85 } from "react/jsx-runtime";
3414
+ import { jsx as jsx113, jsxs as jsxs85 } from "react/jsx-runtime";
3347
3415
  function ComparisonMeter({ leftLabel, rightLabel, value, className = "" }) {
3348
3416
  const clamped = Math.max(0, Math.min(100, value));
3349
3417
  return /* @__PURE__ */ jsxs85("div", { className, children: [
3350
3418
  /* @__PURE__ */ jsxs85("div", { className: "mb-2 flex justify-between gap-3 text-sm text-[var(--tapiz-text-muted)]", children: [
3351
- /* @__PURE__ */ jsx112("span", { children: leftLabel }),
3352
- /* @__PURE__ */ jsx112("span", { children: rightLabel })
3419
+ /* @__PURE__ */ jsx113("span", { children: leftLabel }),
3420
+ /* @__PURE__ */ jsx113("span", { children: rightLabel })
3353
3421
  ] }),
3354
3422
  /* @__PURE__ */ jsxs85("div", { className: "relative h-3 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]", children: [
3355
- /* @__PURE__ */ jsx112("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${clamped}%` } }),
3356
- /* @__PURE__ */ jsx112("div", { className: "absolute top-[-6px] h-6 w-px bg-[var(--tapiz-border-strong)]", style: { left: `${clamped}%` } })
3423
+ /* @__PURE__ */ jsx113("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${clamped}%` } }),
3424
+ /* @__PURE__ */ jsx113("div", { className: "absolute top-[-6px] h-6 w-px bg-[var(--tapiz-border-strong)]", style: { left: `${clamped}%` } })
3357
3425
  ] })
3358
3426
  ] });
3359
3427
  }
3360
3428
 
3361
3429
  // src/components/framework/ActivityFeed.tsx
3362
- import { jsx as jsx113, jsxs as jsxs86 } from "react/jsx-runtime";
3430
+ import { jsx as jsx114, jsxs as jsxs86 } from "react/jsx-runtime";
3363
3431
  function ActivityFeed({ items, className = "" }) {
3364
- return /* @__PURE__ */ jsx113("div", { className: ["divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)]", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs86("div", { className: "flex gap-3 p-4", children: [
3365
- /* @__PURE__ */ jsx113(Avatar, { name: item.actor, src: item.avatarUrl, size: "sm" }),
3432
+ return /* @__PURE__ */ jsx114("div", { className: ["divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)]", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs86("div", { className: "flex gap-3 p-4", children: [
3433
+ /* @__PURE__ */ jsx114(Avatar, { name: item.actor, src: item.avatarUrl, size: "sm" }),
3366
3434
  /* @__PURE__ */ jsxs86("div", { className: "min-w-0 flex-1", children: [
3367
3435
  /* @__PURE__ */ jsxs86("p", { className: "text-sm text-[var(--tapiz-text-primary)]", children: [
3368
- /* @__PURE__ */ jsx113("strong", { children: item.actor }),
3436
+ /* @__PURE__ */ jsx114("strong", { children: item.actor }),
3369
3437
  " ",
3370
3438
  item.action
3371
3439
  ] }),
3372
- item.meta ? /* @__PURE__ */ jsx113("div", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3440
+ item.meta ? /* @__PURE__ */ jsx114("div", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3373
3441
  ] }),
3374
- item.time ? /* @__PURE__ */ jsx113("div", { className: "font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3442
+ item.time ? /* @__PURE__ */ jsx114("div", { className: "font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3375
3443
  ] }, index)) });
3376
3444
  }
3377
3445
 
3378
3446
  // src/components/framework/InboxList.tsx
3379
- import { jsx as jsx114, jsxs as jsxs87 } from "react/jsx-runtime";
3447
+ import { jsx as jsx115, jsxs as jsxs87 } from "react/jsx-runtime";
3380
3448
  function InboxList({ items, className = "" }) {
3381
- return /* @__PURE__ */ jsx114("div", { className: ["divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)]", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs87("article", { className: ["p-4 transition hover:bg-[var(--tapiz-bg-surface-muted)]", item.unread ? "border-l-4 border-l-[var(--tapiz-accent)]" : ""].join(" "), children: [
3449
+ return /* @__PURE__ */ jsx115("div", { className: ["divide-y divide-[var(--tapiz-border-subtle)] border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)]", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs87("article", { className: ["p-4 transition hover:bg-[var(--tapiz-bg-surface-muted)]", item.unread ? "border-l-4 border-l-[var(--tapiz-accent)]" : ""].join(" "), children: [
3382
3450
  /* @__PURE__ */ jsxs87("div", { className: "flex items-start justify-between gap-3", children: [
3383
3451
  /* @__PURE__ */ jsxs87("div", { className: "min-w-0", children: [
3384
- /* @__PURE__ */ jsx114("h3", { className: "truncate text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3385
- item.sender ? /* @__PURE__ */ jsx114("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.sender }) : null
3452
+ /* @__PURE__ */ jsx115("h3", { className: "truncate text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3453
+ item.sender ? /* @__PURE__ */ jsx115("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: item.sender }) : null
3386
3454
  ] }),
3387
3455
  /* @__PURE__ */ jsxs87("div", { className: "flex shrink-0 items-center gap-2", children: [
3388
- item.tag ? /* @__PURE__ */ jsx114(Badge, { children: item.tag }) : null,
3389
- item.time ? /* @__PURE__ */ jsx114("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3456
+ item.tag ? /* @__PURE__ */ jsx115(Badge, { children: item.tag }) : null,
3457
+ item.time ? /* @__PURE__ */ jsx115("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.time }) : null
3390
3458
  ] })
3391
3459
  ] }),
3392
- item.snippet ? /* @__PURE__ */ jsx114("p", { className: "mt-2 line-clamp-2 text-sm text-[var(--tapiz-text-muted)]", children: item.snippet }) : null
3460
+ item.snippet ? /* @__PURE__ */ jsx115("p", { className: "mt-2 line-clamp-2 text-sm text-[var(--tapiz-text-muted)]", children: item.snippet }) : null
3393
3461
  ] }, index)) });
3394
3462
  }
3395
3463
 
3396
3464
  // src/components/framework/ApprovalQueue.tsx
3397
- import { jsx as jsx115, jsxs as jsxs88 } from "react/jsx-runtime";
3465
+ import { jsx as jsx116, jsxs as jsxs88 } from "react/jsx-runtime";
3398
3466
  function ApprovalQueue({ items, onApprove, onReject, className = "" }) {
3399
- return /* @__PURE__ */ jsx115("div", { className: ["space-y-3", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsx115("article", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4", children: /* @__PURE__ */ jsxs88("div", { className: "flex flex-col gap-4 md:flex-row md:items-start md:justify-between", children: [
3467
+ return /* @__PURE__ */ jsx116("div", { className: ["space-y-3", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsx116("article", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4", children: /* @__PURE__ */ jsxs88("div", { className: "flex flex-col gap-4 md:flex-row md:items-start md:justify-between", children: [
3400
3468
  /* @__PURE__ */ jsxs88("div", { children: [
3401
3469
  /* @__PURE__ */ jsxs88("div", { className: "flex flex-wrap items-center gap-2", children: [
3402
- /* @__PURE__ */ jsx115("h3", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3403
- item.priority ? /* @__PURE__ */ jsx115(Badge, { variant: item.priority === "high" ? "danger" : item.priority === "medium" ? "warning" : "default", children: item.priority }) : null
3470
+ /* @__PURE__ */ jsx116("h3", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3471
+ item.priority ? /* @__PURE__ */ jsx116(Badge, { variant: item.priority === "high" ? "danger" : item.priority === "medium" ? "warning" : "default", children: item.priority }) : null
3404
3472
  ] }),
3405
3473
  item.requester ? /* @__PURE__ */ jsxs88("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: [
3406
3474
  "Requested by ",
3407
3475
  item.requester
3408
3476
  ] }) : null,
3409
- item.description ? /* @__PURE__ */ jsx115("p", { className: "mt-2 text-sm text-[var(--tapiz-text-muted)]", children: item.description }) : null
3477
+ item.description ? /* @__PURE__ */ jsx116("p", { className: "mt-2 text-sm text-[var(--tapiz-text-muted)]", children: item.description }) : null
3410
3478
  ] }),
3411
3479
  /* @__PURE__ */ jsxs88("div", { className: "flex gap-2", children: [
3412
- /* @__PURE__ */ jsx115(Button, { size: "sm", variant: "secondary", onClick: () => onReject?.(index), children: "Reject" }),
3413
- /* @__PURE__ */ jsx115(Button, { size: "sm", onClick: () => onApprove?.(index), children: "Approve" })
3480
+ /* @__PURE__ */ jsx116(Button, { size: "sm", variant: "secondary", onClick: () => onReject?.(index), children: "Reject" }),
3481
+ /* @__PURE__ */ jsx116(Button, { size: "sm", onClick: () => onApprove?.(index), children: "Approve" })
3414
3482
  ] })
3415
3483
  ] }) }, index)) });
3416
3484
  }
3417
3485
 
3418
3486
  // src/components/framework/SLAStatus.tsx
3419
- import { jsx as jsx116, jsxs as jsxs89 } from "react/jsx-runtime";
3487
+ import { jsx as jsx117, jsxs as jsxs89 } from "react/jsx-runtime";
3420
3488
  function SLAStatus({ label, value, target = 95, className = "" }) {
3421
3489
  const ok = value >= target;
3422
3490
  return /* @__PURE__ */ jsxs89("div", { className: ["border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4", className].filter(Boolean).join(" "), children: [
3423
3491
  /* @__PURE__ */ jsxs89("div", { className: "flex items-center justify-between gap-3", children: [
3424
- /* @__PURE__ */ jsx116("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label }),
3425
- /* @__PURE__ */ jsx116("span", { className: ["font-mono text-xs", ok ? "text-[var(--tapiz-success)]" : "text-[var(--tapiz-warning)]"].join(" "), children: ok ? "Within SLA" : "At risk" })
3492
+ /* @__PURE__ */ jsx117("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label }),
3493
+ /* @__PURE__ */ jsx117("span", { className: ["font-mono text-xs", ok ? "text-[var(--tapiz-success)]" : "text-[var(--tapiz-warning)]"].join(" "), children: ok ? "Within SLA" : "At risk" })
3426
3494
  ] }),
3427
- /* @__PURE__ */ jsx116("div", { className: "mt-3 h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx116("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${Math.max(0, Math.min(100, value))}%` } }) }),
3495
+ /* @__PURE__ */ jsx117("div", { className: "mt-3 h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx117("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${Math.max(0, Math.min(100, value))}%` } }) }),
3428
3496
  /* @__PURE__ */ jsxs89("div", { className: "mt-2 flex justify-between font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: [
3429
3497
  /* @__PURE__ */ jsxs89("span", { children: [
3430
3498
  value,
@@ -3440,81 +3508,81 @@ function SLAStatus({ label, value, target = 95, className = "" }) {
3440
3508
  }
3441
3509
 
3442
3510
  // src/components/framework/FeatureFlagTable.tsx
3443
- import { jsx as jsx117, jsxs as jsxs90 } from "react/jsx-runtime";
3511
+ import { jsx as jsx118, jsxs as jsxs90 } from "react/jsx-runtime";
3444
3512
  function FeatureFlagTable({ flags, onToggle, className = "" }) {
3445
- return /* @__PURE__ */ jsx117("div", { className: ["overflow-hidden border border-[var(--tapiz-border-subtle)]", className].filter(Boolean).join(" "), children: flags.map((flag) => /* @__PURE__ */ jsxs90("div", { className: "grid gap-3 border-b border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4 last:border-b-0 md:grid-cols-[1fr_auto_auto] md:items-center", children: [
3513
+ return /* @__PURE__ */ jsx118("div", { className: ["overflow-hidden border border-[var(--tapiz-border-subtle)]", className].filter(Boolean).join(" "), children: flags.map((flag) => /* @__PURE__ */ jsxs90("div", { className: "grid gap-3 border-b border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4 last:border-b-0 md:grid-cols-[1fr_auto_auto] md:items-center", children: [
3446
3514
  /* @__PURE__ */ jsxs90("div", { children: [
3447
3515
  /* @__PURE__ */ jsxs90("div", { className: "flex flex-wrap items-center gap-2", children: [
3448
- /* @__PURE__ */ jsx117("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: flag.name }),
3449
- /* @__PURE__ */ jsx117(Badge, { children: flag.key })
3516
+ /* @__PURE__ */ jsx118("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: flag.name }),
3517
+ /* @__PURE__ */ jsx118(Badge, { children: flag.key })
3450
3518
  ] }),
3451
- flag.description ? /* @__PURE__ */ jsx117("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: flag.description }) : null
3519
+ flag.description ? /* @__PURE__ */ jsx118("p", { className: "mt-1 text-sm text-[var(--tapiz-text-muted)]", children: flag.description }) : null
3452
3520
  ] }),
3453
- /* @__PURE__ */ jsx117("div", { className: "text-sm text-[var(--tapiz-text-muted)]", children: flag.rollout }),
3454
- /* @__PURE__ */ jsx117(Switch, { checked: flag.enabled, onChange: (checked) => onToggle?.(flag.key, checked) })
3521
+ /* @__PURE__ */ jsx118("div", { className: "text-sm text-[var(--tapiz-text-muted)]", children: flag.rollout }),
3522
+ /* @__PURE__ */ jsx118(Switch, { checked: flag.enabled, onChange: (checked) => onToggle?.(flag.key, checked) })
3455
3523
  ] }, flag.key)) });
3456
3524
  }
3457
3525
 
3458
3526
  // src/components/framework/PlanUsage.tsx
3459
- import { jsx as jsx118, jsxs as jsxs91 } from "react/jsx-runtime";
3527
+ import { jsx as jsx119, jsxs as jsxs91 } from "react/jsx-runtime";
3460
3528
  function PlanUsage({ title = "Plan usage", items, className = "" }) {
3461
3529
  return /* @__PURE__ */ jsxs91("section", { className: ["border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5", className].filter(Boolean).join(" "), children: [
3462
- /* @__PURE__ */ jsx118("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3463
- /* @__PURE__ */ jsx118("div", { className: "mt-4 space-y-4", children: items.map((item, index) => {
3530
+ /* @__PURE__ */ jsx119("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3531
+ /* @__PURE__ */ jsx119("div", { className: "mt-4 space-y-4", children: items.map((item, index) => {
3464
3532
  const pct = item.limit ? Math.min(100, item.used / item.limit * 100) : 0;
3465
3533
  return /* @__PURE__ */ jsxs91("div", { children: [
3466
3534
  /* @__PURE__ */ jsxs91("div", { className: "mb-1 flex justify-between text-sm", children: [
3467
- /* @__PURE__ */ jsx118("span", { className: "text-[var(--tapiz-text-primary)]", children: item.label }),
3535
+ /* @__PURE__ */ jsx119("span", { className: "text-[var(--tapiz-text-primary)]", children: item.label }),
3468
3536
  /* @__PURE__ */ jsxs91("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: [
3469
3537
  item.used,
3470
3538
  "/",
3471
3539
  item.limit
3472
3540
  ] })
3473
3541
  ] }),
3474
- /* @__PURE__ */ jsx118("div", { className: "h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx118("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${pct}%` } }) })
3542
+ /* @__PURE__ */ jsx119("div", { className: "h-2 border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)]", children: /* @__PURE__ */ jsx119("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${pct}%` } }) })
3475
3543
  ] }, index);
3476
3544
  }) })
3477
3545
  ] });
3478
3546
  }
3479
3547
 
3480
3548
  // src/components/marketing/AnnouncementBar.tsx
3481
- import { jsx as jsx119, jsxs as jsxs92 } from "react/jsx-runtime";
3549
+ import { jsx as jsx120, jsxs as jsxs92 } from "react/jsx-runtime";
3482
3550
  function AnnouncementBar({ children, action, className = "" }) {
3483
- return /* @__PURE__ */ jsx119("div", { className: ["border-b border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] px-4 py-3 text-sm text-[var(--tapiz-text-primary)]", className].filter(Boolean).join(" "), children: /* @__PURE__ */ jsxs92("div", { className: "mx-auto flex max-w-7xl flex-wrap items-center justify-center gap-3 text-center", children: [
3551
+ return /* @__PURE__ */ jsx120("div", { className: ["border-b border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] px-4 py-3 text-sm text-[var(--tapiz-text-primary)]", className].filter(Boolean).join(" "), children: /* @__PURE__ */ jsxs92("div", { className: "mx-auto flex max-w-7xl flex-wrap items-center justify-center gap-3 text-center", children: [
3484
3552
  " ",
3485
- /* @__PURE__ */ jsx119("span", { children }),
3486
- action ? /* @__PURE__ */ jsx119("span", { children: action }) : null
3553
+ /* @__PURE__ */ jsx120("span", { children }),
3554
+ action ? /* @__PURE__ */ jsx120("span", { children: action }) : null
3487
3555
  ] }) });
3488
3556
  }
3489
3557
 
3490
3558
  // src/components/marketing/FAQSection.tsx
3491
- import { jsx as jsx120, jsxs as jsxs93 } from "react/jsx-runtime";
3559
+ import { jsx as jsx121, jsxs as jsxs93 } from "react/jsx-runtime";
3492
3560
  function FAQSection({ title = "Frequently asked questions", description, items, className = "" }) {
3493
3561
  return /* @__PURE__ */ jsxs93("section", { className, children: [
3494
3562
  /* @__PURE__ */ jsxs93("div", { className: "mb-6 max-w-2xl", children: [
3495
- /* @__PURE__ */ jsx120("div", { className: "kicker", children: "FAQ" }),
3496
- /* @__PURE__ */ jsx120("h2", { className: "mt-2 text-3xl font-semibold tracking-[-0.05em] text-[var(--tapiz-text-primary)]", children: title }),
3497
- description ? /* @__PURE__ */ jsx120("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
3563
+ /* @__PURE__ */ jsx121("div", { className: "kicker", children: "FAQ" }),
3564
+ /* @__PURE__ */ jsx121("h2", { className: "mt-2 text-3xl font-semibold tracking-[-0.05em] text-[var(--tapiz-text-primary)]", children: title }),
3565
+ description ? /* @__PURE__ */ jsx121("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null
3498
3566
  ] }),
3499
- /* @__PURE__ */ jsx120(Accordion, { items: items.map((item, index) => ({ id: `faq-${index}`, title: item.question, content: item.answer })) })
3567
+ /* @__PURE__ */ jsx121(Accordion, { items: items.map((item, index) => ({ id: `faq-${index}`, title: item.question, content: item.answer })) })
3500
3568
  ] });
3501
3569
  }
3502
3570
 
3503
3571
  // src/components/marketing/RoadmapList.tsx
3504
- import { jsx as jsx121, jsxs as jsxs94 } from "react/jsx-runtime";
3572
+ import { jsx as jsx122, jsxs as jsxs94 } from "react/jsx-runtime";
3505
3573
  function RoadmapList({ items, className = "" }) {
3506
- return /* @__PURE__ */ jsx121("div", { className: ["grid gap-3 md:grid-cols-3", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs94("article", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5", children: [
3574
+ return /* @__PURE__ */ jsx122("div", { className: ["grid gap-3 md:grid-cols-3", className].filter(Boolean).join(" "), children: items.map((item, index) => /* @__PURE__ */ jsxs94("article", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5", children: [
3507
3575
  /* @__PURE__ */ jsxs94("div", { className: "flex items-center justify-between gap-3", children: [
3508
- /* @__PURE__ */ jsx121("span", { className: "kicker", children: item.quarter ?? `0${index + 1}` }),
3509
- item.status ? /* @__PURE__ */ jsx121(Badge, { children: item.status }) : null
3576
+ /* @__PURE__ */ jsx122("span", { className: "kicker", children: item.quarter ?? `0${index + 1}` }),
3577
+ item.status ? /* @__PURE__ */ jsx122(Badge, { children: item.status }) : null
3510
3578
  ] }),
3511
- /* @__PURE__ */ jsx121("h3", { className: "mt-4 font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3512
- item.description ? /* @__PURE__ */ jsx121("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: item.description }) : null
3579
+ /* @__PURE__ */ jsx122("h3", { className: "mt-4 font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3580
+ item.description ? /* @__PURE__ */ jsx122("p", { className: "mt-2 text-sm leading-6 text-[var(--tapiz-text-muted)]", children: item.description }) : null
3513
3581
  ] }, index)) });
3514
3582
  }
3515
3583
 
3516
3584
  // src/components/feedback/InlineStatus.tsx
3517
- import { jsx as jsx122, jsxs as jsxs95 } from "react/jsx-runtime";
3585
+ import { jsx as jsx123, jsxs as jsxs95 } from "react/jsx-runtime";
3518
3586
  var toneClasses5 = {
3519
3587
  neutral: "bg-[var(--tapiz-text-muted)]",
3520
3588
  success: "bg-[var(--tapiz-success)]",
@@ -3524,7 +3592,7 @@ var toneClasses5 = {
3524
3592
  };
3525
3593
  function InlineStatus({ tone: tone2 = "neutral", children, pulse = false, className = "" }) {
3526
3594
  return /* @__PURE__ */ jsxs95("span", { className: ["inline-flex items-center gap-2 text-sm text-[var(--tapiz-text-muted)]", className].filter(Boolean).join(" "), children: [
3527
- /* @__PURE__ */ jsx122("span", { className: ["h-2 w-2 rounded-full", toneClasses5[tone2], pulse ? "animate-pulse" : ""].filter(Boolean).join(" ") }),
3595
+ /* @__PURE__ */ jsx123("span", { className: ["h-2 w-2 rounded-full", toneClasses5[tone2], pulse ? "animate-pulse" : ""].filter(Boolean).join(" ") }),
3528
3596
  children
3529
3597
  ] });
3530
3598
  }
@@ -3619,6 +3687,7 @@ export {
3619
3687
  FormulaIcon,
3620
3688
  FunnelChart,
3621
3689
  Gear,
3690
+ GitHubIcon,
3622
3691
  Globe,
3623
3692
  GooglePlayIcon,
3624
3693
  GraduationCap,
@@ -3731,6 +3800,7 @@ export {
3731
3800
  TextIcon,
3732
3801
  Textarea,
3733
3802
  TextareaCounter,
3803
+ ThemeIconButton,
3734
3804
  Timeline,
3735
3805
  Toast,
3736
3806
  ToastProvider,