{"id":7634,"date":"2026-05-29T23:34:41","date_gmt":"2026-05-29T23:34:41","guid":{"rendered":"https:\/\/yehiaahmed.com\/?page_id=7634"},"modified":"2026-05-30T23:49:08","modified_gmt":"2026-05-30T23:49:08","slug":"yehiaverse","status":"publish","type":"page","link":"https:\/\/yehiaahmed.com\/","title":{"rendered":"yehia verse"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7634\" class=\"elementor elementor-7634\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-887859c e-flex e-con-boxed e-con e-parent\" data-id=\"887859c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd52015 elementor-widget elementor-widget-html\" data-id=\"dd52015\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"yv-app\">\r\n\r\n  <audio id=\"lobbyMusic\" loop>\r\n    <source src=\"https:\/\/yehiaahmed.com\/wp-content\/uploads\/2026\/05\/mixkit-hip-hop-02-738.mp3\" type=\"audio\/mpeg\">\r\n  <\/audio>\r\n\r\n  <section class=\"screen active\" id=\"startScreen\">\r\n    <div class=\"panel\">\r\n      <h1>YEHIAVERSE<\/h1>\r\n      <p>Enter Your Digital Universe<\/p>\r\n\r\n      <div class=\"buttons\">\r\n        <button onclick=\"showLogin()\"><span>LOGIN<\/span><\/button>\r\n        <button class=\"purple\" onclick=\"showSignup()\"><span>SIGN UP<\/span><\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <section class=\"screen\" id=\"authScreen\">\r\n    <div class=\"panel auth\">\r\n      <h1 id=\"authTitle\">LOGIN<\/h1>\r\n\r\n      <input id=\"playerName\" placeholder=\"Username\">\r\n      <input id=\"playerEmail\" class=\"hidden\" placeholder=\"Email optional\">\r\n      <input id=\"playerPass\" type=\"password\" placeholder=\"Password\">\r\n\r\n      <button onclick=\"enterLauncher()\"><span>CONTINUE<\/span><\/button>\r\n      <button class=\"ghost\" onclick=\"backHome()\"><span>BACK<\/span><\/button>\r\n\r\n      <p id=\"msg\"><\/p>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <section class=\"screen\" id=\"launcherScreen\">\r\n    <div class=\"launcher\">\r\n\r\n      <aside>\r\n        <button class=\"active\" onclick=\"showHome()\"><span>Home<\/span><\/button>\r\n        <button onclick=\"showGames()\"><span>Games<\/span><\/button>\r\n        <button onclick=\"showAchievements()\"><span>Achievements<\/span><\/button>\r\n        <button onclick=\"showProfile()\"><span>Profile<\/span><\/button>\r\n        <button onclick=\"showSettings()\"><span>Settings<\/span><\/button>\r\n        <button id=\"adminBtn\" class=\"hidden\" onclick=\"showAdmin()\"><span>Admin<\/span><\/button>\r\n      <\/aside>\r\n\r\n      <main>\r\n        <header>\r\n          <div>\r\n            <h1 id=\"pageTitle\">Game Launcher<\/h1>\r\n            <p>Welcome, <span id=\"userDisplay\">Player<\/span><\/p>\r\n          <\/div>\r\n\r\n          <div class=\"profile\">\r\n            <div class=\"avatar\" id=\"avatarLetter\">Y<\/div>\r\n            <button onclick=\"logout()\"><span>Logout<\/span><\/button>\r\n          <\/div>\r\n        <\/header>\r\n\r\n        <div class=\"content-box\" id=\"homeBox\">\r\n          <h2>Welcome to Your Launcher<\/h2>\r\n          <p>Open the Games section to start playing.<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"content-box hidden games-content\" id=\"gamesBox\">\r\n          <div class=\"games-head\">\r\n            <h2>Games Library<\/h2>\r\n            <p>Only running games can be played.<\/p>\r\n          <\/div>\r\n          <div class=\"games-grid\" id=\"gamesGrid\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"content-box hidden achievements-content\" id=\"achievementsBox\">\r\n          <h2>Achievements<\/h2>\r\n        <\/div>\r\n\r\n        <div class=\"content-box hidden\" id=\"profileBox\">\r\n          <h2>Player Profile<\/h2>\r\n\r\n          <div class=\"profile-row\">\r\n            <strong>Username:<\/strong>\r\n            <span id=\"profileUsername\">Player<\/span>\r\n          <\/div>\r\n\r\n          <div class=\"profile-row\">\r\n            <strong>Email:<\/strong>\r\n            <span id=\"profileEmail\">-<\/span>\r\n          <\/div>\r\n\r\n          <div class=\"profile-row\">\r\n            <strong>Role:<\/strong>\r\n            <span id=\"profileRole\">Player<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"content-box hidden\" id=\"settingsBox\">\r\n          <h2>Settings<\/h2>\r\n          <p>Control your launcher options.<\/p>\r\n\r\n          <button class=\"music-btn\" onclick=\"toggleMusic()\">\r\n            <span id=\"musicBtnText\">Play Lobby Music<\/span>\r\n          <\/button>\r\n        <\/div>\r\n\r\n        <div class=\"content-box hidden admin-content\" id=\"adminBox\">\r\n          <div class=\"games-head\">\r\n            <h2>Admin Control Panel<\/h2>\r\n            <p>Manage players, bans, deleted accounts, and game status.<\/p>\r\n          <\/div>\r\n\r\n          <div class=\"admin-split\">\r\n            <div class=\"admin-card\">\r\n              <h3>Players<\/h3>\r\n              <div id=\"adminUsersList\"><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"admin-card\">\r\n              <h3>Games Status<\/h3>\r\n              <div id=\"adminGamesList\"><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n      <\/main>\r\n    <\/div>\r\n  <\/section>\r\n\r\n<\/div>\r\n\r\n<style>\r\nhtml,body{margin:0;padding:0;background:#070b14;font-family:Poppins,Arial,sans-serif;overflow-x:hidden}\r\n#yv-app{min-height:100vh;color:white;background:radial-gradient(circle at top,rgba(0,217,255,.18),transparent 30%),radial-gradient(circle at bottom right,rgba(124,77,255,.25),transparent 35%),linear-gradient(135deg,#050816,#0b1120,#111827)}\r\n#yv-app,button,.game-card,aside button{-webkit-tap-highlight-color:transparent;touch-action:manipulation}\r\n.screen{min-height:100vh;display:none;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}\r\n.screen.active{display:flex}\r\n.panel{width:min(92vw,850px);padding:70px 45px;border-radius:34px;text-align:center;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);box-shadow:0 0 45px rgba(0,217,255,.14);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}\r\n.panel h1{margin:0 0 18px;font-size:clamp(38px,7vw,78px);letter-spacing:8px;text-shadow:0 0 25px rgba(0,217,255,.8)}\r\n.panel p{color:#9ca3af;font-size:18px}\r\n.buttons{display:flex;justify-content:center;align-items:center;gap:22px;flex-wrap:wrap;margin-top:42px}\r\nbutton{width:220px;height:66px;display:flex;align-items:center;justify-content:center;padding:0;margin:0;border:0;border-radius:20px;color:white;background:linear-gradient(135deg,#00D9FF,#009dff);font-weight:800;font-size:16px;letter-spacing:2px;line-height:1;cursor:pointer;transition:.3s;box-sizing:border-box}\r\nbutton span{width:100%;display:flex;align-items:center;justify-content:center;text-align:center}\r\nbutton:hover{transform:translateY(-6px) scale(1.03);box-shadow:0 0 35px rgba(0,217,255,.35)}\r\nbutton.purple{background:linear-gradient(135deg,#7C4DFF,#B84DFF)}\r\nbutton.ghost{margin-top:12px;background:rgba(255,255,255,.08)}\r\n.auth{width:min(92vw,480px)}\r\n.auth input{width:100%;height:58px;margin:12px 0;padding:0 18px;border-radius:18px;border:1px solid rgba(0,217,255,.25);background:rgba(255,255,255,.07);color:white;box-sizing:border-box;font-size:16px}\r\n.auth button{width:100%;margin-top:16px}\r\n#msg{color:#00D9FF;font-weight:700}\r\n.launcher{width:100%;min-height:100vh;display:grid;grid-template-columns:230px 1fr;gap:24px}\r\naside,main{margin:24px 0;border-radius:28px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}\r\naside{padding:24px}\r\naside button{width:100%;height:54px;margin:10px 0;border-radius:16px;background:transparent;color:#9ca3af;font-weight:700;font-size:15px}\r\naside button.active,aside button:hover{color:white;background:linear-gradient(135deg,#00D9FF,#7C4DFF)}\r\nmain{padding:32px;min-width:0}\r\nheader{display:flex;justify-content:space-between;align-items:center;gap:20px}\r\nheader h1{margin:0;font-size:clamp(28px,4vw,42px)}\r\nheader p{color:#9ca3af}\r\nheader span{color:#00D9FF}\r\n.profile{display:flex;align-items:center;gap:14px}\r\n.profile button{width:130px;height:48px;background:rgba(255,255,255,.08)}\r\n.avatar{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#00D9FF,#7C4DFF);font-weight:900;font-size:24px}\r\n.content-box{min-height:430px;margin-top:40px;padding:34px;border:2px dashed rgba(0,217,255,.28);border-radius:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:rgba(0,0,0,.2)}\r\n.content-box h2{font-size:clamp(26px,4vw,36px);margin:0 0 12px}\r\n.content-box p{color:#9ca3af;font-size:18px}\r\n.hidden{display:none!important}\r\n.games-content,.achievements-content,.admin-content{align-items:stretch;justify-content:flex-start;text-align:left}\r\n.games-head{text-align:left;margin-bottom:18px}\r\n.games-grid{width:100%;display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:14px;margin-top:14px}\r\n.game-card{position:relative;aspect-ratio:1\/1.18;background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.035));border:1px solid rgba(255,255,255,.12);border-radius:18px;overflow:hidden;text-align:center;transition:.25s ease;cursor:pointer;box-shadow:0 14px 30px rgba(0,0,0,.28);display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:10px;box-sizing:border-box;user-select:none;-webkit-user-select:none}\r\n.game-card:hover{transform:translateY(-6px) scale(1.04);border-color:rgba(0,217,255,.65);box-shadow:0 20px 42px rgba(0,217,255,.18)}\r\n.game-card.offline{opacity:.45;filter:grayscale(1);cursor:not-allowed}\r\n.game-thumb{width:100%;flex:1;min-height:68px;display:flex;align-items:center;justify-content:center;font-size:clamp(32px,5vw,54px);border-radius:14px;background:radial-gradient(circle at top,rgba(0,217,255,.24),transparent 48%),linear-gradient(135deg,rgba(0,217,255,.14),rgba(124,77,255,.2))}\r\n.game-card h3{width:100%;margin:10px 0 0;font-size:12px;line-height:1.25;color:white;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.game-badge{position:absolute;top:8px;right:8px;padding:4px 7px;border-radius:999px;background:#00D9FF;color:#00131a;font-size:9px;font-weight:900;letter-spacing:.8px}\r\n.game-badge.off{background:#ff4d4d;color:white}\r\n.profile-row{width:min(100%,520px);display:flex;align-items:center;justify-content:space-between;gap:12px;margin:14px 0;padding:18px;border-radius:18px;background:rgba(255,255,255,.06);color:#cbd5e1}\r\n.music-btn{margin-top:24px;width:280px;background:linear-gradient(135deg,#00D9FF,#7C4DFF)}\r\n.achievement-summary{display:flex;gap:14px;flex-wrap:wrap;margin:12px 0 24px}\r\n.achievement-stat{padding:12px 16px;border-radius:18px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);color:#cbd5e1;font-weight:800}\r\n.achievement-stat span{color:#00D9FF}\r\n.achievement-grid{width:100%;display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:18px}\r\n.achievement-card{padding:22px;border-radius:22px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);text-align:center}\r\n.achievement-card.unlocked{border-color:rgba(0,217,255,.6);box-shadow:0 0 25px rgba(0,217,255,.15)}\r\n.achievement-card.locked{opacity:.45;filter:grayscale(1)}\r\n.achievement-big-icon{font-size:48px;margin-bottom:14px}\r\n.achievement-card h3{margin:0 0 8px;color:white;font-size:18px}\r\n.achievement-card p{font-size:14px;color:#9ca3af;min-height:42px}\r\n.achievement-card span{display:inline-block;margin-top:12px;padding:6px 12px;border-radius:999px;background:rgba(0,217,255,.15);color:#00D9FF;font-size:11px;font-weight:800}\r\n.achievement-popup{position:fixed;top:24px;right:24px;width:min(320px,calc(100vw - 32px));display:flex;align-items:center;gap:16px;padding:18px;border-radius:20px;background:rgba(10,15,25,.95);border:1px solid rgba(0,217,255,.35);box-shadow:0 0 40px rgba(0,217,255,.2);z-index:999999;transform:translateX(420px);transition:.4s ease}\r\n.achievement-popup.show{transform:translateX(0)}\r\n.achievement-icon{width:62px;height:62px;min-width:62px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:34px;background:linear-gradient(135deg,#00D9FF,#7C4DFF)}\r\n.achievement-info h4{margin:0 0 4px;color:#00D9FF;font-size:12px}\r\n.achievement-info strong{display:block;margin-bottom:4px;font-size:18px}\r\n.achievement-info p{margin:0;color:#9ca3af;font-size:13px}\r\n.admin-split{display:grid;grid-template-columns:1.2fr .8fr;gap:20px}\r\n.admin-card{padding:20px;border-radius:22px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1)}\r\n.admin-item{padding:14px;margin:10px 0;border-radius:16px;background:rgba(0,0,0,.25);border:1px solid rgba(255,255,255,.08)}\r\n.admin-item strong{color:#00D9FF}\r\n.admin-meta{color:#9ca3af;font-size:13px;margin:6px 0 12px}\r\n.admin-actions{display:flex;flex-wrap:wrap;gap:8px}\r\n.admin-actions input,.admin-actions select{height:38px;border-radius:10px;border:1px solid rgba(0,217,255,.25);background:rgba(255,255,255,.08);color:white;padding:0 10px}\r\n.admin-actions button{width:auto;min-width:90px;height:38px;border-radius:12px;font-size:11px;letter-spacing:1px}\r\n.danger{background:linear-gradient(135deg,#ff3d3d,#a40000)!important}\r\n.warn{background:linear-gradient(135deg,#ffcc00,#ff8c00)!important;color:#111!important}\r\n.ok{background:linear-gradient(135deg,#00e676,#00a85a)!important}\r\n.status-on{color:#00e676;font-weight:900}\r\n.status-off{color:#ff4d4d;font-weight:900}\r\n@media(max-width:850px){.launcher{grid-template-columns:1fr}.admin-split{grid-template-columns:1fr}aside{display:flex;overflow-x:auto;gap:10px}aside button{min-width:135px}}\r\n@media(max-width:600px){.panel{padding:45px 22px}.buttons{flex-direction:column}button{width:100%}main{padding:18px}.games-grid{grid-template-columns:repeat(auto-fill,minmax(82px,1fr))}.profile-row{flex-direction:column;text-align:center}.music-btn{width:100%}}\r\n<\/style>\r\n\r\n<script>\r\nlet mode = \"login\";\r\nlet currentUser = null;\r\nlet games = [];\r\n\r\nconst API_URL = \"https:\/\/yehiaahmed.com\/yehiaverse-api\/api.php\";\r\n\r\nconst achievementList = [\r\n  [\"first_login\",\"Welcome To Yehiaverse\",\"Sign into the launcher for the first time.\",\"\ud83c\udf0c\"],\r\n  [\"return_player\",\"Welcome Back\",\"Return to the launcher again.\",\"\u2b50\"],\r\n  [\"profile_open\",\"Identity Online\",\"Open your player profile.\",\"\ud83d\udc64\"],\r\n  [\"settings_open\",\"Control Center\",\"Open launcher settings.\",\"\u2699\ufe0f\"],\r\n  [\"music_on\",\"Night Vibes\",\"Turn on lobby music.\",\"\ud83c\udfb5\"],\r\n  [\"games_open\",\"Explorer\",\"Open the games library.\",\"\ud83c\udfae\"],\r\n  [\"launch_first_game\",\"First Launch\",\"Launch your first game.\",\"\ud83d\ude80\"],\r\n  [\"launch_3_games\",\"Game Hunter\",\"Launch 3 games.\",\"\ud83d\udd25\"],\r\n  [\"launch_10_games\",\"Launcher Veteran\",\"Launch 10 games.\",\"\ud83c\udfc6\"]\r\n];\r\n\r\nfunction api(action, data = {}) {\r\n  return fetch(API_URL + \"?action=\" + encodeURIComponent(action), {\r\n    method: \"POST\",\r\n    credentials: \"include\",\r\n    headers: {\"Content-Type\":\"application\/json\"},\r\n    body: JSON.stringify(data)\r\n  }).then(async res => {\r\n    const json = await res.json();\r\n    if (!res.ok || json.success === false) throw json;\r\n    return json;\r\n  });\r\n}\r\n\r\nfunction show(id){\r\n  document.querySelectorAll(\".screen\").forEach(s => s.classList.remove(\"active\"));\r\n  document.getElementById(id).classList.add(\"active\");\r\n}\r\n\r\nfunction showLogin(){\r\n  mode = \"login\";\r\n  document.getElementById(\"authTitle\").innerText = \"LOGIN\";\r\n  document.getElementById(\"playerEmail\").classList.add(\"hidden\");\r\n  document.getElementById(\"msg\").innerText = \"\";\r\n  show(\"authScreen\");\r\n}\r\n\r\nfunction showSignup(){\r\n  mode = \"signup\";\r\n  document.getElementById(\"authTitle\").innerText = \"SIGN UP\";\r\n  document.getElementById(\"playerEmail\").classList.remove(\"hidden\");\r\n  document.getElementById(\"msg\").innerText = \"\";\r\n  show(\"authScreen\");\r\n}\r\n\r\nfunction backHome(){ show(\"startScreen\"); }\r\n\r\nfunction enterLauncher(){\r\n  const username = document.getElementById(\"playerName\").value.trim();\r\n  const password = document.getElementById(\"playerPass\").value.trim();\r\n  const email = document.getElementById(\"playerEmail\").value.trim();\r\n  const msg = document.getElementById(\"msg\");\r\n\r\n  if(!username || !password){\r\n    msg.innerText = \"Enter username and password.\";\r\n    return;\r\n  }\r\n\r\n  msg.innerText = \"Please wait...\";\r\n\r\n  api(mode === \"signup\" ? \"signup\" : \"login\", {username,password,email})\r\n    .then(res => {\r\n      currentUser = res.user;\r\n      unlockAchievement(mode === \"signup\" ? \"first_login\" : \"return_player\");\r\n      openLauncher();\r\n    })\r\n    .catch(err => {\r\n      msg.innerText = err.message || \"Error\";\r\n      if(err.ban_reason) msg.innerText += \": \" + err.ban_reason;\r\n    });\r\n}\r\n\r\nfunction openLauncher(){\r\n  document.getElementById(\"userDisplay\").innerText = currentUser.username;\r\n  document.getElementById(\"avatarLetter\").innerText = currentUser.username.charAt(0).toUpperCase();\r\n\r\n  if(currentUser.is_admin){\r\n    document.getElementById(\"adminBtn\").classList.remove(\"hidden\");\r\n  }else{\r\n    document.getElementById(\"adminBtn\").classList.add(\"hidden\");\r\n  }\r\n\r\n  loadGames();\r\n  showHome();\r\n  show(\"launcherScreen\");\r\n}\r\n\r\nfunction logout(){\r\n  api(\"logout\").finally(() => {\r\n    currentUser = null;\r\n    show(\"startScreen\");\r\n  });\r\n}\r\n\r\nfunction hideBoxes(){\r\n  document.querySelectorAll(\".content-box\").forEach(box => box.classList.add(\"hidden\"));\r\n}\r\n\r\nfunction setActiveButton(index){\r\n  const buttons = document.querySelectorAll(\"aside button\");\r\n  buttons.forEach(btn => btn.classList.remove(\"active\"));\r\n  if(buttons[index]) buttons[index].classList.add(\"active\");\r\n}\r\n\r\nfunction showHome(){\r\n  hideBoxes();\r\n  document.getElementById(\"homeBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Game Launcher\";\r\n  setActiveButton(0);\r\n}\r\n\r\nfunction showGames(){\r\n  hideBoxes();\r\n  renderGames();\r\n  document.getElementById(\"gamesBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Games\";\r\n  unlockAchievement(\"games_open\");\r\n  setActiveButton(1);\r\n}\r\n\r\nfunction showAchievements(){\r\n  hideBoxes();\r\n  renderAchievements();\r\n  document.getElementById(\"achievementsBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Achievements\";\r\n  setActiveButton(2);\r\n}\r\n\r\nfunction showProfile(){\r\n  hideBoxes();\r\n  document.getElementById(\"profileUsername\").innerText = currentUser.username;\r\n  document.getElementById(\"profileEmail\").innerText = currentUser.email || \"-\";\r\n  document.getElementById(\"profileRole\").innerText = currentUser.role;\r\n  document.getElementById(\"profileBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Profile\";\r\n  unlockAchievement(\"profile_open\");\r\n  setActiveButton(3);\r\n}\r\n\r\nfunction showSettings(){\r\n  hideBoxes();\r\n  document.getElementById(\"settingsBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Settings\";\r\n  loadMusicSetting();\r\n  unlockAchievement(\"settings_open\");\r\n  setActiveButton(4);\r\n}\r\n\r\nfunction showAdmin(){\r\n  hideBoxes();\r\n  document.getElementById(\"adminBox\").classList.remove(\"hidden\");\r\n  document.getElementById(\"pageTitle\").innerText = \"Admin Panel\";\r\n  setActiveButton(5);\r\n  loadAdminData();\r\n}\r\n\r\nfunction loadGames(){\r\n  api(\"games\").then(res => {\r\n    games = res.games;\r\n    renderGames();\r\n  });\r\n}\r\n\r\nfunction renderGames(){\r\n  const grid = document.getElementById(\"gamesGrid\");\r\n  if(!grid) return;\r\n\r\n  grid.innerHTML = games.map(game => {\r\n    const off = game.status === \"off\";\r\n    return `\r\n      <div class=\"game-card ${off ? \"offline\" : \"\"}\" data-id=\"${game.game_key}\" data-url=\"https:\/\/yehiaahmed.com\/games\/${game.folder}\/\">\r\n        <div class=\"game-thumb\">${game.icon}<\/div>\r\n        <h3>${game.title}<\/h3>\r\n        <span class=\"game-badge ${off ? \"off\" : \"\"}\">${off ? \"OFFLINE\" : \"PLAY\"}<\/span>\r\n      <\/div>\r\n    `;\r\n  }).join(\"\");\r\n}\r\n\r\ndocument.addEventListener(\"click\", e => {\r\n  const card = e.target.closest(\".game-card[data-url]\");\r\n  if(!card) return;\r\n\r\n  const key = card.dataset.id;\r\n  const game = games.find(g => g.game_key === key);\r\n\r\n  if(game && game.status === \"off\"){\r\n    alert(\"This game is currently offline.\");\r\n    return;\r\n  }\r\n\r\n  unlockAchievement(\"launch_first_game\");\r\n  increaseStat(\"games_launched\",1);\r\n\r\n  const launched = getStat(\"games_launched\");\r\n  if(launched >= 3) unlockAchievement(\"launch_3_games\");\r\n  if(launched >= 10) unlockAchievement(\"launch_10_games\");\r\n\r\n  window.open(card.dataset.url,\"_blank\");\r\n});\r\n\r\nfunction toggleMusic(){\r\n  const music = document.getElementById(\"lobbyMusic\");\r\n  const btn = document.getElementById(\"musicBtnText\");\r\n\r\n  if(music.paused){\r\n    music.volume = .35;\r\n    music.play();\r\n    localStorage.setItem(\"yv_music\",\"on\");\r\n    btn.innerText = \"Stop Lobby Music\";\r\n    unlockAchievement(\"music_on\");\r\n  }else{\r\n    music.pause();\r\n    localStorage.setItem(\"yv_music\",\"off\");\r\n    btn.innerText = \"Play Lobby Music\";\r\n  }\r\n}\r\n\r\nfunction loadMusicSetting(){\r\n  const btn = document.getElementById(\"musicBtnText\");\r\n  btn.innerText = localStorage.getItem(\"yv_music\") === \"on\" ? \"Stop Lobby Music\" : \"Play Lobby Music\";\r\n}\r\n\r\nfunction loadAdminData(){\r\n  api(\"users\").then(res => {\r\n    document.getElementById(\"adminUsersList\").innerHTML = res.users.map(u => `\r\n      <div class=\"admin-item\">\r\n        <strong>${u.username}<\/strong>\r\n        <div class=\"admin-meta\">\r\n          Email: ${u.email || \"-\"}<br>\r\n          Role: ${u.role}<br>\r\n          Status: ${u.banned == 1 ? '<span class=\"status-off\">BANNED<\/span>' : '<span class=\"status-on\">ACTIVE<\/span>'}<br>\r\n          Reason: ${u.ban_reason || \"-\"}\r\n        <\/div>\r\n        <div class=\"admin-actions\">\r\n          <input id=\"reason_${u.id}\" placeholder=\"Ban reason\">\r\n          <select id=\"duration_${u.id}\">\r\n            <option value=\"1h\">1 Hour<\/option>\r\n            <option value=\"1d\">1 Day<\/option>\r\n            <option value=\"7d\">7 Days<\/option>\r\n            <option value=\"30d\">30 Days<\/option>\r\n            <option value=\"permanent\">Permanent<\/option>\r\n          <\/select>\r\n          <button class=\"warn\" onclick=\"banUser(${u.id})\"><span>Ban<\/span><\/button>\r\n          <button class=\"ok\" onclick=\"unbanUser(${u.id})\"><span>Unban<\/span><\/button>\r\n          <button class=\"danger\" onclick=\"deleteUser(${u.id})\"><span>Delete<\/span><\/button>\r\n        <\/div>\r\n      <\/div>\r\n    `).join(\"\");\r\n  });\r\n\r\n  api(\"games\").then(res => {\r\n    games = res.games;\r\n    document.getElementById(\"adminGamesList\").innerHTML = games.map(g => `\r\n      <div class=\"admin-item\">\r\n        <strong>${g.title}<\/strong>\r\n        <div class=\"admin-meta\">\r\n          Folder: ${g.folder}<br>\r\n          Status: ${g.status === \"on\" ? '<span class=\"status-on\">RUNNING<\/span>' : '<span class=\"status-off\">STOPPED<\/span>'}\r\n        <\/div>\r\n        <div class=\"admin-actions\">\r\n          <button class=\"${g.status === \"on\" ? \"warn\" : \"ok\"}\" onclick=\"toggleGame('${g.game_key}','${g.status === \"on\" ? \"off\" : \"on\"}')\">\r\n            <span>${g.status === \"on\" ? \"Stop\" : \"Start\"}<\/span>\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n    `).join(\"\");\r\n  });\r\n}\r\n\r\nfunction banUser(id){\r\n  api(\"ban_user\",{\r\n    user_id:id,\r\n    reason:document.getElementById(\"reason_\"+id).value,\r\n    duration:document.getElementById(\"duration_\"+id).value\r\n  }).then(loadAdminData);\r\n}\r\n\r\nfunction unbanUser(id){\r\n  api(\"unban_user\",{user_id:id}).then(loadAdminData);\r\n}\r\n\r\nfunction deleteUser(id){\r\n  if(confirm(\"Delete this account?\")){\r\n    api(\"delete_user\",{user_id:id}).then(loadAdminData);\r\n  }\r\n}\r\n\r\nfunction toggleGame(key,status){\r\n  api(\"toggle_game\",{game_key:key,status}).then(() => {\r\n    loadGames();\r\n    loadAdminData();\r\n  });\r\n}\r\n\r\nfunction unlockAchievement(key){\r\n  let list = JSON.parse(localStorage.getItem(\"yv_achievements\") || \"[]\");\r\n  if(list.includes(key)) return;\r\n  list.push(key);\r\n  localStorage.setItem(\"yv_achievements\",JSON.stringify(list));\r\n  api(\"unlock_achievement\",{achievement_key:key}).catch(()=>{});\r\n}\r\n\r\nfunction renderAchievements(){\r\n  const unlocked = JSON.parse(localStorage.getItem(\"yv_achievements\") || \"[]\");\r\n  const box = document.getElementById(\"achievementsBox\");\r\n\r\n  box.innerHTML = `\r\n    <h2>Achievements<\/h2>\r\n    <div class=\"achievement-summary\">\r\n      <div class=\"achievement-stat\"><span>${unlocked.length}<\/span> \/ ${achievementList.length} Unlocked<\/div>\r\n    <\/div>\r\n    <div class=\"achievement-grid\">\r\n      ${achievementList.map(a => `\r\n        <div class=\"achievement-card ${unlocked.includes(a[0]) ? \"unlocked\" : \"locked\"}\">\r\n          <div class=\"achievement-big-icon\">${a[3]}<\/div>\r\n          <h3>${a[1]}<\/h3>\r\n          <p>${a[2]}<\/p>\r\n          <span>${unlocked.includes(a[0]) ? \"UNLOCKED\" : \"LOCKED\"}<\/span>\r\n        <\/div>\r\n      `).join(\"\")}\r\n    <\/div>\r\n  `;\r\n}\r\n\r\nfunction getStats(){return JSON.parse(localStorage.getItem(\"yv_stats\") || \"{}\")}\r\nfunction saveStats(s){localStorage.setItem(\"yv_stats\",JSON.stringify(s))}\r\nfunction getStat(k){return Number(getStats()[k] || 0)}\r\nfunction increaseStat(k,a){let s=getStats();s[k]=Number(s[k]||0)+a;saveStats(s);return s[k]}\r\n\r\nwindow.addEventListener(\"load\", () => {\r\n  loadMusicSetting();\r\n\r\n  api(\"me\")\r\n    .then(res => {\r\n      if(res.logged_in){\r\n        currentUser = res.user;\r\n        openLauncher();\r\n      }else{\r\n        show(\"startScreen\");\r\n      }\r\n    })\r\n    .catch(() => show(\"startScreen\"));\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>YEHIAVERSE Enter Your Digital Universe LOGIN SIGN UP LOGIN CONTINUE BACK Home Games Achievements Profile Settings Admin Game Launcher Welcome,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7634","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/pages\/7634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/comments?post=7634"}],"version-history":[{"count":107,"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/pages\/7634\/revisions"}],"predecessor-version":[{"id":7799,"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/pages\/7634\/revisions\/7799"}],"wp:attachment":[{"href":"https:\/\/yehiaahmed.com\/wp-json\/wp\/v2\/media?parent=7634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}