@o2vend/theme-cli 1.0.36 → 1.0.38

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 (90) hide show
  1. package/README.md +4 -0
  2. package/lib/lib/dev-server.js +344 -48
  3. package/lib/lib/liquid-engine.js +3 -1
  4. package/lib/lib/mock-data.js +473 -119
  5. package/lib/lib/widget-service.js +12 -4
  6. package/package.json +2 -2
  7. package/test-theme/assets/async-sections.js +32 -24
  8. package/test-theme/assets/cart-drawer.js +20 -22
  9. package/test-theme/assets/cart-manager.js +1 -15
  10. package/test-theme/assets/checkout-price-handler.js +12 -11
  11. package/test-theme/assets/checkout.css +1415 -0
  12. package/test-theme/assets/checkout.js +3174 -0
  13. package/test-theme/assets/components.css +178 -29
  14. package/test-theme/assets/delivery-zone.js +1 -1
  15. package/test-theme/assets/product-detail.css +1050 -0
  16. package/test-theme/assets/product-detail.js +2940 -0
  17. package/test-theme/assets/theme.css +95 -120
  18. package/test-theme/assets/theme.js +781 -186
  19. package/test-theme/layout/theme.liquid +91 -17
  20. package/test-theme/sections/content.liquid +64 -57
  21. package/test-theme/sections/footer-fallback.liquid +57 -7
  22. package/test-theme/sections/footer.liquid +63 -12
  23. package/test-theme/sections/header-fallback.liquid +41 -41
  24. package/test-theme/sections/header.liquid +41 -51
  25. package/test-theme/sections/hero-fallback.liquid +1 -1
  26. package/test-theme/sections/hero.liquid +159 -136
  27. package/test-theme/snippets/account-sidebar.liquid +121 -29
  28. package/test-theme/snippets/add-to-cart-modal.liquid +258 -206
  29. package/test-theme/snippets/breadcrumbs.liquid +98 -11
  30. package/test-theme/snippets/cart-drawer.liquid +93 -0
  31. package/test-theme/snippets/delivery-zone-city-selector.liquid +101 -15
  32. package/test-theme/snippets/delivery-zone-modal.liquid +529 -84
  33. package/test-theme/snippets/delivery-zone-search.liquid +104 -18
  34. package/test-theme/snippets/login-modal.liquid +269 -82
  35. package/test-theme/snippets/mega-menu.liquid +130 -43
  36. package/test-theme/snippets/news-thumbnail.liquid +120 -28
  37. package/test-theme/snippets/pagination.liquid +1 -1
  38. package/test-theme/snippets/price.liquid +100 -9
  39. package/test-theme/snippets/product-card-related.liquid +22 -4
  40. package/test-theme/snippets/product-card-simple.liquid +521 -25
  41. package/test-theme/snippets/product-card.liquid +145 -232
  42. package/test-theme/snippets/rating.liquid +100 -9
  43. package/test-theme/snippets/skeleton-collection-grid.liquid +94 -8
  44. package/test-theme/snippets/skeleton-product-card.liquid +102 -16
  45. package/test-theme/snippets/skeleton-product-grid.liquid +87 -1
  46. package/test-theme/snippets/social-sharing.liquid +133 -32
  47. package/test-theme/templates/account/dashboard.liquid +30 -0
  48. package/test-theme/templates/account/loyalty-redemption.liquid +29 -28
  49. package/test-theme/templates/account/loyalty.liquid +45 -43
  50. package/test-theme/templates/account/order-detail.liquid +15 -8
  51. package/test-theme/templates/account/orders.liquid +189 -35
  52. package/test-theme/templates/account/profile.liquid +509 -114
  53. package/test-theme/templates/account/register.liquid +18 -8
  54. package/test-theme/templates/account/return-orders.liquid +31 -30
  55. package/test-theme/templates/account/store-credit.liquid +27 -26
  56. package/test-theme/templates/account/subscriptions.liquid +22 -5
  57. package/test-theme/templates/account/wishlist.liquid +88 -19
  58. package/test-theme/templates/address-book.liquid +166 -69
  59. package/test-theme/templates/categories.liquid +90 -30
  60. package/test-theme/templates/checkout.liquid +137 -3834
  61. package/test-theme/templates/error.liquid +23 -21
  62. package/test-theme/templates/index.liquid +29 -0
  63. package/test-theme/templates/login.liquid +33 -6
  64. package/test-theme/templates/order-confirmation.liquid +67 -9
  65. package/test-theme/templates/page.liquid +418 -206
  66. package/test-theme/templates/product-detail.liquid +124 -3878
  67. package/test-theme/templates/products.liquid +155 -30
  68. package/test-theme/templates/search.liquid +739 -225
  69. package/test-theme/widgets/brand-carousel.liquid +102 -82
  70. package/test-theme/widgets/brand.liquid +78 -50
  71. package/test-theme/widgets/carousel.liquid +253 -121
  72. package/test-theme/widgets/category-list-carousel.liquid +32 -8
  73. package/test-theme/widgets/category-list.liquid +21 -6
  74. package/test-theme/widgets/category.liquid +104 -37
  75. package/test-theme/widgets/discount-time.liquid +326 -119
  76. package/test-theme/widgets/footer-menu.liquid +115 -23
  77. package/test-theme/widgets/footer.liquid +118 -5
  78. package/test-theme/widgets/gallery.liquid +29 -5
  79. package/test-theme/widgets/header-menu.liquid +25 -13
  80. package/test-theme/widgets/header.liquid +64 -26
  81. package/test-theme/widgets/html.liquid +29 -6
  82. package/test-theme/widgets/news.liquid +6 -0
  83. package/test-theme/widgets/product-canvas.liquid +20 -12
  84. package/test-theme/widgets/product-carousel.liquid +118 -56
  85. package/test-theme/widgets/shared/product-grid.liquid +12 -0
  86. package/test-theme/widgets/single-product.liquid +688 -250
  87. package/test-theme/widgets/spacebar-carousel.liquid +39 -10
  88. package/test-theme/widgets/spacebar.liquid +77 -6
  89. package/test-theme/widgets/splash.liquid +40 -30
  90. package/test-theme/widgets/testimonial-carousel.liquid +111 -67
@@ -107,13 +107,14 @@
107
107
  <a href="{{ brand_url }}" class="brand-carousel-item" aria-label="{{ brand_name }}">
108
108
  {% if brand_image != blank and brand_image != '' and brand_image != 'null' %}
109
109
  <div class="brand-carousel-item__image">
110
- <img src="{{ brand_image }}" alt="{{ brand_name }}" width="200" height="60" loading="lazy" onerror="this.style.display='none'; this.parentElement.nextElementSibling.style.display='flex';">
110
+ <img src="{{ brand_image }}" alt="{{ brand_name }}" width="200" height="60" loading="lazy" data-img-fallback="parent-next">
111
111
  </div>
112
- <span class="brand-carousel-item__name brand-carousel-item__name--fallback" style="display: none;">{{ brand_name }}</span>
112
+ <span class="brand-carousel-item__name brand-carousel-item__name--fallback" >{{ brand_name }}</span>
113
113
  {% else %}
114
- <span class="brand-carousel-item__name">{{ brand_name }}</span>
114
+
115
115
  {% endif %}
116
116
  </a>
117
+ <div class="brand-carousel-item__name">{{ brand_name }}</div>
117
118
  </div>
118
119
  {% endfor %}
119
120
  </div>
@@ -136,13 +137,39 @@
136
137
  </div>
137
138
 
138
139
  <style>
140
+ :root {
141
+ --brand-carousel-white: var(--color-white);
142
+ --brand-carousel-text: var(--color-text);
143
+ --brand-carousel-text-muted: var(--color-text-muted);
144
+ --brand-carousel-border: var(--color-border);
145
+ --brand-carousel-surface: var(--color-surface);
146
+ --brand-carousel-spacing-section: var(--spacing-section);
147
+ --brand-carousel-spacing-large: var(--spacing-large);
148
+ --brand-carousel-spacing-component: var(--spacing-component);
149
+ --brand-carousel-spacing-element: var(--spacing-element);
150
+ --brand-carousel-spacing-small: var(--spacing-small);
151
+ --brand-carousel-spacing-xsmall: var(--spacing-xsmall);
152
+ --brand-carousel-container-padding: var(--container-padding);
153
+ --brand-carousel-radius-xl: var(--radius-xl);
154
+ --brand-carousel-radius-lg: var(--radius-lg);
155
+ --brand-carousel-radius: var(--radius);
156
+ --brand-carousel-radius-full: var(--radius-full);
157
+ --brand-carousel-shadow-sm: var(--shadow-sm);
158
+ --brand-carousel-shadow-md: var(--shadow-md);
159
+ --brand-carousel-shadow-lg: var(--shadow-lg);
160
+ --brand-carousel-transition: var(--transition);
161
+ --brand-carousel-transition-fast: var(--transition-fast);
162
+ --brand-carousel-text-sm: var(--text-sm);
163
+ --brand-carousel-text-xs: var(--text-xs);
164
+ }
165
+
139
166
  .widget-brand-carousel {
140
167
  {% if show_bottom_margin == 'Yes' %}
141
- padding: 2.5rem 0;
168
+ padding: var(--brand-carousel-spacing-section) 0;
142
169
  {% elsif show_bottom_margin == 'No' %}
143
- padding: 2.5rem 0 0;
170
+ padding: var(--brand-carousel-spacing-section) 0 0;
144
171
  {% else %}
145
- padding: 2.5rem 0;
172
+ padding: var(--brand-carousel-spacing-section) 0;
146
173
  {% endif %}
147
174
  background: {{ background_color | default: widget_settings.background_color | default: 'transparent' }};
148
175
  }
@@ -152,25 +179,23 @@
152
179
  margin-left: auto;
153
180
  margin-right: auto;
154
181
  {% endif %}
155
- padding-left: 24px;
156
- padding-right: 24px;
182
+ padding-left: var(--brand-carousel-container-padding);
183
+ padding-right: var(--brand-carousel-container-padding);
157
184
  }
158
185
  .brand-carousel-slide {
159
186
  position: relative;
160
- border-radius: 12px;
161
- background: #fff;
187
+
188
+ background: var(--brand-carousel-white);
162
189
  min-height: 100px;
163
190
  text-decoration: none;
164
191
  color: inherit;
165
192
  overflow: hidden;
166
193
 
167
- box-shadow:
168
- 0 0 8px rgba(15, 23, 42, 0.06),
169
- 0 0 16px rgba(15, 23, 42, 0.04);
194
+ box-shadow: var(--brand-carousel-shadow-sm);
170
195
 
171
196
  transition:
172
- transform 0.25s ease,
173
- box-shadow 0.25s ease;
197
+ transform var(--brand-carousel-transition),
198
+ box-shadow var(--brand-carousel-transition);
174
199
  }
175
200
 
176
201
  /* Hover / Focus */
@@ -178,21 +203,19 @@
178
203
  .brand-carousel-slide:focus-visible {
179
204
  transform: translateY(-2px);
180
205
 
181
- box-shadow:
182
- 0 4px 12px rgba(15, 23, 42, 0.10),
183
- 0 8px 24px rgba(15, 23, 42, 0.06);
206
+ box-shadow: var(--brand-carousel-shadow-md);
184
207
  }
185
208
 
186
209
  /* Brand Carousel - True Carousel Behavior */
187
210
  .widget-brand-carousel {
188
- padding: 48px 0;
211
+ padding: 40px 0px;
189
212
  overflow: hidden;
190
213
  }
191
214
 
192
215
  .widget-brand-carousel .brand-carousel-container {
193
216
  max-width: 1400px;
194
217
  margin: 0 auto;
195
- padding: 0 24px;
218
+ padding: 0 var(--brand-carousel-container-padding);
196
219
  }
197
220
 
198
221
  /* Header */
@@ -200,8 +223,8 @@
200
223
  display: flex;
201
224
  align-items: center;
202
225
  justify-content: space-between;
203
- margin-bottom: 28px;
204
- gap: 16px;
226
+ margin-bottom: var(--brand-carousel-spacing-component);
227
+ gap: var(--brand-carousel-spacing-element);
205
228
  }
206
229
 
207
230
  .widget-brand-carousel .brand-carousel-header__text {
@@ -213,45 +236,45 @@
213
236
  z-index: auto;
214
237
  }
215
238
  .widget-brand-carousel .brand-carousel-title {
216
- font-size: 1.4rem;
239
+ font-size: var(--brand-carousel-text-sm);
217
240
  font-weight: 500;
218
241
  line-height: 1.3;
219
- color: #111;
242
+ color: var(--brand-carousel-text);
220
243
  margin: 0;
221
244
  letter-spacing: -0.01em;
222
245
  }
223
246
 
224
247
  .widget-brand-carousel .brand-carousel-subtitle {
225
- font-size: 14px;
226
- color: #6b7280;
227
- margin: 6px 0 0 0;
248
+ font-size: var(--brand-carousel-text-sm);
249
+ color: var(--brand-carousel-text-muted);
250
+ margin: var(--brand-carousel-spacing-xsmall) 0 0 0;
228
251
  }
229
252
 
230
253
  /* Header Nav Arrows */
231
254
  .widget-brand-carousel .brand-carousel-nav {
232
255
  display: flex;
233
- gap: 8px;
256
+ gap: var(--brand-carousel-spacing-xsmall);
234
257
  }
235
258
 
236
259
  .widget-brand-carousel .brand-carousel-arrow {
237
260
  width: 40px;
238
261
  height: 40px;
239
- border-radius: 50%;
240
- border: 1px solid #e0e0e0;
241
- background: #fff;
262
+ border-radius: var(--brand-carousel-radius-full);
263
+ border: 1px solid var(--brand-carousel-border);
264
+ background: var(--brand-carousel-white);
242
265
  display: flex;
243
266
  align-items: center;
244
267
  justify-content: center;
245
268
  cursor: pointer;
246
- color: #333;
247
- transition: all 0.2s ease;
269
+ color: var(--brand-carousel-text);
270
+ transition: all var(--brand-carousel-transition-fast);
248
271
  flex-shrink: 0;
249
272
  }
250
273
 
251
274
  .widget-brand-carousel .brand-carousel-arrow:hover:not(:disabled) {
252
- background: #111;
253
- color: #fff;
254
- border-color: #111;
275
+ background: var(--brand-carousel-text);
276
+ color: var(--brand-carousel-white);
277
+ border-color: var(--brand-carousel-text);
255
278
  }
256
279
 
257
280
  .widget-brand-carousel .brand-carousel-arrow:disabled {
@@ -264,7 +287,7 @@
264
287
  position: relative;
265
288
  display: flex;
266
289
  align-items: center;
267
- gap: 12px;
290
+ gap: var(--brand-carousel-spacing-small);
268
291
  }
269
292
 
270
293
  /* Side Navigation Arrows */
@@ -272,22 +295,22 @@
272
295
  display: none; /* Hidden by default, shown on desktop */
273
296
  width: 30px;
274
297
  height: 30px;
275
- border-radius: 50%;
298
+ border-radius: var(--brand-carousel-radius-full);
276
299
  border: none;
277
- background: #fff;
278
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
300
+ background: var(--brand-carousel-white);
301
+ box-shadow: var(--brand-carousel-shadow-md);
279
302
  align-items: center;
280
303
  justify-content: center;
281
304
  cursor: pointer;
282
- color: #333;
283
- transition: all 0.2s ease;
305
+ color: var(--brand-carousel-text);
306
+ transition: all var(--brand-carousel-transition-fast);
284
307
  flex-shrink: 0;
285
308
  z-index: 10;
286
309
  }
287
310
 
288
311
  .widget-brand-carousel .brand-carousel-side-arrow:hover:not(:disabled) {
289
- background: #111;
290
- color: #fff;
312
+ background: var(--brand-carousel-text);
313
+ color: var(--brand-carousel-white);
291
314
  transform: scale(1.05);
292
315
  }
293
316
 
@@ -306,7 +329,7 @@
306
329
  /* The Scrolling Track */
307
330
  .widget-brand-carousel .brand-carousel-track {
308
331
  display: flex !important;
309
- gap: 20px;
332
+ gap: var(--brand-carousel-spacing-component);
310
333
  overflow-x: auto !important;
311
334
  overflow-y: hidden !important;
312
335
  scroll-snap-type: x mandatory;
@@ -314,7 +337,7 @@
314
337
  -webkit-overflow-scrolling: touch;
315
338
  scrollbar-width: none;
316
339
  -ms-overflow-style: none;
317
- padding: 4px 0;
340
+ padding: var(--brand-carousel-spacing-xsmall) 0;
318
341
  }
319
342
 
320
343
  .widget-brand-carousel .brand-carousel-track::-webkit-scrollbar {
@@ -335,8 +358,8 @@
335
358
  display: flex;
336
359
  align-items: center;
337
360
  justify-content: center;
338
- padding: 20px;
339
- background: #fff;
361
+
362
+ background: var(--brand-carousel-white);
340
363
  min-height: 100px;
341
364
  text-decoration: none;
342
365
  color: inherit;
@@ -350,25 +373,26 @@
350
373
  align-items: center;
351
374
  justify-content: center;
352
375
  width: 100%;
353
- height: 60px;
376
+
354
377
  }
355
378
 
356
379
  .widget-brand-carousel .brand-carousel-item__image img {
357
380
  max-width: 100%;
358
- max-height: 60px;
381
+
359
382
  width: auto;
360
383
  height: auto;
361
384
  object-fit: contain;
362
385
  }
363
386
 
364
387
  .widget-brand-carousel .brand-carousel-item__name {
365
- font-size: 14px;
388
+ font-size: var(--brand-carousel-text-sm);
366
389
  font-weight: 600;
367
- color: #111;
390
+ color: var(--brand-carousel-text);
368
391
  text-align: center;
369
392
  line-height: 1.3;
370
393
  word-break: break-word;
371
394
  letter-spacing: -0.01em;
395
+ margin-top:10px;
372
396
  }
373
397
 
374
398
  .widget-brand-carousel .brand-carousel-item__name--fallback {
@@ -377,7 +401,7 @@
377
401
  left: 50%;
378
402
  transform: translate(-50%, -50%);
379
403
  width: 100%;
380
- padding: 0 8px;
404
+ padding: 0 var(--brand-carousel-spacing-xsmall);
381
405
  box-sizing: border-box;
382
406
  display: none;
383
407
  align-items: center;
@@ -388,29 +412,29 @@
388
412
  .widget-brand-carousel .brand-carousel-dots {
389
413
  display: flex;
390
414
  justify-content: center;
391
- gap: 8px;
392
- margin-top: 20px;
415
+ gap: var(--brand-carousel-spacing-xsmall);
416
+ margin-top: var(--brand-carousel-spacing-component);
393
417
  }
394
418
 
395
419
  .widget-brand-carousel .brand-carousel-dot {
396
420
  width: 8px;
397
421
  height: 8px;
398
- border-radius: 50%;
399
- background: #d1d5db;
422
+ border-radius: var(--brand-carousel-radius-full);
423
+ background: var(--brand-carousel-border);
400
424
  border: none;
401
425
  padding: 0;
402
426
  cursor: pointer;
403
- transition: all 0.2s ease;
427
+ transition: all var(--brand-carousel-transition-fast);
404
428
  }
405
429
 
406
430
  .widget-brand-carousel .brand-carousel-dot:hover {
407
- background: #9ca3af;
431
+ background: var(--brand-carousel-text-muted);
408
432
  }
409
433
 
410
434
  .widget-brand-carousel .brand-carousel-dot.active {
411
- background: #111;
435
+ background: var(--brand-carousel-text);
412
436
  width: 24px;
413
- border-radius: 4px;
437
+ border-radius: var(--brand-carousel-radius);
414
438
  }
415
439
 
416
440
  /* Desktop: Show side arrows, hide header arrows */
@@ -438,75 +462,71 @@
438
462
  max-width: calc(25% - 15px);
439
463
  }
440
464
  .widget-brand-carousel .brand-carousel-track {
441
- gap: 20px;
465
+ gap: var(--brand-carousel-spacing-component);
442
466
  }
443
467
  }
444
468
 
445
469
  /* Small Tablet: 3 items */
446
470
  @media (max-width: 768px) {
447
471
  .widget-brand-carousel {
448
- padding: 36px 0;
472
+ padding: var(--brand-carousel-spacing-large) 0;
449
473
  }
450
474
  .widget-brand-carousel .brand-carousel-container {
451
- padding: 0 16px;
475
+ padding: 0 var(--brand-carousel-spacing-element);
452
476
  }
453
477
  .widget-brand-carousel .brand-carousel-title {
454
478
  font-size: 1.3rem;
455
479
  }
456
480
  .widget-brand-carousel .brand-carousel-track {
457
- gap: 12px;
481
+ gap: var(--brand-carousel-spacing-small);
458
482
  }
459
483
  .widget-brand-carousel .brand-carousel-slide {
460
484
  flex: 0 0 calc(33.333% - 8px);
461
485
  max-width: calc(33.333% - 8px);
462
486
  }
463
487
  .widget-brand-carousel .brand-carousel-item {
464
- padding: 16px;
488
+ padding: var(--brand-carousel-spacing-element);
465
489
  min-height: 80px;
466
490
  }
467
491
  .widget-brand-carousel .brand-carousel-item__image {
468
- height: 45px;
469
- }
470
- .widget-brand-carousel .brand-carousel-item__image img {
471
- max-height: 45px;
492
+ height: 100%;
472
493
  }
494
+
473
495
  .widget-brand-carousel .brand-carousel-arrow {
474
496
  width: 36px;
475
497
  height: 36px;
476
498
  }
477
499
  .widget-brand-carousel .brand-carousel-dots {
478
- margin-top: 16px;
500
+ margin-top: var(--brand-carousel-spacing-element);
479
501
  }
480
502
  }
481
503
 
482
504
  /* Mobile: 2.5 items (partial view for hint) */
483
505
  @media (max-width: 480px) {
484
506
  .widget-brand-carousel .brand-carousel-container {
485
- padding: 0 12px;
507
+ padding: 0 var(--brand-carousel-spacing-small);
486
508
  }
487
509
  .widget-brand-carousel .brand-carousel-track {
488
- gap: 10px;
510
+ gap: var(--brand-carousel-spacing-small);
489
511
  }
490
512
  .widget-brand-carousel .brand-carousel-slide {
491
513
  flex: 0 0 calc(40% - 6px);
492
514
  max-width: calc(40% - 6px);
493
515
  }
494
516
  .widget-brand-carousel .brand-carousel-item {
495
- padding: 12px;
517
+ padding: var(--brand-carousel-spacing-small);
496
518
  min-height: 70px;
497
- border-radius: 8px;
519
+ border-radius: var(--brand-carousel-radius-lg);
498
520
  }
499
521
  .widget-brand-carousel .brand-carousel-item__image {
500
- height: 40px;
501
- }
502
- .widget-brand-carousel .brand-carousel-item__image img {
503
- max-height: 40px;
522
+ height: 100%;
504
523
  }
524
+
505
525
  .widget-brand-carousel .brand-carousel-title {
506
526
  font-size: 1.2rem;
507
527
  }
508
528
  .widget-brand-carousel .brand-carousel-item__name {
509
- font-size: 12px;
529
+ font-size: var(--brand-carousel-text-xs);
510
530
  }
511
531
  }
512
532
 
@@ -517,13 +537,13 @@
517
537
  max-width: calc(50% - 5px);
518
538
  }
519
539
  .widget-brand-carousel .brand-carousel-track {
520
- gap: 8px;
540
+ gap: var(--brand-carousel-spacing-xsmall);
521
541
  }
522
542
  }
523
543
  </style>
524
544
 
525
545
  <script>
526
- (function() {
546
+ (() => {
527
547
  // Wait for DOM
528
548
  if (document.readyState === 'loading') {
529
549
  document.addEventListener('DOMContentLoaded', initBrandCarousel);
@@ -81,12 +81,14 @@
81
81
  {% else %}
82
82
  {% assign brand_image_src = brand_image | asset_url %}
83
83
  {% endif %}
84
- <img src="{{ brand_image_src }}" alt="{{ brand_name }}" width="200" height="60" loading="lazy" onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
84
+ <img src="{{ brand_image_src }}" alt="{{ brand_name }}" width="200" height="60" loading="lazy" data-img-fallback="next" data-img-fallback-display="block">
85
85
  <span class="widget-brand__name widget-brand__name--fallback" style="display: none;">{{ brand_name }}</span>
86
- {% else %}
87
- <span class="widget-brand__name">{{ brand_name }}</span>
86
+ <div class="widget-brand__name">{{ brand_name }}</div>
87
+ {% else %}
88
+
88
89
  {% endif %}
89
90
  </a>
91
+
90
92
  {% endfor %}
91
93
  </div>
92
94
  {% else %}
@@ -97,84 +99,106 @@
97
99
  </div>
98
100
 
99
101
  <style>
100
- .widget-brand {
101
- {% if show_bottom_margin == 'Yes' %}
102
- padding: 2.5rem 0;
103
- {% elsif show_bottom_margin == 'No' %}
104
- padding: 2.5rem 0 0;
105
- {% else %}
106
- padding: 2.5rem 0;
107
- {% endif %}
108
- background: {{ background_color | default: widget_settings.background_color | default: 'transparent' }};
102
+ :root {
103
+ --widget-brand-white: var(--color-white);
104
+ --widget-brand-text: var(--color-text);
105
+ --widget-brand-text-muted: var(--color-text-muted);
106
+ --widget-brand-border: var(--color-border);
107
+ --widget-brand-spacing-section: var(--spacing-section);
108
+ --widget-brand-spacing-large: var(--spacing-large);
109
+ --widget-brand-spacing-component: var(--spacing-component);
110
+ --widget-brand-spacing-element: var(--spacing-element);
111
+ --widget-brand-spacing-small: var(--spacing-small);
112
+ --widget-brand-spacing-xsmall: var(--spacing-xsmall);
113
+ --widget-brand-container-padding: var(--container-padding);
114
+ --widget-brand-radius-xl: var(--radius-xl);
115
+ --widget-brand-radius-lg: var(--radius-lg);
116
+ --widget-brand-transition-fast: var(--transition-fast);
117
+ --widget-brand-text-sm: var(--text-sm);
109
118
  }
119
+
120
+ .widget-brand {
121
+ padding-top: 40px;
122
+ padding-left: 0;
123
+ padding-right: 0;
124
+
125
+ {% if show_bottom_margin == 'Yes' %}
126
+ padding-bottom: 40px;
127
+ {% else %}
128
+ padding-bottom: 0;
129
+ {% endif %}
130
+
131
+ background: {{ background_color | default: widget_settings.background_color | default: 'transparent' }};
132
+ }
133
+
110
134
  .widget-brand__inner {
111
135
  {% if show_container == 'Yes' %}
112
136
  max-width: 1400px;
113
137
  margin-left: auto;
114
138
  margin-right: auto;
115
139
  {% endif %}
116
- padding-left: 24px;
117
- padding-right: 24px;
140
+ padding-left: var(--widget-brand-container-padding);
141
+ padding-right: var(--widget-brand-container-padding);
118
142
  }
119
143
 
120
144
  .widget-brand .widget-header {
121
- margin-bottom: 32px;
145
+ margin-bottom: var(--widget-brand-spacing-component);
122
146
  position: static;
123
147
  z-index: auto;
124
148
  }
125
149
  .widget-brand .widget-title {
126
- font-size: 1.4rem;
150
+ font-size: var(--widget-brand-text-sm);
127
151
  font-weight: 500;
128
152
  line-height: 1.3;
129
- color: #111;
130
- margin: 0 0 8px 0;
153
+ color: var(--widget-brand-text);
154
+ margin: 0 0 var(--widget-brand-spacing-xsmall) 0;
131
155
  letter-spacing: -0.01em;
132
156
  }
133
157
  .widget-brand .widget-subtitle {
134
- font-size: 14px;
135
- color: #6b7280;
158
+ font-size: var(--widget-brand-text-sm);
159
+ color: var(--widget-brand-text-muted);
136
160
  margin: 0;
137
161
  }
138
162
  .widget-brand__grid {
139
163
  display: grid;
140
- gap: 24px;
164
+ gap: var(--widget-brand-spacing-component);
141
165
  grid-template-columns: repeat(6, 1fr);
142
166
  align-items: stretch;
143
167
  }
144
168
  .widget-brand__item {
145
169
  position: relative;
146
- display: flex;
170
+ display: flex;
171
+ flex-direction: column;
147
172
  align-items: center;
148
173
  justify-content: center;
149
- padding: 12px;
150
- border-radius: 12px;
151
- background: #fff;
152
- box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
174
+ padding: var(--widget-brand-spacing-small);
175
+ border-radius: var(--widget-brand-radius-xl);
176
+ background: var(--widget-brand-white);
153
177
  min-height: 100px;
154
178
  text-decoration: none;
155
179
  color: inherit;
156
- transition: transform 0.2s ease, box-shadow 0.2s ease;
180
+ transition: transform var(--widget-brand-transition-fast);
157
181
  overflow: hidden;
158
182
  }
159
183
  .widget-brand__item:hover {
160
184
  transform: translateY(-4px);
161
- box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
162
185
  }
163
186
  .widget-brand__item img {
164
187
  max-width: 100%;
165
- max-height: 60px;
188
+ border-radius: var(--brand-carousel-radius-lg);
166
189
  width: auto;
167
190
  height: auto;
168
191
  object-fit: contain;
169
192
  }
170
193
  .widget-brand__name {
171
- font-size: 14px;
194
+ font-size: var(--widget-brand-text-sm);
172
195
  font-weight: 600;
173
- color: #111;
196
+ color: var(--widget-brand-text);
174
197
  text-align: center;
175
198
  line-height: 1.3;
176
199
  word-break: break-word;
177
200
  letter-spacing: -0.01em;
201
+ margin-top: 10px;
178
202
  }
179
203
  .widget-brand__name--fallback {
180
204
  position: absolute;
@@ -182,64 +206,68 @@
182
206
  left: 50%;
183
207
  transform: translate(-50%, -50%);
184
208
  width: 100%;
185
- padding: 0 8px;
209
+ padding: 0 var(--widget-brand-spacing-xsmall);
186
210
  }
187
211
 
188
212
  /* Tablet: 4 columns */
189
213
  @media (max-width: 1024px) {
190
214
  .widget-brand__grid {
191
215
  grid-template-columns: repeat(4, 1fr);
192
- gap: 20px;
216
+ gap: var(--widget-brand-spacing-component);
193
217
  }
194
218
  }
195
219
 
196
- /* Mobile: 3 columns */
220
+ /* Mobile: 2 columns for cleaner layout */
197
221
  @media (max-width: 768px) {
198
222
  .widget-brand {
199
- padding: 32px 0;
223
+ padding: 40px 0;
200
224
  }
201
225
  .widget-brand__inner {
202
- padding: 0 16px;
226
+ padding: 0 var(--widget-brand-spacing-element);
203
227
  }
204
228
  .widget-brand .widget-header {
205
- margin-bottom: 24px;
229
+ margin-bottom: var(--widget-brand-spacing-component);
206
230
  }
207
231
  .widget-brand .widget-title {
208
232
  font-size: 1.3rem;
209
233
  }
210
234
  .widget-brand__grid {
211
- grid-template-columns: repeat(3, 1fr);
212
- gap: 16px;
235
+ grid-template-columns: repeat(2, minmax(0, 1fr));
236
+ gap: 10px;
213
237
  }
214
238
  .widget-brand__item {
215
- padding: 16px;
216
- min-height: 80px;
239
+ padding: 10px;
240
+ min-height: 88px;
217
241
  }
218
242
  .widget-brand__item img {
219
- max-height: 40px;
243
+ width: 100%;
244
+ max-height: 52px;
245
+ object-fit: contain;
220
246
  }
247
+
221
248
  }
222
249
 
223
250
  /* Small Mobile: 2 columns */
224
251
  @media (max-width: 480px) {
225
252
  .widget-brand__inner {
226
- padding: 0 12px;
253
+ padding: 0 var(--widget-brand-spacing-small);
227
254
  }
228
255
  .widget-brand__grid {
229
- grid-template-columns: repeat(2, 1fr);
230
- gap: 12px;
256
+ grid-template-columns: repeat(2, minmax(0, 1fr));
257
+ gap: 8px;
231
258
  }
232
259
  .widget-brand__item {
233
- padding: 12px;
234
- min-height: 70px;
235
- border-radius: 8px;
260
+ padding: 8px;
261
+ min-height: 82px;
262
+ border-radius: var(--widget-brand-radius-lg);
236
263
  }
237
264
  .widget-brand__item img {
238
- max-height: 36px;
265
+ max-height: 48px;
239
266
  }
267
+
240
268
  .widget-brand .widget-title {
241
269
  font-size: 1.2rem;
242
270
  }
243
271
  }
244
272
  </style>
245
- </section>
273
+ </section>