mirror of https://github.com/VERT-sh/VERT.git
feat: better bg gradient transition
This commit is contained in:
parent
1b55dcc005
commit
4e18269204
158
src/app.scss
158
src/app.scss
|
@ -44,6 +44,11 @@
|
||||||
--accent-green-alt: hsl(140, 66%, 55%);
|
--accent-green-alt: hsl(140, 66%, 55%);
|
||||||
--accent: var(--accent-pink);
|
--accent: var(--accent-pink);
|
||||||
--accent-alt: var(--accent-pink-alt);
|
--accent-alt: var(--accent-pink-alt);
|
||||||
|
--accent-pink-transparent: hsla(303, 100%, 50%, 0);
|
||||||
|
--accent-red-transparent: hsla(348, 100%, 50%, 0);
|
||||||
|
--accent-purple-transparent: hsla(264, 100%, 50%, 0);
|
||||||
|
--accent-blue-transparent: hsla(220, 100%, 50%, 0);
|
||||||
|
--accent-green-transparent: hsla(140, 70%, 30%, 0);
|
||||||
|
|
||||||
// foregrounds
|
// foregrounds
|
||||||
--fg: hsl(0, 0%, 0%);
|
--fg: hsl(0, 0%, 0%);
|
||||||
|
@ -56,65 +61,91 @@
|
||||||
|
|
||||||
// backgrounds
|
// backgrounds
|
||||||
--bg: hsl(0, 0%, 95%);
|
--bg: hsl(0, 0%, 95%);
|
||||||
|
|
||||||
|
--bg-gradient-from: var(--accent-pink);
|
||||||
|
--bg-gradient-to: hsla(303, 100%, 50%, 0);
|
||||||
|
--bg-gradient-pink-from: var(--accent-pink);
|
||||||
|
--bg-gradient-pink-to: hsla(303, 100%, 50%, 0);
|
||||||
|
--bg-gradient-pink-alt-from: var(--accent-pink);
|
||||||
|
--bg-gradient-pink-alt-to: hsl(303, 100%, 91%);
|
||||||
|
--bg-gradient-red-from: var(--accent-red);
|
||||||
|
--bg-gradient-red-to: hsla(348, 100%, 50%, 0);
|
||||||
|
--bg-gradient-red-alt-from: var(--accent-red);
|
||||||
|
--bg-gradient-red-alt-to: hsl(348, 100%, 91%);
|
||||||
|
--bg-gradient-purple-from: var(--accent-purple);
|
||||||
|
--bg-gradient-purple-to: hsla(264, 100%, 50%, 0);
|
||||||
|
--bg-gradient-purple-alt-from: var(--accent-purple);
|
||||||
|
--bg-gradient-purple-alt-to: hsl(264, 100%, 91%);
|
||||||
|
--bg-gradient-blue-from: var(--accent-blue);
|
||||||
|
--bg-gradient-blue-to: hsla(220, 100%, 50%, 0);
|
||||||
|
--bg-gradient-blue-alt-from: var(--accent-blue);
|
||||||
|
--bg-gradient-blue-alt-to: hsl(220, 100%, 91%);
|
||||||
|
--bg-gradient-green-from: var(--accent-green);
|
||||||
|
--bg-gradient-green-to: hsla(140, 70%, 30%, 0);
|
||||||
|
--bg-gradient-green-alt-from: var(--accent-green-alt);
|
||||||
|
--bg-gradient-green-alt-to: hsl(140, 70%, 91%);
|
||||||
|
--bg-gradient-image-from: hsla(0, 0%, 95%, 0.5);
|
||||||
|
--bg-gradient-image-to: hsla(0, 0%, 95%, 1);
|
||||||
|
|
||||||
--bg-gradient: linear-gradient(
|
--bg-gradient: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-pink),
|
var(--bg-gradient-from),
|
||||||
hsla(303, 100%, 50%, 0) 100%
|
var(--bg-gradient-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-pink: linear-gradient(
|
--bg-gradient-pink: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-pink),
|
var(--bg-gradient-pink-from),
|
||||||
hsla(303, 100%, 50%, 0) 25%
|
var(--bg-gradient-pink-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-pink-alt: linear-gradient(
|
--bg-gradient-pink-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-pink),
|
var(--bg-gradient-pink-alt-from),
|
||||||
hsl(303, 100%, 91%) 100%
|
var(--bg-gradient-pink-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-red: linear-gradient(
|
--bg-gradient-red: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-red),
|
var(--bg-gradient-red-from),
|
||||||
hsla(348, 100%, 50%, 0) 25%
|
var(--bg-gradient-red-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-red-alt: linear-gradient(
|
--bg-gradient-red-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-red),
|
var(--bg-gradient-red-alt-from),
|
||||||
hsl(348, 100%, 91%) 100%
|
var(--bg-gradient-red-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-purple: linear-gradient(
|
--bg-gradient-purple: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-purple),
|
var(--bg-gradient-purple-from),
|
||||||
hsla(264, 100%, 50%, 0) 25%
|
var(--bg-gradient-purple-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-purple-alt: linear-gradient(
|
--bg-gradient-purple-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-purple),
|
var(--bg-gradient-purple-alt-from),
|
||||||
hsl(264, 100%, 91%) 100%
|
var(--bg-gradient-purple-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-blue: linear-gradient(
|
--bg-gradient-blue: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-blue),
|
var(--bg-gradient-blue-from),
|
||||||
hsla(220, 100%, 50%, 0) 25%
|
var(--bg-gradient-blue-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-blue-alt: linear-gradient(
|
--bg-gradient-blue-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-blue),
|
var(--bg-gradient-blue-alt-from),
|
||||||
hsl(220, 100%, 91%) 100%
|
var(--bg-gradient-blue-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-green: linear-gradient(
|
--bg-gradient-green: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
var(--accent-green),
|
var(--bg-gradient-green-from),
|
||||||
hsla(140, 70%, 30%, 0) 25%
|
var(--bg-gradient-green-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-green-alt: linear-gradient(
|
--bg-gradient-green-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-green-alt),
|
var(--bg-gradient-green-alt-from),
|
||||||
hsl(140, 70%, 91%) 100%
|
var(--bg-gradient-green-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-image: linear-gradient(
|
--bg-gradient-image: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(0, 0%, 95%, 0.5),
|
var(--bg-gradient-image-from),
|
||||||
hsla(0, 0%, 95%, 1) 100%
|
var(--bg-gradient-image-to) 100%
|
||||||
);
|
);
|
||||||
--bg-panel: hsl(0, 0%, 100%);
|
--bg-panel: hsl(0, 0%, 100%);
|
||||||
--bg-panel-highlight: hsl(0, 0%, 92%);
|
--bg-panel-highlight: hsl(0, 0%, 92%);
|
||||||
|
@ -140,6 +171,11 @@
|
||||||
--accent-alt: var(--accent-pink-alt);
|
--accent-alt: var(--accent-pink-alt);
|
||||||
--accent-green: hsl(140, 70%, 74%);
|
--accent-green: hsl(140, 70%, 74%);
|
||||||
--accent-green-alt: hsl(140, 64%, 42%);
|
--accent-green-alt: hsl(140, 64%, 42%);
|
||||||
|
--accent-pink-transparent: hsla(303, 100%, 50%, 0);
|
||||||
|
--accent-red-transparent: hsla(348, 100%, 50%, 0);
|
||||||
|
--accent-purple-transparent: hsla(264, 100%, 50%, 0);
|
||||||
|
--accent-blue-transparent: hsla(220, 100%, 50%, 0);
|
||||||
|
--accent-green-transparent: hsla(140, 70%, 30%, 0);
|
||||||
|
|
||||||
// foregrounds
|
// foregrounds
|
||||||
--fg: hsl(0, 0%, 100%);
|
--fg: hsl(0, 0%, 100%);
|
||||||
|
@ -151,65 +187,91 @@
|
||||||
|
|
||||||
// backgrounds
|
// backgrounds
|
||||||
--bg: hsl(220, 5%, 15%);
|
--bg: hsl(220, 5%, 15%);
|
||||||
|
|
||||||
|
--bg-gradient-from: hsla(303, 100%, 50%, 0.1);
|
||||||
|
--bg-gradient-to: hsla(303, 100%, 50%, 0);
|
||||||
|
--bg-gradient-pink-from: hsla(303, 100%, 50%, 0.1);
|
||||||
|
--bg-gradient-pink-to: hsla(303, 100%, 50%, 0);
|
||||||
|
--bg-gradient-pink-alt-from: var(--accent-pink);
|
||||||
|
--bg-gradient-pink-alt-to: hsl(303, 100%, 91%);
|
||||||
|
--bg-gradient-red-from: hsla(348, 100%, 50%, 0.1);
|
||||||
|
--bg-gradient-red-to: hsla(348, 100%, 50%, 0);
|
||||||
|
--bg-gradient-red-alt-from: var(--accent-red);
|
||||||
|
--bg-gradient-red-alt-to: hsl(348, 100%, 91%);
|
||||||
|
--bg-gradient-purple-from: hsla(264, 100%, 50%, 0.1);
|
||||||
|
--bg-gradient-purple-to: hsla(264, 100%, 50%, 0);
|
||||||
|
--bg-gradient-purple-alt-from: var(--accent-purple);
|
||||||
|
--bg-gradient-purple-alt-to: hsl(264, 100%, 91%);
|
||||||
|
--bg-gradient-blue-from: hsla(220, 100%, 50%, 0.1);
|
||||||
|
--bg-gradient-blue-to: hsla(220, 100%, 50%, 0);
|
||||||
|
--bg-gradient-blue-alt-from: var(--accent-blue);
|
||||||
|
--bg-gradient-blue-alt-to: hsl(220, 100%, 91%);
|
||||||
|
--bg-gradient-green-from: hsla(140, 70%, 30%, 0.1);
|
||||||
|
--bg-gradient-green-to: hsla(140, 70%, 30%, 0);
|
||||||
|
--bg-gradient-green-alt-from: var(--accent-green-alt);
|
||||||
|
--bg-gradient-green-alt-to: hsl(140, 70%, 91%);
|
||||||
|
--bg-gradient-image-from: hsla(220, 5%, 12%, 0.5);
|
||||||
|
--bg-gradient-image-to: hsla(220, 5%, 12%, 1);
|
||||||
|
|
||||||
--bg-gradient: linear-gradient(
|
--bg-gradient: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(303, 100%, 50%, 0.1),
|
var(--bg-gradient-from),
|
||||||
hsla(303, 100%, 50%, 0) 100%
|
var(--bg-gradient-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-pink: linear-gradient(
|
--bg-gradient-pink: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(303, 100%, 50%, 0.1),
|
var(--bg-gradient-pink-from),
|
||||||
hsla(303, 100%, 50%, 0) 25%
|
var(--bg-gradient-pink-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-pink-alt: linear-gradient(
|
--bg-gradient-pink-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-pink),
|
var(--bg-gradient-pink-alt-from),
|
||||||
hsl(303, 100%, 91%) 100%
|
var(--bg-gradient-pink-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-red: linear-gradient(
|
--bg-gradient-red: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(348, 100%, 50%, 0.1),
|
var(--bg-gradient-red-from),
|
||||||
hsla(348, 100%, 50%, 0) 25%
|
var(--bg-gradient-red-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-red-alt: linear-gradient(
|
--bg-gradient-red-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-red),
|
var(--bg-gradient-red-alt-from),
|
||||||
hsl(348, 100%, 91%) 100%
|
var(--bg-gradient-red-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-purple: linear-gradient(
|
--bg-gradient-purple: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(264, 100%, 50%, 0.1),
|
var(--bg-gradient-purple-from),
|
||||||
hsla(264, 100%, 50%, 0) 25%
|
var(--bg-gradient-purple-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-purple-alt: linear-gradient(
|
--bg-gradient-purple-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-purple),
|
var(--bg-gradient-purple-alt-from),
|
||||||
hsl(264, 100%, 91%) 100%
|
var(--bg-gradient-purple-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-blue: linear-gradient(
|
--bg-gradient-blue: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(220, 100%, 50%, 0.1),
|
var(--bg-gradient-blue-from),
|
||||||
hsla(220, 100%, 50%, 0) 25%
|
var(--bg-gradient-blue-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-blue-alt: linear-gradient(
|
--bg-gradient-blue-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-blue),
|
var(--bg-gradient-blue-alt-from),
|
||||||
hsl(220, 100%, 91%) 100%
|
var(--bg-gradient-blue-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-green: linear-gradient(
|
--bg-gradient-green: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(140, 70%, 30%, 0.1),
|
var(--bg-gradient-green-from),
|
||||||
hsla(140, 70%, 30%, 0) 25%
|
var(--bg-gradient-green-to) 25%
|
||||||
);
|
);
|
||||||
--bg-gradient-green-alt: linear-gradient(
|
--bg-gradient-green-alt: linear-gradient(
|
||||||
to top,
|
to top,
|
||||||
var(--accent-green-alt),
|
var(--bg-gradient-green-alt-from),
|
||||||
hsl(140, 70%, 91%) 100%
|
var(--bg-gradient-green-alt-to) 100%
|
||||||
);
|
);
|
||||||
--bg-gradient-image: linear-gradient(
|
--bg-gradient-image: linear-gradient(
|
||||||
to bottom,
|
to bottom,
|
||||||
hsla(220, 5%, 12%, 0.5),
|
var(--bg-gradient-image-from),
|
||||||
hsla(220, 5%, 12%, 1) 100%
|
var(--bg-gradient-image-to) 100%
|
||||||
);
|
);
|
||||||
--bg-panel: hsl(220, 4%, 24%);
|
--bg-panel: hsl(220, 4%, 24%);
|
||||||
--bg-panel-highlight: hsl(220, 2%, 32%);
|
--bg-panel-highlight: hsl(220, 2%, 32%);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { page } from "$app/state";
|
import { page } from "$app/state";
|
||||||
import { duration } from "$lib/animation";
|
import { duration, transition } from "$lib/animation";
|
||||||
import VertVBig from "$lib/assets/vert-bg.svg?component";
|
import VertVBig from "$lib/assets/vert-bg.svg?component";
|
||||||
import {
|
import {
|
||||||
files,
|
files,
|
||||||
|
@ -9,6 +9,63 @@
|
||||||
} from "$lib/store/index.svelte";
|
} from "$lib/store/index.svelte";
|
||||||
import { quintOut } from "svelte/easing";
|
import { quintOut } from "svelte/easing";
|
||||||
import { fade } from "$lib/animation";
|
import { fade } from "$lib/animation";
|
||||||
|
import { Tween } from "svelte/motion";
|
||||||
|
|
||||||
|
const colors: {
|
||||||
|
matcher: (path: string) => boolean;
|
||||||
|
color: string;
|
||||||
|
at: number;
|
||||||
|
}[] = $derived([
|
||||||
|
{
|
||||||
|
matcher: (path) => path === "/",
|
||||||
|
color: "var(--bg-gradient-from)",
|
||||||
|
at: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
matcher: (path) => path === "/convert/",
|
||||||
|
color: `var(--bg-gradient-${$gradientColor ? $gradientColor + "-" : ""}from)`,
|
||||||
|
at: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
matcher: (path) => path === "/settings/",
|
||||||
|
color: "var(--bg-gradient-blue-from)",
|
||||||
|
at: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
matcher: (path) => path === "/about/",
|
||||||
|
color: "var(--bg-gradient-from)",
|
||||||
|
at: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
matcher: (path) => path === "/jpegify/",
|
||||||
|
color: "var(--bg-gradient-red-from)",
|
||||||
|
at: 100,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const color = $derived(
|
||||||
|
Object.values(colors).find((p) => p.matcher(page.url.pathname)) || {
|
||||||
|
matcher: () => false,
|
||||||
|
color: "transparent",
|
||||||
|
at: 0,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
// svelte-ignore state_referenced_locally This is handled in the effect below
|
||||||
|
let at = new Tween(color.at, {
|
||||||
|
duration,
|
||||||
|
easing: quintOut,
|
||||||
|
});
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
at.set(color.at);
|
||||||
|
});
|
||||||
|
|
||||||
|
const maskImage = $derived(
|
||||||
|
`linear-gradient(to top, transparent ${100 - at.current}%, black 100%)`,
|
||||||
|
);
|
||||||
|
|
||||||
|
$inspect(colors);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if page.url.pathname === "/"}
|
{#if page.url.pathname === "/"}
|
||||||
|
@ -23,6 +80,33 @@
|
||||||
class="fill-[--fg] opacity-10 dynadark:opacity-5 scale-[200%] md:scale-[80%]"
|
class="fill-[--fg] opacity-10 dynadark:opacity-5 scale-[200%] md:scale-[80%]"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="fixed top-0 left-0 w-screen h-screen -z-40 pointer-events-none"
|
||||||
|
style="background-color: {color.color};
|
||||||
|
mask-image: {maskImage};
|
||||||
|
-webkit-mask-image: {maskImage};
|
||||||
|
transition: background-color {duration}ms {transition};"
|
||||||
|
></div>
|
||||||
|
|
||||||
|
{#if page.url.pathname === "/convert/" && files.files.length === 1}
|
||||||
|
{@const bgMask =
|
||||||
|
"linear-gradient(to top, transparent 5%, rgba(0, 0, 0, 0.5) 100%)"}
|
||||||
|
<div
|
||||||
|
class="fixed top-0 left-0 w-screen h-screen -z-50"
|
||||||
|
style="background-image: url({files.files[0].blobUrl});
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
filter: blur(10px);
|
||||||
|
mask-image: {bgMask};
|
||||||
|
-webkit-mask-image: {bgMask};"
|
||||||
|
transition:fade={{ duration, easing: quintOut }}
|
||||||
|
></div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<!--
|
||||||
<div
|
<div
|
||||||
id="gradient-bg"
|
id="gradient-bg"
|
||||||
class="fixed top-0 left-0 w-screen h-screen -z-40 pointer-events-none"
|
class="fixed top-0 left-0 w-screen h-screen -z-40 pointer-events-none"
|
||||||
|
@ -64,14 +148,6 @@
|
||||||
class="absolute top-0 left-0 w-full h-full"
|
class="absolute top-0 left-0 w-full h-full"
|
||||||
style="background: var(--bg-gradient-image);"
|
style="background: var(--bg-gradient-image);"
|
||||||
></div>
|
></div>
|
||||||
<!-- <div class="absolute bottom-0 left-0 w-full h-full">
|
|
||||||
<ProgressiveBlur
|
|
||||||
direction="bottom"
|
|
||||||
endIntensity={256}
|
|
||||||
iterations={8}
|
|
||||||
fadeTo="var(--bg)"
|
|
||||||
/>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else if page.url.pathname === "/settings/"}
|
{:else if page.url.pathname === "/settings/"}
|
||||||
|
@ -94,4 +170,4 @@
|
||||||
easing: quintOut,
|
easing: quintOut,
|
||||||
}}
|
}}
|
||||||
></div>
|
></div>
|
||||||
{/if}
|
{/if} -->
|
||||||
|
|
Loading…
Reference in New Issue