/* * Copyright (C) 2026 Fluxer Contributors * * This file is part of Fluxer. * * Fluxer is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fluxer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Fluxer. If not, see . */ .gridItem { position: relative; background-color: var(--background-secondary); border: none; padding: 0; margin: 0; font: inherit; color: inherit; text-align: inherit; line-height: inherit; max-width: 100%; width: 100%; height: auto; min-height: 1px; min-width: 1px; overflow: hidden; border-radius: var(--media-border-radius); cursor: pointer; display: flex; align-items: center; justify-content: center; } .clickableButton { cursor: pointer; height: 100%; width: 100%; border: 0; background-color: transparent; padding: 0; } .mediaContainer { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; } .loadingOverlay { position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; overflow: hidden; } .placeholderImage { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; min-width: 100%; min-height: 100%; max-width: 100%; } .mediaImage { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; min-width: 100%; min-height: 100%; max-width: 100%; transition: opacity 0.2s; opacity: 1; } .mediaImageHidden { opacity: 0; } .mediaBlurred { filter: blur(12px); opacity: 0.15; } .nsfwOverlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background-color: var(--spoiler-overlay-color); backdrop-filter: blur(12px); z-index: 3; padding: 0.5rem; text-align: center; } .playButtonOverlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; z-index: 2; } .playButton { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 50%; background-color: rgba(0, 0, 0, 0.75); } .playButton svg { color: var(--text-on-brand-primary); } .audioPlaceholder { width: 100%; height: 100%; max-width: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--background-tertiary) 0%, var(--background-secondary-alt) 100%); overflow: hidden; position: relative; } .audioPlaceholder svg { width: 40%; height: 40%; max-width: 80px; max-height: 80px; opacity: 0.6; color: var(--text-tertiary); flex-shrink: 0; } .gifIndicator { position: absolute; top: 8px; left: 8px; z-index: 10; border-radius: 4px; background-color: rgba(0, 0, 0, 0.6); padding: 4px 8px; font-size: 0.875rem; font-weight: 600; color: var(--text-on-brand-primary); line-height: 1; }