@repobit/dex-system-design 0.2.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 (111) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +15 -0
  3. package/package.json +57 -0
  4. package/src/assets/fonts/IBMPlexMono-Bold.woff2 +0 -0
  5. package/src/assets/fonts/IBMPlexMono-BoldItalic.woff2 +0 -0
  6. package/src/assets/fonts/IBMPlexMono-Italic.woff2 +0 -0
  7. package/src/assets/fonts/IBMPlexMono-Light.woff2 +0 -0
  8. package/src/assets/fonts/IBMPlexMono-LightItalic.woff2 +0 -0
  9. package/src/assets/fonts/IBMPlexMono-Medium.woff2 +0 -0
  10. package/src/assets/fonts/IBMPlexMono-MediumItalic.woff2 +0 -0
  11. package/src/assets/fonts/IBMPlexMono-Regular.woff2 +0 -0
  12. package/src/assets/fonts/IBMPlexMono-SemiBold.woff2 +0 -0
  13. package/src/assets/fonts/IBMPlexMono-SemiBoldItalic.woff2 +0 -0
  14. package/src/assets/fonts/IBMPlexSans-Bold.woff2 +0 -0
  15. package/src/assets/fonts/IBMPlexSans-BoldItalic.woff2 +0 -0
  16. package/src/assets/fonts/IBMPlexSans-Italic.woff2 +0 -0
  17. package/src/assets/fonts/IBMPlexSans-Light.woff2 +0 -0
  18. package/src/assets/fonts/IBMPlexSans-LightItalic.woff2 +0 -0
  19. package/src/assets/fonts/IBMPlexSans-Medium.woff2 +0 -0
  20. package/src/assets/fonts/IBMPlexSans-MediumItalic.woff2 +0 -0
  21. package/src/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  22. package/src/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  23. package/src/assets/fonts/IBMPlexSans-SemiBoldItalic.woff2 +0 -0
  24. package/src/assets/fonts/bd-ibm-plex-mono.zip +0 -0
  25. package/src/assets/fonts/bd-ibm-plex-sans.zip +0 -0
  26. package/src/assets/icons/badge-icon-individual.png +0 -0
  27. package/src/assets/icons/bd-icon-family-white.png +0 -0
  28. package/src/assets/icons/bd-icon-family.png +0 -0
  29. package/src/assets/icons/bd-icon-user.png +0 -0
  30. package/src/assets/icons/left_clicked.png +0 -0
  31. package/src/assets/icons/left_disabled.png +0 -0
  32. package/src/assets/icons/left_hover.png +0 -0
  33. package/src/assets/icons/left_normal.png +0 -0
  34. package/src/assets/icons/light-carousel-img1.png +0 -0
  35. package/src/assets/icons/light-carousel-img2.png +0 -0
  36. package/src/assets/icons/light-carousel-img3.png +0 -0
  37. package/src/assets/icons/more_hover.png +0 -0
  38. package/src/assets/icons/more_normal.png +0 -0
  39. package/src/assets/icons/more_pressed.png +0 -0
  40. package/src/assets/icons/pic1.png +0 -0
  41. package/src/assets/icons/pic2.png +0 -0
  42. package/src/assets/icons/pic3.png +0 -0
  43. package/src/assets/icons/right_clicked.png +0 -0
  44. package/src/assets/icons/right_disabled.png +0 -0
  45. package/src/assets/icons/right_hover.png +0 -0
  46. package/src/assets/icons/right_normal.png +0 -0
  47. package/src/assets/icons/tabs-img1.png +0 -0
  48. package/src/assets/icons/tabs-img2.png +0 -0
  49. package/src/assets/icons/tabs-img3.png +0 -0
  50. package/src/assets/icons/verified_arrow.png +0 -0
  51. package/src/components/Button/Button.js +120 -0
  52. package/src/components/Button/button.css.js +137 -0
  53. package/src/components/Button/button.stories.js +56 -0
  54. package/src/components/Button/icons.css +5 -0
  55. package/src/components/Button/icons.js +24 -0
  56. package/src/components/Button/index.js +0 -0
  57. package/src/components/FAQ/faq.css.js +107 -0
  58. package/src/components/FAQ/faq.js +176 -0
  59. package/src/components/FAQ/faq.stories.js +45 -0
  60. package/src/components/Input/Input.js +27 -0
  61. package/src/components/Input/index.js +0 -0
  62. package/src/components/Input/input.css.js +68 -0
  63. package/src/components/carousel/carousel.css.js +304 -0
  64. package/src/components/carousel/carousel.js +226 -0
  65. package/src/components/carousel/carousel.stories.js +73 -0
  66. package/src/components/light-carousel/light-carousel.css.js +149 -0
  67. package/src/components/light-carousel/light-carousel.js +108 -0
  68. package/src/components/light-carousel/light-carousel.stories.js +43 -0
  69. package/src/components/paragraph/paragraph.css.js +16 -0
  70. package/src/components/paragraph/paragraph.js +59 -0
  71. package/src/components/pricing-cards/pricing-card.css.js +409 -0
  72. package/src/components/pricing-cards/pricing-card.js +764 -0
  73. package/src/components/pricing-cards/pricing-card.stories.js +12 -0
  74. package/src/components/tabs/tabs.css.js +239 -0
  75. package/src/components/tabs/tabs.js +183 -0
  76. package/src/components/tabs/tabs.stories.js +18 -0
  77. package/src/components/termsOfUse/terms.css.js +38 -0
  78. package/src/components/termsOfUse/terms.js +226 -0
  79. package/src/components/termsOfUse/terms.stories.js +14 -0
  80. package/src/index.js +0 -0
  81. package/src/stories/Button.js +20 -0
  82. package/src/stories/Button.stories.js +46 -0
  83. package/src/stories/Configure.mdx +364 -0
  84. package/src/stories/Header.js +45 -0
  85. package/src/stories/Header.stories.js +24 -0
  86. package/src/stories/Page.js +62 -0
  87. package/src/stories/Page.stories.js +20 -0
  88. package/src/stories/assets/accessibility.png +0 -0
  89. package/src/stories/assets/accessibility.svg +1 -0
  90. package/src/stories/assets/addon-library.png +0 -0
  91. package/src/stories/assets/assets.png +0 -0
  92. package/src/stories/assets/avif-test-image.avif +0 -0
  93. package/src/stories/assets/context.png +0 -0
  94. package/src/stories/assets/discord.svg +1 -0
  95. package/src/stories/assets/docs.png +0 -0
  96. package/src/stories/assets/figma-plugin.png +0 -0
  97. package/src/stories/assets/github.svg +1 -0
  98. package/src/stories/assets/share.png +0 -0
  99. package/src/stories/assets/styling.png +0 -0
  100. package/src/stories/assets/testing.png +0 -0
  101. package/src/stories/assets/theming.png +0 -0
  102. package/src/stories/assets/tutorials.svg +1 -0
  103. package/src/stories/assets/youtube.svg +1 -0
  104. package/src/stories/button.css +30 -0
  105. package/src/stories/header.css +32 -0
  106. package/src/stories/page.css +68 -0
  107. package/src/tokens/colors.js +121 -0
  108. package/src/tokens/layout.css +46 -0
  109. package/src/tokens/tokens.css +297 -0
  110. package/src/tokens/typography.css.js +207 -0
  111. package/src/tokens/typography.js +0 -0
@@ -0,0 +1,176 @@
1
+ import { LitElement, html, css } from "lit";
2
+ import { unsafeHTML } from "lit-html/directives/unsafe-html.js";
3
+
4
+ import faqCSS from "../FAQ/faq.css.js";
5
+
6
+ class FaqSection extends LitElement {
7
+ static properties = {
8
+ faqs: { type: Array },
9
+ };
10
+
11
+ constructor() {
12
+ super();
13
+ // this.title = "Questions? Answers.";
14
+
15
+ // this.faqs = [
16
+ // {
17
+ // question:
18
+ // "How does Bitdefender Internet Security protect me against cyber threats?",
19
+ // answer: `
20
+ // <p>Bitdefender Internet Security provides the best protection in the industry, as proven by the last 10 years of independent test scores.</p>
21
+ // <p>Bitdefender Internet Security has won the Product of The Year award from AV-Comparatives.</p>
22
+ // <p>You get a wealth of advanced security and privacy features for Windows - plus many bonus features, including secure VPN, Firewall and Parental Control.</p>
23
+ // `,
24
+ // open: false,
25
+ // },
26
+ // {
27
+ // question:
28
+ // "Does Bitdefender Internet Security protect me against ransomware?",
29
+ // answer: `
30
+ // <p>Bitdefender Internet Security offers unbeatable ransomware protection that keeps your documents, pictures and videos safe from all known and emerging cyber threats.</p>
31
+ // <p>This security solution can identify even the latest ransomware families through the use of multiple layers of protection.</p>
32
+ // `,
33
+ // open: false,
34
+ // },
35
+ // {
36
+ // question:
37
+ // "What type of devices and operating systems does Bitdefender Internet Security cover?",
38
+ // answer: `
39
+ // <p>Bitdefender Internet Security is a security software designed especially for Windows PCs.</p>
40
+ // `,
41
+ // open: false,
42
+ // },
43
+ // {
44
+ // question: "Why do I need Bitdefender Internet Security on Windows 10?",
45
+ // answer: `
46
+ // <p>Windows 10 lets you run the security program of your choosing, and Bitdefender Internet Security is the perfect option if you need the best protection available today.</p>
47
+ // `,
48
+ // open: false,
49
+ // },
50
+ // {
51
+ // question:
52
+ // "How does Bitdefender Internet Security compare to other Bitdefender security products?",
53
+ // answer: `
54
+ // <p>Bitdefender Internet Security is a security software designed especially for Windows PCs.</p>
55
+ // <p>Need security for all operating systems? Bitdefender Total Security offers cross-platform protection that covers Windows PCs, Macs, Smartphones and Tablets running Android or iOS for up to 10 devices.</p>
56
+ // <p>Need more devices? Bitdefender Family Pack includes Bitdefender Total Security for up to 15 devices.</p>
57
+ // <p>Need unlimited VPN traffic? Bitdefender Premium Security includes Bitdefender Total Security, Bitdefender Premium VPN for Unlimited Traffic & Premium Support.</p>
58
+ // `,
59
+ // open: false,
60
+ // },
61
+ // {
62
+ // question:
63
+ // "Do I get a VPN with my Bitdefender Internet Security subscription?",
64
+ // answer: `
65
+ // <p>Bitdefender Internet Security comes with a basic version of Bitdefender VPN that includes a generous amount of traffic (200 MB/ day, a total of 6GB/ month), free of charge.</p>
66
+ // <p>If you need unlimited traffic, add Bitdefender Premium VPN to your Bitdefender subscription.</p>
67
+
68
+ // `,
69
+ // open: false,
70
+ // },
71
+ // {
72
+ // question: "Can I try Bitdefender Internet Security before buying?",
73
+ // answer: `
74
+ // <p>You can always try before you buy. Download your free 30-day full trial version of Bitdefender Internet Security and test the complete package, no credit card required.</p>
75
+ // `,
76
+ // open: false,
77
+ // },
78
+ // {
79
+ // question: "How do I activate Bitdefender Internet Security?",
80
+ // answer: `
81
+ // <p>Just go to your email after your purchase and follow the steps to create a Bitdefender Central Account and activate your subscription. Once your subscription is active in your Bitdefender Account, you can start installing & protecting your devices.</p>
82
+ // `,
83
+ // open: false,
84
+ // },
85
+ // {
86
+ // question:
87
+ // "I changed my computer. How do I reinstall Bitdefender Internet Security?",
88
+ // answer: `
89
+ // <p>Log in to your Bitdefender Central account, go to My Devices and start installing Bitdefender on your new device. If the old computer is no longer in use, you will not need an additional slot on your subscription.</p>
90
+ // `,
91
+ // open: false,
92
+ // },
93
+ // {
94
+ // question: "Do I have to renew Bitdefender Internet Security?",
95
+ // answer: `
96
+ // <p>To help you stay protected, Bitdefender Internet Security can be purchased as a subscription that will automatically renew if you enrolled at the time of purchase.</p>
97
+ // <p>You can check and modify the status any time in your Central Account (My Subscriptions -> My Payments) if you activated the subscription on the same email address used for purchase.</p>
98
+ // <p>If you purchased Bitdefender Internet Security, you can choose to renew early or purchase for another year (or upgrade) close to the expiration date, depending on the time left on your subscription.</p>
99
+ // <p>In any case, starting 30 days before your expiration date, you will receive emails informing you that your subscription is about to expire and describing the next steps.</p>
100
+
101
+ // `,
102
+ // open: false,
103
+ // },
104
+ // {
105
+ // question: "I have not received the activation code. What should I do?",
106
+ // answer: `
107
+ // <p>Confirmation emails are typically received shortly after an order is placed. Make sure you also check your Promotions and Spam folders if your email client categorizes emails automatically. For more information, check this <a class="bd-link-noline" href="https://www.bitdefender.com/consumer/support/answer/94956/?adobe_mc=MCMID%3D63411747395182077784244429321314993670%7CMCORGID%3D0E920C0F53DA9E9B0A490D45%2540AdobeOrg%7CTS%3D1738663533" title="Support article.">Support article.</a></p>
108
+ // <p>More helpful articles and video tutorials are also available in <a class="bd-link-noline" href="https://www.bitdefender.com/consumer/support/?adobe_mc=MCMID%3D63411747395182077784244429321314993670%7CMCORGID%3D0E920C0F53DA9E9B0A490D45%2540AdobeOrg%7CTS%3D1738663533" title="Bitdefender Support Center.">Bitdefender Support Center.</a></p>
109
+ // `,
110
+ // open: false,
111
+ // },
112
+ // ];
113
+ }
114
+
115
+
116
+
117
+
118
+ render() {
119
+ return html`
120
+ <div class="bd-faq-container">
121
+ <div class="bd-header-section-faq">
122
+ <h1 class="bd-section-title">${this.title}</h1>
123
+ </div>
124
+ <slot></slot>
125
+ </div>
126
+ `;
127
+ }
128
+
129
+ }
130
+ class FaqSectionItem extends LitElement {
131
+ static properties = {
132
+ title: { type: String },
133
+ open: { type: Boolean, reflect: true },
134
+ };
135
+
136
+ constructor() {
137
+ super();
138
+ this.title = "";
139
+ this.open = false;
140
+ }
141
+
142
+
143
+
144
+ toggleItem() {
145
+ this.open = !this.open;
146
+ }
147
+
148
+ render() {
149
+ return html`
150
+ <div
151
+ class="bd-faq-item ${this.open ? "open" : ""}"
152
+ @click=${this.toggleItem}
153
+ >
154
+ <div class="bd-question">
155
+ <span class="bd-icon">${this.open ? "−" : "+"}</span>
156
+ <span class="bd-question-text">${this.title}</span>
157
+ </div>
158
+
159
+ ${this.open
160
+ ? html`
161
+ <div class="bd-answer">
162
+ <slot></slot>
163
+ </div>
164
+ `
165
+ : null}
166
+ </div>
167
+ `;
168
+ }
169
+ }
170
+
171
+
172
+ FaqSection.styles = [faqCSS];
173
+ FaqSectionItem.styles = [faqCSS];
174
+
175
+ customElements.define("bd-faq-section-item", FaqSectionItem);
176
+ customElements.define("bd-faq-section", FaqSection);
@@ -0,0 +1,45 @@
1
+ import { html } from 'lit';
2
+ import './faq.js'; // Importul componentelor tale. Asigură-te că e corect!
3
+
4
+ export default {
5
+ title: 'Components/FAQ Section',
6
+ component: 'bd-faq-section',
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ title: { control: 'text' },
10
+ },
11
+ };
12
+
13
+ const Template = (args) => html`
14
+ <bd-faq-section title="${args.title}">
15
+ <bd-faq-section-item
16
+ title="How does Bitdefender Internet Security protect me?"
17
+ >
18
+ <p>Bitdefender Internet Security provides the best protection...</p>
19
+ <p>Bitdefender Internet Security provides the best protection...</p>
20
+ <p>Bitdefender Internet Security provides the best protection...</p>
21
+ </bd-faq-section-item>
22
+
23
+ <bd-faq-section-item
24
+ title="Does Bitdefender protect me against ransomware?"
25
+ >
26
+ <p>
27
+ Yes! Bitdefender Internet Security offers unbeatable ransomware
28
+ protection...
29
+ </p>
30
+ </bd-faq-section-item>
31
+
32
+ <bd-faq-section-item
33
+ title="Do I get a VPN with Bitdefender Internet Security?"
34
+ >
35
+ <p>
36
+ Bitdefender Internet Security includes a basic VPN with 200MB per day.
37
+ </p>
38
+ </bd-faq-section-item>
39
+ </bd-faq-section>
40
+ `;
41
+
42
+ export const Default = Template.bind({});
43
+ Default.args = {
44
+ title: 'Questions? Answers.',
45
+ };
@@ -0,0 +1,27 @@
1
+ import { LitElement, html, css } from "lit";
2
+ import inputCSS from '../input/input.css.js'
3
+
4
+ class CustomInput extends LitElement {
5
+ static properties = {
6
+ label: { type: String },
7
+ type: { type: String },
8
+ };
9
+
10
+ constructor() {
11
+ super();
12
+ this.label = "Default Label";
13
+ this.type = "text";
14
+ }
15
+
16
+
17
+ render() {
18
+ return html`
19
+ <div class="input-container">
20
+ <label for="custom-input">${this.label}</label>
21
+ <input type="${this.type}" id="custom-input" />
22
+ </div>
23
+ `;
24
+ }
25
+ }
26
+ CustomInput.styles = [inputCSS];
27
+ customElements.define("custom-input", CustomInput);
File without changes
@@ -0,0 +1,68 @@
1
+ import { css } from "../../../node_modules/lit-element/lit-element";
2
+
3
+ export default css`
4
+ .input-container {
5
+ display: flex;
6
+ flex-direction: column;
7
+ margin-bottom: 1em;
8
+ }
9
+
10
+ label {
11
+ font-size: 14px;
12
+ font-weight: bold;
13
+ margin-bottom: 5px;
14
+ color: #333;
15
+ }
16
+
17
+ input {
18
+ width: 20%;
19
+ padding: 10px;
20
+ font-size: 16px;
21
+ border: 1px solid #ccc;
22
+ border-radius: 4px;
23
+ outline: none;
24
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
25
+ }
26
+
27
+ input:focus {
28
+ border-color: #006eff;
29
+ box-shadow: 0px 0px 5px rgba(0, 110, 255, 0.5);
30
+ }
31
+
32
+ form {
33
+ max-width: 400px;
34
+ margin: 20px auto;
35
+ padding: 10px;
36
+ border: 1px solid #ddd;
37
+ border-radius: 5px;
38
+ background-color: #f9f9f9;
39
+ }
40
+
41
+ .form-group {
42
+ display: flex;
43
+ flex-direction: column;
44
+ margin-bottom: 15px;
45
+ }
46
+
47
+ .form-group label {
48
+ font-size: 14px;
49
+ margin-bottom: 5px;
50
+ font-weight: bold;
51
+ }
52
+
53
+ .form-group input {
54
+ padding: 10px;
55
+ font-size: 16px;
56
+ border: 1px solid #ccc;
57
+ border-radius: 4px;
58
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
59
+ width: 80% !important;
60
+ }
61
+
62
+ .form-group input:focus {
63
+ border-color: #006eff;
64
+ box-shadow: 0px 0px 5px rgba(0, 110, 255, 0.5);
65
+ }
66
+
67
+
68
+ `;
@@ -0,0 +1,304 @@
1
+ import { css } from "../../../node_modules/lit-element/lit-element";
2
+
3
+ export default css`
4
+ :host {
5
+ display: block;
6
+ --background-card-grey: var(--color-neutral-25);
7
+ --border-card-grey: var(--color-neutral-50);
8
+ --bd-blue-color: var(--color-blue-500);
9
+ }
10
+
11
+ .bd-carousel {
12
+ display: block;
13
+ align-items: center;
14
+ position: relative;
15
+ margin-bottom: 100px;
16
+ max-width: 100%;
17
+ flex-direction: column;
18
+ }
19
+
20
+ .bd-section-title {
21
+ font-family: var(--font-family-sans);
22
+ font-weight: var(--font-weight-sans-semibold);
23
+ font-size: 2em;
24
+ }
25
+ div.bd-arrow {
26
+ padding: var(--size-2);
27
+ }
28
+ .bd-header-carousel {
29
+ display: block;
30
+ align-items: center;
31
+ text-align: center;
32
+ margin-bottom: 50px;
33
+ margin-top: 50px;
34
+ }
35
+ .bd-carousel-container {
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: 1rem;
39
+ padding: 1rem;
40
+ }
41
+ .bd-arrow {
42
+ border-radius: 50%;
43
+ width: var(--size-44);
44
+ height: var(--size-44);
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ cursor: pointer;
49
+ box-shadow: var(--size-0) var(--size-2) var(--size-4) rgba(0, 0, 0, 0.1);
50
+ position: absolute;
51
+ bottom: -65px;
52
+ background: var(--bd-blue-color);
53
+ color: white;
54
+ font-size: var(--size-20);
55
+ line-height: 1;
56
+ text-align: center;
57
+ }
58
+
59
+ .bd-left-arrow {
60
+ content: url("src/assets/icons/left_normal.png");
61
+ }
62
+
63
+ .bd-left-arrow:hover {
64
+ content: url("src/assets/icons/left_hover.png");
65
+ }
66
+
67
+ .bd-left-arrow:active {
68
+ content: url("src/assets/icons/left_clicked.png");
69
+ }
70
+
71
+ .bd-left-arrow:disabled {
72
+ content: url("src/assets/icons/left_disabled.png");
73
+ }
74
+
75
+ .bd-right-arrow {
76
+ content: url("src/assets/icons/right_normal.png");
77
+ }
78
+
79
+ .bd-right-arrow:hover {
80
+ content: url("src/assets/icons/right_hover.png");
81
+ }
82
+
83
+ .bd-right-arrow:active {
84
+ content: url("src/assets/icons/right_clicked.png");
85
+ }
86
+
87
+ .bd-right-arrow:disabled {
88
+ content: url("src/assets/icons/right_disabled.png");
89
+ }
90
+ .bd-right-arrow.bd-disabled {
91
+ content: url("src/assets/icons/right_disabled.png");
92
+ cursor: not-allowed;
93
+ }
94
+ .bd-left-arrow.bd-disabled {
95
+ content: url("src/assets/icons/left_disabled.png");
96
+ cursor: not-allowed;
97
+ }
98
+ .bd-disabled {
99
+ background: #f1f2f3;
100
+ color: #a6adb4;
101
+ cursor: not-allowed;
102
+ }
103
+
104
+ .bd-arrow:first-of-type {
105
+ right: 60px;
106
+ }
107
+
108
+ .bd-arrow:last-of-type {
109
+ right: var(--size-10);
110
+ }
111
+
112
+ .bd-carousel-track {
113
+ display: flex;
114
+ gap: 2em;
115
+ scroll-behavior: smooth;
116
+ flex: 1;
117
+ padding: var(--size-0) var(--size-20);
118
+ position: relative;
119
+ overflow-x: hidden;
120
+ overflow-y: hidden;
121
+ z-index: 1;
122
+ scroll-behavior: smooth;
123
+ scroll-snap-type: x mandatory;
124
+ -webkit-overflow-scrolling: touch;
125
+ transition: scroll-snap-align 0.6s cubic-bezier(0.23, 1, 0.32, 1);
126
+ }
127
+
128
+ .bd-carousel-icon {
129
+ position: relative;
130
+ bottom: 30px;
131
+ max-width: 100%;
132
+ height: var(--size-40);
133
+ width: var(--size-40);
134
+ }
135
+ .bd-carousel-modal-icon {
136
+ position: relative;
137
+ bottom: 15px;
138
+ max-width: 100%;
139
+ height: var(--size-40);
140
+ width: var(--size-40);
141
+ }
142
+ .bd-box {
143
+ flex: 0 0 auto;
144
+ min-height: 217px;
145
+ min-width: unset;
146
+ width: 350px;
147
+ background: var(--background-card-grey);
148
+ border-radius: 28px;
149
+ border: var(--size-2) solid var(--border-card-grey);
150
+ padding: 2em;
151
+ display: flex;
152
+ flex-direction: column;
153
+ align-items: start;
154
+ justify-content: center;
155
+ text-align: start;
156
+ cursor: pointer;
157
+ transition: transform 0.2s ease-in-out;
158
+
159
+ position: relative;
160
+ z-index: 2;
161
+ }
162
+
163
+ .bd-box h3 {
164
+ font-size: var(--size-18);
165
+ margin: var(--size-0) var(--size-0) 0.5em var(--size-0);
166
+ font-weight: 600;
167
+ font-family: var(--font-family-sans);
168
+ }
169
+
170
+ .bd-box p {
171
+ font-size: var(--size-16);
172
+ margin: var(--size-0) var(--size-0) 1em var(--size-0);
173
+ font-family: var(--font-family-sans);
174
+ }
175
+
176
+ .bd-modal {
177
+ position: fixed;
178
+ top: var(--size-0);
179
+ left: var(--size-0);
180
+ width: 100%;
181
+ height: 100%;
182
+ background: rgba(0, 0, 0, 0.5);
183
+ display: flex;
184
+ justify-content: center;
185
+ align-items: center;
186
+ z-index: 9999;
187
+ backdrop-filter: blur(var(--size-12));
188
+ opacity: 0;
189
+ transform: scale(0.9);
190
+ transition: opacity 0.3s ease, transform 0.3s ease;
191
+ }
192
+
193
+ .bd-modal[open] {
194
+ opacity: 1;
195
+ transform: scale(1);
196
+ }
197
+
198
+ .bd-modal-content {
199
+ background: #fff;
200
+ padding: 2em;
201
+ border-radius: var(--size-12);
202
+ max-width: 500px;
203
+ text-align: start;
204
+ box-shadow: var(--size-0) var(--size-2) var(--size-8) rgba(0, 0, 0, 0.2);
205
+ font-family: var(--font-family-sans);
206
+ }
207
+
208
+ .bd-modal-content h2 {
209
+ margin: var(--size-0) var(--size-0) 1em var(--size-0);
210
+ font-family: var(--font-family-sans);
211
+ }
212
+
213
+ .bd-modal-content button {
214
+ margin-top: 1em;
215
+ padding: 0.5em 1em;
216
+ background: var(--bd-blue-color);
217
+ color: #fff;
218
+ border: none;
219
+ border-radius: var(--size-8);
220
+ cursor: pointer;
221
+ font-family: var(--font-family-sans);
222
+ }
223
+
224
+ .bd-plus-button {
225
+ content: url("src/assets/icons/more_normal.png");
226
+ position: absolute;
227
+ bottom: var(--size-10);
228
+ right: var(--size-10);
229
+ color: var(--bd-blue-color);
230
+ width: var(--size-44);
231
+ height: var(--size-44);
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ border-radius: 50%;
236
+ font-size: 30px;
237
+ font-weight: bold;
238
+ cursor: pointer;
239
+ }
240
+ .bd-plus-button:hover {
241
+ content: url("src/assets/icons/more_hover.png");
242
+ }
243
+ .bd-plus-button:active {
244
+ content: url("src/assets/icons/more_pressed.png");
245
+ }
246
+
247
+ .bd-left-arrow {
248
+ margin-right: var(--size-6);
249
+ }
250
+
251
+ .bd-right-arrow {
252
+ margin-left: var(--size-6);
253
+ }
254
+
255
+ @media (max-width: 768px) {
256
+ .bd-carousel-track {
257
+ flex-wrap: nowrap;
258
+ overflow-x: hidden;
259
+ gap: 1em;
260
+ padding: var(--size-0) var(--size-0);
261
+ }
262
+
263
+ .bd-box {
264
+ max-width: 100%;
265
+ margin: var(--size-0) auto;
266
+ }
267
+
268
+ .bd-modal-content {
269
+ max-width: 90%;
270
+ padding: 1.5em;
271
+ }
272
+
273
+ .bd-arrow {
274
+ bottom: -75px;
275
+ font-size: var(--size-16);
276
+ }
277
+
278
+ .bd-arrow:first-of-type {
279
+ right: 50px;
280
+ }
281
+
282
+ .bd-arrow:last-of-type {
283
+ right: var(--size-6);
284
+ }
285
+ }
286
+
287
+ @media (max-width: 480px) {
288
+ .bd-box {
289
+ padding: var(--size-0) var(--size-20);
290
+ min-height: 300px;
291
+ }
292
+
293
+ .bd-modal-content {
294
+ padding: 2em;
295
+ }
296
+
297
+ .bd-plus-icon {
298
+ font-size: var(--size-24);
299
+ }
300
+ .bd-carousel-icon {
301
+ bottom: var(--size-10);
302
+ }
303
+ }
304
+ `;