@o2vend/theme-cli 1.0.37 → 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 (89) hide show
  1. package/lib/lib/dev-server.js +309 -40
  2. package/lib/lib/liquid-engine.js +3 -1
  3. package/lib/lib/mock-data.js +36 -124
  4. package/lib/lib/widget-service.js +12 -4
  5. package/package.json +1 -1
  6. package/test-theme/assets/async-sections.js +32 -24
  7. package/test-theme/assets/cart-drawer.js +20 -22
  8. package/test-theme/assets/cart-manager.js +1 -15
  9. package/test-theme/assets/checkout-price-handler.js +12 -11
  10. package/test-theme/assets/checkout.css +1415 -0
  11. package/test-theme/assets/checkout.js +3174 -0
  12. package/test-theme/assets/components.css +178 -29
  13. package/test-theme/assets/delivery-zone.js +1 -1
  14. package/test-theme/assets/product-detail.css +1050 -0
  15. package/test-theme/assets/product-detail.js +2940 -0
  16. package/test-theme/assets/theme.css +95 -120
  17. package/test-theme/assets/theme.js +781 -186
  18. package/test-theme/layout/theme.liquid +91 -17
  19. package/test-theme/sections/content.liquid +64 -57
  20. package/test-theme/sections/footer-fallback.liquid +57 -7
  21. package/test-theme/sections/footer.liquid +63 -12
  22. package/test-theme/sections/header-fallback.liquid +41 -41
  23. package/test-theme/sections/header.liquid +41 -51
  24. package/test-theme/sections/hero-fallback.liquid +1 -1
  25. package/test-theme/sections/hero.liquid +159 -136
  26. package/test-theme/snippets/account-sidebar.liquid +121 -29
  27. package/test-theme/snippets/add-to-cart-modal.liquid +258 -206
  28. package/test-theme/snippets/breadcrumbs.liquid +98 -11
  29. package/test-theme/snippets/cart-drawer.liquid +93 -0
  30. package/test-theme/snippets/delivery-zone-city-selector.liquid +101 -15
  31. package/test-theme/snippets/delivery-zone-modal.liquid +529 -84
  32. package/test-theme/snippets/delivery-zone-search.liquid +104 -18
  33. package/test-theme/snippets/login-modal.liquid +269 -82
  34. package/test-theme/snippets/mega-menu.liquid +130 -43
  35. package/test-theme/snippets/news-thumbnail.liquid +120 -28
  36. package/test-theme/snippets/pagination.liquid +1 -1
  37. package/test-theme/snippets/price.liquid +100 -9
  38. package/test-theme/snippets/product-card-related.liquid +22 -4
  39. package/test-theme/snippets/product-card-simple.liquid +521 -25
  40. package/test-theme/snippets/product-card.liquid +145 -232
  41. package/test-theme/snippets/rating.liquid +100 -9
  42. package/test-theme/snippets/skeleton-collection-grid.liquid +94 -8
  43. package/test-theme/snippets/skeleton-product-card.liquid +102 -16
  44. package/test-theme/snippets/skeleton-product-grid.liquid +87 -1
  45. package/test-theme/snippets/social-sharing.liquid +133 -32
  46. package/test-theme/templates/account/dashboard.liquid +30 -0
  47. package/test-theme/templates/account/loyalty-redemption.liquid +29 -28
  48. package/test-theme/templates/account/loyalty.liquid +45 -43
  49. package/test-theme/templates/account/order-detail.liquid +15 -8
  50. package/test-theme/templates/account/orders.liquid +189 -35
  51. package/test-theme/templates/account/profile.liquid +509 -114
  52. package/test-theme/templates/account/register.liquid +18 -8
  53. package/test-theme/templates/account/return-orders.liquid +31 -30
  54. package/test-theme/templates/account/store-credit.liquid +27 -26
  55. package/test-theme/templates/account/subscriptions.liquid +22 -5
  56. package/test-theme/templates/account/wishlist.liquid +88 -19
  57. package/test-theme/templates/address-book.liquid +166 -69
  58. package/test-theme/templates/categories.liquid +90 -30
  59. package/test-theme/templates/checkout.liquid +137 -3834
  60. package/test-theme/templates/error.liquid +23 -21
  61. package/test-theme/templates/index.liquid +29 -0
  62. package/test-theme/templates/login.liquid +33 -6
  63. package/test-theme/templates/order-confirmation.liquid +67 -9
  64. package/test-theme/templates/page.liquid +418 -206
  65. package/test-theme/templates/product-detail.liquid +124 -3878
  66. package/test-theme/templates/products.liquid +155 -30
  67. package/test-theme/templates/search.liquid +739 -225
  68. package/test-theme/widgets/brand-carousel.liquid +102 -82
  69. package/test-theme/widgets/brand.liquid +78 -50
  70. package/test-theme/widgets/carousel.liquid +253 -121
  71. package/test-theme/widgets/category-list-carousel.liquid +32 -8
  72. package/test-theme/widgets/category-list.liquid +21 -6
  73. package/test-theme/widgets/category.liquid +104 -37
  74. package/test-theme/widgets/discount-time.liquid +326 -119
  75. package/test-theme/widgets/footer-menu.liquid +115 -23
  76. package/test-theme/widgets/footer.liquid +118 -5
  77. package/test-theme/widgets/gallery.liquid +29 -5
  78. package/test-theme/widgets/header-menu.liquid +25 -13
  79. package/test-theme/widgets/header.liquid +64 -26
  80. package/test-theme/widgets/html.liquid +29 -6
  81. package/test-theme/widgets/news.liquid +6 -0
  82. package/test-theme/widgets/product-canvas.liquid +20 -12
  83. package/test-theme/widgets/product-carousel.liquid +118 -56
  84. package/test-theme/widgets/shared/product-grid.liquid +12 -0
  85. package/test-theme/widgets/single-product.liquid +688 -250
  86. package/test-theme/widgets/spacebar-carousel.liquid +39 -10
  87. package/test-theme/widgets/spacebar.liquid +77 -6
  88. package/test-theme/widgets/splash.liquid +40 -30
  89. package/test-theme/widgets/testimonial-carousel.liquid +111 -67
@@ -18,6 +18,92 @@
18
18
  </div>
19
19
 
20
20
  <style>
21
+ :root {
22
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
23
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
24
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
25
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
26
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
27
+ --color-success-dark: {{ settings.color_success | default: '#22c55e' }};
28
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
29
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
30
+ --color-danger-dark: {{ settings.color_error | default: '#ef4444' }};
31
+ --color-text: {{ settings.color_text | default: '#000000' }};
32
+ --color-text-light: {{ settings.color_text_light | default: '#999999' }};
33
+ --color-text-muted: {{ settings.color_text_muted | default: '#666666' }};
34
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
35
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
36
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
37
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
38
+ --color-white: #ffffff;
39
+ --color-black: {{ settings.color_primary_dark | default: '#333333' }};
40
+ --color-gray-25: {{ settings.color_background | default: '#ffffff' }};
41
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
42
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
43
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
44
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
45
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
46
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
47
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
48
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
49
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
50
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
51
+ --shadow-sm: var(--shadow-sm);
52
+ --shadow-md: var(--shadow-md);
53
+ --shadow-lg: var(--shadow-lg);
54
+ --shadow-opacity: {{ settings.shadow_opacity | default: 0.1 }};
55
+ --shadow-blur: {{ settings.shadow_blur | default: 8 }}px;
56
+ --radius-sm: var(--radius-md);
57
+ --radius-md: var(--radius-lg);
58
+ --radius-lg: var(--radius-xl);
59
+ --radius-xl: var(--radius-xl);
60
+ --radius-2xl: var(--radius-2xl);
61
+ --radius-full: var(--radius-full);
62
+ --spacing-xs: var(--space-2);
63
+ --spacing-sm: var(--space-4);
64
+ --spacing-md: var(--space-6);
65
+ --spacing-lg: var(--space-8);
66
+ --spacing-xl: var(--space-12);
67
+ --space-0: var(--space-0);
68
+ --space-0-5: var(--space-0-5);
69
+ --space-1: var(--space-1);
70
+ --space-1-5: var(--space-1-5);
71
+ --space-2: var(--space-2);
72
+ --space-3: var(--space-3);
73
+ --space-3-5: var(--space-3-5);
74
+ --space-4: var(--space-4);
75
+ --space-5: var(--space-5);
76
+ --space-6: var(--space-6);
77
+ --text-xs: var(--text-xs);
78
+ --text-sm: var(--text-sm);
79
+ --text-base: var(--text-base);
80
+ --text-lg: var(--text-lg);
81
+ --text-xl: var(--text-xl);
82
+ --text-2xl: var(--text-2xl);
83
+ --transition: var(--transition);
84
+ --transition-fast: var(--transition-fast);
85
+ --transition-slow: var(--transition-slow);
86
+ --duration-150: var(--duration-150);
87
+ --duration-300: var(--duration-300);
88
+ --ease-out: var(--ease-out);
89
+ --ease-in: var(--ease-in);
90
+ --ease-in-out: var(--ease-in-out);
91
+ --z-10: var(--z-10);
92
+ --z-modal: var(--z-modal);
93
+ --z-dropdown: var(--z-dropdown);
94
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
95
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
96
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
97
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
98
+ --font-weight-bold: {{ settings.font_weight_bold | default: 700 }};
99
+ --font-weight-medium: {{ settings.font_weight_medium | default: 500 }};
100
+ --line-height-heading: {{ settings.line_height_heading | default: 1.2 }};
101
+ --leading-none: var(--leading-none);
102
+ --leading-normal: var(--leading-normal);
103
+ --leading-snug: var(--leading-snug);
104
+ --tracking-wider: var(--tracking-wider);
105
+ }
106
+
21
107
  .delivery-zone-search-container {
22
108
  position: relative;
23
109
  width: 100%;
@@ -28,21 +114,21 @@
28
114
  top: 100%;
29
115
  left: 0;
30
116
  right: 0;
31
- margin-top: 4px;
32
- background: white;
33
- border: 2px solid #e5e7eb;
34
- border-radius: 8px;
35
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
117
+ margin-top: var(--space-1);
118
+ background: var(--color-white);
119
+ border: 2px solid var(--color-border);
120
+ border-radius: var(--radius-md);
121
+ box-shadow: var(--shadow-md);
36
122
  max-height: 300px;
37
123
  overflow-y: auto;
38
- z-index: 10;
124
+ z-index: var(--z-10);
39
125
  }
40
126
 
41
127
  .delivery-zone-search-result {
42
- padding: 12px 16px;
128
+ padding: var(--space-3) var(--space-4);
43
129
  cursor: pointer;
44
- transition: background-color 0.2s ease;
45
- border-bottom: 1px solid #f3f4f6;
130
+ transition: background-color var(--transition);
131
+ border-bottom: 1px solid var(--color-gray-100);
46
132
  }
47
133
 
48
134
  .delivery-zone-search-result:last-child {
@@ -50,29 +136,29 @@
50
136
  }
51
137
 
52
138
  .delivery-zone-search-result:hover {
53
- background-color: #f9fafb;
139
+ background-color: var(--color-gray-50);
54
140
  }
55
141
 
56
142
  .delivery-zone-search-result.active {
57
- background-color: #f3f4f6;
143
+ background-color: var(--color-gray-100);
58
144
  }
59
145
 
60
146
  .delivery-zone-result-zipcode {
61
147
  font-weight: 600;
62
- color: #111827;
63
- margin-bottom: 2px;
148
+ color: var(--color-gray-900);
149
+ margin-bottom: var(--space-0-5);
64
150
  }
65
151
 
66
152
  .delivery-zone-result-details {
67
- font-size: 12px;
68
- color: #6b7280;
153
+ font-size: var(--text-xs);
154
+ color: var(--color-gray-400);
69
155
  }
70
156
 
71
157
  .delivery-zone-search-empty {
72
- padding: 16px;
158
+ padding: var(--space-4);
73
159
  text-align: center;
74
- color: #6b7280;
75
- font-size: 14px;
160
+ color: var(--color-gray-400);
161
+ font-size: var(--text-sm);
76
162
  }
77
163
  </style>
78
164
 
@@ -21,17 +21,23 @@
21
21
  </header>
22
22
 
23
23
  <div class="login-modal__body">
24
+ <!-- Debug: {{ shop.settings.loginTypes | json }} -->
24
25
  <!-- Method selection -->
25
26
  <div class="login-modal__methods" data-login-view="methods">
27
+ {% assign logintypes = shop.settings.loginTypes %}
28
+ {% if logintypes contains 2 %}
26
29
  <button type="button" class="login-modal__method-card" data-login-method="email-otp">
27
30
  <div class="login-modal__method-title">Email OTP</div>
28
31
  <div class="login-modal__method-desc">Receive a one-time code to your email.</div>
29
32
  </button>
33
+ {% endif %}
30
34
 
35
+ {% if logintypes contains 1 %}
31
36
  <button type="button" class="login-modal__method-card" data-login-method="phone-otp">
32
37
  <div class="login-modal__method-title">Mobile OTP</div>
33
38
  <div class="login-modal__method-desc">Receive a one-time code via SMS.</div>
34
39
  </button>
40
+ {% endif %}
35
41
  </div>
36
42
 
37
43
  <!-- Email OTP flow (hidden until method is chosen) -->
@@ -56,7 +62,7 @@
56
62
  <input id="login-email-otp-code" name="otp" type="text" class="form-input" required maxlength="6" inputmode="numeric">
57
63
  </div>
58
64
  <div class="login-modal__resend">
59
- <button type="button" class="btn btn-ghost btn-sm" data-login-resend-email-otp>
65
+ <button type="button" class="btn btn-ghost btn-sm" data-login-resend-email-otp id="resend-email-otp-btn">
60
66
  Resend code
61
67
  </button>
62
68
  <span class="login-modal__resend-timer" data-login-resend-email-timer></span>
@@ -90,7 +96,7 @@
90
96
  <input id="login-phone-otp-code" name="otp" type="text" class="form-input" required maxlength="6" inputmode="numeric">
91
97
  </div>
92
98
  <div class="login-modal__resend">
93
- <button type="button" class="btn btn-ghost btn-sm" data-login-resend-phone-otp>
99
+ <button type="button" class="btn btn-ghost btn-sm" data-login-resend-phone-otp id="resend-phone-otp-btn">
94
100
  Resend code
95
101
  </button>
96
102
  <span class="login-modal__resend-timer" data-login-resend-phone-timer></span>
@@ -123,10 +129,101 @@
123
129
  </div>
124
130
 
125
131
  <style>
132
+ :root {
133
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
134
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
135
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
136
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
137
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
138
+ --color-success-dark: {{ settings.color_success | default: '#22c55e' }};
139
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
140
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
141
+ --color-danger-dark: {{ settings.color_error | default: '#ef4444' }};
142
+ --color-text: {{ settings.color_text | default: '#000000' }};
143
+ --color-text-light: {{ settings.color_text_light | default: '#999999' }};
144
+ --color-text-muted: {{ settings.color_text_muted | default: '#666666' }};
145
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
146
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
147
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
148
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
149
+ --color-white: #ffffff;
150
+ --color-black: {{ settings.color_primary_dark | default: '#333333' }};
151
+ --color-gray-25: {{ settings.color_background | default: '#ffffff' }};
152
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
153
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
154
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
155
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
156
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
157
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
158
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
159
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
160
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
161
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
162
+ /* Shadow variables - mapped from settings */
163
+ --shadow-opacity: {{ settings.shadow_opacity | default: 0.1 }};
164
+ --shadow-blur: {{ settings.shadow_blur | default: 8 }}px;
165
+ --shadow-spread: {{ settings.shadow_spread | default: 0 }}px;
166
+
167
+ /* Border radius - mapped from settings */
168
+ --radius-sm: {{ settings.border_radius_small | default: 6 }}px;
169
+ --radius-md: {{ settings.border_radius_medium | default: 10 }}px;
170
+ --radius-lg: {{ settings.border_radius_large | default: 16 }}px;
171
+ --radius-xl: 24px;
172
+ --radius-2xl: 32px;
173
+ --radius-full: 9999px;
174
+
175
+ /* Spacing - mapped from settings */
176
+ --spacing-xs: {{ settings.spacing_xsmall | default: 4 }}px;
177
+ --spacing-sm: {{ settings.spacing_small | default: 8 }}px;
178
+ --spacing-md: {{ settings.spacing_element | default: 16 }}px;
179
+ --spacing-lg: {{ settings.spacing_component | default: 24 }}px;
180
+ --spacing-xl: {{ settings.spacing_large | default: 32 }}px;
181
+
182
+ /* Typography - mapped from settings */
183
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
184
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
185
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
186
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
187
+ --font-weight-bold: {{ settings.font_weight_bold | default: 700 }};
188
+ --font-weight-medium: {{ settings.font_weight_medium | default: 500 }};
189
+ --line-height-heading: {{ settings.line_height_heading | default: 1.2 }};
190
+
191
+ /* Text sizes - based on font_size_base from settings */
192
+ --text-xs: 12px;
193
+ --text-sm: {{ settings.font_size_base | default: 14 }}px;
194
+ --text-base: {{ settings.font_size_base | default: 14 }}px;
195
+ --text-lg: 16px;
196
+ --text-xl: 18px;
197
+ --text-2xl: 21px;
198
+
199
+ /* Transitions - mapped from settings */
200
+ --transition-fast: 133ms cubic-bezier(0, 0, 0.2, 1);
201
+ --transition: {{ settings.button_transition_speed | default: 200 }}ms cubic-bezier(0, 0, 0.2, 1);
202
+ --transition-slow: 300ms cubic-bezier(0, 0, 0.2, 1);
203
+ --duration-150: 150ms;
204
+ --duration-300: 300ms;
205
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
206
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
207
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
208
+
209
+ /* Z-index values */
210
+ --z-10: 10;
211
+ --z-modal: 1050;
212
+ --z-dropdown: 1000;
213
+
214
+ /* Line heights - mapped from settings */
215
+ --leading-none: 1;
216
+ --leading-normal: {{ settings.line_height_base | default: 1.6 }};
217
+ --leading-snug: 1.375;
218
+
219
+ /* Letter spacing - mapped from settings */
220
+ --tracking-wider: {{ settings.letter_spacing_uppercase | default: 0.05 }}em;
221
+ }
222
+
126
223
  .login-modal {
127
224
  position: fixed;
128
225
  inset: 0;
129
- z-index: 10000;
226
+ z-index: var(--z-modal);
130
227
  display: none;
131
228
  }
132
229
  .login-modal--active {
@@ -137,160 +234,164 @@
137
234
  .login-modal__overlay {
138
235
  position: absolute;
139
236
  inset: 0;
140
- background: rgba(0, 0, 0, 0.45);
141
- backdrop-filter: blur(4px);
237
+ background: rgba(0, 0, 0, 0.4);
238
+ backdrop-filter: blur(8px);
239
+ z-index: 10000; /* Lower than panel */
142
240
  }
143
241
  .login-modal__panel {
144
242
  position: relative;
145
- background: #fff;
146
- border-radius: 16px;
147
- box-shadow: 0 24px 80px rgba(0, 0, 0, 0.25);
243
+ background: var(--color-white);
244
+ border-radius: var(--radius-md);
245
+ box-shadow: var(--shadow-xl);
148
246
  width: 100%;
149
247
  max-width: 480px;
150
248
  max-height: 90vh;
151
249
  display: flex;
152
250
  flex-direction: column;
153
251
  overflow: hidden;
252
+ z-index: 10001; /* Higher than overlay */
154
253
  }
155
254
  .login-modal__header {
156
255
  display: flex;
157
256
  align-items: center;
158
257
  justify-content: space-between;
159
- padding: 20px 24px;
160
- border-bottom: 1px solid #e5e7eb;
258
+ padding: var(--space-5) var(--space-6);
259
+ border-bottom: 1px solid var(--color-gray-200);
161
260
  }
162
261
  .login-modal__title {
163
262
  margin: 0;
164
- font-size: 20px;
263
+ font-size: 2rem;
165
264
  font-weight: 600;
166
- color: #111827;
265
+ color: var(--color-gray-900);
167
266
  }
168
267
  .login-modal__subtitle {
169
- margin: 4px 0 0;
170
- font-size: 14px;
171
- color: #6b7280;
268
+ margin: var(--space-1) 0 0;
269
+ font-size: var(--text-xs);
270
+ color: var(--color-gray-400);
172
271
  }
173
272
  .login-modal__close {
174
273
  border: none;
175
274
  background: none;
176
- padding: 4px;
177
- border-radius: 999px;
275
+ padding: var(--space-1);
276
+ border-radius: var(--radius-full);
178
277
  cursor: pointer;
179
- color: #6b7280;
278
+ color: var(--color-gray-400);
180
279
  }
181
280
  .login-modal__close:hover {
182
- background: #f3f4f6;
183
- color: #111827;
281
+ background: var(--color-gray-100);
282
+ color: var(--color-gray-900);
184
283
  }
185
284
  .login-modal__body {
186
- padding: 20px 24px 24px;
285
+ padding: var(--space-6) var(--space-6) var(--space-6);
187
286
  overflow-y: auto;
188
287
  }
189
288
  .login-modal__steps {
190
289
  display: flex;
191
- gap: 12px;
192
- font-size: 12px;
290
+ gap: var(--space-3);
291
+ font-size: var(--text-xs);
193
292
  text-transform: uppercase;
194
- letter-spacing: 0.08em;
195
- margin-bottom: 16px;
293
+ letter-spacing: var(--tracking-widest);
294
+ margin-bottom: var(--space-4);
196
295
  }
197
296
  .login-modal__step {
198
- padding-bottom: 4px;
297
+ padding-bottom: var(--space-1);
199
298
  border-bottom: 2px solid transparent;
200
- color: #9ca3af;
299
+ color: var(--color-gray-400);
201
300
  }
202
301
  .login-modal__step--active {
203
- border-color: #111827;
204
- color: #111827;
302
+ border-color: var(--color-gray-900);
303
+ color: var(--color-gray-900);
205
304
  }
206
305
  .login-modal__methods {
207
306
  display: grid;
208
307
  grid-template-columns: 1fr;
209
- gap: 12px;
308
+ gap: var(--space-3);
210
309
  }
211
310
  .login-modal__method-card {
212
311
  width: 100%;
213
312
  text-align: left;
214
- border-radius: 12px;
215
- border: 1px solid #e5e7eb;
216
- padding: 12px 14px;
217
- background: #f9fafb;
313
+ border-radius: var(--radius-md);
314
+ border: 1px solid var(--color-gray-200);
315
+ padding: var(--space-4) var(--space-5);
316
+ background: var(--color-white);
218
317
  cursor: pointer;
219
- transition: all 0.15s ease;
318
+ transition: all var(--duration-150) var(--ease-out);
220
319
  }
221
320
  .login-modal__method-card:hover {
222
- border-color: #111827;
223
- background: #f3f4f6;
321
+ border-color: var(--color-gray-300);
322
+ background: var(--color-gray-50);
323
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
224
324
  }
225
325
  .login-modal__method-title {
226
- font-size: 14px;
326
+ font-size: var(--text-base);
227
327
  font-weight: 600;
228
- color: #111827;
328
+ color: var(--color-gray-900);
329
+ margin-bottom: var(--space-1);
229
330
  }
230
331
  .login-modal__method-desc {
231
- font-size: 12px;
232
- color: #6b7280;
233
- margin-top: 2px;
332
+ font-size: var(--text-xs);
333
+ color: var(--color-gray-500);
334
+ line-height: var(--leading-normal);
234
335
  }
235
336
  .login-modal__form {
236
337
  display: flex;
237
338
  flex-direction: column;
238
- gap: 14px;
239
- margin-top: 4px;
339
+ gap: var(--space-3-5);
340
+ margin-top: var(--space-1);
240
341
  }
241
342
  .login-modal__flow {
242
- margin-top: 8px;
343
+ margin-top: var(--space-2);
243
344
  }
244
345
  .login-modal__info {
245
- font-size: 13px;
246
- color: #4b5563;
247
- margin: 0 0 8px;
346
+ font-size: 1.3rem;
347
+ color: var(--color-gray-600);
348
+ margin: 0 0 var(--space-2);
248
349
  }
249
350
  .login-modal__resend {
250
351
  display: flex;
251
352
  align-items: center;
252
353
  justify-content: space-between;
253
- gap: 8px;
254
- font-size: 12px;
354
+ gap: var(--space-2);
355
+ font-size: var(--text-xs);
255
356
  }
256
357
  .login-modal__resend-timer {
257
- color: #6b7280;
358
+ color: var(--color-gray-400);
258
359
  }
259
360
  .login-modal__error {
260
361
  display: none;
261
- font-size: 13px;
262
- color: #b91c1c;
362
+ font-size: 1.3rem;
363
+ color: var(--color-error);
263
364
  background: #fee2e2;
264
- border-radius: 8px;
265
- padding: 8px 10px;
365
+ border-radius: var(--radius-lg);
366
+ padding: var(--space-2) var(--space-2-5);
266
367
  }
267
368
  .login-modal__error--visible {
268
369
  display: block;
269
370
  }
270
371
  .login-modal__success {
271
372
  text-align: center;
272
- padding-top: 8px;
373
+ padding-top: var(--space-2);
273
374
  }
274
375
  .login-modal__success-icon {
275
- width: 44px;
276
- height: 44px;
277
- border-radius: 999px;
376
+ width: 2.75rem;
377
+ height: 2.75rem;
378
+ border-radius: var(--radius-full);
278
379
  background: #ecfdf3;
279
380
  display: inline-flex;
280
381
  align-items: center;
281
382
  justify-content: center;
282
- color: #16a34a;
283
- margin-bottom: 12px;
383
+ color: var(--color-success);
384
+ margin-bottom: var(--space-3);
284
385
  }
285
386
  .login-modal__success-title {
286
- margin: 0 0 4px;
287
- font-size: 18px;
387
+ margin: 0 0 var(--space-1);
388
+ font-size: var(--text-xl);
288
389
  font-weight: 600;
289
390
  }
290
391
  .login-modal__success-text {
291
- margin: 0 0 16px;
292
- font-size: 14px;
293
- color: #6b7280;
392
+ margin: 0 0 var(--space-4);
393
+ font-size: var(--text-sm);
394
+ color: var(--color-gray-400);
294
395
  }
295
396
 
296
397
  @media (max-width: 640px) {
@@ -298,49 +399,135 @@
298
399
  max-width: 100%;
299
400
  height: 100%;
300
401
  max-height: 100%;
301
- border-radius: 0;
402
+ border-radius: var(--radius-none);
302
403
  }
303
404
  }
304
405
 
305
406
  /* intl-tel-input styling for login modal */
306
- .login-phone-input {
407
+ .login-modal .login-phone-input {
307
408
  padding-left: 3.5rem;
308
409
  }
309
410
 
310
- .iti {
411
+ .login-modal .iti {
311
412
  width: 100%;
312
413
  }
313
414
 
314
- .iti__flag-container {
415
+ .login-modal .iti__flag-container {
416
+ z-index: var(--z-10);
315
417
  z-index: 1;
418
+ position: relative;
419
+ pointer-events: auto !important;
420
+ cursor: pointer;
316
421
  }
317
422
 
318
- .iti__selected-flag {
423
+ .login-modal .iti__selected-flag {
424
+ padding: 0 var(--space-3) 0 var(--space-2);
425
+ border-right: 1px solid var(--color-gray-200);
319
426
  padding: 0 0.75rem 0 0.5rem;
320
427
  border-right: 1px solid #e5e7eb;
428
+ cursor: pointer;
429
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
430
+ touch-action: manipulation;
431
+ min-height: 44px; /* Minimum tap target size for mobile */
432
+ display: flex;
433
+ align-items: center;
434
+ pointer-events: auto !important;
435
+ user-select: none;
436
+ -webkit-user-select: none;
437
+ }
438
+
439
+ .login-modal .iti__selected-flag:hover {
440
+ background-color: var(--color-gray-100);
321
441
  }
322
442
 
323
- .iti__selected-flag:hover {
324
- background-color: #f3f4f6;
443
+ .login-modal .iti__selected-flag:active {
444
+ background-color: #e5e7eb;
325
445
  }
326
446
 
327
- .iti__country-list {
328
- z-index: 10001;
329
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
330
- border: 1px solid #e5e7eb;
331
- border-radius: 8px;
447
+ /* Ensure country dropdown appears above modal */
448
+ .login-modal .iti__country-list {
449
+ z-index: var(--z-popover);
450
+ box-shadow: var(--shadow-md);
451
+ border: 1px solid var(--color-gray-200);
452
+ border-radius: var(--radius-lg);
332
453
  max-height: 200px;
333
454
  overflow-y: auto;
455
+ z-index: 10010 !important; /* Much higher than modal (10000) to ensure it's on top */
456
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2) !important;
457
+ border: 1px solid #e5e7eb !important;
458
+ border-radius: 8px !important;
459
+ max-height: 200px !important;
460
+ overflow-y: auto !important;
461
+ -webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */
462
+ pointer-events: auto !important;
463
+ position: fixed !important; /* Fixed positioning when appended to body */
464
+ background: white !important;
465
+ display: block !important;
466
+ margin-top: 0 !important;
467
+ }
468
+
469
+ /* Ensure dropdown is visible and clickable */
470
+ .login-modal--active .iti__country-list {
471
+ z-index: 10010 !important;
472
+ pointer-events: auto !important;
334
473
  }
335
474
 
336
- .iti__country {
337
- padding: 0.5rem 0.75rem;
475
+ .login-modal .iti__country {
476
+ padding: var(--space-2) var(--space-3);
477
+ padding: 0.75rem; /* Increased padding for better touch targets */
478
+ cursor: pointer;
479
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
480
+ touch-action: manipulation;
481
+ min-height: 44px; /* Minimum tap target size for mobile */
482
+ display: flex;
483
+ align-items: center;
484
+ pointer-events: auto;
338
485
  }
339
486
 
340
- .iti__country:hover,
341
- .iti__country.iti__highlight {
487
+ .login-modal .iti__country:hover,
488
+ .login-modal .iti__country.iti__highlight {
342
489
  background-color: #dbeafe;
343
490
  }
491
+
492
+ .login-modal .iti__country:active {
493
+ background-color: #bfdbfe;
494
+ }
495
+
496
+ /* Mobile-specific improvements */
497
+ @media (max-width: 640px) {
498
+ .login-modal .iti__selected-flag {
499
+ min-height: 48px; /* Larger tap target on mobile */
500
+ padding: 0 1rem 0 0.75rem;
501
+ }
502
+
503
+ .login-modal .iti__country {
504
+ min-height: 48px; /* Larger tap target on mobile */
505
+ padding: 0.875rem 1rem;
506
+ }
507
+
508
+ .login-modal .iti__country-list {
509
+ max-height: 250px; /* More space on mobile */
510
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
511
+ }
512
+ }
513
+
514
+ /* Align login modal primary buttons with product card button style */
515
+ .login-modal .btn-primary {
516
+ padding: 12px 16px;
517
+ border: none;
518
+ border-radius: var(--radius-md);
519
+ }
520
+
521
+ .login-modal .btn-primary:hover:not(:disabled) {
522
+ background-color: var(--color-primary-hover);
523
+ border: none;
524
+ }
525
+
526
+ .login-modal .btn-primary:active:not(:disabled) {
527
+ background-color: var(--color-primary-hover);
528
+ border: none;
529
+ transform: translateY(1px);
530
+ }
344
531
  </style>
345
532
 
346
533