@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
@@ -82,33 +82,119 @@
82
82
  </div>
83
83
 
84
84
  <style>
85
+ :root {
86
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
87
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
88
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
89
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
90
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
91
+ --color-success-dark: {{ settings.color_success | default: '#22c55e' }};
92
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
93
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
94
+ --color-danger-dark: {{ settings.color_error | default: '#ef4444' }};
95
+ --color-text: {{ settings.color_text | default: '#000000' }};
96
+ --color-text-light: {{ settings.color_text_light | default: '#999999' }};
97
+ --color-text-muted: {{ settings.color_text_muted | default: '#666666' }};
98
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
99
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
100
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
101
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
102
+ --color-white: #ffffff;
103
+ --color-black: {{ settings.color_primary_dark | default: '#333333' }};
104
+ --color-gray-25: {{ settings.color_background | default: '#ffffff' }};
105
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
106
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
107
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
108
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
109
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
110
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
111
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
112
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
113
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
114
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
115
+ --shadow-sm: var(--shadow-sm);
116
+ --shadow-md: var(--shadow-md);
117
+ --shadow-lg: var(--shadow-lg);
118
+ --shadow-opacity: {{ settings.shadow_opacity | default: 0.1 }};
119
+ --shadow-blur: {{ settings.shadow_blur | default: 8 }}px;
120
+ --radius-sm: var(--radius-md);
121
+ --radius-md: var(--radius-lg);
122
+ --radius-lg: var(--radius-xl);
123
+ --radius-xl: var(--radius-xl);
124
+ --radius-2xl: var(--radius-2xl);
125
+ --radius-full: var(--radius-full);
126
+ --spacing-xs: var(--space-2);
127
+ --spacing-sm: var(--space-4);
128
+ --spacing-md: var(--space-6);
129
+ --spacing-lg: var(--space-8);
130
+ --spacing-xl: var(--space-12);
131
+ --space-0: var(--space-0);
132
+ --space-0-5: var(--space-0-5);
133
+ --space-1: var(--space-1);
134
+ --space-1-5: var(--space-1-5);
135
+ --space-2: var(--space-2);
136
+ --space-3: var(--space-3);
137
+ --space-3-5: var(--space-3-5);
138
+ --space-4: var(--space-4);
139
+ --space-5: var(--space-5);
140
+ --space-6: var(--space-6);
141
+ --text-xs: var(--text-xs);
142
+ --text-sm: var(--text-sm);
143
+ --text-base: var(--text-base);
144
+ --text-lg: var(--text-lg);
145
+ --text-xl: var(--text-xl);
146
+ --text-2xl: var(--text-2xl);
147
+ --transition: var(--transition);
148
+ --transition-fast: var(--transition-fast);
149
+ --transition-slow: var(--transition-slow);
150
+ --duration-150: var(--duration-150);
151
+ --duration-300: var(--duration-300);
152
+ --ease-out: var(--ease-out);
153
+ --ease-in: var(--ease-in);
154
+ --ease-in-out: var(--ease-in-out);
155
+ --z-10: var(--z-10);
156
+ --z-modal: var(--z-modal);
157
+ --z-dropdown: var(--z-dropdown);
158
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
159
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
160
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
161
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
162
+ --font-weight-bold: {{ settings.font_weight_bold | default: 700 }};
163
+ --font-weight-medium: {{ settings.font_weight_medium | default: 500 }};
164
+ --line-height-heading: {{ settings.line_height_heading | default: 1.2 }};
165
+ --leading-none: var(--leading-none);
166
+ --leading-normal: var(--leading-normal);
167
+ --leading-snug: var(--leading-snug);
168
+ --tracking-wider: var(--tracking-wider);
169
+ }
170
+
85
171
  .skeleton-card .collection-image-container {
86
- background: #f0f0f0;
172
+ background: var(--color-gray-50);
87
173
  position: relative;
88
174
  overflow: hidden;
89
175
  aspect-ratio: 1;
90
- border-radius: 12px;
176
+ border-radius: var(--radius-lg);
91
177
  }
92
178
 
93
179
  .skeleton-card .collection-content {
94
- padding: 1rem 0;
180
+ padding: var(--spacing-sm) 0;
95
181
  }
96
182
 
97
183
  .skeleton-card .skeleton-title {
98
184
  width: 80%;
99
- height: 20px;
100
- margin-bottom: 8px;
185
+ height: var(--space-5);
186
+ margin-bottom: var(--spacing-xs);
101
187
  }
102
188
 
103
189
  .skeleton-card .skeleton-description {
104
190
  width: 100%;
105
- height: 14px;
106
- margin-bottom: 6px;
191
+ height: var(--text-sm);
192
+ margin-bottom: var(--space-1-5);
107
193
  }
108
194
 
109
195
  .skeleton-card .skeleton-meta {
110
196
  width: 50%;
111
- height: 12px;
197
+ height: var(--text-xs);
112
198
  }
113
199
  </style>
114
200
 
@@ -16,15 +16,101 @@
16
16
  </div>
17
17
 
18
18
  <style>
19
+ :root {
20
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
21
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
22
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
23
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
24
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
25
+ --color-success-dark: {{ settings.color_success | default: '#22c55e' }};
26
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
27
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
28
+ --color-danger-dark: {{ settings.color_error | default: '#ef4444' }};
29
+ --color-text: {{ settings.color_text | default: '#000000' }};
30
+ --color-text-light: {{ settings.color_text_light | default: '#999999' }};
31
+ --color-text-muted: {{ settings.color_text_muted | default: '#666666' }};
32
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
33
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
34
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
35
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
36
+ --color-white: #ffffff;
37
+ --color-black: {{ settings.color_primary_dark | default: '#333333' }};
38
+ --color-gray-25: {{ settings.color_background | default: '#ffffff' }};
39
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
40
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
41
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
42
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
43
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
44
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
45
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
46
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
47
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
48
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
49
+ --shadow-sm: var(--shadow-sm);
50
+ --shadow-md: var(--shadow-md);
51
+ --shadow-lg: var(--shadow-lg);
52
+ --shadow-opacity: {{ settings.shadow_opacity | default: 0.1 }};
53
+ --shadow-blur: {{ settings.shadow_blur | default: 8 }}px;
54
+ --radius-sm: var(--radius-md);
55
+ --radius-md: var(--radius-lg);
56
+ --radius-lg: var(--radius-xl);
57
+ --radius-xl: var(--radius-xl);
58
+ --radius-2xl: var(--radius-2xl);
59
+ --radius-full: var(--radius-full);
60
+ --spacing-xs: var(--space-2);
61
+ --spacing-sm: var(--space-4);
62
+ --spacing-md: var(--space-6);
63
+ --spacing-lg: var(--space-8);
64
+ --spacing-xl: var(--space-12);
65
+ --space-0: var(--space-0);
66
+ --space-0-5: var(--space-0-5);
67
+ --space-1: var(--space-1);
68
+ --space-1-5: var(--space-1-5);
69
+ --space-2: var(--space-2);
70
+ --space-3: var(--space-3);
71
+ --space-3-5: var(--space-3-5);
72
+ --space-4: var(--space-4);
73
+ --space-5: var(--space-5);
74
+ --space-6: var(--space-6);
75
+ --text-xs: var(--text-xs);
76
+ --text-sm: var(--text-sm);
77
+ --text-base: var(--text-base);
78
+ --text-lg: var(--text-lg);
79
+ --text-xl: var(--text-xl);
80
+ --text-2xl: var(--text-2xl);
81
+ --transition: var(--transition);
82
+ --transition-fast: var(--transition-fast);
83
+ --transition-slow: var(--transition-slow);
84
+ --duration-150: var(--duration-150);
85
+ --duration-300: var(--duration-300);
86
+ --ease-out: var(--ease-out);
87
+ --ease-in: var(--ease-in);
88
+ --ease-in-out: var(--ease-in-out);
89
+ --z-10: var(--z-10);
90
+ --z-modal: var(--z-modal);
91
+ --z-dropdown: var(--z-dropdown);
92
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
93
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
94
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
95
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
96
+ --font-weight-bold: {{ settings.font_weight_bold | default: 700 }};
97
+ --font-weight-medium: {{ settings.font_weight_medium | default: 500 }};
98
+ --line-height-heading: {{ settings.line_height_heading | default: 1.2 }};
99
+ --leading-none: var(--leading-none);
100
+ --leading-normal: var(--leading-normal);
101
+ --leading-snug: var(--leading-snug);
102
+ --tracking-wider: var(--tracking-wider);
103
+ }
104
+
19
105
  .skeleton-card {
20
106
  pointer-events: none;
21
107
  }
22
108
 
23
109
  .skeleton-image {
24
- background: #f0f0f0;
110
+ background: var(--color-gray-50);
25
111
  position: relative;
26
112
  overflow: hidden;
27
- border-radius: 12px;
113
+ border-radius: var(--radius-lg);
28
114
  aspect-ratio: 1;
29
115
  }
30
116
 
@@ -53,12 +139,12 @@
53
139
  }
54
140
 
55
141
  .skeleton-text {
56
- height: 16px;
57
- background: #f0f0f0;
58
- border-radius: 4px;
142
+ height: var(--space-4);
143
+ background: var(--color-gray-50);
144
+ border-radius: var(--radius-sm);
59
145
  position: relative;
60
146
  overflow: hidden;
61
- margin-bottom: 8px;
147
+ margin-bottom: var(--spacing-xs);
62
148
  }
63
149
 
64
150
  .skeleton-text::after {
@@ -79,30 +165,30 @@
79
165
 
80
166
  .skeleton-vendor {
81
167
  width: 60%;
82
- height: 12px;
83
- margin-bottom: 6px;
168
+ height: var(--text-xs);
169
+ margin-bottom: var(--space-1-5);
84
170
  }
85
171
 
86
172
  .skeleton-title {
87
173
  width: 90%;
88
- height: 18px;
89
- margin-bottom: 8px;
174
+ height: var(--text-sm);
175
+ margin-bottom: var(--spacing-xs);
90
176
  }
91
177
 
92
178
  .skeleton-price {
93
179
  width: 50%;
94
- height: 20px;
95
- margin-bottom: 12px;
180
+ height: var(--space-5);
181
+ margin-bottom: var(--space-3);
96
182
  }
97
183
 
98
184
  .skeleton-button {
99
185
  width: 100%;
100
- height: 44px;
101
- background: #f0f0f0;
102
- border-radius: 8px;
186
+ height: 2.75rem;
187
+ background: var(--color-gray-50);
188
+ border-radius: var(--radius-md);
103
189
  position: relative;
104
190
  overflow: hidden;
105
- margin-top: 8px;
191
+ margin-top: var(--spacing-xs);
106
192
  }
107
193
 
108
194
  .skeleton-button::after {
@@ -18,8 +18,94 @@
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
  .skeleton-grid {
22
- animation: fadeIn 0.3s ease-in;
108
+ animation: fadeIn var(--duration-300) var(--ease-in);
23
109
  }
24
110
 
25
111
  @keyframes fadeIn {
@@ -42,8 +42,7 @@
42
42
  <span>Twitter</span>
43
43
  </a>
44
44
 
45
- <a href="https://pinterest.com/pin/create/button/?url={{ encoded_url }}&description={{ encoded_title }}"
46
- class="social-sharing-button social-sharing-button--pinterest"
45
+ <a href="#" class="social-sharing-button social-sharing-button--pinterest" data-pinterest-share data-share-url="{{ encoded_url }}" data-share-title="{{ encoded_title }}"
47
46
  target="_blank"
48
47
  rel="noopener noreferrer"
49
48
  aria-label="Share on Pinterest">
@@ -76,68 +75,159 @@
76
75
  </div>
77
76
 
78
77
  <style>
78
+ :root {
79
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
80
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
81
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
82
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
83
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
84
+ --color-success-dark: {{ settings.color_success | default: '#22c55e' }};
85
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
86
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
87
+ --color-danger-dark: {{ settings.color_error | default: '#ef4444' }};
88
+ --color-text: {{ settings.color_text | default: '#000000' }};
89
+ --color-text-light: {{ settings.color_text_light | default: '#999999' }};
90
+ --color-text-muted: {{ settings.color_text_muted | default: '#666666' }};
91
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
92
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
93
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
94
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
95
+ --color-white: #ffffff;
96
+ --color-black: {{ settings.color_primary_dark | default: '#333333' }};
97
+ --color-gray-25: {{ settings.color_background | default: '#ffffff' }};
98
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
99
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
100
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
101
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
102
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
103
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
104
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
105
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
106
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
107
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
108
+ /* Shadow variables - mapped from settings */
109
+ --shadow-opacity: {{ settings.shadow_opacity | default: 0.1 }};
110
+ --shadow-blur: {{ settings.shadow_blur | default: 8 }}px;
111
+ --shadow-spread: {{ settings.shadow_spread | default: 0 }}px;
112
+
113
+ /* Border radius - mapped from settings */
114
+ --radius-sm: {{ settings.border_radius_small | default: 6 }}px;
115
+ --radius-md: {{ settings.border_radius_medium | default: 10 }}px;
116
+ --radius-lg: {{ settings.border_radius_large | default: 16 }}px;
117
+ --radius-xl: 24px;
118
+ --radius-2xl: 32px;
119
+ --radius-full: 9999px;
120
+
121
+ /* Spacing - mapped from settings */
122
+ --spacing-xs: {{ settings.spacing_xsmall | default: 4 }}px;
123
+ --spacing-sm: {{ settings.spacing_small | default: 8 }}px;
124
+ --spacing-md: {{ settings.spacing_element | default: 16 }}px;
125
+ --spacing-lg: {{ settings.spacing_component | default: 24 }}px;
126
+ --spacing-xl: {{ settings.spacing_large | default: 32 }}px;
127
+
128
+ /* Typography - mapped from settings */
129
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
130
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
131
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
132
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
133
+ --font-weight-bold: {{ settings.font_weight_bold | default: 700 }};
134
+ --font-weight-medium: {{ settings.font_weight_medium | default: 500 }};
135
+ --line-height-heading: {{ settings.line_height_heading | default: 1.2 }};
136
+
137
+ /* Text sizes - based on font_size_base from settings */
138
+ --text-xs: 12px;
139
+ --text-sm: {{ settings.font_size_base | default: 14 }}px;
140
+ --text-base: {{ settings.font_size_base | default: 14 }}px;
141
+ --text-lg: 16px;
142
+ --text-xl: 18px;
143
+ --text-2xl: 21px;
144
+
145
+ /* Transitions - mapped from settings */
146
+ --transition-fast: 133ms cubic-bezier(0, 0, 0.2, 1);
147
+ --transition: {{ settings.button_transition_speed | default: 200 }}ms cubic-bezier(0, 0, 0.2, 1);
148
+ --transition-slow: 300ms cubic-bezier(0, 0, 0.2, 1);
149
+ --duration-150: 150ms;
150
+ --duration-300: 300ms;
151
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
152
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
153
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
154
+
155
+ /* Z-index values */
156
+ --z-10: 10;
157
+ --z-modal: 1050;
158
+ --z-dropdown: 1000;
159
+
160
+ /* Line heights - mapped from settings */
161
+ --leading-none: 1;
162
+ --leading-normal: {{ settings.line_height_base | default: 1.6 }};
163
+ --leading-snug: 1.375;
164
+
165
+ /* Letter spacing - mapped from settings */
166
+ --tracking-wider: {{ settings.letter_spacing_uppercase | default: 0.05 }}em;
167
+ }
168
+
79
169
  .social-sharing {
80
170
  display: flex;
81
171
  align-items: center;
82
- gap: 1rem;
172
+ gap: var(--spacing-sm);
83
173
  flex-wrap: wrap;
84
174
  }
85
175
 
86
176
  .social-sharing-label {
87
- font-size: 0.875rem;
177
+ font-size: var(--text-sm);
88
178
  font-weight: 500;
89
- color: {{ settings.color_text }};
179
+ color: var(--color-text);
90
180
  }
91
181
 
92
182
  .social-sharing-buttons {
93
183
  display: flex;
94
- gap: 0.5rem;
184
+ gap: var(--space-2);
95
185
  flex-wrap: wrap;
96
186
  }
97
187
 
98
188
  .social-sharing-button {
99
189
  display: inline-flex;
100
190
  align-items: center;
101
- gap: 0.5rem;
102
- padding: 0.5rem 1rem;
103
- border: 1px solid #e5e7eb;
104
- background: white;
105
- color: {{ settings.color_text }};
191
+ gap: var(--space-2);
192
+ padding: var(--space-2) var(--spacing-sm);
193
+ border: 1px solid var(--color-border);
194
+ background: var(--color-white);
195
+ color: var(--color-text);
106
196
  text-decoration: none;
107
- border-radius: 0.375rem;
108
- font-size: 0.875rem;
109
- transition: all 0.2s ease;
197
+ border-radius: var(--radius-md);
198
+ font-size: var(--text-sm);
199
+ transition: all var(--transition);
110
200
  cursor: pointer;
111
201
  }
112
202
 
113
203
  .social-sharing-button:hover {
114
- background: #f9fafb;
115
- border-color: {{ settings.color_primary }};
116
- color: {{ settings.color_primary }};
204
+ background: var(--color-gray-50);
205
+ border-color: var(--color-primary);
206
+ color: var(--color-primary);
117
207
  }
118
208
 
119
209
  .social-sharing-button--facebook:hover {
120
210
  background: #1877f2;
121
211
  border-color: #1877f2;
122
- color: white;
212
+ color: var(--color-white);
123
213
  }
124
214
 
125
215
  .social-sharing-button--twitter:hover {
126
216
  background: #1da1f2;
127
217
  border-color: #1da1f2;
128
- color: white;
218
+ color: var(--color-white);
129
219
  }
130
220
 
131
221
  .social-sharing-button--pinterest:hover {
132
222
  background: #bd081c;
133
223
  border-color: #bd081c;
134
- color: white;
224
+ color: var(--color-white);
135
225
  }
136
226
 
137
227
  .social-sharing-button--email:hover {
138
- background: {{ settings.color_primary }};
139
- border-color: {{ settings.color_primary }};
140
- color: white;
228
+ background: var(--color-primary);
229
+ border-color: var(--color-primary);
230
+ color: var(--color-white);
141
231
  }
142
232
 
143
233
  .social-sharing-button svg {
@@ -155,31 +245,42 @@
155
245
  }
156
246
 
157
247
  .social-sharing-button {
158
- padding: 0.5rem;
159
- width: 40px;
160
- height: 40px;
248
+ padding: var(--space-2);
249
+ width: 2.5rem;
250
+ height: 2.5rem;
161
251
  justify-content: center;
162
252
  }
163
253
  }
164
254
  </style>
165
255
 
166
256
  <script>
167
- document.addEventListener('DOMContentLoaded', function() {
257
+ document.addEventListener('DOMContentLoaded', () => {
168
258
  const copyButton = document.querySelector('[data-copy-url]');
169
259
  if (copyButton) {
170
- copyButton.addEventListener('click', function() {
171
- const url = this.dataset.copyUrl;
260
+ copyButton.addEventListener('click', (e) => {
261
+ const btn = e.currentTarget;
262
+ const url = btn.dataset.copyUrl;
172
263
  navigator.clipboard.writeText(url).then(() => {
173
- const originalText = this.querySelector('span').textContent;
174
- this.querySelector('span').textContent = 'Copied!';
264
+ const originalText = btn.querySelector('span').textContent;
265
+ btn.querySelector('span').textContent = 'Copied!';
175
266
  setTimeout(() => {
176
- this.querySelector('span').textContent = originalText;
267
+ btn.querySelector('span').textContent = originalText;
177
268
  }, 2000);
178
269
  }).catch(err => {
179
270
  console.error('Failed to copy:', err);
180
271
  });
181
272
  });
182
273
  }
274
+ document.querySelectorAll('[data-pinterest-share]').forEach((el) => {
275
+ el.addEventListener('click', (e) => {
276
+ e.preventDefault();
277
+ const shareUrl = el.dataset.shareUrl || '';
278
+ const shareTitle = el.dataset.shareTitle || '';
279
+ const pinterestBase = 'https:' + '//www.pinterest.com/pin/create/button/';
280
+ const params = new URLSearchParams({ url: shareUrl, description: shareTitle });
281
+ window.open(pinterestBase + '?' + params.toString(), '_blank', 'noopener,noreferrer');
282
+ });
283
+ });
183
284
  });
184
285
  </script>
185
286
 
@@ -4,6 +4,36 @@
4
4
  Account Dashboard Page
5
5
  {% endcomment %}
6
6
 
7
+ <style>
8
+ /* Critical above-the-fold styles for LCP text on account dashboard */
9
+ .account-page {
10
+ padding: var(--spacing-section) var(--spacing-small);
11
+ background: var(--color-background);
12
+ min-height: 100vh;
13
+ }
14
+
15
+ .account-header {
16
+ text-align: center;
17
+ margin-bottom: var(--spacing-section);
18
+ }
19
+
20
+ h1.account-title.display-2 {
21
+ font-size: 2.5rem;
22
+ font-weight: 700;
23
+ line-height: 1.2;
24
+ color: var(--color-text);
25
+ margin: 0 0 0.5rem 0;
26
+ letter-spacing: -0.025em;
27
+ font-family: var(--font-heading, var(--font-primary, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif));
28
+ }
29
+
30
+ .account-subtitle {
31
+ font-size: 1.125rem;
32
+ color: var(--color-text-light);
33
+ margin: 0;
34
+ }
35
+ </style>
36
+
7
37
  {% hook 'account_before' %}
8
38
  <section class="account-page">
9
39
  <div class="container">