3 Commits
2.3 ... main

Author SHA1 Message Date
Git Manager GUI
3d0c7ce557 Upload via Git Manager GUI 2026-05-11 09:52:23 +02:00
Git Manager GUI
acb12a15bf Upload via Git Manager GUI 2026-05-11 09:52:14 +02:00
Git Manager GUI
287ee0da24 Upload via Git Manager GUI 2026-05-11 09:51:36 +02:00
3 changed files with 4332 additions and 4135 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,240 +1,268 @@
<?php get_header(); ?> <?php get_header(); ?>
<div class="container site-main"> <div class="container site-main">
<div class="content-area"> <div class="content-area">
<div class="bewerbung-container"> <div class="bewerbung-container">
<header class="page-header"> <header class="page-header">
<h1 class="page-title"> <h1 class="page-title">
<i class="fas fa-clipboard-list"></i> <i class="fas fa-clipboard-list"></i>
<?php echo esc_html( get_theme_mod('mm_bewerbung_title', __('Bewirb dich bei uns!', 'minecraft-modern-theme')) ); ?> <?php echo esc_html( get_theme_mod('mm_bewerbung_title', __('Bewirb dich bei uns!', 'minecraft-modern-theme')) ); ?>
</h1> </h1>
<p class="page-description"> <p class="page-description">
<?php echo esc_html( get_theme_mod('mm_bewerbung_desc', __('Du möchtest Teil unseres Teams werden? Füll das Formular aus und wir melden uns bei dir.', 'minecraft-modern-theme')) ); ?> <?php echo esc_html( get_theme_mod('mm_bewerbung_desc', __('Du möchtest Teil unseres Teams werden? Füll das Formular aus und wir melden uns bei dir.', 'minecraft-modern-theme')) ); ?>
</p> </p>
</header> </header>
<?php if ( ! get_theme_mod('mm_bewerbung_enabled', false) ) : ?> <?php if ( ! get_theme_mod('mm_bewerbung_enabled', false) ) : ?>
<div class="bewerbung-disabled"> <div class="bewerbung-disabled">
<i class="fas fa-lock"></i> <i class="fas fa-lock"></i>
<p><?php _e('Bewerbungen sind momentan nicht möglich.', 'minecraft-modern-theme'); ?></p> <p><?php _e('Bewerbungen sind momentan nicht möglich.', 'minecraft-modern-theme'); ?></p>
</div> </div>
<?php else : ?> <?php else : ?>
<div id="bewerbung-success" class="bewerbung-success" style="display:none;"> <div id="bewerbung-success" class="bewerbung-success" style="display:none;">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<p id="bewerbung-success-msg"></p> <p id="bewerbung-success-msg"></p>
</div> </div>
<form id="bewerbung-form" class="bewerbung-form" novalidate> <form id="bewerbung-form" class="bewerbung-form" novalidate>
<?php wp_nonce_field('mm_bewerbung_nonce', 'mm_bew_nonce_field'); ?> <?php wp_nonce_field('mm_bewerbung_nonce', 'mm_bew_nonce_field'); ?>
<div class="bew-grid"> <div class="bew-grid">
<!-- Minecraft Username --> <!-- Minecraft Username -->
<div class="bew-field"> <div class="bew-field">
<label for="bew_mc_name" class="bew-label"> <label for="bew_mc_name" class="bew-label">
<i class="fas fa-gamepad"></i> <i class="fas fa-gamepad"></i>
<?php _e('Minecraft Username', 'minecraft-modern-theme'); ?> <?php _e('Minecraft Username', 'minecraft-modern-theme'); ?>
<span class="bew-required">*</span> <span class="bew-required">*</span>
</label> </label>
<div class="bew-mc-wrap"> <div class="bew-mc-wrap">
<input type="text" id="bew_mc_name" name="mc_name" <input type="text" id="bew_mc_name" name="mc_name"
class="bew-input" required maxlength="16" class="bew-input" required maxlength="16"
placeholder="z.B. Steve_123" placeholder="z.B. Steve_123"
autocomplete="off"> autocomplete="off">
<div class="bew-mc-avatar" id="bew-mc-avatar"> <div class="bew-mc-avatar" id="bew-mc-avatar">
<img src="" alt="" id="bew-mc-avatar-img" style="display:none;"> <img src="" alt="" id="bew-mc-avatar-img" style="display:none;">
<i class="fas fa-user" id="bew-mc-avatar-placeholder"></i> <i class="fas fa-user" id="bew-mc-avatar-placeholder"></i>
</div> </div>
</div> </div>
<p class="bew-hint"><?php _e('Dein exakter Minecraft-Username (Groß-/Kleinschreibung beachten)', 'minecraft-modern-theme'); ?></p> <p class="bew-hint"><?php _e('Dein exakter Minecraft-Username (Groß-/Kleinschreibung beachten)', 'minecraft-modern-theme'); ?></p>
</div> </div>
<!-- Discord Username --> <!-- Discord Username -->
<div class="bew-field"> <div class="bew-field">
<label for="bew_discord" class="bew-label"> <label for="bew_discord" class="bew-label">
<i class="fab fa-discord"></i> <i class="fab fa-discord"></i>
<?php _e('Discord Username', 'minecraft-modern-theme'); ?> <?php _e('Discord Username', 'minecraft-modern-theme'); ?>
<span class="bew-required">*</span> <span class="bew-required">*</span>
</label> </label>
<input type="text" id="bew_discord" name="discord" <input type="text" id="bew_discord" name="discord"
class="bew-input" required maxlength="50" class="bew-input" required maxlength="50"
placeholder="z.B. Steve#1234 oder @steve"> placeholder="z.B. Steve#1234 oder @steve">
<p class="bew-hint"><?php _e('Dein Discord-Name damit wir dich erreichen können', 'minecraft-modern-theme'); ?></p> <p class="bew-hint"><?php _e('Dein Discord-Name damit wir dich erreichen können', 'minecraft-modern-theme'); ?></p>
</div> </div>
<!-- Alter --> <!-- Alter -->
<div class="bew-field bew-field--small"> <div class="bew-field bew-field--small">
<label for="bew_alter" class="bew-label"> <label for="bew_alter" class="bew-label">
<i class="fas fa-birthday-cake"></i> <i class="fas fa-birthday-cake"></i>
<?php _e('Alter', 'minecraft-modern-theme'); ?> <?php _e('Alter', 'minecraft-modern-theme'); ?>
<span class="bew-required">*</span> <span class="bew-required">*</span>
</label> </label>
<input type="number" id="bew_alter" name="alter" <input type="number" id="bew_alter" name="alter"
class="bew-input" required min="1" max="99" class="bew-input" required min="1" max="99"
placeholder="z.B. 16"> placeholder="z.B. 16">
<?php <?php
$min = absint(get_theme_mod('mm_bewerbung_min_alter', 14)); $min = absint(get_theme_mod('mm_bewerbung_min_alter', 14));
if ($min > 0) : if ($min > 0) :
?> ?>
<p class="bew-hint"><?php printf( __('Mindestalter: %d Jahre', 'minecraft-modern-theme'), $min ); ?></p> <p class="bew-hint"><?php printf( __('Mindestalter: %d Jahre', 'minecraft-modern-theme'), $min ); ?></p>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div><!-- .bew-grid --> </div><!-- .bew-grid -->
<!-- Warum mitspielen --> <!-- Bewirbt sich als -->
<div class="bew-field"> <?php
<label for="bew_warum" class="bew-label"> $positionen = mm_bewerbung_get_positionen();
<i class="fas fa-question-circle"></i> if ( ! empty( $positionen ) ) :
<?php _e('Warum möchtest du mitspielen?', 'minecraft-modern-theme'); ?> ?>
<span class="bew-required">*</span> <div class="bew-field">
</label> <label class="bew-label">
<textarea id="bew_warum" name="warum" class="bew-textarea" required <i class="fas fa-briefcase"></i>
rows="4" maxlength="1000" <?php _e('Bewirbt sich als', 'minecraft-modern-theme'); ?>
placeholder="<?php esc_attr_e('Erzähl uns warum du auf unseren Server möchtest und was du dir davon erhoffst...', 'minecraft-modern-theme'); ?>"></textarea> <span class="bew-required">*</span>
<div class="bew-char-count"><span id="warum-count">0</span>/1000</div> </label>
</div> <div class="bew-position-grid">
<?php foreach ( $positionen as $pos ) : ?>
<!-- Erfahrung / Vorstellung --> <label class="bew-position-card">
<div class="bew-field"> <input type="radio" name="position" value="<?php echo esc_attr( $pos ); ?>" required>
<label for="bew_erfahrung" class="bew-label"> <span class="bew-position-label">
<i class="fas fa-star"></i> <i class="fas fa-shield-alt"></i>
<?php _e('Erfahrung & Vorstellung', 'minecraft-modern-theme'); ?> <?php echo esc_html( $pos ); ?>
<span class="bew-required">*</span> </span>
</label> </label>
<textarea id="bew_erfahrung" name="erfahrung" class="bew-textarea" required <?php endforeach; ?>
rows="5" maxlength="2000" </div>
placeholder="<?php esc_attr_e('Stell dich kurz vor: Wie lange spielst du Minecraft? Welche Erfahrungen bringst du mit? Was macht dich besonders?', 'minecraft-modern-theme'); ?>"></textarea> <p class="bew-hint"><?php _e('Wähle die Position für die du dich bewirbst.', 'minecraft-modern-theme'); ?></p>
<div class="bew-char-count"><span id="erfahrung-count">0</span>/2000</div> </div>
</div> <?php endif; ?>
<!-- Fehler-Meldung --> <!-- Warum mitspielen -->
<div id="bewerbung-error" class="bewerbung-error" style="display:none;"> <div class="bew-field">
<i class="fas fa-exclamation-triangle"></i> <label for="bew_warum" class="bew-label">
<span id="bewerbung-error-msg"></span> <i class="fas fa-question-circle"></i>
</div> <?php _e('Warum möchtest du mitspielen?', 'minecraft-modern-theme'); ?>
<span class="bew-required">*</span>
<!-- Submit --> </label>
<div class="bew-submit-wrap"> <textarea id="bew_warum" name="warum" class="bew-textarea" required
<button type="submit" id="bewerbung-submit" class="bew-submit-btn"> rows="4" maxlength="1000"
<i class="fas fa-paper-plane"></i> placeholder="<?php esc_attr_e('Erzähl uns warum du auf unseren Server möchtest und was du dir davon erhoffst...', 'minecraft-modern-theme'); ?>"></textarea>
<?php _e('Bewerbung absenden', 'minecraft-modern-theme'); ?> <div class="bew-char-count"><span id="warum-count">0</span>/1000</div>
</button> </div>
<p class="bew-submit-hint">
<i class="fas fa-shield-alt"></i> <!-- Erfahrung / Vorstellung -->
<?php _e('Mit * markierte Felder sind Pflichtfelder. Deine Daten werden nur intern gespeichert.', 'minecraft-modern-theme'); ?> <div class="bew-field">
</p> <label for="bew_erfahrung" class="bew-label">
</div> <i class="fas fa-star"></i>
<?php _e('Erfahrung & Vorstellung', 'minecraft-modern-theme'); ?>
</form> <span class="bew-required">*</span>
</label>
<?php endif; ?> <textarea id="bew_erfahrung" name="erfahrung" class="bew-textarea" required
rows="5" maxlength="2000"
</div><!-- .bewerbung-container --> placeholder="<?php esc_attr_e('Stell dich kurz vor: Wie lange spielst du Minecraft? Welche Erfahrungen bringst du mit? Was macht dich besonders?', 'minecraft-modern-theme'); ?>"></textarea>
</div> <div class="bew-char-count"><span id="erfahrung-count">0</span>/2000</div>
</div> </div>
<script> <!-- Fehler-Meldung -->
document.addEventListener('DOMContentLoaded', function() { <div id="bewerbung-error" class="bewerbung-error" style="display:none;">
var form = document.getElementById('bewerbung-form'); <i class="fas fa-exclamation-triangle"></i>
var submitBtn = document.getElementById('bewerbung-submit'); <span id="bewerbung-error-msg"></span>
var errorBox = document.getElementById('bewerbung-error'); </div>
var errorMsg = document.getElementById('bewerbung-error-msg');
var successBox = document.getElementById('bewerbung-success'); <!-- Submit -->
var successMsg = document.getElementById('bewerbung-success-msg'); <div class="bew-submit-wrap">
<button type="submit" id="bewerbung-submit" class="bew-submit-btn">
if (!form) return; <i class="fas fa-paper-plane"></i>
<?php _e('Bewerbung absenden', 'minecraft-modern-theme'); ?>
// ── Minecraft Avatar live laden ── </button>
var mcInput = document.getElementById('bew_mc_name'); <p class="bew-submit-hint">
var avatarImg = document.getElementById('bew-mc-avatar-img'); <i class="fas fa-shield-alt"></i>
var avatarIcon = document.getElementById('bew-mc-avatar-placeholder'); <?php _e('Mit * markierte Felder sind Pflichtfelder. Deine Daten werden nur intern gespeichert.', 'minecraft-modern-theme'); ?>
var avatarTimer; </p>
</div>
if (mcInput) {
mcInput.addEventListener('input', function() { </form>
clearTimeout(avatarTimer);
var val = this.value.trim(); <?php endif; ?>
if (val.length >= 3) {
avatarTimer = setTimeout(function() { </div><!-- .bewerbung-container -->
var url = 'https://mc-heads.net/avatar/' + encodeURIComponent(val) + '/40'; </div>
avatarImg.src = url; </div>
avatarImg.style.display = 'block';
avatarIcon.style.display = 'none'; <script>
avatarImg.onerror = function() { document.addEventListener('DOMContentLoaded', function() {
avatarImg.style.display = 'none'; var form = document.getElementById('bewerbung-form');
avatarIcon.style.display = 'block'; var submitBtn = document.getElementById('bewerbung-submit');
}; var errorBox = document.getElementById('bewerbung-error');
}, 600); var errorMsg = document.getElementById('bewerbung-error-msg');
} else { var successBox = document.getElementById('bewerbung-success');
avatarImg.style.display = 'none'; var successMsg = document.getElementById('bewerbung-success-msg');
avatarIcon.style.display = 'block';
} if (!form) return;
});
} // ── Minecraft Avatar live laden ──
var mcInput = document.getElementById('bew_mc_name');
// ── Zeichenzähler ── var avatarImg = document.getElementById('bew-mc-avatar-img');
function addCounter(textareaId, countId) { var avatarIcon = document.getElementById('bew-mc-avatar-placeholder');
var ta = document.getElementById(textareaId); var avatarTimer;
var ct = document.getElementById(countId);
if (!ta || !ct) return; if (mcInput) {
ta.addEventListener('input', function() { mcInput.addEventListener('input', function() {
ct.textContent = this.value.length; clearTimeout(avatarTimer);
ct.style.color = this.value.length > this.maxLength * 0.9 ? '#ff6b6b' : ''; var val = this.value.trim();
}); if (val.length >= 3) {
} avatarTimer = setTimeout(function() {
addCounter('bew_warum', 'warum-count'); var url = 'https://mc-heads.net/avatar/' + encodeURIComponent(val) + '/40';
addCounter('bew_erfahrung', 'erfahrung-count'); avatarImg.src = url;
avatarImg.style.display = 'block';
// ── Formular absenden ── avatarIcon.style.display = 'none';
form.addEventListener('submit', function(e) { avatarImg.onerror = function() {
e.preventDefault(); avatarImg.style.display = 'none';
errorBox.style.display = 'none'; avatarIcon.style.display = 'block';
};
var nonce = document.getElementById('mm_bew_nonce_field'); }, 600);
if (!nonce) return; } else {
avatarImg.style.display = 'none';
var data = new FormData(); avatarIcon.style.display = 'block';
data.append('action', 'mm_submit_bewerbung'); }
data.append('nonce', nonce.value); });
data.append('mc_name', document.getElementById('bew_mc_name').value.trim()); }
data.append('discord', document.getElementById('bew_discord').value.trim());
data.append('alter', document.getElementById('bew_alter').value.trim()); // ── Zeichenzähler ──
data.append('warum', document.getElementById('bew_warum').value.trim()); function addCounter(textareaId, countId) {
data.append('erfahrung', document.getElementById('bew_erfahrung').value.trim()); var ta = document.getElementById(textareaId);
var ct = document.getElementById(countId);
submitBtn.disabled = true; if (!ta || !ct) return;
submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> <?php echo esc_js(__("Wird gesendet...","minecraft-modern-theme")); ?>'; ta.addEventListener('input', function() {
ct.textContent = this.value.length;
fetch('<?php echo esc_url(admin_url("admin-ajax.php")); ?>', { ct.style.color = this.value.length > this.maxLength * 0.9 ? '#ff6b6b' : '';
method: 'POST', });
body: data }
}) addCounter('bew_warum', 'warum-count');
.then(function(r){ return r.json(); }) addCounter('bew_erfahrung', 'erfahrung-count');
.then(function(res) {
if (res.success) { // ── Formular absenden ──
form.style.display = 'none'; form.addEventListener('submit', function(e) {
successMsg.textContent = res.data.msg; e.preventDefault();
successBox.style.display = 'flex'; errorBox.style.display = 'none';
window.scrollTo({ top: successBox.offsetTop - 80, behavior: 'smooth' });
} else { var nonce = document.getElementById('mm_bew_nonce_field');
errorMsg.textContent = res.data.msg; if (!nonce) return;
errorBox.style.display = 'flex';
submitBtn.disabled = false; var data = new FormData();
submitBtn.innerHTML = '<i class="fas fa-paper-plane"></i> <?php echo esc_js(__("Bewerbung absenden","minecraft-modern-theme")); ?>'; data.append('action', 'mm_submit_bewerbung');
window.scrollTo({ top: errorBox.offsetTop - 80, behavior: 'smooth' }); data.append('nonce', nonce.value);
} var positionEl = document.querySelector('input[name="position"]:checked');
}) data.append('mc_name', document.getElementById('bew_mc_name').value.trim());
.catch(function() { data.append('discord', document.getElementById('bew_discord').value.trim());
errorMsg.textContent = '<?php echo esc_js(__("Verbindungsfehler. Bitte erneut versuchen.","minecraft-modern-theme")); ?>'; data.append('alter', document.getElementById('bew_alter').value.trim());
errorBox.style.display = 'flex'; data.append('position', positionEl ? positionEl.value : '');
submitBtn.disabled = false; data.append('warum', document.getElementById('bew_warum').value.trim());
submitBtn.innerHTML = '<i class="fas fa-paper-plane"></i> <?php echo esc_js(__("Bewerbung absenden","minecraft-modern-theme")); ?>'; data.append('erfahrung', document.getElementById('bew_erfahrung').value.trim());
});
}); submitBtn.disabled = true;
}); submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> <?php echo esc_js(__("Wird gesendet...","minecraft-modern-theme")); ?>';
</script>
fetch('<?php echo esc_url(admin_url("admin-ajax.php")); ?>', {
method: 'POST',
body: data
})
.then(function(r){ return r.json(); })
.then(function(res) {
if (res.success) {
form.style.display = 'none';
successMsg.textContent = res.data.msg;
successBox.style.display = 'flex';
window.scrollTo({ top: successBox.offsetTop - 80, behavior: 'smooth' });
} else {
errorMsg.textContent = res.data.msg;
errorBox.style.display = 'flex';
submitBtn.disabled = false;
submitBtn.innerHTML = '<i class="fas fa-paper-plane"></i> <?php echo esc_js(__("Bewerbung absenden","minecraft-modern-theme")); ?>';
window.scrollTo({ top: errorBox.offsetTop - 80, behavior: 'smooth' });
}
})
.catch(function() {
errorMsg.textContent = '<?php echo esc_js(__("Verbindungsfehler. Bitte erneut versuchen.","minecraft-modern-theme")); ?>';
errorBox.style.display = 'flex';
submitBtn.disabled = false;
submitBtn.innerHTML = '<i class="fas fa-paper-plane"></i> <?php echo esc_js(__("Bewerbung absenden","minecraft-modern-theme")); ?>';
});
});
});
</script>
<?php get_footer(); ?> <?php get_footer(); ?>

View File

@@ -4,7 +4,7 @@ Theme URI: https://git.viper.ipv64.net/M_Viper/Minecraft-Modern-Theme
Author: M_Viper Author: M_Viper
Description: Ein modernes Gaming-Theme mit konfigurierbarem Header-Slider. Description: Ein modernes Gaming-Theme mit konfigurierbarem Header-Slider.
Author URI: https://M-Viper.de Author URI: https://M-Viper.de
Version: 2.2 Version: 2.3
License: GNU General Public License v2 or later License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: minecraft-modern-theme Text Domain: minecraft-modern-theme
@@ -4712,4 +4712,129 @@ html.light-mode .bew-mc-avatar { background: #f0f0f0; }
.bewerbung-container { padding: 28px 18px; } .bewerbung-container { padding: 28px 18px; }
.bew-grid { grid-template-columns: 1fr; } .bew-grid { grid-template-columns: 1fr; }
.bewerbung-container .page-title { font-size: 1.8rem; } .bewerbung-container .page-title { font-size: 1.8rem; }
} }
/* ── Bewerbungs-Positionen ── */
.bew-position-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 12px;
margin-top: 8px;
}
.bew-position-card {
cursor: pointer;
display: block;
}
.bew-position-card input[type="radio"] {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
.bew-position-label {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
padding: 16px 12px;
border: 2px solid var(--border-color, #30363d);
border-radius: 10px;
background: var(--card-bg, #161b22);
color: var(--text-color, #c9d1d9);
font-weight: 600;
font-size: 14px;
text-align: center;
transition: border-color 0.2s, background 0.2s, color 0.2s, box-shadow 0.2s;
}
.bew-position-label i {
font-size: 22px;
color: var(--primary-accent, #00d4e8);
transition: transform 0.2s;
}
.bew-position-card:hover .bew-position-label {
border-color: var(--primary-accent, #00d4e8);
background: rgba(0, 212, 232, 0.07);
}
.bew-position-card input[type="radio"]:checked + .bew-position-label {
border-color: var(--primary-accent, #00d4e8);
background: rgba(0, 212, 232, 0.12);
color: var(--primary-accent, #00d4e8);
box-shadow: 0 0 0 3px rgba(0, 212, 232, 0.18), 0 4px 16px rgba(0, 212, 232, 0.15);
}
.bew-position-card input[type="radio"]:checked + .bew-position-label i {
transform: scale(1.2);
}
/* Light Mode */
html.light-mode .bew-position-label {
background: #f4f4f4;
border-color: #ddd;
color: #333;
}
html.light-mode .bew-position-card input[type="radio"]:checked + .bew-position-label {
background: rgba(0, 212, 232, 0.1);
color: #007a8c;
}
/* Responsive */
@media (max-width: 500px) {
.bew-position-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* ══════════════════════════════════════════════════════════════
FIX: Dropdown-Sichtbarkeit im Centered-Layout (Logo oben, Menü darunter)
Das .header-row-nav muss overflow:visible haben damit das Sub-Menu
sichtbar aus dem Header herausragen kann.
══════════════════════════════════════════════════════════════ */
/* Zeilen-Container darf das Dropdown nicht abschneiden */
.site-header--centered,
.site-header--centered .container,
.site-header--classic,
.site-header--classic .container,
.header-row-nav,
.header-centered-nav {
overflow: visible !important;
}
/* Nav-Zeile braucht position:relative als Ankerpunkt für das Dropdown */
.header-row-nav {
position: relative;
}
/* Jedes Menü-Item ist der Ankerpunkt für sein Sub-Menu */
.header-row-nav .menu-item-has-children,
.header-centered-nav .menu-item-has-children,
.site-header--centered .menu-item-has-children,
.site-header--classic .menu-item-has-children {
position: relative;
}
/* Sub-Menu öffnet sich direkt unterhalb des Menüpunkts */
.header-row-nav .sub-menu,
.header-centered-nav .sub-menu,
.site-header--centered .sub-menu,
.site-header--classic .sub-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 99999;
}
/* Hover-State: Dropdown einblenden */
.header-row-nav .menu-item-has-children:hover > .sub-menu,
.header-centered-nav .menu-item-has-children:hover > .sub-menu,
.site-header--centered .menu-item-has-children:hover > .sub-menu,
.site-header--classic .menu-item-has-children:hover > .sub-menu {
opacity: 1;
visibility: visible;
transform: translateY(10px);
}