@chrryai/chrry 1.1.78

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 (116) hide show
  1. package/About.module.scss +112 -0
  2. package/Account.module.scss +159 -0
  3. package/AddToHomeScreen.module.scss +126 -0
  4. package/Affiliate.module.scss +245 -0
  5. package/AffiliateDashboard.module.scss +269 -0
  6. package/Agent.module.scss +197 -0
  7. package/AnimatedWrapper.module.scss +0 -0
  8. package/App.module.scss +283 -0
  9. package/Bookmark.module.scss +15 -0
  10. package/Calendar.module.scss +824 -0
  11. package/CharacterProfiles.module.scss +29 -0
  12. package/Chat.module.scss +932 -0
  13. package/Checkbox.module.scss +67 -0
  14. package/Chrry.module.scss +69 -0
  15. package/Collaborate.module.scss +22 -0
  16. package/CollaborationStatus.module.scss +17 -0
  17. package/CollaborationTooltip.module.scss +257 -0
  18. package/ColorScheme.module.scss +24 -0
  19. package/EditThread.module.scss +51 -0
  20. package/EmptyStateTips.module.scss +52 -0
  21. package/EnableNotifications.module.scss +20 -0
  22. package/EventModal.module.scss +277 -0
  23. package/Img.module.scss +48 -0
  24. package/Instructions.module.scss +333 -0
  25. package/LICENSE +664 -0
  26. package/LanguageSwitcher.module.scss +21 -0
  27. package/Loading.module.scss +32 -0
  28. package/MarkdownContent.module.scss +161 -0
  29. package/MemoryConsent.module.scss +41 -0
  30. package/Menu.module.scss +272 -0
  31. package/Message.module.scss +470 -0
  32. package/Messages.module.scss +86 -0
  33. package/Modal.module.scss +118 -0
  34. package/README.md +112 -0
  35. package/Search.module.scss +26 -0
  36. package/Select.module.scss +32 -0
  37. package/Share.module.scss +84 -0
  38. package/Sidebar.module.scss +69 -0
  39. package/SignIn.module.scss +129 -0
  40. package/Skeleton.module.scss +232 -0
  41. package/SplashScreen.module.scss +189 -0
  42. package/Star.module.scss +15 -0
  43. package/Store.module.scss +240 -0
  44. package/Subscribe.module.scss +219 -0
  45. package/Testimonials.module.scss +33 -0
  46. package/Thread.module.scss +111 -0
  47. package/Threads.module.scss +105 -0
  48. package/TypingIndicator.module.scss +93 -0
  49. package/Users.module.scss +98 -0
  50. package/Version.module.scss +22 -0
  51. package/Weather.module.scss +31 -0
  52. package/Why.module.scss +79 -0
  53. package/__tests__/README.md +126 -0
  54. package/__tests__/TestComponent.module.scss +236 -0
  55. package/animations.scss +163 -0
  56. package/breakpoints.scss +8 -0
  57. package/context/AppContext.module.scss +22 -0
  58. package/context/providers/README.md +329 -0
  59. package/dist/About.module-RPTFOKG6.scss +112 -0
  60. package/dist/Account.module-AA2NOD5S.scss +159 -0
  61. package/dist/AddToHomeScreen.module-P6HAQ4QD.scss +126 -0
  62. package/dist/Affiliate.module-YM7MG54E.scss +245 -0
  63. package/dist/AffiliateDashboard.module-SZQJJBME.scss +269 -0
  64. package/dist/Agent.module-66YIBDMM.scss +197 -0
  65. package/dist/App.module-TOWYJFPB.scss +283 -0
  66. package/dist/Bookmark.module-UVMQ4TED.scss +15 -0
  67. package/dist/Calendar.module-HHEIXJEA.scss +824 -0
  68. package/dist/CharacterProfiles.module-KABR34TV.scss +29 -0
  69. package/dist/Chat.module-Y4TGJLBQ.scss +932 -0
  70. package/dist/Checkbox.module-RNW2YOC5.scss +67 -0
  71. package/dist/Chrry.module-SLPTRY52.scss +69 -0
  72. package/dist/Collaborate.module-MLRE23FZ.scss +22 -0
  73. package/dist/CollaborationStatus.module-CRGOOW56.scss +17 -0
  74. package/dist/ColorScheme.module-N7SJ5N52.scss +24 -0
  75. package/dist/EditThread.module-L3HOEGS3.scss +51 -0
  76. package/dist/EmptyStateTips.module-JLNPQ4OO.scss +52 -0
  77. package/dist/EnableNotifications.module-C4MYQTUA.scss +20 -0
  78. package/dist/EventModal.module-K7VNKTCE.scss +277 -0
  79. package/dist/Instructions.module-JMFWEXAP.scss +333 -0
  80. package/dist/LanguageSwitcher.module-MT2SIZ4L.scss +21 -0
  81. package/dist/Loading.module-OU42QILE.scss +32 -0
  82. package/dist/MarkdownContent.module-64GHE3YP.scss +161 -0
  83. package/dist/MemoryConsent.module-FZL3REH4.scss +41 -0
  84. package/dist/Menu.module-RVXPXILR.scss +272 -0
  85. package/dist/Message.module-5UUYCVY2.scss +470 -0
  86. package/dist/Messages.module-GBPUAPAI.scss +86 -0
  87. package/dist/Modal.module-TOU4YLFQ.scss +118 -0
  88. package/dist/Search.module-GU3BRADG.scss +26 -0
  89. package/dist/Select.module-R7QM256C.scss +32 -0
  90. package/dist/Share.module-VQBCBSA5.scss +84 -0
  91. package/dist/Sidebar.module-AUSDVTCY.scss +69 -0
  92. package/dist/SignIn.module-53SOSG63.scss +129 -0
  93. package/dist/Skeleton.module-REMEBLDY.scss +232 -0
  94. package/dist/Store.module-NP6776GY.scss +240 -0
  95. package/dist/Subscribe.module-NVGQ57RA.scss +219 -0
  96. package/dist/Thread.module-QAJI6KOQ.scss +111 -0
  97. package/dist/Threads.module-J54DFQQZ.scss +105 -0
  98. package/dist/Users.module-ZRHCY63D.scss +98 -0
  99. package/dist/Version.module-MLMD7GW5.scss +22 -0
  100. package/dist/Weather.module-NT6XFKA7.scss +31 -0
  101. package/dist/Why.module-UVZJCJF7.scss +79 -0
  102. package/dist/index.d.mts +1408 -0
  103. package/dist/index.d.ts +1408 -0
  104. package/dist/index.js +44600 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/index.mjs +44575 -0
  107. package/dist/index.mjs.map +1 -0
  108. package/dist/react-tooltip.min-LLVNRY3Z.css +1 -0
  109. package/globals.css +91 -0
  110. package/globals.scss +585 -0
  111. package/icons/README.md +150 -0
  112. package/package.json +118 -0
  113. package/styles/view-transitions.css +207 -0
  114. package/toRem.scss +6 -0
  115. package/utils.module.scss +116 -0
  116. package/utils.scss +88 -0
package/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # 🍒 Chrry
2
+
3
+ **A modern, cross-platform UI library for React, React Native, and Next.js**
4
+
5
+ Built by the team behind [Vex](https://askvex.com) - the AI assistant that helps you get things done.
6
+
7
+ ## ✨ Features
8
+
9
+ - 🎨 **Beautiful Components** - Modern, accessible UI components
10
+ - 📱 **Cross-Platform** - Works on Web, iOS, Android, and Browser Extensions
11
+ - 🎯 **TypeScript First** - Full type safety out of the box
12
+ - 🌙 **Dark Mode** - Built-in theme support
13
+ - 🌍 **i18n Ready** - Multi-language support included
14
+ - ⚡ **Performance** - Optimized for speed and bundle size
15
+ - 🎭 **Customizable** - Easy to theme and extend
16
+
17
+ ## 🌶️ Pepper Router
18
+
19
+ Chrry pairs perfectly with **[Pepper Router](https://github.com/askvex/pepper)** - our universal router with view transitions:
20
+
21
+ ```bash
22
+ npm install @askvex/pepper
23
+ ```
24
+
25
+ **Features:**
26
+
27
+ - ⚡ Zero-latency navigation
28
+ - 🎨 Built-in View Transitions API
29
+ - 📱 Works in web, React Native, and browser extensions
30
+ - 🚀 SSR-friendly
31
+
32
+ [Learn more →](https://npmjs.com/package/@askvex/pepper)
33
+
34
+ ## 📦 Installation
35
+
36
+ ```bash
37
+ npm install @askvex/chrry
38
+ ```
39
+
40
+ **Note:** Chrry is published as TypeScript source. Your bundler (Next.js, Vite, etc.) will compile it.
41
+
42
+ ## 🚀 Quick Start
43
+
44
+ ```tsx
45
+ import { Button, Modal, Chat } from "@askvex/chrry"
46
+ import { Star, Heart } from "@askvex/chrry/icons"
47
+
48
+ function App() {
49
+ return (
50
+ <div>
51
+ <Button>Click me</Button>
52
+ <Star size={24} />
53
+ </div>
54
+ )
55
+ }
56
+ ```
57
+
58
+ ## 📚 Documentation
59
+
60
+ Visit [chrry.dev](https://chrry.dev) for full documentation, examples, and guides.
61
+
62
+ ## 🛠️ Components
63
+
64
+ Chrry includes 50+ production-ready components:
65
+
66
+ - **Layout**: Sidebar, Menu, Modal, Skeleton
67
+ - **Forms**: Input, Select, Checkbox, Search
68
+ - **Data Display**: Message, Thread, Calendar, Weather
69
+ - **Feedback**: Loading, Toast, EmptyState
70
+ - **Navigation**: Breadcrumbs, Tabs, Pagination
71
+ - **And many more...**
72
+
73
+ ## 🎨 Theming
74
+
75
+ Chrry supports custom themes and dark mode out of the box:
76
+
77
+ ```tsx
78
+ import { ThemeProvider } from "@askvex/chrry/context/providers"
79
+
80
+ function App() {
81
+ return <ThemeProvider theme="dark">{/* Your app */}</ThemeProvider>
82
+ }
83
+ ```
84
+
85
+ ## 🌍 Internationalization
86
+
87
+ Built-in support for multiple languages:
88
+
89
+ ```tsx
90
+ import { locale } from "@askvex/chrry/locales"
91
+
92
+ // Supports: en, es, fr, de, ja, ko, nl, pt, tr, zh
93
+ ```
94
+
95
+ ## 🤝 Contributing
96
+
97
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
98
+
99
+ ## 📄 License
100
+
101
+ MIT © [AskVex](https://askvex.com)
102
+
103
+ ## 🔗 Links
104
+
105
+ - [Website](https://chrry.dev)
106
+ - [Documentation](https://chrry.dev/docs)
107
+ - [GitHub](https://github.com/AskVex/chrry)
108
+ - [npm](https://www.npmjs.com/package/@askvex/chrry)
109
+
110
+ ---
111
+
112
+ **Built with ❤️ by the Vex team**
@@ -0,0 +1,26 @@
1
+ @use "./toRem.scss";
2
+
3
+ .searchBoxWrapper {
4
+ width: 100%;
5
+ position: relative;
6
+ }
7
+
8
+ .searchIcon {
9
+ position: absolute;
10
+ left: toRem.toRem(12);
11
+ top: toRem.toRem(12);
12
+ color: var(--shade-6);
13
+ width: toRem.toRem(16);
14
+ height: toRem.toRem(16);
15
+ }
16
+
17
+ input.search {
18
+ border: toRem.toRem(1) solid var(--shade-2);
19
+ border-radius: var(--radius);
20
+ padding: toRem.toRem(10) toRem.toRem(10) toRem.toRem(10) toRem.toRem(35) !important;
21
+ width: 100%;
22
+ background-color: var(--background);
23
+ color: var(--foreground);
24
+ font-size: toRem.toRem(16);
25
+ transition: var(--border-transition);
26
+ }
@@ -0,0 +1,32 @@
1
+ @use "./toRem.scss";
2
+
3
+ .customSelect {
4
+ position: relative;
5
+ display: inline-flex;
6
+
7
+ select {
8
+ appearance: none;
9
+ -webkit-appearance: none;
10
+ padding: 0.5rem 2.5rem 0.5rem 0.5rem;
11
+ border: toRem.toRem(1) dashed var(--accent-1);
12
+ border-radius: var(--radius);
13
+ background-color: var(--background);
14
+ color: var(--foreground);
15
+ transition: var(--border-transition);
16
+ cursor: pointer;
17
+
18
+ &:focus,
19
+ &:hover,
20
+ &:active {
21
+ border-color: var(--link-color);
22
+ outline: var(--link-color);
23
+ }
24
+ }
25
+ .icon {
26
+ position: absolute;
27
+ right: toRem.toRem(10);
28
+ top: 50%;
29
+ transform: translateY(-50%);
30
+ pointer-events: none;
31
+ }
32
+ }
@@ -0,0 +1,84 @@
1
+ @use "./toRem.scss";
2
+
3
+ .shareModalInputContainer,
4
+ .collaborateInputContainer {
5
+ display: flex;
6
+ gap: toRem.toRem(10);
7
+ }
8
+
9
+ .shareModalInput,
10
+ .collaborateInput {
11
+ flex: 1;
12
+ }
13
+
14
+ .collaborateFooter {
15
+ display: flex;
16
+ flex-direction: row;
17
+ align-items: center;
18
+ justify-content: flex-end;
19
+ gap: toRem.toRem(10);
20
+ }
21
+
22
+ .share {
23
+ font-size: toRem.toRem(12);
24
+ position: relative;
25
+ bottom: toRem.toRem(0.5);
26
+ }
27
+
28
+ .shareModalContent {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: toRem.toRem(10);
32
+ }
33
+
34
+ .collaboratorEmail {
35
+ display: flex;
36
+ flex-direction: row;
37
+ align-items: center;
38
+ gap: toRem.toRem(15);
39
+ }
40
+
41
+ .shareModalDescription {
42
+ display: flex;
43
+ flex-direction: row;
44
+ align-items: center;
45
+ justify-content: flex-end;
46
+ gap: toRem.toRem(10);
47
+ }
48
+
49
+ .collaboratorStatus {
50
+ display: inline-flex;
51
+ flex-direction: row;
52
+ align-items: center;
53
+ gap: toRem.toRem(5);
54
+ svg {
55
+ position: relative;
56
+ top: toRem.toRem(1);
57
+ }
58
+ }
59
+
60
+ .collaborators {
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: toRem.toRem(10);
64
+ font-size: toRem.toRem(14);
65
+ }
66
+
67
+ .collaborator {
68
+ display: flex;
69
+ flex-direction: row;
70
+ align-items: flex-start;
71
+ gap: toRem.toRem(10);
72
+ }
73
+
74
+ .collaboratorImage {
75
+ border-radius: 50%;
76
+ }
77
+
78
+ .collaboratorName {
79
+ margin-top: 0;
80
+ }
81
+
82
+ .collaboratorActions {
83
+ margin-left: auto;
84
+ }
@@ -0,0 +1,69 @@
1
+ @use "./toRem.scss";
2
+
3
+ .sidebar {
4
+ display: flex;
5
+ flex-direction: column;
6
+ height: 100vh;
7
+ padding: toRem.toRem(10);
8
+ }
9
+
10
+ .splash {
11
+ height: 100vh;
12
+ width: 100vw;
13
+ display: flex;
14
+ justify-content: center;
15
+ align-items: center;
16
+ position: fixed;
17
+ background: var(--background);
18
+ z-index: 999999;
19
+
20
+ &.hidden {
21
+ display: none;
22
+ }
23
+ }
24
+
25
+ .header {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ gap: toRem.toRem(5);
30
+ }
31
+
32
+ .content {
33
+ flex: 1;
34
+ }
35
+
36
+ .footer {
37
+ display: flex;
38
+ gap: toRem.toRem(5);
39
+ }
40
+
41
+ .brandContainer {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: toRem.toRem(5);
45
+
46
+ .brand {
47
+ font-weight: bold;
48
+ font-size: toRem.toRem(15);
49
+ }
50
+ }
51
+
52
+ .menuButton {
53
+ display: flex;
54
+ }
55
+
56
+ .userButton {
57
+ display: flex;
58
+ }
59
+
60
+ .contentHelp {
61
+ font-size: toRem.toRem(26);
62
+ font-weight: bold;
63
+ margin: 0;
64
+ margin-top: toRem.toRem(40);
65
+ line-height: 1.2;
66
+ text-align: center;
67
+ align-self: center;
68
+ justify-self: center;
69
+ }
@@ -0,0 +1,129 @@
1
+ @use "./toRem.scss";
2
+
3
+ .container {
4
+ display: flex;
5
+ gap: toRem.toRem(10);
6
+ font-size: toRem.toRem(14);
7
+ }
8
+
9
+ .signInButton {
10
+ display: none;
11
+
12
+ @media (min-width: toRem.toRem(800)) {
13
+ display: flex;
14
+ }
15
+ }
16
+
17
+ .video {
18
+ width: toRem.toRem(30);
19
+ height: toRem.toRem(30);
20
+ object-fit: cover;
21
+ border-radius: 50%;
22
+ pointer-events: none; // So clicks pass through to foreground content
23
+ }
24
+
25
+ .registerButton {
26
+ display: flex;
27
+ }
28
+
29
+ @keyframes slideLeft {
30
+ 0% {
31
+ transform: translateX(100%);
32
+ opacity: 0;
33
+ }
34
+ 100% {
35
+ transform: translateX(0);
36
+ opacity: 1;
37
+ }
38
+ }
39
+
40
+ .signInButtons {
41
+ display: flex;
42
+ flex-direction: column;
43
+ gap: toRem.toRem(10);
44
+ align-items: center;
45
+ justify-content: center;
46
+ text-align: center;
47
+ z-index: 1000;
48
+ }
49
+
50
+ .switchMode {
51
+ display: flex;
52
+ align-items: center;
53
+ flex-direction: row;
54
+ gap: toRem.toRem(5);
55
+
56
+ svg {
57
+ display: flex;
58
+ }
59
+ }
60
+
61
+ .googleButton {
62
+ gap: toRem.toRem(10);
63
+ border: none;
64
+ }
65
+
66
+ .modal {
67
+ height: 100vh;
68
+ width: 100vw;
69
+ display: flex;
70
+ top: 0;
71
+ left: 0;
72
+ flex-direction: column;
73
+ justify-content: center;
74
+ align-items: center;
75
+ z-index: 99999;
76
+ position: fixed;
77
+ background: var(--overlay);
78
+ }
79
+
80
+ .main {
81
+ margin: 0 auto;
82
+ width: auto;
83
+ padding: 0 toRem.toRem(10);
84
+ z-index: 3;
85
+ position: relative;
86
+ flex: 1;
87
+ flex-direction: column;
88
+ display: flex;
89
+ justify-content: center;
90
+ width: auto;
91
+
92
+ .inner {
93
+ animation: slideUp 0.4s ease forwards;
94
+ position: relative;
95
+ min-width: 100%;
96
+ display: flex;
97
+ flex-direction: row;
98
+ align-items: center;
99
+ justify-content: center;
100
+ align-items: center;
101
+ gap: toRem.toRem(20);
102
+ }
103
+
104
+ .appleButton,
105
+ .googleButton {
106
+ display: flex;
107
+ align-items: center;
108
+ gap: toRem.toRem(5);
109
+ border-radius: 13px;
110
+ }
111
+
112
+ .close {
113
+ display: flex;
114
+ position: absolute;
115
+ top: toRem.toRem(-40);
116
+ border: none;
117
+ }
118
+ }
119
+
120
+ @keyframes slideUp {
121
+ from {
122
+ opacity: 0;
123
+ transform: translateY(toRem.toRem(20)); /* Start slightly below */
124
+ }
125
+ to {
126
+ opacity: 1;
127
+ transform: translateY(0); /* End at original position */
128
+ }
129
+ }
@@ -0,0 +1,232 @@
1
+ @use "./breakpoints.scss";
2
+ @use "./toRem.scss";
3
+ @use "./utils.scss";
4
+
5
+ .page {
6
+ display: flex;
7
+ flex-direction: row;
8
+ // min-height: 100vh;
9
+ padding-left: 0;
10
+ align-items: flex-start;
11
+ position: relative;
12
+
13
+ @media (min-width: breakpoints.$breakpoint-mobile) {
14
+ padding-left: 0;
15
+ }
16
+
17
+ @media print {
18
+ padding-top: 0;
19
+ padding-left: 0;
20
+ min-height: auto;
21
+ }
22
+
23
+ .subscribe {
24
+ }
25
+
26
+ @media (min-width: breakpoints.$breakpoint-desktop) {
27
+ &.drawerOpen {
28
+ padding-left: toRem.toRem(255);
29
+
30
+ .brand {
31
+ left: 0;
32
+ font-size: toRem.toRem(18);
33
+ }
34
+
35
+ .subscribe {
36
+ left: 0;
37
+ }
38
+ }
39
+ }
40
+ }
41
+
42
+ .blog {
43
+ display: none;
44
+
45
+ @media (min-width: breakpoints.$breakpoint-mobile) {
46
+ display: inline-flex;
47
+ }
48
+ }
49
+
50
+ .right {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: toRem.toRem(12.5);
54
+ }
55
+
56
+ .middle {
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ gap: toRem.toRem(10);
61
+ svg {
62
+ display: flex;
63
+ }
64
+
65
+ &.isDrawerOpen {
66
+ position: relative;
67
+ }
68
+
69
+ display: none;
70
+
71
+ &.desktop {
72
+ @media (min-width: breakpoints.$breakpoint-mobile) {
73
+ display: flex;
74
+ }
75
+ }
76
+
77
+ &.mobile {
78
+ position: relative;
79
+ margin-bottom: toRem.toRem(10);
80
+ @media (max-width: breakpoints.$breakpoint-mobile) {
81
+ display: flex;
82
+ }
83
+ }
84
+ }
85
+
86
+ .subscribeMobileWrapper {
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ gap: toRem.toRem(10);
91
+
92
+ @media (min-width: breakpoints.$breakpoint-mobile) {
93
+ display: none;
94
+ }
95
+ }
96
+
97
+ .title {
98
+ font-size: toRem.toRem(22.1);
99
+
100
+ @media (min-width: breakpoints.$breakpoint-mobile) {
101
+ font-size: toRem.toRem(26.1);
102
+ }
103
+ }
104
+
105
+ .loadingContainer {
106
+ display: flex;
107
+ justify-content: center;
108
+ align-items: center;
109
+ flex: 1;
110
+ position: relative;
111
+ bottom: toRem.toRem(50);
112
+ height: 100dvh;
113
+ }
114
+
115
+ .main {
116
+ padding: toRem.toRem(10);
117
+ padding-top: toRem.toRem(50);
118
+ display: flex;
119
+ flex-direction: column;
120
+ flex: 1;
121
+ height: 100dvh;
122
+ &.empty {
123
+ padding-top: 0;
124
+ }
125
+ }
126
+
127
+ .contentContainer {
128
+ display: flex;
129
+ flex-direction: column;
130
+ flex: 1;
131
+ }
132
+
133
+ .brand {
134
+ font-weight: bold;
135
+ margin: 0;
136
+ font-size: toRem.toRem(18);
137
+ position: relative;
138
+ line-height: 1;
139
+ color: var(--shade-7);
140
+ }
141
+
142
+ .subscribe,
143
+ .signIn {
144
+ }
145
+
146
+ .signIn {
147
+ display: none !important;
148
+
149
+ @media (min-width: breakpoints.$breakpoint-mobile) {
150
+ display: flex !important;
151
+ }
152
+ }
153
+
154
+ .hamburgerMenu {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: toRem.toRem(12.5);
158
+ }
159
+
160
+ .brandHelp {
161
+ text-align: center;
162
+ font-size: toRem.toRem(18);
163
+ line-height: 1.2;
164
+
165
+ @media (min-width: breakpoints.$breakpoint-mobile) {
166
+ font-size: toRem.toRem(24);
167
+ }
168
+ }
169
+
170
+ .footer {
171
+ width: 100%;
172
+
173
+ @media (min-width: breakpoints.$breakpoint-mobile) {
174
+ max-width: breakpoints.$breakpoint-mobile;
175
+ }
176
+ }
177
+
178
+ .hamburgerButton {
179
+ position: relative;
180
+
181
+ .notification {
182
+ position: absolute;
183
+ top: 0;
184
+ right: 0;
185
+ width: toRem.toRem(10);
186
+ height: toRem.toRem(10);
187
+ border-radius: 50%;
188
+ background-color: var(--accent-1);
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ font-size: toRem.toRem(12);
193
+ color: var(--background);
194
+ box-shadow: var(--shadow);
195
+ animation: pulse 1s ease-in-out;
196
+ }
197
+ }
198
+
199
+ .header {
200
+ display: flex;
201
+ justify-content: space-between;
202
+ align-items: center;
203
+ position: fixed;
204
+ top: 0;
205
+ right: 0;
206
+ padding: toRem.toRem(10) toRem.toRem(10);
207
+
208
+ width: calc(100%);
209
+ z-index: 1000;
210
+ background-color: var(--background-transparent);
211
+ backdrop-filter: blur(toRem.toRem(2.5));
212
+
213
+ @media all and (display-mode: standalone) {
214
+ background-color: var(--background);
215
+ backdrop-filter: none;
216
+ }
217
+
218
+ &.standalone {
219
+ background-color: var(--background);
220
+ backdrop-filter: none;
221
+ }
222
+
223
+ @media print {
224
+ display: none !important;
225
+ }
226
+
227
+ &.empty {
228
+ position: static;
229
+ margin: 0;
230
+ padding: toRem.toRem(10) 0;
231
+ }
232
+ }