Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
106 changes: 98 additions & 8 deletions gerador.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
:root {
--primary: #2563eb;
--primary-dark: #1d4ed8;
--secondary: #f43f5e;
--accent: #0ea5e9;
--background: #f8fafc;
--foreground: #0f172a;
--muted: #64748b;
--border: #e2e8f0;
--card: #ffffff;
}

[data-theme="dark"] {
--primary: #3b82f6;
--primary-dark: #2563eb;
--secondary: #f43f5e;
--accent: #0ea5e9;
--background: #0f172a;
--foreground: #f8fafc;
--muted: #94a3b8;
--border: #1e293b;
--card: #1e293b;
}

* {
Expand All @@ -10,18 +30,18 @@
}

body {
background-color: #f8fafc;
color: #1e293b;
background-color: var(--background);
color: var(--foreground);
line-height: 1.5;
min-height: 100vh;
display: flex;
flex-direction: column;
padding-top: 70px;
}


header {
background: white;
background: var(--card);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
position: fixed;
width: 100%;
Expand Down Expand Up @@ -88,13 +108,29 @@
.back-btn:hover {
background: #1d4ed8;
}


.theme-toggle {
background: none;
border: none;
color: var(--muted);
font-size: 1.2rem;
cursor: pointer;
padding: 0.5rem;
border-radius: 6px;
transition: all 0.2s;
}

.theme-toggle:hover {
color: var(--primary);
background: var(--background);
}

.menu-toggle {
display: none;
background: none;
border: none;
font-size: 1.5rem;
color: #0f172a;
color: var(--foreground);
cursor: pointer;
}

Expand Down Expand Up @@ -125,7 +161,7 @@
.form-container,
.preview-container {
flex: 1;
background: white;
background: var(--card);
padding: 2rem;
border-radius: 1rem;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
Expand Down Expand Up @@ -155,9 +191,38 @@
.form-container { width: 100%; }
}

/* Progress Indicator */
.progress-container {
margin-bottom: 2rem;
}

.progress-bar {
width: 100%;
height: 8px;
background-color: var(--border);
border-radius: 10px;
overflow: hidden;
margin-bottom: 0.5rem;
}

.progress-fill {
height: 100%;
background: linear-gradient(90deg, var(--primary), var(--accent));
border-radius: 10px;
transition: width 0.3s ease;
width: 0%;
}

.progress-text {
text-align: center;
font-size: 0.875rem;
color: var(--muted);
font-weight: 500;
}

/* Form Elements */
h2 {
color: #0f172a;
color: var(--foreground);
margin-bottom: 1.5rem;
text-align: center;
font-size: 1.5rem;
Expand Down Expand Up @@ -203,6 +268,31 @@
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

input.error,
textarea.error {
border-color: #ef4444;
}

input.success,
textarea.success {
border-color: #10b981;
}

.error-message {
display: block;
color: #ef4444;
font-size: 0.75rem;
margin-top: 0.25rem;
min-height: 1rem;
}

.success-message {
display: block;
color: #10b981;
font-size: 0.75rem;
margin-top: 0.25rem;
}

textarea {
min-height: 120px;
Expand Down
88 changes: 54 additions & 34 deletions gerador.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,18 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gerador de Currículo - ProCurriculum</title>
<title>Gerador de Currículo - ProCurriculum | Crie seu CV Profissional</title>

<!-- SEO Meta Tags -->
<meta name="description" content="Gerador de currículos online gratuito. Preencha seus dados e exporte em PDF/DOCX. Preview em tempo real. Design profissional e otimizado para ATS.">
<meta name="keywords" content="gerador currículo, criar currículo, currículo PDF, currículo DOCX, CV online">
<meta name="author" content="LirielC">
<meta name="robots" content="index, follow">
<meta name="theme-color" content="#2563eb">

<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="favicon.svg">

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docx@8.5.0/build/index.umd.js"></script>
<link rel="stylesheet" href="gerador.css">
Expand All @@ -20,6 +31,9 @@
<div class="nav-links">
<a href="index.html#como-funciona">COMO FUNCIONA</a>
<a href="index.html#beneficios">BENEFÍCIOS</a>
<button class="theme-toggle" id="themeToggle" aria-label="Alternar modo escuro">
<i class="fas fa-moon"></i>
</button>
<a href="index.html" class="back-btn">VOLTAR</a>
</div>
<button class="menu-toggle">
Expand All @@ -36,87 +50,93 @@
</div>
<div class="form-container" id="formContainer">
<h2>Gerador de Currículo</h2>
<form id="curriculoForm">
<div class="progress-container">
<div class="progress-bar" id="progressBar">
<div class="progress-fill" id="progressFill"></div>
</div>
<p class="progress-text" id="progressText">0% completo</p>
</div>
<form id="curriculoForm" aria-label="Formulário de geração de currículo">
<div class="form-group">
<label>Nome Completo:</label>
<input type="text" id="nome" required>
<label for="nome">Nome Completo:</label>
<input type="text" id="nome" name="nome" required aria-required="true">
</div>

<div class="form-group">
<label>Cidade/Estado:</label>
<input type="text" id="localizacao" required>
<label for="localizacao">Cidade/Estado:</label>
<input type="text" id="localizacao" name="localizacao" required aria-required="true">
</div>

<div class="form-group">
<label>E-mail:</label>
<input type="email" id="email" required pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<span id="emailError" class="error"></span>
<label for="email">E-mail:</label>
<input type="email" id="email" name="email" required aria-required="true" pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" aria-describedby="emailError" aria-invalid="false">
<span id="emailError" class="error-message" role="alert"></span>
</div>

<div class="form-group">
<label>WhatsApp:</label>
<input type="text" id="whatsapp" required maxlength="15" placeholder="(00) 00000-0000">
<span id="whatsappError" class="error"></span>
<label for="whatsapp">WhatsApp:</label>
<input type="text" id="whatsapp" name="whatsapp" required aria-required="true" maxlength="15" placeholder="(00) 00000-0000" aria-describedby="whatsappError" aria-invalid="false">
<span id="whatsappError" class="error-message" role="alert"></span>
</div>

<div class="form-group">
<label>LinkedIn:</label>
<input type="text" id="linkedin" required>
<label for="linkedin">LinkedIn:</label>
<input type="text" id="linkedin" name="linkedin" required aria-required="true">
</div>

<div class="form-group">
<label>Objetivo:</label>
<input type="text" id="objetivo" required>
<label for="objetivo">Objetivo:</label>
<input type="text" id="objetivo" name="objetivo" required aria-required="true">
</div>

<div class="form-group">
<label>Palavras-chave (separadas por |):</label>
<input type="text" id="palavrasChave" placeholder="Ex: DESENVOLVIMENTO | GESTÃO | LIDERANÇA" required>
<label for="palavrasChave">Palavras-chave (separadas por |):</label>
<input type="text" id="palavrasChave" name="palavrasChave" placeholder="Ex: DESENVOLVIMENTO | GESTÃO | LIDERANÇA" required aria-required="true">
</div>

<div class="form-group">
<label>Resumo Profissional:</label>
<textarea id="resumo" required></textarea>
<label for="resumo">Resumo Profissional:</label>
<textarea id="resumo" name="resumo" required aria-required="true"></textarea>
</div>

<div class="form-group">
<label>Expertise (uma por linha):</label>
<textarea id="expertise" placeholder="Digite cada expertise em uma nova linha" required></textarea>
<label for="expertise">Expertise (uma por linha):</label>
<textarea id="expertise" name="expertise" placeholder="Digite cada expertise em uma nova linha" required aria-required="true"></textarea>
</div>

<div class="form-group">
<label>Linguagens e Tecnologias (uma por linha):</label>
<textarea id="linguagens" placeholder="Digite cada linguagem/tecnologia em uma nova linha"></textarea>
<label for="linguagens">Linguagens e Tecnologias (uma por linha):</label>
<textarea id="linguagens" name="linguagens" placeholder="Digite cada linguagem/tecnologia em uma nova linha"></textarea>
</div>

<div class="form-group">
<label>Cursos e Certificações:</label>
<div id="cursos-container">
<div id="cursos-container" role="list" aria-label="Lista de cursos e certificações">

</div>
<button type="button" id="adicionar-curso" class="btn-secondary">Adicionar Curso</button>
<button type="button" id="adicionar-curso" class="btn-secondary" aria-label="Adicionar novo curso ou certificação">Adicionar Curso</button>
</div>

<div class="form-group">
<label>Tipo de Experiência (opcional):</label>
<select id="tipoExperiencia">
<label for="tipoExperiencia">Tipo de Experiência (opcional):</label>
<select id="tipoExperiencia" name="tipoExperiencia" aria-describedby="tipoExperienciaHint">
<option value="profissional">Experiência Profissional</option>
<option value="projetos">Projetos Relevantes</option>
</select>
<small class="hint">Se não tiver experiência profissional, selecione "Projetos Relevantes".</small>
<small class="hint" id="tipoExperienciaHint">Se não tiver experiência profissional, selecione "Projetos Relevantes".</small>
</div>

<div class="form-group">
<label>Modelo do Currículo:</label>
<select id="modelo">
<label for="modelo">Modelo do Currículo:</label>
<select id="modelo" name="modelo" aria-label="Selecione o modelo do currículo">
<option value="classico">Clássico</option>
<option value="moderno">Moderno</option>
</select>
</div>

<div class="form-group">
<label>Espaçamento do PDF:</label>
<select id="espacamento">
<label for="espacamento">Espaçamento do PDF:</label>
<select id="espacamento" name="espacamento" aria-label="Selecione o espaçamento do PDF">
<option value="padrao">Padrão</option>
<option value="compacto">Compacto</option>
<option value="espacado">Espaçado</option>
Expand Down
Loading