Imprimir
Profissional prestou serviços simultaneamente para diversas empresas, condenadas, de forma subsidiária, a pagar verbas trabalhistas
Resumo
A 5ª Turma do TST reconheceu que operadoras de saúde são responsáveis, de forma subsidiária, pelo pagamento de verbas trabalhistas a uma psicóloga que prestou serviços simultaneamente a várias empresas.
Conforme a decisão, a dificuldade de delimitar o tempo de trabalho para cada empresa não isenta as tomadoras de serviço da obrigação.
Os valores a serem pagos serão determinados na fase de liquidação da sentença, respeitando os períodos de prestação de serviços.
20/8/2025 – A Quinta Turma do Tribunal Superior do Trabalho declarou a responsabilidade subsidiária de várias tomadoras de serviço, que eram operadoras de saúde, pelo pagamento das parcelas trabalhistas reconhecidas em juízo a uma psicóloga. O colegiado, que aplicou ao caso a jurisprudência do TST, determinou que a quantificação dos valores devidos deve ser apurada na fase de liquidação de sentença, observando-se os períodos de vigência dos contratos de prestação de serviços.
A jurisprudência do TST sobre o tema, conforme a decisão, é de que, quando há prestação de serviço para vários tomadores simultaneamente, a dificuldade de delimitar a quantidade do trabalho empreendido em favor de cada empresa não justifica o afastamento da responsabilidade subsidiária das empresas que foram favorecidas com o trabalho do empregado. O argumento da dificuldade havia sido utilizado pelos planos de saúde para buscarem isenção para o pagamento de verbas salariais à psicóloga.
Pejotização, rescisão indireta e responsabilização de operadoras de saúde
A profissional requereu o reconhecimento de vínculo de emprego com a Emotional Care Neuropsiquiatria Integrada S.A. de 1º de maio a 30 de outubro de 2023. Alegou que trabalhou sem registro na carteira de trabalho como psicóloga, porque “a empresa utilizou o expediente fraudulento de contratação por meio de pessoa jurídica”. Ao contestar a reclamação, a Emotional negou o vínculo empregatício, argumentando legalidade na pejotização.
A psicóloga requereu ainda o reconhecimento da rescisão indireta do contrato de trabalho, porque a empresa deixou de efetuar os pagamentos devidos. Além disso, pleiteou a responsabilização das empresas Sul América Serviços de Saúde S.A., Amil Assistência Médica Internacional S.A., Central Nacional Unimed Cooperativa Central, SAMI Assistência Médica Ltda. e Fundação CESP, alegando prestação de serviços em favor delas.
Vínculo de emprego reconhecido
O juízo da 65ª Vara do Trabalho de São Paulo reconheceu o vínculo de emprego e destacou que o Supremo Tribunal Federal admite a pejotização, mas desde que o contrato seja real, ou seja, que não haja relação de emprego, ressaltando que a ADPF 324 e o Tema 725, citados defensivamente pelas empresas, não legitimaram o contrato firmado com a psicóloga. Para o juízo, esse documento mostra o intuito de dissimular a relação de emprego. De forma detalhada, a sentença assinalou que aquele era um contrato de adesão, sobre o qual a profissional liberal não teve ingerência, reduzindo sua autonomia e a paridade das partes, que deveria existir se fossem duas pessoas jurídicas em uma relação comercial real.
Subordinação
Ao examinar os requisitos para a caracterização de vínculo de emprego, assinalou que o próprio contrato denunciava a subordinação, porque foi fixada uma série de obrigações e diretrizes relacionadas ao modo como deveria ocorrer a prestação de serviços, esvaziando a autonomia da trabalhadora. Entre as obrigações, constavam reagendamentos somente “por justo motivo”; fixação de prazo limite para reagendamento, sob pena de não remuneração do trabalho efetivamente prestado; obrigatoriedade de atualização diária do sistema de prontuário; obtenção de número de autorização fornecida pela empresa contratante, sob pena de não remuneração do trabalho efetivamente prestado; e obrigatoriedade de utilização exclusiva do sistema da Emotional Care.
Além disso, salientou a obrigatoriedade de apresentação de atestados médicos para justificar ausências, o que a impossibilitava de se fazer substituir, o que denotava pessoalidade. Por outro lado, apontou o fornecimento de ambiente de trabalho presencial, cabendo à psicóloga apenas o fornecimento de seus serviços, o que demonstrou também a natureza eminentemente assalariada/subordinada clássica celetista. A sentença também reconheceu a rescisão indireta, porque a empresa juntou as notas fiscais emitidas pela psicóloga, mas apenas comprovantes parciais de pagamentos, em valor aquém do devido, conduta que o juízo considerou suficientemente grave para motivar a ruptura do contrato de trabalho.
Responsabilização dos planos de saúde
Quanto à responsabilização subsidiária dos planos de saúde, o juízo entendeu que ela ficou comprovada pelo contrato entre as empresas e pelos documentos juntados aos autos. Salientou que não é por ser operadora de saúde que teria afastada sua responsabilização, pois a prestação de serviços em favor de clientes das operadoras, por meio da Emotional, atraiu a responsabilidade das tomadoras de serviço, beneficiárias diretas do trabalho humano prestado.
As empresas recorreram ao Tribunal Regional do Trabalho da 2ª Região (SP), que manteve a sentença em sua maior parte, apenas afastando a responsabilização das operadoras de saúde. O TRT observou que a psicóloga admitiu que, no exercício de suas atribuições, prestava serviços às operadoras de saúde de forma simultânea. Para o Regional, essa circunstância impedia delimitar a responsabilidade de cada uma das beneficiárias indiretas. Assim, retirou a responsabilidade pelos títulos deferidos na condenação em relação às empresas Sul América, Amil, Unimed, SAMI e Fundação CESP.
Contrariedade à jurisprudência do TST
O relator na Quinta Turma do recurso de revista da psicóloga, ministro Breno Medeiros, destacou que o TRT, ao afastar a responsabilidade subsidiária das operadoras de saúde, decidiu de forma contrária ao entendimento pacificado no TST.
Segundo o ministro, a jurisprudência do TST é firme no sentido de que, “no caso de prestação de serviço para vários tomadores simultaneamente, o fato de não ser possível delimitar o quanto de trabalho que foi empreendido em favor de cada empresa não pode ensejar o afastamento da responsabilidade subsidiária das empresas que foram favorecidas com trabalho do empregado”.
Ele citou diversos precedentes, inclusive da Subseção I Especializada em Dissídios Individuais (SDI-1), uniformizadora da jurisprudência entre as turmas do TST, em que, segundo o ministro Cláudio Brandão, relator do caso, quando não é possível a exata delimitação do período no qual o empregado trabalhou nas dependências da empresa, “não ficará prejudicado o pleito da responsabilidade subsidiária, devendo ser consideradas as datas dos instrumentos firmados entre as partes para prestação dos serviços e, na falta destes, o interregno informado na inicial”.
A Quinta Turma, então, admitiu o recurso de revista da psicóloga, porque a decisão do TRT contrariou a Súmula 331, inciso IV, do TST. No mérito, declarou a responsabilidade subsidiária das tomadoras de serviço pela satisfação das parcelas trabalhistas reconhecidas em juízo, devendo ser apurada na fase de liquidação de sentença a quantificação dos valores devidos, observando-se os períodos de vigência dos contratos de prestação de serviços.
(Lourdes Tavares/GS)
Processo: RR-1001710-55.2023.5.02.0065
Receba nossos conteúdos
Quer receber as notícias do TST em seu email? Assine a nossa newsletter.
Se quiser receber as notícias em seu WhatsApp, faça parte da comunidade do TST no aplicativo. Atenção: ao ingressar, os demais membros não terão acesso ao seu contato. Os envios de conteúdo são realizados uma vez por dia, em dias úteis.
Esta matéria é meramente informativa.
Permitida a reprodução mediante citação da fonte.
Secretaria de Comunicação Social
Tribunal Superior do Trabalho
Tel. (61) 3043-4907
secom@tst.jus.br
×
1 / 1
‹
›
Mais detalhes
Número de visualizações
5
Visualizações
// Objeto para armazenar dados das imagens por grupo
const imageGalleries = {};
let currentModalIndex = 0;
let currentGalleryGroup = 0;
// Coletar dados das imagens do DOM por grupo, SEMPRE usando a ordem atual do DOM
function initGalleryCustom() {
// Limpar dados anteriores
Object.keys(imageGalleries).forEach(key => delete imageGalleries[key]);
console.log(‘Inicializando galerias baseado na ordem atual do DOM…’);
// SEMPRE usar a ordem atual do DOM, ignorar scripts JSON após reordenação
const galleryContainers = document.querySelectorAll(‘.gallery-container-custom’);
galleryContainers.forEach((container) => {
const groupId = container.getAttribute(‘data-gallery-group’);
const thumbnails = container.querySelectorAll(‘.thumbnail’);
imageGalleries[groupId] = [];
// Coletar imagens na ordem atual do DOM
thumbnails.forEach((img, index) => {
imageGalleries[groupId].push({
src: img.src,
alt: img.alt,
fileEntryId: img.getAttribute(‘data-fileentryid’),
imageIndex: index, // Usar índice atual do DOM
originalOrder: parseInt(img.getAttribute(‘data-original-order’)) || index
});
});
console.log(‘Grupo ‘ + groupId + ‘ carregado com ‘ + imageGalleries[groupId].length + ‘ imagens (ordem DOM)’);
});
console.log(‘Galerias inicializadas:’, imageGalleries);
// Atualizar contadores nos títulos
updateGalleryTitles();
// Recriar os atributos onclick com os índices corretos
updateOnClickHandlers();
}
// Atualizar os handlers onclick para refletir a ordem atual
function updateOnClickHandlers() {
const galleryContainers = document.querySelectorAll(‘.gallery-container-custom’);
galleryContainers.forEach((container) => {
const groupId = container.getAttribute(‘data-gallery-group’);
const thumbnails = container.querySelectorAll(‘.thumbnail’);
thumbnails.forEach((img, index) => {
// Atualizar o data-image-index para refletir a posição atual
img.setAttribute(‘data-image-index’, index);
// Remover o onclick antigo e adicionar o novo
img.onclick = null;
img.onclick = function() {
openModalCustom(index, groupId);
};
console.log(‘Thumbnail ‘ + index + ‘ do grupo ‘ + groupId + ‘ atualizado’);
});
});
}
// Método fallback – REMOVIDO pois agora sempre usamos DOM
// function fallbackLoadGallery(groupId) { … }
// Atualizar títulos das galerias com contadores corretos
function updateGalleryTitles() {
Object.keys(imageGalleries).forEach(groupId => {
const container = document.querySelector(‘.gallery-container-custom[data-gallery-group=”‘ + groupId + ‘”]’);
if (container) {
const title = container.querySelector(‘.gallery-header h3’);
const imageCount = imageGalleries[groupId].length;
if (title && imageCount > 0) {
title.textContent = ‘Mais imagens (‘ + imageCount + ‘)’;
}
}
});
}
// Função para reinicializar quando a ordem dos campos muda
function handleFieldReorder() {
console.log(‘Reordenação detectada, reinicializando galerias…’);
// Fechar modal se estiver aberto
const modal = document.getElementById(‘imageModalCustom’);
if (modal && modal.style.display === ‘block’) {
closeModalCustom();
}
// Atualizar IDs e reinicializar
updateGroupIds();
initGalleryCustom();
}
// Atualizar modal com nova imagem
function updateModalImage() {
const modalImage = document.getElementById(‘modalImageCustom’);
const modalDescription = document.getElementById(‘modalDescriptionCustom’);
const modalCounter = document.getElementById(‘modalCounterCustom’);
const modalPrev = document.getElementById(‘modalPrevCustom’);
const modalNext = document.getElementById(‘modalNextCustom’);
const currentGallery = imageGalleries[currentGalleryGroup];
if (currentGallery && currentGallery[currentModalIndex]) {
const image = currentGallery[currentModalIndex];
modalImage.src = image.src;
modalImage.alt = image.alt;
modalDescription.textContent = image.alt;
modalCounter.textContent = (currentModalIndex + 1) + ‘ / ‘ + currentGallery.length;
// Atualizar estado dos botões
modalPrev.disabled = (currentModalIndex === 0);
modalNext.disabled = (currentModalIndex === currentGallery.length – 1);
console.log(‘Modal atualizado – Grupo:’, currentGalleryGroup, ‘Índice:’, currentModalIndex, ‘Imagem:’, image.src);
}
}
// Abrir modal
function openModalCustom(index, galleryGroup) {
const modal = document.getElementById(‘imageModalCustom’);
currentGalleryGroup = galleryGroup;
currentModalIndex = index;
console.log(‘Abrindo modal – Grupo:’, galleryGroup, ‘Índice:’, index);
if (imageGalleries[galleryGroup] && imageGalleries[galleryGroup][index]) {
updateModalImage();
modal.style.display = ‘block’;
document.body.style.overflow = ‘hidden’;
} else {
console.error(‘Imagem não encontrada:’, galleryGroup, index, imageGalleries);
}
}
// Próxima imagem no modal
function nextImageModal() {
const currentGallery = imageGalleries[currentGalleryGroup];
if (currentGallery && currentModalIndex 0) {
currentModalIndex–;
updateModalImage();
}
}
// Fechar modal
function closeModalCustom() {
const modal = document.getElementById(‘imageModalCustom’);
modal.style.display = ‘none’;
document.body.style.overflow = ‘auto’;
}
// Event listeners
document.addEventListener(‘DOMContentLoaded’, function() {
// Inicializar galeria
setTimeout(initGalleryCustom, 100);
// Fechar modal clicando fora da imagem
const modal = document.getElementById(‘imageModalCustom’);
if (modal) {
modal.addEventListener(‘click’, function(e) {
if (e.target === modal) {
closeModalCustom();
}
});
}
});
// Escutar eventos de reordenação dos campos repetíveis
document.addEventListener(‘repeatableFieldReordered’, function(e) {
console.log(‘Campo reordenado detectado:’, e.detail);
// Aguardar um pouco para garantir que o DOM foi atualizado
setTimeout(function() {
console.log(‘Detectando e corrigindo duplicação de conteúdo…’);
// Primeiro, detectar e corrigir duplicação de matérias
fixDuplicatedContent();
// Depois atualizar galerias
updateGroupIds();
initGalleryCustom();
// Se o modal estiver aberto, fechar para evitar inconsistências
const modal = document.getElementById(‘imageModalCustom’);
if (modal && modal.style.display === ‘block’) {
closeModalCustom();
console.log(‘Modal fechado devido à reordenação’);
}
}, 200);
});
// Escutar eventos de reordenação dos campos repetíveis
document.addEventListener(‘repeatableFieldReordered’, function(e) {
console.log(‘Campo reordenado detectado:’, e.detail);
handleFieldReorder();
});
// Escutar evento de mudança de ordem do conteúdo
document.addEventListener(‘contentOrderChanged’, function(e) {
console.log(‘Ordem do conteúdo alterada:’, e.detail);
handleContentOrderChange(e.detail);
});
// Lidar com mudança na ordem do conteúdo
function handleContentOrderChange(detail) {
console.log(‘Processando mudança de ordem do conteúdo…’);
// Fechar modal se estiver aberto
const modal = document.getElementById(‘imageModalCustom’);
if (modal && modal.style.display === ‘block’) {
closeModalCustom();
}
// Aguardar e reinicializar completamente
setTimeout(function() {
console.log(‘Reconstruindo galerias após mudança de conteúdo…’);
// Limpar tudo e reconstruir
rebuildGalleries();
}, 300);
}
// Reconstruir galerias completamente
function rebuildGalleries() {
// Limpar dados existentes
Object.keys(imageGalleries).forEach(key => delete imageGalleries[key]);
// Encontrar todas as galerias novamente
const galleryContainers = document.querySelectorAll(‘.gallery-container-custom’);
console.log(‘Reconstruindo ‘ + galleryContainers.length + ‘ galerias’);
galleryContainers.forEach((container, index) => {
// Redefinir IDs de grupo sequencialmente
container.setAttribute(‘data-gallery-group’, index);
const thumbnails = container.querySelectorAll(‘.thumbnail’);
imageGalleries[index] = [];
// Recriar dados da galeria
thumbnails.forEach((img, imgIndex) => {
// Atualizar atributos
img.setAttribute(‘data-gallery-group’, index);
img.setAttribute(‘data-image-index’, imgIndex);
// Recriar onclick
img.onclick = function() {
openModalCustom(imgIndex, index);
};
// Adicionar aos dados
imageGalleries[index].push({
src: img.src,
alt: img.alt,
fileEntryId: img.getAttribute(‘data-fileentryid’),
imageIndex: imgIndex,
originalOrder: imgIndex
});
});
// Atualizar título
const title = container.querySelector(‘.gallery-header h3’);
if (title && imageGalleries[index].length > 0) {
title.textContent = ‘Mais imagens (‘ + imageGalleries[index].length + ‘)’;
}
console.log(‘Galeria ‘ + index + ‘ reconstruída com ‘ + imageGalleries[index].length + ‘ imagens’);
});
console.log(‘Reconstrução concluída:’, imageGalleries);
}
// Função principal para lidar com reordenação (simplificada)
function handleFieldReorder() {
console.log(‘Processando reordenação de campos…’);
// Fechar modal se estiver aberto
const modal = document.getElementById(‘imageModalCustom’);
if (modal && modal.style.display === ‘block’) {
closeModalCustom();
}
// Aguardar e reinicializar
setTimeout(function() {
console.log(‘Reinicializando galerias…’);
updateGroupIds();
initGalleryCustom();
}, 200);
}
// Atualizar os IDs dos grupos após reordenação para manter consistência
function updateGroupIds() {
const galleryContainers = document.querySelectorAll(‘.gallery-container-custom’);
galleryContainers.forEach((container, newIndex) => {
const oldGroupId = container.getAttribute(‘data-gallery-group’);
const newGroupId = newIndex.toString();
if (oldGroupId !== newGroupId) {
console.log(‘Atualizando grupo ID de ‘ + oldGroupId + ‘ para ‘ + newGroupId);
// Atualizar o container
container.setAttribute(‘data-gallery-group’, newGroupId);
// Atualizar todos os thumbnails deste grupo
const thumbnails = container.querySelectorAll(‘.thumbnail’);
thumbnails.forEach((img, imgIndex) => {
img.setAttribute(‘data-gallery-group’, newGroupId);
img.setAttribute(‘data-image-index’, imgIndex);
});
// Atualizar script JSON se existir
const script = document.querySelector(‘script.gallery-data[data-gallery-group=”‘ + oldGroupId + ‘”]’);
if (script) {
script.setAttribute(‘data-gallery-group’, newGroupId);
}
}
});
}
// Observador adicional para mudanças no DOM relacionadas aos campos de imagem
const imageFieldObserver = new MutationObserver(function(mutations) {
let shouldReinitialize = false;
mutations.forEach(function(mutation) {
if (mutation.type === ‘childList’) {
mutation.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
// Verificar se é um campo de imagem ou contém campos de imagem
if (node.classList && node.classList.contains(‘lfr-forms__form-view-field-repeatable-dnd’) ||
node.querySelector && node.querySelector(‘.gallery-container-custom’)) {
shouldReinitialize = true;
}
}
});
mutation.removedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.classList && node.classList.contains(‘lfr-forms__form-view-field-repeatable-dnd’) ||
node.querySelector && node.querySelector(‘.gallery-container-custom’)) {
shouldReinitialize = true;
}
}
});
}
});
if (shouldReinitialize) {
setTimeout(initGalleryCustom, 300);
}
});
// Observar mudanças no body para capturar reordenações
imageFieldObserver.observe(document.body, {
childList: true,
subtree: true
});
// Navegação por teclado
document.addEventListener(‘keydown’, function(e) {
const modal = document.getElementById(‘imageModalCustom’);
if (modal && modal.style.display === ‘block’) {
if (e.key === ‘Escape’) {
closeModalCustom();
} else if (e.key === ‘ArrowLeft’) {
prevImageModal();
} else if (e.key === ‘ArrowRight’) {
nextImageModal();
}
}
});
$(‘#lightbox-jltb_ .slider-gallery-wrapper img’).hover(
function() {
const $text=$($($(this).parent()).next());
$text.hasClass(‘inside-description’) && $text.fadeTo( “slow” , 0);
}, function() {
const $text=$($($(this).parent()).next());
$text.hasClass(‘inside-description’) && $text.fadeTo( “slow” , 1);
}
);
$(document).ready(function() {
});
Liferay.on(“allPortletsReady”, function() {
$(‘#header_custom_print’).attr(‘href’, $(“[title*=’Imprimir’]”).children().attr(‘href’));
})
.banner-final-noticia {
margin: 25px auto 20px auto;
padding: 15px 0;
text-align: center;
width: 100%;
max-width: 800px; /* Largura reduzida */
border-top: 1px solid #e6e6e6;
border-bottom: 1px solid #f0f0f0;
}
.banner-final-noticia a {
display: inline-block;
width: 100%;
text-decoration: none;
transition: all 0.3s ease;
}
.banner-final-noticia a:hover {
transform: translateY(-1px);
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1);
}
.banner-final-noticia .banner-image {
width: 100%;
height: auto;
min-height: 80px; /* Altura mínima reduzida */
max-height: 150px; /* Altura máxima reduzida */
object-fit: cover; /* Mantém proporção e preenche o espaço */
object-position: center;
border-radius: 6px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
cursor: pointer;
}
.banner-final-noticia .banner-image:hover {
opacity: 0.9;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
}
.banner-final-noticia .banner-legenda {
margin-top: 10px;
font-size: 13px;
font-style: italic;
color: #666;
line-height: 1.4;
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
/* === RESPONSIVIDADE === */
/* Tablets */
@media (max-width: 1024px) {
.banner-final-noticia {
margin: 20px auto 15px auto;
padding: 12px 10px;
max-width: 90%;
}
.banner-final-noticia .banner-image {
min-height: 70px;
max-height: 120px;
border-radius: 5px;
}
.banner-final-noticia .banner-legenda {
font-size: 13px;
max-width: 90%;
}
}
/* Mobile */
@media (max-width: 768px) {
.banner-final-noticia {
margin: 15px auto 12px auto;
padding: 10px 5px;
max-width: 95%;
}
.banner-final-noticia .banner-image {
min-height: 60px;
max-height: 100px;
border-radius: 4px;
}
.banner-final-noticia .banner-legenda {
font-size: 12px;
margin-top: 8px;
padding: 0 10px;
}
.banner-final-noticia a:hover {
transform: none; /* Remove efeito hover no mobile */
}
}
/* Mobile pequeno */
@media (max-width: 480px) {
.banner-final-noticia {
margin: 12px auto 10px auto;
padding: 8px 0;
}
.banner-final-noticia .banner-image {
min-height: 50px;
max-height: 80px;
}
.banner-final-noticia .banner-legenda {
font-size: 11px;
padding: 0 15px;
}
}
.gallery-container-custom {
max-width: 800px;
margin: 20px auto;
background: white;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
overflow: hidden;
font-family: Arial, sans-serif;
}
.gallery-header {
background: #e8e8e8;
padding: 15px;
border-bottom: 2px dotted #ccc;
}
.gallery-header h3 {
color: #333;
font-size: 14px;
margin: 0 0 10px 0;
}
.thumbnail-container {
display: flex;
gap: 10px;
flex-wrap: wrap;
justify-content: flex-start;
}
/* Adaptação automática baseada na quantidade de imagens */
.thumbnail-container.images-1 {
justify-content: center;
}
.thumbnail-container.images-2 {
justify-content: center;
}
.thumbnail-container.images-3 {
justify-content: center;
}
.thumbnail-container.images-4 {
justify-content: center;
}
.thumbnail-container.images-5-plus {
justify-content: flex-start;
}
/* Tamanhos adaptativos dos thumbnails */
.thumbnail-container.images-1 .thumbnail {
width: 80px;
height: 80px;
}
.thumbnail-container.images-2 .thumbnail {
width: 70px;
height: 70px;
}
.thumbnail-container.images-3 .thumbnail {
width: 65px;
height: 65px;
}
.thumbnail-container.images-4 .thumbnail {
width: 60px;
height: 60px;
}
.thumbnail-container.images-5-plus .thumbnail {
width: 55px;
height: 55px;
}
.thumbnail {
width: 60px;
height: 60px;
border-radius: 5px;
object-fit: cover;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
border: 2px solid transparent;
}
.thumbnail:hover {
transform: scale(1.05);
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
border-color: #007bff;
}
/* Modal Styles */
.image-modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.9);
animation: fadeIn 0.3s;
}
.modal-content-custom {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
max-width: 90%;
max-height: 90%;
text-align: center;
}
.modal-image {
max-width: 100%;
max-height: 80vh;
object-fit: contain;
border-radius: 10px;
box-shadow: 0 4px 20px rgba(255,255,255,0.1);
}
.modal-description {
background: white;
color: #333;
padding: 15px;
margin-top: 15px;
border-radius: 8px;
font-size: 16px;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.modal-close {
position: absolute;
top: 15px;
right: 25px;
color: white;
font-size: 35px;
font-weight: bold;
cursor: pointer;
transition: color 0.3s;
z-index: 1001;
}
.modal-close:hover {
color: #007bff;
}
/* Navegação no Modal */
.modal-nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.7);
color: white;
border: none;
width: 50px;
height: 50px;
border-radius: 50%;
cursor: pointer;
font-size: 24px;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.3s;
z-index: 1002;
}
.modal-nav:hover {
background: rgba(0,0,0,0.9);
}
.modal-nav:disabled {
opacity: 0.3;
cursor: not-allowed;
}
.modal-prev {
left: 20px;
}
.modal-next {
right: 20px;
}
.modal-counter {
position: absolute;
top: 20px;
left: 50%;
transform: translateX(-50%);
background: rgba(0,0,0,0.7);
color: white;
padding: 8px 16px;
border-radius: 20px;
font-size: 14px;
z-index: 1002;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Responsive Design */
@media (max-width: 768px) {
.gallery-container-custom {
margin: 10px;
}
/* Ajustes para mobile – thumbnails menores */
.thumbnail-container.images-1 .thumbnail {
width: 60px;
height: 60px;
}
.thumbnail-container.images-2 .thumbnail {
width: 55px;
height: 55px;
}
.thumbnail-container.images-3 .thumbnail {
width: 50px;
height: 50px;
}
.thumbnail-container.images-4 .thumbnail {
width: 45px;
height: 45px;
}
.thumbnail-container.images-5-plus .thumbnail {
width: 40px;
height: 40px;
}
.modal-close {
font-size: 28px;
top: 10px;
right: 15px;
}
.modal-description {
font-size: 14px;
padding: 12px;
}
.modal-nav {
width: 40px;
height: 40px;
font-size: 20px;
}
.modal-prev {
left: 10px;
}
.modal-next {
right: 10px;
}
.modal-counter {
font-size: 12px;
padding: 6px 12px;
}
}
@media (max-width: 480px) {
/* Para telas muito pequenas */
.thumbnail-container {
gap: 8px;
}
.thumbnail-container.images-5-plus .thumbnail {
width: 35px;
height: 35px;
}
.gallery-header h3 {
font-size: 12px;
}
}
Source: TST

Leave a Comment