Sistema de Serviços Online Interativo
Sistema de Serviços Online Interativo
DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistema de Serviços</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
min-height: 100vh;
color: white;
overflow-x: hidden;
}
.background-blur {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('data:image/svg+xml,<svg
xmlns="[Link] viewBox="0 0 100 100"><defs><pattern id="grid"
width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10"
fill="none" stroke="%23333" stroke-width="0.5"
opacity="0.3"/></pattern></defs><rect width="100" height="100"
fill="url(%23grid)"/></svg>');
z-index: -1;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 20px;
padding: 40px;
width: 100%;
max-width: 600px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
animation: fadeIn 0.6s ease-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.progress-bar {
width: 100%;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
margin-bottom: 30px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #00ff6a, #00cc55);
border-radius: 2px;
transition: width 0.5s ease;
width: 0%;
}
h1 {
text-align: center;
margin-bottom: 30px;
font-size: 2.5em;
font-weight: bold;
color: white;
letter-spacing: 2px;
}
.logo-container {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20px;
animation: fadeIn 0.8s ease-out;
}
.logo-container svg {
filter: drop-shadow(0 5px 15px rgba(0, 255, 106, 0.3));
animation: glow 2s ease-in-out infinite alternate;
}
@keyframes glow {
from {
filter: drop-shadow(0 5px 15px rgba(0, 255, 106, 0.3));
}
to {
filter: drop-shadow(0 5px 25px rgba(0, 255, 106, 0.5));
}
}
h2 {
text-align: center;
margin-bottom: 25px;
font-size: 1.8em;
color: #e0e0e0;
}
.button {
background: linear-gradient(135deg, #00ff6a, #00cc55);
border: none;
border-radius: 12px;
padding: 15px 30px;
color: white;
font-size: 1.1em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
display: block;
width: 100%;
margin: 15px 0;
text-transform: uppercase;
letter-spacing: 1px;
}
.button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(0, 255, 106, 0.3);
background: linear-gradient(135deg, #00cc55, #00ff6a);
}
.button:active {
transform: translateY(0);
}
.button:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.service-card {
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 15px;
padding: 25px;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.service-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(0, 255, 106, 0.1),
transparent);
transition: left 0.5s ease;
}
.service-card:hover::before {
left: 100%;
}
.service-card:hover {
transform: translateY(-5px);
border-color: rgba(0, 255, 106, 0.5);
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3);
}
.[Link] {
border-color: #00ff6a;
background: rgba(0, 255, 106, 0.1);
}
.service-name {
font-size: 1.3em;
font-weight: bold;
margin-bottom: 10px;
color: #e0e0e0;
}
.service-price {
font-size: 1.1em;
color: #00ff6a;
font-weight: bold;
}
.selected-badge {
position: absolute;
top: 10px;
right: 10px;
background: #00ff6a;
color: black;
padding: 5px 10px;
border-radius: 20px;
font-size: 0.8em;
font-weight: bold;
opacity: 0;
transform: scale(0);
transition: all 0.3s ease;
}
.[Link] .selected-badge {
opacity: 1;
transform: scale(1);
}
.form-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.form-group {
display: flex;
flex-direction: column;
}
.[Link]-width {
grid-column: 1 / -1;
}
label {
margin-bottom: 8px;
color: #e0e0e0;
font-weight: 500;
}
input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.file-input {
position: relative;
overflow: hidden;
display: inline-block;
width: 100%;
}
.file-input input[type=file] {
position: absolute;
left: -9999px;
}
.file-input-label {
background: rgba(255, 255, 255, 0.1);
border: 2px dashed rgba(255, 255, 255, 0.3);
border-radius: 8px;
padding: 20px;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
display: block;
}
.file-input-label:hover {
border-color: #00ff6a;
background: rgba(0, 255, 106, 0.1);
}
textarea {
resize: vertical;
min-height: 100px;
}
.back-button {
background: rgba(255, 255, 255, 0.1);
border: 2px solid rgba(255, 255, 255, 0.2);
color: white;
margin-right: 15px;
}
.back-button:hover {
background: rgba(255, 255, 255, 0.2);
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(255, 255, 255, 0.1);
}
.button-group {
display: flex;
gap: 15px;
margin-top: 30px;
}
.loading {
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
border-top-color: white;
animation: spin 1s ease-in-out infinite;
margin-right: 10px;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.step {
display: none;
}
.[Link] {
display: block;
}
.confirmation-content {
text-align: center;
}
.success-icon {
font-size: 4em;
margin-bottom: 20px;
animation: bounce 0.6s ease-out;
}
@keyframes bounce {
0% { transform: scale(0); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
.confirmation-message {
font-size: 1.2em;
line-height: 1.6;
margin-bottom: 30px;
color: #e0e0e0;
max-width: 500px;
margin-left: auto;
margin-right: auto;
}
.loading-spinner {
width: 80px;
height: 80px;
margin: 30px auto;
border: 4px solid rgba(255, 255, 255, 0.1);
border-top: 4px solid #00ff6a;
border-radius: 50%;
animation: spinLarge 1.5s linear infinite;
}
@keyframes spinLarge {
to { transform: rotate(360deg); }
}
.loading-text {
font-size: 1.5em;
margin-bottom: 20px;
color: #e0e0e0;
}
.loading-subtext {
font-size: 1em;
color: #a0a0a0;
margin-bottom: 30px;
}
.loading-progress {
width: 100%;
height: 6px;
background: rgba(255, 255, 255, 0.1);
border-radius: 3px;
overflow: hidden;
margin: 20px 0;
}
.loading-progress-fill {
height: 100%;
background: linear-gradient(90deg, #00ff6a, #00cc55);
border-radius: 3px;
width: 0%;
transition: width 0.3s ease;
animation: progressAnimation 8s ease-out forwards;
}
@keyframes progressAnimation {
0% { width: 0%; }
20% { width: 15%; }
40% { width: 35%; }
60% { width: 55%; }
80% { width: 80%; }
95% { width: 95%; }
100% { width: 100%; }
}
.loading-steps {
text-align: left;
margin: 30px 0;
max-width: 400px;
margin-left: auto;
margin-right: auto;
}
.loading-step {
display: flex;
align-items: center;
margin: 15px 0;
opacity: 0.4;
transition: opacity 0.5s ease;
}
.[Link] {
opacity: 1;
color: #00ff6a;
}
.loading-step-icon {
width: 20px;
height: 20px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
margin-right: 15px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.[Link] .loading-step-icon {
background: #00ff6a;
color: black;
}
.auto-update-indicator {
position: fixed;
top: 20px;
right: 20px;
background: rgba(0, 255, 106, 0.1);
border: 1px solid rgba(0, 255, 106, 0.3);
border-radius: 10px;
padding: 10px 15px;
color: #00ff6a;
font-size: 0.9em;
z-index: 1000;
animation: fadeIn 0.5s ease-out;
}
.update-status {
display: flex;
align-items: center;
gap: 8px;
}
.update-pulse {
width: 8px;
height: 8px;
background: #00ff6a;
border-radius: 50%;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.3; }
100% { opacity: 1; }
}
.card {
padding: 25px;
}
h1 {
font-size: 2em;
}
.services-grid {
grid-template-columns: 1fr;
}
.form-grid {
grid-template-columns: 1fr;
}
.button-group {
flex-direction: column;
}
.auto-update-indicator {
top: 10px;
right: 10px;
padding: 8px 12px;
font-size: 0.8em;
}
}
</style>
</head>
<body>
<div class="background-blur"></div>
<div class="container">
<div class="card">
<div class="progress-bar">
<div class="progress-fill"></div>
</div>
<form id="mainForm">
<div class="form-grid" id="formFields">
<!-- Campos do formulário serão inseridos aqui via
JavaScript -->
</div>
<div class="button-group">
<button type="button" class="button back-button"
onclick="goToStep(2)">
Voltar
</button>
<button type="submit" class="button" id="submitBtn">
Enviar
</button>
</div>
</form>
</div>
<div class="loading-progress">
<div class="loading-progress-fill"></div>
</div>
<div class="loading-steps">
<div class="loading-step" id="loadingStep1">
<div class="loading-step-icon">1</div>
<span>Verificando documentos...</span>
</div>
<div class="loading-step" id="loadingStep2">
<div class="loading-step-icon">2</div>
<span>Criando perfil na plataforma...</span>
</div>
<div class="loading-step" id="loadingStep3">
<div class="loading-step-icon">3</div>
<span>Configurando conta...</span>
</div>
<div class="loading-step" id="loadingStep4">
<div class="loading-step-icon">4</div>
<span>Finalizando processo...</span>
</div>
</div>
</div>
</div>
<div class="button-group">
<button class="button" id="paymentBtn">
Ir para Pagamento
</button>
<button class="button back-button" onclick="resetSystem()">
Nova Solicitação
</button>
</div>
</div>
</div>
</div>
</div>
<script>
// ==================== CONFIGURAÇÃO DO SISTEMA ====================
let currentStep = 1;
let selectedFlow = '';
let selectedServices = [];
let systemConfig = {
lastUpdate: new Date().toISOString(),
version: '2.1.0',
autoUpdateEnabled: true,
updateInterval: 300000 // 5 minutos
};
const brazilianStates = [
'Acre', 'Alagoas', 'Amapá', 'Amazonas', 'Bahia', 'Ceará',
'Distrito Federal', 'Espírito Santo', 'Goiás', 'Maranhão',
'Mato Grosso', 'Mato Grosso do Sul', 'Minas Gerais', 'Pará',
'Paraíba', 'Paraná', 'Pernambuco', 'Piauí', 'Rio de Janeiro',
'Rio Grande do Norte', 'Rio Grande do Sul', 'Rondônia',
'Roraima', 'Santa Catarina', 'São Paulo', 'Sergipe', 'Tocantins'
];
updateStatusIndicator('Sistema Ativo');
function checkForUpdates() {
[Link]('🔍 Verificando atualizações...');
updateStatusIndicator('Verificando...');
if (shouldUpdate) {
performSystemUpdate();
} else {
updateStatusIndicator('Sistema Atualizado');
setTimeout(() => {
updateStatusIndicator('Sistema Ativo');
}, 3000);
}
}, 1500);
}
function performSystemUpdate() {
[Link]('📥 Atualizando sistema...');
updateStatusIndicator('Atualizando...');
// Simular atualização
setTimeout(() => {
[Link] = new Date().toISOString();
refreshSystemData();
updateStatusIndicator('Atualizado!');
setTimeout(() => {
updateStatusIndicator('Sistema Ativo');
}, 3000);
function refreshSystemData() {
// Aqui você pode adicionar lógica para buscar dados atualizados
[Link]('🔄 Atualizando dados do sistema...');
function updateStatusIndicator(status) {
const statusElement = [Link]('updateStatus');
if (statusElement) {
[Link] = status;
}
}
function renderServices() {
const grid = [Link]('servicesGrid');
[Link] = '';
[Link] = `
<div class="service-name">${[Link]}</div>
<div class="service-price">${price}</div>
<div class="selected-badge">Selecionado</div>
`;
[Link](card);
});
}
function toggleService(index) {
const card = [Link]('.service-card')[index];
if ([Link](index)) {
selectedServices = [Link](i => i !== index);
[Link]('selected');
} else {
[Link](index);
[Link]('selected');
}
updateContinueButton();
}
function updateContinueButton() {
const btn = [Link]('continueBtn');
[Link] = [Link] === 0;
}
function goToStep(step) {
// Hide all steps
[Link]('.step').forEach(s =>
[Link]('active'));
if (step === 3) {
renderForm();
}
function renderForm() {
const container = [Link]('formFields');
[Link] = '';
function renderCreateAccountForm(container) {
const fields = [
{ type: 'text', name: 'fullName', label: 'Nome Completo', required:
true },
{ type: 'file', name: 'photo', label: 'Foto do Rosto (FACIAL E
PERFIL)', required: true },
{ type: 'select', name: 'state', label: 'Estado onde vai rodar',
options: brazilianStates, required: true },
{ type: 'tel', name: 'phone', label: 'Telefone', required: true,
mask: 'phone' },
{ type: 'email', name: 'email', label: 'E-mail', required: true },
{ type: 'text', name: 'licensePlate', label: 'Placa do Veículo',
required: true },
{ type: 'text', name: 'vehicleModel', label: 'Modelo do Veículo',
required: true },
{ type: 'text', name: 'vehicleColor', label: 'Cor do Veículo',
required: true }
];
[Link](field => {
const div = [Link]('div');
[Link] = [Link] === 'file' ? 'form-group full-width' :
'form-group';
[Link](option => {
const opt = [Link]('option');
[Link] = option;
[Link] = option;
[Link](opt);
});
[Link](select);
} else if ([Link] === 'file') {
const fileDiv = [Link]('div');
[Link] = 'file-input';
[Link] = [Link];
[Link](input);
[Link](labelEl);
[Link](fileDiv);
} else {
const input = [Link]('input');
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](input);
}
[Link](div);
});
}
function renderUnlockAccountForm(container) {
const fields = [
{ type: 'text', name: 'cpf', label: 'CPF', required: true, mask:
'cpf' },
{ type: 'email', name: 'email', label: 'E-mail', required: true },
{
type: 'select',
name: 'urgency',
label: 'Motivo de Urgência',
options: ['Baixa', 'Média', 'Alta', 'Crítica'],
required: true
},
{ type: 'text', name: 'restrictionReason', label: 'Motivo pelo qual
a conta pegou restrição', required: true, fullWidth: true },
{ type: 'file', name: 'appScreenshot', label: 'Print da tela
inicial do aplicativo', required: true },
{ type: 'textarea', name: 'detailedDescription', label: 'Descrição
detalhada do motivo do bloqueio', required: true }
];
[Link](field => {
const div = [Link]('div');
[Link] = [Link] || [Link] === 'file' ||
[Link] === 'textarea' ? 'form-group full-width' : 'form-group';
[Link](option => {
const opt = [Link]('option');
[Link] = option;
[Link] = option;
[Link](opt);
});
[Link](select);
} else if ([Link] === 'file') {
const fileDiv = [Link]('div');
[Link] = 'file-input';
[Link] = [Link];
[Link](input);
[Link](labelEl);
[Link](fileDiv);
} else if ([Link] === 'textarea') {
const textarea = [Link]('textarea');
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](textarea);
} else {
const input = [Link]('input');
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](input);
}
[Link](div);
});
}
if (file) {
[Link] = `✅ ${[Link]}`;
[Link] = '#00ff6a';
}
}
function maskPhone(event) {
let value = [Link](/\D/g, '');
[Link] = value;
}
function maskCPF(event) {
let value = [Link](/\D/g, '');
value = [Link](/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
[Link] = value;
}
function showLoadingScreen() {
goToStep(4);
[Link]('⏳ Iniciando processo de carregamento...');
[Link](loadingSteps[currentLoadingStep]).[Link]('active');
[Link](`📋 Passo ${currentLoadingStep + 1}: $
{loadingSteps[currentLoadingStep]} ativado`);
currentLoadingStep++;
setTimeout(animateLoadingSteps, 2000); // 2 segundos entre cada
passo para demo
} else {
// Após completar todos os passos, mostrar confirmação
[Link]('✅ Todos os passos de carregamento concluídos');
setTimeout(() => {
showConfirmation();
}, 2000);
}
};
function showConfirmation() {
const confirmationMessage =
[Link]('confirmationMessage');
const confirmationTitle = [Link]('confirmationTitle');
const paymentBtn = [Link]('paymentBtn');
if (checkoutUrl) {
// Log antes de abrir a URL
[Link]('🔗 Abrindo URL de pagamento:', checkoutUrl);
[Link](checkoutUrl, '_blank');
} else {
[Link]('❌ URL de pagamento não encontrada para:',
selectedServiceName);
alert("Selecione um serviço válido.");
}
};
goToStep(5);
}
function resetSystem() {
[Link]('🔄 Resetando sistema...');
selectedServices = [];
selectedFlow = '';
[Link]('mainForm').reset();
goToStep(1);
[Link]('✅ Sistema resetado com sucesso');
}
// Enhanced logging
[Link]('📋 Dados completos do formulário:',
submissionData);
[Link]('🎯 Tipo de fluxo:', selectedFlow === 'create' ?
'Criar Conta' : 'Desbloquear Conta');
[Link]('📱 Serviços selecionados:',
[Link]);
[Link]('👤 Dados do usuário:', [Link]);
[Link]('🕐 Timestamp:', [Link]);
[Link]('📊 Versão do sistema:',
[Link]);
[Link] = 'Enviar';
[Link] = false;
}, 2000);
});
}
}
if (allElementsFound) {
[Link]('✅ Todos os elementos DOM encontrados');
} else {
[Link]('❌ Falha na inicialização: elementos DOM ausentes');
updateStatusIndicator('Erro de Inicialização');
}
}