@alphacifer/slidev-addon-theme 0.0.9 → 0.0.11

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 (220) hide show
  1. package/README.md +133 -75
  2. package/components/card/chevron-card/ChevronCard.vue +44 -32
  3. package/components/card/chevron-card/ChevronCardBadge.vue +14 -8
  4. package/components/card/chevron-card/ChevronCardContent.vue +15 -13
  5. package/components/card/chevron-card/style.css +12 -0
  6. package/components/card/{horiz-card/HorizCard.vue → horizontal-card/HorizontalCard.vue} +78 -85
  7. package/components/card/{horiz-card/HorizCardBadge.vue → horizontal-card/HorizontalCardBadge.vue} +15 -10
  8. package/components/card/{horiz-card/HorizCardContent.vue → horizontal-card/HorizontalCardContent.vue} +11 -11
  9. package/components/card/{horiz-card/HorizCardIcon.vue → horizontal-card/HorizontalCardIcon.vue} +24 -38
  10. package/components/card/horizontal-card/style.css +17 -0
  11. package/components/card/{vert-card/VertCard.vue → vertical-card/VerticalCard.vue} +80 -103
  12. package/components/card/{vert-card/VertCardBadge.vue → vertical-card/VerticalCardBadge.vue} +15 -10
  13. package/components/card/{vert-card/VertCardContent.vue → vertical-card/VerticalCardContent.vue} +13 -12
  14. package/components/card/{vert-card/VertCardIcon.vue → vertical-card/VerticalCardIcon.vue} +15 -33
  15. package/components/card/vertical-card/style.css +19 -0
  16. package/components/comparisons/arc-comparison/ArcComparison.vue +376 -80
  17. package/components/comparisons/arc-comparison/ArcComparisonBadge.vue +9 -4
  18. package/components/comparisons/arc-comparison/ArcComparisonContent.vue +9 -4
  19. package/components/comparisons/arc-comparison/ArcComparisonHeading.vue +9 -4
  20. package/components/comparisons/arc-comparison/ArcComparisonLeft.vue +39 -63
  21. package/components/comparisons/arc-comparison/ArcComparisonOrbit.vue +9 -8
  22. package/components/comparisons/arc-comparison/ArcComparisonRight.vue +39 -63
  23. package/components/comparisons/arc-comparison/style.css +27 -0
  24. package/components/comparisons/table-comparison/TableComparison.vue +17 -97
  25. package/components/comparisons/table-comparison/TableComparisonCell.vue +22 -20
  26. package/components/comparisons/table-comparison/{TableComparisonCol.vue → TableComparisonColumn.vue} +16 -14
  27. package/components/comparisons/table-comparison/{TableComparisonCols.vue → TableComparisonColumns.vue} +5 -8
  28. package/components/comparisons/table-comparison/TableComparisonRow.vue +10 -14
  29. package/components/comparisons/table-comparison/TableComparisonRows.vue +1 -4
  30. package/components/comparisons/table-comparison/style.css +15 -0
  31. package/components/core/Date.vue +2 -5
  32. package/components/core/QnA.vue +1 -1
  33. package/components/core/Quote.vue +3 -6
  34. package/components/core/ReflectedTitle.vue +2 -6
  35. package/components/core/Speaker.vue +5 -10
  36. package/components/core/TransitionHeading.vue +2 -5
  37. package/components/core/arc-orbit/ArcOrbit.vue +65 -84
  38. package/components/core/arc-orbit/ArcOrbitBadge.vue +9 -11
  39. package/components/core/arc-orbit/ArcOrbitCallout.vue +30 -32
  40. package/components/core/arc-orbit/ArcOrbitContent.vue +6 -12
  41. package/components/core/arc-orbit/ArcOrbitHeading.vue +13 -11
  42. package/components/core/arc-orbit/style.css +20 -0
  43. package/components/core/style.css +9 -0
  44. package/components/core/thanks/{ThanksContent.vue → SquareThanks.vue} +36 -31
  45. package/components/core/thanks/SquareThanksContent.vue +89 -0
  46. package/components/core/thanks/ThanksOutlineSquare.vue +2 -5
  47. package/components/core/thanks/ThanksSquare.vue +2 -5
  48. package/components/core/thanks/style.css +30 -0
  49. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepth.vue +802 -0
  50. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayer.vue +240 -0
  51. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerHeading.vue +96 -0
  52. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerPart.vue +501 -0
  53. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerSector.vue +162 -0
  54. package/components/defense-in-depth/arc-defense-in-depth/style.css +38 -0
  55. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetrad.vue → rectangle-orbit-tetrad/RectangleOrbitTetrad.vue} +66 -63
  56. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradCallout.vue → rectangle-orbit-tetrad/RectangleOrbitTetradCallout.vue} +62 -48
  57. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradCenter.vue +54 -0
  58. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradContent.vue +44 -0
  59. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradHeading.vue +27 -0
  60. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradIcon.vue → rectangle-orbit-tetrad/RectangleOrbitTetradIcon.vue} +23 -13
  61. package/components/facets/tetrad/rectangle-orbit-tetrad/style.css +22 -0
  62. package/components/facets/triad/arrow-triad/ArrowTriad.vue +99 -109
  63. package/components/facets/triad/arrow-triad/ArrowTriadCallout.vue +31 -59
  64. package/components/facets/triad/arrow-triad/ArrowTriadContent.vue +18 -13
  65. package/components/facets/triad/arrow-triad/ArrowTriadHeading.vue +20 -13
  66. package/components/facets/triad/arrow-triad/ArrowTriadIcon.vue +14 -9
  67. package/components/facets/triad/arrow-triad/style.css +15 -0
  68. package/components/facets/triad/gear-triad/GearTriad.vue +73 -64
  69. package/components/facets/triad/gear-triad/GearTriadCallout.vue +58 -53
  70. package/components/facets/triad/gear-triad/GearTriadCenter.vue +9 -4
  71. package/components/facets/triad/gear-triad/GearTriadContent.vue +21 -36
  72. package/components/facets/triad/gear-triad/GearTriadDetail.vue +92 -0
  73. package/components/facets/triad/gear-triad/GearTriadDetails.vue +169 -0
  74. package/components/facets/triad/gear-triad/GearTriadDetailsContent.vue +18 -0
  75. package/components/facets/triad/gear-triad/GearTriadDetailsHeading.vue +60 -0
  76. package/components/facets/triad/gear-triad/GearTriadHeading.vue +19 -13
  77. package/components/facets/triad/gear-triad/GearTriadIcon.vue +22 -9
  78. package/components/facets/triad/gear-triad/style.css +26 -0
  79. package/components/facets/triad/{hex-triad/HexTriad.vue → hexagon-triad/HexagonTriad.vue} +81 -63
  80. package/components/facets/triad/{hex-triad/HexTriadBadge.vue → hexagon-triad/HexagonTriadBadge.vue} +38 -12
  81. package/components/facets/triad/{hex-triad/HexTriadCallout.vue → hexagon-triad/HexagonTriadCallout.vue} +35 -31
  82. package/components/facets/triad/hexagon-triad/HexagonTriadCenterBadge.vue +74 -0
  83. package/components/facets/triad/hexagon-triad/HexagonTriadContent.vue +34 -0
  84. package/components/facets/triad/hexagon-triad/HexagonTriadHeading.vue +44 -0
  85. package/components/facets/triad/{hex-triad/HexTriadLayer.vue → hexagon-triad/HexagonTriadLayer.vue} +12 -4
  86. package/components/facets/triad/hexagon-triad/style.css +22 -0
  87. package/components/process/arc-arrow-process/ArcArrowProcess.vue +13 -35
  88. package/components/process/arc-arrow-process/ArcArrowProcessArrow.vue +20 -21
  89. package/components/process/arc-arrow-process/ArcArrowProcessCallout.vue +30 -71
  90. package/components/process/arc-arrow-process/ArcArrowProcessContent.vue +18 -13
  91. package/components/process/arc-arrow-process/ArcArrowProcessHeading.vue +18 -18
  92. package/components/process/arc-arrow-process/ArcArrowProcessIcon.vue +23 -11
  93. package/components/process/arc-arrow-process/style.css +20 -0
  94. package/components/pyramid/circular-pyramid/CircularPyramid.vue +276 -190
  95. package/components/pyramid/circular-pyramid/CircularPyramidStack.vue +83 -98
  96. package/components/pyramid/circular-pyramid/CircularPyramidStackContent.vue +136 -29
  97. package/components/pyramid/circular-pyramid/CircularPyramidStackHeading.vue +212 -0
  98. package/components/pyramid/circular-pyramid/style.css +26 -0
  99. package/components/pyramid/square-pyramid/SquarePyramid.vue +199 -83
  100. package/components/pyramid/square-pyramid/SquarePyramidStack.vue +87 -95
  101. package/components/pyramid/square-pyramid/SquarePyramidStackContent.vue +138 -27
  102. package/components/pyramid/square-pyramid/SquarePyramidStackHeading.vue +212 -0
  103. package/components/pyramid/square-pyramid/style.css +48 -0
  104. package/components/style.css +35 -0
  105. package/layouts/core/arc-toc.vue +40 -45
  106. package/layouts/core/bg-center.vue +7 -6
  107. package/layouts/core/style.css +17 -0
  108. package/layouts/shifting-heading/shifting-intro.vue +4 -13
  109. package/layouts/thanks/thanks.vue +5 -5
  110. package/package.json +8 -6
  111. package/style.css +17 -0
  112. package/uno.config.ts +1 -0
  113. package/utils/activateOnKeyboard.ts +14 -0
  114. package/utils/{chevronCard → card/chevron-card}/context.ts +1 -1
  115. package/utils/card/chevron-card/index.ts +1 -0
  116. package/utils/card/horizontal-card/context.ts +12 -0
  117. package/utils/{horizCard/createHorizCardGeometry.ts → card/horizontal-card/createHorizontalCardGeometry.ts} +10 -45
  118. package/utils/card/horizontal-card/index.ts +2 -0
  119. package/utils/card/vertical-card/context.ts +19 -0
  120. package/utils/{vertCard/createVertCardGeometry.ts → card/vertical-card/createVerticalCardGeometry.ts} +9 -130
  121. package/utils/card/vertical-card/index.ts +2 -0
  122. package/utils/colors.ts +93 -0
  123. package/utils/{arcComparison → comparisons/arc-comparison}/context.ts +0 -11
  124. package/utils/{arcComparison → comparisons/arc-comparison}/createArcComparisonGeometry.ts +1 -1
  125. package/utils/comparisons/arc-comparison/resolveArcComparisonItems.ts +33 -0
  126. package/utils/comparisons/table-comparison/constants.ts +47 -0
  127. package/utils/{tableComparison → comparisons/table-comparison}/context.ts +2 -2
  128. package/utils/{arcOrbit → core/arc-orbit}/resolveArcOrbitItems.ts +11 -15
  129. package/utils/defense-in-depth/arc-defense-in-depth/context.ts +113 -0
  130. package/utils/defense-in-depth/arc-defense-in-depth/createArcDefenseInDepthGeometry.ts +600 -0
  131. package/utils/defense-in-depth/arc-defense-in-depth/types.ts +144 -0
  132. package/utils/defense-in-depth/shared/colors.ts +51 -0
  133. package/utils/defense-in-depth/shared/constants.ts +22 -0
  134. package/utils/defense-in-depth/shared/types.ts +7 -0
  135. package/utils/facets/tetrad/rectangle-orbit-tetrad/context.ts +31 -0
  136. package/utils/{rectOrbitTetrad/createRectOrbitTetradGeometry.ts → facets/tetrad/rectangle-orbit-tetrad/createRectangleOrbitTetradGeometry.ts} +5 -104
  137. package/utils/facets/tetrad/rectangle-orbit-tetrad/index.ts +3 -0
  138. package/utils/{rectOrbitTetrad/resolveRectOrbitTetradItems.ts → facets/tetrad/rectangle-orbit-tetrad/resolveRectangleOrbitTetradItems.ts} +41 -49
  139. package/utils/{arrowTriad → facets/triad/arrow-triad}/resolveArrowTriadItems.ts +27 -28
  140. package/utils/{gearTriad → facets/triad/gear-triad}/context.ts +5 -5
  141. package/utils/{gearTriad → facets/triad/gear-triad}/createGearTriadGeometry.ts +2 -0
  142. package/utils/{gearTriad → facets/triad/gear-triad}/resolveGearTriadItems.ts +23 -24
  143. package/utils/facets/triad/hexagon-triad/context.ts +25 -0
  144. package/utils/{hexTriad/createHexTriadGeometry.ts → facets/triad/hexagon-triad/createHexagonTriadGeometry.ts} +11 -27
  145. package/utils/facets/triad/hexagon-triad/index.ts +3 -0
  146. package/utils/facets/triad/hexagon-triad/resolveHexagonTriadItems.ts +60 -0
  147. package/utils/{shiftingHeading → layouts/shifting-heading}/collectShiftingIntroNodes.ts +1 -0
  148. package/utils/layouts/table-of-contents/calculateTocCenterAlignmentOffset.ts +17 -0
  149. package/utils/{tableOfContents → layouts/table-of-contents}/calculateTocMarkerPositions.ts +0 -12
  150. package/utils/{tableOfContents → layouts/table-of-contents}/createTocConnectorPath.ts +11 -5
  151. package/utils/{mergeUno → merge-uno}/classifyVisual.ts +1 -1
  152. package/utils/{mergeUno → merge-uno}/collectClassNames.ts +9 -3
  153. package/utils/process/arc-arrow-process/resolveArcArrowProcessItems.ts +180 -0
  154. package/utils/pyramid/circular-pyramid/context.ts +1 -4
  155. package/utils/pyramid/circular-pyramid/createCircularPyramidGeometry.ts +6 -10
  156. package/utils/pyramid/shared/colors.ts +33 -83
  157. package/utils/pyramid/shared/constants.ts +3 -2
  158. package/utils/pyramid/shared/types.ts +0 -5
  159. package/utils/pyramid/square-pyramid/context.ts +1 -4
  160. package/utils/pyramid/square-pyramid/createSquarePyramidGeometry.ts +6 -10
  161. package/utils/useDiagramAutoScale.ts +64 -16
  162. package/utils/useMergedUnoAttrs.ts +9 -5
  163. package/components/card/chevron-card/ChevronCardHeading.vue +0 -39
  164. package/components/card/horiz-card/HorizCardHeading.vue +0 -47
  165. package/components/card/vert-card/VertCardHeading.vue +0 -68
  166. package/components/card/vert-card/VertCardTitle.vue +0 -76
  167. package/components/comparisons/arc-comparison/ArcComparisonContents.vue +0 -17
  168. package/components/comparisons/arc-comparison/ArcComparisonTitle.vue +0 -29
  169. package/components/core/arc-orbit/ArcOrbitContents.vue +0 -18
  170. package/components/core/arc-orbit/ArcOrbitTitle.vue +0 -50
  171. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradCenter.vue +0 -53
  172. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradContent.vue +0 -39
  173. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradHeading.vue +0 -44
  174. package/components/facets/triad/gear-triad/GearTriadContents.vue +0 -111
  175. package/components/facets/triad/gear-triad/GearTriadDescription.vue +0 -38
  176. package/components/facets/triad/hex-triad/HexTriadCenterBadge.vue +0 -51
  177. package/components/facets/triad/hex-triad/HexTriadContent.vue +0 -20
  178. package/components/facets/triad/hex-triad/HexTriadHeading.vue +0 -28
  179. package/components/pyramid/circular-pyramid/CircularPyramidStackTitle.vue +0 -138
  180. package/components/pyramid/square-pyramid/SquarePyramidStackTitle.vue +0 -134
  181. package/layouts/core/table-of-contents.vue +0 -30
  182. package/utils/arcArrowProcess/resolveArcArrowProcessItems.ts +0 -189
  183. package/utils/arcComparison/resolveArcComparisonItems.ts +0 -102
  184. package/utils/chevronCard/createChevronCardGeometry.ts +0 -48
  185. package/utils/chevronCard/index.ts +0 -2
  186. package/utils/hexTriad/context.ts +0 -25
  187. package/utils/hexTriad/index.ts +0 -3
  188. package/utils/hexTriad/resolveHexTriadItems.ts +0 -63
  189. package/utils/horizCard/context.ts +0 -13
  190. package/utils/horizCard/index.ts +0 -2
  191. package/utils/pyramid/index.ts +0 -3
  192. package/utils/rectOrbitTetrad/context.ts +0 -31
  193. package/utils/rectOrbitTetrad/index.ts +0 -3
  194. package/utils/tableComparison/constants.ts +0 -72
  195. package/utils/tableOfContents/calculateTocCenterAlignmentOffset.ts +0 -11
  196. package/utils/vertCard/context.ts +0 -18
  197. package/utils/vertCard/index.ts +0 -2
  198. package/utils/{arcComparison → comparisons/arc-comparison}/index.ts +0 -0
  199. package/utils/{tableComparison → comparisons/table-comparison}/index.ts +0 -0
  200. package/utils/{arcOrbit → core/arc-orbit}/context.ts +0 -0
  201. package/utils/{arcOrbit → core/arc-orbit}/createArcOrbitGeometry.ts +0 -0
  202. package/utils/{arcOrbit → core/arc-orbit}/index.ts +0 -0
  203. package/utils/{arrowTriad → facets/triad/arrow-triad}/context.ts +0 -0
  204. package/utils/{arrowTriad → facets/triad/arrow-triad}/createArrowTriadGeometry.ts +0 -0
  205. package/utils/{arrowTriad → facets/triad/arrow-triad}/index.ts +0 -0
  206. package/utils/{gearTriad → facets/triad/gear-triad}/index.ts +0 -0
  207. package/utils/{tableOfContents → layouts/table-of-contents}/calculateUniformTocArticleWidth.ts +0 -0
  208. package/utils/{tableOfContents → layouts/table-of-contents}/createTocArcPath.ts +0 -0
  209. package/utils/{tableOfContents → layouts/table-of-contents}/index.ts +0 -0
  210. package/utils/{mergeUno → merge-uno}/classifyLayout.ts +0 -0
  211. package/utils/{mergeUno → merge-uno}/classifySimple.ts +0 -0
  212. package/utils/{mergeUno → merge-uno}/classifyTypography.ts +0 -0
  213. package/utils/{mergeUno → merge-uno}/classifyUtility.ts +0 -0
  214. package/utils/{mergeUno → merge-uno}/index.ts +0 -0
  215. package/utils/{mergeUno → merge-uno}/mergeClassValues.ts +0 -0
  216. package/utils/{mergeUno → merge-uno}/splitVariantScope.ts +1 -1
  217. package/utils/{mergeUno → merge-uno}/types.ts +0 -0
  218. package/utils/{arcArrowProcess → process/arc-arrow-process}/context.ts +1 -1
  219. /package/utils/{arcArrowProcess → process/arc-arrow-process}/createArcArrowProcessGeometry.ts +0 -0
  220. /package/utils/{arcArrowProcess → process/arc-arrow-process}/index.ts +0 -0
@@ -15,18 +15,17 @@ import {
15
15
  DEFAULT_CIRCULAR_PYRAMID_COLOR,
16
16
  DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS,
17
17
  } from '../../../utils/pyramid/circular-pyramid';
18
- import CircularPyramidStackContent from './CircularPyramidStackContent.vue';
19
- import CircularPyramidStackTitle from './CircularPyramidStackTitle.vue';
18
+ import { PYRAMID_DOT_GAP_PX } from '../../../utils/pyramid/shared';
19
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
20
20
 
21
21
  defineOptions({
22
22
  name: 'CircularPyramidStack',
23
+ inheritAttrs: false,
23
24
  });
24
25
 
25
26
  export interface ICircularPyramidStackProps {
26
27
  readonly index?: number;
27
28
  readonly step?: string | number;
28
- readonly title?: string;
29
- readonly content?: string;
30
29
  readonly color?: string;
31
30
  readonly active?: boolean;
32
31
  readonly connectorWidth?: number;
@@ -35,8 +34,6 @@ export interface ICircularPyramidStackProps {
35
34
  const props = withDefaults(defineProps<ICircularPyramidStackProps>(), {
36
35
  index: undefined,
37
36
  step: undefined,
38
- title: undefined,
39
- content: undefined,
40
37
  color: undefined,
41
38
  active: undefined,
42
39
  connectorWidth: undefined,
@@ -55,13 +52,16 @@ interface INamedComponent {
55
52
  function hasComponentName(type: unknown, targetName: string): boolean {
56
53
  if (typeof type === 'object' && type !== null) {
57
54
  const comp = type as INamedComponent['type'];
55
+
58
56
  return comp?.name === targetName || comp?.displayName === targetName;
59
57
  }
58
+
60
59
  return false;
61
60
  }
62
61
 
63
62
  function flattenVNodes(nodes: VNode[]): VNode[] {
64
63
  const result: VNode[] = [];
64
+
65
65
  for (const node of nodes) {
66
66
  if (node.type === Fragment && Array.isArray(node.children)) {
67
67
  result.push(...flattenVNodes(node.children as VNode[]));
@@ -69,6 +69,7 @@ function flattenVNodes(nodes: VNode[]): VNode[] {
69
69
  result.push(node);
70
70
  }
71
71
  }
72
+
72
73
  return result;
73
74
  }
74
75
 
@@ -76,12 +77,13 @@ const defaultNodes = computed(() => {
76
77
  if (!slots.default) {
77
78
  return [];
78
79
  }
80
+
79
81
  return flattenVNodes(slots.default());
80
82
  });
81
83
 
82
84
  const slottedTitle = computed(() => {
83
85
  return defaultNodes.value.find((node) =>
84
- hasComponentName(node.type, 'CircularPyramidStackTitle'),
86
+ hasComponentName(node.type, 'CircularPyramidStackHeading'),
85
87
  );
86
88
  });
87
89
 
@@ -107,6 +109,7 @@ const resolvedIndex = computed<number>(() => {
107
109
  if (props.index !== undefined) {
108
110
  return Number(props.index);
109
111
  }
112
+
110
113
  return registration?.index.value ?? 0;
111
114
  });
112
115
 
@@ -114,9 +117,11 @@ const isActive = computed<boolean>(() => {
114
117
  if (props.active !== undefined) {
115
118
  return props.active;
116
119
  }
120
+
117
121
  if (!rootContext) {
118
122
  return false;
119
123
  }
124
+
120
125
  return rootContext.activeIndex.value === resolvedIndex.value;
121
126
  });
122
127
 
@@ -124,6 +129,7 @@ const resolvedStep = computed(() => {
124
129
  if (props.step !== undefined) {
125
130
  return props.step;
126
131
  }
132
+
127
133
  return String(resolvedIndex.value + 1).padStart(2, '0');
128
134
  });
129
135
 
@@ -131,6 +137,7 @@ const layerGeometry = computed(() => {
131
137
  if (!rootContext) {
132
138
  return undefined;
133
139
  }
140
+
134
141
  return rootContext.geo.value.layers[resolvedIndex.value];
135
142
  });
136
143
 
@@ -138,28 +145,25 @@ const posY = computed(() => {
138
145
  if (!layerGeometry.value) {
139
146
  return 0;
140
147
  }
148
+
141
149
  const geo = layerGeometry.value;
150
+
142
151
  return (
143
152
  geo.slabCenterY ??
144
153
  Number((geo.cy + (geo.cylinderHeight ?? 0) / 2).toFixed(2))
145
154
  );
146
155
  });
147
156
 
148
- const discRadiusX = computed(() => {
149
- if (!layerGeometry.value) {
150
- return 140;
151
- }
152
- return layerGeometry.value.rx;
153
- });
154
-
155
157
  const DOT_POSITION_X = 210;
156
158
 
157
159
  const leftWidth = computed(() => {
158
160
  if (layerGeometry.value) {
159
161
  const rx = layerGeometry.value.rx;
160
162
  const cx = 465;
161
- return Math.max(180, Math.round(cx - rx - 40));
163
+
164
+ return Math.max(180, Math.round(cx - rx - PYRAMID_DOT_GAP_PX));
162
165
  }
166
+
163
167
  return DOT_POSITION_X;
164
168
  });
165
169
 
@@ -169,28 +173,30 @@ const rightWingWidth = computed(() => {
169
173
  if (layerGeometry.value) {
170
174
  const rx = layerGeometry.value.rx;
171
175
  const cx = 465;
172
- const dotRightX = cx + rx + 40;
176
+ const dotRightX = cx + rx + PYRAMID_DOT_GAP_PX;
173
177
  const containerW = 960;
178
+
174
179
  return Math.max(rightWidth.value + 20, Math.round(containerW - dotRightX));
175
180
  }
176
- return rightWidth.value + 40;
177
- });
178
181
 
179
- const rightOffset = computed(
180
- () => rootContext?.contentRightOffsetPx.value ?? 0,
181
- );
182
+ return rightWidth.value + PYRAMID_DOT_GAP_PX;
183
+ });
182
184
 
183
185
  const resolvedColor = computed<string>(() => {
184
186
  if (effectiveColor.value) {
185
187
  return effectiveColor.value;
186
188
  }
189
+
190
+ const stackIndex =
191
+ Math.abs(resolvedIndex.value) %
192
+ DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS.length;
193
+ const stackColor =
194
+ DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS[stackIndex] ??
195
+ DEFAULT_CIRCULAR_PYRAMID_COLOR;
196
+
187
197
  return (
188
198
  rootContext?.getLayerColor(resolvedIndex.value) ??
189
- DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS[
190
- Math.abs(resolvedIndex.value) %
191
- DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS.length
192
- ] ??
193
- DEFAULT_CIRCULAR_PYRAMID_COLOR
199
+ `var(--alpha-circular-pyramid-stack-${stackIndex + 1}-color, ${stackColor})`
194
200
  );
195
201
  });
196
202
 
@@ -216,6 +222,10 @@ const connectorWidth = computed(() => {
216
222
  return Math.max(20, rightWingWidth.value - rightWidth.value);
217
223
  });
218
224
 
225
+ const stepIndex = computed(() => {
226
+ return resolvedIndex.value;
227
+ });
228
+
219
229
  provide(CIRCULAR_PYRAMID_STACK_KEY, {
220
230
  index: resolvedIndex,
221
231
  isActive,
@@ -226,17 +236,23 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
226
236
  connectorWidth,
227
237
  setActive: handleStackClick,
228
238
  });
239
+
240
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
241
+ 'alpha-circular-pyramid-stack absolute inset-x-0 pointer-events-none select-none flex items-center justify-between',
242
+ );
229
243
  </script>
230
244
 
231
245
  <template>
232
246
  <div
233
- class="alpha-circular-pyramid-stack absolute inset-x-0 pointer-events-none select-none flex items-center justify-between"
234
- :class="[
235
- isActive
236
- ? 'alpha-circular-pyramid-stack--active'
237
- : 'alpha-circular-pyramid-stack--inactive',
238
- `alpha-circular-pyramid-stack--${resolvedIndex}`,
239
- ]"
247
+ v-bind="forwardedAttrs()"
248
+ :class="
249
+ className([
250
+ isActive
251
+ ? 'alpha-circular-pyramid-stack--active'
252
+ : 'alpha-circular-pyramid-stack--inactive',
253
+ `alpha-circular-pyramid-stack--${resolvedIndex}`,
254
+ ])
255
+ "
240
256
  :data-index="resolvedIndex"
241
257
  :data-active="isActive"
242
258
  :style="{
@@ -245,13 +261,17 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
245
261
  }"
246
262
  >
247
263
  <!-- Left Wing: Title Pill (150px) -->
248
- <div
249
- class="alpha-circular-pyramid-stack__left flex-shrink-0 flex items-center justify-start pointer-events-auto cursor-pointer"
264
+ <button
265
+ type="button"
266
+ class="alpha-circular-pyramid-stack__left shrink-0 flex items-center justify-start pointer-events-auto cursor-pointer bg-transparent border-0 p-0 m-0 appearance-none"
267
+ :disabled="!rootContext?.interactive.value"
268
+ :aria-label="`Select stage ${resolvedStep}`"
250
269
  :class="[
251
270
  `alpha-circular-pyramid-stack__left--${resolvedIndex}`,
252
271
  { 'alpha-circular-pyramid-stack--animated': rootContext?.animation.value },
253
272
  ]"
254
273
  :style="{
274
+ '--wing-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${460 + stepIndex * 320}ms)`,
255
275
  width: `${leftWidth}px`,
256
276
  minWidth: `${leftWidth}px`,
257
277
  maxWidth: `${leftWidth}px`,
@@ -260,35 +280,28 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
260
280
  @click="handleStackClick"
261
281
  >
262
282
  <component :is="slottedTitle" v-if="slottedTitle" />
263
- <CircularPyramidStackTitle
264
- v-else
265
- :step="resolvedStep"
266
- :title="props.title || `Stage ${resolvedStep}`"
267
- :connector-width="props.connectorWidth"
268
- />
269
- </div>
270
- <!-- Right Wing: Dot + Connector + Content Card (40px from slab) -->
271
- <div
272
- class="alpha-circular-pyramid-stack__right flex-shrink-0 flex items-center justify-end pointer-events-auto cursor-pointer"
283
+ </button>
284
+ <!-- Right Wing: Dot + Connector + Content Card (10px from slab) -->
285
+ <button
286
+ type="button"
287
+ class="alpha-circular-pyramid-stack__right shrink-0 flex items-center justify-end pointer-events-auto cursor-pointer bg-transparent border-0 p-0 m-0 appearance-none"
288
+ :disabled="!rootContext?.interactive.value"
289
+ :aria-label="`Select stage ${resolvedStep}`"
273
290
  :class="[
274
291
  `alpha-circular-pyramid-stack__right--${resolvedIndex}`,
275
292
  { 'alpha-circular-pyramid-stack--animated': rootContext?.animation.value },
276
293
  ]"
277
294
  :style="{
295
+ '--wing-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
278
296
  width: `${rightWingWidth}px`,
279
297
  minWidth: `${rightWidth}px`,
280
298
  maxWidth: `${rightWingWidth}px`,
281
- marginRight: rightOffset ? `${rightOffset}px` : undefined,
282
299
  opacity: !hasActiveStack || isActive ? 1 : 0.65,
283
300
  }"
284
301
  @click="handleStackClick"
285
302
  >
286
303
  <component :is="slottedContent" v-if="slottedContent" />
287
- <CircularPyramidStackContent
288
- v-else
289
- :content="props.content || 'Layer details and operational description.'"
290
- />
291
- </div>
304
+ </button>
292
305
  </div>
293
306
  </template>
294
307
 
@@ -300,37 +313,24 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
300
313
 
301
314
  .alpha-circular-pyramid-stack__left,
302
315
  .alpha-circular-pyramid-stack__right {
303
- transition: opacity 0.3s ease, transform 0.3s ease;
304
- }
305
-
306
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--0 {
307
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 100ms) both;
308
- }
309
-
310
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--1 {
311
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 180ms) both;
312
- }
313
-
314
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--2 {
315
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 260ms) both;
316
- }
317
-
318
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--3 {
319
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 340ms) both;
316
+ transition:
317
+ opacity 0.3s ease,
318
+ transform 0.3s ease;
320
319
  }
321
320
 
322
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--4 {
323
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 420ms) both;
324
- }
325
-
326
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__left--5 {
327
- animation: alpha-pyramid-left-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 500ms) both;
321
+ .alpha-circular-pyramid-stack--animated .alpha-circular-pyramid-stack__left {
322
+ animation: alpha-pyramid-left-in 140ms cubic-bezier(0.16, 1, 0.3, 1)
323
+ var(
324
+ --wing-delay,
325
+ calc(var(--alpha-circular-pyramid-start-delay, 0ms) + 460ms)
326
+ )
327
+ both;
328
328
  }
329
329
 
330
330
  @keyframes alpha-pyramid-left-in {
331
331
  0% {
332
332
  opacity: 0;
333
- transform: translateX(-12px);
333
+ transform: translateX(-10px);
334
334
  }
335
335
  100% {
336
336
  opacity: 1;
@@ -338,34 +338,19 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
338
338
  }
339
339
  }
340
340
 
341
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--0 {
342
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 120ms) both;
343
- }
344
-
345
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--1 {
346
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 200ms) both;
347
- }
348
-
349
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--2 {
350
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 280ms) both;
351
- }
352
-
353
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--3 {
354
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 360ms) both;
355
- }
356
-
357
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--4 {
358
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 440ms) both;
359
- }
360
-
361
- .alpha-circular-pyramid-stack--animated.alpha-circular-pyramid-stack__right--5 {
362
- animation: alpha-pyramid-right-in 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--circular-pyramid-start-delay, 0ms) + 520ms) both;
341
+ .alpha-circular-pyramid-stack--animated .alpha-circular-pyramid-stack__right {
342
+ animation: alpha-pyramid-right-in 140ms cubic-bezier(0.16, 1, 0.3, 1)
343
+ var(
344
+ --wing-delay,
345
+ calc(var(--alpha-circular-pyramid-start-delay, 0ms) + 470ms)
346
+ )
347
+ both;
363
348
  }
364
349
 
365
350
  @keyframes alpha-pyramid-right-in {
366
351
  0% {
367
352
  opacity: 0;
368
- transform: translateX(12px);
353
+ transform: translateX(10px);
369
354
  }
370
355
  100% {
371
356
  opacity: 1;
@@ -6,19 +6,19 @@ import {
6
6
  CIRCULAR_PYRAMID_STACK_KEY,
7
7
  } from '../../../utils/pyramid/circular-pyramid';
8
8
  import { createPyramidConnectorPath } from '../../../utils/pyramid/shared';
9
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
9
10
 
10
11
  defineOptions({
11
12
  name: 'CircularPyramidStackContent',
13
+ inheritAttrs: false,
12
14
  });
13
15
 
14
16
  export interface ICircularPyramidStackContentProps {
15
- readonly content?: string;
16
17
  readonly color?: string;
17
18
  readonly connectorWidth?: number;
18
19
  }
19
20
 
20
21
  const props = withDefaults(defineProps<ICircularPyramidStackContentProps>(), {
21
- content: undefined,
22
22
  color: undefined,
23
23
  connectorWidth: undefined,
24
24
  });
@@ -53,8 +53,12 @@ const isActive = computed(() => {
53
53
  return stackContext?.isActive.value ?? false;
54
54
  });
55
55
 
56
- const palette = computed(() => {
57
- return rootContext?.palette.value;
56
+ const isAnimated = computed(() => {
57
+ return rootContext?.animation.value ?? false;
58
+ });
59
+
60
+ const stepIndex = computed(() => {
61
+ return stackContext?.index.value ?? 0;
58
62
  });
59
63
 
60
64
  const contentWidth = computed(() => rootContext?.contentWidthPx.value ?? 240);
@@ -63,7 +67,9 @@ const deltaY = computed(() => {
63
67
  if (stackContext?.deltaY?.value !== undefined) {
64
68
  return stackContext.deltaY.value;
65
69
  }
70
+
66
71
  const idx = stackContext?.index.value ?? 0;
72
+
67
73
  return rootContext?.getCardDeltaY?.(idx) ?? 0;
68
74
  });
69
75
 
@@ -73,9 +79,11 @@ const connectorWidth = computed(() => {
73
79
  if (props.connectorWidth !== undefined) {
74
80
  return props.connectorWidth;
75
81
  }
82
+
76
83
  if (stackContext?.connectorWidth?.value !== undefined) {
77
84
  return stackContext.connectorWidth.value;
78
85
  }
86
+
79
87
  return measuredConnectorWidth.value || 40;
80
88
  });
81
89
 
@@ -94,9 +102,16 @@ const svgTop = computed(() => {
94
102
 
95
103
  const connectorPath = computed(() => {
96
104
  const w = connectorWidth.value;
105
+
97
106
  return createPyramidConnectorPath(
98
- { x: 0, y: 0 },
99
- { x: w, y: effectiveDeltaY.value },
107
+ {
108
+ x: 0,
109
+ y: 0,
110
+ },
111
+ {
112
+ x: w,
113
+ y: effectiveDeltaY.value,
114
+ },
100
115
  );
101
116
  });
102
117
 
@@ -105,31 +120,49 @@ const stackColor = computed(() => {
105
120
  props.color ??
106
121
  stackContext?.color?.value ??
107
122
  rootContext?.color.value ??
108
- '#3b82f6'
123
+ 'var(--alpha-circular-pyramid-stack-content-accent)'
109
124
  );
110
125
  });
126
+
127
+ const { className, forwardedAttrs } = useMergedUnoAttrs(() => [
128
+ 'alpha-circular-pyramid-stack-content rounded-xl p-2 px-2.5 text-[10px] leading-snug transition-all duration-300 border select-none box-border shrink-0',
129
+ isActive.value
130
+ ? 'alpha-circular-pyramid-stack-content--active bg-(--alpha-circular-pyramid-stack-content-border-active) text-(--alpha-circular-pyramid-stack-content-active)'
131
+ : 'alpha-circular-pyramid-stack-content--default bg-(--alpha-circular-pyramid-stack-content-border) text-(--alpha-circular-pyramid-stack-content)',
132
+ ]);
111
133
  </script>
112
134
 
113
135
  <template>
114
- <div class="alpha-circular-pyramid-stack-content-wrapper relative w-full flex items-center select-none overflow-visible">
136
+ <div
137
+ class="alpha-circular-pyramid-stack-content-wrapper relative w-full flex items-center select-none overflow-visible"
138
+ :style="{
139
+ '--content-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
140
+ }"
141
+ >
115
142
  <!-- Scalable Line between Dot and Content Card (always at least 20px) -->
116
143
  <div
117
144
  ref="connectorRef"
118
- class="alpha-circular-pyramid-stack-content__connector flex-1 flex items-center min-w-[20px] pointer-events-none relative overflow-visible h-0"
145
+ class="alpha-circular-pyramid-stack-content__connector flex-1 flex items-center min-w-5 pointer-events-none relative overflow-visible h-0"
119
146
  >
120
147
  <div
121
- class="alpha-circular-pyramid-stack-content__dot absolute left-0 top-0 -translate-x-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full flex-shrink-0 transition-all duration-300 pointer-events-auto"
148
+ class="alpha-circular-pyramid-stack-content__dot absolute left-0 top-0 -translate-x-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full shrink-0 transition-all duration-300 pointer-events-auto"
149
+ :class="{
150
+ 'alpha-circular-pyramid-stack-content__dot--animated': isAnimated,
151
+ }"
122
152
  :style="{
123
153
  backgroundColor: stackColor,
124
154
  boxShadow: isActive
125
155
  ? `0 0 6px ${stackColor}`
126
- : `0 0 2px ${stackColor}80`,
156
+ : `0 0 2px color-mix(in srgb, ${stackColor} 50%, transparent)`,
127
157
  }"
128
158
  />
129
159
  <!-- Straight horizontal line when deltaY is 0 -->
130
160
  <div
131
161
  v-if="!effectiveDeltaY"
132
- class="alpha-circular-pyramid-stack-content__line absolute left-0 top-0 w-full h-[1px] -translate-y-1/2 pointer-events-none transition-colors duration-300"
162
+ class="alpha-circular-pyramid-stack-content__line absolute left-0 top-0 w-full h-px -translate-y-1/2 pointer-events-none transition-colors duration-300"
163
+ :class="{
164
+ 'alpha-circular-pyramid-stack-content__line--animated': isAnimated,
165
+ }"
133
166
  :style="{
134
167
  backgroundColor: stackColor,
135
168
  opacity: isActive ? 1 : 0.65,
@@ -137,6 +170,7 @@ const stackColor = computed(() => {
137
170
  />
138
171
  <!-- Zigzag SVG connector when deltaY !== 0 -->
139
172
  <svg
173
+ aria-hidden="true"
140
174
  v-else
141
175
  class="alpha-circular-pyramid-stack-content__line-svg absolute left-0 pointer-events-none overflow-visible"
142
176
  :width="connectorWidth"
@@ -150,12 +184,16 @@ const stackColor = computed(() => {
150
184
  >
151
185
  <path
152
186
  class="alpha-circular-pyramid-stack-content__line transition-all duration-300"
187
+ :class="{
188
+ 'alpha-circular-pyramid-stack-content__line--svg-animated': isAnimated,
189
+ }"
153
190
  :d="connectorPath"
154
191
  fill="none"
155
192
  :stroke="stackColor"
156
193
  stroke-width="1.25"
157
194
  stroke-linecap="round"
158
195
  stroke-linejoin="round"
196
+ pathLength="1"
159
197
  :style="{
160
198
  opacity: isActive ? 1 : 0.65,
161
199
  }"
@@ -164,35 +202,30 @@ const stackColor = computed(() => {
164
202
  </div>
165
203
  <!-- Content Card -->
166
204
  <div
167
- class="alpha-circular-pyramid-stack-content rounded-xl p-2 px-2.5 transition-all duration-300 border select-none box-border flex-shrink-0"
168
- :class="[
169
- isActive
170
- ? 'alpha-circular-pyramid-stack-content--active'
171
- : 'alpha-circular-pyramid-stack-content--default',
172
- ]"
205
+ v-bind="forwardedAttrs()"
206
+ :class="
207
+ className({
208
+ 'alpha-circular-pyramid-stack-content--animated': isAnimated,
209
+ })
210
+ "
173
211
  :style="{
174
212
  width: `${contentWidth}px`,
175
213
  minWidth: `${contentWidth}px`,
176
214
  maxWidth: `${contentWidth}px`,
177
215
  boxSizing: 'border-box',
178
216
  borderColor: stackColor,
179
- backgroundColor: isActive
180
- ? 'rgba(255, 255, 255, 0.95)'
181
- : 'rgba(255, 255, 255, 0.85)',
182
217
  boxShadow: isActive
183
- ? `0 4px 14px ${stackColor}26`
218
+ ? `0 4px 14px color-mix(in srgb, ${stackColor} 15%, transparent)`
184
219
  : 'none',
220
+ '--card-transform': deltaY ? `translateY(${deltaY}px)` : 'none',
185
221
  transform: deltaY ? `translateY(${deltaY}px)` : undefined,
186
222
  }"
187
223
  >
188
- <div
189
- class="text-[10px] leading-snug transition-colors duration-300 break-words line-clamp-3"
190
- :style="{
191
- color: isActive ? '#0f172a' : '#475569',
192
- }"
224
+ <p
225
+ class="text-[10px] transition-colors duration-300 wrap-break-word line-clamp-3"
193
226
  >
194
- <slot>{{ props.content }}</slot>
195
- </div>
227
+ <slot />
228
+ </p>
196
229
  </div>
197
230
  </div>
198
231
  </template>
@@ -205,4 +238,78 @@ const stackColor = computed(() => {
205
238
  .alpha-circular-pyramid-stack-content--active {
206
239
  backdrop-filter: blur(8px);
207
240
  }
241
+
242
+ .alpha-circular-pyramid-stack-content__dot--animated {
243
+ animation: alpha-pyramid-dot-pop 120ms cubic-bezier(0.16, 1, 0.3, 1)
244
+ var(--content-delay) both;
245
+ }
246
+
247
+ @keyframes alpha-pyramid-dot-pop {
248
+ 0% {
249
+ opacity: 0;
250
+ transform: translate(-50%, -50%) scale(0);
251
+ }
252
+ 100% {
253
+ opacity: 1;
254
+ transform: translate(-50%, -50%) scale(1);
255
+ }
256
+ }
257
+
258
+ .alpha-circular-pyramid-stack-content__line--animated {
259
+ transform-origin: left center;
260
+ animation: alpha-pyramid-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1)
261
+ calc(var(--content-delay) + 120ms) both;
262
+ }
263
+
264
+ @keyframes alpha-pyramid-line-draw {
265
+ 0% {
266
+ opacity: 0;
267
+ transform: translateY(-50%) scaleX(0);
268
+ }
269
+ 2% {
270
+ opacity: 1;
271
+ transform: translateY(-50%) scaleX(0);
272
+ }
273
+ 100% {
274
+ opacity: 1;
275
+ transform: translateY(-50%) scaleX(1);
276
+ }
277
+ }
278
+
279
+ .alpha-circular-pyramid-stack-content__line--svg-animated {
280
+ stroke-dasharray: 1;
281
+ animation: alpha-pyramid-svg-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1)
282
+ calc(var(--content-delay) + 120ms) both;
283
+ }
284
+
285
+ @keyframes alpha-pyramid-svg-line-draw {
286
+ 0% {
287
+ opacity: 0;
288
+ stroke-dashoffset: 1;
289
+ }
290
+ 2% {
291
+ opacity: 1;
292
+ stroke-dashoffset: 1;
293
+ }
294
+ 100% {
295
+ opacity: 1;
296
+ stroke-dashoffset: 0;
297
+ }
298
+ }
299
+
300
+ .alpha-circular-pyramid-stack-content--animated {
301
+ animation: alpha-pyramid-card-in 240ms cubic-bezier(0.16, 1, 0.3, 1)
302
+ calc(var(--content-delay) + 380ms) both;
303
+ }
304
+
305
+ @keyframes alpha-pyramid-card-in {
306
+ 0% {
307
+ opacity: 0;
308
+ transform: var(--card-transform, none) translateX(10px);
309
+ }
310
+ 100% {
311
+ opacity: 1;
312
+ transform: var(--card-transform, none) translateX(0);
313
+ }
314
+ }
208
315
  </style>