@actabldesign/bellhop-styles 0.0.3 → 0.0.12

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 (127) hide show
  1. package/README.md +105 -70
  2. package/dist/index.css +1538 -0
  3. package/dist/utilities.css +5730 -0
  4. package/llms.txt +2852 -0
  5. package/package.json +29 -20
  6. package/project.json +29 -0
  7. package/rollup.config.js +44 -0
  8. package/{base → src/base}/normalize.css +4 -0
  9. package/src/bh-tokens/_primitives.scss +296 -0
  10. package/src/bh-tokens/_semantic.scss +158 -0
  11. package/src/bh-tokens/components/_avatar.tokens.scss +64 -0
  12. package/src/bh-tokens/components/_badge-dot.tokens.scss +33 -0
  13. package/src/bh-tokens/components/_badge.tokens.scss +61 -0
  14. package/src/bh-tokens/components/_button-icon.tokens.scss +65 -0
  15. package/src/bh-tokens/components/_button.tokens.scss +185 -0
  16. package/src/bh-tokens/components/_checkbox.tokens.scss +67 -0
  17. package/src/bh-tokens/components/_dropdown.tokens.scss +103 -0
  18. package/src/bh-tokens/components/_featured-icon.tokens.scss +57 -0
  19. package/src/bh-tokens/components/_input-number.tokens.scss +50 -0
  20. package/src/bh-tokens/components/_input.tokens.scss +86 -0
  21. package/src/bh-tokens/components/_label.tokens.scss +37 -0
  22. package/src/bh-tokens/components/_modal.tokens.scss +42 -0
  23. package/src/bh-tokens/components/_pagination.tokens.scss +104 -0
  24. package/src/bh-tokens/components/_password.tokens.scss +63 -0
  25. package/src/bh-tokens/components/_progress-bar.tokens.scss +34 -0
  26. package/src/bh-tokens/components/_progress-spinner.tokens.scss +51 -0
  27. package/src/bh-tokens/components/_radiobutton.tokens.scss +90 -0
  28. package/src/bh-tokens/components/_skeleton.tokens.scss +22 -0
  29. package/src/bh-tokens/components/_textarea.tokens.scss +76 -0
  30. package/src/bh-tokens/components/_toggle.tokens.scss +74 -0
  31. package/src/bh-tokens/components/avatar.scss +288 -0
  32. package/src/bh-tokens/components/badge-dot.scss +177 -0
  33. package/src/bh-tokens/components/badge.scss +497 -0
  34. package/src/bh-tokens/components/button-icon.scss +227 -0
  35. package/src/bh-tokens/components/button.scss +640 -0
  36. package/src/bh-tokens/components/checkbox.scss +254 -0
  37. package/src/bh-tokens/components/dropdown.scss +231 -0
  38. package/src/bh-tokens/components/featured-icon.scss +219 -0
  39. package/src/bh-tokens/components/input-number.scss +147 -0
  40. package/src/bh-tokens/components/input.scss +271 -0
  41. package/src/bh-tokens/components/label.scss +176 -0
  42. package/src/bh-tokens/components/modal.scss +103 -0
  43. package/src/bh-tokens/components/pagination.scss +324 -0
  44. package/src/bh-tokens/components/password.scss +193 -0
  45. package/src/bh-tokens/components/progress-bar.scss +124 -0
  46. package/src/bh-tokens/components/progress-spinner.scss +130 -0
  47. package/src/bh-tokens/components/radiobutton.scss +193 -0
  48. package/src/bh-tokens/components/skeleton.scss +50 -0
  49. package/src/bh-tokens/components/textarea.scss +228 -0
  50. package/src/bh-tokens/components/toggle.scss +320 -0
  51. package/src/index.css +22 -0
  52. package/src/mixins/_responsive.scss +167 -0
  53. package/src/tokens/bellhop-animations.css +392 -0
  54. package/src/tokens/bellhop-global.css +175 -0
  55. package/src/tokens/bellhop-icons.css +77 -0
  56. package/src/tokens/bellhop-layout.css +216 -0
  57. package/src/tokens/bellhop-primary-colors.css +96 -0
  58. package/src/tokens/bellhop-radius.css +14 -0
  59. package/src/tokens/bellhop-secondary-colors.css +154 -0
  60. package/src/tokens/bellhop-shadows.css +55 -0
  61. package/src/tokens/bellhop-spacing.css +66 -0
  62. package/src/tokens/bellhop-styles.css +174 -0
  63. package/src/tokens/bellhop-typography.css +146 -0
  64. package/src/tokens/colors.json +737 -0
  65. package/src/tokens/colors.mdx +59 -0
  66. package/src/tokens/index.css +17 -0
  67. package/src/utilities/_breakpoints.scss +19 -0
  68. package/src/utilities/_flex.scss +228 -0
  69. package/src/utilities/_grid.scss +189 -0
  70. package/src/utilities/_index.scss +32 -0
  71. package/src/utilities/_scrollable.scss +239 -0
  72. package/src/utilities/_sizing.scss +229 -0
  73. package/src/utilities/_spacing.scss +187 -0
  74. package/src/utilities/_truncation.scss +126 -0
  75. package/src/utilities/_visibility.scss +117 -0
  76. package/src/utilities.scss +32 -0
  77. package/components/appbar.css +0 -167
  78. package/components/autocomplete-menu.css +0 -142
  79. package/components/avatar-add.css +0 -112
  80. package/components/avatar.css +0 -253
  81. package/components/badge-dot.css +0 -78
  82. package/components/badge.css +0 -337
  83. package/components/bar-chart-card.css +0 -261
  84. package/components/bar-chart.css +0 -149
  85. package/components/breadcrumbs.css +0 -136
  86. package/components/button.css +0 -266
  87. package/components/chart-tooltip.css +0 -96
  88. package/components/checkbox-label.css +0 -53
  89. package/components/checkbox.css +0 -127
  90. package/components/container-footer.css +0 -22
  91. package/components/container.css +0 -17
  92. package/components/date-picker-content.css +0 -337
  93. package/components/date-picker.css +0 -103
  94. package/components/date-range-picker-content.css +0 -85
  95. package/components/date-range-picker.css +0 -72
  96. package/components/dropdown-menu.css +0 -204
  97. package/components/dropdown.css +0 -126
  98. package/components/empty-state.css +0 -83
  99. package/components/featured-icon.css +0 -194
  100. package/components/illustrations.css +0 -120
  101. package/components/input-autocomplete.css +0 -158
  102. package/components/input-number.css +0 -2
  103. package/components/input-verification.css +0 -137
  104. package/components/input.css +0 -374
  105. package/components/loader-spinner.css +0 -421
  106. package/components/logo-box.css +0 -85
  107. package/components/month-picker-content.css +0 -190
  108. package/components/month-picker.css +0 -83
  109. package/components/nav-item.css +0 -110
  110. package/components/notification.css +0 -262
  111. package/components/page-navigation.css +0 -294
  112. package/components/picker-menu.css +0 -43
  113. package/components/pie-chart-card.css +0 -213
  114. package/components/pie-chart.css +0 -80
  115. package/components/product-switcher.css +0 -127
  116. package/components/property-switcher.css +0 -95
  117. package/components/radio-button-label.css +0 -53
  118. package/components/radio-button.css +0 -134
  119. package/components/sidebar.css +0 -178
  120. package/components/skeleton-loader.css +0 -47
  121. package/components/tag.css +0 -214
  122. package/components/textarea.css +0 -211
  123. package/components/toggle.css +0 -298
  124. package/components/tooltip.css +0 -85
  125. package/components/trend-chart-card.css +0 -189
  126. package/components/trend-chart.css +0 -94
  127. package/index.css +0 -8115
package/llms.txt ADDED
@@ -0,0 +1,2852 @@
1
+ This file is a merged representation of a subset of the codebase, containing specifically included files and files not matching ignore patterns, combined into a single document by Repomix.
2
+ The content has been processed where security check has been disabled.
3
+
4
+ ================================================================
5
+ File Summary
6
+ ================================================================
7
+
8
+ Purpose:
9
+ --------
10
+ This file contains a packed representation of a subset of the repository's contents that is considered the most important context.
11
+ It is designed to be easily consumable by AI systems for analysis, code review,
12
+ or other automated processes.
13
+
14
+ File Format:
15
+ ------------
16
+ The content is organized as follows:
17
+ 1. This summary section
18
+ 2. Repository information
19
+ 3. Directory structure
20
+ 4. Repository files (if enabled)
21
+ 5. Multiple file entries, each consisting of:
22
+ a. A separator line (================)
23
+ b. The file path (File: path/to/file)
24
+ c. Another separator line
25
+ d. The full contents of the file
26
+ e. A blank line
27
+
28
+ Usage Guidelines:
29
+ -----------------
30
+ - This file should be treated as read-only. Any changes should be made to the
31
+ original repository files, not this packed version.
32
+ - When processing this file, use the file path to distinguish
33
+ between different files in the repository.
34
+ - Be aware that this file may contain sensitive information. Handle it with
35
+ the same level of security as you would the original repository.
36
+
37
+ Notes:
38
+ ------
39
+ - Some files may have been excluded based on .gitignore rules and Repomix's configuration
40
+ - Binary files are not included in this packed representation. Please refer to the Repository Structure section for a complete list of file paths, including binary files
41
+ - Only files matching these patterns are included: **/*.ts, **/*.tsx, **/*.js, **/*.jsx, **/*.css, **/*.scss, **/*.json, **/*.md
42
+ - Files matching these patterns are excluded: **/node_modules/**, **/dist/**, **/build/**, **/coverage/**, **/.angular/**, **/.nx/**, **/storybook-static/**, **/*.lock, **/*.log, **/*.svg, **/*.png, **/*.jpg, **/*.jpeg, **/*.gif, **/*.ico, **/*.webp, **/*.woff, **/*.woff2, **/*.ttf, **/*.eot, **/*.otf, **/*.min.js, **/*.min.css, **/*.map, **/package-lock.json, **/yarn.lock, **/pnpm-lock.yaml, **/.DS_Store, **/Thumbs.db, **/llms.txt, **/llms/**
43
+ - Files matching patterns in .gitignore are excluded
44
+ - Files matching default ignore patterns are excluded
45
+ - Security check has been disabled - content may contain sensitive information
46
+ - Files are sorted by Git change count (files with more changes are at the bottom)
47
+
48
+
49
+ ================================================================
50
+ Directory Structure
51
+ ================================================================
52
+ src/
53
+ base/
54
+ normalize.css
55
+ tokens/
56
+ bellhop-animations.css
57
+ bellhop-global.css
58
+ bellhop-icons.css
59
+ bellhop-layout.css
60
+ bellhop-primary-colors.css
61
+ bellhop-radius.css
62
+ bellhop-secondary-colors.css
63
+ bellhop-shadows.css
64
+ bellhop-spacing.css
65
+ bellhop-styles.css
66
+ bellhop-typography.css
67
+ colors.json
68
+ index.css
69
+ index.css
70
+ package.json
71
+ project.json
72
+ README.md
73
+ rollup.config.js
74
+
75
+ ================================================================
76
+ Files
77
+ ================================================================
78
+
79
+ ================
80
+ File: src/base/normalize.css
81
+ ================
82
+ /* Base normalization for consistent rendering across frameworks */
83
+
84
+ /* Ensure consistent font rendering */
85
+ * {
86
+ -webkit-font-smoothing: antialiased;
87
+ -moz-osx-font-smoothing: grayscale;
88
+ text-rendering: optimizeLegibility;
89
+ }
90
+
91
+ /* Set default font family with proper fallbacks */
92
+ body {
93
+ font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;
94
+ }
95
+
96
+ /* Ensure consistent box sizing */
97
+ *,
98
+ *::before,
99
+ *::after {
100
+ box-sizing: border-box;
101
+ }
102
+
103
+ /* Remove default margins */
104
+ body,
105
+ h1,
106
+ h2,
107
+ h3,
108
+ h4,
109
+ h5,
110
+ h6,
111
+ p,
112
+ figure,
113
+ blockquote,
114
+ dl,
115
+ dd {
116
+ margin: 0;
117
+ }
118
+
119
+ /* Set core root defaults */
120
+ html {
121
+ font-size: 16px; /* Explicit base font size for consistent rem calculations */
122
+ }
123
+
124
+ html:focus-within {
125
+ scroll-behavior: smooth;
126
+ }
127
+
128
+ /* Set core body defaults */
129
+ body {
130
+ min-height: 100vh;
131
+ text-rendering: optimizeSpeed;
132
+ line-height: 1.5;
133
+ }
134
+
135
+ /* Make images easier to work with */
136
+ img,
137
+ picture,
138
+ video,
139
+ canvas,
140
+ svg {
141
+ display: block;
142
+ max-width: 100%;
143
+ }
144
+
145
+ /* Inherit fonts for inputs and buttons */
146
+ input,
147
+ button,
148
+ textarea,
149
+ select {
150
+ font: inherit;
151
+ }
152
+
153
+ /* Remove native browser focus outlines for form elements */
154
+ /* Components should provide their own focus styling */
155
+ input,
156
+ textarea,
157
+ button,
158
+ select {
159
+ outline: none;
160
+ box-shadow: none;
161
+ }
162
+
163
+ input:focus,
164
+ textarea:focus,
165
+ button:focus,
166
+ select:focus {
167
+ outline: none;
168
+ border: none;
169
+ box-shadow: none;
170
+ }
171
+
172
+ /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
173
+ @media (prefers-reduced-motion: reduce) {
174
+ html:focus-within {
175
+ scroll-behavior: auto;
176
+ }
177
+
178
+ *,
179
+ *::before,
180
+ *::after {
181
+ animation-duration: 0.01ms !important;
182
+ animation-iteration-count: 1 !important;
183
+ transition-duration: 0.01ms !important;
184
+ scroll-behavior: auto !important;
185
+ }
186
+ }
187
+
188
+ ================
189
+ File: src/tokens/bellhop-animations.css
190
+ ================
191
+ /* Bellhop Animation System */
192
+
193
+ /* Animation Variables */
194
+ :root {
195
+ /* Timing */
196
+ --animation-duration-fast: 150ms;
197
+ --animation-duration-normal: 200ms;
198
+ --animation-duration-slow: 300ms;
199
+
200
+ /* Easing Functions */
201
+ --animation-ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
202
+ --animation-ease-exit: cubic-bezier(0.4, 0, 1, 1);
203
+ --animation-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
204
+ --animation-ease-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
205
+
206
+ /* Transform Values */
207
+ --animation-slide-distance: 8px;
208
+ --animation-scale-start: 0.96;
209
+ --animation-scale-end: 1;
210
+ }
211
+
212
+ /* Dropdown Animations */
213
+ .animate-dropdown-enter {
214
+ animation: dropdownEnter var(--animation-duration-normal)
215
+ var(--animation-ease-enter) forwards;
216
+ }
217
+
218
+ .animate-dropdown-exit {
219
+ animation: dropdownExit var(--animation-duration-fast)
220
+ var(--animation-ease-exit) forwards;
221
+ }
222
+
223
+ @keyframes dropdownEnter {
224
+ 0% {
225
+ opacity: 0;
226
+ transform: scale(var(--animation-scale-start));
227
+ }
228
+ 100% {
229
+ opacity: 1;
230
+ transform: scale(var(--animation-scale-end));
231
+ }
232
+ }
233
+
234
+ @keyframes dropdownExit {
235
+ 0% {
236
+ opacity: 1;
237
+ transform: translateY(0) scale(var(--animation-scale-end));
238
+ }
239
+ 100% {
240
+ opacity: 0;
241
+ transform: translateY(calc(-1 * var(--animation-slide-distance)))
242
+ scale(var(--animation-scale-start));
243
+ }
244
+ }
245
+
246
+ /* Modal Animations */
247
+ .animate-modal-enter {
248
+ animation: modalEnter var(--animation-duration-normal)
249
+ var(--animation-ease-enter) forwards;
250
+ }
251
+
252
+ .animate-modal-exit {
253
+ animation: modalExit var(--animation-duration-fast) var(--animation-ease-exit)
254
+ forwards;
255
+ }
256
+
257
+ @keyframes modalEnter {
258
+ 0% {
259
+ opacity: 0;
260
+ transform: translateY(16px) scale(var(--animation-scale-start));
261
+ }
262
+ 100% {
263
+ opacity: 1;
264
+ transform: translateY(0) scale(var(--animation-scale-end));
265
+ }
266
+ }
267
+
268
+ @keyframes modalExit {
269
+ 0% {
270
+ opacity: 1;
271
+ transform: translateY(0) scale(var(--animation-scale-end));
272
+ }
273
+ 100% {
274
+ opacity: 0;
275
+ transform: translateY(16px) scale(var(--animation-scale-start));
276
+ }
277
+ }
278
+
279
+ /* Chevron Icon Animations */
280
+ .chevron-icon-rotate {
281
+ transition: transform var(--animation-duration-fast)
282
+ var(--animation-ease-smooth);
283
+ }
284
+
285
+ .chevron-icon-rotate.expanded {
286
+ transform: rotate(180deg);
287
+ }
288
+
289
+ /* Alternative with direct elements */
290
+ .chevron-expand {
291
+ display: inline-flex;
292
+ transition: transform var(--animation-duration-fast)
293
+ var(--animation-ease-smooth);
294
+ }
295
+
296
+ .chevron-expand.open {
297
+ transform: rotate(180deg);
298
+ }
299
+
300
+ /* Toast Animations */
301
+ .animate-toast-enter {
302
+ animation: toastEnter var(--animation-duration-normal)
303
+ var(--animation-ease-enter) forwards;
304
+ }
305
+
306
+ .animate-toast-exit {
307
+ animation: toastExit var(--animation-duration-fast) var(--animation-ease-exit)
308
+ forwards;
309
+ }
310
+
311
+ @keyframes toastEnter {
312
+ 0% {
313
+ opacity: 0;
314
+ transform: translateX(100%) scale(var(--animation-scale-start));
315
+ }
316
+ 100% {
317
+ opacity: 1;
318
+ transform: translateX(0) scale(var(--animation-scale-end));
319
+ }
320
+ }
321
+
322
+ @keyframes toastExit {
323
+ 0% {
324
+ opacity: 1;
325
+ transform: translateX(0) scale(var(--animation-scale-end));
326
+ }
327
+ 100% {
328
+ opacity: 0;
329
+ transform: translateX(100%) scale(var(--animation-scale-start));
330
+ }
331
+ }
332
+
333
+ /* Fade Animations */
334
+ .animate-fade-enter {
335
+ animation: fadeEnter var(--animation-duration-normal)
336
+ var(--animation-ease-enter) forwards;
337
+ }
338
+
339
+ .animate-fade-exit {
340
+ animation: fadeExit var(--animation-duration-fast) var(--animation-ease-exit)
341
+ forwards;
342
+ }
343
+
344
+ @keyframes fadeEnter {
345
+ 0% {
346
+ opacity: 0;
347
+ }
348
+ 100% {
349
+ opacity: 1;
350
+ }
351
+ }
352
+
353
+ @keyframes fadeExit {
354
+ 0% {
355
+ opacity: 1;
356
+ }
357
+ 100% {
358
+ opacity: 0;
359
+ }
360
+ }
361
+
362
+ /* Scale Animations */
363
+ .animate-scale-enter {
364
+ animation: scaleEnter var(--animation-duration-normal)
365
+ var(--animation-ease-enter) forwards;
366
+ }
367
+
368
+ .animate-scale-exit {
369
+ animation: scaleExit var(--animation-duration-fast) var(--animation-ease-exit)
370
+ forwards;
371
+ }
372
+
373
+ @keyframes scaleEnter {
374
+ 0% {
375
+ opacity: 0;
376
+ transform: scale(var(--animation-scale-start));
377
+ }
378
+ 100% {
379
+ opacity: 1;
380
+ transform: scale(var(--animation-scale-end));
381
+ }
382
+ }
383
+
384
+ @keyframes scaleExit {
385
+ 0% {
386
+ opacity: 1;
387
+ transform: scale(var(--animation-scale-end));
388
+ }
389
+ 100% {
390
+ opacity: 0;
391
+ transform: scale(var(--animation-scale-start));
392
+ }
393
+ }
394
+
395
+ /* Slide Animations */
396
+ .animate-slide-up-enter {
397
+ animation: slideUpEnter var(--animation-duration-normal)
398
+ var(--animation-ease-enter) forwards;
399
+ }
400
+
401
+ .animate-slide-up-exit {
402
+ animation: slideUpExit var(--animation-duration-fast)
403
+ var(--animation-ease-exit) forwards;
404
+ }
405
+
406
+ .animate-slide-down-enter {
407
+ animation: slideDownEnter var(--animation-duration-normal)
408
+ var(--animation-ease-enter) forwards;
409
+ }
410
+
411
+ .animate-slide-down-exit {
412
+ animation: slideDownExit var(--animation-duration-fast)
413
+ var(--animation-ease-exit) forwards;
414
+ }
415
+
416
+ @keyframes slideUpEnter {
417
+ 0% {
418
+ opacity: 0;
419
+ transform: translateY(var(--animation-slide-distance));
420
+ }
421
+ 100% {
422
+ opacity: 1;
423
+ transform: translateY(0);
424
+ }
425
+ }
426
+
427
+ @keyframes slideUpExit {
428
+ 0% {
429
+ opacity: 1;
430
+ transform: translateY(0);
431
+ }
432
+ 100% {
433
+ opacity: 0;
434
+ transform: translateY(var(--animation-slide-distance));
435
+ }
436
+ }
437
+
438
+ @keyframes slideDownEnter {
439
+ 0% {
440
+ opacity: 0;
441
+ transform: translateY(calc(-1 * var(--animation-slide-distance)));
442
+ }
443
+ 100% {
444
+ opacity: 1;
445
+ transform: translateY(0);
446
+ }
447
+ }
448
+
449
+ @keyframes slideDownExit {
450
+ 0% {
451
+ opacity: 1;
452
+ transform: translateY(0);
453
+ }
454
+ 100% {
455
+ opacity: 0;
456
+ transform: translateY(calc(-1 * var(--animation-slide-distance)));
457
+ }
458
+ }
459
+
460
+ /* Base Animation Classes */
461
+ .animate-base {
462
+ transform-origin: top center;
463
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
464
+ }
465
+
466
+ .animate-base-modal {
467
+ transform-origin: center center;
468
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
469
+ }
470
+
471
+ .animate-base-toast {
472
+ transform-origin: right center;
473
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
474
+ }
475
+
476
+ /* Dismiss Animations */
477
+ .animate-dismiss {
478
+ animation: dismiss var(--animation-duration-normal) var(--animation-ease-exit)
479
+ forwards;
480
+ }
481
+
482
+ @keyframes dismiss {
483
+ 0% {
484
+ opacity: 1;
485
+ transform: scale(1);
486
+ }
487
+ 60% {
488
+ opacity: 0.3;
489
+ transform: scale(0.94);
490
+ }
491
+ 100% {
492
+ opacity: 0;
493
+ transform: scale(0.88);
494
+ }
495
+ }
496
+
497
+ /* Chart Animations */
498
+ .animate-chart-segment-enter {
499
+ animation: chartSegmentEnter 600ms var(--animation-ease-enter) forwards;
500
+ }
501
+
502
+ .animate-chart-segment-hover {
503
+ transition: all var(--animation-duration-fast) var(--animation-ease-smooth);
504
+ }
505
+
506
+ .animate-chart-segment-hover:hover {
507
+ opacity: 0.85;
508
+ transform: scale(1.02);
509
+ filter: brightness(1.1);
510
+ }
511
+
512
+ @keyframes chartSegmentEnter {
513
+ 0% {
514
+ opacity: 0;
515
+ transform: scale(0.2) rotate(-45deg);
516
+ }
517
+ 25% {
518
+ opacity: 0.3;
519
+ transform: scale(0.5) rotate(-22deg);
520
+ }
521
+ 50% {
522
+ opacity: 0.6;
523
+ transform: scale(0.8) rotate(-8deg);
524
+ }
525
+ 75% {
526
+ opacity: 0.9;
527
+ transform: scale(1.05) rotate(2deg);
528
+ }
529
+ 100% {
530
+ opacity: 1;
531
+ transform: scale(1) rotate(0deg);
532
+ }
533
+ }
534
+
535
+ /* Pie Chart Segment Animation */
536
+ .animate-pie-segment-enter {
537
+ animation: pieSegmentEnter 700ms var(--animation-ease-enter) forwards;
538
+ }
539
+
540
+ @keyframes pieSegmentEnter {
541
+ 0% {
542
+ opacity: 0;
543
+ transform: scale(0.3) rotate(-90deg);
544
+ }
545
+ 15% {
546
+ opacity: 0.2;
547
+ transform: scale(0.4) rotate(-60deg);
548
+ }
549
+ 30% {
550
+ opacity: 0.5;
551
+ transform: scale(0.6) rotate(-30deg);
552
+ }
553
+ 60% {
554
+ opacity: 0.8;
555
+ transform: scale(0.95) rotate(-5deg);
556
+ }
557
+ 80% {
558
+ opacity: 0.95;
559
+ transform: scale(1.02) rotate(2deg);
560
+ }
561
+ 100% {
562
+ opacity: 1;
563
+ transform: scale(1) rotate(0deg);
564
+ }
565
+ }
566
+
567
+ /* Utility Classes */
568
+ .animate-duration-fast {
569
+ animation-duration: var(--animation-duration-fast) !important;
570
+ }
571
+
572
+ .animate-duration-normal {
573
+ animation-duration: var(--animation-duration-normal) !important;
574
+ }
575
+
576
+ .animate-duration-slow {
577
+ animation-duration: var(--animation-duration-slow) !important;
578
+ }
579
+
580
+ .animate-ease-bounce {
581
+ animation-timing-function: var(--animation-ease-bounce) !important;
582
+ }
583
+
584
+ ================
585
+ File: src/tokens/bellhop-global.css
586
+ ================
587
+ /* ==========================================================================
588
+ BELLHOP GLOBAL STYLES
589
+ ========================================================================== */
590
+
591
+ /* Import all Bellhop design system styles */
592
+ @import url('./bellhop-primary-colors.css');
593
+ @import url('./bellhop-secondary-colors.css');
594
+ @import url('./bellhop-spacing.css');
595
+ @import url('./bellhop-radius.css');
596
+ @import url('./bellhop-shadows.css');
597
+ @import url('./bellhop-typography.css');
598
+ @import url('./bellhop-icons.css');
599
+
600
+ /* ==========================================================================
601
+ FOCUS MANAGEMENT
602
+ ========================================================================== */
603
+
604
+ /* 1. Reset the outline for all focusable elements when a mouse is used. */
605
+ *:focus:not(:focus-visible) {
606
+ outline: none;
607
+ }
608
+
609
+ /* 2. Apply a custom outline that will only appear during keyboard navigation. */
610
+ *:focus-visible {
611
+ outline: 2px solid var(--color-brand-500); /* Using bellhop brand color */
612
+ outline-offset: 2px;
613
+ }
614
+
615
+ /* ==========================================================================
616
+ ACCESSIBILITY IMPROVEMENTS
617
+ ========================================================================== */
618
+
619
+ /* Ensure focus is visible on interactive elements */
620
+ button:focus-visible,
621
+ input:focus-visible,
622
+ select:focus-visible,
623
+ textarea:focus-visible,
624
+ a:focus-visible,
625
+ [tabindex]:focus-visible {
626
+ outline: 2px solid var(--color-brand-500);
627
+ outline-offset: 2px;
628
+ }
629
+
630
+ /* ==========================================================================
631
+ UTILITY CLASSES
632
+ ========================================================================== */
633
+
634
+ /* Prevent text selection */
635
+ .no-select {
636
+ user-select: none;
637
+ -webkit-user-select: none;
638
+ -moz-user-select: none;
639
+ -ms-user-select: none;
640
+ }
641
+
642
+ /* Screen reader only content */
643
+ .sr-only {
644
+ position: absolute;
645
+ width: 1px;
646
+ height: 1px;
647
+ padding: 0;
648
+ margin: -1px;
649
+ overflow: hidden;
650
+ clip: rect(0, 0, 0, 0);
651
+ white-space: nowrap;
652
+ border: 0;
653
+ }
654
+
655
+ /* ==========================================================================
656
+ CONTENT LAYOUT UTILITIES
657
+ ========================================================================== */
658
+
659
+ /* Content Container - Main flex container for page navigation and content area */
660
+ .bellhop-content-container {
661
+ display: flex;
662
+ flex: 1;
663
+ overflow: hidden;
664
+ background-color: var(--color-white);
665
+ }
666
+
667
+ /* Content Area - Scrollable main content region */
668
+ .bellhop-content-area {
669
+ flex: 1;
670
+ overflow-y: auto;
671
+ overflow-x: hidden;
672
+ background-color: var(--color-white);
673
+ }
674
+
675
+ /* Content Wrapper - Inner content container with padding and max-width */
676
+ .bellhop-content-wrapper {
677
+ padding: var(--spacing-4xl);
678
+ /*max-width: 1200px;*/
679
+ margin: 0 auto;
680
+ font-family: var(--font-inter);
681
+ }
682
+
683
+ /* Content Wrapper Variants */
684
+ .bellhop-content-wrapper-sm {
685
+ padding: var(--spacing-2xl);
686
+ /*max-width: 800px;*/
687
+ margin: 0 auto;
688
+ font-family: var(--font-inter);
689
+ }
690
+
691
+ .bellhop-content-wrapper-lg {
692
+ padding: var(--spacing-5xl);
693
+ /*max-width: 1400px;*/
694
+ margin: 0 auto;
695
+ font-family: var(--font-inter);
696
+ }
697
+
698
+ .bellhop-content-wrapper-full {
699
+ padding: var(--spacing-4xl);
700
+ max-width: none;
701
+ margin: 0;
702
+ font-family: var(--font-inter);
703
+ }
704
+
705
+ /* Content Typography - Standard content headings and text */
706
+ .bellhop-content-wrapper h1,
707
+ .bellhop-content-wrapper-sm h1,
708
+ .bellhop-content-wrapper-lg h1,
709
+ .bellhop-content-wrapper-full h1 {
710
+ font-size: var(--text-3xl-size);
711
+ font-weight: var(--weight-bold);
712
+ line-height: var(--text-3xl-line);
713
+ color: var(--color-neutral-800);
714
+ margin-bottom: var(--spacing-md);
715
+ }
716
+
717
+ .bellhop-content-wrapper p,
718
+ .bellhop-content-wrapper-sm p,
719
+ .bellhop-content-wrapper-lg p,
720
+ .bellhop-content-wrapper-full p {
721
+ font-size: var(--text-md-size);
722
+ font-weight: var(--weight-regular);
723
+ line-height: var(--text-md-line);
724
+ color: var(--color-neutral-600);
725
+ margin-bottom: var(--spacing-2xl);
726
+ }
727
+
728
+ /* Responsive adjustments for content wrappers */
729
+ @media (max-width: 768px) {
730
+ .bellhop-content-wrapper,
731
+ .bellhop-content-wrapper-sm,
732
+ .bellhop-content-wrapper-lg,
733
+ .bellhop-content-wrapper-full {
734
+ padding: var(--spacing-xl);
735
+ }
736
+
737
+ .bellhop-content-wrapper h1,
738
+ .bellhop-content-wrapper-sm h1,
739
+ .bellhop-content-wrapper-lg h1,
740
+ .bellhop-content-wrapper-full h1 {
741
+ font-size: var(--text-2xl-size);
742
+ line-height: var(--text-2xl-line);
743
+ }
744
+ }
745
+
746
+ @media (max-width: 480px) {
747
+ .bellhop-content-wrapper,
748
+ .bellhop-content-wrapper-sm,
749
+ .bellhop-content-wrapper-lg,
750
+ .bellhop-content-wrapper-full {
751
+ padding: var(--spacing-md);
752
+ }
753
+
754
+ .bellhop-content-wrapper h1,
755
+ .bellhop-content-wrapper-sm h1,
756
+ .bellhop-content-wrapper-lg h1,
757
+ .bellhop-content-wrapper-full h1 {
758
+ font-size: var(--text-xl-size);
759
+ line-height: var(--text-xl-line);
760
+ }
761
+ }
762
+
763
+ ================
764
+ File: src/tokens/bellhop-icons.css
765
+ ================
766
+ /* ============================================
767
+ Bellhop Icon System
768
+ ============================================ */
769
+
770
+ :root {
771
+ /* Icon Sizes */
772
+ --icon-size-xs: 16px;
773
+ --icon-size-sm: 18px;
774
+ --icon-size-md: 20px;
775
+ --icon-size-lg: 24px;
776
+ --icon-size-xl: 28px;
777
+ --icon-size-2xl: 32px;
778
+ }
779
+
780
+ /* Base Material Symbols Configuration */
781
+ .material-symbols-outlined,
782
+ .material-icons,
783
+ .material-icons-outlined {
784
+ font-family: 'Material Symbols Outlined';
785
+ font-weight: normal;
786
+ font-style: normal;
787
+ font-size: var(--icon-size-md);
788
+ line-height: 1;
789
+ display: inline-block;
790
+ vertical-align: middle;
791
+ color: var(--color-neutral-500);
792
+ -webkit-font-smoothing: antialiased;
793
+ font-feature-settings: 'liga';
794
+ }
795
+
796
+ /* Icon Size Classes */
797
+ .icon-xs {
798
+ font-size: var(--icon-size-xs);
799
+ }
800
+ .icon-sm {
801
+ font-size: var(--icon-size-sm);
802
+ }
803
+ .icon-md {
804
+ font-size: var(--icon-size-md);
805
+ }
806
+ .icon-lg {
807
+ font-size: var(--icon-size-lg);
808
+ }
809
+ .icon-xl {
810
+ font-size: var(--icon-size-xl);
811
+ }
812
+ .icon-2xl {
813
+ font-size: var(--icon-size-2xl);
814
+ }
815
+
816
+ /* Icon Color Classes */
817
+ .icon-primary {
818
+ color: var(--color-brand-500);
819
+ }
820
+ .icon-secondary {
821
+ color: var(--color-neutral-500);
822
+ }
823
+ .icon-success {
824
+ color: var(--color-success-500);
825
+ }
826
+ .icon-error {
827
+ color: var(--color-error-500);
828
+ }
829
+ .icon-warning {
830
+ color: var(--color-warning-500);
831
+ }
832
+
833
+ /* Rotating Icons */
834
+ @keyframes icon-spin {
835
+ to {
836
+ transform: rotate(360deg);
837
+ }
838
+ }
839
+
840
+ .icon-spin {
841
+ animation: icon-spin 1s linear infinite;
842
+ }
843
+
844
+ ================
845
+ File: src/tokens/bellhop-layout.css
846
+ ================
847
+ /* ==========================================================================
848
+ BELLHOPOS LAYOUT SYSTEM
849
+ Essential layout classes for dashboard applications
850
+ ========================================================================== */
851
+
852
+ /* Main App Layout */
853
+ .app-layout {
854
+ display: grid;
855
+ grid-template-columns: auto 1fr;
856
+ height: 100vh;
857
+ overflow: hidden;
858
+ font-family: var(--font-inter);
859
+ }
860
+
861
+ /* Sidebar - Always visible, spans full height */
862
+ .app-sidebar {
863
+ background-color: var(--color-white);
864
+ border-right: 1px solid var(--color-neutral-100);
865
+ overflow-y: auto;
866
+ overflow-x: hidden;
867
+ z-index: 100;
868
+ width: 64px;
869
+ min-width: 64px;
870
+ height: 100vh;
871
+ }
872
+
873
+ /* Main Content Area */
874
+ .app-main {
875
+ display: flex;
876
+ flex-direction: column;
877
+ height: 100vh;
878
+ overflow: hidden;
879
+ }
880
+
881
+ /* Header */
882
+ .app-header {
883
+ background-color: var(--color-white);
884
+ z-index: 1000;
885
+ flex-shrink: 0;
886
+ }
887
+
888
+ /* Page Navigation Container - Smooth motion */
889
+ .page-nav {
890
+ flex-shrink: 0;
891
+ width: 280px;
892
+ overflow: hidden;
893
+ transition: all 0.4s cubic-bezier(0.08, 0.52, 0.52, 1);
894
+ transform: translateX(0);
895
+ opacity: 1;
896
+ }
897
+
898
+ .page-nav.collapsed {
899
+ width: 0;
900
+ transform: translateX(-20px);
901
+ opacity: 0;
902
+ }
903
+
904
+ /* Sample Content Grid */
905
+ .content-grid {
906
+ display: grid;
907
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
908
+ gap: var(--spacing-2xl);
909
+ margin-top: var(--spacing-3xl);
910
+ }
911
+
912
+ .content-card {
913
+ background-color: var(--color-white);
914
+ border-radius: var(--radius-lg);
915
+ padding: var(--spacing-2xl);
916
+ box-shadow: var(--shadow-sm);
917
+ transition: all 0.2s ease;
918
+ border: 1px solid var(--color-neutral-100);
919
+ }
920
+
921
+ .content-card:hover {
922
+ box-shadow: var(--shadow-md);
923
+ transform: translateY(-1px);
924
+ }
925
+
926
+ .content-card h3 {
927
+ font-size: var(--text-lg-size);
928
+ font-weight: var(--weight-semibold);
929
+ color: var(--color-neutral-800);
930
+ margin-bottom: var(--spacing-sm);
931
+ }
932
+
933
+ .content-card p {
934
+ font-size: var(--text-sm-size);
935
+ color: var(--color-neutral-500);
936
+ line-height: var(--text-sm-line);
937
+ margin-bottom: 0;
938
+ }
939
+
940
+ /* Responsive Design */
941
+ @media (max-width: 1024px) {
942
+ .page-nav {
943
+ display: none;
944
+ }
945
+
946
+ .content-grid {
947
+ grid-template-columns: 1fr;
948
+ gap: var(--spacing-lg);
949
+ }
950
+ }
951
+
952
+ @media (max-width: 768px) {
953
+ .app-sidebar {
954
+ position: fixed;
955
+ left: 0;
956
+ top: 0;
957
+ height: 100vh;
958
+ z-index: 1001;
959
+ box-shadow: var(--shadow-lg);
960
+ }
961
+
962
+ .app-main {
963
+ margin-left: 0;
964
+ }
965
+ }
966
+
967
+ @media (max-width: 480px) {
968
+ .content-card {
969
+ padding: var(--spacing-lg);
970
+ }
971
+
972
+ .content-grid {
973
+ gap: var(--spacing-md);
974
+ }
975
+ }
976
+
977
+ /* Scrollbar Styling */
978
+ .app-sidebar::-webkit-scrollbar,
979
+ .page-nav::-webkit-scrollbar,
980
+ .bellhop-content-area::-webkit-scrollbar {
981
+ width: 6px;
982
+ }
983
+
984
+ .app-sidebar::-webkit-scrollbar-track,
985
+ .page-nav::-webkit-scrollbar-track,
986
+ .bellhop-content-area::-webkit-scrollbar-track {
987
+ background: var(--color-neutral-50);
988
+ }
989
+
990
+ .app-sidebar::-webkit-scrollbar-thumb,
991
+ .page-nav::-webkit-scrollbar-thumb,
992
+ .bellhop-content-area::-webkit-scrollbar-thumb {
993
+ background: var(--color-neutral-300);
994
+ border-radius: 3px;
995
+ }
996
+
997
+ .app-sidebar::-webkit-scrollbar-thumb:hover,
998
+ .page-nav::-webkit-scrollbar-thumb:hover,
999
+ .bellhop-content-area::-webkit-scrollbar-thumb:hover {
1000
+ background: var(--color-neutral-400);
1001
+ }
1002
+
1003
+ /* Focus styles for accessibility */
1004
+ .content-card:focus-visible {
1005
+ outline: 2px solid var(--color-brand-500);
1006
+ outline-offset: 2px;
1007
+ }
1008
+
1009
+ /* Additional utility classes for dashboard layouts */
1010
+ .dashboard-container {
1011
+ padding: var(--spacing-2xl);
1012
+ max-width: 1200px;
1013
+ margin: 0 auto;
1014
+ }
1015
+
1016
+ .dashboard-section {
1017
+ margin-bottom: var(--spacing-3xl);
1018
+ }
1019
+
1020
+ .dashboard-header {
1021
+ display: flex;
1022
+ align-items: center;
1023
+ justify-content: space-between;
1024
+ margin-bottom: var(--spacing-xl);
1025
+ }
1026
+
1027
+ .dashboard-title {
1028
+ font-size: var(--text-2xl-size);
1029
+ font-weight: var(--weight-bold);
1030
+ color: var(--color-neutral-800);
1031
+ margin: 0;
1032
+ }
1033
+
1034
+ /* Stats grid for dashboard metrics */
1035
+ .stats-grid {
1036
+ display: grid;
1037
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1038
+ gap: var(--spacing-lg);
1039
+ margin-bottom: var(--spacing-2xl);
1040
+ }
1041
+
1042
+ .stat-card {
1043
+ background: var(--color-white);
1044
+ padding: var(--spacing-xl);
1045
+ border-radius: var(--radius-lg);
1046
+ border: 1px solid var(--color-neutral-200);
1047
+ text-align: center;
1048
+ }
1049
+
1050
+ .stat-value {
1051
+ font-size: var(--text-3xl-size);
1052
+ font-weight: var(--weight-bold);
1053
+ color: var(--color-brand-600);
1054
+ display: block;
1055
+ margin-bottom: var(--spacing-xs);
1056
+ }
1057
+
1058
+ .stat-label {
1059
+ font-size: var(--text-sm-size);
1060
+ color: var(--color-neutral-600);
1061
+ font-weight: var(--weight-medium);
1062
+ }
1063
+
1064
+ ================
1065
+ File: src/tokens/bellhop-primary-colors.css
1066
+ ================
1067
+ :root {
1068
+ /* Base */
1069
+ --color-white: hsl(0, 0%, 100%);
1070
+ --color-black: hsl(0, 0%, 0%);
1071
+ --color-transparent: hsla(0, 0%, 100%, 0.0);
1072
+
1073
+ /* Neutral (from gray in colors.json) */
1074
+ --color-neutral-25: hsl(240, 20%, 99%);
1075
+ --color-neutral-50: hsl(240, 20%, 98%);
1076
+ --color-neutral-100: hsl(220, 23%, 95%);
1077
+ --color-neutral-200: hsl(227, 25%, 89%);
1078
+ --color-neutral-300: hsl(224, 24%, 78%);
1079
+ --color-neutral-400: hsl(226, 24%, 59%);
1080
+ --color-neutral-500: hsl(226, 24%, 48%);
1081
+ --color-neutral-600: hsl(226, 24%, 38%);
1082
+ --color-neutral-700: hsl(227, 24%, 33%);
1083
+ --color-neutral-800: hsl(226, 24%, 25%);
1084
+ --color-neutral-900: hsl(233, 33%, 10%);
1085
+ --color-neutral-950: hsl(231, 32%, 8%);
1086
+
1087
+ /* Brand (from indigo in colors.json) */
1088
+ --color-brand-25: hsl(220, 82%, 98%);
1089
+ --color-brand-50: hsl(222, 87%, 97%);
1090
+ --color-brand-100: hsl(221, 94%, 94%);
1091
+ --color-brand-200: hsl(222, 92%, 86%);
1092
+ --color-brand-300: hsl(224, 95%, 77%);
1093
+ --color-brand-400: hsl(224, 94%, 72%);
1094
+ --color-brand-500: hsl(230, 67%, 59%);
1095
+ --color-brand-600: hsl(230, 69%, 48%);
1096
+ --color-brand-700: hsl(230, 74%, 38%);
1097
+ --color-brand-800: hsl(237, 69%, 34%);
1098
+ --color-brand-900: hsl(237, 69%, 28%);
1099
+ --color-brand-950: hsl(237, 61%, 20%);
1100
+
1101
+ /* Accent (guava/rose) */
1102
+ --color-accent-25: hsl(7, 60%, 97%);
1103
+ --color-accent-50: hsl(9, 62%, 96%);
1104
+ --color-accent-100: hsl(2, 57%, 91%);
1105
+ --color-accent-200: hsl(1, 58%, 85%);
1106
+ --color-accent-300: hsl(356, 59%, 79%);
1107
+ --color-accent-400: hsl(357, 61%, 72%);
1108
+ --color-accent-500: hsl(356, 67%, 66%);
1109
+ --color-accent-600: hsl(353, 58%, 58%);
1110
+ --color-accent-700: hsl(353, 52%, 51%);
1111
+ --color-accent-800: hsl(350, 58%, 41%);
1112
+ --color-accent-900: hsl(350, 56%, 28%);
1113
+
1114
+ /* Error */
1115
+ --color-error-25: hsl(12, 100%, 99%);
1116
+ --color-error-50: hsl(13, 90%, 96%);
1117
+ --color-error-100: hsl(0, 81%, 94%);
1118
+ --color-error-200: hsl(0, 84%, 90%);
1119
+ --color-error-300: hsl(0, 83%, 82%);
1120
+ --color-error-400: hsl(0, 91%, 71%);
1121
+ --color-error-500: hsl(1, 84%, 63%);
1122
+ --color-error-600: hsl(7, 75%, 48%);
1123
+ --color-error-700: hsl(7, 78%, 42%);
1124
+ --color-error-800: hsl(0, 62%, 37%);
1125
+ --color-error-900: hsl(3, 64%, 27%);
1126
+ --color-error-950: hsl(8, 75%, 19%);
1127
+
1128
+ /* Warning */
1129
+ --color-warning-25: hsl(42, 100%, 98%);
1130
+ --color-warning-50: hsl(45, 100%, 96%);
1131
+ --color-warning-100: hsl(45, 96%, 89%);
1132
+ --color-warning-200: hsl(44, 98%, 77%);
1133
+ --color-warning-300: hsl(42, 99%, 65%);
1134
+ --color-warning-400: hsl(39, 98%, 56%);
1135
+ --color-warning-500: hsl(34, 94%, 50%);
1136
+ --color-warning-600: hsl(28, 97%, 44%);
1137
+ --color-warning-700: hsl(22, 92%, 37%);
1138
+ --color-warning-800: hsl(19, 84%, 31%);
1139
+ --color-warning-900: hsl(18, 79%, 27%);
1140
+ --color-warning-950: hsl(17, 79%, 17%);
1141
+
1142
+ /* Success */
1143
+ --color-success-25: hsl(142, 80%, 98%);
1144
+ --color-success-50: hsl(145, 81%, 96%);
1145
+ --color-success-100: hsl(140, 75%, 92%);
1146
+ --color-success-200: hsl(144, 68%, 80%);
1147
+ --color-success-300: hsl(148, 63%, 67%);
1148
+ --color-success-400: hsl(150, 57%, 54%);
1149
+ --color-success-500: hsl(152, 77%, 39%);
1150
+ --color-success-600: hsl(153, 91%, 30%);
1151
+ --color-success-700: hsl(155, 90%, 24%);
1152
+ --color-success-800: hsl(155, 84%, 20%);
1153
+ --color-success-900: hsl(156, 83%, 16%);
1154
+ --color-success-950: hsl(157, 82%, 11%);
1155
+
1156
+ --alpha-80: 0.8;
1157
+ --alpha-60: 0.6;
1158
+ --alpha-40: 0.4;
1159
+ --alpha-20: 0.2;
1160
+ --alpha-10: 0.1;
1161
+ --alpha-5: 0.05;
1162
+ }
1163
+
1164
+ ================
1165
+ File: src/tokens/bellhop-radius.css
1166
+ ================
1167
+ :root {
1168
+ /* Radius scale */
1169
+ --radius-none: 0rem; /* 0px */
1170
+ --radius-xxs: 0.125rem; /* 2px */
1171
+ --radius-xs: 0.25rem; /* 4px */
1172
+ --radius-sm: 0.375rem; /* 6px */
1173
+ --radius-md: 0.5rem; /* 8px */
1174
+ --radius-lg: 0.625rem; /* 10px */
1175
+ --radius-xl: 0.75rem; /* 12px */
1176
+ --radius-2xl: 1rem; /* 16px */
1177
+ --radius-3xl: 1.25rem; /* 20px */
1178
+ --radius-4xl: 1.5rem; /* 24px */
1179
+ --radius-full: 9999px; /* Full / pill / circle */
1180
+ }
1181
+
1182
+ ================
1183
+ File: src/tokens/bellhop-secondary-colors.css
1184
+ ================
1185
+ :root {
1186
+ /* Gray Cool */
1187
+ --color-graycool-25: hsl(240, 20%, 99%);
1188
+ --color-graycool-50: hsl(240, 20%, 98%);
1189
+ --color-graycool-100: hsl(240, 17%, 95%);
1190
+ --color-graycool-200: hsl(227, 25%, 89%);
1191
+ --color-graycool-300: hsl(224, 24%, 78%);
1192
+ --color-graycool-400: hsl(226, 24%, 59%);
1193
+ --color-graycool-500: hsl(226, 24%, 48%);
1194
+ --color-graycool-600: hsl(226, 24%, 38%);
1195
+ --color-graycool-700: hsl(227, 24%, 33%);
1196
+ --color-graycool-800: hsl(233, 33%, 10%);
1197
+ --color-graycool-900: hsl(231, 32%, 8%);
1198
+ --color-graycool-950: hsl(231, 32%, 8%);
1199
+
1200
+ /* Lime */
1201
+ --color-lime-25: hsl(100, 60%, 98%);
1202
+ --color-lime-50: hsl(96, 91%, 96%);
1203
+ --color-lime-100: hsl(97, 87%, 91%);
1204
+ --color-lime-200: hsl(90, 89%, 82%);
1205
+ --color-lime-300: hsl(94, 87%, 71%);
1206
+ --color-lime-400: hsl(94, 73%, 56%);
1207
+ --color-lime-500: hsl(94, 75%, 44%);
1208
+ --color-lime-600: hsl(95, 85%, 35%);
1209
+ --color-lime-700: hsl(96, 78%, 27%);
1210
+ --color-lime-800: hsl(96, 69%, 23%);
1211
+ --color-lime-900: hsl(98, 61%, 20%);
1212
+ --color-lime-950: hsl(99, 61%, 10%);
1213
+
1214
+ /* Teal */
1215
+ --color-teal-25: hsl(165, 80%, 98%);
1216
+ --color-teal-50: hsl(162, 76%, 97%);
1217
+ --color-teal-100: hsl(165, 85%, 89%);
1218
+ --color-teal-200: hsl(166, 84%, 78%);
1219
+ --color-teal-300: hsl(169, 76%, 64%);
1220
+ --color-teal-400: hsl(170, 65%, 50%);
1221
+ --color-teal-500: hsl(171, 79%, 40%);
1222
+ --color-teal-600: hsl(173, 83%, 32%);
1223
+ --color-teal-700: hsl(173, 76%, 26%);
1224
+ --color-teal-800: hsl(174, 68%, 22%);
1225
+ --color-teal-900: hsl(174, 61%, 19%);
1226
+ --color-teal-950: hsl(174, 61%, 10%);
1227
+
1228
+ /* Blue */
1229
+ --color-blue-25: hsl(210, 100%, 98%);
1230
+ --color-blue-50: hsl(206, 100%, 97%);
1231
+ --color-blue-100: hsl(209, 100%, 91%);
1232
+ --color-blue-200: hsl(206, 100%, 85%);
1233
+ --color-blue-300: hsl(206, 100%, 76%);
1234
+ --color-blue-400: hsl(207, 98%, 66%);
1235
+ --color-blue-500: hsl(211, 95%, 58%);
1236
+ --color-blue-600: hsl(215, 87%, 51%);
1237
+ --color-blue-700: hsl(218, 80%, 46%);
1238
+ --color-blue-800: hsl(220, 75%, 38%);
1239
+ --color-blue-900: hsl(218, 68%, 31%);
1240
+ --color-blue-950: hsl(218, 69%, 20%);
1241
+
1242
+ /* Indigo */
1243
+ --color-indigo-25: hsl(222, 100%, 98%);
1244
+ --color-indigo-50: hsl(219, 100%, 97%);
1245
+ --color-indigo-100: hsl(221, 100%, 94%);
1246
+ --color-indigo-200: hsl(223, 96%, 89%);
1247
+ --color-indigo-300: hsl(224, 96%, 82%);
1248
+ --color-indigo-400: hsl(228, 91%, 74%);
1249
+ --color-indigo-500: hsl(233, 86%, 67%);
1250
+ --color-indigo-600: hsl(237, 77%, 59%);
1251
+ --color-indigo-700: hsl(239, 60%, 51%);
1252
+ --color-indigo-800: hsl(238, 57%, 41%);
1253
+ --color-indigo-900: hsl(236, 49%, 34%);
1254
+ --color-indigo-950: hsl(236, 49%, 24%);
1255
+
1256
+ /* Purple */
1257
+ --color-purple-25: hsl(240, 100%, 99%);
1258
+ --color-purple-50: hsl(245, 100%, 98%);
1259
+ --color-purple-100: hsl(246, 91%, 95%);
1260
+ --color-purple-200: hsl(244, 95%, 92%);
1261
+ --color-purple-300: hsl(247, 97%, 85%);
1262
+ --color-purple-400: hsl(253, 93%, 76%);
1263
+ --color-purple-500: hsl(257, 92%, 66%);
1264
+ --color-purple-600: hsl(265, 85%, 58%);
1265
+ --color-purple-700: hsl(265, 72%, 50%);
1266
+ --color-purple-800: hsl(265, 71%, 42%);
1267
+ --color-purple-900: hsl(265, 69%, 35%);
1268
+ --color-purple-950: hsl(257, 70%, 22%);
1269
+
1270
+ /* Purple Lavender */
1271
+ --color-plavender-25: hsl(240, 100%, 99%);
1272
+ --color-plavender-50: hsl(245, 100%, 98%);
1273
+ --color-plavender-100: hsl(246, 91%, 95%);
1274
+ --color-plavender-200: hsl(244, 95%, 92%);
1275
+ --color-plavender-300: hsl(247, 97%, 85%);
1276
+ --color-plavender-400: hsl(249, 93%, 76%);
1277
+ --color-plavender-500: hsl(252, 92%, 66%);
1278
+ --color-plavender-600: hsl(256, 85%, 58%);
1279
+ --color-plavender-700: hsl(257, 72%, 50%);
1280
+ --color-plavender-800: hsl(257, 71%, 42%);
1281
+ --color-plavender-900: hsl(257, 69%, 35%);
1282
+ --color-plavender-950: hsl(257, 70%, 22%);
1283
+
1284
+ /* Pink */
1285
+ --color-pink-25: hsl(323, 80%, 98%);
1286
+ --color-pink-50: hsl(327, 73%, 97%);
1287
+ --color-pink-100: hsl(326, 78%, 93%);
1288
+ --color-pink-200: hsl(326, 80%, 88%);
1289
+ --color-pink-300: hsl(327, 82%, 80%);
1290
+ --color-pink-400: hsl(330, 80%, 72%);
1291
+ --color-pink-500: hsl(331, 71%, 59%);
1292
+ --color-pink-600: hsl(331, 71%, 46%);
1293
+ --color-pink-700: hsl(331, 71%, 42%);
1294
+ --color-pink-800: hsl(331, 71%, 37%);
1295
+ --color-pink-900: hsl(331, 72%, 25%);
1296
+ --color-pink-950: hsl(328, 71%, 18%);
1297
+
1298
+ /* Guava (rose) */
1299
+ --color-guava-25: hsl(7, 60%, 97%);
1300
+ --color-guava-50: hsl(9, 62%, 96%);
1301
+ --color-guava-100: hsl(2, 57%, 91%);
1302
+ --color-guava-200: hsl(1, 58%, 85%);
1303
+ --color-guava-300: hsl(356, 59%, 79%);
1304
+ --color-guava-400: hsl(357, 61%, 72%);
1305
+ --color-guava-500: hsl(356, 67%, 66%);
1306
+ --color-guava-600: hsl(353, 58%, 58%);
1307
+ --color-guava-700: hsl(353, 52%, 51%);
1308
+ --color-guava-800: hsl(350, 58%, 41%);
1309
+ --color-guava-900: hsl(350, 56%, 28%);
1310
+
1311
+ /* Orange */
1312
+ --color-orange-25: hsl(33, 82%, 98%);
1313
+ --color-orange-50: hsl(30, 89%, 96%);
1314
+ --color-orange-100: hsl(30, 90%, 92%);
1315
+ --color-orange-200: hsl(36, 86%, 83%);
1316
+ --color-orange-300: hsl(27, 89%, 72%);
1317
+ --color-orange-400: hsl(23, 88%, 61%);
1318
+ --color-orange-500: hsl(21, 87%, 53%);
1319
+ --color-orange-600: hsl(17, 82%, 48%);
1320
+ --color-orange-700: hsl(13, 80%, 40%);
1321
+ --color-orange-800: hsl(11, 71%, 34%);
1322
+ --color-orange-900: hsl(11, 68%, 28%);
1323
+ --color-orange-950: hsl(7, 79%, 19%);
1324
+
1325
+ /* Yellow */
1326
+ --color-yellow-25: hsl(56, 88%, 97%);
1327
+ --color-yellow-50: hsl(52, 92%, 95%);
1328
+ --color-yellow-100: hsl(53, 97%, 88%);
1329
+ --color-yellow-200: hsl(53, 98%, 77%);
1330
+ --color-yellow-300: hsl(55, 99%, 67%);
1331
+ --color-yellow-400: hsl(48, 97%, 72%);
1332
+ --color-yellow-500: hsl(45, 93%, 47%);
1333
+ --color-yellow-600: hsl(39, 96%, 40%);
1334
+ --color-yellow-700: hsl(33, 92%, 33%);
1335
+ --color-yellow-800: hsl(30, 81%, 29%);
1336
+ --color-yellow-900: hsl(26, 73%, 26%);
1337
+ --color-yellow-950: hsl(26, 73%, 19%);
1338
+ }
1339
+
1340
+ ================
1341
+ File: src/tokens/bellhop-shadows.css
1342
+ ================
1343
+ :root {
1344
+ /* Shadow colors derived from neutral color scale */
1345
+ --shadow-color-base: var(
1346
+ --color-neutral-600
1347
+ ); /* #4A5578 - base shadow color */
1348
+ --shadow-color-06: color-mix(
1349
+ in srgb,
1350
+ var(--shadow-color-base) 6%,
1351
+ transparent
1352
+ ); /* 0.06 opacity */
1353
+ --shadow-color-10: color-mix(
1354
+ in srgb,
1355
+ var(--shadow-color-base) 10%,
1356
+ transparent
1357
+ ); /* 0.1 opacity */
1358
+ --shadow-color-14: color-mix(
1359
+ in srgb,
1360
+ var(--shadow-color-base) 14%,
1361
+ transparent
1362
+ ); /* 0.14 opacity */
1363
+ --shadow-color-18: color-mix(
1364
+ in srgb,
1365
+ var(--shadow-color-base) 18%,
1366
+ transparent
1367
+ ); /* 0.18 opacity */
1368
+
1369
+ /* Shadow scale - using consistent color variables */
1370
+ --shadow-xs: 0px 0px 2px 1px var(--shadow-color-06);
1371
+ --shadow-sm: 0px 3px 4px 0px var(--shadow-color-10),
1372
+ 0px 0px 1px 1px var(--shadow-color-10);
1373
+ --shadow-md: 0px 4px 8px 0px var(--shadow-color-10),
1374
+ 0px 0px 4px 0px var(--shadow-color-10);
1375
+ --shadow-lg: 0px 12px 16px -2px var(--shadow-color-10),
1376
+ 0px 0px 1px 1px var(--shadow-color-10);
1377
+ --shadow-xl: 0px 20px 24px -4px var(--shadow-color-10),
1378
+ 0px 0px 1px 1px var(--shadow-color-10);
1379
+ --shadow-2xl: 0px 24px 48px -12px var(--shadow-color-18),
1380
+ 0px 0px 1px 1px var(--shadow-color-10);
1381
+ --shadow-3xl: 0px 0px 1px 1px var(--shadow-color-10),
1382
+ 0px 32px 64px -12px var(--shadow-color-14);
1383
+
1384
+ /* Semantic shadows - use these in UI components */
1385
+ --shadow-none: none;
1386
+ --shadow-subtle: var(
1387
+ --shadow-xs
1388
+ ); /* Very subtle shadow for minimal elevation */
1389
+ --shadow-card: var(--shadow-sm); /* Cards and panels */
1390
+ --shadow-dropdown: var(--shadow-md); /* Dropdowns and small overlays */
1391
+ --shadow-modal: var(--shadow-lg); /* Modals and dialogs */
1392
+ --shadow-popover: var(--shadow-xl); /* Popovers and tooltips */
1393
+ --shadow-drawer: var(--shadow-2xl); /* Side drawers and large overlays */
1394
+ --shadow-floating: var(
1395
+ --shadow-3xl
1396
+ ); /* Floating action buttons and high elevation */
1397
+ }
1398
+
1399
+ ================
1400
+ File: src/tokens/bellhop-spacing.css
1401
+ ================
1402
+ :root {
1403
+ /* PRIMITIVES — one unit = 0.25rem (4px) */
1404
+ --sp-0: 0rem; /* 0px */
1405
+ --sp-0-5: 0.125rem; /* 2px */
1406
+ --sp-1: 0.25rem; /* 4px */
1407
+ --sp-1-5: 0.375rem; /* 6px */
1408
+ --sp-2: 0.5rem; /* 8px */
1409
+ --sp-3: 0.75rem; /* 12px */
1410
+ --sp-4: 1rem; /* 16px */
1411
+ --sp-5: 1.25rem; /* 20px */
1412
+ --sp-6: 1.5rem; /* 24px */
1413
+ --sp-8: 2rem; /* 32px */
1414
+ --sp-10: 2.5rem; /* 40px */
1415
+ --sp-12: 3rem; /* 48px */
1416
+ --sp-16: 4rem; /* 64px */
1417
+ --sp-20: 5rem; /* 80px */
1418
+ --sp-24: 6rem; /* 96px */
1419
+ --sp-32: 8rem; /* 128px */
1420
+ --sp-40: 10rem; /* 160px */
1421
+ --sp-48: 12rem; /* 192px */
1422
+ --sp-56: 14rem; /* 224px */
1423
+ --sp-64: 16rem; /* 256px */
1424
+ --sp-80: 20rem; /* 320px */
1425
+ --sp-96: 24rem; /* 384px */
1426
+ --sp-120: 30rem; /* 480px */
1427
+ --sp-140: 35rem; /* 560px */
1428
+ --sp-160: 40rem; /* 640px */
1429
+ --sp-180: 45rem; /* 720px */
1430
+ --sp-192: 48rem; /* 768px */
1431
+ --sp-256: 64rem; /* 1024px */
1432
+ --sp-320: 80rem; /* 1280px */
1433
+ --sp-360: 90rem; /* 1440px */
1434
+ --sp-400: 100rem; /* 1600px */
1435
+ --sp-480: 120rem; /* 1920px */
1436
+
1437
+ /* SEMANTIC SPACING — use these in UI; they reference primitives */
1438
+ --spacing-none: var(--sp-0); /* 0rem */
1439
+ --spacing-xxs: var(--sp-0-5); /* 0.125rem */
1440
+ --spacing-xs: var(--sp-1); /* 0.25rem */
1441
+ --spacing-sm: var(--sp-1-5); /* 0.375rem */
1442
+ --spacing-md: var(--sp-2); /* 0.5rem */
1443
+ --spacing-lg: var(--sp-3); /* 0.75rem */
1444
+ --spacing-xl: var(--sp-4); /* 1rem */
1445
+ --spacing-2xl: var(--sp-5); /* 1.25rem */
1446
+ --spacing-3xl: var(--sp-6); /* 1.5rem */
1447
+ --spacing-4xl: var(--sp-8); /* 2rem */
1448
+ --spacing-5xl: var(--sp-10); /* 2.5rem */
1449
+ --spacing-6xl: var(--sp-12); /* 3rem */
1450
+ --spacing-7xl: var(--sp-16); /* 4rem */
1451
+ --spacing-8xl: var(--sp-20); /* 5rem */
1452
+ --spacing-9xl: var(--sp-24); /* 6rem */
1453
+ --spacing-10xl: var(--sp-32); /* 8rem */
1454
+ --spacing-11xl: var(--sp-40); /* 10rem */
1455
+
1456
+ /* BUTTON PADDINGS — consistent padding sizes for button components */
1457
+ --btn-padding-sm: var(--spacing-sm); /* 0.375rem / 6px */
1458
+ --btn-padding-md: var(--spacing-md); /* 0.5rem / 8px */
1459
+ --btn-padding-lg: var(--spacing-lg); /* 0.75rem / 12px */
1460
+ --btn-padding-xl: var(--spacing-xl); /* 1rem / 16px */
1461
+
1462
+ /* ICON COMPENSATION — complete padding values for components with icons */
1463
+ --icon-compensation-xs-btn: calc(var(--spacing-lg) - var(--spacing-xs)); /* 12px - 4px = 8px - for xs buttons */
1464
+ --icon-compensation-sm-btn: calc(var(--spacing-xl) - var(--spacing-xs)); /* 16px - 4px = 12px - for sm buttons */
1465
+ --icon-compensation-md-btn: calc(var(--spacing-xl) - var(--spacing-xs)); /* 16px - 4px = 12px - for md buttons */
1466
+ --icon-compensation-lg-btn: calc(var(--spacing-xl) - var(--spacing-xs)); /* 16px - 4px = 12px - for lg buttons */
1467
+ }
1468
+
1469
+ ================
1470
+ File: src/tokens/bellhop-styles.css
1471
+ ================
1472
+ /* ==========================================================================
1473
+ BELLHOPOS ANGULAR LIBRARY STYLES
1474
+ Main entry point for all Bellhop design system styles
1475
+ ========================================================================== */
1476
+
1477
+ /* Import Google Fonts - Inter and Material Symbols */
1478
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap');
1479
+ @import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200');
1480
+
1481
+ /* Import all Bellhop design system styles */
1482
+ @import url('./bellhop-primary-colors.css');
1483
+ @import url('./bellhop-secondary-colors.css');
1484
+ @import url('./bellhop-spacing.css');
1485
+ @import url('./bellhop-radius.css');
1486
+ @import url('./bellhop-shadows.css');
1487
+ @import url('./bellhop-typography.css');
1488
+ @import url('./bellhop-icons.css');
1489
+ @import url('./bellhop-layout.css');
1490
+
1491
+ /* ==========================================================================
1492
+ GLOBAL RESETS AND DEFAULTS
1493
+ ========================================================================== */
1494
+
1495
+ /* Reset the outline for all focusable elements when a mouse is used. */
1496
+ *:focus:not(:focus-visible) {
1497
+ outline: none;
1498
+ }
1499
+
1500
+ /* Apply a custom outline that will only appear during keyboard navigation. */
1501
+ *:focus-visible {
1502
+ outline: 2px solid var(--color-brand-500);
1503
+ outline-offset: 2px;
1504
+ }
1505
+
1506
+ /* Ensure focus is visible on interactive elements */
1507
+ button:focus-visible,
1508
+ input:focus-visible,
1509
+ select:focus-visible,
1510
+ textarea:focus-visible,
1511
+ a:focus-visible,
1512
+ [tabindex]:focus-visible {
1513
+ outline: 2px solid var(--color-brand-500);
1514
+ outline-offset: 2px;
1515
+ }
1516
+
1517
+ /* ==========================================================================
1518
+ UTILITY CLASSES
1519
+ ========================================================================== */
1520
+
1521
+ /* Prevent text selection */
1522
+ .no-select {
1523
+ user-select: none;
1524
+ -webkit-user-select: none;
1525
+ -moz-user-select: none;
1526
+ -ms-user-select: none;
1527
+ }
1528
+
1529
+ /* Screen reader only content */
1530
+ .sr-only {
1531
+ position: absolute;
1532
+ width: 1px;
1533
+ height: 1px;
1534
+ padding: 0;
1535
+ margin: -1px;
1536
+ overflow: hidden;
1537
+ clip: rect(0, 0, 0, 0);
1538
+ white-space: nowrap;
1539
+ border: 0;
1540
+ }
1541
+
1542
+ /* ==========================================================================
1543
+ CONTENT LAYOUT UTILITIES
1544
+ ========================================================================== */
1545
+
1546
+ /* Content Container - Main flex container for page navigation and content area */
1547
+ .bellhop-content-container {
1548
+ display: flex;
1549
+ flex: 1;
1550
+ overflow: hidden;
1551
+ background-color: var(--color-white);
1552
+ }
1553
+
1554
+ /* Content Area - Scrollable main content region */
1555
+ .bellhop-content-area {
1556
+ flex: 1;
1557
+ overflow-y: auto;
1558
+ overflow-x: hidden;
1559
+ background-color: var(--color-white);
1560
+ }
1561
+
1562
+ /* Content Wrapper - Inner content container with padding and max-width */
1563
+ .bellhop-content-wrapper {
1564
+ padding: var(--spacing-4xl);
1565
+ margin: 0 auto;
1566
+ font-family: var(--font-inter);
1567
+ }
1568
+
1569
+ /* Content Wrapper Variants */
1570
+ .bellhop-content-wrapper-sm {
1571
+ padding: var(--spacing-2xl);
1572
+ margin: 0 auto;
1573
+ font-family: var(--font-inter);
1574
+ }
1575
+
1576
+ .bellhop-content-wrapper-lg {
1577
+ padding: var(--spacing-5xl);
1578
+ margin: 0 auto;
1579
+ font-family: var(--font-inter);
1580
+ }
1581
+
1582
+ .bellhop-content-wrapper-full {
1583
+ padding: var(--spacing-4xl);
1584
+ max-width: none;
1585
+ margin: 0;
1586
+ font-family: var(--font-inter);
1587
+ }
1588
+
1589
+ /* Content Typography - Standard content headings and text */
1590
+ .bellhop-content-wrapper h1,
1591
+ .bellhop-content-wrapper-sm h1,
1592
+ .bellhop-content-wrapper-lg h1,
1593
+ .bellhop-content-wrapper-full h1 {
1594
+ font-size: var(--text-3xl-size);
1595
+ font-weight: var(--weight-bold);
1596
+ line-height: var(--text-3xl-line);
1597
+ color: var(--color-neutral-800);
1598
+ margin-bottom: var(--spacing-md);
1599
+ }
1600
+
1601
+ .bellhop-content-wrapper p,
1602
+ .bellhop-content-wrapper-sm p,
1603
+ .bellhop-content-wrapper-lg p,
1604
+ .bellhop-content-wrapper-full p {
1605
+ font-size: var(--text-md-size);
1606
+ font-weight: var(--weight-regular);
1607
+ line-height: var(--text-md-line);
1608
+ color: var(--color-neutral-600);
1609
+ margin-bottom: var(--spacing-2xl);
1610
+ }
1611
+
1612
+ /* Responsive adjustments for content wrappers */
1613
+ @media (max-width: 768px) {
1614
+ .bellhop-content-wrapper,
1615
+ .bellhop-content-wrapper-sm,
1616
+ .bellhop-content-wrapper-lg,
1617
+ .bellhop-content-wrapper-full {
1618
+ padding: var(--spacing-xl);
1619
+ }
1620
+
1621
+ .bellhop-content-wrapper h1,
1622
+ .bellhop-content-wrapper-sm h1,
1623
+ .bellhop-content-wrapper-lg h1,
1624
+ .bellhop-content-wrapper-full h1 {
1625
+ font-size: var(--text-2xl-size);
1626
+ line-height: var(--text-2xl-line);
1627
+ }
1628
+ }
1629
+
1630
+ @media (max-width: 480px) {
1631
+ .bellhop-content-wrapper,
1632
+ .bellhop-content-wrapper-sm,
1633
+ .bellhop-content-wrapper-lg,
1634
+ .bellhop-content-wrapper-full {
1635
+ padding: var(--spacing-md);
1636
+ }
1637
+
1638
+ .bellhop-content-wrapper h1,
1639
+ .bellhop-content-wrapper-sm h1,
1640
+ .bellhop-content-wrapper-lg h1,
1641
+ .bellhop-content-wrapper-full h1 {
1642
+ font-size: var(--text-xl-size);
1643
+ line-height: var(--text-xl-line);
1644
+ }
1645
+ }
1646
+
1647
+ ================
1648
+ File: src/tokens/bellhop-typography.css
1649
+ ================
1650
+ /* =========================
1651
+ IMPORT FONT
1652
+ ========================= */
1653
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
1654
+
1655
+ /* =========================
1656
+ TYPOGRAPHY TOKENS
1657
+ ========================= */
1658
+ :root {
1659
+ /* Families */
1660
+ --font-inter: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI',
1661
+ Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'Apple Color Emoji',
1662
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
1663
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
1664
+ 'Liberation Mono', 'Courier New', monospace;
1665
+
1666
+ /* Weights */
1667
+ --weight-regular: 400;
1668
+ --weight-medium: 500;
1669
+ --weight-semibold: 600;
1670
+ --weight-bold: 700;
1671
+
1672
+ /* Sizes (font-size) */
1673
+ /* Display Sizes */
1674
+ --display-xl-size: 2.625rem; /* 42px */
1675
+ --display-lg-size: 2.5rem; /* 40px */
1676
+ --display-md-size: 2.25rem; /* 36px */
1677
+ --display-sm-size: 1.875rem; /* 30px */
1678
+ --display-xs-size: 1.5rem; /* 24px */
1679
+ /* Text Sizes */
1680
+ --text-xl-size: 1.25rem; /* 20px */
1681
+ --text-lg-size: 1.125rem; /* 18px */
1682
+ --text-md-size: 1rem; /* 16px */
1683
+ --text-sm-size: 0.875rem; /* 14px */
1684
+ --text-xs-size: 0.75rem; /* 12px */
1685
+
1686
+ /* Line heights */
1687
+ --text-xl-line: 1.875rem; /* 30px */
1688
+ --text-lg-line: 1.75rem; /* 28px */
1689
+ --text-md-line: 1.5rem; /* 24px */
1690
+ --text-sm-line: 1.25rem; /* 20px */
1691
+ --text-xs-line: 1.125rem; /* 18px */
1692
+
1693
+ /* Numbers (data tables) — use tabular figures */
1694
+ --num-sm-size: var(--text-sm-size); /* 14px */
1695
+ --num-sm-line: var(--text-sm-line); /* 20px */
1696
+ --num-xs-size: var(--text-xs-size); /* 12px */
1697
+ --num-xs-line: var(--text-xs-line); /* 18px */
1698
+ }
1699
+
1700
+ /* =========================
1701
+ BASE / WEIGHT UTILITIES
1702
+ ========================= */
1703
+ .font-inter {
1704
+ font-family: var(--font-inter);
1705
+ }
1706
+ .font-mono {
1707
+ font-family: var(--font-mono);
1708
+ }
1709
+
1710
+ .weight-regular {
1711
+ font-weight: var(--weight-regular);
1712
+ }
1713
+ .weight-medium {
1714
+ font-weight: var(--weight-medium);
1715
+ }
1716
+ .weight-semibold {
1717
+ font-weight: var(--weight-semibold);
1718
+ }
1719
+ .weight-bold {
1720
+ font-weight: var(--weight-bold);
1721
+ }
1722
+
1723
+ /* =========================
1724
+ SIZE UTILITIES
1725
+ ========================= */
1726
+ .text-xl {
1727
+ font-size: var(--text-xl-size);
1728
+ line-height: var(--text-xl-line);
1729
+ }
1730
+ .text-lg {
1731
+ font-size: var(--text-lg-size);
1732
+ line-height: var(--text-lg-line);
1733
+ }
1734
+ .text-md {
1735
+ font-size: var(--text-md-size);
1736
+ line-height: var(--text-md-line);
1737
+ }
1738
+ .text-sm {
1739
+ font-size: var(--text-sm-size);
1740
+ line-height: var(--text-sm-line);
1741
+ }
1742
+ .text-xs {
1743
+ font-size: var(--text-xs-size);
1744
+ line-height: var(--text-xs-line);
1745
+ }
1746
+
1747
+ /* =========================
1748
+ NUMERIC (DATA TABLES)
1749
+ ========================= */
1750
+ .num-sm {
1751
+ font-size: var(--num-sm-size);
1752
+ line-height: var(--num-sm-line);
1753
+ font-variant-numeric: tabular-nums;
1754
+ font-family: var(--font-inter);
1755
+ }
1756
+ .num-xs {
1757
+ font-size: var(--num-xs-size);
1758
+ line-height: var(--num-xs-line);
1759
+ font-variant-numeric: tabular-nums;
1760
+ font-family: var(--font-mono);
1761
+ }
1762
+
1763
+ ================
1764
+ File: src/tokens/colors.json
1765
+ ================
1766
+ {
1767
+ "colors": {
1768
+ "base": {
1769
+ "white": {
1770
+ "value": "#ffffff"
1771
+ },
1772
+ "black": {
1773
+ "value": "#000000"
1774
+ },
1775
+ "transparent": {
1776
+ "value": "rgba(255, 255, 255, 0.0000)"
1777
+ }
1778
+ },
1779
+ "indigo": {
1780
+ "25": {
1781
+ "value": "#f5f8fe"
1782
+ },
1783
+ "50": {
1784
+ "value": "#f1f5fe"
1785
+ },
1786
+ "100": {
1787
+ "value": "#e1eafe"
1788
+ },
1789
+ "200": {
1790
+ "value": "#bacefc"
1791
+ },
1792
+ "300": {
1793
+ "value": "#8daafc"
1794
+ },
1795
+ "400": {
1796
+ "value": "#7498fb"
1797
+ },
1798
+ "500": {
1799
+ "value": "#5068dd"
1800
+ },
1801
+ "600": {
1802
+ "value": "#2642cf"
1803
+ },
1804
+ "700": {
1805
+ "value": "#1930a9"
1806
+ },
1807
+ "800": {
1808
+ "value": "#1b2192"
1809
+ },
1810
+ "900": {
1811
+ "value": "#161b79"
1812
+ },
1813
+ "950": {
1814
+ "value": "#141752"
1815
+ }
1816
+ },
1817
+ "gray": {
1818
+ "25": {
1819
+ "value": "#fcfcfd"
1820
+ },
1821
+ "50": {
1822
+ "value": "#f9f9fb"
1823
+ },
1824
+ "100": {
1825
+ "value": "#eff1f5"
1826
+ },
1827
+ "200": {
1828
+ "value": "#dcdfea"
1829
+ },
1830
+ "300": {
1831
+ "value": "#b9c0d4"
1832
+ },
1833
+ "400": {
1834
+ "value": "#7d89b0"
1835
+ },
1836
+ "500": {
1837
+ "value": "#5d6b98"
1838
+ },
1839
+ "600": {
1840
+ "value": "#4a5578"
1841
+ },
1842
+ "700": {
1843
+ "value": "#404968"
1844
+ },
1845
+ "800": {
1846
+ "value": "#30374f"
1847
+ },
1848
+ "900": {
1849
+ "value": "#111322"
1850
+ },
1851
+ "950": {
1852
+ "value": "#0e101b"
1853
+ }
1854
+ },
1855
+ "neutral": {
1856
+ "25": {
1857
+ "value": "{colors.gray.25}"
1858
+ },
1859
+ "50": {
1860
+ "value": "{colors.gray.50}"
1861
+ },
1862
+ "100": {
1863
+ "value": "{colors.gray.100}"
1864
+ },
1865
+ "200": {
1866
+ "value": "{colors.gray.200}"
1867
+ },
1868
+ "300": {
1869
+ "value": "{colors.gray.300}"
1870
+ },
1871
+ "400": {
1872
+ "value": "{colors.gray.400}"
1873
+ },
1874
+ "500": {
1875
+ "value": "{colors.gray.500}"
1876
+ },
1877
+ "600": {
1878
+ "value": "{colors.gray.600}"
1879
+ },
1880
+ "700": {
1881
+ "value": "{colors.gray.700}"
1882
+ },
1883
+ "800": {
1884
+ "value": "{colors.gray.800}"
1885
+ },
1886
+ "900": {
1887
+ "value": "{colors.gray.900}"
1888
+ },
1889
+ "950": {
1890
+ "value": "{colors.gray.950}"
1891
+ }
1892
+ },
1893
+ "brand": {
1894
+ "25": {
1895
+ "value": "{colors.indigo.25}"
1896
+ },
1897
+ "50": {
1898
+ "value": "{colors.indigo.50}"
1899
+ },
1900
+ "100": {
1901
+ "value": "{colors.indigo.100}"
1902
+ },
1903
+ "200": {
1904
+ "value": "{colors.indigo.200}"
1905
+ },
1906
+ "300": {
1907
+ "value": "{colors.indigo.300}"
1908
+ },
1909
+ "400": {
1910
+ "value": "{colors.indigo.400}"
1911
+ },
1912
+ "500": {
1913
+ "value": "{colors.indigo.500}"
1914
+ },
1915
+ "600": {
1916
+ "value": "{colors.indigo.600}"
1917
+ },
1918
+ "700": {
1919
+ "value": "{colors.indigo.700}"
1920
+ },
1921
+ "800": {
1922
+ "value": "{colors.indigo.800}"
1923
+ },
1924
+ "900": {
1925
+ "value": "{colors.indigo.900}"
1926
+ },
1927
+ "950": {
1928
+ "value": "{colors.indigo.950}"
1929
+ }
1930
+ },
1931
+ "accent": {
1932
+ "25": {
1933
+ "value": "{colors.guava.25}"
1934
+ },
1935
+ "50": {
1936
+ "value": "{colors.guava.50}"
1937
+ },
1938
+ "100": {
1939
+ "value": "{colors.guava.100}"
1940
+ },
1941
+ "200": {
1942
+ "value": "{colors.guava.200}"
1943
+ },
1944
+ "300": {
1945
+ "value": "{colors.guava.300}"
1946
+ },
1947
+ "400": {
1948
+ "value": "{colors.guava.400}"
1949
+ },
1950
+ "500": {
1951
+ "value": "{colors.guava.500}"
1952
+ },
1953
+ "600": {
1954
+ "value": "{colors.guava.600}"
1955
+ },
1956
+ "700": {
1957
+ "value": "{colors.guava.700}"
1958
+ },
1959
+ "800": {
1960
+ "value": "{colors.guava.800}"
1961
+ },
1962
+ "900": {
1963
+ "value": "{colors.guava.900}"
1964
+ },
1965
+ "950": {
1966
+ "value": "{colors.guava.950}"
1967
+ }
1968
+ },
1969
+ "error": {
1970
+ "25": {
1971
+ "value": "#fffbfa"
1972
+ },
1973
+ "50": {
1974
+ "value": "#feefeb"
1975
+ },
1976
+ "100": {
1977
+ "value": "#fce3e3"
1978
+ },
1979
+ "200": {
1980
+ "value": "#fbd0d0"
1981
+ },
1982
+ "300": {
1983
+ "value": "#f7abab"
1984
+ },
1985
+ "400": {
1986
+ "value": "#f87272"
1987
+ },
1988
+ "500": {
1989
+ "value": "#f05250"
1990
+ },
1991
+ "600": {
1992
+ "value": "#d6341f"
1993
+ },
1994
+ "700": {
1995
+ "value": "#bf2b18"
1996
+ },
1997
+ "800": {
1998
+ "value": "#992424"
1999
+ },
2000
+ "900": {
2001
+ "value": "#701e19"
2002
+ },
2003
+ "950": {
2004
+ "value": "#55160c"
2005
+ }
2006
+ },
2007
+ "warning": {
2008
+ "25": {
2009
+ "value": "#fffcf5"
2010
+ },
2011
+ "50": {
2012
+ "value": "#fffaeb"
2013
+ },
2014
+ "100": {
2015
+ "value": "#fef0c7"
2016
+ },
2017
+ "200": {
2018
+ "value": "#fedf89"
2019
+ },
2020
+ "300": {
2021
+ "value": "#fec84b"
2022
+ },
2023
+ "400": {
2024
+ "value": "#fdb022"
2025
+ },
2026
+ "500": {
2027
+ "value": "#f79009"
2028
+ },
2029
+ "600": {
2030
+ "value": "#dc6803"
2031
+ },
2032
+ "700": {
2033
+ "value": "#b54708"
2034
+ },
2035
+ "800": {
2036
+ "value": "#93370d"
2037
+ },
2038
+ "900": {
2039
+ "value": "#7a2e0e"
2040
+ },
2041
+ "950": {
2042
+ "value": "#4e1d09"
2043
+ }
2044
+ },
2045
+ "success": {
2046
+ "25": {
2047
+ "value": "#f6fef9"
2048
+ },
2049
+ "50": {
2050
+ "value": "#ecfdf3"
2051
+ },
2052
+ "100": {
2053
+ "value": "#dcfae6"
2054
+ },
2055
+ "200": {
2056
+ "value": "#abefc6"
2057
+ },
2058
+ "300": {
2059
+ "value": "#75e0a7"
2060
+ },
2061
+ "400": {
2062
+ "value": "#47cd89"
2063
+ },
2064
+ "500": {
2065
+ "value": "#17b26a"
2066
+ },
2067
+ "600": {
2068
+ "value": "#079455"
2069
+ },
2070
+ "700": {
2071
+ "value": "#067647"
2072
+ },
2073
+ "800": {
2074
+ "value": "#085d3a"
2075
+ },
2076
+ "900": {
2077
+ "value": "#074d31"
2078
+ },
2079
+ "950": {
2080
+ "value": "#053321"
2081
+ }
2082
+ },
2083
+ "guava": {
2084
+ "25": {
2085
+ "value": "{colors.error.25}"
2086
+ },
2087
+ "50": {
2088
+ "value": "{colors.error.50}"
2089
+ },
2090
+ "100": {
2091
+ "value": "{colors.rose.100}"
2092
+ },
2093
+ "200": {
2094
+ "value": "{colors.rose.200}"
2095
+ },
2096
+ "300": {
2097
+ "value": "{colors.rose.300}"
2098
+ },
2099
+ "400": {
2100
+ "value": "{colors.rose.400}"
2101
+ },
2102
+ "500": {
2103
+ "value": "{colors.rose.500}"
2104
+ },
2105
+ "600": {
2106
+ "value": "{colors.rose.600}"
2107
+ },
2108
+ "700": {
2109
+ "value": "{colors.rose.700}"
2110
+ },
2111
+ "800": {
2112
+ "value": "{colors.rose.800}"
2113
+ },
2114
+ "900": {
2115
+ "value": "{colors.rose.900}"
2116
+ },
2117
+ "950": {
2118
+ "value": "{colors.rose.950}"
2119
+ }
2120
+ },
2121
+ "lime": {
2122
+ "25": {
2123
+ "value": "#fafdf7"
2124
+ },
2125
+ "50": {
2126
+ "value": "#f5fbee"
2127
+ },
2128
+ "100": {
2129
+ "value": "#e6f4d7"
2130
+ },
2131
+ "200": {
2132
+ "value": "#ceeab0"
2133
+ },
2134
+ "300": {
2135
+ "value": "#acdc79"
2136
+ },
2137
+ "400": {
2138
+ "value": "#86c93e"
2139
+ },
2140
+ "500": {
2141
+ "value": "#669f2a"
2142
+ },
2143
+ "600": {
2144
+ "value": "#4f7a21"
2145
+ },
2146
+ "700": {
2147
+ "value": "#3f621a"
2148
+ },
2149
+ "800": {
2150
+ "value": "#335015"
2151
+ },
2152
+ "900": {
2153
+ "value": "#2b4212"
2154
+ },
2155
+ "950": {
2156
+ "value": "#1a280b"
2157
+ }
2158
+ },
2159
+ "teal": {
2160
+ "25": {
2161
+ "value": "#f6fefc"
2162
+ },
2163
+ "50": {
2164
+ "value": "#f0fdf9"
2165
+ },
2166
+ "100": {
2167
+ "value": "#ccfbef"
2168
+ },
2169
+ "200": {
2170
+ "value": "#99f6e0"
2171
+ },
2172
+ "300": {
2173
+ "value": "#5fe9d0"
2174
+ },
2175
+ "400": {
2176
+ "value": "#2ed3b7"
2177
+ },
2178
+ "500": {
2179
+ "value": "#15b79e"
2180
+ },
2181
+ "600": {
2182
+ "value": "#0e9384"
2183
+ },
2184
+ "700": {
2185
+ "value": "#107569"
2186
+ },
2187
+ "800": {
2188
+ "value": "#125d56"
2189
+ },
2190
+ "900": {
2191
+ "value": "#134e48"
2192
+ },
2193
+ "950": {
2194
+ "value": "#0a2926"
2195
+ }
2196
+ },
2197
+ "blue": {
2198
+ "25": {
2199
+ "value": "#f5faff"
2200
+ },
2201
+ "50": {
2202
+ "value": "#eff8ff"
2203
+ },
2204
+ "100": {
2205
+ "value": "#d1e9ff"
2206
+ },
2207
+ "200": {
2208
+ "value": "#b2ddff"
2209
+ },
2210
+ "300": {
2211
+ "value": "#84caff"
2212
+ },
2213
+ "400": {
2214
+ "value": "#53b1fd"
2215
+ },
2216
+ "500": {
2217
+ "value": "#2e90fa"
2218
+ },
2219
+ "600": {
2220
+ "value": "#1570ef"
2221
+ },
2222
+ "700": {
2223
+ "value": "#175cd3"
2224
+ },
2225
+ "800": {
2226
+ "value": "#1849a9"
2227
+ },
2228
+ "900": {
2229
+ "value": "#194185"
2230
+ },
2231
+ "950": {
2232
+ "value": "#102a56"
2233
+ }
2234
+ },
2235
+ "violet": {
2236
+ "25": {
2237
+ "value": "#fbfaff"
2238
+ },
2239
+ "50": {
2240
+ "value": "#f5f3ff"
2241
+ },
2242
+ "100": {
2243
+ "value": "#ece9fe"
2244
+ },
2245
+ "200": {
2246
+ "value": "#ddd6fe"
2247
+ },
2248
+ "300": {
2249
+ "value": "#c3b5fd"
2250
+ },
2251
+ "400": {
2252
+ "value": "#a48afb"
2253
+ },
2254
+ "500": {
2255
+ "value": "#875bf7"
2256
+ },
2257
+ "600": {
2258
+ "value": "#7839ee"
2259
+ },
2260
+ "700": {
2261
+ "value": "#6927da"
2262
+ },
2263
+ "800": {
2264
+ "value": "#5720b7"
2265
+ },
2266
+ "900": {
2267
+ "value": "#491c96"
2268
+ },
2269
+ "950": {
2270
+ "value": "#2e125e"
2271
+ }
2272
+ },
2273
+ "purple": {
2274
+ "25": {
2275
+ "value": "#fafaff"
2276
+ },
2277
+ "50": {
2278
+ "value": "#f4f3ff"
2279
+ },
2280
+ "100": {
2281
+ "value": "#ebe9fe"
2282
+ },
2283
+ "200": {
2284
+ "value": "#d9d6fe"
2285
+ },
2286
+ "300": {
2287
+ "value": "#bdb4fe"
2288
+ },
2289
+ "400": {
2290
+ "value": "#a28afb"
2291
+ },
2292
+ "500": {
2293
+ "value": "#875af8"
2294
+ },
2295
+ "600": {
2296
+ "value": "#8438ef"
2297
+ },
2298
+ "700": {
2299
+ "value": "#7125dc"
2300
+ },
2301
+ "800": {
2302
+ "value": "#5f1fb8"
2303
+ },
2304
+ "900": {
2305
+ "value": "#4f1c96"
2306
+ },
2307
+ "950": {
2308
+ "value": "#32115f"
2309
+ }
2310
+ },
2311
+ "lavender": {
2312
+ "25": {
2313
+ "value": "#f8f2f8"
2314
+ },
2315
+ "50": {
2316
+ "value": "#f4ebf4"
2317
+ },
2318
+ "100": {
2319
+ "value": "#ebdbeb"
2320
+ },
2321
+ "200": {
2322
+ "value": "#dbbddb"
2323
+ },
2324
+ "300": {
2325
+ "value": "#cfa5ce"
2326
+ },
2327
+ "400": {
2328
+ "value": "#bb81ba"
2329
+ },
2330
+ "500": {
2331
+ "value": "#a05da8"
2332
+ },
2333
+ "600": {
2334
+ "value": "#8e4b9b"
2335
+ },
2336
+ "700": {
2337
+ "value": "#7d368c"
2338
+ },
2339
+ "800": {
2340
+ "value": "#6c3177"
2341
+ },
2342
+ "900": {
2343
+ "value": "#56255f"
2344
+ },
2345
+ "950": {
2346
+ "value": "#3d1745"
2347
+ }
2348
+ },
2349
+ "pink": {
2350
+ "25": {
2351
+ "value": "#fef6fb"
2352
+ },
2353
+ "50": {
2354
+ "value": "#fdf2f8"
2355
+ },
2356
+ "100": {
2357
+ "value": "#fbdfef"
2358
+ },
2359
+ "200": {
2360
+ "value": "#f9c8e4"
2361
+ },
2362
+ "300": {
2363
+ "value": "#f6a2d0"
2364
+ },
2365
+ "400": {
2366
+ "value": "#f17eb8"
2367
+ },
2368
+ "500": {
2369
+ "value": "#e14c94"
2370
+ },
2371
+ "600": {
2372
+ "value": "#c92273"
2373
+ },
2374
+ "700": {
2375
+ "value": "#b71f69"
2376
+ },
2377
+ "800": {
2378
+ "value": "#a11b5c"
2379
+ },
2380
+ "900": {
2381
+ "value": "#6d123e"
2382
+ },
2383
+ "950": {
2384
+ "value": "#4b0c2a"
2385
+ }
2386
+ },
2387
+ "orange": {
2388
+ "25": {
2389
+ "value": "#fefaf5"
2390
+ },
2391
+ "50": {
2392
+ "value": "#fef6ee"
2393
+ },
2394
+ "100": {
2395
+ "value": "#fdead7"
2396
+ },
2397
+ "200": {
2398
+ "value": "#f9dbaf"
2399
+ },
2400
+ "300": {
2401
+ "value": "#f7b27a"
2402
+ },
2403
+ "400": {
2404
+ "value": "#f38744"
2405
+ },
2406
+ "500": {
2407
+ "value": "#ef6820"
2408
+ },
2409
+ "600": {
2410
+ "value": "#e04f16"
2411
+ },
2412
+ "700": {
2413
+ "value": "#b93815"
2414
+ },
2415
+ "800": {
2416
+ "value": "#932f19"
2417
+ },
2418
+ "900": {
2419
+ "value": "#772917"
2420
+ },
2421
+ "950": {
2422
+ "value": "#511c10"
2423
+ }
2424
+ },
2425
+ "yellow": {
2426
+ "25": {
2427
+ "value": "#fefdf0"
2428
+ },
2429
+ "50": {
2430
+ "value": "#fefbe8"
2431
+ },
2432
+ "100": {
2433
+ "value": "#fef7c3"
2434
+ },
2435
+ "200": {
2436
+ "value": "#feee95"
2437
+ },
2438
+ "300": {
2439
+ "value": "#fde272"
2440
+ },
2441
+ "400": {
2442
+ "value": "#fac515"
2443
+ },
2444
+ "500": {
2445
+ "value": "#eaaa08"
2446
+ },
2447
+ "600": {
2448
+ "value": "#ca8504"
2449
+ },
2450
+ "700": {
2451
+ "value": "#a15c07"
2452
+ },
2453
+ "800": {
2454
+ "value": "#854a0e"
2455
+ },
2456
+ "900": {
2457
+ "value": "#713b12"
2458
+ },
2459
+ "950": {
2460
+ "value": "#542c0d"
2461
+ }
2462
+ },
2463
+ "rose": {
2464
+ "25": {
2465
+ "value": "#fcf4f3"
2466
+ },
2467
+ "50": {
2468
+ "value": "#fbf0ee"
2469
+ },
2470
+ "100": {
2471
+ "value": "#f5dcdb"
2472
+ },
2473
+ "200": {
2474
+ "value": "#efc3c2"
2475
+ },
2476
+ "300": {
2477
+ "value": "#e9aaae"
2478
+ },
2479
+ "400": {
2480
+ "value": "#e38c91"
2481
+ },
2482
+ "500": {
2483
+ "value": "#e26e76"
2484
+ },
2485
+ "600": {
2486
+ "value": "#d25664"
2487
+ },
2488
+ "700": {
2489
+ "value": "#c34151"
2490
+ },
2491
+ "800": {
2492
+ "value": "#a52c40"
2493
+ },
2494
+ "900": {
2495
+ "value": "#6f1f2d"
2496
+ },
2497
+ "950": {
2498
+ "value": "#500c17"
2499
+ }
2500
+ }
2501
+ }
2502
+ }
2503
+
2504
+ ================
2505
+ File: src/tokens/index.css
2506
+ ================
2507
+ /* ==========================================================================
2508
+ BELLHOP DESIGN TOKENS
2509
+ Shared design system tokens for all frameworks
2510
+ ========================================================================== */
2511
+
2512
+ /* Import all design token files */
2513
+ @import './bellhop-primary-colors.css';
2514
+ @import './bellhop-secondary-colors.css';
2515
+ @import './bellhop-typography.css';
2516
+ @import './bellhop-spacing.css';
2517
+ @import './bellhop-radius.css';
2518
+ @import './bellhop-shadows.css';
2519
+ @import './bellhop-animations.css';
2520
+ @import './bellhop-layout.css';
2521
+ @import './bellhop-icons.css';
2522
+ @import './bellhop-global.css';
2523
+ @import './bellhop-styles.css';
2524
+
2525
+ ================
2526
+ File: src/index.css
2527
+ ================
2528
+ /* Bellhop Shared Styles - Design Tokens & Utilities */
2529
+
2530
+ /* Import Google Fonts */
2531
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2532
+
2533
+ /* Base normalization - import first */
2534
+ @import './base/normalize.css';
2535
+
2536
+ /* Design Tokens - Foundation */
2537
+ @import './tokens/index.css';
2538
+
2539
+ /*
2540
+ * Note: Component styles are no longer included here.
2541
+ * All component styles are bundled with their respective Stencil components
2542
+ * in the @actabldesign/bellhop-core package using Shadow DOM encapsulation.
2543
+ *
2544
+ * This package now provides only:
2545
+ * - Design tokens (colors, typography, spacing, shadows, radius, etc.)
2546
+ * - Base normalization
2547
+ * - Layout utilities
2548
+ * - Animations
2549
+ */
2550
+
2551
+ ================
2552
+ File: package.json
2553
+ ================
2554
+ {
2555
+ "name": "@actabldesign/bellhop-styles",
2556
+ "version": "0.0.4",
2557
+ "description": "Shared CSS styles for Bellhop design system",
2558
+ "main": "index.css",
2559
+ "module": "index.css",
2560
+ "types": "index.d.ts",
2561
+ "files": [
2562
+ "**/*"
2563
+ ],
2564
+ "scripts": {
2565
+ "build": "rollup -c",
2566
+ "dev": "rollup -c -w",
2567
+ "clean": "rimraf dist"
2568
+ },
2569
+ "keywords": [
2570
+ "design-system",
2571
+ "css",
2572
+ "styles",
2573
+ "bellhop",
2574
+ "actabl"
2575
+ ],
2576
+ "author": "Actabl Design Team",
2577
+ "license": "MIT",
2578
+ "devDependencies": {
2579
+ "rollup": "^4.0.0",
2580
+ "rollup-plugin-postcss": "^4.0.2",
2581
+ "postcss-import": "^16.0.0",
2582
+ "postcss": "^8.4.5",
2583
+ "rimraf": "^5.0.5"
2584
+ },
2585
+ "publishConfig": {
2586
+ "registry": "https://registry.npmjs.org/",
2587
+ "access": "public"
2588
+ }
2589
+ }
2590
+
2591
+ ================
2592
+ File: project.json
2593
+ ================
2594
+ {
2595
+ "name": "bellhop-styles",
2596
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
2597
+ "projectType": "library",
2598
+ "sourceRoot": "packages/bellhop-styles/src",
2599
+ "targets": {
2600
+ "build": {
2601
+ "executor": "nx:run-commands",
2602
+ "outputs": ["{workspaceRoot}/dist/bellhop-styles"],
2603
+ "options": {
2604
+ "commands": [
2605
+ "mkdir -p dist/bellhop-styles",
2606
+ "cd packages/bellhop-styles && npm run build",
2607
+ "cp packages/bellhop-styles/dist/* dist/bellhop-styles/",
2608
+ "cp packages/bellhop-styles/package.json dist/bellhop-styles/",
2609
+ "cp packages/bellhop-styles/README.md dist/bellhop-styles/ || true"
2610
+ ],
2611
+ "parallel": false
2612
+ }
2613
+ },
2614
+ "lint": {
2615
+ "executor": "nx:run-commands",
2616
+ "options": {
2617
+ "command": "echo 'No linting configured for styles library'"
2618
+ }
2619
+ }
2620
+ },
2621
+ "tags": ["type:styles", "framework:agnostic"]
2622
+ }
2623
+
2624
+ ================
2625
+ File: README.md
2626
+ ================
2627
+ # Bellhop Styles
2628
+
2629
+ Shared CSS styles and design tokens for the Bellhop design system. This package provides framework-agnostic styles that can be used with Angular, React, or any other framework.
2630
+
2631
+ ## Installation
2632
+
2633
+ ```bash
2634
+ npm install @actabldesign/bellhop-styles
2635
+ ```
2636
+
2637
+ ## Usage
2638
+
2639
+ ### Import All Styles
2640
+
2641
+ Import the complete style package in your main CSS or TypeScript/JavaScript file:
2642
+
2643
+ ```css
2644
+ @import '@actabldesign/bellhop-styles';
2645
+ ```
2646
+
2647
+ or in TypeScript/JavaScript:
2648
+
2649
+ ```tsx
2650
+ import '@actabldesign/bellhop-styles';
2651
+ ```
2652
+
2653
+ ### Import Individual Style Modules
2654
+
2655
+ For more granular control, you can import individual style modules:
2656
+
2657
+ ```css
2658
+ @import '@actabldesign/bellhop-styles/base/colors.css';
2659
+ @import '@actabldesign/bellhop-styles/base/typography.css';
2660
+ @import '@actabldesign/bellhop-styles/base/spacing.css';
2661
+ @import '@actabldesign/bellhop-styles/base/shadows.css';
2662
+ @import '@actabldesign/bellhop-styles/base/radius.css';
2663
+ ```
2664
+
2665
+ ### Using Design Tokens
2666
+
2667
+ All design tokens are available as CSS custom properties:
2668
+
2669
+ ```css
2670
+ .my-component {
2671
+ /* Colors */
2672
+ background-color: var(--color-primary-500);
2673
+ color: var(--color-neutral-800);
2674
+
2675
+ /* Spacing */
2676
+ padding: var(--spacing-4);
2677
+ margin: var(--spacing-2);
2678
+
2679
+ /* Typography */
2680
+ font-family: var(--font-inter);
2681
+ font-size: var(--text-sm-size);
2682
+ line-height: var(--text-sm-line);
2683
+
2684
+ /* Shadows */
2685
+ box-shadow: var(--shadow-md);
2686
+
2687
+ /* Border Radius */
2688
+ border-radius: var(--radius-md);
2689
+ }
2690
+ ```
2691
+
2692
+ ## Design Tokens Reference
2693
+
2694
+ ### Colors
2695
+
2696
+ #### Primary Colors
2697
+ - `--color-primary-50` to `--color-primary-900`
2698
+ - `--color-primary-500` (default brand color)
2699
+
2700
+ #### Neutral Colors
2701
+ - `--color-neutral-50` to `--color-neutral-900`
2702
+ - `--color-white`, `--color-black`
2703
+
2704
+ #### Semantic Colors
2705
+ - **Success**: `--color-success-50` to `--color-success-900`
2706
+ - **Warning**: `--color-warning-50` to `--color-warning-900`
2707
+ - **Error**: `--color-error-50` to `--color-error-900`
2708
+ - **Info**: `--color-info-50` to `--color-info-900`
2709
+
2710
+ ### Typography
2711
+
2712
+ #### Font Families
2713
+ - `--font-inter`: Primary font family
2714
+
2715
+ #### Font Sizes
2716
+ - `--text-xs-size` (0.75rem)
2717
+ - `--text-sm-size` (0.875rem)
2718
+ - `--text-base-size` (1rem)
2719
+ - `--text-lg-size` (1.125rem)
2720
+ - `--text-xl-size` (1.25rem)
2721
+ - And more...
2722
+
2723
+ #### Font Weights
2724
+ - `--font-light` (300)
2725
+ - `--font-normal` (400)
2726
+ - `--font-medium` (500)
2727
+ - `--font-semibold` (600)
2728
+ - `--font-bold` (700)
2729
+
2730
+ ### Spacing
2731
+
2732
+ Spacing scale from 0.5 to 96 (in 0.25rem increments):
2733
+ - `--spacing-0-5` (0.125rem)
2734
+ - `--spacing-1` (0.25rem)
2735
+ - `--spacing-2` (0.5rem)
2736
+ - `--spacing-4` (1rem)
2737
+ - `--spacing-8` (2rem)
2738
+ - And more...
2739
+
2740
+ ### Shadows
2741
+
2742
+ - `--shadow-xs`: Extra small shadow
2743
+ - `--shadow-sm`: Small shadow
2744
+ - `--shadow-md`: Medium shadow
2745
+ - `--shadow-lg`: Large shadow
2746
+ - `--shadow-xl`: Extra large shadow
2747
+
2748
+ ### Border Radius
2749
+
2750
+ - `--radius-sm` (0.125rem)
2751
+ - `--radius-md` (0.25rem)
2752
+ - `--radius-lg` (0.5rem)
2753
+ - `--radius-xl` (1rem)
2754
+ - `--radius-full` (9999px)
2755
+
2756
+ ## Component Styles
2757
+
2758
+ The package includes pre-built component styles that follow the Bellhop design system. These are automatically applied when using Bellhop components.
2759
+
2760
+ ### Layout Classes
2761
+
2762
+ ```css
2763
+ .app-layout { /* Dashboard layout */ }
2764
+ .app-sidebar { /* Sidebar container */ }
2765
+ .app-main { /* Main content area */ }
2766
+ .bellhop-content-container { /* Content wrapper */ }
2767
+ ```
2768
+
2769
+ ## Framework Integration
2770
+
2771
+ ### React
2772
+
2773
+ ```tsx
2774
+ import '@actabldesign/bellhop-styles';
2775
+
2776
+ function App() {
2777
+ return (
2778
+ <div className="app-layout">
2779
+ {/* Your components */}
2780
+ </div>
2781
+ );
2782
+ }
2783
+ ```
2784
+
2785
+ ### Angular
2786
+
2787
+ Add to your `src/styles.css`:
2788
+
2789
+ ```css
2790
+ @import '@actabldesign/bellhop-styles';
2791
+ ```
2792
+
2793
+ ### Vanilla JavaScript/HTML
2794
+
2795
+ ```html
2796
+ <link rel="stylesheet" href="node_modules/@actabldesign/bellhop-styles/index.css">
2797
+ ```
2798
+
2799
+ ## Development
2800
+
2801
+ This package is built using Rollup and PostCSS.
2802
+
2803
+ ### Building
2804
+
2805
+ ```bash
2806
+ npm run build:lib:styles
2807
+ ```
2808
+
2809
+ ## License
2810
+
2811
+ MIT
2812
+
2813
+ ================
2814
+ File: rollup.config.js
2815
+ ================
2816
+ import postcss from 'rollup-plugin-postcss';
2817
+ import postcssImport from 'postcss-import';
2818
+ import { resolve } from 'path';
2819
+
2820
+ export default {
2821
+ input: 'src/index.css',
2822
+ output: {
2823
+ file: 'dist/index.css',
2824
+ format: 'es'
2825
+ },
2826
+ plugins: [
2827
+ postcss({
2828
+ extract: true,
2829
+ plugins: [
2830
+ postcssImport({
2831
+ resolve: (id, basedir) => {
2832
+ // Handle relative imports
2833
+ if (id.startsWith('./')) {
2834
+ return resolve(basedir, id);
2835
+ }
2836
+ return id;
2837
+ }
2838
+ })
2839
+ ],
2840
+ minimize: false,
2841
+ sourceMap: false
2842
+ })
2843
+ ]
2844
+ };
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+ ================================================================
2851
+ End of Codebase
2852
+ ================================================================