diff --git a/src/WorldshaperLauncher.tsx b/src/WorldshaperLauncher.tsx index 3fc0d26..734d883 100644 --- a/src/WorldshaperLauncher.tsx +++ b/src/WorldshaperLauncher.tsx @@ -1,9 +1,11 @@ +import type { CSSProperties } from "react"; import { useEffect, useState } from "react"; import { buildWorldshaperStudioUrl, openWorldshaperStudioWindow, } from "./worldshaperStudio/windowing"; import { CHANGELOG_SECTIONS, CHANGELOG_SPLASH_VERSION } from "./worldshaperStudio/changelogData"; +import launcherBackground from "../background.png"; type WorldDefaultPayload = { worldId?: string; @@ -196,7 +198,10 @@ function WorldshaperLauncher() { const showFallbackActions = launchState === "blocked" || launchState === "opened" || launchState === "error"; return ( -
+

New RPG

Worldshaper Studio

diff --git a/src/index.css b/src/index.css index 1a342f1..7f34799 100644 --- a/src/index.css +++ b/src/index.css @@ -8,6 +8,7 @@ --danger: #ff7b72; --editor-bg: #0d121b; --editor-ink: #dce6f4; + --launcher-background-image: none; } * { @@ -19,7 +20,7 @@ body { color: var(--ink); font-family: "Segoe UI", "Trebuchet MS", sans-serif; background: - linear-gradient(160deg, #0f1115 0%, #141a24 100%); + linear-gradient(180deg, #080b11 0%, #101724 100%); } #root { @@ -27,22 +28,52 @@ body { } .launcher-shell { + position: relative; + isolation: isolate; + overflow: hidden; min-height: 100dvh; display: grid; 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 { - width: min(560px, 100%); + width: min(620px, 100%); padding: 28px 30px; border: 1px solid rgba(120, 170, 230, 0.2); border-radius: 20px; background: - radial-gradient(circle at top left, rgba(92, 200, 255, 0.12), transparent 38%), - linear-gradient(180deg, rgba(24, 31, 44, 0.96) 0%, rgba(18, 24, 35, 0.96) 100%); + radial-gradient(circle at top left, rgba(92, 200, 255, 0.13), transparent 38%), + linear-gradient(180deg, rgba(18, 24, 35, 0.86) 0%, rgba(12, 17, 26, 0.94) 100%); + backdrop-filter: blur(12px); 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); } @@ -1265,6 +1296,16 @@ button.danger:not(:disabled):hover { } @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 { padding: 22px 20px; border-radius: 16px;