@chronogrove/ui 0.76.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 (70) hide show
  1. package/.turbo/turbo-test$colon$coverage.log +44 -0
  2. package/.turbo/turbo-test.log +168 -0
  3. package/LICENSE +9 -0
  4. package/README.md +41 -0
  5. package/babel.config.cjs +9 -0
  6. package/coverage/clover.xml +131 -0
  7. package/coverage/coverage-final.json +13 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/browser-sync.js.html +268 -0
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +161 -0
  13. package/coverage/lcov-report/prettify.css +1 -0
  14. package/coverage/lcov-report/prettify.js +2 -0
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +210 -0
  17. package/coverage/lcov-report/src/button.js.html +160 -0
  18. package/coverage/lcov-report/src/color-mode/browser-sync.js.html +268 -0
  19. package/coverage/lcov-report/src/color-mode/constants.js.html +121 -0
  20. package/coverage/lcov-report/src/color-mode/head-inline.js.html +304 -0
  21. package/coverage/lcov-report/src/color-mode/index.html +176 -0
  22. package/coverage/lcov-report/src/color-mode/index.js.html +124 -0
  23. package/coverage/lcov-report/src/color-mode/normalize.js.html +112 -0
  24. package/coverage/lcov-report/src/color-mode/resolve-theme-colors.js.html +154 -0
  25. package/coverage/lcov-report/src/color-toggle.js.html +142 -0
  26. package/coverage/lcov-report/src/emotion-cache.js.html +151 -0
  27. package/coverage/lcov-report/src/helpers/index.html +116 -0
  28. package/coverage/lcov-report/src/helpers/isDarkMode.js.html +91 -0
  29. package/coverage/lcov-report/src/index.html +161 -0
  30. package/coverage/lcov-report/src/provider.js.html +124 -0
  31. package/coverage/lcov-report/src/skip-nav/SkipNavContent.js.html +133 -0
  32. package/coverage/lcov-report/src/skip-nav/SkipNavLink.js.html +301 -0
  33. package/coverage/lcov-report/src/skip-nav/index.html +131 -0
  34. package/coverage/lcov-report/src/theme.js.html +2143 -0
  35. package/coverage/lcov.info +309 -0
  36. package/jest.config.cjs +32 -0
  37. package/jest.setup.cjs +1 -0
  38. package/package.json +73 -0
  39. package/src/__snapshots__/theme.spec.js.snap +1027 -0
  40. package/src/button.js +25 -0
  41. package/src/button.spec.js +16 -0
  42. package/src/color-mode/browser-sync.js +61 -0
  43. package/src/color-mode/browser-sync.node.spec.js +15 -0
  44. package/src/color-mode/browser-sync.spec.js +137 -0
  45. package/src/color-mode/constants.js +12 -0
  46. package/src/color-mode/head-inline.js +73 -0
  47. package/src/color-mode/head-inline.spec.js +33 -0
  48. package/src/color-mode/index.js +13 -0
  49. package/src/color-mode/normalize.js +9 -0
  50. package/src/color-mode/normalize.spec.js +17 -0
  51. package/src/color-mode/resolve-theme-colors.js +23 -0
  52. package/src/color-mode/resolve-theme-colors.spec.js +39 -0
  53. package/src/color-toggle.js +19 -0
  54. package/src/color-toggle.spec.js +35 -0
  55. package/src/emotion-cache.js +22 -0
  56. package/src/emotion-cache.spec.js +30 -0
  57. package/src/helpers/isDarkMode.js +2 -0
  58. package/src/helpers/isDarkMode.spec.js +9 -0
  59. package/src/index.js +1 -0
  60. package/src/provider.js +13 -0
  61. package/src/provider.spec.js +25 -0
  62. package/src/skip-nav/SkipNavContent.js +16 -0
  63. package/src/skip-nav/SkipNavContent.spec.js +22 -0
  64. package/src/skip-nav/SkipNavLink.js +72 -0
  65. package/src/skip-nav/SkipNavLink.spec.js +56 -0
  66. package/src/skip-nav/index.js +2 -0
  67. package/src/theme.js +686 -0
  68. package/src/theme.spec.js +56 -0
  69. package/test-utils/mock-theme-toggles-react.js +10 -0
  70. package/turbo.json +12 -0
package/src/theme.js ADDED
@@ -0,0 +1,686 @@
1
+ import { tailwind } from '@theme-ui/presets'
2
+ import { merge } from 'theme-ui'
3
+
4
+ const fonts = {
5
+ sans: '-apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, Ubuntu, roboto, noto, segoe ui, arial, sans-serif',
6
+ serif:
7
+ 'Iowan Old Style, Apple Garamond, Georgia, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',
8
+ mono: 'Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace'
9
+ }
10
+
11
+ export const floatOnHover = {
12
+ transition: 'all 200ms ease-in-out',
13
+
14
+ '&:hover, &:focus': {
15
+ transform: 'scale(1.015)',
16
+ boxShadow: 'lg'
17
+ }
18
+ }
19
+
20
+ const GradientBanner = {
21
+ /**
22
+ * Gradient animation created by @bibby0912.
23
+ * Visit https://codepen.io/bibby0912/pen/mErWyA
24
+ */
25
+ maxWidth: '100%',
26
+ height: '340px',
27
+ border: '20px solid transparent',
28
+ boxSizing: 'border-box',
29
+ padding: '1rem',
30
+ display: 'flex',
31
+ justifyContent: 'center',
32
+ alignItems: 'center',
33
+ color: 'black',
34
+
35
+ backgroundImage: `
36
+ linear-gradient(white, white),
37
+ linear-gradient(180deg, cornflowerblue, purple 50%, cornflowerblue)`,
38
+
39
+ backgroundRepeat: 'no-repeat',
40
+ backgroundSize: '100% 100%, 100% 200%',
41
+ backgroundPosition: '0 0, 0 100%',
42
+ backgroundOrigin: 'padding-box, border-box',
43
+ animation: 'highlight 3s infinite alternate',
44
+
45
+ '@keyframes highlight': {
46
+ '100%': {
47
+ backgroundPosition: '0 0, 0 0'
48
+ }
49
+ }
50
+ }
51
+
52
+ export const glassmorhismPanel = {
53
+ borderRadius: '10px',
54
+ backdropFilter: 'blur(10px)',
55
+ WebkitBackdropFilter: 'blur(10px)',
56
+ boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',
57
+ border: '1px solid rgba(255, 255, 255, 0.15)'
58
+ }
59
+
60
+ export const backdropBlurStrong = {
61
+ backdropFilter: 'blur(20px) saturate(180%)',
62
+ WebkitBackdropFilter: 'blur(20px) saturate(180%)'
63
+ }
64
+
65
+ export const backdropBlurMedium = {
66
+ backdropFilter: 'blur(12px) saturate(150%)',
67
+ WebkitBackdropFilter: 'blur(12px) saturate(150%)'
68
+ }
69
+
70
+ export const backdropBlurLight = {
71
+ backdropFilter: 'blur(8px) saturate(120%)',
72
+ WebkitBackdropFilter: 'blur(8px) saturate(120%)'
73
+ }
74
+
75
+ export const card = {
76
+ borderRadius: 'card',
77
+ background: 'var(--theme-ui-colors-panel-background)',
78
+ color: 'var(--theme-ui-colors-panel-text)',
79
+ boxShadow: 'default',
80
+ flexGrow: 1,
81
+ padding: 3,
82
+ fontSize: [1, 2],
83
+ textDecoration: 'none',
84
+ backdropFilter: 'blur(12px) saturate(150%)',
85
+ WebkitBackdropFilter: 'blur(12px) saturate(150%)'
86
+ }
87
+
88
+ export const metricCard = {
89
+ backgroundColor: 'var(--theme-ui-colors-panel-background)',
90
+ boxShadow: 'none',
91
+ color: 'var(--theme-ui-colors-panel-text)',
92
+ span: {
93
+ fontFamily: 'heading',
94
+ fontWeight: 'bold',
95
+ padding: 2
96
+ }
97
+ }
98
+
99
+ export const PostCard = {
100
+ ...card,
101
+ ...floatOnHover,
102
+ ...glassmorhismPanel,
103
+ backgroundColor: 'var(--theme-ui-colors-panel-background)',
104
+ color: 'var(--theme-ui-colors-panel-text)',
105
+ display: 'flex',
106
+ height: '100%',
107
+ flexDirection: 'column',
108
+ '.card-media': {
109
+ mb: 2,
110
+ overflow: 'hidden'
111
+ },
112
+ '.read-more-icon': {
113
+ display: 'inline',
114
+ transition: 'all 250ms ease-in',
115
+ opacity: 0,
116
+ paddingLeft: 0
117
+ },
118
+ '&:hover .read-more-icon': {
119
+ opacity: 1,
120
+ paddingLeft: '8px'
121
+ }
122
+ }
123
+
124
+ export default merge(tailwind, {
125
+ config: {
126
+ initialColorModeName: 'default',
127
+ // Disabled: SSR no-flash script already sets initial mode from prefers-color-scheme when
128
+ // localStorage is empty. When true, Theme UI can overwrite the user's explicit choice with
129
+ // system preference and cause mode to flip (dark ↔ default) and light text on dark background.
130
+ useColorSchemeMediaQuery: false,
131
+ useCustomProperties: true,
132
+ useLocalStorage: true
133
+ },
134
+
135
+ badges: {
136
+ primary: {
137
+ color: 'background',
138
+ bg: 'primary'
139
+ },
140
+ outline: {
141
+ color: 'primary',
142
+ bg: 'transparent',
143
+ boxShadow: 'inset 0 0 0 1px',
144
+ fontSize: 1
145
+ },
146
+ /** Non-interactive metrics in widget headers: match text, not primary */
147
+ metrics: {
148
+ color: 'text',
149
+ bg: 'transparent',
150
+ boxShadow: theme => `inset 0 0 0 1px ${theme.colors.text}`,
151
+ fontSize: 1
152
+ }
153
+ },
154
+
155
+ buttons: {
156
+ primary: {
157
+ color: 'background',
158
+ bg: 'primary'
159
+ },
160
+ secondary: {
161
+ color: 'background',
162
+ bg: 'secondary'
163
+ },
164
+ gray: {
165
+ color: 'background',
166
+ bg: 'gray'
167
+ },
168
+ /** Ghost/outline style used by ActionButton, PaginationButton, SkipNavLink, CTAs */
169
+ action: {
170
+ color: 'primary',
171
+ bg: 'transparent',
172
+ border: '1px solid',
173
+ borderColor: 'primary',
174
+ borderRadius: '6px',
175
+ fontWeight: 'medium',
176
+ cursor: 'pointer',
177
+ transition: 'all 0.2s ease',
178
+ '&:hover': {
179
+ bg: theme => `rgba(${theme.colors.primaryRgb}, 0.2)`
180
+ },
181
+ '&:focus': {
182
+ outline: 'none',
183
+ boxShadow: theme => `0 0 0 2px ${theme.colors.primary}40`
184
+ },
185
+ '&:active': {
186
+ transform: 'scale(0.98)'
187
+ }
188
+ },
189
+ readMore: {
190
+ color: 'primary',
191
+ bg: 'transparent',
192
+ border: theme => `1px solid ${theme.colors.primary}`,
193
+ borderRadius: 'card',
194
+ px: 3,
195
+ py: 2,
196
+ fontSize: [1, 2],
197
+ fontWeight: 'medium',
198
+ cursor: 'pointer',
199
+ transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
200
+ position: 'relative',
201
+ overflow: 'hidden',
202
+ '&::before': {
203
+ content: '""',
204
+ position: 'absolute',
205
+ top: 0,
206
+ left: '-100%',
207
+ width: '100%',
208
+ height: '100%',
209
+ background: 'linear-gradient(90deg, transparent, rgba(66, 46, 163, 0.1), transparent)',
210
+ transition: 'left 0.5s ease-in-out'
211
+ },
212
+ '&:hover, &:focus': {
213
+ bg: 'primary',
214
+ color: 'background',
215
+ transform: 'translateY(-2px)',
216
+ boxShadow: '0 4px 12px rgba(66, 46, 163, 0.3)',
217
+ '&::before': {
218
+ left: '100%'
219
+ }
220
+ },
221
+ '&:active': {
222
+ transform: 'translateY(0)',
223
+ boxShadow: '0 2px 8px rgba(66, 46, 163, 0.2)'
224
+ }
225
+ }
226
+ },
227
+
228
+ cards: {
229
+ /* The <Card /> default style. Used when no variant is defined. */
230
+ primary: {
231
+ ...card
232
+ },
233
+
234
+ actionCard: {
235
+ ...card,
236
+ ...floatOnHover,
237
+ ...glassmorhismPanel,
238
+ borderLeft: theme => `2px solid ${theme.colors.primary}`,
239
+ a: {
240
+ ':hover': 'pointer'
241
+ }
242
+ },
243
+
244
+ /** Non-interactive content (AI Summary, Contribution Graph): same look as card + glass, neutral left border, no hover */
245
+ presentationalCard: {
246
+ ...card,
247
+ ...glassmorhismPanel,
248
+ borderLeft: theme => `2px solid ${theme.colors.gray?.[6] ?? '#9ca3af'}`
249
+ },
250
+
251
+ metricCard: {
252
+ ...card,
253
+ ...metricCard
254
+ },
255
+
256
+ /* The following styles represent specific card components, indicated in PascalCase. */
257
+
258
+ UserProfile: {
259
+ padding: theme => ['none', `0 ${theme.space[3]} 0 0`],
260
+ border: 'none',
261
+ color: 'white',
262
+ background: 'none'
263
+ },
264
+
265
+ UserProfileDark: {
266
+ ...card,
267
+ padding: theme => ['none', `0 ${theme.space[3]} 0 0`],
268
+ color: 'white',
269
+ borderBottom: 'none',
270
+ backgroundColor: 'none',
271
+ boxShadow: 'none'
272
+ },
273
+
274
+ StatusCardDark: {
275
+ backgroundColor: '#1e2530'
276
+ },
277
+
278
+ PostCard,
279
+
280
+ aiSummary: {
281
+ ...card,
282
+ ...glassmorhismPanel,
283
+ borderLeft: theme => `2px solid ${theme.colors.gray?.[6] ?? '#9ca3af'}`,
284
+ '@keyframes pulse': {
285
+ '0%, 100%': {
286
+ opacity: 1
287
+ },
288
+ '50%': {
289
+ opacity: 0.7
290
+ }
291
+ },
292
+ '@keyframes gentleGlow': {
293
+ '0%': {
294
+ filter: 'drop-shadow(0 0 12px rgba(66, 46, 163, 0.4))'
295
+ },
296
+ '100%': {
297
+ filter: 'drop-shadow(0 0 20px rgba(66, 46, 163, 0.7))'
298
+ }
299
+ },
300
+ '@keyframes gentleFloat': {
301
+ '0%, 100%': {
302
+ transform: 'translateY(0px)'
303
+ },
304
+ '50%': {
305
+ transform: 'translateY(-4px)'
306
+ }
307
+ },
308
+ '@keyframes slideInFromLeft': {
309
+ '0%': {
310
+ opacity: 0,
311
+ transform: 'translateX(-30px)'
312
+ },
313
+ '100%': {
314
+ opacity: 1,
315
+ transform: 'translateX(0)'
316
+ }
317
+ },
318
+ '@keyframes expandWidth': {
319
+ '0%': {
320
+ width: '0%'
321
+ },
322
+ '100%': {
323
+ width: '100%'
324
+ }
325
+ },
326
+ '@keyframes gentleBounce': {
327
+ '0%, 20%, 50%, 80%, 100%': {
328
+ transform: 'translateY(0)'
329
+ },
330
+ '40%': {
331
+ transform: 'translateY(-4px)'
332
+ },
333
+ '60%': {
334
+ transform: 'translateY(-2px)'
335
+ }
336
+ },
337
+ '@keyframes blink': {
338
+ '0%, 50%': {
339
+ opacity: 1
340
+ },
341
+ '51%, 100%': {
342
+ opacity: 0
343
+ }
344
+ },
345
+ '@keyframes fadeInUp': {
346
+ '0%': {
347
+ opacity: 0,
348
+ transform: 'translateY(20px)'
349
+ },
350
+ '100%': {
351
+ opacity: 1,
352
+ transform: 'translateY(0)'
353
+ }
354
+ },
355
+ '@keyframes slideDown': {
356
+ '0%': {
357
+ opacity: 0,
358
+ maxHeight: '0px',
359
+ overflow: 'hidden'
360
+ },
361
+ '100%': {
362
+ opacity: 1,
363
+ maxHeight: '1000px',
364
+ overflow: 'visible'
365
+ }
366
+ }
367
+ }
368
+ },
369
+
370
+ colors: {
371
+ accent: 'deeppink',
372
+ background: '#fdf8f5',
373
+ 'panel-background': 'rgba(255, 255, 255, 0.45)',
374
+ 'panel-divider': () => '1px solid rgba(255, 229, 224, 0.17)',
375
+ 'panel-highlight': theme => theme.colors.gray[1],
376
+ modes: {
377
+ dark: {
378
+ background: '#14141F',
379
+ 'panel-background': 'rgba(20, 20, 31, 0.45)',
380
+ 'panel-divider': theme => `1px solid ${theme.colors.gray[8]}`,
381
+ 'panel-highlight': theme => theme.colors.gray[8],
382
+ primary: '#4a9eff',
383
+ primaryRgb: '74, 158, 255',
384
+ text: '#fff',
385
+ textMuted: '#d8d8d8',
386
+ tableText: '#fff',
387
+ tableBackground: 'rgba(30, 30, 47, 0.45)',
388
+ tableHeaderBackground: 'rgba(30, 37, 48, 0.8)',
389
+ tableRowBackground: 'rgba(30, 30, 47, 0.25)',
390
+ tableRowAlternateBackground: 'rgba(30, 37, 48, 0.5)',
391
+ tableBorder: 'rgba(255, 255, 255, 0.1)'
392
+ }
393
+ },
394
+ primary: '#422EA3',
395
+ primaryRgb: '66, 46, 163',
396
+ secondary: '#711E9B',
397
+ secondaryGradient: 'linear-gradient(45deg, #4527a0 0%, #711e9b 100%)',
398
+ tableText: '#111',
399
+ tableBackground: 'light',
400
+ tableHeaderBackground: '#f4f4f9',
401
+ tableRowBackground: 'transparent',
402
+ tableRowAlternateBackground: '#fafafa',
403
+ tableBorder: 'muted',
404
+ text: '#111',
405
+ textMuted: '#333'
406
+ },
407
+
408
+ fonts: {
409
+ body: fonts.serif,
410
+ heading: fonts.sans,
411
+ monospace: fonts.mono,
412
+ sans: fonts.sans,
413
+ serif: fonts.serif
414
+ },
415
+
416
+ fontSizes: ['.875rem', '1rem', '1.25rem', '1.375rem', '1.5rem', '1.875rem', '2.25rem', '3rem', '4rem', '4.5rem'],
417
+
418
+ layout: {
419
+ container: {
420
+ maxWidth: ['', '98%', '', '', '1440px'],
421
+ py: [2, 3],
422
+ px: [3, 4]
423
+ }
424
+ },
425
+
426
+ links: {
427
+ /** Widget "Browse" / "Visit Profile" CTAs: plain text on page, high contrast (WCAG compliant) */
428
+ widgetCta: {
429
+ display: 'inline-flex',
430
+ alignItems: 'center',
431
+ fontSize: 1,
432
+ fontFamily: 'heading',
433
+ lineHeight: 1.25,
434
+ color: 'text',
435
+ textDecoration: 'none',
436
+ transition: 'color 0.2s ease',
437
+ // Nudge CTAs up 1px for visual alignment with widget headline (does not affect layout)
438
+ transform: 'translateY(-1px)',
439
+ '&:hover, &:focus': {
440
+ color: 'primary',
441
+ textDecoration: 'none'
442
+ },
443
+ '&:focus': {
444
+ outline: 'none',
445
+ boxShadow: theme => `0 0 0 2px ${theme.colors.primary}40`
446
+ }
447
+ }
448
+ },
449
+
450
+ radii: {
451
+ default: '4px',
452
+ card: '8px'
453
+ },
454
+
455
+ global: {
456
+ '@keyframes wobble': {
457
+ '0%, 100%': { transform: 'rotate(0deg)' },
458
+ '15%': { transform: 'rotate(-15deg)' },
459
+ '30%': { transform: 'rotate(10deg)' },
460
+ '45%': { transform: 'rotate(-10deg)' },
461
+ '60%': { transform: 'rotate(5deg)' },
462
+ '75%': { transform: 'rotate(-5deg)' }
463
+ },
464
+ '@media (prefers-reduced-motion: reduce)': {
465
+ '.emoji': {
466
+ animation: 'none !important'
467
+ }
468
+ }
469
+ },
470
+
471
+ styles: {
472
+ root: {
473
+ color: 'text',
474
+ display: 'flex',
475
+ flexDirection: 'column',
476
+ minHeight: '100vh',
477
+
478
+ fontFamily: 'body',
479
+ fontWeight: 'body',
480
+ lineHeight: 'body'
481
+ },
482
+
483
+ p: {
484
+ fontSize: [2, 3]
485
+ },
486
+
487
+ ul: {
488
+ fontSize: [2, 3]
489
+ },
490
+
491
+ outlined: {
492
+ border: '4px solid #efefef'
493
+ },
494
+
495
+ table: {
496
+ backgroundColor: 'rgba(255, 255, 255, 0.35)',
497
+ color: 'tableText',
498
+ width: '100%',
499
+ borderCollapse: 'collapse',
500
+ borderSpacing: 0,
501
+ marginBottom: '1.5rem',
502
+ overflow: 'hidden',
503
+ borderRadius: '10px',
504
+ boxShadow: '0 0 10px rgba(0, 0, 0, 0.1)',
505
+ 'th, td': {
506
+ fontSize: '1.125em',
507
+ textAlign: 'left',
508
+ padding: '12px 15px'
509
+ },
510
+ th: {
511
+ backgroundColor: 'tableHeaderBackground',
512
+ fontWeight: 'bold',
513
+ textTransform: 'uppercase',
514
+ letterSpacing: '0.05em'
515
+ },
516
+ 'tbody tr:nth-of-type(odd)': {
517
+ backgroundColor: 'tableRowAlternateBackground'
518
+ },
519
+ 'tbody tr:nth-of-type(even)': {
520
+ backgroundColor: 'tableRowBackground'
521
+ }
522
+ },
523
+
524
+ tableDark: {
525
+ ...glassmorhismPanel,
526
+ backgroundColor: 'rgba(30, 30, 47, 0.35)',
527
+ color: 'tableText',
528
+ width: '100%',
529
+ borderCollapse: 'collapse',
530
+ borderSpacing: 0,
531
+ marginBottom: '1.5rem',
532
+ overflow: 'hidden',
533
+ borderRadius: '10px',
534
+ boxShadow: '0 0 20px rgba(0, 0, 0, 0.3)',
535
+ 'th, td': {
536
+ fontSize: '1.125em',
537
+ textAlign: 'left',
538
+ padding: '12px 15px'
539
+ },
540
+ th: {
541
+ backgroundColor: 'tableHeaderBackground',
542
+ fontWeight: 'bold',
543
+ textTransform: 'uppercase',
544
+ letterSpacing: '0.05em'
545
+ },
546
+ 'tbody tr:nth-of-type(odd)': {
547
+ backgroundColor: 'tableRowAlternateBackground'
548
+ },
549
+ 'tbody tr:nth-of-type(even)': {
550
+ backgroundColor: 'tableRowBackground'
551
+ }
552
+ },
553
+
554
+ text: {
555
+ inverse: {
556
+ color: 'muted'
557
+ },
558
+ title: {
559
+ fontFamily: 'fonts.sans'
560
+ }
561
+ },
562
+
563
+ GitHubCardFooter: {
564
+ display: 'flex',
565
+ justifyContent: 'space-between',
566
+ mt: 2
567
+ },
568
+
569
+ PageFooter: {
570
+ zIndex: '10',
571
+ color: 'text',
572
+ a: {
573
+ color: 'text'
574
+ },
575
+ width: '100%',
576
+ display: 'block'
577
+ },
578
+
579
+ Book: {
580
+ filter: theme => `drop-shadow(${theme.shadows.default})`,
581
+ '&:hover, &:focus': {
582
+ filter: theme => `drop-shadow(${theme.shadows.xl})`,
583
+ transform: 'scale(1.01)',
584
+ transition: 'all .35s ease-in-out'
585
+ }
586
+ },
587
+
588
+ Container: {
589
+ py: [2, 3],
590
+ px: [3, 4]
591
+ },
592
+
593
+ GradientBanner,
594
+
595
+ GradientBannerDark: {
596
+ ...GradientBanner,
597
+ backgroundImage: `
598
+ linear-gradient(#252e3c, #252e3c),
599
+ linear-gradient(270deg, #00D7B9, #B95DD7 50%, #FFB367 100%);`,
600
+ color: 'light'
601
+ },
602
+
603
+ IntroExperienceSlide: {
604
+ opacity: 0,
605
+ height: 0,
606
+ display: 'flex',
607
+ visibility: 'hidden',
608
+ '&.active-slide': {
609
+ display: 'block',
610
+ height: 'auto',
611
+ opacity: 1,
612
+ visibility: 'initial'
613
+ }
614
+ },
615
+
616
+ Header: {
617
+ alignItems: 'center',
618
+ color: 'text',
619
+ display: 'block',
620
+ transition: 'all 0.3s ease-in-out',
621
+ width: '100%'
622
+ },
623
+
624
+ InstagramItem: {
625
+ ...floatOnHover,
626
+ background: 'none',
627
+ border: 'none',
628
+ boxShadow: 'md',
629
+ cursor: 'pointer',
630
+ overflow: 'hidden',
631
+ borderRadius: '8px',
632
+ p: 0
633
+ },
634
+
635
+ TopNavigation: {
636
+ color: 'white'
637
+ },
638
+
639
+ VideoWrapper: {
640
+ position: 'relative',
641
+ paddingBottom: '56.25%' /* 16:9 */,
642
+ paddingTop: '25px',
643
+ height: 0,
644
+ iframe: {
645
+ border: 0,
646
+ position: 'absolute',
647
+ top: 0,
648
+ left: 0,
649
+ width: '100%',
650
+ height: '100%'
651
+ }
652
+ },
653
+
654
+ WidgetFooter: {
655
+ color: 'text',
656
+ fontFamily: 'heading',
657
+ textAlign: ['center', 'right']
658
+ },
659
+
660
+ '.footnotes': {
661
+ fontSize: theme => theme.fontSizes[1]
662
+ },
663
+
664
+ '.text-center': {
665
+ textAlign: 'center'
666
+ }
667
+ },
668
+
669
+ text: {
670
+ title: {
671
+ color: 'primary',
672
+ fontFamily: 'heading',
673
+ fontSize: [1, 2],
674
+ fontWeight: '550',
675
+ textTransform: 'uppercase'
676
+ }
677
+ },
678
+
679
+ variants: {
680
+ cards: {
681
+ dark: {
682
+ backgroundColor: 'teal'
683
+ }
684
+ }
685
+ }
686
+ })