maverick-wave 3.0.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 (141) hide show
  1. package/.claude/commands/mw.md +580 -0
  2. package/.claude/settings.local.json +11 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/maverick-wave.iml +12 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/prettier.xml +6 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/.prettierignore +6 -0
  10. package/.prettierrc.json +7 -0
  11. package/CHANGELOG.md +420 -0
  12. package/CLAUDE.md +53 -0
  13. package/LICENSE +21 -0
  14. package/README.md +191 -0
  15. package/gulpfile.js +158 -0
  16. package/index.html +472 -0
  17. package/maverick-wave.min.css +1 -0
  18. package/maverick-wave.min.js +1 -0
  19. package/package.json +52 -0
  20. package/release.sh +17 -0
  21. package/src/assets/favicon/android-chrome-192x192.png +0 -0
  22. package/src/assets/favicon/android-chrome-512x512.png +0 -0
  23. package/src/assets/favicon/apple-touch-icon.png +0 -0
  24. package/src/assets/favicon/favicon-16x16.png +0 -0
  25. package/src/assets/favicon/favicon-32x32.png +0 -0
  26. package/src/assets/favicon/site.webmanifest +1 -0
  27. package/src/assets/favicon.ico +0 -0
  28. package/src/assets/header-logo.svg +24 -0
  29. package/src/js/main.js +587 -0
  30. package/src/partials/accordions-container.html +163 -0
  31. package/src/partials/alerts-container.html +120 -0
  32. package/src/partials/avatars-container.html +84 -0
  33. package/src/partials/blog-posts-container.html +157 -0
  34. package/src/partials/breadcrumbs-container.html +126 -0
  35. package/src/partials/button-bar-container.html +168 -0
  36. package/src/partials/buttons-container.html +133 -0
  37. package/src/partials/cards-container.html +508 -0
  38. package/src/partials/code-container.html +194 -0
  39. package/src/partials/colors-container.html +125 -0
  40. package/src/partials/coming-soon-container.html +6 -0
  41. package/src/partials/content-slider-container.html +47 -0
  42. package/src/partials/divider-container.html +52 -0
  43. package/src/partials/documentation-container.html +161 -0
  44. package/src/partials/empty-state-container.html +74 -0
  45. package/src/partials/footer-container.html +113 -0
  46. package/src/partials/form-container.html +257 -0
  47. package/src/partials/form-elements-container.html +595 -0
  48. package/src/partials/form-field-container.html +141 -0
  49. package/src/partials/gallery-container.html +49 -0
  50. package/src/partials/get-started-container.html +294 -0
  51. package/src/partials/grid-container.html +171 -0
  52. package/src/partials/header-container.html +49 -0
  53. package/src/partials/header-utilities-container.html +80 -0
  54. package/src/partials/home-container.html +48 -0
  55. package/src/partials/html-lists-container.html +58 -0
  56. package/src/partials/info-container.html +87 -0
  57. package/src/partials/input-group-container.html +285 -0
  58. package/src/partials/item-lists-container.html +413 -0
  59. package/src/partials/login-container.html +61 -0
  60. package/src/partials/meta-info-container.html +16 -0
  61. package/src/partials/modals-container.html +136 -0
  62. package/src/partials/pagination-container.html +27 -0
  63. package/src/partials/panels-container.html +196 -0
  64. package/src/partials/progress-container.html +226 -0
  65. package/src/partials/ratings-container.html +104 -0
  66. package/src/partials/skeleton-container.html +82 -0
  67. package/src/partials/spinners-container.html +92 -0
  68. package/src/partials/stepper-container.html +107 -0
  69. package/src/partials/tables-container.html +120 -0
  70. package/src/partials/tabs-container.html +263 -0
  71. package/src/partials/tags-container.html +168 -0
  72. package/src/partials/techstack-bucket-container.html +174 -0
  73. package/src/partials/tiles-container.html +245 -0
  74. package/src/partials/timelines-container.html +196 -0
  75. package/src/partials/typography-container.html +66 -0
  76. package/src/partials/utilities-container.html +85 -0
  77. package/src/scss/abstracts/_functions.scss +37 -0
  78. package/src/scss/abstracts/_index.scss +3 -0
  79. package/src/scss/abstracts/_mixins.scss +45 -0
  80. package/src/scss/abstracts/_variables.scss +222 -0
  81. package/src/scss/base/_base.scss +165 -0
  82. package/src/scss/base/_index.scss +3 -0
  83. package/src/scss/base/_reset.scss +75 -0
  84. package/src/scss/base/_typography.scss +230 -0
  85. package/src/scss/components/_accordions.scss +91 -0
  86. package/src/scss/components/_alerts.scss +105 -0
  87. package/src/scss/components/_avatars.scss +123 -0
  88. package/src/scss/components/_blog-post.scss +268 -0
  89. package/src/scss/components/_breadcrumbs.scss +108 -0
  90. package/src/scss/components/_button-bar.scss +139 -0
  91. package/src/scss/components/_buttons.scss +164 -0
  92. package/src/scss/components/_cards.scss +316 -0
  93. package/src/scss/components/_code.scss +252 -0
  94. package/src/scss/components/_coming-soon.scss +92 -0
  95. package/src/scss/components/_content-slider.scss +119 -0
  96. package/src/scss/components/_divider.scss +70 -0
  97. package/src/scss/components/_empty-state.scss +73 -0
  98. package/src/scss/components/_gallery.scss +158 -0
  99. package/src/scss/components/_index.scss +33 -0
  100. package/src/scss/components/_info.scss +143 -0
  101. package/src/scss/components/_lists.scss +653 -0
  102. package/src/scss/components/_localhost-indicator.scss +29 -0
  103. package/src/scss/components/_meta-info.scss +34 -0
  104. package/src/scss/components/_modals.scss +118 -0
  105. package/src/scss/components/_pagination.scss +99 -0
  106. package/src/scss/components/_panels.scss +112 -0
  107. package/src/scss/components/_progress.scss +107 -0
  108. package/src/scss/components/_ratings.scss +47 -0
  109. package/src/scss/components/_skeleton.scss +90 -0
  110. package/src/scss/components/_spinners.scss +208 -0
  111. package/src/scss/components/_stepper.scss +145 -0
  112. package/src/scss/components/_tables.scss +127 -0
  113. package/src/scss/components/_tabs.scss +146 -0
  114. package/src/scss/components/_tags.scss +93 -0
  115. package/src/scss/components/_techstack-bucket.scss +145 -0
  116. package/src/scss/components/_theme-toggle.scss +50 -0
  117. package/src/scss/components/_tiles.scss +217 -0
  118. package/src/scss/components/_timelines.scss +339 -0
  119. package/src/scss/form-elements/_checkbox.scss +174 -0
  120. package/src/scss/form-elements/_form.scss +122 -0
  121. package/src/scss/form-elements/_index.scss +10 -0
  122. package/src/scss/form-elements/_input-group.scss +103 -0
  123. package/src/scss/form-elements/_input.scss +72 -0
  124. package/src/scss/form-elements/_login.scss +62 -0
  125. package/src/scss/form-elements/_radio.scss +144 -0
  126. package/src/scss/form-elements/_select.scss +56 -0
  127. package/src/scss/form-elements/_slider.scss +174 -0
  128. package/src/scss/form-elements/_textarea.scss +74 -0
  129. package/src/scss/form-elements/_toggle.scss +174 -0
  130. package/src/scss/layout/_footer.scss +214 -0
  131. package/src/scss/layout/_grid.scss +287 -0
  132. package/src/scss/layout/_header.scss +441 -0
  133. package/src/scss/layout/_home.scss +40 -0
  134. package/src/scss/layout/_index.scss +6 -0
  135. package/src/scss/layout/_main.scss +116 -0
  136. package/src/scss/layout/_section.scss +89 -0
  137. package/src/scss/main.scss +5 -0
  138. package/src/scss/utilities/_display.scss +35 -0
  139. package/src/scss/utilities/_flex.scss +66 -0
  140. package/src/scss/utilities/_index.scss +3 -0
  141. package/src/scss/utilities/_spacing.scss +78 -0
@@ -0,0 +1,164 @@
1
+ @use '../abstracts' as *;
2
+
3
+ // Base
4
+ .mw-btn {
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ gap: spacing('2');
9
+ padding: spacing('2') spacing('4');
10
+ border: 1px solid transparent;
11
+ border-radius: radius('sm');
12
+ font-weight: font-weight('medium');
13
+ line-height: 1.2;
14
+ text-decoration: none;
15
+ cursor: pointer;
16
+ transition: var(--mw-transition);
17
+ box-sizing: border-box;
18
+ font-family: inherit;
19
+ font-size: inherit;
20
+
21
+ &:focus-visible {
22
+ outline: 2px solid var(--mw-primary-color);
23
+ outline-offset: 2px;
24
+ }
25
+
26
+ &:disabled {
27
+ cursor: not-allowed;
28
+ opacity: 0.6;
29
+ }
30
+ }
31
+
32
+ // Color variants
33
+ .mw-btn-primary {
34
+ background: var(--mw-primary-color);
35
+ color: var(--mw-primary-text-color);
36
+ &:hover:not(:disabled) {
37
+ background: var(--mw-primary-color-hover);
38
+ }
39
+ &.active:not(:disabled) {
40
+ background: var(--mw-primary-color-hover);
41
+ border: 1px solid var(--mw-primary-color);
42
+ }
43
+ }
44
+ .mw-btn-secondary {
45
+ background: var(--mw-secondary-color);
46
+ color: var(--mw-primary-text-color);
47
+ &:hover:not(:disabled) {
48
+ background: var(--mw-secondary-color-hover);
49
+ }
50
+ &.active:not(:disabled) {
51
+ background: var(--mw-secondary-color-hover);
52
+ border: 1px solid var(--mw-secondary-color);
53
+ }
54
+ }
55
+ .mw-btn-outline {
56
+ background: transparent;
57
+ border-color: var(--mw-primary-color);
58
+ color: var(--mw-primary-color);
59
+ &:hover:not(:disabled) {
60
+ background: var(--mw-primary-color);
61
+ color: var(--mw-primary-text-color);
62
+ }
63
+ &.active:not(:disabled) {
64
+ background: var(--mw-primary-color);
65
+ color: var(--mw-primary-text-color);
66
+ }
67
+ }
68
+ .mw-btn-link {
69
+ background: transparent;
70
+ border: none;
71
+ padding: 0;
72
+ color: var(--mw-primary-color);
73
+ &:hover:not(:disabled) {
74
+ text-decoration: underline;
75
+ }
76
+ }
77
+ .mw-btn-link-muted {
78
+ background: transparent;
79
+ border: none;
80
+ padding: 0;
81
+ color: var(--mw-text-muted-color);
82
+ &:hover:not(:disabled) {
83
+ color: var(--mw-primary-color);
84
+ text-decoration: underline;
85
+ }
86
+ }
87
+
88
+ // Size modifiers
89
+ .mw-btn-sm {
90
+ padding: spacing('1') spacing('3');
91
+ font-size: font-size('sm');
92
+ }
93
+ .mw-btn-lg {
94
+ padding: spacing('3') spacing('5');
95
+ font-size: font-size('md');
96
+ }
97
+
98
+ .mw-btn-mini {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ width: 18px;
103
+ height: 18px;
104
+ border-radius: radius('full');
105
+ background: var(--mw-gray-color);
106
+ color: var(--mw-white-color);
107
+ border: none;
108
+ opacity: 0.8;
109
+ padding: 0;
110
+ line-height: 1;
111
+ font-weight: bold;
112
+ cursor: pointer;
113
+ transition: var(--mw-transition);
114
+ text-decoration: none;
115
+ box-sizing: border-box;
116
+ margin-left: spacing('1');
117
+
118
+ i,
119
+ fa-icon,
120
+ svg,
121
+ [class*='fa-'],
122
+ [class*='fas-'] {
123
+ font-size: 0.6rem;
124
+ }
125
+
126
+ &:disabled {
127
+ cursor: not-allowed;
128
+ opacity: 0.4;
129
+ }
130
+
131
+ &:hover:not(:disabled) {
132
+ opacity: 1;
133
+ background: var(--mw-primary-color);
134
+ color: var(--mw-white-color);
135
+ }
136
+ }
137
+
138
+ .mw-btn-mini-primary {
139
+ &:hover:not(:disabled) {
140
+ background: var(--mw-primary-color);
141
+ color: var(--mw-white-color);
142
+ }
143
+ }
144
+
145
+ .mw-btn-mini-secondary {
146
+ &:hover:not(:disabled) {
147
+ background: var(--mw-secondary-color);
148
+ color: var(--mw-white-color);
149
+ }
150
+ }
151
+
152
+ .mw-btn-mini-danger {
153
+ &:hover:not(:disabled) {
154
+ background: var(--mw-danger-color);
155
+ color: var(--mw-white-color);
156
+ }
157
+ }
158
+
159
+ .mw-btn-mini-success {
160
+ &:hover:not(:disabled) {
161
+ background: var(--mw-success-color);
162
+ color: var(--mw-white-color);
163
+ }
164
+ }
@@ -0,0 +1,316 @@
1
+ @use '../abstracts' as *;
2
+
3
+ $_mw-card-addon-colors: (
4
+ primary: var(--mw-primary-color),
5
+ secondary: var(--mw-secondary-color),
6
+ info: var(--mw-info-color),
7
+ success: var(--mw-success-color),
8
+ warning: var(--mw-warning-color),
9
+ danger: var(--mw-danger-color),
10
+ );
11
+
12
+ .mw-card {
13
+ background: var(--mw-card-background);
14
+ border-radius: radius('sm') radius('xl') radius('sm') radius('xl');
15
+ padding: spacing('4') spacing('0') spacing('2') spacing('0');
16
+ box-shadow: 0 5px 10px var(--mw-shadow);
17
+ transition: var(--mw-transition);
18
+ border: 1px solid var(--mw-border);
19
+ position: relative;
20
+ overflow: hidden;
21
+ margin: spacing('0');
22
+ z-index: z-index('card');
23
+
24
+ &-simple {
25
+ padding: spacing('4');
26
+ }
27
+
28
+ &:hover {
29
+ transform: translateY(-3px);
30
+ box-shadow: 0 9px 21px var(--mw-shadow);
31
+ border-color: var(--mw-primary-color-hover);
32
+ }
33
+
34
+ &-badge {
35
+ position: absolute;
36
+ top: spacing('2');
37
+ right: spacing('3');
38
+ padding: spacing('1') spacing('4');
39
+ font-size: font-size('xs');
40
+ color: var(--mw-primary-text-color);
41
+ background: var(--mw-primary-color);
42
+ border-radius: radius('md');
43
+ white-space: nowrap;
44
+ z-index: z-index('card') + 5;
45
+ pointer-events: none;
46
+ text-align: center;
47
+ opacity: 0.9;
48
+ font-weight: font-weight('medium');
49
+ }
50
+
51
+ &-ribbon {
52
+ position: absolute;
53
+ top: 20px;
54
+ right: -35px;
55
+ padding: spacing('1') spacing('4');
56
+ font-size: font-size('xs');
57
+ color: var(--mw-primary-text-color);
58
+ background: var(--mw-primary-color);
59
+ border-radius: radius('xs');
60
+ white-space: nowrap;
61
+ width: 220px;
62
+ z-index: z-index('card') + 5;
63
+ pointer-events: none;
64
+ transform: rotate(25deg);
65
+ text-align: center;
66
+ opacity: 0.75;
67
+ font-weight: font-weight('medium');
68
+ @include media-down('sm') {
69
+ font-size: font-size('2xs');
70
+ }
71
+ }
72
+
73
+ // Content card variant - uses flex layout for footer positioning
74
+ &-content {
75
+ display: flex;
76
+ flex-direction: column;
77
+ height: 100%;
78
+ }
79
+
80
+ &-img {
81
+ height: 210px;
82
+ overflow: hidden;
83
+ top: 0;
84
+ left: 0;
85
+ margin-top: spacing('-4');
86
+ flex-shrink: 0;
87
+
88
+ img {
89
+ width: 100%;
90
+ height: 100%;
91
+ object-fit: cover;
92
+ transition: var(--mw-transition);
93
+ z-index: z-index('card') + 2;
94
+ }
95
+
96
+ &:hover img {
97
+ transform: scale(1.05);
98
+ }
99
+ }
100
+
101
+ &-img-contain {
102
+ @extend .mw-card-img;
103
+ img {
104
+ object-fit: contain;
105
+ object-position: center;
106
+ }
107
+ }
108
+
109
+ &-body {
110
+ display: flex;
111
+ flex-direction: column;
112
+ flex-grow: 1;
113
+ padding: spacing('4') spacing('5') spacing('4') spacing('4');
114
+ }
115
+
116
+ &-title {
117
+ margin-bottom: spacing('3');
118
+ font-size: font-size('xl');
119
+ @include media-down('md') {
120
+ font-size: font-size('lg');
121
+ }
122
+ }
123
+
124
+ &-title-divider {
125
+ height: 4px;
126
+ margin: spacing('1') spacing('0') spacing('4') spacing('0');
127
+ border: 0;
128
+ background-image: linear-gradient(
129
+ to right,
130
+ var(--mw-secondary-color),
131
+ var(--mw-secondary-color),
132
+ var(--mw-gray-background),
133
+ transparent
134
+ );
135
+ opacity: 0.75;
136
+ width: 70%;
137
+ }
138
+
139
+ &-subtitle {
140
+ margin-bottom: spacing('3');
141
+ font-size: font-size('md');
142
+ line-height: 1.2;
143
+ font-style: italic;
144
+ color: var(--mw-text-muted-color);
145
+ @include media-down('md') {
146
+ margin-bottom: spacing('2');
147
+ }
148
+ }
149
+
150
+ &-text {
151
+ margin: spacing('2') spacing('0') spacing('4') spacing('0');
152
+ color: var(--mw-text-color);
153
+ @include media-down('sm') {
154
+ margin-bottom: spacing('2');
155
+ }
156
+ }
157
+
158
+ &-body > *:last-child:not(.mw-card-footer) {
159
+ margin-bottom: spacing('0');
160
+ }
161
+
162
+ &-body .mw-card-footer {
163
+ margin-top: auto;
164
+ padding-top: spacing('5');
165
+ }
166
+
167
+ &-footer {
168
+ display: flex;
169
+ justify-content: flex-start;
170
+ align-items: stretch;
171
+ gap: spacing('3');
172
+ flex-shrink: 0;
173
+ text-wrap: balance;
174
+
175
+ /* push the last element all the way right */
176
+ > *:last-child {
177
+ margin-left: auto;
178
+ text-align: right;
179
+ }
180
+
181
+ // Ensure buttons maintain their size
182
+ .mw-btn {
183
+ flex-shrink: 0;
184
+ }
185
+
186
+ @include media-down('lg') {
187
+ flex-direction: column;
188
+ align-items: stretch;
189
+ gap: spacing('2');
190
+
191
+ > * {
192
+ width: 100%;
193
+ }
194
+
195
+ .mw-btn {
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ }
200
+ }
201
+ }
202
+
203
+ // Card sizes
204
+ &-lg {
205
+ .mw-card-img {
206
+ height: 340px;
207
+ }
208
+ }
209
+
210
+ &-xl {
211
+ .mw-card-img {
212
+ height: 480px;
213
+ @include media-down('sm') {
214
+ height: 440px;
215
+ }
216
+ }
217
+ }
218
+
219
+ @include media-down('sm') {
220
+ &-body {
221
+ padding: spacing('3');
222
+ }
223
+
224
+ // Adjust the image margin to match the new padding
225
+ .mw-card-img {
226
+ margin-bottom: spacing('2');
227
+ // margin: -#{spacing('4')} -#{spacing('4')} spacing('4');
228
+
229
+ img {
230
+ width: 100%;
231
+ }
232
+ }
233
+ }
234
+
235
+ &-stack {
236
+ padding: spacing('3');
237
+ transition: all 0.4s ease;
238
+
239
+ // Icon transition setup
240
+ &-icon {
241
+ width: 42px;
242
+ height: 42px;
243
+ border-radius: radius('full');
244
+ background: var(--mw-primary-color);
245
+ color: var(--mw-primary-text-color);
246
+ display: flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ margin-right: spacing('2');
250
+ font-size: font-size('md');
251
+ flex-shrink: 0;
252
+ box-shadow: 0 4px 8px var(--mw-shadow);
253
+ transition: transform 0.6s ease;
254
+ }
255
+
256
+ // Add rotation on hover
257
+ &:hover &-icon {
258
+ transform: rotate(33deg);
259
+ }
260
+
261
+ // Rest of your styles...
262
+ &-header {
263
+ display: flex;
264
+ align-items: center;
265
+ margin-bottom: spacing('3');
266
+ position: relative;
267
+
268
+ &:after {
269
+ content: '';
270
+ position: absolute;
271
+ bottom: -#{spacing('4')};
272
+ left: 48%;
273
+ transform: translateX(-50%);
274
+ width: 90%;
275
+ height: 2px;
276
+ background-image: linear-gradient(
277
+ to right,
278
+ var(--mw-secondary-color),
279
+ var(--mw-secondary-color),
280
+ var(--mw-gray-background),
281
+ transparent
282
+ );
283
+ opacity: 0.75;
284
+ }
285
+ }
286
+
287
+ &-title {
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: center;
291
+ margin: spacing('0');
292
+
293
+ @include media-down('sm') {
294
+ font-size: font-size('sm');
295
+ }
296
+ }
297
+
298
+ &-body {
299
+ display: flex;
300
+ flex-direction: column;
301
+ padding-top: spacing('3');
302
+ }
303
+
304
+ &-text {
305
+ margin-top: spacing('2');
306
+ color: var(--mw-text-color);
307
+ font-size: font-size('sm');
308
+ }
309
+ }
310
+ }
311
+
312
+ @each $name, $col in $_mw-card-addon-colors {
313
+ .mw-card-addon-#{$name} {
314
+ background: #{$col};
315
+ }
316
+ }
@@ -0,0 +1,252 @@
1
+ @use '../abstracts' as *;
2
+
3
+ code,
4
+ pre {
5
+ font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
6
+ font-size: font-size('xs');
7
+ border-radius: radius('sm');
8
+ }
9
+
10
+ code {
11
+ color: var(--mw-text-muted-color);
12
+ padding: spacing('1') spacing('2');
13
+ white-space: pre-wrap;
14
+ word-break: break-word;
15
+ }
16
+
17
+ pre {
18
+ color: var(--mw-text-color);
19
+ padding: spacing('4');
20
+ overflow-x: auto;
21
+ border: none;
22
+
23
+ code {
24
+ color: inherit;
25
+ padding: spacing('0');
26
+ white-space: pre-wrap;
27
+ display: block;
28
+ line-height: 1.5;
29
+
30
+ @include media-down('sm') {
31
+ font-size: font-size('2xs');
32
+ white-space: pre-wrap;
33
+ word-break: break-word;
34
+ }
35
+
36
+ @include media-down('xs') {
37
+ font-size: font-size('3xs');
38
+ }
39
+ }
40
+ }
41
+
42
+ // Code block with filename
43
+ .mw-code-block {
44
+ border-radius: radius('sm');
45
+ overflow: hidden;
46
+ border: 1px solid var(--mw-border);
47
+ width: 100%;
48
+
49
+ &-header {
50
+ padding: spacing('2') spacing('4');
51
+ border-bottom: 1px solid var(--mw-border);
52
+ font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
53
+ font-size: font-size('xs');
54
+ color: var(--mw-text-muted-color);
55
+ display: flex;
56
+ justify-content: space-between;
57
+ align-items: center;
58
+ flex-wrap: wrap;
59
+
60
+ @include media-down('sm') {
61
+ padding: spacing('2');
62
+ }
63
+ }
64
+
65
+ &-filename {
66
+ font-weight: font-weight('medium');
67
+ margin-right: spacing('2');
68
+
69
+ @include media-down('sm') {
70
+ font-size: font-size('2xs');
71
+ margin-bottom: spacing('1');
72
+ }
73
+ }
74
+
75
+ &-language {
76
+ font-size: font-size('xs');
77
+ padding: spacing('1');
78
+ border-radius: radius('sm');
79
+
80
+ @include media-down('sm') {
81
+ font-size: font-size('2xs');
82
+ }
83
+ }
84
+
85
+ pre {
86
+ margin: spacing('0');
87
+ border: none;
88
+ max-width: 100%;
89
+ overflow-x: auto;
90
+
91
+ @include media-down('sm') {
92
+ font-size: font-size('2xs');
93
+ padding: spacing('1');
94
+
95
+ code {
96
+ white-space: pre-wrap;
97
+ word-break: break-word;
98
+ }
99
+ }
100
+
101
+ @include media-down('xs') {
102
+ font-size: font-size('3xs');
103
+ }
104
+ }
105
+ }
106
+
107
+ // Terminal
108
+ .mw-terminal {
109
+ background: #232323; // fix color
110
+ color: #f2f3f4; // fix color
111
+ border-radius: radius('sm');
112
+ padding: spacing('4');
113
+ margin: spacing('1');
114
+ font-family: 'Fira Code', 'Consolas', 'Monaco', monospace;
115
+ font-size: font-size('xs');
116
+ line-height: 1.5;
117
+ overflow: auto;
118
+ max-width: 100%;
119
+
120
+ @include media-down('sm') {
121
+ font-size: font-size('2xs');
122
+ padding: spacing('1');
123
+ }
124
+
125
+ @include media-down('xs') {
126
+ font-size: font-size('3xs');
127
+ }
128
+
129
+ &-line {
130
+ display: block;
131
+ word-break: break-word;
132
+
133
+ &::before {
134
+ content: '$ ';
135
+ color: #6bdd6b;
136
+ font-weight: font-weight('medium');
137
+ }
138
+
139
+ &.mw-terminal-output::before {
140
+ content: '';
141
+ }
142
+ }
143
+ }
144
+
145
+ // Syntax highlighting
146
+ .mw-code-keyword {
147
+ color: #bd63d9;
148
+ }
149
+
150
+ .mw-code-string {
151
+ color: #98c379;
152
+ }
153
+
154
+ .mw-code-comment {
155
+ color: #7f848e;
156
+ font-style: italic;
157
+ }
158
+
159
+ .mw-code-function {
160
+ color: #489bde;
161
+ }
162
+
163
+ .mw-code-number {
164
+ color: #d19a66;
165
+ }
166
+
167
+ .mw-code-operator {
168
+ color: #56b6c2;
169
+ }
170
+
171
+ // Light theme adjustments
172
+ .mw-theme-light {
173
+ .mw-code-keyword {
174
+ color: #9d1a9a;
175
+ }
176
+
177
+ .mw-code-string {
178
+ color: #43a342;
179
+ }
180
+
181
+ .mw-code-comment {
182
+ color: #a0a1a7;
183
+ }
184
+
185
+ .mw-code-function {
186
+ color: #4078f2;
187
+ }
188
+
189
+ .mw-code-number {
190
+ color: #89610c;
191
+ }
192
+
193
+ .mw-code-operator {
194
+ color: #0184bc;
195
+ }
196
+ }
197
+
198
+ // Responsive container
199
+ .mw-code-container {
200
+ width: 100%;
201
+ max-width: 100%;
202
+ overflow-x: auto;
203
+ position: relative;
204
+
205
+ // Add horizontal scrolling indicator for small screens
206
+ @include media-down('sm') {
207
+ background-position:
208
+ left center,
209
+ right center;
210
+ background-repeat: no-repeat;
211
+ background-size:
212
+ 20px 100%,
213
+ 20px 100%;
214
+ background-attachment: local, local;
215
+ }
216
+
217
+ // Children should not be wider than the container
218
+ & > * {
219
+ max-width: 100%;
220
+ }
221
+
222
+ .mw-code-block {
223
+ margin: spacing('0');
224
+ width: 100%;
225
+
226
+ pre {
227
+ white-space: pre;
228
+ width: 100%;
229
+ overflow-x: auto;
230
+
231
+ // For very small screens, allow wrapping
232
+ @include media-down('xs') {
233
+ white-space: pre-wrap;
234
+ word-break: break-word;
235
+ }
236
+ }
237
+
238
+ // Add horizontal scrolling for code that can't wrap nicely
239
+ &.mw-code-nowrap {
240
+ pre {
241
+ white-space: pre;
242
+ code {
243
+ white-space: pre;
244
+ }
245
+ }
246
+ }
247
+ }
248
+
249
+ .mw-terminal {
250
+ width: 100%;
251
+ }
252
+ }