css-is-awesome 1.1.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 (198) hide show
  1. package/AGENTS.md +343 -0
  2. package/CHANGELOG.md +1036 -0
  3. package/CLAUDE.md +9 -0
  4. package/CONTRACT.md +580 -0
  5. package/GEMINI.md +9 -0
  6. package/LICENSE +21 -0
  7. package/LICENSE-third-party +88 -0
  8. package/MIGRATION.md +312 -0
  9. package/README.md +380 -0
  10. package/ROADMAP.md +714 -0
  11. package/THEMING.md +290 -0
  12. package/THREE-TIERS.md +158 -0
  13. package/VERSIONING.md +200 -0
  14. package/_index.scss +34 -0
  15. package/api.scss +16 -0
  16. package/bin/README.md +57 -0
  17. package/bin/cia.cjs +114 -0
  18. package/bin/migrate-bootstrap.cjs +427 -0
  19. package/bin/migrate-tailwind.cjs +832 -0
  20. package/css-is-awesome.instructions.md +533 -0
  21. package/dist/css-is-awesome.core.css +598 -0
  22. package/dist/css-is-awesome.core.min.css +1 -0
  23. package/dist/css-is-awesome.css +3733 -0
  24. package/dist/css-is-awesome.min.css +1 -0
  25. package/dist/css-is-awesome.utilities.css +2445 -0
  26. package/dist/css-is-awesome.utilities.min.css +1 -0
  27. package/dist/tokens.css +508 -0
  28. package/dist/tokens.d.ts +266 -0
  29. package/dist/tokens.min.css +1 -0
  30. package/figma-tokens/README.md +57 -0
  31. package/figma-tokens/primitives-brand.scss +121 -0
  32. package/figma-tokens/semantic-dark.scss +61 -0
  33. package/figma-tokens/semantic-light.scss +61 -0
  34. package/figma-tokens/tokens.json +144 -0
  35. package/llm.txt +183 -0
  36. package/mcp/server.cjs +1495 -0
  37. package/package.json +199 -0
  38. package/public/icons/README.md +278 -0
  39. package/public/icons/arrow-right.svg +4 -0
  40. package/public/icons/check.svg +4 -0
  41. package/public/icons/chevron-down.svg +4 -0
  42. package/public/icons/close.svg +4 -0
  43. package/public/icons/core/arrow-down.svg +13 -0
  44. package/public/icons/core/arrow-left.svg +13 -0
  45. package/public/icons/core/arrow-right.svg +13 -0
  46. package/public/icons/core/arrow-up.svg +13 -0
  47. package/public/icons/core/bell.svg +13 -0
  48. package/public/icons/core/calendar.svg +15 -0
  49. package/public/icons/core/check.svg +12 -0
  50. package/public/icons/core/chevron-down.svg +12 -0
  51. package/public/icons/core/chevron-left.svg +12 -0
  52. package/public/icons/core/chevron-right.svg +12 -0
  53. package/public/icons/core/chevron-up.svg +12 -0
  54. package/public/icons/core/clock.svg +13 -0
  55. package/public/icons/core/close.svg +13 -0
  56. package/public/icons/core/copy.svg +13 -0
  57. package/public/icons/core/download.svg +14 -0
  58. package/public/icons/core/edit.svg +13 -0
  59. package/public/icons/core/error.svg +14 -0
  60. package/public/icons/core/external-link.svg +14 -0
  61. package/public/icons/core/eye-off.svg +15 -0
  62. package/public/icons/core/eye.svg +13 -0
  63. package/public/icons/core/filter.svg +12 -0
  64. package/public/icons/core/heart.svg +12 -0
  65. package/public/icons/core/help.svg +14 -0
  66. package/public/icons/core/home.svg +13 -0
  67. package/public/icons/core/info.svg +14 -0
  68. package/public/icons/core/loading.svg +12 -0
  69. package/public/icons/core/lock.svg +13 -0
  70. package/public/icons/core/mail.svg +13 -0
  71. package/public/icons/core/menu.svg +14 -0
  72. package/public/icons/core/message.svg +12 -0
  73. package/public/icons/core/minus.svg +12 -0
  74. package/public/icons/core/more-horizontal.svg +14 -0
  75. package/public/icons/core/pause.svg +13 -0
  76. package/public/icons/core/play.svg +12 -0
  77. package/public/icons/core/plus.svg +13 -0
  78. package/public/icons/core/refresh.svg +15 -0
  79. package/public/icons/core/save.svg +14 -0
  80. package/public/icons/core/search.svg +13 -0
  81. package/public/icons/core/settings.svg +13 -0
  82. package/public/icons/core/share.svg +14 -0
  83. package/public/icons/core/sort.svg +15 -0
  84. package/public/icons/core/star.svg +12 -0
  85. package/public/icons/core/success.svg +13 -0
  86. package/public/icons/core/trash.svg +16 -0
  87. package/public/icons/core/unlock.svg +13 -0
  88. package/public/icons/core/upload.svg +14 -0
  89. package/public/icons/core/user.svg +13 -0
  90. package/public/icons/core/users.svg +15 -0
  91. package/public/icons/core/warning.svg +14 -0
  92. package/public/icons/download.svg +4 -0
  93. package/public/icons/edit.svg +4 -0
  94. package/public/icons/menu.svg +4 -0
  95. package/public/icons/search.svg +4 -0
  96. package/public/theme.css +4179 -0
  97. package/public/themes/README.md +102 -0
  98. package/public/themes/boilerplate/theme.css +154 -0
  99. package/public/themes/boilerplate-dark/theme.css +171 -0
  100. package/public/themes/boilerplate-light/theme.css +171 -0
  101. package/public/themes/cupertino/theme.css +165 -0
  102. package/public/themes/cupertino-dark/theme.css +200 -0
  103. package/public/themes/cupertino-light/theme.css +227 -0
  104. package/public/themes/glass/theme.css +190 -0
  105. package/public/themes/glass-dark/theme.css +201 -0
  106. package/public/themes/glass-light/theme.css +229 -0
  107. package/public/themes/graphite/theme.css +155 -0
  108. package/public/themes/graphite-dark/theme.css +223 -0
  109. package/public/themes/graphite-light/theme.css +191 -0
  110. package/public/themes/press/theme.css +189 -0
  111. package/public/themes/press-dark/theme.css +199 -0
  112. package/public/themes/press-light/theme.css +235 -0
  113. package/public/themes/prism/theme.css +159 -0
  114. package/public/themes/prism-dark/theme.css +185 -0
  115. package/public/themes/prism-light/theme.css +188 -0
  116. package/public/themes/sketchbook/theme.css +152 -0
  117. package/public/themes/sketchbook-dark/theme.css +194 -0
  118. package/public/themes/sketchbook-light/theme.css +188 -0
  119. package/public/themes/terminal/theme.css +159 -0
  120. package/public/themes/terminal-dark/theme.css +229 -0
  121. package/public/themes/terminal-light/theme.css +152 -0
  122. package/scripts/README.md +70 -0
  123. package/scripts/icon-contract.json +67 -0
  124. package/scripts/icon-validator.js +205 -0
  125. package/scripts/prepare-dist.mjs +65 -0
  126. package/scripts/theme-a11y.js +415 -0
  127. package/scripts/theme-contract.json +171 -0
  128. package/scripts/theme-validator.js +674 -0
  129. package/scss/README.md +55 -0
  130. package/scss/_animations-utilities.scss +107 -0
  131. package/scss/_animations.scss +248 -0
  132. package/scss/_app-styles.scss +15 -0
  133. package/scss/_generator.scss +174 -0
  134. package/scss/_icons.scss +475 -0
  135. package/scss/_index.scss +17 -0
  136. package/scss/_layout.scss +597 -0
  137. package/scss/_mixins.scss +1036 -0
  138. package/scss/_system.scss +291 -0
  139. package/scss/_utilities.scss +377 -0
  140. package/scss/api.scss +61 -0
  141. package/scss/components/_accordion.scss +72 -0
  142. package/scss/components/_buttons.scss +171 -0
  143. package/scss/components/_copy-button.scss +69 -0
  144. package/scss/components/_data.scss +190 -0
  145. package/scss/components/_feedback.scss +197 -0
  146. package/scss/components/_forms.scss +272 -0
  147. package/scss/components/_index.scss +17 -0
  148. package/scss/components/_navigation.scss +186 -0
  149. package/scss/components/_overlay.scss +259 -0
  150. package/scss/components/_stepper.scss +159 -0
  151. package/scss/components/_tabs.scss +72 -0
  152. package/scss/core.scss +54 -0
  153. package/scss/examples/_theming.scss +107 -0
  154. package/scss/examples/_usage.scss +317 -0
  155. package/scss/main.scss +64 -0
  156. package/scss/recipes/README.md +110 -0
  157. package/scss/recipes/_bare-tags.scss +232 -0
  158. package/scss/recipes/_recipe-template.md +119 -0
  159. package/scss/recipes/combobox.md +509 -0
  160. package/scss/recipes/dialog.md +265 -0
  161. package/scss/recipes/print-to-pdf.md +263 -0
  162. package/scss/theme/README.md +67 -0
  163. package/scss/theme/_brand.scss +18 -0
  164. package/scss/theme/_colors-dark.scss +68 -0
  165. package/scss/theme/_colors-light.scss +70 -0
  166. package/scss/theme/_components.scss +94 -0
  167. package/scss/theme/_icons.scss +104 -0
  168. package/scss/theme/_index.scss +62 -0
  169. package/scss/theme/_shadows.scss +65 -0
  170. package/scss/theme/_shape.scss +13 -0
  171. package/scss/theme/_typography.scss +9 -0
  172. package/scss/theme/registry.json +447 -0
  173. package/scss/themes/boilerplate-dark.scss +212 -0
  174. package/scss/themes/boilerplate-light.scss +209 -0
  175. package/scss/themes/boilerplate.scss +181 -0
  176. package/scss/themes/cupertino-dark.scss +238 -0
  177. package/scss/themes/cupertino-light.scss +266 -0
  178. package/scss/themes/cupertino.scss +194 -0
  179. package/scss/themes/glass-dark.scss +238 -0
  180. package/scss/themes/glass-light.scss +266 -0
  181. package/scss/themes/glass.scss +220 -0
  182. package/scss/themes/graphite-dark.scss +260 -0
  183. package/scss/themes/graphite-light.scss +228 -0
  184. package/scss/themes/graphite.scss +182 -0
  185. package/scss/themes/press-dark.scss +237 -0
  186. package/scss/themes/press-light.scss +273 -0
  187. package/scss/themes/press.scss +241 -0
  188. package/scss/themes/prism-dark.scss +217 -0
  189. package/scss/themes/prism-light.scss +220 -0
  190. package/scss/themes/prism.scss +190 -0
  191. package/scss/themes/sketchbook-dark.scss +231 -0
  192. package/scss/themes/sketchbook-light.scss +231 -0
  193. package/scss/themes/sketchbook.scss +178 -0
  194. package/scss/themes/terminal-dark.scss +267 -0
  195. package/scss/themes/terminal-light.scss +175 -0
  196. package/scss/themes/terminal.scss +185 -0
  197. package/scss/tokens.scss +23 -0
  198. package/scss/utilities-only.scss +4 -0
@@ -0,0 +1,68 @@
1
+ // ============================================================================
2
+ // SEMANTIC COLORS - Dark Mode
3
+ // ============================================================================
4
+
5
+ $colors-dark: (
6
+ // Backgrounds
7
+ background-default: #0a0a0a,
8
+ background-subtle: #151515,
9
+ background-navbar: #1a1a1a,
10
+
11
+ // Surfaces
12
+ surface-default: #151515,
13
+ surface-subtle: #1f1f1f,
14
+ surface-muted: #2a2a2a,
15
+ surface-emphasis: #353535,
16
+
17
+ // Text
18
+ text-primary: #FFF,
19
+ text-secondary: #b8b8b8,
20
+ text-muted: #768194,
21
+ text-inverse: #0a0a0a,
22
+ text-link: #09f,
23
+ text-link-hover: #5ebbff,
24
+
25
+ // Borders
26
+ border-default: #2a2a2a,
27
+ border-subtle: #1f1f1f,
28
+ border-emphasis: #404040,
29
+ border-focus: #09f,
30
+
31
+ // Interactive states
32
+ interactive-hover: rgba(255, 255, 255, 0.05),
33
+ interactive-active: rgba(255, 255, 255, 0.1),
34
+
35
+ // Action - Primary
36
+ action-primary-default: #6B8FE8,
37
+ action-primary-hover: #8BABF5,
38
+ action-primary-active: #3A5FCD,
39
+
40
+ // Action - Secondary
41
+ action-secondary-default: #FF8A8A,
42
+ action-secondary-hover: #FFACAC,
43
+ action-secondary-active: #FF6B6B,
44
+
45
+ // Status - Success
46
+ success-default: #34d399,
47
+ success-hover: #10b981,
48
+ success-subtle: #064e3b,
49
+ success-text: #6ee7b7,
50
+
51
+ // Status - Warning
52
+ warning-default: #fbbf24,
53
+ warning-hover: #f59e0b,
54
+ warning-subtle: #451a03,
55
+ warning-text: #fcd34d,
56
+
57
+ // Status - Error
58
+ error-default: #f87171,
59
+ error-hover: #ef4444,
60
+ error-subtle: #450a0a,
61
+ error-text: #fca5a5,
62
+
63
+ // Status - Info
64
+ info-default: #60a5fa,
65
+ info-hover: #3b82f6,
66
+ info-subtle: #172554,
67
+ info-text: #93c5fd,
68
+ ) !default;
@@ -0,0 +1,70 @@
1
+ // ============================================================================
2
+ // SEMANTIC COLORS - Light Mode
3
+ // ============================================================================
4
+ // Inspired by zeroheight + Trueform: warm, professional, accessible
5
+ // ============================================================================
6
+
7
+ $colors-light: (
8
+ // Backgrounds
9
+ background-default: #FFF,
10
+ background-subtle: #F8F6F0,
11
+ background-navbar: #FAFAFA,
12
+
13
+ // Surfaces
14
+ surface-default: #FFF,
15
+ surface-subtle: #F8F6F0,
16
+ surface-muted: #F5F5F5,
17
+ surface-emphasis: #E5E5E5,
18
+
19
+ // Text
20
+ text-primary: #0f0f0f,
21
+ text-secondary: #525252,
22
+ text-muted: #6b6b6b,
23
+ text-inverse: #fff,
24
+ text-link: #384fff,
25
+ text-link-hover: #2a3acc,
26
+
27
+ // Borders
28
+ border-default: #e5e5e5,
29
+ border-subtle: #f5f5f5,
30
+ border-emphasis: #d4d4d4,
31
+ border-focus: #384fff,
32
+
33
+ // Interactive states
34
+ interactive-hover: rgba(0, 0, 0, 0.03),
35
+ interactive-active: rgba(0, 0, 0, 0.06),
36
+
37
+ // Action - Primary
38
+ action-primary-default: #3A5FCD,
39
+ action-primary-hover: #2E4A99,
40
+ action-primary-active: #1E3A8A,
41
+
42
+ // Action - Secondary
43
+ action-secondary-default: #FF6B6B,
44
+ action-secondary-hover: #E85555,
45
+ action-secondary-active: #C55,
46
+
47
+ // Status - Success
48
+ success-default: #10b981,
49
+ success-hover: #059669,
50
+ success-subtle: #ecfdf5,
51
+ success-text: #065f46,
52
+
53
+ // Status - Warning
54
+ warning-default: #f59e0b,
55
+ warning-hover: #d97706,
56
+ warning-subtle: #fffbeb,
57
+ warning-text: #92400e,
58
+
59
+ // Status - Error
60
+ error-default: #DC2626,
61
+ error-hover: #B91C1C,
62
+ error-subtle: #FEF2F2,
63
+ error-text: #991B1B,
64
+
65
+ // Status - Info
66
+ info-default: #3A5FCD,
67
+ info-hover: #2E4A99,
68
+ info-subtle: #EFF6FF,
69
+ info-text: #1E3A8A,
70
+ ) !default;
@@ -0,0 +1,94 @@
1
+ // ============================================================================
2
+ // COMPONENT TOKENS — Per-component runtime overrides (Epic 1 Feature 1.3)
3
+ // ----------------------------------------------------------------------------
4
+ // Every entry in this map is emitted by _generator.scss as a CSS custom
5
+ // property on :root, using the raw CSS value recorded here as its default.
6
+ // Library mixins read the same tokens via `var(--key, <default>)`, so a
7
+ // theme can override a single property (e.g. `--btn-radius: 0`) on its
8
+ // own :root without touching the library SCSS or rebuilding.
9
+ //
10
+ // VALUE FORMAT
11
+ // Each value is a RAW CSS string — already wrapped in `var(…)` when it
12
+ // references another library token. That value is
13
+ // 1. emitted as the CSS variable default on :root, AND
14
+ // 2. used as the fallback inside `var(--key, …)` in the component mixin.
15
+ // Keep these in sync with the mixin defaults in scss/_mixins.scss and
16
+ // scss/components/*.scss so library output is semantically identical
17
+ // when no theme override is present.
18
+ // ============================================================================
19
+
20
+ $components: (
21
+ // ----------------------------------------------------------
22
+ // Buttons
23
+ // ----------------------------------------------------------
24
+ btn-padding-y: var(--space-1, 0.5rem),
25
+ btn-padding-x: var(--space-4, 1rem),
26
+ btn-radius: var(--radius-md, 0.25rem),
27
+ btn-font-weight: var(--font-weight-medium, 500),
28
+ btn-font-size: var(--font-size-base, 1rem),
29
+ btn-border-width: 1px,
30
+
31
+ // ----------------------------------------------------------
32
+ // Cards
33
+ // ----------------------------------------------------------
34
+ card-padding: var(--space-4, 1rem),
35
+ card-radius: var(--radius-lg, 0.5rem),
36
+ card-shadow: var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)),
37
+ card-border: 1px solid var(--border-default),
38
+
39
+ // ----------------------------------------------------------
40
+ // Inputs
41
+ // ----------------------------------------------------------
42
+ input-padding-y: var(--space-1, 0.5rem),
43
+ input-padding-x: var(--space-2, 0.75rem),
44
+ input-radius: var(--radius-md, 0.25rem),
45
+ input-border-width: 1px,
46
+
47
+ // ----------------------------------------------------------
48
+ // Alerts
49
+ // ----------------------------------------------------------
50
+ alert-padding-y: var(--space-2, 0.75rem),
51
+ alert-padding-x: var(--space-4, 1rem),
52
+ alert-radius: var(--radius-md, 0.25rem),
53
+
54
+ // ----------------------------------------------------------
55
+ // Badges
56
+ // ----------------------------------------------------------
57
+ badge-padding-y: var(--space-1, 0.5rem),
58
+ badge-padding-x: var(--space-1, 0.5rem),
59
+ badge-radius: var(--radius-full, 9999px),
60
+
61
+ // ----------------------------------------------------------
62
+ // Tags / Chips
63
+ // ----------------------------------------------------------
64
+ tag-padding-y: var(--space-2xs, 0.25rem),
65
+ tag-padding-x: var(--space-2, 0.75rem),
66
+ tag-radius: var(--radius-md, 0.25rem),
67
+
68
+ // ----------------------------------------------------------
69
+ // Modals
70
+ // ----------------------------------------------------------
71
+ modal-padding: var(--space-5, 1.5rem),
72
+ modal-radius: var(--radius-xl, 0.75rem),
73
+ modal-shadow: var(--shadow-2xl, 0 25px 50px -12px rgb(0 0 0 / 0.25)),
74
+
75
+ // ----------------------------------------------------------
76
+ // Popovers
77
+ // ----------------------------------------------------------
78
+ popover-padding: var(--space-4, 1rem),
79
+ popover-radius: var(--radius-lg, 0.5rem),
80
+ popover-shadow: var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1)),
81
+
82
+ // ----------------------------------------------------------
83
+ // Tooltips
84
+ // ----------------------------------------------------------
85
+ tooltip-padding-y: var(--space-1, 0.5rem),
86
+ tooltip-padding-x: var(--space-1, 0.5rem),
87
+ tooltip-radius: var(--radius-md, 0.25rem),
88
+
89
+ // ----------------------------------------------------------
90
+ // Dropdowns
91
+ // ----------------------------------------------------------
92
+ dropdown-radius: var(--radius-md, 0.25rem),
93
+ dropdown-shadow: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1)),
94
+ ) !default;
@@ -0,0 +1,104 @@
1
+ // ============================================================================
2
+ // ICONS - SVG + Font Awesome Configuration
3
+ // ============================================================================
4
+
5
+ // SVG Icons
6
+ //
7
+ // The default `core` icon pack ships at /icons/core/. Glyphs are vendored
8
+ // from Lucide (ISC + MIT, see LICENSE-third-party). Per-theme overrides
9
+ // resolve at runtime through CSS custom properties — see `m.svg` for the
10
+ // resolver pattern and CONTRACT.md → "Icons contract" for the full story.
11
+ $icon-path: '/icons' !default;
12
+ $icon-pack: 'core' !default;
13
+ $icon-size: 24px !default;
14
+
15
+ $icon-svg-alias: (
16
+ delete: 'trash',
17
+ close: 'x',
18
+ ) !default;
19
+
20
+ // Font Awesome
21
+ $fa-path: '/webfonts' !default;
22
+ $fa-style: solid !default;
23
+
24
+ // Set to `true` if you've licensed Font Awesome 6 Pro and want the Pro
25
+ // families wired in automatically. When enabled, `fa-load` emits
26
+ // @font-face rules for Light / Thin / Duotone alongside Solid / Regular /
27
+ // Brands, and `fa()` resolves to the Pro family name. Drop the woff2 files
28
+ // for whichever weights you ship at $fa-path — missing files are harmless,
29
+ // they just won't render until you add them.
30
+ $fa-pro: false !default;
31
+
32
+ $icon-fa-map: (
33
+ // Navigation
34
+ menu: '\f0c9',
35
+ close: '\f00d',
36
+ search: '\f002',
37
+ home: '\f015',
38
+
39
+ // Actions
40
+ plus: '\f067',
41
+ minus: '\f068',
42
+ edit: '\f044',
43
+ delete: '\f1f8',
44
+ save: '\f0c7',
45
+ download: '\f019',
46
+ upload: '\f093',
47
+ copy: '\f0c5',
48
+
49
+ // Arrows
50
+ arrow-up: '\f062',
51
+ arrow-down: '\f063',
52
+ arrow-left: '\f060',
53
+ arrow-right: '\f061',
54
+ chevron-up: '\f077',
55
+ chevron-down: '\f078',
56
+ chevron-left: '\f053',
57
+ chevron-right: '\f054',
58
+
59
+ // Status
60
+ check: '\f00c',
61
+ info: '\f129',
62
+ warning: '\f071',
63
+ error: '\f06a',
64
+
65
+ // UI
66
+ user: '\f007',
67
+ settings: '\f013',
68
+ bell: '\f0f3',
69
+ calendar: '\f133',
70
+ clock: '\f017',
71
+ lock: '\f023',
72
+ unlock: '\f09c',
73
+ eye: '\f06e',
74
+ eye-off: '\f070',
75
+ star: '\f005',
76
+ heart: '\f004',
77
+ filter: '\f0b0',
78
+ sort: '\f0dc',
79
+
80
+ // Media
81
+ play: '\f04b',
82
+ pause: '\f04c',
83
+ stop: '\f04d',
84
+
85
+ // Communication
86
+ mail: '\f0e0',
87
+ phone: '\f095',
88
+
89
+ // Misc
90
+ spinner: '\f110',
91
+ external: '\f35d',
92
+ link: '\f0c1',
93
+ refresh: '\f021',
94
+ more: '\f142',
95
+ grip: '\f58e',
96
+
97
+ // Brands
98
+ github: '\f09b',
99
+ twitter: '\f099',
100
+ facebook: '\f09a',
101
+ linkedin: '\f0e1',
102
+ youtube: '\f167',
103
+ instagram: '\f16d',
104
+ ) !default;
@@ -0,0 +1,62 @@
1
+ // ============================================================================
2
+ // THEME BARREL - Re-exports all theme parts
3
+ // ============================================================================
4
+ // This file is what _generator.scss, _mixins.scss, and _icons.scss import.
5
+ // Variable names here match what the rest of the system expects.
6
+ // ============================================================================
7
+ @use 'sass:map';
8
+ @use '../system' as s;
9
+ @use './brand' as *;
10
+ @use './colors-light' as *;
11
+ @use './colors-dark' as *;
12
+ @use './typography' as *;
13
+ @use './shape' as *;
14
+ @use './shadows' as *;
15
+ @use './components' as *;
16
+ @use './icons' as *;
17
+
18
+ // Theme identity
19
+ $theme-name: 'royal-blue' !default;
20
+
21
+ // Re-export with expected names
22
+ $theme-brand: $brand !default;
23
+ $theme-light: $colors-light !default;
24
+ $theme-dark: $colors-dark !default;
25
+ $theme-fonts: $fonts !default;
26
+ $theme-radius: $radius !default;
27
+ $theme-shadows-light: $shadows-light !default;
28
+ $theme-shadows-dark: $shadows-dark !default;
29
+ $theme-components: $components !default;
30
+
31
+ // Spacing tokens (theme-level) — deferred to scss/_system.scss as the
32
+ // single source of truth. Theme authors override via the system layer.
33
+ $space-scale: s.$spacing-scale !default;
34
+ $space-aliases: s.$spacing-aliases !default;
35
+ $space: s.$spacing !default;
36
+
37
+ // Semantic spacing aliases
38
+ $gap: (
39
+ normal: map.get($space, 4),
40
+ compact: map.get($space, 2),
41
+ ) !default;
42
+
43
+ $padding: (
44
+ compact: map.get($space, 2),
45
+ normal: map.get($space, 4),
46
+ relaxed: map.get($space, 5),
47
+ ) !default;
48
+
49
+ $margin: (
50
+ section: map.get($space, 8),
51
+ ) !default;
52
+
53
+ // Icon re-exports (no !default — must override the @use 'icons' as * import)
54
+ $theme-icon-path: $icon-path;
55
+ $theme-icon-pack: $icon-pack;
56
+ $theme-icon-size: $icon-size;
57
+ $theme-icon-svg-alias: $icon-svg-alias;
58
+ $theme-fa-path: $fa-path;
59
+ $theme-fa-style: $fa-style;
60
+ $theme-fa-pro: $fa-pro;
61
+ $theme-icon-fa-map: $icon-fa-map;
62
+
@@ -0,0 +1,65 @@
1
+ // ============================================================================
2
+ // SHADOWS - Light & Dark
3
+ // ============================================================================
4
+ // Numbered scale 1..5 is the source of truth; t-shirt aliases layer on top.
5
+ // The semantic values `inner` and `none` aren't on the numbered scale — they
6
+ // stay as named entries.
7
+ //
8
+ // Mapping:
9
+ // sm -> 1
10
+ // md -> 2
11
+ // lg -> 3
12
+ // xl -> 4
13
+ // 2xl -> 5
14
+ // ============================================================================
15
+ @use 'sass:map';
16
+
17
+ $shadows-aliases: (
18
+ sm: 1,
19
+ md: 2,
20
+ lg: 3,
21
+ xl: 4,
22
+ 2xl: 5,
23
+ ) !default;
24
+
25
+ $shadows-light-scale: (
26
+ 1: (0 1px 2px 0 rgb(0 0 0 / 0.05)),
27
+ 2: (0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)),
28
+ 3: (0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)),
29
+ 4: (0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)),
30
+ 5: (0 25px 50px -12px rgb(0 0 0 / 0.25)),
31
+ ) !default;
32
+
33
+ $shadows-light: map.merge(
34
+ $shadows-light-scale,
35
+ (
36
+ sm: map.get($shadows-light-scale, map.get($shadows-aliases, sm)),
37
+ md: map.get($shadows-light-scale, map.get($shadows-aliases, md)),
38
+ lg: map.get($shadows-light-scale, map.get($shadows-aliases, lg)),
39
+ xl: map.get($shadows-light-scale, map.get($shadows-aliases, xl)),
40
+ 2xl: map.get($shadows-light-scale, map.get($shadows-aliases, 2xl)),
41
+ inner: (inset 0 2px 4px 0 rgb(0 0 0 / 0.05)),
42
+ none: none,
43
+ )
44
+ ) !default;
45
+
46
+ $shadows-dark-scale: (
47
+ 1: (0 1px 2px 0 rgb(0 0 0 / 0.3)),
48
+ 2: (0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3)),
49
+ 3: (0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4)),
50
+ 4: (0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.4)),
51
+ 5: (0 25px 50px -12px rgb(0 0 0 / 0.6)),
52
+ ) !default;
53
+
54
+ $shadows-dark: map.merge(
55
+ $shadows-dark-scale,
56
+ (
57
+ sm: map.get($shadows-dark-scale, map.get($shadows-aliases, sm)),
58
+ md: map.get($shadows-dark-scale, map.get($shadows-aliases, md)),
59
+ lg: map.get($shadows-dark-scale, map.get($shadows-aliases, lg)),
60
+ xl: map.get($shadows-dark-scale, map.get($shadows-aliases, xl)),
61
+ 2xl: map.get($shadows-dark-scale, map.get($shadows-aliases, 2xl)),
62
+ inner: (inset 0 2px 4px 0 rgb(0 0 0 / 0.3)),
63
+ none: none,
64
+ )
65
+ ) !default;
@@ -0,0 +1,13 @@
1
+ // ============================================================================
2
+ // SHAPE - Border Radii
3
+ // ============================================================================
4
+
5
+ $radius: (
6
+ none: 0,
7
+ sm: 0.25rem,
8
+ md: 0.375rem,
9
+ lg: 0.5rem,
10
+ xl: 0.75rem,
11
+ 2xl: 1rem,
12
+ full: 9999px,
13
+ ) !default;
@@ -0,0 +1,9 @@
1
+ // ============================================================================
2
+ // TYPOGRAPHY - Font Families
3
+ // ============================================================================
4
+
5
+ $fonts: (
6
+ primary: ('Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif),
7
+ secondary: ('Georgia', 'Times New Roman', serif),
8
+ mono: ('Fira Code', 'Consolas', 'Monaco', monospace),
9
+ ) !default;