kasy-cli 1.38.0 → 1.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/lib/scaffold/CHANGELOG.json +14 -0
  2. package/lib/scaffold/backends/api/patch/README.md +15 -0
  3. package/lib/scaffold/backends/api/patch/lib/features/notifications/api/device_api.dart +11 -6
  4. package/lib/scaffold/backends/api/patch/lib/features/settings/ui/components/admin/admin_users_api.dart +9 -1
  5. package/lib/scaffold/backends/api/pubspec.yaml.tpl +1 -0
  6. package/lib/scaffold/backends/patch-base-hashes.json +6 -6
  7. package/lib/scaffold/backends/supabase/edge-functions/admin-list-users/index.ts +3 -1
  8. package/lib/scaffold/backends/supabase/edge-functions/send-push-notification/index.ts +3 -0
  9. package/lib/scaffold/backends/supabase/migrations/20240101000012_welcome_decouple_from_push.sql +62 -0
  10. package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/device_api.dart +11 -6
  11. package/lib/scaffold/backends/supabase/patch/lib/features/settings/ui/components/admin/admin_users_api.dart +7 -0
  12. package/lib/scaffold/backends/supabase/pubspec.yaml.tpl +1 -0
  13. package/lib/scaffold/shared/generator-utils.js +12 -6
  14. package/package.json +1 -1
  15. package/templates/firebase/.firebase/hosting.YnVpbGQvd2Vi.cache +23 -23
  16. package/templates/firebase/DESIGN_SYSTEM.md +22 -8
  17. package/templates/firebase/assets/icons/apple_black.svg +3 -0
  18. package/templates/firebase/assets/icons/apple_white.svg +4 -0
  19. package/templates/firebase/assets/icons/facebook.svg +49 -0
  20. package/templates/firebase/assets/icons/google.svg +1 -0
  21. package/templates/firebase/functions/src/admin/functions.ts +2 -0
  22. package/templates/firebase/functions/src/authentication/functions.ts +13 -7
  23. package/templates/firebase/functions/src/notifications/triggers.ts +6 -2
  24. package/templates/firebase/lib/components/components.dart +1 -1
  25. package/templates/firebase/lib/components/kasy_app_bar.dart +314 -14
  26. package/templates/firebase/lib/components/kasy_card.dart +4 -0
  27. package/templates/firebase/lib/components/kasy_drop_down.dart +584 -0
  28. package/templates/firebase/lib/components/kasy_sidebar.dart +18 -6
  29. package/templates/firebase/lib/components/kasy_tabs.dart +31 -10
  30. package/templates/firebase/lib/components/kasy_text_field.dart +29 -7
  31. package/templates/firebase/lib/core/bottom_menu/bottom_menu.dart +27 -18
  32. package/templates/firebase/lib/core/bottom_menu/web_content_wrapper.dart +12 -10
  33. package/templates/firebase/lib/core/chrome/app_bar_config.dart +214 -0
  34. package/templates/firebase/lib/core/chrome/app_bar_scope.dart +102 -0
  35. package/templates/firebase/lib/core/data/api/user_api.dart +11 -0
  36. package/templates/firebase/lib/core/dev_inspector/dev_inspector_service.dart +55 -15
  37. package/templates/firebase/lib/core/rating/widgets/review_popup.dart +18 -35
  38. package/templates/firebase/lib/core/shared_preferences/shared_preferences.dart +11 -0
  39. package/templates/firebase/lib/core/states/logout_action.dart +11 -1
  40. package/templates/firebase/lib/core/states/user_state_notifier.dart +28 -1
  41. package/templates/firebase/lib/core/theme/texts.dart +21 -6
  42. package/templates/firebase/lib/core/theme/type_scale.dart +34 -15
  43. package/templates/firebase/lib/core/web_device_preview/web_device_preview.dart +51 -19
  44. package/templates/firebase/lib/core/web_viewport_scale.dart +64 -35
  45. package/templates/firebase/lib/core/widgets/kasy_pressable_depth.dart +14 -3
  46. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_composer.dart +1 -1
  47. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_conversation_view.dart +52 -35
  48. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_list.dart +1 -1
  49. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_tile.dart +18 -8
  50. package/templates/firebase/lib/features/authentication/ui/signin_page.dart +11 -61
  51. package/templates/firebase/lib/features/authentication/ui/signup_page.dart +11 -61
  52. package/templates/firebase/lib/features/authentication/ui/widgets/auth_card_scaffold.dart +7 -5
  53. package/templates/firebase/lib/features/authentication/ui/widgets/social_auth_tile.dart +83 -0
  54. package/templates/firebase/lib/features/feedbacks/ui/widgets/feature_card.dart +4 -4
  55. package/templates/firebase/lib/features/home/home_components_page.dart +253 -125
  56. package/templates/firebase/lib/features/home/home_components_preview_registry.dart +231 -57
  57. package/templates/firebase/lib/features/home/home_feed.dart +2 -2
  58. package/templates/firebase/lib/features/home/home_image_grid.dart +3 -3
  59. package/templates/firebase/lib/features/local_reminders/providers/reminder_notifier.dart +8 -1
  60. package/templates/firebase/lib/features/local_reminders/ui/reminder_page.dart +111 -57
  61. package/templates/firebase/lib/features/notifications/api/device_api.dart +11 -3
  62. package/templates/firebase/lib/features/notifications/ui/notifications_page.dart +16 -4
  63. package/templates/firebase/lib/features/notifications/ui/widgets/empty_notifications.dart +7 -56
  64. package/templates/firebase/lib/features/notifications/ui/widgets/notification_tile.dart +5 -5
  65. package/templates/firebase/lib/features/notifications/ui/widgets/push_permission_banner.dart +163 -0
  66. package/templates/firebase/lib/features/notifications/ui/widgets/web_notifications_bell.dart +2 -2
  67. package/templates/firebase/lib/features/onboarding/providers/onboarding_model.dart +9 -0
  68. package/templates/firebase/lib/features/onboarding/providers/onboarding_provider.dart +28 -0
  69. package/templates/firebase/lib/features/onboarding/ui/onboarding_page.dart +51 -12
  70. package/templates/firebase/lib/features/onboarding/ui/widgets/selectable_row_tile.dart +90 -32
  71. package/templates/firebase/lib/features/settings/settings_page.dart +53 -32
  72. package/templates/firebase/lib/features/settings/ui/components/admin/admin_page.dart +895 -111
  73. package/templates/firebase/lib/features/settings/ui/components/admin/admin_users_api.dart +7 -0
  74. package/templates/firebase/lib/features/settings/ui/components/admin/admin_users_tab.dart +445 -233
  75. package/templates/firebase/lib/features/settings/ui/components/admin/send_push_notification_page.dart +171 -41
  76. package/templates/firebase/lib/features/settings/ui/components/avatar_component.dart +1 -1
  77. package/templates/firebase/lib/features/settings/ui/components/delete_user_component.dart +9 -1
  78. package/templates/firebase/lib/features/settings/ui/components/language_switcher.dart +48 -47
  79. package/templates/firebase/lib/features/settings/ui/widgets/settings_bottom_sheet_option_tile.dart +21 -18
  80. package/templates/firebase/lib/features/settings/ui/widgets/settings_tile.dart +25 -10
  81. package/templates/firebase/lib/i18n/en.i18n.json +749 -712
  82. package/templates/firebase/lib/i18n/es.i18n.json +749 -712
  83. package/templates/firebase/lib/i18n/pt.i18n.json +749 -712
  84. package/templates/firebase/lib/main.dart +20 -7
  85. package/templates/firebase/lib/router.dart +32 -26
  86. package/templates/firebase/pubspec.yaml +2 -1
  87. package/templates/firebase/test/admin_shell_chrome_test.dart +11 -5
  88. package/templates/firebase/test/components/kasy_text_field_height_test.dart +77 -0
  89. package/templates/firebase/test/core/web_viewport_scale_test.dart +23 -16
  90. package/templates/firebase/tool/design_check.dart +9 -0
  91. package/templates/firebase/assets/icons/apple.png +0 -0
  92. package/templates/firebase/assets/icons/facebook.png +0 -0
  93. package/templates/firebase/assets/icons/google.png +0 -0
  94. package/templates/firebase/assets/icons/google_play_games.png +0 -0
  95. package/templates/firebase/lib/components/kasy_web_header.dart +0 -218
  96. package/templates/firebase/lib/core/chrome/web_header_scope.dart +0 -20
  97. package/templates/firebase/lib/features/authentication/ui/components/apple_signin.dart +0 -19
  98. package/templates/firebase/lib/features/authentication/ui/components/google_signin.dart +0 -32
  99. package/templates/firebase/lib/features/authentication/ui/widgets/round_signin.dart +0 -73
  100. package/templates/firebase/lib/features/feedbacks/ui/widgets/add_feature_button.dart +0 -66
  101. package/templates/firebase/lib/features/notifications/ui/components/notification_settings_sheet.dart +0 -179
  102. package/templates/firebase/lib/features/notifications/ui/components/push_notification_switcher.dart +0 -106
@@ -1,742 +1,779 @@
1
1
  {
2
- "common": {
3
- "close": "Cerrar",
4
- "copied": "Copiado",
5
- "saved": "Guardado",
6
- "error": "Error",
7
- "unavailable": "No disponible",
8
- "native_only_title": "Solo en la app nativa"
2
+ "common": {
3
+ "close": "Cerrar",
4
+ "copied": "Copiado",
5
+ "saved": "Guardado",
6
+ "error": "Error",
7
+ "unavailable": "No disponible",
8
+ "native_only_title": "Solo en la app nativa"
9
+ },
10
+ "admin_console": {
11
+ "tabs": {
12
+ "overview": "Resumen",
13
+ "users": "Usuarios",
14
+ "requests": "Solicitudes",
15
+ "tools": "Herramientas",
16
+ "debug": "Depuración"
9
17
  },
10
- "admin_console": {
11
- "tabs": {
12
- "overview": "Resumen",
13
- "users": "Usuarios",
14
- "requests": "Solicitudes",
15
- "tools": "Herramientas",
16
- "debug": "Depuración"
17
- },
18
- "back_to_app": "Volver a la app",
19
- "overview": {
20
- "section": "Proyecto",
21
- "backend": "Backend",
22
- "account": "Cuenta",
23
- "guest": "Invitado",
24
- "user_id": "ID de usuario",
25
- "build": "Versión",
26
- "session_title": "Sesión actual",
27
- "requests_metric": "Solicitudes de función",
28
- "users_hint": "Abre la pestaña Usuarios para gestionar todas las cuentas.",
29
- "debug_note": "Consola de depuración — visible solo en builds de desarrollo."
30
- },
31
- "users": {
32
- "title": "Usuarios",
33
- "search_hint": "Buscar por nombre o correo",
34
- "col_user": "Usuario",
35
- "col_status": "Estado",
36
- "col_plan": "Plan",
37
- "col_joined": "Registro",
38
- "status_active": "Activo",
39
- "status_inactive": "Inactivo",
40
- "plan_subscriber": "Suscriptor",
41
- "plan_free": "Gratis",
42
- "empty": "No se encontraron usuarios",
43
- "error": "No se pudieron cargar los usuarios. Asegúrate de ser admin.",
44
- "page": "Página $page de $total",
45
- "prev": "Anterior",
46
- "next": "Siguiente",
47
- "anonymous": "Anónimo",
48
- "filter_all": "Todos los usuarios",
49
- "filter_subscribers": "Suscriptores",
50
- "loading": "Cargando usuarios…",
51
- "results": "Mostrando $from a $to de $total",
52
- "truncated": "Mostrando los $count más recientes. La búsqueda cubre solo los cargados.",
53
- "empty_search": "Ningún usuario coincide con la búsqueda",
54
- "empty_search_hint": "Prueba con otro nombre o correo.",
55
- "refresh": "Actualizar",
56
- "retry": "Reintentar"
57
- },
58
- "requests": {
59
- "title": "Solicitudes de función",
60
- "empty": "Aún no hay solicitudes",
61
- "votes": "$count votos",
62
- "visible": "Visible",
63
- "hidden": "Oculto",
64
- "edit": "Editar traducciones",
65
- "error": "No se pudieron cargar las solicitudes",
66
- "saved": "Solicitud actualizada",
67
- "editor_title": "Editar solicitud",
68
- "field_title": "Título",
69
- "field_description": "Descripción",
70
- "lang_en": "Inglés",
71
- "lang_pt": "Portugués",
72
- "lang_es": "Español",
73
- "visibility": "Visible para los usuarios",
74
- "save": "Guardar",
75
- "cancel": "Cancelar"
76
- },
77
- "groups": {
78
- "actions": "Acciones",
79
- "features": "Funciones",
80
- "preview": "Vista previa",
81
- "debug_actions": "Acciones de debug",
82
- "identity": "Identidad",
83
- "notification_test": "Prueba de notificación"
84
- },
85
- "settings_entry": {
86
- "title": "Admin",
87
- "caption": "Visible solo para administradores y en modo de desarrollo."
88
- },
89
- "requires_admin": "Necesitas ser admin para ver esto."
18
+ "back_to_app": "Volver a la app",
19
+ "overview": {
20
+ "section": "Proyecto",
21
+ "summary": "Resumen",
22
+ "backend": "Backend",
23
+ "account": "Cuenta",
24
+ "guest": "Invitado",
25
+ "user_id": "ID de usuario",
26
+ "build": "Versión",
27
+ "session_title": "Sesión actual",
28
+ "requests_metric": "Solicitudes de función",
29
+ "total_users": "Usuarios totales",
30
+ "subscribers": "Suscriptores",
31
+ "new_7d": "Nuevos (7 días)",
32
+ "signups_title": "Nuevos registros",
33
+ "signups_subtitle": "Últimos 14 días",
34
+ "signups_total": "$count en 14 días",
35
+ "signups_empty": "Sin registros en este período.",
36
+ "plan_split_title": "Distribución de planes",
37
+ "free": "Gratis",
38
+ "subscriber": "Suscriptor",
39
+ "conversion": "$percent suscriben",
40
+ "loaded_note": "Según los $count usuarios más recientes.",
41
+ "users_hint": "Abre la pestaña Usuarios para gestionar todas las cuentas.",
42
+ "debug_note": "Consola de depuración — visible solo en builds de desarrollo."
90
43
  },
91
- "home": {
92
- "title": "Ejemplo Kasy",
93
- "welcome": "Bienvenido al demo de Kasy",
94
- "cards": {
95
- "paywall_title": "Paywall",
96
- "paywall_description": "Ver la página de suscripción",
97
- "notification_title": "Prueba de notificación local",
98
- "notification_description": "Muestra una alerta solo en este dispositivo. No aparece en la pestaña Notificaciones (push).",
99
- "feedback_title": "Feedback",
100
- "feedback_description": "Página de solicitud de funciones o votación",
101
- "signup_title": "Registro",
102
- "signup_description": "El usuario anónimo puede registrarse con correo o red social",
103
- "assistant_title": "Asistente IA",
104
- "assistant_description": "Chatear con el asistente de IA"
105
- },
106
- "features_page": {
107
- "title": "Recursos del kit",
108
- "assistant_title": "Chatea con la IA",
109
- "assistant_description": "Chat listo para preguntas, ideas y ayuda dentro de la app",
110
- "feedback_title": "Vota y sugiere",
111
- "feedback_description": "Participa en el roadmap: vota ideas o envía la tuya",
112
- "notification_title": "Probar notificación",
113
- "notification_description": "Muestra una alerta solo en este dispositivo (no es push)",
114
- "notification_demo_title": "Alerta de prueba",
115
- "notification_demo_body": "Notificación local del demo del kit",
116
- "send_push_title": "Enviar notificación push",
117
- "send_push_description": "Envía un push a usuarios específicos o a todos",
118
- "paywall_title": "Planes y suscripción",
119
- "paywall_description": "Pantallas de paywall, prueba y flujo RevenueCat"
120
- },
121
- "dashboard": {
122
- "brand": "kasy",
123
- "components_title": "Componentes",
124
- "components_subtitle": "Explora tokens de diseño y bloques de UI",
125
- "features_title": "Features",
126
- "features_subtitle": "IA, feedback, alertas y suscripción",
127
- "count_total": "$count en total"
128
- },
129
- "components_preview": {
130
- "nav_title": "Componentes",
131
- "pro_badge": "PRO"
132
- }
44
+ "users": {
45
+ "title": "Usuarios",
46
+ "search_hint": "Buscar por nombre o correo",
47
+ "col_user": "Usuario",
48
+ "col_status": "Estado",
49
+ "col_plan": "Plan",
50
+ "col_joined": "Registro",
51
+ "status_active": "Activo",
52
+ "status_inactive": "Inactivo",
53
+ "plan_subscriber": "Suscriptor",
54
+ "plan_free": "Gratis",
55
+ "empty": "No se encontraron usuarios",
56
+ "error": "No se pudieron cargar los usuarios. Asegúrate de ser admin.",
57
+ "page": "Página $page de $total",
58
+ "prev": "Anterior",
59
+ "next": "Siguiente",
60
+ "anonymous": "Anónimo",
61
+ "filter_all": "Todos los usuarios",
62
+ "filter_subscribers": "Suscriptores",
63
+ "loading": "Cargando usuarios…",
64
+ "results": "Mostrando $from a $to de $total",
65
+ "truncated": "Mostrando los $count más recientes. La búsqueda cubre solo los cargados.",
66
+ "empty_search": "Ningún usuario coincide con la búsqueda",
67
+ "empty_search_hint": "Prueba con otro nombre o correo.",
68
+ "refresh": "Actualizar",
69
+ "retry": "Reintentar"
133
70
  },
134
- "auth": {
135
- "signin": {
136
- "title": "Bienvenido de nuevo",
137
- "subtitle": "Inicia sesión para continuar tu experiencia",
138
- "email_hint": "bruce@wayne.com",
139
- "email_label": "Correo electrónico",
140
- "password_hint": "Contraseña",
141
- "password_label": "Contraseña",
142
- "forgot_password": "Olvidé contraseña",
143
- "submit": "Continuar con correo",
144
- "create_account": "Crear mi cuenta",
145
- "no_account": "¿No tienes una cuenta?",
146
- "signup_link": "Regístrate",
147
- "continue_without": "Continuar sin cuenta",
148
- "or_sign_in_with": "o",
149
- "google": "Gmail",
150
- "apple": "Apple",
151
- "facebook": "Facebook",
152
- "error_title": "Error",
153
- "error_text": "Correo, contraseña incorrectos o este correo no está registrado",
154
- "email_invalid": "Correo electrónico inválido",
155
- "password_required": "Debes ingresar una contraseña",
156
- "password_too_short": "Tu contraseña debe tener al menos 5 caracteres",
157
- "social_error": "No se pudo iniciar sesión con $provider",
158
- "email_already_registered": "Este correo ya tiene una cuenta con otro método de inicio de sesión. Usa el método con el que te registraste."
159
- },
160
- "signup": {
161
- "title": "Regístrate ahora",
162
- "subtitle": "Crea tu cuenta para empezar",
163
- "submit": "Crear mi cuenta",
164
- "have_account": "¿Ya tienes una cuenta?",
165
- "signin_link": "Iniciar sesión",
166
- "already_have_account": "Ya tengo una cuenta",
167
- "error_title": "Error",
168
- "error_text": "Este correo ya existe o es inválido"
169
- },
170
- "recover": {
171
- "title": "Recuperar contraseña",
172
- "subtitle": "Ingresa tu correo y te enviaremos un enlace para crear una nueva contraseña.",
173
- "email_label": "Correo electrónico",
174
- "submit": "Recuperar contraseña",
175
- "remember": "¿Recordaste tu contraseña?",
176
- "signin_link": "Iniciar sesión",
177
- "error_title": "Error",
178
- "error_text": "Ingresa un correo electrónico válido"
179
- }
71
+ "requests": {
72
+ "title": "Solicitudes de función",
73
+ "empty": "Aún no hay solicitudes",
74
+ "votes": "$count votos",
75
+ "visible": "Visible",
76
+ "hidden": "Oculto",
77
+ "edit": "Editar traducciones",
78
+ "error": "No se pudieron cargar las solicitudes",
79
+ "saved": "Solicitud actualizada",
80
+ "editor_title": "Editar solicitud",
81
+ "field_title": "Título",
82
+ "field_description": "Descripción",
83
+ "lang_en": "Inglés",
84
+ "lang_pt": "Portugués",
85
+ "lang_es": "Español",
86
+ "visibility": "Visible para los usuarios",
87
+ "save": "Guardar",
88
+ "cancel": "Cancelar"
180
89
  },
181
- "rate_popup": {
182
- "title": "¿Tienes 15 segundos para calificarnos?",
183
- "description": "¡Es rápido y muy útil! ¡Muchas gracias!",
184
- "cancel_button": "Quizás más tarde",
185
- "rate_button": "¡Sí, con gusto!"
90
+ "groups": {
91
+ "actions": "Acciones",
92
+ "features": "Funciones",
93
+ "preview": "Vista previa",
94
+ "debug_actions": "Acciones de debug",
95
+ "identity": "Identidad",
96
+ "notification_test": "Prueba de notificación"
186
97
  },
187
- "premium": {
188
- "title_1": "Desbloquea el acceso completo",
189
- "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
190
- "feature_1": "Característica 1 lorem ipsum",
191
- "feature_2": "Característica 2 mop issum",
192
- "feature_3": "Característica 3 lorem",
193
- "duration_weekly": "Semana",
194
- "duration_annual": "Año",
195
- "duration_monthly": "Mes",
196
- "duration_monthly_description": "Cancela cuando quieras",
197
- "duration_lifetime": "De por vida",
198
- "duration_lifetime_description": "Pago único",
199
- "restore_action": "Restaurar",
200
- "coupon_title": "¿Tienes un cupón?",
201
- "payment_cancel_reassurance": "Cancelación fácil con 1 clic, siempre",
202
- "payment_cancel_reassurance_free_trial": "Sin pago ahora, cancela cuando quieras",
203
- "payment_action": "Iniciar prueba gratuita",
204
- "payment_action_trial": "7 días gratis, luego $money",
205
- "try_free_btn_action": "Prueba gratis por $days días",
206
- "duration_recuring_label_annual": "Anual",
207
- "duration_recuring_label_monthly": "Mensual",
208
- "duration_recuring_label_weekly": "Semanal",
209
- "action_button": "Continuar",
210
- "terms": "Términos",
211
- "privacy": "Privacidad",
212
- "error_loading": "Error al cargar las ofertas",
213
- "no_products_title": "Las opciones de suscripción aún no están disponibles",
214
- "no_products_description": "Inténtalo de nuevo en unos instantes. Si sigue ocurriendo, es posible que los productos de la tienda aún estén terminando la configuración.",
215
- "restore_success_title": "Suscripción restaurada",
216
- "restore_success_text": "Gracias por tu confianza",
217
- "purchase_success_title": "Suscripción realizada con éxito",
218
- "purchase_success_text": "Gracias por tu confianza",
219
- "error_title": "Error",
220
- "error_text": "Ocurrió un error. Inténtalo de nuevo",
221
- "web_checkout_timeout_title": "Pago no confirmado",
222
- "web_checkout_timeout_text": "No recibimos confirmación del pago. Si ya pagaste, toca Restaurar.",
223
- "restore_none_title": "No se encontró ninguna suscripción",
224
- "restore_none_text": "No encontramos una suscripción activa para restaurar.",
225
- "comparison": {
226
- "title": "Comparación de planes Premium",
227
- "features_label": "Características",
228
- "free_version": "Gratis",
229
- "premium_version": "Premium",
230
- "no_ads": "Sin anuncios",
231
- "premium_themes": "Temas Premium",
232
- "advanced_customization": "Personalización avanzada",
233
- "priority_support": "Soporte prioritario",
234
- "home_widget": "Widgets en pantalla de inicio",
235
- "talk_with_assistant": "Asistente IA"
236
- }
98
+ "paywalls": {
99
+ "subtitle": "Toca un paywall para previsualizarlo. Copia su código para decirle al asistente cuál usar.",
100
+ "copy_code": "Copiar código",
101
+ "code_copied": "Código copiado al portapapeles",
102
+ "with_switch_title": "Con prueba gratis",
103
+ "with_switch_desc": "Planes con un interruptor para activar o desactivar la prueba gratis.",
104
+ "basic_title": "Lista de planes",
105
+ "basic_desc": "Lista vertical de planes para que el usuario elija.",
106
+ "basic_row_title": "Planes en fila",
107
+ "basic_row_desc": "Planes mostrados lado a lado para comparar rápido.",
108
+ "minimal_title": "Minimalista",
109
+ "minimal_desc": "Beneficios y un solo botón. Ideal para apps de un solo plan."
237
110
  },
238
- "activePremium": {
239
- "title": "Eres un usuario premium",
240
- "description": "Disfruta todas las funciones",
241
- "unsubscribe_button": "Cancelar suscripción",
242
- "early_bird_description": "Usaste un cupón que te dio acceso gratuito a las funciones premium sin suscripción. ¡Disfrútalo!",
243
- "unsubscribe_feedback_title": "Ayúdanos a mejorar",
244
- "unsubscribe_feedback_description": "Lamentamos verte partir. ¿Podrías decirnos brevemente por qué te estás dando de baja?",
245
- "unsubscribe_feedback_hint": "Cuéntanos tu motivo...",
246
- "unsubscribe_feedback_min_chars": "Se requieren mínimo 6 caracteres",
247
- "unsubscribe_confirm_button": "Continuar",
248
- "lifetime_user_description": "Eres un usuario de por vida",
249
- "managed_elsewhere_title": "Suscripción en otra plataforma",
250
- "managed_elsewhere_description": "Esta suscripción se realizó en otra plataforma y no se puede gestionar ni cancelar aquí. Inicia sesión en tu cuenta en la plataforma donde la compraste.",
251
- "restore_button": "Restaurar compras",
252
- "cancel_button": "Cerrar",
253
- "billing_title": "Facturación",
254
- "plan_label": "Plan de cuenta",
255
- "plan_fallback": "Premium",
256
- "manage_subscription": "Administrar suscripción",
257
- "restore_purchases": "Restaurar compras",
258
- "renews_on": "Renueva el $date",
259
- "expires_on": "Expira el $date",
260
- "trial_label": "Evaluación gratuita",
261
- "trial_until": "Evaluación gratuita hasta el $date",
262
- "charges_from": "$price a partir del $date"
111
+ "settings_entry": {
112
+ "title": "Admin",
113
+ "caption": "Visible solo para administradores y en modo de desarrollo."
263
114
  },
264
- "paywallWithSwitch": {
265
- "withTrial": {
266
- "title": "Prueba gratis por $days días",
267
- "btnAction": "Prueba gratis",
268
- "details": "$days días gratis, luego $price",
269
- "trial_switch_title": "Prueba gratuita de $days días"
270
- },
271
- "noTrial": {
272
- "title": "Disfruta tu experiencia Premium",
273
- "btnAction": "Continuar",
274
- "trial_switch_title": "¿Aún no estás seguro?",
275
- "trial_switch_subtitle": "Activar prueba gratuita"
276
- },
277
- "features": [
278
- "Lorem característica 1",
279
- "Lorem característica 2",
280
- "Lorem característica 3",
281
- "Cancela cuando quieras"
282
- ]
115
+ "requires_admin": "Necesitas ser admin para ver esto."
116
+ },
117
+ "home": {
118
+ "title": "Ejemplo Kasy",
119
+ "welcome": "Bienvenido al demo de Kasy",
120
+ "cards": {
121
+ "paywall_title": "Paywall",
122
+ "paywall_description": "Ver la página de suscripción",
123
+ "notification_title": "Prueba de notificación local",
124
+ "notification_description": "Muestra una alerta solo en este dispositivo. No aparece en la pestaña Notificaciones (push).",
125
+ "feedback_title": "Feedback",
126
+ "feedback_description": "Página de solicitud de funciones o votación",
127
+ "signup_title": "Registro",
128
+ "signup_description": "El usuario anónimo puede registrarse con correo o red social",
129
+ "assistant_title": "Asistente IA",
130
+ "assistant_description": "Chatear con el asistente de IA"
283
131
  },
284
- "onboarding": {
285
- "feature_1": {
286
- "title": "Monetiza desde el día uno",
287
- "description": "Paywalls, suscripciones y prueba gratis listos para producción. Sin crear backend de cobros.",
288
- "action": "Continuar",
289
- "skip": "Omitir",
290
- "login": "¿Ya tienes cuenta? Iniciar sesión"
291
- },
292
- "feature_2": {
293
- "title": "Inicio de sesión, ya resuelto",
294
- "description": "Correo, login social y recuperación de contraseña. Seguro y listo para publicar.",
295
- "action": "Continuar"
296
- },
297
- "feature_3": {
298
- "title": "Haz que vuelvan",
299
- "description": "Push, avisos en la app y permisos ya integrados para enganchar y retener.",
300
- "action": "Continuar"
301
- },
302
- "mockups": {
303
- "paywall": {
304
- "title": "Premium",
305
- "annual": "Anual",
306
- "monthly": "Mensual",
307
- "save_badge": "-40%",
308
- "price_year": "\\$39,99 / año",
309
- "price_month": "\\$4,99 / mes",
310
- "cta": "Iniciar prueba gratis"
311
- },
312
- "auth": {
313
- "welcome": "Bienvenido de vuelta",
314
- "email_hint": "tu@email.com",
315
- "sign_in": "Iniciar sesión",
316
- "divider": "o"
317
- },
318
- "notification": {
319
- "title": "Nuevo mensaje",
320
- "time": "ahora"
321
- },
322
- "push_permission": {
323
- "title": "¿Activar notificaciones?",
324
- "allow": "Permitir",
325
- "deny": "Ahora no"
326
- },
327
- "tracking_permission": {
328
- "title": "¿Permitir seguimiento?",
329
- "allow": "Permitir",
330
- "deny": "Pedir no rastrear"
331
- }
332
- },
333
- "ageQuestion": {
334
- "title": "¿Cuántos años tienes?",
335
- "description": "Esto nos ayuda a personalizar tu experiencia.",
336
- "options(map)": {
337
- "age18_30": "18 a 30 años",
338
- "age31_40": "31 a 40 años",
339
- "age41_50": "41 a 50 años",
340
- "age51_60": "Más de 50 años",
341
- "none": "Prefiero no decirlo"
342
- },
343
- "action": "Continuar"
344
- },
345
- "genderQuestion": {
346
- "title": "¿Cómo te identificas?",
347
- "description": "Elige lo que mejor te represente. Puedes omitir si prefieres.",
348
- "options(map)": {
349
- "male": "Masculino",
350
- "female": "Femenino",
351
- "none": "Prefiero no decirlo"
352
- },
353
- "action": "Continuar"
354
- },
355
- "notifications": {
356
- "title": "No te pierdas nada",
357
- "description": "Solo te escribiremos cuando de verdad importe. Nada de spam.",
358
- "continue_button": "Activar notificaciones",
359
- "skip_button": "Ahora no"
360
- },
361
- "att": {
362
- "title": "Tú tienes el control",
363
- "description": "Permite el seguimiento para anuncios más relevantes. La decisión siempre es tuya.",
364
- "continue_button": "Continuar"
365
- },
366
- "loading": {
367
- "title": "Preparando todo para ti",
368
- "subtitle": "Solo tomará un momento"
369
- }
132
+ "features_page": {
133
+ "title": "Recursos del kit",
134
+ "assistant_title": "Chatea con la IA",
135
+ "assistant_description": "Chat listo para preguntas, ideas y ayuda dentro de la app",
136
+ "feedback_title": "Vota y sugiere",
137
+ "feedback_description": "Participa en el roadmap: vota ideas o envía la tuya",
138
+ "notification_title": "Probar notificación",
139
+ "notification_description": "Muestra una alerta solo en este dispositivo (no es push)",
140
+ "notification_demo_title": "Alerta de prueba",
141
+ "notification_demo_body": "Notificación local del demo del kit",
142
+ "send_push_title": "Enviar notificación push",
143
+ "send_push_description": "Envía un push a usuarios específicos o a todos",
144
+ "paywall_title": "Planes y suscripción",
145
+ "paywall_description": "Pantallas de paywall, prueba y flujo RevenueCat"
370
146
  },
371
- "feature_requests": {
372
- "title": "Ideas",
373
- "description": "Vota ideas o comparte la tuya. Cada voz define lo que construimos.",
374
- "community_ideas": "Ideas de la comunidad",
375
- "no_requests": "Sin ideas aún. Sé el primero en sugerir una.",
376
- "vote_success": {
377
- "title": "Voto registrado",
378
- "description": "Gracias por ayudarnos a priorizar"
379
- },
380
- "vote_error": {
381
- "title": "Ya votado",
382
- "description": "Ya votaste por esta idea"
383
- },
384
- "add_feature": {
385
- "chip_label": "Agregar",
386
- "title": "Enviar una idea",
387
- "description": "Cuéntanos qué te gustaría ver en la app.",
388
- "save_button": "Enviar",
389
- "title_label": "Título",
390
- "title_hint": "Un título corto y descriptivo",
391
- "description_label": "Descripción",
392
- "description_hint": "Describe el recurso o la mejora en detalle...",
393
- "error_title": "Error",
394
- "error_required": "El título y la descripción son obligatorios",
395
- "error_sending": "Algo salió mal. Inténtalo de nuevo.",
396
- "error_too_short": "Descripción muy corta. Agrega más detalles",
397
- "toast_success": {
398
- "title": "Idea enviada",
399
- "description": "La revisaremos y te daremos una respuesta"
400
- }
401
- }
147
+ "dashboard": {
148
+ "brand": "kasy",
149
+ "components_title": "Componentes",
150
+ "components_subtitle": "Explora tokens de diseño y bloques de UI",
151
+ "features_title": "Features",
152
+ "features_subtitle": "IA, feedback, alertas y suscripción",
153
+ "count_total": "$count en total",
154
+ "search_hint": "Buscar componentes",
155
+ "search_empty": "Ningún componente encontrado"
402
156
  },
403
- "update_bottom_sheet": {
404
- "title": "¿Qué hay de nuevo?",
405
- "description": "Hicimos algunas mejoras",
406
- "highlights": [
407
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
408
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
409
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit."
410
- ],
411
- "continue_button": "Entendido"
157
+ "components_preview": {
158
+ "nav_title": "Componentes",
159
+ "pro_badge": "PRO"
160
+ }
161
+ },
162
+ "auth": {
163
+ "signin": {
164
+ "title": "Bienvenido de nuevo",
165
+ "subtitle": "Inicia sesión para continuar tu experiencia",
166
+ "email_hint": "bruce@wayne.com",
167
+ "email_label": "Correo electrónico",
168
+ "password_hint": "Contraseña",
169
+ "password_label": "Contraseña",
170
+ "forgot_password": "Olvidé contraseña",
171
+ "submit": "Continuar con correo",
172
+ "create_account": "Crear mi cuenta",
173
+ "no_account": "¿No tienes una cuenta?",
174
+ "signup_link": "Regístrate",
175
+ "continue_without": "Continuar sin cuenta",
176
+ "or_sign_in_with": "o",
177
+ "google": "Gmail",
178
+ "apple": "Apple",
179
+ "facebook": "Facebook",
180
+ "error_title": "Error",
181
+ "error_text": "Correo, contraseña incorrectos o este correo no está registrado",
182
+ "email_invalid": "Correo electrónico inválido",
183
+ "password_required": "Debes ingresar una contraseña",
184
+ "password_too_short": "Tu contraseña debe tener al menos 5 caracteres",
185
+ "social_error": "No se pudo iniciar sesión con $provider",
186
+ "email_already_registered": "Este correo ya tiene una cuenta con otro método de inicio de sesión. Usa el método con el que te registraste."
412
187
  },
413
- "update_available": {
414
- "title": "Actualización disponible",
415
- "description": "Hay una versión más nueva de la app. Actualiza para tener las últimas mejoras y correcciones.",
416
- "forced_title": "Actualización requerida",
417
- "forced_description": "Esta versión ya no es compatible. Actualiza para seguir usando la app.",
418
- "update_button": "Actualizar ahora",
419
- "later_button": "Ahora no"
188
+ "signup": {
189
+ "title": "Regístrate ahora",
190
+ "subtitle": "Crea tu cuenta para empezar",
191
+ "submit": "Crear mi cuenta",
192
+ "have_account": "¿Ya tienes una cuenta?",
193
+ "signin_link": "Iniciar sesión",
194
+ "already_have_account": "Ya tengo una cuenta",
195
+ "error_title": "Error",
196
+ "error_text": "Este correo ya existe o es inválido"
420
197
  },
421
- "request_notification_permission": {
422
- "title": "¿Activar notificaciones?",
423
- "description": "Recibe actualizaciones en tiempo real y mantente al día con lo que importa.",
424
- "continue_button": "Activar",
425
- "skip_button": "Ahora no"
198
+ "recover": {
199
+ "title": "Recuperar contraseña",
200
+ "subtitle": "Ingresa tu correo y te enviaremos un enlace para crear una nueva contraseña.",
201
+ "email_label": "Correo electrónico",
202
+ "submit": "Recuperar contraseña",
203
+ "remember": "¿Recordaste tu contraseña?",
204
+ "signin_link": "Iniciar sesión",
205
+ "error_title": "Error",
206
+ "error_text": "Ingresa un correo electrónico válido"
207
+ }
208
+ },
209
+ "rate_popup": {
210
+ "title": "¿Tienes 15 segundos para calificarnos?",
211
+ "description": "¡Es rápido y muy útil! ¡Muchas gracias!",
212
+ "cancel_button": "Quizás más tarde",
213
+ "rate_button": "¡Sí, con gusto!"
214
+ },
215
+ "premium": {
216
+ "title_1": "Desbloquea el acceso completo",
217
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
218
+ "feature_1": "Característica 1 lorem ipsum",
219
+ "feature_2": "Característica 2 mop issum",
220
+ "feature_3": "Característica 3 lorem",
221
+ "duration_weekly": "Semana",
222
+ "duration_annual": "Año",
223
+ "duration_monthly": "Mes",
224
+ "duration_monthly_description": "Cancela cuando quieras",
225
+ "duration_lifetime": "De por vida",
226
+ "duration_lifetime_description": "Pago único",
227
+ "restore_action": "Restaurar",
228
+ "coupon_title": "¿Tienes un cupón?",
229
+ "payment_cancel_reassurance": "Cancelación fácil con 1 clic, siempre",
230
+ "payment_cancel_reassurance_free_trial": "Sin pago ahora, cancela cuando quieras",
231
+ "payment_action": "Iniciar prueba gratuita",
232
+ "payment_action_trial": "7 días gratis, luego $money",
233
+ "try_free_btn_action": "Prueba gratis por $days días",
234
+ "duration_recuring_label_annual": "Anual",
235
+ "duration_recuring_label_monthly": "Mensual",
236
+ "duration_recuring_label_weekly": "Semanal",
237
+ "action_button": "Continuar",
238
+ "terms": "Términos",
239
+ "privacy": "Privacidad",
240
+ "error_loading": "Error al cargar las ofertas",
241
+ "no_products_title": "Las opciones de suscripción aún no están disponibles",
242
+ "no_products_description": "Inténtalo de nuevo en unos instantes. Si sigue ocurriendo, es posible que los productos de la tienda aún estén terminando la configuración.",
243
+ "restore_success_title": "Suscripción restaurada",
244
+ "restore_success_text": "Gracias por tu confianza",
245
+ "purchase_success_title": "Suscripción realizada con éxito",
246
+ "purchase_success_text": "Gracias por tu confianza",
247
+ "error_title": "Error",
248
+ "error_text": "Ocurrió un error. Inténtalo de nuevo",
249
+ "web_checkout_timeout_title": "Pago no confirmado",
250
+ "web_checkout_timeout_text": "No recibimos confirmación del pago. Si ya pagaste, toca Restaurar.",
251
+ "restore_none_title": "No se encontró ninguna suscripción",
252
+ "restore_none_text": "No encontramos una suscripción activa para restaurar.",
253
+ "comparison": {
254
+ "title": "Comparación de planes Premium",
255
+ "features_label": "Características",
256
+ "free_version": "Gratis",
257
+ "premium_version": "Premium",
258
+ "no_ads": "Sin anuncios",
259
+ "premium_themes": "Temas Premium",
260
+ "advanced_customization": "Personalización avanzada",
261
+ "priority_support": "Soporte prioritario",
262
+ "home_widget": "Widgets en pantalla de inicio",
263
+ "talk_with_assistant": "Asistente IA"
264
+ }
265
+ },
266
+ "activePremium": {
267
+ "title": "Eres un usuario premium",
268
+ "description": "Disfruta todas las funciones",
269
+ "unsubscribe_button": "Cancelar suscripción",
270
+ "early_bird_description": "Usaste un cupón que te dio acceso gratuito a las funciones premium sin suscripción. ¡Disfrútalo!",
271
+ "unsubscribe_feedback_title": "Ayúdanos a mejorar",
272
+ "unsubscribe_feedback_description": "Lamentamos verte partir. ¿Podrías decirnos brevemente por qué te estás dando de baja?",
273
+ "unsubscribe_feedback_hint": "Cuéntanos tu motivo...",
274
+ "unsubscribe_feedback_min_chars": "Se requieren mínimo 6 caracteres",
275
+ "unsubscribe_confirm_button": "Continuar",
276
+ "lifetime_user_description": "Eres un usuario de por vida",
277
+ "managed_elsewhere_title": "Suscripción en otra plataforma",
278
+ "managed_elsewhere_description": "Esta suscripción se realizó en otra plataforma y no se puede gestionar ni cancelar aquí. Inicia sesión en tu cuenta en la plataforma donde la compraste.",
279
+ "restore_button": "Restaurar compras",
280
+ "cancel_button": "Cerrar",
281
+ "billing_title": "Facturación",
282
+ "plan_label": "Plan de cuenta",
283
+ "plan_fallback": "Premium",
284
+ "manage_subscription": "Administrar suscripción",
285
+ "restore_purchases": "Restaurar compras",
286
+ "renews_on": "Renueva el $date",
287
+ "expires_on": "Expira el $date",
288
+ "trial_label": "Evaluación gratuita",
289
+ "trial_until": "Evaluación gratuita hasta el $date",
290
+ "charges_from": "$price a partir del $date"
291
+ },
292
+ "paywallWithSwitch": {
293
+ "withTrial": {
294
+ "title": "Prueba gratis por $days días",
295
+ "btnAction": "Prueba gratis",
296
+ "details": "$days días gratis, luego $price",
297
+ "trial_switch_title": "Prueba gratuita de $days días"
426
298
  },
427
- "notification_permission_denied": {
428
- "title": "Permiso requerido",
429
- "description": "Para recibir notificaciones, activa los permisos de notificación en la configuración de tu dispositivo.",
430
- "allow_button": "Permitir notificaciones",
431
- "open_settings_button": "Abrir configuración",
432
- "cancel_button": "Cancelar"
299
+ "noTrial": {
300
+ "title": "Disfruta tu experiencia Premium",
301
+ "btnAction": "Continuar",
302
+ "trial_switch_title": "¿Aún no estás seguro?",
303
+ "trial_switch_subtitle": "Activar prueba gratuita"
433
304
  },
434
- "review_popup": {
435
- "title": "Tu opinión importa",
436
- "description": "Si la app te ha sido útil, una reseña rápida marca la diferencia. ¿Tienes ideas para mejorarla? Nos encantaría escucharlas.",
437
- "cancel_button": "Sugerir mejoras",
438
- "rate_button": "Escribir una reseña"
305
+ "features": [
306
+ "Lorem característica 1",
307
+ "Lorem característica 2",
308
+ "Lorem característica 3",
309
+ "Cancela cuando quieras"
310
+ ]
311
+ },
312
+ "onboarding": {
313
+ "feature_1": {
314
+ "title": "Monetiza desde el día uno",
315
+ "description": "Paywalls, suscripciones y prueba gratis listos para producción. Sin crear backend de cobros.",
316
+ "action": "Continuar",
317
+ "skip": "Omitir",
318
+ "login": "¿Ya tienes cuenta? Iniciar sesión"
439
319
  },
440
- "navigation": {
441
- "home": "Inicio",
442
- "support": "Soporte",
443
- "notifications": "Notificaciones",
444
- "settings": "Config.",
445
- "logout": "Salir",
446
- "skip_to_content": "Saltar al contenido"
320
+ "feature_2": {
321
+ "title": "Inicio de sesión, ya resuelto",
322
+ "description": "Correo, login social y recuperación de contraseña. Seguro y listo para publicar.",
323
+ "action": "Continuar"
447
324
  },
448
- "reminderPage": {
449
- "title": "Recordatorios",
450
- "toggleLabel": "Activar recordatorio",
451
- "typeLabel": "Repetir",
452
- "daily": "Cada día",
453
- "weekly": "Cada semana",
454
- "specificDate": "Fecha específica",
455
- "timeLabel": "Hora",
456
- "dayLabel": "Día de la semana",
457
- "dateLabel": "Fecha",
458
- "selectDate": "Seleccionar fecha"
325
+ "feature_3": {
326
+ "title": "Haz que vuelvan",
327
+ "description": "Push, avisos en la app y permisos ya integrados para enganchar y retener.",
328
+ "action": "Continuar"
459
329
  },
460
- "dailyReminder": {
461
- "title": "Recordatorio",
462
- "body": "Es hora de beber un vaso de agua."
330
+ "mockups": {
331
+ "paywall": {
332
+ "title": "Premium",
333
+ "annual": "Anual",
334
+ "monthly": "Mensual",
335
+ "save_badge": "-40%",
336
+ "price_year": "\\$39,99 / año",
337
+ "price_month": "\\$4,99 / mes",
338
+ "cta": "Iniciar prueba gratis"
339
+ },
340
+ "auth": {
341
+ "welcome": "Bienvenido de vuelta",
342
+ "email_hint": "tu@email.com",
343
+ "sign_in": "Iniciar sesión",
344
+ "divider": "o"
345
+ },
346
+ "notification": {
347
+ "title": "Nuevo mensaje",
348
+ "time": "ahora"
349
+ },
350
+ "push_permission": {
351
+ "title": "¿Activar notificaciones?",
352
+ "allow": "Permitir",
353
+ "deny": "Ahora no"
354
+ },
355
+ "tracking_permission": {
356
+ "title": "¿Permitir seguimiento?",
357
+ "allow": "Permitir",
358
+ "deny": "Pedir no rastrear"
359
+ }
463
360
  },
464
- "settings": {
465
- "title": "Configuración",
466
- "avatar": {
467
- "take_photo": "Tomar foto",
468
- "choose_library": "Biblioteca de fotos",
469
- "remove_photo": "Eliminar foto",
470
- "cancel": "Cancelar"
471
- },
472
- "language_title": "Idiomas",
473
- "theme_title": "Tema",
474
- "theme_option_system": "Sistema",
475
- "theme_option_light": "Claro",
476
- "theme_option_dark": "Oscuro",
477
- "haptic_feedback_title": "Feedback háptico",
478
- "hide_chrome_on_scroll_title": "Ocultar barras al desplazar",
479
- "section_preferences_label": "PREFERENCIAS",
480
- "section_security_label": "SEGURIDAD",
481
- "section_support_label": "SOPORTE",
482
- "biometric_title": "Bloqueo de la app",
483
- "biometric_subtitle_ios": "Pide Face ID o Touch ID al abrir con la sesión iniciada.",
484
- "biometric_subtitle_ios_face": "Exige Face ID al abrir con sesión iniciada.",
485
- "biometric_subtitle_ios_touch": "Exige Touch ID al abrir con sesión iniciada.",
486
- "biometric_subtitle_android": "Pediremos una verificación rápida en el teléfono cuando abras con sesión iniciada.",
487
- "biometric_subtitle_android_face": "Exige desbloqueo facial al abrir con sesión iniciada.",
488
- "biometric_subtitle_android_fingerprint": "Exige huella digital al abrir con sesión iniciada.",
489
- "biometric_subtitle_android_face_and_fingerprint": "Exige huella digital o desbloqueo facial al abrir con sesión iniciada.",
490
- "biometric_disable_title": "¿Desactivar el bloqueo de la app?",
491
- "biometric_disable_message": "Sin bloqueo, quien tenga el teléfono desbloqueado puede usar la app hasta que cierres sesión.",
492
- "biometric_disable_confirm": "Desactivar",
493
- "biometric_disable_cancel": "Cancelar",
494
- "biometric_enable_reason_ios": "Confirma con Face ID o Touch ID para activar el bloqueo",
495
- "biometric_enable_reason_ios_face": "Confirma con Face ID para activar el bloqueo",
496
- "biometric_enable_reason_ios_touch": "Confirma con Touch ID para activar el bloqueo",
497
- "biometric_enable_reason_android": "Confirma en el teléfono para activar el bloqueo",
498
- "biometric_enable_reason_android_face": "Confirma con reconocimiento facial para activar el bloqueo",
499
- "biometric_enable_reason_android_fingerprint": "Confirma con huella digital para activar el bloqueo",
500
- "biometric_enable_reason_android_face_and_fingerprint": "Confirma con huella o rostro para activar el bloqueo",
501
- "biometric_login_reason_ios": "Desbloquea con Face ID o Touch ID",
502
- "biometric_login_reason_ios_face": "Desbloquea con Face ID",
503
- "biometric_login_reason_ios_touch": "Desbloquea con Touch ID",
504
- "biometric_login_reason_android": "Confirma tu identidad",
505
- "biometric_login_reason_android_face": "Desbloquea con reconocimiento facial",
506
- "biometric_login_reason_android_fingerprint": "Desbloquea con huella digital",
507
- "biometric_login_reason_android_face_and_fingerprint": "Desbloquea con huella o rostro",
508
- "biometric_unavailable_message_ios": "Activa Face ID, Touch ID o código en Ajustes.",
509
- "biometric_unavailable_message_ios_face": "Activa Face ID o un código del dispositivo en Ajustes.",
510
- "biometric_unavailable_message_ios_touch": "Activa Touch ID o un código del dispositivo en Ajustes.",
511
- "biometric_unavailable_message_android": "Activa desbloqueo biométrico o bloqueo de pantalla en Ajustes.",
512
- "biometric_unavailable_message_android_face": "Configura reconocimiento facial o bloqueo de pantalla en ajustes.",
513
- "biometric_unavailable_message_android_fingerprint": "Configura huella digital o bloqueo de pantalla en ajustes.",
514
- "biometric_unavailable_message_android_face_and_fingerprint": "Añade huella o reconocimiento facial en Ajustes.",
515
- "biometric_not_enabled_message": "El bloqueo de la app no se activó.",
516
- "feedback": "Enviar comentarios",
517
- "premium": "Premium",
518
- "billing": "Facturación",
519
- "privacy": "Política de privacidad",
520
- "support": "Soporte",
521
- "disconnect": "Sí, salir",
522
- "disconnect_confirm_title": "¿Salir de tu cuenta?",
523
- "disconnect_confirm_message": "¿Seguro que quieres salir?",
524
- "disconnect_cancel": "Cancelar",
525
- "logout": "Cerrar sesión",
526
- "my_account": "Mi cuenta",
527
- "not_signed_in": "No conectado",
528
- "register": "Registrarse",
529
- "name_label": "Nombre",
530
- "email_label": "Correo electrónico",
531
- "connected_with_label": "Conectado con",
532
- "provider_email": "Correo y contraseña",
533
- "provider_phone": "Teléfono",
534
- "create_password_title": "Crear contraseña",
535
- "create_password_subtitle": "Define una contraseña para también iniciar sesión con correo y contraseña, además del inicio de sesión social.",
536
- "create_password_field": "Nueva contraseña",
537
- "create_password_confirm_label": "Confirmar contraseña",
538
- "create_password_success": "Contraseña creada",
539
- "create_password_error": "No se pudo crear la contraseña. Inténtalo de nuevo.",
540
- "create_password_too_short": "La contraseña debe tener al menos 6 caracteres",
541
- "create_password_mismatch": "Las contraseñas no coinciden",
542
- "link_social": "Vincular $provider",
543
- "link_social_success": "$provider vinculado",
544
- "link_social_error": "No se pudo vincular la cuenta. Inténtalo de nuevo.",
545
- "edit_name_title": "Editar nombre",
546
- "edit_name_hint": "Tu nombre",
547
- "edit_name_save": "Guardar",
548
- "edit_name_cancel": "Cancelar",
549
- "edit_name_success": "Nombre actualizado",
550
- "edit_name_error": "No se pudo actualizar tu nombre. Inténtalo de nuevo.",
551
- "reminders": "Recordatorios",
552
- "admin_panel": "Panel de Administración",
553
- "admin_debug_section_label": "ADMIN (SOLO DEBUG)",
554
- "admin_panel_debug_notice": "Toda esta sección Admin (título, panel y opciones) solo existe en builds de debug. No se incluye en release; quien instala desde la tienda o un APK de producción no ve nada de esto.",
555
- "delete_account": {
556
- "button": "Quiero eliminar mi cuenta",
557
- "title": "¿Quieres eliminar tu cuenta?",
558
- "content": "Advertencia: esta acción es permanente y no se puede deshacer.",
559
- "content_subscriber": "Advertencia: esta acción es permanente. Perderás tu suscripción activa, y crear una cuenta nueva más tarde (incluso con el mismo correo) no la recuperará.",
560
- "cancel": "Cancelar",
561
- "confirm": "Sí, eliminar",
562
- "error": "Algo salió mal. Por favor, inténtalo de nuevo."
563
- },
564
- "admin": {
565
- "update_bottom_sheet": "Previsualizar novedades",
566
- "preview_update_available": "Previsualizar actualización disponible",
567
- "paywalls": "Paywalls",
568
- "test_onboarding": "Probar onboarding",
569
- "copy_user_id": "Copiar ID de usuario",
570
- "user_id_copied": "ID de usuario copiado al portapapeles",
571
- "copy_fcm_token": "Copiar FCM Token",
572
- "fcm_token_copied": "FCM Token copiado al portapapeles",
573
- "fcm_token_unavailable": "Token no disponible (¿notificaciones desactivadas?)",
574
- "ask_notification": "Pedir permiso de notificación",
575
- "native_only": "Disponible solo en la app nativa (iOS / Android)",
576
- "ask_review": "Pedir evaluación",
577
- "home_widgets_panel": "Panel de Home Widgets",
578
- "home_widgets_title": "Panel de Home Widgets",
579
- "inspector_fab_title": "Inspector de widgets",
580
- "inspector_fab_subtitle_prefix": "Atajo global:",
581
- "update_mywidget_title": "Actualizar Widget MyWidget",
582
- "update_mywidget_desc": "Llamar a la actualización manual para el widget MyWidget",
583
- "paywalls_title": "Panel de Admin de Paywalls",
584
- "send_push_title": "Enviar notificación",
585
- "send_push_to_all": "Enviar a todos",
586
- "send_push_email_hint": "Agregar e-mail",
587
- "send_push_title_label": "Título",
588
- "send_push_title_hint": "Ej: Nueva actualización disponible",
589
- "send_push_body_label": "Mensaje",
590
- "send_push_body_hint": "Escribe el contenido de la notificación",
591
- "send_push_image_label": "URL de imagen (opcional)",
592
- "send_push_image_hint": "https://...",
593
- "send_push_email_label": "Correos destinatarios",
594
- "send_push_success": "¡Notificación enviada!",
595
- "send_push_user_not_found": "Usuario no encontrado: $email",
596
- "send_push_send_button": "Enviar",
597
- "send_push_required": "El título y el mensaje son obligatorios",
598
- "send_push_no_emails": "Agrega al menos un correo",
599
- "send_push_route_label": "Ruta al abrir (opcional)",
600
- "send_push_route_hint": "Ej: /premium, /notifications",
601
- "send_push_preview_label": "Vista previa",
602
- "send_push_preview_now": "ahora",
603
- "send_push_preview_title_placeholder": "Título de la notificación",
604
- "send_push_preview_body_placeholder": "El cuerpo del mensaje aparece aquí",
605
- "device_preview_title": "Device Preview (solo web)",
606
- "send_push_section_recipients": "Destinatarios",
607
- "send_push_section_content": "Contenido",
608
- "send_push_section_advanced": "Avanzado",
609
- "send_push_audience_all": "Todos",
610
- "send_push_audience_specific": "Específicos",
611
- "send_push_audience_all_hint": "La notificación se enviará a todos los usuarios suscritos."
612
- }
361
+ "ageQuestion": {
362
+ "title": "¿Cuántos años tienes?",
363
+ "description": "Esto nos ayuda a personalizar tu experiencia.",
364
+ "options(map)": {
365
+ "age18_30": "18 a 30 años",
366
+ "age31_40": "31 a 40 años",
367
+ "age41_50": "41 a 50 años",
368
+ "age51_60": "Más de 50 años",
369
+ "none": "Prefiero no decirlo"
370
+ },
371
+ "action": "Continuar"
613
372
  },
614
- "rate_banner": {
615
- "title": "¿Te gusta nuestra app?",
616
- "text": "¿Tienes un minuto para dejarnos una reseña en la tienda?",
617
- "rate_button": "¡Sí, seguro!",
618
- "later_button": "Más tarde..."
373
+ "genderQuestion": {
374
+ "title": "¿Cómo te identificas?",
375
+ "description": "Elige lo que mejor te represente. Puedes omitir si prefieres.",
376
+ "options(map)": {
377
+ "male": "Masculino",
378
+ "female": "Femenino",
379
+ "none": "Prefiero no decirlo"
380
+ },
381
+ "action": "Continuar"
619
382
  },
620
383
  "notifications": {
621
- "title": "Notificaciones",
622
- "empty_title": "No tienes notificaciones",
623
- "empty_subtitle": "Mantente atento a las actualizaciones",
624
- "error_fetching": "Error al obtener notificaciones",
625
- "push_title": "Notificaciones push",
626
- "push_subtitle_enabled": "Estás recibiendo alertas",
627
- "push_subtitle_disabled": "Toca para activar en Configuración",
628
- "push_subtitle_waiting": "Activa para no perderte nada",
629
- "mark_all_read": "Marcar leídas",
630
- "see_all": "Ver todas",
631
- "group_today": "Hoy",
632
- "group_yesterday": "Ayer",
633
- "group_older": "Más antiguas",
634
- "empty_cta": "Activar notificaciones",
635
- "empty_cta_open_settings": "Abrir ajustes",
636
- "delete_all": "Eliminar todo",
637
- "delete_all_confirm_title": "¿Eliminar todas las notificaciones?",
638
- "delete_all_confirm_message": "Esto eliminará todas las notificaciones de tu cuenta. Esta acción no se puede deshacer.",
639
- "delete_action": "Sí, eliminar",
640
- "cancel_action": "Cancelar",
641
- "deleted_one": "Notificación eliminada",
642
- "deleted_all": "Todas las notificaciones eliminadas"
384
+ "title": "No te pierdas nada",
385
+ "description": "Solo te escribiremos cuando de verdad importe. Nada de spam.",
386
+ "continue_button": "Activar notificaciones",
387
+ "skip_button": "Ahora no"
643
388
  },
644
- "bottom_router": {
645
- "fake_page_text": "Esta es una página de prueba"
389
+ "att": {
390
+ "title": " tienes el control",
391
+ "description": "Permite el seguimiento para anuncios más relevantes. La decisión siempre es tuya.",
392
+ "continue_button": "Continuar"
646
393
  },
647
- "ai_chat": {
648
- "title": "Asistente IA",
649
- "empty_state": "Inicia una conversación con tu asistente.",
650
- "hint": "Pregunta algo...",
651
- "error_not_configured": "El asistente aún no está disponible. Inténtalo más tarde.",
652
- "error_no_reply": "No pudimos obtener una respuesta. Inténtalo de nuevo.",
653
- "error_network": "No se pudo conectar al asistente de IA.",
654
- "new_conversation": "Nueva conversación",
655
- "conversations_empty": "Aún no hay conversaciones",
656
- "no_conversation_selected": "Elige una conversación o empieza una nueva.",
657
- "delete_title": "¿Eliminar conversación?",
658
- "delete_message": "Esta conversación y todos sus mensajes se eliminarán de forma permanente.",
659
- "delete_cancel": "Cancelar",
660
- "delete_confirm": "Sí, eliminar"
661
- },
662
- "phone_auth": {
663
- "title_input": "Autenticación por Teléfono",
664
- "subtitle_input": "Ingresa tu número de teléfono",
665
- "description_input": "Te enviaremos un código de verificación para confirmar tu identidad",
666
- "phone_label": "Número de teléfono",
667
- "phone_hint": "+34 600 123 456",
668
- "error_empty": "Por favor, ingresa un número de teléfono",
669
- "error_invalid": "Por favor, ingresa un número válido",
670
- "continue_btn": "Continuar",
671
- "title_verify": "Verificar Código",
672
- "verification_code": "Código de Verificación",
673
- "code_sent": "Hemos enviado un código de verificación a $phone",
674
- "signin_success_title": "Listo",
675
- "signin_success_text": "Has iniciado sesión con tu número de teléfono",
676
- "verify_code": "Verificar Código",
677
- "resend_code": "Reenviar Código",
678
- "enter_all_digits": "Por favor, ingresa los 6 dígitos"
679
- },
680
- "recover_password_result": {
681
- "title": "Email enviado",
682
- "description": "Te hemos enviado un email con un enlace para restablecer tu contraseña",
683
- "back_to_signin": "Volver a Iniciar Sesión",
684
- "note": "Nota: Si no recibes un email, por favor revisa tu carpeta de spam"
685
- },
686
- "page_not_found": {
687
- "title": "404 - Página no encontrada"
394
+ "loading": {
395
+ "title": "Preparando todo para ti",
396
+ "subtitle": "Solo tomará un momento"
397
+ }
398
+ },
399
+ "feature_requests": {
400
+ "title": "Ideas",
401
+ "description": "Vota ideas o comparte la tuya. Cada voz define lo que construimos.",
402
+ "community_ideas": "Ideas de la comunidad",
403
+ "no_requests": "Sin ideas aún. el primero en sugerir una.",
404
+ "vote_success": {
405
+ "title": "Voto registrado",
406
+ "description": "Gracias por ayudarnos a priorizar"
688
407
  },
689
- "devInspector": {
690
- "copied": "$widget copiado al portapapeles",
691
- "activate": "Activar inspector de widgets",
692
- "deactivate": "Desactivar inspector de widgets",
693
- "copyForAi": "Copiar para IA",
694
- "selectWidgetFirst": "Selecciona un widget en pantalla primero y luego toca Copiar.",
695
- "inspectorHint": "Toca la interfaz para seleccionar (borde morado). Luego copia para tu prompt de IA.",
696
- "statusActive": "Inspeccionando",
697
- "fieldSize": "Tamaño",
698
- "fieldColor": "Color",
699
- "copyJson": "Copiar JSON"
408
+ "vote_error": {
409
+ "title": "Ya votado",
410
+ "description": "Ya votaste por esta idea"
700
411
  },
701
- "webDevicePreview": {
702
- "frame": "Frame",
703
- "darkBackground": "Fondo oscuro",
704
- "darkTheme": "Tema oscuro",
705
- "landscape": "Horizontal",
706
- "textScale": "Escala de texto",
707
- "screenshot": "Captura de pantalla",
708
- "imageCopied": "Imagen copiada — pégala en el chat",
709
- "imageDownloaded": "Imagen descargada"
412
+ "add_feature": {
413
+ "chip_label": "Agregar",
414
+ "title": "Enviar una idea",
415
+ "description": "Cuéntanos qué te gustaría ver en la app.",
416
+ "save_button": "Enviar",
417
+ "title_label": "Título",
418
+ "title_hint": "Un título corto y descriptivo",
419
+ "description_label": "Descripción",
420
+ "description_hint": "Describe el recurso o la mejora en detalle...",
421
+ "error_title": "Error",
422
+ "error_required": "El título y la descripción son obligatorios",
423
+ "error_sending": "Algo salió mal. Inténtalo de nuevo.",
424
+ "error_too_short": "Descripción muy corta. Agrega más detalles",
425
+ "toast_success": {
426
+ "title": "Idea enviada",
427
+ "description": "La revisaremos y te daremos una respuesta"
428
+ }
429
+ }
430
+ },
431
+ "update_bottom_sheet": {
432
+ "title": "¿Qué hay de nuevo?",
433
+ "description": "Hicimos algunas mejoras",
434
+ "highlights": [
435
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
436
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
437
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit."
438
+ ],
439
+ "continue_button": "Entendido"
440
+ },
441
+ "update_available": {
442
+ "title": "Actualización disponible",
443
+ "description": "Hay una versión más nueva de la app. Actualiza para tener las últimas mejoras y correcciones.",
444
+ "forced_title": "Actualización requerida",
445
+ "forced_description": "Esta versión ya no es compatible. Actualiza para seguir usando la app.",
446
+ "update_button": "Actualizar ahora",
447
+ "later_button": "Ahora no"
448
+ },
449
+ "request_notification_permission": {
450
+ "title": "¿Activar notificaciones?",
451
+ "description": "Recibe actualizaciones en tiempo real y mantente al día con lo que importa.",
452
+ "continue_button": "Activar",
453
+ "skip_button": "Ahora no"
454
+ },
455
+ "notification_permission_denied": {
456
+ "title": "Permiso requerido",
457
+ "description": "Para recibir notificaciones, activa los permisos de notificación en la configuración de tu dispositivo.",
458
+ "allow_button": "Permitir notificaciones",
459
+ "open_settings_button": "Abrir configuración",
460
+ "cancel_button": "Cancelar"
461
+ },
462
+ "review_popup": {
463
+ "title": "¿Te gusta la app?",
464
+ "description": "Si la app te ha sido útil, una reseña en la tienda marca la diferencia. Toma unos segundos y nos ayuda mucho a crecer.",
465
+ "rate_button": "Escribir una reseña"
466
+ },
467
+ "navigation": {
468
+ "home": "Inicio",
469
+ "support": "Ayuda",
470
+ "notifications": "Notificaciones",
471
+ "settings": "Config.",
472
+ "logout": "Salir",
473
+ "skip_to_content": "Saltar al contenido"
474
+ },
475
+ "reminderPage": {
476
+ "title": "Recordatorios",
477
+ "toggleLabel": "Activar recordatorio",
478
+ "typeLabel": "Repetir",
479
+ "daily": "Cada día",
480
+ "weekly": "Cada semana",
481
+ "specificDate": "Una vez",
482
+ "timeLabel": "Hora",
483
+ "dayLabel": "Día de la semana",
484
+ "dateLabel": "Fecha",
485
+ "selectDate": "Seleccionar fecha",
486
+ "hint": "Recibe un recordatorio para volver a la app",
487
+ "summaryDaily": "Todos los días a las $time",
488
+ "summaryWeekly": "Cada $day a las $time",
489
+ "summaryDate": "El $date a las $time"
490
+ },
491
+ "dailyReminder": {
492
+ "title": "Recordatorio",
493
+ "body": "Es hora de beber un vaso de agua."
494
+ },
495
+ "settings": {
496
+ "title": "Configuración",
497
+ "avatar": {
498
+ "take_photo": "Tomar foto",
499
+ "choose_library": "Biblioteca de fotos",
500
+ "remove_photo": "Eliminar foto",
501
+ "cancel": "Cancelar"
710
502
  },
711
- "biometric_prompt": {
712
- "title_ios_face": "¿Activar Face ID en el bloqueo?",
713
- "title_ios_touch": "¿Activar Touch ID en el bloqueo?",
714
- "title_ios_mixed": "¿Activar Face ID/Touch ID en el bloqueo?",
715
- "title_android_face": "¿Activar bloqueo con reconocimiento facial?",
716
- "title_android_fingerprint": "¿Activar bloqueo con huella digital?",
717
- "title_android_mixed": "¿Proteger la app con tu teléfono?",
718
- "message_ios_face": "Al abrir confirmarás con Face ID—sigues con sesión iniciada.",
719
- "message_ios_touch": "Al abrir confirmarás con Touch ID—sigues con sesión iniciada.",
720
- "message_ios_mixed": "Al abrir confirmarás con Face ID o Touch ID—sigues con sesión iniciada.",
721
- "message_android_face": "Al abrir verificarás con reconocimiento facial—sigues con sesión iniciada.",
722
- "message_android_fingerprint": "Al abrir verificarás con huella digital—sigues con sesión iniciada.",
723
- "title_android_face_and_fingerprint": "¿Activar bloqueo con huella o rostro?",
724
- "message_android_face_and_fingerprint": "Puedes usar cualquiera de los dos—sigues dentro.",
725
- "message_android_mixed": "Una confirmación rápida al abrir—sigues con la sesión.",
726
- "not_now": "Ahora no",
727
- "enable": "Activar"
503
+ "language_title": "Idiomas",
504
+ "theme_title": "Tema",
505
+ "theme_option_system": "Sistema",
506
+ "theme_option_light": "Claro",
507
+ "theme_option_dark": "Oscuro",
508
+ "haptic_feedback_title": "Feedback háptico",
509
+ "hide_chrome_on_scroll_title": "Ocultar barras al desplazar",
510
+ "section_preferences_label": "PREFERENCIAS",
511
+ "section_security_label": "SEGURIDAD",
512
+ "section_support_label": "AYUDA",
513
+ "biometric_title": "Bloqueo de la app",
514
+ "biometric_subtitle_ios": "Pide Face ID o Touch ID al abrir con la sesión iniciada.",
515
+ "biometric_subtitle_ios_face": "Exige Face ID al abrir con sesión iniciada.",
516
+ "biometric_subtitle_ios_touch": "Exige Touch ID al abrir con sesión iniciada.",
517
+ "biometric_subtitle_android": "Pediremos una verificación rápida en el teléfono cuando abras con sesión iniciada.",
518
+ "biometric_subtitle_android_face": "Exige desbloqueo facial al abrir con sesión iniciada.",
519
+ "biometric_subtitle_android_fingerprint": "Exige huella digital al abrir con sesión iniciada.",
520
+ "biometric_subtitle_android_face_and_fingerprint": "Exige huella digital o desbloqueo facial al abrir con sesión iniciada.",
521
+ "biometric_disable_title": "¿Desactivar el bloqueo de la app?",
522
+ "biometric_disable_message": "Sin bloqueo, quien tenga el teléfono desbloqueado puede usar la app hasta que cierres sesión.",
523
+ "biometric_disable_confirm": "Desactivar",
524
+ "biometric_disable_cancel": "Cancelar",
525
+ "biometric_enable_reason_ios": "Confirma con Face ID o Touch ID para activar el bloqueo",
526
+ "biometric_enable_reason_ios_face": "Confirma con Face ID para activar el bloqueo",
527
+ "biometric_enable_reason_ios_touch": "Confirma con Touch ID para activar el bloqueo",
528
+ "biometric_enable_reason_android": "Confirma en el teléfono para activar el bloqueo",
529
+ "biometric_enable_reason_android_face": "Confirma con reconocimiento facial para activar el bloqueo",
530
+ "biometric_enable_reason_android_fingerprint": "Confirma con huella digital para activar el bloqueo",
531
+ "biometric_enable_reason_android_face_and_fingerprint": "Confirma con huella o rostro para activar el bloqueo",
532
+ "biometric_login_reason_ios": "Desbloquea con Face ID o Touch ID",
533
+ "biometric_login_reason_ios_face": "Desbloquea con Face ID",
534
+ "biometric_login_reason_ios_touch": "Desbloquea con Touch ID",
535
+ "biometric_login_reason_android": "Confirma tu identidad",
536
+ "biometric_login_reason_android_face": "Desbloquea con reconocimiento facial",
537
+ "biometric_login_reason_android_fingerprint": "Desbloquea con huella digital",
538
+ "biometric_login_reason_android_face_and_fingerprint": "Desbloquea con huella o rostro",
539
+ "biometric_unavailable_message_ios": "Activa Face ID, Touch ID o código en Ajustes.",
540
+ "biometric_unavailable_message_ios_face": "Activa Face ID o un código del dispositivo en Ajustes.",
541
+ "biometric_unavailable_message_ios_touch": "Activa Touch ID o un código del dispositivo en Ajustes.",
542
+ "biometric_unavailable_message_android": "Activa desbloqueo biométrico o bloqueo de pantalla en Ajustes.",
543
+ "biometric_unavailable_message_android_face": "Configura reconocimiento facial o bloqueo de pantalla en ajustes.",
544
+ "biometric_unavailable_message_android_fingerprint": "Configura huella digital o bloqueo de pantalla en ajustes.",
545
+ "biometric_unavailable_message_android_face_and_fingerprint": "Añade huella o reconocimiento facial en Ajustes.",
546
+ "biometric_not_enabled_message": "El bloqueo de la app no se activó.",
547
+ "feedback": "Enviar comentarios",
548
+ "premium": "Premium",
549
+ "billing": "Facturación",
550
+ "privacy": "Política de privacidad",
551
+ "support": "Centro de ayuda",
552
+ "disconnect": "Sí, salir",
553
+ "disconnect_confirm_title": "¿Salir de tu cuenta?",
554
+ "disconnect_confirm_message": "¿Seguro que quieres salir?",
555
+ "disconnect_cancel": "Cancelar",
556
+ "logout": "Cerrar sesión",
557
+ "my_account": "Mi cuenta",
558
+ "not_signed_in": "No conectado",
559
+ "register": "Registrarse",
560
+ "name_label": "Nombre",
561
+ "email_label": "Correo electrónico",
562
+ "connected_with_label": "Conectado con",
563
+ "provider_email": "Correo y contraseña",
564
+ "provider_phone": "Teléfono",
565
+ "create_password_title": "Crear contraseña",
566
+ "create_password_subtitle": "Define una contraseña para también iniciar sesión con correo y contraseña, además del inicio de sesión social.",
567
+ "create_password_field": "Nueva contraseña",
568
+ "create_password_confirm_label": "Confirmar contraseña",
569
+ "create_password_success": "Contraseña creada",
570
+ "create_password_error": "No se pudo crear la contraseña. Inténtalo de nuevo.",
571
+ "create_password_too_short": "La contraseña debe tener al menos 6 caracteres",
572
+ "create_password_mismatch": "Las contraseñas no coinciden",
573
+ "link_social": "Vincular $provider",
574
+ "link_social_success": "$provider vinculado",
575
+ "link_social_error": "No se pudo vincular la cuenta. Inténtalo de nuevo.",
576
+ "edit_name_title": "Editar nombre",
577
+ "edit_name_hint": "Tu nombre",
578
+ "edit_name_save": "Guardar",
579
+ "edit_name_cancel": "Cancelar",
580
+ "edit_name_success": "Nombre actualizado",
581
+ "edit_name_error": "No se pudo actualizar tu nombre. Inténtalo de nuevo.",
582
+ "reminders": "Recordatorios",
583
+ "admin_panel": "Panel de Administración",
584
+ "admin_debug_section_label": "ADMIN (SOLO DEBUG)",
585
+ "admin_panel_debug_notice": "Toda esta sección Admin (título, panel y opciones) solo existe en builds de debug. No se incluye en release; quien instala desde la tienda o un APK de producción no ve nada de esto.",
586
+ "delete_account": {
587
+ "button": "Quiero eliminar mi cuenta",
588
+ "title": "¿Quieres eliminar tu cuenta?",
589
+ "content": "Advertencia: esta acción es permanente y no se puede deshacer.",
590
+ "content_subscriber": "Advertencia: esta acción es permanente. Perderás tu suscripción activa, y crear una cuenta nueva más tarde (incluso con el mismo correo) no la recuperará.",
591
+ "cancel": "Cancelar",
592
+ "confirm": "Sí, eliminar",
593
+ "error": "Algo salió mal. Por favor, inténtalo de nuevo."
728
594
  },
729
- "home_widget": {
730
- "greeting_morning": "Buenos días",
731
- "greeting_afternoon": "Buenas tardes",
732
- "greeting_evening": "Buenas noches",
733
- "title_with_name": "¡Hola, $name!",
734
- "title_default": "¡Hola!",
735
- "title_logged_out": "Te esperamos de vuelta",
736
- "plan_free": "Plan gratuito",
737
- "plan_pro": "PRO",
738
- "quote": "Tu tiempo es limitado.\nNo vivas la vida de otra persona.\nTen el coraje de seguir tu intuición.\nTodo lo demás es secundario.",
739
- "quote_author": "Steve Jobs"
595
+ "admin": {
596
+ "update_bottom_sheet": "Previsualizar novedades",
597
+ "preview_update_available": "Previsualizar actualización disponible",
598
+ "paywalls": "Paywalls",
599
+ "test_onboarding": "Probar onboarding",
600
+ "copy_user_id": "Copiar ID de usuario",
601
+ "user_id_copied": "ID de usuario copiado al portapapeles",
602
+ "copy_fcm_token": "Copiar FCM Token",
603
+ "fcm_token_copied": "FCM Token copiado al portapapeles",
604
+ "fcm_token_unavailable": "Token no disponible (¿notificaciones desactivadas?)",
605
+ "ask_notification": "Pedir permiso de notificación",
606
+ "native_only": "Disponible solo en la app nativa (iOS / Android)",
607
+ "ask_review": "Pedir evaluación",
608
+ "home_widgets_panel": "Panel de Home Widgets",
609
+ "home_widgets_title": "Panel de Home Widgets",
610
+ "inspector_fab_title": "Inspector de widgets",
611
+ "inspector_fab_subtitle_prefix": "Atajo global:",
612
+ "update_mywidget_title": "Actualizar Widget MyWidget",
613
+ "update_mywidget_desc": "Llamar a la actualización manual para el widget MyWidget",
614
+ "paywalls_title": "Panel de Admin de Paywalls",
615
+ "send_push_title": "Enviar notificación",
616
+ "send_push_to_all": "Enviar a todos",
617
+ "send_push_email_hint": "Agregar e-mail",
618
+ "send_push_title_label": "Título",
619
+ "send_push_title_hint": "Ej: Nueva actualización disponible",
620
+ "send_push_body_label": "Mensaje",
621
+ "send_push_body_hint": "Escribe el contenido de la notificación",
622
+ "send_push_image_label": "URL de imagen (opcional)",
623
+ "send_push_image_hint": "https://...",
624
+ "send_push_email_label": "Correos destinatarios",
625
+ "send_push_success": "¡Notificación enviada!",
626
+ "send_push_user_not_found": "Usuario no encontrado: $email",
627
+ "send_push_send_button": "Enviar",
628
+ "send_push_required": "El título y el mensaje son obligatorios",
629
+ "send_push_no_emails": "Agrega al menos un correo",
630
+ "send_push_route_label": "Página al abrir",
631
+ "send_push_route_description": "Pantalla que se abre cuando el usuario toca la notificación.",
632
+ "send_push_route_notifications": "Notificaciones",
633
+ "send_push_route_home": "Inicio",
634
+ "send_push_route_settings": "Configuración",
635
+ "send_push_route_premium": "Premium",
636
+ "send_push_route_reminder": "Recordatorios",
637
+ "send_push_route_feedback": "Comentarios",
638
+ "send_push_preview_label": "Vista previa",
639
+ "send_push_preview_now": "ahora",
640
+ "send_push_preview_title_placeholder": "Título de la notificación",
641
+ "send_push_preview_body_placeholder": "El cuerpo del mensaje aparece aquí",
642
+ "device_preview_title": "Device Preview (solo web)",
643
+ "send_push_section_recipients": "Destinatarios",
644
+ "send_push_section_content": "Contenido",
645
+ "send_push_section_advanced": "Avanzado",
646
+ "send_push_audience_all": "Todos",
647
+ "send_push_audience_specific": "Específicos",
648
+ "send_push_audience_all_hint": "La notificación se enviará a todos los usuarios suscritos."
740
649
  }
650
+ },
651
+ "rate_banner": {
652
+ "title": "¿Te gusta nuestra app?",
653
+ "text": "¿Tienes un minuto para dejarnos una reseña en la tienda?",
654
+ "rate_button": "¡Sí, seguro!",
655
+ "later_button": "Más tarde..."
656
+ },
657
+ "notifications": {
658
+ "title": "Notificaciones",
659
+ "empty_title": "No tienes notificaciones",
660
+ "empty_subtitle": "Mantente atento a las actualizaciones",
661
+ "error_fetching": "Error al obtener notificaciones",
662
+ "push_title": "Notificaciones push",
663
+ "push_subtitle_enabled": "Estás recibiendo alertas",
664
+ "push_subtitle_disabled": "Toca para activar en Configuración",
665
+ "push_subtitle_waiting": "Activa para no perderte nada",
666
+ "mark_all_read": "Marcar leídas",
667
+ "see_all": "Ver todas",
668
+ "group_today": "Hoy",
669
+ "group_yesterday": "Ayer",
670
+ "group_older": "Más antiguas",
671
+ "empty_cta": "Activar notificaciones",
672
+ "empty_cta_open_settings": "Abrir ajustes",
673
+ "delete_all": "Eliminar todo",
674
+ "options": "Opciones",
675
+ "delete_all_confirm_title": "¿Eliminar todas las notificaciones?",
676
+ "delete_all_confirm_message": "Esto eliminará todas las notificaciones de tu cuenta. Esta acción no se puede deshacer.",
677
+ "delete_action": "Sí, eliminar",
678
+ "cancel_action": "Cancelar",
679
+ "deleted_one": "Notificación eliminada",
680
+ "deleted_all": "Todas las notificaciones eliminadas"
681
+ },
682
+ "bottom_router": {
683
+ "fake_page_text": "Esta es una página de prueba"
684
+ },
685
+ "ai_chat": {
686
+ "title": "Asistente IA",
687
+ "empty_state": "Inicia una conversación con tu asistente.",
688
+ "hint": "Pregunta algo...",
689
+ "error_not_configured": "El asistente aún no está disponible. Inténtalo más tarde.",
690
+ "error_no_reply": "No pudimos obtener una respuesta. Inténtalo de nuevo.",
691
+ "error_network": "No se pudo conectar al asistente de IA.",
692
+ "new_conversation": "Nueva conversación",
693
+ "conversations_empty": "Aún no hay conversaciones",
694
+ "no_conversation_selected": "Elige una conversación o empieza una nueva.",
695
+ "delete_title": "¿Eliminar conversación?",
696
+ "delete_message": "Esta conversación y todos sus mensajes se eliminarán de forma permanente.",
697
+ "delete_cancel": "Cancelar",
698
+ "delete_confirm": "Sí, eliminar"
699
+ },
700
+ "phone_auth": {
701
+ "title_input": "Autenticación por Teléfono",
702
+ "subtitle_input": "Ingresa tu número de teléfono",
703
+ "description_input": "Te enviaremos un código de verificación para confirmar tu identidad",
704
+ "phone_label": "Número de teléfono",
705
+ "phone_hint": "+34 600 123 456",
706
+ "error_empty": "Por favor, ingresa un número de teléfono",
707
+ "error_invalid": "Por favor, ingresa un número válido",
708
+ "continue_btn": "Continuar",
709
+ "title_verify": "Verificar Código",
710
+ "verification_code": "Código de Verificación",
711
+ "code_sent": "Hemos enviado un código de verificación a $phone",
712
+ "signin_success_title": "Listo",
713
+ "signin_success_text": "Has iniciado sesión con tu número de teléfono",
714
+ "verify_code": "Verificar Código",
715
+ "resend_code": "Reenviar Código",
716
+ "enter_all_digits": "Por favor, ingresa los 6 dígitos"
717
+ },
718
+ "recover_password_result": {
719
+ "title": "Email enviado",
720
+ "description": "Te hemos enviado un email con un enlace para restablecer tu contraseña",
721
+ "back_to_signin": "Volver a Iniciar Sesión",
722
+ "note": "Nota: Si no recibes un email, por favor revisa tu carpeta de spam"
723
+ },
724
+ "page_not_found": {
725
+ "title": "404 - Página no encontrada"
726
+ },
727
+ "devInspector": {
728
+ "copied": "$widget copiado al portapapeles",
729
+ "activate": "Activar inspector de widgets",
730
+ "deactivate": "Desactivar inspector de widgets",
731
+ "copyForAi": "Copiar para IA",
732
+ "selectWidgetFirst": "Selecciona un widget en pantalla primero y luego toca Copiar.",
733
+ "inspectorHint": "Toca la interfaz para seleccionar (borde morado). Luego copia para tu prompt de IA.",
734
+ "statusActive": "Inspeccionando",
735
+ "fieldSize": "Tamaño",
736
+ "fieldColor": "Color",
737
+ "copyJson": "Copiar JSON"
738
+ },
739
+ "webDevicePreview": {
740
+ "frame": "Frame",
741
+ "darkBackground": "Fondo oscuro",
742
+ "darkTheme": "Tema oscuro",
743
+ "landscape": "Horizontal",
744
+ "textScale": "Escala de texto",
745
+ "screenshot": "Captura de pantalla",
746
+ "imageCopied": "Imagen copiada — pégala en el chat",
747
+ "imageDownloaded": "Imagen descargada"
748
+ },
749
+ "biometric_prompt": {
750
+ "title_ios_face": "¿Activar Face ID en el bloqueo?",
751
+ "title_ios_touch": "¿Activar Touch ID en el bloqueo?",
752
+ "title_ios_mixed": "¿Activar Face ID/Touch ID en el bloqueo?",
753
+ "title_android_face": "¿Activar bloqueo con reconocimiento facial?",
754
+ "title_android_fingerprint": "¿Activar bloqueo con huella digital?",
755
+ "title_android_mixed": "¿Proteger la app con tu teléfono?",
756
+ "message_ios_face": "Al abrir confirmarás con Face ID—sigues con sesión iniciada.",
757
+ "message_ios_touch": "Al abrir confirmarás con Touch ID—sigues con sesión iniciada.",
758
+ "message_ios_mixed": "Al abrir confirmarás con Face ID o Touch ID—sigues con sesión iniciada.",
759
+ "message_android_face": "Al abrir verificarás con reconocimiento facial—sigues con sesión iniciada.",
760
+ "message_android_fingerprint": "Al abrir verificarás con huella digital—sigues con sesión iniciada.",
761
+ "title_android_face_and_fingerprint": "¿Activar bloqueo con huella o rostro?",
762
+ "message_android_face_and_fingerprint": "Puedes usar cualquiera de los dos—sigues dentro.",
763
+ "message_android_mixed": "Una confirmación rápida al abrir—sigues con la sesión.",
764
+ "not_now": "Ahora no",
765
+ "enable": "Activar"
766
+ },
767
+ "home_widget": {
768
+ "greeting_morning": "Buenos días",
769
+ "greeting_afternoon": "Buenas tardes",
770
+ "greeting_evening": "Buenas noches",
771
+ "title_with_name": "¡Hola, $name!",
772
+ "title_default": "¡Hola!",
773
+ "title_logged_out": "Te esperamos de vuelta",
774
+ "plan_free": "Plan gratuito",
775
+ "plan_pro": "PRO",
776
+ "quote": "Tu tiempo es limitado.\nNo vivas la vida de otra persona.\nTen el coraje de seguir tu intuición.\nTodo lo demás es secundario.",
777
+ "quote_author": "Steve Jobs"
778
+ }
741
779
  }
742
-