fix: corrige erros de linter CSS e meta viewport para acessibilidade e compatibilidade Safari
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<html lang="pt-BR">
|
<html lang="pt-BR">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="theme-color" content="#10a37f">
|
<meta name="theme-color" content="#10a37f">
|
||||||
<meta name="description" content="Assistente virtual da Camila - Profesora">
|
<meta name="description" content="Assistente virtual da Camila - Profesora">
|
||||||
<!-- PWA Manifest -->
|
<!-- PWA Manifest -->
|
||||||
|
|||||||
+9
-5
@@ -88,8 +88,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
height: 100%;
|
|
||||||
height: -webkit-fill-available;
|
height: -webkit-fill-available;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@@ -100,8 +100,8 @@ body {
|
|||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
height: 100%;
|
|
||||||
height: -webkit-fill-available;
|
height: -webkit-fill-available;
|
||||||
|
height: 100%;
|
||||||
height: 100dvh;
|
height: 100dvh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@@ -139,8 +139,8 @@ body {
|
|||||||
|
|
||||||
.login-card {
|
.login-card {
|
||||||
background: rgba(23, 23, 23, 0.65);
|
background: rgba(23, 23, 23, 0.65);
|
||||||
backdrop-filter: blur(20px);
|
|
||||||
-webkit-backdrop-filter: blur(20px);
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
border: 1px solid var(--border-light);
|
border: 1px solid var(--border-light);
|
||||||
border-radius: 24px;
|
border-radius: 24px;
|
||||||
padding: 40px 32px;
|
padding: 40px 32px;
|
||||||
@@ -181,6 +181,7 @@ body {
|
|||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,6 +707,7 @@ body {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: white;
|
color: white;
|
||||||
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
@@ -799,8 +801,8 @@ body {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
border-bottom: 1px solid var(--border-light);
|
border-bottom: 1px solid var(--border-light);
|
||||||
background-color: rgba(13, 13, 13, 0.8);
|
background-color: rgba(13, 13, 13, 0.8);
|
||||||
backdrop-filter: blur(10px);
|
|
||||||
-webkit-backdrop-filter: blur(10px);
|
-webkit-backdrop-filter: blur(10px);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 8;
|
z-index: 8;
|
||||||
@@ -1693,6 +1695,7 @@ code {
|
|||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: rgba(0, 0, 0, 0.6);
|
background: rgba(0, 0, 0, 0.6);
|
||||||
|
-webkit-backdrop-filter: blur(4px);
|
||||||
backdrop-filter: blur(4px);
|
backdrop-filter: blur(4px);
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -2266,8 +2269,8 @@ code {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: rgba(0, 0, 0, 0.6);
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
backdrop-filter: blur(8px);
|
|
||||||
-webkit-backdrop-filter: blur(8px);
|
-webkit-backdrop-filter: blur(8px);
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -3069,6 +3072,7 @@ code {
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
const { Pool } = require('pg');
|
|
||||||
require('dotenv').config();
|
|
||||||
|
|
||||||
const pool = new Pool({
|
|
||||||
connectionString: process.env.DATABASE_URL
|
|
||||||
});
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
try {
|
|
||||||
const tablesRes = await pool.query(`
|
|
||||||
SELECT table_name
|
|
||||||
FROM information_schema.tables
|
|
||||||
WHERE table_schema = 'escola'
|
|
||||||
ORDER BY table_name;
|
|
||||||
`);
|
|
||||||
|
|
||||||
console.log('--- TABELAS NO ESQUEMA escola ---');
|
|
||||||
for (const row of tablesRes.rows) {
|
|
||||||
console.log(`\nTabela: ${row.table_name}`);
|
|
||||||
const columnsRes = await pool.query(`
|
|
||||||
SELECT column_name, data_type, is_nullable, column_default
|
|
||||||
FROM information_schema.columns
|
|
||||||
WHERE table_schema = 'escola' AND table_name = $1
|
|
||||||
ORDER BY ordinal_position;
|
|
||||||
`, [row.table_name]);
|
|
||||||
|
|
||||||
for (const col of columnsRes.rows) {
|
|
||||||
console.log(` - ${col.column_name}: ${col.data_type} (null: ${col.is_nullable}, default: ${col.column_default})`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Erro ao ler tabelas:', err);
|
|
||||||
} finally {
|
|
||||||
await pool.end();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const { exec } = require('child_process');
|
|
||||||
|
|
||||||
const concatFilePath = path.join(__dirname, 'test_concat.txt');
|
|
||||||
const bgMusicPath = path.join(__dirname, '..', 'public', 'assets', 'audio', 'alegre.mp3');
|
|
||||||
const outputFilePath = path.join(__dirname, '..', 'public', 'generated-media', 'test_video.mp4');
|
|
||||||
|
|
||||||
const duration = 3;
|
|
||||||
const totalDuration = 6;
|
|
||||||
|
|
||||||
// Cria pasta generated-media se não existir
|
|
||||||
const mediaDir = path.dirname(outputFilePath);
|
|
||||||
if (!fs.existsSync(mediaDir)) {
|
|
||||||
fs.mkdirSync(mediaDir, { recursive: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Usar camila_prof.png duas vezes
|
|
||||||
const testImg = path.join(__dirname, '..', 'public', 'assets', 'camila_prof.png');
|
|
||||||
|
|
||||||
let concatContent = `file '${testImg}'\nduration ${duration}\nfile '${testImg}'\nduration ${duration}\nfile '${testImg}'\n`;
|
|
||||||
fs.writeFileSync(concatFilePath, concatContent);
|
|
||||||
|
|
||||||
const ffmpegCommand = `ffmpeg -y -f concat -safe 0 -i "${concatFilePath}" -i "${bgMusicPath}" -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest -t ${totalDuration} "${outputFilePath}"`;
|
|
||||||
console.log('Executando:', ffmpegCommand);
|
|
||||||
|
|
||||||
exec(ffmpegCommand, (error, stdout, stderr) => {
|
|
||||||
console.log('STDOUT:', stdout);
|
|
||||||
console.error('STDERR:', stderr);
|
|
||||||
if (error) {
|
|
||||||
console.error('Erro de execução:', error);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
console.log('Vídeo gerado com sucesso em:', outputFilePath);
|
|
||||||
process.exit(0);
|
|
||||||
});
|
|
||||||
Reference in New Issue
Block a user