@o2vend/theme-cli 1.0.32

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/README.md +425 -0
  2. package/assets/Logo_o2vend.png +0 -0
  3. package/assets/favicon.png +0 -0
  4. package/assets/logo-white.png +0 -0
  5. package/bin/o2vend +42 -0
  6. package/config/widget-map.json +50 -0
  7. package/lib/commands/check.js +201 -0
  8. package/lib/commands/generate.js +33 -0
  9. package/lib/commands/init.js +214 -0
  10. package/lib/commands/optimize.js +216 -0
  11. package/lib/commands/package.js +208 -0
  12. package/lib/commands/serve.js +105 -0
  13. package/lib/commands/validate.js +191 -0
  14. package/lib/lib/api-client.js +357 -0
  15. package/lib/lib/dev-server.js +2618 -0
  16. package/lib/lib/file-watcher.js +80 -0
  17. package/lib/lib/hot-reload.js +106 -0
  18. package/lib/lib/liquid-engine.js +822 -0
  19. package/lib/lib/liquid-filters.js +671 -0
  20. package/lib/lib/mock-api-server.js +989 -0
  21. package/lib/lib/mock-data.js +1468 -0
  22. package/lib/lib/widget-service.js +321 -0
  23. package/package.json +70 -0
  24. package/test-theme/README.md +27 -0
  25. package/test-theme/assets/async-sections.js +446 -0
  26. package/test-theme/assets/cart-drawer.js +463 -0
  27. package/test-theme/assets/cart-manager.js +223 -0
  28. package/test-theme/assets/checkout-price-handler.js +368 -0
  29. package/test-theme/assets/components.css +4629 -0
  30. package/test-theme/assets/delivery-zone.css +299 -0
  31. package/test-theme/assets/delivery-zone.js +396 -0
  32. package/test-theme/assets/logo.png +0 -0
  33. package/test-theme/assets/sections.css +48 -0
  34. package/test-theme/assets/theme.css +3500 -0
  35. package/test-theme/assets/theme.js +3745 -0
  36. package/test-theme/config/settings_data.json +292 -0
  37. package/test-theme/config/settings_schema.json +1050 -0
  38. package/test-theme/layout/theme.liquid +195 -0
  39. package/test-theme/locales/en.default.json +260 -0
  40. package/test-theme/sections/content-fallback.liquid +53 -0
  41. package/test-theme/sections/content.liquid +57 -0
  42. package/test-theme/sections/footer-fallback.liquid +328 -0
  43. package/test-theme/sections/footer.liquid +278 -0
  44. package/test-theme/sections/header-fallback.liquid +1805 -0
  45. package/test-theme/sections/header.liquid +1145 -0
  46. package/test-theme/sections/hero-fallback.liquid +212 -0
  47. package/test-theme/sections/hero.liquid +136 -0
  48. package/test-theme/snippets/account-sidebar.liquid +200 -0
  49. package/test-theme/snippets/add-to-cart-modal.liquid +484 -0
  50. package/test-theme/snippets/breadcrumbs.liquid +134 -0
  51. package/test-theme/snippets/cart-drawer.liquid +467 -0
  52. package/test-theme/snippets/delivery-zone-city-selector.liquid +79 -0
  53. package/test-theme/snippets/delivery-zone-modal.liquid +337 -0
  54. package/test-theme/snippets/delivery-zone-search.liquid +78 -0
  55. package/test-theme/snippets/icon.liquid +105 -0
  56. package/test-theme/snippets/login-modal.liquid +346 -0
  57. package/test-theme/snippets/mega-menu.liquid +812 -0
  58. package/test-theme/snippets/news-thumbnail.liquid +187 -0
  59. package/test-theme/snippets/pagination.liquid +120 -0
  60. package/test-theme/snippets/price.liquid +92 -0
  61. package/test-theme/snippets/product-card-related.liquid +78 -0
  62. package/test-theme/snippets/product-card-simple.liquid +41 -0
  63. package/test-theme/snippets/product-card.liquid +697 -0
  64. package/test-theme/snippets/rating.liquid +85 -0
  65. package/test-theme/snippets/skeleton-collection-grid.liquid +114 -0
  66. package/test-theme/snippets/skeleton-product-card.liquid +124 -0
  67. package/test-theme/snippets/skeleton-product-grid.liquid +34 -0
  68. package/test-theme/snippets/social-sharing.liquid +185 -0
  69. package/test-theme/templates/account/dashboard.liquid +401 -0
  70. package/test-theme/templates/account/loyalty-redemption.liquid +405 -0
  71. package/test-theme/templates/account/loyalty.liquid +588 -0
  72. package/test-theme/templates/account/order-detail.liquid +230 -0
  73. package/test-theme/templates/account/orders.liquid +349 -0
  74. package/test-theme/templates/account/profile.liquid +758 -0
  75. package/test-theme/templates/account/register.liquid +232 -0
  76. package/test-theme/templates/account/return-orders.liquid +348 -0
  77. package/test-theme/templates/account/store-credit.liquid +464 -0
  78. package/test-theme/templates/account/subscriptions.liquid +601 -0
  79. package/test-theme/templates/account/wishlist.liquid +419 -0
  80. package/test-theme/templates/address-book.liquid +1092 -0
  81. package/test-theme/templates/categories.liquid +452 -0
  82. package/test-theme/templates/checkout.liquid +4511 -0
  83. package/test-theme/templates/error.liquid +384 -0
  84. package/test-theme/templates/index.liquid +11 -0
  85. package/test-theme/templates/login.liquid +185 -0
  86. package/test-theme/templates/order-confirmation.liquid +720 -0
  87. package/test-theme/templates/page.liquid +297 -0
  88. package/test-theme/templates/product-detail.liquid +4363 -0
  89. package/test-theme/templates/products.liquid +518 -0
  90. package/test-theme/templates/search.liquid +922 -0
  91. package/test-theme/theme.json.example +19 -0
  92. package/test-theme/widgets/brand-carousel.liquid +676 -0
  93. package/test-theme/widgets/brand.liquid +245 -0
  94. package/test-theme/widgets/carousel.liquid +843 -0
  95. package/test-theme/widgets/category-list-carousel.liquid +656 -0
  96. package/test-theme/widgets/category-list.liquid +340 -0
  97. package/test-theme/widgets/category.liquid +475 -0
  98. package/test-theme/widgets/discount-time.liquid +176 -0
  99. package/test-theme/widgets/footer-menu.liquid +695 -0
  100. package/test-theme/widgets/footer.liquid +179 -0
  101. package/test-theme/widgets/gallery.liquid +271 -0
  102. package/test-theme/widgets/header-menu.liquid +932 -0
  103. package/test-theme/widgets/header.liquid +159 -0
  104. package/test-theme/widgets/html.liquid +214 -0
  105. package/test-theme/widgets/news.liquid +217 -0
  106. package/test-theme/widgets/product-canvas.liquid +235 -0
  107. package/test-theme/widgets/product-carousel.liquid +502 -0
  108. package/test-theme/widgets/product.liquid +45 -0
  109. package/test-theme/widgets/recently-viewed.liquid +26 -0
  110. package/test-theme/widgets/shared/product-grid.liquid +339 -0
  111. package/test-theme/widgets/simple-product.liquid +42 -0
  112. package/test-theme/widgets/single-product.liquid +610 -0
  113. package/test-theme/widgets/spacebar-carousel.liquid +663 -0
  114. package/test-theme/widgets/spacebar.liquid +279 -0
  115. package/test-theme/widgets/splash.liquid +378 -0
  116. package/test-theme/widgets/testimonial-carousel.liquid +709 -0
@@ -0,0 +1,179 @@
1
+ {% liquid
2
+ assign widget_settings = widget.settings
3
+ assign widget_content = widget.content
4
+ assign widget_data = widget.data
5
+
6
+ assign columns = widget_data.columns | default: widget_content.columns | default: widget_settings.columns
7
+ if columns == nil or columns == empty
8
+ assign columns = widget_settings.links | default: widget_content.links | default: widget_data.links
9
+ endif
10
+
11
+ assign show_social = widget_settings.show_social
12
+ if show_social == nil and widget_content and widget_content.show_social != nil
13
+ assign show_social = widget_content.show_social
14
+ endif
15
+ if show_social == nil
16
+ assign show_social = true
17
+ endif
18
+
19
+ assign social_links = widget_settings.social_links | default: widget_content.social_links | default: widget_data.social_links
20
+ %}
21
+
22
+ <footer class="widget widget-footer" data-widget-id="{{ widget.id }}">
23
+ <div class="widget-footer__inner">
24
+ <div class="widget-footer__brand">
25
+ <h3>{{ widget_settings.title | default: widget_content.title | default: shop.name }}</h3>
26
+ <p>{{ widget_settings.description | default: widget_content.description | default: shop.description }}</p>
27
+ </div>
28
+
29
+ {% if columns and columns.size > 0 %}
30
+ <div class="widget-footer__columns">
31
+ {% for column in columns %}
32
+ <div class="widget-footer__column">
33
+ <h4>{{ column.title | default: column.heading }}</h4>
34
+ {% if column.links and column.links.size > 0 %}
35
+ <ul>
36
+ {% for link in column.links %}
37
+ <li>
38
+ <a href="{{ link.url | default: link.href | default: '#' }}">{{ link.title | default: link.label }}</a>
39
+ </li>
40
+ {% endfor %}
41
+ </ul>
42
+ {% endif %}
43
+ </div>
44
+ {% endfor %}
45
+ </div>
46
+ {% endif %}
47
+
48
+ {% if show_social and social_links and social_links.size > 0 %}
49
+ <div class="widget-footer__social">
50
+ <span>{{ widget_settings.social_title | default: 'Follow us' }}</span>
51
+ <ul>
52
+ {% for social in social_links %}
53
+ <li>
54
+ <a href="{{ social.url | default: social.href | default: '#' }}" aria-label="{{ social.label | default: social.title }}">
55
+ {% if social.icon %}
56
+ <img src="{{ social.icon }}" alt="{{ social.label | default: social.title }}" width="18" height="18" loading="lazy">
57
+ {% else %}
58
+ {{ social.label | default: social.title }}
59
+ {% endif %}
60
+ </a>
61
+ </li>
62
+ {% endfor %}
63
+ </ul>
64
+ </div>
65
+ {% endif %}
66
+ </div>
67
+
68
+ <div class="widget-footer__bottom">
69
+ <p>&copy; {{ 'now' | date: '%Y' }} {{ shop.name }}. {{ widget_settings.legal_text | default: 'All rights reserved.' }}</p>
70
+ {% if widget_settings.legal_links %}
71
+ <ul>
72
+ {% for link in widget_settings.legal_links %}
73
+ <li><a href="{{ link.url | default: link.href }}">{{ link.title | default: link.label }}</a></li>
74
+ {% endfor %}
75
+ </ul>
76
+ {% endif %}
77
+ </div>
78
+
79
+ <style>
80
+ .widget-footer {
81
+ background: {{ widget_settings.background_color | default: settings.color_background }};
82
+ color: {{ widget_settings.text_color | default: settings.color_text }};
83
+ padding: 3rem 1rem;
84
+ border-top: 1px solid rgba(0,0,0,0.08);
85
+ }
86
+ .widget-footer__inner {
87
+ max-width: {{ settings.container_width }}px;
88
+ margin: 0 auto 2rem;
89
+ display: grid;
90
+ gap: 2rem;
91
+ }
92
+ .widget-footer__brand h3 {
93
+ margin: 0 0 0.5rem;
94
+ font-size: 1.5rem;
95
+ }
96
+ .widget-footer__columns {
97
+ display: grid;
98
+ gap: 1.5rem;
99
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
100
+ }
101
+ .widget-footer__column h4 {
102
+ margin: 0 0 1rem;
103
+ font-size: 1rem;
104
+ text-transform: uppercase;
105
+ letter-spacing: 0.08em;
106
+ }
107
+ .widget-footer__column ul {
108
+ list-style: none;
109
+ margin: 0;
110
+ padding: 0;
111
+ display: grid;
112
+ gap: 0.5rem;
113
+ }
114
+ .widget-footer__column a {
115
+ color: inherit;
116
+ text-decoration: none;
117
+ }
118
+ .widget-footer__column a:hover {
119
+ text-decoration: underline;
120
+ }
121
+ .widget-footer__social ul {
122
+ list-style: none;
123
+ margin: 0.75rem 0 0;
124
+ padding: 0;
125
+ display: flex;
126
+ gap: 0.5rem;
127
+ flex-wrap: wrap;
128
+ }
129
+ .widget-footer__social a {
130
+ display: inline-flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ width: 36px;
134
+ height: 36px;
135
+ border-radius: 50%;
136
+ background: rgba(255,255,255,0.08);
137
+ color: inherit;
138
+ text-decoration: none;
139
+ font-size: 0.875rem;
140
+ }
141
+ .widget-footer__social img {
142
+ max-width: 18px;
143
+ max-height: 18px;
144
+ }
145
+ .widget-footer__bottom {
146
+ max-width: {{ settings.container_width }}px;
147
+ margin: 0 auto;
148
+ padding-top: 1.5rem;
149
+ border-top: 1px solid rgba(255,255,255,0.08);
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: 0.75rem;
153
+ font-size: 0.875rem;
154
+ }
155
+ .widget-footer__bottom ul {
156
+ list-style: none;
157
+ margin: 0;
158
+ padding: 0;
159
+ display: flex;
160
+ gap: 1rem;
161
+ flex-wrap: wrap;
162
+ }
163
+ .widget-footer__bottom a {
164
+ color: inherit;
165
+ text-decoration: none;
166
+ }
167
+ @media (min-width: 768px) {
168
+ .widget-footer__inner {
169
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 2fr);
170
+ }
171
+ .widget-footer__bottom {
172
+ flex-direction: row;
173
+ align-items: center;
174
+ justify-content: space-between;
175
+ }
176
+ }
177
+ </style>
178
+ </footer>
179
+
@@ -0,0 +1,271 @@
1
+ {% liquid
2
+ assign widget_settings = widget.settings
3
+ assign widget_data = widget.data
4
+
5
+ comment
6
+ Gallery Widget - Displays images in a grid layout
7
+ Static Widget: Content comes from widget_data.content (Items array)
8
+ Settings come from widget_settings
9
+ endcomment
10
+
11
+ assign content_data = widget_data.content | default: widget.content
12
+ assign items = content_data.Items | default: content_data.items | default: widget_data.Items | default: widget_data.items | default: widget_data.images
13
+
14
+ assign heading = widget_settings.title | default: widget.Title | default: widget.title
15
+ assign subtitle = widget_settings.subtitle
16
+ assign show_widget_title_raw = widget_settings.showWidgetTitle | default: 'Yes'
17
+ if show_widget_title_raw == null or show_widget_title_raw == blank or show_widget_title_raw == 'null'
18
+ assign show_widget_title = true
19
+ else
20
+ if show_widget_title_raw == 'Yes'
21
+ assign show_widget_title = true
22
+ elsif show_widget_title_raw == true
23
+ assign show_widget_title = true
24
+ else
25
+ assign show_widget_title = false
26
+ endif
27
+ endif
28
+ assign widget_title_alignment_raw = widget_settings.widgetTitleAlignment | default: 'center'
29
+ assign widget_title_alignment = widget_title_alignment_raw | downcase
30
+ if widget_title_alignment != 'left' and widget_title_alignment != 'right' and widget_title_alignment != 'center'
31
+ assign widget_title_alignment = 'center'
32
+ endif
33
+ assign columns = widget_settings.columns | default: 4
34
+ assign background_color = widget_settings.backgroundColor
35
+ assign text_color = widget_settings.textColor
36
+ assign show_container = widget_settings.showContainer
37
+ assign gap = widget_settings.gap | default: 16
38
+ %}
39
+
40
+ <section class="widget widget-gallery" data-widget-id="{{ widget.id }}"{% if background_color and background_color != blank and background_color != 'null' %} style="background-color: {{ background_color }};"{% endif %}>
41
+ <div class="widget-gallery__inner{% if show_container == 'No' %} widget-gallery__inner--full{% endif %}">
42
+ {% if show_widget_title %}
43
+ {% if heading or subtitle %}
44
+ <header class="widget-header" style="text-align: {{ widget_title_alignment }};{% if text_color and text_color != 'null' %} color: {{ text_color }};{% endif %}">
45
+ {% if heading %}<h2 class="widget-title">{{ heading }}</h2>{% endif %}
46
+ {% if subtitle %}<p class="widget-subtitle">{{ subtitle }}</p>{% endif %}
47
+ </header>
48
+ {% endif %}
49
+ {% endif %}
50
+
51
+ {% if items and items.size > 0 %}
52
+ <div class="widget-gallery__grid widget-gallery__grid--{{ columns }}-col">
53
+ {% for item in items %}
54
+ {% assign image_url = item.ImageUrl | default: item.imageUrl | default: item.Image | default: item.image | default: item.src | default: item.url %}
55
+ {% assign image_alt = item.Alt | default: item.alt | default: item.Caption | default: item.caption | default: item.Title | default: item.title | default: heading | default: 'Gallery image' %}
56
+ {% assign item_caption = item.Caption | default: item.caption %}
57
+ {% assign item_link = item.Link | default: item.link | default: item.TargetUrl | default: item.targetUrl %}
58
+
59
+ {% if image_url and image_url != blank and image_url != 'null' %}
60
+ {% if image_url contains 'http://' or image_url contains 'https://' %}
61
+ {% assign image_src = image_url %}
62
+ {% else %}
63
+ {% assign image_src = image_url | asset_url %}
64
+ {% endif %}
65
+ {% endif %}
66
+
67
+ {% if item_link and item_link != blank and item_link != 'null' %}
68
+ <a href="{{ item_link }}" class="widget-gallery__item widget-gallery__item--link">
69
+ {% if image_url and image_url != blank and image_url != 'null' %}
70
+ <img src="{{ image_src }}" alt="{{ image_alt }}" width="400" height="400" loading="lazy">
71
+ {% if item_caption and item_caption != blank %}
72
+ <div class="widget-gallery__caption">{{ item_caption }}</div>
73
+ {% endif %}
74
+ {% endif %}
75
+ </a>
76
+ {% else %}
77
+ <figure class="widget-gallery__item">
78
+ {% if image_url and image_url != blank and image_url != 'null' %}
79
+ <img src="{{ image_src }}" alt="{{ image_alt }}" width="400" height="400" loading="lazy">
80
+ {% if item_caption and item_caption != blank %}
81
+ <figcaption class="widget-gallery__caption">{{ item_caption }}</figcaption>
82
+ {% endif %}
83
+ {% endif %}
84
+ </figure>
85
+ {% endif %}
86
+ {% endfor %}
87
+ </div>
88
+ {% else %}
89
+ <div class="widget-empty">
90
+ <p>{{ widget_settings.empty_state | default: 'Add images to build your gallery.' }}</p>
91
+ </div>
92
+ {% endif %}
93
+ </div>
94
+
95
+ <style>
96
+ .widget-gallery {
97
+ padding: 48px 0;
98
+ position: relative;
99
+ }
100
+
101
+ .widget-gallery__inner {
102
+ max-width: 1400px;
103
+ margin: 0 auto;
104
+ padding: 0 24px;
105
+ }
106
+
107
+ .widget-gallery__inner--full {
108
+ max-width: 100%;
109
+ padding: 0;
110
+ }
111
+
112
+ .widget-gallery .widget-header {
113
+ margin-bottom: 32px;
114
+ position: static;
115
+ z-index: auto;
116
+ }
117
+
118
+ .widget-gallery .widget-title {
119
+ font-size: 1.4rem;
120
+ font-weight: 500;
121
+ line-height: 1.3;
122
+ color: #111;
123
+ margin: 0 0 8px 0;
124
+ letter-spacing: -0.01em;
125
+ }
126
+
127
+ .widget-gallery .widget-subtitle {
128
+ font-size: 14px;
129
+ color: #6b7280;
130
+ margin: 0;
131
+ }
132
+
133
+ .widget-gallery__grid {
134
+ display: grid;
135
+ gap: {{ gap }}px;
136
+ grid-auto-rows: 1fr;
137
+ }
138
+
139
+ .widget-gallery__grid--2-col {
140
+ grid-template-columns: repeat(2, 1fr);
141
+ }
142
+ .widget-gallery__grid--3-col {
143
+ grid-template-columns: repeat(3, 1fr);
144
+ }
145
+ .widget-gallery__grid--4-col {
146
+ grid-template-columns: repeat(4, 1fr);
147
+ }
148
+ .widget-gallery__grid--5-col {
149
+ grid-template-columns: repeat(5, 1fr);
150
+ }
151
+ .widget-gallery__grid--6-col {
152
+ grid-template-columns: repeat(6, 1fr);
153
+ }
154
+
155
+ .widget-gallery__item {
156
+ position: relative;
157
+ overflow: hidden;
158
+ background: #f5f5f5;
159
+ aspect-ratio: 1 / 1;
160
+ box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
161
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
162
+ border-radius: var(--border-radius-medium);
163
+ }
164
+
165
+ .widget-gallery__item:hover {
166
+ transform: translateY(-4px);
167
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
168
+ }
169
+
170
+ .widget-gallery__item--link {
171
+ display: block;
172
+ text-decoration: none;
173
+ color: inherit;
174
+ }
175
+
176
+ .widget-gallery__item img {
177
+ display: block;
178
+ width: 100%;
179
+ height: 100%;
180
+ object-fit: cover;
181
+ transition: transform 0.3s ease;
182
+ }
183
+
184
+ .widget-gallery__item:hover img {
185
+ transform: scale(1.05);
186
+ }
187
+
188
+ .widget-gallery__caption {
189
+ position: absolute;
190
+ bottom: 0;
191
+ left: 0;
192
+ right: 0;
193
+ padding: 16px;
194
+ background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%);
195
+ color: #fff;
196
+ font-size: 14px;
197
+ font-weight: 500;
198
+ line-height: 1.4;
199
+ }
200
+
201
+ .widget-gallery__item figure {
202
+ margin: 0;
203
+ height: 100%;
204
+ }
205
+
206
+ .widget-gallery__item figcaption {
207
+ position: absolute;
208
+ bottom: 0;
209
+ left: 0;
210
+ right: 0;
211
+ padding: 16px;
212
+ background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%);
213
+ color: #fff;
214
+ font-size: 14px;
215
+ font-weight: 500;
216
+ line-height: 1.4;
217
+ }
218
+
219
+ /* Tablet: 3 columns */
220
+ @media (max-width: 1024px) {
221
+ .widget-gallery__grid--4-col,
222
+ .widget-gallery__grid--5-col,
223
+ .widget-gallery__grid--6-col {
224
+ grid-template-columns: repeat(3, 1fr);
225
+ }
226
+ }
227
+
228
+ /* Small Tablet: 2 columns */
229
+ @media (max-width: 768px) {
230
+ .widget-gallery {
231
+ padding: 36px 0;
232
+ }
233
+ .widget-gallery__inner {
234
+ padding: 0 16px;
235
+ }
236
+ .widget-gallery .widget-header {
237
+ margin-bottom: 24px;
238
+ }
239
+ .widget-gallery .widget-title {
240
+ font-size: 1.3rem;
241
+ }
242
+ .widget-gallery__grid {
243
+ gap: 12px;
244
+ }
245
+ .widget-gallery__grid--3-col,
246
+ .widget-gallery__grid--4-col,
247
+ .widget-gallery__grid--5-col,
248
+ .widget-gallery__grid--6-col {
249
+ grid-template-columns: repeat(2, 1fr);
250
+ }
251
+ }
252
+
253
+ /* Mobile: 2 columns */
254
+ @media (max-width: 480px) {
255
+ .widget-gallery__inner {
256
+ padding: 0 12px;
257
+ }
258
+ .widget-gallery__grid {
259
+ gap: 10px;
260
+ }
261
+ .widget-gallery .widget-title {
262
+ font-size: 1.2rem;
263
+ }
264
+ .widget-gallery__caption,
265
+ .widget-gallery__item figcaption {
266
+ padding: 12px;
267
+ font-size: 13px;
268
+ }
269
+ }
270
+ </style>
271
+ </section>