59 |
Minhas Habilidades
60 |
61 |
62 |
Desenvolvimento Web
63 |
HTML5, CSS3, JavaScript , React, Node.js...
64 |
65 |
66 |
67 |
Game Developer
68 |
desenvolvo mini projetos de Jogos 2D..
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
Meus Projetos
77 |
Confira alguns dos projetos em que trabalhei ou que desenvolvi para estudo.
78 |
79 |
80 |
81 | Sistema para validar Cartões de Crédito
82 | Um Sistema Simples e didático para conseguir verificar se o seu cartão é verificado ou não verificado.
83 | Ver Projeto
84 |
85 |
86 |
87 | Aplicativo de Clima
88 | Um aplicativo bem introsivo e simples de usar para conseguir verificar o clima.
89 | Ver Projeto
90 |
91 |
92 |
93 |
94 |
95 |
161 |
162 |
163 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/victor-22/style.css:
--------------------------------------------------------------------------------
1 | /* --- Reset Básico e Configurações Globais --- */
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | box-sizing: border-box;
6 | scroll-behavior: smooth; /* Rolagem suave para links internos */
7 | }
8 |
9 | :root {
10 | /* Defina suas variáveis de cor */
11 | --primary-color: #007bff; /* Azul exemplo */
12 | --secondary-color: #6c757d; /* Cinza exemplo */
13 | --tertiary-color: #28a745; /* Verde exemplo */
14 | --light-color: #f8f9fa;
15 | --dark-color: #343a40;
16 | --text-color: #212529;
17 | --background-color: #ffffff;
18 | --section-padding: 60px 0; /* Espaçamento padrão das seções */
19 | }
20 |
21 | body {
22 | font-family: 'Arial', sans-serif; /* Escolha uma fonte melhor (ex: Google Fonts) */
23 | line-height: 1.6;
24 | color: var(--text-color);
25 | background-color: var(--background-color);
26 | }
27 |
28 | h1, h2, h3 {
29 | margin-bottom: 1rem;
30 | line-height: 1.2;
31 | }
32 |
33 | h1 { font-size: 2.8rem; }
34 | h2 { font-size: 2.2rem; text-align: center; margin-bottom: 2rem; }
35 | h3 { font-size: 1.5rem; }
36 |
37 | p {
38 | margin-bottom: 1rem;
39 | }
40 |
41 | a {
42 | text-decoration: none;
43 | color: var(--primary-color);
44 | transition: color 0.3s ease;
45 | }
46 |
47 | a:hover {
48 | color: darken(var(--primary-color), 10%);
49 | }
50 |
51 | img {
52 | max-width: 100%;
53 | height: auto;
54 | display: block;
55 | }
56 |
57 | ul {
58 | list-style: none;
59 | }
60 |
61 | .container {
62 | max-width: 1100px;
63 | margin: 0 auto;
64 | padding: 0 20px; /* Espaçamento lateral */
65 | }
66 |
67 | /* --- Cabeçalho e Navegação --- */
68 | .main-header {
69 | background-color: var(--background-color);
70 | padding: 1rem 0;
71 | position: fixed; /* Fixo no topo */
72 | width: 100%;
73 | top: 0;
74 | left: 0;
75 | z-index: 1000;
76 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
77 | transition: background-color 0.3s ease;
78 | }
79 |
80 | /* Estilo para quando rolar a página (adicione com JS) */
81 | /* .main-header.scrolled { background-color: rgba(255, 255, 255, 0.95); } */
82 |
83 | .main-header .container {
84 | display: flex;
85 | justify-content: space-between;
86 | align-items: center;
87 | }
88 |
89 | .logo {
90 | font-size: 1.5rem;
91 | font-weight: bold;
92 | color: var(--dark-color);
93 | }
94 |
95 | .main-nav ul {
96 | display: flex;
97 | }
98 |
99 | .main-nav ul li {
100 | margin-left: 20px;
101 | }
102 |
103 | .main-nav ul li a {
104 | color: var(--dark-color);
105 | padding: 5px 10px;
106 | font-weight: 500;
107 | position: relative;
108 | }
109 |
110 | .main-nav ul li a::after { /* Efeito de sublinhado no hover */
111 | content: '';
112 | position: absolute;
113 | width: 0;
114 | height: 2px;
115 | bottom: -2px;
116 | left: 50%;
117 | transform: translateX(-50%);
118 | background-color: var(--primary-color);
119 | transition: width 0.3s ease;
120 | }
121 |
122 | .main-nav ul li a:hover::after,
123 | .main-nav ul li a.active::after { /* Classe 'active' pode ser adicionada via JS */
124 | width: 100%;
125 | }
126 |
127 | .menu-toggle { /* Botão de menu para mobile */
128 | display: none; /* Escondido por padrão */
129 | background: none;
130 | border: none;
131 | font-size: 1.8rem;
132 | cursor: pointer;
133 | color: var(--dark-color);
134 | }
135 |
136 | /* --- Corpo Principal (Espaçamento do Header Fixo) --- */
137 | main {
138 | padding-top: 80px; /* Altura aproximada do header */
139 | }
140 |
141 | /* --- Seção Hero --- */
142 | .hero-section {
143 | background-color: var(--light-color); /* Cor de fundo suave */
144 | /* background: linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url('caminho/para/imagem_fundo.jpg') no-repeat center center/cover; */ /* Opção com imagem */
145 | color: var(--dark-color); /* Mudar para #fff se usar fundo escuro */
146 | padding: 100px 0;
147 | text-align: center;
148 | min-height: 70vh; /* Altura mínima */
149 | display: flex;
150 | align-items: center;
151 | justify-content: center;
152 | }
153 |
154 | .hero-content .subtitle {
155 | font-size: 1.4rem;
156 | font-weight: 300;
157 | margin-bottom: 1.5rem;
158 | color: var(--secondary-color);
159 | }
160 |
161 | /* --- Botões CTA (Call to Action) --- */
162 | .cta-button {
163 | display: inline-block;
164 | padding: 12px 25px;
165 | border-radius: 5px;
166 | font-weight: bold;
167 | text-transform: uppercase;
168 | letter-spacing: 1px;
169 | cursor: pointer;
170 | transition: all 0.3s ease;
171 | margin: 10px 5px;
172 | border: 2px solid transparent;
173 | }
174 |
175 | .cta-button.primary {
176 | background-color: var(--primary-color);
177 | color: #fff;
178 | border-color: var(--primary-color);
179 | }
180 | .cta-button.primary:hover {
181 | background-color: darken(var(--primary-color), 10%);
182 | border-color: darken(var(--primary-color), 10%);
183 | transform: translateY(-2px); /* Efeito sutil ao passar o mouse */
184 | }
185 |
186 | .cta-button.secondary {
187 | background-color: transparent;
188 | color: var(--primary-color);
189 | border-color: var(--primary-color);
190 | }
191 | .cta-button.secondary:hover {
192 | background-color: var(--primary-color);
193 | color: #fff;
194 | transform: translateY(-2px);
195 | }
196 |
197 | .cta-button.tertiary { /* Para links de projeto */
198 | background-color: var(--tertiary-color);
199 | color: #fff;
200 | border-color: var(--tertiary-color);
201 | padding: 8px 15px;
202 | font-size: 0.9rem;
203 | }
204 | .cta-button.tertiary:hover {
205 | background-color: darken(var(--tertiary-color), 10%);
206 | border-color: darken(var(--tertiary-color), 10%);
207 | }
208 |
209 | /* --- Seção Sobre Mim --- */
210 | .about-section {
211 | padding: var(--section-padding);
212 | background-color: var(--background-color);
213 | }
214 |
215 | .about-content {
216 | display: flex;
217 | align-items: center;
218 | gap: 40px; /* Espaço entre imagem e texto */
219 | }
220 |
221 | .about-image {
222 | flex: 0 0 300px; /* Largura fixa para a imagem */
223 | text-align: center;
224 | }
225 |
226 | .about-image img {
227 | border-radius: 50%; /* Imagem redonda */
228 | max-width: 250px;
229 | border: 5px solid var(--light-color);
230 | box-shadow: 0 4px 10px rgba(0,0,0,0.1);
231 | }
232 |
233 | .about-text {
234 | flex: 1; /* O texto ocupa o espaço restante */
235 | }
236 |
237 | /* --- Seção Habilidades --- */
238 | .skills-section {
239 | padding: var(--section-padding);
240 | background-color: var(--light-color); /* Fundo diferente para diversificar */
241 | }
242 |
243 | .skills-grid {
244 | display: grid;
245 | grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* Layout responsivo */
246 | gap: 30px;
247 | margin-top: 2rem;
248 | }
249 |
250 | .skill-card {
251 | background-color: var(--background-color);
252 | padding: 30px;
253 | border-radius: 8px;
254 | text-align: center;
255 | box-shadow: 0 2px 8px rgba(0,0,0,0.08);
256 | transition: transform 0.3s ease, box-shadow 0.3s ease;
257 | }
258 |
259 | .skill-card:hover {
260 | transform: translateY(-5px);
261 | box-shadow: 0 6px 15px rgba(0,0,0,0.12);
262 | }
263 |
264 | .skill-icon {
265 | font-size: 2.5rem;
266 | color: var(--primary-color);
267 | margin-bottom: 1rem;
268 | }
269 |
270 | .skill-card h3 {
271 | color: var(--primary-color);
272 | margin-bottom: 0.5rem;
273 | }
274 |
275 | /* --- Seção Portfólio --- */
276 | .portfolio-section {
277 | padding: var(--section-padding);
278 | background-color: var(--background-color);
279 | }
280 |
281 | .portfolio-intro {
282 | text-align: center;
283 | max-width: 600px;
284 | margin: 0 auto 2rem auto;
285 | color: var(--secondary-color);
286 | }
287 |
288 | .portfolio-grid {
289 | display: grid;
290 | grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
291 | gap: 30px;
292 | }
293 |
294 | .portfolio-item {
295 | background-color: var(--light-color);
296 | border-radius: 8px;
297 | overflow: hidden; /* Garante que a imagem não ultrapasse */
298 | box-shadow: 0 2px 8px rgba(0,0,0,0.08);
299 | transition: transform 0.3s ease, box-shadow 0.3s ease;
300 | display: flex;
301 | flex-direction: column;
302 | }
303 |
304 | .portfolio-item:hover {
305 | transform: translateY(-5px);
306 | box-shadow: 0 6px 15px rgba(0,0,0,0.12);
307 | }
308 |
309 | .portfolio-item img {
310 | width: 100%;
311 | height: 200px; /* Altura fixa para a imagem do projeto */
312 | object-fit: cover; /* Cobre o espaço sem distorcer */
313 | }
314 |
315 | .portfolio-item h3 {
316 | margin: 1rem 1rem 0.5rem 1rem;
317 | color: var(--dark-color);
318 | }
319 |
320 | .portfolio-item p {
321 | margin: 0 1rem 1rem 1rem;
322 | flex-grow: 1; /* Faz a descrição ocupar espaço disponível */
323 | font-size: 0.95rem;
324 | color: var(--secondary-color);
325 | }
326 |
327 | .portfolio-item .cta-button {
328 | margin: 0 1rem 1rem 1rem;
329 | align-self: flex-start; /* Alinha o botão à esquerda */
330 | }
331 |
332 |
333 | /* --- Seção Contato --- */
334 | .contact-section {
335 | padding: var(--section-padding);
336 | background-color: var(--light-color);
337 | }
338 |
339 | .contact-section p {
340 | text-align: center;
341 | max-width: 600px;
342 | margin: 0 auto 2.5rem auto;
343 | }
344 |
345 | .contact-options {
346 | display: flex;
347 | justify-content: center;
348 | gap: 40px;
349 | flex-wrap: wrap; /* Quebra linha em telas menores */
350 | text-align: center;
351 | margin-bottom: 3rem; /* Espaço antes do formulário opcional */
352 | }
353 |
354 | .contact-option {
355 | flex-basis: 200px; /* Largura base */
356 | }
357 |
358 | .contact-icon {
359 | font-size: 2rem;
360 | color: var(--primary-color);
361 | margin-bottom: 0.8rem;
362 | }
363 |
364 | .contact-option h3 {
365 | margin-bottom: 0.5rem;
366 | color: var(--dark-color);
367 | }
368 |
369 | .contact-option a {
370 | color: var(--secondary-color);
371 | word-break: break-all; /* Evita que links longos quebrem o layout */
372 | }
373 | .contact-option a:hover {
374 | color: var(--primary-color);
375 | }
376 |
377 | /* Opcional: Estilos para Formulário de Contato */
378 | .contact-form {
379 | max-width: 600px;
380 | margin: 2rem auto 0 auto;
381 | background: var(--background-color);
382 | padding: 30px;
383 | border-radius: 8px;
384 | box-shadow: 0 4px 15px rgba(0,0,0,0.1);
385 | }
386 |
387 | .contact-form label {
388 | display: block;
389 | margin-bottom: 5px;
390 | font-weight: bold;
391 | color: var(--dark-color);
392 | }
393 |
394 | .contact-form input,
395 | .contact-form textarea {
396 | width: 100%;
397 | padding: 10px;
398 | margin-bottom: 15px;
399 | border: 1px solid #ccc;
400 | border-radius: 4px;
401 | font-size: 1rem;
402 | }
403 |
404 | .contact-form textarea {
405 | resize: vertical; /* Permite redimensionar verticalmente */
406 | }
407 |
408 | .contact-form button {
409 | width: 100%;
410 | }
411 |
412 | /* --- Rodapé --- */
413 | .main-footer {
414 | background-color: var(--dark-color);
415 | color: var(--light-color);
416 | padding: 2rem 0;
417 | text-align: center;
418 | margin-top: auto; /* Empurra para o final se o conteúdo for curto */
419 | }
420 |
421 | .main-footer p {
422 | margin-bottom: 0.5rem;
423 | }
424 |
425 | .social-links a {
426 | color: var(--light-color);
427 | margin: 0 10px;
428 | font-size: 1.2rem;
429 | transition: color 0.3s ease;
430 | }
431 |
432 | .social-links a:hover {
433 | color: var(--primary-color);
434 | }
435 |
436 | /* --- Responsividade (Exemplo Básico) --- */
437 | @media (max-width: 768px) {
438 | h1 { font-size: 2.2rem; }
439 | h2 { font-size: 1.8rem; }
440 |
441 | .main-header .container {
442 | position: relative; /* Para posicionar o menu */
443 | }
444 |
445 | .main-nav {
446 | display: none; /* Esconder menu normal */
447 | position: absolute;
448 | top: 100%; /* Abaixo do header */
449 | left: 0;
450 | width: 100%;
451 | background-color: var(--background-color);
452 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
453 | }
454 |
455 | .main-nav.active { /* Classe adicionada via JS */
456 | display: block;
457 | }
458 |
459 | .main-nav ul {
460 | flex-direction: column; /* Menu vertical */
461 | padding: 1rem 0;
462 | }
463 |
464 | .main-nav ul li {
465 | margin: 0;
466 | text-align: center;
467 | border-bottom: 1px solid var(--light-color);
468 | }
469 | .main-nav ul li:last-child {
470 | border-bottom: none;
471 | }
472 |
473 | .main-nav ul li a {
474 | display: block; /* Ocupa toda a largura */
475 | padding: 1rem;
476 | }
477 | .main-nav ul li a::after {
478 | display: none; /* Remover sublinhado no mobile */
479 | }
480 |
481 | .menu-toggle {
482 | display: block; /* Mostrar botão hamburguer */
483 | }
484 |
485 | .about-content {
486 | flex-direction: column; /* Imagem acima do texto */
487 | text-align: center;
488 | }
489 | .about-image {
490 | margin-bottom: 2rem;
491 | flex-basis: auto; /* Resetar base flex */
492 | }
493 |
494 | .skills-grid, .portfolio-grid {
495 | grid-template-columns: 1fr; /* Uma coluna */
496 | }
497 |
498 | .contact-options {
499 | flex-direction: column;
500 | gap: 30px;
501 | }
502 | }
503 |
504 | /* --- Animações Sutis (Opcional - pode ser expandido com JS) --- */
505 | section { /* Animação de fade-in para seções */
506 | opacity: 0;
507 | transform: translateY(20px);
508 | animation: fadeInSection 0.8s ease-out forwards;
509 | }
510 |
511 | @keyframes fadeInSection {
512 | to {
513 | opacity: 1;
514 | transform: translateY(0);
515 | }
516 | }
517 |
518 | /* Adicione um delay para cada seção aparecer sequencialmente */
519 | #about { animation-delay: 0.2s; }
520 | #skills { animation-delay: 0.4s; }
521 | #portfolio { animation-delay: 0.6s; }
522 | #contact { animation-delay: 0.8s; }
523 |
524 | /* Certifique-se que a animação só rode uma vez (pode ser melhor controlado com JS Intersection Observer) */
525 | /* Para simplificar, está aplicado a todas as seções na carga inicial */
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 | /* inicio do código Css para o formulário - */
535 |
536 |
537 | /* --- Estilos Adicionais para Formulário de Contato --- */
538 |
539 | .form-trigger {
540 | text-align: center;
541 | margin-top: 2rem; /* Espaço acima do botão */
542 | margin-bottom: 2rem; /* Espaço abaixo do botão */
543 | }
544 |
545 | .contact-form {
546 | max-width: 600px;
547 | margin: 2rem auto 0 auto;
548 | background: var(--background-color); /* Fundo branco ou claro */
549 | padding: 30px;
550 | border-radius: 8px;
551 | box-shadow: 0 4px 15px rgba(0,0,0,0.1);
552 | border: 1px solid #eee;
553 | transition: opacity 0.5s ease-in-out, transform 0.5s ease-in-out, max-height 0.5s ease-in-out; /* Transição suave */
554 | opacity: 1;
555 | transform: translateY(0);
556 | overflow: hidden; /* Necessário para a transição de max-height */
557 | max-height: 1000px; /* Um valor alto o suficiente para o conteúdo */
558 | }
559 |
560 | /* Classe para esconder o formulário */
561 | .contact-form.hidden-form {
562 | opacity: 0;
563 | transform: translateY(-20px);
564 | max-height: 0; /* Esconde o formulário colapsando a altura */
565 | padding-top: 0; /* Remove padding quando escondido */
566 | padding-bottom: 0;
567 | margin-top: 0;
568 | border: none;
569 | overflow: hidden; /* Garante que o conteúdo não vaze */
570 | }
571 |
572 | .contact-form h3 {
573 | text-align: center;
574 | margin-bottom: 1.5rem;
575 | color: var(--dark-color);
576 | }
577 |
578 | .form-group {
579 | margin-bottom: 1rem;
580 | }
581 |
582 | .form-group label {
583 | display: block;
584 | margin-bottom: 5px;
585 | font-weight: bold;
586 | color: var(--dark-color);
587 | font-size: 0.95rem;
588 | }
589 |
590 | .form-group input[type="text"],
591 | .form-group input[type="email"],
592 | .form-group input[type="tel"],
593 | .form-group textarea {
594 | width: 100%;
595 | padding: 12px;
596 | border: 1px solid #ccc;
597 | border-radius: 4px;
598 | font-size: 1rem;
599 | transition: border-color 0.3s ease;
600 | }
601 |
602 | .form-group input:focus,
603 | .form-group textarea:focus {
604 | border-color: var(--primary-color);
605 | outline: none; /* Remove o outline padrão */
606 | box-shadow: 0 0 5px rgba(0, 123, 255, 0.3); /* Adiciona um brilho sutil */
607 | }
608 |
609 | .form-group textarea {
610 | resize: vertical; /* Permite redimensionar só verticalmente */
611 | min-height: 80px;
612 | }
613 |
614 | .contact-form button[type="submit"] {
615 | width: 100%;
616 | padding: 15px; /* Botão maior */
617 | font-size: 1.1rem;
618 | margin-top: 1rem;
619 | }
620 | /* Fim do código Css para o formulário - */
621 |
--------------------------------------------------------------------------------
📱 Conecte-se Comigo
61 |