Add launcher editor backdrop
This commit is contained in:
parent
56b2331968
commit
58977f6025
2 changed files with 53 additions and 7 deletions
|
|
@ -1,9 +1,11 @@
|
||||||
|
import type { CSSProperties } from "react";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import {
|
import {
|
||||||
buildWorldshaperStudioUrl,
|
buildWorldshaperStudioUrl,
|
||||||
openWorldshaperStudioWindow,
|
openWorldshaperStudioWindow,
|
||||||
} from "./worldshaperStudio/windowing";
|
} from "./worldshaperStudio/windowing";
|
||||||
import { CHANGELOG_SECTIONS, CHANGELOG_SPLASH_VERSION } from "./worldshaperStudio/changelogData";
|
import { CHANGELOG_SECTIONS, CHANGELOG_SPLASH_VERSION } from "./worldshaperStudio/changelogData";
|
||||||
|
import launcherBackground from "../background.png";
|
||||||
|
|
||||||
type WorldDefaultPayload = {
|
type WorldDefaultPayload = {
|
||||||
worldId?: string;
|
worldId?: string;
|
||||||
|
|
@ -196,7 +198,10 @@ function WorldshaperLauncher() {
|
||||||
const showFallbackActions = launchState === "blocked" || launchState === "opened" || launchState === "error";
|
const showFallbackActions = launchState === "blocked" || launchState === "opened" || launchState === "error";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main className="launcher-shell">
|
<main
|
||||||
|
className="launcher-shell"
|
||||||
|
style={{ "--launcher-background-image": `url(${launcherBackground})` } as CSSProperties}
|
||||||
|
>
|
||||||
<section className="launcher-card">
|
<section className="launcher-card">
|
||||||
<p className="launcher-eyebrow">New RPG</p>
|
<p className="launcher-eyebrow">New RPG</p>
|
||||||
<h1 className="launcher-title">Worldshaper Studio</h1>
|
<h1 className="launcher-title">Worldshaper Studio</h1>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
--danger: #ff7b72;
|
--danger: #ff7b72;
|
||||||
--editor-bg: #0d121b;
|
--editor-bg: #0d121b;
|
||||||
--editor-ink: #dce6f4;
|
--editor-ink: #dce6f4;
|
||||||
|
--launcher-background-image: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
|
|
@ -19,7 +20,7 @@ body {
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
font-family: "Segoe UI", "Trebuchet MS", sans-serif;
|
font-family: "Segoe UI", "Trebuchet MS", sans-serif;
|
||||||
background:
|
background:
|
||||||
linear-gradient(160deg, #0f1115 0%, #141a24 100%);
|
linear-gradient(180deg, #080b11 0%, #101724 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
#root {
|
#root {
|
||||||
|
|
@ -27,22 +28,52 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.launcher-shell {
|
.launcher-shell {
|
||||||
|
position: relative;
|
||||||
|
isolation: isolate;
|
||||||
|
overflow: hidden;
|
||||||
min-height: 100dvh;
|
min-height: 100dvh;
|
||||||
display: grid;
|
display: grid;
|
||||||
place-items: center;
|
place-items: center;
|
||||||
padding: 24px;
|
padding: 48px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.launcher-shell::before,
|
||||||
|
.launcher-shell::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.launcher-shell::before {
|
||||||
|
z-index: -2;
|
||||||
|
background-image: var(--launcher-background-image);
|
||||||
|
background-position: center top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
opacity: 0.34;
|
||||||
|
filter: saturate(0.9) blur(2px);
|
||||||
|
transform: scale(1.02);
|
||||||
|
}
|
||||||
|
|
||||||
|
.launcher-shell::after {
|
||||||
|
z-index: -1;
|
||||||
|
background:
|
||||||
|
radial-gradient(circle at center, rgba(12, 18, 28, 0.16) 0%, rgba(7, 10, 16, 0.54) 56%, rgba(5, 7, 11, 0.78) 100%),
|
||||||
|
linear-gradient(180deg, rgba(8, 11, 17, 0.36) 0%, rgba(8, 11, 17, 0.52) 36%, rgba(7, 10, 15, 0.84) 72%, rgba(5, 7, 11, 0.96) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.launcher-card {
|
.launcher-card {
|
||||||
width: min(560px, 100%);
|
width: min(620px, 100%);
|
||||||
padding: 28px 30px;
|
padding: 28px 30px;
|
||||||
border: 1px solid rgba(120, 170, 230, 0.2);
|
border: 1px solid rgba(120, 170, 230, 0.2);
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
background:
|
background:
|
||||||
radial-gradient(circle at top left, rgba(92, 200, 255, 0.12), transparent 38%),
|
radial-gradient(circle at top left, rgba(92, 200, 255, 0.13), transparent 38%),
|
||||||
linear-gradient(180deg, rgba(24, 31, 44, 0.96) 0%, rgba(18, 24, 35, 0.96) 100%);
|
linear-gradient(180deg, rgba(18, 24, 35, 0.86) 0%, rgba(12, 17, 26, 0.94) 100%);
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
box-shadow:
|
box-shadow:
|
||||||
0 24px 60px rgba(0, 0, 0, 0.34),
|
0 28px 80px rgba(0, 0, 0, 0.46),
|
||||||
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1265,6 +1296,16 @@ button.danger:not(:disabled):hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 720px) {
|
@media (max-width: 720px) {
|
||||||
|
.launcher-shell {
|
||||||
|
padding: 24px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.launcher-shell::before {
|
||||||
|
background-position: 62% top;
|
||||||
|
opacity: 0.26;
|
||||||
|
filter: saturate(0.82) blur(1.5px);
|
||||||
|
}
|
||||||
|
|
||||||
.launcher-card {
|
.launcher-card {
|
||||||
padding: 22px 20px;
|
padding: 22px 20px;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue