@for-the-people-initiative/design-system 1.3.1

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 (342) hide show
  1. package/README.md +80 -0
  2. package/dist/css/theme-dark.css +7 -0
  3. package/dist/css/tokens.css +2315 -0
  4. package/dist/scss/_tokens.scss +2521 -0
  5. package/dist/ts/tokens.ts +2441 -0
  6. package/package.json +80 -0
  7. package/src/components/Accordion/Accordion.scss +118 -0
  8. package/src/components/Accordion/Accordion.vue +105 -0
  9. package/src/components/Accordion/AccordionTab.vue +79 -0
  10. package/src/components/Alert/Alert.scss +109 -0
  11. package/src/components/Alert/Alert.vue +79 -0
  12. package/src/components/AppBar/AppBar.scss +73 -0
  13. package/src/components/AppBar/AppBar.vue +49 -0
  14. package/src/components/AtmosphericBackground/AtmosphericBackground.vue +198 -0
  15. package/src/components/AutoComplete/AutoComplete.scss +282 -0
  16. package/src/components/AutoComplete/AutoComplete.vue +398 -0
  17. package/src/components/Avatar/Avatar.scss +191 -0
  18. package/src/components/Avatar/Avatar.vue +44 -0
  19. package/src/components/Badge/Badge.scss +84 -0
  20. package/src/components/Badge/Badge.vue +41 -0
  21. package/src/components/BlockUI/BlockUI.scss +85 -0
  22. package/src/components/BlockUI/BlockUI.vue +90 -0
  23. package/src/components/Breadcrumb/Breadcrumb.scss +84 -0
  24. package/src/components/Breadcrumb/Breadcrumb.vue +141 -0
  25. package/src/components/Button/Button.scss +254 -0
  26. package/src/components/Button/Button.vue +68 -0
  27. package/src/components/CTA/CTA.scss +92 -0
  28. package/src/components/CTA/CTA.vue +33 -0
  29. package/src/components/Calendar/Calendar.scss +330 -0
  30. package/src/components/Calendar/Calendar.vue +455 -0
  31. package/src/components/Card/Card.scss +66 -0
  32. package/src/components/Card/Card.vue +48 -0
  33. package/src/components/Carousel/Carousel.scss +121 -0
  34. package/src/components/Carousel/Carousel.vue +191 -0
  35. package/src/components/Chart/Chart.scss +109 -0
  36. package/src/components/Chart/Chart.vue +209 -0
  37. package/src/components/Checkbox/Checkbox.scss +148 -0
  38. package/src/components/Checkbox/Checkbox.vue +75 -0
  39. package/src/components/Chip/Chip.scss +83 -0
  40. package/src/components/Chip/Chip.vue +73 -0
  41. package/src/components/ColorPicker/ColorPicker.scss +244 -0
  42. package/src/components/ColorPicker/ColorPicker.vue +411 -0
  43. package/src/components/Column/Column.scss +87 -0
  44. package/src/components/Column/Column.vue +45 -0
  45. package/src/components/ColumnGroup/ColumnGroup.scss +41 -0
  46. package/src/components/ColumnGroup/ColumnGroup.vue +27 -0
  47. package/src/components/ColumnGroup/ColumnGroupRow.vue +18 -0
  48. package/src/components/CommandPalette/CommandPalette.scss +143 -0
  49. package/src/components/CommandPalette/CommandPalette.vue +165 -0
  50. package/src/components/ConfirmDialog/ConfirmDialog.scss +177 -0
  51. package/src/components/ConfirmDialog/ConfirmDialog.vue +162 -0
  52. package/src/components/ConfirmPopup/ConfirmPopup.scss +180 -0
  53. package/src/components/ConfirmPopup/ConfirmPopup.vue +185 -0
  54. package/src/components/ContextMenu/ContextMenu.scss +171 -0
  55. package/src/components/ContextMenu/ContextMenu.vue +383 -0
  56. package/src/components/DataTable/DataTable.scss +162 -0
  57. package/src/components/DataTable/DataTable.vue +225 -0
  58. package/src/components/DataView/DataView.scss +149 -0
  59. package/src/components/DataView/DataView.vue +172 -0
  60. package/src/components/DatePicker/DatePicker.scss +71 -0
  61. package/src/components/DatePicker/DatePicker.vue +121 -0
  62. package/src/components/Dialog/Dialog.scss +161 -0
  63. package/src/components/Dialog/Dialog.vue +245 -0
  64. package/src/components/Divider/Divider.scss +147 -0
  65. package/src/components/Divider/Divider.vue +49 -0
  66. package/src/components/Dock/Dock.scss +221 -0
  67. package/src/components/Dock/Dock.vue +107 -0
  68. package/src/components/Drawer/Drawer.scss +220 -0
  69. package/src/components/Drawer/Drawer.vue +137 -0
  70. package/src/components/Dropdown/Dropdown.scss +218 -0
  71. package/src/components/Dropdown/Dropdown.vue +313 -0
  72. package/src/components/Editor/Editor.scss +156 -0
  73. package/src/components/Editor/Editor.vue +253 -0
  74. package/src/components/FAQ/FAQ.scss +24 -0
  75. package/src/components/FAQ/FAQ.vue +28 -0
  76. package/src/components/FeatureGrid/FeatureGrid.scss +92 -0
  77. package/src/components/FeatureGrid/FeatureGrid.vue +39 -0
  78. package/src/components/FieldSet/FieldSet.scss +97 -0
  79. package/src/components/FieldSet/FieldSet.vue +70 -0
  80. package/src/components/FileUpload/FileUpload.scss +137 -0
  81. package/src/components/FileUpload/FileUpload.vue +183 -0
  82. package/src/components/Footer/Footer.scss +95 -0
  83. package/src/components/Footer/Footer.vue +59 -0
  84. package/src/components/Form/Form.scss +72 -0
  85. package/src/components/Form/Form.vue +30 -0
  86. package/src/components/Form/FormField.vue +42 -0
  87. package/src/components/Galleria/Galleria.scss +295 -0
  88. package/src/components/Galleria/Galleria.vue +274 -0
  89. package/src/components/Hero/Hero.scss +116 -0
  90. package/src/components/Hero/Hero.vue +57 -0
  91. package/src/components/Image/Image.scss +129 -0
  92. package/src/components/Image/Image.vue +117 -0
  93. package/src/components/ImageCompare/ImageCompare.scss +97 -0
  94. package/src/components/ImageCompare/ImageCompare.vue +66 -0
  95. package/src/components/InPlace/InPlace.scss +97 -0
  96. package/src/components/InPlace/InPlace.vue +107 -0
  97. package/src/components/InlineMessage/InlineMessage.scss +69 -0
  98. package/src/components/InlineMessage/InlineMessage.vue +47 -0
  99. package/src/components/InputChips/InputChips.scss +165 -0
  100. package/src/components/InputChips/InputChips.vue +169 -0
  101. package/src/components/InputGroup/InputGroup.scss +57 -0
  102. package/src/components/InputGroup/InputGroup.vue +22 -0
  103. package/src/components/InputGroupAddon/InputGroupAddon.scss +28 -0
  104. package/src/components/InputGroupAddon/InputGroupAddon.vue +22 -0
  105. package/src/components/InputIcon/InputIcon.scss +58 -0
  106. package/src/components/InputIcon/InputIcon.vue +28 -0
  107. package/src/components/InputMask/InputMask.scss +65 -0
  108. package/src/components/InputMask/InputMask.vue +268 -0
  109. package/src/components/InputNumber/InputNumber.scss +122 -0
  110. package/src/components/InputNumber/InputNumber.vue +150 -0
  111. package/src/components/InputOtp/InputOtp.scss +88 -0
  112. package/src/components/InputOtp/InputOtp.vue +230 -0
  113. package/src/components/InputSwitch/InputSwitch.scss +131 -0
  114. package/src/components/InputSwitch/InputSwitch.vue +49 -0
  115. package/src/components/InputText/InputText.scss +61 -0
  116. package/src/components/InputText/InputText.vue +71 -0
  117. package/src/components/Knob/Knob.scss +92 -0
  118. package/src/components/Knob/Knob.vue +252 -0
  119. package/src/components/ListBox/ListBox.scss +152 -0
  120. package/src/components/ListBox/ListBox.vue +198 -0
  121. package/src/components/LogoCloud/LogoCloud.scss +64 -0
  122. package/src/components/LogoCloud/LogoCloud.vue +35 -0
  123. package/src/components/MegaMenu/MegaMenu.scss +280 -0
  124. package/src/components/MegaMenu/MegaMenu.vue +218 -0
  125. package/src/components/Menu/Menu.scss +102 -0
  126. package/src/components/Menu/Menu.vue +221 -0
  127. package/src/components/MenuBar/MenuBar.scss +208 -0
  128. package/src/components/MenuBar/MenuBar.vue +306 -0
  129. package/src/components/Message/Message.scss +126 -0
  130. package/src/components/Message/Message.vue +99 -0
  131. package/src/components/MeterGroup/MeterGroup.scss +105 -0
  132. package/src/components/MeterGroup/MeterGroup.vue +73 -0
  133. package/src/components/MultiSelect/MultiSelect.scss +239 -0
  134. package/src/components/MultiSelect/MultiSelect.vue +296 -0
  135. package/src/components/OrderList/OrderList.scss +133 -0
  136. package/src/components/OrderList/OrderList.vue +267 -0
  137. package/src/components/OrganizationChart/OrganizationChart.scss +145 -0
  138. package/src/components/OrganizationChart/OrganizationChart.vue +220 -0
  139. package/src/components/OverlayPanel/OverlayPanel.scss +69 -0
  140. package/src/components/OverlayPanel/OverlayPanel.vue +180 -0
  141. package/src/components/Paginator/Paginator.scss +130 -0
  142. package/src/components/Paginator/Paginator.vue +212 -0
  143. package/src/components/Panel/Panel.scss +113 -0
  144. package/src/components/Panel/Panel.vue +89 -0
  145. package/src/components/PanelMenu/PanelMenu.scss +211 -0
  146. package/src/components/PanelMenu/PanelMenu.vue +295 -0
  147. package/src/components/ParticleBackground/ParticleBackground.vue +310 -0
  148. package/src/components/PickList/PickList.scss +126 -0
  149. package/src/components/PickList/PickList.vue +249 -0
  150. package/src/components/PopOver/PopOver.scss +112 -0
  151. package/src/components/PopOver/PopOver.vue +254 -0
  152. package/src/components/PricingTable/PricingCard.vue +33 -0
  153. package/src/components/PricingTable/PricingTable.scss +133 -0
  154. package/src/components/PricingTable/PricingTable.vue +21 -0
  155. package/src/components/ProgressBar/ProgressBar.scss +58 -0
  156. package/src/components/ProgressBar/ProgressBar.vue +48 -0
  157. package/src/components/ProgressSpinner/ProgressSpinner.scss +48 -0
  158. package/src/components/ProgressSpinner/ProgressSpinner.vue +53 -0
  159. package/src/components/RadioButton/RadioButton.scss +148 -0
  160. package/src/components/RadioButton/RadioButton.vue +52 -0
  161. package/src/components/Rating/Rating.scss +109 -0
  162. package/src/components/Rating/Rating.vue +136 -0
  163. package/src/components/Row/Row.scss +38 -0
  164. package/src/components/Row/Row.vue +30 -0
  165. package/src/components/ScrollPanel/ScrollPanel.scss +90 -0
  166. package/src/components/ScrollPanel/ScrollPanel.vue +284 -0
  167. package/src/components/ScrollTop/ScrollTop.scss +59 -0
  168. package/src/components/ScrollTop/ScrollTop.vue +99 -0
  169. package/src/components/Section/Section.scss +58 -0
  170. package/src/components/Section/Section.vue +39 -0
  171. package/src/components/Select/Select.scss +98 -0
  172. package/src/components/Select/Select.vue +92 -0
  173. package/src/components/SelectButton/SelectButton.scss +65 -0
  174. package/src/components/SelectButton/SelectButton.vue +144 -0
  175. package/src/components/Sidebar/Sidebar.scss +170 -0
  176. package/src/components/Sidebar/Sidebar.vue +137 -0
  177. package/src/components/Skeleton/Skeleton.scss +43 -0
  178. package/src/components/Skeleton/Skeleton.vue +57 -0
  179. package/src/components/Slider/Slider.scss +103 -0
  180. package/src/components/Slider/Slider.vue +65 -0
  181. package/src/components/SpeedDial/SpeedDial.scss +217 -0
  182. package/src/components/SpeedDial/SpeedDial.vue +196 -0
  183. package/src/components/SplitButton/SplitButton.scss +264 -0
  184. package/src/components/SplitButton/SplitButton.vue +172 -0
  185. package/src/components/Splitter/Splitter.scss +95 -0
  186. package/src/components/Splitter/Splitter.vue +191 -0
  187. package/src/components/Splitter/SplitterPanel.vue +125 -0
  188. package/src/components/Stats/Stats.scss +54 -0
  189. package/src/components/Stats/Stats.vue +28 -0
  190. package/src/components/Steps/Steps.scss +164 -0
  191. package/src/components/Steps/Steps.vue +100 -0
  192. package/src/components/TabMenu/TabMenu.scss +106 -0
  193. package/src/components/TabMenu/TabMenu.vue +174 -0
  194. package/src/components/Tabs/TabPanel.vue +41 -0
  195. package/src/components/Tabs/Tabs.scss +82 -0
  196. package/src/components/Tabs/Tabs.vue +162 -0
  197. package/src/components/Tag/Tag.scss +73 -0
  198. package/src/components/Tag/Tag.vue +37 -0
  199. package/src/components/Terminal/Terminal.scss +80 -0
  200. package/src/components/Terminal/Terminal.vue +113 -0
  201. package/src/components/Testimonial/Testimonial.scss +80 -0
  202. package/src/components/Testimonial/Testimonial.vue +29 -0
  203. package/src/components/Textarea/Textarea.scss +65 -0
  204. package/src/components/Textarea/Textarea.vue +101 -0
  205. package/src/components/TieredMenu/TieredMenu.scss +146 -0
  206. package/src/components/TieredMenu/TieredMenu.vue +270 -0
  207. package/src/components/TieredMenu/TieredMenuSub.vue +132 -0
  208. package/src/components/Timeline/Timeline.scss +190 -0
  209. package/src/components/Timeline/Timeline.vue +79 -0
  210. package/src/components/Toast/Toast.scss +284 -0
  211. package/src/components/Toast/Toast.vue +162 -0
  212. package/src/components/ToggleButton/ToggleButton.scss +99 -0
  213. package/src/components/ToggleButton/ToggleButton.vue +65 -0
  214. package/src/components/ToggleSwitch/ToggleSwitch.scss +68 -0
  215. package/src/components/ToggleSwitch/ToggleSwitch.vue +44 -0
  216. package/src/components/Toolbar/Toolbar.scss +37 -0
  217. package/src/components/Toolbar/Toolbar.vue +23 -0
  218. package/src/components/Tooltip/Tooltip.scss +114 -0
  219. package/src/components/Tooltip/Tooltip.vue +169 -0
  220. package/src/components/Tree/Tree.scss +164 -0
  221. package/src/components/Tree/Tree.vue +273 -0
  222. package/src/components/TreeSelect/TreeSelect.scss +238 -0
  223. package/src/components/TreeSelect/TreeSelect.vue +401 -0
  224. package/src/components/TreeTable/TreeTable.scss +172 -0
  225. package/src/components/TreeTable/TreeTable.vue +285 -0
  226. package/src/components/VirtualScroller/VirtualScroller.scss +107 -0
  227. package/src/components/VirtualScroller/VirtualScroller.vue +234 -0
  228. package/src/scss/fonts.scss +63 -0
  229. package/src/scss/mixins/accent-gradient.scss +43 -0
  230. package/src/scss/mixins/border.scss +28 -0
  231. package/src/scss/mixins/breakpoint.scss +80 -0
  232. package/src/scss/mixins/container.scss +33 -0
  233. package/src/scss/mixins/elevation.scss +43 -0
  234. package/src/scss/mixins/grid.scss +23 -0
  235. package/src/scss/mixins/levitation.scss +15 -0
  236. package/src/scss/mixins/list.scss +5 -0
  237. package/src/scss/mixins/surface-atmospheric.scss +93 -0
  238. package/src/scss/mixins/surface.scss +19 -0
  239. package/src/scss/mixins/typography.scss +91 -0
  240. package/src/scss/utility-classes/utility-classes-spacing.scss +34 -0
  241. package/src/scss/utility-classes/utility-classes-typography.scss +114 -0
  242. package/tokens/components/accordion.json +127 -0
  243. package/tokens/components/autocomplete.json +238 -0
  244. package/tokens/components/avatar.json +220 -0
  245. package/tokens/components/badge.json +119 -0
  246. package/tokens/components/block-ui.json +40 -0
  247. package/tokens/components/breadcrumb.json +57 -0
  248. package/tokens/components/button.json +395 -0
  249. package/tokens/components/calendar.json +260 -0
  250. package/tokens/components/card.json +157 -0
  251. package/tokens/components/carousel.json +154 -0
  252. package/tokens/components/chart.json +132 -0
  253. package/tokens/components/checkbox.json +130 -0
  254. package/tokens/components/chip.json +100 -0
  255. package/tokens/components/color-picker.json +196 -0
  256. package/tokens/components/column-group.json +45 -0
  257. package/tokens/components/column.json +109 -0
  258. package/tokens/components/confirm-dialog.json +141 -0
  259. package/tokens/components/confirm-popup.json +101 -0
  260. package/tokens/components/context-menu.json +168 -0
  261. package/tokens/components/data-table.json +157 -0
  262. package/tokens/components/data-view.json +172 -0
  263. package/tokens/components/dialog.json +151 -0
  264. package/tokens/components/divider.json +45 -0
  265. package/tokens/components/dock.json +173 -0
  266. package/tokens/components/drawer.json +163 -0
  267. package/tokens/components/dropdown.json +230 -0
  268. package/tokens/components/editor.json +170 -0
  269. package/tokens/components/field-set.json +115 -0
  270. package/tokens/components/file-upload.json +193 -0
  271. package/tokens/components/galleria.json +235 -0
  272. package/tokens/components/image-compare.json +74 -0
  273. package/tokens/components/image.json +71 -0
  274. package/tokens/components/in-place.json +100 -0
  275. package/tokens/components/inline-message.json +107 -0
  276. package/tokens/components/input-chips.json +187 -0
  277. package/tokens/components/input-group-addon.json +47 -0
  278. package/tokens/components/input-group.json +21 -0
  279. package/tokens/components/input-icon.json +38 -0
  280. package/tokens/components/input-mask.json +136 -0
  281. package/tokens/components/input-number.json +144 -0
  282. package/tokens/components/input-otp.json +138 -0
  283. package/tokens/components/input-switch.json +108 -0
  284. package/tokens/components/input-text.json +136 -0
  285. package/tokens/components/knob.json +119 -0
  286. package/tokens/components/listbox.json +166 -0
  287. package/tokens/components/mega-menu.json +283 -0
  288. package/tokens/components/menu.json +145 -0
  289. package/tokens/components/menubar.json +152 -0
  290. package/tokens/components/message.json +151 -0
  291. package/tokens/components/meter-group.json +108 -0
  292. package/tokens/components/multi-select.json +244 -0
  293. package/tokens/components/order-list.json +193 -0
  294. package/tokens/components/organization-chart.json +188 -0
  295. package/tokens/components/overlay-panel.json +94 -0
  296. package/tokens/components/paginator.json +186 -0
  297. package/tokens/components/panel.json +120 -0
  298. package/tokens/components/panelmenu.json +190 -0
  299. package/tokens/components/picklist.json +187 -0
  300. package/tokens/components/popover.json +65 -0
  301. package/tokens/components/progress-bar.json +33 -0
  302. package/tokens/components/progress-spinner.json +38 -0
  303. package/tokens/components/radio.json +125 -0
  304. package/tokens/components/rating.json +76 -0
  305. package/tokens/components/row.json +62 -0
  306. package/tokens/components/scroll-panel.json +69 -0
  307. package/tokens/components/scroll-top.json +84 -0
  308. package/tokens/components/select-button.json +145 -0
  309. package/tokens/components/select.json +190 -0
  310. package/tokens/components/sidebar.json +146 -0
  311. package/tokens/components/skeleton.json +26 -0
  312. package/tokens/components/slider.json +82 -0
  313. package/tokens/components/speed-dial.json +144 -0
  314. package/tokens/components/split-button.json +316 -0
  315. package/tokens/components/splitter.json +88 -0
  316. package/tokens/components/steps.json +154 -0
  317. package/tokens/components/tabmenu.json +103 -0
  318. package/tokens/components/tabs.json +97 -0
  319. package/tokens/components/tag.json +122 -0
  320. package/tokens/components/terminal.json +100 -0
  321. package/tokens/components/textarea.json +96 -0
  322. package/tokens/components/tieredmenu.json +142 -0
  323. package/tokens/components/timeline.json +129 -0
  324. package/tokens/components/toast.json +281 -0
  325. package/tokens/components/toggle-button.json +220 -0
  326. package/tokens/components/toggle-switch.json +95 -0
  327. package/tokens/components/toolbar.json +41 -0
  328. package/tokens/components/tooltip.json +60 -0
  329. package/tokens/components/tree-select.json +224 -0
  330. package/tokens/components/tree.json +153 -0
  331. package/tokens/components/treetable.json +155 -0
  332. package/tokens/components/virtualscroller.json +95 -0
  333. package/tokens/primitives/color.json +137 -0
  334. package/tokens/primitives/radius.json +12 -0
  335. package/tokens/primitives/shadow.json +29 -0
  336. package/tokens/primitives/spacing.json +15 -0
  337. package/tokens/semantics/color.json +81 -0
  338. package/tokens/semantics/radius.json +10 -0
  339. package/tokens/semantics/shadow.json +9 -0
  340. package/tokens/semantics/spacing.json +24 -0
  341. package/tokens/themes/dark.json +7 -0
  342. package/tokens/themes/light.json +7 -0
@@ -0,0 +1,43 @@
1
+ @use "../../../dist/scss/tokens" as *;
2
+
3
+ /// Accent gradient mixin for consistent gradient backgrounds across components
4
+ /// Used for checked states, active indicators, filled tracks, etc.
5
+ /// @param {string} $state - Gradient state: default or hover
6
+ /// @param {number} $angle - Gradient angle in degrees (default: 135deg)
7
+ @mixin accent-gradient($state: "default", $angle: 135deg) {
8
+ @if $state == "default" {
9
+ background: linear-gradient(
10
+ #{$angle},
11
+ var(--accent-gradient-start, $accent-gradient-start),
12
+ var(--accent-gradient-end, $accent-gradient-end)
13
+ );
14
+ } @else if $state == "hover" {
15
+ background: linear-gradient(
16
+ #{$angle},
17
+ var(--accent-gradient-hoverStart, $accent-gradient-hoverStart),
18
+ var(--accent-gradient-hoverEnd, $accent-gradient-hoverEnd)
19
+ );
20
+ }
21
+ }
22
+
23
+ /// Accent gradient text for vibrant text elements
24
+ /// @param {string} $state - Gradient state: default or hover
25
+ @mixin accent-gradient-text($state: "default") {
26
+ @if $state == "default" {
27
+ background: linear-gradient(
28
+ 135deg,
29
+ var(--accent-gradient-start, $accent-gradient-start),
30
+ var(--accent-gradient-end, $accent-gradient-end)
31
+ );
32
+ } @else if $state == "hover" {
33
+ background: linear-gradient(
34
+ 135deg,
35
+ var(--accent-gradient-hoverStart, $accent-gradient-hoverStart),
36
+ var(--accent-gradient-hoverEnd, $accent-gradient-hoverEnd)
37
+ );
38
+ }
39
+ -webkit-background-clip: text;
40
+ background-clip: text;
41
+ -webkit-text-fill-color: transparent;
42
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
43
+ }
@@ -0,0 +1,28 @@
1
+ @use "../../../dist/scss/tokens" as *;
2
+
3
+ /// Border mixin for consistent border treatments
4
+ /// @param {string} $tier - Border tier: subtle, default, strong, or vibrant
5
+ /// @param {color} $bg - Background color for gradient border (required for vibrant with border-radius)
6
+ @mixin border($tier: "default", $bg: null) {
7
+ @if $tier == "subtle" {
8
+ border: 1px solid $border-subtle;
9
+ } @else if $tier == "default" {
10
+ border: 1px solid $border-default;
11
+ } @else if $tier == "strong" {
12
+ border: 1px solid $border-strong;
13
+ } @else if $tier == "vibrant" {
14
+ // Gradient border that works with border-radius
15
+ // Uses double background trick: solid bg on padding-box, gradient on border-box
16
+ border: 2px solid transparent;
17
+ @if $bg {
18
+ background:
19
+ linear-gradient($bg, $bg) padding-box,
20
+ linear-gradient(45deg, $border-vibrant-start, $border-vibrant-end) border-box;
21
+ } @else {
22
+ // Default to white background
23
+ background:
24
+ linear-gradient(#fff, #fff) padding-box,
25
+ linear-gradient(45deg, $border-vibrant-start, $border-vibrant-end) border-box;
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,80 @@
1
+ // Defined based on statcounter stats end 2023
2
+ // Phone - https://gs.statcounter.com/screen-resolution-stats/mobile/netherlands#monthly-202210-202310
3
+ // Tablet - https://gs.statcounter.com/screen-resolution-stats/tablet/netherlands#monthly-202210-202310
4
+ // Desktop - https://gs.statcounter.com/screen-resolution-stats/tablet/netherlands#monthly-202210-202310
5
+
6
+ @use "sass:map";
7
+
8
+ $breakpoints: (
9
+ phone: (
10
+ from: 0px,
11
+ to: 767px,
12
+ ),
13
+ phone-portrait: (
14
+ from: 0px,
15
+ to: 429px,
16
+ ),
17
+ phone-landscape: (
18
+ from: 430px,
19
+ to: 767px,
20
+ ),
21
+ tablet: (
22
+ from: 768px,
23
+ to: 1280px,
24
+ ),
25
+ tablet-portrait: (
26
+ from: 768px,
27
+ to: 1023px,
28
+ ),
29
+ tablet-landscape: (
30
+ from: 1024px,
31
+ to: 1280px,
32
+ ),
33
+ laptop: (
34
+ from: 1281px,
35
+ to: 1919px,
36
+ ),
37
+ desktop: (
38
+ from: 1920px,
39
+ to: 2559px,
40
+ ),
41
+ wide-screen: (
42
+ from: 2560px,
43
+ to: 10000px,
44
+ ),
45
+ );
46
+
47
+ @mixin breakpoint-from($bp) {
48
+ $from: map.get(map.get($breakpoints, $bp), from);
49
+
50
+ @media (min-width: $from) {
51
+ @content;
52
+ }
53
+ }
54
+
55
+ @mixin breakpoint-to($bp) {
56
+ $from: map.get(map.get($breakpoints, $bp), from);
57
+ $max-width: $from - 1;
58
+
59
+ @media (max-width: $max-width) {
60
+ @content;
61
+ }
62
+ }
63
+
64
+ @mixin breakpoint-on($bp) {
65
+ $from: map.get(map.get($breakpoints, $bp), from);
66
+ $to: map.get(map.get($breakpoints, $bp), to);
67
+
68
+ @media (max-width: $to) and (min-width: $from) {
69
+ @content;
70
+ }
71
+ }
72
+
73
+ @mixin breakpoint-from-to($bp-from, $bp-to) {
74
+ $from: map.get(map.get($breakpoints, $bp-from), from);
75
+ $to: map.get(map.get($breakpoints, $bp-to), to);
76
+
77
+ @media (max-width: $to) and (min-width: $from) {
78
+ @content;
79
+ }
80
+ }
@@ -0,0 +1,33 @@
1
+ @use "./breakpoint.scss" as bp;
2
+ @use "../../dist/scss/tokens" as tokens;
3
+
4
+ @mixin container() {
5
+ padding-left: tokens.$inset-m;
6
+ padding-right: tokens.$inset-m;
7
+ width: 100%;
8
+ box-sizing: border-box;
9
+
10
+ @include bp.breakpoint-from(tablet) {
11
+ padding: 0 tokens.$inset-2xl;
12
+ }
13
+
14
+ @include bp.breakpoint-from(laptop) {
15
+ padding: 0 80px; // Larger container padding
16
+ }
17
+ }
18
+
19
+ @mixin container-with-dna() {
20
+ $extra-space: 48px;
21
+ padding-left: tokens.$inset-l;
22
+ padding-right: calc(#{tokens.$inset-l} + #{$extra-space});
23
+
24
+ @include bp.breakpoint-from(tablet) {
25
+ padding-left: tokens.$inset-2xl;
26
+ padding-right: calc(#{tokens.$inset-2xl} + #{$extra-space});
27
+ }
28
+
29
+ @include bp.breakpoint-from(laptop) {
30
+ padding-left: 80px;
31
+ padding-right: calc(80px + #{$extra-space});
32
+ }
33
+ }
@@ -0,0 +1,43 @@
1
+ // Surface elevation mixin
2
+ // Usage: @include elevation(2) — gives background, border, and shadow for layer 2
3
+
4
+ @mixin elevation($level: 1) {
5
+ @if $level == 0 {
6
+ background: var(--surface-canvas);
7
+ border: none;
8
+ box-shadow: none;
9
+ } @else if $level == 1 {
10
+ background: var(--surface-panel);
11
+ border: 1px solid var(--border-subtle);
12
+ box-shadow: var(--shadow-xs);
13
+ } @else if $level == 2 {
14
+ background: var(--surface-elevated);
15
+ border: 1px solid var(--border-default);
16
+ box-shadow: var(--shadow-s);
17
+ } @else if $level == 3 {
18
+ background: var(--surface-raised);
19
+ border: 1px solid var(--border-strong);
20
+ box-shadow: var(--shadow-m);
21
+ } @else if $level == 4 {
22
+ background: var(--surface-elevated);
23
+ border: 1px solid var(--border-strong);
24
+ box-shadow: var(--shadow-xl);
25
+ }
26
+
27
+ border-radius: var(--radius-rounded);
28
+ }
29
+
30
+ // Muted/recessed surface (for inputs inside a card)
31
+ @mixin surface-muted {
32
+ background: var(--surface-muted);
33
+ border: 1px solid var(--border-subtle);
34
+ }
35
+
36
+ // Accent surface (for highlighted cards)
37
+ @mixin surface-accent {
38
+ background: var(--surface-accent);
39
+ border: 1px solid transparent;
40
+ border-image: linear-gradient(135deg, var(--accent-gradient-start), var(--accent-gradient-end)) 1;
41
+ // Or use a wrapper approach for border-radius compatibility:
42
+ // outline: 1px solid var(--border-vibrant-start);
43
+ }
@@ -0,0 +1,23 @@
1
+ @use "./breakpoint.scss" as *;
2
+ @use "./container.scss" as *;
3
+ @use "../../dist/scss/tokens" as *;
4
+
5
+ @mixin grid() {
6
+ display: grid;
7
+ gap: $inline-l;
8
+ grid-template-columns: 1fr;
9
+
10
+ @include breakpoint-from(tablet) {
11
+ grid-template-columns: repeat(4, 1fr);
12
+ gap: $inline-xl;
13
+ }
14
+
15
+ @include breakpoint-from(laptop) {
16
+ grid-template-columns: repeat(6, 1fr);
17
+ gap: $inline-2xl;
18
+ }
19
+
20
+ @include breakpoint-from(laptop) {
21
+ grid-template-columns: repeat(6, 1fr);
22
+ }
23
+ }
@@ -0,0 +1,15 @@
1
+ @use "../../dist/scss/tokens" as *;
2
+
3
+ @mixin levitate($level: "m") {
4
+ @if ($level == "xs") {
5
+ box-shadow: $shadow-xs;
6
+ } @else if ($level == "s") {
7
+ box-shadow: $shadow-s;
8
+ } @else if ($level == "m") {
9
+ box-shadow: $shadow-m;
10
+ } @else if ($level == "l") {
11
+ box-shadow: $shadow-l;
12
+ } @else if ($level == "xl") {
13
+ box-shadow: $shadow-xl;
14
+ }
15
+ }
@@ -0,0 +1,5 @@
1
+ @mixin list-clean {
2
+ padding: 0;
3
+ margin: 0;
4
+ list-style: none;
5
+ }
@@ -0,0 +1,93 @@
1
+ @use "../../../dist/scss/tokens" as *;
2
+
3
+ // Navy palette values — not in semantic tokens, hardcoded from design palette
4
+ // navy-950: #0a0e27 (deepest navy), navy-900: #0f1535 (deep navy)
5
+ $navy-950: #0a0e27;
6
+ $navy-900: #0f1535;
7
+
8
+ /// Atmospheric surface background with layered gradients and warm glow
9
+ /// Creates a rich, deep space-like background with ambient lighting
10
+ ///
11
+ /// @param {String} $glow-position - Position of warm glow: 'top', 'center', 'bottom'
12
+ /// @param {Number} $glow-intensity - Intensity of the warm glow (0-1)
13
+ /// @param {Boolean} $include-noise - Whether to include noise texture
14
+ @mixin surface-atmospheric($glow-position: 'top', $glow-intensity: 0.15, $include-noise: true) {
15
+ // Calculate glow position
16
+ $glow-y: 30%;
17
+ @if $glow-position == 'center' {
18
+ $glow-y: 50%;
19
+ } @else if $glow-position == 'bottom' {
20
+ $glow-y: 70%;
21
+ }
22
+
23
+ // Base background with layered gradients
24
+ background:
25
+ // Warm ambient glow (orange/amber)
26
+ radial-gradient(
27
+ ellipse 80% 50% at 50% #{$glow-y},
28
+ rgba(255, 160, 60, $glow-intensity) 0%,
29
+ rgba(255, 120, 40, calc($glow-intensity * 0.5)) 30%,
30
+ transparent 70%
31
+ ),
32
+ // Secondary subtle glow for depth
33
+ radial-gradient(
34
+ ellipse 60% 40% at 30% calc(#{$glow-y} - 10%),
35
+ rgba(255, 180, 80, calc($glow-intensity * 0.3)) 0%,
36
+ transparent 50%
37
+ ),
38
+ // Vignette effect (darker edges)
39
+ radial-gradient(
40
+ ellipse 100% 100% at 50% 50%,
41
+ transparent 40%,
42
+ rgba(0, 0, 0, 0.3) 100%
43
+ ),
44
+ // Base gradient
45
+ linear-gradient(
46
+ 180deg,
47
+ var(--navy-950, $navy-950) 0%,
48
+ var(--navy-900, $navy-900) 40%,
49
+ var(--navy-900, $navy-900) 60%,
50
+ var(--navy-950, $navy-950) 100%
51
+ );
52
+
53
+ background-color: var(--navy-950, $navy-950);
54
+
55
+ // Noise texture overlay
56
+ @if $include-noise {
57
+ position: relative;
58
+
59
+ &::before {
60
+ content: "";
61
+ position: absolute;
62
+ inset: 0;
63
+ opacity: 0.4;
64
+ pointer-events: none;
65
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
66
+ background-repeat: repeat;
67
+ background-size: 256px 256px;
68
+ mix-blend-mode: overlay;
69
+ z-index: 0;
70
+ }
71
+
72
+ // Ensure content stays above noise
73
+ > * {
74
+ position: relative;
75
+ z-index: 1;
76
+ }
77
+ }
78
+ }
79
+
80
+ /// Simplified atmospheric surface without noise (better performance)
81
+ @mixin surface-atmospheric-simple($glow-position: 'top', $glow-intensity: 0.15) {
82
+ @include surface-atmospheric($glow-position, $glow-intensity, false);
83
+ }
84
+
85
+ /// Dark atmospheric variant with minimal glow
86
+ @mixin surface-atmospheric-dark() {
87
+ @include surface-atmospheric('center', 0.08, true);
88
+ }
89
+
90
+ /// Vibrant atmospheric variant with stronger glow
91
+ @mixin surface-atmospheric-vibrant() {
92
+ @include surface-atmospheric('top', 0.25, true);
93
+ }
@@ -0,0 +1,19 @@
1
+ @use "../../../dist/scss/tokens" as *;
2
+
3
+ /// Surface mixin for background treatments
4
+ /// @param {string} $type - Surface type: canvas, panel, elevated, muted, accent, or gradient
5
+ @mixin surface($type: "canvas") {
6
+ @if $type == "canvas" {
7
+ background-color: $surface-canvas;
8
+ } @else if $type == "panel" {
9
+ background-color: $surface-panel;
10
+ } @else if $type == "elevated" {
11
+ background-color: $surface-elevated;
12
+ } @else if $type == "muted" {
13
+ background-color: $surface-muted;
14
+ } @else if $type == "accent" {
15
+ background-color: $surface-accent;
16
+ } @else if $type == "gradient" {
17
+ background: linear-gradient(180deg, $surface-gradient-start, $surface-gradient-end);
18
+ }
19
+ }
@@ -0,0 +1,91 @@
1
+ @use "../../dist/scss/tokens" as *;
2
+ @use "./breakpoint.scss" as *;
3
+
4
+ @mixin heading($name) {
5
+ font-weight: 500;
6
+ line-height: 1.25;
7
+ color: $text-heading;
8
+ @if ($name == "xs") {
9
+ font-size: 20px;
10
+ } @else if ($name == "s") {
11
+ font-size: 24px;
12
+ } @else if ($name == "m") {
13
+ font-size: 32px;
14
+ } @else if ($name == "l") {
15
+ font-size: 40px;
16
+ } @else if ($name == "xl") {
17
+ font-size: 48px;
18
+ } @else if ($name == "2xl") {
19
+ font-size: 64px;
20
+ line-height: 1.1;
21
+ }
22
+ }
23
+
24
+ @mixin text($name, $isStrong: false) {
25
+ line-height: 1.5;
26
+
27
+ @if ($isStrong) {
28
+ font-weight: 600;
29
+ }
30
+
31
+ @if ($name == "3xs") {
32
+ font-size: 10px;
33
+ } @else if ($name == "2xs") {
34
+ font-size: 12px;
35
+ } @else if ($name == "xs") {
36
+ font-size: 14px;
37
+ } @else if ($name == "s") {
38
+ font-size: 16px;
39
+ } @else if ($name == "m") {
40
+ font-size: 18px;
41
+ } @else if ($name == "l") {
42
+ font-size: 20px;
43
+ } @else if ($name == "xl") {
44
+ font-size: 24px;
45
+ line-height: 1.25;
46
+ } @else if ($name == "2xl") {
47
+ font-size: 28px;
48
+ line-height: 1.25;
49
+ }
50
+ }
51
+
52
+ @mixin static-typography($category: "heading", $type: "l", $isStrong: false) {
53
+ @if ($category == "heading") {
54
+ font-family: Manrope, sans-serif;
55
+ @include heading($type);
56
+ } @else {
57
+ font-family: "DM Sans", sans-serif;
58
+ @include text($type, $isStrong);
59
+ }
60
+ }
61
+
62
+ @mixin typography($category: "heading", $type, $isStrong: false) {
63
+ @if ($category == "heading") {
64
+ @if ($type == "2xl") {
65
+ @include static-typography("heading", "xl");
66
+
67
+ @include breakpoint-from(laptop) {
68
+ @include static-typography($category, $type);
69
+ }
70
+ } @else if ($type == "xl") {
71
+ @include static-typography("heading", "l");
72
+ @include breakpoint-from(laptop) {
73
+ @include static-typography($category, $type);
74
+ }
75
+ } @else if ($type == "l") {
76
+ @include static-typography("heading", "m");
77
+ @include breakpoint-from(laptop) {
78
+ @include static-typography($category, $type);
79
+ }
80
+ } @else if ($type == "m") {
81
+ @include static-typography("heading", "s");
82
+ @include breakpoint-from(laptop) {
83
+ @include static-typography($category, $type);
84
+ }
85
+ } @else {
86
+ @include static-typography($category, $type, $isStrong);
87
+ }
88
+ } @else if ($category == "text") {
89
+ @include static-typography($category, $type, $isStrong);
90
+ }
91
+ }
@@ -0,0 +1,34 @@
1
+ // Spacing utility classes using design tokens (CSS custom properties)
2
+ // Prefix: ftp- (For the People)
3
+
4
+ // Spacing scale mapped to CSS custom properties
5
+ $_spacing-scale: (
6
+ 1: var(--stack-3xs, 0.25rem),
7
+ 2: var(--stack-2xs, 0.5rem),
8
+ 3: var(--stack-xs, 0.75rem),
9
+ 4: var(--stack-sm, 1rem),
10
+ 5: var(--stack-md, 1.25rem),
11
+ 6: var(--stack-lg, 1.5rem),
12
+ 8: var(--stack-xl, 2rem),
13
+ 10: var(--stack-2xl, 2.5rem),
14
+ 12: var(--stack-3xl, 3rem),
15
+ 14: 3.5rem,
16
+ 16: 4rem,
17
+ 20: 5rem,
18
+ 24: 6rem,
19
+ 32: 8rem,
20
+ );
21
+
22
+ @each $size, $value in $_spacing-scale {
23
+ .ftp-m-#{$size} { margin: #{$value}; }
24
+ .ftp-mt-#{$size} { margin-top: #{$value}; }
25
+ .ftp-mr-#{$size} { margin-right: #{$value}; }
26
+ .ftp-mb-#{$size} { margin-bottom: #{$value}; }
27
+ .ftp-ml-#{$size} { margin-left: #{$value}; }
28
+
29
+ .ftp-p-#{$size} { padding: #{$value}; }
30
+ .ftp-pt-#{$size} { padding-top: #{$value}; }
31
+ .ftp-pr-#{$size} { padding-right: #{$value}; }
32
+ .ftp-pb-#{$size} { padding-bottom: #{$value}; }
33
+ .ftp-pl-#{$size} { padding-left: #{$value}; }
34
+ }
@@ -0,0 +1,114 @@
1
+ @use "../fonts.scss" as *;
2
+ @use "../mixins/typography.scss" as *;
3
+
4
+ .pzh-heading-xs {
5
+ @include typography("heading", "xs");
6
+ }
7
+
8
+ .pzh-heading-s {
9
+ @include typography("heading", "s");
10
+ }
11
+
12
+ .pzh-heading-m {
13
+ @include typography("heading", "m");
14
+ }
15
+
16
+ .pzh-heading-l {
17
+ @include typography("heading", "l");
18
+ }
19
+
20
+ .pzh-heading-xl {
21
+ @include typography("heading", "xl");
22
+ }
23
+
24
+ .pzh-heading-2xl {
25
+ @include typography("heading", "2xl");
26
+ }
27
+
28
+ .pzh-text-3xs {
29
+ @include typography("text", "3xs");
30
+ }
31
+
32
+ .pzh-text-2xs {
33
+ @include typography("text", "2xs");
34
+ }
35
+
36
+ .pzh-text-xs {
37
+ @include typography("text", "xs");
38
+ }
39
+
40
+ .pzh-text-s {
41
+ @include typography("text", "s");
42
+ }
43
+
44
+ .pzh-text-m {
45
+ @include typography("text", "m");
46
+ }
47
+
48
+ .pzh-text-l {
49
+ @include typography("text", "l");
50
+ }
51
+
52
+ .pzh-text-xl {
53
+ @include typography("text", "xl");
54
+ }
55
+
56
+ .pzh-text-2xl {
57
+ @include typography("text", "2xl");
58
+ }
59
+
60
+ .pzh-heading-static-xs {
61
+ @include static-typography("heading", "xs");
62
+ }
63
+
64
+ .pzh-heading-static-s {
65
+ @include static-typography("heading", "s");
66
+ }
67
+
68
+ .pzh-heading-static-m {
69
+ @include static-typography("heading", "m");
70
+ }
71
+
72
+ .pzh-heading-static-l {
73
+ @include static-typography("heading", "l");
74
+ }
75
+
76
+ .pzh-heading-static-xl {
77
+ @include static-typography("heading", "xl");
78
+ }
79
+
80
+ .pzh-heading-static-2xl {
81
+ @include static-typography("heading", "2xl");
82
+ }
83
+
84
+ .pzh-text-static-3xs {
85
+ @include static-typography("text", "3xs");
86
+ }
87
+
88
+ .pzh-text-static-2xs {
89
+ @include static-typography("text", "2xs");
90
+ }
91
+
92
+ .pzh-text-static-xs {
93
+ @include static-typography("text", "xs");
94
+ }
95
+
96
+ .pzh-text-static-s {
97
+ @include static-typography("text", "s");
98
+ }
99
+
100
+ .pzh-text-static-m {
101
+ @include static-typography("text", "m");
102
+ }
103
+
104
+ .pzh-text-static-l {
105
+ @include static-typography("text", "l");
106
+ }
107
+
108
+ .pzh-text-static-xl {
109
+ @include static-typography("text", "xl");
110
+ }
111
+
112
+ .pzh-text-static-2xl {
113
+ @include static-typography("text", "2xl");
114
+ }