New design

This commit is contained in:
edsea
2025-08-02 23:39:14 +02:00
parent 0e90e1f409
commit 9634a3ea80
83 changed files with 7539 additions and 2471 deletions

11
rss/php/autoload.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
spl_autoload_register(function ($class){
$class = str_replace('App\\', '', $class);
$class = str_replace('\\', '/', $class);
$file = $_SERVER['DOCUMENT_ROOT'] . '/rss/php/class/'.$class.'.php';
if(file_exists($file)){
require_once($file);
}
});

56
rss/php/class/Main.php Normal file
View File

@@ -0,0 +1,56 @@
<?php
namespace App;
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/autoload.php');
use PDO;
use PDOException;
use Exception;
class Main extends Sys{
public function __construct(){
}
public function getCountryData() {
$csvPath = $_SERVER['DOCUMENT_ROOT'] . '/rss/csv/worldcities.csv';
if (!file_exists($csvPath)) {
return ['status' => 'error', 'message' => 'CSV file not found'];
}
$handle = fopen($csvPath, 'r');
if (!$handle) {
return ['status' => 'error', 'message' => 'Failed to open CSV'];
}
$header = fgetcsv($handle);
$countryData = [];
while (($row = fgetcsv($handle)) !== false) {
$rowData = array_combine($header, $row);
$country = $rowData['country'] ?? null;
$city = $rowData['city'] ?? null;
$state = $rowData['admin_name'] ?? null;
if (!$country || !$city) {
continue;
}
$cityObj = ['city' => $city];
if ($state && $state !== $city) {
$cityObj['state'] = $state;
}
if (!isset($countryData[$country])) {
$countryData[$country] = [];
}
$countryData[$country][] = $cityObj;
}
fclose($handle);
return $this->createResponse('success', $countryData);
}
}

34
rss/php/class/Sys.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
namespace App;
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/autoload.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/conf.php');
use PDO;
use PDOException;
use Exception;
use stdClass;
class Sys{
protected $conn;
public function __construct(){
global $conn;
$this->conn = $conn;
}
public function validateVar($val){
if(isset($val) && !empty($val) && $val){
return true;
}else{
return false;
}
}
protected function createResponse($status, $message = null, $info = null){
$resp = new stdClass();
$resp->status = $status;
$resp->message = $message;
$resp->info = $info;
return $resp;
}
}

36
rss/php/conf.php Normal file
View File

@@ -0,0 +1,36 @@
<?php
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/.env')){
$lines = file($_SERVER['DOCUMENT_ROOT'] . '/.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if(isset($lines) && !empty($lines)){
foreach($lines as $line){
if(strpos(trim($line), '#') === 0){
continue;
}
list($name, $value) = explode('=', $line, 2);
$name = trim($name);
$value = trim($value);
$value = trim($value, '"\'');
putenv("$name=$value");
}
}
}
try{
$db_user = getenv("DB_USER");
$db_pass = getenv("DB_PASS");
$db_server = getenv("DB_SERVER");
$db_name = getenv("DB_NAME");
$conn = new PDO("mysql:host=$db_server;dbname=$db_name;charset=utf8mb4", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
var_dump($e);
echo json_encode('Connection exception');
exit();
}
?>

58
rss/php/handler.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/autoload.php');
use App\Main;
$classList = array(
'Main' => Main::class,
);
session_start();
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/php/conf.php')){
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/conf.php');
}
if(isset($_POST['function']) && !empty($_POST['function']) && isset($_POST['target']) && !empty($_POST['target'])){
$t_class = trim($_POST['target']);
$t_func = trim($_POST['function']);
if(array_key_exists($t_class, $classList) && class_exists($classList[$t_class])){
if(method_exists($classList[$t_class], $t_func)){
$_class = new $classList[$t_class];
if(count($_POST) > 2){
foreach($_POST as $prop => $val){
if(property_exists($classList[$t_class], $prop)){
$_class->$prop = $val;
}
}
}
if(isset($_FILES) && !empty($_FILES)){
foreach($_FILES as $prop => $val){
if(property_exists($classList[$t_class], $prop)){
$_class->$prop = $val;
}
}
}
$response = $_class->$t_func();
if($response){
$msg = $response;
}else{
$msg = new stdClass();
$msg->status = 'fail';
$msg->message = $response;
}
}else{
$msg = new stdClass();
$msg->status = 'fail';
$msg->message = 'Invalid function';
}
}else{
$msg = new stdClass();
$msg->status = 'fail';
$msg->message = 'Invalid class';
}
}
die(json_encode($msg));

View File

@@ -1,45 +1,28 @@
<script src="/rss/js/menu.js"></script>
<?php
$pre_page = $_SERVER['PHP_SELF'];
$page = str_replace('/', '', $pre_page);
$page = str_replace('.php', '', $page);
if($page == 'index'){
echo '<script src="/rss/js/home.js"></script>';
}
if($page == 'signin'){
echo '<script src="/rss/js/login.js"></script>';
}
global $pageInfo;
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/js/' . $pageInfo['template'] .'.js')){
echo '<script src="/rss/js/' . $pageInfo['template'] .'.js"></script>';
}
?>
<footer>
<div class="footer-inner">
<div class="footer-col">
<div class="footer-menu">
<h3 class="link-title">Links</h3>
<ul>
<li><a href="/">Home</li>
<li><a href="/signin">Sign in</a></li>
<li><a href="/about">About</a></li>
</ul>
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-3 d-flex align-center">
<a href="/"><img src="/rss/img/logo-light.png" class="logo"></a>
</div>
<div class="col-sm-12 col-md-3">
<h4>Links</h4>
<ul>
<li>Home</li>
</ul>
</div>
<div class="col-sm-12 col-md-3">
<h4>Contact</h4>
<ul>
<li>Info</li>
</ul>
</div>
</div>
</div>
<div class="footer-col">
<div class="footer-menu">
<h3 class="link-title">Contact</h3>
<ul>
<li>Support: <a href="mailto:support@stellaamor.com">support@stellaamor.com</li>
<li>Contact: <a href="mailto:info@stellaamor.com">info@stellaamor.com</a></li>
</ul>
</div>
</div>
<div class="footer-col img">
<div class="image-container">
<img src="/rss/img/logo-light.png">
</div>
</div>
</div>
</footer>
</body>
</html>
</footer>

View File

@@ -1,72 +1,82 @@
<?php
$menu = array(
'Home' => '/',
'Create account' => '/create-account',
'Login' => '/login',
'About us' => '/about-us',
);
$pageTitle = htmlspecialchars($pageTitle ?? 'Stella Amor | Free Dating with Ultimate Match Filters', ENT_QUOTES, 'UTF-8');
$pageDescription = htmlspecialchars($pageDescription ?? 'Free dating! Ultimate filters for wealth, kinks, fetishes, & passions. Meet your perfect match now!', ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Basic Meta Tags -->
<!-- Defaults -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Stella Amor | <?php echo $page_title;?></title>
<title><?php echo $pageTitle; ?></title>
<meta name="description" content="<?php echo $pageDescription; ?>">
<meta name="author" content="Stella Amor">
<meta name="keywords" content="free dating, online dating, match filters, finance, kinks, fetishes, lifestyle dating">
<link rel="canonical" href="https://stellaamor.com<?php echo isset($_GET['page']) ? '/' . htmlspecialchars(basename($_GET['page']), ENT_QUOTES, 'UTF-8') : ''; ?>">
<!-- Meta Description -->
<meta name="description" content="<?php echo $page_description;?> ">
<meta name="keywords" content="dating">
<!-- Open Graph Tags for Social Media -->
<meta property="og:title" content="Stella Amor | <?php echo $page_title;?>">
<meta property="og:description" content="<?php echo $page_description;?>">
<meta property="og:image" content="https://stellaamor.com/rss/img/logo.png">
<meta property="og:url" content="https://stellaamor.com<?php echo $_SERVER['REQUEST_URI'];?>">
<meta property="og:type" content="website">
<!-- Twitter Card Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Stella Amor | <?php echo $page_title;?>">
<meta name="twitter:description" content="<?php echo $page_description;?>">
<meta name="twitter:image" content="https://stellaamor.com/rss/img/logo.png">
<link rel="icon" type="image/png" href="/rss/favicon/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/rss/favicon/favicon.svg" />
<link rel="shortcut icon" href="/rss/favicon/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/rss/favicon/apple-touch-icon.png" />
<link rel="manifest" href="/rss/favicon/site.webmanifest" />
<!-- Canonical Link (for duplicate pages) -->
<link rel="canonical" href="https://stellaamor.com<?php echo rtrim($_SERVER['REQUEST_URI'], '/'); ?>">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7LSPWJ1YKX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7LSPWJ1YKX');
</script>
<!-- Favicon -->
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<!-- Robots Meta Tag (for search engine crawling control) -->
<!-- Robots -->
<meta name="robots" content="index, follow">
<!-- Include css and JS -->
<!-- Open Graph -->
<meta property="og:title" content="<?php echo $pageTitle; ?>">
<meta property="og:description" content="<?php echo $pageDescription; ?>">
<meta property="og:type" content="website">
<meta property="og:url" content="https://stellaamor.com<?php echo htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8'); ?>">
<meta property="og:image" content="https://stellaamor.com/rss/img/logo.png">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="<?php echo $pageTitle; ?>">
<meta name="twitter:description" content="<?php echo $pageDescription; ?>">
<meta name="twitter:image" content="https://stellaamor.com/rss/img/logo.png">
<!-- Favicon -->
<link rel="icon" href="/rss/img/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="/rss/img/apple-touch-icon.png">
<!-- Stylesheets -->
<link rel="preload" href="/rss/css/main.css" as="style">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font/css/materialdesignicons.min.css" rel="stylesheet">
<link href="/rss/css/main.css" rel="stylesheet">
<body>
<!-- Begin menu -->
<nav class="navbar">
<div class="container">
<a href="/" class="logo"><img src="/rss/img/logo.png"></a>
<ul class="nav-links">
<li><a href="/">Home</a></li>
<li><a href="signin">Login</a></li>
<li><a href="/about">About us</a></li>
</ul>
<div class="burger">
<span></span>
<span></span>
<span></span>
</div>
<link rel="stylesheet" href="/rss/css/main.css">
<link rel="stylesheet" href="/rss/css/theme.css" media="print" onload="this.media='all'">
<!-- JavaScript -->
<script src="/rss/js/main.js" defer></script>
<!-- Structured Data (JSON-LD) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Stella Amor",
"url": "https://stellaamor.com",
"logo": "https://stellaamor.com/rss/img/logo.png",
"description": "Stella Amor: Free online dating with advanced filters for lifestyle, finance, kinks, and more. Find your perfect match today."
}
</script>
</head>
<body>
<header>
<div class="logo">
<a href="/">
<img src="/rss/img/logo.png" alt="Stella Amor Logo" width="150" height="50">
</a>
</div>
</nav>
<button class="menu-toggle" aria-label="Toggle navigation">☰</button>
<nav>
<?php
$currentPage = $_SERVER['REQUEST_URI'];
foreach($menu as $name => $link):
$isActive = ($currentPage === $link) ? 'active' : '';
$ariaCurrent = ($currentPage === $link) ? ' aria-current="page"' : '';
?>
<a href="<?php echo $link; ?>" class="menu-item <?php echo $isActive; ?>"<?php echo $ariaCurrent; ?>><?php echo $name; ?></a>
<?php endforeach; ?>
</nav>
</header>

33
rss/php/pageHandler.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/autoload.php');
// require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/conf.php');
$page = isset($_GET['page']) && !empty($_GET['page']) ? str_replace('.php', '', $_GET['page']) : 'index';
if($page == '404'){
http_response_code(404);
}
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/json/pages/' . $page . '.json')){
// Load page configuration
$jsonInfo = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/rss/json/pages/' . $page .'.json');
$pageInfo = json_decode($jsonInfo, true);
}else{
http_response_code(404);
header('location:/404');
die('Not found');
}
?>
<?php
function loadContents(){
global $pageInfo;
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/php/templates/'.$pageInfo['template'].'.php')){
include($_SERVER['DOCUMENT_ROOT'] . '/rss/php/templates/'.$pageInfo['template'].'.php');
}else{
http_response_code(404);
header('location:/404');
exit();
}
}
?>

View File

@@ -0,0 +1 @@
<h2>This page was not found</h2>

322
rss/php/templates/index.php Normal file
View File

@@ -0,0 +1,322 @@
<main>
<div class="home-banner">
<div class="home-banner-inner">
<div class="container">
<div class="inner-row">
<div class="text-col">
<h1 class="title mb-3">Discover <span class="text-primary">Your Love Story</span> with Stella Amor</h1>
<p class="lead mb-1">Join free today with unique date filters for finance, kinks, lifestyle, and beyond. Start exploring now!</p>
<a href="/signup" class="mb-3 btn btn-dark cta-btn">Sign up today</a>
<p class="login-text">Already have an account? <a href="/login" class="login-link">Login now</a></p>
</div>
<div class="image-col">
<div class="image-wrapper">
<img src="/rss/img/couple_sunset.jpg" alt="Couple at sunset">
</div>
</div>
</div>
</div>
</div>
</div>
<section class="features-section py-4 bg-white">
<div class="container border-top text-light py-4">
<h2 class="text-center mb-2 fw-light text-black">Discover Your Ideal Match Today</h2>
<div class="row text-black">
<div class="col-12 col-md-4">
<div class="theme-card primary card-hover">
<div class="card-header theme-header">
<img src="/rss/img/yacht.jpg" alt="Financial compatibility couple" class="rounded-image object-bottom">
</div>
<div class="card-body">
<h3 class="h3 fw-light">Financial Harmony</h3>
<p class="text">Match with singles who align with your financial dreams, from savings to luxury lifestyles.</p>
</div>
</div>
</div>
<div class="col-12 col-md-4">
<div class="theme-card secondary card-hover">
<div class="card-header theme-header">
<img src="/rss/img/kink.jpg" alt="Kinks and fetishes compatibility couple" class="rounded-image object-left">
</div>
<div class="card-body">
<h3 class="h3 fw-light">Unique Preferences</h3>
<p class="text">Find love with filters for kinks and personal desires tailored just for you.</p>
</div>
</div>
</div>
<div class="col-12 col-md-4">
<div class="theme-card primary card-hover">
<div class="card-header theme-header">
<img src="/rss/img/family-frame.jpg" alt="Lifestyle compatibility couple" class="rounded-image object-bottom">
</div>
<div class="card-body">
<h3 class="h3 fw-light">Lifestyle Connections</h3>
<p class="text">Connect with partners who share your passion for pets, fitness, or family values.</p>
</div>
</div>
</div>
</div>
<div class="d-flex justify-center mt-3">
<a href="/create-account" class="btn btn-dark" title="Explore Stella Amor filters" aria-label="Explore filters">Explore Your Options</a>
</div>
</div>
</section>
<section>
<div class="py-5 display-banner wedding-banner">
<div class="container">
<div class="flex-column justify-center align-center">
<h3 class="text-white">Uncover True Love and Marriage with Free Dating</h3>
<p class="text-white">Join free today at Stella Amor to connect with your lifelong partner using unique date filters for finance, kinks, lifestyle, and much more.</p>
</div>
</div>
</div>
</section>
<section class="bg-white py-4">
<div class="container my-3">
<div class="row align-items-center">
<div class="col-12 col-md-5">
<div class="rounded-col-image">
<img src="/rss/img/couple-beach.jpg" alt="Stella Amor dating experience">
</div>
</div>
<div class="col-12 col-md-7 flex-column justify-center">
<h2 class="mb-3">Join the Best <span class="bolder text-primary">Dating Platform </span> with Advanced Filters</h2>
<p>Stella Amor offers free dating with advanced filters for finance, kinks, lifestyle, and more. Connect with singles who truly align with your values and passions. Start your journey to love today with a platform designed for your unique preferences!</p>
<div class="d-flex mt-3">
</div>
</div>
</div>
</div>
</section>
<div class="container border-top text-light" aria-hidden="true"></div>
<section class="py-2 bg-white">
<div class="container my-5">
<div class="row align-items-center">
<div class="col-12 col-md-5">
<img src="/rss/img/couple-luxury.jpg" alt="Free dating with economy filters on Stella Amor" class="img-w-100 img-rounded-lg shadow-2">
</div>
<div class="col-12 col-md-7 flex-column justify-center">
<h2 class="mb-3">Find Love with Economy Compatibility</h2>
<p>Stella Amors free dating platform lets you filter for financial compatibility, connecting you with singles who share your economic goals. Start building a stable future with the right partner today!</p>
<div class="d-flex mt-3">
</div>
</div>
</div>
</div>
<div class="container my-5">
<div class="row align-items-center">
<div class="col-12 col-md-7 flex-column justify-center">
<h2 class="mb-3">Explore Love with Kinks & Preferences</h2>
<p>Discover your ideal match on Stella Amor with advanced filters for kinks and unique preferences. Join free to find a partner who embraces your desires on this top dating site!</p>
</div>
<div class="col-12 col-md-5">
<img src="/rss/img/fetish.jpg" alt="Free dating with kinks filters on Stella Amor" class="img-w-100 img-rounded-lg shadow-2">
</div>
</div>
</div>
<div class="container my-5">
<div class="row align-items-center">
<div class="col-12 col-md-5">
<img src="/rss/img/family-pregnant.jpg" alt="Free dating with family filters on Stella Amor" class="img-w-100 img-rounded-lg shadow-2">
</div>
<div class="col-12 col-md-7 flex-column justify-center">
<h2 class="mb-3">Build a Family with Lifestyle Matching</h2>
<p>Stella Amor offers free dating with filters for family values and lifestyle, helping you find a lifelong partner ready for marriage and a shared future. Join now!</p>
<div class="d-flex mt-3">
</div>
</div>
</div>
</div>
</section>
<section class="success-stories bg-white">
<div class="container text-light border-top border-bottom py-4 mb-3">
<div class="text-black">
<h2 class="mb-4 text-center">Love Found on Stella Amor</h2>
<div class="row">
<div class="col-12 col-md-4">
<div class="theme-card primary">
<div class="inner">
<p class="text">“The finance filter helped us align our goals! K & M</p>
</div>
</div>
</div>
<div class="col-12 col-md-4">
<div class="theme-card secondary">
<div class="inner">
<p class="text">“Kink filters made finding my match effortless! P & J</p>
</div>
</div>
</div>
<div class="col-12 col-md-4">
<div class="theme-card primary">
<div class="inner">
<p class="text">“Found my pet-loving soulmate! S & T</p>
</div>
</div>
</div>
</div>
<div class="d-flex justify-center mt-4">
<a href="/success-stories" class="btn btn-outline-primary" title="Read more Stella Amor success stories" aria-label="Read more success stories">Read More Stories</a>
</div>
</div>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Review",
"itemReviewed": {
"@type": "Organization",
"name": "Stella Amor"
},
"reviewRating": {
"@type": "Rating",
"ratingValue": 5
},
"author": {
"@type": "Person",
"name": "K & M"
},
"reviewBody": "The finance filter helped us align our goals!"
}
</script>
</div>
</section>
<section class="filter-section bg-accent-white py-4">
<div class="container my-5">
<h2 class="mb-4 text-center">What You Can Filter By</h2>
<div class="row g-4">
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-currency-usd"></i> <!-- Finance icon -->
</div>
<h3 class="filter-title">Financial Goals & Spending Habits</h3>
<p class="filter-text">Find partners aligned with your wealth dreams, from savings to luxury lifestyles.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-handcuffs"></i> <!-- Kinks icon -->
</div>
<h3 class="filter-title">Fetishes & Personalities</h3>
<p class="filter-text">Connect with those who share your unique desires and preferences.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-paw"></i> <!-- Lifestyle icon -->
</div>
<h3 class="filter-title">Lifestyle (Pets, Fitness, Diets)</h3>
<p class="filter-text">Match with partners who vibe with your pet love, fitness, or dietary choices.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-eye"></i> <!-- Eye Colors icon -->
</div>
<h3 class="filter-title">Eye Colors & Hair Styles</h3>
<p class="filter-text">Filter by physical traits to find your visually perfect match.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-human-male-female"></i> <!-- Body Types icon -->
</div>
<h3 class="filter-title">Body Types & Ethnicities</h3>
<p class="filter-text">Discover love based on body preferences and cultural backgrounds.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-school"></i> <!-- Education icon -->
</div>
<h3 class="filter-title">Education & Travel Preferences</h3>
<p class="filter-text">Connect with those who share your academic and travel passions.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-heart-pulse"></i> <!-- Health icon -->
</div>
<h3 class="filter-title">Health Habits & Exercise Frequency</h3>
<p class="filter-text">Find matches with similar health and fitness routines.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-briefcase"></i> <!-- Job Roles icon -->
</div>
<h3 class="filter-title">Job Roles & Living Arrangements</h3>
<p class="filter-text">Align with partners based on career and living situations.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-church"></i> <!-- Religion icon -->
</div>
<h3 class="filter-title">Religion & Languages</h3>
<p class="filter-text">Meet those who share your faith and linguistic background.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4 my-2">
<div class="filter-card">
<div class="filter-icon">
<i class="mdi mdi-movie"></i> <!-- Hobbies icon -->
</div>
<h3 class="filter-title">Hobbies & Movie Genres</h3>
<p class="filter-text">Bond over shared interests and favorite films.</p>
</div>
</div>
</div>
<div class="d-flex justify-center mt-4 pt-5">
<a href="/create-account" class="btn btn-white me-2">Join Free Now</a>
</div>
<p class="text-center mt-3">Stella Amor offers the best free dating filters to customize your search and start your love journey today!</p>
</div>
</section>
</main>
<!-- FIX THIS BEFORE RELASE -->
<script>
document.addEventListener('DOMContentLoaded', () => {
const sections = document.querySelectorAll('section');
const observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target); // Stop observing after animation
}
});
}, {
threshold: 0.05, // Trigger when 10% of section is visible
rootMargin: '0px 0px -50px 0px' // Trigger 50px before fully in view
}
);
sections.forEach(section => {
section.classList.add('section-animation');
observer.observe(section);
});
});
</script>

View File

@@ -0,0 +1,37 @@
<div class="bg-light full-height d-flex align-center">
<div class="container">
<div class="row py-4 no-wrap">
<div class="col-12 col-md-6 rel neg-col d-flex align-center">
<div class="card shadow-3">
<h2>Login</h2>
<form method="POST" action="#" id="loginForm">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-input" id="email" name="email">
</div>
<div class="form-group">
<label for="password">Passowrd</label>
<input type="password" class="form-input" id="password" name="password">
</div>
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<button class="btn secondary">Login</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="col-12 col-md-8">
<div class="card bg-alt rel has-neg-col shadow-4 py-5">
<h2 class="text-white">Log In to Your Real Estate Account</h2>
<p class="text-white">Ready to manage your properties? Log in to Globalestatenet and get started in seconds. From your dashboard, you can update your global property listings, respond to inquiries, and connect with buyers and renters across the world—all from one easy-to-use platform.</p>
<p class="text-white">For broker agency members, this platform is built to help you grow. After logging in, add your team members to your account, so each employee can create and manage listings that reach international clients. Its a simple way to expand your agencys presence in the global real estate market.</p>
<p class="text-white">Listing with us is budget-friendly: every property listing costs the same price, whether its a small apartment or a luxury estate. You can add up to 100 photos to each listing for free, with no hidden fees. Want more visibility? The only extra cost is for featured listings to help your properties stand out. Dont have an account yet?<br><a href="/create-account.php" class="btn secondary">Create account</a></p>
</div>
</div>
</div>
</div>
</div>