SOURCE / PINNED RELEASE
Made of little things.
Stick Runner
- Release
- 50f4e4cd86f6…
- Author-recorded commit
- 2960bafd6cd9…
- License
- LICENSE
- Author’s source reference
- nostr://npub1ny7l44q0au5xkv3mjgt6zks5f0e2ydefslq4nhh2ve2xypgc2mqqat8qx2/wss%3A%2F%2Fgit.napplet.soy%2F/n-938fb0aa7b7
Archive hash verified: 3dacab6eb59b4481…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
/*
Stick Runner: a black-ink stickman racing across city rooftops at sunset.
Warm sunset sky, purple buildings, yellow warning stripes at the pits.
Colours are app-owned and do not follow the host theme.
*/
:root {
--ink: #1d1724;
--dusk: #2b2233;
--sun: #ffb36b;
--cream: #fff4dc;
--warn: #ffcc33;
color-scheme: dark;
font: 14px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
}
* {
box-sizing: border-box;
}
:where(html, body, body *) {
-webkit-user-select: none;
user-select: none;
-webkit-touch-callout: none;
}
html,
body,
#app {
height: 100%;
margin: 0;
}
body {
background: var(--ink);
color: var(--cream);
overflow: hidden;
}
.stage {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
height: 100%;
}
.screen {
position: relative;
flex: none;
}
.game {
display: block;
width: 100%;
height: 100%;
outline: none;
touch-action: none;
}
button {
font: inherit;
cursor: pointer;
}
.menu-button {
position: absolute;
top: 6px;
left: 6px;
padding: 4px 10px;
border: 2px solid var(--ink);
border-radius: 6px;
background: var(--cream);
color: var(--ink);
font-weight: 700;
font-size: 12px;
}
/* ---------- menu ---------- */
.menu {
position: absolute;
inset: 0;
display: grid;
place-items: center;
padding: 8px;
background: rgba(29, 23, 36, 0.72);
overflow: auto;
}
.menu[hidden] {
display: none;
}
.menu-card {
width: min(400px, 100%);
max-height: 100%;
overflow: auto;
padding: 14px 18px;
border: 3px solid var(--ink);
border-radius: 10px;
background: var(--cream);
color: var(--ink);
box-shadow: 0 6px 0 var(--ink);
}
.menu-title {
font-size: 26px;
font-weight: 900;
letter-spacing: 2px;
text-align: center;
font-style: italic;
}
.menu-result {
margin-top: 4px;
text-align: center;
font-weight: 700;
font-size: 16px;
color: #b0441e;
}
.menu-result[hidden] {
display: none;
}
.how p {
margin: 8px 0;
}
.pit-word {
padding: 0 4px;
border-radius: 3px;
background: var(--ink);
color: var(--warn);
}
.keys {
margin: 8px 0;
padding: 0;
list-style: none;
font-size: 13px;
}
.keys li {
margin: 4px 0;
}
kbd {
display: inline-block;
min-width: 20px;
padding: 0 4px;
border: 1.5px solid var(--ink);
border-bottom-width: 3px;
border-radius: 4px;
background: #fff;
font: 700 11px/16px system-ui, sans-serif;
text-align: center;
}
.menu-actions {
display: flex;
gap: 8px;
justify-content: center;
margin-top: 10px;
}
.menu-actions button {
min-width: 100px;
min-height: 36px;
padding: 6px 14px;
border: 2px solid var(--ink);
border-radius: 8px;
background: #fff;
color: var(--ink);
font-weight: 800;
}
.menu-actions button.primary {
background: var(--warn);
}
.menu-actions button[hidden] {
display: none;
}
.menu-actions button:focus-visible,
.menu-button:focus-visible {
outline: 3px solid var(--sun);
outline-offset: 2px;
}
/* On touch screens the keyboard keys are replaced with the on-screen buttons. */
.touch-mode .keys,
.touch-keys {
display: none;
}
.touch-mode .touch-keys {
display: block;
}
/* ---------- touch buttons ---------- */
.touch {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
max-width: 900px;
padding: 0 12px 8px;
}
.touch[hidden] {
display: none;
}
.touch-group {
display: flex;
gap: 10px;
}
.touch button {
width: 64px;
height: 64px;
border: 3px solid var(--cream);
border-radius: 50%;
background: rgba(255, 244, 220, 0.15);
color: var(--cream);
font-size: 22px;
font-weight: 900;
touch-action: none;
}
.touch button.touch-jump {
width: 84px;
height: 84px;
font-size: 16px;
border-color: var(--warn);
color: var(--warn);
}
.touch button.held {
background: rgba(255, 244, 220, 0.4);
}
/* ---------- small frames ---------- */
.too-small {
position: absolute;
inset: 0;
display: grid;
place-items: center;
padding: 8px;
text-align: center;
background: var(--ink);
color: var(--warn);
font-weight: 700;
}
.too-small[hidden] {
display: none;
}
