Added blurred backdrop to scene tile banners to compensate for lack of upscaling.

This commit is contained in:
2026-02-07 01:11:53 +01:00
parent a3072a4967
commit db43102487
2 changed files with 35 additions and 13 deletions

View File

@@ -29,15 +29,18 @@
:href="campaign.url || campaign.affiliate?.url" :href="campaign.url || campaign.affiliate?.url"
target="_blank" target="_blank"
class="campaign" class="campaign"
:style="{ background: backdrop && `url(${bannerSrc})` }"
data-umami-event="campaign-click" data-umami-event="campaign-click"
:data-umami-event-campaign-id="`${campaign.entity.slug}-${campaign.id}`" :data-umami-event-campaign-id="`${campaign.entity.slug}-${campaign.id}`"
> >
<img <div class="campaign-overlay">
:src="bannerSrc" <img
:width="campaign.banner.width" :src="bannerSrc"
:height="campaign.banner.height" :width="campaign.banner.width"
class="campaign-banner" :height="campaign.banner.height"
> class="campaign-banner"
>
</div>
</a> </a>
</template> </template>
@@ -52,6 +55,10 @@ const props = defineProps({
type: Object, type: Object,
default: null, default: null,
}, },
backdrop: {
type: Boolean,
default: false,
},
}); });
// console.log(props.campaign); // console.log(props.campaign);
@@ -76,7 +83,8 @@ const bannerSrc = (() => {
height: 100%; height: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
/* align-items: center; */ border-radius: .25rem;
overflow: hidden;
} }
.frame { .frame {
@@ -84,11 +92,27 @@ const bannerSrc = (() => {
overflow: hidden; overflow: hidden;
} }
.campaign-overlay {
width: 100%;
height: 100%;
display: flex;
box-sizing: border-box;
padding: 4px; /* margin for drop shadow */
justify-content: center;
align-items: center;
backdrop-filter: blur(1rem) saturate(70%) brightness(125%);
}
.dark .campaign-overlay {
backdrop-filter: blur(1rem) saturate(70%) brightness(75%);
}
.campaign-banner { .campaign-banner {
height: auto; height: auto;
max-height: 100%; max-height: 100%;
max-width: 100%; max-width: 100%;
object-fit: contain; object-fit: contain;
filter: drop-shadow(0 0 2px var(--shadow-weak-10));
} }
.restricted { .restricted {

View File

@@ -167,7 +167,10 @@
v-if="item === 'campaign' && sceneCampaign" v-if="item === 'campaign' && sceneCampaign"
:key="`campaign-${item.id}`" :key="`campaign-${item.id}`"
> >
<Campaign :campaign="sceneCampaign" /> <Campaign
:campaign="sceneCampaign"
:backdrop="true"
/>
</li> </li>
<li <li
@@ -433,11 +436,6 @@ function setView(newView) {
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
gap: .5rem; gap: .5rem;
padding: .5rem 1rem 1rem 1rem; padding: .5rem 1rem 1rem 1rem;
:deep(.campaign) .campaign-banner {
border-radius: .25rem;
filter: drop-shadow(0 0 3px var(--shadow-weak-20));
}
} }
:deep(.campaign-meta) .campaign-banner, :deep(.campaign-meta) .campaign-banner,