Sharpen league and Climb difficulty and give Gore a front door

This commit is contained in:
wuwi committed 2026-09-07 09:53:49 +02:00
1 parent e3faeb0a3a
commit ede1f48152
6 files changed
+151 -51

No files matched your search

+24 -17
View File
@@ -374,8 +374,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
#cdBadges { display: flex; gap: 10px; align-items: flex-end; }
#cdBadges .badge { position: relative; flex: 1; min-width: 0; display: flex; flex-direction: column;
align-items: center; gap: 4px; }
/* ...and an earned shield SMOULDERS: two-pixel embers drifting off it, each on its own delay and
lane (main.embers). Pure CSS — the menu parks the game loop and this has no business waking it. */
/* ...and it CATCHES THE LIGHT: three points on the shield, dark for most of a long cycle and
flaring for a fraction of it (main.glints). Not a fire — a glint, the way metal behaves. */
#cdBadges .badge em { position: absolute; width: 4px; height: 4px; border-radius: 50%;
@@ -383,9 +381,9 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
opacity: 0; pointer-events: none; animation-name: glint;
animation-timing-function: ease-out; animation-iteration-count: infinite; }
@keyframes glint {
0%, 88%, 100% { opacity: 0; transform: scale(0.3); }
92% { opacity: 1; transform: scale(1); }
96% { opacity: 0.35; transform: scale(0.6); } }
0%, 12%, 100% { opacity: 0; transform: scale(0.3); }
4% { opacity: 1; transform: scale(1); }
8% { opacity: 0.35; transform: scale(0.6); } }
@media (prefers-reduced-motion: reduce) { #cdBadges .badge em { display: none; } }
#cdBadges img { height: 46px; image-rendering: pixelated; }
#cdBadges .badge u { font: 700 7px Silkscreen, monospace; color: var(--acid); letter-spacing: 0.5px;
@@ -659,8 +657,16 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
padding-bottom: max(10px, env(safe-area-inset-bottom));
border-top: 2px solid var(--line); background: var(--solid); }
.foot .btn { margin-bottom: 0; }
/* ...except the splash's own secondary door: OTHER GAMES sat flush on the STATS/RANKINGS row */
.foot.bare #mOther { margin-bottom: 12px; }
/* Gore gets a front door; the records become quiet navigation, with full touch targets. */
#mGore { display: flex; align-items: center; justify-content: center; gap: 12px;
padding: 9px 12px; border-color: #804338; background: #281b19; color: #f1d6bf; }
#mGore b { font: 400 23px/1.1 Bangers, cursive; letter-spacing: 1px; }
#mGore i { margin: 0; color: #d5aa91; font: 400 9px/1.5 Silkscreen, monospace; letter-spacing: 0; }
.splashLinks { display: flex; gap: 4px; margin-top: 5px; }
.splashLinks .btn.sec { flex: 1; width: auto; min-height: 44px; padding: 7px 2px;
background: transparent; border-color: transparent; color: #ccc4b5;
font-size: 16px; letter-spacing: 0; }
.splashLinks #mOther { flex: 1.5; }
/* the splash's bottom band: no bar, no rule — the court art has to keep running under it */
.foot.bare { border: 0; background: none; }
.foot.bare .btn.big { margin-bottom: 10px; }
@@ -680,10 +686,10 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
animation: dealIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) backwards; }
#intro.deal #splash #plaque { animation-delay: 0.02s; }
#intro.deal #splash #mStart { animation-delay: 0.12s; }
#intro.deal #splash #mOther { animation-delay: 0.19s; }
/* the pair of secondary buttons is a CLASS, so it needs the same weight as the shorthand above
#intro.deal #splash #mGore { animation-delay: 0.19s; }
/* the navigation row is a CLASS, so it needs the same weight as the shorthand above
to override its delay — the id selectors around it get there on their own */
#intro.deal #splash .foot.bare > .two { animation-delay: 0.26s; }
#intro.deal #splash .foot.bare > .splashLinks { animation-delay: 0.26s; }
#intro.deal #splash #build { animation-delay: 0.33s; }
@media (prefers-reduced-motion: reduce) {
#intro.deal #splash #plaque, #intro.deal #splash .foot.bare > * { animation: none; } }
@@ -696,7 +702,7 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
#boot u { display: block; margin-top: 7px; text-align: center; text-decoration: none;
font: 400 9px Silkscreen, monospace; color: var(--dim); letter-spacing: 2px; }
#splash.busy #boot { display: block; }
#splash.busy .btn, #splash.busy .two, #splash.busy #build { display: none; }
#splash.busy .btn, #splash.busy .splashLinks, #splash.busy #build { display: none; }
/* NOTHING DATA-DRIVEN DURING THE BOOT (2026-08-31, Oliver: "die oberfläche ist hier regelmäßig
in einem undefinierten zustand"). The plaque used to stand there as a skeleton, which is still
a plaque saying LEVEL 1 to a level-25 player for as long as the profile takes to land. The
@@ -847,12 +853,13 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
<!-- THE FRONT DOOR IS THE FIXTURE (2026-08-31, THE SEASON). The primary button used to say
PLAY MATCH and open a wall of posters, which asked the player a question the game
already knows the answer to. It names the next cup fixture now and enters the draw;
everything else lives one tap down, behind OTHER GAMES. -->
Gore has its own secondary door; the other modes live behind OTHER GAMES. -->
<button class="btn big" id="mStart"><b id="msTitle">THE CUP</b><i id="msLine"></i></button>
<button class="btn sec" id="mOther">OTHER GAMES</button>
<div class="two">
<button class="btn sec" id="mStats">STATS<i id="mKills">0</i></button>
<button class="btn sec" id="mRanks">BOARD<i id="mBest">BEST 0</i></button>
<button class="btn sec" id="mGore"><b>SPLATTER GORE</b><i>NO CUP.<br>JUST CARNAGE.</i></button>
<div class="splashLinks">
<button class="btn sec" id="mOther">OTHER GAMES</button>
<button class="btn sec" id="mStats">STATS</button>
<button class="btn sec" id="mRanks">BOARD</button>
</div>
<p id="build"></p>
</div>
@@ -1082,6 +1089,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
</div>
</div>
</div>
<script type="module" src="src/main.js?v=349"></script>
<script type="module" src="src/main.js?v=350"></script>
</body>
</html>