diff --git a/src/routes/+page.server.js b/src/routes/+page.server.js index 2349d53..818e353 100755 --- a/src/routes/+page.server.js +++ b/src/routes/+page.server.js @@ -12,6 +12,12 @@ function getHeroBackgroundTiles() { const workspaceHeight = 240 const gapLength = 32 const colors = [baseColors.blue[500], baseColors.cyan[400], baseColors.sky[500]] + const images = [ + '/imgs/chan/joy.svg', + '/imgs/chan/surprise.svg', + '/imgs/chan/tongueout.svg', + '/imgs/waylnad.webp' + ] const leftColumns = Array.from({ length: 3 }, () => generateRow(workspacesPerRow)) @@ -50,11 +56,16 @@ function getHeroBackgroundTiles() { } function generateTile() { - return { color: getRandomColor() } + return { color: getRandomColor(), image: Math.random() > 0.7 ? getRandomImage() : undefined } } /** @returns {string} */ function getRandomColor() { return colors.at(Math.floor(Math.random() * colors.length)) } + + /** @returns {string} */ + function getRandomImage() { + return images.at(Math.floor(Math.random() * images.length)) + } } diff --git a/src/routes/HeroBackground.svelte b/src/routes/HeroBackground.svelte index 9c4c40b..ebcb522 100755 --- a/src/routes/HeroBackground.svelte +++ b/src/routes/HeroBackground.svelte @@ -20,8 +20,13 @@
{#each workspace as tiles}
- {#each tiles as { color }} -
+ {#each tiles as { color, image }} +
{/each}
{/each} @@ -38,8 +43,13 @@
{#each workspace as tiles}
- {#each tiles as { color }} -
+ {#each tiles as { color, image }} +
{/each}
{/each} @@ -169,6 +179,23 @@ animation: reveal-artwork_tile calc(var(--reveal-length) + 280ms) cubic-bezier(1, -0.4, 0.165, 1) forwards; } + + &.with-image::after { + content: ' '; + position: absolute; + inset: 0; + background-image: var(--image); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + opacity: 0; + transition: opacity 1520ms ease-in-out; + } + &:hover::after { + animation: reveal-artwork var(--reveal-length) ease-in-out 400ms both; + opacity: 1; + transition: opacity 1520ms ease-in-out; + } } .top-light { @@ -187,4 +214,33 @@ pointer-events: none; contain: strict; } + + @keyframes reveal-artwork { + 0% { + opacity: 0%; + filter: brightness(1); + } + 50% { + filter: brightness(1.45); + opacity: 40%; + } + 100% { + filter: brightness(1); + opacity: 100%; + } + } + @keyframes reveal-artwork_tile { + 0% { + opacity: inherit; + scale: 1; + } + 50% { + filter: brightness(1.5); + scale: 1.1; + } + 100% { + opacity: 100%; + scale: 1; + } + }