nimiq-branding-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE.md +32 -0
  3. package/README.md +73 -0
  4. package/assets/css/legacy/nimiq-style.icons.svg +1 -0
  5. package/assets/css/legacy/nimiq-style.min.css +5 -0
  6. package/assets/css/modern/animations.css +179 -0
  7. package/assets/css/modern/atomic.css +148 -0
  8. package/assets/css/modern/colors.css +82 -0
  9. package/assets/css/modern/fonts.css +17 -0
  10. package/assets/css/modern/index.css +8 -0
  11. package/assets/css/modern/preflight.css +190 -0
  12. package/assets/css/modern/spacing.css +1023 -0
  13. package/assets/css/modern/static-content.css +300 -0
  14. package/assets/css/modern/typography.css +632 -0
  15. package/assets/css/modern/utilities.css +861 -0
  16. package/assets/fonts/mulish-0b696a2e.woff2 +0 -0
  17. package/assets/fonts/mulish-294ced17.woff2 +0 -0
  18. package/assets/fonts/mulish-4eb440e1.woff2 +0 -0
  19. package/assets/fonts/mulish-78a2d471.woff2 +0 -0
  20. package/assets/fonts/mulish-81f6c1ba.woff2 +0 -0
  21. package/assets/fonts/mulish-c1a61bc6.woff2 +0 -0
  22. package/assets/fonts/mulish-c7803f2b.woff2 +0 -0
  23. package/assets/fonts/mulish-e64de9e7.woff2 +0 -0
  24. package/assets/fonts/mulish-ecf98336.woff2 +0 -0
  25. package/assets/fonts/mulish-f727ad98.woff2 +0 -0
  26. package/assets/icons/duotone/duotone-arrow-to-top-left-from-corner.svg +1 -0
  27. package/assets/icons/duotone/duotone-bank-building.svg +1 -0
  28. package/assets/icons/duotone/duotone-bell.svg +1 -0
  29. package/assets/icons/duotone/duotone-block-stairs.svg +1 -0
  30. package/assets/icons/duotone/duotone-btc-invoice.svg +1 -0
  31. package/assets/icons/duotone/duotone-cactus.svg +1 -0
  32. package/assets/icons/duotone/duotone-cash-register.svg +1 -0
  33. package/assets/icons/duotone/duotone-column-chart.svg +1 -0
  34. package/assets/icons/duotone/duotone-credit-card.svg +1 -0
  35. package/assets/icons/duotone/duotone-crypto-currencies-btc-eth.svg +1 -0
  36. package/assets/icons/duotone/duotone-crypto-currencies-btc-usdc.svg +1 -0
  37. package/assets/icons/duotone/duotone-cryptos-pizza.svg +1 -0
  38. package/assets/icons/duotone/duotone-dashboard.svg +1 -0
  39. package/assets/icons/duotone/duotone-displaced-hamburguer.svg +1 -0
  40. package/assets/icons/duotone/duotone-document-text.svg +1 -0
  41. package/assets/icons/duotone/duotone-document-vertical-line.svg +1 -0
  42. package/assets/icons/duotone/duotone-document.svg +1 -0
  43. package/assets/icons/duotone/duotone-employee.svg +1 -0
  44. package/assets/icons/duotone/duotone-envelope.svg +1 -0
  45. package/assets/icons/duotone/duotone-fiat-currencies.svg +1 -0
  46. package/assets/icons/duotone/duotone-fiat-exchange.svg +1 -0
  47. package/assets/icons/duotone/duotone-fluctuations.svg +1 -0
  48. package/assets/icons/duotone/duotone-gamepad.svg +1 -0
  49. package/assets/icons/duotone/duotone-globe.svg +1 -0
  50. package/assets/icons/duotone/duotone-group.svg +1 -0
  51. package/assets/icons/duotone/duotone-handshake.svg +1 -0
  52. package/assets/icons/duotone/duotone-high-five.svg +1 -0
  53. package/assets/icons/duotone/duotone-htlc-box.svg +1 -0
  54. package/assets/icons/duotone/duotone-incognito.svg +1 -0
  55. package/assets/icons/duotone/duotone-key-puzzle.svg +1 -0
  56. package/assets/icons/duotone/duotone-languages.svg +1 -0
  57. package/assets/icons/duotone/duotone-magnifying-glass.svg +1 -0
  58. package/assets/icons/duotone/duotone-medal.svg +1 -0
  59. package/assets/icons/duotone/duotone-network.svg +1 -0
  60. package/assets/icons/duotone/duotone-nim-phone.svg +1 -0
  61. package/assets/icons/duotone/duotone-nimiq-environment.svg +1 -0
  62. package/assets/icons/duotone/duotone-no-chargeback.svg +1 -0
  63. package/assets/icons/duotone/duotone-oasis-puzzle.svg +1 -0
  64. package/assets/icons/duotone/duotone-paper-plane.svg +1 -0
  65. package/assets/icons/duotone/duotone-peer-to-peer.svg +1 -0
  66. package/assets/icons/duotone/duotone-pin-with-shadow.svg +1 -0
  67. package/assets/icons/duotone/duotone-safe-lock.svg +1 -0
  68. package/assets/icons/duotone/duotone-smart-contract.svg +1 -0
  69. package/assets/icons/duotone/duotone-sparkling-swap.svg +1 -0
  70. package/assets/icons/duotone/duotone-speedmeter.svg +1 -0
  71. package/assets/icons/duotone/duotone-staking-ripple.svg +1 -0
  72. package/assets/icons/duotone/duotone-successful-sequence.svg +1 -0
  73. package/assets/icons/duotone/duotone-three-hands-hexagon.svg +1 -0
  74. package/assets/icons/nimiq-flags.json +1274 -0
  75. package/assets/icons/nimiq-icons.json +1631 -0
  76. package/assets/img/bg-hexagons.svg +1 -0
  77. package/assets/img/cpl-preview.webp +0 -0
  78. package/assets/img/gods-light.webp +0 -0
  79. package/assets/img/iqons.min.svg +1 -0
  80. package/assets/img/multisig-preview.svg +1 -0
  81. package/assets/img/nimiq-pay-preview.webp +0 -0
  82. package/assets/img/nimiq-wallet-preview.webp +0 -0
  83. package/assets/img/world-map.svg +1 -0
  84. package/assets/logos/nimiq-icons-logos/logos-bitcoin-mono.svg +1 -0
  85. package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline-mono.svg +1 -0
  86. package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline.svg +1 -0
  87. package/assets/logos/nimiq-icons-logos/logos-bitcoin.svg +1 -0
  88. package/assets/logos/nimiq-icons-logos/logos-colones-outline-mono.svg +1 -0
  89. package/assets/logos/nimiq-icons-logos/logos-colones-outline.svg +1 -0
  90. package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal-mono.svg +1 -0
  91. package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal.svg +1 -0
  92. package/assets/logos/nimiq-icons-logos/logos-cpl-tag-mono.svg +1 -0
  93. package/assets/logos/nimiq-icons-logos/logos-cpl-tag.svg +1 -0
  94. package/assets/logos/nimiq-icons-logos/logos-cpl-white-horizontal.svg +1 -0
  95. package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal-mono.svg +1 -0
  96. package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal.svg +1 -0
  97. package/assets/logos/nimiq-icons-logos/logos-crypto-map-mono.svg +1 -0
  98. package/assets/logos/nimiq-icons-logos/logos-crypto-map-white-horizontal.svg +1 -0
  99. package/assets/logos/nimiq-icons-logos/logos-crypto-map.svg +1 -0
  100. package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal-mono.svg +1 -0
  101. package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal.svg +1 -0
  102. package/assets/logos/nimiq-icons-logos/logos-cryptocity-mono.svg +1 -0
  103. package/assets/logos/nimiq-icons-logos/logos-cryptocity-white-horizontal.svg +1 -0
  104. package/assets/logos/nimiq-icons-logos/logos-cryptocity.svg +1 -0
  105. package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal-mono.svg +1 -0
  106. package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal.svg +1 -0
  107. package/assets/logos/nimiq-icons-logos/logos-developer-center-white-horizontal.svg +1 -0
  108. package/assets/logos/nimiq-icons-logos/logos-discord-mono.svg +1 -0
  109. package/assets/logos/nimiq-icons-logos/logos-discord.svg +1 -0
  110. package/assets/logos/nimiq-icons-logos/logos-ethereum-mono.svg +1 -0
  111. package/assets/logos/nimiq-icons-logos/logos-ethereum.svg +1 -0
  112. package/assets/logos/nimiq-icons-logos/logos-euro-outline-mono.svg +1 -0
  113. package/assets/logos/nimiq-icons-logos/logos-euro-outline.svg +1 -0
  114. package/assets/logos/nimiq-icons-logos/logos-facebook-mono.svg +1 -0
  115. package/assets/logos/nimiq-icons-logos/logos-facebook.svg +1 -0
  116. package/assets/logos/nimiq-icons-logos/logos-fm-horizontal-mono.svg +1 -0
  117. package/assets/logos/nimiq-icons-logos/logos-fm-horizontal.svg +1 -0
  118. package/assets/logos/nimiq-icons-logos/logos-fm-mono.svg +1 -0
  119. package/assets/logos/nimiq-icons-logos/logos-fm-white-horizontal.svg +1 -0
  120. package/assets/logos/nimiq-icons-logos/logos-fm.svg +1 -0
  121. package/assets/logos/nimiq-icons-logos/logos-github-mono.svg +1 -0
  122. package/assets/logos/nimiq-icons-logos/logos-github.svg +1 -0
  123. package/assets/logos/nimiq-icons-logos/logos-gmaps-pin-mono.svg +1 -0
  124. package/assets/logos/nimiq-icons-logos/logos-gmaps-pin.svg +1 -0
  125. package/assets/logos/nimiq-icons-logos/logos-instagram-mono.svg +1 -0
  126. package/assets/logos/nimiq-icons-logos/logos-instagram.svg +1 -0
  127. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-mono.svg +1 -0
  128. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline-mono.svg +1 -0
  129. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline.svg +1 -0
  130. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin.svg +1 -0
  131. package/assets/logos/nimiq-icons-logos/logos-multisig-mono.svg +1 -0
  132. package/assets/logos/nimiq-icons-logos/logos-multisig.svg +1 -0
  133. package/assets/logos/nimiq-icons-logos/logos-nimiq-forum-mono.svg +1 -0
  134. package/assets/logos/nimiq-icons-logos/logos-nimiq-forum.svg +1 -0
  135. package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline-mono.svg +1 -0
  136. package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline.svg +1 -0
  137. package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal-mono.svg +1 -0
  138. package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal.svg +1 -0
  139. package/assets/logos/nimiq-icons-logos/logos-nimiq-mono.svg +1 -0
  140. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal-mono.svg +1 -0
  141. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal.svg +1 -0
  142. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical-mono.svg +1 -0
  143. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical.svg +1 -0
  144. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-white-horizontal.svg +1 -0
  145. package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical-mono.svg +1 -0
  146. package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical.svg +1 -0
  147. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal-mono.svg +1 -0
  148. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal.svg +1 -0
  149. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-white-horizontal.svg +1 -0
  150. package/assets/logos/nimiq-icons-logos/logos-nimiq-white-horizontal.svg +1 -0
  151. package/assets/logos/nimiq-icons-logos/logos-nimiq-white-vertical.svg +1 -0
  152. package/assets/logos/nimiq-icons-logos/logos-nimiq.svg +1 -0
  153. package/assets/logos/nimiq-icons-logos/logos-reddit-mono.svg +1 -0
  154. package/assets/logos/nimiq-icons-logos/logos-reddit.svg +1 -0
  155. package/assets/logos/nimiq-icons-logos/logos-shiny-nim-mono.svg +1 -0
  156. package/assets/logos/nimiq-icons-logos/logos-shiny-nim.svg +1 -0
  157. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-mono.svg +1 -0
  158. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text-mono.svg +1 -0
  159. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text.svg +1 -0
  160. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap.svg +1 -0
  161. package/assets/logos/nimiq-icons-logos/logos-telegram-mono.svg +1 -0
  162. package/assets/logos/nimiq-icons-logos/logos-telegram.svg +1 -0
  163. package/assets/logos/nimiq-icons-logos/logos-twitter-mono.svg +1 -0
  164. package/assets/logos/nimiq-icons-logos/logos-twitter.svg +1 -0
  165. package/assets/logos/nimiq-icons-logos/logos-usd-outline-mono.svg +1 -0
  166. package/assets/logos/nimiq-icons-logos/logos-usd-outline.svg +1 -0
  167. package/assets/logos/nimiq-icons-logos/logos-usdc-mono.svg +1 -0
  168. package/assets/logos/nimiq-icons-logos/logos-usdc.svg +1 -0
  169. package/assets/logos/nimiq-icons-logos/logos-usdt-mono.svg +1 -0
  170. package/assets/logos/nimiq-icons-logos/logos-usdt.svg +1 -0
  171. package/assets/logos/nimiq-icons-logos/logos-youtube-mono.svg +1 -0
  172. package/assets/logos/nimiq-icons-logos/logos-youtube.svg +1 -0
  173. package/assets/logos/official/black/nimiq_logo_black_horizontal.svg +1 -0
  174. package/assets/logos/official/black/nimiq_logo_black_vertical.svg +1 -0
  175. package/assets/logos/official/black/nimiq_signet_black_16x16.svg +1 -0
  176. package/assets/logos/official/black/nimiq_signet_black_32x32.svg +1 -0
  177. package/assets/logos/official/black/nimiq_signet_black_64x64.svg +1 -0
  178. package/assets/logos/official/black/nimiq_signet_black_base_size.svg +1 -0
  179. package/assets/logos/official/colored/_extended/nimiq_keyguard.svg +1 -0
  180. package/assets/logos/official/colored/_extended/nimiq_miner.svg +1 -0
  181. package/assets/logos/official/colored/_extended/nimiq_safe.svg +1 -0
  182. package/assets/logos/official/colored/_extended/nimiq_shop.svg +1 -0
  183. package/assets/logos/official/colored/nimiq_logo_rgb_horizontal.svg +1 -0
  184. package/assets/logos/official/colored/nimiq_logo_rgb_vertical.svg +1 -0
  185. package/assets/logos/official/colored/nimiq_logo_rgb_white_horizontal.svg +1 -0
  186. package/assets/logos/official/colored/nimiq_logo_rgb_white_vertical.svg +1 -0
  187. package/assets/logos/official/colored/nimiq_signet_rgb_16x16.svg +1 -0
  188. package/assets/logos/official/colored/nimiq_signet_rgb_32x32.svg +1 -0
  189. package/assets/logos/official/colored/nimiq_signet_rgb_64x64.svg +1 -0
  190. package/assets/logos/official/colored/nimiq_signet_rgb_base_size.svg +1 -0
  191. package/assets/logos/official/nimiq-logo.min.svg +1 -0
  192. package/assets/logos/official/white/nimiq_logo_white_horizontal.svg +1 -0
  193. package/assets/logos/official/white/nimiq_logo_white_vertical.svg +1 -0
  194. package/assets/logos/official/white/nimiq_signet_white_16x16.svg +1 -0
  195. package/assets/logos/official/white/nimiq_signet_white_32x32.svg +1 -0
  196. package/assets/logos/official/white/nimiq_signet_white_64x64.svg +1 -0
  197. package/assets/logos/official/white/nimiq_signet_white_base_size.svg +1 -0
  198. package/assets/tokens.md +28 -0
  199. package/bin/nq.js +274 -0
  200. package/package.json +51 -0
  201. package/registry/components/account-header/meta.json +70 -0
  202. package/registry/components/account-list/meta.json +84 -0
  203. package/registry/components/account-ring/meta.json +48 -0
  204. package/registry/components/address-display/meta.json +22 -0
  205. package/registry/components/address-input/meta.json +24 -0
  206. package/registry/components/amount/meta.json +26 -0
  207. package/registry/components/amount-input/meta.json +25 -0
  208. package/registry/components/amount-with-fee/meta.json +25 -0
  209. package/registry/components/app-showcase-card/meta.json +24 -0
  210. package/registry/components/backup-banner/meta.json +15 -0
  211. package/registry/components/balance-distribution/meta.json +20 -0
  212. package/registry/components/buttons/meta.json +22 -0
  213. package/registry/components/card/meta.json +18 -0
  214. package/registry/components/close-button/meta.json +18 -0
  215. package/registry/components/consensus-icon/meta.json +20 -0
  216. package/registry/components/copyable/meta.json +20 -0
  217. package/registry/components/fiat-amount/meta.json +24 -0
  218. package/registry/components/hero-section/meta.json +56 -0
  219. package/registry/components/honeycomb-band/meta.json +30 -0
  220. package/registry/components/identicon/meta.json +38 -0
  221. package/registry/components/label-input/meta.json +24 -0
  222. package/registry/components/loading-spinner/meta.json +18 -0
  223. package/registry/components/page-body/meta.json +18 -0
  224. package/registry/components/page-footer/meta.json +18 -0
  225. package/registry/components/page-header/meta.json +23 -0
  226. package/registry/components/payment-info-line/meta.json +97 -0
  227. package/registry/components/price-chart/meta.json +21 -0
  228. package/registry/components/qr-code/meta.json +60 -0
  229. package/registry/components/search-bar/meta.json +20 -0
  230. package/registry/components/select-bar/meta.json +22 -0
  231. package/registry/components/slider-toggle/meta.json +23 -0
  232. package/registry/components/small-page/meta.json +18 -0
  233. package/registry/components/status-alert/meta.json +22 -0
  234. package/registry/components/status-screen/meta.json +27 -0
  235. package/registry/components/swap-balance-bar/meta.json +97 -0
  236. package/registry/components/timer/meta.json +25 -0
  237. package/registry/components/toast-notification/meta.json +24 -0
  238. package/registry/components/tooltip/meta.json +28 -0
  239. package/registry/components/transaction-list/meta.json +48 -0
  240. package/registry/index.json +394 -0
  241. package/scripts/snap.mjs +42 -0
  242. package/scripts/verify.mjs +76 -0
@@ -0,0 +1,632 @@
1
+ :root {
2
+ --unit: 1em;
3
+
4
+ /*
5
+ The children of `.nq-prose` will have font-sizes and margins proportional fluid value depending on the value that
6
+ the element has.
7
+ For example, if we set `font-size: 24px` to `.nq-prose`:
8
+ - h1: will have (3 * 24)px for desktop and (2.75 * 24)px for mobile
9
+ - p: will have (24)px for desktop and (2.75 * 24)px for mobile
10
+ */
11
+ --nq-screen-width-min-lh: 20;
12
+ --nq-screen-width-max-lh: 72;
13
+ --f-screen-range-lh: calc(var(--nq-screen-width-max-lh) - var(--nq-screen-width-min-lh));
14
+ --nq-screen-width-min-em: 20;
15
+ --nq-screen-width-max-em: 72;
16
+ --f-screen-range-em: calc(var(--nq-screen-width-max-em) - var(--nq-screen-width-min-em));
17
+ --font-size-min-em: 1;
18
+ --font-size-max-em: 1;
19
+ --margin-min-lh: 0;
20
+ --margin-max-lh: 0;
21
+ }
22
+
23
+ /**
24
+ * Make sure to import also nimiq-colors layer found in this package
25
+ **/
26
+ .nq-prose,
27
+ [nq-prose],
28
+ .nq-prose-compact,
29
+ [nq-prose-compact] {
30
+ font-size: 1rem;
31
+ /* Default font-size */
32
+ margin-trim: block;
33
+
34
+ &:not(:where(.nq-prose-compact, [nq-prose-compact])) {
35
+ > *:not(
36
+ :where(
37
+ .nq-raw,
38
+ .nq-raw *,
39
+ .nq-not-prose,
40
+ .nq-not-prose *,
41
+ .shiki *,
42
+ img,
43
+ video,
44
+ iframe,
45
+ figure,
46
+ blockquote,
47
+ pre,
48
+ code
49
+ )
50
+ ) {
51
+ padding-right: 0;
52
+ padding-left: 0;
53
+
54
+ &:last-child {
55
+ padding-bottom: 6rem;
56
+
57
+ @media (min-width: 1153px) {
58
+ padding-bottom: 8rem;
59
+ }
60
+ }
61
+ }
62
+
63
+ > :where(img, video, iframe, figure, blockquote, pre, code) {
64
+ padding-right: 2rem;
65
+ padding-left: 2rem;
66
+
67
+ &:last-child {
68
+ padding-bottom: 6rem;
69
+
70
+ @media (min-width: 1153px) {
71
+ padding-bottom: 8rem;
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ * {
78
+ --lh-unit: 1lh;
79
+ --f-factor-margin: calc((100vw - (var(--lh-unit) * var(--nq-screen-width-min-lh))) / var(--f-screen-range-lh));
80
+ --f-factor: calc((100vw - (var(--unit) * var(--nq-screen-width-min-em))) / var(--f-screen-range-em));
81
+
82
+ /* Margin calculation */
83
+ --nq-m-range: calc(var(--margin-max-lh) - var(--margin-min-lh));
84
+ --nq-m-fluid: calc(var(--lh-unit) * var(--margin-min-lh) + var(--nq-m-range) * var(--f-factor-margin));
85
+ --nq-m-size: clamp(
86
+ calc(var(--lh-unit) * var(--margin-min-lh)),
87
+ var(--nq-m-fluid),
88
+ calc(var(--margin-max-lh) * var(--lh-unit))
89
+ );
90
+
91
+ /* derived values */
92
+ --font-size-range: calc(var(--font-size-max-em) - var(--font-size-min-em));
93
+ --tp-font-size-fluid: calc(var(--unit) * var(--font-size-min-em) + var(--font-size-range) * var(--f-factor));
94
+ --tp-font-size: clamp(
95
+ var(--unit) * var(--font-size-min-em),
96
+ var(--tp-font-size-fluid),
97
+ var(--unit) * var(--font-size-max-em)
98
+ );
99
+ font-size: var(--tp-font-size);
100
+ }
101
+
102
+ > *:first-child {
103
+ margin-top: 0;
104
+ /* TODO Remove margin-top and margin-bottom on last element when margin-trim is widely supported */
105
+ }
106
+
107
+ > *:last-child {
108
+ margin-bottom: 0;
109
+ }
110
+
111
+ *:not(:where(.nq-raw, .nq-raw *, .nq-not-prose, .nq-not-prose *, .shiki *)) {
112
+ line-height: 1.5;
113
+ max-width: var(--nq-prose-max-width, 78ch);
114
+ margin-left: auto;
115
+ margin-right: auto;
116
+ font-family: var(--nq-font-sans, 'Mulish');
117
+
118
+ &:where(h1) {
119
+ --font-size-min-em: 2.25;
120
+ --font-size-max-em: 2.5;
121
+ line-height: 1.5;
122
+ font-weight: 700;
123
+ }
124
+
125
+ &:where(h1 + *:not(:where(h1, h2, h3, h4))) {
126
+ --margin-min-lh: 4.6667;
127
+ --margin-max-lh: 5;
128
+ margin-top: var(--nq-m-size);
129
+ }
130
+
131
+ &:where(h2) {
132
+ --font-size-min-em: 1.75;
133
+ --font-size-max-em: 2;
134
+ line-height: 1.3;
135
+ font-weight: 700;
136
+
137
+ margin-top: 2lh;
138
+ margin-bottom: 24px;
139
+ --margin-min-lh: 4.2308;
140
+ --margin-max-lh: 4.6154;
141
+
142
+ &:where(h1 + h2) {
143
+ --margin-min-lh: 1.9231;
144
+ --margin-max-lh: 2.3077;
145
+ }
146
+ }
147
+
148
+ &:where(h3) {
149
+ --font-size-min-em: 1.4;
150
+ --font-size-max-em: 1.625;
151
+ line-height: 1.3;
152
+ font-weight: 700;
153
+
154
+ margin-bottom: 24px;
155
+ margin-top: 1.7lh;
156
+ --margin-min-lh: 4.2308;
157
+ --margin-max-lh: 4.6154;
158
+
159
+ &:where(h2 + h3) {
160
+ --margin-min-lh: 1.5385;
161
+ --margin-max-lh: 1.7308;
162
+ }
163
+ }
164
+
165
+ &:where(h4) {
166
+ --font-size-min-em: 1.25;
167
+ --font-size-max-em: 1.4;
168
+ line-height: 1.3;
169
+ font-weight: 700;
170
+
171
+ margin-top: 1.4lh;
172
+ margin-bottom: 24px;
173
+ --margin-min-lh: 4.2308;
174
+ --margin-max-lh: 4.6154;
175
+ }
176
+
177
+ &:where(h3 + h4) {
178
+ --margin-min-lh: 1.5385;
179
+ --margin-max-lh: 1.7308;
180
+ margin-top: 1.2lh;
181
+ }
182
+
183
+ &:where(h5) {
184
+ --font-size-min-em: 1.125;
185
+ --font-size-max-em: 1.25;
186
+ line-height: 1.3;
187
+ font-weight: 700;
188
+
189
+ margin-top: 1.2lh;
190
+ margin-bottom: 24px;
191
+ --margin-min-lh: 4.2308;
192
+ --margin-max-lh: 4.6154;
193
+ }
194
+
195
+ &:where(h6) {
196
+ --font-size-min-em: 1;
197
+ --font-size-max-em: 1.125;
198
+ line-height: 1.3;
199
+ font-weight: 700;
200
+
201
+ margin-top: 1.2lh;
202
+ margin-bottom: 24px;
203
+ --margin-min-lh: 4.2308;
204
+ --margin-max-lh: 4.6154;
205
+ }
206
+
207
+ /* Anchors in headings */
208
+ &:where(h1, h2, h3, h4, h5, h6)[id] {
209
+ position: relative;
210
+ margin-left: -1.25rem;
211
+ padding-left: 1rem;
212
+ padding-right: 1rem;
213
+ width: 100%;
214
+ min-height: 1em;
215
+ color: var(--colors-neutral);
216
+
217
+ &::after {
218
+ content: '#';
219
+ opacity: 0;
220
+ position: absolute;
221
+ z-index: 1;
222
+ top: 0;
223
+ left: 0;
224
+ height: 100%;
225
+ transition: 50ms opacity var(--nq-ease, ease-in-out);
226
+ pointer-events: none;
227
+ }
228
+
229
+ @media (min-width: 769px) {
230
+ :where(&, &::after):hover {
231
+ &::after {
232
+ opacity: 0.5;
233
+ }
234
+ }
235
+ }
236
+
237
+ &:has(a:focus-visible) {
238
+ outline: 0.125rem solid var(--colors-blue);
239
+ outline-offset: 0.125rem;
240
+ }
241
+
242
+ > a {
243
+ position: absolute;
244
+ inset: 0;
245
+ padding-left: 20px;
246
+ font-size: inherit;
247
+ font-weight: inherit;
248
+ top: -6px;
249
+ color: var(--colors-neutral);
250
+
251
+ &::after {
252
+ position: absolute;
253
+ inset: 0;
254
+ }
255
+ }
256
+ }
257
+
258
+ &:where(p) {
259
+ margin-top: 0;
260
+ margin-bottom: 0;
261
+ line-height: 1.5;
262
+ --font-size-min-em: 0.9;
263
+ --font-size-max-em: 1;
264
+
265
+ & + p {
266
+ margin-top: 16px;
267
+ }
268
+ }
269
+
270
+ &:where(figure) {
271
+ figcaption {
272
+ color: var(--colors-neutral-700);
273
+ --font-size-min-em: 0.75;
274
+ --font-size-max-em: 0.875;
275
+ font-weight: 700;
276
+ line-height: 1.3125;
277
+ padding: 16px;
278
+
279
+ :where(.dark, [data-theme='dark']) & {
280
+ color: color-mix(in oklch, var(--colors-white) 80%, transparent);
281
+ }
282
+ }
283
+ }
284
+
285
+ &:where(blockquote) {
286
+ background: var(--colors-green-400);
287
+ --margin-min-em: 1.5;
288
+ --margin-max-em: 2;
289
+ margin-top: var(--nq-m-size);
290
+ margin-bottom: var(--nq-m-size);
291
+ margin-left: -8px;
292
+ margin-right: -8px;
293
+ padding: 1em;
294
+ border-radius: 6px;
295
+ box-shadow: 0 0 0 1.5px var(--colors-green-600);
296
+ font-weight: 600;
297
+ width: calc(100% + 16px);
298
+ box-sizing: border-box;
299
+ --font-size-min-em: 0.75;
300
+ --font-size-max-em: 0.875;
301
+
302
+ @media (min-width: 768px) {
303
+ margin-left: 0;
304
+ margin-right: 0;
305
+ width: 100%;
306
+ }
307
+
308
+ p {
309
+ line-height: 1.3;
310
+ margin: 0;
311
+ }
312
+
313
+ > *:not(:first-child) {
314
+ margin-top: 0.75lh;
315
+ }
316
+
317
+ code,
318
+ pre {
319
+ background-color: var(--colors-green-600);
320
+ color: var(--colors-green-1100);
321
+ }
322
+ }
323
+
324
+ &:where(img, video, iframe) {
325
+ border-radius: 6px;
326
+ --margin-min-lh: 0.75;
327
+ --margin-max-lh: 0.9167;
328
+ margin-top: var(--nq-m-size);
329
+
330
+ &:has(+ figcaption) {
331
+ --margin-min-lh: 0.5;
332
+ --margin-max-lh: 0.6667;
333
+ margin-bottom: var(--nq-m-size);
334
+ }
335
+
336
+ &:not(:has(+ figcaption)) {
337
+ --margin-min-lh: 0.75;
338
+ --margin-max-lh: 0.9167;
339
+ margin-bottom: var(--nq-m-size);
340
+ }
341
+ }
342
+
343
+ article &:where(img) {
344
+ background-color: white;
345
+ }
346
+
347
+ /* Rules to use a wider container (8px on the sides). Mainly for phones */
348
+ &:where(img, video, iframe, table),
349
+ /* Select code and pre that are not child of p,ul,ol... */
350
+ &:where(code, pre):not(:where(:where(p, ul, ol, pre, code, table) :where(pre, code))) {
351
+ margin-left: -1.5rem;
352
+ width: min(calc(100% + 3rem), 700px);
353
+
354
+ @media (min-width: 768px) {
355
+ margin-left: 0;
356
+ width: 100%;
357
+ max-width: 100%;
358
+ }
359
+ }
360
+
361
+ &:where(ul) {
362
+ list-style: none;
363
+ margin-top: 24px;
364
+ margin-bottom: 24px;
365
+
366
+ li {
367
+ display: block;
368
+ position: relative;
369
+ margin: 16px 0 16px 20px;
370
+
371
+ > ol li {
372
+ margin-left: 0;
373
+ }
374
+
375
+ :not(ul ol) &::before {
376
+ content: '';
377
+ width: 6px;
378
+ height: 6px;
379
+ border-radius: 3px;
380
+ background-color: currentColor;
381
+ opacity: 0.2;
382
+ display: inline-block;
383
+ margin-right: 12px;
384
+ position: absolute;
385
+ left: -20px;
386
+ top: 8px;
387
+ }
388
+ }
389
+ }
390
+
391
+ &:where(ol) {
392
+ list-style: none;
393
+ counter-reset: item;
394
+ margin-top: 24px;
395
+ margin-bottom: 24px;
396
+
397
+ li {
398
+ counter-increment: item;
399
+ position: relative;
400
+ margin: 16px 0 16px 20px;
401
+
402
+ > ol {
403
+ counter-reset: subitem;
404
+
405
+ li {
406
+ counter-increment: subitem;
407
+
408
+ &::before {
409
+ content: counters(item, '.') '.' counter(subitem);
410
+ top: 0;
411
+ left: -32px;
412
+ }
413
+ }
414
+ }
415
+
416
+ &::before {
417
+ content: counters(item, '.');
418
+ font-weight: 700;
419
+ display: inline-block;
420
+ margin-right: 12px;
421
+ position: absolute;
422
+ left: -20px;
423
+ color: currentColor;
424
+ opacity: 0.5;
425
+ top: 2px;
426
+ }
427
+ }
428
+ }
429
+
430
+ :where(ol, ul) ol,
431
+ ul ul {
432
+ margin-top: 8px;
433
+ margin-bottom: 16px;
434
+ padding-left: 8px;
435
+
436
+ li {
437
+ margin-top: 0;
438
+ margin-left: 12px;
439
+ }
440
+ }
441
+
442
+ &:where(code, pre, kbd, pre *, code *) {
443
+ font-family: var(--nq-font-mono, 'Fira Code');
444
+ /* font-size-adjust: from-font;
445
+ TODO
446
+ Remove all font-sizes for Fira Code and instead using font-size-adjust to adjust the font-size to the parent element.
447
+ https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust
448
+ */
449
+ }
450
+
451
+ &:where(code) {
452
+ --font-size-min-em: 0.75;
453
+ --font-size-max-em: 0.875;
454
+ border-radius: 4px;
455
+ }
456
+
457
+ :where(:where(h1, h2, h3, h4, h5, h6, p, li, span, a) > code) {
458
+ padding: 0 0.15em;
459
+ line-height: inherit;
460
+ vertical-align: baseline;
461
+ }
462
+
463
+ &:where(pre) {
464
+ width: 100%;
465
+ --font-size-min-em: 0.75;
466
+ --font-size-max-em: 0.875;
467
+ --margin-min-lh: 0.8333;
468
+ --margin-max-lh: 1;
469
+ margin-top: var(--nq-m-size);
470
+ margin-bottom: var(--nq-m-size);
471
+ padding: 20px 24px;
472
+ border-radius: 6px;
473
+ outline: 1.5px solid color-mix(in oklch, var(--colors-neutral) 8%, transparent);
474
+ }
475
+
476
+ kbd {
477
+ padding: 0.25em 0.125em;
478
+ --font-size-min: 0.75;
479
+ --font-size-max: 0.875;
480
+ color: var(--colors-neutral-800);
481
+ background-color: var(--colors-neutral-200);
482
+ border-radius: 0.25em;
483
+ box-shadow: 0 0 0 1px var(--colors-neutral-400);
484
+ margin: 0 0.25em -0.25em 0.25em;
485
+ white-space: nowrap;
486
+ line-height: 1;
487
+ }
488
+
489
+ &:where(pre, code):where(h1, h2, h3, h4 &) {
490
+ font-size: 0.8em;
491
+ padding: 2px 0.5rem;
492
+ position: relative;
493
+ top: -1px;
494
+ }
495
+
496
+ &:where(a) {
497
+ text-decoration: none;
498
+ color: var(--colors-blue);
499
+ font-weight: 600;
500
+
501
+ code {
502
+ font-weight: 400;
503
+ }
504
+ }
505
+
506
+ table {
507
+ --margin-min-lh: 1;
508
+ --margin-max-lh: 1.3333;
509
+ margin-bottom: var(--nq-m-size);
510
+ margin-top: var(--nq-m-size);
511
+ display: block;
512
+ overflow-x: auto;
513
+ border-spacing: 0;
514
+ border-collapse: separate;
515
+ border-radius: 6px;
516
+ border: 1px solid var(--colors-neutral-300);
517
+ max-height: 90dvh;
518
+ max-width: max-content;
519
+ scroll-behavior: smooth;
520
+
521
+ code,
522
+ pre {
523
+ --line-height: 1.3;
524
+ padding: 4px 0.25rem;
525
+ position: relative;
526
+ }
527
+
528
+ th,
529
+ td {
530
+ padding: 12px 0.75rem;
531
+ }
532
+
533
+ thead th {
534
+ z-index: 1;
535
+ position: sticky;
536
+ top: -1px;
537
+ text-wrap: balance;
538
+ white-space: nowrap;
539
+ font-weight: 400;
540
+ color: var(--colors-neutral-800);
541
+ background-color: var(--colors-neutral-100);
542
+ }
543
+
544
+ tbody {
545
+ td {
546
+ vertical-align: initial;
547
+ text-wrap: balance;
548
+ }
549
+
550
+ > tr:not(:last-child) td {
551
+ border-bottom: 1px solid var(--colors-neutral-300);
552
+ }
553
+ }
554
+
555
+ /* Apply a border to the right of all but the last column */
556
+ th:not(:last-child),
557
+ td:not(:last-child) {
558
+ border-right: 1px solid var(--colors-neutral-300);
559
+ }
560
+ }
561
+
562
+ hr {
563
+ --margin-min-lh: 0.8333;
564
+ --margin-max-lh: 1;
565
+ margin: var(--nq-m-size) auto;
566
+ width: 128px;
567
+ border-color: var(--colors-neutral-500);
568
+ }
569
+
570
+ details {
571
+ /* TODO Animate open/closing https://developer.chrome.com/docs/css-ui/animate-to-height-auto#animate_the_details_element */
572
+ border-radius: 6px;
573
+ background-color: var(--colors-neutral-200);
574
+ --margin-min-lh: 0.75;
575
+ --margin-max-lh: 0.9167;
576
+ margin-top: var(--nq-m-size);
577
+ margin-bottom: var(--nq-m-size);
578
+ color: var(--colors-neutral-900);
579
+ box-shadow: 0 0 0 1.5px color-mix(in oklch, var(--colors-neutral) 10%, transparent);
580
+
581
+ ::marker {
582
+ color: transparent;
583
+ }
584
+
585
+ summary {
586
+ padding: 14px 2rem 14px calc(0.7rem + 2.3em);
587
+ --font-size-min-em: 0.9;
588
+ --font-size-max-em: 1;
589
+ position: relative;
590
+ display: flex;
591
+ align-items: center;
592
+ cursor: pointer;
593
+
594
+ &::before {
595
+ content: '';
596
+ --icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTIgMTIiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTIgMS40MTNBLjguOCAwIDAxMy4yMTIuNzI3bDcuNjQ1IDQuNTg3YS44LjggMCAwMTAgMS4zNzJsLTcuNjQ1IDQuNTg3QS44LjggMCAwMTIgMTAuNTg3eiIvPjwvc3ZnPg==);
597
+ -webkit-mask: var(--icon) no-repeat;
598
+ mask: var(--icon) no-repeat;
599
+ -webkit-mask-size: 100% 100%;
600
+ mask-size: 100% 100%;
601
+ background-color: currentColor;
602
+ color: inherit;
603
+ width: 0.622em;
604
+ height: 0.622em;
605
+ transition: transform 100ms ease-out;
606
+ display: inline-block;
607
+ position: absolute;
608
+ left: 0;
609
+ padding-left: 4rem;
610
+ }
611
+ }
612
+
613
+ &[open] summary {
614
+ &::before {
615
+ transform: rotate(90deg);
616
+ }
617
+ }
618
+
619
+ > *:not(summary) {
620
+ padding: 0 1rem 14px 1rem;
621
+ }
622
+
623
+ p {
624
+ margin: 0.75lh;
625
+ }
626
+
627
+ &[open] p {
628
+ margin: 0.75lh;
629
+ }
630
+ }
631
+ }
632
+ }