This commit is contained in:
Christofer 2023-09-10 10:09:06 +04:00
parent e4354a407c
commit 61b238b848
54 changed files with 2324 additions and 240 deletions

View file

@ -54,6 +54,7 @@
"@fontsource-variable/work-sans": "^5.0.9", "@fontsource-variable/work-sans": "^5.0.9",
"@fontsource/ibm-plex-mono": "^5.0.8", "@fontsource/ibm-plex-mono": "^5.0.8",
"clsx": "^2.0.0", "clsx": "^2.0.0",
"critical": "^5.1.1",
"interactjs": "^1.10.18", "interactjs": "^1.10.18",
"prettier-plugin-tailwindcss": "^0.5.4", "prettier-plugin-tailwindcss": "^0.5.4",
"remeda": "^1.26.0", "remeda": "^1.26.0",

File diff suppressed because it is too large Load diff

27
scripts/critical.mjs Executable file
View file

@ -0,0 +1,27 @@
import { generate } from 'critical'
generate({
inline: true,
base: 'build/',
src: 'index.html',
target: 'index-critical.html',
width: 1300,
height: 900
})
// generate({
// inline: true,
// base: 'build/',
// src: 'index.html',
// target: 'index.c.html',
// dimensions: [
// {
// width: 1200,
// height: 900
// },
// {
// width: 480,
// height: 900
// }
// ]
// })

View file

@ -0,0 +1,22 @@
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$parent_path"
find "../static/imgs/profile_pictures/" -type f \
\( -iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.bmp" -o -iname "*.jpeg" -o -iname "*.webp" \) -not -name "generated_*" -print0 |
while IFS= read -r -d '' filepath; do
echo "$filepath" gets blurred
directory=$(dirname "$filepath")
filename=$(basename "$filepath")
for SIZE in 100x100 64x64 48x48 32x32
do
generated_filename="${directory}/generated_${SIZE}-${filename}"
magick "$filepath" --resize "${SIZE}" "${generated_filename}"
done
done

View file

@ -11,9 +11,9 @@
'primary' == type && 'bg-slate-200 text-black', 'primary' == type && 'bg-slate-200 text-black',
'outline' == type && 'bg-transparent text-white outline outline-2 outline-slate-200', 'outline' == type && 'bg-transparent text-white outline outline-2 outline-slate-200',
'fancyOutline' == type && 'fancy', 'fancyOutline' == type && 'fancy',
'md' == size && 'min-w-[5rem] px-4 py-2', 'md' == size && 'min-w-[5.5rem] px-4 py-2.5',
'lg' == size && 'min-w-[5rem] px-6 py-2.5 ', 'lg' == size && 'min-w-[5.5rem] px-6 py-3 ',
'xl' == size && 'min-w-[5rem] px-8 py-4 ', 'xl' == size && 'min-w-[5.5rem] px-8 py-4 ',
$$restProps.class $$restProps.class
) )
</script> </script>

View file

@ -24,7 +24,7 @@
<div class="pretitle">Developers</div> <div class="pretitle">Developers</div>
<ul class="flex flex-col gap-3 font-medium"> <ul class="flex flex-col gap-3 font-medium">
<li> <li>
<a href="https://github.com/vaxerski"> <a href="https://github.com/vaxerski" target="_blank">
Vaxerski <span Vaxerski <span
class="bg-gradient-to-r from-primary to-blue-500 bg-clip-text text-transparent" class="bg-gradient-to-r from-primary to-blue-500 bg-clip-text text-transparent"
>[ Lead Developer ]</span >[ Lead Developer ]</span
@ -47,9 +47,11 @@
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="pretitle">Links</div> <div class="pretitle">Links</div>
<ul class="flex flex-col gap-3 font-medium"> <ul class="flex flex-col gap-3 font-medium">
<li><a href="https://wiki.hyprland.org/">Wiki</a></li> <li><a href="https://wiki.hyprland.org/" target="_blank">Wiki</a></li>
<li> <li>
<a href="https://wiki.hyprland.org/Getting-Started/Master-Tutorial/">Get started</a> <a href="https://wiki.hyprland.org/Getting-Started/Master-Tutorial/" target="_blank"
>Get started</a
>
</li> </li>
<li><a href="/wall_of_fame">Hall of fame</a></li> <li><a href="/wall_of_fame">Hall of fame</a></li>
</ul> </ul>
@ -61,12 +63,17 @@
<li class=""> <li class="">
<a <a
href="https://discord.com/invite/hQ9XvMUjjr" href="https://discord.com/invite/hQ9XvMUjjr"
class="text-slate-400 hover:text-slate-200"><DiscordIcon class="h-12 w-12 " /></a class="text-slate-400 hover:text-slate-200"
aria-label="Join us on Discord"
target="_blank"><DiscordIcon class="h-12 w-12 " /></a
> >
</li> </li>
<li class=""> <li class="">
<a href="https://github.com/hyprwm/Hyprland" class="text-slate-400 hover:text-slate-200" <a
><GithubIcon class="h-12 w-12 " /></a href="https://github.com/hyprwm/Hyprland"
class="text-slate-400 hover:text-slate-200"
target="_blank"
aria-label="Go to our Github"><GithubIcon class="h-12 w-12 " /></a
> >
</li> </li>
</ul> </ul>
@ -79,7 +86,7 @@
</div> </div>
</div> </div>
<div class="gradient"></div> <div class="gradient" aria-hidden="true" />
</footer> </footer>
<style lang="postcss"> <style lang="postcss">

BIN
src/lib/images/community-bg.webp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View file

@ -17,7 +17,7 @@
/** @type {{image: string coordinates: [number, number] containerClass: string}[], size: number, quote?: string } */ /** @type {{image: string coordinates: [number, number] containerClass: string}[], size: number, quote?: string } */
const profiles = [ const profiles = [
{ {
image: '/imgs/profile_pictures/vaxry.gif', image: '/imgs/profile_pictures/vaxry.webp',
coordinates: [187, 296], coordinates: [187, 296],
size: 172, size: 172,
class: 'outline-red-500' class: 'outline-red-500'
@ -35,7 +35,7 @@
class: 'outline-orange-500' class: 'outline-orange-500'
}, },
{ {
image: '/imgs/profile_pictures/Mathisbuilder.png', image: '/imgs/profile_pictures/Mathisbuilder.webp',
coordinates: [568, 568], coordinates: [568, 568],
size: 120, size: 120,
class: 'outline-amber-500' class: 'outline-amber-500'
@ -65,7 +65,7 @@
class: 'outline-sky-500' class: 'outline-sky-500'
}, },
{ {
image: '/imgs/profile_pictures/loseardes77.gif', image: '/imgs/profile_pictures/loseardes77.webp',
coordinates: [24, 341], coordinates: [24, 341],
size: 49, size: 49,
class: 'outline-green-500' class: 'outline-green-500'
@ -175,7 +175,7 @@
</script> </script>
<section <section
class="relative flex flex-col items-center w-screen min-h-max h-[1100px] -mb-[200px]" class="relative -mb-[200px] flex h-[1100px] min-h-max w-screen flex-col items-center"
bind:this={sectionElement} bind:this={sectionElement}
> >
<Title> <Title>
@ -186,14 +186,15 @@
</span> </span>
</Title> </Title>
<div class="flex flex-col items-center gap-2 group mt-16"> <div class="group mt-16 flex flex-col items-center gap-2">
<a <a
class="discord p-4" class="discord p-4"
href="https://discord.com/invite/hQ9XvMUjjr" href="https://discord.com/invite/hQ9XvMUjjr"
target="_blank" target="_blank"
rel="noopener" rel="noopener"
aria-label="Join us on Discord"
> >
<DiscordIcon class="w-full h-full " /> <DiscordIcon class="h-full w-full " />
</a> </a>
<a href="https://discord.com/invite/hQ9XvMUjjr"> <a href="https://discord.com/invite/hQ9XvMUjjr">
@ -202,7 +203,7 @@
</div> </div>
<div class="absolute w-[1024px]"> <div class="absolute w-[1024px]">
<div class="flex flex-wrap gap-4 origin-bottom-right h-full"> <div class="flex h-full origin-bottom-right flex-wrap gap-4">
{#each profiles as { onDragEnd, onDragStart, onHover, ...props }} {#each profiles as { onDragEnd, onDragStart, onHover, ...props }}
<DiscordProfilePicture <DiscordProfilePicture
{...props} {...props}
@ -213,7 +214,7 @@
{/each} {/each}
</div> </div>
</div> </div>
<img src={background} class="absolute top-0 min-w-[1400px] -z-10" alt="" aria-hidden="true" /> <img src={background} class="absolute top-0 -z-10 min-w-[1400px]" alt="" aria-hidden="true" />
</section> </section>
<style lang="postcss"> <style lang="postcss">

View file

@ -100,9 +100,23 @@
<style lang="postcss"> <style lang="postcss">
.card { .card {
@apply relative flex h-full w-full items-end justify-end rounded-3xl bg-neutral-950 transition-colors duration-300 md:bg-slate-900 md:hover:bg-blue-900; @apply relative flex h-full w-full items-end justify-end rounded-3xl transition-colors duration-300;
z-index: 2; z-index: 2;
contain: paint style layout; contain: paint style layout;
background: radial-gradient(
100% 100% at 100% 0%,
theme(colors.blue.950),
theme(colors.neutral.950)
);
@media screen(sm) {
background: theme(colors.slate.900);
&:hover {
background: theme(colors.blue.900);
}
}
} }
.gradient_black { .gradient_black {

View file

@ -16,9 +16,13 @@
import tileDefaultImage from '$lib/images/features/tiling_default.png' import tileDefaultImage from '$lib/images/features/tiling_default.png'
import configHoverImage from '$lib/images/features/config_hover.png' import configHoverImage from '$lib/images/features/config_hover.png'
import tileHoverImage from '$lib/images/features/tiling_hover.png' import tileHoverImage from '$lib/images/features/tiling_hover.png'
import SmoothCircle from './SmoothCircle.svelte'
let isMobile = false let isMobile = false
/** @type {HTMLElement}*/
let smoothCircleElement
const context = setContext(mouseContext, { const context = setContext(mouseContext, {
x: writable(0), x: writable(0),
y: writable(0), y: writable(0),
@ -59,12 +63,14 @@
on:mouseleave={!isMobile && onMouseLeave} on:mouseleave={!isMobile && onMouseLeave}
bind:this={featuresContainer} bind:this={featuresContainer}
> >
<FeatureCard title="Smooth" class="row-span-2"> <FeatureCard title="Smooth" class="row-span-2" color="purple">
<p class="max-w-[60ch]"> <p class="max-w-[60ch]">
Transition from windows and workspaces smoothly, with great animations. High performance. Transition from windows and workspaces smoothly, with great animations. High performance.
Instant input. Instant input.
</p></FeatureCard </p>
>
<SmoothCircle />
</FeatureCard>
<FeatureCard title="Easy to configure" color="purple"> <FeatureCard title="Easy to configure" color="purple">
<p class="max-w-[60ch]"> <p class="max-w-[60ch]">
Live reloading config. Easy plain-text format. Sensible defaults. Great documentation. Live reloading config. Easy plain-text format. Sensible defaults. Great documentation.
@ -77,7 +83,7 @@
</div> </div>
</div> </div>
</FeatureCard> </FeatureCard>
<FeatureCard class="" title="Dynamic tiling"> <FeatureCard class="" title="Dynamic tiling" color="purple">
<p class="max-w-[60ch]"> <p class="max-w-[60ch]">
Automatic tiling which just works. Supports multiple fine-tuneable layouts. Automatic tiling which just works. Supports multiple fine-tuneable layouts.
</p> </p>
@ -138,9 +144,8 @@
pointer-events: none; pointer-events: none;
width: 500px; width: 500px;
height: 500px;
right: -80px; right: -80px;
top: -140px; top: -80px;
@media screen(sm) { @media screen(sm) {
width: 800px; width: 800px;

View file

@ -24,7 +24,7 @@
> >
<!-- Hero text and logo --> <!-- Hero text and logo -->
<div <div
class="pointer-events-none z-10 flex h-screen min-h-max flex-col items-center justify-center" class="pointer-events-none z-10 flex h-screen min-h-max flex-col items-center justify-center px-5"
> >
<div class="-mt-20 mb-8 flex flex-col items-center gap-6 text-center"> <div class="-mt-20 mb-8 flex flex-col items-center gap-6 text-center">
<img src={Logo} alt="Hyprland Logo" class="ani-in mb-6 h-40 fill-mode-backwards sm:h-48" /> <img src={Logo} alt="Hyprland Logo" class="ani-in mb-6 h-40 fill-mode-backwards sm:h-48" />
@ -37,18 +37,18 @@
</div> </div>
</div> </div>
<h2 <h2
class="ani-in pointer-events-auto mb-10 text-center text-2xl font-medium leading-9 text-blue-200/80 fill-mode-backwards [animation-delay:944ms]" class="ani-in pointer-events-auto mb-10 max-w-[30ch] text-center text-lg font-medium leading-9 text-blue-200/80 fill-mode-backwards [animation-delay:944ms] sm:text-2xl"
> >
Dynamic tiling Wayland compositor with the looks Dynamic tiling Wayland compositor with the looks
</h2> </h2>
<div <div
class="pointer-events-auto flex items-center gap-6 duration-500 animate-in fade-in-0 slide-in-from-bottom-4 fill-mode-backwards [animation-delay:1390ms]" class="pointer-events-auto flex items-center gap-7 duration-500 animate-in fade-in-0 slide-in-from-bottom-4 fill-mode-backwards [animation-delay:1390ms]"
> >
<a href="https://wiki.hyprland.org/Getting-Started/Installation/"> <a href="https://wiki.hyprland.org/Getting-Started/Installation/">
<Button size="lg">Install</Button> <Button size="lg">Install</Button>
</a> </a>
<a href="https://wiki.hyprland.org/Getting-Started/"> <a href="https://wiki.hyprland.org/">
<Button type="fancyOutline" size="lg">Wiki</Button> <Button type="fancyOutline" size="lg">Wiki</Button>
</a> </a>
</div> </div>

View file

@ -134,7 +134,7 @@
height: var(--length); height: var(--length);
min-height: var(--length); min-height: var(--length);
max-height: var(--length); max-height: var(--length);
animation: backwards animate-in ease-in 2000ms 300ms; /* animation: backwards animate-in ease-in 2000ms 300ms; */
contain: layout style content; contain: layout style content;
} }
@ -207,20 +207,4 @@
pointer-events: none; pointer-events: none;
contain: strict; contain: strict;
} }
@keyframes loop {
100% {
translate: 0px calc(-1 * var(--length));
/* translate: 0px -50%; */
}
}
@keyframes animate-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style> </style>

View file

@ -32,6 +32,7 @@
<button <button
class="z-50 rounded-full bg-black/10 p-2 md:backdrop-blur lg:hidden" class="z-50 rounded-full bg-black/10 p-2 md:backdrop-blur lg:hidden"
on:click={toggleExpanded} on:click={toggleExpanded}
aria-label="Open Navigation"
> >
{#if isExpanded} {#if isExpanded}
<CloseIcon class="h-6 w-6 text-slate-200" /> <CloseIcon class="h-6 w-6 text-slate-200" />
@ -45,7 +46,11 @@
class="flex flex-col items-center gap-5 rounded-full lg:h-full lg:max-h-full lg:flex-row hover:[&_li]:text-cyan-300" class="flex flex-col items-center gap-5 rounded-full lg:h-full lg:max-h-full lg:flex-row hover:[&_li]:text-cyan-300"
> >
<li> <li>
<a href="https://wiki.hyprland.org/Getting-Started/Master-Tutorial/">Get started</a> <a
href="https://wiki.hyprland.org/Getting-Started/Master-Tutorial/"
rel="noopener"
target="_blank">Get started</a
>
</li> </li>
<li> <li>
<a href="https://wiki.hyprland.org">Wiki</a> <a href="https://wiki.hyprland.org">Wiki</a>
@ -58,19 +63,31 @@
class="flex flex-row items-center gap-3 px-4 lg:ml-4 lg:mr-2 lg:rounded-full lg:border lg:border-purple-400" class="flex flex-row items-center gap-3 px-4 lg:ml-4 lg:mr-2 lg:rounded-full lg:border lg:border-purple-400"
> >
<li> <li>
<a href="https://discord.com/invite/hQ9XvMUjjr" class="social-icon"> <a
href="https://discord.com/invite/hQ9XvMUjjr"
class="social-icon"
aria-label="Join us on Discord"
target="_blank"
>
<DiscordIcon class="h-full w-full" /> <DiscordIcon class="h-full w-full" />
</a> </a>
</li> </li>
<li> <li>
<a href="https://github.com/hyprwm/Hyprland" class="social-icon"> <a
href="https://github.com/hyprwm/Hyprland"
class="social-icon"
aria-label="Go to Hyprlands Github"
target="_blank"
>
<GithubIcon class="h-full w-full" /> <GithubIcon class="h-full w-full" />
</a> </a>
</li> </li>
</ul> </ul>
<a <a
class="rounded-full bg-primary px-4 py-1 uppercase tracking-wide text-black hover:bg-cyan-200" class="rounded-full bg-primary px-4 py-1 uppercase tracking-wide text-black hover:bg-cyan-200"
href="https://wiki.hyprland.org/Getting-Started/Installation/">Install</a href="https://wiki.hyprland.org/Getting-Started/Installation/"
target="_blank"
aria-label="Install Hyprland">Install</a
> >
</nav> </nav>
</header> </header>
@ -79,7 +96,7 @@
.nav { .nav {
/* Base classes */ /* Base classes */
font-weight: 600; font-weight: 600;
font-size: 1.5rem; @apply text-lg;
/* Mobile classes */ /* Mobile classes */
position: absolute; position: absolute;
@ -90,7 +107,7 @@
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: 1rem; gap: 1rem;
backdrop-filter: blur(8px); backdrop-filter: blur(12px);
padding: 5rem 2rem; padding: 5rem 2rem;
display: none; display: none;

View file

@ -1,9 +1,7 @@
<script> <script>
import { inview } from 'svelte-inview' import { inview } from 'svelte-inview'
import previewRice from '$lib/videos/end_4_rice_intro.mp4' import previewRice from '$lib/videos/end_4_rice_intro.mp4'
import previewRiceThumbnail from '$lib/videos/end_4_thumbnail.png' import previewRiceThumbnail from '$lib/videos/end_4_thumbnail.webp'
import AudioIcon from '~icons/mingcute/volume-line'
import MuteIcon from '~icons/mingcute/volume-mute-line'
import PauseIcon from '~icons/mingcute/pause-circle-line' import PauseIcon from '~icons/mingcute/pause-circle-line'
import clsx from 'clsx' import clsx from 'clsx'
import { onMount } from 'svelte' import { onMount } from 'svelte'
@ -136,6 +134,7 @@
.preview-rice-bg { .preview-rice-bg {
position: absolute; position: absolute;
z-index: -10; z-index: -10;
pointer-events: none;
opacity: 0.4; opacity: 0.4;
min-width: 2800px; min-width: 2800px;
overflow-x: hidden; overflow-x: hidden;

112
src/routes/SmoothCircle.svelte Executable file
View file

@ -0,0 +1,112 @@
<script>
import SmoothCircle from '$lib/images/features/smooth_default.png'
import SmoothHover from '$lib/images/features/smooth_hover.png'
const circlesAmount = 10
/** In millisseconds */
const animationDuration = 8000
const circles = Array.from({ length: circlesAmount }, () => 1)
/**
*
* @param node {HTMLElement}
* @param param1
*/
function animateElement(node, { delay, index, amount }) {
const delayFrames = Array.from({ length: index }).map(() => ({
scale: 0
}))
node.animate([{ scale: CSS.number(0) }, { scale: CSS.number(3), opacity: 0 }], {
iterations: Infinity,
duration: animationDuration,
delay: animationDuration / (amount - index + 1) + animationDuration / (amount - index + 1),
easing: 'cubic-bezier(1, 0.1 , 0.9, 1)',
fill: 'backwards'
})
}
</script>
<div class="wrapper">
<div class="yin">
<img src={SmoothCircle} alt="Ying yang smooth icon" />
<img src={SmoothHover} alt="Ying yang smooth icon" class="yin-hover" />
</div>
{#each circles as _, index}
<div
class="circle"
style:--percent={((index + 1) / circles.length) * 100 + '%'}
style:--index={index}
style:--amount={circles.length}
/>
{/each}
<!-- use:animateElement={{ index, amount: circles.length }} -->
</div>
<style lang="postcss">
.wrapper {
position: absolute;
top: 40px;
right: 40px;
width: 400px;
aspect-ratio: 1;
filter: drop-shadow(0 0 44px blue);
/* background: red; */
}
.circle {
position: absolute;
inset: 0;
height: 100%;
width: 100%;
opacity: 0.05;
background: radial-gradient(
closest-side,
transparent,
color-mix(in hsl, theme(colors.blue.500), theme(colors.pink.500) var(--percent)),
transparent 90%
);
transition: all 2200ms;
.wrapper:hover & {
opacity: 1;
transition: all 1200ms ease-in;
}
animation: loop infinite backwards;
}
.yin {
z-index: 100;
position: absolute;
left: -25%;
top: -25%;
/* mix-blend-mode: color-burn; */
opacity: 0.7;
height: 150%;
width: 150%;
/* aspect-ratio: 1; */
& img {
width: 100%;
height: 100%;
}
}
.yin-hover {
display: none;
.wrapper:hover & {
display: flex;
}
}
@keyframes loop {
from {
scale: 0;
}
to {
scale: 1;
}
}
</style>

View file

@ -3,84 +3,16 @@
import Contest from './Contest.svelte' import Contest from './Contest.svelte'
import FamedRice from './FamedRice.svelte' import FamedRice from './FamedRice.svelte'
import colors from 'tailwindcss/colors' import colors from 'tailwindcss/colors'
import { onMount } from 'svelte'
/** Maximum rotation in degrees */
const maxDegress = 45
const tiles = [
{ top: '40px', left: '20px', z: -40 },
{ top: '10px', left: '40px', z: -80 },
{ top: '-120px', left: '70px', z: -80 },
{ top: '30px', left: '5px', z: -80 },
{ top: '80px', left: '4px', z: -80 },
{ top: '20px', left: '4px', z: -80 },
{ top: '80px', left: '20px' }
]
/** @type {HTMLElement} */
let titleWrapper
/** @type {DOMRect} */
let container
/**
* Bind the generated tiles here and iterate over them later
* @type {HTMLElement[]}*/
const boundTiles = []
onMount(() => {
container = titleWrapper.getBoundingClientRect()
})
function rotateTiles({ clientX, clientY }) {
boundTiles.forEach((tile) => {
const { x, y, width, height } = tile.getBoundingClientRect()
const middleX = x + width / 2
const middleY = y + height / 2
console.log({ middleX, middleY, clientX, clientY })
const offsetX = minMax(((clientX - middleX) / clientX) * maxDegress, 95)
const offsetY = minMax(((clientY - middleY) / clientY) * maxDegress, 95)
tile.style.setProperty('--rotateX', offsetX)
tile.style.setProperty('--rotateY', -offsetY)
})
}
function minMax(value, minMax) {
return value
// return Math.max(Math.min(value, minMax), minMax * -1)
}
</script> </script>
<section <section>
class="relative flex min-h-screen flex-col items-center justify-center gap-14 overflow-x-hidden" <div class="hero-wrapper" role="heading" aria-level={0}>
>
<div
class="relative -mb-14 flex h-[90vh] min-h-min w-full flex-col items-center justify-center bg-white/10"
bind:this={titleWrapper}
on:mousemove={rotateTiles}
role="heading"
aria-level={0}
>
<Title> <Title>
<span slot="title">Wall of fame</span> <span slot="title">Wall of fame</span>
<div slot="subtitle"> <div slot="subtitle">
The chronicles of the triumphant<br /> from bygone rice contests held within our Discord The chronicles of the triumphant<br /> from bygone rice contests held within our Discord
</div> </div>
</Title> </Title>
<div class="floating-wrapper">
{#each tiles as { left, top, z }, index}
<div
class="floating-panel"
style:--left={left}
style:--top={top}
style:--z={z}
bind:this={boundTiles[index]}
/>
{/each}
</div>
</div> </div>
<Contest name="Summer" number={2} date="May 2023" --color="orange"> <Contest name="Summer" number={2} date="May 2023" --color="orange">
@ -156,45 +88,20 @@
</section> </section>
<style lang="postcss"> <style lang="postcss">
.floating-wrapper { section {
perspective: 1000px; @apply relative flex min-h-screen flex-col items-center justify-center gap-14 overflow-hidden;
transform-style: preserve-3d; }
width: 20px;
height: 20px;
border: red solid 1px;
position: absolute;
/* contain: strict; */
.hero-wrapper {
display: flex; display: flex;
position: relative;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} height: 800px;
width: 100%;
.floating-panel { min-height: max-content;
position: absolute; margin-bottom: min(-10vh, -12rem);
/* margin-left: var(--left); background: radial-gradient(100% 50% at 50% 0%, theme(colors.cyan.500 / 50%), transparent);
margin-top: var(--top); */
left: var(--left);
top: var(--top);
min-height: 100px;
min-width: 200px;
transform-style: preserve-3d;
translate: 0px 0px calc(var(--z) * 1px);
/* contain: layout; */
&::after {
content: ' ';
border: solid white 2px;
border-radius: 24px;
background: rgba(255, 255, 255, 0.5);
inset: 0px;
position: absolute;
transform: rotateY(calc(var(--rotateX) * 1deg)) rotateX(calc(var(--rotateY) * 1deg));
/* transition: transform 40ms; */
}
} }
</style> </style>

View file

@ -25,7 +25,7 @@
} }
</script> </script>
<section class="relative flex flex-col"> <section class="">
<div class="relative py-24 sm:py-40"> <div class="relative py-24 sm:py-40">
<div <div
class="flex flex-col items-center p-6 mix-blend-color-dodge" class="flex flex-col items-center p-6 mix-blend-color-dodge"
@ -48,6 +48,28 @@
</section> </section>
<style lang="postcss"> <style lang="postcss">
section {
border-top: rgba(255, 255, 255, 0.1) 1px solid;
padding-top: 5rem;
position: relative;
display: flex;
width: 100%;
flex-direction: column;
border-radius: 4rem 4rem 0rem 0rem;
&::after {
content: ' ';
position: absolute;
top: 0;
left: 0;
height: 300px;
width: 100%;
z-index: -10;
background: linear-gradient(theme(colors.black / 40%), transparent);
mix-blend-mode: color-burn;
border-radius: inherit;
}
}
.mask { .mask {
/* overflow: hidden; */ /* overflow: hidden; */
top: 0px; top: 0px;
@ -95,7 +117,7 @@
} }
.enabled & { .enabled & {
opacity: 0.9; opacity: 0.7;
scale: 1; scale: 1;
} }
} }

View file

@ -23,7 +23,7 @@
let background = blurredThumbnail ?? getBlurredPath(thumbnail) let background = blurredThumbnail ?? getBlurredPath(thumbnail)
</script> </script>
<div class="flex flex-col gap-12 px-4 {$$restProps.class}"> <div class="flex flex-col items-center gap-12 px-4 {$$restProps.class}">
<div class="flex flex-col items-center justify-center"> <div class="flex flex-col items-center justify-center">
<div class="mb-2 text-lg font-bold">{pretitel}</div> <div class="mb-2 text-lg font-bold">{pretitel}</div>
<h3 class="mb-6 text-4xl font-bold hover:text-slate-200 sm:text-6xl"> <h3 class="mb-6 text-4xl font-bold hover:text-slate-200 sm:text-6xl">
@ -41,7 +41,7 @@
</a> </a>
</div> </div>
<div class="relative w-full max-w-[1100px] px-6 sm:px-8"> <div class="image-wrapper">
<a class="rice" href={dotfilesLink} target="_blank"> <a class="rice" href={dotfilesLink} target="_blank">
<img src={thumbnail} alt={`${name} by ${creator} thumbnail`} class="" /> <img src={thumbnail} alt={`${name} by ${creator} thumbnail`} class="" />
</a> </a>
@ -56,6 +56,12 @@
</div> </div>
<style lang="postcss"> <style lang="postcss">
.image-wrapper {
@apply relative w-full max-w-[1100px] px-6 sm:px-8;
position: relative;
width: 100%;
}
.rice { .rice {
position: relative; position: relative;
display: block; display: block;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 980 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 903 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 595 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 KiB