232 lines
5.0 KiB
CSS
232 lines
5.0 KiB
CSS
/*
|
||
* Glory Defense – Seiten- und Overlay-Styles.
|
||
* Das Spiel selbst zeichnet Phaser ins Canvas; hier liegen nur Seitenrahmen,
|
||
* der Disclaimer und die HTML-Overlays (Dialoge, Namenseingabe).
|
||
*/
|
||
|
||
:root {
|
||
--gd-navy: #0d1321;
|
||
--gd-navy-2: #1b2438;
|
||
--gd-crimson: #c1121f;
|
||
--gd-gold: #f2c14e;
|
||
--gd-cream: #f4ecd8;
|
||
--gd-muted: #a9b1c4;
|
||
/* Nur Systemschriften: nichts wird mitgeliefert, keine Lizenzfragen. */
|
||
--gd-font: Impact, Haettenschweiler, "Arial Narrow Bold", "Arial Black", sans-serif;
|
||
--gd-font-body: "Segoe UI", system-ui, -apple-system, sans-serif;
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
html, body {
|
||
margin: 0;
|
||
height: 100%;
|
||
background: var(--gd-navy);
|
||
color: var(--gd-cream);
|
||
font-family: var(--gd-font-body);
|
||
}
|
||
|
||
a { color: var(--gd-gold); }
|
||
|
||
/* ------------------------------------------------------------------ Spielseite */
|
||
|
||
.game-page { overflow: hidden; }
|
||
|
||
#game-shell {
|
||
position: relative;
|
||
width: 100vw;
|
||
height: 100vh;
|
||
height: 100dvh;
|
||
}
|
||
|
||
#game {
|
||
position: absolute;
|
||
inset: 0;
|
||
}
|
||
|
||
/* Canvas nicht auswählbar/verschiebbar, sonst stört das beim schnellen Klicken. */
|
||
#game canvas {
|
||
display: block;
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
touch-action: none;
|
||
}
|
||
|
||
.boot-message {
|
||
position: absolute;
|
||
inset: auto 0 45% 0;
|
||
margin: 0;
|
||
text-align: center;
|
||
font-family: var(--gd-font);
|
||
letter-spacing: 0.08em;
|
||
color: var(--gd-gold);
|
||
}
|
||
|
||
.boot-message--error { color: #ff8a8a; }
|
||
|
||
/* ------------------------------------------------------------------ Overlays */
|
||
|
||
#overlay-root {
|
||
position: absolute;
|
||
inset: 0;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.overlay {
|
||
position: absolute;
|
||
inset: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: 16px;
|
||
background: rgba(8, 11, 20, 0.72);
|
||
pointer-events: auto;
|
||
}
|
||
|
||
.overlay__panel {
|
||
width: min(720px, 100%);
|
||
max-height: 100%;
|
||
overflow-y: auto;
|
||
padding: 28px 32px;
|
||
background: var(--gd-navy-2);
|
||
border: 3px solid var(--gd-gold);
|
||
box-shadow: 0 0 0 6px var(--gd-crimson), 0 18px 48px rgba(0, 0, 0, 0.6);
|
||
}
|
||
|
||
.overlay__actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 12px;
|
||
margin-top: 24px;
|
||
}
|
||
|
||
/* ------------------------------------------------------------------ Disclaimer */
|
||
|
||
.disclaimer__title {
|
||
margin: 0 0 12px;
|
||
font-family: var(--gd-font);
|
||
font-size: 1.6rem;
|
||
letter-spacing: 0.06em;
|
||
color: var(--gd-gold);
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.disclaimer__lead { font-size: 1.15rem; }
|
||
|
||
.disclaimer__list {
|
||
margin: 0;
|
||
padding-left: 1.2em;
|
||
line-height: 1.55;
|
||
}
|
||
|
||
.disclaimer__list li + li { margin-top: 8px; }
|
||
|
||
/* ------------------------------------------------------------------ Formulare */
|
||
|
||
.button {
|
||
display: inline-block;
|
||
padding: 10px 22px;
|
||
border: 2px solid var(--gd-gold);
|
||
background: var(--gd-crimson);
|
||
color: var(--gd-cream);
|
||
font: 700 1rem var(--gd-font-body);
|
||
letter-spacing: 0.06em;
|
||
text-transform: uppercase;
|
||
text-decoration: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.button:hover, .button:focus-visible {
|
||
background: var(--gd-gold);
|
||
color: var(--gd-navy);
|
||
outline: none;
|
||
}
|
||
|
||
.button--secondary { background: transparent; }
|
||
|
||
.field {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
margin-top: 16px;
|
||
}
|
||
|
||
.field__label {
|
||
font-weight: 700;
|
||
letter-spacing: 0.03em;
|
||
color: var(--gd-gold);
|
||
}
|
||
|
||
.field__input {
|
||
padding: 10px 12px;
|
||
border: 2px solid var(--gd-muted);
|
||
background: var(--gd-navy);
|
||
color: var(--gd-cream);
|
||
font-size: 1.1rem;
|
||
}
|
||
|
||
.field__input:focus { border-color: var(--gd-gold); outline: none; }
|
||
|
||
.field__hint { color: var(--gd-muted); font-size: 0.9rem; }
|
||
.field__error { color: #ff8a8a; min-height: 1.2em; }
|
||
|
||
/* ------------------------------------------------------------------ Game Over */
|
||
|
||
.stats {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
||
gap: 10px;
|
||
margin: 18px 0 8px;
|
||
}
|
||
|
||
.stats__row {
|
||
padding: 10px 12px;
|
||
background: var(--gd-navy);
|
||
border-left: 4px solid var(--gd-crimson);
|
||
}
|
||
|
||
.stats dt { color: var(--gd-muted); font-size: 0.85rem; }
|
||
.stats dd { margin: 4px 0 0; font: 600 1.35rem var(--gd-font); color: var(--gd-gold); }
|
||
|
||
.highscore-list {
|
||
margin: 16px 0 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
|
||
.highscore-list li {
|
||
display: grid;
|
||
grid-template-columns: 3em 1fr auto 4em;
|
||
gap: 12px;
|
||
padding: 6px 10px;
|
||
border-bottom: 1px solid rgba(169, 177, 196, 0.2);
|
||
}
|
||
|
||
.highscore-list__score, .highscore-list__wave { text-align: right; font-variant-numeric: tabular-nums; }
|
||
.highscore-list__own { background: rgba(242, 193, 78, 0.18); color: var(--gd-gold); font-weight: 600; }
|
||
|
||
/* ------------------------------------------------------------------ Eigenständige Seiten */
|
||
|
||
.page {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-height: 100vh;
|
||
padding: 16px;
|
||
}
|
||
|
||
.page__panel {
|
||
width: min(760px, 100%);
|
||
padding: 32px;
|
||
background: var(--gd-navy-2);
|
||
border: 3px solid var(--gd-gold);
|
||
box-shadow: 0 0 0 6px var(--gd-crimson);
|
||
}
|
||
|
||
.page__actions { margin-top: 28px; }
|
||
|
||
@media (max-width: 600px) {
|
||
.overlay__panel, .page__panel { padding: 20px 18px; }
|
||
.disclaimer__title { font-size: 1.25rem; }
|
||
}
|