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": "Fechar",
4
- "copied": "Copiado",
5
- "saved": "Salvo",
6
- "error": "Erro",
7
- "unavailable": "Indisponível",
8
- "native_only_title": "Apenas no app nativo"
2
+ "common": {
3
+ "close": "Fechar",
4
+ "copied": "Copiado",
5
+ "saved": "Salvo",
6
+ "error": "Erro",
7
+ "unavailable": "Indisponível",
8
+ "native_only_title": "Apenas no app nativo"
9
+ },
10
+ "admin_console": {
11
+ "tabs": {
12
+ "overview": "Visão geral",
13
+ "users": "Usuários",
14
+ "requests": "Solicitações",
15
+ "tools": "Ferramentas",
16
+ "debug": "Depuração"
9
17
  },
10
- "admin_console": {
11
- "tabs": {
12
- "overview": "Visão geral",
13
- "users": "Usuários",
14
- "requests": "Solicitações",
15
- "tools": "Ferramentas",
16
- "debug": "Depuração"
17
- },
18
- "back_to_app": "Voltar ao app",
19
- "overview": {
20
- "section": "Projeto",
21
- "backend": "Backend",
22
- "account": "Conta",
23
- "guest": "Visitante",
24
- "user_id": "ID do usuário",
25
- "build": "Versão",
26
- "session_title": "Sessão atual",
27
- "requests_metric": "Solicitações de recurso",
28
- "users_hint": "Abra a aba Usuários para gerenciar todas as contas.",
29
- "debug_note": "Console de debug — visível só em builds de desenvolvimento."
30
- },
31
- "users": {
32
- "title": "Usuários",
33
- "search_hint": "Buscar por nome ou e-mail",
34
- "col_user": "Usuário",
35
- "col_status": "Status",
36
- "col_plan": "Plano",
37
- "col_joined": "Cadastro",
38
- "status_active": "Ativo",
39
- "status_inactive": "Inativo",
40
- "plan_subscriber": "Assinante",
41
- "plan_free": "Grátis",
42
- "empty": "Nenhum usuário encontrado",
43
- "error": "Não foi possível carregar os usuários. Confirme que você é admin.",
44
- "page": "Página $page de $total",
45
- "prev": "Anterior",
46
- "next": "Próxima",
47
- "anonymous": "Anônimo",
48
- "filter_all": "Todos os usuários",
49
- "filter_subscribers": "Assinantes",
50
- "loading": "Carregando usuários…",
51
- "results": "Mostrando $from a $to de $total",
52
- "truncated": "Mostrando os $count mais recentes. A busca cobre só os carregados.",
53
- "empty_search": "Nenhum usuário corresponde à busca",
54
- "empty_search_hint": "Tente outro nome ou e-mail.",
55
- "refresh": "Atualizar",
56
- "retry": "Tentar de novo"
57
- },
58
- "requests": {
59
- "title": "Solicitações de recurso",
60
- "empty": "Ainda não há solicitações",
61
- "votes": "$count votos",
62
- "visible": "Visível",
63
- "hidden": "Oculto",
64
- "edit": "Editar traduções",
65
- "error": "Não foi possível carregar as solicitações",
66
- "saved": "Solicitação atualizada",
67
- "editor_title": "Editar solicitação",
68
- "field_title": "Título",
69
- "field_description": "Descrição",
70
- "lang_en": "Inglês",
71
- "lang_pt": "Português",
72
- "lang_es": "Espanhol",
73
- "visibility": "Visível para os usuários",
74
- "save": "Salvar",
75
- "cancel": "Cancelar"
76
- },
77
- "groups": {
78
- "actions": "Ações",
79
- "features": "Recursos",
80
- "preview": "Preview",
81
- "debug_actions": "Ações de debug",
82
- "identity": "Identidade",
83
- "notification_test": "Teste de notificação"
84
- },
85
- "settings_entry": {
86
- "title": "Admin",
87
- "caption": "Visível só para administradores e em modo de desenvolvimento."
88
- },
89
- "requires_admin": "Você precisa ser admin para ver isto."
18
+ "back_to_app": "Voltar ao app",
19
+ "overview": {
20
+ "section": "Projeto",
21
+ "summary": "Resumo",
22
+ "backend": "Backend",
23
+ "account": "Conta",
24
+ "guest": "Visitante",
25
+ "user_id": "ID do usuário",
26
+ "build": "Versão",
27
+ "session_title": "Sessão atual",
28
+ "requests_metric": "Solicitações de recurso",
29
+ "total_users": "Total de usuários",
30
+ "subscribers": "Assinantes",
31
+ "new_7d": "Novos (7 dias)",
32
+ "signups_title": "Novos cadastros",
33
+ "signups_subtitle": "Últimos 14 dias",
34
+ "signups_total": "$count em 14 dias",
35
+ "signups_empty": "Nenhum cadastro neste período.",
36
+ "plan_split_title": "Distribuição de planos",
37
+ "free": "Grátis",
38
+ "subscriber": "Assinante",
39
+ "conversion": "$percent assinam",
40
+ "loaded_note": "Com base nos $count usuários mais recentes.",
41
+ "users_hint": "Abra a aba Usuários para gerenciar todas as contas.",
42
+ "debug_note": "Console de debug — visível só em builds de desenvolvimento."
90
43
  },
91
- "home": {
92
- "title": "Exemplo Kasy",
93
- "welcome": "Bem-vindo ao demo do Kasy",
94
- "cards": {
95
- "paywall_title": "Paywall",
96
- "paywall_description": "Ver a página de assinatura",
97
- "notification_title": "Teste de notificação local",
98
- "notification_description": "Dispara um alerta só neste aparelho. Não entra na aba Notificações (push).",
99
- "feedback_title": "Feedback",
100
- "feedback_description": "Página de solicitação de recursos ou votação",
101
- "signup_title": "Cadastro",
102
- "signup_description": "Usuário anônimo pode se cadastrar com e-mail ou rede social",
103
- "assistant_title": "Assistente IA",
104
- "assistant_description": "Conversar com o assistente de IA"
105
- },
106
- "features_page": {
107
- "title": "Recursos do kit",
108
- "assistant_title": "Converse com a IA",
109
- "assistant_description": "Chat pronto para perguntas, ideias e suporte dentro do app",
110
- "feedback_title": "Vote e sugira",
111
- "feedback_description": "Participe do roadmap: vote em ideias ou envie a sua",
112
- "notification_title": "Testar notificação",
113
- "notification_description": "Dispara um alerta neste aparelho (não é push)",
114
- "notification_demo_title": "Alerta de teste",
115
- "notification_demo_body": "Notificação local do demo do kit",
116
- "send_push_title": "Enviar notificação push",
117
- "send_push_description": "Dispare uma push para usuários específicos ou para todos",
118
- "paywall_title": "Planos e assinatura",
119
- "paywall_description": "Telas de paywall, trial e fluxo RevenueCat"
120
- },
121
- "dashboard": {
122
- "brand": "kasy",
123
- "components_title": "Componentes",
124
- "components_subtitle": "Explore tokens de design e blocos de interface",
125
- "features_title": "Features",
126
- "features_subtitle": "IA, feedback, alertas e assinatura",
127
- "count_total": "$count no total"
128
- },
129
- "components_preview": {
130
- "nav_title": "Componentes",
131
- "pro_badge": "PRO"
132
- }
44
+ "users": {
45
+ "title": "Usuários",
46
+ "search_hint": "Buscar por nome ou e-mail",
47
+ "col_user": "Usuário",
48
+ "col_status": "Status",
49
+ "col_plan": "Plano",
50
+ "col_joined": "Cadastro",
51
+ "status_active": "Ativo",
52
+ "status_inactive": "Inativo",
53
+ "plan_subscriber": "Assinante",
54
+ "plan_free": "Grátis",
55
+ "empty": "Nenhum usuário encontrado",
56
+ "error": "Não foi possível carregar os usuários. Confirme que você é admin.",
57
+ "page": "Página $page de $total",
58
+ "prev": "Anterior",
59
+ "next": "Próxima",
60
+ "anonymous": "Anônimo",
61
+ "filter_all": "Todos os usuários",
62
+ "filter_subscribers": "Assinantes",
63
+ "loading": "Carregando usuários…",
64
+ "results": "Mostrando $from a $to de $total",
65
+ "truncated": "Mostrando os $count mais recentes. A busca cobre só os carregados.",
66
+ "empty_search": "Nenhum usuário corresponde à busca",
67
+ "empty_search_hint": "Tente outro nome ou e-mail.",
68
+ "refresh": "Atualizar",
69
+ "retry": "Tentar de novo"
133
70
  },
134
- "auth": {
135
- "signin": {
136
- "title": "Bem-vindo de volta",
137
- "subtitle": "Entre para continuar sua experiência",
138
- "email_hint": "bruce@wayne.com",
139
- "email_label": "E-mail",
140
- "password_hint": "Senha",
141
- "password_label": "Senha",
142
- "forgot_password": "Esqueceu sua senha?",
143
- "submit": "Continuar com e-mail",
144
- "create_account": "Criar minha conta",
145
- "no_account": "Não tem uma conta?",
146
- "signup_link": "Cadastre-se",
147
- "continue_without": "Continuar sem conta",
148
- "or_sign_in_with": "ou",
149
- "google": "Gmail",
150
- "apple": "Apple",
151
- "facebook": "Facebook",
152
- "error_title": "Erro",
153
- "error_text": "E-mail, senha incorretos ou este e-mail não está cadastrado",
154
- "email_invalid": "E-mail inválido",
155
- "password_required": "Informe uma senha",
156
- "password_too_short": "Sua senha deve ter pelo menos 5 caracteres",
157
- "social_error": "Não foi possível entrar com $provider",
158
- "email_already_registered": "Esse e-mail já tem conta com outro método de login. Entre com o método que você usou antes."
159
- },
160
- "signup": {
161
- "title": "Cadastre-se agora",
162
- "subtitle": "Crie sua conta para começar",
163
- "submit": "Criar minha conta",
164
- "have_account": "Já tem uma conta?",
165
- "signin_link": "Entrar",
166
- "already_have_account": "Já tenho uma conta",
167
- "error_title": "Erro",
168
- "error_text": "Este e-mail já existe ou é inválido"
169
- },
170
- "recover": {
171
- "title": "Recuperar senha",
172
- "subtitle": "Digite seu e-mail e enviaremos um link para criar uma nova senha.",
173
- "email_label": "E-mail",
174
- "submit": "Recuperar senha",
175
- "remember": "Lembrou sua senha?",
176
- "signin_link": "Entrar",
177
- "error_title": "Erro",
178
- "error_text": "Informe um e-mail válido"
179
- }
71
+ "requests": {
72
+ "title": "Solicitações de recurso",
73
+ "empty": "Ainda não há solicitações",
74
+ "votes": "$count votos",
75
+ "visible": "Visível",
76
+ "hidden": "Oculto",
77
+ "edit": "Editar traduções",
78
+ "error": "Não foi possível carregar as solicitações",
79
+ "saved": "Solicitação atualizada",
80
+ "editor_title": "Editar solicitação",
81
+ "field_title": "Título",
82
+ "field_description": "Descrição",
83
+ "lang_en": "Inglês",
84
+ "lang_pt": "Português",
85
+ "lang_es": "Espanhol",
86
+ "visibility": "Visível para os usuários",
87
+ "save": "Salvar",
88
+ "cancel": "Cancelar"
180
89
  },
181
- "rate_popup": {
182
- "title": "Você teria 15s para nos avaliar?",
183
- "description": "É rápido e muito útil! Muito obrigado!",
184
- "cancel_button": "Talvez mais tarde",
185
- "rate_button": "Sim, com prazer!"
90
+ "groups": {
91
+ "actions": "Ações",
92
+ "features": "Recursos",
93
+ "preview": "Preview",
94
+ "debug_actions": "Ações de debug",
95
+ "identity": "Identidade",
96
+ "notification_test": "Teste de notificação"
186
97
  },
187
- "premium": {
188
- "title_1": "Desbloqueie o acesso completo",
189
- "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
190
- "feature_1": "Recurso 1 lorem ipsum",
191
- "feature_2": "Recurso 2 mop issum",
192
- "feature_3": "Recurso 3 lorem",
193
- "duration_weekly": "Semana",
194
- "duration_annual": "Ano",
195
- "duration_monthly": "Mês",
196
- "duration_monthly_description": "Cancele quando quiser",
197
- "duration_lifetime": "Vitalício",
198
- "duration_lifetime_description": "Pagamento único",
199
- "restore_action": "Restaurar",
200
- "coupon_title": "Tem um cupom?",
201
- "payment_cancel_reassurance": "Cancelamento fácil com 1 clique, sempre",
202
- "payment_cancel_reassurance_free_trial": "Sem pagamento agora, cancele quando quiser",
203
- "payment_action": "Iniciar teste gratuito",
204
- "payment_action_trial": "7 dias grátis, depois $money",
205
- "try_free_btn_action": "Experimente grátis por $days dias",
206
- "duration_recuring_label_annual": "Anual",
207
- "duration_recuring_label_monthly": "Mensal",
208
- "duration_recuring_label_weekly": "Semanal",
209
- "action_button": "Continuar",
210
- "terms": "Termos",
211
- "privacy": "Privacidade",
212
- "error_loading": "Erro ao carregar as ofertas",
213
- "no_products_title": "As opções de assinatura ainda não estão disponíveis",
214
- "no_products_description": "Tente novamente em alguns instantes. Se continuar acontecendo, os produtos da loja ainda podem estar finalizando a configuração.",
215
- "restore_success_title": "Assinatura restaurada",
216
- "restore_success_text": "Obrigado pela sua confiança",
217
- "purchase_success_title": "Assinatura realizada com sucesso",
218
- "purchase_success_text": "Obrigado pela sua confiança",
219
- "error_title": "Erro",
220
- "error_text": "Ocorreu um erro. Tente novamente",
221
- "web_checkout_timeout_title": "Pagamento não confirmado",
222
- "web_checkout_timeout_text": "Não recebemos a confirmação do pagamento. Se você já pagou, toque em Restaurar.",
223
- "restore_none_title": "Nenhuma assinatura encontrada",
224
- "restore_none_text": "Não encontramos uma assinatura ativa para restaurar.",
225
- "comparison": {
226
- "title": "Comparação de planos Premium",
227
- "features_label": "Recursos",
228
- "free_version": "Grátis",
229
- "premium_version": "Premium",
230
- "no_ads": "Sem anúncios",
231
- "premium_themes": "Temas Premium",
232
- "advanced_customization": "Personalização avançada",
233
- "priority_support": "Suporte prioritário",
234
- "home_widget": "Widgets na tela inicial",
235
- "talk_with_assistant": "Assistente IA"
236
- }
98
+ "paywalls": {
99
+ "subtitle": "Toque num paywall para visualizar. Copie o código dele para dizer ao assistente qual usar.",
100
+ "copy_code": "Copiar código",
101
+ "code_copied": "Código copiado para a área de transferência",
102
+ "with_switch_title": "Com teste grátis",
103
+ "with_switch_desc": "Planos com um botão para ligar ou desligar o período de teste grátis.",
104
+ "basic_title": "Lista de planos",
105
+ "basic_desc": "Lista vertical de planos para o usuário escolher.",
106
+ "basic_row_title": "Planos lado a lado",
107
+ "basic_row_desc": "Planos exibidos lado a lado para comparar rápido.",
108
+ "minimal_title": "Minimalista",
109
+ "minimal_desc": "Benefícios e um único botão. Ideal para apps de um plano só."
237
110
  },
238
- "activePremium": {
239
- "title": "Você é um usuário premium",
240
- "description": "Aproveite todos os recursos",
241
- "unsubscribe_button": "Cancelar assinatura",
242
- "early_bird_description": "Você usou um cupom que lhe deu acesso gratuito aos recursos premium sem assinatura. Aproveite!",
243
- "unsubscribe_feedback_title": "Ajude-nos a melhorar",
244
- "unsubscribe_feedback_description": "Lamentamos vê-lo partir. Poderia nos dizer brevemente por que está cancelando?",
245
- "unsubscribe_feedback_hint": "Conte-nos o motivo...",
246
- "unsubscribe_feedback_min_chars": "Mínimo de 6 caracteres necessários",
247
- "unsubscribe_confirm_button": "Prosseguir",
248
- "lifetime_user_description": "Você é um usuário vitalício",
249
- "managed_elsewhere_title": "Assinatura em outra plataforma",
250
- "managed_elsewhere_description": "Esta assinatura foi feita em outra plataforma e não pode ser gerenciada ou cancelada por aqui. Acesse a conta na plataforma onde você fez a compra.",
251
- "restore_button": "Restaurar compras",
252
- "cancel_button": "Fechar",
253
- "billing_title": "Cobrança",
254
- "plan_label": "Plano da conta",
255
- "plan_fallback": "Premium",
256
- "manage_subscription": "Gerenciar assinatura",
257
- "restore_purchases": "Restaurar compras",
258
- "renews_on": "Renova em $date",
259
- "expires_on": "Expira em $date",
260
- "trial_label": "Avaliação gratuita",
261
- "trial_until": "Avaliação gratuita até $date",
262
- "charges_from": "$price a partir de $date"
111
+ "settings_entry": {
112
+ "title": "Admin",
113
+ "caption": "Visível para administradores e em modo de desenvolvimento."
263
114
  },
264
- "paywallWithSwitch": {
265
- "withTrial": {
266
- "title": "Experimente grátis por $days dias",
267
- "btnAction": "Experimente gratuitamente",
268
- "details": "$days dias grátis, depois $price",
269
- "trial_switch_title": "Teste gratuito de $days dias"
270
- },
271
- "noTrial": {
272
- "title": "Aproveite sua experiência Premium",
273
- "btnAction": "Continuar",
274
- "trial_switch_title": "Ainda não tem certeza?",
275
- "trial_switch_subtitle": "Ativar teste gratuito"
276
- },
277
- "features": [
278
- "Lorem recurso 1",
279
- "Lorem recurso 2",
280
- "Lorem recurso 3",
281
- "Cancele quando quiser"
282
- ]
115
+ "requires_admin": "Você precisa ser admin para ver isto."
116
+ },
117
+ "home": {
118
+ "title": "Exemplo Kasy",
119
+ "welcome": "Bem-vindo ao demo do Kasy",
120
+ "cards": {
121
+ "paywall_title": "Paywall",
122
+ "paywall_description": "Ver a página de assinatura",
123
+ "notification_title": "Teste de notificação local",
124
+ "notification_description": "Dispara um alerta só neste aparelho. Não entra na aba Notificações (push).",
125
+ "feedback_title": "Feedback",
126
+ "feedback_description": "Página de solicitação de recursos ou votação",
127
+ "signup_title": "Cadastro",
128
+ "signup_description": "Usuário anônimo pode se cadastrar com e-mail ou rede social",
129
+ "assistant_title": "Assistente IA",
130
+ "assistant_description": "Conversar com o assistente de IA"
283
131
  },
284
- "onboarding": {
285
- "feature_1": {
286
- "title": "Fature desde o dia um",
287
- "description": "Paywalls, assinaturas e período de teste prontos para produção. Sem montar backend de cobrança.",
288
- "action": "Continuar",
289
- "skip": "Pular",
290
- "login": " tem conta? Entrar"
291
- },
292
- "feature_2": {
293
- "title": "Login pronto para produção",
294
- "description": "E-mail, login social e recuperação de senha. Seguro e pronto para publicar.",
295
- "action": "Continuar"
296
- },
297
- "feature_3": {
298
- "title": "Traga seus usuários de volta",
299
- "description": "Push, avisos no app e permissões já integrados para engajar e reter.",
300
- "action": "Continuar"
301
- },
302
- "mockups": {
303
- "paywall": {
304
- "title": "Premium",
305
- "annual": "Anual",
306
- "monthly": "Mensal",
307
- "save_badge": "-40%",
308
- "price_year": "R$ 39,99 / ano",
309
- "price_month": "R$ 4,99 / mês",
310
- "cta": "Iniciar teste grátis"
311
- },
312
- "auth": {
313
- "welcome": "Bem-vindo de volta",
314
- "email_hint": "voce@email.com",
315
- "sign_in": "Entrar",
316
- "divider": "ou"
317
- },
318
- "notification": {
319
- "title": "Nova mensagem",
320
- "time": "agora"
321
- },
322
- "push_permission": {
323
- "title": "Ativar notificações?",
324
- "allow": "Permitir",
325
- "deny": "Agora não"
326
- },
327
- "tracking_permission": {
328
- "title": "Permitir rastreamento?",
329
- "allow": "Permitir",
330
- "deny": "Pedir para não rastrear"
331
- }
332
- },
333
- "ageQuestion": {
334
- "title": "Qual a sua idade?",
335
- "description": "Isso nos ajuda a personalizar a sua experiência.",
336
- "options(map)": {
337
- "age18_30": "18 a 30 anos",
338
- "age31_40": "31 a 40 anos",
339
- "age41_50": "41 a 50 anos",
340
- "age51_60": "Mais de 50 anos",
341
- "none": "Prefiro não dizer"
342
- },
343
- "action": "Continuar"
344
- },
345
- "genderQuestion": {
346
- "title": "Como você se identifica?",
347
- "description": "Escolha o que combina com você. Pode pular se preferir.",
348
- "options(map)": {
349
- "male": "Masculino",
350
- "female": "Feminino",
351
- "none": "Prefiro não dizer"
352
- },
353
- "action": "Continuar"
354
- },
355
- "notifications": {
356
- "title": "Fique por dentro",
357
- "description": "Só falamos com você quando realmente importa. Nada de spam.",
358
- "continue_button": "Ativar notificações",
359
- "skip_button": "Agora não"
360
- },
361
- "att": {
362
- "title": "Você no controle",
363
- "description": "Permita o rastreamento para anúncios mais relevantes. A escolha é sempre sua.",
364
- "continue_button": "Continuar"
365
- },
366
- "loading": {
367
- "title": "Preparando tudo para você",
368
- "subtitle": "Leva só um instante"
369
- }
132
+ "features_page": {
133
+ "title": "Recursos do kit",
134
+ "assistant_title": "Converse com a IA",
135
+ "assistant_description": "Chat pronto para perguntas, ideias e suporte dentro do app",
136
+ "feedback_title": "Vote e sugira",
137
+ "feedback_description": "Participe do roadmap: vote em ideias ou envie a sua",
138
+ "notification_title": "Testar notificação",
139
+ "notification_description": "Dispara um alerta só neste aparelho (não é push)",
140
+ "notification_demo_title": "Alerta de teste",
141
+ "notification_demo_body": "Notificação local do demo do kit",
142
+ "send_push_title": "Enviar notificação push",
143
+ "send_push_description": "Dispare uma push para usuários específicos ou para todos",
144
+ "paywall_title": "Planos e assinatura",
145
+ "paywall_description": "Telas de paywall, trial e fluxo RevenueCat"
370
146
  },
371
- "feature_requests": {
372
- "title": "Ideias",
373
- "description": "Vote nas ideias ou envie a sua. Cada voz define o que construímos.",
374
- "community_ideas": "Ideias da comunidade",
375
- "no_requests": "Nenhuma ideia ainda. Seja o primeiro a sugerir.",
376
- "vote_success": {
377
- "title": "Voto registrado",
378
- "description": "Obrigado por ajudar a definir as prioridades"
379
- },
380
- "vote_error": {
381
- "title": "Já votado",
382
- "description": "Você já votou nesta ideia"
383
- },
384
- "add_feature": {
385
- "chip_label": "Add",
386
- "title": "Enviar uma ideia",
387
- "description": "Conte o que você gostaria de ver no app.",
388
- "save_button": "Enviar",
389
- "title_label": "Título",
390
- "title_hint": "Um título curto e descritivo",
391
- "description_label": "Descrição",
392
- "description_hint": "Descreva o recurso ou melhoria em detalhes...",
393
- "error_title": "Erro",
394
- "error_required": "Título e descrição são obrigatórios",
395
- "error_sending": "Algo deu errado. Tente novamente.",
396
- "error_too_short": "Descrição muito curta. Adicione mais detalhes",
397
- "toast_success": {
398
- "title": "Ideia enviada",
399
- "description": "Vamos analisar e te dar um retorno"
400
- }
401
- }
147
+ "dashboard": {
148
+ "brand": "kasy",
149
+ "components_title": "Componentes",
150
+ "components_subtitle": "Explore tokens de design e blocos de interface",
151
+ "features_title": "Features",
152
+ "features_subtitle": "IA, feedback, alertas e assinatura",
153
+ "count_total": "$count no total",
154
+ "search_hint": "Buscar componentes",
155
+ "search_empty": "Nenhum componente encontrado"
402
156
  },
403
- "update_bottom_sheet": {
404
- "title": "O que há de novo?",
405
- "description": "Fizemos algumas melhorias",
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": "Entendi"
157
+ "components_preview": {
158
+ "nav_title": "Componentes",
159
+ "pro_badge": "PRO"
160
+ }
161
+ },
162
+ "auth": {
163
+ "signin": {
164
+ "title": "Bem-vindo de volta",
165
+ "subtitle": "Entre para continuar sua experiência",
166
+ "email_hint": "bruce@wayne.com",
167
+ "email_label": "E-mail",
168
+ "password_hint": "Senha",
169
+ "password_label": "Senha",
170
+ "forgot_password": "Esqueceu sua senha?",
171
+ "submit": "Continuar com e-mail",
172
+ "create_account": "Criar minha conta",
173
+ "no_account": "Não tem uma conta?",
174
+ "signup_link": "Cadastre-se",
175
+ "continue_without": "Continuar sem conta",
176
+ "or_sign_in_with": "ou",
177
+ "google": "Gmail",
178
+ "apple": "Apple",
179
+ "facebook": "Facebook",
180
+ "error_title": "Erro",
181
+ "error_text": "E-mail, senha incorretos ou este e-mail não está cadastrado",
182
+ "email_invalid": "E-mail inválido",
183
+ "password_required": "Informe uma senha",
184
+ "password_too_short": "Sua senha deve ter pelo menos 5 caracteres",
185
+ "social_error": "Não foi possível entrar com $provider",
186
+ "email_already_registered": "Esse e-mail já tem conta com outro método de login. Entre com o método que você usou antes."
412
187
  },
413
- "update_available": {
414
- "title": "Atualização disponível",
415
- "description": " uma versão mais nova do app. Atualize para ter as últimas melhorias e correções.",
416
- "forced_title": "Atualização necessária",
417
- "forced_description": "Esta versão não é mais suportada. Atualize para continuar usando o app.",
418
- "update_button": "Atualizar agora",
419
- "later_button": "Agora não"
188
+ "signup": {
189
+ "title": "Cadastre-se agora",
190
+ "subtitle": "Crie sua conta para começar",
191
+ "submit": "Criar minha conta",
192
+ "have_account": " tem uma conta?",
193
+ "signin_link": "Entrar",
194
+ "already_have_account": " tenho uma conta",
195
+ "error_title": "Erro",
196
+ "error_text": "Este e-mail já existe ou é inválido"
420
197
  },
421
- "request_notification_permission": {
422
- "title": "Ativar notificações?",
423
- "description": "Receba atualizações em tempo real e fique sempre por dentro do que importa.",
424
- "continue_button": "Ativar",
425
- "skip_button": "Agora não"
198
+ "recover": {
199
+ "title": "Recuperar senha",
200
+ "subtitle": "Digite seu e-mail e enviaremos um link para criar uma nova senha.",
201
+ "email_label": "E-mail",
202
+ "submit": "Recuperar senha",
203
+ "remember": "Lembrou sua senha?",
204
+ "signin_link": "Entrar",
205
+ "error_title": "Erro",
206
+ "error_text": "Informe um e-mail válido"
207
+ }
208
+ },
209
+ "rate_popup": {
210
+ "title": "Você teria 15s para nos avaliar?",
211
+ "description": "É rápido e muito útil! Muito obrigado!",
212
+ "cancel_button": "Talvez mais tarde",
213
+ "rate_button": "Sim, com prazer!"
214
+ },
215
+ "premium": {
216
+ "title_1": "Desbloqueie o acesso completo",
217
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
218
+ "feature_1": "Recurso 1 lorem ipsum",
219
+ "feature_2": "Recurso 2 mop issum",
220
+ "feature_3": "Recurso 3 lorem",
221
+ "duration_weekly": "Semana",
222
+ "duration_annual": "Ano",
223
+ "duration_monthly": "Mês",
224
+ "duration_monthly_description": "Cancele quando quiser",
225
+ "duration_lifetime": "Vitalício",
226
+ "duration_lifetime_description": "Pagamento único",
227
+ "restore_action": "Restaurar",
228
+ "coupon_title": "Tem um cupom?",
229
+ "payment_cancel_reassurance": "Cancelamento fácil com 1 clique, sempre",
230
+ "payment_cancel_reassurance_free_trial": "Sem pagamento agora, cancele quando quiser",
231
+ "payment_action": "Iniciar teste gratuito",
232
+ "payment_action_trial": "7 dias grátis, depois $money",
233
+ "try_free_btn_action": "Experimente grátis por $days dias",
234
+ "duration_recuring_label_annual": "Anual",
235
+ "duration_recuring_label_monthly": "Mensal",
236
+ "duration_recuring_label_weekly": "Semanal",
237
+ "action_button": "Continuar",
238
+ "terms": "Termos",
239
+ "privacy": "Privacidade",
240
+ "error_loading": "Erro ao carregar as ofertas",
241
+ "no_products_title": "As opções de assinatura ainda não estão disponíveis",
242
+ "no_products_description": "Tente novamente em alguns instantes. Se continuar acontecendo, os produtos da loja ainda podem estar finalizando a configuração.",
243
+ "restore_success_title": "Assinatura restaurada",
244
+ "restore_success_text": "Obrigado pela sua confiança",
245
+ "purchase_success_title": "Assinatura realizada com sucesso",
246
+ "purchase_success_text": "Obrigado pela sua confiança",
247
+ "error_title": "Erro",
248
+ "error_text": "Ocorreu um erro. Tente novamente",
249
+ "web_checkout_timeout_title": "Pagamento não confirmado",
250
+ "web_checkout_timeout_text": "Não recebemos a confirmação do pagamento. Se você já pagou, toque em Restaurar.",
251
+ "restore_none_title": "Nenhuma assinatura encontrada",
252
+ "restore_none_text": "Não encontramos uma assinatura ativa para restaurar.",
253
+ "comparison": {
254
+ "title": "Comparação de planos Premium",
255
+ "features_label": "Recursos",
256
+ "free_version": "Grátis",
257
+ "premium_version": "Premium",
258
+ "no_ads": "Sem anúncios",
259
+ "premium_themes": "Temas Premium",
260
+ "advanced_customization": "Personalização avançada",
261
+ "priority_support": "Suporte prioritário",
262
+ "home_widget": "Widgets na tela inicial",
263
+ "talk_with_assistant": "Assistente IA"
264
+ }
265
+ },
266
+ "activePremium": {
267
+ "title": "Você é um usuário premium",
268
+ "description": "Aproveite todos os recursos",
269
+ "unsubscribe_button": "Cancelar assinatura",
270
+ "early_bird_description": "Você usou um cupom que lhe deu acesso gratuito aos recursos premium sem assinatura. Aproveite!",
271
+ "unsubscribe_feedback_title": "Ajude-nos a melhorar",
272
+ "unsubscribe_feedback_description": "Lamentamos vê-lo partir. Poderia nos dizer brevemente por que está cancelando?",
273
+ "unsubscribe_feedback_hint": "Conte-nos o motivo...",
274
+ "unsubscribe_feedback_min_chars": "Mínimo de 6 caracteres necessários",
275
+ "unsubscribe_confirm_button": "Prosseguir",
276
+ "lifetime_user_description": "Você é um usuário vitalício",
277
+ "managed_elsewhere_title": "Assinatura em outra plataforma",
278
+ "managed_elsewhere_description": "Esta assinatura foi feita em outra plataforma e não pode ser gerenciada ou cancelada por aqui. Acesse a conta na plataforma onde você fez a compra.",
279
+ "restore_button": "Restaurar compras",
280
+ "cancel_button": "Fechar",
281
+ "billing_title": "Cobrança",
282
+ "plan_label": "Plano da conta",
283
+ "plan_fallback": "Premium",
284
+ "manage_subscription": "Gerenciar assinatura",
285
+ "restore_purchases": "Restaurar compras",
286
+ "renews_on": "Renova em $date",
287
+ "expires_on": "Expira em $date",
288
+ "trial_label": "Avaliação gratuita",
289
+ "trial_until": "Avaliação gratuita até $date",
290
+ "charges_from": "$price a partir de $date"
291
+ },
292
+ "paywallWithSwitch": {
293
+ "withTrial": {
294
+ "title": "Experimente grátis por $days dias",
295
+ "btnAction": "Experimente gratuitamente",
296
+ "details": "$days dias grátis, depois $price",
297
+ "trial_switch_title": "Teste gratuito de $days dias"
426
298
  },
427
- "notification_permission_denied": {
428
- "title": "Permissão necessária",
429
- "description": "Para receber notificações, ative as permissões de notificação nas configurações do dispositivo.",
430
- "allow_button": "Permitir notificações",
431
- "open_settings_button": "Abrir configurações",
432
- "cancel_button": "Cancelar"
299
+ "noTrial": {
300
+ "title": "Aproveite sua experiência Premium",
301
+ "btnAction": "Continuar",
302
+ "trial_switch_title": "Ainda não tem certeza?",
303
+ "trial_switch_subtitle": "Ativar teste gratuito"
433
304
  },
434
- "review_popup": {
435
- "title": "Sua opinião importa",
436
- "description": "Se o app tem te ajudado, uma avaliação rápida faz toda a diferença. Prefere sugerir melhorias? A gente quer ouvir.",
437
- "cancel_button": "Sugerir melhorias",
438
- "rate_button": "Escrever uma avaliação"
305
+ "features": [
306
+ "Lorem recurso 1",
307
+ "Lorem recurso 2",
308
+ "Lorem recurso 3",
309
+ "Cancele quando quiser"
310
+ ]
311
+ },
312
+ "onboarding": {
313
+ "feature_1": {
314
+ "title": "Fature desde o dia um",
315
+ "description": "Paywalls, assinaturas e período de teste prontos para produção. Sem montar backend de cobrança.",
316
+ "action": "Continuar",
317
+ "skip": "Pular",
318
+ "login": "Já tem conta? Entrar"
439
319
  },
440
- "navigation": {
441
- "home": "Início",
442
- "support": "Suporte",
443
- "notifications": "Notificações",
444
- "settings": "Config.",
445
- "logout": "Sair",
446
- "skip_to_content": "Pular para o conteúdo"
320
+ "feature_2": {
321
+ "title": "Login pronto para produção",
322
+ "description": "E-mail, login social e recuperação de senha. Seguro e pronto para publicar.",
323
+ "action": "Continuar"
447
324
  },
448
- "reminderPage": {
449
- "title": "Lembretes",
450
- "toggleLabel": "Ativar lembrete",
451
- "typeLabel": "Repetir",
452
- "daily": "Todo dia",
453
- "weekly": "Toda semana",
454
- "specificDate": "Data específica",
455
- "timeLabel": "Horário",
456
- "dayLabel": "Dia da semana",
457
- "dateLabel": "Data",
458
- "selectDate": "Selecionar data"
325
+ "feature_3": {
326
+ "title": "Traga seus usuários de volta",
327
+ "description": "Push, avisos no app e permissões já integrados para engajar e reter.",
328
+ "action": "Continuar"
459
329
  },
460
- "dailyReminder": {
461
- "title": "Lembrete",
462
- "body": "Está na hora de beber água."
330
+ "mockups": {
331
+ "paywall": {
332
+ "title": "Premium",
333
+ "annual": "Anual",
334
+ "monthly": "Mensal",
335
+ "save_badge": "-40%",
336
+ "price_year": "R$ 39,99 / ano",
337
+ "price_month": "R$ 4,99 / mês",
338
+ "cta": "Iniciar teste grátis"
339
+ },
340
+ "auth": {
341
+ "welcome": "Bem-vindo de volta",
342
+ "email_hint": "voce@email.com",
343
+ "sign_in": "Entrar",
344
+ "divider": "ou"
345
+ },
346
+ "notification": {
347
+ "title": "Nova mensagem",
348
+ "time": "agora"
349
+ },
350
+ "push_permission": {
351
+ "title": "Ativar notificações?",
352
+ "allow": "Permitir",
353
+ "deny": "Agora não"
354
+ },
355
+ "tracking_permission": {
356
+ "title": "Permitir rastreamento?",
357
+ "allow": "Permitir",
358
+ "deny": "Pedir para não rastrear"
359
+ }
463
360
  },
464
- "settings": {
465
- "title": "Configurações",
466
- "avatar": {
467
- "take_photo": "Tirar foto",
468
- "choose_library": "Biblioteca de fotos",
469
- "remove_photo": "Remover 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": "Escuro",
477
- "haptic_feedback_title": "Feedback háptico",
478
- "hide_chrome_on_scroll_title": "Ocultar barras ao rolar",
479
- "section_preferences_label": "PREFERÊNCIAS",
480
- "section_security_label": "SEGURANÇA",
481
- "section_support_label": "SUPORTE",
482
- "biometric_title": "Bloqueio do app",
483
- "biometric_subtitle_ios": "Exige Face ID ou Touch ID ao abrir com sessão ativa.",
484
- "biometric_subtitle_ios_face": "Exige Face ID ao abrir com sessão ativa.",
485
- "biometric_subtitle_ios_touch": "Exige Touch ID ao abrir com sessão ativa.",
486
- "biometric_subtitle_android": "Pedimos uma confirmação no celular sempre que você abrir com sessão ativa.",
487
- "biometric_subtitle_android_face": "Exige desbloqueio facial ao abrir com sessão ativa.",
488
- "biometric_subtitle_android_fingerprint": "Exige impressão digital ao abrir com sessão ativa.",
489
- "biometric_subtitle_android_face_and_fingerprint": "Exige impressão digital ou desbloqueio facial ao abrir com sessão ativa.",
490
- "biometric_disable_title": "Desligar bloqueio do app?",
491
- "biometric_disable_message": "Sem bloqueio, quem pegar no celular desbloqueado abre o app até você sair da conta.",
492
- "biometric_disable_confirm": "Desligar",
493
- "biometric_disable_cancel": "Cancelar",
494
- "biometric_enable_reason_ios": "Confirme com Face ID ou Touch ID para ativar o bloqueio",
495
- "biometric_enable_reason_ios_face": "Confirme com Face ID para ativar o bloqueio",
496
- "biometric_enable_reason_ios_touch": "Confirme com Touch ID para ativar o bloqueio",
497
- "biometric_enable_reason_android": "Confirme no celular para ativar o bloqueio",
498
- "biometric_enable_reason_android_face": "Confirme com desbloqueio facial para ativar o bloqueio",
499
- "biometric_enable_reason_android_fingerprint": "Confirme com impressão digital para ativar o bloqueio",
500
- "biometric_enable_reason_android_face_and_fingerprint": "Confirme com digital ou rosto para ativar o bloqueio",
501
- "biometric_login_reason_ios": "Desbloqueie com Face ID ou Touch ID",
502
- "biometric_login_reason_ios_face": "Desbloqueie com Face ID",
503
- "biometric_login_reason_ios_touch": "Desbloqueie com Touch ID",
504
- "biometric_login_reason_android": "Confirme sua identidade",
505
- "biometric_login_reason_android_face": "Desbloqueie com desbloqueio facial",
506
- "biometric_login_reason_android_fingerprint": "Desbloqueie com impressão digital",
507
- "biometric_login_reason_android_face_and_fingerprint": "Desbloqueie com digital ou rosto",
508
- "biometric_unavailable_message_ios": "Ative Face ID, Touch ID ou código em Ajustes.",
509
- "biometric_unavailable_message_ios_face": "Ative Face ID ou código do aparelho em Ajustes.",
510
- "biometric_unavailable_message_ios_touch": "Ative Touch ID ou código do aparelho em Ajustes.",
511
- "biometric_unavailable_message_android": "Ative biometria ou um bloqueio de tela nas definições do telefone.",
512
- "biometric_unavailable_message_android_face": "Cadastre rosto ou bloqueio de tela nos ajustes.",
513
- "biometric_unavailable_message_android_fingerprint": "Cadastre impressão digital ou bloqueio de tela nos ajustes.",
514
- "biometric_unavailable_message_android_face_and_fingerprint": "Cadastre impressão digital ou rosto nas definições do telefone.",
515
- "biometric_not_enabled_message": "Bloqueio do app não foi ativado.",
516
- "feedback": "Enviar feedback",
517
- "premium": "Premium",
518
- "billing": "Cobrança",
519
- "privacy": "Política de privacidade",
520
- "support": "Suporte",
521
- "disconnect": "Sim, sair",
522
- "disconnect_confirm_title": "Sair da conta?",
523
- "disconnect_confirm_message": "Tem certeza que deseja sair?",
524
- "disconnect_cancel": "Cancelar",
525
- "logout": "Sair",
526
- "my_account": "Minha conta",
527
- "not_signed_in": "Não conectado",
528
- "register": "Cadastrar",
529
- "name_label": "Nome",
530
- "email_label": "Email",
531
- "connected_with_label": "Conectado com",
532
- "provider_email": "E-mail e senha",
533
- "provider_phone": "Telefone",
534
- "create_password_title": "Criar senha",
535
- "create_password_subtitle": "Defina uma senha para também entrar com e-mail e senha, além do login social.",
536
- "create_password_field": "Nova senha",
537
- "create_password_confirm_label": "Confirmar senha",
538
- "create_password_success": "Senha criada",
539
- "create_password_error": "Não foi possível criar a senha. Tente novamente.",
540
- "create_password_too_short": "A senha deve ter pelo menos 6 caracteres",
541
- "create_password_mismatch": "As senhas não coincidem",
542
- "link_social": "Vincular $provider",
543
- "link_social_success": "$provider vinculado",
544
- "link_social_error": "Não foi possível vincular. Tente novamente.",
545
- "edit_name_title": "Editar nome",
546
- "edit_name_hint": "Seu nome",
547
- "edit_name_save": "Salvar",
548
- "edit_name_cancel": "Cancelar",
549
- "edit_name_success": "Nome atualizado",
550
- "edit_name_error": "Não foi possível atualizar seu nome. Tente novamente.",
551
- "reminders": "Lembretes",
552
- "admin_panel": "Painel Admin",
553
- "admin_debug_section_label": "ADMIN (SÓ EM DEBUG)",
554
- "admin_panel_debug_notice": "Toda esta seção Admin (título, painel e opções) só existe em build de debug. Em release esse bloco não é incluído; quem instala pela loja ou por APK de produção não vê nada disso.",
555
- "delete_account": {
556
- "button": "Quero excluir minha conta",
557
- "title": "Quer excluir sua conta?",
558
- "content": "Atenção: esta ação é permanente e não pode ser desfeita.",
559
- "content_subscriber": "Atenção: esta ação é permanente. Você perde sua assinatura ativa, e criar uma nova conta depois (mesmo com o mesmo e-mail) não recupera ela.",
560
- "cancel": "Cancelar",
561
- "confirm": "Sim, excluir",
562
- "error": "Algo deu errado. Por favor, tente novamente."
563
- },
564
- "admin": {
565
- "update_bottom_sheet": "Pré-visualizar novidades",
566
- "preview_update_available": "Pré-visualizar atualização disponível",
567
- "paywalls": "Paywalls",
568
- "test_onboarding": "Testar onboarding",
569
- "copy_user_id": "Copiar ID do usuário",
570
- "user_id_copied": "ID do usuário copiado para a área de transferência",
571
- "copy_fcm_token": "Copiar FCM Token",
572
- "fcm_token_copied": "FCM Token copiado para a área de transferência",
573
- "fcm_token_unavailable": "Token não disponível (notificações desativadas?)",
574
- "ask_notification": "Pedir permissão de notificação",
575
- "native_only": "Disponível apenas no app nativo (iOS / Android)",
576
- "ask_review": "Pedir avaliação",
577
- "home_widgets_panel": "Painel de Home Widgets",
578
- "home_widgets_title": "Painel de Home Widgets",
579
- "inspector_fab_title": "Inspector de widgets",
580
- "inspector_fab_subtitle_prefix": "Atalho global:",
581
- "update_mywidget_title": "Atualizar Widget MyWidget",
582
- "update_mywidget_desc": "Chamar atualização manual para o widget MyWidget",
583
- "paywalls_title": "Painel Admin de Paywalls",
584
- "send_push_title": "Enviar notificação",
585
- "send_push_to_all": "Enviar para todos",
586
- "send_push_email_hint": "Adicionar e-mail",
587
- "send_push_title_label": "Título",
588
- "send_push_title_hint": "Ex: Nova atualização disponível",
589
- "send_push_body_label": "Mensagem",
590
- "send_push_body_hint": "Escreva o conteúdo da notificação",
591
- "send_push_image_label": "URL da imagem (opcional)",
592
- "send_push_image_hint": "https://...",
593
- "send_push_email_label": "E-mails dos destinatários",
594
- "send_push_success": "Notificação enviada!",
595
- "send_push_user_not_found": "Usuário não encontrado: $email",
596
- "send_push_send_button": "Enviar",
597
- "send_push_required": "Título e mensagem são obrigatórios",
598
- "send_push_no_emails": "Adicione pelo menos um e-mail",
599
- "send_push_route_label": "Rota ao abrir (opcional)",
600
- "send_push_route_hint": "Ex: /premium, /notifications",
601
- "send_push_preview_label": "Prévia",
602
- "send_push_preview_now": "agora",
603
- "send_push_preview_title_placeholder": "Título da notificação",
604
- "send_push_preview_body_placeholder": "O corpo da mensagem aparece aqui",
605
- "device_preview_title": "Device Preview (somente web)",
606
- "send_push_section_recipients": "Destinatários",
607
- "send_push_section_content": "Conteúdo",
608
- "send_push_section_advanced": "Avançado",
609
- "send_push_audience_all": "Todos",
610
- "send_push_audience_specific": "Específicos",
611
- "send_push_audience_all_hint": "A notificação será enviada para todos os usuários inscritos."
612
- }
361
+ "ageQuestion": {
362
+ "title": "Qual a sua idade?",
363
+ "description": "Isso nos ajuda a personalizar a sua experiência.",
364
+ "options(map)": {
365
+ "age18_30": "18 a 30 anos",
366
+ "age31_40": "31 a 40 anos",
367
+ "age41_50": "41 a 50 anos",
368
+ "age51_60": "Mais de 50 anos",
369
+ "none": "Prefiro não dizer"
370
+ },
371
+ "action": "Continuar"
613
372
  },
614
- "rate_banner": {
615
- "title": "Você gostou do nosso app?",
616
- "text": "Você teria um minuto para nos avaliar na loja?",
617
- "rate_button": "Sim, claro!",
618
- "later_button": "Mais tarde..."
373
+ "genderQuestion": {
374
+ "title": "Como você se identifica?",
375
+ "description": "Escolha o que combina com você. Pode pular se preferir.",
376
+ "options(map)": {
377
+ "male": "Masculino",
378
+ "female": "Feminino",
379
+ "none": "Prefiro não dizer"
380
+ },
381
+ "action": "Continuar"
619
382
  },
620
383
  "notifications": {
621
- "title": "Notificações",
622
- "empty_title": "Nenhuma notificação ainda",
623
- "empty_subtitle": "Fique ligado nas atualizações",
624
- "error_fetching": "Erro ao buscar notificações",
625
- "push_title": "Notificações push",
626
- "push_subtitle_enabled": "Você está recebendo alertas",
627
- "push_subtitle_disabled": "Toque para ativar nas configurações",
628
- "push_subtitle_waiting": "Ative para não perder novidades",
629
- "mark_all_read": "Marcar lidas",
630
- "see_all": "Ver todas",
631
- "group_today": "Hoje",
632
- "group_yesterday": "Ontem",
633
- "group_older": "Mais antigas",
634
- "empty_cta": "Ativar notificações",
635
- "empty_cta_open_settings": "Abrir configurações",
636
- "delete_all": "Excluir tudo",
637
- "delete_all_confirm_title": "Excluir todas as notificações?",
638
- "delete_all_confirm_message": "Isso vai remover todas as notificações da sua conta. Essa ação não pode ser desfeita.",
639
- "delete_action": "Sim, excluir",
640
- "cancel_action": "Cancelar",
641
- "deleted_one": "Notificação excluída",
642
- "deleted_all": "Todas as notificações foram excluídas"
384
+ "title": "Fique por dentro",
385
+ "description": " falamos com você quando realmente importa. Nada de spam.",
386
+ "continue_button": "Ativar notificações",
387
+ "skip_button": "Agora não"
643
388
  },
644
- "bottom_router": {
645
- "fake_page_text": "Esta é uma página de exemplo"
389
+ "att": {
390
+ "title": "Você no controle",
391
+ "description": "Permita o rastreamento para anúncios mais relevantes. A escolha é sempre sua.",
392
+ "continue_button": "Continuar"
646
393
  },
647
- "ai_chat": {
648
- "title": "Assistente IA",
649
- "empty_state": "Inicie uma conversa com seu assistente.",
650
- "hint": "Pergunte algo...",
651
- "error_not_configured": "O assistente ainda não está disponível. Tente novamente mais tarde.",
652
- "error_no_reply": "Não conseguimos obter uma resposta. Tente de novo.",
653
- "error_network": "Não foi possível conectar ao assistente de IA.",
654
- "new_conversation": "Nova conversa",
655
- "conversations_empty": "Nenhuma conversa ainda",
656
- "no_conversation_selected": "Escolha uma conversa ou comece uma nova.",
657
- "delete_title": "Excluir conversa?",
658
- "delete_message": "Esta conversa e todas as mensagens serão excluídas permanentemente.",
659
- "delete_cancel": "Cancelar",
660
- "delete_confirm": "Sim, excluir"
661
- },
662
- "phone_auth": {
663
- "title_input": "Autenticação por Telefone",
664
- "subtitle_input": "Digite seu número de telefone",
665
- "description_input": "Enviaremos um código de verificação para confirmar sua identidade",
666
- "phone_label": "Número de telefone",
667
- "phone_hint": "+55 (11) 91234-5678",
668
- "error_empty": "Por favor, digite um número de telefone",
669
- "error_invalid": "Por favor, digite um número válido",
670
- "continue_btn": "Continuar",
671
- "title_verify": "Verificar Código",
672
- "verification_code": "Código de Verificação",
673
- "code_sent": "Enviamos um código de verificação para $phone",
674
- "signin_success_title": "Tudo certo",
675
- "signin_success_text": "Você entrou com seu número de telefone",
676
- "verify_code": "Verificar Código",
677
- "resend_code": "Reenviar Código",
678
- "enter_all_digits": "Por favor, digite todos os 6 números"
679
- },
680
- "recover_password_result": {
681
- "title": "E-mail enviado",
682
- "description": "Enviamos um e-mail com um link para redefinir sua senha",
683
- "back_to_signin": "Voltar para o Login",
684
- "note": "Nota: Se você não receber um e-mail, verifique sua pasta de spam"
685
- },
686
- "page_not_found": {
687
- "title": "404 - Página não encontrada"
394
+ "loading": {
395
+ "title": "Preparando tudo para você",
396
+ "subtitle": "Leva um instante"
397
+ }
398
+ },
399
+ "feature_requests": {
400
+ "title": "Ideias",
401
+ "description": "Vote nas ideias ou envie a sua. Cada voz define o que construímos.",
402
+ "community_ideas": "Ideias da comunidade",
403
+ "no_requests": "Nenhuma ideia ainda. Seja o primeiro a sugerir.",
404
+ "vote_success": {
405
+ "title": "Voto registrado",
406
+ "description": "Obrigado por ajudar a definir as prioridades"
688
407
  },
689
- "devInspector": {
690
- "copied": "$widget copiado para o clipboard",
691
- "activate": "Ativar inspetor de widgets",
692
- "deactivate": "Desativar inspetor de widgets",
693
- "copyForAi": "Copiar para IA",
694
- "selectWidgetFirst": "Selecione um widget na tela primeiro e depois toque em Copiar.",
695
- "inspectorHint": "Toque na interface para selecionar (contorno roxo). Depois copie para usar na IA.",
696
- "statusActive": "Inspecionando",
697
- "fieldSize": "Tamanho",
698
- "fieldColor": "Cor",
699
- "copyJson": "Copiar JSON"
408
+ "vote_error": {
409
+ "title": " votado",
410
+ "description": "Você votou nesta ideia"
700
411
  },
701
- "webDevicePreview": {
702
- "frame": "Frame",
703
- "darkBackground": "Fundo escuro",
704
- "darkTheme": "Tema escuro",
705
- "landscape": "Paisagem",
706
- "textScale": "Escala de texto",
707
- "screenshot": "Screenshot",
708
- "imageCopied": "Imagem copiada — cole no chat",
709
- "imageDownloaded": "Imagem baixada"
412
+ "add_feature": {
413
+ "chip_label": "Add",
414
+ "title": "Enviar uma ideia",
415
+ "description": "Conte o que você gostaria de ver no app.",
416
+ "save_button": "Enviar",
417
+ "title_label": "Título",
418
+ "title_hint": "Um título curto e descritivo",
419
+ "description_label": "Descrição",
420
+ "description_hint": "Descreva o recurso ou melhoria em detalhes...",
421
+ "error_title": "Erro",
422
+ "error_required": "Título e descrição são obrigatórios",
423
+ "error_sending": "Algo deu errado. Tente novamente.",
424
+ "error_too_short": "Descrição muito curta. Adicione mais detalhes",
425
+ "toast_success": {
426
+ "title": "Ideia enviada",
427
+ "description": "Vamos analisar e te dar um retorno"
428
+ }
429
+ }
430
+ },
431
+ "update_bottom_sheet": {
432
+ "title": "O que há de novo?",
433
+ "description": "Fizemos algumas melhorias",
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": "Entendi"
440
+ },
441
+ "update_available": {
442
+ "title": "Atualização disponível",
443
+ "description": "Há uma versão mais nova do app. Atualize para ter as últimas melhorias e correções.",
444
+ "forced_title": "Atualização necessária",
445
+ "forced_description": "Esta versão não é mais suportada. Atualize para continuar usando o app.",
446
+ "update_button": "Atualizar agora",
447
+ "later_button": "Agora não"
448
+ },
449
+ "request_notification_permission": {
450
+ "title": "Ativar notificações?",
451
+ "description": "Receba atualizações em tempo real e fique sempre por dentro do que importa.",
452
+ "continue_button": "Ativar",
453
+ "skip_button": "Agora não"
454
+ },
455
+ "notification_permission_denied": {
456
+ "title": "Permissão necessária",
457
+ "description": "Para receber notificações, ative as permissões de notificação nas configurações do dispositivo.",
458
+ "allow_button": "Permitir notificações",
459
+ "open_settings_button": "Abrir configurações",
460
+ "cancel_button": "Cancelar"
461
+ },
462
+ "review_popup": {
463
+ "title": "Está gostando do app?",
464
+ "description": "Se o app tem te ajudado, uma avaliação na loja faz toda a diferença. Leva poucos segundos e ajuda demais a gente a crescer.",
465
+ "rate_button": "Escrever uma avaliação"
466
+ },
467
+ "navigation": {
468
+ "home": "Início",
469
+ "support": "Ajuda",
470
+ "notifications": "Notificações",
471
+ "settings": "Config.",
472
+ "logout": "Sair",
473
+ "skip_to_content": "Pular para o conteúdo"
474
+ },
475
+ "reminderPage": {
476
+ "title": "Lembretes",
477
+ "toggleLabel": "Ativar lembrete",
478
+ "typeLabel": "Repetir",
479
+ "daily": "Todo dia",
480
+ "weekly": "Toda semana",
481
+ "specificDate": "Uma vez",
482
+ "timeLabel": "Horário",
483
+ "dayLabel": "Dia da semana",
484
+ "dateLabel": "Data",
485
+ "selectDate": "Selecionar data",
486
+ "hint": "Receba um lembrete para voltar ao app",
487
+ "summaryDaily": "Todo dia às $time",
488
+ "summaryWeekly": "Toda semana, $day às $time",
489
+ "summaryDate": "Em $date às $time"
490
+ },
491
+ "dailyReminder": {
492
+ "title": "Lembrete",
493
+ "body": "Está na hora de beber água."
494
+ },
495
+ "settings": {
496
+ "title": "Configurações",
497
+ "avatar": {
498
+ "take_photo": "Tirar foto",
499
+ "choose_library": "Biblioteca de fotos",
500
+ "remove_photo": "Remover foto",
501
+ "cancel": "Cancelar"
710
502
  },
711
- "biometric_prompt": {
712
- "title_ios_face": "Ativar Face ID no bloqueio do app?",
713
- "title_ios_touch": "Ativar Touch ID no bloqueio do app?",
714
- "title_ios_mixed": "Ativar Face ID ou Touch ID no bloqueio?",
715
- "title_android_face": "Ativar bloqueio com desbloqueio facial?",
716
- "title_android_fingerprint": "Ativar bloqueio com impressão digital?",
717
- "title_android_mixed": "Proteger o app com biometria?",
718
- "message_ios_face": "Ao abrir, você confirma com Face ID — continua na conta.",
719
- "message_ios_touch": "Ao abrir, você confirma com Touch ID — continua na conta.",
720
- "message_ios_mixed": "Ao abrir, usa Face ID ou Touch ID — continua na conta.",
721
- "message_android_face": "Ao abrir, confirme com reconhecimento facial — continua na conta.",
722
- "message_android_fingerprint": "Ao abrir, confirme com impressão digital continua na conta.",
723
- "title_android_face_and_fingerprint": "Ativar bloqueio com digital ou rosto?",
724
- "message_android_face_and_fingerprint": "Qualquer um serve continua na conta.",
725
- "message_android_mixed": "Confirmação rápida ao abrir continua na conta.",
726
- "not_now": "Agora não",
727
- "enable": "Ativar"
503
+ "language_title": "Idiomas",
504
+ "theme_title": "Tema",
505
+ "theme_option_system": "Sistema",
506
+ "theme_option_light": "Claro",
507
+ "theme_option_dark": "Escuro",
508
+ "haptic_feedback_title": "Feedback háptico",
509
+ "hide_chrome_on_scroll_title": "Ocultar barras ao rolar",
510
+ "section_preferences_label": "PREFERÊNCIAS",
511
+ "section_security_label": "SEGURANÇA",
512
+ "section_support_label": "AJUDA",
513
+ "biometric_title": "Bloqueio do app",
514
+ "biometric_subtitle_ios": "Exige Face ID ou Touch ID ao abrir com sessão ativa.",
515
+ "biometric_subtitle_ios_face": "Exige Face ID ao abrir com sessão ativa.",
516
+ "biometric_subtitle_ios_touch": "Exige Touch ID ao abrir com sessão ativa.",
517
+ "biometric_subtitle_android": "Pedimos uma confirmação no celular sempre que você abrir com sessão ativa.",
518
+ "biometric_subtitle_android_face": "Exige desbloqueio facial ao abrir com sessão ativa.",
519
+ "biometric_subtitle_android_fingerprint": "Exige impressão digital ao abrir com sessão ativa.",
520
+ "biometric_subtitle_android_face_and_fingerprint": "Exige impressão digital ou desbloqueio facial ao abrir com sessão ativa.",
521
+ "biometric_disable_title": "Desligar bloqueio do app?",
522
+ "biometric_disable_message": "Sem bloqueio, quem pegar no celular desbloqueado abre o app até você sair da conta.",
523
+ "biometric_disable_confirm": "Desligar",
524
+ "biometric_disable_cancel": "Cancelar",
525
+ "biometric_enable_reason_ios": "Confirme com Face ID ou Touch ID para ativar o bloqueio",
526
+ "biometric_enable_reason_ios_face": "Confirme com Face ID para ativar o bloqueio",
527
+ "biometric_enable_reason_ios_touch": "Confirme com Touch ID para ativar o bloqueio",
528
+ "biometric_enable_reason_android": "Confirme no celular para ativar o bloqueio",
529
+ "biometric_enable_reason_android_face": "Confirme com desbloqueio facial para ativar o bloqueio",
530
+ "biometric_enable_reason_android_fingerprint": "Confirme com impressão digital para ativar o bloqueio",
531
+ "biometric_enable_reason_android_face_and_fingerprint": "Confirme com digital ou rosto para ativar o bloqueio",
532
+ "biometric_login_reason_ios": "Desbloqueie com Face ID ou Touch ID",
533
+ "biometric_login_reason_ios_face": "Desbloqueie com Face ID",
534
+ "biometric_login_reason_ios_touch": "Desbloqueie com Touch ID",
535
+ "biometric_login_reason_android": "Confirme sua identidade",
536
+ "biometric_login_reason_android_face": "Desbloqueie com desbloqueio facial",
537
+ "biometric_login_reason_android_fingerprint": "Desbloqueie com impressão digital",
538
+ "biometric_login_reason_android_face_and_fingerprint": "Desbloqueie com digital ou rosto",
539
+ "biometric_unavailable_message_ios": "Ative Face ID, Touch ID ou código em Ajustes.",
540
+ "biometric_unavailable_message_ios_face": "Ative Face ID ou código do aparelho em Ajustes.",
541
+ "biometric_unavailable_message_ios_touch": "Ative Touch ID ou código do aparelho em Ajustes.",
542
+ "biometric_unavailable_message_android": "Ative biometria ou um bloqueio de tela nas definições do telefone.",
543
+ "biometric_unavailable_message_android_face": "Cadastre rosto ou bloqueio de tela nos ajustes.",
544
+ "biometric_unavailable_message_android_fingerprint": "Cadastre impressão digital ou bloqueio de tela nos ajustes.",
545
+ "biometric_unavailable_message_android_face_and_fingerprint": "Cadastre impressão digital ou rosto nas definições do telefone.",
546
+ "biometric_not_enabled_message": "Bloqueio do app não foi ativado.",
547
+ "feedback": "Enviar feedback",
548
+ "premium": "Premium",
549
+ "billing": "Cobrança",
550
+ "privacy": "Política de privacidade",
551
+ "support": "Central de ajuda",
552
+ "disconnect": "Sim, sair",
553
+ "disconnect_confirm_title": "Sair da conta?",
554
+ "disconnect_confirm_message": "Tem certeza que deseja sair?",
555
+ "disconnect_cancel": "Cancelar",
556
+ "logout": "Sair",
557
+ "my_account": "Minha conta",
558
+ "not_signed_in": "Não conectado",
559
+ "register": "Cadastrar",
560
+ "name_label": "Nome",
561
+ "email_label": "Email",
562
+ "connected_with_label": "Conectado com",
563
+ "provider_email": "E-mail e senha",
564
+ "provider_phone": "Telefone",
565
+ "create_password_title": "Criar senha",
566
+ "create_password_subtitle": "Defina uma senha para também entrar com e-mail e senha, além do login social.",
567
+ "create_password_field": "Nova senha",
568
+ "create_password_confirm_label": "Confirmar senha",
569
+ "create_password_success": "Senha criada",
570
+ "create_password_error": "Não foi possível criar a senha. Tente novamente.",
571
+ "create_password_too_short": "A senha deve ter pelo menos 6 caracteres",
572
+ "create_password_mismatch": "As senhas não coincidem",
573
+ "link_social": "Vincular $provider",
574
+ "link_social_success": "$provider vinculado",
575
+ "link_social_error": "Não foi possível vincular. Tente novamente.",
576
+ "edit_name_title": "Editar nome",
577
+ "edit_name_hint": "Seu nome",
578
+ "edit_name_save": "Salvar",
579
+ "edit_name_cancel": "Cancelar",
580
+ "edit_name_success": "Nome atualizado",
581
+ "edit_name_error": "Não foi possível atualizar seu nome. Tente novamente.",
582
+ "reminders": "Lembretes",
583
+ "admin_panel": "Painel Admin",
584
+ "admin_debug_section_label": "ADMIN (SÓ EM DEBUG)",
585
+ "admin_panel_debug_notice": "Toda esta seção Admin (título, painel e opções) só existe em build de debug. Em release esse bloco não é incluído; quem instala pela loja ou por APK de produção não vê nada disso.",
586
+ "delete_account": {
587
+ "button": "Quero excluir minha conta",
588
+ "title": "Quer excluir sua conta?",
589
+ "content": "Atenção: esta ação é permanente e não pode ser desfeita.",
590
+ "content_subscriber": "Atenção: esta ação é permanente. Você perde sua assinatura ativa, e criar uma nova conta depois (mesmo com o mesmo e-mail) não recupera ela.",
591
+ "cancel": "Cancelar",
592
+ "confirm": "Sim, excluir",
593
+ "error": "Algo deu errado. Por favor, tente novamente."
728
594
  },
729
- "home_widget": {
730
- "greeting_morning": "Bom dia",
731
- "greeting_afternoon": "Boa tarde",
732
- "greeting_evening": "Boa noite",
733
- "title_with_name": "Olá, $name!",
734
- "title_default": "Olá!",
735
- "title_logged_out": "Aguardamos seu retorno",
736
- "plan_free": "Plano grátis",
737
- "plan_pro": "PRO",
738
- "quote": "Seu tempo é limitado.\nNão viva a vida de outra pessoa.\nTenha coragem de seguir sua intuição.\nTodo o resto é secundário.",
739
- "quote_author": "Steve Jobs"
595
+ "admin": {
596
+ "update_bottom_sheet": "Pré-visualizar novidades",
597
+ "preview_update_available": "Pré-visualizar atualização disponível",
598
+ "paywalls": "Paywalls",
599
+ "test_onboarding": "Testar onboarding",
600
+ "copy_user_id": "Copiar ID do usuário",
601
+ "user_id_copied": "ID do usuário copiado para a área de transferência",
602
+ "copy_fcm_token": "Copiar FCM Token",
603
+ "fcm_token_copied": "FCM Token copiado para a área de transferência",
604
+ "fcm_token_unavailable": "Token não disponível (notificações desativadas?)",
605
+ "ask_notification": "Pedir permissão de notificação",
606
+ "native_only": "Disponível apenas no app nativo (iOS / Android)",
607
+ "ask_review": "Pedir avaliação",
608
+ "home_widgets_panel": "Painel de Home Widgets",
609
+ "home_widgets_title": "Painel de Home Widgets",
610
+ "inspector_fab_title": "Inspector de widgets",
611
+ "inspector_fab_subtitle_prefix": "Atalho global:",
612
+ "update_mywidget_title": "Atualizar Widget MyWidget",
613
+ "update_mywidget_desc": "Chamar atualização manual para o widget MyWidget",
614
+ "paywalls_title": "Painel Admin de Paywalls",
615
+ "send_push_title": "Enviar notificação",
616
+ "send_push_to_all": "Enviar para todos",
617
+ "send_push_email_hint": "Adicionar e-mail",
618
+ "send_push_title_label": "Título",
619
+ "send_push_title_hint": "Ex: Nova atualização disponível",
620
+ "send_push_body_label": "Mensagem",
621
+ "send_push_body_hint": "Escreva o conteúdo da notificação",
622
+ "send_push_image_label": "URL da imagem (opcional)",
623
+ "send_push_image_hint": "https://...",
624
+ "send_push_email_label": "E-mails dos destinatários",
625
+ "send_push_success": "Notificação enviada!",
626
+ "send_push_user_not_found": "Usuário não encontrado: $email",
627
+ "send_push_send_button": "Enviar",
628
+ "send_push_required": "Título e mensagem são obrigatórios",
629
+ "send_push_no_emails": "Adicione pelo menos um e-mail",
630
+ "send_push_route_label": "Página ao abrir",
631
+ "send_push_route_description": "Tela aberta quando o usuário toca na notificação.",
632
+ "send_push_route_notifications": "Notificações",
633
+ "send_push_route_home": "Início",
634
+ "send_push_route_settings": "Configurações",
635
+ "send_push_route_premium": "Premium",
636
+ "send_push_route_reminder": "Lembretes",
637
+ "send_push_route_feedback": "Feedback",
638
+ "send_push_preview_label": "Prévia",
639
+ "send_push_preview_now": "agora",
640
+ "send_push_preview_title_placeholder": "Título da notificação",
641
+ "send_push_preview_body_placeholder": "O corpo da mensagem aparece aqui",
642
+ "device_preview_title": "Device Preview (somente web)",
643
+ "send_push_section_recipients": "Destinatários",
644
+ "send_push_section_content": "Conteúdo",
645
+ "send_push_section_advanced": "Avançado",
646
+ "send_push_audience_all": "Todos",
647
+ "send_push_audience_specific": "Específicos",
648
+ "send_push_audience_all_hint": "A notificação será enviada para todos os usuários inscritos."
740
649
  }
650
+ },
651
+ "rate_banner": {
652
+ "title": "Você gostou do nosso app?",
653
+ "text": "Você teria um minuto para nos avaliar na loja?",
654
+ "rate_button": "Sim, claro!",
655
+ "later_button": "Mais tarde..."
656
+ },
657
+ "notifications": {
658
+ "title": "Notificações",
659
+ "empty_title": "Nenhuma notificação ainda",
660
+ "empty_subtitle": "Fique ligado nas atualizações",
661
+ "error_fetching": "Erro ao buscar notificações",
662
+ "push_title": "Notificações push",
663
+ "push_subtitle_enabled": "Você está recebendo alertas",
664
+ "push_subtitle_disabled": "Toque para ativar nas configurações",
665
+ "push_subtitle_waiting": "Ative para não perder novidades",
666
+ "mark_all_read": "Marcar lidas",
667
+ "see_all": "Ver todas",
668
+ "group_today": "Hoje",
669
+ "group_yesterday": "Ontem",
670
+ "group_older": "Mais antigas",
671
+ "empty_cta": "Ativar notificações",
672
+ "empty_cta_open_settings": "Abrir configurações",
673
+ "delete_all": "Excluir tudo",
674
+ "options": "Opções",
675
+ "delete_all_confirm_title": "Excluir todas as notificações?",
676
+ "delete_all_confirm_message": "Isso vai remover todas as notificações da sua conta. Essa ação não pode ser desfeita.",
677
+ "delete_action": "Sim, excluir",
678
+ "cancel_action": "Cancelar",
679
+ "deleted_one": "Notificação excluída",
680
+ "deleted_all": "Todas as notificações foram excluídas"
681
+ },
682
+ "bottom_router": {
683
+ "fake_page_text": "Esta é uma página de exemplo"
684
+ },
685
+ "ai_chat": {
686
+ "title": "Assistente IA",
687
+ "empty_state": "Inicie uma conversa com seu assistente.",
688
+ "hint": "Pergunte algo...",
689
+ "error_not_configured": "O assistente ainda não está disponível. Tente novamente mais tarde.",
690
+ "error_no_reply": "Não conseguimos obter uma resposta. Tente de novo.",
691
+ "error_network": "Não foi possível conectar ao assistente de IA.",
692
+ "new_conversation": "Nova conversa",
693
+ "conversations_empty": "Nenhuma conversa ainda",
694
+ "no_conversation_selected": "Escolha uma conversa ou comece uma nova.",
695
+ "delete_title": "Excluir conversa?",
696
+ "delete_message": "Esta conversa e todas as mensagens serão excluídas permanentemente.",
697
+ "delete_cancel": "Cancelar",
698
+ "delete_confirm": "Sim, excluir"
699
+ },
700
+ "phone_auth": {
701
+ "title_input": "Autenticação por Telefone",
702
+ "subtitle_input": "Digite seu número de telefone",
703
+ "description_input": "Enviaremos um código de verificação para confirmar sua identidade",
704
+ "phone_label": "Número de telefone",
705
+ "phone_hint": "+55 (11) 91234-5678",
706
+ "error_empty": "Por favor, digite um número de telefone",
707
+ "error_invalid": "Por favor, digite um número válido",
708
+ "continue_btn": "Continuar",
709
+ "title_verify": "Verificar Código",
710
+ "verification_code": "Código de Verificação",
711
+ "code_sent": "Enviamos um código de verificação para $phone",
712
+ "signin_success_title": "Tudo certo",
713
+ "signin_success_text": "Você entrou com seu número de telefone",
714
+ "verify_code": "Verificar Código",
715
+ "resend_code": "Reenviar Código",
716
+ "enter_all_digits": "Por favor, digite todos os 6 números"
717
+ },
718
+ "recover_password_result": {
719
+ "title": "E-mail enviado",
720
+ "description": "Enviamos um e-mail com um link para redefinir sua senha",
721
+ "back_to_signin": "Voltar para o Login",
722
+ "note": "Nota: Se você não receber um e-mail, verifique sua pasta de spam"
723
+ },
724
+ "page_not_found": {
725
+ "title": "404 - Página não encontrada"
726
+ },
727
+ "devInspector": {
728
+ "copied": "$widget copiado para o clipboard",
729
+ "activate": "Ativar inspetor de widgets",
730
+ "deactivate": "Desativar inspetor de widgets",
731
+ "copyForAi": "Copiar para IA",
732
+ "selectWidgetFirst": "Selecione um widget na tela primeiro e depois toque em Copiar.",
733
+ "inspectorHint": "Toque na interface para selecionar (contorno roxo). Depois copie para usar na IA.",
734
+ "statusActive": "Inspecionando",
735
+ "fieldSize": "Tamanho",
736
+ "fieldColor": "Cor",
737
+ "copyJson": "Copiar JSON"
738
+ },
739
+ "webDevicePreview": {
740
+ "frame": "Frame",
741
+ "darkBackground": "Fundo escuro",
742
+ "darkTheme": "Tema escuro",
743
+ "landscape": "Paisagem",
744
+ "textScale": "Escala de texto",
745
+ "screenshot": "Screenshot",
746
+ "imageCopied": "Imagem copiada — cole no chat",
747
+ "imageDownloaded": "Imagem baixada"
748
+ },
749
+ "biometric_prompt": {
750
+ "title_ios_face": "Ativar Face ID no bloqueio do app?",
751
+ "title_ios_touch": "Ativar Touch ID no bloqueio do app?",
752
+ "title_ios_mixed": "Ativar Face ID ou Touch ID no bloqueio?",
753
+ "title_android_face": "Ativar bloqueio com desbloqueio facial?",
754
+ "title_android_fingerprint": "Ativar bloqueio com impressão digital?",
755
+ "title_android_mixed": "Proteger o app com biometria?",
756
+ "message_ios_face": "Ao abrir, você confirma com Face ID — continua na conta.",
757
+ "message_ios_touch": "Ao abrir, você confirma com Touch ID — continua na conta.",
758
+ "message_ios_mixed": "Ao abrir, usa Face ID ou Touch ID — continua na conta.",
759
+ "message_android_face": "Ao abrir, confirme com reconhecimento facial — continua na conta.",
760
+ "message_android_fingerprint": "Ao abrir, confirme com impressão digital — continua na conta.",
761
+ "title_android_face_and_fingerprint": "Ativar bloqueio com digital ou rosto?",
762
+ "message_android_face_and_fingerprint": "Qualquer um serve — continua na conta.",
763
+ "message_android_mixed": "Confirmação rápida ao abrir — continua na conta.",
764
+ "not_now": "Agora não",
765
+ "enable": "Ativar"
766
+ },
767
+ "home_widget": {
768
+ "greeting_morning": "Bom dia",
769
+ "greeting_afternoon": "Boa tarde",
770
+ "greeting_evening": "Boa noite",
771
+ "title_with_name": "Olá, $name!",
772
+ "title_default": "Olá!",
773
+ "title_logged_out": "Aguardamos seu retorno",
774
+ "plan_free": "Plano grátis",
775
+ "plan_pro": "PRO",
776
+ "quote": "Seu tempo é limitado.\nNão viva a vida de outra pessoa.\nTenha coragem de seguir sua intuição.\nTodo o resto é secundário.",
777
+ "quote_author": "Steve Jobs"
778
+ }
741
779
  }
742
-