howone 0.1.29 → 0.1.30

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 (219) hide show
  1. package/package.json +1 -1
  2. package/templates/vite/.howone/skills/hallmark/SKILL.md +48 -42
  3. package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +12 -6
  4. package/templates/vite/.howone/skills/hallmark/references/assets.md +7 -0
  5. package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +19 -10
  6. package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +1 -1
  7. package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +1 -1
  8. package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +1 -1
  9. package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +1 -1
  10. package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +1 -1
  11. package/templates/vite/.howone/skills/hallmark/references/components/n11-mega-menu.md +40 -0
  12. package/templates/vite/.howone/skills/hallmark/references/components/n12-banner-retract.md +34 -0
  13. package/templates/vite/.howone/skills/hallmark/references/components/n13-inline-cmdk-pill.md +39 -0
  14. package/templates/vite/.howone/skills/hallmark/references/components/n1b-saas-three-section.md +35 -0
  15. package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +1 -1
  16. package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +2 -2
  17. package/templates/vite/.howone/skills/hallmark/references/copy.md +8 -8
  18. package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +2 -2
  19. package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +50 -12
  20. package/templates/vite/.howone/skills/hallmark/references/export-formats.md +1 -1
  21. package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +11 -7
  22. package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +6 -4
  23. package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +10 -6
  24. package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +15 -10
  25. package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +13 -12
  26. package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +2 -1
  27. package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +4 -3
  28. package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +3 -1
  29. package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +1 -1
  30. package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +1 -1
  31. package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +1 -3
  32. package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +12 -12
  33. package/templates/vite/.howone/skills/hallmark/references/responsive.md +8 -8
  34. package/templates/vite/.howone/skills/hallmark/references/slop-test.md +72 -85
  35. package/templates/vite/.howone/skills/hallmark/references/structure.md +9 -13
  36. package/templates/vite/.howone/skills/hallmark/references/study.md +40 -17
  37. package/templates/vite/.howone/skills/hallmark/references/themes/carnival.md +301 -0
  38. package/templates/vite/.howone/skills/hallmark/references/themes/cobalt.md +146 -0
  39. package/templates/vite/.howone/skills/hallmark/references/themes/hum.md +403 -0
  40. package/templates/vite/.howone/skills/hallmark/references/themes/lumen.md +478 -0
  41. package/templates/vite/.howone/skills/hallmark/references/typography.md +3 -3
  42. package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +1 -1
  43. package/templates/vite/.howone/skills/hallmark/LICENSE +0 -21
  44. package/templates/vite/.howone/skills/hallmark/README.md +0 -147
  45. package/templates/vite/.howone/skills/hallmark/ROADMAP.md +0 -201
  46. package/templates/vite/.howone/skills/hallmark/docs/recipes.md +0 -186
  47. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
  48. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
  49. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
  50. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
  51. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
  52. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
  53. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
  54. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
  55. package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +0 -176
  56. package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +0 -364
  57. package/templates/vite/.howone/skills/hallmark/package.json +0 -36
  58. package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
  59. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +0 -71
  60. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +0 -64
  61. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +0 -240
  62. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +0 -65
  63. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +0 -105
  64. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +0 -250
  65. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +0 -64
  66. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +0 -131
  67. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +0 -240
  68. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +0 -67
  69. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +0 -86
  70. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +0 -262
  71. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +0 -63
  72. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +0 -167
  73. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +0 -457
  74. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +0 -65
  75. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +0 -159
  76. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +0 -288
  77. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +0 -64
  78. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +0 -146
  79. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +0 -484
  80. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +0 -64
  81. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +0 -116
  82. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +0 -354
  83. package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +0 -638
  84. package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +0 -515
  85. package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +0 -515
  86. package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +0 -608
  87. package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +0 -587
  88. package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +0 -157
  89. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
  90. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
  91. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
  92. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
  93. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
  94. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
  95. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
  96. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
  97. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
  98. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
  99. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
  100. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
  101. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
  102. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
  103. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
  104. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
  105. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
  106. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
  107. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
  108. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
  109. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
  110. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
  111. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
  112. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +0 -77
  113. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +0 -238
  114. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +0 -110
  115. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +0 -326
  116. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +0 -134
  117. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +0 -262
  118. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +0 -30
  119. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +0 -17
  120. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +0 -56
  121. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +0 -160
  122. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +0 -29
  123. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +0 -63
  124. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +0 -72
  125. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +0 -374
  126. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +0 -52
  127. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +0 -29
  128. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +0 -61
  129. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +0 -193
  130. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +0 -66
  131. package/templates/vite/.howone/skills/hallmark/site/css/base.css +0 -194
  132. package/templates/vite/.howone/skills/hallmark/site/css/components.css +0 -4886
  133. package/templates/vite/.howone/skills/hallmark/site/css/sections.css +0 -2072
  134. package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +0 -1129
  135. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +0 -475
  136. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +0 -1584
  137. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +0 -96
  138. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +0 -344
  139. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +0 -103
  140. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +0 -1103
  141. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +0 -83
  142. package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +0 -368
  143. package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +0 -133
  144. package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +0 -1062
  145. package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +0 -97
  146. package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +0 -84
  147. package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +0 -446
  148. package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +0 -1087
  149. package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +0 -101
  150. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +0 -359
  151. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +0 -1168
  152. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +0 -81
  153. package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +0 -5
  154. package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +0 -5
  155. package/templates/vite/.howone/skills/hallmark/site/index.html +0 -1043
  156. package/templates/vite/.howone/skills/hallmark/site/js/main.js +0 -1175
  157. package/templates/vite/.howone/skills/hallmark/vercel.json +0 -6
  158. package/templates/vite/.howone/skills/impeccable/SKILL.md +0 -168
  159. package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +0 -101
  160. package/templates/vite/.howone/skills/impeccable/reference/adapt.md +0 -190
  161. package/templates/vite/.howone/skills/impeccable/reference/animate.md +0 -175
  162. package/templates/vite/.howone/skills/impeccable/reference/audit.md +0 -133
  163. package/templates/vite/.howone/skills/impeccable/reference/bolder.md +0 -113
  164. package/templates/vite/.howone/skills/impeccable/reference/brand.md +0 -118
  165. package/templates/vite/.howone/skills/impeccable/reference/clarify.md +0 -174
  166. package/templates/vite/.howone/skills/impeccable/reference/codex.md +0 -105
  167. package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +0 -106
  168. package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +0 -105
  169. package/templates/vite/.howone/skills/impeccable/reference/colorize.md +0 -154
  170. package/templates/vite/.howone/skills/impeccable/reference/craft.md +0 -123
  171. package/templates/vite/.howone/skills/impeccable/reference/critique.md +0 -273
  172. package/templates/vite/.howone/skills/impeccable/reference/delight.md +0 -302
  173. package/templates/vite/.howone/skills/impeccable/reference/distill.md +0 -111
  174. package/templates/vite/.howone/skills/impeccable/reference/document.md +0 -427
  175. package/templates/vite/.howone/skills/impeccable/reference/extract.md +0 -69
  176. package/templates/vite/.howone/skills/impeccable/reference/harden.md +0 -347
  177. package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +0 -234
  178. package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +0 -195
  179. package/templates/vite/.howone/skills/impeccable/reference/layout.md +0 -141
  180. package/templates/vite/.howone/skills/impeccable/reference/live.md +0 -622
  181. package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +0 -109
  182. package/templates/vite/.howone/skills/impeccable/reference/onboard.md +0 -234
  183. package/templates/vite/.howone/skills/impeccable/reference/optimize.md +0 -258
  184. package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +0 -130
  185. package/templates/vite/.howone/skills/impeccable/reference/personas.md +0 -179
  186. package/templates/vite/.howone/skills/impeccable/reference/polish.md +0 -242
  187. package/templates/vite/.howone/skills/impeccable/reference/product.md +0 -62
  188. package/templates/vite/.howone/skills/impeccable/reference/quieter.md +0 -99
  189. package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +0 -114
  190. package/templates/vite/.howone/skills/impeccable/reference/shape.md +0 -165
  191. package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +0 -100
  192. package/templates/vite/.howone/skills/impeccable/reference/teach.md +0 -156
  193. package/templates/vite/.howone/skills/impeccable/reference/typeset.md +0 -124
  194. package/templates/vite/.howone/skills/impeccable/reference/typography.md +0 -159
  195. package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +0 -107
  196. package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +0 -284
  197. package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +0 -94
  198. package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +0 -242
  199. package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +0 -820
  200. package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +0 -198
  201. package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +0 -21
  202. package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +0 -110
  203. package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +0 -69
  204. package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +0 -595
  205. package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +0 -123
  206. package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +0 -4860
  207. package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +0 -75
  208. package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +0 -18
  209. package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +0 -446
  210. package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +0 -200
  211. package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +0 -48
  212. package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +0 -838
  213. package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +0 -254
  214. package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +0 -47
  215. package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +0 -632
  216. package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +0 -247
  217. package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +0 -141
  218. package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +0 -14
  219. package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +0 -214
@@ -1,1062 +0,0 @@
1
- /* Hallmark · macrostructure: Marquee Hero · genre: editorial
2
- * vibe: "hyped Moroccan drop, editorial fashion, sun-warm earth"
3
- * theme: custom · paper oklch(96.5% 0.012 75) warm-cream · accent oklch(58% 0.18 35) terracotta
4
- * display: Bricolage Grotesque 700-900 · body: Inter 400/500
5
- * axes: light / geometric-sans / warm
6
- * studied: no
7
- */
8
-
9
- @import url("./tokens.css");
10
-
11
- /* ── Reset ─────────────────────────────────────────── */
12
- *, *::before, *::after { box-sizing: border-box; }
13
- * { margin: 0; padding: 0; }
14
- html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
15
- body {
16
- background: var(--color-paper);
17
- color: var(--color-ink);
18
- font-family: var(--font-body);
19
- font-size: var(--text-md);
20
- line-height: var(--leading-body);
21
- font-feature-settings: "ss01", "cv11";
22
- -webkit-font-smoothing: antialiased;
23
- text-rendering: optimizeLegibility;
24
- }
25
- img, svg, video { display: block; max-width: 100%; }
26
- button {
27
- font: inherit;
28
- color: inherit;
29
- background: none;
30
- border: 0;
31
- cursor: pointer;
32
- }
33
- a { color: inherit; text-decoration: none; }
34
- ul, ol { list-style: none; }
35
- input, select { font: inherit; color: inherit; }
36
-
37
- /* Focus ring · instant, no animation, visible against any band */
38
- :focus-visible {
39
- outline: 2px solid var(--color-focus-ring);
40
- outline-offset: 3px;
41
- border-radius: 2px;
42
- }
43
-
44
- /* ── Layout primitives ────────────────────────────── */
45
- .shell {
46
- width: 100%;
47
- max-width: var(--max-w);
48
- margin-inline: auto;
49
- padding-inline: var(--gutter);
50
- }
51
-
52
- .eyebrow {
53
- font-family: var(--font-body);
54
- font-size: var(--text-xs);
55
- font-weight: 500;
56
- letter-spacing: var(--track-wide);
57
- text-transform: uppercase;
58
- color: var(--color-ink-soft);
59
- }
60
-
61
- /* ── Announcement bar ─────────────────────────────── */
62
- .announce {
63
- background: var(--color-ink);
64
- color: var(--color-paper);
65
- font-size: var(--text-xs);
66
- letter-spacing: 0.06em;
67
- padding-block: 10px;
68
- text-align: center;
69
- }
70
- .announce strong { color: var(--color-saffron); font-weight: 600; }
71
- .announce span + span { margin-inline-start: var(--space-5); }
72
- @media (max-width: 640px) {
73
- .announce span + span { display: none; }
74
- }
75
-
76
- /* ── Top nav ──────────────────────────────────────── */
77
- .nav {
78
- position: sticky;
79
- top: 0;
80
- z-index: 30;
81
- background: color-mix(in oklch, var(--color-paper) 88%, transparent);
82
- backdrop-filter: saturate(140%) blur(10px);
83
- -webkit-backdrop-filter: saturate(140%) blur(10px);
84
- border-bottom: var(--rule-thin) solid var(--color-rule);
85
- }
86
- .nav__inner {
87
- display: grid;
88
- grid-template-columns: auto 1fr auto;
89
- align-items: center;
90
- gap: var(--space-5);
91
- padding-block: var(--space-3);
92
- }
93
- .brand {
94
- display: inline-flex;
95
- align-items: baseline;
96
- gap: 8px;
97
- font-family: var(--font-display);
98
- font-weight: 800;
99
- font-size: var(--text-xl);
100
- letter-spacing: var(--track-display);
101
- }
102
- .brand__ar {
103
- font-size: var(--text-base);
104
- color: var(--color-accent);
105
- font-weight: 600;
106
- }
107
- .nav__links {
108
- display: flex;
109
- justify-content: center;
110
- gap: var(--space-6);
111
- }
112
- .nav__links a {
113
- font-size: var(--text-sm);
114
- font-weight: 500;
115
- position: relative;
116
- padding-block: 6px;
117
- transition: color var(--dur-fast) var(--ease-out);
118
- }
119
- .nav__links a::after {
120
- content: "";
121
- position: absolute;
122
- left: 0; right: 0;
123
- bottom: 0;
124
- height: 1px;
125
- background: currentColor;
126
- transform: scaleX(0);
127
- transform-origin: left;
128
- transition: transform var(--dur-base) var(--ease-out);
129
- }
130
- .nav__links a:hover::after,
131
- .nav__links a:focus-visible::after { transform: scaleX(1); }
132
- .nav__util {
133
- display: flex;
134
- align-items: center;
135
- gap: var(--space-3);
136
- }
137
- .icon-btn {
138
- display: inline-flex;
139
- align-items: center;
140
- justify-content: center;
141
- width: 44px; height: 44px;
142
- border-radius: var(--radius-pill);
143
- transition: background-color var(--dur-fast) var(--ease-out);
144
- }
145
- .icon-btn:hover { background: var(--color-paper-warm); }
146
- .cart-btn {
147
- display: inline-flex;
148
- align-items: center;
149
- gap: 8px;
150
- padding: 9px 14px 9px 12px;
151
- border-radius: var(--radius-pill);
152
- background: var(--color-ink);
153
- color: var(--color-paper);
154
- font-size: var(--text-sm);
155
- font-weight: 500;
156
- transition: transform var(--dur-fast) var(--ease-out);
157
- }
158
- .cart-btn:hover { transform: translateY(-1px); }
159
- .cart-btn:active { transform: translateY(0); }
160
- .cart-btn__count {
161
- display: inline-flex;
162
- min-width: 22px; height: 22px;
163
- align-items: center; justify-content: center;
164
- padding-inline: 6px;
165
- border-radius: var(--radius-pill);
166
- background: var(--color-accent);
167
- color: var(--color-paper);
168
- font-size: 11px; font-weight: 700;
169
- font-variant-numeric: tabular-nums;
170
- transition: transform var(--dur-base) var(--ease-out);
171
- }
172
- .cart-btn__count.is-pulse { animation: pulse 360ms var(--ease-out); }
173
-
174
- @keyframes pulse {
175
- 0% { transform: scale(1); }
176
- 40% { transform: scale(1.35); }
177
- 100% { transform: scale(1); }
178
- }
179
-
180
- @media (max-width: 760px) {
181
- .nav__links { display: none; }
182
- }
183
-
184
- /* ── Marquee strip · brand language ───────────────── */
185
- .marquee {
186
- background: var(--color-accent);
187
- color: var(--color-paper);
188
- border-block: var(--rule-thin) solid var(--color-accent-deep);
189
- overflow: hidden;
190
- padding-block: 14px;
191
- }
192
- .marquee__track {
193
- display: flex;
194
- width: max-content;
195
- gap: var(--space-7);
196
- font-family: var(--font-display);
197
- font-weight: 700;
198
- font-size: clamp(1.125rem, 2.4vw, 1.5rem);
199
- letter-spacing: var(--track-display);
200
- text-transform: uppercase;
201
- white-space: nowrap;
202
- animation: scroll-x 38s linear infinite;
203
- will-change: transform;
204
- }
205
- .marquee__track > span {
206
- display: inline-flex;
207
- align-items: center;
208
- gap: var(--space-7);
209
- }
210
- .marquee__star {
211
- display: inline-block;
212
- width: 18px; height: 18px;
213
- background: currentColor;
214
- clip-path: polygon(
215
- 50% 0%, 61% 35%, 98% 35%, 68% 57%,
216
- 79% 91%, 50% 70%, 21% 91%, 32% 57%,
217
- 2% 35%, 39% 35%
218
- );
219
- }
220
- @keyframes scroll-x {
221
- to { transform: translateX(-50%); }
222
- }
223
- @media (prefers-reduced-motion: reduce) {
224
- .marquee__track { animation: none; transform: translateX(0); }
225
- }
226
-
227
- /* ── Hero ─────────────────────────────────────────── */
228
- .hero {
229
- position: relative;
230
- padding-top: var(--space-7);
231
- padding-bottom: var(--space-9);
232
- overflow: hidden;
233
- }
234
- .hero__grid {
235
- display: grid;
236
- grid-template-columns: 1fr;
237
- gap: var(--space-7);
238
- align-items: end;
239
- }
240
- .hero__lead {
241
- display: flex;
242
- flex-direction: column;
243
- gap: var(--space-5);
244
- }
245
- .hero__meta {
246
- display: flex;
247
- align-items: center;
248
- gap: var(--space-3);
249
- font-size: var(--text-xs);
250
- letter-spacing: var(--track-wide);
251
- text-transform: uppercase;
252
- color: var(--color-ink-soft);
253
- }
254
- .hero__meta b {
255
- display: inline-block;
256
- width: 8px; height: 8px;
257
- background: var(--color-accent);
258
- border-radius: 999px;
259
- animation: blink 1.6s var(--ease-in-out) infinite;
260
- }
261
- @keyframes blink {
262
- 0%, 100% { opacity: 1; }
263
- 50% { opacity: 0.3; }
264
- }
265
- @media (prefers-reduced-motion: reduce) {
266
- .hero__meta b { animation: none; }
267
- }
268
-
269
- .hero__h1 {
270
- font-family: var(--font-display);
271
- font-weight: 900;
272
- font-size: var(--text-hero);
273
- line-height: 0.86;
274
- letter-spacing: var(--track-display);
275
- color: var(--color-ink);
276
- text-wrap: balance;
277
- }
278
- .hero__h1 em {
279
- font-style: italic;
280
- color: var(--color-accent);
281
- font-weight: 800;
282
- }
283
- .hero__sub {
284
- max-width: 38ch;
285
- font-size: var(--text-lg);
286
- color: var(--color-ink-soft);
287
- line-height: 1.4;
288
- }
289
- .hero__sub em {
290
- font-style: italic;
291
- color: var(--color-ink);
292
- }
293
-
294
- .hero__cta-row {
295
- display: flex;
296
- flex-wrap: wrap;
297
- align-items: center;
298
- gap: var(--space-4);
299
- margin-top: var(--space-3);
300
- }
301
-
302
- /* Buttons */
303
- .btn {
304
- display: inline-flex;
305
- align-items: center;
306
- gap: 10px;
307
- padding: 16px 24px;
308
- border-radius: var(--radius-pill);
309
- font-weight: 600;
310
- font-size: var(--text-md);
311
- letter-spacing: -0.01em;
312
- transition:
313
- transform var(--dur-fast) var(--ease-out),
314
- box-shadow var(--dur-base) var(--ease-out),
315
- background-color var(--dur-fast) var(--ease-out);
316
- min-height: 48px;
317
- }
318
- .btn--primary {
319
- background: var(--color-ink);
320
- color: var(--color-paper);
321
- }
322
- .btn--primary:hover {
323
- transform: translateY(-2px);
324
- box-shadow: 0 12px 28px -12px var(--color-overlay-ink);
325
- }
326
- .btn--primary:active { transform: translateY(0); }
327
- .btn--ghost {
328
- color: var(--color-ink);
329
- border: var(--rule-thin) solid var(--color-ink);
330
- }
331
- .btn--ghost:hover {
332
- background: var(--color-ink);
333
- color: var(--color-paper);
334
- }
335
- .btn__arrow {
336
- display: inline-block;
337
- transition: transform var(--dur-base) var(--ease-out);
338
- }
339
- .btn:hover .btn__arrow { transform: translateX(4px); }
340
-
341
- /* Hero featured product card */
342
- .hero__feature {
343
- position: relative;
344
- display: grid;
345
- grid-template-columns: 1fr;
346
- gap: var(--space-3);
347
- }
348
- .feature-card {
349
- position: relative;
350
- display: block;
351
- border-radius: var(--radius-lg);
352
- overflow: hidden;
353
- aspect-ratio: 4 / 5;
354
- background: var(--color-paper-warm);
355
- isolation: isolate;
356
- transition: transform var(--dur-slow) var(--ease-out);
357
- }
358
- .feature-card:hover { transform: translateY(-4px); }
359
-
360
- /* Pure-CSS art product surfaces · zellige + textile gradients */
361
- .surface {
362
- position: absolute;
363
- inset: 0;
364
- z-index: 0;
365
- }
366
- .surface--terracotta {
367
- background:
368
- radial-gradient(circle at 30% 25%, oklch(74% 0.16 38) 0%, transparent 55%),
369
- radial-gradient(circle at 75% 80%, oklch(46% 0.18 30) 0%, transparent 60%),
370
- linear-gradient(140deg, oklch(58% 0.18 35) 0%, oklch(40% 0.16 28) 100%);
371
- }
372
- .surface--bone {
373
- background:
374
- radial-gradient(circle at 70% 20%, oklch(96% 0.020 80) 0%, transparent 55%),
375
- linear-gradient(160deg, oklch(91% 0.025 75) 0%, oklch(82% 0.030 70) 100%);
376
- }
377
- .surface--ink {
378
- background:
379
- radial-gradient(circle at 25% 30%, oklch(36% 0.04 60) 0%, transparent 60%),
380
- linear-gradient(150deg, oklch(22% 0.025 55) 0%, oklch(14% 0.020 55) 100%);
381
- }
382
- .surface--saffron {
383
- background:
384
- radial-gradient(circle at 30% 30%, oklch(85% 0.16 80) 0%, transparent 55%),
385
- linear-gradient(150deg, oklch(75% 0.16 75) 0%, oklch(60% 0.16 70) 100%);
386
- }
387
- .surface--marine {
388
- background:
389
- radial-gradient(circle at 25% 25%, oklch(48% 0.10 240) 0%, transparent 60%),
390
- linear-gradient(150deg, oklch(34% 0.09 240) 0%, oklch(22% 0.06 240) 100%);
391
- }
392
-
393
- /* Zellige tile pattern overlay (CSS-only, geometric Moroccan motif) */
394
- .zellige {
395
- position: absolute;
396
- inset: 0;
397
- z-index: 1;
398
- opacity: 0.18;
399
- mix-blend-mode: overlay;
400
- background-image:
401
- conic-gradient(from 45deg at 50% 50%,
402
- transparent 0deg, currentColor 45deg, transparent 90deg,
403
- currentColor 135deg, transparent 180deg, currentColor 225deg,
404
- transparent 270deg, currentColor 315deg, transparent 360deg);
405
- background-size: 48px 48px;
406
- color: var(--color-paper);
407
- -webkit-mask-image: radial-gradient(ellipse at center, black 0%, transparent 75%);
408
- mask-image: radial-gradient(ellipse at center, black 0%, transparent 75%);
409
- }
410
- .zellige--dark { color: var(--color-ink); }
411
-
412
- /* Card body overlay */
413
- .feature-card__body {
414
- position: relative;
415
- z-index: 2;
416
- height: 100%;
417
- display: flex;
418
- flex-direction: column;
419
- justify-content: space-between;
420
- padding: var(--space-5);
421
- color: var(--color-paper);
422
- }
423
- .feature-card__body.is-dark { color: var(--color-ink); }
424
-
425
- .feature-card__tag {
426
- display: inline-flex;
427
- align-items: center;
428
- gap: 6px;
429
- align-self: flex-start;
430
- padding: 6px 12px;
431
- border-radius: var(--radius-pill);
432
- background: color-mix(in oklch, var(--color-paper) 22%, transparent);
433
- backdrop-filter: blur(6px);
434
- -webkit-backdrop-filter: blur(6px);
435
- font-size: 11px;
436
- font-weight: 600;
437
- letter-spacing: 0.08em;
438
- text-transform: uppercase;
439
- }
440
- .is-dark .feature-card__tag {
441
- background: color-mix(in oklch, var(--color-ink) 12%, transparent);
442
- }
443
- .feature-card__title {
444
- font-family: var(--font-display);
445
- font-weight: 800;
446
- font-size: var(--text-2xl);
447
- line-height: 1;
448
- letter-spacing: var(--track-tight);
449
- }
450
- .feature-card__row {
451
- display: flex;
452
- align-items: end;
453
- justify-content: space-between;
454
- gap: var(--space-3);
455
- }
456
- .feature-card__price {
457
- font-size: var(--text-lg);
458
- font-weight: 600;
459
- font-variant-numeric: tabular-nums;
460
- }
461
- .feature-card__price small { font-size: 0.7em; opacity: 0.8; margin-inline-start: 4px; }
462
- .feature-card__cta {
463
- width: 44px; height: 44px;
464
- border-radius: var(--radius-pill);
465
- background: var(--color-paper);
466
- color: var(--color-ink);
467
- display: inline-flex;
468
- align-items: center; justify-content: center;
469
- transition: transform var(--dur-fast) var(--ease-out);
470
- }
471
- .is-dark .feature-card__cta {
472
- background: var(--color-ink);
473
- color: var(--color-paper);
474
- }
475
- .feature-card:hover .feature-card__cta { transform: rotate(-15deg) scale(1.05); }
476
-
477
- /* Hero-specific feature sizing */
478
- .hero .feature-card { aspect-ratio: 4 / 5; }
479
-
480
- /* Hero responsive grid */
481
- @media (min-width: 880px) {
482
- .hero__grid {
483
- grid-template-columns: 1.55fr 1fr;
484
- gap: var(--space-9);
485
- }
486
- .hero__lead { padding-block: var(--space-7) 0; }
487
- }
488
-
489
- /* ── Featured collection ──────────────────────────── */
490
- .section {
491
- padding-block: var(--space-9);
492
- border-top: var(--rule-thin) solid var(--color-rule);
493
- }
494
- .section__head {
495
- display: flex;
496
- align-items: end;
497
- justify-content: space-between;
498
- flex-wrap: wrap;
499
- gap: var(--space-5);
500
- margin-bottom: var(--space-7);
501
- }
502
- .section__title {
503
- font-family: var(--font-display);
504
- font-weight: 800;
505
- font-size: var(--text-4xl);
506
- line-height: 1;
507
- letter-spacing: var(--track-display);
508
- max-width: 18ch;
509
- text-wrap: balance;
510
- }
511
- .section__title em {
512
- font-style: italic;
513
- color: var(--color-accent);
514
- }
515
- .section__lede {
516
- max-width: 36ch;
517
- color: var(--color-ink-soft);
518
- font-size: var(--text-md);
519
- }
520
- .section__link {
521
- display: inline-flex;
522
- align-items: center;
523
- gap: 8px;
524
- font-size: var(--text-sm);
525
- font-weight: 500;
526
- border-bottom: var(--rule-thin) solid var(--color-ink);
527
- padding-bottom: 2px;
528
- }
529
-
530
- .collection {
531
- display: grid;
532
- grid-template-columns: repeat(2, 1fr);
533
- gap: var(--space-4) var(--space-3);
534
- }
535
- @media (min-width: 760px) {
536
- .collection { grid-template-columns: repeat(4, 1fr); gap: var(--space-5) var(--space-4); }
537
- }
538
-
539
- .product {
540
- display: flex;
541
- flex-direction: column;
542
- gap: var(--space-3);
543
- }
544
- .product__media {
545
- position: relative;
546
- border-radius: var(--radius-md);
547
- overflow: hidden;
548
- aspect-ratio: 4 / 5;
549
- isolation: isolate;
550
- transition: transform var(--dur-slow) var(--ease-out);
551
- }
552
- .product:hover .product__media { transform: translateY(-3px); }
553
- .product__media .surface { transition: transform var(--dur-slow) var(--ease-out); }
554
- .product:hover .product__media .surface { transform: scale(1.04); }
555
- .product__quick {
556
- position: absolute;
557
- inset: auto var(--space-3) var(--space-3) var(--space-3);
558
- z-index: 3;
559
- display: flex;
560
- align-items: center;
561
- justify-content: center;
562
- padding: 12px;
563
- border-radius: var(--radius-pill);
564
- background: var(--color-paper);
565
- color: var(--color-ink);
566
- font-weight: 600;
567
- font-size: var(--text-sm);
568
- opacity: 0;
569
- transform: translateY(8px);
570
- transition:
571
- opacity var(--dur-base) var(--ease-out),
572
- transform var(--dur-base) var(--ease-out);
573
- min-height: 44px;
574
- }
575
- .product:hover .product__quick,
576
- .product:focus-within .product__quick {
577
- opacity: 1;
578
- transform: translateY(0);
579
- }
580
- .product__badge {
581
- position: absolute;
582
- top: var(--space-3);
583
- left: var(--space-3);
584
- z-index: 2;
585
- font-size: 10px;
586
- font-weight: 700;
587
- letter-spacing: 0.1em;
588
- text-transform: uppercase;
589
- padding: 6px 10px;
590
- border-radius: var(--radius-pill);
591
- background: var(--color-paper);
592
- color: var(--color-ink);
593
- }
594
- .product__badge--new { background: var(--color-accent); color: var(--color-paper); }
595
- .product__badge--low { background: var(--color-ink); color: var(--color-paper); }
596
-
597
- .product__row {
598
- display: flex;
599
- align-items: baseline;
600
- justify-content: space-between;
601
- gap: var(--space-3);
602
- }
603
- .product__name {
604
- font-family: var(--font-display);
605
- font-weight: 700;
606
- font-size: var(--text-md);
607
- letter-spacing: var(--track-tight);
608
- }
609
- .product__price {
610
- font-size: var(--text-md);
611
- font-variant-numeric: tabular-nums;
612
- font-weight: 500;
613
- }
614
- .product__price s { color: var(--color-ink-mute); margin-inline-end: 6px; }
615
- .product__meta {
616
- font-size: var(--text-xs);
617
- color: var(--color-ink-mute);
618
- letter-spacing: 0.02em;
619
- }
620
-
621
- /* On mobile, surface the quick-add by default */
622
- @media (max-width: 759px) {
623
- .product__quick {
624
- opacity: 1;
625
- transform: translateY(0);
626
- inset: auto 8px 8px 8px;
627
- }
628
- }
629
-
630
- /* ── Editorial moment · Lookbook ──────────────────── */
631
- .editorial {
632
- position: relative;
633
- border-radius: var(--radius-lg);
634
- overflow: hidden;
635
- isolation: isolate;
636
- margin-block: var(--space-8);
637
- padding: clamp(2rem, 6vw, 5rem);
638
- color: var(--color-paper);
639
- display: grid;
640
- grid-template-columns: 1fr;
641
- gap: var(--space-7);
642
- min-height: 70vh;
643
- align-content: end;
644
- }
645
- .editorial__bg {
646
- position: absolute;
647
- inset: 0;
648
- z-index: -1;
649
- background:
650
- radial-gradient(circle at 20% 10%, oklch(70% 0.18 38) 0%, transparent 50%),
651
- radial-gradient(circle at 80% 90%, oklch(34% 0.09 240) 0%, transparent 55%),
652
- linear-gradient(150deg, oklch(48% 0.20 32) 0%, oklch(28% 0.08 30) 100%);
653
- }
654
- .editorial__bg::after {
655
- content: "";
656
- position: absolute;
657
- inset: 0;
658
- background-image:
659
- conic-gradient(from 0deg at 50% 50%,
660
- transparent 0deg 40deg,
661
- var(--color-paper) 40deg 50deg,
662
- transparent 50deg 130deg,
663
- var(--color-paper) 130deg 140deg,
664
- transparent 140deg 220deg,
665
- var(--color-paper) 220deg 230deg,
666
- transparent 230deg 310deg,
667
- var(--color-paper) 310deg 320deg,
668
- transparent 320deg 360deg
669
- );
670
- background-size: 64px 64px;
671
- opacity: 0.06;
672
- }
673
- .editorial__eyebrow {
674
- font-family: var(--font-mono);
675
- font-size: var(--text-xs);
676
- letter-spacing: 0.18em;
677
- text-transform: uppercase;
678
- color: var(--color-paper);
679
- opacity: 0.85;
680
- }
681
- .editorial__quote {
682
- font-family: var(--font-display);
683
- font-style: italic;
684
- font-weight: 500;
685
- font-size: var(--text-5xl);
686
- line-height: 1;
687
- letter-spacing: var(--track-display);
688
- text-wrap: balance;
689
- max-width: 18ch;
690
- }
691
- .editorial__quote::before {
692
- content: "“";
693
- display: inline-block;
694
- margin-inline-end: 0.05em;
695
- color: var(--color-saffron);
696
- }
697
- .editorial__byline {
698
- font-size: var(--text-sm);
699
- letter-spacing: 0.04em;
700
- opacity: 0.85;
701
- }
702
- .editorial__cta {
703
- align-self: start;
704
- display: inline-flex;
705
- align-items: center;
706
- gap: 10px;
707
- padding: 16px 24px;
708
- border-radius: var(--radius-pill);
709
- background: var(--color-paper);
710
- color: var(--color-ink);
711
- font-weight: 600;
712
- transition: transform var(--dur-fast) var(--ease-out);
713
- min-height: 48px;
714
- margin-top: var(--space-4);
715
- }
716
- .editorial__cta:hover { transform: translateY(-2px); }
717
-
718
- @media (min-width: 880px) {
719
- .editorial {
720
- grid-template-columns: 1fr 1fr;
721
- align-items: end;
722
- gap: var(--space-8);
723
- }
724
- .editorial__quote { font-size: clamp(3rem, 6vw, 5.25rem); }
725
- }
726
-
727
- /* ── Trust strip ──────────────────────────────────── */
728
- .trust {
729
- display: grid;
730
- grid-template-columns: 1fr;
731
- gap: var(--space-5);
732
- padding-block: var(--space-7);
733
- border-block: var(--rule-thin) solid var(--color-rule);
734
- }
735
- .trust__item {
736
- display: grid;
737
- grid-template-columns: auto 1fr;
738
- gap: var(--space-4);
739
- align-items: start;
740
- }
741
- .trust__num {
742
- font-family: var(--font-display);
743
- font-weight: 800;
744
- font-size: var(--text-2xl);
745
- color: var(--color-accent);
746
- font-variant-numeric: tabular-nums;
747
- letter-spacing: var(--track-tight);
748
- line-height: 1;
749
- }
750
- .trust__title {
751
- font-family: var(--font-display);
752
- font-weight: 700;
753
- font-size: var(--text-lg);
754
- letter-spacing: var(--track-tight);
755
- margin-bottom: 4px;
756
- }
757
- .trust__body {
758
- color: var(--color-ink-soft);
759
- font-size: var(--text-sm);
760
- max-width: 32ch;
761
- }
762
- @media (min-width: 760px) {
763
- .trust { grid-template-columns: repeat(4, 1fr); gap: var(--space-7); }
764
- }
765
-
766
- /* ── Newsletter ───────────────────────────────────── */
767
- .news {
768
- margin-block: var(--space-9) var(--space-8);
769
- padding: clamp(2rem, 5vw, 4rem);
770
- border-radius: var(--radius-lg);
771
- background: var(--color-paper-warm);
772
- display: grid;
773
- grid-template-columns: 1fr;
774
- gap: var(--space-6);
775
- align-items: end;
776
- }
777
- .news__h {
778
- font-family: var(--font-display);
779
- font-weight: 800;
780
- font-size: var(--text-3xl);
781
- line-height: 0.95;
782
- letter-spacing: var(--track-display);
783
- text-wrap: balance;
784
- }
785
- .news__h em { font-style: italic; color: var(--color-accent); }
786
- .news__p {
787
- color: var(--color-ink-soft);
788
- font-size: var(--text-md);
789
- max-width: 40ch;
790
- margin-top: var(--space-3);
791
- }
792
- .news__form {
793
- display: grid;
794
- grid-template-columns: 1fr auto;
795
- gap: var(--space-2);
796
- background: var(--color-paper);
797
- padding: 6px;
798
- border-radius: var(--radius-pill);
799
- border: var(--rule-thin) solid var(--color-rule);
800
- }
801
- .news__form:focus-within {
802
- border-color: var(--color-ink);
803
- }
804
- .news__input {
805
- border: 0;
806
- background: transparent;
807
- padding: 12px 16px;
808
- font-size: var(--text-md);
809
- min-width: 0;
810
- min-height: 44px;
811
- }
812
- .news__input::placeholder { color: var(--color-ink-mute); }
813
- .news__input:focus { outline: none; }
814
- .news__submit {
815
- padding: 12px 20px;
816
- border-radius: var(--radius-pill);
817
- background: var(--color-ink);
818
- color: var(--color-paper);
819
- font-weight: 600;
820
- font-size: var(--text-sm);
821
- min-height: 44px;
822
- transition: transform var(--dur-fast) var(--ease-out);
823
- }
824
- .news__submit:hover { transform: translateY(-1px); }
825
- .news__note {
826
- font-size: var(--text-xs);
827
- color: var(--color-ink-mute);
828
- margin-top: var(--space-3);
829
- }
830
-
831
- @media (min-width: 880px) {
832
- .news { grid-template-columns: 1.2fr 1fr; gap: var(--space-9); }
833
- }
834
-
835
- /* ── Footer ───────────────────────────────────────── */
836
- .footer {
837
- border-top: var(--rule-thin) solid var(--color-rule);
838
- padding-block: var(--space-7) var(--space-9);
839
- font-size: var(--text-sm);
840
- }
841
- .footer__top {
842
- display: grid;
843
- grid-template-columns: 1fr;
844
- gap: var(--space-6);
845
- margin-bottom: var(--space-7);
846
- }
847
- @media (min-width: 760px) {
848
- .footer__top { grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: var(--space-7); }
849
- }
850
- .footer__brand {
851
- font-family: var(--font-display);
852
- font-weight: 800;
853
- font-size: var(--text-3xl);
854
- letter-spacing: var(--track-display);
855
- line-height: 1;
856
- }
857
- .footer__tag { color: var(--color-ink-soft); margin-top: var(--space-3); max-width: 32ch; }
858
- .footer__col-h {
859
- font-size: var(--text-xs);
860
- letter-spacing: var(--track-wide);
861
- text-transform: uppercase;
862
- color: var(--color-ink-mute);
863
- margin-bottom: var(--space-3);
864
- font-weight: 500;
865
- }
866
- .footer__col li { margin-bottom: 8px; }
867
- .footer__col a {
868
- transition: color var(--dur-fast) var(--ease-out);
869
- }
870
- .footer__col a:hover { color: var(--color-accent); }
871
- .footer__bottom {
872
- display: flex;
873
- flex-wrap: wrap;
874
- gap: var(--space-4) var(--space-6);
875
- align-items: center;
876
- justify-content: space-between;
877
- padding-top: var(--space-5);
878
- border-top: var(--rule-thin) solid var(--color-rule);
879
- color: var(--color-ink-mute);
880
- font-size: var(--text-xs);
881
- }
882
-
883
- /* ── Cart drawer ──────────────────────────────────── */
884
- .scrim {
885
- position: fixed;
886
- inset: 0;
887
- z-index: 50;
888
- background: var(--color-overlay-ink);
889
- opacity: 0;
890
- pointer-events: none;
891
- transition: opacity var(--dur-base) var(--ease-out);
892
- }
893
- .scrim.is-open { opacity: 1; pointer-events: auto; }
894
-
895
- .drawer {
896
- position: fixed;
897
- top: 0; right: 0; bottom: 0;
898
- z-index: 51;
899
- width: min(440px, 100vw);
900
- background: var(--color-paper);
901
- transform: translateX(100%);
902
- transition: transform var(--dur-slow) var(--ease-out);
903
- display: flex;
904
- flex-direction: column;
905
- box-shadow: -24px 0 60px -20px var(--color-overlay-ink);
906
- }
907
- .drawer.is-open { transform: translateX(0); }
908
- .drawer__head {
909
- display: flex;
910
- align-items: center;
911
- justify-content: space-between;
912
- padding: var(--space-5);
913
- border-bottom: var(--rule-thin) solid var(--color-rule);
914
- }
915
- .drawer__title {
916
- font-family: var(--font-display);
917
- font-weight: 800;
918
- font-size: var(--text-xl);
919
- letter-spacing: var(--track-display);
920
- }
921
- .drawer__body {
922
- flex: 1;
923
- overflow-y: auto;
924
- padding: var(--space-5);
925
- display: flex;
926
- flex-direction: column;
927
- gap: var(--space-4);
928
- }
929
- .drawer__line {
930
- display: grid;
931
- grid-template-columns: 64px 1fr auto;
932
- gap: var(--space-4);
933
- align-items: center;
934
- padding-block: var(--space-3);
935
- border-bottom: var(--rule-thin) solid var(--color-rule-soft);
936
- }
937
- .drawer__thumb {
938
- width: 64px; height: 80px;
939
- border-radius: var(--radius-sm);
940
- overflow: hidden;
941
- position: relative;
942
- isolation: isolate;
943
- }
944
- .drawer__name {
945
- font-family: var(--font-display);
946
- font-weight: 700;
947
- font-size: var(--text-md);
948
- letter-spacing: var(--track-tight);
949
- }
950
- .drawer__sub {
951
- font-size: var(--text-xs);
952
- color: var(--color-ink-mute);
953
- margin-top: 2px;
954
- }
955
- .drawer__price {
956
- font-weight: 600;
957
- font-variant-numeric: tabular-nums;
958
- }
959
- .drawer__qty {
960
- display: inline-flex;
961
- align-items: center;
962
- margin-top: 6px;
963
- border: var(--rule-thin) solid var(--color-rule);
964
- border-radius: var(--radius-pill);
965
- overflow: hidden;
966
- }
967
- .drawer__qty button {
968
- width: 28px; height: 28px;
969
- display: inline-flex;
970
- align-items: center;
971
- justify-content: center;
972
- }
973
- .drawer__qty span {
974
- width: 28px;
975
- text-align: center;
976
- font-variant-numeric: tabular-nums;
977
- font-size: var(--text-sm);
978
- font-weight: 500;
979
- }
980
-
981
- .drawer__foot {
982
- padding: var(--space-5);
983
- border-top: var(--rule-thin) solid var(--color-rule);
984
- display: grid;
985
- gap: var(--space-3);
986
- }
987
- .drawer__total {
988
- display: flex;
989
- justify-content: space-between;
990
- align-items: baseline;
991
- font-family: var(--font-display);
992
- }
993
- .drawer__total b {
994
- font-size: var(--text-2xl);
995
- font-weight: 800;
996
- font-variant-numeric: tabular-nums;
997
- letter-spacing: var(--track-tight);
998
- }
999
- .drawer__sub-line {
1000
- display: flex;
1001
- justify-content: space-between;
1002
- font-size: var(--text-xs);
1003
- color: var(--color-ink-mute);
1004
- }
1005
- .drawer__checkout {
1006
- margin-top: var(--space-2);
1007
- padding: 18px;
1008
- border-radius: var(--radius-pill);
1009
- background: var(--color-accent);
1010
- color: var(--color-paper);
1011
- font-weight: 700;
1012
- font-size: var(--text-md);
1013
- text-align: center;
1014
- display: inline-flex;
1015
- align-items: center;
1016
- justify-content: center;
1017
- gap: 10px;
1018
- transition: transform var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);
1019
- min-height: 56px;
1020
- }
1021
- .drawer__checkout:hover {
1022
- transform: translateY(-2px);
1023
- background: var(--color-accent-deep);
1024
- }
1025
- .drawer__free {
1026
- font-size: var(--text-xs);
1027
- text-align: center;
1028
- color: var(--color-ink-mute);
1029
- }
1030
-
1031
- /* ── Mobile sticky bar ────────────────────────────── */
1032
- .mobile-bar {
1033
- position: fixed;
1034
- left: var(--space-3); right: var(--space-3); bottom: var(--space-3);
1035
- z-index: 20;
1036
- display: none;
1037
- align-items: center;
1038
- gap: var(--space-3);
1039
- padding: 10px 10px 10px 16px;
1040
- border-radius: var(--radius-pill);
1041
- background: var(--color-ink);
1042
- color: var(--color-paper);
1043
- box-shadow: 0 16px 40px -16px var(--color-overlay-ink);
1044
- }
1045
- .mobile-bar__text {
1046
- flex: 1;
1047
- font-size: var(--text-sm);
1048
- font-weight: 500;
1049
- }
1050
- .mobile-bar__cta {
1051
- background: var(--color-accent);
1052
- color: var(--color-paper);
1053
- border-radius: var(--radius-pill);
1054
- padding: 12px 18px;
1055
- font-size: var(--text-sm);
1056
- font-weight: 700;
1057
- min-height: 44px;
1058
- }
1059
- @media (max-width: 760px) {
1060
- .mobile-bar { display: flex; }
1061
- body { padding-bottom: 96px; }
1062
- }