@numueg/theme-cli 0.5.0 → 0.6.1

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 (62) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/index.js +825 -405
  3. package/package.json +2 -1
  4. package/templates/scaffold/index.html +13 -0
  5. package/templates/scaffold/package.json +27 -0
  6. package/templates/scaffold/schemas/sections/about_section.json +23 -0
  7. package/templates/scaffold/schemas/sections/account.json +8 -0
  8. package/templates/scaffold/schemas/sections/cart_summary.json +12 -0
  9. package/templates/scaffold/schemas/sections/categories.json +9 -0
  10. package/templates/scaffold/schemas/sections/featured_collection.json +14 -0
  11. package/templates/scaffold/schemas/sections/footer.json +14 -0
  12. package/templates/scaffold/schemas/sections/frequently_bought.json +10 -0
  13. package/templates/scaffold/schemas/sections/header.json +14 -0
  14. package/templates/scaffold/schemas/sections/hero.json +15 -0
  15. package/templates/scaffold/schemas/sections/image_with_text.json +19 -0
  16. package/templates/scaffold/schemas/sections/marquee.json +9 -0
  17. package/templates/scaffold/schemas/sections/newsletter.json +11 -0
  18. package/templates/scaffold/schemas/sections/not_found.json +12 -0
  19. package/templates/scaffold/schemas/sections/order_confirmation.json +9 -0
  20. package/templates/scaffold/schemas/sections/product_details.json +12 -0
  21. package/templates/scaffold/schemas/sections/product_grid.json +12 -0
  22. package/templates/scaffold/schemas/sections/promo_banner.json +13 -0
  23. package/templates/scaffold/schemas/sections/rich_text.json +17 -0
  24. package/templates/scaffold/schemas/sections/search_results.json +11 -0
  25. package/templates/scaffold/schemas/sections/size_chart.json +9 -0
  26. package/templates/scaffold/schemas/sections/testimonials.json +22 -0
  27. package/templates/scaffold/settings_schema.json +35 -0
  28. package/templates/scaffold/src/dev-entry.tsx +244 -0
  29. package/templates/scaffold/src/lib/CouponForm.tsx +90 -0
  30. package/templates/scaffold/src/lib/EditableText.tsx +178 -0
  31. package/templates/scaffold/src/lib/ProductCard.tsx +99 -0
  32. package/templates/scaffold/src/lib/cartUI.ts +43 -0
  33. package/templates/scaffold/src/lib/i18n.ts +17 -0
  34. package/templates/scaffold/src/lib/section.ts +12 -0
  35. package/templates/scaffold/src/main.tsx +230 -0
  36. package/templates/scaffold/src/sections/Footer.tsx +161 -0
  37. package/templates/scaffold/src/sections/Header.tsx +453 -0
  38. package/templates/scaffold/src/sections/about_section.tsx +104 -0
  39. package/templates/scaffold/src/sections/account.tsx +422 -0
  40. package/templates/scaffold/src/sections/cart_summary.tsx +169 -0
  41. package/templates/scaffold/src/sections/categories.tsx +57 -0
  42. package/templates/scaffold/src/sections/featured_collection.tsx +109 -0
  43. package/templates/scaffold/src/sections/frequently_bought.tsx +187 -0
  44. package/templates/scaffold/src/sections/hero.tsx +133 -0
  45. package/templates/scaffold/src/sections/image_with_text.tsx +105 -0
  46. package/templates/scaffold/src/sections/marquee.tsx +45 -0
  47. package/templates/scaffold/src/sections/newsletter.tsx +79 -0
  48. package/templates/scaffold/src/sections/not_found.tsx +56 -0
  49. package/templates/scaffold/src/sections/order_confirmation.tsx +127 -0
  50. package/templates/scaffold/src/sections/product_details.tsx +541 -0
  51. package/templates/scaffold/src/sections/product_grid.tsx +147 -0
  52. package/templates/scaffold/src/sections/promo_banner.tsx +80 -0
  53. package/templates/scaffold/src/sections/rich_text.tsx +51 -0
  54. package/templates/scaffold/src/sections/search_results.tsx +93 -0
  55. package/templates/scaffold/src/sections/size_chart.tsx +109 -0
  56. package/templates/scaffold/src/sections/testimonials.tsx +112 -0
  57. package/templates/scaffold/styles.css +2404 -0
  58. package/templates/scaffold/templates/error.html +13 -0
  59. package/templates/scaffold/templates/loading.html +11 -0
  60. package/templates/scaffold/theme.json +224 -0
  61. package/templates/scaffold/tsconfig.json +22 -0
  62. package/templates/scaffold/vite.config.ts +16 -0
@@ -0,0 +1,2404 @@
1
+ /* ===========================================================================
2
+ NUMU Starter — premium editorial commerce theme for the NUMU V3 engine.
3
+ Monochromatic palette, wide uppercase display type, content-first layout,
4
+ Arabic-first (RTL). All rules are scoped under `.nt` so the bundle never
5
+ leaks styles into the host storefront chrome.
6
+ =========================================================================== */
7
+
8
+ .nt {
9
+ /* Palette — overridable from global_settings via inline --nt-* vars */
10
+ --nt-black: #000000;
11
+ --nt-white: #ffffff;
12
+ --nt-bg: #efeeed;
13
+ --nt-fg: #000000;
14
+ --nt-card: #ffffff;
15
+ --nt-accent: #0099ff;
16
+ --nt-charcoal: #383838;
17
+ --nt-gray: #888888;
18
+ --nt-muted: #666666;
19
+ --nt-border: #e3e1df;
20
+ --nt-secondary: #f6f5f4;
21
+ --nt-radius: 6px;
22
+
23
+ --nt-font-body: "Cairo", "Inter", -apple-system, BlinkMacSystemFont,
24
+ "Segoe UI", system-ui, sans-serif;
25
+ --nt-font-display: "Cairo", "Inter", system-ui, sans-serif;
26
+ --nt-font-mono: "Fragment Mono", "SF Mono", "Fira Code", ui-monospace,
27
+ monospace;
28
+
29
+ background-color: var(--nt-bg);
30
+ color: var(--nt-fg);
31
+ font-family: var(--nt-font-body);
32
+ -webkit-font-smoothing: antialiased;
33
+ line-height: 1.5;
34
+ }
35
+
36
+ .nt *,
37
+ .nt *::before,
38
+ .nt *::after {
39
+ box-sizing: border-box;
40
+ }
41
+
42
+ .nt img {
43
+ display: block;
44
+ max-width: 100%;
45
+ }
46
+
47
+ .nt a {
48
+ color: inherit;
49
+ text-decoration: none;
50
+ }
51
+
52
+ /* `.nt a { color: inherit }` (spec 0,1,1) otherwise beats the single-class
53
+ button color rules → link-buttons render text in the inherited color
54
+ (e.g. black-on-black checkout). These higher-specificity rules restore the
55
+ button text colors for <a> buttons. */
56
+ .nt a.nt-btn {
57
+ color: var(--nt-white);
58
+ }
59
+ .nt a.nt-btn-light {
60
+ color: var(--nt-black);
61
+ }
62
+ .nt a.nt-btn-outline {
63
+ color: var(--nt-fg);
64
+ }
65
+ .nt a.nt-btn-outline:hover {
66
+ color: var(--nt-bg);
67
+ }
68
+ .nt a.nt-hero__cta {
69
+ color: var(--nt-white);
70
+ }
71
+ .nt a.nt-hero__cta:hover {
72
+ color: var(--nt-black);
73
+ }
74
+
75
+ /* ===== LAYOUT ===== */
76
+ .nt-container {
77
+ width: 100%;
78
+ max-width: 1280px;
79
+ margin-inline: auto;
80
+ padding-inline: 1rem;
81
+ }
82
+
83
+ .nt-section {
84
+ padding-block: 3rem;
85
+ }
86
+ @media (min-width: 768px) {
87
+ .nt-section {
88
+ padding-block: 4rem;
89
+ }
90
+ }
91
+
92
+ .nt-bg-white {
93
+ background: var(--nt-white);
94
+ }
95
+ .nt-bg-black {
96
+ background: var(--nt-black);
97
+ color: var(--nt-white);
98
+ }
99
+
100
+ /* ===== TYPOGRAPHY ===== */
101
+ .nt-display {
102
+ font-family: var(--nt-font-display);
103
+ font-weight: 800;
104
+ font-size: clamp(2.5rem, 8vw, 4.5rem);
105
+ line-height: 0.95;
106
+ letter-spacing: -0.03em;
107
+ text-transform: uppercase;
108
+ }
109
+ .nt-display-sm {
110
+ font-family: var(--nt-font-display);
111
+ font-weight: 800;
112
+ font-size: clamp(1.5rem, 4vw, 2.5rem);
113
+ line-height: 1;
114
+ letter-spacing: -0.02em;
115
+ text-transform: uppercase;
116
+ }
117
+ .nt-heading {
118
+ font-weight: 800;
119
+ font-size: clamp(1.75rem, 4vw, 3rem);
120
+ line-height: 1.05;
121
+ letter-spacing: -0.02em;
122
+ text-transform: uppercase;
123
+ }
124
+ .nt-label {
125
+ font-size: 0.6875rem;
126
+ font-weight: 600;
127
+ letter-spacing: 0.12em;
128
+ text-transform: uppercase;
129
+ color: var(--nt-muted);
130
+ }
131
+ .nt-mono {
132
+ font-family: var(--nt-font-mono);
133
+ font-size: 0.75rem;
134
+ letter-spacing: 0.03em;
135
+ }
136
+ .nt-muted {
137
+ color: var(--nt-muted);
138
+ }
139
+
140
+ /* ===== BUTTONS ===== */
141
+ .nt-btn,
142
+ .nt-btn-outline,
143
+ .nt-btn-light {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ gap: 0.5rem;
148
+ font-weight: 600;
149
+ font-size: 0.75rem;
150
+ letter-spacing: 0.08em;
151
+ text-transform: uppercase;
152
+ padding: 0.875rem 2rem;
153
+ border-radius: 999px;
154
+ border: 1px solid transparent;
155
+ cursor: pointer;
156
+ transition: all 0.25s ease;
157
+ text-align: center;
158
+ }
159
+ .nt-btn {
160
+ background: var(--nt-black);
161
+ color: var(--nt-white);
162
+ border-color: var(--nt-black);
163
+ }
164
+ .nt-btn:hover {
165
+ background: var(--nt-charcoal);
166
+ border-color: var(--nt-charcoal);
167
+ }
168
+ .nt-btn-outline {
169
+ background: transparent;
170
+ color: var(--nt-fg);
171
+ border-color: var(--nt-border);
172
+ }
173
+ .nt-btn-outline:hover {
174
+ border-color: var(--nt-fg);
175
+ background: var(--nt-fg);
176
+ color: var(--nt-bg);
177
+ }
178
+ .nt-btn-light {
179
+ background: var(--nt-white);
180
+ color: var(--nt-black);
181
+ border-color: var(--nt-white);
182
+ }
183
+ .nt-btn-light:hover {
184
+ background: rgba(255, 255, 255, 0.88);
185
+ }
186
+ .nt-btn[disabled],
187
+ .nt-btn-outline[disabled],
188
+ .nt-btn-light[disabled] {
189
+ opacity: 0.5;
190
+ cursor: not-allowed;
191
+ }
192
+ .nt-btn--block {
193
+ width: 100%;
194
+ }
195
+
196
+ .nt-link {
197
+ color: var(--nt-accent);
198
+ font-weight: 500;
199
+ font-size: 0.8125rem;
200
+ position: relative;
201
+ }
202
+ .nt-link:hover {
203
+ text-decoration: underline;
204
+ text-underline-offset: 3px;
205
+ }
206
+
207
+ /* ===== CARD ===== */
208
+ .nt-card {
209
+ display: block;
210
+ background: transparent;
211
+ }
212
+ .nt-card__media {
213
+ position: relative;
214
+ overflow: hidden;
215
+ border-radius: var(--nt-radius);
216
+ background: var(--nt-secondary);
217
+ aspect-ratio: 1 / 1;
218
+ }
219
+ .nt-card__media img {
220
+ width: 100%;
221
+ height: 100%;
222
+ object-fit: cover;
223
+ transition: transform 0.5s ease;
224
+ }
225
+ .nt-card:hover .nt-card__media img {
226
+ transform: scale(1.04);
227
+ }
228
+ .nt-card__placeholder {
229
+ width: 100%;
230
+ height: 100%;
231
+ background: linear-gradient(135deg, #1a1a1a, #2c2c2c);
232
+ }
233
+ .nt-card__body {
234
+ margin-top: 0.75rem;
235
+ }
236
+ .nt-card__name {
237
+ font-weight: 600;
238
+ font-size: 0.9rem;
239
+ line-height: 1.4;
240
+ letter-spacing: -0.01em;
241
+ display: -webkit-box;
242
+ -webkit-line-clamp: 2;
243
+ -webkit-box-orient: vertical;
244
+ overflow: hidden;
245
+ transition: color 0.2s ease;
246
+ }
247
+ .nt-card:hover .nt-card__name {
248
+ color: var(--nt-accent);
249
+ }
250
+ .nt-card__price {
251
+ margin-top: 0.5rem;
252
+ font-weight: 800;
253
+ font-size: 1rem;
254
+ display: flex;
255
+ align-items: baseline;
256
+ gap: 0.5rem;
257
+ }
258
+ .nt-card__compare {
259
+ font-weight: 400;
260
+ font-size: 0.75rem;
261
+ color: var(--nt-muted);
262
+ text-decoration: line-through;
263
+ }
264
+ .nt-card__add {
265
+ position: absolute;
266
+ inset-inline: 0.5rem;
267
+ bottom: 0.5rem;
268
+ padding: 0.75rem;
269
+ border: none;
270
+ border-radius: var(--nt-radius);
271
+ background: var(--nt-black);
272
+ color: var(--nt-white);
273
+ font-size: 0.75rem;
274
+ font-weight: 600;
275
+ letter-spacing: 0.06em;
276
+ text-transform: uppercase;
277
+ cursor: pointer;
278
+ opacity: 0;
279
+ transform: translateY(8px);
280
+ transition: all 0.25s ease;
281
+ }
282
+ .nt-card__media:hover .nt-card__add,
283
+ .nt-card__add:focus-visible {
284
+ opacity: 1;
285
+ transform: translateY(0);
286
+ }
287
+ .nt-card__add[disabled] {
288
+ cursor: not-allowed;
289
+ opacity: 0.6;
290
+ }
291
+
292
+ /* ===== BADGES ===== */
293
+ .nt-badge {
294
+ position: absolute;
295
+ top: 0.75rem;
296
+ inset-inline-start: 0.75rem;
297
+ background: var(--nt-black);
298
+ color: var(--nt-white);
299
+ font-size: 0.625rem;
300
+ font-weight: 700;
301
+ letter-spacing: 0.08em;
302
+ text-transform: uppercase;
303
+ border-radius: 4px;
304
+ padding: 0.25rem 0.625rem;
305
+ z-index: 2;
306
+ }
307
+ .nt-badge--blue {
308
+ background: var(--nt-accent);
309
+ inset-inline-start: auto;
310
+ inset-inline-end: 0.75rem;
311
+ }
312
+
313
+ /* ===== CHIPS / TABS ===== */
314
+ .nt-chip {
315
+ display: inline-flex;
316
+ align-items: center;
317
+ white-space: nowrap;
318
+ border: 1px solid var(--nt-border);
319
+ border-radius: 999px;
320
+ background: transparent;
321
+ color: var(--nt-fg);
322
+ padding: 0.5rem 1.25rem;
323
+ font-size: 0.8125rem;
324
+ font-weight: 500;
325
+ cursor: pointer;
326
+ transition: all 0.2s ease;
327
+ }
328
+ .nt-chip:hover {
329
+ border-color: var(--nt-fg);
330
+ }
331
+ .nt-chip[aria-pressed="true"],
332
+ .nt-chip.is-active {
333
+ background: var(--nt-black);
334
+ color: var(--nt-white);
335
+ border-color: var(--nt-black);
336
+ }
337
+
338
+ /* ===== INPUT ===== */
339
+ .nt-input {
340
+ width: 100%;
341
+ background: var(--nt-card);
342
+ border: 1px solid var(--nt-border);
343
+ border-radius: var(--nt-radius);
344
+ font-size: 0.875rem;
345
+ padding: 0.625rem 0.875rem;
346
+ color: var(--nt-fg);
347
+ }
348
+ .nt-input:focus {
349
+ border-color: var(--nt-accent);
350
+ outline: none;
351
+ box-shadow: 0 0 0 3px rgba(0, 153, 255, 0.12);
352
+ }
353
+ .nt-input--pill {
354
+ border-radius: 999px;
355
+ height: 3rem;
356
+ padding-inline: 1.25rem;
357
+ }
358
+
359
+ /* ===== HEADER ===== */
360
+ .nt-header {
361
+ position: fixed;
362
+ inset-inline: 0;
363
+ top: 0;
364
+ z-index: 50;
365
+ transition: background-color 0.3s ease, backdrop-filter 0.3s ease,
366
+ border-color 0.3s ease;
367
+ background: transparent;
368
+ border-bottom: 1px solid transparent;
369
+ color: var(--nt-white);
370
+ }
371
+ .nt-header.is-scrolled {
372
+ background: rgba(239, 238, 237, 0.95);
373
+ backdrop-filter: blur(12px);
374
+ -webkit-backdrop-filter: blur(12px);
375
+ border-bottom-color: rgba(0, 0, 0, 0.08);
376
+ color: var(--nt-fg);
377
+ }
378
+ .nt-announce {
379
+ background: var(--nt-black);
380
+ color: var(--nt-bg);
381
+ text-align: center;
382
+ padding-block: 0.5rem;
383
+ font-size: 0.6875rem;
384
+ font-weight: 600;
385
+ letter-spacing: 0.12em;
386
+ text-transform: uppercase;
387
+ }
388
+ .nt-header__bar {
389
+ display: flex;
390
+ align-items: center;
391
+ justify-content: space-between;
392
+ height: 4rem;
393
+ position: relative;
394
+ }
395
+ .nt-header__nav {
396
+ display: none;
397
+ align-items: center;
398
+ gap: 1.5rem;
399
+ }
400
+ @media (min-width: 768px) {
401
+ .nt-header__nav {
402
+ display: flex;
403
+ }
404
+ }
405
+ .nt-header__nav a {
406
+ font-size: 0.8125rem;
407
+ font-weight: 500;
408
+ color: inherit;
409
+ opacity: 0.85;
410
+ transition: opacity 0.2s ease, color 0.2s ease;
411
+ }
412
+ .nt-header__nav a:hover {
413
+ opacity: 1;
414
+ }
415
+ .nt-header.is-scrolled .nt-header__nav a:hover {
416
+ color: var(--nt-accent);
417
+ }
418
+ .nt-header__logo {
419
+ position: absolute;
420
+ inset-inline-start: 50%;
421
+ transform: translateX(-50%);
422
+ font-weight: 900;
423
+ font-size: 1.125rem;
424
+ letter-spacing: 0.08em;
425
+ text-transform: uppercase;
426
+ color: inherit;
427
+ }
428
+ [dir="rtl"] .nt-header__logo {
429
+ transform: translateX(50%);
430
+ }
431
+ .nt-header__logo img {
432
+ height: 2.25rem;
433
+ object-fit: contain;
434
+ }
435
+ .nt-header__actions {
436
+ display: flex;
437
+ align-items: center;
438
+ gap: 0.25rem;
439
+ }
440
+ .nt-iconbtn {
441
+ display: inline-flex;
442
+ align-items: center;
443
+ gap: 0.375rem;
444
+ padding: 0.5rem;
445
+ color: inherit;
446
+ background: none;
447
+ border: none;
448
+ cursor: pointer;
449
+ font-size: 0.8125rem;
450
+ font-weight: 500;
451
+ opacity: 0.85;
452
+ transition: opacity 0.2s ease;
453
+ }
454
+ .nt-iconbtn:hover {
455
+ opacity: 1;
456
+ }
457
+ .nt-header__currency {
458
+ background: transparent;
459
+ border: 1px solid currentColor;
460
+ border-radius: 999px;
461
+ color: inherit;
462
+ font-size: 0.75rem;
463
+ padding: 0.25rem 0.5rem;
464
+ cursor: pointer;
465
+ }
466
+ .nt-langswitch {
467
+ display: inline-flex;
468
+ align-items: center;
469
+ justify-content: center;
470
+ min-width: 2rem;
471
+ height: 2rem;
472
+ padding: 0 0.5rem;
473
+ background: transparent;
474
+ border: 1px solid currentColor;
475
+ border-radius: 999px;
476
+ color: inherit;
477
+ font-size: 0.75rem;
478
+ font-weight: 700;
479
+ letter-spacing: 0.05em;
480
+ cursor: pointer;
481
+ opacity: 0.85;
482
+ transition: opacity 0.2s ease, background 0.2s ease, color 0.2s ease;
483
+ }
484
+ .nt-langswitch:hover {
485
+ opacity: 1;
486
+ background: var(--nt-black);
487
+ color: var(--nt-white);
488
+ border-color: var(--nt-black);
489
+ }
490
+ .nt-burger {
491
+ display: inline-flex;
492
+ padding: 0.5rem;
493
+ background: none;
494
+ border: none;
495
+ color: inherit;
496
+ cursor: pointer;
497
+ }
498
+ @media (min-width: 768px) {
499
+ .nt-burger {
500
+ display: none;
501
+ }
502
+ }
503
+
504
+ /* Mega menu */
505
+ .nt-mega {
506
+ position: absolute;
507
+ top: 100%;
508
+ inset-inline-start: 0;
509
+ margin-top: 0.5rem;
510
+ background: var(--nt-white);
511
+ color: var(--nt-fg);
512
+ border-radius: var(--nt-radius);
513
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
514
+ border: 1px solid var(--nt-border);
515
+ padding: 1.25rem;
516
+ min-width: 460px;
517
+ display: flex;
518
+ gap: 1.5rem;
519
+ z-index: 50;
520
+ }
521
+ .nt-mega__col {
522
+ min-width: 9rem;
523
+ padding-inline-end: 1.25rem;
524
+ border-inline-end: 1px solid var(--nt-border);
525
+ }
526
+ .nt-mega__label {
527
+ font-size: 0.625rem;
528
+ font-weight: 700;
529
+ letter-spacing: 0.15em;
530
+ text-transform: uppercase;
531
+ color: var(--nt-accent);
532
+ margin-bottom: 0.75rem;
533
+ }
534
+ .nt-mega__link {
535
+ display: block;
536
+ font-size: 0.875rem;
537
+ color: var(--nt-muted);
538
+ margin-bottom: 0.5rem;
539
+ transition: color 0.2s ease;
540
+ }
541
+ .nt-mega__link--strong {
542
+ font-weight: 700;
543
+ color: var(--nt-fg);
544
+ }
545
+ .nt-mega__link:hover {
546
+ color: var(--nt-fg);
547
+ }
548
+ .nt-mega__cards {
549
+ flex: 1;
550
+ display: grid;
551
+ grid-template-columns: repeat(3, 1fr);
552
+ gap: 0.75rem;
553
+ }
554
+ .nt-mega__card {
555
+ display: block;
556
+ }
557
+ .nt-mega__cardmedia {
558
+ display: flex;
559
+ align-items: center;
560
+ justify-content: center;
561
+ aspect-ratio: 1 / 1;
562
+ background: var(--nt-black);
563
+ border-radius: var(--nt-radius);
564
+ overflow: hidden;
565
+ }
566
+ .nt-mega__cardmedia img {
567
+ width: 100%;
568
+ height: 100%;
569
+ object-fit: cover;
570
+ transition: transform 0.3s ease;
571
+ }
572
+ .nt-mega__card:hover .nt-mega__cardmedia img {
573
+ transform: scale(1.08);
574
+ }
575
+ .nt-mega__cardname {
576
+ display: block;
577
+ text-align: center;
578
+ font-size: 0.625rem;
579
+ font-weight: 700;
580
+ letter-spacing: 0.08em;
581
+ text-transform: uppercase;
582
+ margin-top: 0.5rem;
583
+ }
584
+
585
+ /* Mobile menu */
586
+ .nt-mobilemenu {
587
+ background: var(--nt-white);
588
+ color: var(--nt-fg);
589
+ border-top: 1px solid var(--nt-border);
590
+ padding: 1rem;
591
+ }
592
+ .nt-mobilemenu a {
593
+ display: block;
594
+ padding-block: 0.4rem;
595
+ font-size: 0.9rem;
596
+ font-weight: 600;
597
+ }
598
+
599
+ /* ===== CART DRAWER ===== */
600
+ .nt-drawer {
601
+ position: fixed;
602
+ inset: 0;
603
+ z-index: 60;
604
+ visibility: hidden;
605
+ pointer-events: none;
606
+ }
607
+ .nt-drawer.is-open {
608
+ visibility: visible;
609
+ pointer-events: auto;
610
+ }
611
+ .nt-drawer__overlay {
612
+ position: absolute;
613
+ inset: 0;
614
+ background: rgba(0, 0, 0, 0.5);
615
+ opacity: 0;
616
+ transition: opacity 0.3s ease;
617
+ }
618
+ .nt-drawer.is-open .nt-drawer__overlay {
619
+ opacity: 1;
620
+ }
621
+ .nt-drawer__panel {
622
+ position: fixed;
623
+ inset-block: 0;
624
+ inset-inline-end: 0;
625
+ width: min(28rem, 100vw);
626
+ max-width: 100vw;
627
+ background: var(--nt-white);
628
+ color: var(--nt-fg);
629
+ display: flex;
630
+ flex-direction: column;
631
+ box-shadow: 0 0 40px rgba(0, 0, 0, 0.25);
632
+ transform: translateX(100%); /* LTR closed: off the right edge */
633
+ transition: transform 0.3s ease;
634
+ }
635
+ /* RTL: drawer pins to the left edge, slides in from the left */
636
+ [dir="rtl"] .nt-drawer__panel {
637
+ transform: translateX(-100%);
638
+ }
639
+ .nt-drawer.is-open .nt-drawer__panel,
640
+ [dir="rtl"] .nt-drawer.is-open .nt-drawer__panel {
641
+ transform: translateX(0);
642
+ }
643
+ .nt-drawer__head {
644
+ display: flex;
645
+ align-items: center;
646
+ justify-content: space-between;
647
+ padding: 1.25rem 1.5rem;
648
+ border-bottom: 1px solid var(--nt-border);
649
+ }
650
+ .nt-drawer__title {
651
+ font-size: 0.875rem;
652
+ font-weight: 700;
653
+ text-transform: uppercase;
654
+ letter-spacing: 0.04em;
655
+ }
656
+ .nt-drawer__close {
657
+ background: none;
658
+ border: none;
659
+ cursor: pointer;
660
+ padding: 0.25rem;
661
+ color: var(--nt-fg);
662
+ }
663
+ .nt-drawer__body {
664
+ flex: 1;
665
+ overflow-y: auto;
666
+ }
667
+ .nt-drawer__foot {
668
+ border-top: 1px solid var(--nt-border);
669
+ padding: 1.25rem 1.5rem;
670
+ display: flex;
671
+ flex-direction: column;
672
+ gap: 1rem;
673
+ }
674
+ .nt-drawer__empty {
675
+ text-align: center;
676
+ padding: 5rem 1.5rem;
677
+ color: var(--nt-gray);
678
+ font-size: 0.875rem;
679
+ }
680
+
681
+ /* line item (shared by drawer + cart page) */
682
+ .nt-line {
683
+ display: flex;
684
+ gap: 1rem;
685
+ padding: 1.25rem 1.5rem;
686
+ border-bottom: 1px solid var(--nt-border);
687
+ }
688
+ .nt-line__img {
689
+ width: 6rem;
690
+ height: 6rem;
691
+ flex-shrink: 0;
692
+ border-radius: var(--nt-radius);
693
+ overflow: hidden;
694
+ background: var(--nt-secondary);
695
+ }
696
+ .nt-line__img img {
697
+ width: 100%;
698
+ height: 100%;
699
+ object-fit: cover;
700
+ }
701
+ .nt-line__body {
702
+ flex: 1;
703
+ min-width: 0;
704
+ }
705
+ .nt-line__top {
706
+ display: flex;
707
+ justify-content: space-between;
708
+ gap: 0.75rem;
709
+ }
710
+ .nt-line__name {
711
+ font-size: 0.875rem;
712
+ font-weight: 700;
713
+ text-transform: uppercase;
714
+ letter-spacing: -0.01em;
715
+ line-height: 1.3;
716
+ }
717
+ .nt-line__variant {
718
+ font-size: 0.75rem;
719
+ color: var(--nt-gray);
720
+ margin-top: 0.125rem;
721
+ }
722
+ .nt-line__controls {
723
+ display: flex;
724
+ align-items: center;
725
+ justify-content: space-between;
726
+ margin-top: 0.75rem;
727
+ }
728
+ .nt-qty {
729
+ display: inline-flex;
730
+ align-items: center;
731
+ border: 1px solid var(--nt-border);
732
+ border-radius: 999px;
733
+ height: 2.25rem;
734
+ }
735
+ .nt-qty button {
736
+ padding-inline: 0.75rem;
737
+ height: 100%;
738
+ background: none;
739
+ border: none;
740
+ cursor: pointer;
741
+ font-size: 1rem;
742
+ color: var(--nt-fg);
743
+ }
744
+ .nt-qty button:disabled {
745
+ opacity: 0.4;
746
+ cursor: not-allowed;
747
+ }
748
+ .nt-qty span {
749
+ padding-inline: 0.5rem;
750
+ font-size: 0.875rem;
751
+ font-weight: 700;
752
+ min-width: 2rem;
753
+ text-align: center;
754
+ }
755
+ .nt-line__remove {
756
+ background: none;
757
+ border: none;
758
+ cursor: pointer;
759
+ color: var(--nt-gray);
760
+ padding: 0.375rem;
761
+ transition: color 0.2s ease;
762
+ }
763
+ .nt-line__remove:hover {
764
+ color: var(--nt-black);
765
+ }
766
+ .nt-subtotal {
767
+ display: flex;
768
+ align-items: center;
769
+ justify-content: space-between;
770
+ font-size: 0.875rem;
771
+ font-weight: 700;
772
+ }
773
+ .nt-discount {
774
+ font-weight: 600;
775
+ color: var(--nt-accent);
776
+ }
777
+ .nt-total {
778
+ font-size: 1rem;
779
+ padding-top: 0.625rem;
780
+ border-top: 1px solid var(--nt-border);
781
+ }
782
+ .nt-cart__totals {
783
+ display: flex;
784
+ flex-direction: column;
785
+ gap: 0.625rem;
786
+ margin-top: 1.5rem;
787
+ margin-inline-start: auto;
788
+ max-width: 22rem;
789
+ }
790
+
791
+ /* ===== COUPON ===== */
792
+ .nt-coupon {
793
+ margin-bottom: 0.25rem;
794
+ }
795
+ .nt-coupon__row {
796
+ display: flex;
797
+ gap: 0.5rem;
798
+ }
799
+ .nt-coupon__row .nt-input {
800
+ flex: 1;
801
+ }
802
+ .nt-coupon__row .nt-btn-outline {
803
+ padding-inline: 1.25rem;
804
+ white-space: nowrap;
805
+ }
806
+ .nt-coupon.is-compact .nt-coupon__row .nt-btn-outline {
807
+ padding: 0.625rem 1rem;
808
+ }
809
+ .nt-coupon__err {
810
+ font-size: 0.75rem;
811
+ color: var(--nt-accent);
812
+ margin-top: 0.5rem;
813
+ }
814
+ .nt-coupon--applied {
815
+ display: flex;
816
+ align-items: center;
817
+ justify-content: space-between;
818
+ gap: 0.75rem;
819
+ background: var(--nt-secondary);
820
+ border: 1px dashed var(--nt-border);
821
+ border-radius: var(--nt-radius);
822
+ padding: 0.625rem 0.875rem;
823
+ font-size: 0.8125rem;
824
+ }
825
+ .nt-coupon__tag {
826
+ color: var(--nt-muted);
827
+ }
828
+ .nt-coupon__tag strong {
829
+ color: var(--nt-fg);
830
+ letter-spacing: 0.04em;
831
+ }
832
+ .nt-coupon__remove {
833
+ background: none;
834
+ border: none;
835
+ cursor: pointer;
836
+ color: var(--nt-accent);
837
+ font-size: 0.75rem;
838
+ font-weight: 600;
839
+ text-decoration: underline;
840
+ text-underline-offset: 2px;
841
+ }
842
+ .nt-coupon__remove:disabled {
843
+ opacity: 0.5;
844
+ cursor: not-allowed;
845
+ }
846
+
847
+ /* ===== FOOTER ===== */
848
+ .nt-footer {
849
+ background: var(--nt-black);
850
+ color: var(--nt-bg);
851
+ }
852
+ .nt-footer__ticker {
853
+ overflow: hidden;
854
+ padding-block: 1rem;
855
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
856
+ }
857
+ .nt-footer__grid {
858
+ display: grid;
859
+ grid-template-columns: 1fr;
860
+ gap: 2.5rem;
861
+ padding-block: 3rem;
862
+ }
863
+ @media (min-width: 768px) {
864
+ .nt-footer__grid {
865
+ grid-template-columns: 2fr 1fr 1fr;
866
+ }
867
+ }
868
+ .nt-footer__brand h3 {
869
+ font-weight: 900;
870
+ font-size: 1.5rem;
871
+ text-transform: uppercase;
872
+ letter-spacing: 0.04em;
873
+ margin: 0 0 1rem;
874
+ }
875
+ .nt-footer__desc {
876
+ font-size: 0.8125rem;
877
+ color: rgba(255, 255, 255, 0.5);
878
+ line-height: 1.7;
879
+ margin-bottom: 1.5rem;
880
+ max-width: 32ch;
881
+ }
882
+ .nt-footer__heading {
883
+ font-size: 0.6875rem;
884
+ font-weight: 700;
885
+ letter-spacing: 0.18em;
886
+ text-transform: uppercase;
887
+ color: rgba(255, 255, 255, 0.6);
888
+ margin-bottom: 1.25rem;
889
+ }
890
+ .nt-footer__links {
891
+ display: flex;
892
+ flex-direction: column;
893
+ gap: 0.75rem;
894
+ }
895
+ .nt-footer__links a {
896
+ font-size: 0.8125rem;
897
+ color: rgba(255, 255, 255, 0.5);
898
+ transition: color 0.2s ease;
899
+ }
900
+ .nt-footer__links a:hover {
901
+ color: var(--nt-white);
902
+ }
903
+ .nt-footer__social {
904
+ display: flex;
905
+ align-items: center;
906
+ gap: 1rem;
907
+ }
908
+ .nt-footer__social a {
909
+ color: rgba(255, 255, 255, 0.5);
910
+ transition: color 0.2s ease;
911
+ }
912
+ .nt-footer__social a:hover {
913
+ color: var(--nt-white);
914
+ }
915
+ .nt-footer__bottom {
916
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
917
+ padding-block: 1.25rem;
918
+ display: flex;
919
+ flex-direction: column;
920
+ gap: 0.75rem;
921
+ align-items: center;
922
+ justify-content: space-between;
923
+ }
924
+ @media (min-width: 768px) {
925
+ .nt-footer__bottom {
926
+ flex-direction: row;
927
+ }
928
+ }
929
+ .nt-footer__copy {
930
+ font-size: 0.6875rem;
931
+ color: rgba(255, 255, 255, 0.3);
932
+ }
933
+ .nt-paybadges {
934
+ display: flex;
935
+ gap: 0.5rem;
936
+ }
937
+ .nt-paybadge {
938
+ display: inline-flex;
939
+ align-items: center;
940
+ justify-content: center;
941
+ height: 1.75rem;
942
+ padding-inline: 0.75rem;
943
+ background: rgba(255, 255, 255, 0.1);
944
+ border-radius: 4px;
945
+ font-size: 0.625rem;
946
+ font-weight: 700;
947
+ color: rgba(255, 255, 255, 0.6);
948
+ text-transform: uppercase;
949
+ letter-spacing: 0.06em;
950
+ }
951
+
952
+ /* ===== MARQUEE ===== */
953
+ .nt-marquee {
954
+ background: var(--nt-black);
955
+ overflow: hidden;
956
+ padding-block: 0.875rem;
957
+ border-block: 1px solid rgba(255, 255, 255, 0.1);
958
+ }
959
+ .nt-marquee__track {
960
+ display: flex;
961
+ white-space: nowrap;
962
+ width: max-content;
963
+ animation: nt-ticker 30s linear infinite;
964
+ }
965
+ .nt-marquee__item {
966
+ display: inline-flex;
967
+ align-items: center;
968
+ gap: 2rem;
969
+ margin-inline: 2rem;
970
+ }
971
+ .nt-marquee__text {
972
+ color: rgba(255, 255, 255, 0.9);
973
+ font-weight: 900;
974
+ font-size: 0.75rem;
975
+ letter-spacing: 0.2em;
976
+ text-transform: uppercase;
977
+ }
978
+ .nt-marquee__sub {
979
+ color: rgba(255, 255, 255, 0.6);
980
+ font-weight: 800;
981
+ font-size: 0.75rem;
982
+ letter-spacing: 0.15em;
983
+ text-transform: uppercase;
984
+ }
985
+ .nt-marquee__dot {
986
+ color: rgba(255, 255, 255, 0.3);
987
+ }
988
+ @keyframes nt-ticker {
989
+ from {
990
+ transform: translateX(0);
991
+ }
992
+ to {
993
+ transform: translateX(-50%);
994
+ }
995
+ }
996
+ /* The ticker is a deliberate brand element — keep it scrolling even when the
997
+ OS requests reduced motion (merchant explicitly wants it always running). */
998
+
999
+ /* ===== HERO ===== */
1000
+ .nt-hero {
1001
+ position: relative;
1002
+ height: 100vh;
1003
+ min-height: 600px;
1004
+ max-height: 900px;
1005
+ overflow: hidden;
1006
+ background: var(--nt-black);
1007
+ }
1008
+ .nt-hero__slide {
1009
+ position: absolute;
1010
+ inset: 0;
1011
+ opacity: 0;
1012
+ transition: opacity 0.8s ease;
1013
+ }
1014
+ .nt-hero__slide.is-active {
1015
+ opacity: 1;
1016
+ }
1017
+ .nt-hero__slide img {
1018
+ width: 100%;
1019
+ height: 100%;
1020
+ object-fit: cover;
1021
+ }
1022
+ .nt-hero__overlay {
1023
+ position: absolute;
1024
+ inset: 0;
1025
+ background: linear-gradient(
1026
+ to top,
1027
+ rgba(0, 0, 0, 0.8) 0%,
1028
+ rgba(0, 0, 0, 0.3) 45%,
1029
+ rgba(0, 0, 0, 0.1) 100%
1030
+ );
1031
+ }
1032
+ .nt-hero__content {
1033
+ position: absolute;
1034
+ inset: 0;
1035
+ z-index: 10;
1036
+ display: flex;
1037
+ flex-direction: column;
1038
+ align-items: center;
1039
+ justify-content: flex-end;
1040
+ text-align: center;
1041
+ padding-bottom: 4rem;
1042
+ color: var(--nt-white);
1043
+ }
1044
+ @media (min-width: 768px) {
1045
+ .nt-hero__content {
1046
+ padding-bottom: 6rem;
1047
+ }
1048
+ }
1049
+ .nt-hero__title {
1050
+ font-family: var(--nt-font-display);
1051
+ font-weight: 900;
1052
+ font-size: clamp(2.25rem, 7vw, 4.5rem);
1053
+ text-transform: uppercase;
1054
+ letter-spacing: -0.02em;
1055
+ line-height: 0.95;
1056
+ margin: 0 0 0.75rem;
1057
+ max-width: 18ch;
1058
+ }
1059
+ .nt-hero__sub {
1060
+ font-size: 0.875rem;
1061
+ text-transform: uppercase;
1062
+ letter-spacing: 0.2em;
1063
+ color: rgba(255, 255, 255, 0.7);
1064
+ margin-bottom: 2rem;
1065
+ }
1066
+ .nt-hero__cta {
1067
+ display: inline-flex;
1068
+ padding: 0.875rem 2.5rem;
1069
+ border: 2px solid var(--nt-white);
1070
+ border-radius: 999px;
1071
+ color: var(--nt-white);
1072
+ font-size: 0.875rem;
1073
+ font-weight: 600;
1074
+ text-transform: uppercase;
1075
+ letter-spacing: 0.08em;
1076
+ transition: all 0.3s ease;
1077
+ }
1078
+ .nt-hero__cta:hover {
1079
+ background: var(--nt-white);
1080
+ color: var(--nt-black);
1081
+ }
1082
+ .nt-hero__dots {
1083
+ display: flex;
1084
+ gap: 0.5rem;
1085
+ margin-top: 2.5rem;
1086
+ }
1087
+ .nt-hero__dot {
1088
+ width: 0.625rem;
1089
+ height: 0.625rem;
1090
+ border-radius: 999px;
1091
+ border: none;
1092
+ background: rgba(255, 255, 255, 0.4);
1093
+ cursor: pointer;
1094
+ transition: all 0.3s ease;
1095
+ }
1096
+ .nt-hero__dot.is-active {
1097
+ background: var(--nt-white);
1098
+ transform: scale(1.1);
1099
+ }
1100
+ .nt-hero__arrow {
1101
+ position: absolute;
1102
+ top: 50%;
1103
+ transform: translateY(-50%);
1104
+ z-index: 20;
1105
+ width: 3rem;
1106
+ height: 3rem;
1107
+ display: inline-flex;
1108
+ align-items: center;
1109
+ justify-content: center;
1110
+ background: none;
1111
+ border: none;
1112
+ color: rgba(255, 255, 255, 0.6);
1113
+ cursor: pointer;
1114
+ transition: color 0.2s ease;
1115
+ }
1116
+ .nt-hero__arrow:hover {
1117
+ color: var(--nt-white);
1118
+ }
1119
+ .nt-hero__arrow--prev {
1120
+ inset-inline-start: 1rem;
1121
+ }
1122
+ .nt-hero__arrow--next {
1123
+ inset-inline-end: 1rem;
1124
+ }
1125
+
1126
+ /* ===== GRID / SHOP RAILS ===== */
1127
+ .nt-grid {
1128
+ display: grid;
1129
+ grid-template-columns: repeat(2, 1fr);
1130
+ gap: 1rem;
1131
+ }
1132
+ @media (min-width: 768px) {
1133
+ .nt-grid {
1134
+ grid-template-columns: repeat(var(--cols, 4), 1fr);
1135
+ gap: 1.25rem;
1136
+ }
1137
+ }
1138
+ .nt-rail {
1139
+ display: flex;
1140
+ gap: 1rem;
1141
+ overflow-x: auto;
1142
+ padding-bottom: 1rem;
1143
+ scroll-snap-type: x mandatory;
1144
+ scrollbar-width: none;
1145
+ }
1146
+ .nt-rail::-webkit-scrollbar {
1147
+ display: none;
1148
+ }
1149
+ .nt-rail > * {
1150
+ /* Fixed track width — without this a large source image stretches the card
1151
+ to the image's intrinsic size (huge), stranding the name/price below. */
1152
+ flex: 0 0 220px;
1153
+ width: 220px;
1154
+ scroll-snap-align: start;
1155
+ }
1156
+ @media (min-width: 768px) {
1157
+ .nt-rail > * {
1158
+ flex-basis: 240px;
1159
+ width: 240px;
1160
+ }
1161
+ }
1162
+
1163
+ .nt-shop__head {
1164
+ display: flex;
1165
+ flex-direction: column;
1166
+ gap: 1rem;
1167
+ margin-bottom: 2.5rem;
1168
+ }
1169
+ @media (min-width: 768px) {
1170
+ .nt-shop__head {
1171
+ flex-direction: row;
1172
+ align-items: center;
1173
+ justify-content: space-between;
1174
+ }
1175
+ }
1176
+ .nt-tabs {
1177
+ display: flex;
1178
+ gap: 0.5rem;
1179
+ overflow-x: auto;
1180
+ scrollbar-width: none;
1181
+ }
1182
+ .nt-tabs::-webkit-scrollbar {
1183
+ display: none;
1184
+ }
1185
+
1186
+ /* ===== CATEGORY CARDS ===== */
1187
+ .nt-catgrid {
1188
+ display: grid;
1189
+ grid-template-columns: repeat(2, 1fr);
1190
+ gap: 1rem;
1191
+ }
1192
+ @media (min-width: 640px) {
1193
+ .nt-catgrid {
1194
+ grid-template-columns: repeat(3, 1fr);
1195
+ }
1196
+ }
1197
+ @media (min-width: 1024px) {
1198
+ .nt-catgrid {
1199
+ grid-template-columns: repeat(var(--cols, 5), 1fr);
1200
+ }
1201
+ }
1202
+ .nt-cat__media {
1203
+ aspect-ratio: 1 / 1;
1204
+ background: var(--nt-black);
1205
+ border-radius: var(--nt-radius);
1206
+ overflow: hidden;
1207
+ display: flex;
1208
+ align-items: center;
1209
+ justify-content: center;
1210
+ }
1211
+ .nt-cat__media img {
1212
+ width: 100%;
1213
+ height: 100%;
1214
+ object-fit: cover;
1215
+ transition: transform 0.5s ease;
1216
+ }
1217
+ .nt-cat:hover .nt-cat__media img {
1218
+ transform: scale(1.08);
1219
+ }
1220
+ .nt-cat__placeholder {
1221
+ color: rgba(255, 255, 255, 0.2);
1222
+ font-size: 2.5rem;
1223
+ font-weight: 900;
1224
+ text-transform: uppercase;
1225
+ }
1226
+ .nt-cat__name {
1227
+ text-align: center;
1228
+ font-size: 0.75rem;
1229
+ font-weight: 700;
1230
+ letter-spacing: 0.15em;
1231
+ text-transform: uppercase;
1232
+ margin-top: 0.75rem;
1233
+ }
1234
+
1235
+ /* ===== PROMO BANNER ===== */
1236
+ .nt-promo {
1237
+ position: relative;
1238
+ border-radius: 12px;
1239
+ overflow: hidden;
1240
+ background: var(--nt-black);
1241
+ color: var(--nt-white);
1242
+ display: flex;
1243
+ flex-direction: column;
1244
+ align-items: center;
1245
+ gap: 1.5rem;
1246
+ padding: 2rem;
1247
+ }
1248
+ @media (min-width: 768px) {
1249
+ .nt-promo {
1250
+ flex-direction: row;
1251
+ padding: 3rem;
1252
+ }
1253
+ }
1254
+ .nt-promo__img {
1255
+ width: 12rem;
1256
+ height: 12rem;
1257
+ flex-shrink: 0;
1258
+ border-radius: 12px;
1259
+ overflow: hidden;
1260
+ background: rgba(255, 255, 255, 0.1);
1261
+ }
1262
+ .nt-promo__img img {
1263
+ width: 100%;
1264
+ height: 100%;
1265
+ object-fit: cover;
1266
+ }
1267
+ .nt-promo__body {
1268
+ flex: 1;
1269
+ text-align: center;
1270
+ }
1271
+ @media (min-width: 768px) {
1272
+ .nt-promo__body {
1273
+ text-align: start;
1274
+ }
1275
+ }
1276
+ .nt-promo__badge {
1277
+ display: inline-block;
1278
+ padding: 0.25rem 0.75rem;
1279
+ border-radius: 999px;
1280
+ background: rgba(255, 255, 255, 0.1);
1281
+ color: rgba(255, 255, 255, 0.8);
1282
+ font-size: 0.75rem;
1283
+ font-weight: 700;
1284
+ text-transform: uppercase;
1285
+ letter-spacing: 0.06em;
1286
+ margin-bottom: 0.75rem;
1287
+ }
1288
+ .nt-promo__title {
1289
+ font-size: clamp(1.5rem, 4vw, 1.875rem);
1290
+ font-weight: 900;
1291
+ margin: 0 0 0.5rem;
1292
+ }
1293
+ .nt-promo__sub {
1294
+ color: rgba(255, 255, 255, 0.5);
1295
+ font-size: 0.875rem;
1296
+ margin-bottom: 1.25rem;
1297
+ }
1298
+
1299
+ /* ===== TESTIMONIALS ===== */
1300
+ .nt-tgrid {
1301
+ display: grid;
1302
+ grid-template-columns: 1fr;
1303
+ gap: 1.25rem;
1304
+ }
1305
+ @media (min-width: 768px) {
1306
+ .nt-tgrid {
1307
+ grid-template-columns: repeat(3, 1fr);
1308
+ }
1309
+ }
1310
+ .nt-tcard {
1311
+ background: var(--nt-bg);
1312
+ border: 1px solid var(--nt-border);
1313
+ border-radius: 12px;
1314
+ padding: 1.5rem;
1315
+ }
1316
+ .nt-stars {
1317
+ display: flex;
1318
+ gap: 0.125rem;
1319
+ margin-bottom: 1rem;
1320
+ }
1321
+ .nt-star {
1322
+ color: var(--nt-border);
1323
+ }
1324
+ .nt-star.is-filled {
1325
+ color: var(--nt-black);
1326
+ }
1327
+ .nt-tquote {
1328
+ font-size: 0.875rem;
1329
+ line-height: 1.7;
1330
+ margin-bottom: 1.25rem;
1331
+ }
1332
+ .nt-tauthor {
1333
+ display: flex;
1334
+ align-items: center;
1335
+ gap: 0.75rem;
1336
+ }
1337
+ .nt-tavatar {
1338
+ width: 2.25rem;
1339
+ height: 2.25rem;
1340
+ border-radius: 999px;
1341
+ background: var(--nt-black);
1342
+ color: var(--nt-white);
1343
+ display: inline-flex;
1344
+ align-items: center;
1345
+ justify-content: center;
1346
+ font-size: 0.75rem;
1347
+ font-weight: 700;
1348
+ }
1349
+ .nt-tname {
1350
+ font-size: 0.75rem;
1351
+ font-weight: 700;
1352
+ }
1353
+ .nt-tcity {
1354
+ font-size: 0.625rem;
1355
+ color: var(--nt-muted);
1356
+ }
1357
+
1358
+ /* ===== NEWSLETTER ===== */
1359
+ .nt-news {
1360
+ background: var(--nt-black);
1361
+ color: var(--nt-white);
1362
+ padding-block: 5rem;
1363
+ }
1364
+ .nt-news__inner {
1365
+ max-width: 36rem;
1366
+ margin-inline: auto;
1367
+ text-align: center;
1368
+ }
1369
+ .nt-news__title {
1370
+ font-weight: 900;
1371
+ font-size: clamp(1.5rem, 4vw, 2.25rem);
1372
+ text-transform: uppercase;
1373
+ letter-spacing: -0.01em;
1374
+ margin: 0 0 0.75rem;
1375
+ }
1376
+ .nt-news__sub {
1377
+ color: rgba(255, 255, 255, 0.4);
1378
+ font-size: 0.875rem;
1379
+ margin-bottom: 2rem;
1380
+ }
1381
+ .nt-news__form {
1382
+ display: flex;
1383
+ gap: 0.75rem;
1384
+ max-width: 28rem;
1385
+ margin-inline: auto;
1386
+ }
1387
+ .nt-news__input {
1388
+ flex: 1;
1389
+ height: 3rem;
1390
+ padding-inline: 1.25rem;
1391
+ font-size: 0.875rem;
1392
+ background: rgba(255, 255, 255, 0.1);
1393
+ border: 1px solid rgba(255, 255, 255, 0.2);
1394
+ border-radius: 999px;
1395
+ color: var(--nt-white);
1396
+ }
1397
+ .nt-news__input::placeholder {
1398
+ color: rgba(255, 255, 255, 0.3);
1399
+ }
1400
+ .nt-news__input:focus {
1401
+ outline: none;
1402
+ border-color: rgba(255, 255, 255, 0.5);
1403
+ }
1404
+
1405
+ /* ===== PDP ===== */
1406
+ .nt-pdp {
1407
+ display: grid;
1408
+ grid-template-columns: 1fr;
1409
+ gap: 2rem;
1410
+ }
1411
+ @media (min-width: 768px) {
1412
+ .nt-pdp {
1413
+ /* Cap the gallery column so the main image isn't oversized and the buy
1414
+ box doesn't trail a big empty gap. */
1415
+ grid-template-columns: minmax(0, 460px) 1fr;
1416
+ gap: 3rem;
1417
+ align-items: start;
1418
+ }
1419
+ /* Keep the gallery in view while scrolling the (often taller) buy box. */
1420
+ .nt-pdp__gallery {
1421
+ position: sticky;
1422
+ top: 6rem;
1423
+ }
1424
+ }
1425
+ .nt-pdp__main-img {
1426
+ aspect-ratio: 1 / 1;
1427
+ max-height: 540px;
1428
+ border-radius: var(--nt-radius);
1429
+ overflow: hidden;
1430
+ background: var(--nt-secondary);
1431
+ margin-bottom: 0.75rem;
1432
+ }
1433
+ .nt-pdp__main-img img {
1434
+ width: 100%;
1435
+ height: 100%;
1436
+ object-fit: cover;
1437
+ }
1438
+ .nt-pdp__thumbs {
1439
+ display: flex;
1440
+ gap: 0.5rem;
1441
+ overflow-x: auto;
1442
+ scrollbar-width: none;
1443
+ }
1444
+ .nt-pdp__thumbs::-webkit-scrollbar {
1445
+ display: none;
1446
+ }
1447
+ .nt-pdp__thumb {
1448
+ width: 4rem;
1449
+ height: 4rem;
1450
+ flex-shrink: 0;
1451
+ border-radius: 6px;
1452
+ overflow: hidden;
1453
+ border: 2px solid transparent;
1454
+ cursor: pointer;
1455
+ padding: 0;
1456
+ background: var(--nt-secondary);
1457
+ }
1458
+ .nt-pdp__thumb img {
1459
+ width: 100%;
1460
+ height: 100%;
1461
+ object-fit: cover;
1462
+ }
1463
+ .nt-pdp__thumb.is-active {
1464
+ border-color: var(--nt-black);
1465
+ }
1466
+ .nt-pdp__title {
1467
+ font-size: clamp(1.25rem, 3vw, 1.75rem);
1468
+ font-weight: 900;
1469
+ text-transform: uppercase;
1470
+ letter-spacing: -0.01em;
1471
+ line-height: 1.1;
1472
+ margin: 0 0 0.75rem;
1473
+ }
1474
+ .nt-pdp__price {
1475
+ font-size: 1.125rem;
1476
+ font-weight: 700;
1477
+ display: flex;
1478
+ align-items: baseline;
1479
+ gap: 0.625rem;
1480
+ margin-bottom: 1.5rem;
1481
+ }
1482
+ .nt-pdp__desc {
1483
+ font-size: 0.875rem;
1484
+ color: var(--nt-muted);
1485
+ line-height: 1.7;
1486
+ margin-bottom: 1.5rem;
1487
+ }
1488
+ .nt-pdp__opt-label {
1489
+ font-size: 0.875rem;
1490
+ font-weight: 700;
1491
+ display: block;
1492
+ margin-bottom: 0.75rem;
1493
+ }
1494
+ .nt-pdp__opts {
1495
+ display: flex;
1496
+ flex-wrap: wrap;
1497
+ gap: 0.5rem;
1498
+ margin-bottom: 1.5rem;
1499
+ }
1500
+ .nt-pdp__buy {
1501
+ display: flex;
1502
+ gap: 0.75rem;
1503
+ align-items: stretch;
1504
+ }
1505
+ /* Constrain the buy column so the CTA isn't an over-wide bar and the empty
1506
+ space under it is filled by the trust strip. */
1507
+ .nt-pdp__info {
1508
+ max-width: 34rem;
1509
+ }
1510
+ .nt-pdp__pricerow {
1511
+ display: flex;
1512
+ align-items: baseline;
1513
+ justify-content: space-between;
1514
+ gap: 1rem;
1515
+ flex-wrap: wrap;
1516
+ }
1517
+ .nt-pdp__price {
1518
+ flex-direction: row-reverse;
1519
+ gap: 0.625rem;
1520
+ }
1521
+ .nt-pdp__stock {
1522
+ display: inline-flex;
1523
+ align-items: center;
1524
+ gap: 0.4rem;
1525
+ font-size: 0.6875rem;
1526
+ font-weight: 700;
1527
+ letter-spacing: 0.08em;
1528
+ text-transform: uppercase;
1529
+ color: var(--nt-muted);
1530
+ }
1531
+ .nt-pdp__dot {
1532
+ width: 0.5rem;
1533
+ height: 0.5rem;
1534
+ border-radius: 999px;
1535
+ background: var(--nt-gray);
1536
+ }
1537
+ .nt-pdp__stock.is-in .nt-pdp__dot {
1538
+ background: #1faa59;
1539
+ }
1540
+ .nt-pdp__stock.is-out {
1541
+ color: var(--nt-gray);
1542
+ }
1543
+ .nt-pdp__divider {
1544
+ height: 1px;
1545
+ background: var(--nt-border);
1546
+ margin-block: 1.5rem;
1547
+ }
1548
+ .nt-pdp__optgroup {
1549
+ margin-bottom: 1.5rem;
1550
+ }
1551
+ .nt-pdp__opt-head {
1552
+ display: flex;
1553
+ align-items: center;
1554
+ justify-content: space-between;
1555
+ gap: 1rem;
1556
+ margin-bottom: 0.75rem;
1557
+ }
1558
+ .nt-pdp__opt-label {
1559
+ margin-bottom: 0 !important;
1560
+ }
1561
+ .nt-pdp__sizelink {
1562
+ display: inline-flex;
1563
+ align-items: center;
1564
+ gap: 0.4rem;
1565
+ background: none;
1566
+ border: none;
1567
+ padding: 0;
1568
+ cursor: pointer;
1569
+ color: var(--nt-fg);
1570
+ font-size: 0.6875rem;
1571
+ font-weight: 700;
1572
+ letter-spacing: 0.06em;
1573
+ text-transform: uppercase;
1574
+ }
1575
+ .nt-pdp__sizelink:hover {
1576
+ color: var(--nt-accent);
1577
+ }
1578
+ .nt-pdp__sizelink--standalone {
1579
+ margin-bottom: 1.25rem;
1580
+ }
1581
+ /* Square size boxes (premium, structured) */
1582
+ .nt-pdp__sizes {
1583
+ display: flex;
1584
+ flex-wrap: wrap;
1585
+ gap: 0.5rem;
1586
+ }
1587
+ .nt-sizebox {
1588
+ min-width: 3rem;
1589
+ height: 3rem;
1590
+ padding-inline: 0.875rem;
1591
+ display: inline-flex;
1592
+ align-items: center;
1593
+ justify-content: center;
1594
+ border: 1px solid var(--nt-border);
1595
+ border-radius: var(--nt-radius);
1596
+ background: var(--nt-card);
1597
+ color: var(--nt-fg);
1598
+ font-size: 0.8125rem;
1599
+ font-weight: 600;
1600
+ cursor: pointer;
1601
+ transition: all 0.18s ease;
1602
+ }
1603
+ .nt-sizebox:hover {
1604
+ border-color: var(--nt-fg);
1605
+ }
1606
+ .nt-sizebox.is-active {
1607
+ background: var(--nt-black);
1608
+ color: var(--nt-white);
1609
+ border-color: var(--nt-black);
1610
+ }
1611
+ .nt-sizebox:disabled {
1612
+ opacity: 0.4;
1613
+ cursor: not-allowed;
1614
+ text-decoration: line-through;
1615
+ }
1616
+ .nt-pdp__hint {
1617
+ margin-top: 0.5rem;
1618
+ font-size: 0.75rem;
1619
+ letter-spacing: 0.04em;
1620
+ color: #c0392b;
1621
+ }
1622
+ .nt-pdp__qtyblock {
1623
+ display: flex;
1624
+ align-items: center;
1625
+ justify-content: space-between;
1626
+ gap: 1rem;
1627
+ margin-bottom: 0.25rem;
1628
+ }
1629
+ .nt-pdp__qty {
1630
+ height: 2.75rem;
1631
+ }
1632
+ /* Share row */
1633
+ .nt-pdp__share {
1634
+ display: flex;
1635
+ align-items: center;
1636
+ gap: 0.5rem;
1637
+ margin-top: 1.5rem;
1638
+ }
1639
+ .nt-pdp__sharebtn {
1640
+ width: 2.25rem;
1641
+ height: 2.25rem;
1642
+ display: inline-flex;
1643
+ align-items: center;
1644
+ justify-content: center;
1645
+ border: 1px solid var(--nt-border);
1646
+ border-radius: 999px;
1647
+ background: var(--nt-card);
1648
+ color: var(--nt-fg);
1649
+ cursor: pointer;
1650
+ transition: all 0.18s ease;
1651
+ }
1652
+ .nt-pdp__sharebtn:hover {
1653
+ border-color: var(--nt-fg);
1654
+ transform: translateY(-1px);
1655
+ }
1656
+ /* Trust row — horizontal 3-column */
1657
+ .nt-pdp__trust {
1658
+ list-style: none;
1659
+ margin: 1.75rem 0 0;
1660
+ padding: 1.5rem 0 0;
1661
+ border-top: 1px solid var(--nt-border);
1662
+ display: grid;
1663
+ grid-template-columns: repeat(3, 1fr);
1664
+ gap: 1rem;
1665
+ }
1666
+ .nt-pdp__trust li {
1667
+ display: flex;
1668
+ flex-direction: column;
1669
+ align-items: center;
1670
+ text-align: center;
1671
+ gap: 0.375rem;
1672
+ }
1673
+ .nt-pdp__trust svg {
1674
+ color: var(--nt-fg);
1675
+ }
1676
+ .nt-pdp__trust-main {
1677
+ font-size: 0.6875rem;
1678
+ font-weight: 700;
1679
+ letter-spacing: 0.06em;
1680
+ text-transform: uppercase;
1681
+ color: var(--nt-fg);
1682
+ }
1683
+ .nt-pdp__trust-sub {
1684
+ font-size: 0.6875rem;
1685
+ color: var(--nt-muted);
1686
+ }
1687
+ /* Embedded FBT inside the buy column */
1688
+ .nt-pdp__fbt {
1689
+ margin-top: 2rem;
1690
+ }
1691
+ .nt-pdp__fbt .nt-fbt-card {
1692
+ max-width: none;
1693
+ }
1694
+ .nt-breadcrumb {
1695
+ display: flex;
1696
+ align-items: center;
1697
+ gap: 0.5rem;
1698
+ margin-bottom: 2rem;
1699
+ }
1700
+
1701
+ /* ===== ORDER CONFIRMATION ===== */
1702
+ .nt-oc {
1703
+ max-width: 32rem;
1704
+ margin-inline: auto;
1705
+ text-align: center;
1706
+ }
1707
+ .nt-oc__icon {
1708
+ width: 5rem;
1709
+ height: 5rem;
1710
+ border-radius: 999px;
1711
+ background: var(--nt-black);
1712
+ color: var(--nt-white);
1713
+ display: inline-flex;
1714
+ align-items: center;
1715
+ justify-content: center;
1716
+ margin-bottom: 1.5rem;
1717
+ }
1718
+ .nt-oc__card {
1719
+ border: 1px solid var(--nt-border);
1720
+ border-radius: var(--nt-radius);
1721
+ padding: 1.25rem;
1722
+ margin-block: 1.5rem;
1723
+ text-align: start;
1724
+ }
1725
+ .nt-oc__row {
1726
+ display: flex;
1727
+ justify-content: space-between;
1728
+ padding-block: 0.5rem;
1729
+ font-size: 0.875rem;
1730
+ }
1731
+ .nt-oc__row + .nt-oc__row {
1732
+ border-top: 1px solid var(--nt-border);
1733
+ }
1734
+ .nt-oc__items {
1735
+ list-style: none;
1736
+ margin: 0 0 1.5rem;
1737
+ padding: 0;
1738
+ text-align: start;
1739
+ }
1740
+ .nt-oc__item {
1741
+ display: flex;
1742
+ justify-content: space-between;
1743
+ font-size: 0.875rem;
1744
+ padding-block: 0.5rem;
1745
+ border-bottom: 1px solid var(--nt-border);
1746
+ }
1747
+
1748
+ /* ===== TOOLBAR (products page) ===== */
1749
+ .nt-toolbar {
1750
+ display: flex;
1751
+ align-items: center;
1752
+ justify-content: space-between;
1753
+ gap: 1rem;
1754
+ margin-bottom: 1.5rem;
1755
+ }
1756
+ .nt-select {
1757
+ font-size: 0.8125rem;
1758
+ padding: 0.5rem 0.75rem;
1759
+ background: var(--nt-bg);
1760
+ border: 1px solid var(--nt-border);
1761
+ border-radius: var(--nt-radius);
1762
+ cursor: pointer;
1763
+ }
1764
+ .nt-catbar {
1765
+ display: flex;
1766
+ gap: 0.5rem;
1767
+ overflow-x: auto;
1768
+ padding-bottom: 1rem;
1769
+ margin-bottom: 1.5rem;
1770
+ scrollbar-width: none;
1771
+ }
1772
+ .nt-catbar::-webkit-scrollbar {
1773
+ display: none;
1774
+ }
1775
+
1776
+ /* ===== IMAGE WITH TEXT ===== */
1777
+ .nt-iwt {
1778
+ display: grid;
1779
+ grid-template-columns: 1fr;
1780
+ gap: 2rem;
1781
+ align-items: center;
1782
+ }
1783
+ @media (min-width: 768px) {
1784
+ .nt-iwt--start,
1785
+ .nt-iwt--end {
1786
+ grid-template-columns: 1fr 1fr;
1787
+ gap: 3.5rem;
1788
+ }
1789
+ .nt-iwt--end .nt-iwt__media {
1790
+ order: 2;
1791
+ }
1792
+ }
1793
+ .nt-iwt__media {
1794
+ border-radius: var(--nt-radius);
1795
+ overflow: hidden;
1796
+ background: var(--nt-secondary);
1797
+ aspect-ratio: 4 / 3;
1798
+ }
1799
+ .nt-iwt__media img {
1800
+ width: 100%;
1801
+ height: 100%;
1802
+ object-fit: cover;
1803
+ }
1804
+ .nt-iwt__sub {
1805
+ color: var(--nt-muted);
1806
+ font-size: 0.95rem;
1807
+ line-height: 1.7;
1808
+ margin-block: 1rem 1.5rem;
1809
+ max-width: 46ch;
1810
+ }
1811
+ .nt-iwt--bg {
1812
+ position: relative;
1813
+ min-height: 60vh;
1814
+ display: flex;
1815
+ align-items: center;
1816
+ overflow: hidden;
1817
+ background: var(--nt-black);
1818
+ color: var(--nt-white);
1819
+ }
1820
+ .nt-iwt__bgimg {
1821
+ position: absolute;
1822
+ inset: 0;
1823
+ width: 100%;
1824
+ height: 100%;
1825
+ object-fit: cover;
1826
+ }
1827
+ .nt-iwt__overlay {
1828
+ position: absolute;
1829
+ inset: 0;
1830
+ background: linear-gradient(
1831
+ to top,
1832
+ rgba(0, 0, 0, 0.75),
1833
+ rgba(0, 0, 0, 0.35)
1834
+ );
1835
+ }
1836
+ .nt-iwt__bgcontent {
1837
+ position: relative;
1838
+ z-index: 2;
1839
+ text-align: center;
1840
+ width: 100%;
1841
+ }
1842
+ .nt-iwt--bg .nt-iwt__copy .nt-heading,
1843
+ .nt-iwt--bg .nt-iwt__copy .nt-label {
1844
+ color: var(--nt-white);
1845
+ }
1846
+ .nt-iwt--bg .nt-iwt__sub {
1847
+ color: rgba(255, 255, 255, 0.75);
1848
+ margin-inline: auto;
1849
+ }
1850
+
1851
+ /* ===== RICH TEXT / PROSE ===== */
1852
+ .nt-prose {
1853
+ font-size: 1rem;
1854
+ line-height: 1.8;
1855
+ color: var(--nt-charcoal);
1856
+ }
1857
+ .nt-prose h2 {
1858
+ font-weight: 800;
1859
+ text-transform: uppercase;
1860
+ letter-spacing: -0.01em;
1861
+ margin: 2rem 0 0.75rem;
1862
+ }
1863
+ .nt-prose h3 {
1864
+ font-weight: 700;
1865
+ margin: 1.5rem 0 0.5rem;
1866
+ }
1867
+ .nt-prose p {
1868
+ margin: 0 0 1rem;
1869
+ }
1870
+ .nt-prose a {
1871
+ color: var(--nt-accent);
1872
+ text-decoration: underline;
1873
+ text-underline-offset: 2px;
1874
+ }
1875
+ .nt-prose ul,
1876
+ .nt-prose ol {
1877
+ margin: 0 0 1rem;
1878
+ padding-inline-start: 1.5rem;
1879
+ }
1880
+ .nt-prose li {
1881
+ margin-bottom: 0.375rem;
1882
+ }
1883
+
1884
+ /* ===== ABOUT ===== */
1885
+ .nt-about {
1886
+ display: grid;
1887
+ grid-template-columns: 1fr;
1888
+ gap: 2.5rem;
1889
+ align-items: center;
1890
+ }
1891
+ @media (min-width: 768px) {
1892
+ .nt-about {
1893
+ grid-template-columns: 1.1fr 0.9fr;
1894
+ }
1895
+ }
1896
+ .nt-about__body {
1897
+ color: var(--nt-muted);
1898
+ font-size: 1rem;
1899
+ line-height: 1.8;
1900
+ margin-block: 1rem 1.5rem;
1901
+ }
1902
+ .nt-about__stats {
1903
+ display: flex;
1904
+ flex-wrap: wrap;
1905
+ gap: 2.5rem;
1906
+ }
1907
+ .nt-about__stat {
1908
+ display: flex;
1909
+ flex-direction: column;
1910
+ }
1911
+ .nt-about__statvalue {
1912
+ font-size: 1.75rem;
1913
+ font-weight: 900;
1914
+ letter-spacing: -0.02em;
1915
+ }
1916
+ .nt-about__statlabel {
1917
+ font-size: 0.75rem;
1918
+ color: var(--nt-muted);
1919
+ text-transform: uppercase;
1920
+ letter-spacing: 0.08em;
1921
+ }
1922
+ .nt-about__media {
1923
+ border-radius: var(--nt-radius);
1924
+ overflow: hidden;
1925
+ background: var(--nt-secondary);
1926
+ aspect-ratio: 3 / 4;
1927
+ }
1928
+ .nt-about__media img {
1929
+ width: 100%;
1930
+ height: 100%;
1931
+ object-fit: cover;
1932
+ }
1933
+
1934
+ /* ===== FORMS (auth / account) ===== */
1935
+ .nt-form {
1936
+ display: flex;
1937
+ flex-direction: column;
1938
+ gap: 0.875rem;
1939
+ max-width: 26rem;
1940
+ }
1941
+ .nt-form__row {
1942
+ display: flex;
1943
+ gap: 0.75rem;
1944
+ }
1945
+ .nt-form__row > * {
1946
+ flex: 1;
1947
+ }
1948
+
1949
+ /* ===== AUTH ===== */
1950
+ .nt-auth {
1951
+ max-width: 26rem;
1952
+ }
1953
+ .nt-auth__tabs {
1954
+ display: flex;
1955
+ gap: 0.5rem;
1956
+ margin-bottom: 1.5rem;
1957
+ }
1958
+
1959
+ /* ===== ACCOUNT DASHBOARD ===== */
1960
+ .nt-account {
1961
+ display: grid;
1962
+ grid-template-columns: 1fr;
1963
+ gap: 2rem;
1964
+ }
1965
+ @media (min-width: 768px) {
1966
+ .nt-account {
1967
+ grid-template-columns: 16rem 1fr;
1968
+ }
1969
+ }
1970
+ .nt-account__side {
1971
+ border: 1px solid var(--nt-border);
1972
+ border-radius: var(--nt-radius);
1973
+ padding: 1.5rem;
1974
+ text-align: center;
1975
+ background: var(--nt-card);
1976
+ height: fit-content;
1977
+ }
1978
+ .nt-account__avatar {
1979
+ width: 3.5rem;
1980
+ height: 3.5rem;
1981
+ border-radius: 999px;
1982
+ background: var(--nt-black);
1983
+ color: var(--nt-white);
1984
+ display: inline-flex;
1985
+ align-items: center;
1986
+ justify-content: center;
1987
+ font-weight: 800;
1988
+ font-size: 1.25rem;
1989
+ text-transform: uppercase;
1990
+ margin-bottom: 0.75rem;
1991
+ }
1992
+ .nt-account__name {
1993
+ font-weight: 700;
1994
+ font-size: 0.95rem;
1995
+ }
1996
+ .nt-account__email {
1997
+ font-size: 0.75rem;
1998
+ color: var(--nt-muted);
1999
+ margin-bottom: 1.25rem;
2000
+ }
2001
+ .nt-account__nav {
2002
+ display: flex;
2003
+ flex-direction: column;
2004
+ gap: 0.25rem;
2005
+ }
2006
+ .nt-account__navitem {
2007
+ background: none;
2008
+ border: none;
2009
+ cursor: pointer;
2010
+ text-align: start;
2011
+ padding: 0.625rem 0.875rem;
2012
+ border-radius: var(--nt-radius);
2013
+ font-size: 0.875rem;
2014
+ font-weight: 600;
2015
+ color: var(--nt-fg);
2016
+ transition: background 0.2s ease;
2017
+ }
2018
+ .nt-account__navitem:hover {
2019
+ background: var(--nt-secondary);
2020
+ }
2021
+ .nt-account__navitem.is-active {
2022
+ background: var(--nt-black);
2023
+ color: var(--nt-white);
2024
+ }
2025
+ .nt-account__main {
2026
+ min-width: 0;
2027
+ }
2028
+
2029
+ /* ===== ORDERS ===== */
2030
+ .nt-orders {
2031
+ display: flex;
2032
+ flex-direction: column;
2033
+ gap: 0.75rem;
2034
+ }
2035
+ .nt-orders__row {
2036
+ display: flex;
2037
+ align-items: center;
2038
+ justify-content: space-between;
2039
+ gap: 1rem;
2040
+ border: 1px solid var(--nt-border);
2041
+ border-radius: var(--nt-radius);
2042
+ padding: 1rem 1.25rem;
2043
+ background: var(--nt-card);
2044
+ transition: border-color 0.2s ease;
2045
+ }
2046
+ .nt-orders__row:hover {
2047
+ border-color: var(--nt-fg);
2048
+ }
2049
+ .nt-orders__num {
2050
+ font-weight: 800;
2051
+ font-family: var(--nt-font-mono);
2052
+ }
2053
+ .nt-orders__meta {
2054
+ font-size: 0.75rem;
2055
+ color: var(--nt-muted);
2056
+ margin-top: 0.125rem;
2057
+ }
2058
+ .nt-orders__total {
2059
+ font-weight: 700;
2060
+ }
2061
+
2062
+ /* ===== ADDRESSES ===== */
2063
+ .nt-addresses {
2064
+ display: flex;
2065
+ flex-direction: column;
2066
+ gap: 0.75rem;
2067
+ }
2068
+ .nt-address {
2069
+ display: flex;
2070
+ align-items: flex-start;
2071
+ justify-content: space-between;
2072
+ gap: 1rem;
2073
+ border: 1px solid var(--nt-border);
2074
+ border-radius: var(--nt-radius);
2075
+ padding: 1rem 1.25rem;
2076
+ background: var(--nt-card);
2077
+ }
2078
+ .nt-address__name {
2079
+ font-weight: 700;
2080
+ font-size: 0.9rem;
2081
+ }
2082
+ .nt-address__line {
2083
+ font-size: 0.8125rem;
2084
+ color: var(--nt-muted);
2085
+ margin-top: 0.25rem;
2086
+ }
2087
+
2088
+ /* ===== INLINE EDITOR AFFORDANCE (customizer only) =====
2089
+ Gold dashed frame on hover, solid while editing. These classes are only
2090
+ applied inside the theme-editor iframe, so live shoppers never see them. */
2091
+ .nt-inline-edit--armed {
2092
+ cursor: text;
2093
+ outline: 1px dashed transparent;
2094
+ outline-offset: 4px;
2095
+ border-radius: 3px;
2096
+ transition: outline-color 0.15s ease, background 0.15s ease;
2097
+ }
2098
+ .nt-inline-edit--armed:hover {
2099
+ outline-color: #c8a24a;
2100
+ background: rgba(200, 162, 74, 0.08);
2101
+ }
2102
+ .nt-inline-edit--editing {
2103
+ outline: 2px solid #c8a24a !important;
2104
+ outline-offset: 4px;
2105
+ background: rgba(200, 162, 74, 0.12);
2106
+ }
2107
+
2108
+ /* ===========================================================================
2109
+ PREMIUM POLISH — restrained elevation, hover motion and refinement applied
2110
+ on top of the base components for a more high-end feel.
2111
+ =========================================================================== */
2112
+ .nt {
2113
+ --nt-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
2114
+ --nt-shadow-md: 0 10px 30px rgba(0, 0, 0, 0.08);
2115
+ --nt-shadow-lg: 0 20px 50px rgba(0, 0, 0, 0.12);
2116
+ text-rendering: optimizeLegibility;
2117
+ }
2118
+
2119
+ /* Buttons: gentle depth + lift on hover */
2120
+ .nt-btn,
2121
+ .nt-btn-light {
2122
+ box-shadow: var(--nt-shadow-sm);
2123
+ will-change: transform;
2124
+ }
2125
+ .nt-btn:hover,
2126
+ .nt-btn-light:hover {
2127
+ transform: translateY(-1px);
2128
+ box-shadow: var(--nt-shadow-md);
2129
+ }
2130
+ .nt-btn:active,
2131
+ .nt-btn-light:active,
2132
+ .nt-btn-outline:active {
2133
+ transform: translateY(0);
2134
+ }
2135
+
2136
+ /* Product cards: lift + soften the media on hover */
2137
+ .nt-card {
2138
+ transition: transform 0.3s ease;
2139
+ }
2140
+ .nt-card:hover {
2141
+ transform: translateY(-3px);
2142
+ }
2143
+ .nt-card__media {
2144
+ box-shadow: var(--nt-shadow-sm);
2145
+ transition: box-shadow 0.3s ease;
2146
+ }
2147
+ .nt-card:hover .nt-card__media {
2148
+ box-shadow: var(--nt-shadow-md);
2149
+ }
2150
+
2151
+ /* Category tiles + content cards share the same elevation language */
2152
+ .nt-cat__media,
2153
+ .nt-tcard,
2154
+ .nt-fbt-card,
2155
+ .nt-account__side,
2156
+ .nt-orders__row,
2157
+ .nt-address {
2158
+ box-shadow: var(--nt-shadow-sm);
2159
+ }
2160
+ .nt-cat:hover .nt-cat__media {
2161
+ box-shadow: var(--nt-shadow-md);
2162
+ }
2163
+
2164
+ /* Section headings: hairline accent under display headings for editorial polish */
2165
+ .nt-display-sm,
2166
+ .nt-heading {
2167
+ position: relative;
2168
+ }
2169
+
2170
+ /* Inputs + chips: smoother, more tactile */
2171
+ .nt-chip {
2172
+ transition: all 0.2s ease;
2173
+ }
2174
+ .nt-chip:hover {
2175
+ transform: translateY(-1px);
2176
+ }
2177
+ .nt-input--pill,
2178
+ .nt-news__input {
2179
+ box-shadow: var(--nt-shadow-sm);
2180
+ }
2181
+
2182
+ /* Accessible focus ring in the brand accent */
2183
+ .nt a:focus-visible,
2184
+ .nt button:focus-visible,
2185
+ .nt input:focus-visible,
2186
+ .nt select:focus-visible {
2187
+ outline: 2px solid var(--nt-accent);
2188
+ outline-offset: 2px;
2189
+ border-radius: 4px;
2190
+ }
2191
+
2192
+ /* Modal/drawer enter motion */
2193
+ .nt-modal__panel {
2194
+ animation: nt-pop 0.25s ease;
2195
+ }
2196
+ @keyframes nt-pop {
2197
+ from {
2198
+ opacity: 0;
2199
+ transform: translateY(8px) scale(0.99);
2200
+ }
2201
+ }
2202
+ @media (prefers-reduced-motion: reduce) {
2203
+ .nt-btn,
2204
+ .nt-btn-light,
2205
+ .nt-card,
2206
+ .nt-chip,
2207
+ .nt-modal__panel {
2208
+ transition: none;
2209
+ animation: none;
2210
+ transform: none;
2211
+ }
2212
+ }
2213
+
2214
+ /* ===== MISC ===== */
2215
+ .nt-page {
2216
+ min-height: 50vh;
2217
+ padding-block: 6rem;
2218
+ }
2219
+ .nt-placeholder {
2220
+ color: var(--nt-muted);
2221
+ text-align: center;
2222
+ }
2223
+ .nt-spacer-top {
2224
+ height: 6.5rem;
2225
+ }
2226
+
2227
+ /* ===== SIZE GUIDE ===== */
2228
+ .nt-sizeguide__trigger {
2229
+ display: inline-flex;
2230
+ align-items: center;
2231
+ gap: 0.5rem;
2232
+ background: transparent;
2233
+ border: 1px solid var(--nt-border);
2234
+ border-radius: 999px;
2235
+ padding: 0.5rem 1.25rem;
2236
+ font-size: 0.8125rem;
2237
+ font-weight: 600;
2238
+ cursor: pointer;
2239
+ color: var(--nt-fg);
2240
+ transition: all 0.2s ease;
2241
+ }
2242
+ .nt-sizeguide__trigger:hover {
2243
+ border-color: var(--nt-fg);
2244
+ }
2245
+ .nt-sizeguide__img {
2246
+ width: 100%;
2247
+ border-radius: var(--nt-radius);
2248
+ margin-bottom: 1rem;
2249
+ }
2250
+ .nt-sizetable {
2251
+ width: 100%;
2252
+ border-collapse: collapse;
2253
+ font-size: 0.8125rem;
2254
+ }
2255
+ .nt-sizetable th,
2256
+ .nt-sizetable td {
2257
+ border: 1px solid var(--nt-border);
2258
+ padding: 0.625rem 0.75rem;
2259
+ text-align: center;
2260
+ }
2261
+ .nt-sizetable thead th {
2262
+ background: var(--nt-black);
2263
+ color: var(--nt-white);
2264
+ font-weight: 700;
2265
+ text-transform: uppercase;
2266
+ letter-spacing: 0.04em;
2267
+ font-size: 0.6875rem;
2268
+ }
2269
+ .nt-sizetable tbody th {
2270
+ background: var(--nt-secondary);
2271
+ font-weight: 700;
2272
+ }
2273
+
2274
+ /* ===== MODAL (size guide) ===== */
2275
+ .nt-modal {
2276
+ position: fixed;
2277
+ inset: 0;
2278
+ z-index: 70;
2279
+ display: flex;
2280
+ align-items: center;
2281
+ justify-content: center;
2282
+ padding: 1rem;
2283
+ }
2284
+ .nt-modal__overlay {
2285
+ position: absolute;
2286
+ inset: 0;
2287
+ background: rgba(0, 0, 0, 0.55);
2288
+ }
2289
+ .nt-modal__panel {
2290
+ position: relative;
2291
+ background: var(--nt-white);
2292
+ color: var(--nt-fg);
2293
+ border-radius: 12px;
2294
+ width: 100%;
2295
+ max-width: 36rem;
2296
+ max-height: 85vh;
2297
+ overflow: hidden;
2298
+ display: flex;
2299
+ flex-direction: column;
2300
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
2301
+ }
2302
+ .nt-modal__head {
2303
+ display: flex;
2304
+ align-items: center;
2305
+ justify-content: space-between;
2306
+ padding: 1.25rem 1.5rem;
2307
+ border-bottom: 1px solid var(--nt-border);
2308
+ }
2309
+ .nt-modal__title {
2310
+ font-size: 1rem;
2311
+ font-weight: 800;
2312
+ text-transform: uppercase;
2313
+ letter-spacing: -0.01em;
2314
+ }
2315
+ .nt-modal__body {
2316
+ padding: 1.5rem;
2317
+ overflow-y: auto;
2318
+ }
2319
+
2320
+ /* ===== FREQUENTLY BOUGHT TOGETHER ===== */
2321
+ .nt-fbt-card {
2322
+ border: 1px solid var(--nt-border);
2323
+ border-radius: 12px;
2324
+ background: var(--nt-card);
2325
+ padding: 1.25rem;
2326
+ max-width: 44rem; /* smaller, aligned to the start rather than full-bleed */
2327
+ }
2328
+ .nt-fbt-card__title {
2329
+ font-size: 0.95rem;
2330
+ font-weight: 800;
2331
+ text-transform: uppercase;
2332
+ letter-spacing: -0.01em;
2333
+ margin: 0 0 1rem;
2334
+ }
2335
+ .nt-fbt {
2336
+ display: flex;
2337
+ flex-wrap: wrap;
2338
+ align-items: stretch;
2339
+ gap: 0.75rem;
2340
+ }
2341
+ .nt-fbt__item {
2342
+ display: flex;
2343
+ align-items: center;
2344
+ gap: 0.75rem;
2345
+ }
2346
+ .nt-fbt__card {
2347
+ display: flex;
2348
+ align-items: center;
2349
+ gap: 0.625rem;
2350
+ border: 1px solid var(--nt-border);
2351
+ border-radius: var(--nt-radius);
2352
+ padding: 0.625rem;
2353
+ background: var(--nt-card);
2354
+ cursor: pointer;
2355
+ min-width: 11.5rem;
2356
+ }
2357
+ .nt-fbt__card input {
2358
+ accent-color: var(--nt-black);
2359
+ width: 1rem;
2360
+ height: 1rem;
2361
+ }
2362
+ .nt-fbt__thumb {
2363
+ width: 2.75rem;
2364
+ height: 2.75rem;
2365
+ flex-shrink: 0;
2366
+ border-radius: 6px;
2367
+ overflow: hidden;
2368
+ background: var(--nt-secondary);
2369
+ }
2370
+ .nt-fbt__thumb img {
2371
+ width: 100%;
2372
+ height: 100%;
2373
+ object-fit: cover;
2374
+ }
2375
+ .nt-fbt__info {
2376
+ display: flex;
2377
+ flex-direction: column;
2378
+ gap: 0.25rem;
2379
+ min-width: 0;
2380
+ }
2381
+ .nt-fbt__name {
2382
+ font-size: 0.8125rem;
2383
+ font-weight: 600;
2384
+ line-height: 1.3;
2385
+ }
2386
+ .nt-fbt__price {
2387
+ font-size: 0.8125rem;
2388
+ font-weight: 700;
2389
+ }
2390
+ .nt-fbt__plus {
2391
+ font-size: 1.5rem;
2392
+ font-weight: 300;
2393
+ color: var(--nt-gray);
2394
+ }
2395
+ .nt-fbt__foot {
2396
+ display: flex;
2397
+ align-items: center;
2398
+ gap: 1rem;
2399
+ flex-wrap: wrap;
2400
+ margin-top: 1.5rem;
2401
+ }
2402
+ .nt-fbt__total {
2403
+ font-size: 1rem;
2404
+ }