@rackbops/styles 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/all.css +14 -0
  2. package/arcane-obsidian/base.css +46 -0
  3. package/arcane-obsidian/components/alert.css +28 -0
  4. package/arcane-obsidian/components/badge.css +33 -0
  5. package/arcane-obsidian/components/button.css +73 -0
  6. package/arcane-obsidian/components/card.css +14 -0
  7. package/arcane-obsidian/components/dialog.css +31 -0
  8. package/arcane-obsidian/components/eyebrow.css +12 -0
  9. package/arcane-obsidian/components/form.css +70 -0
  10. package/arcane-obsidian/components/link.css +46 -0
  11. package/arcane-obsidian/components/progress.css +40 -0
  12. package/arcane-obsidian/components/table.css +27 -0
  13. package/arcane-obsidian/components/tabs.css +45 -0
  14. package/arcane-obsidian/components/tabstrip.css +35 -0
  15. package/arcane-obsidian/components/wordmark.css +23 -0
  16. package/arcane-obsidian/design.md +133 -0
  17. package/arcane-obsidian/index.css +16 -0
  18. package/arcane-obsidian/tokens.css +81 -0
  19. package/arcane-parchment/base.css +46 -0
  20. package/arcane-parchment/components/alert.css +28 -0
  21. package/arcane-parchment/components/badge.css +33 -0
  22. package/arcane-parchment/components/button.css +75 -0
  23. package/arcane-parchment/components/card.css +14 -0
  24. package/arcane-parchment/components/dialog.css +31 -0
  25. package/arcane-parchment/components/eyebrow.css +12 -0
  26. package/arcane-parchment/components/form.css +70 -0
  27. package/arcane-parchment/components/link.css +46 -0
  28. package/arcane-parchment/components/progress.css +40 -0
  29. package/arcane-parchment/components/table.css +27 -0
  30. package/arcane-parchment/components/tabs.css +45 -0
  31. package/arcane-parchment/components/tabstrip.css +35 -0
  32. package/arcane-parchment/components/wordmark.css +23 -0
  33. package/arcane-parchment/design.md +89 -0
  34. package/arcane-parchment/index.css +16 -0
  35. package/arcane-parchment/tokens.css +78 -0
  36. package/luminous-precision/base.css +58 -0
  37. package/luminous-precision/components/alert.css +26 -0
  38. package/luminous-precision/components/badge.css +19 -0
  39. package/luminous-precision/components/button.css +88 -0
  40. package/luminous-precision/components/card.css +12 -0
  41. package/luminous-precision/components/dialog.css +31 -0
  42. package/luminous-precision/components/form.css +126 -0
  43. package/luminous-precision/components/link.css +46 -0
  44. package/luminous-precision/components/progress.css +41 -0
  45. package/luminous-precision/components/table.css +28 -0
  46. package/luminous-precision/components/tabs.css +33 -0
  47. package/luminous-precision/design.md +124 -0
  48. package/luminous-precision/index.css +13 -0
  49. package/luminous-precision/tokens.css +89 -0
  50. package/manifest.json +39 -0
  51. package/neon-butterfly/assets/butterfly-circuit.png +0 -0
  52. package/neon-butterfly/base.css +49 -0
  53. package/neon-butterfly/components/alert.css +26 -0
  54. package/neon-butterfly/components/badge.css +17 -0
  55. package/neon-butterfly/components/button.css +54 -0
  56. package/neon-butterfly/components/card.css +11 -0
  57. package/neon-butterfly/components/dialog.css +29 -0
  58. package/neon-butterfly/components/form.css +124 -0
  59. package/neon-butterfly/components/link.css +55 -0
  60. package/neon-butterfly/components/progress.css +41 -0
  61. package/neon-butterfly/components/table.css +27 -0
  62. package/neon-butterfly/components/tabs.css +33 -0
  63. package/neon-butterfly/design.md +103 -0
  64. package/neon-butterfly/index.css +13 -0
  65. package/neon-butterfly/tokens.css +89 -0
  66. package/package.json +60 -0
  67. package/rackbops-noir/base.css +53 -0
  68. package/rackbops-noir/components/alert.css +30 -0
  69. package/rackbops-noir/components/badge.css +39 -0
  70. package/rackbops-noir/components/button.css +79 -0
  71. package/rackbops-noir/components/card.css +37 -0
  72. package/rackbops-noir/components/dialog.css +33 -0
  73. package/rackbops-noir/components/eyebrow.css +21 -0
  74. package/rackbops-noir/components/form.css +70 -0
  75. package/rackbops-noir/components/link.css +31 -0
  76. package/rackbops-noir/components/principle.css +31 -0
  77. package/rackbops-noir/components/progress.css +40 -0
  78. package/rackbops-noir/components/rack.css +93 -0
  79. package/rackbops-noir/components/table.css +31 -0
  80. package/rackbops-noir/components/tabs.css +45 -0
  81. package/rackbops-noir/components/tag.css +20 -0
  82. package/rackbops-noir/design.md +85 -0
  83. package/rackbops-noir/index.css +17 -0
  84. package/rackbops-noir/tokens.css +66 -0
  85. package/rackbops-studio/assets/boppy.svg +17 -0
  86. package/rackbops-studio/base.css +53 -0
  87. package/rackbops-studio/components/alert.css +30 -0
  88. package/rackbops-studio/components/badge.css +39 -0
  89. package/rackbops-studio/components/button.css +78 -0
  90. package/rackbops-studio/components/card.css +37 -0
  91. package/rackbops-studio/components/dialog.css +33 -0
  92. package/rackbops-studio/components/eyebrow.css +21 -0
  93. package/rackbops-studio/components/form.css +70 -0
  94. package/rackbops-studio/components/link.css +31 -0
  95. package/rackbops-studio/components/principle.css +31 -0
  96. package/rackbops-studio/components/progress.css +40 -0
  97. package/rackbops-studio/components/rack.css +94 -0
  98. package/rackbops-studio/components/table.css +31 -0
  99. package/rackbops-studio/components/tabs.css +45 -0
  100. package/rackbops-studio/components/tag.css +20 -0
  101. package/rackbops-studio/design.md +157 -0
  102. package/rackbops-studio/index.css +17 -0
  103. package/rackbops-studio/tokens.css +77 -0
  104. package/summer-cloud/base.css +58 -0
  105. package/summer-cloud/components/alert.css +29 -0
  106. package/summer-cloud/components/badge.css +49 -0
  107. package/summer-cloud/components/button.css +109 -0
  108. package/summer-cloud/components/card.css +35 -0
  109. package/summer-cloud/components/dialog.css +30 -0
  110. package/summer-cloud/components/form.css +146 -0
  111. package/summer-cloud/components/link.css +60 -0
  112. package/summer-cloud/components/progress.css +43 -0
  113. package/summer-cloud/components/table.css +34 -0
  114. package/summer-cloud/components/tabs.css +38 -0
  115. package/summer-cloud/design.md +165 -0
  116. package/summer-cloud/index.css +13 -0
  117. package/summer-cloud/tokens.css +103 -0
@@ -0,0 +1,146 @@
1
+ /* summer-cloud — form controls: input, textarea, select, checkbox, radio, switch
2
+ * Fields are sunken (no resting border) and bloom a sky-blue ring on focus. */
3
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-input,
4
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-select,
5
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-textarea {
6
+ display: block;
7
+ width: 100%;
8
+ padding: 0.75rem var(--rb-space-3);
9
+ background: var(--rb-surface-sunken);
10
+ border: 1px solid transparent;
11
+ border-radius: var(--rb-radius);
12
+ color: var(--rb-text);
13
+ font-family: var(--rb-font-body);
14
+ font-weight: var(--rb-font-weight);
15
+ font-size: 16px;
16
+ transition: border-color var(--rb-transition), box-shadow var(--rb-transition);
17
+ }
18
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-select {
19
+ appearance: none;
20
+ padding-right: 2.25rem;
21
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23484457' stroke-width='1.5'/%3E%3C/svg%3E");
22
+ background-repeat: no-repeat;
23
+ background-position: right 0.75rem center;
24
+ }
25
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-input::placeholder,
26
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-textarea::placeholder {
27
+ color: var(--rb-outline);
28
+ }
29
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-input:focus,
30
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-select:focus,
31
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-textarea:focus {
32
+ outline: none;
33
+ border-color: var(--rb-accent-2);
34
+ box-shadow: 0 0 0 4px var(--rb-accent-2-glow);
35
+ }
36
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-input[aria-invalid="true"],
37
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-textarea[aria-invalid="true"] {
38
+ border-color: var(--rb-danger);
39
+ }
40
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-input[aria-invalid="true"]:focus,
41
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-textarea[aria-invalid="true"]:focus {
42
+ box-shadow: 0 0 0 4px rgba(255, 77, 77, 0.2);
43
+ }
44
+
45
+ /* Labels are the mono voice: small, tracked, utility-grade. */
46
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-label {
47
+ display: block;
48
+ margin-bottom: var(--rb-space-1);
49
+ padding-left: var(--rb-space-1);
50
+ color: var(--rb-text-faint);
51
+ font-family: var(--rb-font-mono);
52
+ font-size: 12px;
53
+ font-weight: 500;
54
+ letter-spacing: var(--rb-label-tracking);
55
+ }
56
+
57
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-field {
58
+ margin-bottom: var(--rb-space-3);
59
+ }
60
+
61
+ /* checkbox & radio */
62
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-checkbox,
63
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-radio {
64
+ appearance: none;
65
+ width: 1.25rem;
66
+ height: 1.25rem;
67
+ margin: 0;
68
+ vertical-align: text-bottom;
69
+ background: var(--rb-surface-sunken);
70
+ border: 1px solid var(--rb-outline);
71
+ border-radius: var(--rb-radius-sm);
72
+ cursor: pointer;
73
+ transition: background var(--rb-transition), border-color var(--rb-transition),
74
+ box-shadow var(--rb-transition);
75
+ }
76
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-radio {
77
+ border-radius: 50%;
78
+ }
79
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-checkbox:checked,
80
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-radio:checked {
81
+ background: var(--rb-accent);
82
+ border-color: var(--rb-accent);
83
+ }
84
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-checkbox:checked {
85
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='10' viewBox='0 0 12 10'%3E%3Cpath d='M1 5l3.5 3.5L11 1.5' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
86
+ background-repeat: no-repeat;
87
+ background-position: center;
88
+ }
89
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-radio:checked {
90
+ box-shadow: inset 0 0 0 4px var(--rb-surface);
91
+ }
92
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-checkbox:focus-visible,
93
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-radio:focus-visible,
94
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch:focus-visible {
95
+ outline: none;
96
+ border-color: var(--rb-accent-2);
97
+ box-shadow: 0 0 0 4px var(--rb-accent-2-glow);
98
+ }
99
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-choice {
100
+ display: inline-flex;
101
+ align-items: center;
102
+ gap: var(--rb-space-2);
103
+ color: var(--rb-text);
104
+ font-size: var(--rb-text-sm);
105
+ cursor: pointer;
106
+ }
107
+
108
+ /* switch — the cloud-toggle: oversized, squishy, green when live */
109
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch {
110
+ appearance: none;
111
+ width: 3rem;
112
+ height: 1.75rem;
113
+ margin: 0;
114
+ vertical-align: text-bottom;
115
+ background: var(--rb-surface-sunken);
116
+ border: 1px solid var(--rb-outline);
117
+ border-radius: var(--rb-radius-pill);
118
+ cursor: pointer;
119
+ position: relative;
120
+ transition: background var(--rb-transition), border-color var(--rb-transition);
121
+ }
122
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch::after {
123
+ content: "";
124
+ position: absolute;
125
+ top: 2px;
126
+ left: 2px;
127
+ width: calc(1.75rem - 6px);
128
+ height: calc(1.75rem - 6px);
129
+ border-radius: 50%;
130
+ background: #fff;
131
+ box-shadow: 0 2px 6px rgba(93, 43, 255, 0.2);
132
+ transition: transform var(--rb-transition) var(--rb-ease-bounce);
133
+ }
134
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch:checked {
135
+ background: var(--rb-success);
136
+ border-color: var(--rb-success);
137
+ }
138
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch:checked::after {
139
+ transform: translateX(1.25rem);
140
+ }
141
+
142
+ @media (prefers-reduced-motion: reduce) {
143
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-switch::after {
144
+ transition: none;
145
+ }
146
+ }
@@ -0,0 +1,60 @@
1
+ /* summer-cloud — nav link: pill that fills with sky tint, arrow slides out */
2
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ gap: var(--rb-space-2);
6
+ padding: var(--rb-space-2) var(--rb-space-3);
7
+ border: 1px solid transparent;
8
+ border-radius: var(--rb-radius-pill);
9
+ color: var(--rb-text-faint);
10
+ text-decoration: none;
11
+ font-family: var(--rb-font-display);
12
+ font-weight: var(--rb-font-weight-medium);
13
+ font-size: var(--rb-text-sm);
14
+ transition:
15
+ background var(--rb-transition),
16
+ color var(--rb-transition);
17
+ }
18
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link::after {
19
+ content: "→";
20
+ color: var(--rb-accent-2);
21
+ transition: transform var(--rb-transition);
22
+ }
23
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:hover,
24
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:focus-visible {
25
+ background: var(--rb-sky-tint);
26
+ color: var(--rb-accent);
27
+ outline: none;
28
+ }
29
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:hover::after,
30
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:focus-visible::after {
31
+ transform: translateX(4px);
32
+ }
33
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:active {
34
+ transform: scale(0.95);
35
+ }
36
+
37
+ /* Current page: violet with the underline rule from the top nav. */
38
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link--active,
39
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link[aria-current="page"] {
40
+ background: none;
41
+ border-radius: 0;
42
+ border-bottom: 2px solid var(--rb-accent);
43
+ color: var(--rb-accent);
44
+ }
45
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link--active::after,
46
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link[aria-current="page"]::after {
47
+ content: none;
48
+ }
49
+
50
+ @media (prefers-reduced-motion: reduce) {
51
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link,
52
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link::after {
53
+ transition: none;
54
+ }
55
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:hover::after,
56
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:focus-visible::after,
57
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-link:active {
58
+ transform: none;
59
+ }
60
+ }
@@ -0,0 +1,43 @@
1
+ /* summer-cloud — progress bar & spinner: glowing violet indicators */
2
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-progress {
3
+ display: block;
4
+ width: 100%;
5
+ height: 0.5rem;
6
+ background: var(--rb-bg-blend);
7
+ border-radius: var(--rb-radius-pill);
8
+ overflow: hidden;
9
+ }
10
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-progress__bar {
11
+ height: 100%;
12
+ background: var(--rb-accent);
13
+ border-radius: var(--rb-radius-pill);
14
+ box-shadow: 0 0 10px rgba(69, 0, 217, 0.5);
15
+ transition: width var(--rb-transition);
16
+ }
17
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-progress__bar--accent {
18
+ background: var(--rb-accent-2);
19
+ box-shadow: 0 0 10px rgba(12, 179, 255, 0.5);
20
+ }
21
+
22
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-spinner {
23
+ display: inline-block;
24
+ width: 1.5rem;
25
+ height: 1.5rem;
26
+ border: 2px solid var(--rb-outline);
27
+ border-top-color: var(--rb-accent);
28
+ border-radius: 50%;
29
+ animation: rb-sc-spin 0.8s linear infinite;
30
+ }
31
+ @keyframes rb-sc-spin {
32
+ to {
33
+ transform: rotate(360deg);
34
+ }
35
+ }
36
+ @media (prefers-reduced-motion: reduce) {
37
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-spinner {
38
+ animation-duration: 2s;
39
+ }
40
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-progress__bar {
41
+ transition: none;
42
+ }
43
+ }
@@ -0,0 +1,34 @@
1
+ /* summer-cloud — table: mono header labels, sky-tint row hover */
2
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table {
3
+ width: 100%;
4
+ border-collapse: collapse;
5
+ font-size: var(--rb-text-sm);
6
+ color: var(--rb-text);
7
+ }
8
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table th {
9
+ padding: var(--rb-space-3);
10
+ border-bottom: 1px solid var(--rb-outline);
11
+ color: var(--rb-text-faint);
12
+ text-align: left;
13
+ text-transform: uppercase;
14
+ font-family: var(--rb-font-mono);
15
+ font-size: 12px;
16
+ font-weight: 500;
17
+ letter-spacing: var(--rb-label-tracking);
18
+ }
19
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table td {
20
+ padding: var(--rb-space-3);
21
+ border-bottom: 1px solid rgba(201, 195, 218, 0.4);
22
+ }
23
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table tbody tr {
24
+ transition: background var(--rb-transition);
25
+ }
26
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table tbody tr:hover {
27
+ background: var(--rb-sky-tint);
28
+ }
29
+ /* Numeric cells take the mono voice — prices and data read as utility-grade. */
30
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table td.rb-num,
31
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-table th.rb-num {
32
+ font-family: var(--rb-font-mono);
33
+ text-align: right;
34
+ }
@@ -0,0 +1,38 @@
1
+ /* summer-cloud — tabs: violet underline on the active tab, sky tint on hover */
2
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tabs {
3
+ display: flex;
4
+ gap: var(--rb-space-2);
5
+ border-bottom: 1px solid var(--rb-outline);
6
+ }
7
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tab {
8
+ padding: var(--rb-space-2) var(--rb-space-3);
9
+ margin-bottom: -1px;
10
+ background: none;
11
+ border: none;
12
+ border-bottom: 2px solid transparent;
13
+ border-radius: var(--rb-radius-sm) var(--rb-radius-sm) 0 0;
14
+ color: var(--rb-text-faint);
15
+ font-family: var(--rb-font-display);
16
+ font-weight: var(--rb-font-weight-medium);
17
+ font-size: var(--rb-text-sm);
18
+ cursor: pointer;
19
+ transition: color var(--rb-transition), background var(--rb-transition),
20
+ border-color var(--rb-transition);
21
+ }
22
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tab:hover {
23
+ background: var(--rb-sky-tint);
24
+ color: var(--rb-accent);
25
+ }
26
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tab:focus-visible {
27
+ outline: none;
28
+ box-shadow: 0 0 0 4px var(--rb-accent-2-glow);
29
+ }
30
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tab--active,
31
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tab[aria-selected="true"] {
32
+ color: var(--rb-accent);
33
+ border-bottom-color: var(--rb-accent);
34
+ font-weight: var(--rb-font-weight-bold);
35
+ }
36
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-tabpanel {
37
+ padding: var(--rb-space-3) 0;
38
+ }
@@ -0,0 +1,165 @@
1
+ # summer-cloud
2
+
3
+ > **Source & attribution.** Ported from
4
+ > [`nazuraki/ui-std-lib`](https://github.com/nazuraki/ui-std-lib)'s
5
+ > `@nazuraki/styles` "summer-cloud" theme (MIT, Copyright (c) 2026 nazuraki — see
6
+ > the repo [`NOTICE`](../../NOTICE)), re-namespaced from `--nb-*` / `.nb-*` /
7
+ > `data-nb-style` to the rackbops `--rb-*` contract. The aesthetic below is
8
+ > nazuraki's; only the token/class names changed.
9
+
10
+ Light, airy, high-velocity retail aesthetic — "Airy Energetic." Frosted white
11
+ glass floating on a sky gradient, with a vivid violet doing all the work of
12
+ emphasis. Where neon-butterfly is a command console, summer-cloud is a summer
13
+ storefront: weightless, optimistic, effortless. Nothing sits flat on the page;
14
+ everything hovers.
15
+
16
+ Derived from the Stitch project *Summer Cloud UI System*
17
+ (`15973631330153907862`): Style Guide, Components Showcase, Retail Dashboard.
18
+
19
+ ## Token mapping (dual accent + tinted shadows)
20
+
21
+ summer-cloud is a two-accent design; the rackbops baseline carries a single
22
+ `--rb-accent`. It also ships real shadow/tracking/pill tokens that fill baseline
23
+ slots the darker themes had to synthesize:
24
+
25
+ | Role | rackbops token | Value |
26
+ | --- | --- | --- |
27
+ | Primary / brand voice (violet) | `--rb-accent` (+ `--rb-accent-fg`, `--rb-accent-bright`, `--rb-accent-glow`, `--rb-accent-border`) | `#4500d9` |
28
+ | Active / secondary (sky blue) | `--rb-accent-2` (+ `--rb-accent-2-glow`, `--rb-accent-2-deep`) — theme extras | `#0cb3ff` |
29
+ | Glass tiers | `--rb-surface-glass` / `--rb-surface-glass-high` — extras | `0.6` / `0.8` white |
30
+ | Tinted shadows | `--rb-shadow-sm` / `--rb-shadow-lg` (+ `--rb-shadow-raised`, `--rb-shadow-raised-hover` extras) | primary-tinted |
31
+ | Display tracking | `--rb-heading-tracking` | `-0.02em` |
32
+
33
+ summer-cloud's shadow scale is airy by design: `--rb-shadow-sm` is a soft
34
+ `0 10px 30px` ambient (not the tight 1–3px the console themes use), and `.rb-card`
35
+ wears `--rb-shadow-lg` at rest — the "everything hovers" look. A shared component
36
+ written against the usual sm=resting / lg=elevated convention will read heavier
37
+ here; that is intended, not a bug.
38
+
39
+ ## Color
40
+
41
+ | Role | Value | Usage |
42
+ | --- | --- | --- |
43
+ | Background | `#f6fafe` | Flat page ground; the `.rb-bg` sky gradient runs `--rb-sky-start` `#f0f4f8` → `--rb-sky-end` `#c9e6ff` at 135°, `fixed` |
44
+ | Surface | `#ffffff` | Dialogs and fully opaque panels |
45
+ | Surface sunken | `#f0f4f8` | Inset form fields |
46
+ | Surface glass | `rgba(255,255,255,0.6)` + 12px blur | Cards, alerts (Level 1) |
47
+ | Surface glass high | `rgba(255,255,255,0.8)` + 20px blur | Floating/hover cards, modals (Level 2) |
48
+ | Text | `#171c1f` | Body text |
49
+ | Text faint | `#484457` | Secondary text, labels, idle nav |
50
+ | Accent (violet) | `#4500d9` | Headings, CTAs, active states, prices, progress |
51
+ | Accent bright | `#5d2bff` | Shadow/glow tint and primary hover fill |
52
+ | Accent-2 (sky blue) | `#0cb3ff` | Focus rings, secondary path, info — the interactive signal |
53
+ | Accent-2 deep | `#006492` | Sky blue as *text* (the bright value fails contrast) |
54
+ | Info | `#0cb3ff` | Informational callouts and badges |
55
+ | Success | `#30e330` | Switch "on" state — deliberately vibrant, the one high-energy pop |
56
+ | Warning | `#f2c025` | Caution states, "New" badges |
57
+ | Danger | `#ff4d4d` (retail red) | Errors, "Sale" badges, alert rules — carries dark text, never white |
58
+ | Danger deep | `#cc1f1f` | Danger where white text sits on it (destructive buttons) |
59
+ | Border | `rgba(255,255,255,0.4)` | Glass edges — the highlight that makes glass read as glass |
60
+ | Outline | `#c9c3da` | Hairlines on opaque surfaces (chips, table rules, checkboxes) |
61
+ | Sky tint | `rgba(255,255,255,0.7)` | Hover wash on ghost/nav elements |
62
+
63
+ Rules: the violet is the only loud color and carries emphasis alone — resting UI
64
+ is faint grey on white glass. Sky blue means "you can interact with this" (focus,
65
+ secondary actions, info). Never use pure black; never use a grey shadow. The
66
+ gradient is not decoration — on a flat white page the glass has nothing to be
67
+ glass against, and the theme collapses.
68
+
69
+ ## Typography
70
+
71
+ Three voices, per the project's design system:
72
+
73
+ - **Display & headings:** Plus Jakarta Sans (600/700/800), letter-spacing
74
+ `-0.02em` (`--rb-heading-tracking`) at display sizes — friendly rounded
75
+ terminals, tucked in tight.
76
+ - **Body:** Inter 400, 16px/24px. Sentence case, always.
77
+ - **Data & labels:** JetBrains Mono 500, 12px, tracking `0.05em`
78
+ (`--rb-label-tracking`). Field labels, badges, table headers, prices, metadata.
79
+ Uppercase for badges and table headers (furniture); sentence case for field
80
+ labels, which people read as words.
81
+
82
+ Interactive text (buttons, links, tabs) is Plus Jakarta Sans 600 at 14px,
83
+ sentence case. Uppercase never appears outside the mono voice.
84
+
85
+ The three webfonts are declared in `styles/manifest.json` (`summer-cloud.fonts`);
86
+ consumers load that stylesheet or self-host. Every stack falls back to a system
87
+ family.
88
+
89
+ ## Shape & effects
90
+
91
+ - Radius `1rem` (16px) for cards, panels, and fields; **pills**
92
+ (`--rb-radius-pill`) for every button, badge, and chip; `--rb-radius-sm`
93
+ (`0.25rem`) minimum anywhere else. Never 0.
94
+ - Depth is **blur + tinted shadow**, never grey drop shadows. Shadows are tinted
95
+ with `#5d2bff`: `--rb-shadow-lg` (`0 20px 40px rgba(93,43,255,0.08)`) at rest,
96
+ `--rb-shadow-raised` (`0 4px 14px rgba(93,43,255,0.39)`) for raised CTAs.
97
+ - Two elevation tiers only — Level 1 glass (0.6 white / 12px blur) for content,
98
+ Level 2 (0.8 white / 20px blur + lift) for interactive and floating things.
99
+ - **Bouncy, not linear.** Buttons scale to 1.03 on hover and 0.95 on press with
100
+ `--rb-ease-bounce` (`cubic-bezier(0.34,1.56,0.64,1)`); floating cards translate
101
+ `-4px`.
102
+ - Focus is a 4px sky-blue ring (`0 0 0 4px rgba(12,179,255,0.2)`), never an
103
+ outline suppression without a replacement.
104
+ - Spacing is strictly multiples of 8px. When in doubt, add 8.
105
+ - Respect `prefers-reduced-motion` — every transform is dropped.
106
+
107
+ ## Components
108
+
109
+ Class prefix `rb-` (shared across themes so `@rackbops/ui-react` stays
110
+ theme-agnostic). Variants use BEM-ish modifiers (`rb-btn--primary`).
111
+
112
+ - **Card** `.rb-card` — glass panel; `--floating` adds the Level 2 hover lift.
113
+ - **NavLink** `.rb-link` — pill, sky-tint wash, `→` slides 4px on hover;
114
+ `--active` / `[aria-current=page]` becomes the violet underline rule.
115
+ - **Button** `.rb-btn` — glass by default; `--primary` (solid violet CTA, one
116
+ per view), `--accent` (sky-edged glass), `--ghost`, `--danger`.
117
+ - **Form** `.rb-input`, `.rb-textarea`, `.rb-select`, `.rb-label`, `.rb-field`,
118
+ `.rb-checkbox`, `.rb-radio`, `.rb-switch`, `.rb-choice` — sunken fields, no
119
+ resting border, sky-blue ring on focus. The switch is the oversized
120
+ "cloud-toggle": squishy, and green when live.
121
+ - **Badge** `.rb-badge` + semantic modifiers — solid pills, mono uppercase.
122
+ **Chip** `.rb-chip` — outlined filter chip; `--selected` fills violet (a
123
+ summer-cloud extra, beyond the shared component set).
124
+ - **Alert** `.rb-alert` — glass card with a 4px semantic left rule.
125
+ - **Dialog** `.rb-dialog` — native `<dialog>`, opaque white, blurred backdrop.
126
+ - **Tabs** `.rb-tabs`/`.rb-tab`/`.rb-tabpanel` — violet underline when active.
127
+ - **Table** `.rb-table` — mono uppercase headers, sky-tint row hover; add
128
+ `.rb-num` to numeric cells for the mono/right-aligned treatment.
129
+ - **Progress** `.rb-progress`, **Spinner** `.rb-spinner` — glowing violet.
130
+
131
+ This port carries nazuraki's original component set (plus its `.rb-chip` and
132
+ `.rb-card--floating` extras); the rackbops-specific `eyebrow`, `tabstrip`,
133
+ `wordmark`, and `card--raised` surfaces are not part of it.
134
+
135
+ ## Deviations from the Stitch source
136
+
137
+ *(nazuraki's own authoring record for this theme, carried over with the port — it
138
+ describes nazuraki's decisions when building summer-cloud, not the rackbops copy.)*
139
+
140
+ - The generated screens flattened all three type voices to Plus Jakarta Sans.
141
+ This theme follows the project's written design system instead (Inter body,
142
+ JetBrains Mono labels), the richer and intended spec.
143
+ - The project's stored theme carried an earlier palette (near-black primary
144
+ `#01020e`, lavender secondary `#7248ae`). The rendered screens — all three, in
145
+ agreement — use violet `#4500d9` and sky blue `#0cb3ff`. This theme matches the
146
+ screens, since that is what Summer Cloud actually looks like.
147
+ - Tabs, table, dialog, and spinner do not appear in the source screens; they are
148
+ extrapolated from the rules above to complete the component inventory.
149
+ - The source screens set white text on retail red (`#ff4d4d`), which is 3.27:1 —
150
+ below AA at badge and button sizes. This theme keeps the vivid red and puts
151
+ dark text on it (4.97:1), and uses `--rb-danger-deep` for the solid destructive
152
+ button (5.55:1 on white). Every other foreground/background pair in the palette
153
+ clears AA.
154
+
155
+ ## Code syntax
156
+
157
+ Tokens `--rb-code-*` (theme extra). Palette hues deepened for contrast on white:
158
+ violet keywords, deep-green strings, deep-amber numbers, accent-deep functions,
159
+ deep-teal types, danger-deep variables, muted-faint comments, faint meta.
160
+
161
+ ## Scoping
162
+
163
+ Every rule is guarded by `data-rb-style="summer-cloud"` (self or ancestor),
164
+ wrapped in zero-specificity `:where()`. Set the attribute on `<html>` for a page
165
+ or on a container for an embedded island.
@@ -0,0 +1,13 @@
1
+ /* summer-cloud — full theme entry point */
2
+ @import "./tokens.css";
3
+ @import "./base.css";
4
+ @import "./components/card.css";
5
+ @import "./components/link.css";
6
+ @import "./components/button.css";
7
+ @import "./components/form.css";
8
+ @import "./components/badge.css";
9
+ @import "./components/alert.css";
10
+ @import "./components/dialog.css";
11
+ @import "./components/tabs.css";
12
+ @import "./components/table.css";
13
+ @import "./components/progress.css";
@@ -0,0 +1,103 @@
1
+ /* summer-cloud — design tokens
2
+ * Ported from nazuraki/ui-std-lib's @nazuraki/styles "summer-cloud" theme (MIT,
3
+ * Copyright (c) 2026 nazuraki — see the repo NOTICE), re-namespaced to the
4
+ * rackbops (--rb-*) contract. Consume via:
5
+ * @import "@rackbops/styles/summer-cloud/tokens";
6
+ * or pull the whole theme with ./index.css.
7
+ *
8
+ * Nothing applies until an element carries data-rb-style="summer-cloud" — set it
9
+ * on <html> for a page, or on any container for an embedded island. The :where()
10
+ * keeps specificity at zero, so any consumer rule overrides.
11
+ *
12
+ * Names marked (extra) are additions beyond the baseline set that only this
13
+ * theme's own component CSS relies on. summer-cloud is a dual-accent light
14
+ * design: violet is the brand voice (baseline --rb-accent); sky blue marks
15
+ * active paths (the --rb-accent-2 extra). Depth is a primary-tinted soft shadow,
16
+ * never grey — its shadow-soft/shadow map onto baseline --rb-shadow-sm/-lg.
17
+ */
18
+ :where([data-rb-style="summer-cloud"]) {
19
+ color-scheme: light;
20
+
21
+ /* color — airy off-white ground */
22
+ --rb-bg: #f6fafe;
23
+ --rb-bg-blend: #eaeef2; /* (extra) */
24
+ --rb-surface: #ffffff;
25
+ --rb-surface-2: #eef3f9; /* tinted raised panel */
26
+ --rb-surface-sunken: #f0f4f8; /* inset fields */
27
+ --rb-surface-glass: rgba(255, 255, 255, 0.6); /* (extra) glass panes */
28
+ --rb-surface-glass-high: rgba(255, 255, 255, 0.8); /* (extra) floating tier */
29
+ --rb-text: #171c1f;
30
+ --rb-text-soft: #2f2b3a; /* secondary body copy, above faint */
31
+ --rb-text-faint: #484457; /* labels, meta */
32
+ --rb-border: rgba(255, 255, 255, 0.4); /* on glass */
33
+ --rb-border-strong: rgba(255, 255, 255, 0.7); /* lit top edge of glass panes */
34
+ --rb-outline: #c9c3da; /* (extra) hairline on opaque surfaces */
35
+
36
+ /* accent — violet is the brand voice */
37
+ --rb-accent: #4500d9;
38
+ --rb-accent-fg: #ffffff; /* white ink on the solid violet fill */
39
+ --rb-accent-wash: rgba(69, 0, 217, 0.1); /* light violet tint */
40
+ --rb-accent-grad: linear-gradient(120deg, #4500d9, #0cb3ff); /* violet → sky */
41
+ --rb-accent-bright: #5d2bff; /* (extra) shadow/glow tint */
42
+ --rb-accent-glow: rgba(93, 43, 255, 0.4); /* (extra) */
43
+ --rb-accent-border: rgba(69, 0, 217, 0.2); /* (extra) */
44
+
45
+ /* accent-2 (extra) — sky blue: active states, links, focus */
46
+ --rb-accent-2: #0cb3ff;
47
+ --rb-accent-2-glow: rgba(12, 179, 255, 0.2);
48
+ --rb-accent-2-deep: #006492; /* readable accent text on white */
49
+
50
+ /* semantic */
51
+ --rb-info: #0cb3ff;
52
+ --rb-success: #30e330;
53
+ --rb-warning: #f2c025;
54
+ --rb-danger: #ff4d4d;
55
+ --rb-danger-deep: #cc1f1f; /* (extra) danger where white text sits on it */
56
+
57
+ /* sky gradient (extra) */
58
+ --rb-sky-start: #f0f4f8;
59
+ --rb-sky-end: #c9e6ff;
60
+ --rb-sky-tint: rgba(255, 255, 255, 0.7);
61
+
62
+ /* code syntax (extra) — deepened palette hues for contrast on white */
63
+ --rb-code-keyword: #4500d9;
64
+ --rb-code-string: #157a2a;
65
+ --rb-code-number: #9a6b00;
66
+ --rb-code-comment: #6e6880;
67
+ --rb-code-function: #006492;
68
+ --rb-code-variable: #cc1f1f;
69
+ --rb-code-type: #00877a;
70
+ --rb-code-meta: #484457;
71
+
72
+ /* typography */
73
+ --rb-font-display: "Plus Jakarta Sans", ui-sans-serif, system-ui, sans-serif;
74
+ --rb-font-body: "Inter", ui-sans-serif, system-ui, sans-serif;
75
+ --rb-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
76
+ --rb-font-weight: 400;
77
+ --rb-font-weight-medium: 600;
78
+ --rb-font-weight-bold: 700;
79
+ --rb-heading-tracking: -0.02em; /* display sizes */
80
+ --rb-label-tracking: 0.05em;
81
+ --rb-text-sm: 14px;
82
+
83
+ /* shape & effects — big soft radii, primary-tinted soft shadows */
84
+ --rb-radius: 1rem;
85
+ --rb-radius-sm: 0.25rem; /* (extra) */
86
+ --rb-radius-lg: 1.5rem; /* cards and large containers */
87
+ --rb-radius-pill: 9999px; /* chips, badges, switches */
88
+ --rb-shadow-sm: 0 10px 30px rgba(0, 100, 146, 0.05); /* soft ambient */
89
+ --rb-shadow-lg: 0 20px 40px rgba(93, 43, 255, 0.08); /* large ambient */
90
+ --rb-shadow-raised: 0 4px 14px rgba(93, 43, 255, 0.39); /* (extra) raised button */
91
+ --rb-shadow-raised-hover: 0 6px 20px rgba(93, 43, 255, 0.5); /* (extra) */
92
+ --rb-blur: 12px;
93
+ --rb-blur-high: 20px; /* (extra) */
94
+ --rb-transition: 0.3s;
95
+ --rb-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); /* (extra) */
96
+
97
+ /* spacing */
98
+ --rb-space-1: 0.25rem;
99
+ --rb-space-2: 0.5rem;
100
+ --rb-space-3: 1rem;
101
+ --rb-space-4: 1.5rem;
102
+ --rb-space-5: 2rem;
103
+ }