Files
void-genesis/dev/lobby-frontend/style.css
T

614 lines
14 KiB
CSS

/* --- LOKALE SCHRIFTART LADEN --- */
@font-face {
font-family: 'UI Font';
/* .otf Dateien bekommen das Format 'opentype', .ttf Dateien 'truetype' */
src: url('src/assets/fonts/WDXLLubrifontSC-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
/* 2. Die exklusive Schrift für das Void-Genesis Logo */
@font-face {
font-family: 'Logo Font';
src: url('src/assets/fonts/Quantico-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
/* --- FARB- & FONT-VARIABLEN (CSS) --- */
:root {
/* ... deine bisherigen Farb-Variablen ... */
--color-bg-page: #000000;
--color-text-main: #ffffff;
--color-text-placeholder: rgba(255, 255, 255, 0.4);
--color-text-inactive: rgba(255, 255, 255, 0.5);
--color-cyan-bright: #00f0ff;
--color-cyan-dark: #00a0aa;
--color-green-bright: #00ff00;
--color-error: #ff4444;
--color-checkbox-bg: rgba(11, 25, 44, 0.8);
/* NEU: Wir definieren die Schriftart zentral */
--font-main: 'UI Font', sans-serif;
}
/* Reset von Standard-Abständen */
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: var(--color-bg-page);
font-family: var(--font-main);
/* NEU: Verbietet mobilen Browsern das eigenmächtige Vergrößern der Schrift */
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
}
#game-wrapper {
position: relative;
width: 100%;
height: 100%;
}
#pixi-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
#ui-layer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
pointer-events: none;
}
#register-form {
pointer-events: auto;
width: 500px;
height: 500px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.input-group label {
display: none;
}
.input-group input {
position: absolute;
width: 300px;
height: 50px;
left: 115px;
box-sizing: border-box;
padding: 10px 15px;
background: transparent;
border: none;
outline: none;
color: var(--color-text-main);
font-size: 16px;
font-family: inherit;
transition: text-shadow 0.2s ease;
}
#username {
top: 135px;
}
#email {
top: 200px;
}
#password {
top: 265px;
}
.input-group input::placeholder {
color: var(--color-text-placeholder);
}
.input-group input:focus {
text-shadow: 0 0 8px var(--color-cyan-dark);
background: transparent;
box-shadow: none;
}
#btn-register {
position: absolute;
width: 370px;
height: 55px;
left: 65px;
top: 390px;
background: transparent;
border: none;
color: var(--color-text-main);
font-size: 18px;
font-weight: bold;
font-family: inherit;
/*text-transform: uppercase;*/
letter-spacing: 2px;
cursor: pointer;
transition: all 0.2s ease;
}
#btn-register:hover {
background: transparent;
color: var(--color-text-main);
text-shadow: 0 0 15px var(--color-text-main), 0 0 30px var(--color-green-bright);
}
.tab-btn {
position: absolute;
height: 40px;
width: 180px;
top: 60px;
background: transparent;
border: none;
color: var(--color-text-inactive);
font-size: 14px;
font-family: inherit;
text-transform: uppercase;
cursor: pointer;
outline: none;
transition: color 0.2s ease;
}
#tab-login {
left: 65px;
}
#tab-register {
left: 255px;
}
.tab-btn.active {
color: var(--color-text-main);
text-shadow: 0 0 8px var(--color-cyan-bright);
}
.tab-btn:hover:not(.active) {
color: var(--color-text-main);
}
.checkbox-group {
position: absolute;
left: 115px;
/*top: 275px; */
display: flex;
align-items: center;
gap: 10px;
}
#group-remember {
/* Position für den Login-Modus.
Das Passwortfeld liegt hier bei 200px, 275px passt also perfekt. */
top: 300px;
}
#group-agb {
/* Position für den Registrierungs-Modus.
Das Passwortfeld liegt hier tiefer (265px + 50px Höhe).
Wir setzen die Checkbox darunter. */
top: 325px;
}
.checkbox-group label {
color: var(--color-text-main);
font-size: 14px;
cursor: pointer;
}
.checkbox-group input[type="checkbox"] {
appearance: none;
width: 18px;
height: 18px;
border: 1px solid var(--color-cyan-dark);
background: var(--color-checkbox-bg);
cursor: pointer;
position: relative;
}
.checkbox-group input[type="checkbox"]:checked::after {
content: '✔';
position: absolute;
color: var(--color-cyan-bright);
font-size: 14px;
top: -2px;
left: 2px;
}
#otp-instruction {
display: none;
position: absolute;
top: 120px;
left: 65px;
width: 370px;
text-align: center;
color: var(--color-text-main);
font-size: 15px;
margin: 0;
}
#msg-box {
position: absolute;
top: 350px;
left: 65px;
width: 370px;
height: 30px;
color: var(--color-error);
font-size: 14px;
text-align: center;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
}
/* --- NEU: RESEND OTP LINK --- */
#resend-otp-link {
position: absolute;
top: 250px;
left: 65px;
width: 370px;
text-align: center;
color: var(--color-text-inactive);
font-size: 14px;
text-decoration: underline; /* Unterstrichen, damit es als Link erkennbar ist */
cursor: pointer;
/* WICHTIG: Erlaubt das Anklicken, da der Container darüber (ui-layer) pointer-events: none hat */
pointer-events: auto;
transition: color 0.2s ease, text-shadow 0.2s ease;
}
#resend-otp-link:hover {
color: var(--color-cyan-bright);
text-shadow: 0 0 8px var(--color-cyan-bright);
}
#forgot-password-link {
position: absolute;
/* Wir positionieren ihn unter dem Passwort-Feld (200px) auf Höhe der Checkboxen */
top: 255px;
left: 120px;
color: var(--color-text-inactive);
font-size: 14px;
text-decoration: underline;
cursor: pointer;
pointer-events: auto; /* Wichtig für die Klickbarkeit durch den ui-layer */
transition: color 0.2s ease, text-shadow 0.2s ease;
}
#forgot-password-link:hover {
color: var(--color-cyan-bright);
text-shadow: 0 0 8px var(--color-cyan-bright);
}
/* --- NEU: DISCORD LINK --- */
#discord-link {
position: absolute;
/* WICHTIG: Trage hier exakt die gleichen Werte ein,
die du in der main.js beim 'discordContainer.position.set(X, Y)' hast! */
left: 640px; /* Positiver Wert, da es jetzt rechts vom 500px Panel liegt */
top: 380px; /* Y-Koordinate deines Panels */
/* Die Größe deines PixiJS Discord-Panels */
width: 280px;
height: 85px;
/* Komplett unsichtbar machen, wir wollen nur das Pixi-Bild darunter sehen */
background: transparent;
text-decoration: none;
/* Sorgt dafür, dass die Maus zur Klick-Hand wird */
cursor: pointer;
/* Aktiviert die Klickbarkeit für diese Schicht */
pointer-events: auto;
}
/* --- NEU: FOOTER STYLING --- */
#game-footer {
position: absolute; bottom: 0; left: 0; width: 100%;
/* Höhe des Footers (wird auch im Pixi Kachel-Sprite genutzt) */
height: 40px;
/* Z-Index hochsetzen, damit der Text über dem Pixi-Hintergrund liegt */
z-index: 20;
/* pointer-events: none deaktivieren, damit wir den Impressum-Link anklicken können! */
pointer-events: none;
display: flex; justify-content: space-between; align-items: center;
padding: 0 40px; box-sizing: border-box;
color: var(--color-text-inactive);
font-size: 12px;
/* Wir nutzen nicht mehr 'Courier New', sondern unsere UI-Schrift */
font-family: inherit;
/* GRAFISCHE ABSETZUNG: Wir fügen eine leuchtende Cyan-Neon-Linie oben hinzu. */
border-top: 1px solid var(--color-text-inactive);
/* Und nutzen den Pixi Kachel-Hintergrund, um den Sci-Fi Look zu übernehmen. */
background: transparent;
}
/* Flexbox-Verteilung für die drei Footer-Bereiche */
.footer-left { flex: 1; text-align: left; }
.footer-center { flex: 1; text-align: center; }
.footer-right { flex: 1; text-align: right; }
#game-footer a {
color: var(--color-text-inactive); text-decoration: none;
transition: color 0.2s ease, text-shadow 0.2s ease;
/* Wir reaktivieren Klicks für den Link */
pointer-events: auto;
}
#game-footer a:hover {
color: var(--color-cyan-bright);
text-shadow: 0 0 8px var(--color-cyan-bright);
}
#back-link {
position: absolute;
/* Wir positionieren ihn oben links, wo sonst die Tabs sitzen */
top: 70px;
left: 65px;
color: var(--color-text-inactive);
font-size: 15px;
text-decoration: none;
cursor: pointer;
pointer-events: auto; /* Wichtig für Klickbarkeit */
transition: color 0.2s ease, text-shadow 0.2s ease;
}
#back-link:hover {
color: var(--color-cyan-bright);
text-shadow: 0 0 8px var(--color-cyan-bright);
}
#lobby-ui {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
pointer-events: none;
z-index: 15;
}
#top-bar {
width: 100%; height: 50px;
background: transparent;
border-bottom: none;
box-shadow: none;
display: flex; justify-content: space-between; align-items: center;
padding: 0 20px; box-sizing: border-box;
pointer-events: auto;
}
.top-bar-right {
display: flex; align-items: center; gap: 20px;
}
/* --- Grundgerüst der Custom Dropdowns --- */
.custom-dropdown {
position: relative;
font-family: var(--font-main);
color: var(--color-text-main);
}
/* Der sichtbare Klick-Bereich (Toggle) */
.dropdown-toggle {
display: flex; align-items: center; gap: 8px;
cursor: pointer;
padding: 5px 10px;
border: 1px solid transparent;
transition: all 0.2s ease;
user-select: none; /* Verhindert das versehentliche Markieren von Text */
}
.dropdown-toggle:hover {
border: 1px solid var(--color-cyan-dark);
background: rgba(0, 240, 255, 0.05);
}
.dropdown-arrow {
font-size: 10px;
color: var(--color-cyan-dark);
}
.flag-icon {
font-size: 16px;
}
/* --- Das aufklappbare Menü --- */
.dropdown-menu {
position: absolute;
top: 100%; /* Direkt unter dem Toggle anheften */
right: 0; /* Rechtsbündig abschließen */
margin-top: 10px;
background: rgba(11, 25, 44, 0.95);
border: 1px solid var(--color-cyan-dark);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
list-style: none; /* Aufzählungszeichen entfernen */
padding: 5px 0;
min-width: 150px;
/* Standardmäßig unsichtbar und keine Klicks annehmend */
opacity: 0;
pointer-events: none;
transform: translateY(-10px);
transition: all 0.2s ease;
}
/* Wenn die Klasse 'show' per JS hinzugefügt wird, klappt das Menü auf */
.dropdown-menu.show {
opacity: 1;
pointer-events: auto;
transform: translateY(0);
}
/* Das User-Menü braucht etwas mehr Platz für die langen Texte */
.user-menu {
min-width: 220px;
}
/* --- Einzelne Menü-Einträge --- */
.dropdown-item {
padding: 10px 15px;
cursor: pointer;
display: flex; align-items: center; gap: 10px;
font-size: 14px;
transition: background 0.2s ease, color 0.2s ease;
}
.dropdown-item:hover:not(.disabled) {
background: rgba(0, 240, 255, 0.1);
color: var(--color-cyan-bright);
}
/* --- Ausgegraute Einträge (Disabled) --- */
.dropdown-item.disabled, .dropdown-header.disabled {
color: var(--color-text-inactive);
cursor: not-allowed;
}
.dropdown-header {
padding: 10px 15px;
font-size: 14px;
line-height: 1.4;
}
.premium-text {
color: var(--color-cyan-bright);
font-weight: bold;
}
/* --- Trennlinie im Menü --- */
.dropdown-divider {
height: 1px;
background: var(--color-cyan-dark);
margin: 5px 0;
opacity: 0.5;
}
/* --- Spezielles Styling für den Logout-Button --- */
.logout-item {
color: var(--color-error);
font-weight: bold;
}
.logout-item:hover {
background: rgba(255, 68, 68, 0.1) !important;
color: var(--color-error) !important;
}
@media (max-width: 600px) {
/* --- 1. Login/Registrierungs-Formular skalieren --- */
#register-form {
transform: translate(-50%, -50%) scale(0.7);
}
/* --- 2. Top-Bar in der Lobby optimieren --- */
#top-bar {
padding: 0 10px;
}
.top-bar-left .lobby-logo {
font-size: 16px;
}
#user-info {
gap: 10px;
}
#lobby-username {
font-size: 14px;
max-width: 80px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#btn-logout {
padding: 5px 10px;
font-size: 12px;
}
/* --- 3. Footer aufräumen --- */
#game-footer {
flex-direction: column;
height: auto;
padding: 10px 0;
gap: 8px;
background: rgba(0, 0, 0, 0.7);
}
.footer-left, .footer-center, .footer-right {
text-align: center;
width: 100%;
}
#discord-link {
left: 125px;
top: 520px;
}
}
@media (max-height: 1050px) and (min-width: 601px) {
#register-form {
/* Wir schieben das HTML-Formular aus der exakten Mitte um 80px nach unten.
So hat das Logo (das in PixiJS darüber liegt) genug Luft zum Atmen. */
top: calc(50% + 80px);
}
}
@media (max-height: 500px) {
/* --- Formular noch kleiner machen, damit es vertikal passt --- */
#register-form {
/* scale(0.5) macht das Formular klein genug für Handys im Querformat */
transform: translate(-50%, -50%) scale(0.4);
top: 50%;
}
/* --- Discord-Button wie im normalen Handy-Modus nach unten klappen --- */
#discord-link {
left: -420px;
top: 350px;
}
/* --- Footer extrem flach machen --- */
/* Im Querformat haben wir in der Breite Platz, aber in der Höhe nicht.
Daher ordnen wir den Text wieder als Reihe (row) an. */
#game-footer {
flex-direction: row;
height: 30px;
padding: 0 20px;
background: rgba(0, 0, 0, 0.7);
}
.footer-left, .footer-center, .footer-right {
text-align: center;
width: 33%;
font-size: 10px; /* Schrift minimal verkleinern */
}
}