create-brainerce-store 1.51.0 → 1.52.0

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 (170) hide show
  1. package/README.md +72 -0
  2. package/dist/index.js +9 -68
  3. package/messages/en.json +32 -0
  4. package/messages/he.json +32 -0
  5. package/package.json +1 -1
  6. package/templates/nextjs/base/.claude/commands/design.md +9 -0
  7. package/templates/nextjs/base/AI-GUIDE.md +52 -3
  8. package/templates/nextjs/base/CLAUDE.md +10 -0
  9. package/templates/nextjs/base/package.json.ejs +52 -39
  10. package/templates/nextjs/base/src/app/globals.css +36 -30
  11. package/templates/nextjs/base/src/components/checkout/payment-step.tsx +14 -10
  12. package/templates/nextjs/base/src/components/ui/accordion.tsx +53 -0
  13. package/templates/nextjs/base/src/components/ui/badge.tsx +32 -0
  14. package/templates/nextjs/base/src/components/ui/button.tsx +49 -0
  15. package/templates/nextjs/base/src/components/ui/card.tsx +55 -0
  16. package/templates/nextjs/base/src/components/ui/checkbox.tsx +28 -0
  17. package/templates/nextjs/base/src/components/ui/dialog.tsx +107 -0
  18. package/templates/nextjs/base/src/components/ui/input.tsx +22 -0
  19. package/templates/nextjs/base/src/components/ui/label.tsx +21 -0
  20. package/templates/nextjs/base/src/components/ui/radio-group.tsx +38 -0
  21. package/templates/nextjs/base/src/components/ui/select.tsx +153 -0
  22. package/templates/nextjs/base/src/components/ui/separator.tsx +26 -0
  23. package/templates/nextjs/base/src/components/ui/sheet.tsx +125 -0
  24. package/templates/nextjs/base/src/components/ui/skeleton.tsx +7 -0
  25. package/templates/nextjs/base/src/components/ui/tabs.tsx +55 -0
  26. package/templates/nextjs/base/src/components/ui/textarea.tsx +21 -0
  27. package/templates/nextjs/base/src/components/ui/tooltip.tsx +32 -0
  28. package/templates/nextjs/base/src/ui/cart/cart-bundle-offer.tsx +17 -11
  29. package/templates/nextjs/base/src/ui/cart/cart-item.tsx +2 -8
  30. package/templates/nextjs/base/src/ui/cart/cart-nudges.tsx +28 -39
  31. package/templates/nextjs/base/src/ui/cart/cart-summary.tsx +3 -1
  32. package/templates/nextjs/base/src/ui/cart/cart-upgrade-banner.tsx +8 -23
  33. package/templates/nextjs/base/src/ui/cart/cart-view.tsx +18 -27
  34. package/templates/nextjs/base/src/ui/cart/coupon-input.tsx +10 -21
  35. package/templates/nextjs/base/src/ui/cart/free-shipping-bar.tsx +2 -3
  36. package/templates/nextjs/base/src/ui/cart/reservation-countdown.tsx +95 -103
  37. package/templates/nextjs/base/src/ui/home/hero-section.tsx +4 -6
  38. package/templates/nextjs/base/src/ui/layout/announcement-bar.tsx.ejs +116 -125
  39. package/templates/nextjs/base/src/ui/layout/faq-section.tsx.ejs +90 -103
  40. package/templates/nextjs/base/src/ui/layout/header-account.tsx +2 -17
  41. package/templates/nextjs/base/src/ui/layout/language-switcher.tsx.ejs +80 -70
  42. package/templates/nextjs/base/src/ui/layout/site-footer.tsx.ejs +144 -164
  43. package/templates/nextjs/base/src/ui/layout/site-header.tsx.ejs +152 -182
  44. package/templates/nextjs/base/src/ui/product/customization-fields.tsx +456 -444
  45. package/templates/nextjs/base/src/ui/product/discount-badge.tsx +18 -22
  46. package/templates/nextjs/base/src/ui/product/frequently-bought-together.tsx +15 -27
  47. package/templates/nextjs/base/src/ui/product/modifier-group-selector.tsx +206 -175
  48. package/templates/nextjs/base/src/ui/product/price-display.tsx +3 -2
  49. package/templates/nextjs/base/src/ui/product/product-card.tsx +238 -271
  50. package/templates/nextjs/base/src/ui/product/product-client-section.tsx +455 -470
  51. package/templates/nextjs/base/src/ui/product/product-listing.tsx +96 -79
  52. package/templates/nextjs/base/src/ui/product/recommendation-section.tsx +102 -107
  53. package/templates/nextjs/base/src/ui/product/review-form.tsx +44 -43
  54. package/templates/nextjs/{designs/passepartout → base/src}/ui/product/reviews-section.tsx.ejs +108 -96
  55. package/templates/nextjs/base/src/ui/product/stock-badge.tsx +61 -63
  56. package/templates/nextjs/base/tailwind.config.ts +69 -42
  57. package/templates/nextjs/designs/{passepartout → atelier}/app-overlay/layout.tsx.ejs +23 -25
  58. package/templates/nextjs/designs/atelier/globals.css +396 -0
  59. package/templates/nextjs/designs/atelier/messages-patch/en.json +99 -0
  60. package/templates/nextjs/designs/atelier/messages-patch/he.json +99 -0
  61. package/templates/nextjs/designs/{passepartout → atelier}/ui/cart/cart-bundle-offer.tsx +110 -111
  62. package/templates/nextjs/designs/atelier/ui/cart/cart-drawer.tsx +163 -0
  63. package/templates/nextjs/designs/atelier/ui/cart/cart-item.tsx +140 -0
  64. package/templates/nextjs/designs/atelier/ui/cart/cart-nudges.tsx +34 -0
  65. package/templates/nextjs/designs/atelier/ui/cart/cart-summary.tsx +107 -0
  66. package/templates/nextjs/designs/{passepartout → atelier}/ui/cart/cart-upgrade-banner.tsx +123 -141
  67. package/templates/nextjs/designs/atelier/ui/cart/cart-view.tsx +147 -0
  68. package/templates/nextjs/designs/atelier/ui/cart/coupon-input.tsx +142 -0
  69. package/templates/nextjs/designs/{passepartout → atelier}/ui/cart/free-shipping-bar.tsx +77 -62
  70. package/templates/nextjs/designs/{passepartout → atelier}/ui/cart/reservation-countdown.tsx +89 -103
  71. package/templates/nextjs/designs/atelier/ui/home/benefits-band.tsx +34 -0
  72. package/templates/nextjs/designs/atelier/ui/home/category-tiles.tsx +148 -0
  73. package/templates/nextjs/designs/atelier/ui/home/discount-banner-strip.tsx +27 -0
  74. package/templates/nextjs/designs/atelier/ui/home/editorial-band.tsx +73 -0
  75. package/templates/nextjs/designs/atelier/ui/home/featured-products-section.tsx +36 -0
  76. package/templates/nextjs/designs/atelier/ui/home/hero-section.tsx +148 -0
  77. package/templates/nextjs/designs/atelier/ui/home/home-client.tsx +54 -0
  78. package/templates/nextjs/designs/atelier/ui/home/newsletter-section.tsx +78 -0
  79. package/templates/nextjs/designs/atelier/ui/home/testimonials-band.tsx +46 -0
  80. package/templates/nextjs/designs/atelier/ui/layout/announcement-bar.tsx +118 -0
  81. package/templates/nextjs/designs/atelier/ui/layout/faq-section.tsx +96 -0
  82. package/templates/nextjs/designs/atelier/ui/layout/header-account.tsx +36 -0
  83. package/templates/nextjs/designs/atelier/ui/layout/header-cart.tsx +36 -0
  84. package/templates/nextjs/designs/atelier/ui/layout/language-switcher.tsx.ejs +137 -0
  85. package/templates/nextjs/designs/atelier/ui/layout/nav-url.ts +14 -0
  86. package/templates/nextjs/designs/atelier/ui/layout/rich-text-block.tsx +34 -0
  87. package/templates/nextjs/designs/atelier/ui/layout/site-footer.tsx.ejs +141 -0
  88. package/templates/nextjs/designs/atelier/ui/layout/site-header.tsx.ejs +138 -0
  89. package/templates/nextjs/designs/atelier/ui/product/customization-fields.tsx +466 -0
  90. package/templates/nextjs/designs/{passepartout → atelier}/ui/product/discount-badge.tsx +17 -22
  91. package/templates/nextjs/designs/{passepartout → atelier}/ui/product/frequently-bought-together.tsx +196 -205
  92. package/templates/nextjs/designs/atelier/ui/product/modifier-group-selector.tsx +193 -0
  93. package/templates/nextjs/designs/atelier/ui/product/price-display.tsx +69 -0
  94. package/templates/nextjs/designs/atelier/ui/product/product-card.tsx +260 -0
  95. package/templates/nextjs/designs/atelier/ui/product/product-client-section.tsx +471 -0
  96. package/templates/nextjs/designs/atelier/ui/product/product-grid.tsx +47 -0
  97. package/templates/nextjs/designs/atelier/ui/product/product-listing.tsx +260 -0
  98. package/templates/nextjs/designs/atelier/ui/product/recommendation-section.tsx +95 -0
  99. package/templates/nextjs/designs/{passepartout → atelier}/ui/product/review-form.tsx +267 -294
  100. package/templates/nextjs/designs/atelier/ui/product/reviews-section.tsx.ejs +148 -0
  101. package/templates/nextjs/designs/atelier/ui/product/stock-badge.tsx +66 -0
  102. package/templates/nextjs/designs/atelier/ui/product/variant-selector.tsx +206 -0
  103. package/templates/nextjs/designs/atelier/ui/shared/cdn-image.tsx +29 -0
  104. package/templates/nextjs/designs/{passepartout → atelier}/ui/shared/fly-to-cart.ts +86 -85
  105. package/templates/nextjs/designs/atelier/ui/shared/icons.tsx +269 -0
  106. package/templates/nextjs/designs/atelier/ui/shared/loading-spinner.tsx +64 -0
  107. package/templates/nextjs/designs/atelier/ui/shared/reveal.tsx +71 -0
  108. package/templates/nextjs/designs/atelier/ui/shared/select-menu.tsx +125 -0
  109. package/templates/nextjs/themes/luxury/globals.css +405 -399
  110. package/templates/nextjs/themes/minimal/globals.css +36 -30
  111. package/templates/nextjs/themes/playful/globals.css +406 -400
  112. package/templates/nextjs/ui-canvas/cart/cart-bundle-offer.tsx +2 -0
  113. package/templates/nextjs/ui-canvas/cart/cart-item.tsx +2 -0
  114. package/templates/nextjs/ui-canvas/cart/cart-nudges.tsx +2 -0
  115. package/templates/nextjs/ui-canvas/cart/cart-summary.tsx +2 -0
  116. package/templates/nextjs/ui-canvas/cart/cart-upgrade-banner.tsx +2 -0
  117. package/templates/nextjs/ui-canvas/cart/cart-view.tsx +2 -2
  118. package/templates/nextjs/ui-canvas/cart/coupon-input.tsx +2 -0
  119. package/templates/nextjs/ui-canvas/cart/free-shipping-bar.tsx +2 -0
  120. package/templates/nextjs/ui-canvas/cart/reservation-countdown.tsx +2 -0
  121. package/templates/nextjs/ui-canvas/home/discount-banner-strip.tsx +1 -1
  122. package/templates/nextjs/ui-canvas/home/featured-products-section.tsx +1 -1
  123. package/templates/nextjs/ui-canvas/home/hero-section.tsx +1 -1
  124. package/templates/nextjs/ui-canvas/home/home-client.tsx +1 -1
  125. package/templates/nextjs/ui-canvas/layout/announcement-bar.tsx.ejs +1 -1
  126. package/templates/nextjs/ui-canvas/layout/faq-section.tsx.ejs +2 -2
  127. package/templates/nextjs/ui-canvas/layout/header-account.tsx +1 -1
  128. package/templates/nextjs/ui-canvas/layout/language-switcher.tsx.ejs +2 -0
  129. package/templates/nextjs/ui-canvas/layout/rich-text-block.tsx.ejs +2 -0
  130. package/templates/nextjs/ui-canvas/layout/site-footer.tsx.ejs +2 -2
  131. package/templates/nextjs/ui-canvas/layout/site-header.tsx.ejs +2 -2
  132. package/templates/nextjs/ui-canvas/product/customization-fields.tsx +2 -0
  133. package/templates/nextjs/ui-canvas/product/discount-badge.tsx +2 -0
  134. package/templates/nextjs/ui-canvas/product/frequently-bought-together.tsx +2 -0
  135. package/templates/nextjs/ui-canvas/product/modifier-group-selector.tsx +2 -0
  136. package/templates/nextjs/ui-canvas/product/price-display.tsx +2 -0
  137. package/templates/nextjs/ui-canvas/product/product-card.tsx +1 -1
  138. package/templates/nextjs/ui-canvas/product/product-client-section.tsx +1 -1
  139. package/templates/nextjs/ui-canvas/product/product-grid.tsx +1 -1
  140. package/templates/nextjs/ui-canvas/product/product-listing.tsx +1 -1
  141. package/templates/nextjs/ui-canvas/product/recommendation-section.tsx +4 -0
  142. package/templates/nextjs/ui-canvas/product/review-form.tsx +29 -32
  143. package/templates/nextjs/ui-canvas/product/{reviews-section.tsx → reviews-section.tsx.ejs} +26 -8
  144. package/templates/nextjs/ui-canvas/product/stock-badge.tsx +2 -0
  145. package/templates/nextjs/ui-canvas/product/variant-selector.tsx +2 -0
  146. package/templates/nextjs/ui-canvas/shared/cdn-image.tsx +2 -0
  147. package/templates/nextjs/ui-canvas/shared/loading-spinner.tsx +2 -0
  148. package/templates/nextjs/base/src/ui/product/reviews-section.tsx +0 -85
  149. package/templates/nextjs/designs/passepartout/globals.css +0 -412
  150. package/templates/nextjs/designs/passepartout/messages-patch/en.json +0 -87
  151. package/templates/nextjs/designs/passepartout/messages-patch/he.json +0 -87
  152. package/templates/nextjs/designs/passepartout/ui/cart/cart-nudges.tsx +0 -39
  153. package/templates/nextjs/designs/passepartout/ui/cart/cart-view.tsx +0 -149
  154. package/templates/nextjs/designs/passepartout/ui/home/home-client.tsx +0 -401
  155. package/templates/nextjs/designs/passepartout/ui/layout/announcement-bar.tsx +0 -139
  156. package/templates/nextjs/designs/passepartout/ui/layout/cart-link.tsx +0 -45
  157. package/templates/nextjs/designs/passepartout/ui/layout/faq-section.tsx +0 -103
  158. package/templates/nextjs/designs/passepartout/ui/layout/site-footer.tsx +0 -159
  159. package/templates/nextjs/designs/passepartout/ui/layout/site-header.tsx.ejs +0 -155
  160. package/templates/nextjs/designs/passepartout/ui/layout/trust-icons.tsx +0 -60
  161. package/templates/nextjs/designs/passepartout/ui/layout/whatsapp-button.tsx +0 -34
  162. package/templates/nextjs/designs/passepartout/ui/product/price-display.tsx +0 -111
  163. package/templates/nextjs/designs/passepartout/ui/product/product-card.tsx +0 -265
  164. package/templates/nextjs/designs/passepartout/ui/product/product-client-section.tsx +0 -667
  165. package/templates/nextjs/designs/passepartout/ui/product/product-grid.tsx +0 -35
  166. package/templates/nextjs/designs/passepartout/ui/product/product-listing.tsx +0 -427
  167. package/templates/nextjs/designs/passepartout/ui/product/recommendation-section.tsx +0 -113
  168. package/templates/nextjs/designs/passepartout/ui/product/stock-badge.tsx +0 -52
  169. package/templates/nextjs/designs/passepartout/ui/product/variant-selector.tsx +0 -307
  170. package/templates/nextjs/designs/passepartout/ui/shared/loading-spinner.tsx +0 -33
@@ -1,399 +1,405 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @layer base {
6
- :root {
7
- --background: 20 14% 4%;
8
- --foreground: 38 25% 86%;
9
- --primary: 38 60% 55%;
10
- --primary-foreground: 20 14% 4%;
11
- --secondary: 20 10% 10%;
12
- --secondary-foreground: 38 25% 86%;
13
- --muted: 20 10% 12%;
14
- --muted-foreground: 30 10% 50%;
15
- --accent: 38 60% 55%;
16
- --accent-foreground: 20 14% 4%;
17
- --destructive: 0 72% 51%;
18
- --destructive-foreground: 38 25% 86%;
19
- --border: 30 10% 16%;
20
- --radius: 0.25rem;
21
-
22
- /* Luxury-specific tokens */
23
- --gold: 38 60% 55%;
24
- --gold-light: 38 50% 72%;
25
- --gold-dark: 38 70% 40%;
26
- --surface: 20 12% 7%;
27
- --surface-elevated: 20 10% 10%;
28
- }
29
-
30
- * {
31
- @apply border-border;
32
- }
33
-
34
- body {
35
- @apply bg-background text-foreground antialiased;
36
- letter-spacing: 0.01em;
37
- line-height: 1.7;
38
- }
39
-
40
- /* Luxury typography — editorial serif hierarchy */
41
- h1,
42
- h2,
43
- h3,
44
- h4 {
45
- letter-spacing: 0.04em;
46
- font-weight: 500;
47
- line-height: 1.2;
48
- }
49
-
50
- h1 {
51
- text-transform: uppercase;
52
- letter-spacing: 0.1em;
53
- font-weight: 400;
54
- line-height: 1.1;
55
- }
56
-
57
- h2 {
58
- text-transform: uppercase;
59
- letter-spacing: 0.06em;
60
- }
61
-
62
- /* Elegant link underline animation */
63
- a:not([class*="bg-"]) {
64
- position: relative;
65
- transition: color 0.3s ease, opacity 0.3s ease;
66
- }
67
-
68
- main a:not([class*="bg-"]):not([class*="group"])::after {
69
- content: '';
70
- position: absolute;
71
- bottom: -1px;
72
- left: 0;
73
- width: 0;
74
- height: 1px;
75
- background: hsl(var(--gold));
76
- transition: width 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
77
- }
78
-
79
- main a:not([class*="bg-"]):not([class*="group"]):hover::after {
80
- width: 100%;
81
- }
82
-
83
- /* Refined text selection */
84
- ::selection {
85
- background: hsl(var(--gold) / 0.3);
86
- color: hsl(38 25% 96%);
87
- }
88
-
89
- /* Subtle body texture overlay */
90
- body::before {
91
- content: '';
92
- position: fixed;
93
- inset: 0;
94
- background: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.015'/%3E%3C/svg%3E");
95
- pointer-events: none;
96
- z-index: 9999;
97
- }
98
-
99
- /* Custom scrollbar */
100
- ::-webkit-scrollbar {
101
- width: 5px;
102
- }
103
-
104
- ::-webkit-scrollbar-track {
105
- background: hsl(20 14% 4%);
106
- }
107
-
108
- ::-webkit-scrollbar-thumb {
109
- background: hsl(30 10% 18%);
110
- border-radius: 3px;
111
- }
112
-
113
- ::-webkit-scrollbar-thumb:hover {
114
- background: hsl(var(--gold) / 0.5);
115
- }
116
-
117
- /* Smooth focus states */
118
- :focus-visible {
119
- outline: 1px solid hsl(var(--gold) / 0.5);
120
- outline-offset: 3px;
121
- }
122
- }
123
-
124
- @layer components {
125
- /* ─── Buttons ─── */
126
-
127
- /* Primary CTA — gold with shimmer sweep */
128
- button[class*="bg-primary"],
129
- a[class*="bg-primary"] {
130
- position: relative;
131
- overflow: hidden;
132
- font-weight: 500;
133
- letter-spacing: 0.08em;
134
- text-transform: uppercase;
135
- font-size: 0.78rem;
136
- border: 1px solid hsl(var(--gold) / 0.3);
137
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
138
- }
139
-
140
- button[class*="bg-primary"]:hover,
141
- a[class*="bg-primary"]:hover {
142
- box-shadow:
143
- 0 0 20px hsl(var(--gold) / 0.2),
144
- 0 4px 16px hsl(0 0% 0% / 0.3);
145
- border-color: hsl(var(--gold) / 0.6);
146
- opacity: 1 !important;
147
- }
148
-
149
- button[class*="bg-primary"]::after,
150
- a[class*="bg-primary"]::after {
151
- content: '';
152
- position: absolute;
153
- top: -50%;
154
- left: -75%;
155
- width: 50%;
156
- height: 200%;
157
- background: linear-gradient(
158
- 90deg,
159
- transparent,
160
- hsl(var(--gold-light) / 0.12),
161
- hsl(var(--gold-light) / 0.2),
162
- transparent
163
- );
164
- transform: skewX(-20deg);
165
- transition: left 0.7s ease;
166
- pointer-events: none;
167
- }
168
-
169
- button[class*="bg-primary"]:hover::after,
170
- a[class*="bg-primary"]:hover::after {
171
- left: 130%;
172
- }
173
-
174
- /* Secondary/ghost buttons — thin border, minimal */
175
- [class*="bg-secondary"] {
176
- border: 1px solid hsl(var(--border));
177
- transition: all 0.3s ease;
178
- letter-spacing: 0.04em;
179
- text-transform: uppercase;
180
- font-size: 0.8rem;
181
- }
182
-
183
- [class*="bg-secondary"]:hover {
184
- border-color: hsl(var(--gold) / 0.4);
185
- background: hsl(var(--surface-elevated)) !important;
186
- }
187
-
188
- /* ─── Product Cards ─── */
189
-
190
- [class*="group"][class*="border"] {
191
- transition: all 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
192
- border-color: hsl(var(--border) / 0.5);
193
- background: hsl(var(--surface));
194
- }
195
-
196
- [class*="group"][class*="border"]:hover {
197
- border-color: hsl(var(--gold) / 0.25);
198
- box-shadow:
199
- 0 8px 40px hsl(0 0% 0% / 0.5),
200
- 0 0 0 1px hsl(var(--gold) / 0.08);
201
- }
202
-
203
- /* Product image — slow cinematic zoom */
204
- [class*="group-hover\\:scale-105"] {
205
- transition: transform 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
206
- }
207
-
208
- /* Product image overlay on hover — subtle dark gradient */
209
- [class*="group"] [class*="aspect-square"] {
210
- position: relative;
211
- }
212
-
213
- [class*="group"]:hover [class*="aspect-square"]::after {
214
- content: '';
215
- position: absolute;
216
- inset: 0;
217
- background: linear-gradient(
218
- to top,
219
- hsl(20 14% 4% / 0.3),
220
- transparent 50%
221
- );
222
- pointer-events: none;
223
- transition: opacity 0.5s ease;
224
- }
225
-
226
- /* ─── Form Elements ─── */
227
-
228
- input[class*="border-border"],
229
- select[class*="border-border"],
230
- textarea[class*="border-border"] {
231
- background: hsl(var(--surface)) !important;
232
- transition: all 0.3s ease;
233
- }
234
-
235
- input[class*="border-border"]:focus,
236
- select[class*="border-border"]:focus,
237
- textarea[class*="border-border"]:focus {
238
- border-color: hsl(var(--gold) / 0.5) !important;
239
- box-shadow: 0 0 0 3px hsl(var(--gold) / 0.08);
240
- background: hsl(var(--surface-elevated)) !important;
241
- }
242
-
243
- /* Placeholder text */
244
- input::placeholder,
245
- textarea::placeholder {
246
- letter-spacing: 0.03em;
247
- font-size: 0.85rem;
248
- }
249
-
250
- /* ─── Navigation & Header ─── */
251
-
252
- header[class*="sticky"] {
253
- backdrop-filter: blur(16px) saturate(1.2);
254
- background: hsl(20 14% 4% / 0.8) !important;
255
- border-bottom: 1px solid hsl(var(--gold) / 0.08) !important;
256
- }
257
-
258
- /* Nav links */
259
- nav a {
260
- letter-spacing: 0.06em;
261
- text-transform: uppercase;
262
- font-size: 0.75rem;
263
- font-weight: 500;
264
- }
265
-
266
- /* ─── Badges & Tags ─── */
267
-
268
- [class*="bg-muted"][class*="text-xs"] {
269
- text-transform: uppercase;
270
- letter-spacing: 0.1em;
271
- font-size: 0.6rem;
272
- font-weight: 600;
273
- border: 1px solid hsl(var(--border));
274
- }
275
-
276
- /* Sale badges — dark red, refined */
277
- [class*="bg-destructive"] {
278
- background: hsl(0 60% 38%) !important;
279
- font-weight: 600;
280
- letter-spacing: 0.06em;
281
- text-transform: uppercase;
282
- font-size: 0.65rem;
283
- }
284
-
285
- /* ─── Price Display ─── */
286
-
287
- /* Gold gradient on prices */
288
- [class*="font-bold"][class*="text-lg"],
289
- [class*="font-bold"][class*="text-xl"],
290
- [class*="font-bold"][class*="text-2xl"] {
291
- background: linear-gradient(
292
- 135deg,
293
- hsl(var(--gold-light)),
294
- hsl(var(--gold)),
295
- hsl(var(--gold-dark))
296
- );
297
- -webkit-background-clip: text;
298
- -webkit-text-fill-color: transparent;
299
- background-clip: text;
300
- }
301
-
302
- /* Strikethrough original prices */
303
- [class*="line-through"] {
304
- opacity: 0.4;
305
- }
306
-
307
- /* ─── Dividers & Separators ─── */
308
-
309
- hr {
310
- border-color: hsl(var(--border) / 0.3);
311
- }
312
-
313
- /* Decorative gold separator */
314
- main > section + section {
315
- border-top: 1px solid hsl(var(--gold) / 0.06);
316
- }
317
-
318
- /* ─── Cart & Checkout ─── */
319
-
320
- /* Sticky summary panel */
321
- [class*="sticky"][class*="top-"] {
322
- background: hsl(var(--surface));
323
- border: 1px solid hsl(var(--border) / 0.5);
324
- }
325
- }
326
-
327
- /* ─── Animations ─── */
328
-
329
- /* Elegant fade-in-up */
330
- @keyframes luxury-fade-in {
331
- from {
332
- opacity: 0;
333
- transform: translateY(16px);
334
- }
335
- to {
336
- opacity: 1;
337
- transform: translateY(0);
338
- }
339
- }
340
-
341
- main > * {
342
- animation: luxury-fade-in 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
343
- }
344
-
345
- main > *:nth-child(2) {
346
- animation-delay: 0.1s;
347
- }
348
-
349
- main > *:nth-child(3) {
350
- animation-delay: 0.2s;
351
- }
352
-
353
- main > *:nth-child(4) {
354
- animation-delay: 0.3s;
355
- }
356
-
357
- /* Staggered grid item reveal */
358
- @keyframes luxury-grid-item {
359
- from {
360
- opacity: 0;
361
- transform: translateY(12px) scale(0.98);
362
- }
363
- to {
364
- opacity: 1;
365
- transform: translateY(0) scale(1);
366
- }
367
- }
368
-
369
- [class*="grid"] > [class*="group"] {
370
- animation: luxury-grid-item 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
371
- }
372
-
373
- [class*="grid"] > [class*="group"]:nth-child(2) {
374
- animation-delay: 0.08s;
375
- }
376
-
377
- [class*="grid"] > [class*="group"]:nth-child(3) {
378
- animation-delay: 0.16s;
379
- }
380
-
381
- [class*="grid"] > [class*="group"]:nth-child(4) {
382
- animation-delay: 0.24s;
383
- }
384
-
385
- [class*="grid"] > [class*="group"]:nth-child(5) {
386
- animation-delay: 0.32s;
387
- }
388
-
389
- [class*="grid"] > [class*="group"]:nth-child(6) {
390
- animation-delay: 0.4s;
391
- }
392
-
393
- [class*="grid"] > [class*="group"]:nth-child(7) {
394
- animation-delay: 0.48s;
395
- }
396
-
397
- [class*="grid"] > [class*="group"]:nth-child(8) {
398
- animation-delay: 0.56s;
399
- }
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ :root {
7
+ --background: 20 14% 4%;
8
+ --foreground: 38 25% 86%;
9
+ --primary: 38 60% 55%;
10
+ --primary-foreground: 20 14% 4%;
11
+ --secondary: 20 10% 10%;
12
+ --secondary-foreground: 38 25% 86%;
13
+ --muted: 20 10% 12%;
14
+ --muted-foreground: 30 10% 50%;
15
+ --accent: 38 60% 55%;
16
+ --accent-foreground: 20 14% 4%;
17
+ --destructive: 0 72% 51%;
18
+ --destructive-foreground: 38 25% 86%;
19
+ --border: 30 10% 16%;
20
+ --input: 30 10% 16%;
21
+ --ring: 38 60% 55%;
22
+ --card: 20 12% 7%;
23
+ --card-foreground: 38 25% 86%;
24
+ --popover: 20 10% 10%;
25
+ --popover-foreground: 38 25% 86%;
26
+ --radius: 0.25rem;
27
+
28
+ /* Luxury-specific tokens */
29
+ --gold: 38 60% 55%;
30
+ --gold-light: 38 50% 72%;
31
+ --gold-dark: 38 70% 40%;
32
+ --surface: 20 12% 7%;
33
+ --surface-elevated: 20 10% 10%;
34
+ }
35
+
36
+ * {
37
+ @apply border-border;
38
+ }
39
+
40
+ body {
41
+ @apply bg-background text-foreground antialiased;
42
+ letter-spacing: 0.01em;
43
+ line-height: 1.7;
44
+ }
45
+
46
+ /* Luxury typography — editorial serif hierarchy */
47
+ h1,
48
+ h2,
49
+ h3,
50
+ h4 {
51
+ letter-spacing: 0.04em;
52
+ font-weight: 500;
53
+ line-height: 1.2;
54
+ }
55
+
56
+ h1 {
57
+ text-transform: uppercase;
58
+ letter-spacing: 0.1em;
59
+ font-weight: 400;
60
+ line-height: 1.1;
61
+ }
62
+
63
+ h2 {
64
+ text-transform: uppercase;
65
+ letter-spacing: 0.06em;
66
+ }
67
+
68
+ /* Elegant link underline animation */
69
+ a:not([class*="bg-"]) {
70
+ position: relative;
71
+ transition: color 0.3s ease, opacity 0.3s ease;
72
+ }
73
+
74
+ main a:not([class*="bg-"]):not([class*="group"])::after {
75
+ content: '';
76
+ position: absolute;
77
+ bottom: -1px;
78
+ left: 0;
79
+ width: 0;
80
+ height: 1px;
81
+ background: hsl(var(--gold));
82
+ transition: width 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
83
+ }
84
+
85
+ main a:not([class*="bg-"]):not([class*="group"]):hover::after {
86
+ width: 100%;
87
+ }
88
+
89
+ /* Refined text selection */
90
+ ::selection {
91
+ background: hsl(var(--gold) / 0.3);
92
+ color: hsl(38 25% 96%);
93
+ }
94
+
95
+ /* Subtle body texture overlay */
96
+ body::before {
97
+ content: '';
98
+ position: fixed;
99
+ inset: 0;
100
+ background: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.015'/%3E%3C/svg%3E");
101
+ pointer-events: none;
102
+ z-index: 9999;
103
+ }
104
+
105
+ /* Custom scrollbar */
106
+ ::-webkit-scrollbar {
107
+ width: 5px;
108
+ }
109
+
110
+ ::-webkit-scrollbar-track {
111
+ background: hsl(20 14% 4%);
112
+ }
113
+
114
+ ::-webkit-scrollbar-thumb {
115
+ background: hsl(30 10% 18%);
116
+ border-radius: 3px;
117
+ }
118
+
119
+ ::-webkit-scrollbar-thumb:hover {
120
+ background: hsl(var(--gold) / 0.5);
121
+ }
122
+
123
+ /* Smooth focus states */
124
+ :focus-visible {
125
+ outline: 1px solid hsl(var(--gold) / 0.5);
126
+ outline-offset: 3px;
127
+ }
128
+ }
129
+
130
+ @layer components {
131
+ /* ─── Buttons ─── */
132
+
133
+ /* Primary CTA — gold with shimmer sweep */
134
+ button[class*="bg-primary"],
135
+ a[class*="bg-primary"] {
136
+ position: relative;
137
+ overflow: hidden;
138
+ font-weight: 500;
139
+ letter-spacing: 0.08em;
140
+ text-transform: uppercase;
141
+ font-size: 0.78rem;
142
+ border: 1px solid hsl(var(--gold) / 0.3);
143
+ transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
144
+ }
145
+
146
+ button[class*="bg-primary"]:hover,
147
+ a[class*="bg-primary"]:hover {
148
+ box-shadow:
149
+ 0 0 20px hsl(var(--gold) / 0.2),
150
+ 0 4px 16px hsl(0 0% 0% / 0.3);
151
+ border-color: hsl(var(--gold) / 0.6);
152
+ opacity: 1 !important;
153
+ }
154
+
155
+ button[class*="bg-primary"]::after,
156
+ a[class*="bg-primary"]::after {
157
+ content: '';
158
+ position: absolute;
159
+ top: -50%;
160
+ left: -75%;
161
+ width: 50%;
162
+ height: 200%;
163
+ background: linear-gradient(
164
+ 90deg,
165
+ transparent,
166
+ hsl(var(--gold-light) / 0.12),
167
+ hsl(var(--gold-light) / 0.2),
168
+ transparent
169
+ );
170
+ transform: skewX(-20deg);
171
+ transition: left 0.7s ease;
172
+ pointer-events: none;
173
+ }
174
+
175
+ button[class*="bg-primary"]:hover::after,
176
+ a[class*="bg-primary"]:hover::after {
177
+ left: 130%;
178
+ }
179
+
180
+ /* Secondary/ghost buttons — thin border, minimal */
181
+ [class*="bg-secondary"] {
182
+ border: 1px solid hsl(var(--border));
183
+ transition: all 0.3s ease;
184
+ letter-spacing: 0.04em;
185
+ text-transform: uppercase;
186
+ font-size: 0.8rem;
187
+ }
188
+
189
+ [class*="bg-secondary"]:hover {
190
+ border-color: hsl(var(--gold) / 0.4);
191
+ background: hsl(var(--surface-elevated)) !important;
192
+ }
193
+
194
+ /* ─── Product Cards ─── */
195
+
196
+ [class*="group"][class*="border"] {
197
+ transition: all 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
198
+ border-color: hsl(var(--border) / 0.5);
199
+ background: hsl(var(--surface));
200
+ }
201
+
202
+ [class*="group"][class*="border"]:hover {
203
+ border-color: hsl(var(--gold) / 0.25);
204
+ box-shadow:
205
+ 0 8px 40px hsl(0 0% 0% / 0.5),
206
+ 0 0 0 1px hsl(var(--gold) / 0.08);
207
+ }
208
+
209
+ /* Product image — slow cinematic zoom */
210
+ [class*="group-hover\\:scale-105"] {
211
+ transition: transform 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
212
+ }
213
+
214
+ /* Product image overlay on hover — subtle dark gradient */
215
+ [class*="group"] [class*="aspect-square"] {
216
+ position: relative;
217
+ }
218
+
219
+ [class*="group"]:hover [class*="aspect-square"]::after {
220
+ content: '';
221
+ position: absolute;
222
+ inset: 0;
223
+ background: linear-gradient(
224
+ to top,
225
+ hsl(20 14% 4% / 0.3),
226
+ transparent 50%
227
+ );
228
+ pointer-events: none;
229
+ transition: opacity 0.5s ease;
230
+ }
231
+
232
+ /* ─── Form Elements ─── */
233
+
234
+ input[class*="border-border"],
235
+ select[class*="border-border"],
236
+ textarea[class*="border-border"] {
237
+ background: hsl(var(--surface)) !important;
238
+ transition: all 0.3s ease;
239
+ }
240
+
241
+ input[class*="border-border"]:focus,
242
+ select[class*="border-border"]:focus,
243
+ textarea[class*="border-border"]:focus {
244
+ border-color: hsl(var(--gold) / 0.5) !important;
245
+ box-shadow: 0 0 0 3px hsl(var(--gold) / 0.08);
246
+ background: hsl(var(--surface-elevated)) !important;
247
+ }
248
+
249
+ /* Placeholder text */
250
+ input::placeholder,
251
+ textarea::placeholder {
252
+ letter-spacing: 0.03em;
253
+ font-size: 0.85rem;
254
+ }
255
+
256
+ /* ─── Navigation & Header ─── */
257
+
258
+ header[class*="sticky"] {
259
+ backdrop-filter: blur(16px) saturate(1.2);
260
+ background: hsl(20 14% 4% / 0.8) !important;
261
+ border-bottom: 1px solid hsl(var(--gold) / 0.08) !important;
262
+ }
263
+
264
+ /* Nav links */
265
+ nav a {
266
+ letter-spacing: 0.06em;
267
+ text-transform: uppercase;
268
+ font-size: 0.75rem;
269
+ font-weight: 500;
270
+ }
271
+
272
+ /* ─── Badges & Tags ─── */
273
+
274
+ [class*="bg-muted"][class*="text-xs"] {
275
+ text-transform: uppercase;
276
+ letter-spacing: 0.1em;
277
+ font-size: 0.6rem;
278
+ font-weight: 600;
279
+ border: 1px solid hsl(var(--border));
280
+ }
281
+
282
+ /* Sale badges — dark red, refined */
283
+ [class*="bg-destructive"] {
284
+ background: hsl(0 60% 38%) !important;
285
+ font-weight: 600;
286
+ letter-spacing: 0.06em;
287
+ text-transform: uppercase;
288
+ font-size: 0.65rem;
289
+ }
290
+
291
+ /* ─── Price Display ─── */
292
+
293
+ /* Gold gradient on prices */
294
+ [class*="font-bold"][class*="text-lg"],
295
+ [class*="font-bold"][class*="text-xl"],
296
+ [class*="font-bold"][class*="text-2xl"] {
297
+ background: linear-gradient(
298
+ 135deg,
299
+ hsl(var(--gold-light)),
300
+ hsl(var(--gold)),
301
+ hsl(var(--gold-dark))
302
+ );
303
+ -webkit-background-clip: text;
304
+ -webkit-text-fill-color: transparent;
305
+ background-clip: text;
306
+ }
307
+
308
+ /* Strikethrough original prices */
309
+ [class*="line-through"] {
310
+ opacity: 0.4;
311
+ }
312
+
313
+ /* ─── Dividers & Separators ─── */
314
+
315
+ hr {
316
+ border-color: hsl(var(--border) / 0.3);
317
+ }
318
+
319
+ /* Decorative gold separator */
320
+ main > section + section {
321
+ border-top: 1px solid hsl(var(--gold) / 0.06);
322
+ }
323
+
324
+ /* ─── Cart & Checkout ─── */
325
+
326
+ /* Sticky summary panel */
327
+ [class*="sticky"][class*="top-"] {
328
+ background: hsl(var(--surface));
329
+ border: 1px solid hsl(var(--border) / 0.5);
330
+ }
331
+ }
332
+
333
+ /* ─── Animations ─── */
334
+
335
+ /* Elegant fade-in-up */
336
+ @keyframes luxury-fade-in {
337
+ from {
338
+ opacity: 0;
339
+ transform: translateY(16px);
340
+ }
341
+ to {
342
+ opacity: 1;
343
+ transform: translateY(0);
344
+ }
345
+ }
346
+
347
+ main > * {
348
+ animation: luxury-fade-in 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
349
+ }
350
+
351
+ main > *:nth-child(2) {
352
+ animation-delay: 0.1s;
353
+ }
354
+
355
+ main > *:nth-child(3) {
356
+ animation-delay: 0.2s;
357
+ }
358
+
359
+ main > *:nth-child(4) {
360
+ animation-delay: 0.3s;
361
+ }
362
+
363
+ /* Staggered grid item reveal */
364
+ @keyframes luxury-grid-item {
365
+ from {
366
+ opacity: 0;
367
+ transform: translateY(12px) scale(0.98);
368
+ }
369
+ to {
370
+ opacity: 1;
371
+ transform: translateY(0) scale(1);
372
+ }
373
+ }
374
+
375
+ [class*="grid"] > [class*="group"] {
376
+ animation: luxury-grid-item 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
377
+ }
378
+
379
+ [class*="grid"] > [class*="group"]:nth-child(2) {
380
+ animation-delay: 0.08s;
381
+ }
382
+
383
+ [class*="grid"] > [class*="group"]:nth-child(3) {
384
+ animation-delay: 0.16s;
385
+ }
386
+
387
+ [class*="grid"] > [class*="group"]:nth-child(4) {
388
+ animation-delay: 0.24s;
389
+ }
390
+
391
+ [class*="grid"] > [class*="group"]:nth-child(5) {
392
+ animation-delay: 0.32s;
393
+ }
394
+
395
+ [class*="grid"] > [class*="group"]:nth-child(6) {
396
+ animation-delay: 0.4s;
397
+ }
398
+
399
+ [class*="grid"] > [class*="group"]:nth-child(7) {
400
+ animation-delay: 0.48s;
401
+ }
402
+
403
+ [class*="grid"] > [class*="group"]:nth-child(8) {
404
+ animation-delay: 0.56s;
405
+ }