wagtail-enap-designsystem 1.2.1.128__py3-none-any.whl → 1.2.1.130__py3-none-any.whl

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 (32) hide show
  1. enap_designsystem/blocks/__init__.py +6 -0
  2. enap_designsystem/blocks/form.py +243 -2
  3. enap_designsystem/blocks/html_blocks.py +316 -6
  4. enap_designsystem/blocks/semana_inovacao.py +1 -0
  5. enap_designsystem/migrations/0394_sistemavotacaopage_background_image_fundo_and_more.py +52181 -0
  6. enap_designsystem/migrations/0395_formulariopage_enable_scoring_and_more.py +106 -0
  7. enap_designsystem/migrations/0396_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51263 -0
  8. enap_designsystem/migrations/0397_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  9. enap_designsystem/migrations/0398_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  10. enap_designsystem/migrations/0399_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  11. enap_designsystem/migrations/0400_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  12. enap_designsystem/migrations/0401_alter_areaaluno_body_alter_cursoeadpage_curso_and_more.py +52692 -0
  13. enap_designsystem/migrations/0402_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52082 -0
  14. enap_designsystem/migrations/0403_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52802 -0
  15. enap_designsystem/migrations/0404_sistemavotacaopage_conteudo_pagina.py +253 -0
  16. enap_designsystem/models.py +26 -0
  17. enap_designsystem/templates/enap_designsystem/blocks/apresentacao_simple_block.html +1 -1
  18. enap_designsystem/templates/enap_designsystem/blocks/cards_titles.html +309 -0
  19. enap_designsystem/templates/enap_designsystem/blocks/clientes_block.html +1 -1
  20. enap_designsystem/templates/enap_designsystem/blocks/cpnu_dashboard_block.html +5 -0
  21. enap_designsystem/templates/enap_designsystem/blocks/logos_simple_block.html +329 -0
  22. enap_designsystem/templates/enap_designsystem/blocks/numeros_block.html +195 -0
  23. enap_designsystem/templates/enap_designsystem/blocks/page/pagenoticias_block.html +6 -0
  24. enap_designsystem/templates/enap_designsystem/blocks/recaptcha.html +0 -2
  25. enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html +36 -9
  26. enap_designsystem/views.py +1 -1
  27. enap_designsystem/wagtail_hooks.py +390 -9
  28. {wagtail_enap_designsystem-1.2.1.128.dist-info → wagtail_enap_designsystem-1.2.1.130.dist-info}/METADATA +1 -1
  29. {wagtail_enap_designsystem-1.2.1.128.dist-info → wagtail_enap_designsystem-1.2.1.130.dist-info}/RECORD +32 -18
  30. {wagtail_enap_designsystem-1.2.1.128.dist-info → wagtail_enap_designsystem-1.2.1.130.dist-info}/WHEEL +0 -0
  31. {wagtail_enap_designsystem-1.2.1.128.dist-info → wagtail_enap_designsystem-1.2.1.130.dist-info}/licenses/LICENSE +0 -0
  32. {wagtail_enap_designsystem-1.2.1.128.dist-info → wagtail_enap_designsystem-1.2.1.130.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,253 @@
1
+ # Generated by Django 5.1.6 on 2025-09-09 13:58
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ (
11
+ "enap_designsystem",
12
+ "0403_alter_areaaluno_body_alter_enapcomponentes_body_and_more",
13
+ ),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AddField(
18
+ model_name="sistemavotacaopage",
19
+ name="conteudo_pagina",
20
+ field=wagtail.fields.StreamField(
21
+ [("secao_apresentacao", 10)],
22
+ blank=True,
23
+ block_lookup={
24
+ 0: (
25
+ "wagtail.blocks.ChoiceBlock",
26
+ [],
27
+ {
28
+ "choices": [
29
+ ("#FFFFFF", "Branco (#FFFFFF)"),
30
+ ("#F8F9FA", "Cinza Claro (#F8F9FA)"),
31
+ ("#000000", "Preto (#000000)"),
32
+ ("enap-green", "Verde ENAP"),
33
+ ("enap-link", "Verde Link ENAP"),
34
+ ("gnova-purple", "Roxo Gnova"),
35
+ ("gnova-light", "Roxo Claro Gnova"),
36
+ ("blue", "Azul"),
37
+ ("green", "Verde"),
38
+ ("red", "Vermelho"),
39
+ ("orange", "Laranja"),
40
+ ("purple", "Roxo"),
41
+ ("indigo", "Índigo"),
42
+ ("emerald", "Esmeralda"),
43
+ ("#132929", "Verde Musgo Escuro"),
44
+ ("#F5F7FA", "Azul Enap"),
45
+ ("#FCFCFC", "Cinza Enap"),
46
+ ("#3A8A9C", "Azul Petróleo"),
47
+ ("#25552A", "Verde Floresta Escuro"),
48
+ ("#818C27", "Verde Oliva"),
49
+ ("#FF7A1B", "Laranja Vibrante"),
50
+ ("#FFEB31", "Amarelo Canário"),
51
+ ("#FFF0D9", "Creme Suave"),
52
+ ("#DB8C3F", "Dourado Queimado"),
53
+ ("#990005", "Vermelho Bordô"),
54
+ ("#EA1821", "Vermelho Cereja"),
55
+ ("#F8F9FA", "Cinza Muito Claro"),
56
+ ("#BAC946", "Verdinho"),
57
+ ],
58
+ "help_text": "Cor de fundo da seção",
59
+ },
60
+ ),
61
+ 1: (
62
+ "wagtail.blocks.ChoiceBlock",
63
+ [],
64
+ {
65
+ "choices": [
66
+ ("direita", "Imagem à Direita"),
67
+ ("esquerda", "Imagem à Esquerda"),
68
+ ],
69
+ "help_text": "Posição da imagem em relação ao texto",
70
+ },
71
+ ),
72
+ 2: (
73
+ "wagtail.blocks.CharBlock",
74
+ (),
75
+ {"help_text": "Título principal da seção", "max_length": 200},
76
+ ),
77
+ 3: (
78
+ "wagtail.blocks.ChoiceBlock",
79
+ [],
80
+ {
81
+ "choices": [
82
+ ("enap-green", "Verde ENAP"),
83
+ ("enap-link", "Verde Link ENAP"),
84
+ ("gnova-purple", "Roxo Gnova"),
85
+ ("gnova-light", "Roxo Claro Gnova"),
86
+ ("blue", "Azul"),
87
+ ("green", "Verde"),
88
+ ("red", "Vermelho"),
89
+ ("orange", "Laranja"),
90
+ ("purple", "Roxo"),
91
+ ("indigo", "Índigo"),
92
+ ("emerald", "Esmeralda"),
93
+ ("#FFFFFF", "Branco (#FFFFFF)"),
94
+ ("#132929", "Verde Musgo Escuro"),
95
+ ("#3A8A9C", "Azul Petróleo"),
96
+ ("#25552A", "Verde Floresta Escuro"),
97
+ ("#818C27", "Verde Oliva"),
98
+ ("#FF7A1B", "Laranja Vibrante"),
99
+ ("#FFEB31", "Amarelo Canário"),
100
+ ("#FFF0D9", "Creme Suave"),
101
+ ("#DB8C3F", "Dourado Queimado"),
102
+ ("#990005", "Vermelho Bordô"),
103
+ ("#EA1821", "Vermelho Cereja"),
104
+ ("#BAC946", "Verdinho"),
105
+ ],
106
+ "help_text": "Cor do título principal",
107
+ "required": False,
108
+ },
109
+ ),
110
+ 4: (
111
+ "wagtail.blocks.RichTextBlock",
112
+ (),
113
+ {
114
+ "features": [
115
+ "bold",
116
+ "italic",
117
+ "link",
118
+ "ul",
119
+ "ol",
120
+ "h3",
121
+ "h4",
122
+ "hr",
123
+ "blockquote",
124
+ ],
125
+ "help_text": "Subtítulo da seção (opcional)",
126
+ "required": False,
127
+ },
128
+ ),
129
+ 5: (
130
+ "wagtail.blocks.ChoiceBlock",
131
+ [],
132
+ {
133
+ "choices": [
134
+ ("enap-green", "Verde ENAP"),
135
+ ("#FFF0D9", "Creme Suave"),
136
+ ("enap-link", "Verde Link ENAP"),
137
+ ("gnova-purple", "Roxo Gnova"),
138
+ ("gnova-light", "Roxo Claro Gnova"),
139
+ ("blue", "Azul"),
140
+ ("green", "Verde"),
141
+ ("red", "Vermelho"),
142
+ ("orange", "Laranja"),
143
+ ("purple", "Roxo"),
144
+ ("indigo", "Índigo"),
145
+ ("emerald", "Esmeralda"),
146
+ ("#FFFFFF", "Branco (#FFFFFF)"),
147
+ ("#132929", "Verde Musgo Escuro"),
148
+ ("#00777D", "Enap"),
149
+ ("#58606E", "Enap Cinza"),
150
+ ("#AFF0ED", "Enap Azul"),
151
+ ("#25552A", "Verde Floresta Escuro"),
152
+ ("#818C27", "Verde Oliva"),
153
+ ("#DB8C3F", "Dourado Queimado"),
154
+ ("#990005", "Vermelho Bordô"),
155
+ ("#000000", "Preto"),
156
+ ("#2F2F2F", "Cinza Escuro"),
157
+ ("#4A4A4A", "Cinza Médio"),
158
+ ("#383674", "Roxo ENAP"),
159
+ ("#BAC946", "Verdinho"),
160
+ ],
161
+ "help_text": "Cor do subtítulo",
162
+ },
163
+ ),
164
+ 6: (
165
+ "wagtail.images.blocks.ImageChooserBlock",
166
+ (),
167
+ {"help_text": "Imagem que aparecerá em formato circular"},
168
+ ),
169
+ 7: (
170
+ "wagtail.blocks.CharBlock",
171
+ (),
172
+ {
173
+ "default": "Imagem ilustrativa",
174
+ "help_text": "Texto alternativo da imagem",
175
+ "max_length": 100,
176
+ },
177
+ ),
178
+ 8: (
179
+ "wagtail.blocks.RichTextBlock",
180
+ (),
181
+ {
182
+ "features": [
183
+ "bold",
184
+ "italic",
185
+ "link",
186
+ "ol",
187
+ "ul",
188
+ "hr",
189
+ "document-link",
190
+ ],
191
+ "help_text": "Conteúdo principal em rich text",
192
+ "required": False,
193
+ },
194
+ ),
195
+ 9: (
196
+ "wagtail.blocks.ChoiceBlock",
197
+ [],
198
+ {
199
+ "choices": [
200
+ ("enap-green", "Verde ENAP"),
201
+ ("#FFF0D9", "Creme Suave"),
202
+ ("enap-link", "Verde Link ENAP"),
203
+ ("gnova-purple", "Roxo Gnova"),
204
+ ("gnova-light", "Roxo Claro Gnova"),
205
+ ("blue", "Azul"),
206
+ ("green", "Verde"),
207
+ ("red", "Vermelho"),
208
+ ("orange", "Laranja"),
209
+ ("purple", "Roxo"),
210
+ ("indigo", "Índigo"),
211
+ ("emerald", "Esmeralda"),
212
+ ("#FFFFFF", "Branco (#FFFFFF)"),
213
+ ("#132929", "Verde Musgo Escuro"),
214
+ ("#00777D", "Enap"),
215
+ ("#58606E", "Enap Cinza"),
216
+ ("#AFF0ED", "Enap Azul"),
217
+ ("#25552A", "Verde Floresta Escuro"),
218
+ ("#818C27", "Verde Oliva"),
219
+ ("#DB8C3F", "Dourado Queimado"),
220
+ ("#990005", "Vermelho Bordô"),
221
+ ("#000000", "Preto"),
222
+ ("#2F2F2F", "Cinza Escuro"),
223
+ ("#4A4A4A", "Cinza Médio"),
224
+ ("#383674", "Roxo ENAP"),
225
+ ("#BAC946", "Verdinho"),
226
+ ],
227
+ "help_text": "Cor do texto do conteúdo",
228
+ },
229
+ ),
230
+ 10: (
231
+ "wagtail.blocks.StructBlock",
232
+ [
233
+ [
234
+ ("cor_fundo", 0),
235
+ ("posicao_imagem", 1),
236
+ ("titulo", 2),
237
+ ("cor_titulo", 3),
238
+ ("subtitulo", 4),
239
+ ("cor_subtitulo", 5),
240
+ ("imagem_circular", 6),
241
+ ("alt_imagem", 7),
242
+ ("conteudo", 8),
243
+ ("cor_texto", 9),
244
+ ]
245
+ ],
246
+ {},
247
+ ),
248
+ },
249
+ help_text="Adicione seções de conteúdo para a página",
250
+ verbose_name="Conteúdo da Página",
251
+ ),
252
+ ),
253
+ ]
@@ -4775,6 +4775,7 @@ class VotoRegistrado(models.Model):
4775
4775
  super().save(*args, **kwargs)
4776
4776
 
4777
4777
 
4778
+
4778
4779
  class SistemaVotacaoPage(Page):
4779
4780
  """
4780
4781
  Página principal do sistema de votação
@@ -4789,6 +4790,18 @@ class SistemaVotacaoPage(Page):
4789
4790
  related_name="+",
4790
4791
  )
4791
4792
 
4793
+ background_image_fundo = StreamField(
4794
+ [('background_image_stream', ImageChooserBlock(
4795
+ label="Imagem de Fundo",
4796
+ help_text="Selecione uma imagem de fundo para o formulário"
4797
+ ))],
4798
+ verbose_name="Imagem de Fundo",
4799
+ use_json_field=True,
4800
+ max_num=1,
4801
+ blank=True,
4802
+ help_text="Adicione uma imagem de fundo para o formulário"
4803
+ )
4804
+
4792
4805
  subtitulo = models.CharField(
4793
4806
  max_length=255,
4794
4807
  default="Escolha os melhores projetos em cada categoria",
@@ -4812,6 +4825,16 @@ class SistemaVotacaoPage(Page):
4812
4825
  use_json_field=True,
4813
4826
  verbose_name="Imagem de Fundo",
4814
4827
  )
4828
+
4829
+ conteudo_pagina = StreamField([
4830
+ ('secao_apresentacao', SecaoApresentacaoBlock()),
4831
+ # Você pode adicionar outros blocos aqui também
4832
+ ],
4833
+ blank=True,
4834
+ use_json_field=True,
4835
+ verbose_name="Conteúdo da Página",
4836
+ help_text="Adicione seções de conteúdo para a página"
4837
+ )
4815
4838
 
4816
4839
  mostrar_progresso = models.BooleanField(
4817
4840
  default=True,
@@ -4885,8 +4908,11 @@ class SistemaVotacaoPage(Page):
4885
4908
  FieldPanel('imagem_fundo'),
4886
4909
  FieldPanel('navbar'),
4887
4910
  FieldPanel('footer'),
4911
+ FieldPanel('background_image_fundo'),
4888
4912
  ], heading="Conteúdo do Header"),
4889
4913
 
4914
+ FieldPanel('conteudo_pagina'),
4915
+
4890
4916
  FieldPanel('configuracoes_votacao'),
4891
4917
 
4892
4918
  MultiFieldPanel([
@@ -25,7 +25,7 @@
25
25
  {% if value.cards %}
26
26
  <div class="secao-cartoes {{ value.grid_tipo }}">
27
27
  {% for card_block in value.cards %}
28
- {% if card_block.block_type == 'card' %}
28
+ {% if card_block.block_type == 'card_apresentacao' %}
29
29
  <div class="secao-cartao">
30
30
  <!-- Ícone -->
31
31
  {% if card_block.value.icone %}
@@ -0,0 +1,309 @@
1
+ <!-- enap_designsystem/blocks/cards_titles.html -->
2
+ {% load wagtailcore_tags wagtailimages_tags %}
3
+ <section class="secao-apresentacao-cards">
4
+ <!-- Background com imagem se fornecida -->
5
+ <div class="secao-background"
6
+ {% if value.background_image_fundo_bg %}
7
+ style="background-image: url('{{ value.background_image_fundo_bg.url }}'); background-size: cover; background-position: center; background-repeat: no-repeat;"
8
+ {% else %}
9
+ style="background: linear-gradient(135deg, #6A1B9A 0%, #4A148C 50%, #2E1065 100%);"
10
+ {% endif %}>
11
+
12
+ <!-- Overlay para garantir legibilidade -->
13
+ <div class="secao-overlay">
14
+
15
+ <!-- Container principal -->
16
+ <div class="container mx-auto px-4 py-16 lg:py-24">
17
+
18
+ <!-- Título centralizado -->
19
+ {% if value.titulo %}
20
+ <div class="text-center mb-12 lg:mb-16">
21
+ <h2 class="titulo-secao"
22
+ style="color: {{ value.cor_titulo|default:'#FFFFFF' }};">
23
+ {{ value.titulo }}
24
+ </h2>
25
+ </div>
26
+ {% endif %}
27
+
28
+ <!-- Grid de Cards -->
29
+ {% if value.cards %}
30
+ <div class="cards-container {{ value.layout_cards|default:'cards-3-colunas' }}">
31
+ {% for card in value.cards %}
32
+ {% if card.block_type == 'card' %}
33
+ <div class="card-item">
34
+ <div class="card-apresentacao">
35
+
36
+ <!-- Imagem do card -->
37
+ {% if card.value.image %}
38
+ <div class="card-imagem">
39
+ {% image card.value.image width-400 as card_img %}
40
+ <img src="{{ card_img.url }}"
41
+ alt="{{ card.value.title|default:'Card' }}"
42
+ class="card-img">
43
+ </div>
44
+ {% endif %}
45
+
46
+ <!-- Conteúdo do card -->
47
+ <div class="card-conteudo">
48
+
49
+ <!-- Título -->
50
+ {% if card.value.title %}
51
+ <h3 class="card-titulo">
52
+ {{ card.value.title }}
53
+ </h3>
54
+ {% endif %}
55
+
56
+ <!-- Subtítulo/Cargo -->
57
+ {% if card.value.subtitle %}
58
+ <p class="card-subtitulo">
59
+ {{ card.value.subtitle }}
60
+ </p>
61
+ {% endif %}
62
+
63
+ <!-- Descrição -->
64
+ {% if card.value.description %}
65
+ <div class="card-descricao">
66
+ {{ card.value.description|richtext }}
67
+ </div>
68
+ {% endif %}
69
+
70
+ <!-- Link/Botão -->
71
+ {% if card.value.link_url %}
72
+ <div class="card-acao">
73
+ <a href="{{ card.value.link_url }}"
74
+ class="card-link"
75
+ {% if card.value.link_target %}target="{{ card.value.link_target }}"{% endif %}>
76
+ {{ card.value.link_text|default:'Saiba mais' }}
77
+ <svg class="link-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
78
+ <path d="M5 12h14M12 5l7 7-7 7"/>
79
+ </svg>
80
+ </a>
81
+ </div>
82
+ {% endif %}
83
+
84
+ </div>
85
+
86
+ </div>
87
+ </div>
88
+ {% endif %}
89
+ {% endfor %}
90
+ </div>
91
+ {% endif %}
92
+
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </section>
97
+
98
+ <style>
99
+ .secao-apresentacao-cards {
100
+ position: relative;
101
+ min-height: 600px;
102
+ }
103
+
104
+ .secao-background {
105
+ position: relative;
106
+ width: 100%;
107
+ min-height: 600px;
108
+ }
109
+
110
+ .secao-overlay {
111
+ position: absolute;
112
+ top: 0;
113
+ left: 0;
114
+ right: 0;
115
+ bottom: 0;
116
+ background: rgba(106, 27, 154, 0.15);
117
+ backdrop-filter: blur(0.5px);
118
+ }
119
+
120
+ .titulo-secao {
121
+ font-size: 2.5rem;
122
+ font-weight: 700;
123
+ line-height: 1.2;
124
+ text-align: center;
125
+ margin-bottom: 0;
126
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
127
+ }
128
+
129
+ .cards-container {
130
+ display: grid;
131
+ gap: 2rem;
132
+ max-width: 1200px;
133
+ margin: 0 auto;
134
+ }
135
+
136
+ /* Layouts responsivos */
137
+ .cards-1-coluna {
138
+ grid-template-columns: 1fr;
139
+ }
140
+
141
+ .cards-2-colunas {
142
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
143
+ max-width: 800px;
144
+ }
145
+
146
+ .cards-3-colunas {
147
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
148
+ max-width: 1000px;
149
+ }
150
+
151
+ .cards-4-colunas {
152
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
153
+ }
154
+
155
+ .cards-5-colunas {
156
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
157
+ }
158
+
159
+ .card-apresentacao {
160
+ background: rgba(0, 0, 0, 0.6);
161
+ border-radius: 12px;
162
+ overflow: hidden;
163
+ transition: all 0.3s ease;
164
+ backdrop-filter: blur(10px);
165
+ border: 1px solid rgba(255, 255, 255, 0.1);
166
+ height: 100%;
167
+ display: flex;
168
+ flex-direction: column;
169
+ }
170
+
171
+ .card-apresentacao:hover {
172
+ transform: translateY(-8px);
173
+ background: rgba(0, 0, 0, 0.7);
174
+ border-color: rgba(255, 255, 255, 0.2);
175
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
176
+ }
177
+
178
+ .card-imagem {
179
+ position: relative;
180
+ height: 200px;
181
+ overflow: hidden;
182
+ }
183
+
184
+ .card-img {
185
+ width: 100%;
186
+ height: 100%;
187
+ object-fit: cover;
188
+ transition: transform 0.3s ease;
189
+ }
190
+
191
+ .card-apresentacao:hover .card-img {
192
+ transform: scale(1.05);
193
+ }
194
+
195
+ .card-conteudo {
196
+ padding: 1.5rem;
197
+ flex: 1;
198
+ display: flex;
199
+ flex-direction: column;
200
+ }
201
+
202
+ .card-titulo {
203
+ font-size: 1.25rem;
204
+ font-weight: 600;
205
+ margin-bottom: 0.5rem;
206
+ line-height: 1.4;
207
+ color: #FFFFFF;
208
+ }
209
+
210
+ .card-subtitulo {
211
+ font-size: 0.9rem;
212
+ font-weight: 400;
213
+ color: rgba(255, 255, 255, 0.8);
214
+ margin-bottom: 1rem;
215
+ font-style: italic;
216
+ }
217
+
218
+ .card-descricao {
219
+ flex: 1;
220
+ font-size: 0.95rem;
221
+ line-height: 1.6;
222
+ margin-bottom: 1rem;
223
+ color: rgba(255, 255, 255, 0.9);
224
+ }
225
+
226
+ .card-descricao * {
227
+ color: inherit !important;
228
+ }
229
+
230
+ .card-acao {
231
+ margin-top: auto;
232
+ }
233
+
234
+ .card-link {
235
+ display: inline-flex;
236
+ align-items: center;
237
+ gap: 0.5rem;
238
+ font-size: 0.95rem;
239
+ font-weight: 500;
240
+ text-decoration: none;
241
+ color: #FFFFFF;
242
+ transition: all 0.3s ease;
243
+ }
244
+
245
+ .card-link:hover {
246
+ transform: translateX(4px);
247
+ color: #FFFFFF;
248
+ }
249
+
250
+ .link-arrow {
251
+ transition: transform 0.3s ease;
252
+ }
253
+
254
+ .card-link:hover .link-arrow {
255
+ transform: translateX(4px);
256
+ }
257
+
258
+ /* Responsividade */
259
+ @media (max-width: 768px) {
260
+ .titulo-secao {
261
+ font-size: 2rem;
262
+ }
263
+
264
+ .cards-container {
265
+ grid-template-columns: 1fr;
266
+ gap: 1.5rem;
267
+ }
268
+
269
+ .card-imagem {
270
+ height: 160px;
271
+ }
272
+
273
+ .card-conteudo {
274
+ padding: 1.25rem;
275
+ }
276
+
277
+ .card-titulo {
278
+ font-size: 1.1rem;
279
+ }
280
+
281
+ .card-subtitulo {
282
+ font-size: 0.85rem;
283
+ }
284
+ }
285
+
286
+ @media (max-width: 480px) {
287
+ .titulo-secao {
288
+ font-size: 1.75rem;
289
+ }
290
+
291
+ .container {
292
+ padding-left: 1rem;
293
+ padding-right: 1rem;
294
+ }
295
+
296
+ .card-imagem {
297
+ height: 140px;
298
+ }
299
+
300
+ .card-conteudo {
301
+ padding: 1rem;
302
+ }
303
+
304
+ .card-titulo {
305
+ font-size: 1rem;
306
+ }
307
+ }
308
+ </style></document_content>
309
+ </invoke>
@@ -43,7 +43,7 @@
43
43
  <style>
44
44
  .clientes-section {
45
45
  padding: 80px 0;
46
- background: #FFFFFF;
46
+ background: linear-gradient(0deg, #FFFFFF 88%, #F5F7FA 96%);
47
47
  position: relative;
48
48
  }
49
49
 
@@ -452,6 +452,11 @@
452
452
  box-shadow: 0 8px 16px rgba(0,0,0,0.2);
453
453
  }
454
454
 
455
+ .card-botao:active {
456
+ background: #025257;
457
+ box-shadow: 0 8px 16px rgba(0,0,0,0.2);
458
+ }
459
+
455
460
  /* Indicadores do carrossel */
456
461
  .carousel-indicators-dash {
457
462
  display: none;