@eduardoalvarez/arrecife 0.6.0 → 0.8.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +288 -49
  3. package/dist/brand/index.cjs +2 -2
  4. package/dist/brand/index.js +3 -3
  5. package/dist/chart/index.cjs +129 -2
  6. package/dist/chart/index.d.cts +114 -4
  7. package/dist/chart/index.d.ts +114 -4
  8. package/dist/chart/index.js +129 -5
  9. package/dist/{chunk-PMN7NR3G.js → chunk-5A5GH2PF.js} +1 -1
  10. package/dist/{chunk-DKCN7BAL.js → chunk-6IGD5REB.js} +1 -1
  11. package/dist/{chunk-XKYHTOUJ.js → chunk-FAAGZG7A.js} +1 -1
  12. package/dist/{chunk-O4TAH7YJ.js → chunk-FGFNK72B.js} +29 -5
  13. package/dist/chunk-HOADZ6GS.js +72 -0
  14. package/dist/chunk-LXRGQKMG.js +145 -0
  15. package/dist/{chunk-6O3KWB6P.js → chunk-MPZBF2TZ.js} +2 -2
  16. package/dist/{chunk-JMOOFZ3B.js → chunk-TRPBID2W.js} +1 -1
  17. package/dist/{chunk-25YNFCIF.js → chunk-XXDATT3A.js} +6 -3
  18. package/dist/doctor.mjs +248 -0
  19. package/dist/form/index.cjs +2 -2
  20. package/dist/form/index.d.cts +1 -1
  21. package/dist/form/index.d.ts +1 -1
  22. package/dist/form/index.js +4 -4
  23. package/dist/icons/index.cjs +149 -0
  24. package/dist/icons/index.d.cts +94 -0
  25. package/dist/icons/index.d.ts +94 -0
  26. package/dist/icons/index.js +28 -0
  27. package/dist/index-BbRplw_B.d.cts +58 -0
  28. package/dist/index-BbRplw_B.d.ts +58 -0
  29. package/dist/index.cjs +425 -251
  30. package/dist/index.d.cts +303 -104
  31. package/dist/index.d.ts +303 -104
  32. package/dist/index.js +283 -285
  33. package/dist/{label-MgHFKnFy.d.ts → label-DJ4HuD-R.d.cts} +3 -2
  34. package/dist/{label-MgHFKnFy.d.cts → label-DJ4HuD-R.d.ts} +3 -2
  35. package/dist/og/index.cjs +3 -2
  36. package/dist/og/index.js +1 -1
  37. package/dist/shiki/index.js +1 -1
  38. package/dist/social/data.cjs +161 -0
  39. package/dist/social/data.d.cts +161 -0
  40. package/dist/social/data.d.ts +161 -0
  41. package/dist/social/data.js +2 -0
  42. package/dist/social/index.cjs +153 -0
  43. package/dist/social/index.d.cts +2 -0
  44. package/dist/social/index.d.ts +2 -0
  45. package/dist/social/index.js +3 -0
  46. package/dist/tokens/index.cjs +29 -5
  47. package/dist/tokens/index.d.cts +37 -10
  48. package/dist/tokens/index.d.ts +37 -10
  49. package/dist/tokens/index.js +2 -2
  50. package/dist/tokens/theme.css +79 -22
  51. package/dist/variants/index.cjs +6 -3
  52. package/dist/variants/index.d.cts +6 -3
  53. package/dist/variants/index.d.ts +6 -3
  54. package/dist/variants/index.js +1 -1
  55. package/llms.txt +530 -80
  56. package/package.json +29 -2
package/dist/index.cjs CHANGED
@@ -214,7 +214,7 @@ var typeScale = {
214
214
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
215
215
  *
216
216
  * At 13 the three badge families grew past the size of a small button and
217
- * outweighed the title they accompany. See `docs/decisions.md`.
217
+ * outweighed the title they accompany. See `docs/decisions/`.
218
218
  */
219
219
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
220
220
  /**
@@ -268,7 +268,7 @@ var control = {
268
268
  * baseline; 28 would have been a fifth height that matches nothing.
269
269
  *
270
270
  * It does not replace `icon`. A page's primary action stays at 42; this is for
271
- * a row of a table. See `docs/decisions.md` § 22.
271
+ * a row of a table. See `docs/decisions/0.6.md` § 22.
272
272
  */
273
273
  iconSm: 32
274
274
  };
@@ -283,6 +283,30 @@ var spacing = {
283
283
  var size = {
284
284
  /** Navigation bar height. */
285
285
  nav: 64,
286
+ /**
287
+ * The bar when it shares the screen with a sidebar.
288
+ *
289
+ * It is not «a smaller bar because it looks better». At 64 the header of an
290
+ * app shell competes with the rail beside it for the same corner, and the two
291
+ * together eat the top of the content area. 56 is what `cursos` had arrived at
292
+ * on its own, and it is the same reasoning as `control.iconSm`: the one admin
293
+ * app of the five is denser than the four reading sites. See
294
+ * `docs/decisions/0.7.md` § 30.
295
+ */
296
+ navCompact: 56,
297
+ /**
298
+ * The admin sidebar, and the rail it collapses to.
299
+ *
300
+ * They are tokens and not the consumer's `w-*` because a collapsible sidebar
301
+ * has to know BOTH: the layout beside it reserves one of the two, and two
302
+ * numbers written by hand in two files drift the first time one of them moves.
303
+ * A sidebar that never collapses is still just a box the layout sizes.
304
+ *
305
+ * 56 is the rail: `navCompact`'s height, so a panel's bar and its rail meet in
306
+ * a square corner instead of a step.
307
+ */
308
+ sidebar: 256,
309
+ sidebarRail: 56,
286
310
  /** Reading column width. */
287
311
  content: 760,
288
312
  /** Maximum page width. */
@@ -315,9 +339,9 @@ var gradient = {
315
339
  og: `linear-gradient(145deg, ${dark.background} 55%, ${deep} 100%)`
316
340
  },
317
341
  light: {
318
- hero: `linear-gradient(160deg, ${light.background} 60%, ${light.surfaceRaised} 100%)`,
319
- section: `linear-gradient(150deg, ${light.surface} 0%, ${light.surfaceRaised} 100%)`,
320
- og: `linear-gradient(145deg, ${light.background} 55%, ${light.surfaceRaised} 100%)`
342
+ hero: `linear-gradient(160deg, ${light.background} 60%, ${light.surface} 100%)`,
343
+ section: `linear-gradient(150deg, ${light.surface} 0%, ${light.background} 100%)`,
344
+ og: `linear-gradient(145deg, ${light.background} 55%, ${light.surface} 100%)`
321
345
  }
322
346
  };
323
347
  var shadow = {
@@ -452,7 +476,7 @@ var button = classVarianceAuthority.cva(
452
476
  "inline-flex cursor-pointer items-center justify-center gap-step-xs whitespace-nowrap select-none",
453
477
  "rounded-control font-sans font-medium",
454
478
  "transition-standard",
455
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
479
+ "focus-ring",
456
480
  "disabled:pointer-events-none disabled:opacity-50",
457
481
  "[&_svg]:shrink-0"
458
482
  ],
@@ -463,7 +487,10 @@ var button = classVarianceAuthority.cva(
463
487
  "bg-accent text-accent-on hover:bg-accent-hover",
464
488
  "light:bg-brand-hull light:text-accent-on light:hover:bg-text-secondary"
465
489
  ],
466
- conversion: "bg-warm text-warm-on hover:bg-warm-hover",
490
+ // The one control whose focus ring is not biolume. It is the system's
491
+ // only sand fill, and a biolume ring three pixels off a sand button puts
492
+ // both of the brand's accents in the same glance. See `docs/decisions/0.7.md` § 37.
493
+ conversion: "bg-warm text-warm-on hover:bg-warm-hover focus-ring-warm",
467
494
  secondary: [
468
495
  "border-hairline-hover border bg-transparent text-text-primary",
469
496
  "hover:border-accent hover:text-accent"
@@ -621,7 +648,7 @@ var CARD = [
621
648
  "group block cursor-pointer",
622
649
  CARD_SURFACE,
623
650
  CARD_HOVER,
624
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
651
+ "focus-ring"
625
652
  ];
626
653
  var kebab = (name) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
627
654
  var scales = Object.keys(typeScale);
@@ -786,7 +813,7 @@ function AccordionTrigger({
786
813
  "font-sans text-lead font-medium text-text-primary",
787
814
  "transition-standard",
788
815
  "hover:text-accent",
789
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
816
+ "focus-ring",
790
817
  "disabled:pointer-events-none disabled:opacity-50",
791
818
  "[&[data-state=open]>svg]:rotate-180",
792
819
  className
@@ -1022,7 +1049,7 @@ function AvatarUpload({
1022
1049
  "transition-standard hover:text-accent hover:border-accent",
1023
1050
  // Focus lives on the input, which is hidden: without this, tabbing to
1024
1051
  // the control shows up nowhere.
1025
- "has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-accent",
1052
+ "has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-3 has-[:focus-visible]:outline-accent",
1026
1053
  disabled && "pointer-events-none opacity-50"
1027
1054
  ),
1028
1055
  children: [
@@ -1111,14 +1138,14 @@ function Calendar({
1111
1138
  "rounded-chip inline-flex items-center justify-center",
1112
1139
  "transition-standard cursor-pointer",
1113
1140
  "hover:bg-surface-raised",
1114
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1141
+ "focus-ring",
1115
1142
  "disabled:pointer-events-none disabled:opacity-50"
1116
1143
  ].join(" ");
1117
1144
  const navigation = [
1118
1145
  "size-8 rounded-chip inline-flex items-center justify-center",
1119
1146
  "text-text-secondary transition-standard cursor-pointer",
1120
1147
  "hover:bg-surface-raised hover:text-text-primary",
1121
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1148
+ "focus-ring",
1122
1149
  "disabled:pointer-events-none disabled:opacity-50"
1123
1150
  ].join(" ");
1124
1151
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1237,7 +1264,7 @@ function Checkbox({ className, ...props }) {
1237
1264
  "rounded-chip border-border bg-surface size-5 shrink-0 cursor-pointer border",
1238
1265
  "text-accent-on transition-standard",
1239
1266
  "hover:border-hairline-hover",
1240
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1267
+ "focus-ring",
1241
1268
  "disabled:pointer-events-none disabled:opacity-50",
1242
1269
  "data-[state=checked]:border-accent data-[state=checked]:bg-accent",
1243
1270
  "data-[state=indeterminate]:border-accent data-[state=indeterminate]:bg-accent",
@@ -1280,7 +1307,7 @@ function DateField({
1280
1307
  "font-mono text-ui text-text-primary",
1281
1308
  "transition-standard",
1282
1309
  "hover:border-hairline-hover",
1283
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1310
+ "focus-visible:border-accent focus-ring",
1284
1311
  "disabled:pointer-events-none disabled:opacity-50",
1285
1312
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
1286
1313
  // The native indicator inherits the active theme's scheme.
@@ -1334,7 +1361,7 @@ function DialogContent({
1334
1361
  "rounded-chip text-text-muted absolute top-4 right-4 flex size-8 cursor-pointer items-center justify-center",
1335
1362
  "transition-standard",
1336
1363
  "hover:bg-surface-raised hover:text-text-primary",
1337
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
1364
+ "focus-ring"
1338
1365
  ),
1339
1366
  children: /* @__PURE__ */ jsxRuntime.jsx(Close, {})
1340
1367
  }
@@ -1483,7 +1510,7 @@ function Input({ className, invalid = false, ...props }) {
1483
1510
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
1484
1511
  "transition-standard",
1485
1512
  "hover:border-hairline-hover",
1486
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1513
+ "focus-visible:border-accent focus-ring",
1487
1514
  "disabled:pointer-events-none disabled:opacity-50",
1488
1515
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
1489
1516
  "file:mr-step-sm file:border-0 file:bg-transparent file:font-sans file:text-label file:text-text-secondary",
@@ -1533,7 +1560,7 @@ function PaginationLink({ className, isActive = false, ...props }) {
1533
1560
  "font-sans text-ui text-text-secondary",
1534
1561
  "transition-standard",
1535
1562
  "hover:bg-surface hover:text-text-primary",
1536
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1563
+ "focus-ring",
1537
1564
  isActive && "bg-surface-raised text-text-primary",
1538
1565
  className
1539
1566
  ),
@@ -1548,7 +1575,7 @@ function PaginationPrevious({ className, ...props }) {
1548
1575
  ] });
1549
1576
  }
1550
1577
  function PaginationNext({ className, ...props }) {
1551
- return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina next", className: cn("gap-step-xs", className), ...props, children: [
1578
+ return /* @__PURE__ */ jsxRuntime.jsxs(PaginationLink, { "aria-label": "P\xE1gina siguiente", className: cn("gap-step-xs", className), ...props, children: [
1552
1579
  "Siguiente",
1553
1580
  /* @__PURE__ */ jsxRuntime.jsx(ChevronRight, {})
1554
1581
  ] });
@@ -1618,7 +1645,7 @@ function RadioGroupItem({ className, ...props }) {
1618
1645
  "rounded-pill border-border bg-surface size-5 shrink-0 cursor-pointer border",
1619
1646
  "transition-standard",
1620
1647
  "hover:border-hairline-hover",
1621
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1648
+ "focus-ring",
1622
1649
  "disabled:pointer-events-none disabled:opacity-50",
1623
1650
  "data-[state=checked]:border-accent",
1624
1651
  className
@@ -1645,7 +1672,7 @@ function SelectTrigger({
1645
1672
  "font-sans text-ui text-text-primary",
1646
1673
  "transition-standard",
1647
1674
  "hover:border-hairline-hover",
1648
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1675
+ "focus-visible:border-accent focus-ring",
1649
1676
  "disabled:pointer-events-none disabled:opacity-50",
1650
1677
  "data-[placeholder]:text-text-muted",
1651
1678
  className
@@ -1795,7 +1822,7 @@ function SheetContent({ className, side, children, ...props }) {
1795
1822
  "rounded-chip text-text-muted absolute top-4 right-4 flex size-8 cursor-pointer items-center justify-center",
1796
1823
  "transition-standard",
1797
1824
  "hover:bg-surface-raised hover:text-text-primary",
1798
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
1825
+ "focus-ring"
1799
1826
  ),
1800
1827
  children: /* @__PURE__ */ jsxRuntime.jsx(Close, {})
1801
1828
  }
@@ -1870,7 +1897,7 @@ function Switch({ className, ...props }) {
1870
1897
  "rounded-pill border-border bg-surface-raised inline-flex h-6 w-11 shrink-0 cursor-pointer items-center border",
1871
1898
  "transition-standard",
1872
1899
  "hover:border-hairline-hover",
1873
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1900
+ "focus-ring",
1874
1901
  "disabled:pointer-events-none disabled:opacity-50",
1875
1902
  "data-[state=checked]:border-accent data-[state=checked]:bg-accent",
1876
1903
  className
@@ -1889,7 +1916,7 @@ function Switch({ className, ...props }) {
1889
1916
  );
1890
1917
  }
1891
1918
  function Table({ className, ...props }) {
1892
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
1919
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { tabIndex: 0, className: "rounded-card border-hairline focus-ring w-full overflow-x-auto border", children: /* @__PURE__ */ jsxRuntime.jsx(
1893
1920
  "table",
1894
1921
  {
1895
1922
  className: cn("w-full caption-bottom border-collapse font-sans text-ui", className),
@@ -1942,7 +1969,13 @@ function TableCell({ className, ...props }) {
1942
1969
  return /* @__PURE__ */ jsxRuntime.jsx("td", { className: cn("px-step-sm py-step-sm text-text-secondary align-middle", className), ...props });
1943
1970
  }
1944
1971
  function TableCaption({ className, ...props }) {
1945
- return /* @__PURE__ */ jsxRuntime.jsx("caption", { className: cn("mt-step-sm text-label text-text-muted", className), ...props });
1972
+ return /* @__PURE__ */ jsxRuntime.jsx(
1973
+ "caption",
1974
+ {
1975
+ className: cn("px-step-sm pt-step-sm pb-step-sm text-label text-text-muted", className),
1976
+ ...props
1977
+ }
1978
+ );
1946
1979
  }
1947
1980
  function Tabs({ className, ...props }) {
1948
1981
  return /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { className: cn("gap-step-md flex flex-col", className), ...props });
@@ -1971,7 +2004,7 @@ function TabsTrigger({
1971
2004
  "font-sans text-label text-text-secondary",
1972
2005
  "transition-standard",
1973
2006
  "hover:text-text-primary",
1974
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2007
+ "focus-ring",
1975
2008
  "disabled:pointer-events-none disabled:opacity-50",
1976
2009
  "data-[state=active]:bg-surface-raised data-[state=active]:text-text-primary",
1977
2010
  className
@@ -1988,7 +2021,7 @@ function TabsContent({
1988
2021
  TabsPrimitive__namespace.Content,
1989
2022
  {
1990
2023
  className: cn(
1991
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2024
+ "focus-ring",
1992
2025
  className
1993
2026
  ),
1994
2027
  ...props
@@ -2007,7 +2040,7 @@ function Textarea({ className, invalid = false, ...props }) {
2007
2040
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
2008
2041
  "transition-standard",
2009
2042
  "hover:border-hairline-hover",
2010
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2043
+ "focus-visible:border-accent focus-ring",
2011
2044
  "disabled:pointer-events-none disabled:opacity-50",
2012
2045
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
2013
2046
  className
@@ -2062,7 +2095,7 @@ function Toast({ className, variant, children, ...props }) {
2062
2095
  "rounded-chip text-text-muted absolute top-3 right-3 flex size-7 cursor-pointer items-center justify-center",
2063
2096
  "transition-standard",
2064
2097
  "hover:bg-surface-raised hover:text-text-primary",
2065
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
2098
+ "focus-ring"
2066
2099
  ),
2067
2100
  children: /* @__PURE__ */ jsxRuntime.jsx(Close, {})
2068
2101
  }
@@ -2202,11 +2235,20 @@ function ArticleCard({
2202
2235
  " min de lectura"
2203
2236
  ] }, "lectura") : null
2204
2237
  ].filter(Boolean);
2205
- return /* @__PURE__ */ jsxRuntime.jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "gap-step-sm flex h-full flex-col", children: [
2206
- 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: [
2207
- i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
2208
- m
2209
- ] }, i)) }) : null,
2238
+ return /* @__PURE__ */ jsxRuntime.jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "flex flex-col h-full gap-step-sm", children: [
2239
+ meta.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
2240
+ Text,
2241
+ {
2242
+ variant: "meta",
2243
+ tone: "muted",
2244
+ as: "p",
2245
+ className: "flex items-center gap-step-xs",
2246
+ children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-step-xs", children: [
2247
+ i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
2248
+ m
2249
+ ] }, i))
2250
+ }
2251
+ ) : null,
2210
2252
  /* @__PURE__ */ jsxRuntime.jsx(
2211
2253
  Text,
2212
2254
  {
@@ -2217,8 +2259,15 @@ function ArticleCard({
2217
2259
  }
2218
2260
  ),
2219
2261
  excerpt ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-2", children: excerpt }) : null,
2220
- tags && tags.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-xs mt-auto flex flex-wrap pt-step-sm", children: tags.map(
2221
- (t) => tagAsChild ? /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: category({ active: false }), children: tagAsChild({ tag: t, children: t }) }, t) : /* @__PURE__ */ jsxRuntime.jsx(CategoryBadge, { children: t }, t)
2262
+ tags && tags.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap mt-auto gap-step-xs pt-step-sm", children: tags.map(
2263
+ (t) => tagAsChild ? /* @__PURE__ */ jsxRuntime.jsx(
2264
+ reactSlot.Slot,
2265
+ {
2266
+ className: category({ active: false }),
2267
+ children: tagAsChild({ tag: t, children: t })
2268
+ },
2269
+ t
2270
+ ) : /* @__PURE__ */ jsxRuntime.jsx(CategoryBadge, { children: t }, t)
2222
2271
  ) }) : null
2223
2272
  ] }) });
2224
2273
  }
@@ -2304,21 +2353,21 @@ function ProgressBar({
2304
2353
  }
2305
2354
  );
2306
2355
  }
2307
- var CONTROL = "rounded-chip transition-standard cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
2356
+ var CONTROL = "rounded-chip transition-standard cursor-pointer focus-ring";
2308
2357
  function SkipButton({
2309
- segundos,
2358
+ seconds,
2310
2359
  className,
2311
2360
  size: size2,
2312
- onSaltar
2361
+ onSkip
2313
2362
  }) {
2314
2363
  return /* @__PURE__ */ jsxRuntime.jsx(
2315
2364
  "button",
2316
2365
  {
2317
2366
  type: "button",
2318
- onClick: () => onSaltar(segundos),
2367
+ onClick: () => onSkip(seconds),
2319
2368
  className: cn("text-text-muted hover:text-text-primary", CONTROL, className),
2320
- "aria-label": segundos < 0 ? "Retroceder 15 segundos" : "Adelantar 15 segundos",
2321
- children: segundos < 0 ? /* @__PURE__ */ jsxRuntime.jsx(GoBackSeconds, { className: size2 }) : /* @__PURE__ */ jsxRuntime.jsx(AdvanceSeconds, { className: size2 })
2369
+ "aria-label": seconds < 0 ? "Retroceder 15 segundos" : "Adelantar 15 segundos",
2370
+ children: seconds < 0 ? /* @__PURE__ */ jsxRuntime.jsx(GoBackSeconds, { className: size2 }) : /* @__PURE__ */ jsxRuntime.jsx(AdvanceSeconds, { className: size2 })
2322
2371
  }
2323
2372
  );
2324
2373
  }
@@ -2350,8 +2399,8 @@ function SpeedButton({
2350
2399
  function Volume({
2351
2400
  size: size2,
2352
2401
  width,
2353
- silenciado,
2354
- volumen,
2402
+ muted,
2403
+ volume,
2355
2404
  onMute,
2356
2405
  onVolumeChange
2357
2406
  }) {
@@ -2362,8 +2411,8 @@ function Volume({
2362
2411
  type: "button",
2363
2412
  onClick: onMute,
2364
2413
  className: cn("text-text-muted hover:text-text-primary p-1", CONTROL),
2365
- "aria-label": silenciado ? "Activar sonido" : "Silenciar",
2366
- children: silenciado || volumen === 0 ? /* @__PURE__ */ jsxRuntime.jsx(VolumeMuted, { className: size2 }) : /* @__PURE__ */ jsxRuntime.jsx(VolumeOn, { className: size2 })
2414
+ "aria-label": muted ? "Activar sonido" : "Silenciar",
2415
+ children: muted || volume === 0 ? /* @__PURE__ */ jsxRuntime.jsx(VolumeMuted, { className: size2 }) : /* @__PURE__ */ jsxRuntime.jsx(VolumeOn, { className: size2 })
2367
2416
  }
2368
2417
  ),
2369
2418
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -2373,20 +2422,20 @@ function Volume({
2373
2422
  min: "0",
2374
2423
  max: "1",
2375
2424
  step: "0.1",
2376
- value: silenciado ? 0 : volumen,
2425
+ value: muted ? 0 : volume,
2377
2426
  onChange: onVolumeChange,
2378
2427
  className: cn(
2379
2428
  "bg-surface-raised rounded-pill h-1 cursor-pointer appearance-none",
2380
2429
  "[accent-color:var(--color-accent)]",
2381
2430
  width
2382
2431
  ),
2383
- "aria-label": "Volume"
2432
+ "aria-label": "Volumen"
2384
2433
  }
2385
2434
  )
2386
2435
  ] });
2387
2436
  }
2388
- function PlayIcon({ className, cargando, error, playing }) {
2389
- if (cargando) return /* @__PURE__ */ jsxRuntime.jsx(Spinner, { className: cn("motion-safe:animate-spin", className) });
2437
+ function PlayIcon({ className, loading, error, playing }) {
2438
+ if (loading) return /* @__PURE__ */ jsxRuntime.jsx(Spinner, { className: cn("motion-safe:animate-spin", className) });
2390
2439
  if (error) return /* @__PURE__ */ jsxRuntime.jsx(Retry, { className });
2391
2440
  if (playing) return /* @__PURE__ */ jsxRuntime.jsx(Pause, { className });
2392
2441
  return /* @__PURE__ */ jsxRuntime.jsx(Play, { className });
@@ -2406,7 +2455,7 @@ function PlayButton({
2406
2455
  onClick: onToggle,
2407
2456
  className: cn(
2408
2457
  "text-accent-on transition-standard cursor-pointer",
2409
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2458
+ "focus-ring",
2410
2459
  state.error ? "bg-error hover:bg-error/80" : "bg-accent hover:bg-accent-hover",
2411
2460
  className
2412
2461
  ),
@@ -2575,7 +2624,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2575
2624
  );
2576
2625
  const progress = duration > 0 ? currentTime / duration * 100 : 0;
2577
2626
  const playLabel = hasError ? "Reintentar" : isPlaying ? "Pausar" : "Reproducir";
2578
- const playState = { cargando: isLoading, error: hasError, playing: isPlaying };
2627
+ const playState = { loading: isLoading, error: hasError, playing: isPlaying };
2579
2628
  const pointer = {
2580
2629
  onPointerDown: handlePointerDown,
2581
2630
  onPointerMove: handlePointerMove,
@@ -2616,7 +2665,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2616
2665
  ] })
2617
2666
  ] }),
2618
2667
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
2619
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: -15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
2668
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: -15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
2620
2669
  /* @__PURE__ */ jsxRuntime.jsx(
2621
2670
  PlayButton,
2622
2671
  {
@@ -2627,7 +2676,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2627
2676
  ...playState
2628
2677
  }
2629
2678
  ),
2630
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: 15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
2679
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: 15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
2631
2680
  /* @__PURE__ */ jsxRuntime.jsx(
2632
2681
  SpeedButton,
2633
2682
  {
@@ -2656,7 +2705,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2656
2705
  ] }),
2657
2706
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-step-md", children: /* @__PURE__ */ jsxRuntime.jsx(ProgressBar, { height: "h-1.5", knob: 14, progress, ...pointer }) }),
2658
2707
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-center", children: [
2659
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: -15, className: "p-2", size: "w-6 h-6", onSaltar: skip }),
2708
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: -15, className: "p-2", size: "w-6 h-6", onSkip: skip }),
2660
2709
  /* @__PURE__ */ jsxRuntime.jsx(
2661
2710
  PlayButton,
2662
2711
  {
@@ -2668,7 +2717,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2668
2717
  ...playState
2669
2718
  }
2670
2719
  ),
2671
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: 15, className: "p-2", size: "w-6 h-6", onSaltar: skip }),
2720
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: 15, className: "p-2", size: "w-6 h-6", onSkip: skip }),
2672
2721
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm ml-auto flex items-center", children: [
2673
2722
  /* @__PURE__ */ jsxRuntime.jsx(
2674
2723
  SpeedButton,
@@ -2683,8 +2732,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2683
2732
  {
2684
2733
  size: "w-4 h-4",
2685
2734
  width: "w-16",
2686
- silenciado: isMuted,
2687
- volumen: volume,
2735
+ muted: isMuted,
2736
+ volume,
2688
2737
  onMute: toggleMute,
2689
2738
  onVolumeChange: handleVolumeChange
2690
2739
  }
@@ -2706,7 +2755,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2706
2755
  ] }),
2707
2756
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2708
2757
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
2709
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: -15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
2758
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: -15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
2710
2759
  /* @__PURE__ */ jsxRuntime.jsx(
2711
2760
  PlayButton,
2712
2761
  {
@@ -2717,7 +2766,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2717
2766
  ...playState
2718
2767
  }
2719
2768
  ),
2720
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: 15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip })
2769
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: 15, className: "p-1.5", size: "w-5 h-5", onSkip: skip })
2721
2770
  ] }),
2722
2771
  /* @__PURE__ */ jsxRuntime.jsx(
2723
2772
  SpeedButton,
@@ -2742,7 +2791,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2742
2791
  ] }),
2743
2792
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2744
2793
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex items-center", children: [
2745
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: -15, className: "p-2", size: "w-5 h-5", onSaltar: skip }),
2794
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: -15, className: "p-2", size: "w-5 h-5", onSkip: skip }),
2746
2795
  /* @__PURE__ */ jsxRuntime.jsx(
2747
2796
  PlayButton,
2748
2797
  {
@@ -2753,7 +2802,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2753
2802
  ...playState
2754
2803
  }
2755
2804
  ),
2756
- /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { segundos: 15, className: "p-2", size: "w-5 h-5", onSaltar: skip })
2805
+ /* @__PURE__ */ jsxRuntime.jsx(SkipButton, { seconds: 15, className: "p-2", size: "w-5 h-5", onSkip: skip })
2757
2806
  ] }),
2758
2807
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-center", children: [
2759
2808
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -2769,8 +2818,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2769
2818
  {
2770
2819
  size: "w-5 h-5",
2771
2820
  width: "w-20",
2772
- silenciado: isMuted,
2773
- volumen: volume,
2821
+ muted: isMuted,
2822
+ volume,
2774
2823
  onMute: toggleMute,
2775
2824
  onVolumeChange: handleVolumeChange
2776
2825
  }
@@ -2796,7 +2845,7 @@ function Blockquote({ children, author, source, className, ...props }) {
2796
2845
  }
2797
2846
  );
2798
2847
  }
2799
- var LINK = "transition-standard hover:text-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent rounded-chip cursor-pointer";
2848
+ var LINK = "transition-standard hover:text-accent focus-ring rounded-chip cursor-pointer";
2800
2849
  function Breadcrumb({
2801
2850
  items,
2802
2851
  homeHref = "/",
@@ -2857,7 +2906,7 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2857
2906
  "gap-step-xs rounded-chip flex items-center px-2 py-1",
2858
2907
  "text-label font-mono text-text-muted cursor-pointer",
2859
2908
  "transition-standard hover:bg-surface hover:text-text-primary",
2860
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
2909
+ "focus-ring"
2861
2910
  ),
2862
2911
  children: [
2863
2912
  copiado ? /* @__PURE__ */ jsxRuntime.jsx(Check, { className: "text-accent" }) : /* @__PURE__ */ jsxRuntime.jsx(Copy, {}),
@@ -2967,20 +3016,32 @@ function MascotFace({
2967
3016
  );
2968
3017
  }
2969
3018
  var FACE = "w-[66px] max-w-none";
2970
- function EmptyState({
2971
- expression,
2972
- title,
2973
- description,
2974
- action,
2975
- basePath,
2976
- className,
2977
- ...props
2978
- }) {
3019
+ function EmptyState(props) {
3020
+ if (props.variant === "inline") {
3021
+ const { variant: variant2, title: title2, description: description2, action: action2, icon, className: className2, ...rest2 } = props;
3022
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3023
+ "div",
3024
+ {
3025
+ className: cn(
3026
+ "py-step-lg px-step-md gap-step-xs flex flex-col items-center text-center",
3027
+ className2
3028
+ ),
3029
+ ...rest2,
3030
+ children: [
3031
+ icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-muted shrink-0", children: icon }) : null,
3032
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "muted", as: "p", className: "max-w-measure", children: title2 }),
3033
+ description2 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "max-w-measure font-normal", children: description2 }) : null,
3034
+ action2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-step-xs", children: action2 }) : null
3035
+ ]
3036
+ }
3037
+ );
3038
+ }
3039
+ const { variant, title, description, action, expression, basePath, className, ...rest } = props;
2979
3040
  return /* @__PURE__ */ jsxRuntime.jsxs(
2980
3041
  "div",
2981
3042
  {
2982
3043
  className: cn(CARD_SURFACE, "p-step-lg gap-step-sm flex flex-col items-center text-center", className),
2983
- ...props,
3044
+ ...rest,
2984
3045
  children: [
2985
3046
  /* @__PURE__ */ jsxRuntime.jsx(MascotFace, { expression, className: FACE, basePath }),
2986
3047
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", as: "p", className: "font-medium", children: title }),
@@ -3169,7 +3230,7 @@ function EventCalendar({
3169
3230
  ] }),
3170
3231
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex flex-wrap items-center", children: [
3171
3232
  /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", size: "sm", children: editing ? "Guardar" : "A\xF1adir" }),
3172
- editing ? /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "tertiary", size: "sm", onClick: cancel, children: "./cancel" }) : null
3233
+ editing ? /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "tertiary", size: "sm", onClick: cancel, children: "./cancelar" }) : null
3173
3234
  ] })
3174
3235
  ] }) : null
3175
3236
  ]
@@ -3177,73 +3238,129 @@ function EventCalendar({
3177
3238
  )
3178
3239
  ] });
3179
3240
  }
3180
- function Footer({
3181
- social,
3182
- year = (/* @__PURE__ */ new Date()).getFullYear(),
3183
- children,
3184
- brand: brand2,
3185
- className,
3186
- ...props
3241
+ function SocialRow({ social }) {
3242
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-wrap items-center gap-[18px]", children: social.map((socialLink) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
3243
+ "a",
3244
+ {
3245
+ href: socialLink.href,
3246
+ "aria-label": socialLink.label,
3247
+ className: cn(
3248
+ "text-text-muted hover:text-accent transition-standard block cursor-pointer text-[19px]",
3249
+ "rounded-chip focus-ring"
3250
+ ),
3251
+ children: socialLink.icon
3252
+ }
3253
+ ) }, socialLink.href)) });
3254
+ }
3255
+ function Signature({
3256
+ year,
3257
+ href,
3258
+ className
3187
3259
  }) {
3188
- const signature = /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "meta", tone: "muted", as: "p", className: "ml-auto shrink-0", children: [
3260
+ const domain = href ? /* @__PURE__ */ jsxRuntime.jsx(
3261
+ "a",
3262
+ {
3263
+ href,
3264
+ className: "text-accent hover:text-text-primary transition-standard rounded-chip focus-ring cursor-pointer",
3265
+ children: naming.domain
3266
+ }
3267
+ ) : naming.domain;
3268
+ return /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "meta", tone: "muted", as: "p", className: cn("shrink-0", className), children: [
3189
3269
  /* @__PURE__ */ jsxRuntime.jsxs("span", { "aria-hidden": "true", className: "text-accent", children: [
3190
3270
  "$",
3191
3271
  " "
3192
3272
  ] }),
3193
3273
  "cd ~/",
3194
- naming.domain,
3274
+ domain,
3195
3275
  "/",
3196
3276
  year,
3197
3277
  /* @__PURE__ */ jsxRuntime.jsx(
3198
3278
  "span",
3199
3279
  {
3200
3280
  "aria-hidden": "true",
3201
- className: "bg-accent motion-safe:caret ml-[0.2em] inline-block h-[1em] w-[0.5em] translate-y-[0.15em]"
3281
+ className: "bg-accent motion-safe:pulse-accent rounded-pill ml-1 inline-block h-[1em] w-[2px] align-middle"
3202
3282
  }
3203
3283
  )
3204
3284
  ] });
3205
- const rows = [
3206
- brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: brand2 }, "marca") : null,
3207
- children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-md flex flex-wrap items-center", children }, "enlaces") : null,
3208
- social && social.length > 0 ? (
3209
- // 18px of separation, from the document. It is not a `spacing` step: it is
3210
- // the rhythm of a row of icons, not that of a page.
3211
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex items-center gap-[18px]", children: social.map((socialLink) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
3285
+ }
3286
+ function Shell({
3287
+ className,
3288
+ contentClassName,
3289
+ children,
3290
+ ...props
3291
+ }) {
3292
+ return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
3293
+ "div",
3294
+ {
3295
+ className: cn("max-w-wide px-step-md py-step-xl mx-auto flex flex-col", contentClassName),
3296
+ children
3297
+ }
3298
+ ) });
3299
+ }
3300
+ function Footer({
3301
+ variant,
3302
+ columns,
3303
+ description,
3304
+ action,
3305
+ linkAsChild,
3306
+ social,
3307
+ brand: brand2,
3308
+ year = (/* @__PURE__ */ new Date()).getFullYear(),
3309
+ signatureHref,
3310
+ className,
3311
+ ...rest
3312
+ }) {
3313
+ if (variant === "full") {
3314
+ const link = (href, external, content) => {
3315
+ const classes = cn(
3316
+ "font-mono text-meta text-text-secondary hover:text-accent transition-standard cursor-pointer",
3317
+ "rounded-chip focus-ring"
3318
+ );
3319
+ const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3320
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-text-muted", children: "./" }),
3321
+ content
3322
+ ] });
3323
+ if (linkAsChild) {
3324
+ return /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: classes, children: linkAsChild({ href, children: inner }) });
3325
+ }
3326
+ return /* @__PURE__ */ jsxRuntime.jsx(
3212
3327
  "a",
3213
3328
  {
3214
- href: socialLink.href,
3215
- "aria-label": socialLink.label,
3216
- className: cn(
3217
- "text-text-muted hover:text-accent transition-standard block cursor-pointer text-[19px]",
3218
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
3219
- ),
3220
- children: socialLink.icon
3329
+ href,
3330
+ className: classes,
3331
+ ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
3332
+ children: inner
3221
3333
  }
3222
- ) }, socialLink.href)) }, "socialLinks")
3223
- ) : null
3334
+ );
3335
+ };
3336
+ return /* @__PURE__ */ jsxRuntime.jsxs(Shell, { className, ...rest, children: [
3337
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xl flex flex-col md:flex-row md:justify-between", children: [
3338
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-md flex max-w-xs flex-col", children: [
3339
+ brand2,
3340
+ description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
3341
+ social && social.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(SocialRow, { social }) : null,
3342
+ action
3343
+ ] }),
3344
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-lg grid grid-cols-2 sm:grid-cols-3", children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex flex-col", children: [
3345
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "h3", children: column.title }),
3346
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-step-xs flex flex-col", children: column.links.map((columnLink) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: link(columnLink.href, columnLink.external, columnLink.label) }, columnLink.href)) })
3347
+ ] }, column.title)) })
3348
+ ] }),
3349
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-hairline mt-step-xl pt-step-lg border-t", children: /* @__PURE__ */ jsxRuntime.jsx(Signature, { year, href: signatureHref, className: "text-center sm:text-right" }) })
3350
+ ] });
3351
+ }
3352
+ const rows = [
3353
+ brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: brand2 }, "brand") : null,
3354
+ social && social.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(SocialRow, { social }, "social") : null
3224
3355
  ].filter(Boolean);
3225
- const [first, ...rest] = rows;
3226
- 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: [
3356
+ const [first, ...others] = rows;
3357
+ return /* @__PURE__ */ jsxRuntime.jsxs(Shell, { className, contentClassName: "gap-step-lg", ...rest, children: [
3227
3358
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-md flex flex-wrap items-center", children: [
3228
3359
  first ?? null,
3229
- signature
3360
+ /* @__PURE__ */ jsxRuntime.jsx(Signature, { year, href: signatureHref, className: "ml-auto" })
3230
3361
  ] }),
3231
- rest
3232
- ] }) });
3233
- }
3234
- function FooterLink({ asChild = false, className, ...props }) {
3235
- const Root18 = asChild ? reactSlot.Slot : "a";
3236
- return /* @__PURE__ */ jsxRuntime.jsx(
3237
- Root18,
3238
- {
3239
- className: cn(
3240
- "font-mono text-meta text-text-secondary hover:text-accent transition-standard cursor-pointer",
3241
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
3242
- className
3243
- ),
3244
- ...props
3245
- }
3246
- );
3362
+ others
3363
+ ] });
3247
3364
  }
3248
3365
  function Hero({
3249
3366
  title,
@@ -3351,7 +3468,7 @@ function LinkRow({
3351
3468
  }
3352
3469
  );
3353
3470
  }
3354
- function Nav({ brand: brand2, children, actions, className, ...props }) {
3471
+ function Nav({ brand: brand2, children, actions, size: size2 = "default", className, ...props }) {
3355
3472
  return /* @__PURE__ */ jsxRuntime.jsx(
3356
3473
  "header",
3357
3474
  {
@@ -3364,14 +3481,23 @@ function Nav({ brand: brand2, children, actions, className, ...props }) {
3364
3481
  className
3365
3482
  ),
3366
3483
  ...props,
3367
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-step-md h-nav gap-step-lg mx-auto flex items-center", children: [
3368
- brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: brand2 }) : null,
3369
- children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "gap-step-md flex items-center", children: [
3370
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
3371
- children
3372
- ] }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
3373
- actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
3374
- ] })
3484
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
3485
+ "div",
3486
+ {
3487
+ className: cn(
3488
+ "max-w-wide px-step-md gap-step-lg mx-auto flex items-center",
3489
+ size2 === "compact" ? "h-nav-compact" : "h-nav"
3490
+ ),
3491
+ children: [
3492
+ brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: brand2 }) : null,
3493
+ children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "gap-step-md flex items-center", children: [
3494
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
3495
+ children
3496
+ ] }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
3497
+ actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
3498
+ ]
3499
+ }
3500
+ )
3375
3501
  }
3376
3502
  );
3377
3503
  }
@@ -3383,7 +3509,7 @@ function NavItem({ active = false, asChild = false, className, children, ...prop
3383
3509
  "aria-current": active ? "page" : void 0,
3384
3510
  className: cn(
3385
3511
  "font-mono text-meta transition-standard cursor-pointer",
3386
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
3512
+ "rounded-chip focus-ring",
3387
3513
  active ? "text-accent underline decoration-1 underline-offset-4" : "text-text-secondary hover:text-accent",
3388
3514
  className
3389
3515
  ),
@@ -3391,7 +3517,7 @@ function NavItem({ active = false, asChild = false, className, children, ...prop
3391
3517
  children: [
3392
3518
  active ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-accent", children: "[" }) : null,
3393
3519
  /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: active ? "text-accent" : "text-text-muted", children: "./" }),
3394
- children,
3520
+ /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children }),
3395
3521
  active ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-accent", children: "]" }) : null
3396
3522
  ]
3397
3523
  }
@@ -3402,14 +3528,14 @@ function NewsletterForm({
3402
3528
  description,
3403
3529
  state = "idle",
3404
3530
  onSubmitEmail,
3405
- successMessage = "Ya est\xE1s dentro. Te llega un email cada dos semanas, y nada m\xE1s.",
3406
- errorMessage = "No se pudo suscribir ese email. Rev\xEDsalo y vuelve a intentar.",
3531
+ successMessage = "Ya est\xE1s dentro. Te llega un correo cada dos semanas, y nada m\xE1s.",
3532
+ errorMessage = "No se pudo suscribir ese correo. Rev\xEDsalo y vuelve a intentar.",
3407
3533
  disclaimer,
3408
3534
  expression,
3409
3535
  basePath,
3410
3536
  submitLabel = "Suscribirme",
3411
3537
  placeholder = "tu@email.dev",
3412
- fieldLabel = "Email electr\xF3nico",
3538
+ fieldLabel = "Correo electr\xF3nico",
3413
3539
  nameField = false,
3414
3540
  nameLabel = "Nombre",
3415
3541
  namePlaceholder = "C\xF3mo te llamas",
@@ -3605,70 +3731,11 @@ function ScrollingProgressBar({
3605
3731
  }
3606
3732
  );
3607
3733
  }
3608
- function SidebarItem({
3609
- active = false,
3610
- asChild = false,
3611
- badge: badge2,
3612
- className,
3613
- children,
3614
- ...props
3615
- }) {
3616
- const Root18 = asChild ? reactSlot.Slot : "a";
3617
- return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
3618
- Root18,
3619
- {
3620
- "aria-current": active ? "page" : void 0,
3621
- className: cn(
3622
- "rounded-chip px-step-sm gap-step-xs flex cursor-pointer items-center py-1.5",
3623
- "font-mono text-meta transition-standard",
3624
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
3625
- // The active item is `surfaceRaised` with primary ink, same as
3626
- // `TabsTrigger`. NOT biolume: `tokens.ts` says so explicitly — light
3627
- // accent passes over background and over surface, but over
3628
- // surfaceRaised it measures 4.2 and is not a text color there. The
3629
- // accent stays on the `▸`, which is decorative and gets the 3:1
3630
- // threshold.
3631
- active ? "bg-surface-raised text-text-primary" : "text-text-secondary hover:text-text-primary hover:bg-surface-raised",
3632
- className
3633
- ),
3634
- ...props,
3635
- children: [
3636
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: active ? "text-accent" : "text-text-muted", children: "\u25B8" }),
3637
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children }),
3638
- badge2 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-muted shrink-0", children: badge2 }) : null
3639
- ]
3640
- }
3641
- ) });
3642
- }
3643
- function SidebarNav({
3644
- title,
3645
- version,
3646
- branch,
3647
- children,
3648
- className,
3649
- ...props
3650
- }) {
3651
- const footer = [version, branch].filter(Boolean);
3652
- return /* @__PURE__ */ jsxRuntime.jsxs(
3653
- "nav",
3654
- {
3655
- "aria-label": typeof title === "string" ? title : "Administraci\xF3n",
3656
- className: cn(
3657
- "border-hairline bg-surface p-step-sm gap-step-sm flex h-full flex-col border-r",
3658
- className
3659
- ),
3660
- ...props,
3661
- children: [
3662
- title ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "px-step-sm", children: title }) : null,
3663
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-0.5 flex flex-1 flex-col", children }),
3664
- footer.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "border-hairline px-step-sm pt-step-sm border-t", children: footer.map((p, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
3665
- i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: " \xB7 " }) : null,
3666
- p
3667
- ] }, i)) }) : null
3668
- ]
3669
- }
3670
- );
3671
- }
3734
+ var DELTA = {
3735
+ up: { glyph: ChevronUp, label: "sube" },
3736
+ down: { glyph: ChevronDown, label: "baja" },
3737
+ flat: { glyph: Minus, label: "sin cambio" }
3738
+ };
3672
3739
  function Stat({
3673
3740
  value,
3674
3741
  label,
@@ -3676,30 +3743,52 @@ function Stat({
3676
3743
  progress,
3677
3744
  icon,
3678
3745
  description,
3746
+ delta,
3747
+ spark,
3679
3748
  className,
3680
3749
  ...props
3681
3750
  }) {
3751
+ const DeltaGlyph = delta ? DELTA[delta.direction].glyph : null;
3682
3752
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(CARD_SURFACE, "p-step-lg gap-step-xs flex flex-col", className), ...props, children: [
3683
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "gap-step-xs flex items-center", children: [
3753
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex items-start justify-between", children: [
3754
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "min-w-0", children: label }),
3684
3755
  icon ? (
3685
3756
  // `aria-hidden` is not needed: the system's glyphs already carry it.
3686
- // What IS needed is that it does not shrink next to a long title,
3687
- // because a squashed icon reads as a different icon.
3688
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: icon })
3689
- ) : null,
3690
- label
3757
+ // The circle is a SURFACE — the tint at 10 %, same as an alert's — and
3758
+ // the colour stays on the glyph, which is § 4b and also what keeps it
3759
+ // on the 3:1 graphical threshold instead of text's 4.5.
3760
+ /* @__PURE__ */ jsxRuntime.jsx(
3761
+ "span",
3762
+ {
3763
+ className: cn(
3764
+ "size-control-icon-sm text-ui flex shrink-0 items-center justify-center rounded-full",
3765
+ tone === "neutral" ? "bg-accent/10 text-accent" : "bg-warm/10 text-warm"
3766
+ ),
3767
+ children: icon
3768
+ }
3769
+ )
3770
+ ) : null
3691
3771
  ] }),
3692
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "stat", as: "p", tone: tone === "alerta" ? "warm" : "accent", children: value }),
3772
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "stat", as: "p", tone: tone === "neutral" ? "primary" : "warm", children: value }),
3773
+ delta && DeltaGlyph ? /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "label", tone: "secondary", as: "p", className: "gap-step-xs flex items-center", children: [
3774
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
3775
+ DELTA[delta.direction].label,
3776
+ " "
3777
+ ] }),
3778
+ /* @__PURE__ */ jsxRuntime.jsx(DeltaGlyph, { className: "shrink-0" }),
3779
+ delta.value
3780
+ ] }) : null,
3693
3781
  description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
3694
3782
  typeof progress === "number" ? /* @__PURE__ */ jsxRuntime.jsx(
3695
3783
  Progress,
3696
3784
  {
3697
3785
  value: progress,
3698
- tone: tone === "alerta" ? "warm" : "accent",
3786
+ tone: tone === "neutral" ? "accent" : "warm",
3699
3787
  label: `${label}: ${progress}%`,
3700
3788
  className: "mt-step-sm"
3701
3789
  }
3702
- ) : null
3790
+ ) : null,
3791
+ spark ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto pt-step-md", children: spark }) : null
3703
3792
  ] });
3704
3793
  }
3705
3794
  function TalkCard({
@@ -3761,7 +3850,7 @@ function TalkCard({
3761
3850
  return /* @__PURE__ */ jsxRuntime.jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx("article", { className: "gap-step-sm flex h-full flex-col", children: body }) });
3762
3851
  }
3763
3852
  function ThemeToggle({
3764
- label = "Cambiar de theme",
3853
+ label = "Cambiar de tema",
3765
3854
  onThemeChange,
3766
3855
  variant = "secondary",
3767
3856
  size: size2 = "icon",
@@ -3805,7 +3894,7 @@ function TableOfContents({
3805
3894
  const classes = cn(
3806
3895
  "px-step-sm -ml-px block border-l",
3807
3896
  "font-sans text-label transition-standard",
3808
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
3897
+ "focus-ring",
3809
3898
  "cursor-pointer",
3810
3899
  item2.nested && "pl-step-lg",
3811
3900
  "border-transparent text-text-secondary hover:text-text-primary",
@@ -3875,7 +3964,7 @@ function Logo({
3875
3964
  ] });
3876
3965
  }
3877
3966
 
3878
- // src/lib/social.tsx
3967
+ // src/social/index.tsx
3879
3968
  var social_exports = {};
3880
3969
  __export(social_exports, {
3881
3970
  Discord: () => Discord,
@@ -3885,61 +3974,149 @@ __export(social_exports, {
3885
3974
  LinkedIn: () => LinkedIn,
3886
3975
  Newsletter: () => Newsletter,
3887
3976
  Rss: () => Rss,
3977
+ Website: () => Website,
3888
3978
  X: () => X,
3889
3979
  YouTube: () => YouTube
3890
3980
  });
3891
- function Brand({ children, ...props }) {
3892
- return /* @__PURE__ */ jsxRuntime.jsx(
3893
- "svg",
3981
+
3982
+ // src/social/data.ts
3983
+ var SOCIAL_STROKE_WIDTH = 1.6;
3984
+ var SOCIAL_VIEW_BOX = "0 0 24 24";
3985
+ var gitHubGlyph = {
3986
+ kind: "brand",
3987
+ shapes: [
3894
3988
  {
3895
- viewBox: "0 0 24 24",
3896
- width: "1em",
3897
- height: "1em",
3898
- fill: "currentColor",
3899
- "aria-hidden": "true",
3900
- focusable: "false",
3901
- ...props,
3902
- children
3989
+ tag: "path",
3990
+ d: "M12 .5C5.73.5.5 5.73.5 12a11.5 11.5 0 0 0 7.86 10.91c.58.1.79-.25.79-.55 0-.27-.01-1.18-.02-2.14-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11 11 0 0 1 5.79 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.12 3.05.74.8 1.18 1.83 1.18 3.09 0 4.42-2.69 5.39-5.25 5.68.41.36.78 1.06.78 2.14 0 1.55-.01 2.79-.01 3.17 0 .3.2.66.79.55A11.5 11.5 0 0 0 23.5 12C23.5 5.73 18.27.5 12 .5Z"
3991
+ }
3992
+ ]
3993
+ };
3994
+ var linkedInGlyph = {
3995
+ kind: "brand",
3996
+ shapes: [
3997
+ {
3998
+ tag: "path",
3999
+ d: "M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5ZM3 9h4v12H3V9Zm7 0h3.8v1.71h.05a4.17 4.17 0 0 1 3.75-2.06c4.01 0 4.75 2.64 4.75 6.07V21h-4v-5.4c0-1.29-.02-2.95-1.8-2.95-1.8 0-2.08 1.4-2.08 2.85V21h-3.97V9Z"
4000
+ }
4001
+ ]
4002
+ };
4003
+ var xGlyph = {
4004
+ kind: "brand",
4005
+ shapes: [
4006
+ {
4007
+ tag: "path",
4008
+ d: "M17.53 3h3.06l-6.69 7.64L21.75 21h-6.16l-4.83-6.3L5.25 21H2.19l7.15-8.17L2.5 3h6.32l4.36 5.77L17.53 3Zm-1.07 16.17h1.7L7.62 4.74H5.8l10.66 14.43Z"
4009
+ }
4010
+ ]
4011
+ };
4012
+ var instagramGlyph = {
4013
+ kind: "brand",
4014
+ shapes: [
4015
+ {
4016
+ tag: "path",
4017
+ d: "M12 2.16c3.2 0 3.58.01 4.85.07 1.17.05 1.8.25 2.23.41.56.22.96.48 1.38.9.42.42.68.82.9 1.38.16.42.36 1.06.41 2.23.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.05 1.17-.25 1.8-.41 2.23-.22.56-.48.96-.9 1.38-.42.42-.82.68-1.38.9-.42.16-1.06.36-2.23.41-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-1.17-.05-1.8-.25-2.23-.41-.56-.22-.96-.48-1.38-.9-.42-.42-.68-.82-.9-1.38-.16-.42-.36-1.06-.41-2.23C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85c.05-1.17.25-1.8.41-2.23.22-.56.48-.96.9-1.38.42-.42.82-.68 1.38-.9.42-.16 1.06-.36 2.23-.41C8.42 2.17 8.8 2.16 12 2.16Zm0 3.68a6.16 6.16 0 1 0 0 12.32 6.16 6.16 0 0 0 0-12.32Zm0 10.16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm7.85-10.4a1.44 1.44 0 1 1-2.88 0 1.44 1.44 0 0 1 2.88 0Z"
3903
4018
  }
4019
+ ]
4020
+ };
4021
+ var discordGlyph = {
4022
+ kind: "brand",
4023
+ shapes: [
4024
+ {
4025
+ tag: "path",
4026
+ d: "M20.32 5.56A18.5 18.5 0 0 0 15.7 4.1a.07.07 0 0 0-.07.04c-.2.36-.42.82-.58 1.19a17 17 0 0 0-5.1 0c-.16-.38-.39-.83-.59-1.19a.07.07 0 0 0-.07-.04c-1.6.28-3.15.77-4.62 1.46a.06.06 0 0 0-.03.03C1.66 10 .9 14.28 1.28 18.5a.08.08 0 0 0 .03.05 18.6 18.6 0 0 0 5.6 2.84.07.07 0 0 0 .08-.03c.43-.59.81-1.21 1.14-1.86a.07.07 0 0 0-.04-.1c-.6-.23-1.18-.51-1.74-.83a.07.07 0 0 1-.01-.12l.35-.27a.07.07 0 0 1 .07-.01 13.3 13.3 0 0 0 11.3 0 .07.07 0 0 1 .08.01l.34.27c.04.04.04.1-.01.12-.55.33-1.13.6-1.74.83a.07.07 0 0 0-.04.1c.34.65.72 1.27 1.14 1.86a.07.07 0 0 0 .08.03 18.5 18.5 0 0 0 5.6-2.84.07.07 0 0 0 .04-.05c.45-4.88-.75-9.12-3.18-12.88a.06.06 0 0 0-.03-.03ZM8.4 15.93c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.9 2.25-2.02 2.25Zm7.22 0c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.89 2.25-2.02 2.25Z"
4027
+ }
4028
+ ]
4029
+ };
4030
+ var youTubeGlyph = {
4031
+ kind: "brand",
4032
+ shapes: [
4033
+ {
4034
+ tag: "path",
4035
+ d: "M23.5 6.9a3 3 0 0 0-2.12-2.12C19.5 4.27 12 4.27 12 4.27s-7.5 0-9.38.51A3 3 0 0 0 .5 6.9 31.3 31.3 0 0 0 0 12a31.3 31.3 0 0 0 .5 5.1 3 3 0 0 0 2.12 2.12c1.88.51 9.38.51 9.38.51s7.5 0 9.38-.51a3 3 0 0 0 2.12-2.12A31.3 31.3 0 0 0 24 12a31.3 31.3 0 0 0-.5-5.1ZM9.6 15.6V8.4l6.24 3.6-6.24 3.6Z"
4036
+ }
4037
+ ]
4038
+ };
4039
+ var rssGlyph = {
4040
+ kind: "functional",
4041
+ shapes: [
4042
+ { tag: "path", d: "M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16" },
4043
+ { tag: "circle", cx: 5, cy: 19, r: 1.6, solid: true }
4044
+ ]
4045
+ };
4046
+ var emailGlyph = {
4047
+ kind: "functional",
4048
+ shapes: [
4049
+ { tag: "rect", x: 2.75, y: 4.75, width: 18.5, height: 14.5, rx: 2 },
4050
+ { tag: "path", d: "m3.5 7.5 7.4 5.2a2 2 0 0 0 2.2 0l7.4-5.2" }
4051
+ ]
4052
+ };
4053
+ var newsletterGlyph = {
4054
+ kind: "functional",
4055
+ shapes: [
4056
+ { tag: "path", d: "M18 8.5a6 6 0 1 0-12 0c0 5-2 6.5-2 6.5h16s-2-1.5-2-6.5" },
4057
+ { tag: "path", d: "M13.7 19a2 2 0 0 1-3.4 0" }
4058
+ ]
4059
+ };
4060
+ var websiteGlyph = {
4061
+ kind: "functional",
4062
+ shapes: [
4063
+ { tag: "circle", cx: 12, cy: 12, r: 9.25 },
4064
+ { tag: "path", d: "M2.75 12h18.5" },
4065
+ { tag: "path", d: "M12 2.75a14 14 0 0 1 0 18.5a14 14 0 0 1 0-18.5" }
4066
+ ]
4067
+ };
4068
+ var SOLID = { fill: "currentColor", stroke: "none" };
4069
+ function drawShape(shape, index) {
4070
+ if (shape.tag === "path") {
4071
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { d: shape.d, ...shape.solid ? SOLID : {} }, index);
4072
+ }
4073
+ if (shape.tag === "circle") {
4074
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: shape.cx, cy: shape.cy, r: shape.r, ...shape.solid ? SOLID : {} }, index);
4075
+ }
4076
+ return /* @__PURE__ */ jsxRuntime.jsx(
4077
+ "rect",
4078
+ {
4079
+ x: shape.x,
4080
+ y: shape.y,
4081
+ width: shape.width,
4082
+ height: shape.height,
4083
+ rx: shape.rx
4084
+ },
4085
+ index
3904
4086
  );
3905
4087
  }
3906
- function Functional({ children, ...props }) {
4088
+ function Glyph2({ glyph, ...props }) {
4089
+ const brand2 = glyph.kind === "brand";
3907
4090
  return /* @__PURE__ */ jsxRuntime.jsx(
3908
4091
  "svg",
3909
4092
  {
3910
- viewBox: "0 0 24 24",
4093
+ viewBox: SOCIAL_VIEW_BOX,
3911
4094
  width: "1em",
3912
4095
  height: "1em",
3913
- fill: "none",
3914
- stroke: "currentColor",
3915
- strokeWidth: 1.6,
3916
- strokeLinecap: "round",
3917
- strokeLinejoin: "round",
4096
+ fill: brand2 ? "currentColor" : "none",
4097
+ ...brand2 ? {} : {
4098
+ stroke: "currentColor",
4099
+ strokeWidth: SOCIAL_STROKE_WIDTH,
4100
+ strokeLinecap: "round",
4101
+ strokeLinejoin: "round"
4102
+ },
3918
4103
  "aria-hidden": "true",
3919
4104
  focusable: "false",
3920
4105
  ...props,
3921
- children
4106
+ children: glyph.shapes.map(drawShape)
3922
4107
  }
3923
4108
  );
3924
4109
  }
3925
- var GitHub = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 .5C5.73.5.5 5.73.5 12a11.5 11.5 0 0 0 7.86 10.91c.58.1.79-.25.79-.55 0-.27-.01-1.18-.02-2.14-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11 11 0 0 1 5.79 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.12 3.05.74.8 1.18 1.83 1.18 3.09 0 4.42-2.69 5.39-5.25 5.68.41.36.78 1.06.78 2.14 0 1.55-.01 2.79-.01 3.17 0 .3.2.66.79.55A11.5 11.5 0 0 0 23.5 12C23.5 5.73 18.27.5 12 .5Z" }) });
3926
- var LinkedIn = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5ZM3 9h4v12H3V9Zm7 0h3.8v1.71h.05a4.17 4.17 0 0 1 3.75-2.06c4.01 0 4.75 2.64 4.75 6.07V21h-4v-5.4c0-1.29-.02-2.95-1.8-2.95-1.8 0-2.08 1.4-2.08 2.85V21h-3.97V9Z" }) });
3927
- var X = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.53 3h3.06l-6.69 7.64L21.75 21h-6.16l-4.83-6.3L5.25 21H2.19l7.15-8.17L2.5 3h6.32l4.36 5.77L17.53 3Zm-1.07 16.17h1.7L7.62 4.74H5.8l10.66 14.43Z" }) });
3928
- var Instagram = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2.16c3.2 0 3.58.01 4.85.07 1.17.05 1.8.25 2.23.41.56.22.96.48 1.38.9.42.42.68.82.9 1.38.16.42.36 1.06.41 2.23.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.05 1.17-.25 1.8-.41 2.23-.22.56-.48.96-.9 1.38-.42.42-.82.68-1.38.9-.42.16-1.06.36-2.23.41-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-1.17-.05-1.8-.25-2.23-.41-.56-.22-.96-.48-1.38-.9-.42-.42-.68-.82-.9-1.38-.16-.42-.36-1.06-.41-2.23C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85c.05-1.17.25-1.8.41-2.23.22-.56.48-.96.9-1.38.42-.42.82-.68 1.38-.9.42-.16 1.06-.36 2.23-.41C8.42 2.17 8.8 2.16 12 2.16Zm0 3.68a6.16 6.16 0 1 0 0 12.32 6.16 6.16 0 0 0 0-12.32Zm0 10.16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm7.85-10.4a1.44 1.44 0 1 1-2.88 0 1.44 1.44 0 0 1 2.88 0Z" }) });
3929
- var Discord = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.32 5.56A18.5 18.5 0 0 0 15.7 4.1a.07.07 0 0 0-.07.04c-.2.36-.42.82-.58 1.19a17 17 0 0 0-5.1 0c-.16-.38-.39-.83-.59-1.19a.07.07 0 0 0-.07-.04c-1.6.28-3.15.77-4.62 1.46a.06.06 0 0 0-.03.03C1.66 10 .9 14.28 1.28 18.5a.08.08 0 0 0 .03.05 18.6 18.6 0 0 0 5.6 2.84.07.07 0 0 0 .08-.03c.43-.59.81-1.21 1.14-1.86a.07.07 0 0 0-.04-.1c-.6-.23-1.18-.51-1.74-.83a.07.07 0 0 1-.01-.12l.35-.27a.07.07 0 0 1 .07-.01 13.3 13.3 0 0 0 11.3 0 .07.07 0 0 1 .08.01l.34.27c.04.04.04.1-.01.12-.55.33-1.13.6-1.74.83a.07.07 0 0 0-.04.1c.34.65.72 1.27 1.14 1.86a.07.07 0 0 0 .08.03 18.5 18.5 0 0 0 5.6-2.84.07.07 0 0 0 .04-.05c.45-4.88-.75-9.12-3.18-12.88a.06.06 0 0 0-.03-.03ZM8.4 15.93c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.9 2.25-2.02 2.25Zm7.22 0c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.89 2.25-2.02 2.25Z" }) });
3930
- var YouTube = (props) => /* @__PURE__ */ jsxRuntime.jsx(Brand, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M23.5 6.9a3 3 0 0 0-2.12-2.12C19.5 4.27 12 4.27 12 4.27s-7.5 0-9.38.51A3 3 0 0 0 .5 6.9 31.3 31.3 0 0 0 0 12a31.3 31.3 0 0 0 .5 5.1 3 3 0 0 0 2.12 2.12c1.88.51 9.38.51 9.38.51s7.5 0 9.38-.51a3 3 0 0 0 2.12-2.12A31.3 31.3 0 0 0 24 12a31.3 31.3 0 0 0-.5-5.1ZM9.6 15.6V8.4l6.24 3.6-6.24 3.6Z" }) });
3931
- var Rss = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Functional, { ...props, children: [
3932
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16" }),
3933
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "5", cy: "19", r: "1.6", fill: "currentColor", stroke: "none" })
3934
- ] });
3935
- var Email = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Functional, { ...props, children: [
3936
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2.75", y: "4.75", width: "18.5", height: "14.5", rx: "2" }),
3937
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m3.5 7.5 7.4 5.2a2 2 0 0 0 2.2 0l7.4-5.2" })
3938
- ] });
3939
- var Newsletter = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Functional, { ...props, children: [
3940
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 8.5a6 6 0 1 0-12 0c0 5-2 6.5-2 6.5h16s-2-1.5-2-6.5" }),
3941
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13.7 19a2 2 0 0 1-3.4 0" })
3942
- ] });
4110
+ var GitHub = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: gitHubGlyph, ...props });
4111
+ var LinkedIn = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: linkedInGlyph, ...props });
4112
+ var X = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: xGlyph, ...props });
4113
+ var Instagram = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: instagramGlyph, ...props });
4114
+ var Discord = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: discordGlyph, ...props });
4115
+ var YouTube = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: youTubeGlyph, ...props });
4116
+ var Rss = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: rssGlyph, ...props });
4117
+ var Email = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: emailGlyph, ...props });
4118
+ var Newsletter = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: newsletterGlyph, ...props });
4119
+ var Website = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph2, { glyph: websiteGlyph, ...props });
3943
4120
 
3944
4121
  exports.ASSETS_PATH = ASSETS_PATH;
3945
4122
  exports.Accordion = Accordion;
@@ -4009,7 +4186,6 @@ exports.DropdownMenuTrigger = DropdownMenuTrigger;
4009
4186
  exports.EmptyState = EmptyState;
4010
4187
  exports.EventCalendar = EventCalendar;
4011
4188
  exports.Footer = Footer;
4012
- exports.FooterLink = FooterLink;
4013
4189
  exports.Hero = Hero;
4014
4190
  exports.Input = Input;
4015
4191
  exports.Isotype = Isotype;
@@ -4056,8 +4232,6 @@ exports.SheetFooter = SheetFooter;
4056
4232
  exports.SheetHeader = SheetHeader;
4057
4233
  exports.SheetTitle = SheetTitle;
4058
4234
  exports.SheetTrigger = SheetTrigger;
4059
- exports.SidebarItem = SidebarItem;
4060
- exports.SidebarNav = SidebarNav;
4061
4235
  exports.Skeleton = Skeleton;
4062
4236
  exports.Stat = Stat;
4063
4237
  exports.Switch = Switch;