@hellboy/ds 0.1.2

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 (137) hide show
  1. package/README.md +111 -0
  2. package/dist/index.css +3699 -0
  3. package/dist/index.css.map +1 -0
  4. package/dist/index.d.mts +1087 -0
  5. package/dist/index.d.ts +1087 -0
  6. package/dist/index.js +3391 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/index.mjs +3287 -0
  9. package/dist/index.mjs.map +1 -0
  10. package/dist/theme.css +55 -0
  11. package/hellboy-ds-0.1.2.tgz +0 -0
  12. package/package.json +42 -0
  13. package/src/components/badge/Badge.tsx +29 -0
  14. package/src/components/badge/index.ts +1 -0
  15. package/src/components/banner/Banner.tsx +48 -0
  16. package/src/components/banner/banner.css +44 -0
  17. package/src/components/banner/index.ts +1 -0
  18. package/src/components/button/button.tsx +127 -0
  19. package/src/components/button/index.ts +1 -0
  20. package/src/components/card/card.tsx +57 -0
  21. package/src/components/card/index.ts +1 -0
  22. package/src/components/checkbox/Checkbox.tsx +98 -0
  23. package/src/components/checkbox/index.ts +1 -0
  24. package/src/components/code-block/code-block.tsx +44 -0
  25. package/src/components/code-block/index.ts +1 -0
  26. package/src/components/color-control/color-control.tsx +322 -0
  27. package/src/components/color-control/index.ts +1 -0
  28. package/src/components/drag-handle/DragHandle.tsx +78 -0
  29. package/src/components/drag-handle/index.ts +1 -0
  30. package/src/components/drawer/drawer.tsx +82 -0
  31. package/src/components/drawer/index.ts +1 -0
  32. package/src/components/floating-bar/floating-bar.tsx +52 -0
  33. package/src/components/floating-bar/index.ts +2 -0
  34. package/src/components/footer/footer.tsx +28 -0
  35. package/src/components/footer/index.ts +1 -0
  36. package/src/components/grid/Grid.tsx +53 -0
  37. package/src/components/grid/index.ts +1 -0
  38. package/src/components/header/header.tsx +57 -0
  39. package/src/components/header/index.ts +1 -0
  40. package/src/components/icons/icons.tsx +44 -0
  41. package/src/components/icons/index.ts +1 -0
  42. package/src/components/index.ts +29 -0
  43. package/src/components/input/DatePicker.tsx +133 -0
  44. package/src/components/input/Input.tsx +220 -0
  45. package/src/components/input/InputDate.tsx +10 -0
  46. package/src/components/input/InputDateTime.tsx +10 -0
  47. package/src/components/input/InputEmail.tsx +10 -0
  48. package/src/components/input/InputField.tsx +137 -0
  49. package/src/components/input/InputNumber.tsx +10 -0
  50. package/src/components/input/InputPassword.tsx +10 -0
  51. package/src/components/input/InputSearch.tsx +10 -0
  52. package/src/components/input/InputTel.tsx +10 -0
  53. package/src/components/input/InputText.tsx +10 -0
  54. package/src/components/input/InputTime.tsx +10 -0
  55. package/src/components/input/InputUrl.tsx +10 -0
  56. package/src/components/input/TimePicker.tsx +151 -0
  57. package/src/components/input/index.ts +11 -0
  58. package/src/components/layout/Layout.tsx +244 -0
  59. package/src/components/layout/index.ts +1 -0
  60. package/src/components/list/List.tsx +159 -0
  61. package/src/components/list/index.ts +1 -0
  62. package/src/components/navbar/MenuCategory.tsx +20 -0
  63. package/src/components/navbar/MenuGroup.tsx +288 -0
  64. package/src/components/navbar/MenuItem.tsx +65 -0
  65. package/src/components/navbar/Navbar.tsx +23 -0
  66. package/src/components/navbar/index.ts +4 -0
  67. package/src/components/page/index.ts +1 -0
  68. package/src/components/page/page.tsx +46 -0
  69. package/src/components/page-index/PageIndex.tsx +275 -0
  70. package/src/components/page-index/index.ts +1 -0
  71. package/src/components/popover/index.ts +1 -0
  72. package/src/components/popover/popover.tsx +199 -0
  73. package/src/components/radio/Radio.tsx +176 -0
  74. package/src/components/radio/index.ts +1 -0
  75. package/src/components/section/index.ts +1 -0
  76. package/src/components/section/section.tsx +66 -0
  77. package/src/components/select/Select.tsx +212 -0
  78. package/src/components/select/index.ts +1 -0
  79. package/src/components/slider/Slider.tsx +267 -0
  80. package/src/components/slider/index.ts +1 -0
  81. package/src/components/switch/index.ts +1 -0
  82. package/src/components/switch/switch.tsx +99 -0
  83. package/src/components/table/Table.tsx +147 -0
  84. package/src/components/table/index.ts +1 -0
  85. package/src/components/theme-control/index.ts +1 -0
  86. package/src/components/theme-control/theme-control.tsx +78 -0
  87. package/src/components/tooltip/index.ts +1 -0
  88. package/src/components/tooltip/tooltip.tsx +207 -0
  89. package/src/contexts/NavbarTooltipContext.tsx +48 -0
  90. package/src/contexts/index.ts +1 -0
  91. package/src/foundations/motion.md +136 -0
  92. package/src/index.ts +40 -0
  93. package/src/style/_shared/field.css +69 -0
  94. package/src/style/components/badge/badge.css +74 -0
  95. package/src/style/components/button/button.css +244 -0
  96. package/src/style/components/card/card.css +69 -0
  97. package/src/style/components/checkbox.css +142 -0
  98. package/src/style/components/code-block/code-block.css +34 -0
  99. package/src/style/components/color-control/color-control.css +126 -0
  100. package/src/style/components/drag-handle/drag-handle.css +68 -0
  101. package/src/style/components/drawer/drawer.css +210 -0
  102. package/src/style/components/floating-bar/floating-bar.css +39 -0
  103. package/src/style/components/footer/footer.css +108 -0
  104. package/src/style/components/grid/grid.css +33 -0
  105. package/src/style/components/header/header.css +44 -0
  106. package/src/style/components/icons/icons.css +44 -0
  107. package/src/style/components/input/input.css +393 -0
  108. package/src/style/components/layout/layout.css +205 -0
  109. package/src/style/components/list/list.css +140 -0
  110. package/src/style/components/navbar/navbar.css +342 -0
  111. package/src/style/components/page/page.css +46 -0
  112. package/src/style/components/page-index/page-index.css +158 -0
  113. package/src/style/components/popover/popover.css +44 -0
  114. package/src/style/components/radio.css +178 -0
  115. package/src/style/components/section/section.css +67 -0
  116. package/src/style/components/select/select.css +143 -0
  117. package/src/style/components/slider/slider.css +159 -0
  118. package/src/style/components/switch/switch.css +267 -0
  119. package/src/style/components/table/table.css +108 -0
  120. package/src/style/components/theme-control/theme-control.css +35 -0
  121. package/src/style/components/tooltip/tooltip.css +52 -0
  122. package/src/style/foundations/global.css +316 -0
  123. package/src/style/foundations/motion.css +164 -0
  124. package/src/style/foundations/spacing.css +51 -0
  125. package/src/style/foundations/typography.css +39 -0
  126. package/src/style/foundations/z-index.css +81 -0
  127. package/src/style/modes/dark.css +146 -0
  128. package/src/style/modes/light.css +147 -0
  129. package/src/style/semantic.css +52 -0
  130. package/src/style/styles.css +51 -0
  131. package/src/style/themes/theme.json +37 -0
  132. package/src/utils/README.md +305 -0
  133. package/src/utils/USER_PREFERENCES.md +558 -0
  134. package/src/utils/theme.ts +127 -0
  135. package/src/utils/user-preferences.ts +577 -0
  136. package/tsconfig.json +25 -0
  137. package/tsup.config.ts +52 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Color Control Component Styles
3
+ * Interactive color hue adjustment controls
4
+ */
5
+
6
+ .color-control {
7
+ width: 100%;
8
+ }
9
+
10
+ .color-control__header {
11
+ margin-bottom: var(--spacing-6);
12
+ }
13
+
14
+ .color-control__title {
15
+ font-size: var(--font-size-lg);
16
+ font-weight: 600;
17
+ color: var(--color-foreground-1);
18
+ margin: 0 0 var(--spacing-2) 0;
19
+ }
20
+
21
+ .color-control__description {
22
+ color: var(--color-foreground-2);
23
+ margin: 0;
24
+ font-size: var(--font-size-sm);
25
+ line-height: var(--line-height-normal);
26
+ }
27
+
28
+ .color-control__sliders {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--spacing-4);
32
+ margin-bottom: var(--spacing-6);
33
+ }
34
+
35
+ .color-control__slider {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: var(--spacing-3);
39
+ }
40
+
41
+ .color-control__slider .slider {
42
+ flex: 1;
43
+ }
44
+
45
+ .color-control__slider .slider__header {
46
+ margin-bottom: var(--spacing-1);
47
+ }
48
+
49
+ .color-control__preview {
50
+ width: 40px;
51
+ height: 40px;
52
+ border-radius: 8px;
53
+ flex-shrink: 0;
54
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
55
+ }
56
+
57
+ .color-control__actions {
58
+ margin-bottom: var(--spacing-6);
59
+ }
60
+
61
+ .color-control__reset-btn {
62
+ background-color: var(--color-bg-2);
63
+ color: var(--color-foreground-1);
64
+ border: 1px solid var(--color-foreground-2);
65
+ border-color: rgba(0, 0, 0, 0.1);
66
+ padding: var(--spacing-2) var(--spacing-4);
67
+ border-radius: 6px;
68
+ font-size: var(--font-size-sm);
69
+ cursor: pointer;
70
+ transition: all var(--transition-base);
71
+ }
72
+
73
+ .color-control__reset-btn:hover:not(:disabled) {
74
+ background-color: var(--color-action-primary);
75
+ color: var(--color-on-action-primary);
76
+ border-color: var(--color-action-primary);
77
+ }
78
+
79
+ .color-control__reset-btn:active:not(:disabled) {
80
+ background-color: var(--color-action-primary-active);
81
+ }
82
+
83
+ .color-control__reset-btn:focus-visible:not(:disabled) {
84
+ outline: 2px solid var(--color-action-primary);
85
+ outline-offset: 2px;
86
+ }
87
+
88
+ .color-control__reset-btn:disabled {
89
+ cursor: not-allowed;
90
+ opacity: 0.5;
91
+ }
92
+
93
+ .color-control__preview-section {
94
+ border-top: 1px solid var(--color-foreground-2);
95
+ border-top-color: rgba(0, 0, 0, 0.1);
96
+ padding-top: var(--spacing-4);
97
+ }
98
+
99
+ .color-control__preview-title {
100
+ font-size: var(--font-size-md);
101
+ font-weight: 600;
102
+ color: var(--color-foreground-1);
103
+ margin: 0 0 var(--spacing-3) 0;
104
+ }
105
+
106
+ .color-control__color-grid {
107
+ display: grid;
108
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
109
+ gap: var(--spacing-3);
110
+ }
111
+
112
+ .color-control__color-sample {
113
+ padding: var(--spacing-3);
114
+ border-radius: 8px;
115
+ color: white;
116
+ font-size: var(--font-size-sm);
117
+ font-weight: 500;
118
+ text-align: center;
119
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
120
+ border: 2px solid transparent;
121
+ transition: border-color var(--transition-base);
122
+ }
123
+
124
+ .color-control__color-sample:hover {
125
+ border-color: rgba(255, 255, 255, 0.3);
126
+ }
@@ -0,0 +1,68 @@
1
+ /* Drag Handle Component Styles */
2
+
3
+ .drag-handle {
4
+ position: relative;
5
+ background-color: var(--color-bg-1);
6
+ /* border: 1px solid var(--color-foreground-2); */
7
+ border-color: rgba(0, 0, 0, 0.1);
8
+ transition: all var(--transition-base, 0.2s ease);
9
+ z-index: 10;
10
+ }
11
+
12
+ .drag-handle:hover:not(:disabled) {
13
+ background-color: var(--color-action-primary);
14
+ /* border-color: var(--color-action-primary); */
15
+ /* outline: 1px solid var(--color-action-primary); */
16
+ }
17
+
18
+ .drag-handle:active:not(:disabled),
19
+ .drag-handle--dragging {
20
+ background-color: var(--color-action-primary-hover);
21
+ /* border-color: var(--color-action-primary); */
22
+ }
23
+
24
+ .drag-handle--dragging .drag-handle__indicator,
25
+ .drag-handle:active:not(:disabled) .drag-handle__indicator {
26
+ background-color: var(--color-on-action-primary);
27
+ }
28
+
29
+ /* Vertical drag handle (between columns) */
30
+ .drag-handle--vertical {
31
+ width: 6px;
32
+ cursor: col-resize;
33
+ margin: 0 -4px; /* Negative margin to center between columns */
34
+ }
35
+
36
+ .drag-handle--vertical .drag-handle__indicator {
37
+ position: absolute;
38
+ top: 50%;
39
+ left: 50%;
40
+ transform: translate(-50%, -50%);
41
+ width: 4px;
42
+ height: 32px;
43
+ background-color: var(--color-foreground-2);
44
+ border-radius: 1px;
45
+ transition: all var(--transition-base, 0.2s ease);
46
+ }
47
+ .drag-handle--vertical:hover .drag-handle__indicator {
48
+ width: 4px;
49
+ }
50
+
51
+ /* Horizontal drag handle (between rows) */
52
+ .drag-handle--horizontal {
53
+ height: 8px;
54
+ cursor: row-resize;
55
+ margin: -4px 0; /* Negative margin to center between rows */
56
+ }
57
+
58
+ .drag-handle--horizontal .drag-handle__indicator {
59
+ position: absolute;
60
+ top: 50%;
61
+ left: 50%;
62
+ transform: translate(-50%, -50%);
63
+ height: 2px;
64
+ width: 24px;
65
+ background-color: var(--color-foreground-2);
66
+ border-radius: 1px;
67
+ transition: background-color var(--transition-base, 0.2s ease);
68
+ }
@@ -0,0 +1,210 @@
1
+ .drawer {
2
+ position: fixed;
3
+ background-color: var(--color-bg-1);
4
+ border: 1px solid var(--color-foreground-2);
5
+ border-color: rgba(0, 0, 0, 0.1);
6
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
7
+ transition: background-color var(--motion-transition-background);
8
+ /* Prevent initial flash when portal is created */
9
+ opacity: 0;
10
+ visibility: hidden;
11
+ pointer-events: none;
12
+ }
13
+
14
+ /* Show drawer when AriaKit mounts it - apply fade-in animation alongside slide */
15
+ .drawer[data-enter] {
16
+ opacity: 1;
17
+ visibility: visible;
18
+ pointer-events: auto;
19
+ animation:
20
+ var(--motion-keyframes-slide-in-right),
21
+ fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
22
+ }
23
+
24
+ /* Hide drawer when AriaKit closes it - apply fade-out animation alongside slide */
25
+ .drawer[data-leave] {
26
+ opacity: 0;
27
+ visibility: hidden;
28
+ pointer-events: none;
29
+ animation:
30
+ var(--motion-keyframes-slide-out-right),
31
+ fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
32
+ }
33
+
34
+ /* Drawer positions */
35
+ .drawer--right {
36
+ top: 0;
37
+ right: 0;
38
+ bottom: 0;
39
+ }
40
+
41
+ .drawer--left {
42
+ top: 0;
43
+ left: 0;
44
+ bottom: 0;
45
+ }
46
+
47
+ .drawer--top {
48
+ top: 0;
49
+ left: 0;
50
+ right: 0;
51
+ }
52
+
53
+ .drawer--bottom {
54
+ bottom: 0;
55
+ left: 0;
56
+ right: 0;
57
+ }
58
+
59
+ .drawer__backdrop {
60
+ position: fixed;
61
+ top: 0;
62
+ left: 0;
63
+ right: 0;
64
+ bottom: 0;
65
+ background-color: rgba(0, 0, 0, 0.5);
66
+ z-index: 999;
67
+ /* Prevent initial flash */
68
+ opacity: 0;
69
+ visibility: hidden;
70
+ /* Smooth ease-in/out animation */
71
+ transition: opacity var(--motion-duration-base) var(--motion-easing-standard),
72
+ visibility var(--motion-duration-base) var(--motion-easing-standard);
73
+ }
74
+
75
+ /* Show backdrop when AriaKit mounts it - ease in */
76
+ .drawer__backdrop[data-enter] {
77
+ opacity: 1;
78
+ visibility: visible;
79
+ animation: fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
80
+ }
81
+
82
+ /* Hide backdrop when AriaKit closes it - ease out */
83
+ .drawer__backdrop[data-leave] {
84
+ opacity: 0;
85
+ visibility: hidden;
86
+ animation: fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
87
+ }
88
+
89
+ .drawer__content {
90
+ display: flex;
91
+ flex-direction: column;
92
+ height: 100%;
93
+ overflow: hidden;
94
+ }
95
+
96
+ .drawer__header {
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ padding: var(--spacing-4, 1rem);
101
+ border-bottom: 1px solid var(--color-foreground-2);
102
+ border-bottom-color: rgba(0, 0, 0, 0.1);
103
+ flex-shrink: 0;
104
+ }
105
+
106
+ .drawer__title {
107
+ margin: 0;
108
+ font-size: var(--font-size-lg, 1.125rem);
109
+ font-weight: 600;
110
+ color: var(--color-foreground-1);
111
+ }
112
+
113
+ /* ===== CLOSE BUTTON INTERACTION STATES ===== */
114
+ .drawer__close {
115
+ background: none;
116
+ border: none;
117
+ padding: var(--spacing-2, 0.5rem);
118
+ cursor: pointer;
119
+ border-radius: var(--radius-base);
120
+ color: var(--color-foreground-1);
121
+ font-size: var(--font-size-lg, 1.125rem);
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ transition: var(--motion-transition-background), var(--motion-transition-color);
126
+ }
127
+
128
+ /* Pointer hover */
129
+ .drawer__close:hover:not(:disabled) {
130
+ background-color: hsla(0, 0%, var(--lightness-bg-2), 0.5);
131
+ color: var(--color-foreground-1);
132
+ }
133
+
134
+ /* Active/Pressed */
135
+ .drawer__close:active:not(:disabled) {
136
+ background-color: hsla(0, 0%, var(--lightness-bg-3), 0.7);
137
+ }
138
+
139
+ /* Focus indicator */
140
+ .drawer__close:focus-visible:not(:disabled) {
141
+ outline: 2px solid var(--color-action-primary);
142
+ outline-offset: 2px;
143
+ }
144
+
145
+ /* Touch support */
146
+ @media (hover: none) and (pointer: coarse) {
147
+ .drawer__close:active:not(:disabled) {
148
+ background-color: hsla(0, 0%, var(--lightness-bg-2), 0.6);
149
+ }
150
+ }
151
+
152
+ .drawer__body {
153
+ flex: 1;
154
+ overflow-y: auto;
155
+ padding: var(--spacing-4, 1rem);
156
+ color: var(--color-foreground-1);
157
+ }
158
+
159
+ /* ===== ANIMATIONS ===== */
160
+ /* Right drawer animations */
161
+ .drawer--right[data-enter] {
162
+ animation:
163
+ slideInRight 0.3s ease-out,
164
+ fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
165
+ }
166
+
167
+ .drawer--right[data-leave] {
168
+ animation:
169
+ slideOutRight 0.3s ease-in,
170
+ fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
171
+ }
172
+
173
+ /* Left drawer animations */
174
+ .drawer--left[data-enter] {
175
+ animation:
176
+ slideInLeft 0.3s ease-out,
177
+ fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
178
+ }
179
+
180
+ .drawer--left[data-leave] {
181
+ animation:
182
+ slideOutLeft 0.3s ease-in,
183
+ fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
184
+ }
185
+
186
+ /* Top drawer animations */
187
+ .drawer--top[data-enter] {
188
+ animation:
189
+ slideInTop 0.3s ease-out,
190
+ fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
191
+ }
192
+
193
+ .drawer--top[data-leave] {
194
+ animation:
195
+ slideOutTop 0.3s ease-in,
196
+ fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
197
+ }
198
+
199
+ /* Bottom drawer animations */
200
+ .drawer--bottom[data-enter] {
201
+ animation:
202
+ slideInBottom 0.3s ease-out,
203
+ fadeIn var(--motion-duration-base) var(--motion-easing-decelerate);
204
+ }
205
+
206
+ .drawer--bottom[data-leave] {
207
+ animation:
208
+ slideOutBottom 0.3s ease-in,
209
+ fadeOut var(--motion-duration-base) var(--motion-easing-accelerate);
210
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Floating Bar Component Styles
3
+ * Provides sticky positioning within the main layout container
4
+ */
5
+
6
+ .floating-bar {
7
+ position: sticky;
8
+ width: 100%;
9
+ z-index: var(--z-floating-base);
10
+ margin-top: var(--spacing-8);
11
+ margin-bottom: var(--spacing-8);
12
+ background-color: var(--color-bg-1);
13
+ border-radius: var(--radius-base);
14
+ }
15
+
16
+ /* Top positioned bar */
17
+ .floating-bar--top {
18
+ top: 0;
19
+ }
20
+
21
+ /* Bottom positioned bar */
22
+ .floating-bar--bottom {
23
+ bottom: 0;
24
+ }
25
+
26
+ /* Content wrapper */
27
+ .floating-bar__content {
28
+ padding: 0 var(--spacing-4);
29
+ }
30
+
31
+ /* Top positioned bar styling */
32
+ .floating-bar--top .floating-bar__content {
33
+ box-shadow: 0 2px 42px rgba(0, 0, 0, 0.2);
34
+ }
35
+
36
+ /* Bottom positioned bar styling */
37
+ .floating-bar--bottom .floating-bar__content {
38
+ box-shadow: 0 -2px 42px rgba(0, 0, 0, 0.8);
39
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Footer Component Styles
3
+ * Global footer for design system pages
4
+ */
5
+
6
+ .footer {
7
+ background-color: var(--color-bg-2);
8
+ border-top: 1px solid var(--color-bg-3);
9
+ margin-top: auto;
10
+ padding: var(--spacing-6) var(--spacing-4);
11
+ font-size: var(--font-size-sm);
12
+ color: var(--color-foreground-3);
13
+ position: relative;
14
+ z-index: 1;
15
+ }
16
+
17
+ .footer__container {
18
+ max-width: 1200px;
19
+ margin: 0 auto;
20
+ padding: 0 var(--spacing-4);
21
+ }
22
+ /*
23
+ .footer__content {
24
+ display: grid;
25
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
26
+ gap: var(--spacing-6);
27
+ margin-bottom: var(--spacing-6);
28
+ } */
29
+ /*
30
+ .footer__section {
31
+ display: flex;
32
+ flex-direction: column;
33
+ gap: var(--spacing-3);
34
+ } */
35
+
36
+ /* .footer__title {
37
+ margin: 0;
38
+ font-size: var(--font-size-md);
39
+ font-weight: var(--font-weight-semibold);
40
+ color: var(--color-foreground-1);
41
+ line-height: var(--line-height-tight);
42
+ }
43
+
44
+ .footer__links {
45
+ list-style: none;
46
+ margin: 0;
47
+ padding: 0;
48
+ display: flex;
49
+ flex-direction: column;
50
+ gap: var(--spacing-2);
51
+ } */
52
+
53
+ /* .footer__link {
54
+ color: var(--color-foreground-2);
55
+ text-decoration: underline;
56
+ font-weight: 400;
57
+ transition: color var(--motion-transition-color);
58
+ cursor: pointer;
59
+ } */
60
+ /*
61
+ .footer__link:hover {
62
+ color: var(--color-action-primary);
63
+ }
64
+
65
+ .footer__link:active {
66
+ color: var(--color-action-primary-active);
67
+ }
68
+
69
+ .footer__divider {
70
+ height: 1px;
71
+ background-color: var(--color-bg-3);
72
+ margin: var(--spacing-6) 0;
73
+ } */
74
+
75
+ .footer__bottom {
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: var(--spacing-2);
79
+ text-align: center;
80
+ }
81
+
82
+ .footer__copyright {
83
+ margin: 0;
84
+ font-size: var(--font-size-sm);
85
+ color: var(--color-foreground-3);
86
+ }
87
+ /*
88
+ .footer__tech {
89
+ margin: 0;
90
+ font-size: var(--font-size-xs);
91
+ color: var(--color-foreground-3);
92
+ } */
93
+
94
+ /* Responsive */
95
+ @media (max-width: 768px) {
96
+ .footer {
97
+ padding: var(--spacing-4) 0;
98
+ }
99
+
100
+ .footer__content {
101
+ grid-template-columns: 1fr;
102
+ gap: var(--spacing-4);
103
+ }
104
+
105
+ .footer__bottom {
106
+ flex-direction: column;
107
+ }
108
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Grid Component Styles
3
+ * Flexible grid layout component for organizing content
4
+ */
5
+
6
+ .grid {
7
+ display: grid;
8
+ gap: var(--grid-gap, 1rem);
9
+ }
10
+
11
+ /* Auto-fit grid (responsive) */
12
+ .grid--auto-fit {
13
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-min-width, 250px), 1fr));
14
+ }
15
+
16
+ /* Auto-fill grid (fills available space) */
17
+ .grid--auto-fill {
18
+ grid-template-columns: repeat(auto-fill, minmax(var(--grid-min-width, 250px), 1fr));
19
+ }
20
+
21
+ /* Fixed number of columns */
22
+ .grid--cols-1 { grid-template-columns: repeat(1, 1fr); }
23
+ .grid--cols-2 { grid-template-columns: repeat(2, 1fr); }
24
+ .grid--cols-3 { grid-template-columns: repeat(3, 1fr); }
25
+ .grid--cols-4 { grid-template-columns: repeat(4, 1fr); }
26
+ .grid--cols-5 { grid-template-columns: repeat(5, 1fr); }
27
+ .grid--cols-6 { grid-template-columns: repeat(6, 1fr); }
28
+ .grid--cols-7 { grid-template-columns: repeat(7, 1fr); }
29
+ .grid--cols-8 { grid-template-columns: repeat(8, 1fr); }
30
+ .grid--cols-9 { grid-template-columns: repeat(9, 1fr); }
31
+ .grid--cols-10 { grid-template-columns: repeat(10, 1fr); }
32
+ .grid--cols-11 { grid-template-columns: repeat(11, 1fr); }
33
+ .grid--cols-12 { grid-template-columns: repeat(12, 1fr); }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Header Component Styles
3
+ * Responsive header component with title and subtitle support
4
+ */
5
+
6
+ .header {
7
+ background-color: var(--color-bg-2);
8
+ border-bottom: 1px solid var(--color-foreground-2);
9
+ border-bottom-color: rgba(0, 0, 0, 0.1);
10
+ padding: var(--spacing-8) var(--spacing-8) 0 var(--spacing-8);
11
+ transition: background-color var(--motion-transition-background), border-color var(--motion-transition-color);
12
+ }
13
+
14
+ .header__container {
15
+ width: 100%;
16
+ max-width: 1200px;
17
+ margin: 0 auto;
18
+ }
19
+
20
+ .header__title {
21
+ margin: 0 0 var(--spacing-2) 0;
22
+ font-size: var(--font-size-4xl);
23
+ font-weight: var(--font-weight-bold);
24
+ color: var(--color-foreground-1);
25
+ }
26
+
27
+ .header__subtitle {
28
+ margin: 0;
29
+ font-size: var(--font-size-lg);
30
+ font-weight: var(--font-weight-normal);
31
+ color: var(--color-foreground-2);
32
+ }
33
+
34
+ @media (min-width: 768px) {
35
+ .header {
36
+ padding: var(--spacing-2) var(--spacing-4) 0 var(--spacing-4);
37
+ }
38
+ }
39
+
40
+ @media (min-width: 1024px) {
41
+ .header {
42
+ padding: var(--spacing-4) var(--spacing-8) 0 var(--spacing-8);
43
+ }
44
+ }
@@ -0,0 +1,44 @@
1
+ /* Skeleton and basic icon styles */
2
+ .icon {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ }
7
+
8
+ .icon--skeleton {
9
+ background: linear-gradient(90deg, rgba(0,0,0,0.06) 0%, rgba(0,0,0,0.03) 50%, rgba(0,0,0,0.06) 100%);
10
+ border-radius: 4px;
11
+ animation: hb-skeleton 1.2s ease-in-out infinite;
12
+ }
13
+
14
+ @keyframes hb-skeleton {
15
+ 0% { background-position: 200% 0; }
16
+ 100% { background-position: -200% 0; }
17
+ }
18
+ /**
19
+ * Icon Component Styles
20
+ */
21
+
22
+ .icon {
23
+ display: inline-block;
24
+ flex-shrink: 0;
25
+ transition: color var(--transition-base, 0.2s ease);
26
+ }
27
+
28
+ .icon--interactive {
29
+ cursor: pointer;
30
+ color: var(--color-foreground-1);
31
+ }
32
+
33
+ .icon--interactive:hover:not(:disabled) {
34
+ color: var(--color-action-primary-hover);
35
+ }
36
+
37
+ .icon--interactive:active:not(:disabled) {
38
+ color: var(--color-action-primary-active);
39
+ }
40
+
41
+ .icon--interactive:disabled {
42
+ cursor: not-allowed;
43
+ color: var(--color-foreground-2);
44
+ }