@eduardoalvarez/arrecife 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -220,11 +220,11 @@ var control = {
220
220
  icon: 42
221
221
  };
222
222
  var spacing = {
223
- xs: 8,
224
- sm: 12,
225
- md: 16,
226
- lg: 26,
227
- xl: 40,
223
+ stepXs: 8,
224
+ stepSm: 12,
225
+ stepMd: 16,
226
+ stepLg: 26,
227
+ stepXl: 40,
228
228
  section: 96
229
229
  };
230
230
  var size = {
@@ -304,10 +304,11 @@ var tokens = {
304
304
  tagline,
305
305
  naming
306
306
  };
307
+ var kebab = (nombre) => nombre.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
307
308
  var escalas = Object.keys(typeScale);
308
309
  var radios = Object.keys(radius);
309
- var espacios = Object.keys(spacing);
310
- var controles = Object.keys(control).map((nombre) => `control-${nombre}`);
310
+ var espacios = Object.keys(spacing).map(kebab);
311
+ var controles = Object.keys(control).map((nombre) => `control-${kebab(nombre)}`);
311
312
  var twMerge = tailwindMerge.extendTailwindMerge({
312
313
  extend: {
313
314
  classGroups: {
@@ -324,7 +325,7 @@ var twMerge = tailwindMerge.extendTailwindMerge({
324
325
  function cn(...inputs) {
325
326
  return twMerge(clsx.clsx(inputs));
326
327
  }
327
- var alert = classVarianceAuthority.cva("w-full rounded-card border p-md font-sans text-ui", {
328
+ var alert = classVarianceAuthority.cva("w-full rounded-card border p-step-md font-sans text-ui", {
328
329
  variants: {
329
330
  variant: {
330
331
  accent: "text-text-secondary",
@@ -377,7 +378,7 @@ function Alert({
377
378
  role: tono === "error" ? "alert" : "status",
378
379
  className: cn(alert({ variant, enfasis }), className),
379
380
  ...props,
380
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm flex items-start", children: [
381
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-start", children: [
381
382
  /* @__PURE__ */ jsxRuntime.jsx(
382
383
  "span",
383
384
  {
@@ -387,7 +388,7 @@ function Alert({
387
388
  }
388
389
  ),
389
390
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
390
- title ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-xs text-text-primary font-medium", children: title }) : null,
391
+ title ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-step-xs text-text-primary font-medium", children: title }) : null,
391
392
  children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-measure", children }) : null
392
393
  ] })
393
394
  ] })
@@ -433,7 +434,7 @@ function AvatarFallback({
433
434
  );
434
435
  }
435
436
  var badge = classVarianceAuthority.cva(
436
- ["inline-flex items-center gap-xs", "rounded-chip px-xs py-0.5", "font-sans text-tag", "transition-standard"],
437
+ ["inline-flex items-center gap-step-xs", "rounded-chip px-step-xs py-0.5", "font-sans text-tag", "transition-standard"],
437
438
  {
438
439
  variants: {
439
440
  variant: {
@@ -453,8 +454,8 @@ function Badge({ className, variant, ...props }) {
453
454
  }
454
455
  var categoria = classVarianceAuthority.cva(
455
456
  [
456
- "inline-flex items-center gap-xs",
457
- "rounded-pill px-sm py-0.5",
457
+ "inline-flex items-center gap-step-xs",
458
+ "rounded-pill px-step-sm py-0.5",
458
459
  "font-mono text-chip",
459
460
  "border transition-standard"
460
461
  ],
@@ -478,12 +479,12 @@ function CategoryBadge({ className, active = false, ...props }) {
478
479
  }
479
480
  );
480
481
  }
481
- var metrica = ["inline-flex items-center gap-xs", "rounded-pill", "font-mono text-chip text-text-muted"];
482
+ var metrica = ["inline-flex items-center gap-step-xs", "rounded-pill", "font-mono text-chip text-text-muted"];
482
483
  function MetricBadge({ className, boxed = false, ...props }) {
483
484
  return /* @__PURE__ */ jsxRuntime.jsx(
484
485
  "span",
485
486
  {
486
- className: cn(metrica, boxed && "border-hairline px-sm py-0.5 border", className),
487
+ className: cn(metrica, boxed && "border-hairline px-step-sm py-0.5 border", className),
487
488
  ...props
488
489
  }
489
490
  );
@@ -593,7 +594,7 @@ var VolumeOn = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "cu
593
594
  var VolumeMuted = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z" }) });
594
595
  var button = classVarianceAuthority.cva(
595
596
  [
596
- "inline-flex cursor-pointer items-center justify-center gap-xs whitespace-nowrap select-none",
597
+ "inline-flex cursor-pointer items-center justify-center gap-step-xs whitespace-nowrap select-none",
597
598
  "rounded-control font-sans font-medium",
598
599
  "transition-standard",
599
600
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
@@ -702,8 +703,8 @@ function Calendar({
702
703
  // la raíz, y sin esto se ancla al primer ancestro posicionado —o al
703
704
  // viewport— y las flechas acaban en los bordes de la página.
704
705
  root: cn("relative", fullWidth ? "w-full" : "w-fit"),
705
- months: cn("gap-md flex flex-col sm:flex-row", fullWidth && "w-full"),
706
- month: cn("gap-sm flex flex-col", fullWidth && "min-w-0 flex-1"),
706
+ months: cn("gap-step-md flex flex-col sm:flex-row", fullWidth && "w-full"),
707
+ month: cn("gap-step-sm flex flex-col", fullWidth && "min-w-0 flex-1"),
707
708
  month_caption: "h-8 flex items-center justify-center",
708
709
  caption_label: "text-ui font-sans font-medium text-text-primary capitalize",
709
710
  nav: "absolute inset-x-0 top-0 flex items-center justify-between",
@@ -731,7 +732,7 @@ function Calendar({
731
732
  range_start: "[&_button]:bg-accent [&_button]:text-accent-on [&_button]:rounded-r-none",
732
733
  range_middle: "[&_button]:bg-surface-raised [&_button]:text-text-primary [&_button]:rounded-none",
733
734
  range_end: "[&_button]:bg-accent [&_button]:text-accent-on [&_button]:rounded-l-none",
734
- footer: "text-label font-sans text-text-secondary pt-sm",
735
+ footer: "text-label font-sans text-text-secondary pt-step-sm",
735
736
  ...classNames
736
737
  },
737
738
  components: {
@@ -821,7 +822,7 @@ function Card({ className, ...props }) {
821
822
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(SUPERFICIE_TARJETA, className), ...props });
822
823
  }
823
824
  function CardHeader({ className, ...props }) {
824
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-xs p-lg flex flex-col", className), ...props });
825
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-step-xs p-step-lg flex flex-col", className), ...props });
825
826
  }
826
827
  function CardTitle({ className, ...props }) {
827
828
  return /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", className, ...props });
@@ -830,13 +831,13 @@ function CardDescription({ className, ...props }) {
830
831
  return /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className, ...props });
831
832
  }
832
833
  function CardContent({ className, ...props }) {
833
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("px-lg pb-lg", className), ...props });
834
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("px-step-lg pb-step-lg", className), ...props });
834
835
  }
835
836
  function CardFooter({ className, ...props }) {
836
837
  return /* @__PURE__ */ jsxRuntime.jsx(
837
838
  "div",
838
839
  {
839
- className: cn("border-hairline px-lg py-md gap-sm flex items-center border-t", className),
840
+ className: cn("border-hairline px-step-lg py-step-md gap-step-sm flex items-center border-t", className),
840
841
  ...props
841
842
  }
842
843
  );
@@ -887,7 +888,7 @@ function DateField({
887
888
  "data-invalid": invalid || void 0,
888
889
  "aria-invalid": invalid || void 0,
889
890
  className: cn(
890
- "px-sm h-10 w-full",
891
+ "px-step-sm h-10 w-full",
891
892
  "rounded-control border-border bg-surface border",
892
893
  "font-mono text-ui text-text-primary",
893
894
  "transition-standard",
@@ -930,7 +931,7 @@ function DialogContent({
930
931
  {
931
932
  className: cn(
932
933
  "fixed top-1/2 left-1/2 z-50 w-full max-w-content -translate-x-1/2 -translate-y-1/2",
933
- "gap-md p-lg flex flex-col",
934
+ "gap-step-md p-step-lg flex flex-col",
934
935
  "rounded-panel border-border bg-surface shadow-standard border",
935
936
  "text-text-primary font-sans",
936
937
  className
@@ -957,10 +958,10 @@ function DialogContent({
957
958
  ] });
958
959
  }
959
960
  function DialogHeader({ className, ...props }) {
960
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-xs flex flex-col pr-8", className), ...props });
961
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-step-xs flex flex-col pr-8", className), ...props });
961
962
  }
962
963
  function DialogFooter({ className, ...props }) {
963
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-sm flex flex-col-reverse sm:flex-row sm:justify-end", className), ...props });
964
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-step-sm flex flex-col-reverse sm:flex-row sm:justify-end", className), ...props });
964
965
  }
965
966
  function DialogTitle({
966
967
  className,
@@ -997,7 +998,7 @@ var panel = [
997
998
  "text-text-primary font-sans"
998
999
  ];
999
1000
  var item = [
1000
- "rounded-chip px-sm relative flex h-9 cursor-default items-center gap-2 select-none",
1001
+ "rounded-chip px-step-sm relative flex h-9 cursor-default items-center gap-2 select-none",
1001
1002
  "text-ui text-text-secondary transition-standard",
1002
1003
  "data-[highlighted]:bg-surface data-[highlighted]:text-text-primary",
1003
1004
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
@@ -1049,7 +1050,7 @@ function DropdownMenuLabel({
1049
1050
  return /* @__PURE__ */ jsxRuntime.jsx(
1050
1051
  DropdownMenuPrimitive__namespace.Label,
1051
1052
  {
1052
- className: cn("px-sm text-eyebrow font-mono text-text-secondary py-1.5 uppercase", className),
1053
+ className: cn("px-step-sm text-eyebrow font-mono text-text-secondary py-1.5 uppercase", className),
1053
1054
  ...props
1054
1055
  }
1055
1056
  );
@@ -1090,7 +1091,7 @@ function Input({ className, invalid = false, ...props }) {
1090
1091
  "data-invalid": invalid || void 0,
1091
1092
  "aria-invalid": invalid || void 0,
1092
1093
  className: cn(
1093
- "h-10 w-full px-sm",
1094
+ "h-10 w-full px-step-sm",
1094
1095
  "rounded-control border border-border bg-surface",
1095
1096
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
1096
1097
  "transition-standard",
@@ -1098,7 +1099,7 @@ function Input({ className, invalid = false, ...props }) {
1098
1099
  "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1099
1100
  "disabled:pointer-events-none disabled:opacity-50",
1100
1101
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
1101
- "file:mr-sm file:border-0 file:bg-transparent file:font-sans file:text-label file:text-text-secondary",
1102
+ "file:mr-step-sm file:border-0 file:bg-transparent file:font-sans file:text-label file:text-text-secondary",
1102
1103
  className
1103
1104
  ),
1104
1105
  ...props
@@ -1130,7 +1131,7 @@ function Pagination({ className, ...props }) {
1130
1131
  );
1131
1132
  }
1132
1133
  function PaginationContent({ className, ...props }) {
1133
- return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("gap-xs flex flex-row items-center", className), ...props });
1134
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("gap-step-xs flex flex-row items-center", className), ...props });
1134
1135
  }
1135
1136
  function PaginationItem(props) {
1136
1137
  return /* @__PURE__ */ jsxRuntime.jsx("li", { ...props });
@@ -1141,7 +1142,7 @@ function PaginationLink({ className, isActive = false, ...props }) {
1141
1142
  {
1142
1143
  "aria-current": isActive ? "page" : void 0,
1143
1144
  className: cn(
1144
- "rounded-chip px-sm inline-flex h-9 min-w-9 cursor-pointer items-center justify-center",
1145
+ "rounded-chip px-step-sm inline-flex h-9 min-w-9 cursor-pointer items-center justify-center",
1145
1146
  "font-sans text-ui text-text-secondary",
1146
1147
  "transition-standard",
1147
1148
  "hover:bg-surface hover:text-text-primary",
@@ -1154,13 +1155,13 @@ function PaginationLink({ className, isActive = false, ...props }) {
1154
1155
  );
1155
1156
  }
1156
1157
  function PaginationPrevious({ className, ...props }) {
1157
- return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina anterior", className: cn("gap-xs", className), ...props, children: [
1158
+ return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina anterior", className: cn("gap-step-xs", className), ...props, children: [
1158
1159
  /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {}),
1159
1160
  "Anterior"
1160
1161
  ] });
1161
1162
  }
1162
1163
  function PaginationNext({ className, ...props }) {
1163
- return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina siguiente", className: cn("gap-xs", className), ...props, children: [
1164
+ return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina siguiente", className: cn("gap-step-xs", className), ...props, children: [
1164
1165
  "Siguiente",
1165
1166
  /* @__PURE__ */ jsxRuntime.jsx(ChevronRight, {})
1166
1167
  ] });
@@ -1191,7 +1192,7 @@ function PopoverContent({
1191
1192
  align,
1192
1193
  sideOffset,
1193
1194
  className: cn(
1194
- "z-50 w-72 p-md",
1195
+ "z-50 w-72 p-step-md",
1195
1196
  "rounded-panel border-border bg-surface-raised shadow-standard border",
1196
1197
  "text-text-primary font-sans text-ui",
1197
1198
  "outline-none",
@@ -1220,7 +1221,7 @@ function Progress({ className, value, label, tone = "accent", ...props }) {
1220
1221
  );
1221
1222
  }
1222
1223
  function RadioGroup2({ className, ...props }) {
1223
- return /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Root, { className: cn("gap-sm grid", className), ...props });
1224
+ return /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Root, { className: cn("gap-step-sm grid", className), ...props });
1224
1225
  }
1225
1226
  function RadioGroupItem({ className, ...props }) {
1226
1227
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1252,7 +1253,7 @@ function SelectTrigger({
1252
1253
  SelectPrimitive__namespace.Trigger,
1253
1254
  {
1254
1255
  className: cn(
1255
- "gap-sm px-sm flex h-10 w-full cursor-pointer items-center justify-between",
1256
+ "gap-step-sm px-step-sm flex h-10 w-full cursor-pointer items-center justify-between",
1256
1257
  "rounded-control border-border bg-surface border",
1257
1258
  "font-sans text-ui text-text-primary",
1258
1259
  "transition-standard",
@@ -1303,7 +1304,7 @@ function SelectLabel({
1303
1304
  return /* @__PURE__ */ jsxRuntime.jsx(
1304
1305
  SelectPrimitive__namespace.Label,
1305
1306
  {
1306
- className: cn("px-sm text-eyebrow font-mono text-text-secondary py-1.5 uppercase", className),
1307
+ className: cn("px-step-sm text-eyebrow font-mono text-text-secondary py-1.5 uppercase", className),
1307
1308
  ...props
1308
1309
  }
1309
1310
  );
@@ -1317,7 +1318,7 @@ function SelectItem({
1317
1318
  SelectPrimitive__namespace.Item,
1318
1319
  {
1319
1320
  className: cn(
1320
- "rounded-chip px-sm relative flex h-9 w-full cursor-default items-center pr-8 select-none",
1321
+ "rounded-chip px-step-sm relative flex h-9 w-full cursor-default items-center pr-8 select-none",
1321
1322
  "text-ui text-text-secondary transition-standard",
1322
1323
  "data-[highlighted]:bg-surface data-[highlighted]:text-text-primary",
1323
1324
  "data-[state=checked]:text-text-primary",
@@ -1419,19 +1420,19 @@ function SheetHeader({ className, ...props }) {
1419
1420
  return /* @__PURE__ */ jsxRuntime.jsx(
1420
1421
  "div",
1421
1422
  {
1422
- className: cn("border-hairline gap-xs p-lg flex flex-col border-b pr-12", className),
1423
+ className: cn("border-hairline gap-step-xs p-step-lg flex flex-col border-b pr-12", className),
1423
1424
  ...props
1424
1425
  }
1425
1426
  );
1426
1427
  }
1427
1428
  function SheetBody({ className, ...props }) {
1428
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-lg flex-1 overflow-y-auto", className), ...props });
1429
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-step-lg flex-1 overflow-y-auto", className), ...props });
1429
1430
  }
1430
1431
  function SheetFooter({ className, ...props }) {
1431
1432
  return /* @__PURE__ */ jsxRuntime.jsx(
1432
1433
  "div",
1433
1434
  {
1434
- className: cn("border-hairline gap-sm p-lg flex flex-wrap justify-end border-t", className),
1435
+ className: cn("border-hairline gap-step-sm p-step-lg flex flex-wrap justify-end border-t", className),
1435
1436
  ...props
1436
1437
  }
1437
1438
  );
@@ -1542,7 +1543,7 @@ function TableHead({ className, ...props }) {
1542
1543
  "th",
1543
1544
  {
1544
1545
  className: cn(
1545
- "px-sm h-10 text-left align-middle",
1546
+ "px-step-sm h-10 text-left align-middle",
1546
1547
  "text-eyebrow font-mono text-text-muted uppercase",
1547
1548
  className
1548
1549
  ),
@@ -1551,13 +1552,13 @@ function TableHead({ className, ...props }) {
1551
1552
  );
1552
1553
  }
1553
1554
  function TableCell({ className, ...props }) {
1554
- return /* @__PURE__ */ jsxRuntime.jsx("td", { className: cn("px-sm py-sm text-text-secondary align-middle", className), ...props });
1555
+ return /* @__PURE__ */ jsxRuntime.jsx("td", { className: cn("px-step-sm py-step-sm text-text-secondary align-middle", className), ...props });
1555
1556
  }
1556
1557
  function TableCaption({ className, ...props }) {
1557
- return /* @__PURE__ */ jsxRuntime.jsx("caption", { className: cn("mt-sm text-label text-text-muted", className), ...props });
1558
+ return /* @__PURE__ */ jsxRuntime.jsx("caption", { className: cn("mt-step-sm text-label text-text-muted", className), ...props });
1558
1559
  }
1559
1560
  function Tabs({ className, ...props }) {
1560
- return /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { className: cn("gap-md flex flex-col", className), ...props });
1561
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { className: cn("gap-step-md flex flex-col", className), ...props });
1561
1562
  }
1562
1563
  function TabsList({
1563
1564
  className,
@@ -1566,7 +1567,7 @@ function TabsList({
1566
1567
  return /* @__PURE__ */ jsxRuntime.jsx(
1567
1568
  TabsPrimitive__namespace.List,
1568
1569
  {
1569
- className: cn("rounded-control bg-surface gap-xs inline-flex items-center p-1", className),
1570
+ className: cn("rounded-control bg-surface gap-step-xs inline-flex items-center p-1", className),
1570
1571
  ...props
1571
1572
  }
1572
1573
  );
@@ -1579,7 +1580,7 @@ function TabsTrigger({
1579
1580
  TabsPrimitive__namespace.Trigger,
1580
1581
  {
1581
1582
  className: cn(
1582
- "rounded-chip px-sm inline-flex h-8 cursor-pointer items-center justify-center whitespace-nowrap",
1583
+ "rounded-chip px-step-sm inline-flex h-8 cursor-pointer items-center justify-center whitespace-nowrap",
1583
1584
  "font-sans text-label text-text-secondary",
1584
1585
  "transition-standard",
1585
1586
  "hover:text-text-primary",
@@ -1614,7 +1615,7 @@ function Textarea({ className, invalid = false, ...props }) {
1614
1615
  "data-invalid": invalid || void 0,
1615
1616
  "aria-invalid": invalid || void 0,
1616
1617
  className: cn(
1617
- "min-h-24 w-full px-sm py-xs",
1618
+ "min-h-24 w-full px-step-sm py-step-xs",
1618
1619
  "rounded-control border border-border bg-surface",
1619
1620
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
1620
1621
  "transition-standard",
@@ -1638,7 +1639,7 @@ function ToastViewport({
1638
1639
  ToastPrimitive__namespace.Viewport,
1639
1640
  {
1640
1641
  className: cn(
1641
- "gap-sm p-lg fixed right-0 bottom-0 z-50 flex max-h-screen w-full flex-col-reverse",
1642
+ "gap-step-sm p-step-lg fixed right-0 bottom-0 z-50 flex max-h-screen w-full flex-col-reverse",
1642
1643
  "sm:max-w-[420px] sm:flex-col",
1643
1644
  className
1644
1645
  ),
@@ -1648,7 +1649,7 @@ function ToastViewport({
1648
1649
  }
1649
1650
  var toast = classVarianceAuthority.cva(
1650
1651
  [
1651
- "gap-md p-md pr-10 relative flex w-full items-start justify-between",
1652
+ "gap-step-md p-step-md pr-10 relative flex w-full items-start justify-between",
1652
1653
  "rounded-card border bg-surface shadow-standard",
1653
1654
  "font-sans text-ui text-text-secondary"
1654
1655
  ],
@@ -1712,7 +1713,7 @@ function TooltipContent({
1712
1713
  {
1713
1714
  sideOffset,
1714
1715
  className: cn(
1715
- "z-50 px-sm py-1.5",
1716
+ "z-50 px-step-sm py-1.5",
1716
1717
  "rounded-chip border-border bg-surface-raised shadow-standard border",
1717
1718
  "font-sans text-label text-text-primary",
1718
1719
  className
@@ -1748,14 +1749,14 @@ function ArticleCard({
1748
1749
  " min de lectura"
1749
1750
  ] }, "lectura") : null
1750
1751
  ].filter(Boolean);
1751
- return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-sm flex h-full flex-col", children: [
1752
- meta.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "gap-xs flex items-center", children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-xs flex items-center", children: [
1752
+ return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-step-sm flex h-full flex-col", children: [
1753
+ meta.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "gap-step-xs flex items-center", children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-step-xs flex items-center", children: [
1753
1754
  i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
1754
1755
  m
1755
1756
  ] }, i)) }) : null,
1756
1757
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", className: "group-hover:text-accent transition-standard", children: title }),
1757
1758
  excerpt ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-2", children: excerpt }) : null,
1758
- tags && tags.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-xs mt-auto flex flex-wrap pt-sm", children: tags.map((t) => /* @__PURE__ */ jsxRuntime.jsx(CategoryBadge, { children: t }, t)) }) : null
1759
+ tags && tags.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-xs mt-auto flex flex-wrap pt-step-sm", children: tags.map((t) => /* @__PURE__ */ jsxRuntime.jsx(CategoryBadge, { children: t }, t)) }) : null
1759
1760
  ] }) });
1760
1761
  }
1761
1762
  var AVATAR = "size-[52px]";
@@ -1763,16 +1764,16 @@ function iniciales(nombre) {
1763
1764
  return nombre.split(/\s+/).slice(0, 2).map((p) => p[0] ?? "").join("").toUpperCase();
1764
1765
  }
1765
1766
  function AuthorCard({ name, role, src, bio, action, className, ...props }) {
1766
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(SUPERFICIE_TARJETA, "p-lg gap-md flex items-start", className), ...props, children: [
1767
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(SUPERFICIE_TARJETA, "p-step-lg gap-step-md flex items-start", className), ...props, children: [
1767
1768
  /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: cn(AVATAR, "shrink-0"), children: [
1768
1769
  src ? /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src, alt: "" }) : null,
1769
1770
  /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: iniciales(name) })
1770
1771
  ] }),
1771
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs flex min-w-0 flex-1 flex-col", children: [
1772
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex min-w-0 flex-1 flex-col", children: [
1772
1773
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", as: "p", className: "font-medium", children: name }),
1773
1774
  role ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "chip", tone: "muted", as: "p", children: role }) : null,
1774
- bio ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "mt-xs", children: bio }) : null,
1775
- action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-xs gap-sm flex flex-wrap items-center", children: action }) : null
1775
+ bio ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "mt-step-xs", children: bio }) : null,
1776
+ action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-step-xs gap-step-sm flex flex-wrap items-center", children: action }) : null
1776
1777
  ] })
1777
1778
  ] });
1778
1779
  }
@@ -1891,7 +1892,7 @@ function Volumen({
1891
1892
  onSilenciar,
1892
1893
  onCambiarVolumen
1893
1894
  }) {
1894
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs hidden items-center sm:flex", children: [
1895
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs hidden items-center sm:flex", children: [
1895
1896
  /* @__PURE__ */ jsxRuntime.jsx(
1896
1897
  "button",
1897
1898
  {
@@ -2138,8 +2139,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2138
2139
  ...puntero
2139
2140
  }
2140
2141
  ),
2141
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-surface/95 border-accent/25 border-t backdrop-blur-md", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm px-md flex items-center py-5", children: [
2142
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs flex shrink-0 items-center", children: [
2142
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-surface/95 border-accent/25 border-t backdrop-blur-md", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm px-step-md flex items-center py-5", children: [
2143
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex shrink-0 items-center", children: [
2143
2144
  /* @__PURE__ */ jsxRuntime.jsx(Onda, { grosor: "w-[2px]", alto: "h-4", sonando: isPlaying }),
2144
2145
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-accent hidden uppercase sm:block", children: "Narraci\xF3n" })
2145
2146
  ] }),
@@ -2156,7 +2157,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2156
2157
  /* @__PURE__ */ jsxRuntime.jsx(
2157
2158
  BotonPlay,
2158
2159
  {
2159
- className: "rounded-pill px-sm gap-xs flex items-center py-1.5",
2160
+ className: "rounded-pill px-step-sm gap-step-xs flex items-center py-1.5",
2160
2161
  tamano: "w-4 h-4",
2161
2162
  etiqueta: etiquetaPlay,
2162
2163
  onAlternar: togglePlay,
@@ -2181,7 +2182,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2181
2182
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2182
2183
  /* @__PURE__ */ jsxRuntime.jsx("audio", { ref: audioRef, src, preload: "metadata" }),
2183
2184
  /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: staticRef, children: [
2184
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm mb-md flex items-center", children: [
2185
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm mb-step-md flex items-center", children: [
2185
2186
  /* @__PURE__ */ jsxRuntime.jsx(Onda, { grosor: "w-[3px]", alto: "h-5", sonando: isPlaying }),
2186
2187
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-accent uppercase", children: "Narraci\xF3n de audio" }),
2187
2188
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-chip font-mono text-text-muted ml-auto tabular-nums", children: [
@@ -2190,13 +2191,13 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2190
2191
  formatTime(duration)
2191
2192
  ] })
2192
2193
  ] }),
2193
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-md", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-1.5", perilla: 14, progreso: progress, ...puntero }) }),
2194
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm flex items-center", children: [
2194
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-step-md", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-1.5", perilla: 14, progreso: progress, ...puntero }) }),
2195
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-center", children: [
2195
2196
  /* @__PURE__ */ jsxRuntime.jsx(BotonSalto, { segundos: -15, className: "p-2", tamano: "w-6 h-6", onSaltar: skip }),
2196
2197
  /* @__PURE__ */ jsxRuntime.jsx(
2197
2198
  BotonPlay,
2198
2199
  {
2199
- className: "rounded-pill px-lg gap-xs text-ui flex items-center py-2 font-medium",
2200
+ className: "rounded-pill px-step-lg gap-step-xs text-ui flex items-center py-2 font-medium",
2200
2201
  tamano: "w-4 h-4",
2201
2202
  etiqueta: etiquetaPlay,
2202
2203
  texto: etiquetaPlay,
@@ -2205,7 +2206,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2205
2206
  }
2206
2207
  ),
2207
2208
  /* @__PURE__ */ jsxRuntime.jsx(BotonSalto, { segundos: 15, className: "p-2", tamano: "w-6 h-6", onSaltar: skip }),
2208
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm ml-auto flex items-center", children: [
2209
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm ml-auto flex items-center", children: [
2209
2210
  /* @__PURE__ */ jsxRuntime.jsx(
2210
2211
  BotonVelocidad,
2211
2212
  {
@@ -2235,8 +2236,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2235
2236
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2236
2237
  /* @__PURE__ */ jsxRuntime.jsx("audio", { ref: audioRef, src, preload: "metadata" }),
2237
2238
  /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: staticRef, className: "w-full", children: [
2238
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-xs", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-1.5", perilla: 12, progreso: progress, ...puntero }) }),
2239
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-chip font-mono text-text-muted mb-sm flex justify-between", children: [
2239
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-step-xs", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-1.5", perilla: 12, progreso: progress, ...puntero }) }),
2240
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-chip font-mono text-text-muted mb-step-sm flex justify-between", children: [
2240
2241
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatTime(currentTime) }),
2241
2242
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatTime(duration) })
2242
2243
  ] }),
@@ -2268,16 +2269,16 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2268
2269
  flotanteJsx
2269
2270
  ] });
2270
2271
  }
2271
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-surface rounded-control border-border p-md w-full border", children: [
2272
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-surface rounded-control border-border p-step-md w-full border", children: [
2272
2273
  /* @__PURE__ */ jsxRuntime.jsx("audio", { ref: audioRef, src, preload: "metadata" }),
2273
- title ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui font-sans text-text-secondary mb-sm truncate", children: title }) : null,
2274
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-sm", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-2", perilla: 16, progreso: progress, ...puntero }) }),
2275
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-chip font-mono text-text-muted mb-sm flex justify-between", children: [
2274
+ title ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui font-sans text-text-secondary mb-step-sm truncate", children: title }) : null,
2275
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-step-sm", children: /* @__PURE__ */ jsxRuntime.jsx(BarraProgreso, { alto: "h-2", perilla: 16, progreso: progress, ...puntero }) }),
2276
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-chip font-mono text-text-muted mb-step-sm flex justify-between", children: [
2276
2277
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatTime(currentTime) }),
2277
2278
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatTime(duration) })
2278
2279
  ] }),
2279
2280
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2280
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs flex items-center", children: [
2281
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex items-center", children: [
2281
2282
  /* @__PURE__ */ jsxRuntime.jsx(BotonSalto, { segundos: -15, className: "p-2", tamano: "w-5 h-5", onSaltar: skip }),
2282
2283
  /* @__PURE__ */ jsxRuntime.jsx(
2283
2284
  BotonPlay,
@@ -2291,7 +2292,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2291
2292
  ),
2292
2293
  /* @__PURE__ */ jsxRuntime.jsx(BotonSalto, { segundos: 15, className: "p-2", tamano: "w-5 h-5", onSaltar: skip })
2293
2294
  ] }),
2294
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm flex items-center", children: [
2295
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-center", children: [
2295
2296
  /* @__PURE__ */ jsxRuntime.jsx(
2296
2297
  BotonVelocidad,
2297
2298
  {
@@ -2319,11 +2320,11 @@ function Blockquote({ children, author, source, className, ...props }) {
2319
2320
  return /* @__PURE__ */ jsxRuntime.jsxs(
2320
2321
  "blockquote",
2321
2322
  {
2322
- className: cn("border-accent pl-md my-lg border-l-2", className),
2323
+ className: cn("border-accent pl-step-md my-step-lg border-l-2", className),
2323
2324
  ...props,
2324
2325
  children: [
2325
2326
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "body", tone: "secondary", children }),
2326
- author || source ? /* @__PURE__ */ jsxRuntime.jsx("footer", { className: "mt-sm", children: /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "label", tone: "muted", as: "span", children: [
2327
+ author || source ? /* @__PURE__ */ jsxRuntime.jsx("footer", { className: "mt-step-sm", children: /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "label", tone: "muted", as: "span", children: [
2327
2328
  author ? /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "not-italic", children: author }) : null,
2328
2329
  author && source ? " \xB7 " : null,
2329
2330
  source
@@ -2342,11 +2343,11 @@ function Breadcrumb({
2342
2343
  ...props
2343
2344
  }) {
2344
2345
  const enlace = (href, contenido) => linkAsChild ? /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: ENLACE, children: linkAsChild({ href, children: contenido }) }) : /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: ENLACE, children: contenido });
2345
- return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Ruta", className: cn("font-mono text-meta text-text-muted", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "gap-xs flex flex-wrap items-center", children: [
2346
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Ruta", className: cn("font-mono text-meta text-text-muted", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "gap-step-xs flex flex-wrap items-center", children: [
2346
2347
  /* @__PURE__ */ jsxRuntime.jsx("li", { children: enlace(homeHref, /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-label": homeLabel, children: "~" })) }),
2347
2348
  items.map((item2, i) => {
2348
2349
  const ultimo = i === items.length - 1;
2349
- return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "gap-xs flex items-center", children: [
2350
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "gap-step-xs flex items-center", children: [
2350
2351
  /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-border", children: "/" }),
2351
2352
  item2.href && !ultimo ? enlace(item2.href, item2.label) : /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-current": ultimo ? "page" : void 0, className: "text-text-secondary", children: item2.label })
2352
2353
  ] }, i);
@@ -2376,7 +2377,7 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2376
2377
  ),
2377
2378
  ...props,
2378
2379
  children: [
2379
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-hairline px-sm flex items-center justify-between border-b py-1.5", children: [
2380
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-hairline px-step-sm flex items-center justify-between border-b py-1.5", children: [
2380
2381
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: [
2381
2382
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-accent", children: "\u276F" }),
2382
2383
  " ",
@@ -2390,7 +2391,7 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2390
2391
  "aria-label": copiado ? "C\xF3digo copiado" : "Copiar c\xF3digo",
2391
2392
  "aria-live": "polite",
2392
2393
  className: cn(
2393
- "gap-xs rounded-chip flex items-center px-2 py-1",
2394
+ "gap-step-xs rounded-chip flex items-center px-2 py-1",
2394
2395
  "text-label font-mono text-text-muted cursor-pointer",
2395
2396
  "transition-standard hover:bg-surface hover:text-text-primary",
2396
2397
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
@@ -2402,7 +2403,7 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2402
2403
  }
2403
2404
  ) : null
2404
2405
  ] }),
2405
- /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "p-md font-mono text-meta text-text-primary overflow-x-auto leading-relaxed", children })
2406
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "p-step-md font-mono text-meta text-text-primary overflow-x-auto leading-relaxed", children })
2406
2407
  ]
2407
2408
  }
2408
2409
  );
@@ -2416,15 +2417,15 @@ function CourseCard({
2416
2417
  className,
2417
2418
  ...props
2418
2419
  }) {
2419
- return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-sm flex h-full flex-col", children: [
2420
+ return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-step-sm flex h-full flex-col", children: [
2420
2421
  status ? /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "warm", children: status }) }) : null,
2421
2422
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", className: "group-hover:text-accent transition-standard", children: title }),
2422
2423
  summary ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-3", children: summary }) : null,
2423
- meta && meta.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "gap-xs flex flex-wrap items-center", children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-xs flex items-center", children: [
2424
+ meta && meta.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "gap-step-xs flex flex-wrap items-center", children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-step-xs flex items-center", children: [
2424
2425
  i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
2425
2426
  m
2426
2427
  ] }, i)) }) : null,
2427
- typeof progress === "number" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs mt-auto flex flex-col pt-sm", children: [
2428
+ typeof progress === "number" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs mt-auto flex flex-col pt-step-sm", children: [
2428
2429
  /* @__PURE__ */ jsxRuntime.jsx(Progress, { value: progress, tone: "warm", label: `Progreso del curso: ${progress}%` }),
2429
2430
  /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "label", tone: "muted", as: "p", children: [
2430
2431
  progress,
@@ -2515,13 +2516,13 @@ function EmptyState({
2515
2516
  return /* @__PURE__ */ jsxRuntime.jsxs(
2516
2517
  "div",
2517
2518
  {
2518
- className: cn(SUPERFICIE_TARJETA, "p-lg gap-sm flex flex-col items-center text-center", className),
2519
+ className: cn(SUPERFICIE_TARJETA, "p-step-lg gap-step-sm flex flex-col items-center text-center", className),
2519
2520
  ...props,
2520
2521
  children: [
2521
2522
  /* @__PURE__ */ jsxRuntime.jsx(CaraDeMascota, { expresion, className: CARA, basePath }),
2522
2523
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", as: "p", className: "font-medium", children: title }),
2523
2524
  description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "max-w-measure font-normal", children: description }) : null,
2524
- action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-xs", children: action }) : null
2525
+ action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-step-xs", children: action }) : null
2525
2526
  ]
2526
2527
  }
2527
2528
  );
@@ -2533,8 +2534,8 @@ function Footer({
2533
2534
  className,
2534
2535
  ...props
2535
2536
  }) {
2536
- return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-md py-xl gap-lg mx-auto flex flex-col", children: [
2537
- children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-md flex flex-wrap items-center", children }) : null,
2537
+ return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-step-md py-step-xl gap-step-lg mx-auto flex flex-col", children: [
2538
+ children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-md flex flex-wrap items-center", children }) : null,
2538
2539
  social && social.length > 0 ? (
2539
2540
  // 18px de separación, del documento. No es un escalón de `spacing`:
2540
2541
  // es el ritmo de una fila de iconos, no el de una página.
@@ -2593,16 +2594,16 @@ function Hero({
2593
2594
  className: cn(
2594
2595
  "degradado-hero rounded-panel border-hairline relative overflow-hidden border",
2595
2596
  // 44 arriba, 40 a los lados y abajo. Del documento.
2596
- "px-xl pt-[44px] pb-xl",
2597
+ "px-step-xl pt-[44px] pb-step-xl",
2597
2598
  className
2598
2599
  ),
2599
2600
  ...props,
2600
2601
  children: [
2601
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-md flex flex-col md:max-w-[62%]", children: [
2602
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-md flex flex-col md:max-w-[62%]", children: [
2602
2603
  eyebrow ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "accent", as: "p", children: eyebrow }) : null,
2603
2604
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h1", variant: "display", children: title }),
2604
2605
  description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "body", tone: "secondary", children: description }) : null,
2605
- action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-sm mt-xs flex flex-wrap items-center", children: action }) : null
2606
+ action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm mt-step-xs flex flex-wrap items-center", children: action }) : null
2606
2607
  ] }),
2607
2608
  pose ? /* @__PURE__ */ jsxRuntime.jsx(
2608
2609
  Mascota,
@@ -2612,7 +2613,7 @@ function Hero({
2612
2613
  className: cn(
2613
2614
  // En móvil, en el flujo y bajo los botones. Desde md, sangrando por
2614
2615
  // la esquina inferior derecha.
2615
- "mt-lg mx-auto w-40",
2616
+ "mt-step-lg mx-auto w-40",
2616
2617
  "md:mt-0 md:absolute md:right-0 md:-bottom-4 md:mx-0 md:w-64"
2617
2618
  )
2618
2619
  }
@@ -2634,11 +2635,11 @@ function LinkRow({
2634
2635
  return /* @__PURE__ */ jsxRuntime.jsx(
2635
2636
  Tarjeta,
2636
2637
  {
2637
- className: cn("px-md py-sm", className),
2638
+ className: cn("px-step-md py-step-sm", className),
2638
2639
  ...props,
2639
2640
  rel,
2640
2641
  ...target ? { target } : {},
2641
- children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-sm flex items-center", children: [
2642
+ children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-step-sm flex items-center", children: [
2642
2643
  icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-muted group-hover:text-accent transition-standard shrink-0 text-2xl", children: icon }) : null,
2643
2644
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
2644
2645
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "span", variant: "ui", className: "group-hover:text-accent transition-standard block font-medium", children: name }),
@@ -2668,10 +2669,10 @@ function Nav({ brand: brand2, children, actions, className, ...props }) {
2668
2669
  className
2669
2670
  ),
2670
2671
  ...props,
2671
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-md h-nav gap-lg mx-auto flex items-center", children: [
2672
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-step-md h-nav gap-step-lg mx-auto flex items-center", children: [
2672
2673
  brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: brand2 }) : null,
2673
- children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-md flex items-center", children }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
2674
- actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-sm flex shrink-0 items-center", children: actions }) : null
2674
+ children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-step-md flex items-center", children }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
2675
+ actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
2675
2676
  ] })
2676
2677
  }
2677
2678
  );
@@ -2725,17 +2726,17 @@ function NewsletterForm({
2725
2726
  "section",
2726
2727
  {
2727
2728
  className: cn(
2728
- "degradado-seccion rounded-panel border-hairline p-lg gap-md flex flex-col border",
2729
+ "degradado-seccion rounded-panel border-hairline p-step-lg gap-step-md flex flex-col border",
2729
2730
  className
2730
2731
  ),
2731
2732
  ...props,
2732
2733
  children: [
2733
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs flex flex-col", children: [
2734
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-col", children: [
2734
2735
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h2", variant: "h3", children: title }),
2735
2736
  description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", children: description }) : null
2736
2737
  ] }),
2737
- /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: enviar, className: "gap-sm flex flex-col sm:flex-row sm:items-end", noValidate: true, children: [
2738
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-xs flex flex-1 flex-col", children: [
2738
+ /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: enviar, className: "gap-step-sm flex flex-col sm:flex-row sm:items-end", noValidate: true, children: [
2739
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-1 flex-col", children: [
2739
2740
  /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: id, children: fieldLabel }),
2740
2741
  /* @__PURE__ */ jsxRuntime.jsx(
2741
2742
  Input,
@@ -2765,7 +2766,7 @@ function NewsletterForm({
2765
2766
  ] }),
2766
2767
  state === "exito" ? /* @__PURE__ */ jsxRuntime.jsx(Alert, { id: `${id}-aviso`, variant: "success", enfasis: "fuerte", children: successMessage }) : null,
2767
2768
  error ? /* @__PURE__ */ jsxRuntime.jsx(Alert, { id: `${id}-aviso`, variant: "error", enfasis: "fuerte", children: errorMessage }) : null,
2768
- disclaimer ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm flex items-center", children: [
2769
+ disclaimer ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-center", children: [
2769
2770
  expresion ? /* @__PURE__ */ jsxRuntime.jsx(CaraDeMascota, { expresion, basePath, className: "w-10 max-w-none" }) : null,
2770
2771
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "font-normal", children: disclaimer })
2771
2772
  ] }) : null
@@ -2773,11 +2774,11 @@ function NewsletterForm({
2773
2774
  }
2774
2775
  );
2775
2776
  }
2776
- var cabecera = classVarianceAuthority.cva("gap-sm flex flex-col", {
2777
+ var cabecera = classVarianceAuthority.cva("gap-step-sm flex flex-col", {
2777
2778
  variants: {
2778
2779
  size: {
2779
2780
  display: "py-section",
2780
- page: "py-xl"
2781
+ page: "py-step-xl"
2781
2782
  }
2782
2783
  },
2783
2784
  defaultVariants: { size: "page" }
@@ -2796,7 +2797,7 @@ function PageHeader({
2796
2797
  eyebrow ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "accent", as: "p", children: eyebrow }) : null,
2797
2798
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as, variant: size2 === "display" ? "display" : "h1", className: "max-w-measure", children: title }),
2798
2799
  description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "body", tone: "secondary", children: description }) : null,
2799
- action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-sm mt-sm flex flex-wrap items-center", children: action }) : null
2800
+ action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm mt-step-sm flex flex-wrap items-center", children: action }) : null
2800
2801
  ] });
2801
2802
  }
2802
2803
  function SidebarItem({
@@ -2813,7 +2814,7 @@ function SidebarItem({
2813
2814
  {
2814
2815
  "aria-current": active ? "page" : void 0,
2815
2816
  className: cn(
2816
- "rounded-chip px-sm gap-xs flex cursor-pointer items-center py-1.5",
2817
+ "rounded-chip px-step-sm gap-step-xs flex cursor-pointer items-center py-1.5",
2817
2818
  "font-mono text-meta transition-standard",
2818
2819
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2819
2820
  // El activo es fondo `surfaceRaised` y tinta primaria, igual que
@@ -2847,14 +2848,14 @@ function SidebarNav({
2847
2848
  {
2848
2849
  "aria-label": typeof title === "string" ? title : "Administraci\xF3n",
2849
2850
  className: cn(
2850
- "border-hairline bg-surface p-sm gap-sm flex h-full flex-col border-r",
2851
+ "border-hairline bg-surface p-step-sm gap-step-sm flex h-full flex-col border-r",
2851
2852
  className
2852
2853
  ),
2853
2854
  ...props,
2854
2855
  children: [
2855
- title ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "px-sm", children: title }) : null,
2856
+ title ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "px-step-sm", children: title }) : null,
2856
2857
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-0.5 flex flex-1 flex-col", children }),
2857
- pie.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "border-hairline px-sm pt-sm border-t", children: pie.map((p, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
2858
+ pie.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "border-hairline px-step-sm pt-step-sm border-t", children: pie.map((p, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
2858
2859
  i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: " \xB7 " }) : null,
2859
2860
  p
2860
2861
  ] }, i)) }) : null
@@ -2863,7 +2864,7 @@ function SidebarNav({
2863
2864
  );
2864
2865
  }
2865
2866
  function Stat({ value, label, tone = "neutral", progress, className, ...props }) {
2866
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(SUPERFICIE_TARJETA, "p-lg gap-xs flex flex-col", className), ...props, children: [
2867
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(SUPERFICIE_TARJETA, "p-step-lg gap-step-xs flex flex-col", className), ...props, children: [
2867
2868
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "stat", as: "p", tone: tone === "alerta" ? "warm" : "accent", children: value }),
2868
2869
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", children: label }),
2869
2870
  typeof progress === "number" ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -2872,7 +2873,7 @@ function Stat({ value, label, tone = "neutral", progress, className, ...props })
2872
2873
  value: progress,
2873
2874
  tone: tone === "alerta" ? "warm" : "accent",
2874
2875
  label: `${label}: ${progress}%`,
2875
- className: "mt-sm"
2876
+ className: "mt-step-sm"
2876
2877
  }
2877
2878
  ) : null
2878
2879
  ] });
@@ -2891,13 +2892,13 @@ function TalkCard({
2891
2892
  date ? /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime, children: date }, "fecha") : null,
2892
2893
  location ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: location }, "lugar") : null
2893
2894
  ].filter(Boolean);
2894
- return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-sm flex h-full flex-col", children: [
2895
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-sm flex items-start justify-between", children: [
2895
+ return /* @__PURE__ */ jsxRuntime.jsx(Tarjeta, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-step-sm flex h-full flex-col", children: [
2896
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-start justify-between", children: [
2896
2897
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "accent", as: "p", children: event }),
2897
2898
  status ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "neutral", children: status }) : null
2898
2899
  ] }),
2899
2900
  /* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", className: "group-hover:text-accent transition-standard", children: title }),
2900
- pie.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "gap-xs mt-auto flex items-center pt-sm", children: pie.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-xs flex items-center", children: [
2901
+ pie.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "gap-step-xs mt-auto flex items-center pt-step-sm", children: pie.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-step-xs flex items-center", children: [
2901
2902
  i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
2902
2903
  m
2903
2904
  ] }, i)) }) : null
@@ -2911,16 +2912,16 @@ function TableOfContents({
2911
2912
  className,
2912
2913
  ...props
2913
2914
  }) {
2914
- return /* @__PURE__ */ jsxRuntime.jsxs("nav", { "aria-label": typeof title === "string" ? title : "En esta p\xE1gina", className: cn("gap-sm flex flex-col", className), ...props, children: [
2915
+ return /* @__PURE__ */ jsxRuntime.jsxs("nav", { "aria-label": typeof title === "string" ? title : "En esta p\xE1gina", className: cn("gap-step-sm flex flex-col", className), ...props, children: [
2915
2916
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", children: title }),
2916
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "border-hairline gap-xs flex flex-col border-l", children: items.map((item2) => {
2917
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "border-hairline gap-step-xs flex flex-col border-l", children: items.map((item2) => {
2917
2918
  const activo = item2.href === activeHref;
2918
2919
  const clases = cn(
2919
- "px-sm -ml-px block border-l",
2920
+ "px-step-sm -ml-px block border-l",
2920
2921
  "font-sans text-label transition-standard",
2921
2922
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2922
2923
  "cursor-pointer",
2923
- item2.nested && "pl-lg",
2924
+ item2.nested && "pl-step-lg",
2924
2925
  activo ? "border-accent text-accent" : "border-transparent text-text-secondary hover:text-text-primary"
2925
2926
  );
2926
2927
  return /* @__PURE__ */ jsxRuntime.jsx("li", { children: linkAsChild ? /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: clases, "aria-current": activo ? "location" : void 0, children: linkAsChild({ href: item2.href, children: item2.label }) }) : /* @__PURE__ */ jsxRuntime.jsx("a", { href: item2.href, className: clases, "aria-current": activo ? "location" : void 0, children: item2.label }) }, item2.href);
@@ -2954,7 +2955,7 @@ function Logo({
2954
2955
  className,
2955
2956
  ...props
2956
2957
  }) {
2957
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-xs inline-flex items-center", className), ...props, children: [
2958
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: [
2958
2959
  /* @__PURE__ */ jsxRuntime.jsx(
2959
2960
  Isotipo,
2960
2961
  {