tempest-react-sdk 0.73.0 → 0.74.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 (132) hide show
  1. package/README.md +6 -4
  2. package/dist/br/MapMarkers.cjs +1 -1
  3. package/dist/br/MapMarkers.cjs.map +1 -1
  4. package/dist/br/MapMarkers.js +19 -22
  5. package/dist/br/MapMarkers.js.map +1 -1
  6. package/dist/components/AIChat/AIChatTurn.cjs +1 -1
  7. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  8. package/dist/components/AIChat/AIChatTurn.js +1 -1
  9. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  10. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  11. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  12. package/dist/components/Button/Button.cjs +1 -1
  13. package/dist/components/Button/Button.cjs.map +1 -1
  14. package/dist/components/Button/Button.js +41 -36
  15. package/dist/components/Button/Button.js.map +1 -1
  16. package/dist/components/Button/Button.module.cjs.map +1 -1
  17. package/dist/components/Button/Button.module.js.map +1 -1
  18. package/dist/components/Button/ButtonContent.cjs +2 -0
  19. package/dist/components/Button/ButtonContent.cjs.map +1 -0
  20. package/dist/components/Button/ButtonContent.js +34 -0
  21. package/dist/components/Button/ButtonContent.js.map +1 -0
  22. package/dist/components/Button/ButtonSlot.cjs +2 -0
  23. package/dist/components/Button/ButtonSlot.cjs.map +1 -0
  24. package/dist/components/Button/ButtonSlot.js +36 -0
  25. package/dist/components/Button/ButtonSlot.js.map +1 -0
  26. package/dist/components/Button/button-class.cjs +2 -0
  27. package/dist/components/Button/button-class.cjs.map +1 -0
  28. package/dist/components/Button/button-class.js +13 -0
  29. package/dist/components/Button/button-class.js.map +1 -0
  30. package/dist/components/Button/link-rel.cjs +2 -0
  31. package/dist/components/Button/link-rel.cjs.map +1 -0
  32. package/dist/components/Button/link-rel.js +11 -0
  33. package/dist/components/Button/link-rel.js.map +1 -0
  34. package/dist/components/Button/slot.cjs +2 -0
  35. package/dist/components/Button/slot.cjs.map +1 -0
  36. package/dist/components/Button/slot.js +41 -0
  37. package/dist/components/Button/slot.js.map +1 -0
  38. package/dist/components/Collapsible/Collapsible.cjs +1 -1
  39. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  40. package/dist/components/Collapsible/Collapsible.js +1 -1
  41. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  42. package/dist/components/Form/Form.cjs.map +1 -1
  43. package/dist/components/Form/Form.js.map +1 -1
  44. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  45. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  46. package/dist/components/Modal/Modal.cjs +1 -1
  47. package/dist/components/Modal/Modal.cjs.map +1 -1
  48. package/dist/components/Modal/Modal.js +1 -1
  49. package/dist/components/Modal/Modal.js.map +1 -1
  50. package/dist/components/Modal/Modal.module.cjs +1 -1
  51. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  52. package/dist/components/Modal/Modal.module.js +1 -1
  53. package/dist/components/Modal/Modal.module.js.map +1 -1
  54. package/dist/components/Page/Page.cjs +1 -1
  55. package/dist/components/Page/Page.cjs.map +1 -1
  56. package/dist/components/Page/Page.js +23 -39
  57. package/dist/components/Page/Page.js.map +1 -1
  58. package/dist/components/Page/Page.module.cjs +1 -1
  59. package/dist/components/Page/Page.module.cjs.map +1 -1
  60. package/dist/components/Page/Page.module.js +5 -11
  61. package/dist/components/Page/Page.module.js.map +1 -1
  62. package/dist/components/Reveal/Reveal.cjs +2 -0
  63. package/dist/components/Reveal/Reveal.cjs.map +1 -0
  64. package/dist/components/Reveal/Reveal.js +56 -0
  65. package/dist/components/Reveal/Reveal.js.map +1 -0
  66. package/dist/components/Reveal/Reveal.module.cjs +3 -0
  67. package/dist/components/Reveal/Reveal.module.cjs.map +1 -0
  68. package/dist/components/Reveal/Reveal.module.js +7 -0
  69. package/dist/components/Reveal/Reveal.module.js.map +1 -0
  70. package/dist/components/Reveal/reveal-threshold.cjs +2 -0
  71. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -0
  72. package/dist/components/Reveal/reveal-threshold.js +13 -0
  73. package/dist/components/Reveal/reveal-threshold.js.map +1 -0
  74. package/dist/components/SectionHeader/SectionHeader.cjs +2 -0
  75. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -0
  76. package/dist/components/SectionHeader/SectionHeader.js +58 -0
  77. package/dist/components/SectionHeader/SectionHeader.js.map +1 -0
  78. package/dist/components/SectionHeader/SectionHeader.module.cjs +3 -0
  79. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -0
  80. package/dist/components/SectionHeader/SectionHeader.module.js +15 -0
  81. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -0
  82. package/dist/components/Timeline/Timeline.cjs +1 -1
  83. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  84. package/dist/components/Timeline/Timeline.js +22 -15
  85. package/dist/components/Timeline/Timeline.js.map +1 -1
  86. package/dist/components/Timeline/Timeline.module.cjs +1 -1
  87. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  88. package/dist/components/Timeline/Timeline.module.js +1 -1
  89. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  90. package/dist/styles/Reveal.css +2 -0
  91. package/dist/styles/SectionHeader.css +2 -0
  92. package/dist/styles/actions.css +24 -22
  93. package/dist/styles/base.css +3 -1
  94. package/dist/styles/component/AppShell.css +1 -1
  95. package/dist/styles/component/Button.css +24 -22
  96. package/dist/styles/component/Modal.css +2 -2
  97. package/dist/styles/component/Page.css +0 -6
  98. package/dist/styles/component/Reveal.css +9 -0
  99. package/dist/styles/component/SectionHeader.css +9 -0
  100. package/dist/styles/component/Timeline.css +5 -5
  101. package/dist/styles/core.css +3 -1
  102. package/dist/styles/data.css +5 -5
  103. package/dist/styles/inverse.css +147 -0
  104. package/dist/styles/layout.css +9 -7
  105. package/dist/styles/manifest.json +14 -1
  106. package/dist/styles/overlay.css +2 -2
  107. package/dist/styles/utility.css +8 -0
  108. package/dist/styles.css +1 -1
  109. package/dist/tempest-react-sdk.cjs +1 -1
  110. package/dist/tempest-react-sdk.d.ts +353 -4
  111. package/dist/tempest-react-sdk.js +350 -346
  112. package/dist/theme/create-theme.cjs +3 -3
  113. package/dist/theme/create-theme.cjs.map +1 -1
  114. package/dist/theme/create-theme.js +67 -55
  115. package/dist/theme/create-theme.js.map +1 -1
  116. package/dist/theme/inverse-render.cjs +3 -0
  117. package/dist/theme/inverse-render.cjs.map +1 -0
  118. package/dist/theme/inverse-render.js +10 -0
  119. package/dist/theme/inverse-render.js.map +1 -0
  120. package/dist/theme/inverse-surface.cjs +2 -0
  121. package/dist/theme/inverse-surface.cjs.map +1 -0
  122. package/dist/theme/inverse-surface.js +258 -0
  123. package/dist/theme/inverse-surface.js.map +1 -0
  124. package/dist/theme/status-tokens.cjs +2 -0
  125. package/dist/theme/status-tokens.cjs.map +1 -0
  126. package/dist/theme/status-tokens.js +15 -0
  127. package/dist/theme/status-tokens.js.map +1 -0
  128. package/dist/vite/create-vite-config.cjs +1 -1
  129. package/dist/vite/create-vite-config.cjs.map +1 -1
  130. package/dist/vite/create-vite-config.js +6 -4
  131. package/dist/vite/create-vite-config.js.map +1 -1
  132. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ const e=require("../../utils/cn.cjs"),t=require("./SectionHeader.module.cjs");let n=require("react"),r=require("react/jsx-runtime");var i=(0,n.createContext)(null);function a({title:a,eyebrow:o,description:s,actions:c,level:l=2,align:u=`start`,id:d,className:f,...p}){let m=(0,n.useId)(),h=d??m,g=(0,n.useContext)(i)?.register,_=!!a;if((0,n.useLayoutEffect)(()=>{if(g&&_)return g(h)},[g,_,h]),!a&&!o&&!s&&!c)return null;let v=`h${l}`;return(0,r.jsxs)(`header`,{className:e.cn(t.default.header,u===`center`&&t.default.center,f),...p,children:[(0,r.jsxs)(`div`,{className:t.default.headerText,children:[o&&(0,r.jsx)(`div`,{className:t.default.eyebrow,children:o}),a&&(0,r.jsx)(v,{id:h,className:t.default.title,children:a}),s&&(0,r.jsx)(`p`,{className:t.default.description,children:s})]}),c&&(0,r.jsx)(`div`,{className:t.default.actions,children:c})]})}function o({children:e,tone:t,...a}){let[o,s]=(0,n.useState)([]),c=(0,n.useMemo)(()=>({register:e=>(s(t=>[...t,e]),()=>s(t=>t.filter(t=>t!==e)))}),[]),l=a[`aria-labelledby`]!==void 0||a[`aria-label`]!==void 0;return(0,r.jsx)(i.Provider,{value:c,children:(0,r.jsx)(`section`,{"aria-labelledby":l?void 0:o[0],"data-tempest-tone":t,...a,children:e})})}exports.Section=o,exports.SectionHeader=a;
2
+ //# sourceMappingURL=SectionHeader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.cjs","names":[],"sources":["../../../src/components/SectionHeader/SectionHeader.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — a heading block is slots (eyebrow, title, description,\n * actions) plus the three switches that decide its semantics: level, align and the\n * heading id. Splitting them would leave the id away from the heading it names.\n */\nimport { createContext, useContext, useId, useLayoutEffect, useMemo, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SectionHeader.module.css\";\n\nexport type SectionHeaderLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport type SectionHeaderAlign = \"start\" | \"center\";\n\n/**\n * Lets the nearest `<Section>` learn the id of the heading that names it.\n *\n * `register` returns the matching unregister so a heading that unmounts (or\n * changes id) releases the section instead of leaving `aria-labelledby` pointing\n * at an element that no longer exists.\n */\ninterface SectionContextValue {\n register: (headingId: string) => () => void;\n}\n\nconst SectionContext = createContext<SectionContextValue | null>(null);\n\nexport interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLElement>, \"title\" | \"id\"> {\n /** Heading text, rendered as `<h{level}>`. */\n title?: ReactNode;\n /** Short label above the title (category, breadcrumbs). */\n eyebrow?: ReactNode;\n /** Supporting text rendered below the title. */\n description?: ReactNode;\n /** Trailing slot for buttons or menus. */\n actions?: ReactNode;\n /** Heading level — semantics only, the look does not change with it. Default `2`. */\n level?: SectionHeaderLevel;\n /** Horizontal alignment of the text block. Default `\"start\"`. */\n align?: SectionHeaderAlign;\n /** Id of the heading element. Generated with `useId` when absent. */\n id?: string;\n}\n\n/**\n * Header of a page or of one section of it: eyebrow, title, description and\n * actions, with the same look `Page` uses for its own header.\n *\n * The heading level is a prop because one page needs one `<h1>` and many\n * `<h2>` that look alike; the visual stays the same at every level so the\n * outline is picked by meaning, not by size. Inside a `<Section>` the heading\n * id is registered with it, which is what gives the `region` landmark its\n * accessible name.\n *\n * @example\n * <Section>\n * <SectionHeader eyebrow=\"Soluções\" title=\"O que podemos desenvolver\" align=\"center\" />\n * <p>Conteúdo da seção.</p>\n * </Section>\n */\nexport function SectionHeader({\n title,\n eyebrow,\n description,\n actions,\n level = 2,\n align = \"start\",\n id,\n className,\n ...props\n}: SectionHeaderProps) {\n const autoId = useId();\n const headingId = id ?? autoId;\n const section = useContext(SectionContext);\n const register = section?.register;\n const hasTitle = Boolean(title);\n useLayoutEffect(() => {\n if (!register || !hasTitle) return undefined;\n return register(headingId);\n }, [register, hasTitle, headingId]);\n if (!title && !eyebrow && !description && !actions) return null;\n const Heading = `h${level}` as const;\n return (\n <header\n className={cn(styles.header, align === \"center\" && styles.center, className)}\n {...props}\n >\n <div className={styles.headerText}>\n {eyebrow && <div className={styles.eyebrow}>{eyebrow}</div>}\n {title && (\n <Heading id={headingId} className={styles.title}>\n {title}\n </Heading>\n )}\n {description && <p className={styles.description}>{description}</p>}\n </div>\n {actions && <div className={styles.actions}>{actions}</div>}\n </header>\n );\n}\n\n/** Surface tone a {@link Section} can take. */\nexport type SectionTone = \"inverse\";\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement> {\n /**\n * `\"inverse\"` paints the section in the brand color and inverts every color\n * token inside it, by writing `data-tempest-tone=\"inverse\"`. The tokens are\n * opt-in, because most apps never paint a section in the brand: they come\n * from `tempest-react-sdk/styles/inverse.css` for the SDK's own blue, or from\n * `createTheme({ primary, inverse: createInverseSurface })` for yours, each\n * measured against the fill (text and muted text at 4.5:1 or more, the focus\n * ring at 3:1 or more). With neither loaded the attribute matches nothing and\n * the section keeps the page's tokens — legible, not inverted. The prop\n * exists so the tone is typed: a typo in a hand-written attribute fails\n * silently, a typo here fails the build.\n */\n tone?: SectionTone;\n}\n\n/**\n * `<section>` that takes its accessible name from the `SectionHeader` inside it.\n *\n * A `<section>` is exposed as a `region` landmark only when it has an\n * accessible name; without one it is an anonymous group and screen-reader\n * landmark navigation skips it. Wiring `aria-labelledby` to the heading id is\n * the same mechanical step on every page, so the section does it: every\n * `SectionHeader` with a `title` below it registers its id through context (so\n * wrappers in between do not break the link) and the first one mounted names\n * the section; when it unmounts, the next one takes over. An explicit\n * `aria-labelledby` or `aria-label` wins over the registered one, and with no\n * heading the attribute is left off rather than pointing at nothing.\n *\n * @example\n * <Section>\n * <SectionHeader title=\"Planos\" />\n * <PlanGrid />\n * </Section>\n *\n * @example\n * <Section tone=\"inverse\">\n * <SectionHeader title=\"Comece agora\" />\n * <Button>Criar conta</Button>\n * </Section>\n */\nexport function Section({ children, tone, ...props }: SectionProps) {\n const [headingIds, setHeadingIds] = useState<string[]>([]);\n const context = useMemo<SectionContextValue>(\n () => ({\n register: (id: string) => {\n setHeadingIds((current) => [...current, id]);\n return () => setHeadingIds((current) => current.filter((entry) => entry !== id));\n },\n }),\n [],\n );\n const named = props[\"aria-labelledby\"] !== undefined || props[\"aria-label\"] !== undefined;\n return (\n <SectionContext.Provider value={context}>\n <section\n aria-labelledby={named ? undefined : headingIds[0]}\n data-tempest-tone={tone}\n {...props}\n >\n {children}\n </section>\n </SectionContext.Provider>\n );\n}\n"],"mappings":"oIAwBA,IAAM,GAAA,EAAiB,EAAA,cAAA,CAA0C,IAAI,EAmCrE,SAAgB,EAAc,CAC1B,QACA,UACA,cACA,UACA,QAAQ,EACR,QAAQ,QACR,KACA,YACA,GAAG,GACgB,CACnB,IAAM,GAAA,EAAS,EAAA,MAAA,CAAM,EACf,EAAY,GAAM,EAElB,GAAA,EADU,EAAA,WAAA,CAAW,CACV,CAAA,EAAS,SACpB,EAAW,EAAQ,EAKzB,IAJA,EAAA,EAAA,gBAAA,KAAsB,CACd,GAAC,GAAa,EAClB,OAAO,EAAS,CAAS,CAC7B,EAAG,CAAC,EAAU,EAAU,CAAS,CAAC,EAC9B,CAAC,GAAS,CAAC,GAAW,CAAC,GAAe,CAAC,EAAS,OAAO,KAC3D,IAAM,EAAU,IAAI,IACpB,OACI,EAAA,EAAA,KAAA,CAAC,SAAD,CACI,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,IAAU,UAAY,EAAA,QAAO,OAAQ,CAAS,EAC3E,GAAI,EAFR,SAAA,EAII,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,WAAvB,SAAA,CACK,IAAW,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,QAAU,SAAA,CAAa,CAAA,EACzD,IACG,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAI,EAAW,UAAW,EAAA,QAAO,MACrC,SAAA,CACI,CAAA,EAEZ,IAAe,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,SAAA,CAAe,CAAA,CACjE,CACJ,CAAA,EAAA,IAAW,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,QAAU,SAAA,CAAa,CAAA,CACtD,GAEhB,CA8CA,SAAgB,EAAQ,CAAE,WAAU,OAAM,GAAG,GAAuB,CAChE,GAAM,CAAC,EAAY,IAAA,EAAiB,EAAA,SAAA,CAAmB,CAAC,CAAC,EACnD,GAAA,EAAU,EAAA,QAAA,MACL,CACH,SAAW,IACP,EAAe,GAAY,CAAC,GAAG,EAAS,CAAE,CAAC,MAC9B,EAAe,GAAY,EAAQ,OAAQ,GAAU,IAAU,CAAE,CAAC,EAEvF,GACA,CAAC,CACL,EACM,EAAQ,EAAM,qBAAuB,IAAA,IAAa,EAAM,gBAAkB,IAAA,GAChF,OACI,EAAA,EAAA,IAAA,CAAC,EAAe,SAAhB,CAAyB,MAAO,EAC5B,UAAA,EAAA,EAAA,IAAA,CAAC,UAAD,CACI,kBAAiB,EAAQ,IAAA,GAAY,EAAW,GAChD,oBAAmB,EACnB,GAAI,EAEH,UACI,CAAA,CACY,CAAA,CAEjC"}
@@ -0,0 +1,58 @@
1
+ import { cn as e } from "../../utils/cn.js";
2
+ import t from "./SectionHeader.module.js";
3
+ import { createContext as n, useContext as r, useId as i, useLayoutEffect as a, useMemo as o, useState as s } from "react";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ //#region src/components/SectionHeader/SectionHeader.tsx
6
+ var u = n(null);
7
+ function d({ title: n, eyebrow: o, description: s, actions: d, level: f = 2, align: p = "start", id: m, className: h, ...g }) {
8
+ let _ = i(), v = m ?? _, y = r(u)?.register, b = !!n;
9
+ if (a(() => {
10
+ if (y && b) return y(v);
11
+ }, [
12
+ y,
13
+ b,
14
+ v
15
+ ]), !n && !o && !s && !d) return null;
16
+ let x = `h${f}`;
17
+ return /* @__PURE__ */ l("header", {
18
+ className: e(t.header, p === "center" && t.center, h),
19
+ ...g,
20
+ children: [/* @__PURE__ */ l("div", {
21
+ className: t.headerText,
22
+ children: [
23
+ o && /* @__PURE__ */ c("div", {
24
+ className: t.eyebrow,
25
+ children: o
26
+ }),
27
+ n && /* @__PURE__ */ c(x, {
28
+ id: v,
29
+ className: t.title,
30
+ children: n
31
+ }),
32
+ s && /* @__PURE__ */ c("p", {
33
+ className: t.description,
34
+ children: s
35
+ })
36
+ ]
37
+ }), d && /* @__PURE__ */ c("div", {
38
+ className: t.actions,
39
+ children: d
40
+ })]
41
+ });
42
+ }
43
+ function f({ children: e, tone: t, ...n }) {
44
+ let [r, i] = s([]), a = o(() => ({ register: (e) => (i((t) => [...t, e]), () => i((t) => t.filter((t) => t !== e))) }), []), l = n["aria-labelledby"] !== void 0 || n["aria-label"] !== void 0;
45
+ return /* @__PURE__ */ c(u.Provider, {
46
+ value: a,
47
+ children: /* @__PURE__ */ c("section", {
48
+ "aria-labelledby": l ? void 0 : r[0],
49
+ "data-tempest-tone": t,
50
+ ...n,
51
+ children: e
52
+ })
53
+ });
54
+ }
55
+ //#endregion
56
+ export { f as Section, d as SectionHeader };
57
+
58
+ //# sourceMappingURL=SectionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.js","names":[],"sources":["../../../src/components/SectionHeader/SectionHeader.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — a heading block is slots (eyebrow, title, description,\n * actions) plus the three switches that decide its semantics: level, align and the\n * heading id. Splitting them would leave the id away from the heading it names.\n */\nimport { createContext, useContext, useId, useLayoutEffect, useMemo, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SectionHeader.module.css\";\n\nexport type SectionHeaderLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport type SectionHeaderAlign = \"start\" | \"center\";\n\n/**\n * Lets the nearest `<Section>` learn the id of the heading that names it.\n *\n * `register` returns the matching unregister so a heading that unmounts (or\n * changes id) releases the section instead of leaving `aria-labelledby` pointing\n * at an element that no longer exists.\n */\ninterface SectionContextValue {\n register: (headingId: string) => () => void;\n}\n\nconst SectionContext = createContext<SectionContextValue | null>(null);\n\nexport interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLElement>, \"title\" | \"id\"> {\n /** Heading text, rendered as `<h{level}>`. */\n title?: ReactNode;\n /** Short label above the title (category, breadcrumbs). */\n eyebrow?: ReactNode;\n /** Supporting text rendered below the title. */\n description?: ReactNode;\n /** Trailing slot for buttons or menus. */\n actions?: ReactNode;\n /** Heading level — semantics only, the look does not change with it. Default `2`. */\n level?: SectionHeaderLevel;\n /** Horizontal alignment of the text block. Default `\"start\"`. */\n align?: SectionHeaderAlign;\n /** Id of the heading element. Generated with `useId` when absent. */\n id?: string;\n}\n\n/**\n * Header of a page or of one section of it: eyebrow, title, description and\n * actions, with the same look `Page` uses for its own header.\n *\n * The heading level is a prop because one page needs one `<h1>` and many\n * `<h2>` that look alike; the visual stays the same at every level so the\n * outline is picked by meaning, not by size. Inside a `<Section>` the heading\n * id is registered with it, which is what gives the `region` landmark its\n * accessible name.\n *\n * @example\n * <Section>\n * <SectionHeader eyebrow=\"Soluções\" title=\"O que podemos desenvolver\" align=\"center\" />\n * <p>Conteúdo da seção.</p>\n * </Section>\n */\nexport function SectionHeader({\n title,\n eyebrow,\n description,\n actions,\n level = 2,\n align = \"start\",\n id,\n className,\n ...props\n}: SectionHeaderProps) {\n const autoId = useId();\n const headingId = id ?? autoId;\n const section = useContext(SectionContext);\n const register = section?.register;\n const hasTitle = Boolean(title);\n useLayoutEffect(() => {\n if (!register || !hasTitle) return undefined;\n return register(headingId);\n }, [register, hasTitle, headingId]);\n if (!title && !eyebrow && !description && !actions) return null;\n const Heading = `h${level}` as const;\n return (\n <header\n className={cn(styles.header, align === \"center\" && styles.center, className)}\n {...props}\n >\n <div className={styles.headerText}>\n {eyebrow && <div className={styles.eyebrow}>{eyebrow}</div>}\n {title && (\n <Heading id={headingId} className={styles.title}>\n {title}\n </Heading>\n )}\n {description && <p className={styles.description}>{description}</p>}\n </div>\n {actions && <div className={styles.actions}>{actions}</div>}\n </header>\n );\n}\n\n/** Surface tone a {@link Section} can take. */\nexport type SectionTone = \"inverse\";\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement> {\n /**\n * `\"inverse\"` paints the section in the brand color and inverts every color\n * token inside it, by writing `data-tempest-tone=\"inverse\"`. The tokens are\n * opt-in, because most apps never paint a section in the brand: they come\n * from `tempest-react-sdk/styles/inverse.css` for the SDK's own blue, or from\n * `createTheme({ primary, inverse: createInverseSurface })` for yours, each\n * measured against the fill (text and muted text at 4.5:1 or more, the focus\n * ring at 3:1 or more). With neither loaded the attribute matches nothing and\n * the section keeps the page's tokens — legible, not inverted. The prop\n * exists so the tone is typed: a typo in a hand-written attribute fails\n * silently, a typo here fails the build.\n */\n tone?: SectionTone;\n}\n\n/**\n * `<section>` that takes its accessible name from the `SectionHeader` inside it.\n *\n * A `<section>` is exposed as a `region` landmark only when it has an\n * accessible name; without one it is an anonymous group and screen-reader\n * landmark navigation skips it. Wiring `aria-labelledby` to the heading id is\n * the same mechanical step on every page, so the section does it: every\n * `SectionHeader` with a `title` below it registers its id through context (so\n * wrappers in between do not break the link) and the first one mounted names\n * the section; when it unmounts, the next one takes over. An explicit\n * `aria-labelledby` or `aria-label` wins over the registered one, and with no\n * heading the attribute is left off rather than pointing at nothing.\n *\n * @example\n * <Section>\n * <SectionHeader title=\"Planos\" />\n * <PlanGrid />\n * </Section>\n *\n * @example\n * <Section tone=\"inverse\">\n * <SectionHeader title=\"Comece agora\" />\n * <Button>Criar conta</Button>\n * </Section>\n */\nexport function Section({ children, tone, ...props }: SectionProps) {\n const [headingIds, setHeadingIds] = useState<string[]>([]);\n const context = useMemo<SectionContextValue>(\n () => ({\n register: (id: string) => {\n setHeadingIds((current) => [...current, id]);\n return () => setHeadingIds((current) => current.filter((entry) => entry !== id));\n },\n }),\n [],\n );\n const named = props[\"aria-labelledby\"] !== undefined || props[\"aria-label\"] !== undefined;\n return (\n <SectionContext.Provider value={context}>\n <section\n aria-labelledby={named ? undefined : headingIds[0]}\n data-tempest-tone={tone}\n {...props}\n >\n {children}\n </section>\n </SectionContext.Provider>\n );\n}\n"],"mappings":";;;;;AAwBA,IAAM,IAAiB,EAA0C,IAAI;AAmCrE,SAAgB,EAAc,EAC1B,UACA,YACA,gBACA,YACA,WAAQ,GACR,WAAQ,SACR,OACA,cACA,GAAG,KACgB;CACnB,IAAM,IAAS,EAAM,GACf,IAAY,KAAM,GAElB,IADU,EAAW,CACV,CAAA,EAAS,UACpB,IAAW,EAAQ;CAKzB,IAJA,QAAsB;EACd,IAAC,KAAa,GAClB,OAAO,EAAS,CAAS;CAC7B,GAAG;EAAC;EAAU;EAAU;CAAS,CAAC,GAC9B,CAAC,KAAS,CAAC,KAAW,CAAC,KAAe,CAAC,GAAS,OAAO;CAC3D,IAAM,IAAU,IAAI;CACpB,OACI,kBAAC,UAAD;EACI,WAAW,EAAG,EAAO,QAAQ,MAAU,YAAY,EAAO,QAAQ,CAAS;EAC3E,GAAI;EAFR,UAAA,CAII,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAvB,UAAA;IACK,KAAW,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAU,UAAA;IAAa,CAAA;IACzD,KACG,kBAAC,GAAD;KAAS,IAAI;KAAW,WAAW,EAAO;KACrC,UAAA;IACI,CAAA;IAEZ,KAAe,kBAAC,KAAD;KAAG,WAAW,EAAO;KAAc,UAAA;IAAe,CAAA;GACjE;EACJ,CAAA,GAAA,KAAW,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAU,UAAA;EAAa,CAAA,CACtD;;AAEhB;AA8CA,SAAgB,EAAQ,EAAE,aAAU,SAAM,GAAG,KAAuB;CAChE,IAAM,CAAC,GAAY,KAAiB,EAAmB,CAAC,CAAC,GACnD,IAAU,SACL,EACH,WAAW,OACP,GAAe,MAAY,CAAC,GAAG,GAAS,CAAE,CAAC,SAC9B,GAAe,MAAY,EAAQ,QAAQ,MAAU,MAAU,CAAE,CAAC,GAEvF,IACA,CAAC,CACL,GACM,IAAQ,EAAM,uBAAuB,KAAA,KAAa,EAAM,kBAAkB,KAAA;CAChF,OACI,kBAAC,EAAe,UAAhB;EAAyB,OAAO;EAC5B,UAAA,kBAAC,WAAD;GACI,mBAAiB,IAAQ,KAAA,IAAY,EAAW;GAChD,qBAAmB;GACnB,GAAI;GAEH;EACI,CAAA;CACY,CAAA;AAEjC"}
@@ -0,0 +1,3 @@
1
+ require("../../styles/component/SectionHeader.css");
2
+ var e=`tempest_header_38yhB`,t=`tempest_headerText_3YDF-`,n=`tempest_eyebrow_slLcy`,r=`tempest_title_nY6QC`,i=`tempest_description_-Gbs9`,a=`tempest_actions_dzFrP`,o=`tempest_center_lDAVK`,s={header:e,headerText:t,eyebrow:n,title:r,description:i,actions:a,center:o};exports.actions=a,exports.center=o,exports.default=s,exports.description=i,exports.eyebrow=n,exports.header=e,exports.headerText=t,exports.title=r;
3
+ //# sourceMappingURL=SectionHeader.module.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.module.cjs","names":[],"sources":["../../../src/components/SectionHeader/SectionHeader.module.css"],"sourcesContent":[".header {\n display: flex;\n align-items: flex-start;\n gap: var(--tempest-space-4);\n margin-bottom: var(--tempest-space-5);\n flex-wrap: wrap;\n}\n\n.headerText {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.eyebrow {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n margin-bottom: var(--tempest-space-1);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n line-height: var(--tempest-leading-tight);\n}\n\n.description {\n margin: var(--tempest-space-2) 0 0;\n font-size: var(--tempest-text-sm);\n color: var(--tempest-text-muted);\n}\n\n.actions {\n display: flex;\n gap: var(--tempest-space-2);\n flex: 0 0 auto;\n flex-wrap: wrap;\n}\n\n.center {\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.center .actions {\n justify-content: center;\n}\n"],"mappings":";"}
@@ -0,0 +1,15 @@
1
+ import "../../styles/component/SectionHeader.css";
2
+ //#region src/components/SectionHeader/SectionHeader.module.css
3
+ var e = "tempest_header_38yhB", t = "tempest_headerText_3YDF-", n = "tempest_eyebrow_slLcy", r = "tempest_title_nY6QC", i = "tempest_description_-Gbs9", a = "tempest_actions_dzFrP", o = "tempest_center_lDAVK", s = {
4
+ header: e,
5
+ headerText: t,
6
+ eyebrow: n,
7
+ title: r,
8
+ description: i,
9
+ actions: a,
10
+ center: o
11
+ };
12
+ //#endregion
13
+ export { a as actions, o as center, s as default, i as description, n as eyebrow, e as header, t as headerText, r as title };
14
+
15
+ //# sourceMappingURL=SectionHeader.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.module.js","names":[],"sources":["../../../src/components/SectionHeader/SectionHeader.module.css"],"sourcesContent":[".header {\n display: flex;\n align-items: flex-start;\n gap: var(--tempest-space-4);\n margin-bottom: var(--tempest-space-5);\n flex-wrap: wrap;\n}\n\n.headerText {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.eyebrow {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n margin-bottom: var(--tempest-space-1);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n line-height: var(--tempest-leading-tight);\n}\n\n.description {\n margin: var(--tempest-space-2) 0 0;\n font-size: var(--tempest-text-sm);\n color: var(--tempest-text-muted);\n}\n\n.actions {\n display: flex;\n gap: var(--tempest-space-2);\n flex: 0 0 auto;\n flex-wrap: wrap;\n}\n\n.center {\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.center .actions {\n justify-content: center;\n}\n"],"mappings":";"}
@@ -1,2 +1,2 @@
1
- const e=require("../../utils/cn.cjs"),t=require("./Timeline.module.cjs");let n=require("react/jsx-runtime");function r({items:r,connector:i=!0,className:a,...o}){return(0,n.jsx)(`ol`,{className:e.cn(t.default.timeline,i&&t.default.connector,a),...o,children:r.map((a,o)=>{let s=o===r.length-1;return(0,n.jsxs)(`li`,{className:t.default.item,children:[(0,n.jsxs)(`div`,{className:t.default.markerColumn,children:[(0,n.jsx)(`span`,{className:e.cn(t.default.marker,t.default[`marker-${a.marker??`primary`}`]),"aria-hidden":`true`,children:a.icon}),i&&!s&&(0,n.jsx)(`span`,{className:t.default.line,"aria-hidden":`true`})]}),(0,n.jsxs)(`div`,{className:t.default.body,children:[(0,n.jsxs)(`div`,{className:t.default.row,children:[(0,n.jsx)(`span`,{className:t.default.title,children:a.title}),a.meta&&(0,n.jsx)(`span`,{className:t.default.meta,children:a.meta})]}),a.description&&(0,n.jsx)(`p`,{className:t.default.description,children:a.description})]})]},a.id)})})}exports.Timeline=r;
1
+ const e=require("../../utils/cn.cjs"),t=require("./Timeline.module.cjs");let n=require("react/jsx-runtime");var r={primary:t.default.markerPrimary,success:t.default.markerSuccess,warning:t.default.markerWarning,danger:t.default.markerDanger,neutral:t.default.markerNeutral};function i({items:i,connector:a=!0,className:o,...s}){return(0,n.jsx)(`ol`,{className:e.cn(t.default.timeline,o),...s,children:i.map((o,s)=>{let c=s===i.length-1;return(0,n.jsxs)(`li`,{className:t.default.item,children:[(0,n.jsxs)(`div`,{className:t.default.markerColumn,children:[(0,n.jsx)(`span`,{className:e.cn(t.default.marker,r[o.marker??`primary`]),"aria-hidden":`true`,children:o.icon}),a&&!c&&(0,n.jsx)(`span`,{className:t.default.line,"aria-hidden":`true`})]}),(0,n.jsxs)(`div`,{className:t.default.body,children:[(0,n.jsxs)(`div`,{className:t.default.row,children:[(0,n.jsx)(`span`,{className:t.default.title,children:o.title}),o.meta&&(0,n.jsx)(`span`,{className:t.default.meta,children:o.meta})]}),o.description&&(0,n.jsx)(`p`,{className:t.default.description,children:o.description})]})]},o.id)})})}exports.Timeline=i;
2
2
  //# sourceMappingURL=Timeline.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.cjs","names":[],"sources":["../../../src/components/Timeline/Timeline.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Timeline.module.css\";\n\nexport type TimelineMarker = \"primary\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n\nexport interface TimelineItem {\n /** Stable identifier (used as React key). */\n id: string;\n /** Title rendered as the entry headline. */\n title: ReactNode;\n /** Optional subtitle / description below the title. */\n description?: ReactNode;\n /** Right-aligned meta column (timestamps, durations). */\n meta?: ReactNode;\n /** Optional custom icon rendered inside the marker. */\n icon?: ReactNode;\n /** Marker color. Default `\"primary\"`. */\n marker?: TimelineMarker;\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n items: TimelineItem[];\n /** Show the connecting line between markers. Default `true`. */\n connector?: boolean;\n}\n\n/**\n * Vertical event timeline — activity feeds, order trackers, audit logs.\n * Each entry has a marker (color or custom icon), title, optional\n * description and right-aligned meta column.\n *\n * @example\n * <Timeline items={[\n * { id: \"1\", title: \"Pedido criado\", meta: \"10:24\", marker: \"primary\" },\n * { id: \"2\", title: \"Aprovação\", meta: \"10:25\", marker: \"success\" },\n * { id: \"3\", title: \"Saiu pra entrega\", meta: \"11:00\", marker: \"warning\" },\n * ]} />\n */\nexport function Timeline({ items, connector = true, className, ...props }: TimelineProps) {\n return (\n <ol className={cn(styles.timeline, connector && styles.connector, className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={item.id} className={styles.item}>\n <div className={styles.markerColumn}>\n <span\n className={cn(\n styles.marker,\n styles[`marker-${item.marker ?? \"primary\"}`],\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n {connector && !isLast && (\n <span className={styles.line} aria-hidden=\"true\" />\n )}\n </div>\n <div className={styles.body}>\n <div className={styles.row}>\n <span className={styles.title}>{item.title}</span>\n {item.meta && <span className={styles.meta}>{item.meta}</span>}\n </div>\n {item.description && (\n <p className={styles.description}>{item.description}</p>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"4GAuCA,SAAgB,EAAS,CAAE,QAAO,YAAY,GAAM,YAAW,GAAG,GAAwB,CACtF,OACI,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,GAAG,EAAA,QAAO,SAAU,GAAa,EAAA,QAAO,UAAW,CAAS,EAAG,GAAI,EAC7E,SAAA,EAAM,KAAK,EAAM,IAAU,CACxB,IAAM,EAAS,IAAU,EAAM,OAAS,EACxC,OACI,EAAA,EAAA,KAAA,CAAC,KAAD,CAAkB,UAAW,EAAA,QAAO,KAApC,SAAA,EACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,aAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,UAAW,EAAA,GACP,EAAA,QAAO,OACP,EAAA,QAAO,UAAU,EAAK,QAAU,YACpC,EACA,cAAY,OAEX,SAAA,EAAK,IACJ,CAAA,EACL,GAAa,CAAC,IACX,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAM,cAAY,MAAQ,CAAA,CAErD,CACL,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAvB,SAAA,EACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,IAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAQ,SAAA,EAAK,KAAY,CAAA,EAChD,EAAK,OAAQ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAO,SAAA,EAAK,IAAW,CAAA,CAC5D,CACJ,CAAA,EAAA,EAAK,cACF,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,SAAA,EAAK,WAAe,CAAA,CAE1D,CACL,CAAA,CAAA,CAxBK,EAAA,EAAK,EAwBV,CAEZ,CAAC,CACD,CAAA,CAEZ"}
1
+ {"version":3,"file":"Timeline.cjs","names":[],"sources":["../../../src/components/Timeline/Timeline.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Timeline.module.css\";\n\nexport type TimelineMarker = \"primary\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n\n/**\n * The class each marker color applies, keyed by the published CSS-module names.\n *\n * The build exports CSS-module keys in camelCase only (`localsConvention:\n * \"camelCaseOnly\"` in `vite.config.ts`), so a kebab lookup such as\n * `styles[\"marker-primary\"]` is `undefined` in `dist/` — which is how every marker\n * shipped transparent until issue #405. A `Record` over the union also makes the\n * type-checker demand an entry for every color added to {@link TimelineMarker}.\n */\nconst MARKER_CLASS: Record<TimelineMarker, string> = {\n primary: styles.markerPrimary,\n success: styles.markerSuccess,\n warning: styles.markerWarning,\n danger: styles.markerDanger,\n neutral: styles.markerNeutral,\n};\n\nexport interface TimelineItem {\n /** Stable identifier (used as React key). */\n id: string;\n /** Title rendered as the entry headline. */\n title: ReactNode;\n /** Optional subtitle / description below the title. */\n description?: ReactNode;\n /** Right-aligned meta column (timestamps, durations). */\n meta?: ReactNode;\n /** Optional custom icon rendered inside the marker. */\n icon?: ReactNode;\n /** Marker color. Default `\"primary\"`. */\n marker?: TimelineMarker;\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n items: TimelineItem[];\n /** Show the connecting line between markers. Default `true`. */\n connector?: boolean;\n}\n\n/**\n * Vertical event timeline — activity feeds, order trackers, audit logs.\n * Each entry has a marker (color or custom icon), title, optional\n * description and right-aligned meta column.\n *\n * @example\n * <Timeline items={[\n * { id: \"1\", title: \"Pedido criado\", meta: \"10:24\", marker: \"primary\" },\n * { id: \"2\", title: \"Aprovação\", meta: \"10:25\", marker: \"success\" },\n * { id: \"3\", title: \"Saiu pra entrega\", meta: \"11:00\", marker: \"warning\" },\n * ]} />\n */\nexport function Timeline({ items, connector = true, className, ...props }: TimelineProps) {\n return (\n <ol className={cn(styles.timeline, className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={item.id} className={styles.item}>\n <div className={styles.markerColumn}>\n <span\n className={cn(\n styles.marker,\n MARKER_CLASS[item.marker ?? \"primary\"],\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n {connector && !isLast && (\n <span className={styles.line} aria-hidden=\"true\" />\n )}\n </div>\n <div className={styles.body}>\n <div className={styles.row}>\n <span className={styles.title}>{item.title}</span>\n {item.meta && <span className={styles.meta}>{item.meta}</span>}\n </div>\n {item.description && (\n <p className={styles.description}>{item.description}</p>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"4GAeA,IAAM,EAA+C,CACjD,QAAS,EAAA,QAAO,cAChB,QAAS,EAAA,QAAO,cAChB,QAAS,EAAA,QAAO,cAChB,OAAQ,EAAA,QAAO,aACf,QAAS,EAAA,QAAO,aACpB,EAmCA,SAAgB,EAAS,CAAE,QAAO,YAAY,GAAM,YAAW,GAAG,GAAwB,CACtF,OACI,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,GAAG,EAAA,QAAO,SAAU,CAAS,EAAG,GAAI,EAC9C,SAAA,EAAM,KAAK,EAAM,IAAU,CACxB,IAAM,EAAS,IAAU,EAAM,OAAS,EACxC,OACI,EAAA,EAAA,KAAA,CAAC,KAAD,CAAkB,UAAW,EAAA,QAAO,KAApC,SAAA,EACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,aAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,UAAW,EAAA,GACP,EAAA,QAAO,OACP,EAAa,EAAK,QAAU,UAChC,EACA,cAAY,OAEX,SAAA,EAAK,IACJ,CAAA,EACL,GAAa,CAAC,IACX,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAM,cAAY,MAAQ,CAAA,CAErD,CACL,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAvB,SAAA,EACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,IAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAQ,SAAA,EAAK,KAAY,CAAA,EAChD,EAAK,OAAQ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAO,SAAA,EAAK,IAAW,CAAA,CAC5D,CACJ,CAAA,EAAA,EAAK,cACF,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,SAAA,EAAK,WAAe,CAAA,CAE1D,CACL,CAAA,CAAA,CAxBK,EAAA,EAAK,EAwBV,CAEZ,CAAC,CACD,CAAA,CAEZ"}
@@ -2,21 +2,28 @@ import { cn as e } from "../../utils/cn.js";
2
2
  import t from "./Timeline.module.js";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  //#region src/components/Timeline/Timeline.tsx
5
- function i({ items: i, connector: a = !0, className: o, ...s }) {
5
+ var i = {
6
+ primary: t.markerPrimary,
7
+ success: t.markerSuccess,
8
+ warning: t.markerWarning,
9
+ danger: t.markerDanger,
10
+ neutral: t.markerNeutral
11
+ };
12
+ function a({ items: a, connector: o = !0, className: s, ...c }) {
6
13
  return /* @__PURE__ */ n("ol", {
7
- className: e(t.timeline, a && t.connector, o),
8
- ...s,
9
- children: i.map((o, s) => {
10
- let c = s === i.length - 1;
14
+ className: e(t.timeline, s),
15
+ ...c,
16
+ children: a.map((s, c) => {
17
+ let l = c === a.length - 1;
11
18
  return /* @__PURE__ */ r("li", {
12
19
  className: t.item,
13
20
  children: [/* @__PURE__ */ r("div", {
14
21
  className: t.markerColumn,
15
22
  children: [/* @__PURE__ */ n("span", {
16
- className: e(t.marker, t[`marker-${o.marker ?? "primary"}`]),
23
+ className: e(t.marker, i[s.marker ?? "primary"]),
17
24
  "aria-hidden": "true",
18
- children: o.icon
19
- }), a && !c && /* @__PURE__ */ n("span", {
25
+ children: s.icon
26
+ }), o && !l && /* @__PURE__ */ n("span", {
20
27
  className: t.line,
21
28
  "aria-hidden": "true"
22
29
  })]
@@ -26,21 +33,21 @@ function i({ items: i, connector: a = !0, className: o, ...s }) {
26
33
  className: t.row,
27
34
  children: [/* @__PURE__ */ n("span", {
28
35
  className: t.title,
29
- children: o.title
30
- }), o.meta && /* @__PURE__ */ n("span", {
36
+ children: s.title
37
+ }), s.meta && /* @__PURE__ */ n("span", {
31
38
  className: t.meta,
32
- children: o.meta
39
+ children: s.meta
33
40
  })]
34
- }), o.description && /* @__PURE__ */ n("p", {
41
+ }), s.description && /* @__PURE__ */ n("p", {
35
42
  className: t.description,
36
- children: o.description
43
+ children: s.description
37
44
  })]
38
45
  })]
39
- }, o.id);
46
+ }, s.id);
40
47
  })
41
48
  });
42
49
  }
43
50
  //#endregion
44
- export { i as Timeline };
51
+ export { a as Timeline };
45
52
 
46
53
  //# sourceMappingURL=Timeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.js","names":[],"sources":["../../../src/components/Timeline/Timeline.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Timeline.module.css\";\n\nexport type TimelineMarker = \"primary\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n\nexport interface TimelineItem {\n /** Stable identifier (used as React key). */\n id: string;\n /** Title rendered as the entry headline. */\n title: ReactNode;\n /** Optional subtitle / description below the title. */\n description?: ReactNode;\n /** Right-aligned meta column (timestamps, durations). */\n meta?: ReactNode;\n /** Optional custom icon rendered inside the marker. */\n icon?: ReactNode;\n /** Marker color. Default `\"primary\"`. */\n marker?: TimelineMarker;\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n items: TimelineItem[];\n /** Show the connecting line between markers. Default `true`. */\n connector?: boolean;\n}\n\n/**\n * Vertical event timeline — activity feeds, order trackers, audit logs.\n * Each entry has a marker (color or custom icon), title, optional\n * description and right-aligned meta column.\n *\n * @example\n * <Timeline items={[\n * { id: \"1\", title: \"Pedido criado\", meta: \"10:24\", marker: \"primary\" },\n * { id: \"2\", title: \"Aprovação\", meta: \"10:25\", marker: \"success\" },\n * { id: \"3\", title: \"Saiu pra entrega\", meta: \"11:00\", marker: \"warning\" },\n * ]} />\n */\nexport function Timeline({ items, connector = true, className, ...props }: TimelineProps) {\n return (\n <ol className={cn(styles.timeline, connector && styles.connector, className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={item.id} className={styles.item}>\n <div className={styles.markerColumn}>\n <span\n className={cn(\n styles.marker,\n styles[`marker-${item.marker ?? \"primary\"}`],\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n {connector && !isLast && (\n <span className={styles.line} aria-hidden=\"true\" />\n )}\n </div>\n <div className={styles.body}>\n <div className={styles.row}>\n <span className={styles.title}>{item.title}</span>\n {item.meta && <span className={styles.meta}>{item.meta}</span>}\n </div>\n {item.description && (\n <p className={styles.description}>{item.description}</p>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;AAuCA,SAAgB,EAAS,EAAE,UAAO,eAAY,IAAM,cAAW,GAAG,KAAwB;CACtF,OACI,kBAAC,MAAD;EAAI,WAAW,EAAG,EAAO,UAAU,KAAa,EAAO,WAAW,CAAS;EAAG,GAAI;EAC7E,UAAA,EAAM,KAAK,GAAM,MAAU;GACxB,IAAM,IAAS,MAAU,EAAM,SAAS;GACxC,OACI,kBAAC,MAAD;IAAkB,WAAW,EAAO;IAApC,UAAA,CACI,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAvB,UAAA,CACI,kBAAC,QAAD;MACI,WAAW,EACP,EAAO,QACP,EAAO,UAAU,EAAK,UAAU,YACpC;MACA,eAAY;MAEX,UAAA,EAAK;KACJ,CAAA,GACL,KAAa,CAAC,KACX,kBAAC,QAAD;MAAM,WAAW,EAAO;MAAM,eAAY;KAAQ,CAAA,CAErD;IACL,CAAA,GAAA,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAvB,UAAA,CACI,kBAAC,OAAD;MAAK,WAAW,EAAO;MAAvB,UAAA,CACI,kBAAC,QAAD;OAAM,WAAW,EAAO;OAAQ,UAAA,EAAK;MAAY,CAAA,GAChD,EAAK,QAAQ,kBAAC,QAAD;OAAM,WAAW,EAAO;OAAO,UAAA,EAAK;MAAW,CAAA,CAC5D;KACJ,CAAA,GAAA,EAAK,eACF,kBAAC,KAAD;MAAG,WAAW,EAAO;MAAc,UAAA,EAAK;KAAe,CAAA,CAE1D;IACL,CAAA,CAAA;GAxBK,GAAA,EAAK,EAwBV;EAEZ,CAAC;CACD,CAAA;AAEZ"}
1
+ {"version":3,"file":"Timeline.js","names":[],"sources":["../../../src/components/Timeline/Timeline.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Timeline.module.css\";\n\nexport type TimelineMarker = \"primary\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n\n/**\n * The class each marker color applies, keyed by the published CSS-module names.\n *\n * The build exports CSS-module keys in camelCase only (`localsConvention:\n * \"camelCaseOnly\"` in `vite.config.ts`), so a kebab lookup such as\n * `styles[\"marker-primary\"]` is `undefined` in `dist/` — which is how every marker\n * shipped transparent until issue #405. A `Record` over the union also makes the\n * type-checker demand an entry for every color added to {@link TimelineMarker}.\n */\nconst MARKER_CLASS: Record<TimelineMarker, string> = {\n primary: styles.markerPrimary,\n success: styles.markerSuccess,\n warning: styles.markerWarning,\n danger: styles.markerDanger,\n neutral: styles.markerNeutral,\n};\n\nexport interface TimelineItem {\n /** Stable identifier (used as React key). */\n id: string;\n /** Title rendered as the entry headline. */\n title: ReactNode;\n /** Optional subtitle / description below the title. */\n description?: ReactNode;\n /** Right-aligned meta column (timestamps, durations). */\n meta?: ReactNode;\n /** Optional custom icon rendered inside the marker. */\n icon?: ReactNode;\n /** Marker color. Default `\"primary\"`. */\n marker?: TimelineMarker;\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n items: TimelineItem[];\n /** Show the connecting line between markers. Default `true`. */\n connector?: boolean;\n}\n\n/**\n * Vertical event timeline — activity feeds, order trackers, audit logs.\n * Each entry has a marker (color or custom icon), title, optional\n * description and right-aligned meta column.\n *\n * @example\n * <Timeline items={[\n * { id: \"1\", title: \"Pedido criado\", meta: \"10:24\", marker: \"primary\" },\n * { id: \"2\", title: \"Aprovação\", meta: \"10:25\", marker: \"success\" },\n * { id: \"3\", title: \"Saiu pra entrega\", meta: \"11:00\", marker: \"warning\" },\n * ]} />\n */\nexport function Timeline({ items, connector = true, className, ...props }: TimelineProps) {\n return (\n <ol className={cn(styles.timeline, className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={item.id} className={styles.item}>\n <div className={styles.markerColumn}>\n <span\n className={cn(\n styles.marker,\n MARKER_CLASS[item.marker ?? \"primary\"],\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n {connector && !isLast && (\n <span className={styles.line} aria-hidden=\"true\" />\n )}\n </div>\n <div className={styles.body}>\n <div className={styles.row}>\n <span className={styles.title}>{item.title}</span>\n {item.meta && <span className={styles.meta}>{item.meta}</span>}\n </div>\n {item.description && (\n <p className={styles.description}>{item.description}</p>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;AAeA,IAAM,IAA+C;CACjD,SAAS,EAAO;CAChB,SAAS,EAAO;CAChB,SAAS,EAAO;CAChB,QAAQ,EAAO;CACf,SAAS,EAAO;AACpB;AAmCA,SAAgB,EAAS,EAAE,UAAO,eAAY,IAAM,cAAW,GAAG,KAAwB;CACtF,OACI,kBAAC,MAAD;EAAI,WAAW,EAAG,EAAO,UAAU,CAAS;EAAG,GAAI;EAC9C,UAAA,EAAM,KAAK,GAAM,MAAU;GACxB,IAAM,IAAS,MAAU,EAAM,SAAS;GACxC,OACI,kBAAC,MAAD;IAAkB,WAAW,EAAO;IAApC,UAAA,CACI,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAvB,UAAA,CACI,kBAAC,QAAD;MACI,WAAW,EACP,EAAO,QACP,EAAa,EAAK,UAAU,UAChC;MACA,eAAY;MAEX,UAAA,EAAK;KACJ,CAAA,GACL,KAAa,CAAC,KACX,kBAAC,QAAD;MAAM,WAAW,EAAO;MAAM,eAAY;KAAQ,CAAA,CAErD;IACL,CAAA,GAAA,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAvB,UAAA,CACI,kBAAC,OAAD;MAAK,WAAW,EAAO;MAAvB,UAAA,CACI,kBAAC,QAAD;OAAM,WAAW,EAAO;OAAQ,UAAA,EAAK;MAAY,CAAA,GAChD,EAAK,QAAQ,kBAAC,QAAD;OAAM,WAAW,EAAO;OAAO,UAAA,EAAK;MAAW,CAAA,CAC5D;KACJ,CAAA,GAAA,EAAK,eACF,kBAAC,KAAD;MAAG,WAAW,EAAO;MAAc,UAAA,EAAK;KAAe,CAAA,CAE1D;IACL,CAAA,CAAA;GAxBK,GAAA,EAAK,EAwBV;EAEZ,CAAC;CACD,CAAA;AAEZ"}
@@ -1,3 +1,3 @@
1
1
  require("../../styles/component/Timeline.css");
2
- var e=`tempest_timeline_utrkA`,t=`tempest_item_T5xdQ`,n=`tempest_markerColumn_BMe4d`,r=`tempest_marker_kmPV-`,i=`tempest_marker-primary_s9BNB`,a=`tempest_marker-success_areMM`,o=`tempest_marker-warning_rRrS8`,s=`tempest_marker-danger_3GEBk`,c=`tempest_marker-neutral_M2mnw`,l=`tempest_line_CwY-N`,u=`tempest_body_KpMJ6`,d=`tempest_row_AX2ti`,f=`tempest_title_DxfAX`,p=`tempest_meta_GU0ih`,m=`tempest_description_f9sxV`,h={timeline:e,item:t,markerColumn:n,marker:r,markerPrimary:i,markerSuccess:a,markerWarning:o,markerDanger:s,markerNeutral:c,line:l,body:u,row:d,title:f,meta:p,description:m};exports.body=u,exports.default=h,exports.description=m,exports.item=t,exports.line=l,exports.marker=r,exports.markerColumn=n,exports.markerDanger=s,exports.markerNeutral=c,exports.markerPrimary=i,exports.markerSuccess=a,exports.markerWarning=o,exports.meta=p,exports.row=d,exports.timeline=e,exports.title=f;
2
+ var e=`tempest_timeline_utrkA`,t=`tempest_item_T5xdQ`,n=`tempest_markerColumn_BMe4d`,r=`tempest_marker_kmPV-`,i=`tempest_markerPrimary_7elrv`,a=`tempest_markerSuccess_QosJP`,o=`tempest_markerWarning_u04NG`,s=`tempest_markerDanger_xtUJj`,c=`tempest_markerNeutral_y7MKa`,l=`tempest_line_CwY-N`,u=`tempest_body_KpMJ6`,d=`tempest_row_AX2ti`,f=`tempest_title_DxfAX`,p=`tempest_meta_GU0ih`,m=`tempest_description_f9sxV`,h={timeline:e,item:t,markerColumn:n,marker:r,markerPrimary:i,markerSuccess:a,markerWarning:o,markerDanger:s,markerNeutral:c,line:l,body:u,row:d,title:f,meta:p,description:m};exports.body=u,exports.default=h,exports.description=m,exports.item=t,exports.line=l,exports.marker=r,exports.markerColumn=n,exports.markerDanger=s,exports.markerNeutral=c,exports.markerPrimary=i,exports.markerSuccess=a,exports.markerWarning=o,exports.meta=p,exports.row=d,exports.timeline=e,exports.title=f;
3
3
  //# sourceMappingURL=Timeline.module.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.module.cjs","names":[],"sources":["../../../src/components/Timeline/Timeline.module.css"],"sourcesContent":[".timeline {\n list-style: none;\n margin: 0;\n padding: 0;\n font-family: var(--tempest-font-sans);\n color: var(--tempest-text);\n}\n\n.item {\n display: flex;\n gap: var(--tempest-space-3);\n padding-bottom: var(--tempest-space-4);\n}\n\n.item:last-child {\n padding-bottom: 0;\n}\n\n.markerColumn {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 16px;\n padding-top: 4px;\n}\n\n.marker {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-full);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 10px;\n flex: 0 0 auto;\n}\n\n.marker-primary {\n background: var(--tempest-primary);\n}\n.marker-success {\n background: var(--tempest-success-solid, var(--tempest-success));\n}\n.marker-warning {\n background: var(--tempest-warning-solid, var(--tempest-warning));\n}\n.marker-danger {\n background: var(--tempest-danger-solid, var(--tempest-danger));\n}\n.marker-neutral {\n background: var(--tempest-gray-400, var(--tempest-border));\n}\n\n.line {\n flex: 1 1 auto;\n width: 2px;\n background: var(--tempest-border);\n margin-top: 4px;\n}\n\n.body {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n}\n\n.title {\n font-weight: var(--tempest-weight-medium);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n\n.meta {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n white-space: nowrap;\n}\n\n.description {\n margin: var(--tempest-space-1) 0 0;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Timeline.module.cjs","names":[],"sources":["../../../src/components/Timeline/Timeline.module.css"],"sourcesContent":[".timeline {\n list-style: none;\n margin: 0;\n padding: 0;\n font-family: var(--tempest-font-sans);\n color: var(--tempest-text);\n}\n\n.item {\n display: flex;\n gap: var(--tempest-space-3);\n padding-bottom: var(--tempest-space-4);\n}\n\n.item:last-child {\n padding-bottom: 0;\n}\n\n.markerColumn {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 16px;\n padding-top: 4px;\n}\n\n.marker {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-full);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 10px;\n flex: 0 0 auto;\n}\n\n.markerPrimary {\n background: var(--tempest-primary);\n}\n.markerSuccess {\n background: var(--tempest-success-solid, var(--tempest-success));\n}\n.markerWarning {\n background: var(--tempest-warning-solid, var(--tempest-warning));\n}\n.markerDanger {\n background: var(--tempest-danger-solid, var(--tempest-danger));\n}\n.markerNeutral {\n background: var(--tempest-gray-400, var(--tempest-border));\n}\n\n.line {\n flex: 1 1 auto;\n width: 2px;\n background: var(--tempest-border);\n margin-top: 4px;\n}\n\n.body {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n}\n\n.title {\n font-weight: var(--tempest-weight-medium);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n\n.meta {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n white-space: nowrap;\n}\n\n.description {\n margin: var(--tempest-space-1) 0 0;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n"],"mappings":";"}
@@ -1,6 +1,6 @@
1
1
  import "../../styles/component/Timeline.css";
2
2
  //#region src/components/Timeline/Timeline.module.css
3
- var e = "tempest_timeline_utrkA", t = "tempest_item_T5xdQ", n = "tempest_markerColumn_BMe4d", r = "tempest_marker_kmPV-", i = "tempest_marker-primary_s9BNB", a = "tempest_marker-success_areMM", o = "tempest_marker-warning_rRrS8", s = "tempest_marker-danger_3GEBk", c = "tempest_marker-neutral_M2mnw", l = "tempest_line_CwY-N", u = "tempest_body_KpMJ6", d = "tempest_row_AX2ti", f = "tempest_title_DxfAX", p = "tempest_meta_GU0ih", m = "tempest_description_f9sxV", h = {
3
+ var e = "tempest_timeline_utrkA", t = "tempest_item_T5xdQ", n = "tempest_markerColumn_BMe4d", r = "tempest_marker_kmPV-", i = "tempest_markerPrimary_7elrv", a = "tempest_markerSuccess_QosJP", o = "tempest_markerWarning_u04NG", s = "tempest_markerDanger_xtUJj", c = "tempest_markerNeutral_y7MKa", l = "tempest_line_CwY-N", u = "tempest_body_KpMJ6", d = "tempest_row_AX2ti", f = "tempest_title_DxfAX", p = "tempest_meta_GU0ih", m = "tempest_description_f9sxV", h = {
4
4
  timeline: e,
5
5
  item: t,
6
6
  markerColumn: n,
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.module.js","names":[],"sources":["../../../src/components/Timeline/Timeline.module.css"],"sourcesContent":[".timeline {\n list-style: none;\n margin: 0;\n padding: 0;\n font-family: var(--tempest-font-sans);\n color: var(--tempest-text);\n}\n\n.item {\n display: flex;\n gap: var(--tempest-space-3);\n padding-bottom: var(--tempest-space-4);\n}\n\n.item:last-child {\n padding-bottom: 0;\n}\n\n.markerColumn {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 16px;\n padding-top: 4px;\n}\n\n.marker {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-full);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 10px;\n flex: 0 0 auto;\n}\n\n.marker-primary {\n background: var(--tempest-primary);\n}\n.marker-success {\n background: var(--tempest-success-solid, var(--tempest-success));\n}\n.marker-warning {\n background: var(--tempest-warning-solid, var(--tempest-warning));\n}\n.marker-danger {\n background: var(--tempest-danger-solid, var(--tempest-danger));\n}\n.marker-neutral {\n background: var(--tempest-gray-400, var(--tempest-border));\n}\n\n.line {\n flex: 1 1 auto;\n width: 2px;\n background: var(--tempest-border);\n margin-top: 4px;\n}\n\n.body {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n}\n\n.title {\n font-weight: var(--tempest-weight-medium);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n\n.meta {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n white-space: nowrap;\n}\n\n.description {\n margin: var(--tempest-space-1) 0 0;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Timeline.module.js","names":[],"sources":["../../../src/components/Timeline/Timeline.module.css"],"sourcesContent":[".timeline {\n list-style: none;\n margin: 0;\n padding: 0;\n font-family: var(--tempest-font-sans);\n color: var(--tempest-text);\n}\n\n.item {\n display: flex;\n gap: var(--tempest-space-3);\n padding-bottom: var(--tempest-space-4);\n}\n\n.item:last-child {\n padding-bottom: 0;\n}\n\n.markerColumn {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 16px;\n padding-top: 4px;\n}\n\n.marker {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-full);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 10px;\n flex: 0 0 auto;\n}\n\n.markerPrimary {\n background: var(--tempest-primary);\n}\n.markerSuccess {\n background: var(--tempest-success-solid, var(--tempest-success));\n}\n.markerWarning {\n background: var(--tempest-warning-solid, var(--tempest-warning));\n}\n.markerDanger {\n background: var(--tempest-danger-solid, var(--tempest-danger));\n}\n.markerNeutral {\n background: var(--tempest-gray-400, var(--tempest-border));\n}\n\n.line {\n flex: 1 1 auto;\n width: 2px;\n background: var(--tempest-border);\n margin-top: 4px;\n}\n\n.body {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n}\n\n.title {\n font-weight: var(--tempest-weight-medium);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n\n.meta {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n white-space: nowrap;\n}\n\n.description {\n margin: var(--tempest-space-1) 0 0;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n line-height: var(--tempest-leading-snug);\n}\n"],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ @import "./component/Reveal.css";
@@ -0,0 +1,2 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ @import "./component/SectionHeader.css";
@@ -1,27 +1,29 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
- .tempest_button_2ZuB7{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));border-radius:var(--tempest-control-radius,var(--tempest-radius-md));font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-none);letter-spacing:var(--tempest-tracking-normal);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:var(--tempest-transition-base);box-shadow:var(--tempest-shadow-xs);border:1px solid #0000;text-decoration:none;display:inline-flex;position:relative}
2
+ .tempest_button_2ZuB7{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));border-radius:var(--tempest-control-radius,var(--tempest-radius-md));font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-none);letter-spacing:var(--tempest-tracking-normal);color:var(--_tempest-button-fg);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:var(--tempest-transition-base);box-shadow:var(--tempest-shadow-xs);border:1px solid #0000;text-decoration:none;display:inline-flex;position:relative}
3
3
  .tempest_button_2ZuB7:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
4
- @media (hover:hover) and (pointer:fine){.tempest_button_2ZuB7:hover:not(:disabled){box-shadow:var(--tempest-shadow-sm)}}
5
- .tempest_button_2ZuB7:active:not(:disabled){box-shadow:var(--tempest-shadow-xs);transform:translateY(1px)}
6
- .tempest_button_2ZuB7:disabled{opacity:.55;box-shadow:none}
7
- .tempest_primary_s1sM6{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground)}
8
- .tempest_primary_s1sM6:hover:not(:disabled){background-color:var(--tempest-primary-hover)}
9
- .tempest_primary_s1sM6:active:not(:disabled){background-color:var(--tempest-primary-active)}
10
- .tempest_secondary_R0waJ{background-color:var(--tempest-surface);color:var(--tempest-text);border-color:var(--tempest-border)}
11
- .tempest_secondary_R0waJ:hover:not(:disabled){background-color:var(--tempest-surface-2);border-color:var(--tempest-border-strong)}
12
- .tempest_danger_V4fX8{background-color:var(--tempest-danger-solid);color:var(--tempest-danger-on-solid)}
13
- .tempest_danger_V4fX8:hover:not(:disabled){background-color:var(--tempest-danger-hover)}
14
- .tempest_success_w6qB6{background-color:var(--tempest-success-solid);color:var(--tempest-success-on-solid)}
15
- .tempest_success_w6qB6:hover:not(:disabled){filter:brightness(.92)}
16
- .tempest_ghost_1KINV{color:var(--tempest-text);box-shadow:none;background-color:#0000}
17
- .tempest_ghost_1KINV:hover:not(:disabled){background-color:var(--tempest-surface);box-shadow:none}
18
- .tempest_ghost_1KINV:active:not(:disabled){background-color:var(--tempest-surface-2);box-shadow:none}
19
- .tempest_soft_c3kzm{background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft);box-shadow:none}
20
- .tempest_soft_c3kzm:hover:not(:disabled){background-color:var(--tempest-primary-soft-hover)}
21
- .tempest_outline_F5jq-{color:var(--tempest-primary);border-color:var(--tempest-primary);box-shadow:none;background-color:#0000}
22
- .tempest_outline_F5jq-:hover:not(:disabled){background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft)}
23
- .tempest_link_Zt5hw{color:var(--tempest-primary);box-shadow:none;border-radius:var(--tempest-radius-sm);background-color:#0000;padding-left:0;padding-right:0}
24
- .tempest_link_Zt5hw:hover:not(:disabled){color:var(--tempest-primary-hover);box-shadow:none;background:0 0;text-decoration:underline}
4
+ @media (hover:hover) and (pointer:fine){.tempest_button_2ZuB7:hover:not(:disabled,[aria-disabled=true]){box-shadow:var(--tempest-shadow-sm)}}
5
+ .tempest_button_2ZuB7:active:not(:disabled,[aria-disabled=true]){box-shadow:var(--tempest-shadow-xs);transform:translateY(1px)}
6
+ .tempest_button_2ZuB7:disabled,.tempest_button_2ZuB7[aria-disabled=true]{opacity:.55;box-shadow:none}
7
+ .tempest_button_2ZuB7[aria-disabled=true]{cursor:not-allowed}
8
+ a.tempest_button_2ZuB7:is(:link,:visited,:hover,:active,:focus,:not([href])){color:var(--_tempest-button-fg);text-decoration:none}
9
+ .tempest_primary_s1sM6{background-color:var(--tempest-primary);--_tempest-button-fg:var(--tempest-primary-foreground)}
10
+ .tempest_primary_s1sM6:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-hover)}
11
+ .tempest_primary_s1sM6:active:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-active)}
12
+ .tempest_secondary_R0waJ{background-color:var(--tempest-surface);--_tempest-button-fg:var(--tempest-text);border-color:var(--tempest-border)}
13
+ .tempest_secondary_R0waJ:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface-2);border-color:var(--tempest-border-strong)}
14
+ .tempest_danger_V4fX8{background-color:var(--tempest-danger-solid);--_tempest-button-fg:var(--tempest-danger-on-solid)}
15
+ .tempest_danger_V4fX8:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-danger-hover)}
16
+ .tempest_success_w6qB6{background-color:var(--tempest-success-solid);--_tempest-button-fg:var(--tempest-success-on-solid)}
17
+ .tempest_success_w6qB6:hover:not(:disabled,[aria-disabled=true]){filter:brightness(.92)}
18
+ .tempest_ghost_1KINV{--_tempest-button-fg:var(--tempest-text);box-shadow:none;background-color:#0000}
19
+ .tempest_ghost_1KINV:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface);box-shadow:none}
20
+ .tempest_ghost_1KINV:active:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface-2);box-shadow:none}
21
+ .tempest_soft_c3kzm{background-color:var(--tempest-primary-soft);--_tempest-button-fg:var(--tempest-primary-on-soft);box-shadow:none}
22
+ .tempest_soft_c3kzm:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-soft-hover)}
23
+ .tempest_outline_F5jq-{--_tempest-button-fg:var(--tempest-primary);border-color:var(--tempest-primary);box-shadow:none;background-color:#0000}
24
+ .tempest_outline_F5jq-:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-soft);--_tempest-button-fg:var(--tempest-primary-on-soft)}
25
+ .tempest_link_Zt5hw{--_tempest-button-fg:var(--tempest-primary);box-shadow:none;border-radius:var(--tempest-radius-sm);background-color:#0000;padding-left:0;padding-right:0}
26
+ .tempest_link_Zt5hw:hover:not(:disabled,[aria-disabled=true]){--_tempest-button-fg:var(--tempest-primary-hover);box-shadow:none;background:0 0;text-decoration:underline}
25
27
  .tempest_xs_cF6m0{height:var(--tempest-control-height-xs);padding:0 var(--tempest-control-padding-xs);font-size:var(--tempest-control-font-xs)}
26
28
  .tempest_sm_NhG0g{height:var(--tempest-control-height-sm);padding:0 var(--tempest-control-padding-sm);font-size:var(--tempest-control-font-sm)}
27
29
  .tempest_md_hH4h3{height:var(--tempest-control-height-md);padding:0 var(--tempest-control-padding-md);font-size:var(--tempest-control-font-md)}
@@ -1,7 +1,9 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
2
  *,:before,:after{box-sizing:border-box}
3
3
  html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;tab-size:4}
4
- :where(html,body,#root){height:100%}
4
+ :where(html,body){height:100%}
5
+ :where(#root){min-height:100%}
6
+ :where(#root:has(>:only-child)){height:100%}
5
7
  body{background-color:var(--tempest-bg);color:var(--tempest-text);margin:0}
6
8
  img,svg,video,canvas,audio,iframe,embed,object{max-width:100%;display:block}
7
9
  img,video{height:auto}
@@ -1,6 +1,6 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
2
  .tempest_shell_-xp0O{background:var(--tempest-bg);width:100%;min-height:100dvh;color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
- .tempest_navbar_liTKV{flex:none}
3
+ .tempest_navbar_liTKV{display:contents}
4
4
  .tempest_row_PE41P{flex:auto;width:100%;min-height:0;display:flex}
5
5
  .tempest_sidebar_wyx-V{flex:none}
6
6
  .tempest_main_O3GFv{flex:auto;min-width:0;overflow-x:auto}
@@ -1,27 +1,29 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
- .tempest_button_2ZuB7{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));border-radius:var(--tempest-control-radius,var(--tempest-radius-md));font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-none);letter-spacing:var(--tempest-tracking-normal);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:var(--tempest-transition-base);box-shadow:var(--tempest-shadow-xs);border:1px solid #0000;text-decoration:none;display:inline-flex;position:relative}
2
+ .tempest_button_2ZuB7{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));border-radius:var(--tempest-control-radius,var(--tempest-radius-md));font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-none);letter-spacing:var(--tempest-tracking-normal);color:var(--_tempest-button-fg);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:var(--tempest-transition-base);box-shadow:var(--tempest-shadow-xs);border:1px solid #0000;text-decoration:none;display:inline-flex;position:relative}
3
3
  .tempest_button_2ZuB7:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
4
- @media (hover:hover) and (pointer:fine){.tempest_button_2ZuB7:hover:not(:disabled){box-shadow:var(--tempest-shadow-sm)}}
5
- .tempest_button_2ZuB7:active:not(:disabled){box-shadow:var(--tempest-shadow-xs);transform:translateY(1px)}
6
- .tempest_button_2ZuB7:disabled{opacity:.55;box-shadow:none}
7
- .tempest_primary_s1sM6{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground)}
8
- .tempest_primary_s1sM6:hover:not(:disabled){background-color:var(--tempest-primary-hover)}
9
- .tempest_primary_s1sM6:active:not(:disabled){background-color:var(--tempest-primary-active)}
10
- .tempest_secondary_R0waJ{background-color:var(--tempest-surface);color:var(--tempest-text);border-color:var(--tempest-border)}
11
- .tempest_secondary_R0waJ:hover:not(:disabled){background-color:var(--tempest-surface-2);border-color:var(--tempest-border-strong)}
12
- .tempest_danger_V4fX8{background-color:var(--tempest-danger-solid);color:var(--tempest-danger-on-solid)}
13
- .tempest_danger_V4fX8:hover:not(:disabled){background-color:var(--tempest-danger-hover)}
14
- .tempest_success_w6qB6{background-color:var(--tempest-success-solid);color:var(--tempest-success-on-solid)}
15
- .tempest_success_w6qB6:hover:not(:disabled){filter:brightness(.92)}
16
- .tempest_ghost_1KINV{color:var(--tempest-text);box-shadow:none;background-color:#0000}
17
- .tempest_ghost_1KINV:hover:not(:disabled){background-color:var(--tempest-surface);box-shadow:none}
18
- .tempest_ghost_1KINV:active:not(:disabled){background-color:var(--tempest-surface-2);box-shadow:none}
19
- .tempest_soft_c3kzm{background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft);box-shadow:none}
20
- .tempest_soft_c3kzm:hover:not(:disabled){background-color:var(--tempest-primary-soft-hover)}
21
- .tempest_outline_F5jq-{color:var(--tempest-primary);border-color:var(--tempest-primary);box-shadow:none;background-color:#0000}
22
- .tempest_outline_F5jq-:hover:not(:disabled){background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft)}
23
- .tempest_link_Zt5hw{color:var(--tempest-primary);box-shadow:none;border-radius:var(--tempest-radius-sm);background-color:#0000;padding-left:0;padding-right:0}
24
- .tempest_link_Zt5hw:hover:not(:disabled){color:var(--tempest-primary-hover);box-shadow:none;background:0 0;text-decoration:underline}
4
+ @media (hover:hover) and (pointer:fine){.tempest_button_2ZuB7:hover:not(:disabled,[aria-disabled=true]){box-shadow:var(--tempest-shadow-sm)}}
5
+ .tempest_button_2ZuB7:active:not(:disabled,[aria-disabled=true]){box-shadow:var(--tempest-shadow-xs);transform:translateY(1px)}
6
+ .tempest_button_2ZuB7:disabled,.tempest_button_2ZuB7[aria-disabled=true]{opacity:.55;box-shadow:none}
7
+ .tempest_button_2ZuB7[aria-disabled=true]{cursor:not-allowed}
8
+ a.tempest_button_2ZuB7:is(:link,:visited,:hover,:active,:focus,:not([href])){color:var(--_tempest-button-fg);text-decoration:none}
9
+ .tempest_primary_s1sM6{background-color:var(--tempest-primary);--_tempest-button-fg:var(--tempest-primary-foreground)}
10
+ .tempest_primary_s1sM6:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-hover)}
11
+ .tempest_primary_s1sM6:active:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-active)}
12
+ .tempest_secondary_R0waJ{background-color:var(--tempest-surface);--_tempest-button-fg:var(--tempest-text);border-color:var(--tempest-border)}
13
+ .tempest_secondary_R0waJ:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface-2);border-color:var(--tempest-border-strong)}
14
+ .tempest_danger_V4fX8{background-color:var(--tempest-danger-solid);--_tempest-button-fg:var(--tempest-danger-on-solid)}
15
+ .tempest_danger_V4fX8:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-danger-hover)}
16
+ .tempest_success_w6qB6{background-color:var(--tempest-success-solid);--_tempest-button-fg:var(--tempest-success-on-solid)}
17
+ .tempest_success_w6qB6:hover:not(:disabled,[aria-disabled=true]){filter:brightness(.92)}
18
+ .tempest_ghost_1KINV{--_tempest-button-fg:var(--tempest-text);box-shadow:none;background-color:#0000}
19
+ .tempest_ghost_1KINV:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface);box-shadow:none}
20
+ .tempest_ghost_1KINV:active:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-surface-2);box-shadow:none}
21
+ .tempest_soft_c3kzm{background-color:var(--tempest-primary-soft);--_tempest-button-fg:var(--tempest-primary-on-soft);box-shadow:none}
22
+ .tempest_soft_c3kzm:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-soft-hover)}
23
+ .tempest_outline_F5jq-{--_tempest-button-fg:var(--tempest-primary);border-color:var(--tempest-primary);box-shadow:none;background-color:#0000}
24
+ .tempest_outline_F5jq-:hover:not(:disabled,[aria-disabled=true]){background-color:var(--tempest-primary-soft);--_tempest-button-fg:var(--tempest-primary-on-soft)}
25
+ .tempest_link_Zt5hw{--_tempest-button-fg:var(--tempest-primary);box-shadow:none;border-radius:var(--tempest-radius-sm);background-color:#0000;padding-left:0;padding-right:0}
26
+ .tempest_link_Zt5hw:hover:not(:disabled,[aria-disabled=true]){--_tempest-button-fg:var(--tempest-primary-hover);box-shadow:none;background:0 0;text-decoration:underline}
25
27
  .tempest_xs_cF6m0{height:var(--tempest-control-height-xs);padding:0 var(--tempest-control-padding-xs);font-size:var(--tempest-control-font-xs)}
26
28
  .tempest_sm_NhG0g{height:var(--tempest-control-height-sm);padding:0 var(--tempest-control-padding-sm);font-size:var(--tempest-control-font-sm)}
27
29
  .tempest_md_hH4h3{height:var(--tempest-control-height-md);padding:0 var(--tempest-control-padding-md);font-size:var(--tempest-control-font-md)}
@@ -5,8 +5,8 @@
5
5
  .tempest_md_gvyR7{max-width:560px}
6
6
  .tempest_lg_BgB1a{max-width:800px}
7
7
  .tempest_xl_MR-68{max-width:1024px}
8
- .tempest_size2xl_-PH9e{max-width:1280px}
9
- .tempest_size3xl_iqDwN{max-width:1440px}
8
+ .tempest_size2Xl_oLq5O{max-width:1280px}
9
+ .tempest_size3Xl_YzlSH{max-width:1440px}
10
10
  .tempest_fullscreen_o84Xi{border-radius:0;width:100%;max-width:100%;height:100%;max-height:100dvh}
11
11
  @media (width<=639.98px){.tempest_fullscreenOnMobile_0bDwe{border-radius:0;width:100%;max-width:100%;height:100%;max-height:100dvh}.tempest_dialog_ptM-K:not(.tempest_fullscreen_o84Xi):not(.tempest_fullscreenOnMobile_0bDwe){border-radius:var(--tempest-radius-lg)}.tempest_body_lVhql{padding:var(--tempest-space-4)}.tempest_header_ILG9i,.tempest_footer_rro2w{padding:var(--tempest-space-3) var(--tempest-space-4)}}
12
12
  .tempest_header_ILG9i{justify-content:space-between;align-items:center;gap:var(--tempest-space-3);padding:var(--tempest-space-4) var(--tempest-space-5);border-bottom:1px solid var(--tempest-border);display:flex}
@@ -2,12 +2,6 @@
2
2
  .tempest_page_THNNc{width:100%;min-height:100%;font-family:var(--tempest-font-sans);color:var(--tempest-text);flex-direction:column;display:flex}
3
3
  .tempest_padded_bzjoF{padding:var(--tempest-space-5) var(--tempest-space-4)}
4
4
  @media (width>=768px){.tempest_padded_bzjoF{padding:var(--tempest-space-6) var(--tempest-space-6)}}
5
- .tempest_header_PZEzk{align-items:flex-start;gap:var(--tempest-space-4);margin-bottom:var(--tempest-space-5);flex-wrap:wrap;display:flex}
6
- .tempest_headerText_qYXFI{flex:auto;min-width:0}
7
- .tempest_eyebrow_651RV{font-size:var(--tempest-text-xs);color:var(--tempest-text-muted);margin-bottom:var(--tempest-space-1)}
8
- .tempest_title_2oGnT{font-size:var(--tempest-text-2xl);font-weight:var(--tempest-weight-bold);line-height:var(--tempest-leading-tight);margin:0}
9
- .tempest_description_YzmWl{margin:var(--tempest-space-2) 0 0;font-size:var(--tempest-text-sm);color:var(--tempest-text-muted)}
10
- .tempest_actions_-rB3U{gap:var(--tempest-space-2);flex-wrap:wrap;flex:none;display:flex}
11
5
  .tempest_toolbar_sA7sD{margin-bottom:var(--tempest-space-4)}
12
6
  .tempest_content_RCB4b{flex:auto;min-width:0}
13
7
  .tempest_footer_540pQ{margin-top:var(--tempest-space-6);padding-top:var(--tempest-space-4);border-top:1px solid var(--tempest-border)}
@@ -0,0 +1,9 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_reveal_jBgJJ[data-state=hidden]{opacity:0}
3
+ .tempest_reveal_jBgJJ[data-state=hidden][data-variant=up]{transform:translate3d(0, var(--tempest-reveal-distance,1.5rem), 0)}
4
+ .tempest_reveal_jBgJJ[data-state=hidden][data-variant=down]{transform:translate3d(0, calc(-1 * var(--tempest-reveal-distance,1.5rem)), 0)}
5
+ .tempest_reveal_jBgJJ[data-state=hidden][data-variant=left]{transform:translate3d(var(--tempest-reveal-distance,1.5rem), 0, 0)}
6
+ .tempest_reveal_jBgJJ[data-state=hidden][data-variant=right]{transform:translate3d(calc(-1 * var(--tempest-reveal-distance,1.5rem)), 0, 0)}
7
+ .tempest_reveal_jBgJJ[data-state=hidden][data-variant=scale]{transform:scale(var(--tempest-reveal-scale,.95))}
8
+ .tempest_reveal_jBgJJ[data-state=shown]{opacity:1;transition:opacity var(--tempest-reveal-duration,var(--tempest-duration-slower)) var(--tempest-reveal-easing,var(--tempest-ease-out)), transform var(--tempest-reveal-duration,var(--tempest-duration-slower)) var(--tempest-reveal-easing,var(--tempest-ease-emphasized));transition-delay:var(--tempest-reveal-delay,0s);transform:none}
9
+ @media (prefers-reduced-motion:reduce){.tempest_reveal_jBgJJ[data-state][data-variant]{opacity:1;transition:none;transform:none}}
@@ -0,0 +1,9 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_header_38yhB{align-items:flex-start;gap:var(--tempest-space-4);margin-bottom:var(--tempest-space-5);flex-wrap:wrap;display:flex}
3
+ .tempest_headerText_3YDF-{flex:auto;min-width:0}
4
+ .tempest_eyebrow_slLcy{font-size:var(--tempest-text-xs);color:var(--tempest-text-muted);margin-bottom:var(--tempest-space-1)}
5
+ .tempest_title_nY6QC{font-size:var(--tempest-text-2xl);font-weight:var(--tempest-weight-bold);line-height:var(--tempest-leading-tight);margin:0}
6
+ .tempest_description_-Gbs9{margin:var(--tempest-space-2) 0 0;font-size:var(--tempest-text-sm);color:var(--tempest-text-muted)}
7
+ .tempest_actions_dzFrP{gap:var(--tempest-space-2);flex-wrap:wrap;flex:none;display:flex}
8
+ .tempest_center_lDAVK{text-align:center;flex-direction:column;align-items:center}
9
+ .tempest_center_lDAVK .tempest_actions_dzFrP{justify-content:center}
@@ -4,11 +4,11 @@
4
4
  .tempest_item_T5xdQ:last-child{padding-bottom:0}
5
5
  .tempest_markerColumn_BMe4d{flex-direction:column;flex:none;align-items:center;width:16px;padding-top:4px;display:flex}
6
6
  .tempest_marker_kmPV-{border-radius:var(--tempest-radius-full);color:#fff;flex:none;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;display:inline-flex}
7
- .tempest_marker-primary_s9BNB{background:var(--tempest-primary)}
8
- .tempest_marker-success_areMM{background:var(--tempest-success-solid,var(--tempest-success))}
9
- .tempest_marker-warning_rRrS8{background:var(--tempest-warning-solid,var(--tempest-warning))}
10
- .tempest_marker-danger_3GEBk{background:var(--tempest-danger-solid,var(--tempest-danger))}
11
- .tempest_marker-neutral_M2mnw{background:var(--tempest-gray-400,var(--tempest-border))}
7
+ .tempest_markerPrimary_7elrv{background:var(--tempest-primary)}
8
+ .tempest_markerSuccess_QosJP{background:var(--tempest-success-solid,var(--tempest-success))}
9
+ .tempest_markerWarning_u04NG{background:var(--tempest-warning-solid,var(--tempest-warning))}
10
+ .tempest_markerDanger_xtUJj{background:var(--tempest-danger-solid,var(--tempest-danger))}
11
+ .tempest_markerNeutral_y7MKa{background:var(--tempest-gray-400,var(--tempest-border))}
12
12
  .tempest_line_CwY-N{background:var(--tempest-border);flex:auto;width:2px;margin-top:4px}
13
13
  .tempest_body_KpMJ6{flex:auto;min-width:0}
14
14
  .tempest_row_AX2ti{justify-content:space-between;align-items:baseline;gap:var(--tempest-space-3);display:flex}
@@ -10,7 +10,9 @@
10
10
  @media (pointer:coarse){:root:not([data-tempest-density=compact]){--tempest-control-height-xs:32px;--tempest-control-height-sm:40px;--tempest-control-height-md:44px}}
11
11
  *,:before,:after{box-sizing:border-box}
12
12
  html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;tab-size:4}
13
- :where(html,body,#root){height:100%}
13
+ :where(html,body){height:100%}
14
+ :where(#root){min-height:100%}
15
+ :where(#root:has(>:only-child)){height:100%}
14
16
  body{background-color:var(--tempest-bg);color:var(--tempest-text);margin:0}
15
17
  img,svg,video,canvas,audio,iframe,embed,object{max-width:100%;display:block}
16
18
  img,video{height:auto}
@@ -135,11 +135,11 @@
135
135
  .tempest_item_T5xdQ:last-child{padding-bottom:0}
136
136
  .tempest_markerColumn_BMe4d{flex-direction:column;flex:none;align-items:center;width:16px;padding-top:4px;display:flex}
137
137
  .tempest_marker_kmPV-{border-radius:var(--tempest-radius-full);color:#fff;flex:none;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;display:inline-flex}
138
- .tempest_marker-primary_s9BNB{background:var(--tempest-primary)}
139
- .tempest_marker-success_areMM{background:var(--tempest-success-solid,var(--tempest-success))}
140
- .tempest_marker-warning_rRrS8{background:var(--tempest-warning-solid,var(--tempest-warning))}
141
- .tempest_marker-danger_3GEBk{background:var(--tempest-danger-solid,var(--tempest-danger))}
142
- .tempest_marker-neutral_M2mnw{background:var(--tempest-gray-400,var(--tempest-border))}
138
+ .tempest_markerPrimary_7elrv{background:var(--tempest-primary)}
139
+ .tempest_markerSuccess_QosJP{background:var(--tempest-success-solid,var(--tempest-success))}
140
+ .tempest_markerWarning_u04NG{background:var(--tempest-warning-solid,var(--tempest-warning))}
141
+ .tempest_markerDanger_xtUJj{background:var(--tempest-danger-solid,var(--tempest-danger))}
142
+ .tempest_markerNeutral_y7MKa{background:var(--tempest-gray-400,var(--tempest-border))}
143
143
  .tempest_line_CwY-N{background:var(--tempest-border);flex:auto;width:2px;margin-top:4px}
144
144
  .tempest_body_KpMJ6{flex:auto;min-width:0}
145
145
  .tempest_row_AX2ti{justify-content:space-between;align-items:baseline;gap:var(--tempest-space-3);display:flex}