@tapizlabs/ui 0.2.11 → 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,104 +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" })
575
- ] })
576
- ] }),
577
- variant === "specs" && /* @__PURE__ */ jsxs6(Fragment, { children: [
578
- /* @__PURE__ */ jsx6("rect", { x: "16", y: "12", width: "32", height: "40", rx: "4", fill: "#fff" }),
579
- /* @__PURE__ */ jsxs6("g", { fill: "#1496b3", children: [
580
- /* @__PURE__ */ jsx6("rect", { x: "21", y: "19", width: "22", height: "3.4", rx: "1.7" }),
581
- /* @__PURE__ */ jsx6("rect", { x: "21", y: "26", width: "22", height: "3.4", rx: "1.7" }),
582
- /* @__PURE__ */ jsx6("rect", { x: "21", y: "33", width: "14", height: "3.4", rx: "1.7" })
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" })
583
544
  ] }),
584
- /* @__PURE__ */ jsx6(
585
- "path",
586
- {
587
- d: "M22 43 L26 47 L34 39",
588
- stroke: "#d4ff3a",
589
- strokeWidth: "4",
590
- strokeLinecap: "round",
591
- strokeLinejoin: "round",
592
- fill: "none"
593
- }
594
- )
595
- ] })
596
- ]
597
- }
598
- );
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
+ )
624
+ ] })
625
+ ]
626
+ }
627
+ );
628
+ };
599
629
 
600
630
  // src/components/icons/FormsIcons.tsx
601
631
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
@@ -1618,8 +1648,27 @@ function InfoBanner(props) {
1618
1648
  );
1619
1649
  }
1620
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
+
1621
1670
  // src/components/shared/PageHeader.tsx
1622
- import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1671
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
1623
1672
  function PageHeader({
1624
1673
  title,
1625
1674
  subtitle,
@@ -1636,25 +1685,25 @@ function PageHeader({
1636
1685
  const resolvedActions = actions ?? action;
1637
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";
1638
1687
  return /* @__PURE__ */ jsxs23("div", { className: `page-header mb-5 flex flex-col gap-3 animate-fade-in-up ${variantClass} ${className}`.trim(), children: [
1639
- 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,
1640
1689
  /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
1641
1690
  /* @__PURE__ */ jsxs23("div", { className: "min-w-0", children: [
1642
- 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,
1643
1692
  /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2.5", children: [
1644
- icon ? /* @__PURE__ */ jsx33("span", { className: "text-[var(--tapiz-accent)]", children: icon }) : null,
1645
- /* @__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 })
1646
1695
  ] }),
1647
- description ? /* @__PURE__ */ jsx33("div", { className: "mt-2 max-w-3xl text-sm leading-6 text-[var(--tapiz-text-muted)]", children: description }) : null,
1648
- 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
1649
1698
  ] }),
1650
- 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
1651
1700
  ] }),
1652
1701
  banner ? banner : null
1653
1702
  ] });
1654
1703
  }
1655
1704
 
1656
1705
  // src/components/shared/MetricCard.tsx
1657
- import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1706
+ import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
1658
1707
  var trendClasses = {
1659
1708
  positive: "border-[var(--tapiz-success)] text-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)]",
1660
1709
  negative: "border-[var(--tapiz-danger)] text-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)]",
@@ -1674,22 +1723,22 @@ function MetricCard({
1674
1723
  return /* @__PURE__ */ jsxs24(Card, { variant, padding: "md", hover: true, className: `relative overflow-hidden ${className}`, children: [
1675
1724
  /* @__PURE__ */ jsxs24("div", { className: "flex items-start justify-between gap-4", children: [
1676
1725
  /* @__PURE__ */ jsxs24("div", { className: "min-w-0", children: [
1677
- /* @__PURE__ */ jsx34("p", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
1678
- /* @__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 })
1679
1728
  ] }),
1680
- 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
1681
1730
  ] }),
1682
1731
  description || trend ? /* @__PURE__ */ jsxs24("div", { className: "mt-4 flex flex-wrap items-center gap-2", children: [
1683
- 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,
1684
- 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
1685
1734
  ] }) : null
1686
1735
  ] });
1687
1736
  }
1688
1737
 
1689
1738
  // src/components/shared/StatGrid.tsx
1690
- import { jsx as jsx35 } from "react/jsx-runtime";
1739
+ import { jsx as jsx36 } from "react/jsx-runtime";
1691
1740
  function StatGrid({ children, className = "", minColumnWidth = "14rem" }) {
1692
- return /* @__PURE__ */ jsx35(
1741
+ return /* @__PURE__ */ jsx36(
1693
1742
  "div",
1694
1743
  {
1695
1744
  className: `grid gap-4 ${className}`,
@@ -1700,23 +1749,23 @@ function StatGrid({ children, className = "", minColumnWidth = "14rem" }) {
1700
1749
  }
1701
1750
 
1702
1751
  // src/components/shared/SectionCard.tsx
1703
- import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
1752
+ import { jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
1704
1753
  function SectionCard({ title, eyebrow, description, action, children, className = "" }) {
1705
1754
  return /* @__PURE__ */ jsxs25(Card, { variant: "surface", padding: "none", className, children: [
1706
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: [
1707
1756
  /* @__PURE__ */ jsxs25("div", { className: "min-w-0", children: [
1708
- eyebrow ? /* @__PURE__ */ jsx36("div", { className: "kicker mb-1", children: eyebrow }) : null,
1709
- title ? /* @__PURE__ */ jsx36("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
1710
- 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
1711
1760
  ] }),
1712
- action ? /* @__PURE__ */ jsx36("div", { className: "shrink-0", children: action }) : null
1761
+ action ? /* @__PURE__ */ jsx37("div", { className: "shrink-0", children: action }) : null
1713
1762
  ] }) : null,
1714
- /* @__PURE__ */ jsx36("div", { className: "p-5", children })
1763
+ /* @__PURE__ */ jsx37("div", { className: "p-5", children })
1715
1764
  ] });
1716
1765
  }
1717
1766
 
1718
1767
  // src/components/shared/SearchInput.tsx
1719
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
1768
+ import { jsx as jsx38, jsxs as jsxs26 } from "react/jsx-runtime";
1720
1769
  function SearchInput({
1721
1770
  value,
1722
1771
  onChange,
@@ -1730,8 +1779,8 @@ function SearchInput({
1730
1779
  ...props
1731
1780
  }) {
1732
1781
  return /* @__PURE__ */ jsxs26("div", { className: `relative ${wrapperClassName}`.trim(), style: wrapperStyle, children: [
1733
- /* @__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 }) }),
1734
- /* @__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(
1735
1784
  Input,
1736
1785
  {
1737
1786
  ...props,
@@ -1742,21 +1791,21 @@ function SearchInput({
1742
1791
  className: `pl-9 ${inputClassName}`.trim()
1743
1792
  }
1744
1793
  ),
1745
- clearable && value ? /* @__PURE__ */ jsx37(
1794
+ clearable && value ? /* @__PURE__ */ jsx38(
1746
1795
  "button",
1747
1796
  {
1748
1797
  type: "button",
1749
1798
  onClick: () => onChange(""),
1750
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",
1751
1800
  title: clearTitle,
1752
- children: /* @__PURE__ */ jsx37(X, { size: 14 })
1801
+ children: /* @__PURE__ */ jsx38(X, { size: 14 })
1753
1802
  }
1754
1803
  ) : null
1755
1804
  ] });
1756
1805
  }
1757
1806
 
1758
1807
  // src/components/shared/Pagination.tsx
1759
- import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
1808
+ import { jsx as jsx39, jsxs as jsxs27 } from "react/jsx-runtime";
1760
1809
  function getPageNumbers(page, totalPages) {
1761
1810
  if (totalPages <= 7) return Array.from({ length: totalPages }, (_, i) => i + 1);
1762
1811
  const pages = [1];
@@ -1781,7 +1830,7 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1781
1830
  const from = pageSize ? (page - 1) * pageSize + 1 : null;
1782
1831
  const to = pageSize && totalItems ? Math.min(page * pageSize, totalItems) : null;
1783
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: [
1784
- 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 }) }),
1785
1834
  /* @__PURE__ */ jsxs27("div", { className: "order-1 flex items-center gap-1 sm:order-2", children: [
1786
1835
  /* @__PURE__ */ jsxs27(
1787
1836
  "button",
@@ -1792,13 +1841,13 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1792
1841
  title: copy.prevTitle,
1793
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",
1794
1843
  children: [
1795
- /* @__PURE__ */ jsx38(ChevronLeft, { size: 12 }),
1796
- /* @__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 })
1797
1846
  ]
1798
1847
  }
1799
1848
  ),
1800
- /* @__PURE__ */ jsx38("div", { className: "flex items-center gap-1", children: pageNumbers.map(
1801
- (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(
1802
1851
  "button",
1803
1852
  {
1804
1853
  type: "button",
@@ -1818,8 +1867,8 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1818
1867
  title: copy.nextTitle,
1819
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",
1820
1869
  children: [
1821
- /* @__PURE__ */ jsx38("span", { className: "hidden sm:inline", children: copy.next }),
1822
- /* @__PURE__ */ jsx38(ChevronRight, { size: 12 })
1870
+ /* @__PURE__ */ jsx39("span", { className: "hidden sm:inline", children: copy.next }),
1871
+ /* @__PURE__ */ jsx39(ChevronRight, { size: 12 })
1823
1872
  ]
1824
1873
  }
1825
1874
  )
@@ -1828,13 +1877,13 @@ function Pagination({ page, totalPages, onChange, totalItems, pageSize, labels }
1828
1877
  }
1829
1878
 
1830
1879
  // src/components/shared/SectionTitle.tsx
1831
- import { jsx as jsx39 } from "react/jsx-runtime";
1880
+ import { jsx as jsx40 } from "react/jsx-runtime";
1832
1881
  function SectionTitle({ children, className = "" }) {
1833
- 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 });
1834
1883
  }
1835
1884
 
1836
1885
  // src/components/shared/StatusBadge.tsx
1837
- import { jsx as jsx40 } from "react/jsx-runtime";
1886
+ import { jsx as jsx41 } from "react/jsx-runtime";
1838
1887
  var BASE = "inline-flex items-center border px-2 py-0.5 font-mono text-[9px] font-bold uppercase tracking-[0.15em]";
1839
1888
  var variantStyles = {
1840
1889
  default: "border-[var(--tapiz-border-strong)] text-[var(--tapiz-text-secondary)] bg-[var(--tapiz-bg-surface-muted)]",
@@ -1847,13 +1896,13 @@ var variantStyles = {
1847
1896
  pending: "border-[var(--tapiz-text-muted)] text-[var(--tapiz-text-muted)] bg-transparent"
1848
1897
  };
1849
1898
  function StatusBadge({ label, variant = "default", className = "" }) {
1850
- 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 });
1851
1900
  }
1852
1901
 
1853
1902
  // src/components/shared/ActionMenu.tsx
1854
1903
  import { useEffect as useEffect2, useLayoutEffect, useRef as useRef2, useState as useState5 } from "react";
1855
1904
  import { createPortal as createPortal4 } from "react-dom";
1856
- 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";
1857
1906
  var defaultMenuStyle = {
1858
1907
  background: "var(--color-ink-200)",
1859
1908
  border: "1px solid var(--color-border-hi)",
@@ -1938,8 +1987,8 @@ function ActionMenu({
1938
1987
  };
1939
1988
  }, [open]);
1940
1989
  const menuNode = open && pos ? /* @__PURE__ */ jsxs28(Fragment2, { children: [
1941
- /* @__PURE__ */ jsx41("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
1942
- /* @__PURE__ */ jsx41(
1990
+ /* @__PURE__ */ jsx42("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
1991
+ /* @__PURE__ */ jsx42(
1943
1992
  "div",
1944
1993
  {
1945
1994
  ref: menuRef,
@@ -1957,7 +2006,7 @@ function ActionMenu({
1957
2006
  ...menuStyle
1958
2007
  },
1959
2008
  children: items.map((item, index) => /* @__PURE__ */ jsxs28("div", { children: [
1960
- 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,
1961
2010
  /* @__PURE__ */ jsxs28(
1962
2011
  "button",
1963
2012
  {
@@ -1970,8 +2019,8 @@ function ActionMenu({
1970
2019
  item.onSelect();
1971
2020
  },
1972
2021
  children: [
1973
- 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 }),
1974
- /* @__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 })
1975
2024
  ]
1976
2025
  }
1977
2026
  )
@@ -1980,13 +2029,13 @@ function ActionMenu({
1980
2029
  )
1981
2030
  ] }) : null;
1982
2031
  return /* @__PURE__ */ jsxs28("div", { ref: btnRef, className: fullWidth ? "relative w-full" : "relative inline-block max-w-full", children: [
1983
- /* @__PURE__ */ jsx41(
2032
+ /* @__PURE__ */ jsx42(
1984
2033
  Button,
1985
2034
  {
1986
2035
  size: buttonSize,
1987
2036
  variant: buttonVariant,
1988
2037
  icon,
1989
- iconRight: /* @__PURE__ */ jsx41(ChevronDown, { size: 11 }),
2038
+ iconRight: /* @__PURE__ */ jsx42(ChevronDown, { size: 11 }),
1990
2039
  onClick: () => setOpen((value) => !value),
1991
2040
  className: buttonClassName,
1992
2041
  fullWidth,
@@ -2002,7 +2051,7 @@ import { useMemo as useMemo2, useState as useState6 } from "react";
2002
2051
 
2003
2052
  // src/components/table/DataTableRow.tsx
2004
2053
  import { memo } from "react";
2005
- import { jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
2054
+ import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
2006
2055
  var ALIGN_CLASS = {
2007
2056
  left: "text-left",
2008
2057
  center: "text-center",
@@ -2016,7 +2065,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
2016
2065
  onClick: clickable ? () => onRowClick?.(row) : void 0,
2017
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" : ""}`,
2018
2067
  children: [
2019
- columns.map((column) => /* @__PURE__ */ jsx42(
2068
+ columns.map((column) => /* @__PURE__ */ jsx43(
2020
2069
  "td",
2021
2070
  {
2022
2071
  className: `${densityCellClass} text-xs text-[var(--tapiz-text-secondary)] ${ALIGN_CLASS[column.align ?? "left"]} ${column.className ?? ""}`,
@@ -2024,7 +2073,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
2024
2073
  },
2025
2074
  column.id
2026
2075
  )),
2027
- 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) })
2028
2077
  ]
2029
2078
  }
2030
2079
  );
@@ -2032,7 +2081,7 @@ function DataTableRowInner({ row, columns, onRowClick, rowActions, densityCellCl
2032
2081
  var DataTableRow = memo(DataTableRowInner);
2033
2082
 
2034
2083
  // src/components/table/DataTable.tsx
2035
- import { jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
2084
+ import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2036
2085
  var ALIGN_CLASS2 = {
2037
2086
  left: "text-left",
2038
2087
  center: "text-center",
@@ -2101,17 +2150,17 @@ function DataTable({
2101
2150
  className
2102
2151
  ].filter(Boolean).join(" ");
2103
2152
  return /* @__PURE__ */ jsxs30("div", { className: wrapperClass, children: [
2104
- 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))) }),
2105
2154
  /* @__PURE__ */ jsxs30("table", { className: tableClass, children: [
2106
- /* @__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: [
2107
2156
  columns.map((column) => {
2108
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`;
2109
2158
  if (!column.sortable || !column.sortAccessor) {
2110
- 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);
2111
2160
  }
2112
2161
  const active = serverSort ? serverSort.field === column.id : sort?.columnId === column.id;
2113
2162
  const direction = serverSort ? serverSort.dir : sort?.direction ?? "asc";
2114
- return /* @__PURE__ */ jsx43(
2163
+ return /* @__PURE__ */ jsx44(
2115
2164
  "th",
2116
2165
  {
2117
2166
  scope: "col",
@@ -2125,7 +2174,7 @@ function DataTable({
2125
2174
  className: `inline-flex items-center gap-1 select-none transition-colors hover:text-txt-1 ${active ? "text-txt-1" : ""}`,
2126
2175
  children: [
2127
2176
  column.header,
2128
- 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 }))
2129
2178
  ]
2130
2179
  }
2131
2180
  )
@@ -2133,9 +2182,9 @@ function DataTable({
2133
2182
  column.id
2134
2183
  );
2135
2184
  }),
2136
- 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" })
2137
2186
  ] }) }),
2138
- /* @__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(
2139
2188
  DataTableRow,
2140
2189
  {
2141
2190
  row,
@@ -2153,9 +2202,9 @@ function DataTable({
2153
2202
  }
2154
2203
 
2155
2204
  // src/components/marketing/MarketingShell.tsx
2156
- import { jsx as jsx44 } from "react/jsx-runtime";
2205
+ import { jsx as jsx45 } from "react/jsx-runtime";
2157
2206
  function MarketingShell({ children, className = "", grid = true, noise = true }) {
2158
- return /* @__PURE__ */ jsx44(
2207
+ return /* @__PURE__ */ jsx45(
2159
2208
  "main",
2160
2209
  {
2161
2210
  className: [
@@ -2170,93 +2219,93 @@ function MarketingShell({ children, className = "", grid = true, noise = true })
2170
2219
  }
2171
2220
 
2172
2221
  // src/components/marketing/HeroFrame.tsx
2173
- import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2222
+ import { jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
2174
2223
  function HeroFrame({ eyebrow, title, description, actions, visual, meta, className = "" }) {
2175
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: [
2176
2225
  /* @__PURE__ */ jsxs31("div", { className: "animate-fade-in-up", children: [
2177
- eyebrow ? /* @__PURE__ */ jsx45("div", { className: "kicker mb-4", children: eyebrow }) : null,
2178
- /* @__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 }),
2179
- 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,
2180
- actions ? /* @__PURE__ */ jsx45("div", { className: "mt-8 flex flex-wrap gap-3", children: actions }) : null,
2181
- 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
2182
2231
  ] }),
2183
- 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
2184
2233
  ] });
2185
2234
  }
2186
2235
 
2187
2236
  // src/components/marketing/FeatureCard.tsx
2188
- import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
2237
+ import { jsx as jsx47, jsxs as jsxs32 } from "react/jsx-runtime";
2189
2238
  function FeatureCard({ title, description, icon, eyebrow, children, className = "", variant = "surface" }) {
2190
2239
  return /* @__PURE__ */ jsxs32(Card, { variant, hover: true, className: `group ${className}`, children: [
2191
2240
  /* @__PURE__ */ jsxs32("div", { className: "flex items-start gap-4", children: [
2192
- 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,
2193
2242
  /* @__PURE__ */ jsxs32("div", { className: "min-w-0", children: [
2194
- eyebrow ? /* @__PURE__ */ jsx46("div", { className: "kicker mb-1", children: eyebrow }) : null,
2195
- /* @__PURE__ */ jsx46("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2196
- 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
2197
2246
  ] })
2198
2247
  ] }),
2199
- children ? /* @__PURE__ */ jsx46("div", { className: "mt-5", children }) : null
2248
+ children ? /* @__PURE__ */ jsx47("div", { className: "mt-5", children }) : null
2200
2249
  ] });
2201
2250
  }
2202
2251
 
2203
2252
  // src/components/marketing/FeatureGrid.tsx
2204
- import { jsx as jsx47 } from "react/jsx-runtime";
2253
+ import { jsx as jsx48 } from "react/jsx-runtime";
2205
2254
  function FeatureGrid({ children, className = "" }) {
2206
- 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 });
2207
2256
  }
2208
2257
 
2209
2258
  // src/components/marketing/CTASection.tsx
2210
- import { jsx as jsx48, jsxs as jsxs33 } from "react/jsx-runtime";
2259
+ import { jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
2211
2260
  function CTASection({ eyebrow, title, description, actions, className = "" }) {
2212
- 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: [
2213
- 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,
2214
2263
  /* @__PURE__ */ jsxs33("div", { className: "grid gap-6 lg:grid-cols-[1fr_auto] lg:items-end", children: [
2215
2264
  /* @__PURE__ */ jsxs33("div", { children: [
2216
- /* @__PURE__ */ jsx48("h2", { className: "max-w-3xl text-3xl font-semibold tracking-[-0.05em] md:text-5xl", children: title }),
2217
- 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
2218
2267
  ] }),
2219
- 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
2220
2269
  ] })
2221
2270
  ] }) });
2222
2271
  }
2223
2272
 
2224
2273
  // src/components/marketing/MockupFrame.tsx
2225
- import { jsx as jsx49, jsxs as jsxs34 } from "react/jsx-runtime";
2274
+ import { jsx as jsx50, jsxs as jsxs34 } from "react/jsx-runtime";
2226
2275
  function MockupFrame({ children, title, toolbar, className = "" }) {
2227
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: [
2228
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: [
2229
2278
  /* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-1.5", children: [
2230
- /* @__PURE__ */ jsx49("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-danger)]" }),
2231
- /* @__PURE__ */ jsx49("span", { className: "h-2.5 w-2.5 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-warning)]" }),
2232
- /* @__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)]" })
2233
2282
  ] }),
2234
- title ? /* @__PURE__ */ jsx49("div", { className: "font-mono text-[10px] uppercase tracking-widest text-[var(--tapiz-text-muted)]", children: title }) : null,
2235
- /* @__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 })
2236
2285
  ] }),
2237
- /* @__PURE__ */ jsx49("div", { className: "p-4", children })
2286
+ /* @__PURE__ */ jsx50("div", { className: "p-4", children })
2238
2287
  ] });
2239
2288
  }
2240
2289
 
2241
2290
  // src/components/marketing/ComparisonTable.tsx
2242
- import { jsx as jsx50, jsxs as jsxs35 } from "react/jsx-runtime";
2291
+ import { jsx as jsx51, jsxs as jsxs35 } from "react/jsx-runtime";
2243
2292
  function ComparisonTable({ rows, featureHeader = "Feature", includedHeader = "Tapiz", alternativeHeader = "Other", className = "" }) {
2244
- 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: [
2245
- /* @__PURE__ */ jsx50("thead", { children: /* @__PURE__ */ jsxs35("tr", { children: [
2246
- /* @__PURE__ */ jsx50("th", { className: "px-4 py-3 text-left", children: featureHeader }),
2247
- /* @__PURE__ */ jsx50("th", { className: "px-4 py-3 text-left", children: includedHeader }),
2248
- /* @__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 })
2249
2298
  ] }) }),
2250
- /* @__PURE__ */ jsx50("tbody", { children: rows.map((row, index) => /* @__PURE__ */ jsxs35("tr", { className: "border-t border-[var(--tapiz-border-subtle)]", children: [
2251
- /* @__PURE__ */ jsx50("td", { className: "px-4 py-3 font-medium text-[var(--tapiz-text-primary)]", children: row.feature }),
2252
- /* @__PURE__ */ jsx50("td", { className: "px-4 py-3 text-[var(--tapiz-text-secondary)]", children: row.included }),
2253
- /* @__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 })
2254
2303
  ] }, index)) })
2255
2304
  ] }) });
2256
2305
  }
2257
2306
 
2258
2307
  // src/components/layout/AppShell.tsx
2259
- import { jsx as jsx51, jsxs as jsxs36 } from "react/jsx-runtime";
2308
+ import { jsx as jsx52, jsxs as jsxs36 } from "react/jsx-runtime";
2260
2309
  var variantClasses4 = {
2261
2310
  default: "bg-[var(--tapiz-bg-page)]",
2262
2311
  grid: "bg-[var(--tapiz-bg-page)] tapiz-grid-bg",
@@ -2266,15 +2315,15 @@ function AppShell({ sidebar, topbar, children, aside, className = "", contentCla
2266
2315
  return /* @__PURE__ */ jsxs36("div", { className: `min-h-screen text-[var(--tapiz-text-primary)] ${variantClasses4[variant]} ${className}`, children: [
2267
2316
  topbar,
2268
2317
  /* @__PURE__ */ jsxs36("div", { className: "mx-auto flex w-full max-w-[1600px]", children: [
2269
- 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,
2270
- /* @__PURE__ */ jsx51("main", { className: `min-w-0 flex-1 px-[var(--tapiz-space-page-x)] py-6 ${contentClassName}`, children }),
2271
- 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
2272
2321
  ] })
2273
2322
  ] });
2274
2323
  }
2275
2324
 
2276
2325
  // src/components/layout/SplitPane.tsx
2277
- import { jsx as jsx52, jsxs as jsxs37 } from "react/jsx-runtime";
2326
+ import { jsx as jsx53, jsxs as jsxs37 } from "react/jsx-runtime";
2278
2327
  var ratios = {
2279
2328
  "50/50": "lg:grid-cols-2",
2280
2329
  "60/40": "lg:grid-cols-[minmax(0,3fr)_minmax(320px,2fr)]",
@@ -2282,48 +2331,48 @@ var ratios = {
2282
2331
  };
2283
2332
  function SplitPane({ primary, secondary, ratio = "60/40", reverseOnMobile = false, className = "" }) {
2284
2333
  return /* @__PURE__ */ jsxs37("div", { className: `grid gap-5 ${ratios[ratio]} ${className}`, children: [
2285
- /* @__PURE__ */ jsx52("div", { className: reverseOnMobile ? "order-2 lg:order-1" : "", children: primary }),
2286
- /* @__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 })
2287
2336
  ] });
2288
2337
  }
2289
2338
 
2290
2339
  // src/components/layout/Stack.tsx
2291
- import { jsx as jsx53 } from "react/jsx-runtime";
2340
+ import { jsx as jsx54 } from "react/jsx-runtime";
2292
2341
  var gapClasses = { xs: "gap-1", sm: "gap-2", md: "gap-4", lg: "gap-6", xl: "gap-8" };
2293
2342
  var alignClasses = { start: "items-start", center: "items-center", end: "items-end", stretch: "items-stretch" };
2294
2343
  var justifyClasses = { start: "justify-start", center: "justify-center", between: "justify-between", end: "justify-end" };
2295
2344
  function Stack({ children, gap = "md", direction = "vertical", align = "stretch", justify = "start", wrap = false, className = "" }) {
2296
- 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 });
2297
2346
  }
2298
2347
 
2299
2348
  // src/components/layout/Cluster.tsx
2300
- import { jsx as jsx54 } from "react/jsx-runtime";
2349
+ import { jsx as jsx55 } from "react/jsx-runtime";
2301
2350
  var gapClasses2 = { xs: "gap-1", sm: "gap-2", md: "gap-3", lg: "gap-5" };
2302
2351
  var alignClasses2 = { start: "items-start", center: "items-center", end: "items-end" };
2303
2352
  var justifyClasses2 = { start: "justify-start", center: "justify-center", between: "justify-between", end: "justify-end" };
2304
2353
  function Cluster({ children, gap = "sm", align = "center", justify = "start", className = "" }) {
2305
- 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 });
2306
2355
  }
2307
2356
 
2308
2357
  // src/components/navigation/Breadcrumbs.tsx
2309
- import { jsx as jsx55, jsxs as jsxs38 } from "react/jsx-runtime";
2358
+ import { jsx as jsx56, jsxs as jsxs38 } from "react/jsx-runtime";
2310
2359
  function Breadcrumbs({ items, separator = "/", className = "" }) {
2311
- 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: [
2312
- index > 0 ? /* @__PURE__ */ jsx55("span", { "aria-hidden": "true", className: "text-[var(--tapiz-text-disabled)]", children: separator }) : null,
2313
- 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 })
2314
2363
  ] }, index)) }) });
2315
2364
  }
2316
2365
 
2317
2366
  // src/components/navigation/SidebarNav.tsx
2318
- 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";
2319
2368
  function SidebarNav({ groups, header, footer, className = "" }) {
2320
2369
  return /* @__PURE__ */ jsxs39("div", { className: `flex h-full min-h-screen flex-col bg-[var(--tapiz-bg-surface)] ${className}`, children: [
2321
- header ? /* @__PURE__ */ jsx56("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-4", children: header }) : null,
2322
- /* @__PURE__ */ jsx56("nav", { className: "flex-1 space-y-6 p-3", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs39("div", { children: [
2323
- 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,
2324
- /* @__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)) })
2325
2374
  ] }, groupIndex)) }),
2326
- 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
2327
2376
  ] });
2328
2377
  }
2329
2378
  function SidebarNavLink({ item }) {
@@ -2333,28 +2382,28 @@ function SidebarNavLink({ item }) {
2333
2382
  item.disabled ? "pointer-events-none opacity-40" : ""
2334
2383
  ].filter(Boolean).join(" ");
2335
2384
  const content = /* @__PURE__ */ jsxs39(Fragment3, { children: [
2336
- item.icon ? /* @__PURE__ */ jsx56("span", { className: "grid size-5 place-items-center text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2337
- /* @__PURE__ */ jsx56("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
2338
- 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
2339
2388
  ] });
2340
- 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 });
2341
2390
  }
2342
2391
 
2343
2392
  // src/components/navigation/TopNav.tsx
2344
- import { jsx as jsx57, jsxs as jsxs40 } from "react/jsx-runtime";
2393
+ import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
2345
2394
  function TopNav({ brand, links = [], actions, className = "", sticky = true }) {
2346
- 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: [
2347
- brand ? /* @__PURE__ */ jsx57("div", { className: "shrink-0", children: brand }) : null,
2348
- /* @__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) => {
2349
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)]"}`;
2350
- 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);
2351
2400
  }) }),
2352
- 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
2353
2402
  ] }) });
2354
2403
  }
2355
2404
 
2356
2405
  // src/components/disclosure/Tabs.tsx
2357
- import { jsx as jsx58, jsxs as jsxs41 } from "react/jsx-runtime";
2406
+ import { jsx as jsx59, jsxs as jsxs41 } from "react/jsx-runtime";
2358
2407
  var variants = {
2359
2408
  line: "border-b border-[var(--tapiz-border-subtle)]",
2360
2409
  boxed: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-1",
@@ -2363,7 +2412,7 @@ var variants = {
2363
2412
  function Tabs({ items, activeId, onChange, className = "", variant = "line" }) {
2364
2413
  const active = items.find((item) => item.id === activeId) ?? items[0];
2365
2414
  return /* @__PURE__ */ jsxs41("div", { className, children: [
2366
- /* @__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) => {
2367
2416
  const selected = item.id === active?.id;
2368
2417
  return /* @__PURE__ */ jsxs41(
2369
2418
  "button",
@@ -2382,14 +2431,14 @@ function Tabs({ items, activeId, onChange, className = "", variant = "line" }) {
2382
2431
  item.id
2383
2432
  );
2384
2433
  }) }),
2385
- /* @__PURE__ */ jsx58("div", { role: "tabpanel", className: "pt-4", children: active?.content })
2434
+ /* @__PURE__ */ jsx59("div", { role: "tabpanel", className: "pt-4", children: active?.content })
2386
2435
  ] });
2387
2436
  }
2388
2437
 
2389
2438
  // src/components/disclosure/Accordion.tsx
2390
- import { jsx as jsx59, jsxs as jsxs42 } from "react/jsx-runtime";
2439
+ import { jsx as jsx60, jsxs as jsxs42 } from "react/jsx-runtime";
2391
2440
  function Accordion({ items, openIds = [], onToggle, className = "" }) {
2392
- 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) => {
2393
2442
  const open = openIds.includes(item.id);
2394
2443
  return /* @__PURE__ */ jsxs42("section", { children: [
2395
2444
  /* @__PURE__ */ jsxs42(
@@ -2401,21 +2450,21 @@ function Accordion({ items, openIds = [], onToggle, className = "" }) {
2401
2450
  onClick: () => onToggle?.(item.id),
2402
2451
  className: "flex w-full items-center justify-between gap-4 px-4 py-3 text-left disabled:opacity-40",
2403
2452
  children: [
2404
- /* @__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 }),
2405
2454
  /* @__PURE__ */ jsxs42("span", { className: "flex items-center gap-3 text-[var(--tapiz-text-muted)]", children: [
2406
2455
  item.meta,
2407
- /* @__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" : "+" })
2408
2457
  ] })
2409
2458
  ]
2410
2459
  }
2411
2460
  ),
2412
- 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
2413
2462
  ] }, item.id);
2414
2463
  }) });
2415
2464
  }
2416
2465
 
2417
2466
  // src/components/disclosure/Stepper.tsx
2418
- import { jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
2467
+ import { jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
2419
2468
  var tone = {
2420
2469
  complete: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)] text-[var(--tapiz-success)]",
2421
2470
  current: "border-[var(--tapiz-accent)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-accent)]",
@@ -2423,65 +2472,65 @@ var tone = {
2423
2472
  error: "border-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)] text-[var(--tapiz-danger)]"
2424
2473
  };
2425
2474
  function Stepper({ steps, orientation = "horizontal", className = "" }) {
2426
- 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) => {
2427
2476
  const status = step.status ?? "upcoming";
2428
2477
  return /* @__PURE__ */ jsxs43("li", { className: "flex gap-3", children: [
2429
- /* @__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 }),
2430
2479
  /* @__PURE__ */ jsxs43("span", { className: "min-w-0", children: [
2431
- /* @__PURE__ */ jsx60("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: step.label }),
2432
- 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
2433
2482
  ] })
2434
2483
  ] }, step.id);
2435
2484
  }) });
2436
2485
  }
2437
2486
 
2438
2487
  // src/components/overlays/Drawer.tsx
2439
- import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
2488
+ import { jsx as jsx62, jsxs as jsxs44 } from "react/jsx-runtime";
2440
2489
  function Drawer({ open, onClose, title, description, children, footer, side = "right", className = "" }) {
2441
2490
  if (!open) return null;
2442
2491
  return /* @__PURE__ */ jsxs44("div", { className: "fixed inset-0 z-50", children: [
2443
- /* @__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 }),
2444
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: [
2445
2494
  /* @__PURE__ */ jsxs44("header", { className: "flex items-start justify-between gap-4 border-b border-(--tapiz-border-subtle) p-5", children: [
2446
2495
  /* @__PURE__ */ jsxs44("div", { children: [
2447
- title ? /* @__PURE__ */ jsx61("h2", { className: "text-lg font-semibold text-(--tapiz-text-primary)", children: title }) : null,
2448
- 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
2449
2498
  ] }),
2450
- /* @__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" })
2451
2500
  ] }),
2452
- /* @__PURE__ */ jsx61("div", { className: "max-h-[calc(100vh-9rem)] overflow-auto p-5", children }),
2453
- 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
2454
2503
  ] })
2455
2504
  ] });
2456
2505
  }
2457
2506
 
2458
2507
  // src/components/overlays/Popover.tsx
2459
- import { jsx as jsx62, jsxs as jsxs45 } from "react/jsx-runtime";
2508
+ import { jsx as jsx63, jsxs as jsxs45 } from "react/jsx-runtime";
2460
2509
  function Popover({ trigger, children, open = false, align = "start", className = "" }) {
2461
2510
  return /* @__PURE__ */ jsxs45("div", { className: `relative inline-block ${className}`, children: [
2462
2511
  trigger,
2463
- 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
2464
2513
  ] });
2465
2514
  }
2466
2515
 
2467
2516
  // src/components/overlays/CommandMenu.tsx
2468
- import { jsx as jsx63, jsxs as jsxs46 } from "react/jsx-runtime";
2517
+ import { jsx as jsx64, jsxs as jsxs46 } from "react/jsx-runtime";
2469
2518
  function CommandMenu({ open, onClose, query = "", onQueryChange, groups, placeholder = "Search commands\u2026", empty = "No commands found." }) {
2470
2519
  if (!open) return null;
2471
2520
  const hasItems = groups.some((group) => group.items.length > 0);
2472
- 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: [
2473
- /* @__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 }) }),
2474
2523
  /* @__PURE__ */ jsxs46("div", { className: "max-h-[50vh] overflow-auto p-2", children: [
2475
- !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,
2476
2525
  groups.map((group, groupIndex) => /* @__PURE__ */ jsxs46("div", { className: "py-2", children: [
2477
- 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,
2478
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: [
2479
- 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,
2480
2529
  /* @__PURE__ */ jsxs46("span", { className: "min-w-0 flex-1", children: [
2481
- /* @__PURE__ */ jsx63("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.label }),
2482
- 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
2483
2532
  ] }),
2484
- 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
2485
2534
  ] }, item.id))
2486
2535
  ] }, groupIndex))
2487
2536
  ] })
@@ -2489,7 +2538,7 @@ function CommandMenu({ open, onClose, query = "", onQueryChange, groups, placeho
2489
2538
  }
2490
2539
 
2491
2540
  // src/components/forms/FormField.tsx
2492
- import { jsx as jsx64, jsxs as jsxs47 } from "react/jsx-runtime";
2541
+ import { jsx as jsx65, jsxs as jsxs47 } from "react/jsx-runtime";
2493
2542
  function FormField({ label, hint, error, required, htmlFor, children, className = "" }) {
2494
2543
  return /* @__PURE__ */ jsxs47("div", { className: `space-y-1.5 ${className}`, children: [
2495
2544
  label ? /* @__PURE__ */ jsxs47(FieldLabel, { htmlFor, children: [
@@ -2497,15 +2546,15 @@ function FormField({ label, hint, error, required, htmlFor, children, className
2497
2546
  required ? " *" : ""
2498
2547
  ] }) : null,
2499
2548
  children,
2500
- 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
2501
2550
  ] });
2502
2551
  }
2503
2552
 
2504
2553
  // src/components/forms/Switch.tsx
2505
- import { jsx as jsx65, jsxs as jsxs48 } from "react/jsx-runtime";
2554
+ import { jsx as jsx66, jsxs as jsxs48 } from "react/jsx-runtime";
2506
2555
  function Switch({ checked = false, onChange, disabled, label, description, className = "" }) {
2507
2556
  return /* @__PURE__ */ jsxs48("label", { className: `flex cursor-pointer items-start gap-3 ${disabled ? "cursor-not-allowed opacity-50" : ""} ${className}`, children: [
2508
- /* @__PURE__ */ jsx65(
2557
+ /* @__PURE__ */ jsx66(
2509
2558
  "button",
2510
2559
  {
2511
2560
  type: "button",
@@ -2514,22 +2563,22 @@ function Switch({ checked = false, onChange, disabled, label, description, class
2514
2563
  disabled,
2515
2564
  onClick: () => onChange?.(!checked),
2516
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)]"}`,
2517
- 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"}` })
2518
2567
  }
2519
2568
  ),
2520
2569
  label || description ? /* @__PURE__ */ jsxs48("span", { children: [
2521
- label ? /* @__PURE__ */ jsx65("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2522
- 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
2523
2572
  ] }) : null
2524
2573
  ] });
2525
2574
  }
2526
2575
 
2527
2576
  // src/components/forms/ToggleGroup.tsx
2528
- import { jsx as jsx66 } from "react/jsx-runtime";
2577
+ import { jsx as jsx67 } from "react/jsx-runtime";
2529
2578
  function ToggleGroup({ options, value, onChange, className = "", fullWidth = false }) {
2530
- 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) => {
2531
2580
  const selected = option.value === value;
2532
- return /* @__PURE__ */ jsx66(
2581
+ return /* @__PURE__ */ jsx67(
2533
2582
  "button",
2534
2583
  {
2535
2584
  type: "button",
@@ -2544,17 +2593,17 @@ function ToggleGroup({ options, value, onChange, className = "", fullWidth = fal
2544
2593
  }
2545
2594
 
2546
2595
  // src/components/forms/InputGroup.tsx
2547
- import { jsx as jsx67, jsxs as jsxs49 } from "react/jsx-runtime";
2596
+ import { jsx as jsx68, jsxs as jsxs49 } from "react/jsx-runtime";
2548
2597
  function InputGroup({ prefix, suffix, children, className = "" }) {
2549
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: [
2550
- 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,
2551
- /* @__PURE__ */ jsx67("div", { className: "min-w-0 flex-1 [&_input]:border-0 [&_input]:shadow-none [&_input]:focus:shadow-none", children }),
2552
- 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
2553
2602
  ] });
2554
2603
  }
2555
2604
 
2556
2605
  // src/components/feedback/Alert.tsx
2557
- import { jsx as jsx68, jsxs as jsxs50 } from "react/jsx-runtime";
2606
+ import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
2558
2607
  var toneClasses = {
2559
2608
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)] text-[var(--tapiz-info)]",
2560
2609
  success: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)] text-[var(--tapiz-success)]",
@@ -2564,17 +2613,17 @@ var toneClasses = {
2564
2613
  };
2565
2614
  function Alert2({ tone: tone2 = "info", title, children, icon, actions, className = "" }) {
2566
2615
  return /* @__PURE__ */ jsxs50("div", { className: `flex gap-3 border p-4 ${toneClasses[tone2]} ${className}`, children: [
2567
- 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,
2568
2617
  /* @__PURE__ */ jsxs50("div", { className: "min-w-0 flex-1", children: [
2569
- title ? /* @__PURE__ */ jsx68("div", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2570
- 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
2571
2620
  ] }),
2572
- actions ? /* @__PURE__ */ jsx68("div", { className: "shrink-0", children: actions }) : null
2621
+ actions ? /* @__PURE__ */ jsx69("div", { className: "shrink-0", children: actions }) : null
2573
2622
  ] });
2574
2623
  }
2575
2624
 
2576
2625
  // src/components/feedback/Progress.tsx
2577
- import { jsx as jsx69, jsxs as jsxs51 } from "react/jsx-runtime";
2626
+ import { jsx as jsx70, jsxs as jsxs51 } from "react/jsx-runtime";
2578
2627
  var tones = {
2579
2628
  accent: "bg-[var(--tapiz-accent)]",
2580
2629
  success: "bg-[var(--tapiz-success)]",
@@ -2585,32 +2634,32 @@ function Progress({ value, max = 100, label, showValue = false, tone: tone2 = "a
2585
2634
  const percentage = Math.max(0, Math.min(100, value / max * 100));
2586
2635
  return /* @__PURE__ */ jsxs51("div", { className, children: [
2587
2636
  label || showValue ? /* @__PURE__ */ jsxs51("div", { className: "mb-1 flex items-center justify-between gap-3 text-xs text-[var(--tapiz-text-muted)]", children: [
2588
- label ? /* @__PURE__ */ jsx69("span", { children: label }) : /* @__PURE__ */ jsx69("span", {}),
2637
+ label ? /* @__PURE__ */ jsx70("span", { children: label }) : /* @__PURE__ */ jsx70("span", {}),
2589
2638
  showValue ? /* @__PURE__ */ jsxs51("span", { className: "font-mono", children: [
2590
2639
  Math.round(percentage),
2591
2640
  "%"
2592
2641
  ] }) : null
2593
2642
  ] }) : null,
2594
- /* @__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}%` } }) })
2595
2644
  ] });
2596
2645
  }
2597
2646
 
2598
2647
  // src/components/shared/Avatar.tsx
2599
- import { jsx as jsx70 } from "react/jsx-runtime";
2648
+ import { jsx as jsx71 } from "react/jsx-runtime";
2600
2649
  var sizes = { xs: "size-6 text-[10px]", sm: "size-8 text-xs", md: "size-10 text-sm", lg: "size-14 text-base" };
2601
2650
  function Avatar({ src, name = "?", size = "md", className = "" }) {
2602
2651
  const initials = name.split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase()).join("") || "?";
2603
- 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 });
2604
2653
  }
2605
2654
 
2606
2655
  // src/components/shared/Kbd.tsx
2607
- import { jsx as jsx71 } from "react/jsx-runtime";
2656
+ import { jsx as jsx72 } from "react/jsx-runtime";
2608
2657
  function Kbd({ children, className = "" }) {
2609
- 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 });
2610
2659
  }
2611
2660
 
2612
2661
  // src/components/shared/Timeline.tsx
2613
- import { jsx as jsx72, jsxs as jsxs52 } from "react/jsx-runtime";
2662
+ import { jsx as jsx73, jsxs as jsxs52 } from "react/jsx-runtime";
2614
2663
  var tones2 = {
2615
2664
  neutral: "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] text-[var(--tapiz-text-muted)]",
2616
2665
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)] text-[var(--tapiz-info)]",
@@ -2619,53 +2668,53 @@ var tones2 = {
2619
2668
  danger: "border-[var(--tapiz-danger)] bg-[var(--tapiz-danger-soft)] text-[var(--tapiz-danger)]"
2620
2669
  };
2621
2670
  function Timeline({ items, className = "" }) {
2622
- 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: [
2623
- /* @__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" }),
2624
2673
  /* @__PURE__ */ jsxs52("span", { className: "min-w-0 flex-1 pb-2", children: [
2625
2674
  /* @__PURE__ */ jsxs52("span", { className: "flex flex-wrap items-baseline justify-between gap-2", children: [
2626
- /* @__PURE__ */ jsx72("span", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
2627
- 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
2628
2677
  ] }),
2629
- 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
2630
2679
  ] })
2631
2680
  ] }, item.id)) });
2632
2681
  }
2633
2682
 
2634
2683
  // src/components/shared/KeyValueList.tsx
2635
- import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
2684
+ import { jsx as jsx74, jsxs as jsxs53 } from "react/jsx-runtime";
2636
2685
  function KeyValueList({ items, className = "", density = "normal" }) {
2637
- 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: [
2638
- /* @__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 }),
2639
2688
  /* @__PURE__ */ jsxs53("dd", { children: [
2640
- /* @__PURE__ */ jsx73("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.value }),
2641
- 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
2642
2691
  ] })
2643
2692
  ] }, index)) });
2644
2693
  }
2645
2694
 
2646
2695
  // src/components/shared/CodeBlock.tsx
2647
- import { jsx as jsx74, jsxs as jsxs54 } from "react/jsx-runtime";
2696
+ import { jsx as jsx75, jsxs as jsxs54 } from "react/jsx-runtime";
2648
2697
  function CodeBlock({ children, language, title, actions, className = "" }) {
2649
2698
  return /* @__PURE__ */ jsxs54("figure", { className: `overflow-hidden border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface)] ${className}`, children: [
2650
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: [
2651
- /* @__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 }),
2652
2701
  actions
2653
2702
  ] }) : null,
2654
- /* @__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 }) })
2655
2704
  ] });
2656
2705
  }
2657
2706
 
2658
2707
  // src/components/marketing/LogoCloud.tsx
2659
- import { jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
2708
+ import { jsx as jsx76, jsxs as jsxs55 } from "react/jsx-runtime";
2660
2709
  function LogoCloud({ title, items, className = "" }) {
2661
- 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: [
2662
- 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,
2663
- /* @__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)) })
2664
2713
  ] }) });
2665
2714
  }
2666
2715
 
2667
2716
  // src/components/marketing/TestimonialCard.tsx
2668
- import { jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
2717
+ import { jsx as jsx77, jsxs as jsxs56 } from "react/jsx-runtime";
2669
2718
  function TestimonialCard({ quote, author, role, avatarSrc, className = "", variant = "surface" }) {
2670
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: [
2671
2720
  /* @__PURE__ */ jsxs56("blockquote", { className: "text-base leading-7 text-[var(--tapiz-text-secondary)]", children: [
@@ -2674,39 +2723,39 @@ function TestimonialCard({ quote, author, role, avatarSrc, className = "", varia
2674
2723
  "\u201D"
2675
2724
  ] }),
2676
2725
  /* @__PURE__ */ jsxs56("figcaption", { className: "mt-5 flex items-center gap-3", children: [
2677
- /* @__PURE__ */ jsx76(Avatar, { name: author, src: avatarSrc, size: "sm" }),
2726
+ /* @__PURE__ */ jsx77(Avatar, { name: author, src: avatarSrc, size: "sm" }),
2678
2727
  /* @__PURE__ */ jsxs56("span", { children: [
2679
- /* @__PURE__ */ jsx76("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: author }),
2680
- 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
2681
2730
  ] })
2682
2731
  ] })
2683
2732
  ] });
2684
2733
  }
2685
2734
 
2686
2735
  // src/components/marketing/PricingCard.tsx
2687
- import { jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
2736
+ import { jsx as jsx78, jsxs as jsxs57 } from "react/jsx-runtime";
2688
2737
  function PricingCard({ name, price, description, features = [], cta, highlighted = false, className = "" }) {
2689
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: [
2690
2739
  /* @__PURE__ */ jsxs57("div", { className: "flex-1", children: [
2691
- /* @__PURE__ */ jsx77("h3", { className: "text-lg font-semibold text-[var(--tapiz-text-primary)]", children: name }),
2692
- description ? /* @__PURE__ */ jsx77("p", { className: "mt-2 text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
2693
- /* @__PURE__ */ jsx77("div", { className: "mt-6 text-4xl font-semibold tracking-tight text-[var(--tapiz-text-primary)]", children: price }),
2694
- /* @__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: [
2695
- /* @__PURE__ */ jsx77("span", { className: "text-[var(--tapiz-success)]", children: "\u2713" }),
2696
- /* @__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 })
2697
2746
  ] }, index)) })
2698
2747
  ] }),
2699
- /* @__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" }) })
2700
2749
  ] });
2701
2750
  }
2702
2751
 
2703
2752
  // src/components/marketing/StatsBand.tsx
2704
- import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
2753
+ import { jsx as jsx79, jsxs as jsxs58 } from "react/jsx-runtime";
2705
2754
  function StatsBand({ items, className = "" }) {
2706
- 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: [
2707
- /* @__PURE__ */ jsx78("div", { className: "text-3xl font-semibold tracking-tight", children: item.value }),
2708
- /* @__PURE__ */ jsx78("div", { className: "mt-2 font-mono text-[10px] font-bold uppercase tracking-[0.18em] opacity-70", children: item.label }),
2709
- 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
2710
2759
  ] }, index)) }) });
2711
2760
  }
2712
2761
 
@@ -2745,7 +2794,7 @@ var tapizFrameworkPresets = {
2745
2794
  };
2746
2795
 
2747
2796
  // src/components/layout/Container.tsx
2748
- import { jsx as jsx79 } from "react/jsx-runtime";
2797
+ import { jsx as jsx80 } from "react/jsx-runtime";
2749
2798
  var sizeClasses2 = {
2750
2799
  sm: "max-w-3xl",
2751
2800
  md: "max-w-5xl",
@@ -2754,7 +2803,7 @@ var sizeClasses2 = {
2754
2803
  full: "max-w-none"
2755
2804
  };
2756
2805
  function Container({ children, size = "lg", padded = true, className = "", style }) {
2757
- return /* @__PURE__ */ jsx79(
2806
+ return /* @__PURE__ */ jsx80(
2758
2807
  "div",
2759
2808
  {
2760
2809
  className: ["mx-auto w-full", sizeClasses2[size], padded ? "px-[var(--tapiz-space-page-x)]" : "", className].filter(Boolean).join(" "),
@@ -2765,7 +2814,7 @@ function Container({ children, size = "lg", padded = true, className = "", style
2765
2814
  }
2766
2815
 
2767
2816
  // src/components/layout/Surface.tsx
2768
- import { jsx as jsx80 } from "react/jsx-runtime";
2817
+ import { jsx as jsx81 } from "react/jsx-runtime";
2769
2818
  var variantClasses5 = {
2770
2819
  canvas: "bg-[var(--tapiz-bg-page)] text-[var(--tapiz-text-primary)]",
2771
2820
  surface: "bg-[var(--tapiz-bg-surface)] text-[var(--tapiz-text-primary)]",
@@ -2782,7 +2831,7 @@ var paddingClasses2 = {
2782
2831
  xl: "p-8"
2783
2832
  };
2784
2833
  function Surface({ children, variant = "surface", padding = "md", bordered = true, className = "", style }) {
2785
- return /* @__PURE__ */ jsx80(
2834
+ return /* @__PURE__ */ jsx81(
2786
2835
  "section",
2787
2836
  {
2788
2837
  className: [variantClasses5[variant], paddingClasses2[padding], bordered && variant !== "brutal" ? "border border-[var(--tapiz-border-subtle)]" : "", className].filter(Boolean).join(" "),
@@ -2793,23 +2842,23 @@ function Surface({ children, variant = "surface", padding = "md", bordered = tru
2793
2842
  }
2794
2843
 
2795
2844
  // src/components/layout/Divider.tsx
2796
- import { jsx as jsx81, jsxs as jsxs59 } from "react/jsx-runtime";
2845
+ import { jsx as jsx82, jsxs as jsxs59 } from "react/jsx-runtime";
2797
2846
  function Divider({ orientation = "horizontal", label, className = "" }) {
2798
2847
  if (orientation === "vertical") {
2799
- 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" });
2800
2849
  }
2801
2850
  if (label) {
2802
2851
  return /* @__PURE__ */ jsxs59("div", { className: `flex items-center gap-3 ${className}`, children: [
2803
- /* @__PURE__ */ jsx81("div", { className: "h-px flex-1 bg-[var(--tapiz-border-subtle)]" }),
2804
- /* @__PURE__ */ jsx81("span", { className: "font-mono text-[10px] uppercase tracking-[0.18em] text-[var(--tapiz-text-muted)]", children: label }),
2805
- /* @__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)]" })
2806
2855
  ] });
2807
2856
  }
2808
- return /* @__PURE__ */ jsx81("hr", { className: `border-[var(--tapiz-border-subtle)] ${className}` });
2857
+ return /* @__PURE__ */ jsx82("hr", { className: `border-[var(--tapiz-border-subtle)] ${className}` });
2809
2858
  }
2810
2859
 
2811
2860
  // src/components/layout/ResponsiveGrid.tsx
2812
- import { jsx as jsx82 } from "react/jsx-runtime";
2861
+ import { jsx as jsx83 } from "react/jsx-runtime";
2813
2862
  var gapClasses3 = {
2814
2863
  sm: "gap-3",
2815
2864
  md: "gap-4",
@@ -2817,7 +2866,7 @@ var gapClasses3 = {
2817
2866
  xl: "gap-8"
2818
2867
  };
2819
2868
  function ResponsiveGrid({ children, min = "18rem", gap = "md", className = "", style }) {
2820
- return /* @__PURE__ */ jsx82(
2869
+ return /* @__PURE__ */ jsx83(
2821
2870
  "div",
2822
2871
  {
2823
2872
  className: `grid ${gapClasses3[gap]} ${className}`,
@@ -2828,7 +2877,7 @@ function ResponsiveGrid({ children, min = "18rem", gap = "md", className = "", s
2828
2877
  }
2829
2878
 
2830
2879
  // src/components/data-display/Sparkline.tsx
2831
- import { jsx as jsx83, jsxs as jsxs60 } from "react/jsx-runtime";
2880
+ import { jsx as jsx84, jsxs as jsxs60 } from "react/jsx-runtime";
2832
2881
  function Sparkline({ values, width = 160, height = 48, label = "Trend", className = "", style }) {
2833
2882
  const safeValues = values.length ? values : [0];
2834
2883
  const min = Math.min(...safeValues);
@@ -2841,30 +2890,30 @@ function Sparkline({ values, width = 160, height = 48, label = "Trend", classNam
2841
2890
  return `${x},${y}`;
2842
2891
  }).join(" ");
2843
2892
  return /* @__PURE__ */ jsxs60("svg", { className, style, width, height, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": label, children: [
2844
- /* @__PURE__ */ jsx83("polyline", { points, fill: "none", stroke: "var(--tapiz-accent)", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "miter" }),
2845
- /* @__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" })
2846
2895
  ] });
2847
2896
  }
2848
2897
 
2849
2898
  // src/components/data-display/BarList.tsx
2850
- import { jsx as jsx84, jsxs as jsxs61 } from "react/jsx-runtime";
2899
+ import { jsx as jsx85, jsxs as jsxs61 } from "react/jsx-runtime";
2851
2900
  function BarList({ items, max, valueFormatter = (value) => value, className = "" }) {
2852
2901
  const computedMax = max ?? Math.max(1, ...items.map((item) => item.value));
2853
- 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) => {
2854
2903
  const percent = Math.max(0, Math.min(100, item.value / computedMax * 100));
2855
2904
  return /* @__PURE__ */ jsxs61("div", { children: [
2856
2905
  /* @__PURE__ */ jsxs61("div", { className: "mb-1 flex items-center justify-between gap-3 text-sm", children: [
2857
- /* @__PURE__ */ jsx84("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: item.label }),
2858
- /* @__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) })
2859
2908
  ] }),
2860
- /* @__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}%` } }) }),
2861
- 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
2862
2911
  ] }, index);
2863
2912
  }) });
2864
2913
  }
2865
2914
 
2866
2915
  // src/components/data-display/DonutMetric.tsx
2867
- import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
2916
+ import { jsx as jsx86, jsxs as jsxs62 } from "react/jsx-runtime";
2868
2917
  function DonutMetric({ value, max = 100, label, caption, size = 112, className = "" }) {
2869
2918
  const radius = 42;
2870
2919
  const circumference = 2 * Math.PI * radius;
@@ -2872,8 +2921,8 @@ function DonutMetric({ value, max = 100, label, caption, size = 112, className =
2872
2921
  const offset = circumference * (1 - ratio);
2873
2922
  return /* @__PURE__ */ jsxs62("div", { className: `inline-flex items-center gap-4 ${className}`, children: [
2874
2923
  /* @__PURE__ */ jsxs62("svg", { width: size, height: size, viewBox: "0 0 112 112", role: "img", "aria-label": `${Math.round(ratio * 100)}%`, children: [
2875
- /* @__PURE__ */ jsx85("circle", { cx: "56", cy: "56", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
2876
- /* @__PURE__ */ jsx85(
2924
+ /* @__PURE__ */ jsx86("circle", { cx: "56", cy: "56", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
2925
+ /* @__PURE__ */ jsx86(
2877
2926
  "circle",
2878
2927
  {
2879
2928
  cx: "56",
@@ -2894,14 +2943,14 @@ function DonutMetric({ value, max = 100, label, caption, size = 112, className =
2894
2943
  ] })
2895
2944
  ] }),
2896
2945
  label || caption ? /* @__PURE__ */ jsxs62("div", { children: [
2897
- label ? /* @__PURE__ */ jsx85("div", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: label }) : null,
2898
- 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
2899
2948
  ] }) : null
2900
2949
  ] });
2901
2950
  }
2902
2951
 
2903
2952
  // src/components/data-display/FilterChip.tsx
2904
- import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
2953
+ import { jsx as jsx87, jsxs as jsxs63 } from "react/jsx-runtime";
2905
2954
  function FilterChip({ children, active = false, onRemove, className = "" }) {
2906
2955
  return /* @__PURE__ */ jsxs63(
2907
2956
  "span",
@@ -2913,56 +2962,56 @@ function FilterChip({ children, active = false, onRemove, className = "" }) {
2913
2962
  ].join(" "),
2914
2963
  children: [
2915
2964
  children,
2916
- 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
2917
2966
  ]
2918
2967
  }
2919
2968
  );
2920
2969
  }
2921
2970
 
2922
2971
  // src/components/data-display/DataToolbar.tsx
2923
- import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
2972
+ import { jsx as jsx88, jsxs as jsxs64 } from "react/jsx-runtime";
2924
2973
  function DataToolbar({ title, description, search, filters, actions, className = "" }) {
2925
2974
  return /* @__PURE__ */ jsxs64("div", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4 ${className}`, children: [
2926
2975
  /* @__PURE__ */ jsxs64("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between", children: [
2927
2976
  /* @__PURE__ */ jsxs64("div", { children: [
2928
- title ? /* @__PURE__ */ jsx87("h3", { className: "text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
2929
- 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
2930
2979
  ] }),
2931
- 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
2932
2981
  ] }),
2933
2982
  search || filters ? /* @__PURE__ */ jsxs64("div", { className: "mt-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between", children: [
2934
- search ? /* @__PURE__ */ jsx87("div", { className: "min-w-0 flex-1", children: search }) : null,
2935
- 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
2936
2985
  ] }) : null
2937
2986
  ] });
2938
2987
  }
2939
2988
 
2940
2989
  // src/components/framework/ResourceCard.tsx
2941
- 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";
2942
2991
  function ResourceCard({ title, description, eyebrow, icon, meta, status, actions, href, className = "" }) {
2943
2992
  const content = /* @__PURE__ */ jsxs65(Fragment4, { children: [
2944
2993
  /* @__PURE__ */ jsxs65("div", { className: "flex items-start justify-between gap-4", children: [
2945
2994
  /* @__PURE__ */ jsxs65("div", { className: "flex min-w-0 items-start gap-3", children: [
2946
- 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,
2947
2996
  /* @__PURE__ */ jsxs65("div", { className: "min-w-0", children: [
2948
- eyebrow ? /* @__PURE__ */ jsx88("div", { className: "kicker mb-2", children: eyebrow }) : null,
2949
- /* @__PURE__ */ jsx88("h3", { className: "truncate text-base font-semibold text-[var(--tapiz-text-primary)]", children: title }),
2950
- 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
2951
3000
  ] })
2952
3001
  ] }),
2953
- status ? /* @__PURE__ */ jsx88(Badge, { children: status }) : null
3002
+ status ? /* @__PURE__ */ jsx89(Badge, { children: status }) : null
2954
3003
  ] }),
2955
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: [
2956
- meta ? /* @__PURE__ */ jsx88("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: meta }) : /* @__PURE__ */ jsx88("span", {}),
2957
- 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
2958
3007
  ] }) : null
2959
3008
  ] });
2960
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}`;
2961
- 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 });
2962
3011
  }
2963
3012
 
2964
3013
  // src/components/framework/IntegrationCard.tsx
2965
- import { jsx as jsx89, jsxs as jsxs66 } from "react/jsx-runtime";
3014
+ import { jsx as jsx90, jsxs as jsxs66 } from "react/jsx-runtime";
2966
3015
  var statusLabel = {
2967
3016
  connected: "Connected",
2968
3017
  disconnected: "Disconnected",
@@ -2979,23 +3028,23 @@ function IntegrationCard({ name, description, logo, status = "disconnected", las
2979
3028
  return /* @__PURE__ */ jsxs66("article", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5 ${className}`, children: [
2980
3029
  /* @__PURE__ */ jsxs66("div", { className: "flex items-start justify-between gap-4", children: [
2981
3030
  /* @__PURE__ */ jsxs66("div", { className: "flex items-start gap-3", children: [
2982
- /* @__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" }) }),
2983
3032
  /* @__PURE__ */ jsxs66("div", { children: [
2984
- /* @__PURE__ */ jsx89("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: name }),
2985
- 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
2986
3035
  ] })
2987
3036
  ] }),
2988
- /* @__PURE__ */ jsx89(StatusBadge, { variant: statusVariant[status], label: statusLabel[status] })
3037
+ /* @__PURE__ */ jsx90(StatusBadge, { variant: statusVariant[status], label: statusLabel[status] })
2989
3038
  ] }),
2990
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: [
2991
- /* @__PURE__ */ jsx89("div", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: lastSync ?? "No sync yet" }),
2992
- 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
2993
3042
  ] })
2994
3043
  ] });
2995
3044
  }
2996
3045
 
2997
3046
  // src/components/framework/HealthIndicator.tsx
2998
- import { jsx as jsx90, jsxs as jsxs67 } from "react/jsx-runtime";
3047
+ import { jsx as jsx91, jsxs as jsxs67 } from "react/jsx-runtime";
2999
3048
  var toneClasses2 = {
3000
3049
  operational: "bg-[var(--tapiz-success)]",
3001
3050
  degraded: "bg-[var(--tapiz-warning)]",
@@ -3010,33 +3059,33 @@ var defaultLabel = {
3010
3059
  };
3011
3060
  function HealthIndicator({ tone: tone2 = "unknown", label, detail, className = "" }) {
3012
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: [
3013
- /* @__PURE__ */ jsx90("span", { className: `size-2.5 ${toneClasses2[tone2]}`, "aria-hidden": "true" }),
3014
- /* @__PURE__ */ jsx90("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label ?? defaultLabel[tone2] }),
3015
- 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
3016
3065
  ] });
3017
3066
  }
3018
3067
 
3019
3068
  // src/components/framework/AuditLog.tsx
3020
- import { jsx as jsx91, jsxs as jsxs68 } from "react/jsx-runtime";
3069
+ import { jsx as jsx92, jsxs as jsxs68 } from "react/jsx-runtime";
3021
3070
  function AuditLog({ items, className = "" }) {
3022
- 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: [
3023
- /* @__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" }),
3024
3073
  /* @__PURE__ */ jsxs68("div", { className: "min-w-0 flex-1", children: [
3025
3074
  /* @__PURE__ */ jsxs68("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
3026
3075
  /* @__PURE__ */ jsxs68("p", { className: "text-sm text-[var(--tapiz-text-secondary)]", children: [
3027
- /* @__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 }),
3028
3077
  " ",
3029
3078
  item.action
3030
3079
  ] }),
3031
- /* @__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 })
3032
3081
  ] }),
3033
- 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
3034
3083
  ] })
3035
3084
  ] }, index)) });
3036
3085
  }
3037
3086
 
3038
3087
  // src/components/framework/KanbanBoard.tsx
3039
- import { jsx as jsx92, jsxs as jsxs69 } from "react/jsx-runtime";
3088
+ import { jsx as jsx93, jsxs as jsxs69 } from "react/jsx-runtime";
3040
3089
  var toneClasses3 = {
3041
3090
  default: "border-[var(--tapiz-border-subtle)]",
3042
3091
  accent: "border-[var(--tapiz-accent)]",
@@ -3045,65 +3094,65 @@ var toneClasses3 = {
3045
3094
  danger: "border-[var(--tapiz-danger)]"
3046
3095
  };
3047
3096
  function KanbanBoard({ columns, className = "" }) {
3048
- 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: [
3049
3098
  /* @__PURE__ */ jsxs69("div", { className: "mb-3 flex items-start justify-between gap-3", children: [
3050
3099
  /* @__PURE__ */ jsxs69("div", { children: [
3051
- /* @__PURE__ */ jsx92("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: column.title }),
3052
- 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
3053
3102
  ] }),
3054
- /* @__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 })
3055
3104
  ] }),
3056
- /* @__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: [
3057
- /* @__PURE__ */ jsx92("h4", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3058
- item.description ? /* @__PURE__ */ jsx92("p", { className: "mt-1 text-xs leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3059
- 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
3060
3109
  ] }, item.id)) })
3061
3110
  ] }, column.id)) });
3062
3111
  }
3063
3112
 
3064
3113
  // src/components/framework/AccessMatrix.tsx
3065
- import { jsx as jsx93, jsxs as jsxs70 } from "react/jsx-runtime";
3114
+ import { jsx as jsx94, jsxs as jsxs70 } from "react/jsx-runtime";
3066
3115
  function AccessMatrix({ roles, permissions, className = "" }) {
3067
- 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: [
3068
- /* @__PURE__ */ jsx93("thead", { children: /* @__PURE__ */ jsxs70("tr", { children: [
3069
- /* @__PURE__ */ jsx93("th", { className: "px-4 py-3 text-left", children: "Permission" }),
3070
- 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))
3071
3120
  ] }) }),
3072
- /* @__PURE__ */ jsx93("tbody", { children: permissions.map((permission) => /* @__PURE__ */ jsxs70("tr", { children: [
3121
+ /* @__PURE__ */ jsx94("tbody", { children: permissions.map((permission) => /* @__PURE__ */ jsxs70("tr", { children: [
3073
3122
  /* @__PURE__ */ jsxs70("td", { className: "px-4 py-3", children: [
3074
- /* @__PURE__ */ jsx93("div", { className: "font-medium text-[var(--tapiz-text-primary)]", children: permission.label }),
3075
- 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
3076
3125
  ] }),
3077
- 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))
3078
3127
  ] }, permission.key)) })
3079
3128
  ] }) });
3080
3129
  }
3081
3130
 
3082
3131
  // src/components/framework/CalendarGrid.tsx
3083
- import { jsx as jsx94, jsxs as jsxs71 } from "react/jsx-runtime";
3132
+ import { jsx as jsx95, jsxs as jsxs71 } from "react/jsx-runtime";
3084
3133
  var defaultWeekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
3085
3134
  function CalendarGrid({ days, weekdays = defaultWeekdays, className = "" }) {
3086
3135
  return /* @__PURE__ */ jsxs71("div", { className: `border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] ${className}`, children: [
3087
- /* @__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)) }),
3088
- /* @__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: [
3089
3138
  /* @__PURE__ */ jsxs71("div", { className: "flex items-center justify-between gap-2", children: [
3090
- /* @__PURE__ */ jsx94("span", { className: "font-mono text-xs text-[var(--tapiz-text-primary)]", children: day.date }),
3091
- 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
3092
3141
  ] }),
3093
- 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
3094
3143
  ] }, index)) })
3095
3144
  ] });
3096
3145
  }
3097
3146
 
3098
3147
  // src/components/forms/Slider.tsx
3099
- import { jsx as jsx95, jsxs as jsxs72 } from "react/jsx-runtime";
3148
+ import { jsx as jsx96, jsxs as jsxs72 } from "react/jsx-runtime";
3100
3149
  function Slider({ label, valueLabel, className = "", ...props }) {
3101
3150
  return /* @__PURE__ */ jsxs72("label", { className: `block ${className}`, children: [
3102
3151
  label || valueLabel ? /* @__PURE__ */ jsxs72("span", { className: "mb-2 flex items-center justify-between gap-3 text-sm", children: [
3103
- label ? /* @__PURE__ */ jsx95("span", { className: "font-medium text-[var(--tapiz-text-secondary)]", children: label }) : /* @__PURE__ */ jsx95("span", {}),
3104
- 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
3105
3154
  ] }) : null,
3106
- /* @__PURE__ */ jsx95(
3155
+ /* @__PURE__ */ jsx96(
3107
3156
  "input",
3108
3157
  {
3109
3158
  ...props,
@@ -3115,19 +3164,19 @@ function Slider({ label, valueLabel, className = "", ...props }) {
3115
3164
  }
3116
3165
 
3117
3166
  // src/components/forms/FileDropzone.tsx
3118
- import { jsx as jsx96, jsxs as jsxs73 } from "react/jsx-runtime";
3167
+ import { jsx as jsx97, jsxs as jsxs73 } from "react/jsx-runtime";
3119
3168
  function FileDropzone({ title = "Drop files here", description, actionLabel = "Browse", className = "", ...props }) {
3120
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: [
3121
- /* @__PURE__ */ jsx96("input", { ...props, type: "file", className: "sr-only" }),
3122
- /* @__PURE__ */ jsx96("span", { className: "block text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3123
- description ? /* @__PURE__ */ jsx96("span", { className: "mt-2 block text-sm text-[var(--tapiz-text-muted)]", children: description }) : null,
3124
- /* @__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 })
3125
3174
  ] });
3126
3175
  }
3127
3176
 
3128
3177
  // src/components/forms/PasswordInput.tsx
3129
3178
  import { useState as useState7 } from "react";
3130
- import { jsx as jsx97, jsxs as jsxs74 } from "react/jsx-runtime";
3179
+ import { jsx as jsx98, jsxs as jsxs74 } from "react/jsx-runtime";
3131
3180
  function PasswordInput({
3132
3181
  revealLabel = "Show password",
3133
3182
  className = "",
@@ -3139,7 +3188,7 @@ function PasswordInput({
3139
3188
  {
3140
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}`,
3141
3190
  children: [
3142
- /* @__PURE__ */ jsx97(
3191
+ /* @__PURE__ */ jsx98(
3143
3192
  "input",
3144
3193
  {
3145
3194
  ...props,
@@ -3147,7 +3196,7 @@ function PasswordInput({
3147
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!"
3148
3197
  }
3149
3198
  ),
3150
- /* @__PURE__ */ jsx97(
3199
+ /* @__PURE__ */ jsx98(
3151
3200
  "button",
3152
3201
  {
3153
3202
  type: "button",
@@ -3156,7 +3205,7 @@ function PasswordInput({
3156
3205
  onClick: () => setVisible((v) => !v),
3157
3206
  tabIndex: -1,
3158
3207
  className: "grid place-items-center px-3 text-(--tapiz-text-muted) transition-colors hover:text-(--tapiz-text-primary)",
3159
- 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 })
3160
3209
  }
3161
3210
  )
3162
3211
  ]
@@ -3165,11 +3214,11 @@ function PasswordInput({
3165
3214
  }
3166
3215
 
3167
3216
  // src/components/forms/TextareaCounter.tsx
3168
- import { jsx as jsx98, jsxs as jsxs75 } from "react/jsx-runtime";
3217
+ import { jsx as jsx99, jsxs as jsxs75 } from "react/jsx-runtime";
3169
3218
  function TextareaCounter({ maxLength, value = "", className = "", ...props }) {
3170
3219
  const count = value.length;
3171
3220
  return /* @__PURE__ */ jsxs75("div", { className, children: [
3172
- /* @__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" }),
3173
3222
  /* @__PURE__ */ jsxs75("div", { className: "mt-1 text-right font-mono text-[11px] text-[var(--tapiz-text-muted)]", children: [
3174
3223
  count,
3175
3224
  "/",
@@ -3179,7 +3228,7 @@ function TextareaCounter({ maxLength, value = "", className = "", ...props }) {
3179
3228
  }
3180
3229
 
3181
3230
  // src/components/feedback/Callout.tsx
3182
- import { jsx as jsx99, jsxs as jsxs76 } from "react/jsx-runtime";
3231
+ import { jsx as jsx100, jsxs as jsxs76 } from "react/jsx-runtime";
3183
3232
  var toneClasses4 = {
3184
3233
  info: "border-[var(--tapiz-info)] bg-[var(--tapiz-info-soft)]",
3185
3234
  success: "border-[var(--tapiz-success)] bg-[var(--tapiz-success-soft)]",
@@ -3188,73 +3237,73 @@ var toneClasses4 = {
3188
3237
  neutral: "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]"
3189
3238
  };
3190
3239
  function Callout({ title, children, tone: tone2 = "info", icon, actions, className = "" }) {
3191
- return /* @__PURE__ */ jsx99("aside", { className: `border-l-4 p-4 ${toneClasses4[tone2]} ${className}`, children: /* @__PURE__ */ jsxs76("div", { className: "flex gap-3", children: [
3192
- 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,
3193
3242
  /* @__PURE__ */ jsxs76("div", { className: "min-w-0 flex-1", children: [
3194
- title ? /* @__PURE__ */ jsx99("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }) : null,
3195
- children ? /* @__PURE__ */ jsx99("div", { className: "mt-1 text-sm leading-6 text-[var(--tapiz-text-secondary)]", children }) : null,
3196
- 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
3197
3246
  ] })
3198
3247
  ] }) });
3199
3248
  }
3200
3249
 
3201
3250
  // src/components/feedback/LoadingOverlay.tsx
3202
- import { jsx as jsx100, jsxs as jsxs77 } from "react/jsx-runtime";
3251
+ import { jsx as jsx101, jsxs as jsxs77 } from "react/jsx-runtime";
3203
3252
  function LoadingOverlay({ visible = false, label = "Loading", children, className = "" }) {
3204
3253
  return /* @__PURE__ */ jsxs77("div", { className: `relative ${className}`, children: [
3205
3254
  children,
3206
- 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: [
3207
- /* @__PURE__ */ jsx100(Spinner, {}),
3208
- /* @__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 })
3209
3258
  ] }) }) : null
3210
3259
  ] });
3211
3260
  }
3212
3261
 
3213
3262
  // src/components/feedback/NotificationList.tsx
3214
- import { jsx as jsx101, jsxs as jsxs78 } from "react/jsx-runtime";
3263
+ import { jsx as jsx102, jsxs as jsxs78 } from "react/jsx-runtime";
3215
3264
  function NotificationList({ items, className = "" }) {
3216
- 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: [
3217
- /* @__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" }),
3218
3267
  /* @__PURE__ */ jsxs78("div", { className: "min-w-0 flex-1", children: [
3219
3268
  /* @__PURE__ */ jsxs78("div", { className: "flex items-start justify-between gap-3", children: [
3220
- /* @__PURE__ */ jsx101("h3", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: item.title }),
3221
- 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
3222
3271
  ] }),
3223
- item.description ? /* @__PURE__ */ jsx101("p", { className: "mt-1 text-sm leading-5 text-[var(--tapiz-text-muted)]", children: item.description }) : null,
3224
- 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
3225
3274
  ] })
3226
3275
  ] }, item.id)) });
3227
3276
  }
3228
3277
 
3229
3278
  // src/components/layout/MasonryGrid.tsx
3230
- import { jsx as jsx102 } from "react/jsx-runtime";
3279
+ import { jsx as jsx103 } from "react/jsx-runtime";
3231
3280
  var columnClasses = { 2: "md:columns-2", 3: "md:columns-2 xl:columns-3", 4: "md:columns-2 lg:columns-3 xl:columns-4" };
3232
3281
  var gapClasses4 = { sm: "gap-3", md: "gap-5", lg: "gap-8" };
3233
3282
  function MasonryGrid({ children, columns = 3, gap = "md", className = "", style }) {
3234
- 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 });
3235
3284
  }
3236
3285
 
3237
3286
  // src/components/layout/PageRail.tsx
3238
- 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";
3239
3288
  function PageRail({ title, items, actions, className = "", style }) {
3240
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: [
3241
- title ? /* @__PURE__ */ jsx103("div", { className: "kicker mb-3 px-2", children: title }) : null,
3242
- /* @__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) => {
3243
3292
  const content = /* @__PURE__ */ jsxs79(Fragment5, { children: [
3244
- /* @__PURE__ */ jsx103("span", { className: "truncate", children: item.label }),
3245
- 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
3246
3295
  ] });
3247
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(" ");
3248
- 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);
3249
3298
  }) }),
3250
- 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
3251
3300
  ] });
3252
3301
  }
3253
3302
 
3254
3303
  // src/components/layout/StickyBar.tsx
3255
- import { jsx as jsx104 } from "react/jsx-runtime";
3304
+ import { jsx as jsx105 } from "react/jsx-runtime";
3256
3305
  function StickyBar({ children, position = "top", className = "", style }) {
3257
- return /* @__PURE__ */ jsx104(
3306
+ return /* @__PURE__ */ jsx105(
3258
3307
  "div",
3259
3308
  {
3260
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(" "),
@@ -3265,53 +3314,53 @@ function StickyBar({ children, position = "top", className = "", style }) {
3265
3314
  }
3266
3315
 
3267
3316
  // src/components/forms/Combobox.tsx
3268
- import { jsx as jsx105, jsxs as jsxs80 } from "react/jsx-runtime";
3317
+ import { jsx as jsx106, jsxs as jsxs80 } from "react/jsx-runtime";
3269
3318
  function Combobox({ options, placeholder = "Select option", invalid = false, className = "", ...props }) {
3270
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: [
3271
- /* @__PURE__ */ jsx105("option", { value: "", children: placeholder }),
3272
- 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))
3273
3322
  ] });
3274
3323
  }
3275
3324
 
3276
3325
  // src/components/forms/DateRangePicker.tsx
3277
- import { jsx as jsx106, jsxs as jsxs81 } from "react/jsx-runtime";
3326
+ import { jsx as jsx107, jsxs as jsxs81 } from "react/jsx-runtime";
3278
3327
  function DateRangePicker({ startLabel = "From", endLabel = "To", startProps, endProps, className = "" }) {
3279
3328
  return /* @__PURE__ */ jsxs81("div", { className: ["grid gap-3 md:grid-cols-2", className].filter(Boolean).join(" "), children: [
3280
3329
  /* @__PURE__ */ jsxs81("label", { className: "flex flex-col gap-1.5 text-sm text-[var(--tapiz-text-muted)]", children: [
3281
- /* @__PURE__ */ jsx106("span", { children: startLabel }),
3282
- /* @__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(" ") })
3283
3332
  ] }),
3284
3333
  /* @__PURE__ */ jsxs81("label", { className: "flex flex-col gap-1.5 text-sm text-[var(--tapiz-text-muted)]", children: [
3285
- /* @__PURE__ */ jsx106("span", { children: endLabel }),
3286
- /* @__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(" ") })
3287
3336
  ] })
3288
3337
  ] });
3289
3338
  }
3290
3339
 
3291
3340
  // src/components/forms/ColorSwatchPicker.tsx
3292
- import { jsx as jsx107, jsxs as jsxs82 } from "react/jsx-runtime";
3341
+ import { jsx as jsx108, jsxs as jsxs82 } from "react/jsx-runtime";
3293
3342
  function ColorSwatchPicker({ options, value, onChange, className = "" }) {
3294
- 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) => {
3295
3344
  const selected = option.value === value;
3296
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: [
3297
- /* @__PURE__ */ jsx107("span", { className: "h-4 w-4 border border-[var(--tapiz-border-strong)]", style: { background: option.color } }),
3298
- /* @__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 })
3299
3348
  ] }, option.value);
3300
3349
  }) });
3301
3350
  }
3302
3351
 
3303
3352
  // src/components/forms/RatingInput.tsx
3304
- import { jsx as jsx108 } from "react/jsx-runtime";
3353
+ import { jsx as jsx109 } from "react/jsx-runtime";
3305
3354
  function RatingInput({ value = 0, max = 5, icon = "\u2605", onChange, label = "Rating", className = "" }) {
3306
- 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) => {
3307
3356
  const score = index + 1;
3308
3357
  const active = score <= value;
3309
- 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);
3310
3359
  }) });
3311
3360
  }
3312
3361
 
3313
3362
  // src/components/data-display/ScoreRing.tsx
3314
- import { jsx as jsx109, jsxs as jsxs83 } from "react/jsx-runtime";
3363
+ import { jsx as jsx110, jsxs as jsxs83 } from "react/jsx-runtime";
3315
3364
  function ScoreRing({ value, max = 100, label, size = 112, className = "" }) {
3316
3365
  const normalized = Math.max(0, Math.min(1, value / max));
3317
3366
  const radius = 42;
@@ -3319,131 +3368,131 @@ function ScoreRing({ value, max = 100, label, size = 112, className = "" }) {
3319
3368
  const dash = circumference * normalized;
3320
3369
  return /* @__PURE__ */ jsxs83("div", { className: ["inline-grid place-items-center", className].filter(Boolean).join(" "), style: { width: size, height: size }, children: [
3321
3370
  /* @__PURE__ */ jsxs83("svg", { viewBox: "0 0 100 100", className: "h-full w-full -rotate-90", children: [
3322
- /* @__PURE__ */ jsx109("circle", { cx: "50", cy: "50", r: radius, fill: "none", stroke: "var(--tapiz-border-subtle)", strokeWidth: "10" }),
3323
- /* @__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}` })
3324
3373
  ] }),
3325
3374
  /* @__PURE__ */ jsxs83("div", { className: "absolute text-center", children: [
3326
3375
  /* @__PURE__ */ jsxs83("div", { className: "font-display text-2xl font-semibold text-[var(--tapiz-text-primary)]", children: [
3327
3376
  Math.round(normalized * 100),
3328
3377
  "%"
3329
3378
  ] }),
3330
- 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
3331
3380
  ] })
3332
3381
  ] });
3333
3382
  }
3334
3383
 
3335
3384
  // src/components/data-display/HeatmapGrid.tsx
3336
- import { jsx as jsx110 } from "react/jsx-runtime";
3385
+ import { jsx as jsx111 } from "react/jsx-runtime";
3337
3386
  function HeatmapGrid({ cells, columns = 7, max, className = "" }) {
3338
3387
  const peak = max ?? Math.max(1, ...cells.map((cell) => cell.value));
3339
- 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) => {
3340
3389
  const opacity = 0.15 + Math.min(1, cell.value / peak) * 0.75;
3341
- 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);
3342
3391
  }) });
3343
3392
  }
3344
3393
 
3345
3394
  // src/components/data-display/FunnelChart.tsx
3346
- import { jsx as jsx111, jsxs as jsxs84 } from "react/jsx-runtime";
3395
+ import { jsx as jsx112, jsxs as jsxs84 } from "react/jsx-runtime";
3347
3396
  function FunnelChart({ steps, className = "" }) {
3348
3397
  const max = Math.max(1, ...steps.map((step) => step.value));
3349
- 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) => {
3350
3399
  const width = Math.max(8, step.value / max * 100);
3351
3400
  return /* @__PURE__ */ jsxs84("div", { children: [
3352
3401
  /* @__PURE__ */ jsxs84("div", { className: "mb-1 flex items-center justify-between gap-3 text-sm", children: [
3353
- /* @__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 }),
3354
3403
  /* @__PURE__ */ jsxs84("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: [
3355
3404
  step.value,
3356
3405
  step.meta ? ` \xB7 ${String(step.meta)}` : ""
3357
3406
  ] })
3358
3407
  ] }),
3359
- /* @__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}%` } }) })
3360
3409
  ] }, index);
3361
3410
  }) });
3362
3411
  }
3363
3412
 
3364
3413
  // src/components/data-display/ComparisonMeter.tsx
3365
- import { jsx as jsx112, jsxs as jsxs85 } from "react/jsx-runtime";
3414
+ import { jsx as jsx113, jsxs as jsxs85 } from "react/jsx-runtime";
3366
3415
  function ComparisonMeter({ leftLabel, rightLabel, value, className = "" }) {
3367
3416
  const clamped = Math.max(0, Math.min(100, value));
3368
3417
  return /* @__PURE__ */ jsxs85("div", { className, children: [
3369
3418
  /* @__PURE__ */ jsxs85("div", { className: "mb-2 flex justify-between gap-3 text-sm text-[var(--tapiz-text-muted)]", children: [
3370
- /* @__PURE__ */ jsx112("span", { children: leftLabel }),
3371
- /* @__PURE__ */ jsx112("span", { children: rightLabel })
3419
+ /* @__PURE__ */ jsx113("span", { children: leftLabel }),
3420
+ /* @__PURE__ */ jsx113("span", { children: rightLabel })
3372
3421
  ] }),
3373
3422
  /* @__PURE__ */ jsxs85("div", { className: "relative h-3 border border-[var(--tapiz-border-strong)] bg-[var(--tapiz-bg-surface-muted)]", children: [
3374
- /* @__PURE__ */ jsx112("div", { className: "h-full bg-[var(--tapiz-accent)]", style: { width: `${clamped}%` } }),
3375
- /* @__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}%` } })
3376
3425
  ] })
3377
3426
  ] });
3378
3427
  }
3379
3428
 
3380
3429
  // src/components/framework/ActivityFeed.tsx
3381
- import { jsx as jsx113, jsxs as jsxs86 } from "react/jsx-runtime";
3430
+ import { jsx as jsx114, jsxs as jsxs86 } from "react/jsx-runtime";
3382
3431
  function ActivityFeed({ items, className = "" }) {
3383
- 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: [
3384
- /* @__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" }),
3385
3434
  /* @__PURE__ */ jsxs86("div", { className: "min-w-0 flex-1", children: [
3386
3435
  /* @__PURE__ */ jsxs86("p", { className: "text-sm text-[var(--tapiz-text-primary)]", children: [
3387
- /* @__PURE__ */ jsx113("strong", { children: item.actor }),
3436
+ /* @__PURE__ */ jsx114("strong", { children: item.actor }),
3388
3437
  " ",
3389
3438
  item.action
3390
3439
  ] }),
3391
- 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
3392
3441
  ] }),
3393
- 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
3394
3443
  ] }, index)) });
3395
3444
  }
3396
3445
 
3397
3446
  // src/components/framework/InboxList.tsx
3398
- import { jsx as jsx114, jsxs as jsxs87 } from "react/jsx-runtime";
3447
+ import { jsx as jsx115, jsxs as jsxs87 } from "react/jsx-runtime";
3399
3448
  function InboxList({ items, className = "" }) {
3400
- 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: [
3401
3450
  /* @__PURE__ */ jsxs87("div", { className: "flex items-start justify-between gap-3", children: [
3402
3451
  /* @__PURE__ */ jsxs87("div", { className: "min-w-0", children: [
3403
- /* @__PURE__ */ jsx114("h3", { className: "truncate text-sm font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3404
- 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
3405
3454
  ] }),
3406
3455
  /* @__PURE__ */ jsxs87("div", { className: "flex shrink-0 items-center gap-2", children: [
3407
- item.tag ? /* @__PURE__ */ jsx114(Badge, { children: item.tag }) : null,
3408
- 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
3409
3458
  ] })
3410
3459
  ] }),
3411
- 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
3412
3461
  ] }, index)) });
3413
3462
  }
3414
3463
 
3415
3464
  // src/components/framework/ApprovalQueue.tsx
3416
- import { jsx as jsx115, jsxs as jsxs88 } from "react/jsx-runtime";
3465
+ import { jsx as jsx116, jsxs as jsxs88 } from "react/jsx-runtime";
3417
3466
  function ApprovalQueue({ items, onApprove, onReject, className = "" }) {
3418
- 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: [
3419
3468
  /* @__PURE__ */ jsxs88("div", { children: [
3420
3469
  /* @__PURE__ */ jsxs88("div", { className: "flex flex-wrap items-center gap-2", children: [
3421
- /* @__PURE__ */ jsx115("h3", { className: "font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3422
- 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
3423
3472
  ] }),
3424
3473
  item.requester ? /* @__PURE__ */ jsxs88("p", { className: "mt-1 text-xs text-[var(--tapiz-text-muted)]", children: [
3425
3474
  "Requested by ",
3426
3475
  item.requester
3427
3476
  ] }) : null,
3428
- 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
3429
3478
  ] }),
3430
3479
  /* @__PURE__ */ jsxs88("div", { className: "flex gap-2", children: [
3431
- /* @__PURE__ */ jsx115(Button, { size: "sm", variant: "secondary", onClick: () => onReject?.(index), children: "Reject" }),
3432
- /* @__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" })
3433
3482
  ] })
3434
3483
  ] }) }, index)) });
3435
3484
  }
3436
3485
 
3437
3486
  // src/components/framework/SLAStatus.tsx
3438
- import { jsx as jsx116, jsxs as jsxs89 } from "react/jsx-runtime";
3487
+ import { jsx as jsx117, jsxs as jsxs89 } from "react/jsx-runtime";
3439
3488
  function SLAStatus({ label, value, target = 95, className = "" }) {
3440
3489
  const ok = value >= target;
3441
3490
  return /* @__PURE__ */ jsxs89("div", { className: ["border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-4", className].filter(Boolean).join(" "), children: [
3442
3491
  /* @__PURE__ */ jsxs89("div", { className: "flex items-center justify-between gap-3", children: [
3443
- /* @__PURE__ */ jsx116("span", { className: "text-sm font-medium text-[var(--tapiz-text-primary)]", children: label }),
3444
- /* @__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" })
3445
3494
  ] }),
3446
- /* @__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))}%` } }) }),
3447
3496
  /* @__PURE__ */ jsxs89("div", { className: "mt-2 flex justify-between font-mono text-[10px] uppercase tracking-[0.14em] text-[var(--tapiz-text-muted)]", children: [
3448
3497
  /* @__PURE__ */ jsxs89("span", { children: [
3449
3498
  value,
@@ -3459,81 +3508,81 @@ function SLAStatus({ label, value, target = 95, className = "" }) {
3459
3508
  }
3460
3509
 
3461
3510
  // src/components/framework/FeatureFlagTable.tsx
3462
- import { jsx as jsx117, jsxs as jsxs90 } from "react/jsx-runtime";
3511
+ import { jsx as jsx118, jsxs as jsxs90 } from "react/jsx-runtime";
3463
3512
  function FeatureFlagTable({ flags, onToggle, className = "" }) {
3464
- 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: [
3465
3514
  /* @__PURE__ */ jsxs90("div", { children: [
3466
3515
  /* @__PURE__ */ jsxs90("div", { className: "flex flex-wrap items-center gap-2", children: [
3467
- /* @__PURE__ */ jsx117("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: flag.name }),
3468
- /* @__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 })
3469
3518
  ] }),
3470
- 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
3471
3520
  ] }),
3472
- /* @__PURE__ */ jsx117("div", { className: "text-sm text-[var(--tapiz-text-muted)]", children: flag.rollout }),
3473
- /* @__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) })
3474
3523
  ] }, flag.key)) });
3475
3524
  }
3476
3525
 
3477
3526
  // src/components/framework/PlanUsage.tsx
3478
- import { jsx as jsx118, jsxs as jsxs91 } from "react/jsx-runtime";
3527
+ import { jsx as jsx119, jsxs as jsxs91 } from "react/jsx-runtime";
3479
3528
  function PlanUsage({ title = "Plan usage", items, className = "" }) {
3480
3529
  return /* @__PURE__ */ jsxs91("section", { className: ["border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-5", className].filter(Boolean).join(" "), children: [
3481
- /* @__PURE__ */ jsx118("h3", { className: "text-sm font-semibold text-[var(--tapiz-text-primary)]", children: title }),
3482
- /* @__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) => {
3483
3532
  const pct = item.limit ? Math.min(100, item.used / item.limit * 100) : 0;
3484
3533
  return /* @__PURE__ */ jsxs91("div", { children: [
3485
3534
  /* @__PURE__ */ jsxs91("div", { className: "mb-1 flex justify-between text-sm", children: [
3486
- /* @__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 }),
3487
3536
  /* @__PURE__ */ jsxs91("span", { className: "font-mono text-xs text-[var(--tapiz-text-muted)]", children: [
3488
3537
  item.used,
3489
3538
  "/",
3490
3539
  item.limit
3491
3540
  ] })
3492
3541
  ] }),
3493
- /* @__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}%` } }) })
3494
3543
  ] }, index);
3495
3544
  }) })
3496
3545
  ] });
3497
3546
  }
3498
3547
 
3499
3548
  // src/components/marketing/AnnouncementBar.tsx
3500
- import { jsx as jsx119, jsxs as jsxs92 } from "react/jsx-runtime";
3549
+ import { jsx as jsx120, jsxs as jsxs92 } from "react/jsx-runtime";
3501
3550
  function AnnouncementBar({ children, action, className = "" }) {
3502
- 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: [
3503
3552
  " ",
3504
- /* @__PURE__ */ jsx119("span", { children }),
3505
- action ? /* @__PURE__ */ jsx119("span", { children: action }) : null
3553
+ /* @__PURE__ */ jsx120("span", { children }),
3554
+ action ? /* @__PURE__ */ jsx120("span", { children: action }) : null
3506
3555
  ] }) });
3507
3556
  }
3508
3557
 
3509
3558
  // src/components/marketing/FAQSection.tsx
3510
- import { jsx as jsx120, jsxs as jsxs93 } from "react/jsx-runtime";
3559
+ import { jsx as jsx121, jsxs as jsxs93 } from "react/jsx-runtime";
3511
3560
  function FAQSection({ title = "Frequently asked questions", description, items, className = "" }) {
3512
3561
  return /* @__PURE__ */ jsxs93("section", { className, children: [
3513
3562
  /* @__PURE__ */ jsxs93("div", { className: "mb-6 max-w-2xl", children: [
3514
- /* @__PURE__ */ jsx120("div", { className: "kicker", children: "FAQ" }),
3515
- /* @__PURE__ */ jsx120("h2", { className: "mt-2 text-3xl font-semibold tracking-[-0.05em] text-[var(--tapiz-text-primary)]", children: title }),
3516
- 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
3517
3566
  ] }),
3518
- /* @__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 })) })
3519
3568
  ] });
3520
3569
  }
3521
3570
 
3522
3571
  // src/components/marketing/RoadmapList.tsx
3523
- import { jsx as jsx121, jsxs as jsxs94 } from "react/jsx-runtime";
3572
+ import { jsx as jsx122, jsxs as jsxs94 } from "react/jsx-runtime";
3524
3573
  function RoadmapList({ items, className = "" }) {
3525
- 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: [
3526
3575
  /* @__PURE__ */ jsxs94("div", { className: "flex items-center justify-between gap-3", children: [
3527
- /* @__PURE__ */ jsx121("span", { className: "kicker", children: item.quarter ?? `0${index + 1}` }),
3528
- 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
3529
3578
  ] }),
3530
- /* @__PURE__ */ jsx121("h3", { className: "mt-4 font-semibold text-[var(--tapiz-text-primary)]", children: item.title }),
3531
- 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
3532
3581
  ] }, index)) });
3533
3582
  }
3534
3583
 
3535
3584
  // src/components/feedback/InlineStatus.tsx
3536
- import { jsx as jsx122, jsxs as jsxs95 } from "react/jsx-runtime";
3585
+ import { jsx as jsx123, jsxs as jsxs95 } from "react/jsx-runtime";
3537
3586
  var toneClasses5 = {
3538
3587
  neutral: "bg-[var(--tapiz-text-muted)]",
3539
3588
  success: "bg-[var(--tapiz-success)]",
@@ -3543,7 +3592,7 @@ var toneClasses5 = {
3543
3592
  };
3544
3593
  function InlineStatus({ tone: tone2 = "neutral", children, pulse = false, className = "" }) {
3545
3594
  return /* @__PURE__ */ jsxs95("span", { className: ["inline-flex items-center gap-2 text-sm text-[var(--tapiz-text-muted)]", className].filter(Boolean).join(" "), children: [
3546
- /* @__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(" ") }),
3547
3596
  children
3548
3597
  ] });
3549
3598
  }
@@ -3638,6 +3687,7 @@ export {
3638
3687
  FormulaIcon,
3639
3688
  FunnelChart,
3640
3689
  Gear,
3690
+ GitHubIcon,
3641
3691
  Globe,
3642
3692
  GooglePlayIcon,
3643
3693
  GraduationCap,
@@ -3750,6 +3800,7 @@ export {
3750
3800
  TextIcon,
3751
3801
  Textarea,
3752
3802
  TextareaCounter,
3803
+ ThemeIconButton,
3753
3804
  Timeline,
3754
3805
  Toast,
3755
3806
  ToastProvider,