Compare commits

...

2 Commits

Author SHA1 Message Date
Fredrik Johansson
31a6770dfd Add a real background image to the ending screen
All checks were successful
Docker / build-and-push (push) Successful in 34s
Same treatment as the intro: generated desk photo (empty chair, a
single closed box where the stamp used to be, one dark pigeonhole
slot) converted PNG -> WebP, 1.7MB -> 45KB. Used for both win and
loss endings, since the image itself is mood-neutral rather than
victory- or failure-specific — the audit-stamp overlay (TILLSVIDARE
in green, OMPLACERAD/AVFÖRD in red) still carries the actual outcome.

.end-card switched from an opaque panel to a translucent one with a
backdrop blur so the photo is actually visible around and through the
card instead of fully hidden behind it — same fix .seal already
needed on the intro screen.

Verified by injecting all three real end states (clean win,
composure-driven loss, suspicion-maxed loss) and screenshotting each.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 19:57:24 +02:00
Fredrik Johansson
e82d948f28 Add a real intro background image
A generated desk/lamp/stamp photo (converted PNG -> WebP, 1.7MB ->
65KB, negligible quality loss at the size it's actually displayed)
now sits behind the intro screen, with the existing red "R" seal
stamped on top as an overlay — the seal already existed as a plain
CSS circle, just needed a photo worth stamping over. Gave it a subtle
dark backdrop + slightly stronger glow so it stays legible against
the busier background.

Raw source PNG gitignored — only the optimized derivative that
actually ships belongs in the repo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 19:43:18 +02:00
4 changed files with 20 additions and 4 deletions

5
.gitignore vendored
View File

@@ -2,3 +2,8 @@ node_modules
dist
.env
*.local
# Raw source images — public/*.webp are the optimized derivatives that
# actually ship; no need to bloat the repo with the 1.7MB originals.
/intro.png
/gameover.png

BIN
public/gameover.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
public/intro.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -74,15 +74,26 @@ button { font: inherit; }
.penalty { margin-bottom: 12px; color: var(--danger); font-size: 10px; text-transform: uppercase; }
.result button { border: 0; background: none; color: var(--text); cursor: pointer; }
.intro-screen, .end-screen { min-height: calc(100vh - 62px); display: grid; place-items: center; padding: 30px; background: radial-gradient(circle, #20192c 0, var(--bg) 66%); }
.intro-screen { grid-template-columns: auto minmax(280px, 540px); gap: clamp(30px, 7vw, 90px); }
.seal { width: clamp(160px, 25vw, 260px); aspect-ratio: 1; display: grid; place-items: center; border: 8px double var(--stamp); border-radius: 50%; color: var(--stamp); font: 700 clamp(90px, 16vw, 160px)/1 'Special Elite'; transform: rotate(-8deg); opacity: .78; box-shadow: 0 0 60px rgba(217,84,98,.12); }
.intro-screen {
grid-template-columns: auto minmax(280px, 540px);
gap: clamp(30px, 7vw, 90px);
background:
linear-gradient(rgba(13, 13, 26, 0.6), rgba(13, 13, 26, 0.88)),
url('/intro.webp') center / cover no-repeat;
}
.end-screen {
background:
linear-gradient(rgba(13, 13, 26, 0.55), rgba(13, 13, 26, 0.85)),
url('/gameover.webp') center / cover no-repeat;
}
.seal { width: clamp(160px, 25vw, 260px); aspect-ratio: 1; display: grid; place-items: center; border: 8px double var(--stamp); border-radius: 50%; color: var(--stamp); font: 700 clamp(90px, 16vw, 160px)/1 'Special Elite'; transform: rotate(-8deg); opacity: .85; box-shadow: 0 0 60px rgba(217,84,98,.25); background: rgba(13, 13, 26, 0.35); backdrop-filter: blur(1px); }
.intro-copy h1 { margin: 0; color: var(--stamp); font-size: clamp(52px, 10vw, 92px); letter-spacing: .15em; line-height: 1; }
.intro-sub { color: var(--dim); font-size: 10px; letter-spacing: .15em; text-transform: uppercase; }
.intro-copy > p:not(.intro-sub) { color: #b0b0c4; }
.end-card { width: min(620px, 100%); padding: clamp(24px, 5vw, 50px); border: 1px solid var(--border); background: var(--panel); text-align: center; position: relative; }
.end-card { width: min(620px, 100%); padding: clamp(24px, 5vw, 50px); border: 1px solid var(--border); background: rgba(18, 18, 31, 0.82); backdrop-filter: blur(2px); text-align: center; position: relative; }
.end-card h1 { color: var(--text); }
.end-card > p { color: var(--dim); }
.audit-stamp { display: inline-block; padding: 8px 16px; border: 3px solid var(--safe); color: var(--safe); font-size: 18px; font-weight: 700; letter-spacing: .12em; transform: rotate(-4deg); }
.audit-stamp { display: inline-block; padding: 8px 16px; border: 3px solid var(--safe); color: var(--safe); font-size: 18px; font-weight: 700; letter-spacing: .12em; transform: rotate(-4deg); background: rgba(13, 13, 26, 0.3); }
.failure .audit-stamp { border-color: var(--danger); color: var(--danger); }
.final-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 25px 0; }
.final-stats div { padding: 12px; border: 1px solid var(--border); }