Update: 2026-06-28 00:42:25
This commit is contained in:
@@ -1,159 +0,0 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// create_tester_driver.php
|
||||
// إنشاء أو تحديث مستخدم فاحص (Tester) خاص بمراجعي المتاجر
|
||||
// ============================================================
|
||||
|
||||
require_once __DIR__ . '/../../core/bootstrap.php';
|
||||
|
||||
// يمكن استقبال المتغيرات عبر الـ POST/GET أو استخدام قيم افتراضية آمنة
|
||||
$email = filterRequest('email') ?? 'review_tester@siromove.com';
|
||||
$password = filterRequest('password') ?? 'SiroTester2026!';
|
||||
$phone = filterRequest('phone') ?? '962790000000';
|
||||
$firstName = filterRequest('first_name') ?? 'فاحص';
|
||||
$lastName = filterRequest('last_name') ?? 'المتجر';
|
||||
$gender = 'Male';
|
||||
$birthdate = '1995-01-01';
|
||||
$site = 'Jordan';
|
||||
$status = 'actives'; // تفعيل مباشر
|
||||
|
||||
if (empty($email) || empty($password) || empty($phone)) {
|
||||
jsonError("Missing required parameters: email, password, phone");
|
||||
}
|
||||
|
||||
try {
|
||||
$con = Database::get('main');
|
||||
$con->beginTransaction();
|
||||
|
||||
// 1. تشفير البيانات الحساسة للحفاظ على خصوصيتها وتطابق الهيكل
|
||||
$encryptedEmail = $encryptionHelper->encryptData($email);
|
||||
$encryptedPhone = $encryptionHelper->encryptData($phone);
|
||||
$encryptedFirstName = $encryptionHelper->encryptData($firstName);
|
||||
$encryptedLastName = $encryptionHelper->encryptData($lastName);
|
||||
$encryptedGender = $encryptionHelper->encryptData($gender);
|
||||
$encryptedBirthdate = $encryptionHelper->encryptData($birthdate);
|
||||
$encryptedSite = $encryptionHelper->encryptData($site);
|
||||
|
||||
// تشفير كلمة المرور باستخدام BCRYPT
|
||||
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
|
||||
|
||||
// 2. التحقق من وجود المستخدم مسبقاً
|
||||
$stmtCheck = $con->prepare("SELECT id FROM driver WHERE email = :email LIMIT 1");
|
||||
$stmtCheck->execute([':email' => $encryptedEmail]);
|
||||
$existingDriver = $stmtCheck->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($existingDriver) {
|
||||
$driverId = $existingDriver['id'];
|
||||
|
||||
// تحديث الحساب الحالي
|
||||
$sqlDriver = "UPDATE `driver` SET
|
||||
`phone` = :phone,
|
||||
`password` = :password,
|
||||
`gender` = :gender,
|
||||
`birthdate` = :birthdate,
|
||||
`site` = :site,
|
||||
`first_name` = :first_name,
|
||||
`last_name` = :last_name,
|
||||
`status` = :status
|
||||
WHERE `id` = :driverId";
|
||||
|
||||
$stmtDriver = $con->prepare($sqlDriver);
|
||||
$stmtDriver->execute([
|
||||
':phone' => $encryptedPhone,
|
||||
':password' => $hashedPassword,
|
||||
':gender' => $encryptedGender,
|
||||
':birthdate' => $encryptedBirthdate,
|
||||
':site' => $encryptedSite,
|
||||
':first_name' => $encryptedFirstName,
|
||||
':last_name' => $encryptedLastName,
|
||||
':status' => $status,
|
||||
':driverId' => $driverId
|
||||
]);
|
||||
$action = "updated";
|
||||
} else {
|
||||
// توليد معرّف فريد جديد
|
||||
$driverId = bin2hex(random_bytes(8)); // 16-char hex ID
|
||||
|
||||
// إدراج حساب سائق جديد
|
||||
$sqlDriver = "INSERT INTO `driver`
|
||||
(id, phone, email, password, gender, birthdate, site, first_name, last_name, status, bankCode, accountBank)
|
||||
VALUES
|
||||
(:driverId, :phone, :email, :password, :gender, :birthdate, :site, :first_name, :last_name, :status, 'CIB', 'yet')";
|
||||
|
||||
$stmtDriver = $con->prepare($sqlDriver);
|
||||
$stmtDriver->execute([
|
||||
':driverId' => $driverId,
|
||||
':phone' => $encryptedPhone,
|
||||
':email' => $encryptedEmail,
|
||||
':password' => $hashedPassword,
|
||||
':gender' => $encryptedGender,
|
||||
':birthdate' => $encryptedBirthdate,
|
||||
':site' => $encryptedSite,
|
||||
':first_name' => $encryptedFirstName,
|
||||
':last_name' => $encryptedLastName,
|
||||
':status' => $status
|
||||
]);
|
||||
$action = "created";
|
||||
}
|
||||
|
||||
// 3. التحقق وتفعيل رقم الهاتف في جدول phone_verification
|
||||
$stmtPVCheck = $con->prepare("SELECT id FROM phone_verification WHERE phone_number = :phone LIMIT 1");
|
||||
$stmtPVCheck->execute([':phone' => $phone]);
|
||||
$pvRecord = $stmtPVCheck->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($pvRecord) {
|
||||
$stmtPV = $con->prepare("UPDATE phone_verification SET is_verified = 1, driverId = :driverId WHERE phone_number = :phone");
|
||||
$stmtPV->execute([':driverId' => $driverId, ':phone' => $phone]);
|
||||
} else {
|
||||
$stmtPV = $con->prepare("INSERT INTO phone_verification (phone_number, driverId, email, is_verified) VALUES (:phone, :driverId, :email, 1)");
|
||||
$stmtPV->execute([':phone' => $phone, ':driverId' => $driverId, ':email' => $email]);
|
||||
}
|
||||
|
||||
// 4. إضافة أو تحديث سيارة مرافقة لتجاوز فحص الكابتن بدون سيارة
|
||||
$stmtCarCheck = $con->prepare("SELECT id FROM CarRegistration WHERE driverID = :driverId LIMIT 1");
|
||||
$stmtCarCheck->execute([':driverId' => $driverId]);
|
||||
$carRecord = $stmtCarCheck->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($carRecord) {
|
||||
$sqlCar = "UPDATE CarRegistration SET
|
||||
make = 'تويوتا',
|
||||
model = 'راف',
|
||||
year = 2019,
|
||||
color = 'أبيض',
|
||||
owner = 'Siro LLC',
|
||||
expiration_date = '2030-01-01',
|
||||
status = 'actives'
|
||||
WHERE driverID = :driverId";
|
||||
$stmtCar = $con->prepare($sqlCar);
|
||||
$stmtCar->execute([':driverId' => $driverId]);
|
||||
} else {
|
||||
$sqlCar = "INSERT INTO CarRegistration
|
||||
(driverID, vin, car_plate, make, model, year, expiration_date, color, owner, color_hex, fuel, isDefault, status)
|
||||
VALUES
|
||||
(:driverId, 'TESTER_VIN', 'TEST-PLATE', 'تويوتا', 'راف', 2019, '2030-01-01', 'أبيض', 'Siro LLC', '#FFFFFF', 'Petrol', 1, 'actives')";
|
||||
$stmtCar = $con->prepare($sqlCar);
|
||||
$stmtCar->execute([':driverId' => $driverId]);
|
||||
}
|
||||
|
||||
$con->commit();
|
||||
|
||||
echo json_encode([
|
||||
"status" => "success",
|
||||
"message" => "Tester driver successfully $action.",
|
||||
"details" => [
|
||||
"driver_id" => $driverId,
|
||||
"email" => $email,
|
||||
"password" => $password,
|
||||
"phone" => $phone,
|
||||
"status" => $status
|
||||
]
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
} catch (Exception $e) {
|
||||
if (isset($con)) {
|
||||
$con->rollBack();
|
||||
}
|
||||
error_log("[Create Tester Driver Error] " . $e->getMessage());
|
||||
jsonError("Server error: " . $e->getMessage());
|
||||
}
|
||||
?>
|
||||
@@ -1,137 +0,0 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// create_tester_passenger.php
|
||||
// إنشاء أو تحديث مستخدم فاحص (Tester) خاص بمراجعي المتاجر (تطبيق الركاب)
|
||||
// ============================================================
|
||||
|
||||
require_once __DIR__ . '/../core/bootstrap.php';
|
||||
|
||||
// استقبال المتغيرات أو استخدام قيم افتراضية آمنة
|
||||
$email = filterRequest('email') ?? 'passenger_tester@siromove.com';
|
||||
$password = filterRequest('password') ?? 'SiroPassenger2026!';
|
||||
$phone = filterRequest('phone') ?? '962790000001';
|
||||
$firstName = filterRequest('first_name') ?? 'راكب';
|
||||
$lastName = filterRequest('last_name') ?? 'المتجر';
|
||||
$gender = 'Male';
|
||||
$birthdate = '1998-01-01';
|
||||
$site = 'Jordan';
|
||||
|
||||
if (empty($email) || empty($password) || empty($phone)) {
|
||||
jsonError("Missing required parameters: email, password, phone");
|
||||
}
|
||||
|
||||
try {
|
||||
$con = Database::get('main');
|
||||
$con->beginTransaction();
|
||||
|
||||
// 1. تشفير البيانات الحساسة للحفاظ على خصوصيتها وتطابق الهيكل
|
||||
$encryptedEmail = $encryptionHelper->encryptData($email);
|
||||
$encryptedPhone = $encryptionHelper->encryptData($phone);
|
||||
$encryptedFirstName = $encryptionHelper->encryptData($firstName);
|
||||
$encryptedLastName = $encryptionHelper->encryptData($lastName);
|
||||
$encryptedGender = $encryptionHelper->encryptData($gender);
|
||||
$encryptedBirthdate = $encryptionHelper->encryptData($birthdate);
|
||||
$encryptedSite = $encryptionHelper->encryptData($site);
|
||||
|
||||
// تشفير الحقول الافتراضية
|
||||
$encryptedSos = $encryptionHelper->encryptData('sos');
|
||||
$encryptedEducation = $encryptionHelper->encryptData('none');
|
||||
$encryptedEmployment = $encryptionHelper->encryptData('none');
|
||||
$encryptedMarital = $encryptionHelper->encryptData('none');
|
||||
|
||||
// 2. التحقق من وجود الراكب مسبقاً
|
||||
$stmtCheck = $con->prepare("SELECT id FROM passengers WHERE email = :email LIMIT 1");
|
||||
$stmtCheck->execute([':email' => $encryptedEmail]);
|
||||
$existingPassenger = $stmtCheck->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($existingPassenger) {
|
||||
$passengerId = $existingPassenger['id'];
|
||||
|
||||
// تحديث حساب الراكب الحالي
|
||||
$sqlPassenger = "UPDATE `passengers` SET
|
||||
`phone` = :phone,
|
||||
`password` = :password,
|
||||
`gender` = :gender,
|
||||
`birthdate` = :birthdate,
|
||||
`site` = :site,
|
||||
`first_name` = :first_name,
|
||||
`last_name` = :last_name,
|
||||
`status` = 'actives'
|
||||
WHERE `id` = :passengerId";
|
||||
|
||||
$stmtPassenger = $con->prepare($sqlPassenger);
|
||||
$stmtPassenger->execute([
|
||||
':phone' => $encryptedPhone,
|
||||
':password' => $password, // خزن كـ plaintext متوافقاً مع الاستعلام القديم
|
||||
':gender' => $encryptedGender,
|
||||
':birthdate' => $encryptedBirthdate,
|
||||
':site' => $encryptedSite,
|
||||
':first_name' => $encryptedFirstName,
|
||||
':last_name' => $encryptedLastName,
|
||||
':passengerId' => $passengerId
|
||||
]);
|
||||
$action = "updated";
|
||||
} else {
|
||||
// توليد معرّف فريد جديد للراكب
|
||||
$passengerId = bin2hex(random_bytes(8)); // 16-char hex ID
|
||||
|
||||
// إدراج حساب راكب جديد
|
||||
$sqlPassenger = "INSERT INTO `passengers`
|
||||
(id, phone, email, password, gender, status, birthdate, site, first_name, last_name, sosPhone, education, employmentType, maritalStatus)
|
||||
VALUES
|
||||
(:passengerId, :phone, :email, :password, :gender, 'actives', :birthdate, :site, :first_name, :last_name, :sos, :edu, :emp, :marital)";
|
||||
|
||||
$stmtPassenger = $con->prepare($sqlPassenger);
|
||||
$stmtPassenger->execute([
|
||||
':passengerId' => $passengerId,
|
||||
':phone' => $encryptedPhone,
|
||||
':email' => $encryptedEmail,
|
||||
':password' => $password, // خزن كـ plaintext متوافقاً مع الاستعلام القديم
|
||||
':gender' => $encryptedGender,
|
||||
':birthdate' => $encryptedBirthdate,
|
||||
':site' => $encryptedSite,
|
||||
':first_name' => $encryptedFirstName,
|
||||
':last_name' => $encryptedLastName,
|
||||
':sos' => $encryptedSos,
|
||||
':edu' => $encryptedEducation,
|
||||
':emp' => $encryptedEmployment,
|
||||
':marital' => $encryptedMarital
|
||||
]);
|
||||
$action = "created";
|
||||
}
|
||||
|
||||
// 3. التحقق وتفعيل رقم الهاتف في جدول phone_verification_passenger
|
||||
$stmtPVCheck = $con->prepare("SELECT id FROM phone_verification_passenger WHERE phone_number = :phone LIMIT 1");
|
||||
$stmtPVCheck->execute([':phone' => $phone]);
|
||||
$pvRecord = $stmtPVCheck->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($pvRecord) {
|
||||
$stmtPV = $con->prepare("UPDATE phone_verification_passenger SET verified = 1, status = 'actives' WHERE phone_number = :phone");
|
||||
$stmtPV->execute([':phone' => $phone]);
|
||||
} else {
|
||||
$stmtPV = $con->prepare("INSERT INTO phone_verification_passenger (phone_number, verified, status) VALUES (:phone, 1, 'actives')");
|
||||
$stmtPV->execute([':phone' => $phone]);
|
||||
}
|
||||
|
||||
$con->commit();
|
||||
|
||||
echo json_encode([
|
||||
"status" => "success",
|
||||
"message" => "Tester passenger successfully $action.",
|
||||
"details" => [
|
||||
"passenger_id" => $passengerId,
|
||||
"email" => $email,
|
||||
"password" => $password,
|
||||
"phone" => $phone,
|
||||
"status" => "actives"
|
||||
]
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
} catch (Exception $e) {
|
||||
if (isset($con)) {
|
||||
$con->rollBack();
|
||||
}
|
||||
error_log("[Create Tester Passenger Error] " . $e->getMessage());
|
||||
jsonError("Server error: " . $e->getMessage());
|
||||
}
|
||||
?>
|
||||
511
backend/index.html
Normal file
511
backend/index.html
Normal file
@@ -0,0 +1,511 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Siro - Safe & Affordable Ride Sharing</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--primary: #2563EB;
|
||||
--primary-glow: rgba(37, 99, 235, 0.4);
|
||||
--primary-gradient: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%);
|
||||
--secondary-gradient: linear-gradient(135deg, rgba(255,255,255,0.08) 0%, rgba(255,255,255,0.02) 100%);
|
||||
--bg: #09090E;
|
||||
--card-bg: rgba(255, 255, 255, 0.03);
|
||||
--text-main: #FFFFFF;
|
||||
--text-muted: #94A3B8;
|
||||
--border: rgba(255, 255, 255, 0.08);
|
||||
--accent: #10B981;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Outfit', sans-serif;
|
||||
background-color: var(--bg);
|
||||
color: var(--text-main);
|
||||
line-height: 1.6;
|
||||
overflow-x: hidden;
|
||||
background-image:
|
||||
radial-gradient(circle at 10% 20%, rgba(37, 99, 235, 0.15) 0%, transparent 45%),
|
||||
radial-gradient(circle at 90% 80%, rgba(16, 185, 129, 0.08) 0%, transparent 45%);
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
/* --- Header / Navigation --- */
|
||||
header {
|
||||
width: 100%;
|
||||
padding: 24px 8%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.logo-img {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid var(--border);
|
||||
background: #FFFFFF;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
font-size: 24px;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.5px;
|
||||
background: linear-gradient(to right, #FFFFFF, #E2E8F0);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: var(--text-muted);
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
font-size: 15px;
|
||||
transition: color 0.2s ease;
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* --- Hero Section --- */
|
||||
.hero {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
padding: 120px 20px 80px 20px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 30%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
background: rgba(37, 99, 235, 0.2);
|
||||
border-radius: 50%;
|
||||
filter: blur(120px);
|
||||
z-index: -1;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.badge {
|
||||
background: rgba(37, 99, 235, 0.1);
|
||||
color: #3B82F6;
|
||||
border: 1px solid rgba(37, 99, 235, 0.2);
|
||||
padding: 8px 16px;
|
||||
border-radius: 100px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.5px;
|
||||
margin-bottom: 24px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(40px, 6vw, 68px);
|
||||
font-weight: 800;
|
||||
line-height: 1.15;
|
||||
margin-bottom: 20px;
|
||||
letter-spacing: -1.5px;
|
||||
background: linear-gradient(to right, #FFFFFF, #E2E8F0, #94A3B8);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
max-width: 900px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: clamp(16px, 2.5vw, 19px);
|
||||
color: var(--text-muted);
|
||||
max-width: 620px;
|
||||
margin-bottom: 40px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.cta-container {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 15px 32px;
|
||||
border-radius: 14px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: var(--primary-gradient);
|
||||
color: #FFFFFF;
|
||||
box-shadow: 0 4px 20px var(--primary-glow);
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
opacity: 0.95;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 24px var(--primary-glow);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background: var(--secondary-gradient);
|
||||
color: #FFFFFF;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background: rgba(255,255,255,0.06);
|
||||
transform: translateY(-2px);
|
||||
border-color: rgba(255,255,255,0.15);
|
||||
}
|
||||
|
||||
/* --- Mockup Section --- */
|
||||
.mockup-wrapper {
|
||||
width: 100%;
|
||||
max-width: 780px;
|
||||
border-radius: 24px;
|
||||
border: 1px solid var(--border);
|
||||
background: rgba(255, 255, 255, 0.01);
|
||||
backdrop-filter: blur(10px);
|
||||
padding: 16px;
|
||||
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.6);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.mockup-inner {
|
||||
border-radius: 18px;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
aspect-ratio: 16/9;
|
||||
background: #000000;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mockup-inner img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.play-indicator {
|
||||
position: absolute;
|
||||
width: 72px;
|
||||
height: 72px;
|
||||
border-radius: 50%;
|
||||
background: var(--primary-gradient);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-shadow: 0 8px 24px var(--primary-glow);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
/* --- Features Section --- */
|
||||
.features-section {
|
||||
padding: 100px 8%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.section-header h2 {
|
||||
font-size: 38px;
|
||||
font-weight: 800;
|
||||
letter-spacing: -1px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.section-header p {
|
||||
color: var(--text-muted);
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.features-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
.feature-card {
|
||||
background: var(--card-bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 24px;
|
||||
padding: 40px 30px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.feature-card:hover {
|
||||
transform: translateY(-6px);
|
||||
border-color: rgba(255,255,255,0.15);
|
||||
box-shadow: 0 20px 40px rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.icon-box {
|
||||
width: 54px;
|
||||
height: 54px;
|
||||
border-radius: 16px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-bottom: 24px;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.feature-card h3 {
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.feature-card p {
|
||||
color: var(--text-muted);
|
||||
font-size: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* --- Footer Section --- */
|
||||
footer {
|
||||
border-top: 1px solid var(--border);
|
||||
padding: 60px 8% 40px 8%;
|
||||
background: #06060A;
|
||||
}
|
||||
|
||||
.footer-top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 40px;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.footer-info {
|
||||
max-width: 320px;
|
||||
}
|
||||
|
||||
.footer-info p {
|
||||
color: var(--text-muted);
|
||||
font-size: 14px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
gap: 80px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.link-group h4 {
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 20px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.link-group ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.link-group ul li {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.link-group ul li a {
|
||||
color: var(--text-muted);
|
||||
text-decoration: none;
|
||||
font-size: 14px;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.link-group ul li a:hover {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 20px;
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.footer-bottom strong {
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* --- Responsive Queries --- */
|
||||
@media (max-width: 768px) {
|
||||
header {
|
||||
padding: 20px 5%;
|
||||
}
|
||||
.features-section {
|
||||
padding: 80px 5%;
|
||||
}
|
||||
footer {
|
||||
padding: 60px 5% 40px 5%;
|
||||
}
|
||||
.footer-links {
|
||||
gap: 40px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Header / Navigation -->
|
||||
<header>
|
||||
<div class="logo-container">
|
||||
<img class="logo-img" src="instructions_web/logo.png" alt="Siro App Logo">
|
||||
<span class="logo-text">Siro</span>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="#features">Features</a>
|
||||
<a href="privacy_policy.php">Privacy</a>
|
||||
<a href="instructions_web/delete_account.html">Delete Account</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<section class="hero">
|
||||
<div class="badge">Safe & Smart Journeys</div>
|
||||
<h1>Siro - Your Smart Ride Begins Here</h1>
|
||||
<p class="subtitle">The safest, most reliable, and affordable ride-sharing app in the region. Seamlessly connect with verified captains instantly.</p>
|
||||
|
||||
<div class="cta-container">
|
||||
<a href="instructions_web/delete_account.html" class="btn btn-primary">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M17 1H7c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 18H7V5h10v14z"/></svg>
|
||||
Get App for iOS
|
||||
</a>
|
||||
<a href="instructions_web/delete_account.html" class="btn btn-secondary">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M17.6 9.48l-1.9-1.9c-.4-.4-1-.4-1.4 0L6 15.82v3.3h3.3l8.3-8.3c.4-.4.4-1 0-1.34zM20.3 7.3l-1.6-1.6c-.4-.4-1-.4-1.4 0l-1.3 1.3 3 3 1.3-1.3c.4-.4.4-1 0-1.4z"/></svg>
|
||||
Get App for Android
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="mockup-wrapper">
|
||||
<div class="mockup-inner">
|
||||
<img src="instructions_web/logo.png" alt="Siro App Visual">
|
||||
<div class="play-indicator">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="#FFFFFF"><path d="M8 5v14l11-7z"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Features Section -->
|
||||
<section id="features" class="features-section">
|
||||
<div class="section-header">
|
||||
<h2>Why Choose Siro?</h2>
|
||||
<p>Designed with your safety, comfort, and affordability in mind.</p>
|
||||
</div>
|
||||
|
||||
<div class="features-grid">
|
||||
<!-- Feature 1 -->
|
||||
<div class="feature-card">
|
||||
<div class="icon-box" style="background: rgba(59, 130, 246, 0.1); color: #3B82F6;">
|
||||
🔒
|
||||
</div>
|
||||
<h3>Uncompromising Safety</h3>
|
||||
<p>Verified captains, in-app VoIP calls to secure your personal number, and recorded trips to ensure a stress-free travel experience.</p>
|
||||
</div>
|
||||
|
||||
<!-- Feature 2 -->
|
||||
<div class="feature-card">
|
||||
<div class="icon-box" style="background: rgba(16, 185, 129, 0.1); color: #10B981;">
|
||||
⚡
|
||||
</div>
|
||||
<h3>Smart Location Matching</h3>
|
||||
<p>Advanced real-time location matching routes you to the nearest available captain, minimizing wait time and optimizing routing.</p>
|
||||
</div>
|
||||
|
||||
<!-- Feature 3 -->
|
||||
<div class="feature-card">
|
||||
<div class="icon-box" style="background: rgba(239, 68, 68, 0.1); color: #EF4444;">
|
||||
💰
|
||||
</div>
|
||||
<h3>Fair & Transparent Rates</h3>
|
||||
<p>Competitive pricing with absolute transparency. Enjoy card and wallet payments to keep your payment flows smooth and hassle-free.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="footer-top">
|
||||
<div class="footer-info">
|
||||
<div class="logo-container" style="margin-bottom: 16px;">
|
||||
<img class="logo-img" src="instructions_web/logo.png" alt="Siro Logo">
|
||||
<span class="logo-text" style="color: #FFFFFF;">Siro</span>
|
||||
</div>
|
||||
<p>Siro LLC is committed to providing safe, comfortable, and highly reliable ride-sharing services across the region.</p>
|
||||
</div>
|
||||
|
||||
<div class="footer-links">
|
||||
<div class="link-group">
|
||||
<h4>Legals</h4>
|
||||
<ul>
|
||||
<li><a href="privacy_policy.php">Privacy Policy</a></li>
|
||||
<li><a href="instructions_web/delete_account.html">Account Deletion</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="link-group">
|
||||
<h4>Support</h4>
|
||||
<ul>
|
||||
<li><a href="instructions_web/delete_account.html">Help Center</a></li>
|
||||
<li><a href="mailto:support@siromove.com">Contact Us</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer-bottom">
|
||||
<p>© All rights reserved by <strong>Siro LLC</strong></p>
|
||||
<p>Designed with excellence.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,67 +1,169 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Delete Account</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Delete Account - Siro</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--primary: #0A66C2;
|
||||
--primary-gradient: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%);
|
||||
--bg: #0D0D14;
|
||||
--card-bg: rgba(255, 255, 255, 0.03);
|
||||
--text-main: #FFFFFF;
|
||||
--text-muted: #94A3B8;
|
||||
--border: rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
font-family: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
background-color: var(--bg);
|
||||
color: var(--text-main);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
overflow-x: hidden;
|
||||
background-image:
|
||||
radial-gradient(circle at 10% 20%, rgba(37, 99, 235, 0.15) 0%, transparent 40%),
|
||||
radial-gradient(circle at 90% 80%, rgba(29, 78, 216, 0.1) 0%, transparent 40%);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 500px;
|
||||
width: 100%;
|
||||
background: var(--card-bg);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 28px;
|
||||
padding: 40px 30px;
|
||||
text-align: center;
|
||||
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.container:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 30px 60px -10px rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
.logo-wrapper {
|
||||
margin-bottom: 24px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.logo-wrapper::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
left: -8px;
|
||||
right: -8px;
|
||||
bottom: -8px;
|
||||
border-radius: 50%;
|
||||
background: var(--primary-gradient);
|
||||
z-index: -1;
|
||||
opacity: 0.2;
|
||||
filter: blur(8px);
|
||||
}
|
||||
|
||||
.app-logo {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
border: 2px solid var(--border);
|
||||
background: #FFFFFF;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
top: 20px;
|
||||
margin-top: 0;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 16px;
|
||||
letter-spacing: -0.5px;
|
||||
background: linear-gradient(to right, #FFFFFF, #E2E8F0);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.video-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
border-radius: 20px;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
margin-bottom: 24px;
|
||||
background: #000;
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
video {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
margin-bottom: 20px;
|
||||
max-height: 480px;
|
||||
display: block;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.5em;
|
||||
.instructions {
|
||||
font-size: 15px;
|
||||
line-height: 1.6;
|
||||
color: var(--text-muted);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.app-logo {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
.instructions strong {
|
||||
color: #FFFFFF;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin-top: 40px;
|
||||
font-size: 13px;
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
footer strong {
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<img width="100px" height="100px" src="logo.gif" alt="App logo">
|
||||
<div class="container">
|
||||
<div class="logo-wrapper">
|
||||
<img class="app-logo" src="logo.png" alt="Siro App Logo">
|
||||
</div>
|
||||
|
||||
<h1>Delete Account</h1>
|
||||
|
||||
<video width="100" height="440" controls>
|
||||
<div class="video-container">
|
||||
<video controls poster="logo.png">
|
||||
<source src="animation.mp4" type="video/mp4">
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>To delete your account, please open the app and go to the <strong><em>Profile</em></strong> page. Then, tap on
|
||||
the "<strong><em>Delete My Account</em></strong>" button and follow the instructions.</p>
|
||||
<div class="instructions">
|
||||
<p>To delete your account, please open the app and navigate to the <strong>Profile</strong> page. Tap on the <strong>Delete My Account</strong> button and follow the instructions.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <footer> -->
|
||||
<p>
|
||||
©
|
||||
All rights reserved by <strong><em> SEFER </em></strong>
|
||||
</p>
|
||||
<!-- </footer> -->
|
||||
<footer>
|
||||
<p>© All rights reserved by <strong>Siro LLC</strong></p>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -32,7 +32,7 @@ dependencies:
|
||||
flutter_webrtc: ^1.4.1
|
||||
fl_chart: ^1.2.0
|
||||
flutter_confetti: ^0.5.1
|
||||
flutter_font_icons: ^2.2.5
|
||||
flutter_font_icons: ^3.0.0
|
||||
flutter_rating_bar: ^4.0.1
|
||||
flutter_staggered_animations: ^1.1.1
|
||||
flutter_svg: ^2.2.0
|
||||
|
||||
@@ -62,7 +62,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.siro.siro_rider"
|
||||
applicationId = "com.siro.rider"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdkVersion = 30
|
||||
|
||||
@@ -7,3 +7,7 @@ android.nonFinalResIds=true
|
||||
dart.obfuscation=true
|
||||
android.enableR8.fullMode=true
|
||||
org.gradle.java.home=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
|
||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||
android.builtInKotlin=false
|
||||
# This newDsl flag was added automatically by Flutter migrator
|
||||
android.newDsl=false
|
||||
|
||||
@@ -585,10 +585,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_font_icons
|
||||
sha256: d06eb0ab903d0e90a9a758de30892ea0d43221f03dad059970384e62479c787e
|
||||
sha256: f48e33076b5d97861057e9a9d64544afdbaa8fd0ab0e2f082bc8084a384e7239
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.7"
|
||||
version: "3.0.0"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -1305,10 +1305,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
|
||||
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.18"
|
||||
version: "0.12.19"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1321,10 +1321,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
||||
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.17.0"
|
||||
version: "1.18.0"
|
||||
mime:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -1909,10 +1909,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
|
||||
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.9"
|
||||
version: "0.7.11"
|
||||
timezone:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -2,7 +2,7 @@ name: siro_rider
|
||||
description: "A new Flutter project."
|
||||
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
version: 1.0.0+1
|
||||
version: 1.0.0+2
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.5 <4.0.0"
|
||||
@@ -35,7 +35,7 @@ dependencies:
|
||||
google_fonts: ^8.0.2
|
||||
flutter_launcher_icons: ^0.14.4
|
||||
flutter_rating_bar: ^4.0.1
|
||||
flutter_font_icons: ^2.2.7
|
||||
flutter_font_icons: ^3.0.0
|
||||
image_picker: ^1.2.1
|
||||
# camera: ^0.10.5+5 #to be remove
|
||||
flutter_widget_from_html: ^0.17.1
|
||||
|
||||
Reference in New Issue
Block a user