diff --git a/dental-server/public/app.js b/dental-server/public/app.js index bad760b..5f15399 100644 --- a/dental-server/public/app.js +++ b/dental-server/public/app.js @@ -457,12 +457,11 @@ function patientCardHTML(p, index) { const doctor = p.doctor || '—'; const remark = p.remark || '—'; - // permite ao browser adiar miniaturas fora da viewport; - // sem thumb, mantém o gradiente de fallback. + // SEMPRE exibir imagem ou placeholder — thumb em primeiro plano, cinza como fallback + // loading="lazy" adia o download de miniaturas fora da viewport const preview = thumb - ? `` - : ''; - const previewStyle = thumb ? '' : ' style="background: linear-gradient(135deg,#667eea22,#764ba222);"'; + ? `` + : `
`; return `
diff --git a/dental-server/public/style.css b/dental-server/public/style.css index f4604ff..4b3f979 100644 --- a/dental-server/public/style.css +++ b/dental-server/public/style.css @@ -171,7 +171,7 @@ body { } .sidebar-footer { - padding: 12px 16px; + padding: 8px 12px; border-top: 1px solid var(--border-color); margin-top: auto; flex-shrink: 0; @@ -179,7 +179,7 @@ body { .logout-btn { width: 100%; - padding: 10px; + padding: 8px; background: transparent; border: 1px solid var(--glass-border); color: #a0aec0; @@ -188,10 +188,10 @@ body { display: flex; align-items: center; justify-content: center; - gap: 8px; + gap: 6px; font-family: 'Inter', sans-serif; font-weight: 500; - font-size: 0.92rem; + font-size: 0.85rem; transition: all 0.3s; } @@ -438,6 +438,19 @@ body { display: block; } +.preview-img-placeholder { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, #e2e8f0 0%, #cbd5e1 100%); + display: flex; + align-items: center; + justify-content: center; + color: #94a3b8; + font-size: 40px; +} + .image-card:hover .image-preview { transform: scale(1.03); } diff --git a/dental-server/routes/images.js b/dental-server/routes/images.js index 4980d85..fbe5028 100644 --- a/dental-server/routes/images.js +++ b/dental-server/routes/images.js @@ -44,7 +44,7 @@ router.post('/upload', async (req, res) => { let thumbFilename = null; try { - const thumbBuffer = await imageProcessor.getThumbnail(imageBuffer, 400, 400); + const thumbBuffer = await imageProcessor.getThumbnail(imageBuffer, 500, 500); thumbFilename = `thumb_${filename}`; await storage.saveImage(thumbFilename, thumbBuffer, clientName, patientName, false); } catch (e) { diff --git a/dental-server/server.js b/dental-server/server.js index 0f02b9e..e563cd1 100644 --- a/dental-server/server.js +++ b/dental-server/server.js @@ -906,10 +906,10 @@ io.on('connection', (socket) => { const filename = `${timestamp}_${data.metadata.guid}.png`; await storage.saveImage(filename, imageBuffer, clientName, patientName, false); - // Gerar e salvar miniatura (Thumbnail) + // Gerar e salvar miniatura (Thumbnail) — 500x500, qualidade 80% let thumbFilename = null; try { - const thumbBuffer = await imageProcessor.getThumbnail(imageBuffer, 400, 400); + const thumbBuffer = await imageProcessor.getThumbnail(imageBuffer, 500, 500); thumbFilename = `thumb_${filename}`; await storage.saveImage(thumbFilename, thumbBuffer, clientName, patientName, false); } catch (thumbErr) {