splatoon-ui 0.1.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 (351) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +5 -0
  3. package/README.md +233 -0
  4. package/README_EN.md +236 -0
  5. package/README_JA.md +230 -0
  6. package/dist/chunk-KUURJUBW.js +2344 -0
  7. package/dist/chunk-KUURJUBW.js.map +1 -0
  8. package/dist/client.css +2634 -0
  9. package/dist/client.css.map +1 -0
  10. package/dist/client.d.ts +1012 -0
  11. package/dist/client.js +7708 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/server.css +1091 -0
  14. package/dist/server.css.map +1 -0
  15. package/dist/server.d.ts +813 -0
  16. package/dist/server.js +117 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/styles.css +4225 -0
  19. package/package.json +119 -0
  20. package/public/_images/backgrounds/base-bg-pattern-2x.jpg +0 -0
  21. package/public/_images/backgrounds/base-bg-pattern.jpg +0 -0
  22. package/public/_images/backgrounds/camo-black-2x.png +0 -0
  23. package/public/_images/backgrounds/camo-black-2x.webp +0 -0
  24. package/public/_images/backgrounds/camo-black.png +0 -0
  25. package/public/_images/backgrounds/camo-green-2x.png +0 -0
  26. package/public/_images/backgrounds/camo-green.png +0 -0
  27. package/public/_images/backgrounds/camo-orange-2x.png +0 -0
  28. package/public/_images/backgrounds/camo-orange.png +0 -0
  29. package/public/_images/backgrounds/camo-purple-2x.png +0 -0
  30. package/public/_images/backgrounds/camo-purple-revised-2x.png +0 -0
  31. package/public/_images/backgrounds/camo-purple-revised.png +0 -0
  32. package/public/_images/backgrounds/camo-purple.png +0 -0
  33. package/public/_images/backgrounds/camo-red-2x.png +0 -0
  34. package/public/_images/backgrounds/camo-red.png +0 -0
  35. package/public/_images/backgrounds/camo-white-2x.png +0 -0
  36. package/public/_images/backgrounds/camo-white-outline-2x.png +0 -0
  37. package/public/_images/backgrounds/camo-white-outline.png +0 -0
  38. package/public/_images/backgrounds/camo-white.png +0 -0
  39. package/public/_images/backgrounds/chip-white-2x.png +0 -0
  40. package/public/_images/backgrounds/chip-white.png +0 -0
  41. package/public/_images/backgrounds/circles-green-2x.png +0 -0
  42. package/public/_images/backgrounds/circles-green.png +0 -0
  43. package/public/_images/backgrounds/graffiti-2x.jpg +0 -0
  44. package/public/_images/backgrounds/graffiti-medium-up-2x.jpg +0 -0
  45. package/public/_images/backgrounds/graffiti-medium-up.jpg +0 -0
  46. package/public/_images/backgrounds/graffiti.jpg +0 -0
  47. package/public/_images/backgrounds/hardware-background-2x.png +0 -0
  48. package/public/_images/backgrounds/hardware-background-medium-up-2x.png +0 -0
  49. package/public/_images/backgrounds/hardware-background-medium-up.png +0 -0
  50. package/public/_images/backgrounds/hardware-background.png +0 -0
  51. package/public/_images/backgrounds/monsters-black-2x.png +0 -0
  52. package/public/_images/backgrounds/monsters-black.png +0 -0
  53. package/public/_images/backgrounds/octo-black-2x.png +0 -0
  54. package/public/_images/backgrounds/octo-black.png +0 -0
  55. package/public/_images/backgrounds/octo-red-2x.png +0 -0
  56. package/public/_images/backgrounds/octo-red.png +0 -0
  57. package/public/_images/backgrounds/octoarrow-green-2x.png +0 -0
  58. package/public/_images/backgrounds/octoarrow-green.png +0 -0
  59. package/public/_images/backgrounds/octoarrow-orange-2x.png +0 -0
  60. package/public/_images/backgrounds/octoarrow-orange.png +0 -0
  61. package/public/_images/backgrounds/squid-black-2x.png +0 -0
  62. package/public/_images/backgrounds/squid-black.png +0 -0
  63. package/public/_images/backgrounds/tapes-black-2x.jpg +0 -0
  64. package/public/_images/backgrounds/tapes-black-2x.webp +0 -0
  65. package/public/_images/backgrounds/tapes-black.jpg +0 -0
  66. package/public/_images/backgrounds/tapes-black.webp +0 -0
  67. package/public/_images/backgrounds/tapes-green-2x.jpg +0 -0
  68. package/public/_images/backgrounds/tapes-green-2x.webp +0 -0
  69. package/public/_images/backgrounds/tapes-green.jpg +0 -0
  70. package/public/_images/backgrounds/tapes-green.webp +0 -0
  71. package/public/_images/backgrounds/tapes-pattern-2x.jpg +0 -0
  72. package/public/_images/backgrounds/tapes-pattern.jpg +0 -0
  73. package/public/_images/backgrounds/tapes-purple-2x.jpg +0 -0
  74. package/public/_images/backgrounds/tapes-purple-2x.webp +0 -0
  75. package/public/_images/backgrounds/tapes-purple.jpg +0 -0
  76. package/public/_images/backgrounds/tapes-purple.webp +0 -0
  77. package/public/_images/banners/banner-blue-2x.png +0 -0
  78. package/public/_images/banners/banner-blue-medium-up-2x.png +0 -0
  79. package/public/_images/banners/banner-blue-medium-up.png +0 -0
  80. package/public/_images/banners/banner-blue.png +0 -0
  81. package/public/_images/banners/banner-design1-2x.png +0 -0
  82. package/public/_images/banners/banner-design1-medium-up-2x.png +0 -0
  83. package/public/_images/banners/banner-design1-medium-up.png +0 -0
  84. package/public/_images/banners/banner-design1.png +0 -0
  85. package/public/_images/banners/banner-design2-2x.png +0 -0
  86. package/public/_images/banners/banner-design2-medium-up-2x.png +0 -0
  87. package/public/_images/banners/banner-design2-medium-up.png +0 -0
  88. package/public/_images/banners/banner-design2.png +0 -0
  89. package/public/_images/banners/banner-design3-2x.png +0 -0
  90. package/public/_images/banners/banner-design3-medium-up-2x.png +0 -0
  91. package/public/_images/banners/banner-design3-medium-up.png +0 -0
  92. package/public/_images/banners/banner-design3.png +0 -0
  93. package/public/_images/banners/banner-green-2x.png +0 -0
  94. package/public/_images/banners/banner-green-medium-up-2x.png +0 -0
  95. package/public/_images/banners/banner-green-medium-up.png +0 -0
  96. package/public/_images/banners/banner-green.png +0 -0
  97. package/public/_images/banners/banner-orange-2x.png +0 -0
  98. package/public/_images/banners/banner-orange-medium-up-2x.png +0 -0
  99. package/public/_images/banners/banner-orange-medium-up.png +0 -0
  100. package/public/_images/banners/banner-orange.png +0 -0
  101. package/public/_images/banners/banner-purple-2x.png +0 -0
  102. package/public/_images/banners/banner-purple-medium-up-2x.png +0 -0
  103. package/public/_images/banners/banner-purple-medium-up.png +0 -0
  104. package/public/_images/banners/banner-purple.png +0 -0
  105. package/public/_images/banners/banner-red-2x.png +0 -0
  106. package/public/_images/banners/banner-red-medium-up-2x.png +0 -0
  107. package/public/_images/banners/banner-red-medium-up.png +0 -0
  108. package/public/_images/banners/banner-red.png +0 -0
  109. package/public/_images/banners/banner-yellow-2x.png +0 -0
  110. package/public/_images/banners/banner-yellow-medium-up-2x.png +0 -0
  111. package/public/_images/banners/banner-yellow-medium-up.png +0 -0
  112. package/public/_images/banners/banner-yellow.png +0 -0
  113. package/public/_images/characters/char-10.png +0 -0
  114. package/public/_images/characters/char-11.png +0 -0
  115. package/public/_images/characters/char-12.png +0 -0
  116. package/public/_images/characters/char-13.png +0 -0
  117. package/public/_images/characters/char-14.png +0 -0
  118. package/public/_images/characters/char-15.png +0 -0
  119. package/public/_images/characters/char-17.png +0 -0
  120. package/public/_images/characters/char-18.png +0 -0
  121. package/public/_images/characters/char-2.png +0 -0
  122. package/public/_images/characters/char-3.png +0 -0
  123. package/public/_images/characters/char-4.png +0 -0
  124. package/public/_images/characters/char-5.png +0 -0
  125. package/public/_images/characters/char-7.png +0 -0
  126. package/public/_images/characters/char-8.png +0 -0
  127. package/public/_images/characters/game-pack.png +0 -0
  128. package/public/_images/characters/salmonid.png +0 -0
  129. package/public/_images/events/active-splat-2x.webp +0 -0
  130. package/public/_images/events/active-splat.webp +0 -0
  131. package/public/_images/events/big-run-callout.jpg +0 -0
  132. package/public/_images/events/golden-egg.png +0 -0
  133. package/public/_images/events/splatnet-blade.jpg +0 -0
  134. package/public/_images/events/splatnet-next-page.png +0 -0
  135. package/public/_images/gameplay/battle-online/gameplay-battle-online-anarchy-1.jpg +0 -0
  136. package/public/_images/gameplay/battle-online/gameplay-battle-online-turfwar-left-screen.jpg +0 -0
  137. package/public/_images/gameplay/battle-online/gameplay-battle-online-turfwar-right-screen.jpg +0 -0
  138. package/public/_images/gameplay/gameplay-salmonrun.jpg +0 -0
  139. package/public/_images/gameplay/splatfest/gameplay-splatfest-1.jpg +0 -0
  140. package/public/_images/gameplay/splatfest/gameplay-splatfest-2.jpg +0 -0
  141. package/public/_images/home/character.png +0 -0
  142. package/public/_images/home/header-back.jpg +0 -0
  143. package/public/_images/home/s3-home-intro-blade.jpg +0 -0
  144. package/public/_images/news/news-staple-left.png +0 -0
  145. package/public/_images/news/news-staple-right.png +0 -0
  146. package/public/_images/news/next-page.png +0 -0
  147. package/public/_images/screenshots/video-trailer.jpg +0 -0
  148. package/public/_images/squid/ika.png +0 -0
  149. package/public/_images/squid/loader-morph-sprite.png +0 -0
  150. package/public/_images/squid/loader-swim-sprite.png +0 -0
  151. package/public/_images/squid/loader_ika.gif +0 -0
  152. package/public/_images/svg/icon-pagination.svg +1 -0
  153. package/public/_images/svg/left-black-tape-container.svg +1 -0
  154. package/public/_images/svg/left-tape.svg +9 -0
  155. package/public/_images/svg/left-yellow-tape-container.svg +1 -0
  156. package/public/_images/svg/pagination-splat.svg +1 -0
  157. package/public/_images/svg/paper-tear-down.svg +3 -0
  158. package/public/_images/svg/paper-tear-up.svg +3 -0
  159. package/public/_images/svg/right-black-tape-container.svg +1 -0
  160. package/public/_images/svg/right-tape.svg +10 -0
  161. package/public/_images/svg/right-yellow-tape-container.svg +1 -0
  162. package/public/_images/svg/styled-photo-background.svg +1 -0
  163. package/public/_images/tape-assets/sticker-1-2x.png +0 -0
  164. package/public/_images/tape-assets/sticker-1-2x.webp +0 -0
  165. package/public/_images/tape-assets/sticker-1-medium-up-2x.png +0 -0
  166. package/public/_images/tape-assets/sticker-1-medium-up-2x.webp +0 -0
  167. package/public/_images/tape-assets/sticker-1-medium-up.png +0 -0
  168. package/public/_images/tape-assets/sticker-1-medium-up.webp +0 -0
  169. package/public/_images/tape-assets/sticker-1.png +0 -0
  170. package/public/_images/tape-assets/sticker-1.webp +0 -0
  171. package/public/_images/tape-assets/sticker-10-2x.png +0 -0
  172. package/public/_images/tape-assets/sticker-10-2x.webp +0 -0
  173. package/public/_images/tape-assets/sticker-10-medium-up-2x.png +0 -0
  174. package/public/_images/tape-assets/sticker-10-medium-up-2x.webp +0 -0
  175. package/public/_images/tape-assets/sticker-10-medium-up.png +0 -0
  176. package/public/_images/tape-assets/sticker-10-medium-up.webp +0 -0
  177. package/public/_images/tape-assets/sticker-10.png +0 -0
  178. package/public/_images/tape-assets/sticker-10.webp +0 -0
  179. package/public/_images/tape-assets/sticker-11-2x.png +0 -0
  180. package/public/_images/tape-assets/sticker-11-2x.webp +0 -0
  181. package/public/_images/tape-assets/sticker-11-medium-up-2x.png +0 -0
  182. package/public/_images/tape-assets/sticker-11-medium-up-2x.webp +0 -0
  183. package/public/_images/tape-assets/sticker-11-medium-up.png +0 -0
  184. package/public/_images/tape-assets/sticker-11-medium-up.webp +0 -0
  185. package/public/_images/tape-assets/sticker-11.png +0 -0
  186. package/public/_images/tape-assets/sticker-11.webp +0 -0
  187. package/public/_images/tape-assets/sticker-12-2x.png +0 -0
  188. package/public/_images/tape-assets/sticker-12-2x.webp +0 -0
  189. package/public/_images/tape-assets/sticker-12-medium-up-2x.png +0 -0
  190. package/public/_images/tape-assets/sticker-12-medium-up-2x.webp +0 -0
  191. package/public/_images/tape-assets/sticker-12-medium-up.png +0 -0
  192. package/public/_images/tape-assets/sticker-12-medium-up.webp +0 -0
  193. package/public/_images/tape-assets/sticker-12.png +0 -0
  194. package/public/_images/tape-assets/sticker-12.webp +0 -0
  195. package/public/_images/tape-assets/sticker-2-red-2x.png +0 -0
  196. package/public/_images/tape-assets/sticker-2-red-2x.webp +0 -0
  197. package/public/_images/tape-assets/sticker-2-red-medium-up-2x.png +0 -0
  198. package/public/_images/tape-assets/sticker-2-red-medium-up-2x.webp +0 -0
  199. package/public/_images/tape-assets/sticker-2-red-medium-up.png +0 -0
  200. package/public/_images/tape-assets/sticker-2-red-medium-up.webp +0 -0
  201. package/public/_images/tape-assets/sticker-2-red.png +0 -0
  202. package/public/_images/tape-assets/sticker-2-red.webp +0 -0
  203. package/public/_images/tape-assets/sticker-3-2x.png +0 -0
  204. package/public/_images/tape-assets/sticker-3-2x.webp +0 -0
  205. package/public/_images/tape-assets/sticker-3-medium-up-2x.png +0 -0
  206. package/public/_images/tape-assets/sticker-3-medium-up-2x.webp +0 -0
  207. package/public/_images/tape-assets/sticker-3-medium-up.png +0 -0
  208. package/public/_images/tape-assets/sticker-3-medium-up.webp +0 -0
  209. package/public/_images/tape-assets/sticker-3.png +0 -0
  210. package/public/_images/tape-assets/sticker-3.webp +0 -0
  211. package/public/_images/tape-assets/sticker-4-2x.png +0 -0
  212. package/public/_images/tape-assets/sticker-4-2x.webp +0 -0
  213. package/public/_images/tape-assets/sticker-4-medium-up-2x.png +0 -0
  214. package/public/_images/tape-assets/sticker-4-medium-up-2x.webp +0 -0
  215. package/public/_images/tape-assets/sticker-4-medium-up.png +0 -0
  216. package/public/_images/tape-assets/sticker-4-medium-up.webp +0 -0
  217. package/public/_images/tape-assets/sticker-4.png +0 -0
  218. package/public/_images/tape-assets/sticker-4.webp +0 -0
  219. package/public/_images/tape-assets/sticker-5-2x.png +0 -0
  220. package/public/_images/tape-assets/sticker-5-2x.webp +0 -0
  221. package/public/_images/tape-assets/sticker-5-medium-up-2x.png +0 -0
  222. package/public/_images/tape-assets/sticker-5-medium-up-2x.webp +0 -0
  223. package/public/_images/tape-assets/sticker-5-medium-up.png +0 -0
  224. package/public/_images/tape-assets/sticker-5-medium-up.webp +0 -0
  225. package/public/_images/tape-assets/sticker-5.png +0 -0
  226. package/public/_images/tape-assets/sticker-5.webp +0 -0
  227. package/public/_images/tape-assets/sticker-6-2x.png +0 -0
  228. package/public/_images/tape-assets/sticker-6-2x.webp +0 -0
  229. package/public/_images/tape-assets/sticker-6-medium-up-2x.png +0 -0
  230. package/public/_images/tape-assets/sticker-6-medium-up-2x.webp +0 -0
  231. package/public/_images/tape-assets/sticker-6-medium-up.png +0 -0
  232. package/public/_images/tape-assets/sticker-6-medium-up.webp +0 -0
  233. package/public/_images/tape-assets/sticker-6.png +0 -0
  234. package/public/_images/tape-assets/sticker-6.webp +0 -0
  235. package/public/_images/tape-assets/sticker-7-2x.png +0 -0
  236. package/public/_images/tape-assets/sticker-7-2x.webp +0 -0
  237. package/public/_images/tape-assets/sticker-7-medium-up-2x.png +0 -0
  238. package/public/_images/tape-assets/sticker-7-medium-up-2x.webp +0 -0
  239. package/public/_images/tape-assets/sticker-7-medium-up.png +0 -0
  240. package/public/_images/tape-assets/sticker-7-medium-up.webp +0 -0
  241. package/public/_images/tape-assets/sticker-7.png +0 -0
  242. package/public/_images/tape-assets/sticker-7.webp +0 -0
  243. package/public/_images/tape-assets/sticker-8-2x.png +0 -0
  244. package/public/_images/tape-assets/sticker-8-2x.webp +0 -0
  245. package/public/_images/tape-assets/sticker-8-medium-up-2x.png +0 -0
  246. package/public/_images/tape-assets/sticker-8-medium-up-2x.webp +0 -0
  247. package/public/_images/tape-assets/sticker-8-medium-up.png +0 -0
  248. package/public/_images/tape-assets/sticker-8-medium-up.webp +0 -0
  249. package/public/_images/tape-assets/sticker-8.png +0 -0
  250. package/public/_images/tape-assets/sticker-8.webp +0 -0
  251. package/public/_images/tape-assets/sticker-9-2x.png +0 -0
  252. package/public/_images/tape-assets/sticker-9-2x.webp +0 -0
  253. package/public/_images/tape-assets/sticker-9-medium-up-2x.png +0 -0
  254. package/public/_images/tape-assets/sticker-9-medium-up-2x.webp +0 -0
  255. package/public/_images/tape-assets/sticker-9-medium-up.png +0 -0
  256. package/public/_images/tape-assets/sticker-9-medium-up.webp +0 -0
  257. package/public/_images/tape-assets/sticker-9.png +0 -0
  258. package/public/_images/tape-assets/sticker-9.webp +0 -0
  259. package/public/_images/tape-assets/tape-1.png +0 -0
  260. package/public/_images/tape-assets/tape-2-2x.png +0 -0
  261. package/public/_images/tape-assets/tape-2-2x.webp +0 -0
  262. package/public/_images/tape-assets/tape-2-medium-up-2x.png +0 -0
  263. package/public/_images/tape-assets/tape-2-medium-up-2x.webp +0 -0
  264. package/public/_images/tape-assets/tape-2-medium-up.png +0 -0
  265. package/public/_images/tape-assets/tape-2-medium-up.webp +0 -0
  266. package/public/_images/tape-assets/tape-2.png +0 -0
  267. package/public/_images/tape-assets/tape-2.webp +0 -0
  268. package/public/_images/tape-assets/tape-3-2x.png +0 -0
  269. package/public/_images/tape-assets/tape-3-2x.webp +0 -0
  270. package/public/_images/tape-assets/tape-3-medium-up-2x.png +0 -0
  271. package/public/_images/tape-assets/tape-3-medium-up-2x.webp +0 -0
  272. package/public/_images/tape-assets/tape-3-medium-up.png +0 -0
  273. package/public/_images/tape-assets/tape-3-medium-up.webp +0 -0
  274. package/public/_images/tape-assets/tape-3.png +0 -0
  275. package/public/_images/tape-assets/tape-3.webp +0 -0
  276. package/public/_images/tape-assets/tape-4-medium-up-2x.png +0 -0
  277. package/public/_images/tape-assets/tape-4-medium-up-2x.webp +0 -0
  278. package/public/_images/tape-assets/tape-4-medium-up.png +0 -0
  279. package/public/_images/tape-assets/tape-4-medium-up.webp +0 -0
  280. package/public/_images/tape-assets/tape-5-2x.png +0 -0
  281. package/public/_images/tape-assets/tape-5-2x.webp +0 -0
  282. package/public/_images/tape-assets/tape-5-medium-up-2x.png +0 -0
  283. package/public/_images/tape-assets/tape-5-medium-up-2x.webp +0 -0
  284. package/public/_images/tape-assets/tape-5-medium-up.png +0 -0
  285. package/public/_images/tape-assets/tape-5-medium-up.webp +0 -0
  286. package/public/_images/tape-assets/tape-5.png +0 -0
  287. package/public/_images/tape-assets/tape-5.webp +0 -0
  288. package/public/_images/tape-assets/tape-6-2x.png +0 -0
  289. package/public/_images/tape-assets/tape-6-2x.webp +0 -0
  290. package/public/_images/tape-assets/tape-6-medium-up-2x.png +0 -0
  291. package/public/_images/tape-assets/tape-6-medium-up-2x.webp +0 -0
  292. package/public/_images/tape-assets/tape-6-medium-up.png +0 -0
  293. package/public/_images/tape-assets/tape-6-medium-up.webp +0 -0
  294. package/public/_images/tape-assets/tape-6.png +0 -0
  295. package/public/_images/tape-assets/tape-6.webp +0 -0
  296. package/public/_images/tape-assets/tape-7-2x.png +0 -0
  297. package/public/_images/tape-assets/tape-7-2x.webp +0 -0
  298. package/public/_images/tape-assets/tape-7.png +0 -0
  299. package/public/_images/tape-assets/tape-7.webp +0 -0
  300. package/public/_images/weapons/marquee/s3_weapons_social-1.jpg +0 -0
  301. package/public/_images/weapons/marquee/s3_weapons_social-10.jpg +0 -0
  302. package/public/_images/weapons/marquee/s3_weapons_social-11.jpg +0 -0
  303. package/public/_images/weapons/marquee/s3_weapons_social-12.jpg +0 -0
  304. package/public/_images/weapons/marquee/s3_weapons_social-13.jpg +0 -0
  305. package/public/_images/weapons/marquee/s3_weapons_social-14.jpg +0 -0
  306. package/public/_images/weapons/marquee/s3_weapons_social-15.jpg +0 -0
  307. package/public/_images/weapons/marquee/s3_weapons_social-16.jpg +0 -0
  308. package/public/_images/weapons/marquee/s3_weapons_social-17.jpg +0 -0
  309. package/public/_images/weapons/marquee/s3_weapons_social-18.jpg +0 -0
  310. package/public/_images/weapons/marquee/s3_weapons_social-19.jpg +0 -0
  311. package/public/_images/weapons/marquee/s3_weapons_social-2.jpg +0 -0
  312. package/public/_images/weapons/marquee/s3_weapons_social-20.jpg +0 -0
  313. package/public/_images/weapons/marquee/s3_weapons_social-21.jpg +0 -0
  314. package/public/_images/weapons/marquee/s3_weapons_social-22.jpg +0 -0
  315. package/public/_images/weapons/marquee/s3_weapons_social-3.jpg +0 -0
  316. package/public/_images/weapons/marquee/s3_weapons_social-4.jpg +0 -0
  317. package/public/_images/weapons/marquee/s3_weapons_social-5.jpg +0 -0
  318. package/public/_images/weapons/marquee/s3_weapons_social-6.jpg +0 -0
  319. package/public/_images/weapons/marquee/s3_weapons_social-7.jpg +0 -0
  320. package/public/_images/weapons/marquee/s3_weapons_social-8.jpg +0 -0
  321. package/public/_images/weapons/marquee/s3_weapons_social-9.jpg +0 -0
  322. package/public/_images/weapons/shops-gallery/coco-icon.png +0 -0
  323. package/public/_images/weapons/shops-gallery/coco.png +0 -0
  324. package/public/_images/weapons/shops-gallery/eddy-icon.png +0 -0
  325. package/public/_images/weapons/shops-gallery/eddy.png +0 -0
  326. package/public/_images/weapons/shops-gallery/harmony-icon.png +0 -0
  327. package/public/_images/weapons/shops-gallery/harmony.png +0 -0
  328. package/public/_images/weapons/shops-gallery/jella-icon.png +0 -0
  329. package/public/_images/weapons/shops-gallery/jella.png +0 -0
  330. package/public/_images/weapons/shops-gallery/sheldon-icon.png +0 -0
  331. package/public/_images/weapons/shops-gallery/sheldon.png +0 -0
  332. package/public/_images/weapons/shops-gallery/weapons-express-ammo-knights-2.jpg +0 -0
  333. package/public/_images/weapons/shops-gallery/weapons-express-crush-station-5.jpg +0 -0
  334. package/public/_images/weapons/shops-gallery/weapons-express-hotlantis-1.jpg +0 -0
  335. package/public/_images/weapons/shops-gallery/weapons-express-manoward-4.jpg +0 -0
  336. package/public/_images/weapons/shops-gallery/weapons-express-naut-couture-3.jpg +0 -0
  337. package/public/fonts/foo-webfont.woff +0 -0
  338. package/public/fonts/foo-webfont.woff2 +0 -0
  339. package/public/fonts/montserrat-v24-latin-500.woff +0 -0
  340. package/public/fonts/montserrat-v24-latin-500.woff2 +0 -0
  341. package/public/fonts/montserrat-v24-latin-600.woff2 +0 -0
  342. package/public/fonts/montserrat-v24-latin-700.woff2 +0 -0
  343. package/public/fonts/montserrat-v24-latin-900.woff2 +0 -0
  344. package/public/fonts/montserrat-v24-latin-regular.woff +0 -0
  345. package/public/fonts/montserrat-v24-latin-regular.woff2 +0 -0
  346. package/public/fonts/obviously-narrow-600.woff2 +0 -0
  347. package/public/svgs/paper-tear-down.svg +3 -0
  348. package/public/svgs/paper-tear-up.svg +3 -0
  349. package/public/svgs/rip-left.svg +3 -0
  350. package/public/svgs/rip-right.svg +3 -0
  351. package/public/svgs/wave.svg +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/card-slot.module.css","../src/components/ui/card-slot.tsx","../src/components/ui/tape-assets.ts","../src/components/ui/tape-picture.tsx","../src/components/ui/media-decoration.tsx","../src/components/ui/wide-torn-paper.tsx","../src/components/ui/torn-card.module.css","../src/components/ui/torn-card.tsx","../src/components/ui/alert.tsx","../src/components/ui/asset-image.tsx","../src/components/ui/black-tape-container.module.css","../src/components/ui/black-tape-container.tsx","../src/components/ui/button-arrow.module.css","../src/components/ui/button-arrow.tsx","../src/components/ui/button-drip.module.css","../src/components/ui/button-drip.tsx","../src/components/ui/character-assets.ts","../src/components/ui/event-assets.ts","../src/components/ui/event-callout.module.css","../src/components/ui/event-callout.tsx","../src/lib/ui-tokens.ts","../src/components/ui/demo-layout.tsx","../src/components/ui/github-mark.tsx","../src/components/ui/heading-tape.module.css","../src/components/ui/heading-tape.tsx","../src/components/ui/input.tsx","../src/components/ui/news-assets.ts","../src/components/ui/tape.tsx","../src/components/ui/marquee.tsx","../src/components/ui/nav-chevron.tsx","../src/components/ui/paper-tear-edge.tsx","../src/components/ui/paper-surface.tsx","../src/components/ui/photo-frame.module.css","../src/components/ui/photo-frame.tsx","../src/components/ui/tag-hanger.tsx","../src/components/ui/rugged-card.tsx","../src/components/ui/section-background.module.css","../src/components/ui/section-background.tsx","../src/components/ui/section.tsx","../src/components/ui/showcase-assets.ts","../src/components/ui/squid-assets.ts","../src/components/ui/staple-card.module.css","../src/components/ui/staple-card.tsx","../src/components/ui/stickers/sticker-image.tsx","../src/components/ui/stickers/sticker-2-red.tsx","../src/components/ui/stickers/sticker-10.tsx","../src/components/ui/stickers/sticker-5.tsx","../src/components/ui/tape-divider.module.css","../src/components/ui/tape-divider.tsx","../src/components/ui/tape-title.module.css","../src/components/ui/tape-title.tsx","../src/components/ui/wave-button.tsx","../src/components/ui/wave-button.module.css","../src/components/ui/weapons-assets.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/** Resolve CSS var() references to computed values (for Canvas/WebGL contexts). */\nexport function resolveCSSColor(color: string, el: HTMLElement): string {\n if (!color.startsWith(\"var(\")) return color\n const prop = color.replace(/^var\\(/, \"\").replace(/\\)$/, \"\").trim()\n return getComputedStyle(el).getPropertyValue(prop).trim()\n}\n",".cardSlot {\n position: absolute;\n z-index: 20;\n pointer-events: none;\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport styles from \"./card-slot.module.css\"\n\nexport type SlotPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\"\n\nconst SLOT_STYLE: Record<SlotPosition, React.CSSProperties> = {\n \"top-left\": { top: 0, left: \"15%\", transform: \"translateY(-50%)\" },\n \"top-center\": { top: 0, left: \"50%\", transform: \"translate(-50%, -50%)\" },\n \"top-right\": { top: 0, right: \"15%\", transform: \"translateY(-50%)\" },\n \"bottom-left\": { bottom: 0, left: \"15%\", transform: \"translateY(50%)\" },\n \"bottom-center\": { bottom: 0, left: \"50%\", transform: \"translate(-50%, 50%)\" },\n \"bottom-right\": { bottom: 0, right: \"15%\", transform: \"translateY(50%)\" },\n}\n\nexport interface CardSlotProps extends React.ComponentProps<\"div\"> {\n /** Preset position. Omit for fully custom positioning via style. */\n position?: SlotPosition\n}\n\nexport function CardSlot({ position, className, style, ...props }: CardSlotProps) {\n return (\n <div\n data-slot={position ? `slot-${position}` : \"slot\"}\n className={cn(styles.cardSlot, className)}\n style={{ ...(position && SLOT_STYLE[position]), ...style }}\n {...props}\n />\n )\n}\n","const TAPE_ASSET_BASE = '/_images/tape-assets'\n\nexport interface TapeAssetSource {\n src: string\n pngSrcSet?: string\n webpSrcSet?: string\n width: number\n height: number\n}\n\nexport interface TapeAsset extends TapeAssetSource {\n desktop?: TapeAssetSource\n}\n\nfunction source(fileName: string, width: number, height: number): TapeAssetSource {\n const path = `${TAPE_ASSET_BASE}/${fileName}`\n const extensionIndex = fileName.lastIndexOf('.')\n const basename = fileName.slice(0, extensionIndex)\n const extension = fileName.slice(extensionIndex)\n\n return {\n src: path,\n pngSrcSet: `${TAPE_ASSET_BASE}/${basename}${extension} 1x, ${TAPE_ASSET_BASE}/${basename}-2x${extension} 2x`,\n webpSrcSet: `${TAPE_ASSET_BASE}/${basename}.webp 1x, ${TAPE_ASSET_BASE}/${basename}-2x.webp 2x`,\n width,\n height,\n }\n}\n\nfunction responsiveAsset(\n fileName: string,\n width: number,\n height: number,\n desktopFileName: string,\n desktopWidth: number,\n desktopHeight: number\n): TapeAsset {\n return {\n ...source(fileName, width, height),\n desktop: source(desktopFileName, desktopWidth, desktopHeight),\n }\n}\n\nconst tapeImageAssetDefinitions = {\n 'sticker-1': responsiveAsset('sticker-1.png', 110, 110, 'sticker-1-medium-up.png', 230, 230),\n 'sticker-2-red': responsiveAsset(\n 'sticker-2-red.png',\n 80,\n 114,\n 'sticker-2-red-medium-up.png',\n 137,\n 194\n ),\n 'sticker-3': responsiveAsset('sticker-3.png', 100, 65, 'sticker-3-medium-up.png', 225, 146),\n 'sticker-4': responsiveAsset('sticker-4.png', 100, 56, 'sticker-4-medium-up.png', 203, 113),\n 'sticker-5': responsiveAsset('sticker-5.png', 180, 62, 'sticker-5-medium-up.png', 449, 154),\n 'sticker-6': responsiveAsset('sticker-6.png', 112, 98, 'sticker-6-medium-up.png', 281, 247),\n 'sticker-7': responsiveAsset('sticker-7.png', 100, 63, 'sticker-7-medium-up.png', 152, 95),\n 'sticker-8': responsiveAsset('sticker-8.png', 198, 35, 'sticker-8-medium-up.png', 406, 72),\n 'sticker-9': responsiveAsset('sticker-9.png', 96, 31, 'sticker-9-medium-up.png', 146, 48),\n 'sticker-10': responsiveAsset('sticker-10.png', 113, 26, 'sticker-10-medium-up.png', 225, 51),\n 'sticker-11': responsiveAsset('sticker-11.png', 114, 39, 'sticker-11-medium-up.png', 140, 46),\n 'sticker-12': responsiveAsset('sticker-12.png', 416, 58, 'sticker-12-medium-up.png', 641, 89),\n 'tape-1': {\n src: `${TAPE_ASSET_BASE}/tape-1.png`,\n width: 300,\n height: 68,\n },\n 'tape-2': responsiveAsset('tape-2.png', 82, 36, 'tape-2-medium-up.png', 166, 74),\n 'tape-3': responsiveAsset('tape-3.png', 97, 38, 'tape-3-medium-up.png', 202, 78),\n 'tape-4': source('tape-4-medium-up.png', 120, 53),\n 'tape-5': responsiveAsset('tape-5.png', 140, 36, 'tape-5-medium-up.png', 276, 70),\n 'tape-6': responsiveAsset('tape-6.png', 103, 44, 'tape-6-medium-up.png', 187, 85),\n 'tape-7': source('tape-7.png', 539, 112),\n} satisfies Record<string, TapeAsset>\n\nexport type TapeImageVariant = keyof typeof tapeImageAssetDefinitions\nexport const tapeImageAssets: Record<TapeImageVariant, TapeAsset> = tapeImageAssetDefinitions\n\nexport function isTapeImageVariant(value: string): value is TapeImageVariant {\n return Object.prototype.hasOwnProperty.call(tapeImageAssets, value)\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport {\n tapeImageAssets,\n type TapeAsset,\n type TapeAssetSource,\n type TapeImageVariant,\n} from './tape-assets'\n\n/* eslint-disable @next/next/no-img-element -- decorative assets are served through curated <picture> srcSets. */\n\ntype ImageProps = Omit<React.ComponentProps<'img'>, 'height' | 'src' | 'srcSet' | 'width'>\n\ninterface TapePictureProps extends ImageProps {\n asset: TapeAsset | TapeImageVariant\n pictureClassName?: string\n media?: string\n fill?: boolean\n}\n\ninterface TapeResponsivePicturesProps extends ImageProps {\n asset: TapeImageVariant\n mobilePictureClassName?: string\n desktopPictureClassName?: string\n imageClassName?: string\n}\n\nfunction resolveTapeAsset(asset: TapeAsset | TapeImageVariant) {\n return typeof asset === 'string' ? tapeImageAssets[asset] : asset\n}\n\nfunction TapeImage({\n source,\n alt,\n className,\n draggable,\n fill,\n ...props\n}: ImageProps & {\n source: TapeAssetSource\n fill: boolean\n}) {\n return (\n <img\n {...props}\n alt={alt}\n className={cn(fill && 'block h-auto w-full', className)}\n draggable={draggable}\n height={source.height}\n src={source.src}\n srcSet={source.pngSrcSet}\n width={source.width}\n />\n )\n}\n\nexport function TapePicture({\n asset,\n alt = '',\n className,\n draggable = false,\n media = '(min-width: 640px)',\n pictureClassName,\n fill = true,\n ...props\n}: TapePictureProps) {\n const image = resolveTapeAsset(asset)\n\n return (\n <picture className={pictureClassName}>\n {image.desktop?.webpSrcSet ? (\n <source media={media} type=\"image/webp\" srcSet={image.desktop.webpSrcSet} />\n ) : null}\n {image.desktop?.pngSrcSet ? <source media={media} srcSet={image.desktop.pngSrcSet} /> : null}\n {image.webpSrcSet ? <source type=\"image/webp\" srcSet={image.webpSrcSet} /> : null}\n <TapeImage\n {...props}\n alt={alt}\n className={className}\n draggable={draggable}\n fill={fill}\n source={image}\n />\n </picture>\n )\n}\n\nexport function TapeResponsivePictures({\n asset,\n alt = '',\n className,\n draggable = false,\n mobilePictureClassName,\n desktopPictureClassName,\n imageClassName,\n ...props\n}: TapeResponsivePicturesProps) {\n const image = tapeImageAssets[asset]\n const desktopImage = image.desktop\n\n return (\n <>\n <picture className={mobilePictureClassName}>\n {image.webpSrcSet ? <source type=\"image/webp\" srcSet={image.webpSrcSet} /> : null}\n <TapeImage\n {...props}\n alt={alt}\n className={cn(imageClassName, className)}\n draggable={draggable}\n fill\n source={image}\n />\n </picture>\n {desktopImage ? (\n <picture className={desktopPictureClassName}>\n {desktopImage.webpSrcSet ? (\n <source type=\"image/webp\" srcSet={desktopImage.webpSrcSet} />\n ) : null}\n <TapeImage\n {...props}\n alt={alt}\n className={cn(imageClassName, className)}\n draggable={draggable}\n fill\n source={desktopImage}\n />\n </picture>\n ) : null}\n </>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { CardSlot, type CardSlotProps } from './card-slot'\nimport { type TapeImageVariant } from './tape-assets'\nimport { TapePicture, TapeResponsivePictures } from './tape-picture'\n\nexport interface MediaDecorationProps extends Omit<CardSlotProps, 'children'> {\n asset: TapeImageVariant\n responsive?: boolean\n media?: string\n imageClassName?: string\n mobilePictureClassName?: string\n desktopPictureClassName?: string\n}\n\nexport function MediaDecoration({\n asset,\n responsive = true,\n media,\n imageClassName,\n mobilePictureClassName,\n desktopPictureClassName,\n className,\n ...props\n}: MediaDecorationProps) {\n return (\n <CardSlot className={cn(className)} {...props}>\n {responsive ? (\n <TapeResponsivePictures\n asset={asset}\n mobilePictureClassName={mobilePictureClassName}\n desktopPictureClassName={desktopPictureClassName}\n imageClassName={imageClassName}\n />\n ) : (\n <TapePicture asset={asset} className={imageClassName} media={media} />\n )}\n </CardSlot>\n )\n}\n","export function WideTornPaper({ bgColor = \"currentColor\" }: { bgColor?: string }) {\n return (\n <svg\n viewBox=\"0 0 515 273\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-full w-full\"\n preserveAspectRatio=\"none\"\n >\n <path\n d=\"m511.365417 8.32919328c-.28777-.42141336-.59704-.83026805-.926156-1.22656406-.426693-.51351033-3.957662-2.69872002-3.957662-2.69872002l-1.012157-.55118636-1.304887-.11023727-1.52485-.10046941-.696271-.29443119.130655-.56932667-.461424-1.14842118s-.208386-.51351033-.603656-.63491087c-.525924-.16047197-1.061771-.30280364-1.607542-.42699499-1.089887-.24698731-2.217812-.41722714-3.373853-.50374247-.578848-.04325766-1.164311-.06418879-1.756389-.06418879h-16.055575l-2.197966.64886495-1.306541 1.32145184-1.480196-.36699243-1.65385.66142362-2.176466-.73538027-1.306542-.80794152-4.243779-.72142619h-103.344116l-5.289012.94190073-4.179279 1.91031422-2.677583-1.23075028h-2.613082l-3.416854.9377145-3.656662-1.61727844-8.206403-.94190073h-149.312874l-7.465478 1.32842888-6.096091 1.32145184-5.224512-1.76240092-3.483007.29303578-3.830317.73538028-4.005624.14651789-1.566196-.88189817-7.336478-1.18051558h-122.4179669c-2.2012742 0-4.3165482.30419905-6.2928988.86515326-.5573474.29722201-1.6240806 1.14283956-1.6240806 1.14283956l-.9840406.59304861-2.1285048.54560472-1.33300299.86515326-1.15273336 1.23354111.03142315 1.04655636-.39030857.59723484-1.20731041.65444658-.91623282 1.2656355s-1.46531098.45350776-1.8936581.81073233c-1.17919495 2.13497497-1.8374272 4.51554187-1.8374272 7.02448637v230.5982305l2.95212201 9.954844 3.6781621 5.398835 4.87554939 3.233162 5.0508575.954459 8.4462113 1.984271 9.9479069.49537 6.2035909 1.322847 7.4439782.385133 6.8353615 1.028416h76.9602502l5.573474-.661424 1.523195-.182798 1.480196-.918179 1.916812.880503 5.876128.881898h107.338165l3.395353-.421413 50.791384-.71724 1.304887-.073957 2.176467.478625 5.594974.312572 36.177965.421413 16.020844-.807942 40.130667-2.20335 2.90416 1.765192 5.659475-.305594 3.83197-.722822 2.601506.37397 4.190855-.227452 2.872737-.954459 12.711491-.733985 5.470935.263732 4.978088.175821 6.08286-.640492 3.306046-.138145 8.112133.265127 9.284713-.994926 4.19251-3.215021 4.55801-1.193075 2.525429-1.982875 2.045812-3.563873 1.741504-1.028416 3.570662.147913 4.149509-4.703922 1.218888-3.768998 2.163235-2.951289 1.218888-4.187621 1.218887-4.113664 1.695196-4.209948v-215.6994535c0-3.0280365-.959233-5.8690881-2.634583-8.31523922\"\n fill={bgColor}\n fillRule=\"evenodd\"\n transform=\"translate(.070619 .762599)\"\n />\n </svg>\n )\n}\n","/* ── Tape display helper ── */\n.tape {\n display: block;\n transform: rotate(var(--tape-rotate, 0deg));\n}\n\n/* ── Alert responsive padding: 32px mobile, 48px vertical on desktop ── */\n.alertContent {\n padding: calc(var(--base-space, 8px) * 4);\n}\n\n@container (min-width: 400px) {\n .alertContent {\n padding: calc(var(--base-space, 8px) * 6) calc(var(--base-space, 8px) * 4);\n }\n}\n\n/* ── Responsive image: mobile by default, desktop at 400px container width ── */\n.imgDesktop { display: none; }\n\n@container (min-width: 400px) {\n .imgMobile { display: none; }\n .imgDesktop { display: block; }\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { CardSlot, type CardSlotProps } from './card-slot'\nimport { MediaDecoration } from './media-decoration'\nimport type { TapeImageVariant } from './tape-assets'\nimport { WideTornPaper } from './wide-torn-paper'\nimport styles from './torn-card.module.css'\n\ntype TornCardVariant = 'a' | 'b' | 'c'\n\ninterface TornCardVariantConfig {\n rotation: string\n tapePosition: 'top-right' | 'bottom-center'\n showSticker: boolean\n tapeAsset: TapeImageVariant\n stickerAsset?: TapeImageVariant\n}\n\nexport { CardSlot as TornCardSlot }\nexport type { CardSlotProps as TornCardSlotProps }\n\nexport interface TornCardProps extends React.ComponentProps<'div'> {\n variant?: TornCardVariant\n rotation?: string\n background?: string\n /** Show decorative tape at the top edge (default: true) */\n showTape?: boolean\n /** Show decorative sticker (default: false) */\n showSticker?: boolean\n /** Tape position at card edge */\n tapePosition?: 'top-right' | 'bottom-center'\n}\n\nconst VARIANT_CONFIG: Record<TornCardVariant, TornCardVariantConfig> = {\n a: {\n rotation: '2deg',\n tapePosition: 'top-right' as const,\n showSticker: false,\n tapeAsset: 'tape-3',\n },\n b: {\n rotation: '-1.5deg',\n tapePosition: 'top-right' as const,\n showSticker: false,\n tapeAsset: 'tape-2',\n },\n c: {\n rotation: '3deg',\n tapePosition: 'bottom-center' as const,\n showSticker: true,\n tapeAsset: 'tape-2',\n stickerAsset: 'sticker-10',\n },\n} satisfies Record<TornCardVariant, TornCardVariantConfig>\n\nexport function TornCard({\n ref,\n className,\n variant = 'a',\n rotation,\n background = '#efefef',\n showTape = true,\n showSticker,\n tapePosition,\n children,\n ...props\n}: TornCardProps & { ref?: React.Ref<HTMLDivElement> }) {\n const config = VARIANT_CONFIG[variant]\n const resolvedRotation = rotation ?? config.rotation\n const resolvedTapePosition = tapePosition ?? config.tapePosition\n const resolvedShowSticker = showSticker ?? config.showSticker\n\n return (\n <div\n ref={ref}\n data-slot=\"card\"\n data-variant={variant}\n style={\n {\n transform: `rotate(${resolvedRotation})`,\n filter: 'drop-shadow(2px 2px 2px rgba(0,0,0,.3))',\n } as React.CSSProperties\n }\n className={cn('group/card text-chaos-black relative z-10 w-full text-center', className)}\n {...props}\n >\n <div className=\"pointer-events-none absolute inset-0 z-0 h-full w-full select-none\">\n <WideTornPaper bgColor={background} />\n </div>\n\n <div className=\"@container w-full\">\n {showTape && (\n <MediaDecoration\n position={resolvedTapePosition}\n asset={config.tapeAsset}\n mobilePictureClassName={cn(styles.tape, styles.imgMobile)}\n desktopPictureClassName={cn(styles.tape, styles.imgDesktop)}\n />\n )}\n\n {resolvedShowSticker && config.stickerAsset ? (\n <MediaDecoration\n position=\"top-right\"\n asset={config.stickerAsset}\n mobilePictureClassName={styles.imgMobile}\n desktopPictureClassName={styles.imgDesktop}\n />\n ) : null}\n\n <div className={cn(styles.alertContent, 'relative z-10 flex flex-col gap-4')}>\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n </div>\n </div>\n )\n}\n\nfunction isCssColor(value: string) {\n return (\n value.startsWith('#') ||\n value.startsWith('rgb') ||\n value.startsWith('var(') ||\n value.startsWith('hsl')\n )\n}\n\nfunction TornCardTitle({\n className,\n textColor = 'text-blue',\n style,\n ...props\n}: React.ComponentProps<'h2'> & { textColor?: string }) {\n const colorStyle = textColor && isCssColor(textColor) ? { color: textColor } : undefined\n const twClass = textColor && !isCssColor(textColor) ? textColor : ''\n return (\n <h2\n data-slot=\"card-title\"\n className={cn('splat-heading text-2xl', twClass, className)}\n style={colorStyle ? { ...colorStyle, ...style } : style}\n {...props}\n />\n )\n}\n\nfunction TornCardDescription({\n className,\n textColor,\n style,\n ...props\n}: React.ComponentProps<'p'> & { textColor?: string }) {\n const colorStyle = textColor && isCssColor(textColor) ? { color: textColor } : undefined\n const twClass = textColor && !isCssColor(textColor) ? textColor : ''\n return (\n <p\n data-slot=\"card-description\"\n className={cn('text-sm opacity-90', twClass, className)}\n style={colorStyle ? { ...colorStyle, ...style } : style}\n {...props}\n />\n )\n}\n\nexport { TornCardTitle, TornCardDescription }\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { TornCard } from './torn-card'\n\ntype AlertVariant = 'default' | 'destructive'\n\nexport interface AlertProps extends Omit<React.ComponentProps<typeof TornCard>, 'variant'> {\n variant?: AlertVariant\n}\n\nconst ALERT_VARIANT_MAP = {\n default: {\n tornVariant: 'b' as const,\n background: undefined,\n },\n destructive: {\n tornVariant: 'c' as const,\n background: 'var(--color-red)',\n },\n} as const\n\nexport function Alert({\n variant = 'default',\n showTape = true,\n background,\n className,\n children,\n ...props\n}: AlertProps) {\n const config = ALERT_VARIANT_MAP[variant]\n\n return (\n <TornCard\n variant={config.tornVariant}\n showTape={showTape}\n background={background ?? config.background}\n className={className}\n {...props}\n >\n {children}\n </TornCard>\n )\n}\n\nfunction AlertTitle({\n className,\n textColor = 'text-blue',\n style,\n ...props\n}: React.ComponentProps<'h2'> & { textColor?: string }) {\n return (\n <h2\n data-slot=\"alert-title\"\n className={cn(\n 'splat-heading text-2xl',\n textColor?.startsWith('#') || textColor?.startsWith('rgb') ? '' : textColor,\n className\n )}\n style={\n textColor && (textColor.startsWith('#') || textColor.startsWith('rgb'))\n ? { color: textColor, ...style }\n : style\n }\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n textColor,\n style,\n ...props\n}: React.ComponentProps<'p'> & { textColor?: string }) {\n return (\n <p\n data-slot=\"alert-description\"\n className={cn('text-sm opacity-90', className)}\n style={textColor ? { color: textColor, ...style } : style}\n {...props}\n />\n )\n}\n\nexport { AlertTitle, AlertDescription }\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport interface ImageAsset {\n src: string\n alt: string\n width: number\n height: number\n}\n\nexport interface AssetImageProps extends Omit<\n React.ComponentProps<'img'>,\n 'alt' | 'height' | 'src' | 'width'\n> {\n asset: ImageAsset\n alt?: string\n decorative?: boolean\n fit?: React.CSSProperties['objectFit']\n aspectRatio?: React.CSSProperties['aspectRatio']\n fill?: boolean\n}\n\nexport function AssetImage({\n asset,\n alt,\n className,\n decorative = false,\n draggable = false,\n fit,\n aspectRatio,\n fill = false,\n style,\n ...props\n}: AssetImageProps) {\n return (\n // eslint-disable-next-line @next/next/no-img-element -- component library assets use known public dimensions and caller-controlled layout.\n <img\n {...props}\n alt={decorative ? '' : (alt ?? asset.alt)}\n aria-hidden={decorative ? true : props['aria-hidden']}\n className={cn(fill && 'block h-full w-full', className)}\n draggable={draggable}\n height={asset.height}\n src={asset.src}\n style={{\n ...(fit ? { objectFit: fit } : {}),\n ...(aspectRatio ? { aspectRatio } : {}),\n ...style,\n }}\n width={asset.width}\n />\n )\n}\n",".blackTapeContainer {\n --tape-offset: 16px;\n --tape-safe-bleed: min(var(--tape-offset), max(0px, calc((100cqw - 100%) / 2)));\n --tape-width: 30px;\n margin-left: calc(var(--tape-safe-bleed) * -1);\n margin-right: calc(var(--tape-safe-bleed) * -1);\n overflow-x: clip;\n padding: 0 var(--tape-offset);\n position: relative;\n}\n\n.blackTapeContainer::before,\n.blackTapeContainer::after {\n background-repeat: repeat-y;\n content: '';\n height: 100%;\n position: absolute;\n top: 0;\n width: var(--tape-width);\n z-index: 1;\n}\n\n.blackTapeContainer::before {\n background-image: url('/_images/svg/left-black-tape-container.svg');\n background-position: calc(100% - 1px) top;\n left: 0;\n}\n\n.blackTapeContainer::after {\n background-image: url('/_images/svg/right-black-tape-container.svg');\n background-position: 1px top;\n right: 0;\n}\n\n.blackTapeContainerInner {\n background: var(--color-black-alt, #0e0e0e);\n padding: 1.5em;\n}\n\n.tapeYellow .blackTapeContainerInner {\n background: var(--color-yellow, #eaff3d);\n color: var(--color-black, #0d0d0d);\n}\n\n.tapeYellow::before {\n background-image: url('/_images/svg/left-yellow-tape-container.svg');\n}\n\n.tapeYellow::after {\n background-image: url('/_images/svg/right-yellow-tape-container.svg');\n}\n\n.noVerticalPadding .blackTapeContainerInner {\n padding: 0 1.5em;\n}\n\n@media screen and (min-width: 640px) {\n .blackTapeContainer {\n --tape-offset: 38px;\n --tape-width: 40px;\n }\n\n .blackTapeContainerInner {\n padding: 2em;\n }\n\n .noVerticalPadding .blackTapeContainerInner {\n padding: 0 2em;\n }\n}\n\n@media screen and (min-width: 1024px) {\n .blackTapeContainer {\n --tape-offset: 58px;\n --tape-width: 60px;\n }\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport styles from \"./black-tape-container.module.css\"\n\nexport interface BlackTapeContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string\n children?: React.ReactNode\n tapeVariant?: \"yellow\"\n noVerticalPadding?: boolean\n}\n\nexport function BlackTapeContainer({\n className,\n children,\n tapeVariant,\n noVerticalPadding = false,\n ...props\n}: BlackTapeContainerProps) {\n return (\n <div\n className={cn(\n styles.blackTapeContainer,\n tapeVariant === \"yellow\" && styles.tapeYellow,\n noVerticalPadding && styles.noVerticalPadding,\n className\n )}\n {...props}\n >\n <div className={styles.blackTapeContainerInner}>\n {children}\n </div>\n </div>\n )\n}\n",".buttonArrow {\n color: var(--color);\n display: inline-block;\n font-family: var(--font-alt);\n font-size: 1.5rem;\n line-height: 1;\n text-decoration: none;\n}\n\n.buttonArrow:hover .iconWrap {\n transform: translateX(10px);\n}\n\n.iconWrap {\n display: inline-flex;\n margin-left: 0.5rem;\n}\n\n.iconWrap svg {\n height: 16px;\n transform: translateX(5px);\n transition: transform 0.2s;\n width: 8px;\n}\n\n@media screen and (min-width: 1024px) {\n .buttonArrow {\n font-size: 1.625rem;\n }\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport styles from \"./button-arrow.module.css\"\n\ntype AnchorButtonProps = React.AnchorHTMLAttributes<HTMLAnchorElement> | React.ButtonHTMLAttributes<HTMLButtonElement>\n\nexport interface ButtonArrowProps extends Omit<AnchorButtonProps, \"type\"> {\n icon?: React.ReactNode\n href?: string\n}\n\nexport function ButtonArrow({ icon, href, className, children, ...props }: ButtonArrowProps) {\n const iconNode = icon ?? (\n <svg viewBox=\"0 0 10 16\" className={styles.icon} aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M1 1 L9 8 L1 15\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n\n if (href) {\n return (\n <a className={cn(styles.buttonArrow, className)} href={href} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {children}\n <span className={styles.iconWrap}>{iconNode}</span>\n </a>\n )\n }\n\n return (\n <button className={cn(styles.buttonArrow, className)} type=\"button\" {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}>\n {children}\n <span className={styles.iconWrap}>{iconNode}</span>\n </button>\n )\n}\n",".button {\n --bg-color: var(--color-primary);\n --text-color: var(--color-primary-alt);\n --hover-bg-color: var(--color-accent);\n --hover-text-color: var(--color-accent-alt);\n --speed: calc(var(--duration-factor) * 1.8s);\n --drip-speed-factor: 1;\n --drip-in-start: polygon(0 100%, 0 100%, 100% 100%, 100% 100%);\n --drip-in-end: polygon(0 0, 0 100%, 100% 100%, 100% 0);\n --drip-out-start: polygon(0 0, 0 0, 100% 0, 100% 0);\n --drip-out-end: polygon(0 0, 0 100%, 100% 100%, 100% 0);\n\n border-radius: 0.5rem;\n box-sizing: border-box;\n cursor: pointer;\n display: inline-block;\n font-family: var(--font-alt);\n font-weight: var(--font-weight-bold);\n line-height: 1;\n overflow: hidden;\n position: relative;\n text-align: center;\n text-decoration: none;\n transition: border calc(var(--duration-factor) * 0.2s) calc(var(--duration-factor) * 0.25s);\n width: 100%;\n}\n\n.button > *:not(.icon) {\n width: 100%;\n}\n\n.icon {\n height: 26px;\n margin-right: var(--base-space, 8px);\n padding-top: var(--base-space, 8px);\n width: 20px;\n}\n\n.content,\n.hoverContent {\n align-items: center;\n background-color: var(--bg-color);\n color: var(--text-color);\n display: flex;\n font-size: 1.5rem;\n height: 100%;\n justify-content: center;\n padding: calc(var(--base-space, 8px) * 1.5) calc(var(--base-space, 8px) * 5.5) calc(var(--base-space, 8px) * 2.5) calc(var(--base-space, 8px) * 5.5);\n transition: background-color calc(var(--duration-factor) * 0.2s) ease;\n width: 100%;\n}\n\n.content span,\n.hoverContent span {\n position: relative;\n white-space: nowrap;\n z-index: 1;\n}\n\n.content .icon,\n.hoverContent .icon {\n fill: var(--text-color);\n}\n\n.hoverContent {\n animation: calc(var(--speed) * var(--drip-speed-factor)) button-drip_drip-leave 0.2s ease forwards;\n animation-fill-mode: forwards;\n background-color: var(--hover-bg-color);\n border-radius: 0.5rem;\n box-shadow: inset 0 0 0 2px var(--hover-bg-color);\n color: var(--hover-text-color);\n height: 100%;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n transition: box-shadow 0.2s;\n transition-delay: 0.6s;\n width: 100%;\n z-index: 2;\n}\n\n@media (hover: hover) {\n .button:hover .hoverContent {\n animation: calc(var(--speed) * var(--drip-speed-factor)) button-drip_drip-enter 0.2s ease forwards;\n box-shadow: inset 0 0 0 2px var(--hover-text-color);\n opacity: 1;\n }\n}\n\n.accentColors {\n --bg-color: var(--color-accent);\n --text-color: var(--color-accent-alt);\n --hover-bg-color: var(--color-primary);\n --hover-text-color: var(--color-primary-alt);\n}\n\n@-webkit-keyframes button-drip_drip-enter {\n 0% {\n -webkit-clip-path: var(--drip-in-start);\n clip-path: var(--drip-in-start);\n }\n to {\n -webkit-clip-path: var(--drip-in-end);\n clip-path: var(--drip-in-end);\n }\n}\n\n@keyframes button-drip_drip-enter {\n 0% {\n -webkit-clip-path: var(--drip-in-start);\n clip-path: var(--drip-in-start);\n }\n to {\n -webkit-clip-path: var(--drip-in-end);\n clip-path: var(--drip-in-end);\n }\n}\n\n@-webkit-keyframes button-drip_drip-leave {\n 0% {\n -webkit-clip-path: var(--drip-out-start);\n clip-path: var(--drip-out-start);\n }\n to {\n -webkit-clip-path: var(--drip-out-end);\n clip-path: var(--drip-out-end);\n }\n}\n\n@keyframes button-drip_drip-leave {\n 0% {\n -webkit-clip-path: var(--drip-out-start);\n clip-path: var(--drip-out-start);\n }\n to {\n -webkit-clip-path: var(--drip-out-end);\n clip-path: var(--drip-out-end);\n }\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport styles from \"./button-drip.module.css\"\n\nexport interface ButtonDripProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n hoverText?: React.ReactNode\n accentColors?: boolean\n}\n\nexport function ButtonDrip({\n icon,\n hoverText,\n accentColors,\n className,\n children,\n type = \"button\",\n ...props\n}: ButtonDripProps) {\n return (\n <button\n type={type}\n className={cn(styles.button, accentColors && styles.accentColors, className)}\n {...props}\n >\n <span className={styles.content}>\n {icon ? <span className={styles.icon}>{icon}</span> : null}\n <span>{children}</span>\n </span>\n <span className={styles.hoverContent}>\n <span>{hoverText ?? children}</span>\n </span>\n </button>\n )\n}\n","const CHARACTER_ASSET_BASE = '/_images/characters'\n\nexport interface CharacterImageAsset {\n id: string\n src: string\n alt: string\n width: number\n height: number\n}\n\nexport const characterImageAssets = {\n inkling: {\n id: 'inkling',\n src: `${CHARACTER_ASSET_BASE}/char-8.png`,\n alt: 'Inkling character reference artwork',\n width: 421,\n height: 451,\n },\n octoling: {\n id: 'octoling',\n src: `${CHARACTER_ASSET_BASE}/char-10.png`,\n alt: 'Octoling character reference artwork',\n width: 425,\n height: 461,\n },\n salmonid: {\n id: 'salmonid',\n src: `${CHARACTER_ASSET_BASE}/salmonid.png`,\n alt: 'Salmonid character reference artwork',\n width: 331,\n height: 405,\n },\n gamePack: {\n id: 'game-pack',\n src: `${CHARACTER_ASSET_BASE}/game-pack.png`,\n alt: 'Game pack reference artwork',\n width: 150,\n height: 243,\n },\n char2: {\n id: 'char-2',\n src: `${CHARACTER_ASSET_BASE}/char-2.png`,\n alt: 'Character reference artwork 2',\n width: 261,\n height: 220,\n },\n char3: {\n id: 'char-3',\n src: `${CHARACTER_ASSET_BASE}/char-3.png`,\n alt: 'Character reference artwork 3',\n width: 207,\n height: 238,\n },\n char4: {\n id: 'char-4',\n src: `${CHARACTER_ASSET_BASE}/char-4.png`,\n alt: 'Character reference artwork 4',\n width: 515,\n height: 390,\n },\n char5: {\n id: 'char-5',\n src: `${CHARACTER_ASSET_BASE}/char-5.png`,\n alt: 'Character reference artwork 5',\n width: 295,\n height: 104,\n },\n char7: {\n id: 'char-7',\n src: `${CHARACTER_ASSET_BASE}/char-7.png`,\n alt: 'Character reference artwork 7',\n width: 343,\n height: 300,\n },\n char11: {\n id: 'char-11',\n src: `${CHARACTER_ASSET_BASE}/char-11.png`,\n alt: 'Character reference artwork 11',\n width: 346,\n height: 507,\n },\n char12: {\n id: 'char-12',\n src: `${CHARACTER_ASSET_BASE}/char-12.png`,\n alt: 'Character reference artwork 12',\n width: 375,\n height: 303,\n },\n char13: {\n id: 'char-13',\n src: `${CHARACTER_ASSET_BASE}/char-13.png`,\n alt: 'Character reference artwork 13',\n width: 607,\n height: 555,\n },\n char14: {\n id: 'char-14',\n src: `${CHARACTER_ASSET_BASE}/char-14.png`,\n alt: 'Character reference artwork 14',\n width: 858,\n height: 430,\n },\n char15: {\n id: 'char-15',\n src: `${CHARACTER_ASSET_BASE}/char-15.png`,\n alt: 'Character reference artwork 15',\n width: 570,\n height: 188,\n },\n char17: {\n id: 'char-17',\n src: `${CHARACTER_ASSET_BASE}/char-17.png`,\n alt: 'Character reference artwork 17',\n width: 450,\n height: 276,\n },\n char18: {\n id: 'char-18',\n src: `${CHARACTER_ASSET_BASE}/char-18.png`,\n alt: 'Character reference artwork 18',\n width: 343,\n height: 310,\n },\n} satisfies Record<string, CharacterImageAsset>\n\nexport const pageTransitionCharacterAssets = {\n home: characterImageAssets.inkling,\n about: characterImageAssets.octoling,\n weapons: characterImageAssets.salmonid,\n} as const\n","const EVENT_ASSET_BASE = '/_images/events'\n\nexport interface EventImageAsset {\n id: string\n src: string\n alt: string\n width: number\n height: number\n}\n\nexport const eventImageAssets = {\n bigRunCallout: {\n id: 'big-run-callout',\n src: `${EVENT_ASSET_BASE}/big-run-callout.jpg`,\n alt: 'Event callout reference screenshot',\n width: 382,\n height: 215,\n },\n goldenEgg: {\n id: 'golden-egg',\n src: `${EVENT_ASSET_BASE}/golden-egg.png`,\n alt: 'Golden egg reference icon',\n width: 52,\n height: 46,\n },\n splatnetBlade: {\n id: 'splatnet-blade',\n src: `${EVENT_ASSET_BASE}/splatnet-blade.jpg`,\n alt: 'Stage event reference artwork',\n width: 558,\n height: 313,\n },\n splatnetNextPage: {\n id: 'splatnet-next-page',\n src: `${EVENT_ASSET_BASE}/splatnet-next-page.png`,\n alt: 'Graffiti event panel background',\n width: 342,\n height: 221,\n },\n} satisfies Record<string, EventImageAsset>\n",".callout {\n background: var(--color-black, #0d0d0d);\n border: 3px solid var(--color-black, #0d0d0d);\n border-radius: 8px;\n color: var(--color-white, #fff);\n overflow: hidden;\n position: relative;\n}\n\n.background {\n block-size: 100%;\n filter: saturate(1.18) contrast(1.05);\n inline-size: 100%;\n inset: 0;\n object-fit: cover;\n opacity: 0.32;\n position: absolute;\n transform: scale(1.08) rotate(-1deg);\n}\n\n.content {\n display: grid;\n gap: clamp(18px, 4vw, 30px);\n grid-template-columns: minmax(0, 1fr);\n padding: clamp(18px, 4vw, 30px);\n position: relative;\n z-index: 1;\n}\n\n.mediaFrame {\n aspect-ratio: 382 / 215;\n background: var(--color-white, #fff);\n border: 4px solid var(--color-white, #fff);\n box-shadow: 8px 10px 0 rgb(0 0 0 / 0.35);\n position: relative;\n transform: rotate(-1.5deg);\n}\n\n.media {\n block-size: 100%;\n display: block;\n inline-size: 100%;\n object-fit: cover;\n}\n\n.iconBadge {\n align-items: center;\n background: var(--color-yellow, #eaff3d);\n border: 3px solid var(--color-black, #0d0d0d);\n border-radius: 999px;\n box-shadow: 4px 5px 0 rgb(0 0 0 / 0.35);\n display: flex;\n inline-size: clamp(46px, 12vw, 64px);\n justify-content: center;\n padding: 7px;\n position: absolute;\n right: -14px;\n top: -18px;\n transform: rotate(8deg);\n}\n\n.iconBadge img {\n block-size: auto;\n display: block;\n inline-size: 100%;\n}\n\n.body {\n align-self: center;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-inline-size: 0;\n}\n\n.eyebrow {\n color: var(--color-yellow, #eaff3d);\n font-size: 0.75rem;\n font-weight: 900;\n letter-spacing: 0.18em;\n line-height: 1;\n margin: 0;\n text-transform: uppercase;\n}\n\n.title {\n font-family: var(--font-heading), sans-serif;\n font-size: clamp(1.875rem, 7vw, 3.25rem);\n font-weight: 900;\n letter-spacing: 0;\n line-height: 0.9;\n margin: 0;\n text-transform: uppercase;\n}\n\n.description {\n color: rgb(255 255 255 / 0.82);\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1.45;\n margin: 0;\n max-inline-size: 34rem;\n}\n\n.action {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n margin-block-start: 8px;\n}\n\n@media (min-width: 760px) {\n .content {\n align-items: center;\n grid-template-columns: minmax(260px, 0.95fr) minmax(0, 1fr);\n }\n\n .mediaFrame {\n transform: rotate(-2deg);\n }\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { AssetImage } from './asset-image'\nimport { eventImageAssets, type EventImageAsset } from './event-assets'\nimport styles from './event-callout.module.css'\n\nexport interface EventCalloutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n media?: EventImageAsset\n background?: EventImageAsset\n icon?: EventImageAsset\n action?: React.ReactNode\n mediaPriority?: boolean\n}\n\nexport function EventCallout({\n className,\n eyebrow,\n title,\n description,\n media = eventImageAssets.bigRunCallout,\n background = eventImageAssets.splatnetNextPage,\n icon = eventImageAssets.goldenEgg,\n action,\n mediaPriority = false,\n ...props\n}: EventCalloutProps) {\n return (\n <article className={cn(styles.callout, className)} {...props}>\n <AssetImage asset={background} className={styles.background} loading=\"lazy\" decorative />\n <div className={styles.content}>\n <div className={styles.mediaFrame}>\n <AssetImage\n asset={media}\n className={styles.media}\n loading={mediaPriority ? 'eager' : 'lazy'}\n />\n <span className={styles.iconBadge} aria-hidden=\"true\">\n <AssetImage asset={icon} loading=\"lazy\" decorative />\n </span>\n </div>\n\n <div className={styles.body}>\n {eyebrow && <p className={styles.eyebrow}>{eyebrow}</p>}\n <h3 className={styles.title}>{title}</h3>\n {description && <p className={styles.description}>{description}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n </div>\n </article>\n )\n}\n","export const layoutTokens = {\n bannerDividerClearance: 'clamp(8rem,10vw,11.5rem)',\n demoContentMaxWidth: '64rem',\n demoNarrowContentMaxWidth: '48rem',\n feedCarouselItemWidth: 'clamp(16.5rem, 19vw, 23rem)',\n trailerContentMaxWidth: '1440px',\n trailerMediaWidthLarge: '58.333%',\n trailerMediaMaxWidth: '840px',\n} as const\n\nexport const motionTokens = {\n fast: 'calc(var(--duration-factor, 1) * 0.2s)',\n standard: 'calc(var(--duration-factor, 1) * 0.4s)',\n slow: 'calc(var(--duration-factor, 1) * 0.6s)',\n dialogCloseDelayMs: 1200,\n dialogDurationInMs: 700,\n} as const\n","import * as React from 'react'\n\nimport { layoutTokens } from '@/lib/ui-tokens'\nimport { cn } from '@/lib/utils'\n\nexport interface DemoContentProps extends React.ComponentProps<'div'> {\n width?: 'default' | 'narrow'\n}\n\nexport function DemoContent({ width = 'default', className, style, ...props }: DemoContentProps) {\n return (\n <div\n className={cn('relative z-20 w-full space-y-16', className)}\n style={{\n maxWidth:\n width === 'narrow' ? layoutTokens.demoNarrowContentMaxWidth : layoutTokens.demoContentMaxWidth,\n ...style,\n }}\n {...props}\n />\n )\n}\n\nexport function DemoExampleGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={cn('space-y-6', className)} {...props} />\n}\n","import * as React from 'react'\n\nexport function GitHubMark(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" {...props}>\n <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z\" />\n </svg>\n )\n}\n","/* Heading Tape */\n\n.headingTapeSection {\n container-type: inline-size;\n display: flex;\n justify-content: center;\n margin-bottom: calc(var(--base-space, 8px) * var(--margin-offset, 2));\n min-inline-size: 0;\n position: relative;\n width: 100%;\n}\n\n.overlapTop {\n margin-top: -30px;\n}\n\n.headingTapeContainer {\n position: relative;\n transform: rotate(-3deg);\n width: fit-content;\n}\n\n.headingTapeDecorations {\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 0;\n}\n\n.headingTapeDecoration {\n display: block;\n inline-size: var(--heading-tape-decoration-inline-size, 100%);\n max-inline-size: var(--heading-tape-decoration-max-inline-size, 100%);\n position: absolute;\n}\n\n.decorationTopLeft {\n left: var(--heading-tape-decoration-inline-offset, -19px);\n top: var(--heading-tape-decoration-block-offset, -15px);\n transform: rotate(var(--heading-tape-decoration-rotate, 0deg));\n}\n\n.decorationTopRight {\n right: var(--heading-tape-decoration-inline-offset, -17px);\n top: var(--heading-tape-decoration-block-offset, -15px);\n transform: rotate(var(--heading-tape-decoration-rotate, 0deg));\n}\n\n.decorationBottomLeft {\n bottom: var(--heading-tape-decoration-block-offset, -17px);\n left: var(--heading-tape-decoration-inline-offset, -19px);\n transform: rotate(var(--heading-tape-decoration-rotate, 0deg));\n}\n\n.decorationBottomRight {\n bottom: var(--heading-tape-decoration-block-offset, -17px);\n right: var(--heading-tape-decoration-inline-offset, -17px);\n transform: rotate(var(--heading-tape-decoration-rotate, 0deg));\n}\n\n.headingTapeDecorationImage {\n block-size: auto;\n display: block;\n inline-size: auto;\n max-inline-size: 100%;\n}\n\n.headingTapeDecorationImageDesktop {\n display: none;\n}\n\n.headingTapeText {\n background: var(--color-white, #ffffff);\n border-radius: 10px;\n color: var(--color-black, #0d0d0d);\n display: inline-block;\n font-family: var(--font-heading, inherit);\n font-size: 1.875rem;\n font-weight: 700;\n letter-spacing: 0;\n line-height: 1;\n max-inline-size: 100%;\n overflow-wrap: break-word;\n padding: calc(var(--base-space, 8px) * 2) 40px;\n position: relative;\n text-align: center;\n text-transform: uppercase;\n z-index: 1;\n}\n\n.compact .headingTapeText {\n border-radius: 8px;\n font-size: 1.375rem;\n padding: calc(var(--base-space, 8px) * 1.25) 24px;\n}\n\n/* Theme-independent: tape is always white, regardless of light/dark mode */\n\n@container (min-width: 640px) {\n .headingTapeDecorationImageMobile {\n display: none;\n }\n\n .headingTapeDecorationImageDesktop {\n display: block;\n }\n}\n\n@container (min-width: 640px) {\n .headingTapeText {\n padding: calc(var(--base-space, 8px) * 2) 60px;\n }\n\n .compact .headingTapeText {\n font-size: 2rem;\n padding: calc(var(--base-space, 8px) * 1.5) 36px;\n }\n}\n\n@container (min-width: 1024px) {\n .headingTapeText {\n font-size: 3.125rem;\n }\n\n .compact .headingTapeText {\n font-size: 2.5rem;\n }\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport styles from './heading-tape.module.css'\n\ntype HeadingTapeColor = 'yellow' | 'blue' | 'green' | 'purple' | 'orange' | 'red'\ntype HeadingTapeDecorationPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\ntype HeadingTapeDecorationSet = 'stickers' | 'none'\ntype HeadingTapeSafeAreaEdge = 'inlineStart' | 'inlineEnd' | 'blockStart' | 'blockEnd'\ntype HeadingTapeSize = 'default' | 'compact'\n\ntype HeadingTapeDecorationSafeArea = Partial<Record<HeadingTapeSafeAreaEdge, string>>\n\nexport interface HeadingTapeDecorationImage {\n src: string\n srcSet?: string\n width: number\n height: number\n alt?: string\n}\n\nexport interface HeadingTapeDecoration {\n id: React.Key\n position: HeadingTapeDecorationPosition\n mobile: HeadingTapeDecorationImage\n desktop?: HeadingTapeDecorationImage\n rotate?: string\n inlineOffset?: string\n blockOffset?: string\n inlineSize?: string\n maxInlineSize?: string\n safeArea?: HeadingTapeDecorationSafeArea\n className?: string\n imageClassName?: string\n style?: React.CSSProperties\n}\n\nconst defaultDecorations = [\n {\n id: 'sticker-8',\n position: 'bottom-left',\n rotate: '-2deg',\n inlineOffset: '-19px',\n blockOffset: '-17px',\n safeArea: {\n inlineStart: '19px',\n blockEnd: '17px',\n },\n mobile: {\n src: '/_images/tape-assets/sticker-8.png',\n srcSet: '/_images/tape-assets/sticker-8.webp 1x, /_images/tape-assets/sticker-8-2x.webp 2x',\n width: 198,\n height: 35,\n alt: '',\n },\n desktop: {\n src: '/_images/tape-assets/sticker-8-medium-up.png',\n srcSet:\n '/_images/tape-assets/sticker-8-medium-up.webp 1x, /_images/tape-assets/sticker-8-medium-up-2x.webp 2x',\n width: 406,\n height: 71.5,\n alt: '',\n },\n },\n {\n id: 'sticker-12',\n position: 'top-right',\n rotate: '1deg',\n inlineOffset: '-17px',\n blockOffset: '-15px',\n safeArea: {\n inlineEnd: '17px',\n blockStart: '15px',\n },\n mobile: {\n src: '/_images/tape-assets/sticker-12.png',\n srcSet: '/_images/tape-assets/sticker-12.webp 1x, /_images/tape-assets/sticker-12-2x.webp 2x',\n width: 416,\n height: 58,\n alt: '',\n },\n desktop: {\n src: '/_images/tape-assets/sticker-12-medium-up.png',\n srcSet:\n '/_images/tape-assets/sticker-12-medium-up.webp 1x, /_images/tape-assets/sticker-12-medium-up-2x.webp 2x',\n width: 641,\n height: 89,\n alt: '',\n },\n },\n] satisfies HeadingTapeDecoration[]\n\nconst decorationSets = {\n stickers: defaultDecorations,\n none: [],\n} satisfies Record<HeadingTapeDecorationSet, readonly HeadingTapeDecoration[]>\n\nconst decorationPositionClassName = {\n 'top-left': styles.decorationTopLeft,\n 'top-right': styles.decorationTopRight,\n 'bottom-left': styles.decorationBottomLeft,\n 'bottom-right': styles.decorationBottomRight,\n} satisfies Record<HeadingTapeDecorationPosition, string>\n\nconst safeAreaCssVariable = {\n inlineStart: '--heading-tape-safe-inline-start',\n inlineEnd: '--heading-tape-safe-inline-end',\n blockStart: '--heading-tape-safe-block-start',\n blockEnd: '--heading-tape-safe-block-end',\n} satisfies Record<HeadingTapeSafeAreaEdge, string>\n\nfunction cssMax(values: Array<string | undefined>) {\n const resolvedValues = values.filter((value): value is string => Boolean(value))\n\n if (resolvedValues.length === 0) {\n return '0px'\n }\n\n return resolvedValues.length === 1 ? resolvedValues[0] : `max(${resolvedValues.join(', ')})`\n}\n\nfunction getDecorationSafeAreaStyle(decorations: readonly HeadingTapeDecoration[]) {\n return Object.fromEntries(\n (Object.keys(safeAreaCssVariable) as HeadingTapeSafeAreaEdge[]).map((edge) => [\n safeAreaCssVariable[edge],\n cssMax(decorations.map((decoration) => decoration.safeArea?.[edge])),\n ])\n ) as React.CSSProperties\n}\n\nexport interface HeadingTapeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n className?: string\n /** @deprecated Tape is always white — section backgrounds provide contrast */\n color?: HeadingTapeColor\n decorationSet?: HeadingTapeDecorationSet\n decorations?: HeadingTapeDecoration[] | false\n overlapTop?: boolean\n marginOffset?: number\n size?: HeadingTapeSize\n}\n\nfunction HeadingTapeDecorationSlot({ decoration }: { decoration: HeadingTapeDecoration }) {\n return (\n <span\n aria-hidden=\"true\"\n data-slot=\"heading-tape-decoration\"\n data-position={decoration.position}\n className={cn(\n styles.headingTapeDecoration,\n decorationPositionClassName[decoration.position],\n decoration.className\n )}\n style={\n {\n '--heading-tape-decoration-max-inline-size': decoration.maxInlineSize,\n '--heading-tape-decoration-inline-size': decoration.inlineSize,\n '--heading-tape-decoration-inline-offset': decoration.inlineOffset,\n '--heading-tape-decoration-block-offset': decoration.blockOffset,\n '--heading-tape-decoration-rotate': decoration.rotate ?? '0deg',\n ...decoration.style,\n } as React.CSSProperties\n }\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n className={cn(\n styles.headingTapeDecorationImage,\n styles.headingTapeDecorationImageMobile,\n decoration.imageClassName\n )}\n alt={decoration.mobile.alt ?? ''}\n src={decoration.mobile.src}\n srcSet={decoration.mobile.srcSet}\n width={decoration.mobile.width}\n height={decoration.mobile.height}\n />\n {decoration.desktop && (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n className={cn(\n styles.headingTapeDecorationImage,\n styles.headingTapeDecorationImageDesktop,\n decoration.imageClassName\n )}\n alt={decoration.desktop.alt ?? ''}\n src={decoration.desktop.src}\n srcSet={decoration.desktop.srcSet}\n width={decoration.desktop.width}\n height={decoration.desktop.height}\n />\n )}\n </span>\n )\n}\n\nexport function HeadingTape({\n children,\n className,\n color,\n decorationSet = 'stickers',\n decorations,\n overlapTop = false,\n marginOffset = 5,\n size = 'default',\n style,\n ...props\n}: HeadingTapeProps) {\n void color\n\n const resolvedDecorations =\n decorations === false ? [] : (decorations ?? decorationSets[decorationSet])\n const decorationSafeAreaStyle = getDecorationSafeAreaStyle(resolvedDecorations)\n\n return (\n <div\n data-slot=\"heading-tape\"\n data-has-decorations={resolvedDecorations.length > 0 ? 'true' : 'false'}\n data-size={size}\n className={cn(\n styles.headingTapeSection,\n size === 'compact' && styles.compact,\n overlapTop && styles.overlapTop,\n className\n )}\n style={\n {\n '--margin-offset': String(marginOffset),\n ...decorationSafeAreaStyle,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n <span className={styles.headingTapeContainer}>\n {resolvedDecorations.length > 0 && (\n <span className={styles.headingTapeDecorations}>\n {resolvedDecorations.map((decoration) => (\n <HeadingTapeDecorationSlot key={decoration.id} decoration={decoration} />\n ))}\n </span>\n )}\n\n <span className={styles.headingTapeText}>{children}</span>\n </span>\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Input as InputPrimitive } from \"@base-ui/react/input\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"field-cut h-10 w-full min-w-0 border-2 border-foreground/30 bg-card px-3 py-2 text-base font-medium transition-all outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground placeholder:uppercase placeholder:text-xs placeholder:tracking-wider focus-visible:border-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","export interface NewsImageAsset {\n src: string\n width: number\n height: number\n}\n\nexport const newsStapleAssets = {\n left: {\n src: '/_images/news/news-staple-left.png',\n width: 75,\n height: 48,\n },\n right: {\n src: '/_images/news/news-staple-right.png',\n width: 45,\n height: 17,\n },\n} satisfies Record<string, NewsImageAsset>\n","import * as React from 'react'\n\nimport { newsStapleAssets } from './news-assets'\nimport { type TapeImageVariant } from './tape-assets'\nimport { TapePicture } from './tape-picture'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────────────────────────────────\n Tape — curated tape/sticker image assets\n ────────────────────────────────────────────── */\nexport type TapeVariant = TapeImageVariant\n\nexport interface TapeProps extends React.ComponentProps<'div'> {\n variant?: TapeVariant\n position?: 'top-left' | 'top-right' | 'center' | 'bottom-left' | 'bottom-right' | 'news' | 'event'\n}\n\nfunction Tape({\n className,\n variant = 'tape-1',\n position = 'top-left',\n children,\n ...props\n}: TapeProps) {\n // Determine static layout positioning if no custom classes override it\n const hasCustomPositioning =\n className?.includes('top-') ||\n className?.includes('bottom-') ||\n className?.includes('left-') ||\n className?.includes('right-') ||\n className?.includes('translate-')\n\n return (\n <div\n data-slot=\"tape\"\n data-variant={variant}\n data-position={position}\n className={cn(\n 'pointer-events-none absolute z-20 select-none',\n !hasCustomPositioning && [\n 'w-[35%] max-w-[120px] data-[position=top-left]:-top-3 data-[position=top-left]:-left-2 data-[position=top-left]:rotate-[-8deg]',\n 'w-[35%] max-w-[120px] data-[position=top-right]:-top-3 data-[position=top-right]:-right-2 data-[position=top-right]:rotate-[6deg]',\n 'w-[35%] max-w-[120px] data-[position=center]:top-1/2 data-[position=center]:left-1/2 data-[position=center]:-translate-x-1/2 data-[position=center]:-translate-y-1/2 data-[position=center]:rotate-[-3deg]',\n 'w-[35%] max-w-[120px] data-[position=bottom-left]:-bottom-3 data-[position=bottom-left]:-left-2 data-[position=bottom-left]:rotate-[4deg]',\n 'w-[35%] max-w-[120px] data-[position=bottom-right]:-right-2 data-[position=bottom-right]:-bottom-3 data-[position=bottom-right]:rotate-[-5deg]',\n 'w-[35%] max-w-[120px] data-[position=news]:-top-5 data-[position=news]:left-6 data-[position=news]:origin-center data-[position=news]:[transform:translate(0,-50%)_rotate(-12deg)]',\n 'w-[35%] max-w-[120px] data-[position=event]:-top-5 data-[position=event]:right-6 data-[position=event]:origin-center data-[position=event]:[transform:translate(0,-50%)_rotate(12deg)]',\n ],\n className\n )}\n {...props}\n >\n <TapePicture asset={variant} className=\"drop-shadow-[1px_2px_1.5px_rgba(0,0,0,0.28)]\" />\n {children}\n </div>\n )\n}\n\n/* ──────────────────────────────────────────────\n Staple — curated image-backed news staple pin\n ────────────────────────────────────────────── */\nexport interface StapleProps extends React.ComponentProps<'div'> {\n position?: 'left' | 'right' | 'top' | 'bottom'\n}\n\nfunction Staple({ className, position = 'left', ...props }: StapleProps) {\n const asset = position === 'left' ? newsStapleAssets.left : newsStapleAssets.right\n\n // Check if custom positioning classes are passed\n const hasCustomPositioning =\n className?.includes('top-') ||\n className?.includes('bottom-') ||\n className?.includes('left-') ||\n className?.includes('right-') ||\n className?.includes('translate-')\n\n return (\n <div\n data-slot=\"staple\"\n data-position={position}\n className={cn(\n 'pointer-events-none absolute z-30 select-none',\n !hasCustomPositioning && [\n 'w-[14%] max-w-[90px] data-[position=left]:bottom-0 data-[position=left]:left-[20px]',\n 'w-[10%] max-w-[90px] data-[position=right]:right-[20px] data-[position=right]:bottom-0',\n 'w-[10%] max-w-[90px] rotate-90 data-[position=top]:top-0 data-[position=top]:left-[20px]',\n 'w-[10%] max-w-[90px] rotate-90 data-[position=bottom]:bottom-0 data-[position=bottom]:left-[20px]',\n ],\n className\n )}\n {...props}\n >\n <picture>\n <img\n alt=\"\"\n className={cn(\n 'block h-auto w-full',\n position === 'left'\n ? 'drop-shadow-[1px_2px_2px_rgba(0,0,0,0.25)]'\n : 'drop-shadow-[1px_1.5px_1.5px_rgba(0,0,0,0.25)]'\n )}\n decoding=\"async\"\n draggable={false}\n height={asset.height}\n src={asset.src}\n width={asset.width}\n />\n </picture>\n </div>\n )\n}\n\nexport { Tape, Staple }\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { Tape, type TapeVariant } from './tape'\n\ninterface MarqueeProps extends React.ComponentProps<'div'> {\n speed?: number\n direction?: 'left' | 'right'\n pauseOnHover?: boolean\n variant?: 'default' | 'tape' | 'warning'\n showEdgeTape?: boolean\n tapeVariant?: TapeVariant\n}\n\nfunction Marquee({\n className,\n speed = 30,\n direction = 'left',\n pauseOnHover = true,\n variant = 'default',\n showEdgeTape = false,\n tapeVariant = 'tape-2',\n children,\n ...props\n}: MarqueeProps) {\n return (\n <div\n data-slot=\"marquee\"\n data-variant={variant}\n className={cn(\n 'group/marquee relative flex overflow-hidden select-none',\n 'data-[variant=tape]:bg-primary data-[variant=tape]:text-primary-foreground data-[variant=tape]:border-foreground data-[variant=tape]:-rotate-[2deg] data-[variant=tape]:border-y-2',\n 'data-[variant=warning]:text-chaos-black data-[variant=warning]:border-foreground data-[variant=warning]:border-y-2 data-[variant=warning]:bg-[repeating-linear-gradient(45deg,var(--color-yellow),var(--color-yellow)_12px,var(--color-black)_12px,var(--color-black)_24px)]',\n 'data-[variant=default]:bg-foreground data-[variant=default]:text-background data-[variant=default]:border-foreground data-[variant=default]:border-y-2',\n className\n )}\n {...props}\n >\n {showEdgeTape && (\n <>\n <Tape variant={tapeVariant} position=\"top-left\" className=\"z-30\" />\n <Tape variant={tapeVariant} position=\"top-right\" className=\"z-30\" />\n </>\n )}\n <div\n className={cn(\n 'splat-heading flex w-max items-center gap-8 px-8 py-2 text-sm text-[24px] font-black tracking-widest whitespace-nowrap uppercase',\n '[animation:marquee_linear_infinite]',\n pauseOnHover && 'group-hover/marquee:[animation-play-state:paused]',\n direction === 'right' && '[animation-direction:reverse]'\n )}\n style={{ '--marquee-duration': `${speed}s` } as React.CSSProperties}\n >\n {children}\n <span aria-hidden=\"true\">{children}</span>\n </div>\n </div>\n )\n}\n\nfunction MarqueeItem({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"marquee-item\"\n className={cn('inline-flex shrink-0 items-center gap-2', className)}\n {...props}\n />\n )\n}\n\nexport { Marquee, MarqueeItem }\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\ninterface NavChevronProps {\n isHighlighted?: boolean\n className?: string\n}\n\nexport function NavChevron({ isHighlighted, className }: NavChevronProps) {\n return (\n <svg\n data-nav-chevron=\"true\"\n aria-hidden=\"true\"\n viewBox=\"0 0 7 12\"\n className={cn(\n 'mt-[0.22em] h-[1.1rem] w-[0.65rem] shrink-0 text-current transition-transform duration-200 ease-out md:h-[1.35rem] md:w-[0.8rem]',\n className\n )}\n style={{\n transform: isHighlighted ? 'translateX(5px)' : 'translateX(0px)',\n }}\n >\n <path\n d=\"M0,11.23.12,11l.32-.47.3-.12-.16-.35.18-.49.4-.21L1.09,9l.23-.35.26-.21.32-.21L2,7.84l.2-.38v-.3l.47-.47-.05-.38L3,6.08l-.19-.77,0-.26-.26-.3-.1-.31-.42-.25,0-.38-.32-.23L1.5,3.25l0-.32-.05-.26L1,2.37.94,2,.66,1.76.51,1.41.23,1.08.3.66.14.41,0,.13l.7,0L1,.08l.14.14L1.68,0,2,.12,2.21,0l.66.21.26,0h.42l.33.14L4.3.69l0,.38.29.27.14.4L5,2l.07.37,0,.14L5.48,3l.07.09.42.3.1.33L6,4.07l.24.33.42.25,0,.35.1.4.16.47-.11.42-.21.33L6.41,7,6.2,7.2,6,7.6,6,7.93l-.28.31-.3.3,0,.19-.16.37L5,9.43l-.18.14-.23.33-.21.38.09.42-.3.33,0,.18-.66.24-.39.1-.52.09,0-.09-.5-.09-.46.07-.26.09-.4,0-.39-.07-.45.17L0,11.23Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst PAPER_TEAR_EDGE_ASSETS = {\n top: {\n src: '/_images/svg/paper-tear-up.svg',\n width: 448,\n height: 60,\n },\n bottom: {\n src: '/_images/svg/paper-tear-down.svg',\n width: 448,\n height: 24,\n },\n} as const\n\nexport interface PaperTearEdgeProps extends React.ComponentProps<'div'> {\n edge?: keyof typeof PAPER_TEAR_EDGE_ASSETS\n color?: string\n}\n\nexport function PaperTearEdge({\n edge = 'top',\n color = 'currentColor',\n className,\n style,\n ...props\n}: PaperTearEdgeProps) {\n const asset = PAPER_TEAR_EDGE_ASSETS[edge]\n const maskUrl = `url(\"${asset.src}\")`\n\n return (\n <div\n aria-hidden=\"true\"\n data-slot=\"paper-tear-edge\"\n data-edge={edge}\n className={cn('block shrink-0', className)}\n style={{\n aspectRatio: `${asset.width} / ${asset.height}`,\n backgroundColor: color,\n maskImage: maskUrl,\n maskPosition: 'center',\n maskRepeat: 'no-repeat',\n maskSize: '100% 100%',\n WebkitMaskImage: maskUrl,\n WebkitMaskPosition: 'center',\n WebkitMaskRepeat: 'no-repeat',\n WebkitMaskSize: '100% 100%',\n ...style,\n }}\n {...props}\n />\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { PaperTearEdge } from './paper-tear-edge'\n\nexport type PaperSurfaceTone = 'white' | 'black' | 'red'\n\nconst PAPER_SURFACE_FILL: Record<PaperSurfaceTone, string> = {\n white: 'var(--color-white)',\n black: 'var(--color-black)',\n red: 'var(--color-red)',\n}\n\nexport interface PaperSurfaceProps extends React.ComponentProps<'div'> {\n tone?: PaperSurfaceTone\n topEdgeClassName?: string\n bottomEdgeClassName?: string\n contentClassName?: string\n showTopEdge?: boolean\n showBottomEdge?: boolean\n}\n\nexport function PaperSurface({\n tone = 'white',\n className,\n topEdgeClassName,\n bottomEdgeClassName,\n contentClassName,\n showTopEdge = true,\n showBottomEdge = true,\n children,\n ...props\n}: PaperSurfaceProps) {\n const fill = PAPER_SURFACE_FILL[tone]\n\n return (\n <div className={cn('relative flex flex-col', className)} {...props}>\n {showTopEdge ? (\n <PaperTearEdge\n edge=\"top\"\n color={fill}\n className={cn('pointer-events-none relative z-10 mb-[-2px] w-full select-none', topEdgeClassName)}\n />\n ) : null}\n <div className={cn('relative z-10', contentClassName)}>{children}</div>\n {showBottomEdge ? (\n <PaperTearEdge\n edge=\"bottom\"\n color={fill}\n className={cn('pointer-events-none relative z-10 mt-[-2px] w-full select-none', bottomEdgeClassName)}\n />\n ) : null}\n </div>\n )\n}\n","/* PhotoFrame — unified styled-photo with tape decoration */\n\n/* ── Photo container — torn paper border ── */\n.photoFrame {\n --border-offset-x: 3px;\n --border-offset-y: 4px;\n --tape-rotation: 6deg;\n --margin-offset: 6;\n --photo-aspect-ratio: auto;\n aspect-ratio: var(--photo-aspect-ratio);\n container-type: inline-size;\n display: inline-block;\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));\n line-height: 0;\n margin-top: calc(var(--base-space, 8px) * var(--margin-offset));\n padding: calc(var(--border-offset-y) * 2) calc(var(--border-offset-x) * 2);\n position: relative;\n transform: rotate(var(--end-rotate, 0deg));\n}\n\n.photoFrame::before {\n background-image: url('/_images/svg/styled-photo-background.svg');\n background-position: 50% center;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n content: '';\n height: calc(100% + var(--border-offset-y) * 2);\n left: calc(var(--border-offset-x) * -1);\n position: absolute;\n top: calc(var(--border-offset-y) * -1);\n width: calc(100% + var(--border-offset-x) * 2);\n pointer-events: none;\n}\n\n/* ── Block display variant ── */\n.fillWidth {\n --photo-aspect-ratio: 16 / 9;\n display: block;\n width: 100%;\n}\n\n/* ── Nested variant ── */\n.nested {\n max-width: 350px;\n}\n\n.nested.photoFrame {\n --border-offset-x: 2px;\n --border-offset-y: 3px;\n --margin-offset: 4;\n}\n\n/* ── Border variants ── */\n.thinBorder.photoFrame,\n.photoFrame.thinBorder {\n --border-offset-x: 2px;\n --border-offset-y: 3px;\n}\n\n.mediumBorder.photoFrame,\n.photoFrame.mediumBorder {\n --border-offset-x: 2px;\n --border-offset-y: 4px;\n}\n\n/* ── Photo image ── */\n.photo {\n mask-image: url('/_images/svg/styled-photo-background.svg');\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: 100% 100%;\n object-fit: contain;\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n/* ── Disable container-type for non-carousel contexts ── */\n.noContainer {\n container-type: unset;\n}\n\n/* ── Tape decoration ── */\n.tape {\n position: absolute;\n z-index: 20;\n pointer-events: none;\n}\n\n.tapeMobile {\n display: block;\n}\n.tapeDesktop {\n display: none;\n}\n\n@container (min-width: 400px) {\n .tapeMobile {\n display: none;\n }\n .tapeDesktop {\n display: block;\n }\n}\n\n/* ── Tape position variants — aligns with TornCard slot logic ── */\n.tapeCenter {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%) rotate(var(--tape-rotate, 6deg));\n}\n\n.tapeLeft {\n top: 0;\n left: var(--slot-offset, 15%);\n transform: translateY(-50%) rotate(var(--tape-rotate, 6deg));\n}\n\n.tapeRight {\n top: 0;\n right: var(--slot-offset, 15%);\n transform: translateY(-50%) rotate(var(--tape-rotate, 6deg));\n}\n\n.tapeBottomCenter {\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 50%) rotate(var(--tape-rotate, 6deg));\n}\n\n.tapeBottomLeft {\n bottom: 0;\n left: var(--slot-offset, 15%);\n transform: translateY(50%) rotate(var(--tape-rotate, 6deg));\n}\n\n.tapeBottomRight {\n bottom: 0;\n right: var(--slot-offset, 15%);\n transform: translateY(50%) rotate(var(--tape-rotate, 6deg));\n}\n\n/* ── Decoration (sticker) — aligns with TornCard slot logic ── */\n.decoration {\n pointer-events: none;\n position: absolute;\n z-index: 20;\n}\n\n.decorationMobile {\n display: block;\n}\n.decorationDesktop {\n display: none;\n}\n\n@container (min-width: 400px) {\n .decorationMobile {\n display: none;\n }\n .decorationDesktop {\n display: block;\n }\n}\n\n.decorationBottomLeft {\n --slot-offset: 15%;\n bottom: 0;\n left: var(--slot-offset);\n transform: translateY(50%);\n}\n\n.decorationTopRight {\n --slot-offset: 15%;\n top: 0;\n right: var(--slot-offset);\n transform: translateY(-50%);\n}\n\n.decorationBottomRight {\n --slot-offset: 15%;\n bottom: 0;\n right: var(--slot-offset);\n transform: translateY(50%);\n}\n\n.decorationCenter {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n@media screen and (min-width: 640px) {\n .decorationBottomLeft,\n .decorationBottomRight {\n --slot-offset: 15%;\n }\n\n .decorationTopRight {\n --slot-offset: 15%;\n }\n}\n\n/* ── Responsive ── */\n@media screen and (min-width: 640px) {\n .photoFrame {\n --border-offset-x: 4px;\n --border-offset-y: 3px;\n }\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { isTapeImageVariant, type TapeImageVariant } from './tape-assets'\nimport { MediaDecoration } from './media-decoration'\nimport styles from './photo-frame.module.css'\n\n/* ── PhotoFrame — unified styled-photo with tape decoration ── */\n\ntype PhotoFrameVariant = 'a' | 'b' | 'c' | 'd' | 'e'\n\ninterface PhotoTapeAssetConfig {\n asset: TapeImageVariant\n /** Tape rotation */\n rotation: string\n}\n\ninterface PhotoDecorationAssetConfig {\n asset: TapeImageVariant\n}\n\nexport interface PhotoFrameProps extends React.ComponentProps<'div'> {\n /** Image source */\n src?: string\n /** Image alt text */\n alt?: string\n /** Border style variant */\n border?: 'default' | 'thin' | 'medium'\n /** Component variant preset */\n variant?: PhotoFrameVariant\n /** Show decorative tape (default: from variant config) */\n showTape?: boolean\n /** Show decorative sticker (default: from variant config) */\n showSticker?: boolean\n /** Tape position at photo edge */\n tapePosition?: 'center' | 'left' | 'right'\n /** CSS custom property for rotation */\n rotation?: string\n /** CSS custom property for margin offset */\n marginOffset?: number\n /** Nested mode (smaller, scaled tape) */\n nested?: boolean\n /** Fill width (block display) */\n fillWidth?: boolean\n}\n\n/* ── Variant presets ── */\n\nconst TAPE_CONFIG = {\n 'tape-2': {\n asset: 'tape-2',\n rotation: '6deg',\n },\n 'tape-5': {\n asset: 'tape-5',\n rotation: '0deg',\n },\n} satisfies Record<string, PhotoTapeAssetConfig>\n\nconst DECORATION_CONFIG = {\n 'sticker-9': {\n asset: 'sticker-9',\n },\n 'sticker-10': {\n asset: 'sticker-10',\n },\n} satisfies Record<string, PhotoDecorationAssetConfig>\n\nconst VARIANT_CONFIG = {\n /** No tape, no decoration */\n a: {\n rotation: '1deg',\n border: 'default' as const,\n showTape: false,\n showSticker: false,\n tapeType: 'tape-2',\n tapePosition: 'center' as const,\n decorationType: 'sticker-9',\n decorationPosition: 'bottomLeft' as const,\n },\n /** Top-center tape-2 */\n b: {\n rotation: '0deg',\n border: 'default' as const,\n showTape: true,\n showSticker: false,\n tapeType: 'tape-2',\n tapePosition: 'center' as const,\n decorationType: 'sticker-9',\n decorationPosition: 'bottomLeft' as const,\n },\n /** Top-center tape-5 + bottom-left sticker-9 */\n c: {\n rotation: '-2deg',\n border: 'medium' as const,\n showTape: true,\n showSticker: true,\n tapeType: 'tape-5',\n tapePosition: 'center' as const,\n decorationType: 'sticker-9',\n decorationPosition: 'bottomLeft' as const,\n },\n /** Top-right sticker-10 */\n d: {\n rotation: '1deg',\n border: 'thin' as const,\n showTape: false,\n showSticker: true,\n tapeType: 'tape-2',\n tapePosition: 'center' as const,\n decorationType: 'sticker-10',\n decorationPosition: 'topRight' as const,\n },\n /** Top-center tape-5 only (no sticker) */\n e: {\n rotation: '-2deg',\n border: 'medium' as const,\n showTape: true,\n showSticker: false,\n tapeType: 'tape-5',\n tapePosition: 'center' as const,\n decorationType: 'sticker-9',\n decorationPosition: 'bottomLeft' as const,\n },\n} as const\n\nexport function PhotoFrame({\n ref,\n src,\n alt,\n border,\n variant = 'a',\n showTape,\n showSticker,\n tapePosition,\n rotation,\n marginOffset,\n nested = false,\n fillWidth = false,\n className,\n children,\n style,\n ...props\n}: PhotoFrameProps & { ref?: React.Ref<HTMLDivElement> }) {\n const config = VARIANT_CONFIG[variant]\n const resolvedBorder = border ?? config.border\n const resolvedShowTape = showTape ?? config.showTape\n const resolvedShowSticker = showSticker ?? config.showSticker\n const resolvedTapePosition = tapePosition ?? config.tapePosition\n const resolvedRotation = rotation ?? config.rotation\n const resolvedTapeType = config.tapeType\n const tapeConfig = TAPE_CONFIG[resolvedTapeType]\n const resolvedTapeRotation = tapeConfig.rotation\n\n return (\n <div\n ref={ref}\n data-slot=\"photo-frame\"\n data-variant={variant}\n className={cn(\n styles.photoFrame,\n fillWidth && styles.fillWidth,\n nested && styles.nested,\n resolvedBorder === 'thin' && styles.thinBorder,\n resolvedBorder === 'medium' && styles.mediumBorder,\n className\n )}\n style={\n {\n '--end-rotate': resolvedRotation,\n '--tape-rotation': resolvedTapeRotation,\n '--margin-offset': marginOffset ?? 6,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n {resolvedShowTape && <PhotoTape position={resolvedTapePosition} type={resolvedTapeType} />}\n\n {resolvedShowSticker && (\n <PhotoDecoration position={config.decorationPosition} type={config.decorationType} />\n )}\n\n {src ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={src} alt={alt ?? 'Styled photo'} className={styles.photo} />\n ) : (\n children\n )}\n </div>\n )\n}\n\n/* ── PhotoTape — tape decoration ── */\n\nconst TAPE_POSITION: Record<string, string> = {\n center: styles.tapeCenter,\n left: styles.tapeLeft,\n right: styles.tapeRight,\n bottomCenter: styles.tapeBottomCenter,\n bottomLeft: styles.tapeBottomLeft,\n bottomRight: styles.tapeBottomRight,\n}\n\nexport interface PhotoTapeProps extends React.ComponentProps<'div'> {\n /** Tape position */\n position?: 'center' | 'left' | 'right' | 'bottomCenter' | 'bottomLeft' | 'bottomRight'\n /** Tape type */\n type?: string\n}\n\nexport function PhotoTape({\n position = 'center',\n type = 'tape-2',\n className,\n ...props\n}: PhotoTapeProps) {\n const config = TAPE_CONFIG[type as keyof typeof TAPE_CONFIG]\n if (!config) return null\n\n return (\n <MediaDecoration\n asset={config.asset}\n className={cn(styles.tape, TAPE_POSITION[position], className)}\n mobilePictureClassName={styles.tapeMobile}\n desktopPictureClassName={styles.tapeDesktop}\n {...props}\n />\n )\n}\n\n/* ── PhotoDecoration — decorative sticker ── */\n\nconst DECORATION_POSITION: Record<string, string> = {\n bottomLeft: styles.decorationBottomLeft,\n topRight: styles.decorationTopRight,\n bottomRight: styles.decorationBottomRight,\n center: styles.decorationCenter,\n}\n\nexport interface PhotoDecorationProps extends React.ComponentProps<'div'> {\n /** Decoration position */\n position?: 'bottomLeft' | 'topRight' | 'bottomRight' | 'center'\n /** Decoration type */\n type?: string\n}\n\nexport function PhotoDecoration({\n position = 'bottomLeft',\n type = 'sticker-9',\n className,\n ...props\n}: PhotoDecorationProps) {\n const config = DECORATION_CONFIG[type as keyof typeof DECORATION_CONFIG]\n const asset = config?.asset ?? (isTapeImageVariant(type) ? type : null)\n if (!asset) return null\n\n return (\n <MediaDecoration\n asset={asset}\n className={cn(styles.decoration, DECORATION_POSITION[position], className)}\n mobilePictureClassName={styles.decorationMobile}\n desktopPictureClassName={styles.decorationDesktop}\n {...props}\n />\n )\n}\n","export function TagHanger() {\n return (\n <svg\n viewBox=\"0 0 566 555\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-full w-full\"\n preserveAspectRatio=\"none\"\n >\n <path\n d=\"m311.748694 27.1685099h-55.497388c-2.987542 0-5.410583-2.41764-5.410583-5.3985227s2.423041-5.3985227 5.410583-5.3985227h21.676089v-.3817326c0-3.3457742 2.719357-6.05906986 6.072605-6.05906986s6.072605 2.71329566 6.072605 6.05906986v.3817326h21.676089c2.987542 0 5.410583 2.41764 5.410583 5.3985227s-2.423041 5.3985227-5.410583 5.3985227m248.671936-18.68057264c-.480108-.68300201-2.89002-2.0040963-2.89002-2.0040963l-1.911052.14595659-1.860415.76907897-1.714133-.13285792-.783925-.39108882.146283-.75785154-.517616-1.52880175s.94146-3.10064198.495111-3.26343972c-.590757-.21332118-1.194642-.40418749-1.807904-.56885647-.613262-.16279774-1.237776-.30314061-1.869792-.41354368-1.265908-.2245486-2.569324-.34243662-3.900871-.34243662h-18.062157l-2.473677.86451213-1.468453 1.75896407-1.665371-.48839322-1.860416.87948204-2.449296-.97865767-1.470329-1.07409083-4.774815-.96181652h-79.04702l-5.950703 1.25560095-4.701675 2.53927047-3.011922-1.63546234h-2.938781l-3.141326 1.01795368 1.157133-1.3847164 2.741862-1.79264636-2.473677.86451213-1.468453 1.75896407-1.665371-.48839322-.748292.35366405-2.361152-1.23314608-3.730208-.5071056-3.715204-.74849535.857066.35927777-2.64434-.35927777h-170.15566l-8.4 1.76832026-6.856531 1.75896407-5.877561-2.34653292-3.91775.39108882-4.309712.97865767-4.506631.19460879-1.762893-1.17326646-8.251842-1.57184023h-160.507435c-1.2377763 0-2.4511722.10104687-3.6345613.29565566-1.1833892.19460879-2.3330208.4827795-3.445144.85515594-.6301407.40231625-1.8266578 1.5213168-1.8266578 1.5213168l-1.106497.78966259-2.39490954.72416925-1.49845948 1.15268284-1.29778968 1.64107605.03563295 1.39220135-.43884796.7952763-1.3596785.87012582-1.02960482 1.6822433s-1.64849297.60441-2.13047555 1.0797046c-1.32592096 2.8405398-2.06671132 6.0066751-2.06671132 9.3449644v499.9200981l3.31949096 13.242754 4.13904889 7.183684 5.48559945 4.300106 5.680643 1.270571 9.5027462 2.640317 11.1906229.658676 6.9784327 1.758964 8.3756195.51272 7.6892164 1.367875h109.36852l6.269524-.877611 1.714133-.245132 1.665372-1.221919 2.154856 1.173267 6.61085 1.171395h175.446216l6.83215-.890709 1.640991-1.307996 1.468453-.097304 3.465774 1.111515 14.361955.258231 31.591427.926263 18.022773-1.074091 7.933021-2.93223 3.268854 2.350275 6.367047-.40793 4.309712-.959945 2.927528.495878 4.712927-.301269 3.233222-1.270571 14.300067-.976787 6.155124.351793 5.6.233905 6.843402-.851414 3.718955-.185252 9.125787.351793 10.446082-1.322966 4.714802-4.27578 5.12927-1.58681 2.839384-2.640317 2.303014-4.739847 1.957937-1.367875 4.017147.19648 4.667917-6.259292 1.370931-5.013048 2.434293-3.925858 1.370931-5.570677 1.370931-5.473372 1.907301-5.600616v-480.0999421c0-4.0287762-1.078366-7.8068065-2.963161-11.0627613-.324448-.5595002-2.246752-2.06771836-2.616209-2.59353634z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { TagHanger } from \"./tag-hanger\"\n\nexport type RuggedTheme = \"yellow\" | \"blue\" | \"purple\" | \"orange\" | \"green\"\n\nconst ruggedThemeMap: Record<RuggedTheme, { bg: string; fg: string }> = {\n yellow: { bg: \"text-yellow\", fg: \"text-black\" },\n blue: { bg: \"text-blue\", fg: \"text-white\" },\n purple: { bg: \"text-purple\", fg: \"text-white\" },\n orange: { bg: \"text-orange\", fg: \"text-white\" },\n green: { bg: \"text-green\", fg: \"text-black\" },\n}\n\nexport interface RuggedCardProps extends React.ComponentProps<\"div\"> {\n ruggedTheme?: RuggedTheme\n ruggedRotation?: string\n ruggedBackground?: React.ReactNode\n}\n\nexport function RuggedCard({\n ref,\n className,\n ruggedTheme = \"yellow\",\n ruggedRotation = \"2deg\",\n ruggedBackground,\n children,\n ...props\n}: RuggedCardProps & { ref?: React.Ref<HTMLDivElement> }) {\n const theme = ruggedThemeMap[ruggedTheme] ?? ruggedThemeMap.yellow\n const defaultBackground = <TagHanger />\n\n return (\n <div\n ref={ref}\n data-slot=\"card\"\n data-variant=\"rugged\"\n style={{ transform: `rotate(${ruggedRotation})` } as React.CSSProperties}\n className={cn(\n \"group/card relative w-full pt-[12%] px-[6%] pb-[8%] select-none text-center flex flex-col justify-between gap-4 z-10\",\n theme.fg,\n className\n )}\n {...props}\n >\n <div className={cn(\"absolute inset-0 w-full h-full z-0 pointer-events-none select-none\", theme.bg)}>\n {ruggedBackground ?? defaultBackground}\n </div>\n\n <div className=\"relative h-full flex flex-col justify-between gap-4 z-10 text-center\">\n {children}\n </div>\n </div>\n )\n}\n","/* Section Background — solid color + optional pattern texture overlay */\n\n.sectionBackground {\n background-position: top;\n min-height: 100px;\n}\n\n/* Pattern texture overlays — tiled/repeating background images */\n\n.patternBaseBgPattern {\n background-image: url('/_images/backgrounds/base-bg-pattern.jpg');\n background-image: image-set(\n url('/_images/backgrounds/base-bg-pattern.jpg') 1x,\n url('/_images/backgrounds/base-bg-pattern-2x.jpg') 2x\n );\n}\n\n.patternCamoBlack {\n background-image: url('/_images/backgrounds/camo-black.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-black.png') 1x,\n url('/_images/backgrounds/camo-black-2x.png') 2x\n );\n}\n\n.patternCamoGreen {\n background-image: url('/_images/backgrounds/camo-green.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-green.png') 1x,\n url('/_images/backgrounds/camo-green-2x.png') 2x\n );\n}\n\n.patternCamoPurple {\n background-image: url('/_images/backgrounds/camo-purple.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-purple.png') 1x,\n url('/_images/backgrounds/camo-purple-2x.png') 2x\n );\n}\n\n.patternCamoPurpleRevised {\n background-image: url('/_images/backgrounds/camo-purple-revised.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-purple-revised.png') 1x,\n url('/_images/backgrounds/camo-purple-revised-2x.png') 2x\n );\n}\n\n.patternCamoOrange {\n background-image: url('/_images/backgrounds/camo-orange.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-orange.png') 1x,\n url('/_images/backgrounds/camo-orange-2x.png') 2x\n );\n}\n\n.patternCamoRed {\n background-image: url('/_images/backgrounds/camo-red.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-red.png') 1x,\n url('/_images/backgrounds/camo-red-2x.png') 2x\n );\n}\n\n.patternCamoWhite {\n background-image: url('/_images/backgrounds/camo-white.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-white.png') 1x,\n url('/_images/backgrounds/camo-white-2x.png') 2x\n );\n}\n\n.patternCamoWhiteOutline {\n background-image: url('/_images/backgrounds/camo-white-outline.png');\n background-image: image-set(\n url('/_images/backgrounds/camo-white-outline.png') 1x,\n url('/_images/backgrounds/camo-white-outline-2x.png') 2x\n );\n}\n\n.patternHardwareBackground {\n background-image: url('/_images/backgrounds/hardware-background.png');\n background-image: image-set(\n url('/_images/backgrounds/hardware-background.png') 1x,\n url('/_images/backgrounds/hardware-background-2x.png') 2x\n );\n background-position: 50%;\n background-repeat: no-repeat;\n background-size: contain;\n}\n\n@media screen and (min-width: 640px) {\n .patternHardwareBackground {\n background-image: url('/_images/backgrounds/hardware-background-medium-up.png');\n background-image: image-set(\n url('/_images/backgrounds/hardware-background-medium-up.png') 1x,\n url('/_images/backgrounds/hardware-background-medium-up-2x.png') 2x\n );\n }\n}\n\n.patternOctoBlack {\n background-image: url('/_images/backgrounds/octo-black.png');\n background-image: image-set(\n url('/_images/backgrounds/octo-black.png') 1x,\n url('/_images/backgrounds/octo-black-2x.png') 2x\n );\n}\n\n.patternOctoRed {\n background-image: url('/_images/backgrounds/octo-red.png');\n background-image: image-set(\n url('/_images/backgrounds/octo-red.png') 1x,\n url('/_images/backgrounds/octo-red-2x.png') 2x\n );\n}\n\n.patternOctoarrowGreen {\n background-image: url('/_images/backgrounds/octoarrow-green.png');\n background-image: image-set(\n url('/_images/backgrounds/octoarrow-green.png') 1x,\n url('/_images/backgrounds/octoarrow-green-2x.png') 2x\n );\n}\n\n.patternOctoarrowOrange {\n background-image: url('/_images/backgrounds/octoarrow-orange.png');\n background-image: image-set(\n url('/_images/backgrounds/octoarrow-orange.png') 1x,\n url('/_images/backgrounds/octoarrow-orange-2x.png') 2x\n );\n}\n\n.patternSquidBlack {\n background-image: url('/_images/backgrounds/squid-black.png');\n background-image: image-set(\n url('/_images/backgrounds/squid-black.png') 1x,\n url('/_images/backgrounds/squid-black-2x.png') 2x\n );\n}\n\n.patternCirclesGreen {\n background-image: url('/_images/backgrounds/circles-green.png');\n background-image: image-set(\n url('/_images/backgrounds/circles-green.png') 1x,\n url('/_images/backgrounds/circles-green-2x.png') 2x\n );\n}\n\n.patternChipWhite {\n background-image: url('/_images/backgrounds/chip-white.png');\n background-image: image-set(\n url('/_images/backgrounds/chip-white.png') 1x,\n url('/_images/backgrounds/chip-white-2x.png') 2x\n );\n}\n\n.patternMonstersBlack {\n background-image: url('/_images/backgrounds/monsters-black.png');\n background-image: image-set(\n url('/_images/backgrounds/monsters-black.png') 1x,\n url('/_images/backgrounds/monsters-black-2x.png') 2x\n );\n background-size: 50%;\n}\n\n/* Cover-style backgrounds (graffiti, salmon run) */\n.patternGraffiti {\n background-image: url('/_images/backgrounds/graffiti.jpg');\n background-image: image-set(\n url('/_images/backgrounds/graffiti.jpg') 1x,\n url('/_images/backgrounds/graffiti-2x.jpg') 2x\n );\n background-position: 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n@media screen and (min-width: 640px) {\n .patternGraffiti {\n background-image: url('/_images/backgrounds/graffiti-medium-up.jpg');\n background-image: image-set(\n url('/_images/backgrounds/graffiti-medium-up.jpg') 1x,\n url('/_images/backgrounds/graffiti-medium-up-2x.jpg') 2x\n );\n }\n}\n\n/* Tape-based backgrounds */\n.patternTapesBlack {\n background-image: url('/_images/backgrounds/tapes-black.jpg');\n background-image: image-set(\n url('/_images/backgrounds/tapes-black.webp') type('image/webp') 1x,\n url('/_images/backgrounds/tapes-black.jpg') 1x,\n url('/_images/backgrounds/tapes-black-2x.webp') type('image/webp') 2x,\n url('/_images/backgrounds/tapes-black-2x.jpg') 2x\n );\n}\n\n.patternTapesGreen {\n background-image: url('/_images/backgrounds/tapes-green.jpg');\n background-image: image-set(\n url('/_images/backgrounds/tapes-green.webp') type('image/webp') 1x,\n url('/_images/backgrounds/tapes-green.jpg') 1x,\n url('/_images/backgrounds/tapes-green-2x.webp') type('image/webp') 2x,\n url('/_images/backgrounds/tapes-green-2x.jpg') 2x\n );\n}\n\n.patternTapesPattern {\n background-image: url('/_images/backgrounds/tapes-pattern.jpg');\n background-image: image-set(\n url('/_images/backgrounds/tapes-pattern.jpg') 1x,\n url('/_images/backgrounds/tapes-pattern-2x.jpg') 2x\n );\n}\n\n.patternTapesPurple {\n background-image: url('/_images/backgrounds/tapes-purple.jpg');\n background-image: image-set(\n url('/_images/backgrounds/tapes-purple.webp') type('image/webp') 1x,\n url('/_images/backgrounds/tapes-purple.jpg') 1x,\n url('/_images/backgrounds/tapes-purple-2x.webp') type('image/webp') 2x,\n url('/_images/backgrounds/tapes-purple-2x.jpg') 2x\n );\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport styles from './section-background.module.css'\n\nexport type Pattern =\n | 'base-bg-pattern'\n | 'camo-black'\n | 'camo-green'\n | 'camo-purple'\n | 'camo-purple-revised'\n | 'camo-orange'\n | 'camo-red'\n | 'camo-white'\n | 'camo-white-outline'\n | 'hardware-background'\n | 'octo-black'\n | 'octo-red'\n | 'octoarrow-green'\n | 'octoarrow-orange'\n | 'squid-black'\n | 'circles-green'\n | 'chip-white'\n | 'monsters-black'\n | 'graffiti'\n | 'tapes-black'\n | 'tapes-green'\n | 'tapes-pattern'\n | 'tapes-purple'\n\nconst PATTERN_MAP: Record<Pattern, string> = {\n 'base-bg-pattern': styles.patternBaseBgPattern,\n 'camo-black': styles.patternCamoBlack,\n 'camo-green': styles.patternCamoGreen,\n 'camo-purple': styles.patternCamoPurple,\n 'camo-purple-revised': styles.patternCamoPurpleRevised,\n 'camo-orange': styles.patternCamoOrange,\n 'camo-red': styles.patternCamoRed,\n 'camo-white': styles.patternCamoWhite,\n 'camo-white-outline': styles.patternCamoWhiteOutline,\n 'hardware-background': styles.patternHardwareBackground,\n 'octo-black': styles.patternOctoBlack,\n 'octo-red': styles.patternOctoRed,\n 'octoarrow-green': styles.patternOctoarrowGreen,\n 'octoarrow-orange': styles.patternOctoarrowOrange,\n 'squid-black': styles.patternSquidBlack,\n 'circles-green': styles.patternCirclesGreen,\n 'chip-white': styles.patternChipWhite,\n 'monsters-black': styles.patternMonstersBlack,\n graffiti: styles.patternGraffiti,\n 'tapes-black': styles.patternTapesBlack,\n 'tapes-green': styles.patternTapesGreen,\n 'tapes-pattern': styles.patternTapesPattern,\n 'tapes-purple': styles.patternTapesPurple,\n}\n\nexport interface SectionBackgroundProps extends React.HTMLAttributes<HTMLElement> {\n /** Solid background color (e.g. \"bg-white\", \"bg-black\") */\n bgColor?: string\n /** Dark mode background color */\n darkBgColor?: string\n /** Optional pattern texture overlay */\n pattern?: Pattern\n as?: 'div' | 'section'\n}\n\nexport function SectionBackground({\n bgColor,\n darkBgColor,\n pattern,\n as: Tag = 'div',\n className,\n children,\n ...props\n}: SectionBackgroundProps) {\n return (\n <Tag\n className={cn(\n styles.sectionBackground,\n bgColor,\n darkBgColor,\n pattern && PATTERN_MAP[pattern],\n className\n )}\n {...props}\n >\n {children}\n </Tag>\n )\n}\n","import * as React from 'react'\nimport { layoutTokens } from '@/lib/ui-tokens'\nimport { cn } from '@/lib/utils'\nimport { type Pattern, SectionBackground } from './section-background'\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n /** Base size — controls vertical padding. `md` = 64px, `lg` = 80px */\n size?: 'md' | 'lg'\n /** Pass a HeadingTape element to auto-increase padding for sticker overflow */\n headingTape?: React.ReactNode\n /** Optional pattern texture overlay */\n pattern?: Pattern\n /** Tailwind background class (e.g. \"bg-white\") */\n bgColor?: string\n /** Tailwind text color class (e.g. \"text-chaos-black\") */\n text?: string\n /** Render as \"section\" or \"div\" */\n as?: 'section' | 'div'\n /** Reserve content-safe space for decorative overlays painted across the section edge. */\n bottomOverlayClearance?: 'none' | 'banner-divider'\n style?: React.CSSProperties\n}\n\nexport function Section({\n size = 'md',\n headingTape,\n pattern,\n bgColor,\n text,\n as = 'section',\n bottomOverlayClearance = 'none',\n className,\n children,\n style,\n ...props\n}: SectionProps) {\n const paddingY = headingTape\n ? size === 'lg'\n ? 'py-28'\n : 'py-24'\n : size === 'lg'\n ? 'py-20'\n : 'py-16'\n\n return (\n <SectionBackground\n as={as}\n pattern={pattern}\n className={cn(\n paddingY,\n 'relative z-[var(--z-deco)] pr-[calc(1.5rem+var(--section-side-nav-safe-area,0px))] pl-6',\n bgColor,\n text,\n className,\n bottomOverlayClearance === 'banner-divider' && 'pb-[var(--section-overlay-clearance)]'\n )}\n style={\n {\n ...(bottomOverlayClearance === 'banner-divider'\n ? { '--section-overlay-clearance': layoutTokens.bannerDividerClearance }\n : {}),\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n {headingTape}\n {children}\n </SectionBackground>\n )\n}\n","export interface ShowcaseImageAsset {\n src: string\n alt: string\n width: number\n height: number\n}\n\nexport const showcaseMediaAssets = {\n trailerThumbnail: {\n src: '/_images/screenshots/video-trailer.jpg',\n alt: 'Splatoon UI media dialog preview',\n width: 748,\n height: 421,\n },\n fullscreenPreview: {\n src: '/_images/gameplay/battle-online/gameplay-battle-online-anarchy-1.jpg',\n alt: 'Fullscreen media dialog reference artwork',\n width: 658,\n height: 370,\n },\n ruggedLookbook: {\n src: '/_images/home/s3-home-intro-blade.jpg',\n alt: 'Rugged card lookbook reference artwork',\n width: 558,\n height: 313,\n },\n ruggedMode: {\n src: '/_images/gameplay/gameplay-salmonrun.jpg',\n alt: 'Rugged card mode reference artwork',\n width: 558,\n height: 313,\n },\n ruggedScene: {\n src: '/_images/gameplay/splatfest/gameplay-splatfest-1.jpg',\n alt: 'Rugged card scene reference artwork',\n width: 558,\n height: 313,\n },\n homeHeader: {\n src: '/_images/home/header-back.jpg',\n alt: 'Home header background reference artwork',\n width: 901,\n height: 1151,\n },\n homeCharacter: {\n src: '/_images/home/character.png',\n alt: 'Home character reference artwork',\n width: 1193,\n height: 767,\n },\n turfWarLeft: {\n src: '/_images/gameplay/battle-online/gameplay-battle-online-turfwar-left-screen.jpg',\n alt: 'Turf war left screen reference artwork',\n width: 658,\n height: 370,\n },\n turfWarRight: {\n src: '/_images/gameplay/battle-online/gameplay-battle-online-turfwar-right-screen.jpg',\n alt: 'Turf war right screen reference artwork',\n width: 658,\n height: 370,\n },\n splatfestSecondary: {\n src: '/_images/gameplay/splatfest/gameplay-splatfest-2.jpg',\n alt: 'Splatfest secondary reference artwork',\n width: 558,\n height: 313,\n },\n} satisfies Record<string, ShowcaseImageAsset>\n","const SQUID_ASSET_BASE = '/_images/squid'\n\nexport interface SquidImageAsset {\n id: string\n src: string\n alt: string\n width: number\n height: number\n}\n\nexport interface SquidSpriteAsset extends SquidImageAsset {\n frameWidth: number\n frameHeight: number\n frames: number\n durationMs: number\n sourceUrl: string\n}\n\nexport const squidImageAssets = {\n loader: {\n id: 'loader-ika',\n src: `${SQUID_ASSET_BASE}/loader_ika.gif`,\n alt: 'Animated squid loading glyph',\n width: 516,\n height: 567,\n },\n mask: {\n id: 'ika',\n src: `${SQUID_ASSET_BASE}/ika.png`,\n alt: 'Squid mask reference artwork',\n width: 438,\n height: 481,\n },\n} satisfies Record<string, SquidImageAsset>\n\nexport const squidSpriteAssets = {\n loaderMorph: {\n id: 'loader-morph-sprite',\n src: `${SQUID_ASSET_BASE}/loader-morph-sprite.png`,\n alt: 'Frame-animated morphing squid loader sprite',\n width: 8320,\n height: 130,\n frameWidth: 130,\n frameHeight: 130,\n frames: 64,\n durationMs: 8001,\n sourceUrl:\n 'https://www.spriters-resource.com/media/assets/180/182952.png?updated=1755487320',\n },\n loaderSwim: {\n id: 'loader-swim-sprite',\n src: `${SQUID_ASSET_BASE}/loader-swim-sprite.png`,\n alt: 'Frame-animated swimming squid loader sprite',\n width: 4030,\n height: 130,\n frameWidth: 130,\n frameHeight: 130,\n frames: 31,\n durationMs: 6201,\n sourceUrl:\n 'https://www.spriters-resource.com/media/assets/180/182953.png?updated=1755487320',\n },\n} satisfies Record<string, SquidSpriteAsset>\n",".stapleCard {\n filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.14));\n height: 100%;\n}\n\n.card {\n display: flex;\n flex-direction: column;\n height: 100%;\n position: relative;\n transition: transform calc(var(--duration-factor) * 0.3s) var(--ease-in-out);\n}\n\n.card.hoverTilt:hover {\n transform: rotate(2deg);\n}\n\n.cardLayout {\n background-color: var(--color-white, #fff);\n color: var(--color-black, #0d0d0d);\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n padding: calc(var(--base-space, 8px) * 0) calc(var(--base-space, 8px) * 4)\n calc(var(--base-space, 8px) * 3) calc(var(--base-space, 8px) * 4);\n position: relative;\n}\n\n.image {\n align-items: center;\n display: flex;\n justify-content: center;\n transform: rotate(-1deg);\n width: 100%;\n}\n\n.image img {\n object-fit: contain;\n}\n\n.stapleLeft {\n bottom: 0;\n left: 20px;\n position: absolute;\n width: 20%;\n}\n\n.stapleRight {\n bottom: 0;\n position: absolute;\n right: 20px;\n width: 10%;\n}\n\n.tape {\n display: block;\n}\n\n.tapeImage {\n display: block;\n height: auto;\n width: 100%;\n}\n\n/* ── Responsive image: mobile by default, desktop at 400px container width ── */\n.imgDesktop {\n display: none;\n}\n\n@container (min-width: 400px) {\n .imgMobile {\n display: none;\n }\n .imgDesktop {\n display: block;\n }\n}\n\n.cardBottom {\n margin-top: -2px;\n width: 100%;\n}\n\n.cardTop {\n margin-bottom: -2px;\n width: 100%;\n}\n\n.info {\n align-items: center;\n display: flex;\n flex-direction: column;\n height: 100%;\n justify-content: flex-start;\n padding: calc(var(--base-space, 8px) * 2) 0;\n}\n\n/* ── Surface: dark ── */\n.surfaceDark .cardLayout {\n background-color: var(--color-black-alt, #0e0e0e);\n color: var(--color-white, #fff);\n}\n\n/* ── Convenience title/subtitle ── */\n.title {\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 2;\n}\n\n.subtitle {\n margin-top: calc(var(--base-space, 8px) * 1);\n font-size: 0.875rem;\n opacity: 0.75;\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { newsStapleAssets } from './news-assets'\nimport { MediaDecoration } from './media-decoration'\nimport { PaperSurface } from './paper-surface'\nimport styles from './staple-card.module.css'\n\n/* ── Variant config ── */\n\ntype StapleCardVariant = 'a' | 'b' | 'c' | 'd'\n\nconst VARIANT_CONFIG = {\n /** No tape */\n a: { showTape: false },\n /** With tape */\n b: { showTape: true },\n /** With tape (alt) */\n c: { showTape: true },\n /** With tape (alt) */\n d: { showTape: true },\n} as const\n\n/* ── StapleCard ── */\n\nexport interface StapleCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Variant preset (controls tape visibility and position) */\n variant?: StapleCardVariant\n /** Image/media shown in the tilted image area */\n image?: React.ReactNode\n /** Convenience: renders a title paragraph in the info area */\n title?: React.ReactNode\n /** Convenience: renders a subtitle paragraph below the title */\n subtitle?: React.ReactNode\n /** Convenience: renders an action element (e.g. a Button) at the bottom of info */\n action?: React.ReactNode\n /** Visual surface: \"white\" (default) or \"dark\" (dark bg, white text) */\n surface?: 'white' | 'dark'\n /** Whether to show the decorative tape element (default: from variant config) */\n showTape?: boolean\n /** Enable hover tilt animation (default: false) */\n hoverTilt?: boolean\n className?: string\n children?: React.ReactNode\n}\n\nexport function StapleCard({\n variant = 'b',\n image,\n title,\n subtitle,\n action,\n surface = 'white',\n showTape,\n hoverTilt = false,\n className,\n children,\n ...props\n}: StapleCardProps) {\n const config = VARIANT_CONFIG[variant]\n const resolvedShowTape = showTape ?? config.showTape\n const isDark = surface === 'dark'\n\n return (\n <div\n data-slot=\"card\"\n data-variant={variant}\n className={cn(styles.stapleCard, isDark && styles.surfaceDark, className)}\n {...props}\n >\n <div className={cn(styles.card, '@container', hoverTilt && styles.hoverTilt)}>\n <PaperSurface\n tone={isDark ? 'black' : 'white'}\n topEdgeClassName={styles.cardTop}\n bottomEdgeClassName={styles.cardBottom}\n contentClassName={styles.cardLayout}\n >\n <div className={styles.stapleLeft}>\n <picture>\n <img\n className={styles.imgMobile}\n alt=\"\"\n src={newsStapleAssets.left.src}\n width={newsStapleAssets.left.width}\n height={newsStapleAssets.left.height}\n />\n <img\n className={styles.imgDesktop}\n alt=\"\"\n src={newsStapleAssets.left.src}\n width={newsStapleAssets.left.width}\n height={newsStapleAssets.left.height}\n />\n </picture>\n </div>\n <div className={styles.stapleRight}>\n <picture>\n <img\n className={styles.imgMobile}\n alt=\"\"\n src={newsStapleAssets.right.src}\n width={newsStapleAssets.right.width}\n height={newsStapleAssets.right.height}\n />\n <img\n className={styles.imgDesktop}\n alt=\"\"\n src={newsStapleAssets.right.src}\n width={newsStapleAssets.right.width}\n height={newsStapleAssets.right.height}\n />\n </picture>\n </div>\n <div className={styles.image}>{image}</div>\n <div className={styles.info}>\n {children ?? (\n <>\n {title && <p className={styles.title}>{title}</p>}\n {subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n {action}\n </>\n )}\n </div>\n </PaperSurface>\n {resolvedShowTape && (\n <MediaDecoration\n position=\"top-left\"\n className={styles.tape}\n asset=\"sticker-9\"\n responsive={false}\n media=\"(min-width: 400px)\"\n imageClassName={styles.tapeImage}\n style={{\n left: '25%',\n transform: 'translate(-50%, -50%) rotate(-10deg)',\n }}\n />\n )}\n </div>\n </div>\n )\n}\n\n/* ── Sub-components ── */\n\nfunction StapleCardTitle({ className, ...props }: React.ComponentProps<'p'>) {\n return <p data-slot=\"card-title\" className={cn(styles.title, className)} {...props} />\n}\n\nfunction StapleCardDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return <p data-slot=\"card-description\" className={cn(styles.subtitle, className)} {...props} />\n}\n\nexport { StapleCardTitle, StapleCardDescription }\n","import * as React from 'react'\n\nimport { TapePicture } from '@/components/ui/tape-picture'\nimport type { TapeImageVariant } from '@/components/ui/tape-assets'\n\ninterface StickerImageProps extends Omit<\n React.ComponentProps<'img'>,\n 'height' | 'src' | 'srcSet' | 'width'\n> {\n asset: TapeImageVariant\n}\n\nexport function StickerImage({\n asset,\n alt = '',\n className,\n draggable = false,\n ...props\n}: StickerImageProps) {\n return (\n <TapePicture {...props} asset={asset} alt={alt} className={className} draggable={draggable} />\n )\n}\n","import * as React from 'react'\n\nimport { StickerImage } from './sticker-image'\n\ntype Sticker2RedProps = Omit<React.ComponentProps<'img'>, 'height' | 'src' | 'srcSet' | 'width'>\n\nexport function Sticker2Red({ className, ...props }: Sticker2RedProps) {\n return <StickerImage asset=\"sticker-2-red\" className={className} {...props} />\n}\n\nSticker2Red.displayName = 'Sticker2Red'\n","import * as React from 'react'\n\nimport { StickerImage } from './sticker-image'\n\ntype Sticker10Props = Omit<React.ComponentProps<'img'>, 'height' | 'src' | 'srcSet' | 'width'>\n\nexport function Sticker10({ className, ...props }: Sticker10Props) {\n return <StickerImage asset=\"sticker-10\" className={className} {...props} />\n}\n\nSticker10.displayName = 'Sticker10'\n","import * as React from 'react'\n\nimport { StickerImage } from './sticker-image'\n\ntype Sticker5Props = Omit<React.ComponentProps<'img'>, 'height' | 'src' | 'srcSet' | 'width'>\n\nexport function Sticker5({ className, ...props }: Sticker5Props) {\n return <StickerImage asset=\"sticker-5\" className={className} {...props} />\n}\n\nSticker5.displayName = 'Sticker5'\n","/* Tape Divider — full-width tape strip between sections */\n\n.tapeDivider {\n position: relative;\n width: 100%;\n z-index: 2;\n pointer-events: none;\n line-height: 0;\n}\n\n/* Primary tape strip (tape-2.png) */\n.tapePrimary {\n background-image: url('/_images/tape-assets/tape-2.png');\n background-image: image-set(\n url('/_images/tape-assets/tape-2.png') 1x,\n url('/_images/tape-assets/tape-2-2x.png') 2x\n );\n background-position: center;\n background-repeat: repeat-x;\n background-size: auto 100%;\n height: 36px;\n width: 100%;\n}\n\n/* Secondary tape strip (tape-3.png) */\n.tapeSecondary {\n background-image: url('/_images/tape-assets/tape-3.png');\n background-image: image-set(\n url('/_images/tape-assets/tape-3.png') 1x,\n url('/_images/tape-assets/tape-3-2x.png') 2x\n );\n background-position: center;\n background-repeat: repeat-x;\n background-size: auto 100%;\n height: 38px;\n width: 100%;\n}\n\n/* Primary-only: single tape strip */\n.primaryOnly .tapePrimary {\n height: 36px;\n}\n\n/* Double: two tape strips stacked with slight offsets */\n.double .tapePrimary {\n position: relative;\n z-index: 1;\n}\n.double .tapeSecondary {\n margin-top: -18px;\n position: relative;\n z-index: 0;\n}\n\n/* Rotation variants */\n.rotateLeft {\n transform: rotate(-2deg);\n}\n.rotateRight {\n transform: rotate(2deg);\n}\n.rotateStrong {\n transform: rotate(-4deg);\n}\n\n/* Overlapped spacing — pushes next section up to overlap the tape */\n.overlap {\n margin-top: -36px;\n padding-top: 36px;\n}\n\n@media screen and (min-width: 640px) {\n .tapePrimary {\n height: 48px;\n }\n .tapeSecondary {\n height: 50px;\n }\n .double .tapeSecondary {\n margin-top: -24px;\n }\n .overlap {\n margin-top: -48px;\n padding-top: 48px;\n }\n}\n\n@media screen and (min-width: 1024px) {\n .tapePrimary {\n height: 60px;\n }\n .tapeSecondary {\n height: 62px;\n }\n .double .tapeSecondary {\n margin-top: -30px;\n }\n .overlap {\n margin-top: -60px;\n padding-top: 60px;\n }\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport styles from \"./tape-divider.module.css\"\n\nexport interface TapeDividerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Single tape strip or double (tape-2 + tape-3 stacked) */\n variant?: \"primary\" | \"double\"\n /** Rotation direction */\n rotate?: \"none\" | \"left\" | \"right\" | \"strong\"\n /** Apply negative margin so next section overlaps the tape */\n overlap?: boolean\n}\n\nexport function TapeDivider({\n variant = \"primary\",\n rotate = \"none\",\n overlap = false,\n className,\n ...props\n}: TapeDividerProps) {\n const rotateClass =\n rotate === \"left\"\n ? styles.rotateLeft\n : rotate === \"right\"\n ? styles.rotateRight\n : rotate === \"strong\"\n ? styles.rotateStrong\n : undefined\n\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n styles.tapeDivider,\n variant === \"double\" && styles.double,\n overlap && styles.overlap,\n className,\n )}\n {...props}\n >\n <div className={cn(styles.tapePrimary, rotateClass)} />\n {variant === \"double\" && (\n <div className={cn(styles.tapeSecondary, rotateClass)} />\n )}\n </div>\n )\n}\n","/* tape-title.module.css\n Tape-title component styles.\n Red/yellow/black background with left/right tape SVG pseudo-elements. */\n\n.container {\n --tape-title-left-bleed: 61px;\n --tape-title-right-bleed: 59px;\n --tape-color: var(--color-true-black, #000);\n background: var(--color-black, #0d0d0d);\n color: var(--color-white, #fff);\n display: inline-block;\n margin-inline: var(--tape-title-left-bleed) var(--tape-title-right-bleed);\n position: relative;\n transform: rotate(-4deg);\n z-index: 2;\n}\n\n/* Left tape */\n.container::before {\n background-color: var(--tape-color);\n mask-image: url('/_images/svg/left-tape.svg');\n mask-position: 100% center;\n mask-repeat: no-repeat;\n mask-size: contain;\n content: ' ';\n height: 100%;\n left: -61px;\n position: absolute;\n width: 62px;\n}\n\n/* Right tape */\n.container::after {\n background-color: var(--tape-color);\n mask-image: url('/_images/svg/right-tape.svg');\n mask-position: 0 center;\n mask-repeat: no-repeat;\n mask-size: contain;\n content: ' ';\n height: 100%;\n position: absolute;\n right: -58px;\n top: 0;\n width: 59px;\n}\n\n/* Red variant */\n.red {\n --tape-color: var(--color-red, #ff505e);\n background: var(--color-red, #ff505e);\n color: var(--color-black, #0d0d0d);\n}\n\n/* Yellow variant */\n.yellow {\n --tape-color: var(--color-yellow, #eaff3d);\n background: var(--color-yellow, #eaff3d);\n color: var(--color-black, #0d0d0d);\n}\n\n/* Title text */\n.title {\n font-family: var(--font-alt);\n font-weight: 600;\n font-size: 1.5rem;\n line-height: 1;\n padding: 8px 16px 16px;\n text-transform: none;\n white-space: nowrap;\n}\n\n@media screen and (min-width: 1024px) {\n .title {\n font-size: 2.3125rem;\n padding: 16px 40px 24px;\n }\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport styles from './tape-title.module.css'\n\ninterface TapeTitleProps extends React.HTMLAttributes<HTMLDivElement> {\n color?: 'black' | 'red' | 'yellow'\n children: React.ReactNode\n}\n\nexport function TapeTitle({ color = 'black', className, children, ...props }: TapeTitleProps) {\n return (\n <div\n className={cn(\n styles.container,\n color === 'red' && styles.red,\n color === 'yellow' && styles.yellow,\n className\n )}\n {...props}\n >\n <h2 className={styles.title}>{children}</h2>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport styles from './wave-button.module.css'\n\nexport type WaveButtonVariant = 'yellow' | 'white' | 'ghost'\nexport type WaveButtonSize = 'md' | 'lg'\nexport type WaveButtonAnimation = 'morph' | 'none'\n\nexport interface WaveButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Visual variant — controls background color */\n variant?: WaveButtonVariant\n /** Button size */\n size?: WaveButtonSize\n /** Custom icon node. Defaults to the hamburger→X line animation. Pass null for no icon. */\n icon?: React.ReactNode\n /** Blob border-radius animation */\n animation?: WaveButtonAnimation\n}\n\nconst VARIANT_CLASS: Record<WaveButtonVariant, string> = {\n yellow: styles.yellow,\n white: styles.white,\n ghost: styles.ghost,\n}\n\nconst SIZE_CLASS: Record<WaveButtonSize, string> = {\n md: styles.md,\n lg: styles.lg,\n}\n\nconst WaveButton = React.forwardRef<HTMLButtonElement, WaveButtonProps>(\n function WaveButton(\n {\n variant = 'yellow',\n size = 'md',\n icon,\n animation = 'morph',\n className,\n ...props\n },\n ref,\n ) {\n return (\n <button\n ref={ref}\n className={cn(\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n styles.iconWrap,\n animation === 'morph' && styles.morph,\n styles.pressed,\n 'grid place-content-center cursor-pointer',\n className,\n )}\n {...props}\n >\n {icon !== null && (\n icon ?? (\n <span data-menu-trigger-line=\"\" className={styles.icon} />\n )\n )}\n </button>\n )\n },\n)\n\nexport { WaveButton }\n","/* WaveButton & NavMenuButton shared animation/icon classes */\n\n/* ── Shared: morph blob animation ── */\n\n.morph {\n animation: morph calc(var(--duration-factor, 1) * 3s) linear infinite;\n border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;\n transform: translateZ(0);\n}\n\n@keyframes morph {\n 0%,\n 100% {\n border-radius: 40% 60% 70% 30% / 40% 40% 60% 50%;\n }\n 34% {\n border-radius: 70% 30% 50% 50% / 30% 30% 70% 70%;\n }\n 67% {\n border-radius: 100% 60% 60% 100% / 100% 100% 60% 60%;\n }\n}\n\n/* ── Shared: icon wrap container ── */\n\n.iconWrap {\n background-color: var(--color-yellow, #eaff3d);\n display: grid;\n flex-shrink: 0;\n height: 48px;\n place-content: center;\n width: 48px;\n}\n\n/* ── Shared: hamburger / X icon ── */\n\n.icon {\n --line-w: 19px;\n --line-h: 4px;\n --line-y: calc(var(--line-h) * -1.5);\n background-color: var(--color-blue, #603bff);\n display: block;\n height: var(--line-h);\n position: relative;\n width: var(--line-w);\n transition: background-color 0.1s linear;\n}\n\n.icon::before,\n.icon::after {\n --line-rotation: 0deg;\n background-color: var(--color-blue, #603bff);\n content: '';\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n transform: translateY(var(--line-y)) rotate(var(--line-rotation));\n transition:\n transform 0.25s cubic-bezier(0.21, 0.12, 0.35, 1.43),\n background-color 0.1s linear;\n width: 100%;\n}\n\n.icon::after {\n --line-y: calc(var(--line-h) * 1.5);\n}\n\n/* ── Shared: pressed (X) state ── */\n\n.pressed .icon {\n background-color: transparent;\n}\n\n.pressed .icon::before {\n --line-y: 0px;\n --line-rotation: 45deg;\n}\n\n.pressed .icon::after {\n --line-y: 0px;\n --line-rotation: -45deg;\n}\n\n/* ── WaveButton variants ── */\n\n.yellow {\n background-color: var(--color-yellow, #eaff3d);\n}\n\n.white {\n background-color: var(--color-white);\n}\n\n.ghost {\n background-color: transparent;\n}\n\n/* ── WaveButton sizes ── */\n\n.md {\n height: 48px;\n width: 48px;\n}\n\n.lg {\n height: 64px;\n width: 64px;\n}\n","const WEAPONS_ASSET_BASE = '/_images/weapons'\n\nexport interface WeaponGalleryAsset {\n id: string\n image: string\n alt: string\n title: string\n description?: string\n}\n\nexport interface WeaponShopGalleryAsset extends WeaponGalleryAsset {\n icon: string\n iconRotate?: number\n}\n\nexport interface WeaponMarqueeAsset {\n id: string\n image: string\n alt: string\n}\n\nconst weaponMarqueeSources = Array.from({ length: 22 }, (_, index) => {\n const item = index + 1\n return {\n id: `weapon-reference-${item}`,\n image: `${WEAPONS_ASSET_BASE}/marquee/s3_weapons_social-${item}.jpg`,\n alt: `Weapon reference artwork ${item}`,\n }\n}) satisfies WeaponMarqueeAsset[]\n\nexport const weaponShowcaseItems = weaponMarqueeSources.slice(0, 6).map((asset, index) => ({\n ...asset,\n id: `loadout-panel-${index + 1}`,\n title: `Loadout Panel ${index + 1}`,\n description: [\n 'Carousel frame using curated weapon reference artwork.',\n 'Rotated media shell with curated source imagery.',\n 'High-contrast gallery card for dense media pages.',\n 'Responsive photo frame with tape and sticker accents.',\n 'Sequential carousel state with fixed image rhythm.',\n 'Reusable feature card for component-heavy sections.',\n ][index],\n})) satisfies WeaponGalleryAsset[]\n\nexport const weaponShopGalleryItems = [\n {\n id: 'reference-shop-1',\n image: `${WEAPONS_ASSET_BASE}/shops-gallery/weapons-express-hotlantis-1.jpg`,\n icon: `${WEAPONS_ASSET_BASE}/shops-gallery/harmony-icon.png`,\n iconRotate: -14,\n alt: 'Shop reference artwork 1',\n title: 'Media Kit',\n description: 'Frames, carousels, and gallery controls for image-heavy layouts.',\n },\n {\n id: 'reference-shop-2',\n image: `${WEAPONS_ASSET_BASE}/shops-gallery/weapons-express-ammo-knights-2.jpg`,\n icon: `${WEAPONS_ASSET_BASE}/shops-gallery/sheldon-icon.png`,\n iconRotate: -38,\n alt: 'Shop reference artwork 2',\n title: 'Control Kit',\n description: 'Buttons, pagination, and navigation controls with bold silhouettes.',\n },\n {\n id: 'reference-shop-3',\n image: `${WEAPONS_ASSET_BASE}/shops-gallery/weapons-express-naut-couture-3.jpg`,\n icon: `${WEAPONS_ASSET_BASE}/shops-gallery/jella-icon.png`,\n iconRotate: -43,\n alt: 'Shop reference artwork 3',\n title: 'Surface Kit',\n description: 'Cards, tags, torn-paper surfaces, and layered content panels.',\n },\n {\n id: 'reference-shop-4',\n image: `${WEAPONS_ASSET_BASE}/shops-gallery/weapons-express-manoward-4.jpg`,\n icon: `${WEAPONS_ASSET_BASE}/shops-gallery/coco-icon.png`,\n iconRotate: 25,\n alt: 'Shop reference artwork 4',\n title: 'Overlay Kit',\n description: 'Dialogs, sheets, popovers, and full-screen media flows.',\n },\n {\n id: 'reference-shop-5',\n image: `${WEAPONS_ASSET_BASE}/shops-gallery/weapons-express-crush-station-5.jpg`,\n icon: `${WEAPONS_ASSET_BASE}/shops-gallery/eddy-icon.png`,\n iconRotate: 11,\n alt: 'Shop reference artwork 5',\n title: 'Feedback Kit',\n description: 'Alerts, progress indicators, loaders, and stateful UI feedback.',\n },\n] satisfies WeaponShopGalleryAsset[]\n\nexport const weaponMarqueeItems = weaponMarqueeSources satisfies WeaponMarqueeAsset[]\n"],"mappings":"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","names":["jsx","source","_a","_b","jsx","jsx","jsx","jsxs","jsxs","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","VARIANT_CONFIG","_a","jsx","jsx","jsxs","_a","jsx","jsxs","Fragment","jsx","jsxs","VARIANT_CONFIG","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","WaveButton"]}