@nodaro/shared 1.4.2

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 (665) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +32 -0
  3. package/dist/index.cjs +12506 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12269 -0
  6. package/dist/index.d.ts +12269 -0
  7. package/dist/index.js +11831 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +54 -0
  10. package/src/__tests__/__snapshots__/prompt-builder-segments.test.ts.snap +65 -0
  11. package/src/__tests__/ai-avatar-pricing.test.ts +321 -0
  12. package/src/__tests__/apply-video-negative-prompt.test.ts +76 -0
  13. package/src/__tests__/attach-columns.test.ts +28 -0
  14. package/src/__tests__/audio-crossfade-curves.test.ts +33 -0
  15. package/src/__tests__/build-model-menu.test.ts +58 -0
  16. package/src/__tests__/character-aspect-defaults.test.ts +142 -0
  17. package/src/__tests__/character-mention-slug.test.ts +199 -0
  18. package/src/__tests__/character-reference-photo-kinds.test.ts +32 -0
  19. package/src/__tests__/character-usage-mode.test.ts +147 -0
  20. package/src/__tests__/character-variant-assets.test.ts +142 -0
  21. package/src/__tests__/character-voice.test.ts +130 -0
  22. package/src/__tests__/cinematic-avatar-pricing.test.ts +119 -0
  23. package/src/__tests__/combine-transitions.test.ts +137 -0
  24. package/src/__tests__/component-types.test.ts +87 -0
  25. package/src/__tests__/condition-variables.test.ts +98 -0
  26. package/src/__tests__/credit-identifiers.test.ts +811 -0
  27. package/src/__tests__/default-video-provider.test.ts +63 -0
  28. package/src/__tests__/entity-image-handle.test.ts +43 -0
  29. package/src/__tests__/entity-variants.test.ts +33 -0
  30. package/src/__tests__/fal-lip-sync-sets.test.ts +31 -0
  31. package/src/__tests__/featured-entities.test.ts +33 -0
  32. package/src/__tests__/film-pricing.test.ts +64 -0
  33. package/src/__tests__/filter-condition.test.ts +285 -0
  34. package/src/__tests__/freecut-protocol.test.ts +35 -0
  35. package/src/__tests__/generate-text-items.test.ts +19 -0
  36. package/src/__tests__/generated-results.test.ts +50 -0
  37. package/src/__tests__/graph-utils.test.ts +618 -0
  38. package/src/__tests__/group-aggregation.test.ts +83 -0
  39. package/src/__tests__/i18n-locale-completeness.test.ts +156 -0
  40. package/src/__tests__/image-critic-node.test.ts +86 -0
  41. package/src/__tests__/image-mask-mode.test.ts +16 -0
  42. package/src/__tests__/image-ref-limit.test.ts +78 -0
  43. package/src/__tests__/inpaint-region.test.ts +24 -0
  44. package/src/__tests__/input-field-map-parity.test.ts +30 -0
  45. package/src/__tests__/json-evaluator.test.ts +289 -0
  46. package/src/__tests__/json-path.test.ts +64 -0
  47. package/src/__tests__/lip-sync-pricing.test.ts +142 -0
  48. package/src/__tests__/list-merge.test.ts +96 -0
  49. package/src/__tests__/list-sort.test.ts +134 -0
  50. package/src/__tests__/llm-models.test.ts +445 -0
  51. package/src/__tests__/location-mention-slug.test.ts +246 -0
  52. package/src/__tests__/locations-coverage-critic-schema.test.ts +92 -0
  53. package/src/__tests__/loop-delimiter.test.ts +39 -0
  54. package/src/__tests__/lottie-slots.test.ts +245 -0
  55. package/src/__tests__/model-catalog-flux2-resolutions.test.ts +21 -0
  56. package/src/__tests__/model-constants-location.test.ts +20 -0
  57. package/src/__tests__/model-constants.test.ts +122 -0
  58. package/src/__tests__/model-tree.test.ts +86 -0
  59. package/src/__tests__/no-internal-imports.test.ts +25 -0
  60. package/src/__tests__/node-default-mappings.test.ts +175 -0
  61. package/src/__tests__/node-mappable-fields.test.ts +7 -0
  62. package/src/__tests__/node-preset-export.test.ts +46 -0
  63. package/src/__tests__/node-preset-extract.test.ts +166 -0
  64. package/src/__tests__/node-refs-canonical.test.ts +54 -0
  65. package/src/__tests__/node-refs-combine.test.ts +54 -0
  66. package/src/__tests__/node-refs.test.ts +187 -0
  67. package/src/__tests__/node-runtime-keys.test.ts +99 -0
  68. package/src/__tests__/object-aspect-defaults.test.ts +59 -0
  69. package/src/__tests__/parameter-node-value.test.ts +137 -0
  70. package/src/__tests__/pinterest-url.test.ts +35 -0
  71. package/src/__tests__/pipeline-chat.test.ts +110 -0
  72. package/src/__tests__/pipeline-validation.test.ts +98 -0
  73. package/src/__tests__/presentation-utils.test.ts +1137 -0
  74. package/src/__tests__/producer-types.test.ts +47 -0
  75. package/src/__tests__/prompt-length-limits.test.ts +156 -0
  76. package/src/__tests__/provider-directive-defaults.test.ts +46 -0
  77. package/src/__tests__/reduce-strategy-registry.test.ts +43 -0
  78. package/src/__tests__/reference-board-templates.test.ts +33 -0
  79. package/src/__tests__/reference-roles.test.ts +36 -0
  80. package/src/__tests__/resolve-field-mappings.test.ts +110 -0
  81. package/src/__tests__/resolve-pipeline-model.test.ts +76 -0
  82. package/src/__tests__/scene-node-types.test.ts +80 -0
  83. package/src/__tests__/scraper-actors.test.ts +67 -0
  84. package/src/__tests__/seedance-2-catalog.test.ts +18 -0
  85. package/src/__tests__/seedance-2-credit-id.test.ts +23 -0
  86. package/src/__tests__/seedance-aspects.test.ts +52 -0
  87. package/src/__tests__/selector.test.ts +1151 -0
  88. package/src/__tests__/settled-with-limit.test.ts +214 -0
  89. package/src/__tests__/social-media-specs.test.ts +129 -0
  90. package/src/__tests__/sub-workflow-validation.test.ts +88 -0
  91. package/src/__tests__/switchx-pricing.test.ts +28 -0
  92. package/src/__tests__/to-connected-references.test.ts +153 -0
  93. package/src/__tests__/utilities.test.ts +541 -0
  94. package/src/__tests__/video-analysis-pricing.test.ts +58 -0
  95. package/src/__tests__/video-analysis.test.ts +63 -0
  96. package/src/__tests__/video-audio-capability.test.ts +204 -0
  97. package/src/__tests__/video-gen-providers.test.ts +28 -0
  98. package/src/__tests__/video-mode-aliases.test.ts +150 -0
  99. package/src/__tests__/video-ref-limits.test.ts +72 -0
  100. package/src/__tests__/video-utils.test.ts +303 -0
  101. package/src/__tests__/voice-changer-models.test.ts +33 -0
  102. package/src/__tests__/workflow-export-strip.test.ts +46 -0
  103. package/src/ai-avatar-pricing.ts +213 -0
  104. package/src/ancestor-refs.ts +48 -0
  105. package/src/animals.ts +231 -0
  106. package/src/audio-crossfade-curves.ts +73 -0
  107. package/src/audio-fx-presets.ts +64 -0
  108. package/src/avatar-payload-validators.ts +214 -0
  109. package/src/caption-styles.ts +31 -0
  110. package/src/character-aspect-defaults.ts +102 -0
  111. package/src/character-facets.ts +37 -0
  112. package/src/character-mention-slug.ts +166 -0
  113. package/src/character-usage-mode.ts +109 -0
  114. package/src/character-variant-assets.ts +121 -0
  115. package/src/character-voice.ts +151 -0
  116. package/src/cinematic-avatar-pricing.ts +111 -0
  117. package/src/clone-utils.ts +46 -0
  118. package/src/combine-transitions.ts +482 -0
  119. package/src/community.ts +112 -0
  120. package/src/component-types.ts +127 -0
  121. package/src/condition-variables.ts +65 -0
  122. package/src/credit-estimators/index.ts +15 -0
  123. package/src/credit-estimators/video-utils.ts +165 -0
  124. package/src/credit-identifiers.ts +304 -0
  125. package/src/entity-approval-types.ts +31 -0
  126. package/src/entity-aspect-defaults.ts +82 -0
  127. package/src/entity-asset-types.ts +296 -0
  128. package/src/entity-image-handle.ts +36 -0
  129. package/src/extra-refs.ts +139 -0
  130. package/src/featured-entities.ts +136 -0
  131. package/src/film-pricing.ts +117 -0
  132. package/src/filter-condition.ts +250 -0
  133. package/src/flux2-pricing.ts +18 -0
  134. package/src/freecut-protocol.ts +52 -0
  135. package/src/furniture.ts +167 -0
  136. package/src/generate-text-items.ts +15 -0
  137. package/src/generated-results.ts +63 -0
  138. package/src/group-aggregation.ts +75 -0
  139. package/src/hint-graph-types.ts +18 -0
  140. package/src/i18n/action-fx.ar.ts +89 -0
  141. package/src/i18n/action-fx.de.ts +89 -0
  142. package/src/i18n/action-fx.es.ts +89 -0
  143. package/src/i18n/action-fx.fr.ts +89 -0
  144. package/src/i18n/action-fx.he.ts +89 -0
  145. package/src/i18n/action-fx.hi.ts +89 -0
  146. package/src/i18n/action-fx.ja.ts +89 -0
  147. package/src/i18n/action-fx.ko.ts +89 -0
  148. package/src/i18n/action-fx.pt-BR.ts +89 -0
  149. package/src/i18n/action-fx.ru.ts +89 -0
  150. package/src/i18n/action-fx.zh-CN.ts +89 -0
  151. package/src/i18n/aesthetic.ar.ts +170 -0
  152. package/src/i18n/aesthetic.de.ts +48 -0
  153. package/src/i18n/aesthetic.es.ts +169 -0
  154. package/src/i18n/aesthetic.fr.ts +52 -0
  155. package/src/i18n/aesthetic.he.ts +169 -0
  156. package/src/i18n/aesthetic.hi.ts +55 -0
  157. package/src/i18n/aesthetic.ja.ts +165 -0
  158. package/src/i18n/aesthetic.ko.ts +169 -0
  159. package/src/i18n/aesthetic.pt-BR.ts +148 -0
  160. package/src/i18n/aesthetic.ru.ts +155 -0
  161. package/src/i18n/aesthetic.zh-CN.ts +172 -0
  162. package/src/i18n/animals.ar.ts +145 -0
  163. package/src/i18n/animals.de.ts +144 -0
  164. package/src/i18n/animals.es.ts +158 -0
  165. package/src/i18n/animals.fr.ts +144 -0
  166. package/src/i18n/animals.he.ts +155 -0
  167. package/src/i18n/animals.hi.ts +157 -0
  168. package/src/i18n/animals.ja.ts +159 -0
  169. package/src/i18n/animals.ko.ts +159 -0
  170. package/src/i18n/animals.pt-BR.ts +157 -0
  171. package/src/i18n/animals.ru.ts +155 -0
  172. package/src/i18n/animals.zh-CN.ts +155 -0
  173. package/src/i18n/atmosphere.ar.ts +49 -0
  174. package/src/i18n/atmosphere.de.ts +47 -0
  175. package/src/i18n/atmosphere.es.ts +50 -0
  176. package/src/i18n/atmosphere.fr.ts +47 -0
  177. package/src/i18n/atmosphere.he.ts +47 -0
  178. package/src/i18n/atmosphere.hi.ts +49 -0
  179. package/src/i18n/atmosphere.ja.ts +49 -0
  180. package/src/i18n/atmosphere.ko.ts +49 -0
  181. package/src/i18n/atmosphere.pt-BR.ts +49 -0
  182. package/src/i18n/atmosphere.ru.ts +47 -0
  183. package/src/i18n/atmosphere.zh-CN.ts +152 -0
  184. package/src/i18n/backdrop.ar.ts +53 -0
  185. package/src/i18n/backdrop.de.ts +46 -0
  186. package/src/i18n/backdrop.es.ts +54 -0
  187. package/src/i18n/backdrop.fr.ts +52 -0
  188. package/src/i18n/backdrop.he.ts +51 -0
  189. package/src/i18n/backdrop.hi.ts +59 -0
  190. package/src/i18n/backdrop.ja.ts +61 -0
  191. package/src/i18n/backdrop.ko.ts +59 -0
  192. package/src/i18n/backdrop.pt-BR.ts +59 -0
  193. package/src/i18n/backdrop.ru.ts +57 -0
  194. package/src/i18n/backdrop.zh-CN.ts +57 -0
  195. package/src/i18n/camera-format.ar.ts +40 -0
  196. package/src/i18n/camera-format.de.ts +37 -0
  197. package/src/i18n/camera-format.es.ts +41 -0
  198. package/src/i18n/camera-format.fr.ts +37 -0
  199. package/src/i18n/camera-format.he.ts +37 -0
  200. package/src/i18n/camera-format.hi.ts +42 -0
  201. package/src/i18n/camera-format.ja.ts +37 -0
  202. package/src/i18n/camera-format.ko.ts +37 -0
  203. package/src/i18n/camera-format.pt-BR.ts +46 -0
  204. package/src/i18n/camera-format.ru.ts +42 -0
  205. package/src/i18n/camera-format.zh-CN.ts +42 -0
  206. package/src/i18n/camera-motions.ar.ts +86 -0
  207. package/src/i18n/camera-motions.de.ts +74 -0
  208. package/src/i18n/camera-motions.es.ts +86 -0
  209. package/src/i18n/camera-motions.fr.ts +86 -0
  210. package/src/i18n/camera-motions.he.ts +86 -0
  211. package/src/i18n/camera-motions.hi.ts +99 -0
  212. package/src/i18n/camera-motions.ja.ts +99 -0
  213. package/src/i18n/camera-motions.ko.ts +99 -0
  214. package/src/i18n/camera-motions.pt-BR.ts +99 -0
  215. package/src/i18n/camera-motions.ru.ts +99 -0
  216. package/src/i18n/camera-motions.zh-CN.ts +99 -0
  217. package/src/i18n/character-fx.ar.ts +72 -0
  218. package/src/i18n/character-fx.de.ts +72 -0
  219. package/src/i18n/character-fx.es.ts +72 -0
  220. package/src/i18n/character-fx.fr.ts +72 -0
  221. package/src/i18n/character-fx.he.ts +72 -0
  222. package/src/i18n/character-fx.hi.ts +72 -0
  223. package/src/i18n/character-fx.ja.ts +72 -0
  224. package/src/i18n/character-fx.ko.ts +72 -0
  225. package/src/i18n/character-fx.pt-BR.ts +72 -0
  226. package/src/i18n/character-fx.ru.ts +72 -0
  227. package/src/i18n/character-fx.zh-CN.ts +72 -0
  228. package/src/i18n/color-look.ar.ts +50 -0
  229. package/src/i18n/color-look.de.ts +47 -0
  230. package/src/i18n/color-look.es.ts +50 -0
  231. package/src/i18n/color-look.fr.ts +50 -0
  232. package/src/i18n/color-look.he.ts +49 -0
  233. package/src/i18n/color-look.hi.ts +52 -0
  234. package/src/i18n/color-look.ja.ts +54 -0
  235. package/src/i18n/color-look.ko.ts +54 -0
  236. package/src/i18n/color-look.pt-BR.ts +54 -0
  237. package/src/i18n/color-look.ru.ts +52 -0
  238. package/src/i18n/color-look.zh-CN.ts +53 -0
  239. package/src/i18n/composition-effects.ar.ts +26 -0
  240. package/src/i18n/composition-effects.de.ts +25 -0
  241. package/src/i18n/composition-effects.es.ts +27 -0
  242. package/src/i18n/composition-effects.fr.ts +25 -0
  243. package/src/i18n/composition-effects.he.ts +25 -0
  244. package/src/i18n/composition-effects.hi.ts +27 -0
  245. package/src/i18n/composition-effects.ja.ts +27 -0
  246. package/src/i18n/composition-effects.ko.ts +27 -0
  247. package/src/i18n/composition-effects.pt-BR.ts +25 -0
  248. package/src/i18n/composition-effects.ru.ts +82 -0
  249. package/src/i18n/composition-effects.zh-CN.ts +25 -0
  250. package/src/i18n/era.ar.ts +37 -0
  251. package/src/i18n/era.de.ts +34 -0
  252. package/src/i18n/era.es.ts +37 -0
  253. package/src/i18n/era.fr.ts +37 -0
  254. package/src/i18n/era.he.ts +36 -0
  255. package/src/i18n/era.hi.ts +39 -0
  256. package/src/i18n/era.ja.ts +41 -0
  257. package/src/i18n/era.ko.ts +39 -0
  258. package/src/i18n/era.pt-BR.ts +41 -0
  259. package/src/i18n/era.ru.ts +121 -0
  260. package/src/i18n/era.zh-CN.ts +39 -0
  261. package/src/i18n/exposure-settings.ar.ts +28 -0
  262. package/src/i18n/exposure-settings.de.ts +26 -0
  263. package/src/i18n/exposure-settings.es.ts +28 -0
  264. package/src/i18n/exposure-settings.fr.ts +29 -0
  265. package/src/i18n/exposure-settings.he.ts +28 -0
  266. package/src/i18n/exposure-settings.hi.ts +31 -0
  267. package/src/i18n/exposure-settings.ja.ts +31 -0
  268. package/src/i18n/exposure-settings.ko.ts +31 -0
  269. package/src/i18n/exposure-settings.pt-BR.ts +31 -0
  270. package/src/i18n/exposure-settings.ru.ts +31 -0
  271. package/src/i18n/exposure-settings.zh-CN.ts +31 -0
  272. package/src/i18n/framing.ar.ts +78 -0
  273. package/src/i18n/framing.de.ts +73 -0
  274. package/src/i18n/framing.es.ts +78 -0
  275. package/src/i18n/framing.fr.ts +78 -0
  276. package/src/i18n/framing.he.ts +77 -0
  277. package/src/i18n/framing.hi.ts +82 -0
  278. package/src/i18n/framing.ja.ts +84 -0
  279. package/src/i18n/framing.ko.ts +82 -0
  280. package/src/i18n/framing.pt-BR.ts +84 -0
  281. package/src/i18n/framing.ru.ts +82 -0
  282. package/src/i18n/framing.zh-CN.ts +82 -0
  283. package/src/i18n/furniture.ar.ts +92 -0
  284. package/src/i18n/furniture.de.ts +93 -0
  285. package/src/i18n/furniture.es.ts +101 -0
  286. package/src/i18n/furniture.fr.ts +93 -0
  287. package/src/i18n/furniture.he.ts +101 -0
  288. package/src/i18n/furniture.hi.ts +101 -0
  289. package/src/i18n/furniture.ja.ts +101 -0
  290. package/src/i18n/furniture.ko.ts +101 -0
  291. package/src/i18n/furniture.pt-BR.ts +101 -0
  292. package/src/i18n/furniture.ru.ts +101 -0
  293. package/src/i18n/furniture.zh-CN.ts +101 -0
  294. package/src/i18n/held-prop.ar.ts +74 -0
  295. package/src/i18n/held-prop.de.ts +65 -0
  296. package/src/i18n/held-prop.es.ts +83 -0
  297. package/src/i18n/held-prop.fr.ts +74 -0
  298. package/src/i18n/held-prop.he.ts +73 -0
  299. package/src/i18n/held-prop.hi.ts +82 -0
  300. package/src/i18n/held-prop.ja.ts +84 -0
  301. package/src/i18n/held-prop.ko.ts +84 -0
  302. package/src/i18n/held-prop.pt-BR.ts +84 -0
  303. package/src/i18n/held-prop.ru.ts +82 -0
  304. package/src/i18n/held-prop.zh-CN.ts +82 -0
  305. package/src/i18n/index.ts +208 -0
  306. package/src/i18n/instrumentation.ar.ts +195 -0
  307. package/src/i18n/instrumentation.de.ts +195 -0
  308. package/src/i18n/instrumentation.es.ts +195 -0
  309. package/src/i18n/instrumentation.fr.ts +195 -0
  310. package/src/i18n/instrumentation.he.ts +195 -0
  311. package/src/i18n/instrumentation.hi.ts +195 -0
  312. package/src/i18n/instrumentation.ja.ts +195 -0
  313. package/src/i18n/instrumentation.ko.ts +195 -0
  314. package/src/i18n/instrumentation.pt-BR.ts +195 -0
  315. package/src/i18n/instrumentation.ru.ts +195 -0
  316. package/src/i18n/instrumentation.zh-CN.ts +195 -0
  317. package/src/i18n/lens.ar.ts +24 -0
  318. package/src/i18n/lens.de.ts +24 -0
  319. package/src/i18n/lens.es.ts +24 -0
  320. package/src/i18n/lens.fr.ts +24 -0
  321. package/src/i18n/lens.he.ts +24 -0
  322. package/src/i18n/lens.hi.ts +24 -0
  323. package/src/i18n/lens.ja.ts +24 -0
  324. package/src/i18n/lens.ko.ts +24 -0
  325. package/src/i18n/lens.pt-BR.ts +24 -0
  326. package/src/i18n/lens.ru.ts +25 -0
  327. package/src/i18n/lens.zh-CN.ts +24 -0
  328. package/src/i18n/lighting.ar.ts +86 -0
  329. package/src/i18n/lighting.de.ts +84 -0
  330. package/src/i18n/lighting.es.ts +89 -0
  331. package/src/i18n/lighting.fr.ts +84 -0
  332. package/src/i18n/lighting.he.ts +88 -0
  333. package/src/i18n/lighting.hi.ts +90 -0
  334. package/src/i18n/lighting.ja.ts +90 -0
  335. package/src/i18n/lighting.ko.ts +90 -0
  336. package/src/i18n/lighting.pt-BR.ts +90 -0
  337. package/src/i18n/lighting.ru.ts +88 -0
  338. package/src/i18n/lighting.zh-CN.ts +92 -0
  339. package/src/i18n/loop-subject.ar.ts +39 -0
  340. package/src/i18n/loop-subject.de.ts +39 -0
  341. package/src/i18n/loop-subject.es.ts +39 -0
  342. package/src/i18n/loop-subject.fr.ts +39 -0
  343. package/src/i18n/loop-subject.he.ts +39 -0
  344. package/src/i18n/loop-subject.hi.ts +39 -0
  345. package/src/i18n/loop-subject.ja.ts +39 -0
  346. package/src/i18n/loop-subject.ko.ts +39 -0
  347. package/src/i18n/loop-subject.pt-BR.ts +39 -0
  348. package/src/i18n/loop-subject.ru.ts +39 -0
  349. package/src/i18n/loop-subject.zh-CN.ts +39 -0
  350. package/src/i18n/materials.ar.ts +80 -0
  351. package/src/i18n/materials.de.ts +80 -0
  352. package/src/i18n/materials.es.ts +87 -0
  353. package/src/i18n/materials.fr.ts +80 -0
  354. package/src/i18n/materials.he.ts +86 -0
  355. package/src/i18n/materials.hi.ts +86 -0
  356. package/src/i18n/materials.ja.ts +88 -0
  357. package/src/i18n/materials.ko.ts +88 -0
  358. package/src/i18n/materials.pt-BR.ts +88 -0
  359. package/src/i18n/materials.ru.ts +86 -0
  360. package/src/i18n/materials.zh-CN.ts +86 -0
  361. package/src/i18n/mood.ar.ts +61 -0
  362. package/src/i18n/mood.de.ts +61 -0
  363. package/src/i18n/mood.es.ts +66 -0
  364. package/src/i18n/mood.fr.ts +61 -0
  365. package/src/i18n/mood.he.ts +64 -0
  366. package/src/i18n/mood.hi.ts +66 -0
  367. package/src/i18n/mood.ja.ts +66 -0
  368. package/src/i18n/mood.ko.ts +66 -0
  369. package/src/i18n/mood.pt-BR.ts +64 -0
  370. package/src/i18n/mood.ru.ts +64 -0
  371. package/src/i18n/mood.zh-CN.ts +64 -0
  372. package/src/i18n/music-genre.ar.ts +302 -0
  373. package/src/i18n/music-genre.de.ts +302 -0
  374. package/src/i18n/music-genre.es.ts +302 -0
  375. package/src/i18n/music-genre.fr.ts +302 -0
  376. package/src/i18n/music-genre.he.ts +302 -0
  377. package/src/i18n/music-genre.hi.ts +302 -0
  378. package/src/i18n/music-genre.ja.ts +302 -0
  379. package/src/i18n/music-genre.ko.ts +302 -0
  380. package/src/i18n/music-genre.pt-BR.ts +302 -0
  381. package/src/i18n/music-genre.ru.ts +302 -0
  382. package/src/i18n/music-genre.zh-CN.ts +302 -0
  383. package/src/i18n/music-mood.ar.ts +75 -0
  384. package/src/i18n/music-mood.de.ts +75 -0
  385. package/src/i18n/music-mood.es.ts +75 -0
  386. package/src/i18n/music-mood.fr.ts +75 -0
  387. package/src/i18n/music-mood.he.ts +75 -0
  388. package/src/i18n/music-mood.hi.ts +75 -0
  389. package/src/i18n/music-mood.ja.ts +75 -0
  390. package/src/i18n/music-mood.ko.ts +75 -0
  391. package/src/i18n/music-mood.pt-BR.ts +75 -0
  392. package/src/i18n/music-mood.ru.ts +75 -0
  393. package/src/i18n/music-mood.zh-CN.ts +75 -0
  394. package/src/i18n/person.ar.ts +638 -0
  395. package/src/i18n/person.de.ts +629 -0
  396. package/src/i18n/person.es.ts +645 -0
  397. package/src/i18n/person.fr.ts +621 -0
  398. package/src/i18n/person.he.ts +656 -0
  399. package/src/i18n/person.hi.ts +654 -0
  400. package/src/i18n/person.ja.ts +662 -0
  401. package/src/i18n/person.ko.ts +662 -0
  402. package/src/i18n/person.pt-BR.ts +656 -0
  403. package/src/i18n/person.ru.ts +656 -0
  404. package/src/i18n/person.zh-CN.ts +656 -0
  405. package/src/i18n/photo-genre.ar.ts +58 -0
  406. package/src/i18n/photo-genre.de.ts +52 -0
  407. package/src/i18n/photo-genre.es.ts +64 -0
  408. package/src/i18n/photo-genre.fr.ts +58 -0
  409. package/src/i18n/photo-genre.he.ts +62 -0
  410. package/src/i18n/photo-genre.hi.ts +63 -0
  411. package/src/i18n/photo-genre.ja.ts +65 -0
  412. package/src/i18n/photo-genre.ko.ts +63 -0
  413. package/src/i18n/photo-genre.pt-BR.ts +65 -0
  414. package/src/i18n/photo-genre.ru.ts +63 -0
  415. package/src/i18n/photo-genre.zh-CN.ts +63 -0
  416. package/src/i18n/photographer.ar.ts +75 -0
  417. package/src/i18n/photographer.de.ts +74 -0
  418. package/src/i18n/photographer.es.ts +77 -0
  419. package/src/i18n/photographer.fr.ts +77 -0
  420. package/src/i18n/photographer.he.ts +78 -0
  421. package/src/i18n/photographer.hi.ts +80 -0
  422. package/src/i18n/photographer.ja.ts +84 -0
  423. package/src/i18n/photographer.ko.ts +84 -0
  424. package/src/i18n/photographer.pt-BR.ts +83 -0
  425. package/src/i18n/photographer.ru.ts +78 -0
  426. package/src/i18n/photographer.zh-CN.ts +78 -0
  427. package/src/i18n/pose.ar.ts +95 -0
  428. package/src/i18n/pose.de.ts +96 -0
  429. package/src/i18n/pose.es.ts +104 -0
  430. package/src/i18n/pose.fr.ts +96 -0
  431. package/src/i18n/pose.he.ts +104 -0
  432. package/src/i18n/pose.hi.ts +104 -0
  433. package/src/i18n/pose.ja.ts +104 -0
  434. package/src/i18n/pose.ko.ts +104 -0
  435. package/src/i18n/pose.pt-BR.ts +104 -0
  436. package/src/i18n/pose.ru.ts +104 -0
  437. package/src/i18n/pose.zh-CN.ts +104 -0
  438. package/src/i18n/post-process-effects.ar.ts +25 -0
  439. package/src/i18n/post-process-effects.de.ts +24 -0
  440. package/src/i18n/post-process-effects.es.ts +26 -0
  441. package/src/i18n/post-process-effects.fr.ts +24 -0
  442. package/src/i18n/post-process-effects.he.ts +24 -0
  443. package/src/i18n/post-process-effects.hi.ts +26 -0
  444. package/src/i18n/post-process-effects.ja.ts +26 -0
  445. package/src/i18n/post-process-effects.ko.ts +26 -0
  446. package/src/i18n/post-process-effects.pt-BR.ts +24 -0
  447. package/src/i18n/post-process-effects.ru.ts +24 -0
  448. package/src/i18n/post-process-effects.zh-CN.ts +24 -0
  449. package/src/i18n/render-quality.ar.ts +34 -0
  450. package/src/i18n/render-quality.de.ts +30 -0
  451. package/src/i18n/render-quality.es.ts +35 -0
  452. package/src/i18n/render-quality.fr.ts +34 -0
  453. package/src/i18n/render-quality.he.ts +33 -0
  454. package/src/i18n/render-quality.hi.ts +39 -0
  455. package/src/i18n/render-quality.ja.ts +39 -0
  456. package/src/i18n/render-quality.ko.ts +39 -0
  457. package/src/i18n/render-quality.pt-BR.ts +37 -0
  458. package/src/i18n/render-quality.ru.ts +37 -0
  459. package/src/i18n/render-quality.zh-CN.ts +37 -0
  460. package/src/i18n/seasons.ar.ts +10 -0
  461. package/src/i18n/seasons.de.ts +10 -0
  462. package/src/i18n/seasons.es.ts +10 -0
  463. package/src/i18n/seasons.fr.ts +10 -0
  464. package/src/i18n/seasons.he.ts +10 -0
  465. package/src/i18n/seasons.hi.ts +10 -0
  466. package/src/i18n/seasons.ja.ts +10 -0
  467. package/src/i18n/seasons.ko.ts +10 -0
  468. package/src/i18n/seasons.pt-BR.ts +10 -0
  469. package/src/i18n/seasons.ru.ts +10 -0
  470. package/src/i18n/seasons.zh-CN.ts +10 -0
  471. package/src/i18n/setting.ar.ts +73 -0
  472. package/src/i18n/setting.de.ts +73 -0
  473. package/src/i18n/setting.es.ts +77 -0
  474. package/src/i18n/setting.fr.ts +73 -0
  475. package/src/i18n/setting.he.ts +76 -0
  476. package/src/i18n/setting.hi.ts +76 -0
  477. package/src/i18n/setting.ja.ts +78 -0
  478. package/src/i18n/setting.ko.ts +76 -0
  479. package/src/i18n/setting.pt-BR.ts +78 -0
  480. package/src/i18n/setting.ru.ts +76 -0
  481. package/src/i18n/setting.zh-CN.ts +76 -0
  482. package/src/i18n/style.ar.ts +55 -0
  483. package/src/i18n/style.de.ts +54 -0
  484. package/src/i18n/style.es.ts +54 -0
  485. package/src/i18n/style.fr.ts +54 -0
  486. package/src/i18n/style.he.ts +54 -0
  487. package/src/i18n/style.hi.ts +54 -0
  488. package/src/i18n/style.ja.ts +54 -0
  489. package/src/i18n/style.ko.ts +54 -0
  490. package/src/i18n/style.pt-BR.ts +56 -0
  491. package/src/i18n/style.ru.ts +54 -0
  492. package/src/i18n/style.zh-CN.ts +54 -0
  493. package/src/i18n/styling.ar.ts +295 -0
  494. package/src/i18n/styling.de.ts +285 -0
  495. package/src/i18n/styling.es.ts +317 -0
  496. package/src/i18n/styling.fr.ts +285 -0
  497. package/src/i18n/styling.he.ts +307 -0
  498. package/src/i18n/styling.hi.ts +323 -0
  499. package/src/i18n/styling.ja.ts +317 -0
  500. package/src/i18n/styling.ko.ts +311 -0
  501. package/src/i18n/styling.pt-BR.ts +301 -0
  502. package/src/i18n/styling.ru.ts +301 -0
  503. package/src/i18n/styling.zh-CN.ts +307 -0
  504. package/src/i18n/temporal.ar.ts +31 -0
  505. package/src/i18n/temporal.de.ts +24 -0
  506. package/src/i18n/temporal.es.ts +27 -0
  507. package/src/i18n/temporal.fr.ts +28 -0
  508. package/src/i18n/temporal.he.ts +31 -0
  509. package/src/i18n/temporal.hi.ts +31 -0
  510. package/src/i18n/temporal.ja.ts +31 -0
  511. package/src/i18n/temporal.ko.ts +31 -0
  512. package/src/i18n/temporal.pt-BR.ts +31 -0
  513. package/src/i18n/temporal.ru.ts +31 -0
  514. package/src/i18n/temporal.zh-CN.ts +31 -0
  515. package/src/i18n/transitions.ar.ts +97 -0
  516. package/src/i18n/transitions.de.ts +97 -0
  517. package/src/i18n/transitions.es.ts +97 -0
  518. package/src/i18n/transitions.fr.ts +97 -0
  519. package/src/i18n/transitions.he.ts +97 -0
  520. package/src/i18n/transitions.hi.ts +97 -0
  521. package/src/i18n/transitions.ja.ts +97 -0
  522. package/src/i18n/transitions.ko.ts +97 -0
  523. package/src/i18n/transitions.pt-BR.ts +97 -0
  524. package/src/i18n/transitions.ru.ts +97 -0
  525. package/src/i18n/transitions.zh-CN.ts +97 -0
  526. package/src/i18n/types.ts +158 -0
  527. package/src/i18n/vehicles.ar.ts +137 -0
  528. package/src/i18n/vehicles.de.ts +125 -0
  529. package/src/i18n/vehicles.es.ts +138 -0
  530. package/src/i18n/vehicles.fr.ts +125 -0
  531. package/src/i18n/vehicles.he.ts +136 -0
  532. package/src/i18n/vehicles.hi.ts +138 -0
  533. package/src/i18n/vehicles.ja.ts +138 -0
  534. package/src/i18n/vehicles.ko.ts +138 -0
  535. package/src/i18n/vehicles.pt-BR.ts +136 -0
  536. package/src/i18n/vehicles.ru.ts +136 -0
  537. package/src/i18n/vehicles.zh-CN.ts +136 -0
  538. package/src/i18n/voice-character.ar.ts +126 -0
  539. package/src/i18n/voice-character.de.ts +126 -0
  540. package/src/i18n/voice-character.es.ts +126 -0
  541. package/src/i18n/voice-character.fr.ts +126 -0
  542. package/src/i18n/voice-character.he.ts +126 -0
  543. package/src/i18n/voice-character.hi.ts +126 -0
  544. package/src/i18n/voice-character.ja.ts +126 -0
  545. package/src/i18n/voice-character.ko.ts +126 -0
  546. package/src/i18n/voice-character.pt-BR.ts +126 -0
  547. package/src/i18n/voice-character.ru.ts +126 -0
  548. package/src/i18n/voice-character.zh-CN.ts +126 -0
  549. package/src/i18n/voice-delivery.ar.ts +77 -0
  550. package/src/i18n/voice-delivery.de.ts +77 -0
  551. package/src/i18n/voice-delivery.es.ts +77 -0
  552. package/src/i18n/voice-delivery.fr.ts +77 -0
  553. package/src/i18n/voice-delivery.he.ts +77 -0
  554. package/src/i18n/voice-delivery.hi.ts +77 -0
  555. package/src/i18n/voice-delivery.ja.ts +77 -0
  556. package/src/i18n/voice-delivery.ko.ts +77 -0
  557. package/src/i18n/voice-delivery.pt-BR.ts +77 -0
  558. package/src/i18n/voice-delivery.ru.ts +77 -0
  559. package/src/i18n/voice-delivery.zh-CN.ts +77 -0
  560. package/src/i18n/weapons.ar.ts +115 -0
  561. package/src/i18n/weapons.de.ts +114 -0
  562. package/src/i18n/weapons.es.ts +116 -0
  563. package/src/i18n/weapons.fr.ts +103 -0
  564. package/src/i18n/weapons.he.ts +114 -0
  565. package/src/i18n/weapons.hi.ts +116 -0
  566. package/src/i18n/weapons.ja.ts +116 -0
  567. package/src/i18n/weapons.ko.ts +116 -0
  568. package/src/i18n/weapons.pt-BR.ts +114 -0
  569. package/src/i18n/weapons.ru.ts +114 -0
  570. package/src/i18n/weapons.zh-CN.ts +114 -0
  571. package/src/image-critic-node.ts +61 -0
  572. package/src/image-critic-types.ts +40 -0
  573. package/src/index.ts +866 -0
  574. package/src/inject-upstream.ts +15 -0
  575. package/src/inpaint-region.ts +51 -0
  576. package/src/json-evaluator.ts +732 -0
  577. package/src/json-path.ts +52 -0
  578. package/src/lip-sync-pricing.ts +90 -0
  579. package/src/list-merge.ts +40 -0
  580. package/src/list-sort.ts +122 -0
  581. package/src/list-source-resolver.ts +50 -0
  582. package/src/llm-models.ts +245 -0
  583. package/src/location-mention-slug.ts +291 -0
  584. package/src/location-preset-catalog-map.ts +128 -0
  585. package/src/loop-delimiter.ts +73 -0
  586. package/src/lora-routing.ts +95 -0
  587. package/src/lottie-overlay-catalog.ts +175 -0
  588. package/src/lottie-slots.ts +309 -0
  589. package/src/model-catalog.ts +2386 -0
  590. package/src/model-constants.ts +1910 -0
  591. package/src/model-tree.ts +120 -0
  592. package/src/monetization.ts +15 -0
  593. package/src/multi-pick.ts +42 -0
  594. package/src/node-default-mappings.ts +262 -0
  595. package/src/node-mappable-fields.ts +70 -0
  596. package/src/node-preset-export.ts +56 -0
  597. package/src/node-preset-extract.ts +147 -0
  598. package/src/node-refs.ts +253 -0
  599. package/src/node-runtime-keys.ts +117 -0
  600. package/src/object-aspect-defaults.ts +72 -0
  601. package/src/object-picker-types.ts +22 -0
  602. package/src/parameter-node-value.ts +284 -0
  603. package/src/pinterest-url.ts +28 -0
  604. package/src/pipeline-chat.ts +72 -0
  605. package/src/pipeline-defaults.ts +318 -0
  606. package/src/pipeline-events.ts +162 -0
  607. package/src/pipeline-state-types.ts +196 -0
  608. package/src/pipeline-types.ts +647 -0
  609. package/src/pipeline-validation.ts +87 -0
  610. package/src/presentation-types.ts +23 -0
  611. package/src/presentation-utils.ts +397 -0
  612. package/src/producer-types.ts +188 -0
  613. package/src/progress-curve.ts +99 -0
  614. package/src/provider-directive-defaults.ts +69 -0
  615. package/src/reduce-strategy-registry.ts +121 -0
  616. package/src/reference-board-templates.ts +81 -0
  617. package/src/reference-roles.ts +153 -0
  618. package/src/reference-sheet/__tests__/board-to-column.test.ts +20 -0
  619. package/src/reference-sheet/__tests__/catalog.test.ts +50 -0
  620. package/src/reference-sheet/__tests__/cost.test.ts +38 -0
  621. package/src/reference-sheet/__tests__/no-drift.test.ts +28 -0
  622. package/src/reference-sheet/__tests__/panel-plan.test.ts +61 -0
  623. package/src/reference-sheet/__tests__/panel-prompts.test.ts +17 -0
  624. package/src/reference-sheet/__tests__/plan-generation.test.ts +72 -0
  625. package/src/reference-sheet/__tests__/presets.test.ts +54 -0
  626. package/src/reference-sheet/__tests__/types.test.ts +24 -0
  627. package/src/reference-sheet/catalog.ts +144 -0
  628. package/src/reference-sheet/cost.ts +37 -0
  629. package/src/reference-sheet/credit-id.ts +7 -0
  630. package/src/reference-sheet/index.ts +8 -0
  631. package/src/reference-sheet/panel-plan.ts +65 -0
  632. package/src/reference-sheet/panel-prompts.ts +14 -0
  633. package/src/reference-sheet/plan-generation.ts +79 -0
  634. package/src/reference-sheet/presets.ts +77 -0
  635. package/src/reference-sheet/types.ts +92 -0
  636. package/src/repeat-types.ts +97 -0
  637. package/src/resolve-field-mappings.ts +119 -0
  638. package/src/route-filter.ts +80 -0
  639. package/src/scene-helper-types.ts +249 -0
  640. package/src/scene-node-types.ts +281 -0
  641. package/src/scraper-actors.ts +57 -0
  642. package/src/scraper-output-schemas.ts +25 -0
  643. package/src/seasons.ts +45 -0
  644. package/src/selector.ts +864 -0
  645. package/src/settled-with-limit.ts +42 -0
  646. package/src/shot-element.ts +43 -0
  647. package/src/social-media-specs.ts +121 -0
  648. package/src/social-post.ts +24 -0
  649. package/src/sub-workflow-validation.ts +78 -0
  650. package/src/supported-fonts.ts +40 -0
  651. package/src/surround.ts +113 -0
  652. package/src/switchx-pricing.ts +33 -0
  653. package/src/text-separators.ts +59 -0
  654. package/src/to-connected-references.ts +77 -0
  655. package/src/types.ts +272 -0
  656. package/src/variant-job-id.ts +17 -0
  657. package/src/vehicles.ts +213 -0
  658. package/src/video-analysis-pricing.ts +74 -0
  659. package/src/video-analysis.ts +127 -0
  660. package/src/video-duration.ts +25 -0
  661. package/src/voice-changer-models.ts +36 -0
  662. package/src/voice-matcher-types.ts +37 -0
  663. package/src/voices.ts +92 -0
  664. package/src/weapons.ts +190 -0
  665. package/src/workflow-export.ts +153 -0
@@ -0,0 +1,645 @@
1
+ import type { LocaleCatalogMap } from "./types.js"
2
+
3
+ const map: LocaleCatalogMap = {
4
+ // -------------------- Type --------------------
5
+ "man": { label: "Hombre", description: "Hombre adulto" },
6
+ "woman": { label: "Mujer", description: "Mujer adulta" },
7
+ "not-defined": { label: "No definido", description: "Género no especificado — abierto" },
8
+ "beautiful-woman": { label: "Mujer Hermosa", description: "Mujer clásicamente hermosa" },
9
+ "girl-next-door": { label: "Chica de al Lado", description: "Amigable, accesible, encanto sano" },
10
+ "handsome-man": { label: "Hombre Apuesto", description: "Hombre clásicamente apuesto" },
11
+ "boy-next-door": { label: "Chico de al Lado", description: "Amigable, accesible, encanto sano" },
12
+ "gentleman": { label: "Caballero", description: "Hombre refinado, clásico, pulido" },
13
+ "elegant-woman": { label: "Mujer Elegante", description: "Mujer compuesta y refinada" },
14
+ "rugged-man": { label: "Hombre Rudo", description: "Hombre curtido y rudo" },
15
+ "bad-boy": { label: "Chico Malo", description: "Masculino rebelde y atrevido" },
16
+ "graceful-woman": { label: "Mujer Grácil", description: "Mujer gentil y grácil" },
17
+ "baddie": { label: "Baddie", description: "Mujer segura, trendy y estilizada" },
18
+ "stylish-influencer": { label: "Influencer con Estilo", description: "Creadora de contenido pulida, referente de tendencias" },
19
+ "stunning-model": { label: "Modelo Impresionante", description: "Estética de modelo de moda" },
20
+ "supermodel": { label: "Supermodelo", description: "Estrella icónica de pasarela y portada del más alto nivel" },
21
+ "femme-fatale": { description: "Seductora noir atractiva y peligrosa" },
22
+ "tough-guy": { label: "Tipo Duro", description: "Hombre endurecido y duro" },
23
+ "wise-elder": { label: "Anciano Sabio", description: "Anciano envejecido y sabio" },
24
+ "silver-fox": { description: "Hombre mayor distinguido y atractivo" },
25
+ "mysterious-figure": { label: "Figura Misteriosa", description: "Figura enigmática" },
26
+
27
+ // -------------------- Age --------------------
28
+ "age-baby": { label: "Bebé", description: "Menor de 2 años" },
29
+ "age-child": { label: "Niño", description: "Alrededor de 5-12 años" },
30
+ "age-teen": { label: "Adolescente", description: "13-19 años" },
31
+ "age-20s": { label: "20s", description: "Veintena" },
32
+ "age-30s": { label: "30s", description: "Treintena" },
33
+ "age-40s": { label: "40s", description: "Cuarentena" },
34
+ "age-50s": { label: "50s", description: "Cincuentena" },
35
+ "age-60s": { label: "60s", description: "Sesentena" },
36
+ "age-elderly": { label: "Anciano", description: "70 años o más" },
37
+
38
+ // -------------------- Ethnicity (kept regional but translated) --------------------
39
+ "asian-any": { label: "Asiático (cualquiera)", description: "Cualquier asiático — región no especificada" },
40
+ "east-asian": { label: "Asiático Oriental (cualquiera)", description: "Rasgos asiáticos orientales (amplio)" },
41
+ "chinese": { label: "Chino", description: "Rasgos chinos han" },
42
+ "japanese": { label: "Japonés", description: "Rasgos japoneses" },
43
+ "korean": { label: "Coreano", description: "Rasgos coreanos" },
44
+ "mongolian-tibetan": { label: "Mongol / Tibetano", description: "Rasgos mongoles / tibetanos" },
45
+ "south-asian": { label: "Sur Asiático / Indio", description: "Indio / Pakistaní / Bangladesí / Esrilanqués" },
46
+ "southeast-asian": { label: "Sudeste Asiático (cualquiera)", description: "Sudeste asiático (amplio)" },
47
+ "thai": { label: "Tailandés", description: "Rasgos tailandeses" },
48
+ "vietnamese": { label: "Vietnamita", description: "Rasgos vietnamitas" },
49
+ "indonesian-malay": { label: "Indonesio / Malayo", description: "Rasgos indonesios / malayos" },
50
+ "khmer": { label: "Khmer / Camboyano", description: "Rasgos khmer / camboyanos" },
51
+ "filipino": { label: "Filipino", description: "Rasgos filipinos (asiáticos + herencia española)" },
52
+ "mena-any": { label: "Medio Oriente / Norte de África (cualquiera)", description: "Cualquier MENA — sin especificar" },
53
+ "middle-eastern": { label: "Medio Oriental (Árabe)", description: "Rasgos árabes / levantinos / del Golfo" },
54
+ "turkish": { label: "Turco", description: "Rasgos turcos de Anatolia" },
55
+ "persian": { label: "Persa / Iraní", description: "Rasgos indo-iraníes" },
56
+ "israeli": { label: "Israelí", description: "Rasgos israelíes (mediterráneo levantino, amplio)" },
57
+ "african": { label: "Africano (cualquiera)", description: "Cualquier africano subsahariano — región no especificada" },
58
+ "west-african": { label: "África Occidental", description: "Yoruba / Igbo / Akan / Wolof" },
59
+ "east-african": { label: "África Oriental", description: "Somalí / Etíope / Suajili" },
60
+ "central-african": { label: "África Central", description: "Bantú / Congoleño / Angoleño" },
61
+ "southern-african": { label: "África Austral", description: "Zulú / Xhosa / Sotho" },
62
+ "afro-caribbean": { label: "Afrocaribeño", description: "Caribe anglófono (Jamaica / Trinidad / Barbados)" },
63
+ "european-any": { label: "Europeo (cualquiera)", description: "Cualquier europeo — región no especificada" },
64
+ "nordic": { label: "Nórdico (cualquiera)", description: "Cualquier escandinavo / norte de Europa — región sin especificar" },
65
+ "swedish": { label: "Sueco", description: "Suecia — alto, a menudo rubio, rasgos finos" },
66
+ "norwegian": { label: "Noruego", description: "Noruega — piel clara, a menudo ojos claros" },
67
+ "danish": { label: "Danés", description: "Dinamarca — rasgos suaves, rubio ceniza común" },
68
+ "finnish": { label: "Finlandés", description: "Finlandia — rasgos urálicos, pómulos altos" },
69
+ "icelandic": { label: "Islandés", description: "Islandia — mezcla nórdica + celta, rasgos angulares" },
70
+ "celtic": { label: "Celta", description: "Rasgos británicos / irlandeses" },
71
+ "mediterranean": { label: "Mediterráneo", description: "Sur de Europa (amplio)" },
72
+ "slavic": { label: "Eslavo", description: "Rasgos de Europa del Este" },
73
+ "czech": { label: "Checo", description: "Rasgos checos (eslavo occidental, Europa Central)" },
74
+ "russian": { label: "Ruso", description: "Rasgos rusos (eslavo oriental)" },
75
+ "ukrainian": { label: "Ucraniano", description: "Rasgos ucranianos (eslavo oriental)" },
76
+ "italian": { label: "Italiano", description: "Rasgos italianos" },
77
+ "iberian": { label: "Ibérico (Español / Portugués)", description: "Español / Portugués con herencia celtibérica + morisca" },
78
+ "french": { label: "Francés", description: "Rasgos franceses (varían de norte a sur)" },
79
+ "germanic": { label: "Germánico", description: "Alemán / Austriaco / Holandés / Suizo-Alemán" },
80
+ "greek": { label: "Griego", description: "Rasgos griegos" },
81
+ "baltic": { label: "Báltico", description: "Lituano / Letón / Estonio" },
82
+ "latin-american": { label: "Latinoamericano (cualquiera)", description: "Cualquier latinoamericano — región no especificada" },
83
+ "mexican-mesoamerican": { label: "Mexicano / Mesoamericano", description: "Mestizo mexicano / guatemalteco / centroamericano" },
84
+ "caribbean-latino": { label: "Latino del Caribe", description: "Cubano / Dominicano / Puertorriqueño" },
85
+ "brazilian": { label: "Brasileño", description: "Brasileño (portugués + africano + indígena)" },
86
+ "andean-indigenous": { label: "Andino / Indígena Latino", description: "Quechua / Aymara / Maya / Náhuatl" },
87
+ "southern-cone": { label: "Cono Sur Europeo", description: "Argentino / Uruguayo / Chileno (mayormente de descendencia europea)" },
88
+ "indigenous-any": { label: "Indígena (cualquiera)", description: "Cualquier indígena — grupo no especificado" },
89
+ "native-american": { label: "Nativo Americano", description: "Nativo Americano / Primeras Naciones" },
90
+ "aboriginal-australian": { label: "Aborigen Australiano", description: "Aborigen Australiano / Estrecho de Torres" },
91
+ "pacific-islander": { label: "Isleño del Pacífico", description: "Polinesio / Maorí / Samoano / Hawaiano" },
92
+ "inuit": { label: "Inuit / Ártico", description: "Inuit / Yupik / Aleut" },
93
+ "mixed": { label: "Mestizo", description: "Herencia mixta" },
94
+
95
+ // Body (frame / body-mass / bust / waist / hips / silhouette)
96
+ "frame-petite": { label: "Petit", description: "Complexión pequeña y de baja estatura" },
97
+ "frame-slim": { label: "Esbelto", description: "Complexión estrecha y delgada" },
98
+ "frame-average": { label: "Promedio", description: "Complexión promedio" },
99
+ "frame-broad": { label: "Ancho", description: "Complexión amplia y de hombros anchos" },
100
+ "mass-lean": { label: "Enjuto", description: "Enjuto, baja masa corporal" },
101
+ "mass-average": { label: "Promedio", description: "Masa corporal promedio" },
102
+ "mass-full": { label: "Lleno", description: "De figura llena" },
103
+ "mass-heavy": { label: "Robusto", description: "Robusto, de complexión grande" },
104
+ "bust-small": { label: "Pequeño", description: "Busto pequeño" },
105
+ "bust-average": { label: "Promedio", description: "Busto promedio" },
106
+ "bust-full": { label: "Lleno", description: "Busto lleno" },
107
+ "bust-very-full": { label: "Muy Lleno", description: "Busto muy lleno" },
108
+ "waist-defined": { label: "Definida", description: "Cintura definida y marcada" },
109
+ "waist-average": { label: "Promedio", description: "Cintura promedio" },
110
+ "waist-straight": { label: "Recta", description: "Cintura recta, sin definir" },
111
+ "hips-narrow": { label: "Estrechas", description: "Caderas estrechas" },
112
+ "hips-balanced": { label: "Balanceadas", description: "Caderas balanceadas" },
113
+ "hips-wide": { label: "Anchas", description: "Caderas anchas" },
114
+ "silhouette-hourglass": { label: "Reloj de Arena", description: "Busto y caderas balanceados, cintura definida" },
115
+ "silhouette-rectangular": { label: "Rectangular", description: "Silueta recta de arriba abajo" },
116
+ "silhouette-pear": { label: "Pera", description: "Caderas más anchas que los hombros" },
117
+ "silhouette-inverted": { label: "Triángulo Invertido", description: "Hombros anchos, caderas estrechas" },
118
+ "silhouette-athletic": { label: "Atlético", description: "Enjuto, tonificado, forma de V" },
119
+
120
+ // -------------------- Face Shape --------------------
121
+ "face-oval": { label: "Ovalado", description: "Ligeramente más largo que ancho, curvas suaves" },
122
+ "face-round": { label: "Redondo", description: "Rostro circular suave" },
123
+ "face-square": { label: "Cuadrado", description: "Mandíbula fuerte, ancho igual de frente y mandíbula" },
124
+ "face-heart": { label: "Corazón", description: "Frente más ancha, mentón puntiagudo" },
125
+ "face-diamond": { label: "Diamante", description: "Frente y mentón estrechos, pómulos anchos" },
126
+ "face-oblong": { label: "Oblongo", description: "Largo y estrecho" },
127
+ "face-triangular": { label: "Triangular", description: "Frente estrecha, mandíbula ancha" },
128
+
129
+ // -------------------- Jawline --------------------
130
+ "jaw-strong": { label: "Fuerte", description: "Línea de mandíbula afilada y definida" },
131
+ "jaw-soft": { label: "Suave", description: "Mandíbula suave y redondeada" },
132
+ "jaw-pointed": { label: "Puntiaguda", description: "Mentón puntiagudo, mandíbula estrecha" },
133
+ "jaw-wide": { label: "Ancha", description: "Mandíbula ancha y amplia" },
134
+ "jaw-double": { label: "Papada Doble", description: "Papada doble visible" },
135
+
136
+ // -------------------- Eye Shape --------------------
137
+ "eye-almond": { label: "Almendra", description: "En forma de almendra, ligeramente hacia arriba" },
138
+ "eye-round": { label: "Redondo", description: "Ojos amplios y redondos" },
139
+ "eye-hooded": { label: "Encapuchado", description: "Párpado superior cubre parcialmente el pliegue" },
140
+ "eye-monolid": { label: "Monolid", description: "Sin pliegue visible, párpado liso" },
141
+ "eye-deep-set": { label: "Profundamente Hundido", description: "Hundidos más profundamente en la órbita" },
142
+ "eye-downturned": { label: "Hacia Abajo", description: "Esquinas exteriores se inclinan hacia abajo" },
143
+ "eye-upturned": { label: "Hacia Arriba", description: "Esquinas exteriores se levantan" },
144
+ "eye-wide-set": { label: "Muy Separados", description: "Ojos espaciados ampliamente" },
145
+ "eye-close-set": { label: "Muy Juntos", description: "Ojos cercanos entre sí" },
146
+
147
+ // -------------------- Nose --------------------
148
+ "nose-straight": { label: "Recto", description: "Puente recto" },
149
+ "nose-aquiline": { label: "Aguileño", description: "Puente curvado en gancho" },
150
+ "nose-roman": { label: "Romano", description: "Puente prominente con leve protuberancia" },
151
+ "nose-snub": { label: "Respingón", description: "Corto, ligeramente hacia arriba" },
152
+ "nose-button": { label: "De Botón", description: "Pequeño, punta redondeada" },
153
+ "nose-broad": { label: "Ancho", description: "Fosas nasales anchas, puente ancho" },
154
+ "nose-narrow": { label: "Estrecho", description: "Delgado, estrecho" },
155
+ "nose-hooked": { label: "Ganchudo", description: "Punta fuertemente curvada" },
156
+
157
+ // -------------------- Lips --------------------
158
+ "lips-thin": { label: "Delgados", description: "Labios delgados" },
159
+ "lips-medium": { label: "Medios", description: "Plenitud promedio" },
160
+ "lips-full": { label: "Llenos", description: "Labios llenos y voluminosos" },
161
+ "lips-wide": { label: "Anchos", description: "Forma de boca ancha" },
162
+ "lips-cupids-bow": { label: "Arco de Cupido", description: "Arco de cupido pronunciado en el labio superior" },
163
+ "lips-small": { label: "Pequeños", description: "Boca pequeña" },
164
+
165
+ // -------------------- Lip State --------------------
166
+ "lip-state-chapped": { label: "Agrietados", description: "Labios secos, agrietados, curtidos" },
167
+ "lip-state-glossy": { label: "Brillantes", description: "Labios de alto brillo, look mojado" },
168
+ "lip-state-bare": { label: "Naturales", description: "Naturales, sin tratamiento, sin maquillaje" },
169
+ "lip-state-bold-red": { label: "Rojo Intenso", description: "Lápiz labial rojo saturado de declaración" },
170
+ "lip-state-bitten": { label: "Mordidos", description: "Ligero mordisco juguetón al labio inferior" },
171
+ "lip-state-parted": { label: "Entreabiertos", description: "Labios ligeramente entreabiertos, soplo de aire" },
172
+ "lip-state-pursed": { label: "Fruncidos", description: "Labios apretados y empujados hacia adelante" },
173
+ "lip-state-pouting": { label: "Haciendo Puchero", description: "Puchero completo" },
174
+
175
+ // -------------------- Hair Color --------------------
176
+ "hair-platinum": { label: "Platino", description: "Platino muy pálido y helado" },
177
+ "hair-creamy": { label: "Cremoso", description: "Rubio cálido cremoso / vainilla" },
178
+ "hair-blonde": { label: "Rubio", description: "Cabello rubio clásico" },
179
+ "hair-honey": { label: "Miel", description: "Rubio dorado miel cálido" },
180
+ "hair-strawberry": { label: "Rubio Fresa", description: "Rubio con tono rosado-rojizo" },
181
+ "hair-ash-blonde": { label: "Rubio Ceniza", description: "Rubio frío y ceniciento" },
182
+ "hair-ginger": { label: "Pelirrojo", description: "Pelirrojo brillante (rojo-naranja)" },
183
+ "hair-copper": { label: "Cobre", description: "Cobre vibrante naranja-rojizo" },
184
+ "hair-red": { label: "Rojo", description: "Cabello rojo clásico" },
185
+ "hair-auburn": { label: "Caoba", description: "Marrón rojizo intenso" },
186
+ "hair-burgundy": { label: "Burdeos", description: "Rojo vino oscuro" },
187
+ "hair-light-brown": { label: "Castaño Claro", description: "Cabello castaño claro" },
188
+ "hair-caramel": { label: "Caramelo", description: "Castaño cálido caramelo" },
189
+ "hair-brown": { label: "Castaño", description: "Castaño medio" },
190
+ "hair-chestnut": { label: "Castaño Rojizo", description: "Castaño cálido rojizo" },
191
+ "hair-chocolate": { label: "Chocolate", description: "Castaño chocolate oscuro intenso" },
192
+ "hair-dark-brown": { label: "Castaño Oscuro", description: "Cabello castaño oscuro" },
193
+ "hair-black": { label: "Negro", description: "Cabello negro clásico" },
194
+ "hair-jet-black": { label: "Negro Azabache", description: "Negro profundo con tonos azules" },
195
+ "hair-gray": { label: "Gris", description: "Cabello gris" },
196
+ "hair-salt-pepper": { label: "Sal y Pimienta", description: "Cabello mezclado negro y gris" },
197
+ "hair-white": { label: "Blanco", description: "Cabello blanco" },
198
+ "hair-silver": { label: "Plateado", description: "Metálico plateado brillante" },
199
+ "hair-rose-gold": { label: "Oro Rosa", description: "Metálico rosa-dorado suave" },
200
+ "hair-dyed": { label: "Colorido (cualquier)", description: "Teñido en colores vibrantes — sin especificar" },
201
+ "hair-blue": { label: "Azul", description: "Cabello azul intenso teñido" },
202
+ "hair-pastel-blue": { label: "Azul Pastel", description: "Azul cielo pastel suave" },
203
+ "hair-teal": { label: "Turquesa", description: "Verde-azulado saturado" },
204
+ "hair-mint": { label: "Menta", description: "Verde menta pálido" },
205
+ "hair-green": { label: "Verde", description: "Cabello verde teñido intenso" },
206
+ "hair-lavender": { label: "Lavanda", description: "Violeta lavanda suave" },
207
+ "hair-purple": { label: "Morado", description: "Morado intenso profundo" },
208
+ "hair-magenta": { label: "Magenta", description: "Rosa-morado magenta vívido" },
209
+ "hair-pink": { label: "Rosa", description: "Cabello rosa intenso teñido" },
210
+ "hair-pastel-pink": { label: "Rosa Pastel", description: "Rosa pastel suave algodón de azúcar" },
211
+ "hair-peach": { label: "Melocotón", description: "Rubio-rosa melocotón cálido" },
212
+ "hair-mermaid": { label: "Sirena", description: "Mezcla oceánica azul-verde-morada" },
213
+ "hair-rainbow": { label: "Arcoíris", description: "Mechas multicolor arcoíris" },
214
+
215
+ // -------------------- Hair Base --------------------
216
+ "base-bald": { label: "Calvo / Rapado", description: "Calvo o cabeza completamente rapada" },
217
+ "base-buzz": { label: "Rapado Corto", description: "Cabello muy corto rapado" },
218
+ "base-short-straight": { label: "Corto Liso", description: "Textura corta y lisa" },
219
+ "base-short-wavy": { label: "Corto Ondulado", description: "Textura corta y ondulada" },
220
+ "base-short-curly": { label: "Corto Rizado", description: "Textura corta y rizada" },
221
+ "base-short-coily": { label: "Corto Crespo", description: "Textura corta y firmemente enrollada" },
222
+ "base-medium-straight": { label: "Medio Liso", description: "Largo hasta los hombros, liso" },
223
+ "base-medium-wavy": { label: "Medio Ondulado", description: "Largo hasta los hombros, ondulado" },
224
+ "base-medium-curly": { label: "Medio Rizado", description: "Largo hasta los hombros, rizado" },
225
+ "base-medium-coily": { label: "Medio Crespo", description: "Largo hasta los hombros, firmemente enrollado" },
226
+ "base-long-straight": { label: "Largo Liso", description: "Hasta media espalda, liso" },
227
+ "base-long-wavy": { label: "Largo Ondulado", description: "Hasta media espalda, ondulado" },
228
+ "base-long-curly": { label: "Largo Rizado", description: "Hasta media espalda, rizado" },
229
+ "base-long-coily": { label: "Largo Crespo", description: "Hasta media espalda, firmemente enrollado" },
230
+ "base-very-long-straight": { label: "Muy Largo Liso", description: "Hasta la cintura, liso" },
231
+ "base-very-long-wavy": { label: "Muy Largo Ondulado", description: "Hasta la cintura, ondulado" },
232
+ "base-very-long-curly": { label: "Muy Largo Rizado", description: "Hasta la cintura, rizado" },
233
+ "base-afro": { label: "Afro", description: "Afro voluminoso redondeado" },
234
+ "base-thinning": { label: "Ralo / Entradas", description: "Cabello visiblemente ralo o con entradas" },
235
+ "base-wet": { label: "Mojado", description: "Cabello mojado y pegado" },
236
+
237
+ // -------------------- Eyebrows --------------------
238
+ "brows-natural": { label: "Naturales", description: "Cejas naturales sin tocar" },
239
+ "brows-thick": { label: "Gruesas / Tupidas", description: "Cejas gruesas y tupidas" },
240
+ "brows-thin": { label: "Finas / Delineadas", description: "Cejas finas en forma de lápiz" },
241
+ "brows-arched": { label: "Arqueadas", description: "Fuertemente arqueadas, curva dramática" },
242
+ "brows-straight": { label: "Rectas", description: "Cejas planas, horizontales" },
243
+ "brows-bold": { label: "Definidas", description: "Cejas definidas, oscuras, llenas" },
244
+ "brows-soft": { label: "Suaves / Difuminadas", description: "Cejas suaves, claras, difuminadas" },
245
+ "brows-microbladed": { label: "Microbladeadas", description: "Forma definida dibujada / microbladeada" },
246
+ "brows-tinted": { label: "Tintadas", description: "Tintadas en un color diferente al cabello" },
247
+ "brows-unibrow": { label: "Uniceja", description: "Uniceja conectada" },
248
+
249
+ // -------------------- Skin Tone --------------------
250
+ "skin-very-fair": { label: "Muy Clara", description: "Piel muy clara / pálida" },
251
+ "skin-fair": { label: "Clara", description: "Piel clara" },
252
+ "skin-medium": { label: "Media", description: "Tono de piel medio" },
253
+ "skin-olive": { label: "Aceitunada", description: "Piel aceitunada" },
254
+ "skin-tan": { label: "Bronceada", description: "Piel bronceada" },
255
+ "skin-brown": { label: "Morena", description: "Piel morena" },
256
+ "skin-dark": { label: "Oscura", description: "Piel oscura" },
257
+
258
+ // -------------------- Eye Color --------------------
259
+ "eyes-brown": { label: "Marrones", description: "Ojos marrones" },
260
+ "eyes-blue": { label: "Azules", description: "Ojos azules" },
261
+ "eyes-green": { label: "Verdes", description: "Ojos verdes" },
262
+ "eyes-hazel": { label: "Avellana", description: "Ojos color avellana" },
263
+ "eyes-gray": { label: "Grises", description: "Ojos grises" },
264
+ "eyes-amber": { label: "Ámbar", description: "Ojos color ámbar" },
265
+ "eyes-violet": { label: "Violeta", description: "Ojos violeta raros (Liz Taylor)" },
266
+ "eyes-gold": { label: "Dorado", description: "Iris dorado brillante" },
267
+ "eyes-silver": { label: "Plateado", description: "Iris plata-gris pálido" },
268
+ "eyes-red": { label: "Rojo", description: "Iris rojo (albinismo / fantasía)" },
269
+ "eyes-pink": { label: "Rosa", description: "Iris rosa suave (albino / fantasía)" },
270
+ "eyes-turquoise": { label: "Turquesa", description: "Iris turquesa azul-verde vívido" },
271
+
272
+ // -------------------- Eye State --------------------
273
+ "eye-state-closed": { label: "Cerrados", description: "Ojos completamente cerrados, en paz" },
274
+ "eye-state-half-lidded": { label: "Entornados", description: "Mirada adormilada con párpados pesados" },
275
+ "eye-state-wide-eyed": { label: "Muy Abiertos", description: "Ojos muy abiertos, alertas / sorprendidos" },
276
+ "eye-state-staring-camera": { label: "Mirando a la Cámara", description: "Contacto visual directo e ininterrumpido con la lente" },
277
+ "eye-state-gazing-away": { label: "Mirando a Otro Lado", description: "Mirando fuera de cámara, contemplativo" },
278
+ "eye-state-gazing-up": { label: "Mirando Hacia Arriba", description: "Ojos elevados hacia algo arriba" },
279
+ "eye-state-gazing-down": { label: "Mirando Hacia Abajo", description: "Ojos hacia abajo" },
280
+ "eye-state-glassy": { label: "Vidriosos", description: "Ojos húmedos / con lágrimas" },
281
+
282
+ // -------------------- Facial Hair --------------------
283
+ "face-clean-shaven": { label: "Bien Afeitado", description: "Cara bien afeitada" },
284
+ "face-stubble": { label: "Barba Incipiente", description: "Barba incipiente ligera" },
285
+ "face-mustache": { label: "Bigote", description: "Bigote" },
286
+ "face-goatee": { label: "Perilla", description: "Perilla" },
287
+ "face-short-beard": { label: "Barba Corta", description: "Barba corta recortada" },
288
+ "face-full-beard": { label: "Barba Completa", description: "Barba gruesa y completa" },
289
+
290
+ // -------------------- Skin Texture --------------------
291
+ "texture-smooth": { label: "Lisa", description: "Piel impecable, sedosa y lisa" },
292
+ "texture-wrinkled": { label: "Arrugada", description: "Piel envejecida, profundamente marcada" },
293
+ "texture-goosebumps": { label: "Piel de Gallina", description: "Piel de gallina levantada" },
294
+ "texture-dewy": { label: "Húmeda", description: "Piel brillante, fresca y húmeda" },
295
+ "texture-glistening": { label: "Reluciente", description: "Brillo de sudor o aceite" },
296
+ "texture-weathered": { label: "Curtida", description: "Piel envejecida por el sol y áspera" },
297
+ "texture-porcelain": { label: "Porcelana", description: "Porcelana impecable casi traslúcida" },
298
+ "texture-sun-kissed": { label: "Besada por el Sol", description: "Bronceado cálido con brillo saludable" },
299
+ "texture-tanned": { label: "Bronceada", description: "Piel profundamente bronceada de manera uniforme" },
300
+ "texture-tan-lines": { label: "Marcas de Bronceado", description: "Marcas de bronceado visibles del traje de baño" },
301
+ "texture-freckled": { label: "Pecosa", description: "Pecas en mejillas y nariz" },
302
+ "texture-ruddy": { label: "Rubicunda", description: "Mejillas y nariz con rubor rosado" },
303
+ "texture-ashen": { label: "Cenicienta / Pálida", description: "Tono frío pálido, casi sin sangre" },
304
+ "texture-oily": { label: "Grasosa / Brillante", description: "Brillo aceitoso ligero en la zona T" },
305
+ "texture-matte": { label: "Mate", description: "Acabado mate sin poros" },
306
+ "texture-blemished": { label: "Con Imperfecciones", description: "Imperfecciones visibles, imperfecciones reales de la piel" },
307
+ "texture-baby-soft": { label: "Suave como Bebé", description: "Piel juvenil lisa de poros finos" },
308
+ "texture-shower-fresh-wet": { label: "Recién Salida de la Ducha", description: "Piel mojada recién salida de la ducha con gotas de agua" },
309
+
310
+ // -------------------- Distinctive Features --------------------
311
+ "feature-glasses": { label: "Anteojos", description: "Usa anteojos" },
312
+ "feature-freckles": { label: "Pecas", description: "Pecas visibles" },
313
+ "feature-tattoos": { label: "Tatuajes", description: "Tatuajes visibles" },
314
+ "feature-scar": { label: "Cicatriz", description: "Cicatriz facial" },
315
+ "feature-dimples": { label: "Hoyuelos", description: "Mejillas con hoyuelos" },
316
+ "feature-piercing": { label: "Piercing", description: "Piercing visible" },
317
+ "feature-birthmark": { label: "Marca de Nacimiento", description: "Marca de nacimiento visible en la cara o el hombro" },
318
+ "feature-mole": { label: "Lunar / Marca de Belleza", description: "Un lunar prominente, a menudo cerca del labio superior" },
319
+ "feature-gap-teeth": { label: "Dientes Separados", description: "Espacio entre los dientes frontales" },
320
+ "feature-aegyo-sal": { description: "Pliegue mullido bajo el ojo apreciado en la belleza coreana" },
321
+ "feature-eye-bags": { label: "Bolsas en los Ojos", description: "Ojeras leves bajo los ojos" },
322
+ "feature-dimpled-chin": { label: "Mentón con Hoyuelo", description: "Hoyuelo suave en el mentón" },
323
+ "feature-cleft-chin": { label: "Mentón Partido", description: "Hendidura vertical definida en el mentón" },
324
+ "feature-heterochromia": { description: "Cada iris de un color diferente" },
325
+ "feature-vitiligo": { label: "Vitíligo", description: "Parches de piel despigmentada" },
326
+ "feature-sleeve-tattoo": { label: "Tatuaje de Manga", description: "Manga completa de tatuaje en un brazo" },
327
+ "feature-face-tattoo": { label: "Tatuaje en la Cara", description: "Pequeño tatuaje en la cara cerca del ojo o pómulo" },
328
+ "feature-hand-tattoos": { label: "Tatuajes en las Manos", description: "Tatuajes en nudillos / dedos" },
329
+ "feature-visible-piercings": { label: "Piercings Visibles", description: "Múltiples piercings visibles (septum, nariz, labio, multi-oreja)" },
330
+ "feature-bare-shoulders": { label: "Hombros Desnudos", description: "Hombros desnudos expuestos" },
331
+ "feature-collarbone-visible": { label: "Clavícula Visible", description: "Clavícula prominente captando la luz" },
332
+ "feature-midriff-visible": { label: "Abdomen Visible", description: "Abdomen expuesto entre la parte superior e inferior" },
333
+ "feature-navel-visible": { label: "Ombligo Visible", description: "Ombligo visible en estómago desnudo" },
334
+ "feature-elongated-neck": { label: "Cuello Alargado", description: "Cuello largo de cisne" },
335
+
336
+ // -------------------- Type (round 2) --------------------
337
+ "femboy": { label: "Femboy", description: "Tipo masculino suave-femenino, estilo de género fluido" },
338
+ "twink": { label: "Twink", description: "Tipo gay masculino esbelto, lampiño y juvenil" },
339
+ "soft-butch": { label: "Soft Butch", description: "Mujer gentil de centro masculino" },
340
+ "tomboy": { label: "Marimacho", description: "Estilo y energía masculinos en cuerpo femenino" },
341
+ "thick": { label: "Curvilínea", description: "Figura voluptuosa con curvas, body-positive" },
342
+ "bear": { label: "Bear", description: "Tipo masculino grande, barbudo y peludo" },
343
+
344
+ // -------------------- Distinctive Features (round 2) --------------------
345
+ "feature-back-tattoo": { label: "Tatuaje en la Espalda", description: "Pieza grande a través de la espalda" },
346
+ "feature-chest-tattoo": { label: "Tatuaje en el Pecho", description: "Tatuaje a través del pecho / escote" },
347
+ "feature-leg-tattoo": { label: "Tatuaje en la Pierna", description: "Tatuaje visible en pierna / pantorrilla / muslo" },
348
+ "feature-forearm-tattoo": { label: "Tatuaje en el Antebrazo", description: "Tatuaje en antebrazo interior o exterior" },
349
+ "feature-ear-piercings": { label: "Piercings en la Oreja", description: "Múltiples piercings apilados en la oreja (cartílago, helix, conch)" },
350
+ "feature-lip-piercing": { label: "Piercing en el Labio", description: "Aro en el labio / labret" },
351
+ "feature-nostril-piercing": { label: "Piercing en la Nariz", description: "Stud o aro único en la fosa nasal" },
352
+
353
+ // -------------------- Eye Shape (round 2) --------------------
354
+ "eye-double-eyelid": { label: "Doble Párpado", description: "Pliegue definido del párpado superior" },
355
+
356
+ // ----- New age entries -----
357
+ "age-toddler": { label: "Niño Pequeño", description: "Alrededor de 2-3 años" },
358
+ "age-young-child": { label: "Niño Joven", description: "Alrededor de 4-6 años" },
359
+ "age-pre-teen": { label: "Pre-adolescente", description: "Alrededor de 10-12 años" },
360
+ "age-early-teen": { label: "Adolescente Joven", description: "Alrededor de 13-15 años" },
361
+ "age-late-teen": { label: "Adolescente Mayor", description: "Alrededor de 16-19 años" },
362
+ "age-early-20s": { label: "Veintipocos", description: "Alrededor de 20-23 años" },
363
+ "age-late-20s": { label: "Veintimuchos", description: "Alrededor de 24-29 años" },
364
+ "age-custom": { label: "Edad personalizada...", description: "Especificar edad exacta en años" },
365
+
366
+ // ----- Primitive / Wild -----
367
+ "caveman": { label: "Hombre de las Cavernas", description: "Hombre primitivo de la Edad de Piedra" },
368
+ "cavewoman": { label: "Mujer de las Cavernas", description: "Mujer primitiva de la Edad de Piedra" },
369
+ "apeman": { label: "Hombre-mono", description: "Híbrido medio humano medio simio" },
370
+ "feral-wildman": { label: "Salvaje Feral", description: "Humano salvaje primitivo de pelo enmarañado" },
371
+ "neanderthal": { label: "Neandertal", description: "Especie humana premoderna" },
372
+
373
+ // ----- Fantasy -----
374
+ "elf-man": { label: "Elfo (Hombre)", description: "Humanoide masculino con orejas puntiagudas" },
375
+ "elf-woman": { label: "Elfa (Mujer)", description: "Humanoide femenina con orejas puntiagudas" },
376
+ "elf": { label: "Elfo", description: "Humanoide esbelto con orejas puntiagudas" },
377
+ "half-elf": { label: "Semielfo", description: "Híbrido humano-elfo" },
378
+ "dwarf": { label: "Enano", description: "Humanoide robusto y barbudo" },
379
+ "orc": { label: "Orco", description: "Humanoide corpulento con colmillos" },
380
+ "goblin": { label: "Goblin", description: "Humanoide pequeño y travieso" },
381
+ "tiefling": { label: "Tiefling", description: "Humanoide con cuernos y herencia infernal" },
382
+ "faun": { label: "Fauno / Sátiro", description: "Humanoide con patas de cabra y cuernos" },
383
+ "centaur": { label: "Centauro", description: "Torso humano sobre cuerpo de caballo" },
384
+ "vampire-man": { label: "Vampiro (Hombre)", description: "Inmortal masculino pálido con colmillos" },
385
+ "vampire-woman": { label: "Vampiresa (Mujer)", description: "Inmortal femenina pálida con colmillos" },
386
+ "vampire": { label: "Vampiro", description: "Inmortal pálido con colmillos" },
387
+ "werewolf": { label: "Hombre Lobo", description: "Licántropo parcialmente transformado" },
388
+ "mermaid": { label: "Sirena", description: "Humanoide femenina con cola de pez" },
389
+ "merman": { label: "Tritón", description: "Humanoide masculino con cola de pez" },
390
+ "dragonkin": { label: "Estirpe de Dragón", description: "Humanoide draconiano escamoso" },
391
+ "wizard": { label: "Mago", description: "Lanzador de hechizos masculino con túnica" },
392
+ "witch": { label: "Bruja", description: "Lanzadora de hechizos femenina con túnica" },
393
+ "sorcerer": { label: "Hechicero", description: "Hombre mágico con túnica" },
394
+ "sorceress": { label: "Hechicera", description: "Mujer mágica con túnica" },
395
+ "knight-man": { label: "Caballero (Hombre)", description: "Guerrero masculino con armadura completa" },
396
+ "knight-woman": { label: "Caballera (Mujer)", description: "Guerrera con armadura completa" },
397
+ "knight": { label: "Caballero", description: "Guerrero con armadura completa" },
398
+ "barbarian-man": { label: "Bárbaro (Hombre)", description: "Guerrero corpulento masculino vestido con pieles" },
399
+ "barbarian-woman": { label: "Bárbara (Mujer)", description: "Guerrera corpulenta vestida con pieles" },
400
+ "barbarian": { label: "Bárbaro", description: "Guerrero corpulento vestido con pieles" },
401
+ "druid": { label: "Druida", description: "Místico vinculado a la naturaleza" },
402
+ "ranger": { label: "Explorador", description: "Arquero encapuchado del bosque" },
403
+ "necromancer": { label: "Nigromante", description: "Pálido lanzador de artes oscuras" },
404
+ "prince": { label: "Príncipe", description: "Joven hombre real" },
405
+ "princess": { label: "Princesa", description: "Joven mujer real" },
406
+
407
+ // ----- Mythic / Divine -----
408
+ "angel": { label: "Ángel", description: "Humanoide divino alado" },
409
+ "demon": { label: "Demonio", description: "Humanoide infernal con cuernos" },
410
+ "ghost": { label: "Fantasma", description: "Figura espectral translúcida" },
411
+ "valkyrie": { label: "Valquiria", description: "Guerrera espiritual nórdica" },
412
+ "god": { label: "Dios", description: "Deidad masculina" },
413
+ "goddess": { label: "Diosa", description: "Deidad femenina" },
414
+
415
+ // ----- Sci-Fi -----
416
+ "android-man": { label: "Androide (Hombre)", description: "Robot humanoide masculino" },
417
+ "android-woman": { label: "Androide (Mujer)", description: "Robot humanoide femenino" },
418
+ "android-neutral": { label: "Androide", description: "Robot humanoide, género no especificado" },
419
+ "cyborg-man": { label: "Cyborg (Hombre)", description: "Híbrido humano-máquina masculino" },
420
+ "cyborg-woman": { label: "Cyborg (Mujer)", description: "Híbrido humano-máquina femenino" },
421
+ "cyborg": { label: "Cyborg", description: "Híbrido humano-máquina" },
422
+ "robot": { label: "Robot", description: "Humanoide totalmente mecánico" },
423
+ "alien": { label: "Alienígena", description: "Humanoide no humano" },
424
+ "astronaut": { label: "Astronauta", description: "Explorador espacial con traje" },
425
+ "space-marine": { label: "Marine Espacial", description: "Soldado con servoarmadura" },
426
+ "ai-hologram": { label: "Holograma de IA", description: "Figura de luz volumétrica" },
427
+
428
+ // ----- Heroes & Villains -----
429
+ "superhero": { label: "Superhéroe", description: "Héroe enmascarado y con capa" },
430
+ "superheroine": { label: "Superheroína", description: "Heroína enmascarada y con capa" },
431
+ "masked-vigilante": { label: "Vigilante Enmascarado", description: "Héroe en traje oscuro" },
432
+ "supervillain": { label: "Supervillano", description: "Arquetipo malvado teatral" },
433
+ "caped-crusader-man": { label: "Cruzado Encapuchado (Hombre)", description: "Héroe oscuro masculino con armadura y capucha" },
434
+ "caped-crusader-woman": { label: "Cruzada Encapuchada (Mujer)", description: "Heroína oscura con armadura y capucha" },
435
+ "caped-crusader": { label: "Cruzado Encapuchado", description: "Héroe oscuro con armadura y capucha" },
436
+ "super-soldier": { label: "Súper Soldado", description: "Guerrero patriótico con exo-armadura" },
437
+ "mutant": { label: "Mutante", description: "Humano con mutaciones visibles" },
438
+ "magical-girl": { label: "Magical Girl", description: "Arquetipo de heroína transformante" },
439
+ // ----- Anime / Anthro -----
440
+ "catgirl": { label: "Catgirl", description: "Mujer con orejas y cola de gato" },
441
+ "catboy": { label: "Catboy", description: "Hombre con orejas y cola de gato" },
442
+ "anthro": { label: "Antropomorfo", description: "Humanoide bípedo con cabeza animal" },
443
+
444
+ // ----- Iconic / Public Domain -----
445
+ "sherlock-holmes": { label: "Sherlock Holmes", description: "Detective consultor victoriano" },
446
+ "dracula": { label: "Conde Drácula", description: "Conde vampiro gótico de Stoker" },
447
+ "frankenstein-monster": { label: "Monstruo de Frankenstein", description: "Criatura reanimada de Shelley" },
448
+ "phantom-opera": { label: "Fantasma de la Ópera", description: "Recluso operístico enmascarado de Leroux" },
449
+ "mr-hyde": { label: "Mr Hyde", description: "Alter ego monstruoso de Stevenson" },
450
+ "king-arthur": { label: "Rey Arturo", description: "Rey medieval legendario" },
451
+ "merlin": { label: "Merlín", description: "Mago consejero artúrico" },
452
+ "robin-hood": { label: "Robin Hood", description: "Arquero forajido del bosque" },
453
+ "joan-of-arc": { label: "Juana de Arco", description: "Doncella guerrera medieval con armadura" },
454
+ "cleopatra": { label: "Cleopatra", description: "Última faraona de Egipto" },
455
+ "captain-nemo": { label: "Capitán Nemo", description: "Capitán de submarino de Verne" },
456
+ "alice-wonderland": { label: "Alicia (en el País de las Maravillas)", description: "Niña del País de las Maravillas de Carroll" },
457
+ "peter-pan": { label: "Peter Pan", description: "El niño que nunca creció" },
458
+ "dorothy-oz": { label: "Dorothy (Oz)", description: "Niña de Oz con vestido azul a cuadros" },
459
+ "tin-man": { label: "Hombre de Hojalata", description: "Leñador de hojalata de Oz" },
460
+ "scarecrow-oz": { label: "Espantapájaros (Oz)", description: "Espantapájaros de paja de Oz" },
461
+ "cowardly-lion": { label: "León Cobarde", description: "León antropomorfo de Oz" },
462
+ "santa-claus": { label: "Papá Noel", description: "Repartidor de regalos de Navidad" },
463
+ "grim-reaper": { label: "La Parca", description: "Personificación de la Muerte" },
464
+ // ----- New Type — Warriors / Martial -----
465
+ "ninja": { description: "Asesino shinobi sigiloso" },
466
+ "kunoichi": { description: "Ninja mujer" },
467
+ "samurai-man": { label: "Samurái (hombre)", description: "Guerrero japonés blindado masculino" },
468
+ "samurai-woman": { label: "Samurái (mujer)", description: "Mujer samurái (onna-musha)" },
469
+ "samurai": { label: "Samurái", description: "Guerrero japonés blindado" },
470
+ "karate-fighter": { label: "Karateka", description: "Practicante de karate en gi" },
471
+ "kung-fu-master": { label: "Maestro de kung-fu", description: "Adepto de artes marciales chinas" },
472
+ "shaolin-monk": { label: "Monje Shaolin", description: "Monje guerrero budista" },
473
+ "sumo-wrestler": { label: "Luchador de sumo", description: "Competidor japonés de sumo" },
474
+ "gladiator": { label: "Gladiador", description: "Luchador de arena romano" },
475
+ "spartan-warrior": { label: "Guerrero espartano", description: "Hoplita griego antiguo" },
476
+ "viking-warrior": { label: "Guerrero vikingo", description: "Saqueador nórdico" },
477
+ "mongol-warrior": { label: "Guerrero mongol", description: "Arquero a caballo de las estepas" },
478
+ "centurion": { label: "Centurión", description: "Oficial legionario romano" },
479
+ "crusader": { label: "Cruzado", description: "Caballero cruzado medieval" },
480
+ "pirate": { label: "Pirata", description: "Pirata / bucanero de la Edad de Oro" },
481
+ "musketeer": { label: "Mosquetero", description: "Espadachín francés del siglo XVII" },
482
+
483
+ // ----- New Type — Professions / Roles -----
484
+ "police-officer": { label: "Oficial de policía", description: "Oficial uniformado de la ley" },
485
+ "policeman": { label: "Policía (hombre)", description: "Policía hombre" },
486
+ "policewoman": { label: "Policía (mujer)", description: "Policía mujer" },
487
+ "firefighter": { label: "Bombero/a", description: "Bombero en equipo de protección" },
488
+ "doctor": { label: "Médico/a", description: "Médico con bata blanca" },
489
+ "surgeon": { label: "Cirujano/a", description: "Cirujano de quirófano" },
490
+ "nurse": { label: "Enfermero/a", description: "Personal de enfermería" },
491
+ "chef": { label: "Chef", description: "Cocinero con uniforme" },
492
+ "teacher": { label: "Profesor/a", description: "Educador en clase" },
493
+ "priest": { label: "Sacerdote", description: "Clérigo católico" },
494
+ "nun": { label: "Monja", description: "Religiosa católica" },
495
+ "soldier": { label: "Soldado", description: "Militar moderno" },
496
+ "lawyer": { label: "Abogado/a", description: "Abogado con traje" },
497
+ "judge": { label: "Juez/a", description: "Magistrado con toga" },
498
+ "scientist": { label: "Científico/a", description: "Investigador con bata" },
499
+ "pilot": { label: "Piloto", description: "Piloto de aerolínea" },
500
+ "flight-attendant": { label: "Auxiliar de vuelo", description: "Tripulante de cabina" },
501
+ "construction-worker": { label: "Obrero de la construcción", description: "Constructor con casco" },
502
+ "businessman": { label: "Empresario", description: "Hombre en traje" },
503
+ "businesswoman": { label: "Empresaria", description: "Mujer en traje" },
504
+ "farmer": { label: "Granjero/a", description: "Trabajador agrícola" },
505
+ "mechanic": { label: "Mecánico/a", description: "Mecánico automotriz/industrial" },
506
+ "artist": { label: "Artista", description: "Pintor / artista visual" },
507
+ "musician": { label: "Músico/a", description: "Intérprete con instrumento" },
508
+ "athlete": { label: "Atleta", description: "Deportista profesional" },
509
+ "detective": { label: "Detective", description: "Investigador de civil" },
510
+ "journalist": { label: "Periodista", description: "Reportero con libreta" },
511
+ "barista": { description: "Camarero de cafetería" },
512
+
513
+ // Regional Aesthetic
514
+ "cali-beach": { label: "Playa de California", description: "Estética relajada de pueblo costero californiano" },
515
+ "valley-girl": { label: "Valley Girl", description: "Estética del valle del sur de California (femenina)" },
516
+ "norcal-hippie": { label: "Hippie del Norte de California", description: "Estética hippie del norte de California, Berkeley / Bay Area" },
517
+ "boho-la": { label: "Boho LA", description: "Estética bohemia de los cañones de Los Ángeles (femenina)" },
518
+ "texas-cowgirl": { label: "Cowgirl de Texas", description: "Estética western tejana de rancho (femenina)" },
519
+ "texas-cowboy": { label: "Cowboy de Texas", description: "Estética western tejana de rancho (masculina)" },
520
+ "southern-belle": { label: "Bella Sureña", description: "Estética de gentileza antebellum de Charleston / Savannah (femenina)" },
521
+ "southern-gentleman": { label: "Caballero Sureño", description: "Estética de gentileza del viejo Sur (masculina)" },
522
+ "miami-latina": { label: "Latina de Miami", description: "Estética caribeño-latina de South Beach (femenina)" },
523
+ "miami-latino": { label: "Latino de Miami", description: "Estética caribeño-latina de South Beach (masculina)" },
524
+ "hawaii-island": { label: "Isla de Hawái", description: "Estética hawaiana polinesio-pacífica" },
525
+ "nyc-fashion": { label: "Moda NYC", description: "Estética editorial-fashion de Manhattan (femenina)" },
526
+ "nyc-sharp": { label: "NYC Elegante", description: "Estética de sastrería de poder de Manhattan (masculina)" },
527
+ "brooklyn-hipster": { label: "Hipster de Brooklyn", description: "Estética de clase creativa de Williamsburg" },
528
+ "new-england-prep": { label: "Prep de Nueva Inglaterra", description: "Estética preppy de dinero antiguo de Cape Cod / Nantucket" },
529
+ "pnw-granola": { label: "Granola del Pacífico Noroeste", description: "Estética outdoor de Portland / Seattle" },
530
+ "nashville-country": { label: "Country de Nashville", description: "Estética country-pop moderna de Music City (femenina)" },
531
+ "nashville-cowboy": { label: "Cowboy de Nashville", description: "Estética cowboy moderna de Music City (masculina)" },
532
+ "vegas-glam": { label: "Glam de Las Vegas", description: "Estética de glamour del Strip de Las Vegas (femenina)" },
533
+ "vegas-suit": { label: "Traje de Las Vegas", description: "Estética de traje del Strip de Las Vegas (masculina)" },
534
+ "harlem-classic": { label: "Harlem Clásico", description: "Estética de herencia afroamericana de Nueva York, elegancia de la era del jazz" },
535
+ "atl-southern": { label: "ATL Sureño", description: "Estética hip-hop / R&B afroamericana del sur en Atlanta" },
536
+ "nola-creole": { label: "NOLA Criollo", description: "Estética francocaribeño-africana de Luisiana, Nueva Orleans" },
537
+ "dmv-go-go": { label: "DMV Go-Go", description: "Estética go-go afroamericana de DC / Maryland / Virginia" },
538
+ "west-coast-hip-hop": { label: "Costa Oeste", description: "Estética hip-hop de la costa oeste, South Central / Compton" },
539
+ "chicago-south-side": { label: "South Side de Chicago", description: "Estética afro-urbana del Medio Oeste de Chicago" },
540
+ "parisienne": { label: "Parisienne", description: "Estética chic francesa de la Rive Gauche de París (femenina)" },
541
+ "parisian-flaneur": { label: "Flâneur Parisino", description: "Estética chic francesa de la Rive Gauche de París (masculina)" },
542
+ "milanese-fashion": { label: "Moda Milanesa", description: "Estética de alta moda italiana milanesa" },
543
+ "sicilian-beach": { label: "Playa Siciliana", description: "Estética mediterránea de playa del sur de Italia" },
544
+ "madrileña": { label: "Madrileña", description: "Estética española de Madrid (femenina)" },
545
+ "madrileño": { label: "Madrileño", description: "Estética española de Madrid (masculina)" },
546
+ "catalan-modern": { label: "Catalán Moderno", description: "Estética de diseño mediterráneo de Barcelona" },
547
+ "greek-mediterranean": { label: "Mediterráneo Griego", description: "Estética griega de las islas del Egeo" },
548
+ "scandi-minimal": { label: "Minimalismo Escandinavo", description: "Estética minimalista nórdica de líneas limpias" },
549
+ "english-rose": { label: "Rosa Inglesa", description: "Estética inglesa rural (femenina)" },
550
+ "london-prep": { label: "Prep Londinense", description: "Estética británica refinada de Mayfair / Chelsea (masculina)" },
551
+ "manchester-indie": { label: "Indie de Manchester", description: "Estética cool de clase obrera del norte de Inglaterra, conciertos y lluvia" },
552
+ "berlin-alt": { label: "Berlín Alternativo", description: "Estética contracultural techno y arte de Kreuzberg" },
553
+ "munich-traditional": { label: "Múnich Tradicional", description: "Estética bávara tradicional del Oktoberfest" },
554
+ "eastern-european-glam": { label: "Glam de Europa del Este", description: "Estética de glamour invernal de Moscú / Kiev (femenina)" },
555
+ "eastern-european-stoic": { label: "Estoico de Europa del Este", description: "Estética de confianza curtida de Moscú / Kiev (masculina)" },
556
+ "tokyo-harajuku": { label: "Tokio Harajuku", description: "Estética callejera japonesa lúdica y expresiva de Tokio" },
557
+ "ginza-office": { label: "Oficina de Ginza", description: "Estética corporativa-elegante japonesa de Ginza, Tokio" },
558
+ "shibuya-streetwear": { label: "Streetwear de Shibuya", description: "Estética callejera de moda de Shibuya, Tokio" },
559
+ "osaka-everyday": { label: "Osaka Cotidiano", description: "Estética cálida y casual de Kansai, Osaka" },
560
+ "seoul-k-pop": { label: "K-Pop de Seúl", description: "Estética pulida del K-pop coreano de Seúl" },
561
+ "gangnam-glam": { label: "Glam de Gangnam", description: "Estética del distrito de lujo coreano de Gangnam, Seúl" },
562
+ "shanghai-modern": { label: "Shanghái Moderno", description: "Estética metropolitana china de Shanghái" },
563
+ "beijing-hutong": { label: "Hutong de Pekín", description: "Estética tradicional-moderna de los antiguos patios de Pekín" },
564
+ "hong-kong-cinematic": { label: "Hong Kong Cinematográfico", description: "Estética neón-noir de Hong Kong al estilo Wong Kar-Wai" },
565
+ "mumbai-bollywood": { label: "Bombay Bollywood", description: "Estética de la industria cinematográfica india de Bombay" },
566
+ "south-india-traditional": { label: "Sur de India Tradicional", description: "Estética clásica de pueblos templarios de Tamil / Kerala" },
567
+ "bangkok-street": { label: "Calles de Bangkok", description: "Estética urbana neón de mercados nocturnos tailandeses de Bangkok" },
568
+ "carioca-rio": { label: "Carioca (Río)", description: "Estética brasileña de playa y música de favela de Río de Janeiro" },
569
+ "paulista": { label: "Paulista (São Paulo)", description: "Estética brasileña metropolitana de clase creativa de São Paulo" },
570
+ "buenos-aires-tango": { label: "Tango de Buenos Aires", description: "Estética de tango de Recoleta / San Telmo, Buenos Aires (femenina)" },
571
+ "porteño": { label: "Porteño", description: "Estética milonguera refinada de Buenos Aires (masculina)" },
572
+ "mexico-city-chic": { label: "Chic de Ciudad de México", description: "Estética mexicana moderna de Roma / Polanco, CDMX" },
573
+ "chilango-traditional": { label: "Chilango Tradicional", description: "Estética cálida folclórica y festiva de Ciudad de México" },
574
+ "bogota-cosmopolitan": { label: "Bogotá Cosmopolita", description: "Estética andina refinada de la capital colombiana, Bogotá" },
575
+ "beirut-riviera": { label: "Riviera de Beirut", description: "Estética cosmopolita libanesa mediterránea" },
576
+ "tel-aviv-beach": { label: "Playa de Tel Aviv", description: "Estética mediterránea de ciudad costera con energía startup de Tel Aviv" },
577
+ "jerusalem-stone": { label: "Piedra de Jerusalén", description: "Estética de patrimonio en piedra caliza de la ciudad vieja de Jerusalén" },
578
+ "sabra": { label: "Sabra", description: "Estética sabra israelí nativa, directa y cálida" },
579
+ "dubai-modern": { label: "Dubái Moderno", description: "Estética de emirato cosmopolita de lujo del Golfo en Dubái" },
580
+ "persian-glam": { label: "Glam Persa", description: "Estética persa iraní de patrimonio y glamour" },
581
+ "istanbul-bosphorus": { label: "Estambul Bósforo", description: "Estética otomana y moderna del Bósforo, este-encuentra-oeste, en Estambul" },
582
+ "cairene-cosmopolitan": { label: "Cairota Cosmopolita", description: "Estética metropolitana egipcia-árabe de El Cairo" },
583
+ "maghreb-coastal": { label: "Magreb Costero", description: "Estética colonial-portuaria francomediterránea-norteafricana de Túnez / Argel" },
584
+ "marrakech-bohemian": { label: "Marrakech Bohemio", description: "Estética cálida especiada de la medina marroquí de Marrakech" },
585
+ "lagos-afro-glam": { label: "Lagos Afro-Glam", description: "🇬🇧 Estética metropolitana anglófona de África Occidental en Lagos, Nigeria" },
586
+ "accra-afro-fashion": { label: "Accra Afro-Moda", description: "🇬🇧 Estética anglófona de África Occidental, kente y modernidad, en Accra, Ghana" },
587
+ "dakar-francophone": { label: "Dakar Francófono", description: "🇫🇷 Estética cosmopolita-costera francófona de África Occidental en Dakar, Senegal" },
588
+ "abidjan-cosmopolitan": { label: "Abiyán Cosmopolita", description: "🇫🇷 Estética urbana francófona de África Occidental en Abiyán, Costa de Marfil" },
589
+ "kinshasa-sape": { label: "Kinshasa SAPE", description: "🇫🇷 Estética dandi SAPE francófona de África Central en Kinshasa, Congo" },
590
+ "nairobi-cosmopolitan": { label: "Nairobi Cosmopolita", description: "🇬🇧 Estética moderna-urbana anglófona de África Oriental en Nairobi, Kenia" },
591
+ "addis-habesha": { label: "Addis Habesha", description: "Estética de patrimonio de las tierras altas etíopes habesha en Adís Abeba (Etiopía nunca fue colonizada)" },
592
+ "swahili-coast": { label: "Costa Suajili", description: "🇬🇧 Estética costera suajili anglófona de África Oriental en Zanzíbar / Mombasa" },
593
+ "johannesburg-urban": { label: "Johannesburgo Urbano", description: "🇬🇧 Estética metropolitana negra anglófona del sur de África en Johannesburgo, Sudáfrica" },
594
+ "cape-town-cosmopolitan": { label: "Ciudad del Cabo Cosmopolita", description: "🇬🇧 Estética de ciudad costera anglófona del sur de África en Ciudad del Cabo, Sudáfrica" },
595
+ "luanda-lusophone": { label: "Luanda Lusófona", description: "🇵🇹 Estética kizomba y costa atlántica lusófona del sur de África en Luanda, Angola" },
596
+ "bondi-beach": { label: "Bondi Beach", description: "Estética costera australiana de sal y sol de Bondi" },
597
+ "australian-outback": { label: "Outback", description: "Estética rural del Outback australiano (femenina)" },
598
+ "outback-stockman": { label: "Stockman del Outback", description: "Estética rural del Outback australiano (masculina)" },
599
+ "auckland-coastal": { label: "Auckland Costera", description: "Estética del Pacífico de la ciudad portuaria de Auckland, Nueva Zelanda" },
600
+
601
+ // Audit follow-up gaps (2026-05-06)
602
+ "androgynous": { label: "Andrógino", description: "Rasgos masculinos y femeninos mezclados de forma deliberada" },
603
+ "goth": { description: "Estética de la subcultura gótica — oscura, romántica, dramática" },
604
+ "eye-droopy": { label: "Caídos", description: "Párpados bajos — mirada suave, adormilada (posición del párpado, no del ángulo)" },
605
+ "lip-state-bold-black": { label: "Negro Intenso", description: "Lápiz labial negro saturado de declaración (gótico / vanguardia)" },
606
+ "lip-state-burgundy": { label: "Burdeos", description: "Lápiz labial rojo vino oscuro" },
607
+ "lip-state-plum": { label: "Ciruela", description: "Lápiz labial de tono morado oscuro" },
608
+ "lip-state-mauve": { label: "Malva", description: "Lápiz labial malva apagado / rosa empolvado" },
609
+ "eyes-black": { label: "Negros", description: "Iris realmente negro (más oscuro que marrón)" },
610
+ "skin-very-dark": { label: "Muy Oscura / Ébano", description: "Piel muy oscura, tono ébano (extremo más profundo de la escala)" },
611
+ "texture-acne-scarred": { label: "Con Cicatrices de Acné", description: "Cicatrices de acné visibles (distintas de imperfecciones — patrón de cicatrices ya curadas)" },
612
+ "face-five-oclock-shadow": { label: "Sombra de las Cinco", description: "Crecimiento diario más denso que la barba incipiente ligera" },
613
+ "feature-under-eye-circles": { label: "Ojeras", description: "Ojeras sutiles bajo los ojos (distintas de las bolsas hinchadas)" },
614
+ "feature-fangs": { label: "Colmillos", description: "Colmillos visibles (vampiro / arquetipo de personaje)" },
615
+
616
+ // ----- Geometría facial: pómulos / plenitud / ojos / punta de nariz / labios -----
617
+ "cheekbones-average": { label: "Promedio", description: "Proyección de pómulos promedio (sin énfasis)" },
618
+ "cheekbones-low": { label: "Bajos", description: "Pómulos bajos y planos" },
619
+ "cheekbones-high-defined": { label: "Altos y Definidos", description: "Pómulos altos, claramente definidos" },
620
+ "cheekbones-sculpted": { label: "Altos y Esculpidos", description: "Pómulos altos marcadamente esculpidos" },
621
+ "cheekbones-wide": { label: "Anchos", description: "Pómulos anchos y prominentes" },
622
+ "facial-fullness-average": { label: "Promedio", description: "Plenitud facial promedio" },
623
+ "facial-fullness-gaunt": { label: "Demacrado", description: "Mejillas hundidas, muy poca grasa facial" },
624
+ "facial-fullness-lean": { label: "Enjuto", description: "Poca grasa facial, leve hundimiento bajo los pómulos" },
625
+ "facial-fullness-full": { label: "Lleno", description: "Mejillas suaves y bien rellenas" },
626
+ "facial-fullness-round": { label: "Redondo", description: "Cara redonda, mejillas suaves y redondeadas" },
627
+ "eye-wide": { label: "Amplios", description: "Ojos amplios y grandes" },
628
+ "eye-narrow": { label: "Estrechos", description: "Ojos estrechos y alargados" },
629
+ "eyelid-standard": { label: "Estándar", description: "Párpado superior estándar" },
630
+ "canthal-neutral": { label: "Neutral", description: "Inclinación cantal neutral" },
631
+ "eye-spacing-average": { label: "Promedio", description: "Espaciado de ojos promedio" },
632
+ "eyeset-average": { label: "Promedio", description: "Distancia ceja-ojo promedio" },
633
+ "eyeset-low": { label: "Bajos", description: "Poca distancia ceja-ojo (hunter eyes)" },
634
+ "eyeset-high": { label: "Altos", description: "Generosa distancia ceja-ojo (doe eyes)" },
635
+ "nose-tip-natural": { label: "Natural", description: "Punta de nariz natural (sin énfasis)" },
636
+ "nose-tip-refined": { label: "Refinada", description: "Punta refinada y estrecha" },
637
+ "nose-tip-upturned": { label: "Respingona", description: "Punta ligeramente hacia arriba" },
638
+ "nose-tip-rounded": { label: "Redondeada", description: "Punta suave y redondeada" },
639
+ "nose-tip-drooping": { label: "Caída", description: "Punta ligeramente caída, hacia abajo" },
640
+ "lips-full-lower": { label: "Labio Inferior Lleno", description: "Labios llenos con un labio inferior más lleno" },
641
+ "lips-natural": { label: "Natural", description: "Forma de labios natural" },
642
+ "lips-heart": { label: "Corazón", description: "Labios en forma de corazón con un arco de cupido definido" },
643
+ }
644
+
645
+ export default map