@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,232 @@
1
+ {% layout 'layout/theme' %}
2
+ {% comment %}
3
+ Customer Registration Template
4
+ {% endcomment %}
5
+
6
+ <div class="customer-register">
7
+ <div class="customer-register-container">
8
+ <div class="customer-register-header">
9
+ <h1 class="customer-register-title">Create Account</h1>
10
+ <p class="customer-register-subtitle">Sign up to start shopping</p>
11
+ </div>
12
+
13
+ <div class="customer-register-form-wrapper">
14
+ <form class="customer-register-form" action="/webstoreapi/customer/register" method="post" id="customer-register-form">
15
+ {% if form.errors %}
16
+ <div class="form-errors">
17
+ {% for error in form.errors %}
18
+ <p class="form-error">{{ error }}</p>
19
+ {% endfor %}
20
+ </div>
21
+ {% endif %}
22
+
23
+ <div class="form-group">
24
+ <label for="customer-first-name" class="form-label">First Name</label>
25
+ <input type="text"
26
+ id="customer-first-name"
27
+ name="firstName"
28
+ class="form-input"
29
+ placeholder="Enter your first name"
30
+ required
31
+ autocomplete="given-name">
32
+ </div>
33
+
34
+ <div class="form-group">
35
+ <label for="customer-last-name" class="form-label">Last Name</label>
36
+ <input type="text"
37
+ id="customer-last-name"
38
+ name="lastName"
39
+ class="form-input"
40
+ placeholder="Enter your last name"
41
+ required
42
+ autocomplete="family-name">
43
+ </div>
44
+
45
+ <div class="form-group">
46
+ <label for="customer-email-register" class="form-label">Email</label>
47
+ <input type="email"
48
+ id="customer-email-register"
49
+ name="email"
50
+ class="form-input"
51
+ placeholder="Enter your email"
52
+ required
53
+ autocomplete="email">
54
+ </div>
55
+
56
+ <div class="form-group">
57
+ <label for="customer-password-register" class="form-label">Password</label>
58
+ <input type="password"
59
+ id="customer-password-register"
60
+ name="password"
61
+ class="form-input"
62
+ placeholder="Create a password"
63
+ required
64
+ autocomplete="new-password"
65
+ minlength="8">
66
+ <p class="form-help">Must be at least 8 characters</p>
67
+ </div>
68
+
69
+ <div class="form-group">
70
+ <label for="customer-password-confirm" class="form-label">Confirm Password</label>
71
+ <input type="password"
72
+ id="customer-password-confirm"
73
+ name="passwordConfirm"
74
+ class="form-input"
75
+ placeholder="Confirm your password"
76
+ required
77
+ autocomplete="new-password">
78
+ </div>
79
+
80
+ <div class="form-group">
81
+ <label class="form-checkbox">
82
+ <input type="checkbox" name="acceptTerms" id="accept-terms" required>
83
+ <span>I agree to the <a href="/pages/terms" target="_blank">Terms of Service</a> and <a href="/pages/privacy" target="_blank">Privacy Policy</a></span>
84
+ </label>
85
+ </div>
86
+
87
+ <button type="submit" class="btn btn-primary btn-block">Create Account</button>
88
+ </form>
89
+
90
+ <div class="customer-register-footer">
91
+ <p>Already have an account? <a href="/customer/login">Sign in</a></p>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <style>
98
+ .customer-register {
99
+ min-height: 60vh;
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ padding: 4rem 1rem;
104
+ background: {{ settings.color_background }};
105
+ }
106
+
107
+ .customer-register-container {
108
+ max-width: 400px;
109
+ width: 100%;
110
+ }
111
+
112
+ .customer-register-header {
113
+ text-align: center;
114
+ margin-bottom: 2rem;
115
+ }
116
+
117
+ .customer-register-title {
118
+ font-size: 2rem;
119
+ font-weight: 700;
120
+ margin: 0 0 0.5rem 0;
121
+ color: {{ settings.color_text }};
122
+ }
123
+
124
+ .customer-register-subtitle {
125
+ font-size: 1rem;
126
+ color: {{ settings.color_text_light }};
127
+ margin: 0;
128
+ }
129
+
130
+ .customer-register-form-wrapper {
131
+ background: white;
132
+ padding: 2rem;
133
+ border-radius: 0.5rem;
134
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
135
+ }
136
+
137
+ .form-group {
138
+ margin-bottom: 1.5rem;
139
+ }
140
+
141
+ .form-label {
142
+ display: block;
143
+ margin-bottom: 0.5rem;
144
+ font-weight: 500;
145
+ color: {{ settings.color_text }};
146
+ }
147
+
148
+ .form-input {
149
+ width: 100%;
150
+ padding: 0.75rem 1rem;
151
+ border: 1px solid #d1d5db;
152
+ border-radius: 0.375rem;
153
+ font-size: 1rem;
154
+ transition: border-color 0.2s ease;
155
+ }
156
+
157
+ .form-input:focus {
158
+ outline: none;
159
+ border-color: {{ settings.color_primary }};
160
+ }
161
+
162
+ .form-help {
163
+ font-size: 0.875rem;
164
+ color: {{ settings.color_text_light }};
165
+ margin: 0.25rem 0 0 0;
166
+ }
167
+
168
+ .form-checkbox {
169
+ display: flex;
170
+ align-items: flex-start;
171
+ gap: 0.5rem;
172
+ cursor: pointer;
173
+ font-size: 0.875rem;
174
+ }
175
+
176
+ .form-checkbox a {
177
+ color: {{ settings.color_primary }};
178
+ text-decoration: none;
179
+ }
180
+
181
+ .form-checkbox a:hover {
182
+ text-decoration: underline;
183
+ }
184
+
185
+ .form-errors {
186
+ background: #fee2e2;
187
+ border: 1px solid #fecaca;
188
+ border-radius: 0.375rem;
189
+ padding: 1rem;
190
+ margin-bottom: 1.5rem;
191
+ }
192
+
193
+ .form-error {
194
+ color: #991b1b;
195
+ margin: 0;
196
+ font-size: 0.875rem;
197
+ }
198
+
199
+ .btn-block {
200
+ width: 100%;
201
+ }
202
+
203
+ .customer-register-footer {
204
+ text-align: center;
205
+ margin-top: 1.5rem;
206
+ padding-top: 1.5rem;
207
+ border-top: 1px solid #e5e7eb;
208
+ }
209
+
210
+ .customer-register-footer a {
211
+ color: {{ settings.color_primary }};
212
+ text-decoration: none;
213
+ }
214
+
215
+ .customer-register-footer a:hover {
216
+ text-decoration: underline;
217
+ }
218
+ </style>
219
+
220
+ <script>
221
+ document.getElementById('customer-register-form')?.addEventListener('submit', function(e) {
222
+ const password = document.getElementById('customer-password-register').value;
223
+ const passwordConfirm = document.getElementById('customer-password-confirm').value;
224
+
225
+ if (password !== passwordConfirm) {
226
+ e.preventDefault();
227
+ alert('Passwords do not match');
228
+ return false;
229
+ }
230
+ });
231
+ </script>
232
+
@@ -0,0 +1,348 @@
1
+ {% layout 'layout/theme' %}
2
+
3
+ <section class="account-page">
4
+ <div class="container">
5
+
6
+ <!-- Page Header -->
7
+ <header class="account-header">
8
+ <h1 class="account-title display-2">My Return Orders</h1>
9
+ <p class="account-subtitle">View and manage your orders</p>
10
+ </header>
11
+
12
+ <div class="account-layout">
13
+
14
+ <!-- Sidebar -->
15
+ <aside class="account-sidebar">
16
+ {% render 'snippets/account-sidebar' %}
17
+ </aside>
18
+
19
+ <!-- Orders Content -->
20
+ <main class="account-content">
21
+ {% hook 'account_orders_before' %}
22
+
23
+ <div class="account-section-header">
24
+ <h2 class="account-section-title">Return Order History</h2>
25
+ </div>
26
+
27
+ <div class="orders-list">
28
+ {% assign orderItems = orders.returns | default: orders.orders | default: orders %}
29
+
30
+ {% if orderItems and orderItems.size > 0 %}
31
+ {% for order in orderItems %}
32
+ {% hook 'account_order_before' %}
33
+
34
+ <article class="order-card">
35
+ <div class="order-card-left">
36
+ <h3 class="order-number">
37
+ Order #{{ order.orderNumber }}
38
+ </h3>
39
+
40
+ <div class="order-meta">
41
+ <span class="order-date">
42
+ {{ order.createdOn | date: "%d-%m-%Y" }}
43
+ </span>
44
+ <span class="order-items">
45
+ {{ order.itemCount }} item{{ order.itemCount | pluralize }}
46
+ </span>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="order-card-center">
51
+ <span class="status-badge status-{{ order.orderStatus | downcase }}">
52
+ {{ order.orderStatus }}
53
+ </span>
54
+ </div>
55
+
56
+ <div class="order-card-right">
57
+ <div class="order-total">
58
+ {{ order.orderTotal | money_with_settings: shop.settings }}
59
+ </div>
60
+
61
+ <a
62
+ href="/orders/{{ order.id }}"
63
+ class="btn btn-sm btn-outline"
64
+ aria-label="View order {{ order.orderNumber }}"
65
+ >
66
+ View Details
67
+ </a>
68
+ </div>
69
+ </article>
70
+
71
+ {% hook 'account_order_after' %}
72
+ {% endfor %}
73
+ {% else %}
74
+ <div class="empty-state">
75
+ <h3>No orders yet</h3>
76
+ <p>You haven’t placed any orders.</p>
77
+ <a href="/products" class="btn btn-primary">
78
+ Start Shopping
79
+ </a>
80
+ </div>
81
+ {% endif %}
82
+ <!-- Pagination -->
83
+ {% include 'snippets/pagination', pagination: pagination %}
84
+ </div>
85
+
86
+ {% hook 'account_orders_after' %}
87
+ </main>
88
+
89
+ </div>
90
+ </div>
91
+
92
+ </section>
93
+ <style>/* ===============================
94
+ ACCOUNT PAGE BASE
95
+ =============================== */
96
+ .pagination {
97
+ display: flex;
98
+ justify-content: flex-end;
99
+ align-items: center;
100
+ }
101
+ :root {
102
+ --color-primary: #1f2937;
103
+ --color-primary-hover: #1d4ed8;
104
+ --color-primary-light: #dbeafe;
105
+ --color-success: #10b981;
106
+ --color-success-light: #d1fae5;
107
+ --color-success-dark: #065f46;
108
+ --color-warning: #f59e0b;
109
+ --color-warning-light: #fef3c7;
110
+ --color-warning-dark: #92400e;
111
+ --color-danger: #ef4444;
112
+ --color-danger-light: #fee2e2;
113
+ --color-danger-dark: #991b1b;
114
+ --color-info: #3b82f6;
115
+ --color-info-light: #dbeafe;
116
+ --color-info-dark: #1e40af;
117
+ --color-text: #1f2937;
118
+ --color-text-light: #6b7280;
119
+ --color-background: #f9fafb;
120
+ --color-card-bg: #ffffff;
121
+ --color-border: #e5e7eb;
122
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
123
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
124
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
125
+ --radius-md: 0.5rem;
126
+ --radius-lg: 0.75rem;
127
+ --spacing-sm: 1rem;
128
+ --spacing-md: 1.5rem;
129
+ --spacing-lg: 2rem;
130
+ --spacing-xl: 3rem;
131
+ }
132
+
133
+ .account-page {
134
+ padding: var(--spacing-xl) var(--spacing-sm);
135
+ background: var(--color-background);
136
+ min-height: 100vh;
137
+ }
138
+
139
+ .container {
140
+ max-width: 1200px;
141
+ margin: 0 auto;
142
+ padding: 0 var(--spacing-sm);
143
+ }
144
+
145
+ .account-header {
146
+ text-align: center;
147
+ margin-bottom: var(--spacing-xl);
148
+ }
149
+
150
+ .account-title {
151
+ font-size: 2.5rem;
152
+ font-weight: 700;
153
+ color: var(--color-text);
154
+ margin: 0 0 0.5rem 0;
155
+ letter-spacing: -0.025em;
156
+ }
157
+
158
+ .account-subtitle {
159
+ font-size: 1.125rem;
160
+ color: var(--color-text-light);
161
+ margin: 0;
162
+ }
163
+
164
+ /* Two-column layout on desktop */
165
+ .account-layout {
166
+ display: grid;
167
+ grid-template-columns: 280px minmax(0, 1fr);
168
+ gap: var(--spacing-lg);
169
+ align-items: flex-start;
170
+ }
171
+
172
+ /* Sidebar */
173
+ .account-sidebar {
174
+ position: sticky;
175
+ top: var(--spacing-lg);
176
+ background: var(--color-card-bg);
177
+ border-radius: var(--radius-lg);
178
+ padding: var(--spacing-md);
179
+ box-shadow: var(--shadow-md);
180
+ border: 1px solid var(--color-border);
181
+ }
182
+
183
+ /* Main content */
184
+ .account-content {
185
+ background: var(--color-card-bg);
186
+ border-radius: var(--radius-lg);
187
+ padding: var(--spacing-lg);
188
+ box-shadow: var(--shadow-md);
189
+ border: 1px solid var(--color-border);
190
+
191
+ overflow-y: auto;
192
+ }
193
+
194
+ .account-section-header {
195
+ margin-bottom: var(--spacing-lg);
196
+ padding-bottom: var(--spacing-md);
197
+ border-bottom: 1px solid var(--color-border);
198
+ }
199
+
200
+ .account-section-title {
201
+ font-size: 1.75rem;
202
+ font-weight: 600;
203
+ color: var(--color-text);
204
+ margin: 0;
205
+ }
206
+
207
+ /* ===============================
208
+ ORDERS LIST
209
+ =============================== */
210
+
211
+ .orders-list {
212
+ display: flex;
213
+ flex-direction: column;
214
+ gap: 1rem;
215
+ }
216
+
217
+ /* Order Card */
218
+ .order-card {
219
+ display: grid;
220
+ grid-template-columns: 1fr 1fr 1fr;
221
+ gap: 1.5rem;
222
+ align-items: center;
223
+ padding: 1.25rem 1.5rem;
224
+ border-radius: 12px;
225
+ border: 1px solid rgba(0, 0, 0, 0.08);
226
+ box-sizing: border-box;
227
+ }
228
+
229
+ .order-card-left {
230
+ display: flex;
231
+ flex-direction: column;
232
+ gap: 0.4rem;
233
+ }
234
+
235
+ .order-number {
236
+ margin: 0;
237
+ font-size: 1.4rem;
238
+ font-weight: 600;
239
+ }
240
+
241
+ .order-meta {
242
+ display: flex;
243
+ gap: 1rem;
244
+ font-size: 1.4rem;
245
+ opacity: 0.85;
246
+ }
247
+
248
+ .order-card-center {
249
+ display: flex;
250
+ justify-content: center;
251
+ }
252
+
253
+ .order-card-right {
254
+ display: flex;
255
+ flex-direction: column;
256
+ align-items: flex-end;
257
+ gap: 0.6rem;
258
+ }
259
+
260
+ .order-total {
261
+ font-size: 1.4rem;
262
+ font-weight: 600;
263
+ }
264
+
265
+ /* ===============================
266
+ EMPTY STATE
267
+ =============================== */
268
+
269
+ .empty-state {
270
+ text-align: center;
271
+ padding: 3rem 1rem;
272
+ }
273
+
274
+ .empty-state h3 {
275
+ margin-bottom: 0.5rem;
276
+ }
277
+
278
+ /* ===============================
279
+ RESPONSIVE
280
+ =============================== */
281
+
282
+ /* Tablet and below: stack sidebar on top */
283
+ @media (max-width: 1024px) {
284
+ .account-layout {
285
+ grid-template-columns: 1fr;
286
+ }
287
+
288
+ .account-sidebar {
289
+ position: static;
290
+ width: 100%;
291
+ }
292
+
293
+ .account-content {
294
+ max-height: none;
295
+ overflow: visible;
296
+ }
297
+ }
298
+
299
+ /* Mobile */
300
+ @media (max-width: 768px) {
301
+ .account-title {
302
+ font-size: 2rem;
303
+ }
304
+
305
+ .order-card {
306
+ grid-template-columns: 1fr 1fr 1fr;
307
+ padding: 1rem;
308
+ gap: 1rem;
309
+ }
310
+
311
+ .order-card-left,
312
+ .order-card-center,
313
+ .order-card-right {
314
+ align-items: flex-start;
315
+ }
316
+
317
+ .order-card-right {
318
+ width: 100%;
319
+ flex-direction: row;
320
+ justify-content: space-between;
321
+ align-items: center;
322
+ }
323
+
324
+ .btn {
325
+ min-height: 42px;
326
+ padding: 0.5rem 1rem;
327
+ }
328
+ }
329
+
330
+ /* Small phones */
331
+ @media (max-width: 480px) {
332
+ .order-meta {
333
+ flex-direction: column;
334
+ gap: 0.25rem;
335
+ }
336
+
337
+ .btn {
338
+ width: 100%;
339
+ text-align: center;
340
+ }
341
+
342
+ .order-card-right {
343
+ flex-direction: column;
344
+ align-items: stretch;
345
+ }
346
+ }
347
+
348
+ </style>