recordstoreguy/engine/styles.css
type-two 4f7d21df2b Engine v2 + full 45-scene graph: choices, random, endurance, hold, needledrop, white labels, replay queue, stinger
- scenes.json: every DESIGN.md scene wired — T1-T7, SH1-6, Misfile, 4 needle-drop
  alts, 7 white labels, boss volleys, REPLAY queue sentinel, win+stinger gate
- player.js: choice windows (branch/death-goto), random variants (sh2 tape),
  endurance restarts w/ tightening (sh4), hold windows (t4s5/t5s5), needledrop
  power-up branches, unprompted collects, mirror-on-replay, soft fail (t5s4),
  needle_skip transitions, stale-death-timeout guard
- clips renamed to DESIGN ids (s01->t1s1 etc); placeholder gen covers all new
  window types and never overwrites real footage (86 clips: 8 real + 78 gen)
- sheets: added missing sh4_action + t5s4_action prompts
- verified in browser: choice pass/timeout, collect, needledrop, endurance
  tighten+death, hold pass/release-fail, soft fail, replay queue w/ mirror,
  win->stinger with 7 labels, live-timing run of t1s1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 04:40:41 +10:00

65 lines
3.9 KiB
CSS

* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { height: 100%; background: #000; overflow: hidden; font-family: "Courier New", monospace; }
#stage { position: relative; width: 100vw; height: 100vh; display: flex; align-items: center; justify-content: center; }
video { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
max-width: 100vw; max-height: 100vh; aspect-ratio: 16/9; width: 100%;
opacity: 0; pointer-events: none; }
video.active { opacity: 1; }
video.mirror { transform: translate(-50%, -50%) scaleX(-1); }
#scanlines { position: absolute; inset: 0; pointer-events: none; z-index: 5;
background: repeating-linear-gradient(to bottom, rgba(0,0,0,0) 0 2px, rgba(0,0,0,.22) 2px 4px);
box-shadow: inset 0 0 18vmin rgba(0,0,0,.85); }
/* QTE cue */
#cue { position: absolute; bottom: 16%; left: 50%; transform: translateX(-50%);
font-size: 14vmin; font-weight: bold; color: #0ff; z-index: 10; opacity: 0;
text-shadow: 0 0 2vmin #0ff, 0 0 6vmin #08f; pointer-events: none; }
#cue.show { opacity: 1; animation: pulse .3s ease-in-out infinite alternate; }
#cue.good { color: #0f4; text-shadow: 0 0 2vmin #0f4; animation: pop .25s ease-out; }
#cue.hold { color: #fa0; text-shadow: 0 0 2vmin #fa0, 0 0 6vmin #f60; }
/* needle-drop flash (optional power-up prompt) */
#nd { position: absolute; top: 14%; right: 8%; font-size: 8vmin; color: #f0f; z-index: 10;
opacity: 0; text-shadow: 0 0 2vmin #f0f, 0 0 6vmin #90f; pointer-events: none; }
#nd.show { opacity: 1; animation: pulse .18s ease-in-out infinite alternate; }
/* white-label toast */
#toast { position: absolute; top: 24%; left: 50%; transform: translateX(-50%);
font-size: 4vmin; color: #fff; z-index: 10; opacity: 0; letter-spacing: .5vmin;
text-shadow: 0 0 2vmin #fff; pointer-events: none; transition: opacity .3s; }
#toast.show { opacity: 1; }
@keyframes pulse { from { transform: translateX(-50%) scale(1); } to { transform: translateX(-50%) scale(1.18); } }
@keyframes pop { from { transform: translateX(-50%) scale(1.4); opacity: 1; } to { transform: translateX(-50%) scale(1); opacity: 0; } }
/* HUD */
#hud { position: absolute; top: 2vmin; left: 0; right: 0; display: flex;
justify-content: space-between; padding: 0 3vmin; z-index: 10; pointer-events: none; }
#lives { color: #f33; font-size: 4vmin; letter-spacing: .8vmin; text-shadow: 0 0 1.5vmin #f33; }
#score { color: #ff0; font-size: 4vmin; text-shadow: 0 0 1.5vmin #f80; }
#labels { color: #fff; font-size: 3vmin; letter-spacing: .5vmin; text-shadow: 0 0 1vmin #fff; }
/* full screens */
.screen { position: absolute; inset: 0; z-index: 20; display: flex; flex-direction: column;
align-items: center; justify-content: center; gap: 3vmin; text-align: center;
background: radial-gradient(ellipse at center, #180828 0%, #000 75%); }
.screen.hidden { display: none; }
.screen h1 { color: #f0f; font-size: 9vmin; text-shadow: 0 0 2vmin #f0f, 0 0 8vmin #90f; }
.screen h2 { color: #fff; font-size: 7vmin; text-shadow: 0 0 2vmin #0ff; }
.screen .sub { color: #0ff; font-size: 3vmin; }
.screen .blink { color: #fff; font-size: 4vmin; animation: blink 1s steps(2) infinite; }
#hiscore { color: #ff0; font-size: 3vmin; }
@keyframes blink { 50% { opacity: 0; } }
/* debug */
#debug { position: absolute; left: 0; right: 0; bottom: 0; z-index: 30;
background: rgba(0,0,0,.8); padding: 1vmin 2vmin; font-size: 1.8vmin; color: #0f0; }
#debug.hidden { display: none; }
#dbg-timeline { position: relative; height: 2.4vmin; background: #222; margin-bottom: .8vmin; }
.dbg-win { position: absolute; top: 0; bottom: 0; background: #08f; opacity: .8; }
.dbg-win.passed { background: #0f4; } .dbg-win.failed { background: #f33; }
#dbg-playhead { position: absolute; top: 0; bottom: 0; width: 2px; background: #fff; z-index: 2; }
#dbg-row { display: flex; gap: 2vmin; align-items: center; }
#dbg-row select { background: #111; color: #0f0; border: 1px solid #0f0; font: inherit; }