Compare commits
62 Commits
login-page
...
9f1e1a8962
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f1e1a8962 | ||
|
|
61d3738b26 | ||
|
|
3c9acc125e | ||
|
|
aeb1ecd50a | ||
|
|
810b033a14 | ||
| c01baf44d9 | |||
|
|
70bde90792 | ||
|
|
f7e691a24c | ||
|
|
1b4adde2bb | ||
|
|
9217a71d5a | ||
|
|
de11388a77 | ||
|
|
9ab5fb67a6 | ||
|
|
699caf348b | ||
|
|
9abdf38a8a | ||
|
|
0183f4d027 | ||
|
|
9d2cb407ff | ||
|
|
63ee007a48 | ||
|
|
adf6e3a5b2 | ||
|
|
936ff29f56 | ||
|
|
5589ebc7b7 | ||
| 929b9b3090 | |||
| 899bc2be76 | |||
| 6a3608fe1f | |||
|
|
c08f8a4cfe | ||
|
|
542b62eaf2 | ||
|
|
60131da7a0 | ||
|
|
d08fdbbf64 | ||
|
|
81f852669c | ||
|
|
acbda1e8e1 | ||
|
|
18882365a0 | ||
| 5c4de4eeb1 | |||
|
|
0594026785 | ||
| 295793ad7f | |||
|
|
420bf997cc | ||
| 2eeac785fb | |||
| 57968fe74d | |||
| c312697a6e | |||
| 33f3552dd8 | |||
| c7e7013fce | |||
| 361e0cfb37 | |||
| 9be1311a37 | |||
| e63b3cf525 | |||
| c9aa00d80f | |||
|
|
bbd74dade9 | ||
|
|
e5702dd76e | ||
|
|
4c85f23333 | ||
|
|
bccb39b021 | ||
|
|
082093e723 | ||
|
|
da2d882af5 | ||
| 5c4f68e7a7 | |||
|
|
a8341f43f1 | ||
|
|
349d8433d9 | ||
|
|
54b83c126d | ||
|
|
a2660be9c0 | ||
|
|
7dfe83f837 | ||
|
|
8ec1ba9756 | ||
|
|
24c3640f05 | ||
|
|
14b3732039 | ||
|
|
4a4fa5308e | ||
|
|
20b56efd31 | ||
| ae966a540e | |||
| 2479570028 |
86
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,86 @@
|
||||
name: Deploy (stellaamor)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: [ mainhost ] # must match your runner label (e.g. mainhost:host)
|
||||
env:
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_OPTS: >-
|
||||
-F /dev/null
|
||||
-o IdentitiesOnly=yes
|
||||
-o IdentityAgent=none
|
||||
-o PreferredAuthentications=publickey
|
||||
-o PubkeyAuthentication=yes
|
||||
-o PasswordAuthentication=no
|
||||
-o NumberOfPasswordPrompts=0
|
||||
-o BatchMode=yes
|
||||
-o ServerAliveInterval=15
|
||||
-o ServerAliveCountMax=3
|
||||
-o ConnectTimeout=20
|
||||
-o StrictHostKeyChecking=no
|
||||
|
||||
APP_ROOT: /var/www/stellaamor
|
||||
UPLOADS_DIR: uploads
|
||||
KEEP_N: "5"
|
||||
HEALTH_URL: https://stellaamor.com/
|
||||
SERVICE_RELOAD: "systemctl reload apache2 || true"
|
||||
SSH_KEY_PATH: /home/gitea-runner/.ssh/id_ed25519
|
||||
|
||||
|
||||
steps:
|
||||
- name: Checkout (pure git)
|
||||
run: |
|
||||
git init
|
||||
git remote add origin "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY"
|
||||
git fetch --depth=1 origin "$GITHUB_SHA"
|
||||
git checkout -q "$GITHUB_SHA"
|
||||
|
||||
- name: SSH smoke test
|
||||
run: ssh $SSH_OPTS -i "$SSH_KEY_PATH" ${SSH_USER}@${SSH_HOST} true
|
||||
|
||||
- name: Upload & activate atomically
|
||||
run: |
|
||||
set -euo pipefail
|
||||
REL="$(date -u +%Y%m%d-%H%M%SZ)-${{ github.sha }}"
|
||||
echo "REL=$REL" >> $GITHUB_ENV
|
||||
TAR="/tmp/${REL}.tar.gz"
|
||||
APP="${{ env.APP_ROOT }}"
|
||||
SHARED="${APP}/shared"
|
||||
RELEASES="${APP}/releases"
|
||||
CUR="${APP}/current"
|
||||
UPLOADS="${{ env.UPLOADS_DIR }}"
|
||||
|
||||
tar -czf "$TAR" --exclude-vcs --exclude='./node_modules' --exclude="./${UPLOADS}" --exclude='./release' .
|
||||
mkdir -p release && mv "$TAR" "release/${REL}.tar.gz"
|
||||
|
||||
ssh $SSH_OPTS -i "$SSH_KEY_PATH" ${SSH_USER}@${SSH_HOST} \
|
||||
"set -e; install -d -m 755 ${RELEASES} ${SHARED} ${SHARED}/${UPLOADS}"
|
||||
|
||||
scp -O $SSH_OPTS -vvv -i "$SSH_KEY_PATH" "release/${REL}.tar.gz" ${SSH_USER}@${SSH_HOST}:/tmp/${REL}.tar.gz
|
||||
|
||||
ssh $SSH_OPTS -i "$SSH_KEY_PATH" ${SSH_USER}@${SSH_HOST} '
|
||||
set -euo pipefail
|
||||
REL="'${REL}'"; APP="'${APP}'"; SHARED="'${SHARED}'"; RELEASES="'${RELEASES}'"; CUR="'${CUR}'"; UPLOADS="'${UPLOADS}'";
|
||||
NEW="${RELEASES}/${REL}"
|
||||
mkdir -p "${NEW}"
|
||||
tar -xzf "/tmp/${REL}.tar.gz" -C "${NEW}" && rm -f "/tmp/${REL}.tar.gz"
|
||||
rm -rf "${NEW}/${UPLOADS}" && ln -s "${SHARED}/${UPLOADS}" "${NEW}/${UPLOADS}"
|
||||
[ -f "${SHARED}/.env" ] && ln -sf "${SHARED}/.env" "${NEW}/.env" || true
|
||||
printf "sha=%s\nbuilt_at=%s\n" "'${{ github.sha }}'" "$(date -u +%FT%TZ)" > "${NEW}/RELEASE"
|
||||
PREV="$(readlink -f "${CUR}" || true)"
|
||||
ln -sfn "${NEW}" "${CUR}"
|
||||
'"${{ env.SERVICE_RELOAD }}"' >/dev/null 2>&1 || true
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
curl -fsS --max-time 5 "'"${{ env.HEALTH_URL }}"'" >/dev/null || {
|
||||
echo "Health check failed, rolling back..."
|
||||
[ -n "${PREV}" ] && ln -sfn "${PREV}" "${CUR}" && '"${{ env.SERVICE_RELOAD }}"' >/dev/null 2>&1 || true
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
cd "${RELEASES}" && ls -1tr | head -n -'${{ env.KEEP_N }}' | xargs -r -I{} rm -rf "{}"
|
||||
'
|
||||
47
.gitea/workflows/rollback.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
# manual rollback
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
steps:
|
||||
description: "How many releases to roll back (1 = previous)"
|
||||
default: "1"
|
||||
|
||||
jobs:
|
||||
rollback:
|
||||
runs-on: [ mainhost ]
|
||||
env:
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_KEY_PATH: /home/gitea-runner/.ssh/id_ed25519
|
||||
SSH_OPTS: >-
|
||||
-F /dev/null -o IdentitiesOnly=yes -o IdentityAgent=none
|
||||
-o PreferredAuthentications=publickey -o PubkeyAuthentication=yes
|
||||
-o PasswordAuthentication=no -o NumberOfPasswordPrompts=0 -o BatchMode=yes
|
||||
-o ServerAliveInterval=15 -o ServerAliveCountMax=3 -o ConnectTimeout=20
|
||||
-o StrictHostKeyChecking=no
|
||||
APP_ROOT: /var/www/stellaamor
|
||||
SERVICE_RELOAD: "systemctl reload apache2 || true"
|
||||
|
||||
steps:
|
||||
- name: Roll back symlink to an older release
|
||||
run: |
|
||||
set -euo pipefail
|
||||
APP="${{ env.APP_ROOT }}"
|
||||
RELEASES="${APP}/releases"
|
||||
CUR="${APP}/current"
|
||||
N="${{ github.event.inputs.steps || '1' }}"
|
||||
|
||||
# pick target release (1=previous)
|
||||
TARGET="$(ls -1tr "${RELEASES}" | tail -n +"$((N+1))" | tail -n 1)"
|
||||
if [ -z "${TARGET}" ]; then
|
||||
echo "No release found to roll back to."; exit 1
|
||||
fi
|
||||
echo "Rolling back to: ${TARGET}"
|
||||
|
||||
ssh $SSH_OPTS -i "$SSH_KEY_PATH" ${SSH_USER}@${SSH_HOST} "
|
||||
set -euo pipefail
|
||||
APP='${APP}'; RELEASES='${RELEASES}'; CUR='${CUR}'; TARGET='${TARGET}';
|
||||
[ -d \"\${RELEASES}/\${TARGET}\" ] || { echo 'Target release missing'; exit 1; }
|
||||
ln -sfn \"\${RELEASES}/\${TARGET}\" \"\${CUR}\"
|
||||
${SERVICE_RELOAD} >/dev/null 2>&1 || true
|
||||
"
|
||||
51
.gitea/workflows/smoke.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
name: Smoke (SSH + layout)
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ "ci/smoke" ]
|
||||
|
||||
jobs:
|
||||
smoke:
|
||||
runs-on: [ mainhost, docker ]
|
||||
|
||||
env:
|
||||
APP_ROOT: /var/www/stellaamor
|
||||
UPLOADS_DIR: uploads
|
||||
|
||||
steps:
|
||||
- name: Checkout (pure git)
|
||||
run: |
|
||||
git init
|
||||
git remote add origin "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY"
|
||||
git fetch --depth=1 origin "$GITHUB_SHA"
|
||||
git checkout -q "$GITHUB_SHA"
|
||||
|
||||
- name: Write SSH key
|
||||
run: |
|
||||
set -eu
|
||||
install -d -m 700 ~/.ssh
|
||||
printf '%s\n' "${{ secrets.SSH_KEY }}" > ~/.ssh/id_ed25519
|
||||
# normalize (fix CRLF)
|
||||
sed -i 's/\r$//' ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
if [ -n "${{ secrets.SSH_KNOWN_HOSTS }}" ]; then
|
||||
printf '%s\n' "${{ secrets.SSH_KNOWN_HOSTS }}" > ~/.ssh/known_hosts
|
||||
chmod 644 ~/.ssh/known_hosts
|
||||
else
|
||||
printf 'StrictHostKeyChecking no\n' >> ~/.ssh/config
|
||||
fi
|
||||
|
||||
|
||||
|
||||
- name: Ping server
|
||||
run: ssh -i ~/.ssh/id_ed25519 ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'echo ok'
|
||||
|
||||
- name: Ensure layout (no deploy yet)
|
||||
run: |
|
||||
ssh -i ~/.ssh/id_ed25519 ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "
|
||||
set -e
|
||||
install -d -m 755 ${APP_ROOT}/releases ${APP_ROOT}/shared ${APP_ROOT}/shared/${UPLOADS_DIR}
|
||||
echo smoke-$(date -u +%FT%TZ) > ${APP_ROOT}/shared/ci-smoke.txt
|
||||
ls -la ${APP_ROOT} ${APP_ROOT}/shared
|
||||
"
|
||||
60
.htaccess
@@ -1,35 +1,59 @@
|
||||
# Enable RewriteEngine
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
|
||||
# Force HTTPS (redirect HTTP to HTTPS)
|
||||
#RewriteCond %{HTTPS} off
|
||||
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
# Do NOT rewrite existing files or directories
|
||||
RewriteCond %{REQUEST_FILENAME} -f [OR]
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteRule ^ - [L]
|
||||
|
||||
# Redirect www to non-www (if you want to remove www)
|
||||
RewriteCond %{HTTP_HOST} ^www\.(example\.com)$ [NC]
|
||||
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
|
||||
# Add trailing slash only to extensionless URLs
|
||||
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif|svg|webp|ico|woff2?|ttf|eot|json|xml|html|php)$
|
||||
RewriteCond %{REQUEST_URI} !/$
|
||||
RewriteRule ^(.+)$ $1/ [L,R=301]
|
||||
|
||||
# Handle 404 errors
|
||||
ErrorDocument 404 /404
|
||||
|
||||
|
||||
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php[\s?/] [NC]
|
||||
RewriteRule ^index\.php$ / [R=301,L]
|
||||
RewriteCond %{REQUEST_FILENAME}.php -f
|
||||
RewriteRule ^([^/]+)/?$ $1.php [L]
|
||||
# Rewrite pretty URLs to index.php?page=
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^([^/]+)/$ index.php?page=$1 [L,QSA]
|
||||
|
||||
# Enable GZip compression
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml
|
||||
AddOutputFilterByType DEFLATE text/css text/javascript application/javascript
|
||||
AddOutputFilterByType DEFLATE application/x-javascript application/json
|
||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
|
||||
AddOutputFilterByType DEFLATE application/javascript application/json
|
||||
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
|
||||
AddOutputFilterByType DEFLATE application/font-woff application/font-woff2
|
||||
AddOutputFilterByType DEFLATE image/svg+xml
|
||||
AddOutputFilterByType DEFLATE image/svg+xml image/webp
|
||||
</IfModule>
|
||||
|
||||
# Enable browser caching for static assets
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive On
|
||||
ExpiresByType image/jpeg "access plus 1 year"
|
||||
ExpiresByType image/png "access plus 1 year"
|
||||
ExpiresByType image/webp "access plus 1 year"
|
||||
ExpiresByType image/svg+xml "access plus 1 year"
|
||||
ExpiresByType text/css "access plus 1 month"
|
||||
ExpiresByType application/javascript "access plus 1 month"
|
||||
ExpiresByType image/x-icon "access plus 1 year"
|
||||
ExpiresByType application/font-woff "access plus 1 year"
|
||||
ExpiresByType application/font-woff2 "access plus 1 year"
|
||||
</IfModule>
|
||||
|
||||
# Security headers
|
||||
<IfModule mod_headers.c>
|
||||
Header set X-Content-Type-Options "nosniff"
|
||||
Header set X-Frame-Options "DENY"
|
||||
Header set X-XSS-Protection "1; mode=block"
|
||||
</IfModule>
|
||||
|
||||
# Prevent directory listing
|
||||
Options -Indexes
|
||||
|
||||
# BEGIN cPanel-generated php ini directives, do not edit
|
||||
# Manual editing of this file may result in unexpected behavior.
|
||||
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
|
||||
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
|
||||
<IfModule php8_module>
|
||||
php_value output_buffering Off
|
||||
</IfModule>
|
||||
|
||||
9
home/.htaccess
Normal file
@@ -0,0 +1,9 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
|
||||
RewriteRule ^index\.html$ - [L]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule . /index.html [L]
|
||||
</IfModule>
|
||||
1
home/css/app.5360f6f2.css
Normal file
@@ -0,0 +1 @@
|
||||
@import url(https://fonts.googleapis.com/css2?family=Niconne&family=Poly:ital@0;1&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);#app{font-family:Poppins,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#353535}nav{padding:30px}nav a{font-weight:700;color:#fff}nav a.router-link-exact-active{color:#42b983}.font-niconne{font-family:Niconne,cursive;font-family:Poly,serif}.poppins,body{font-family:Poppins,sans-serif}img{max-width:100%}.main{padding-top:60px}@media(min-width:960px){.main{padding-top:70px}}*{text-align:left}.app-main{margin-top:60px;position:relative;min-height:calc(100vh - 60px)}.top-bar{z-index:10;position:fixed}.loadingScreen{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#ffffffc9;display:flex;justify-content:center;align-items:center;z-index:9}.resetRow{justify-content:flex-end;padding:8px}.filterDrawer{background-color:#fff;z-index:9;height:calc(100% - 60px);padding-top:50px}.filter-header{font-size:18px;font-weight:300;padding-left:5px;padding-bottom:5px;padding-top:20px}.filter-label{font-size:12px;padding-left:15px;margin-bottom:10px;margin-top:10px;display:block}.filter-span{color:#747474;display:block;text-wrap:wrap}.filter-titles{font-size:14px;color:#6d6b6b;font-weight:400;padding-bottom:5px}.list-actions{position:fixed;height:60px;bottom:0;width:100%;padding:0 15px;background:#fff}.filter{padding-bottom:70px}.v-input--selection-controls .v-input__slot>.v-label{font-size:12px}.v-list--dense .v-l,.v-list-item--dense{min-height:30px}.user-age{padding-left:5px;font-size:14px;color:#999}.user-info{color:#666}.user-info ul{list-style:none;padding:0;margin:0}.banner{background-size:cover;background-position:50%;height:350px;background-color:#f7f7f7}.profile-card{margin-top:-100px}.user-info{text-align:center;padding:20px}.user-info h2{margin-bottom:10px}.user-info p{margin:0}.lightbox-arrow{position:absolute;top:50%;width:36px!important;height:36px!important;transform:translateY(-50%);color:#fff!important;background-color:rgba(0,0,0,.5)!important;border-radius:50%!important;box-shadow:0 2px 4px rgba(0,0,0,.3)!important;min-width:unset!important}.lightbox-arrow.left{left:10px}.lightbox-arrow.right{right:10px}.removeImage{top:3px;right:3px;width:18px!important;height:18px!important}.removeImage,.removeImage2{position:absolute;padding:5px!important;color:#e5e5e5!important;background-color:rgba(0,0,0,.5)!important;border-radius:50%!important;box-shadow:0 2px 4px rgba(0,0,0,.3)!important;min-width:unset!important}.removeImage2{top:10px;right:10px;width:30px!important;height:30px!important}.unreadMessages{color:#1976d2!important}.equal-height-row{display:flex;flex-wrap:wrap}.equal-height-card{flex:1 0 auto;display:flex;flex-direction:column}.userInfoListClass{list-style-type:none;padding:0;margin:0;display:flex;flex-wrap:wrap}.userInfoListClass li{width:calc(50% - 20px);margin:10px;padding:15px;border-radius:10px;box-shadow:0 4px 6px rgba(0,0,0,.1);background-color:#fff;transition:background-color .3s ease}.userInfoListClass li:hover{background-color:#f0f0f0}.userInfoListClass li h4{margin-top:0;margin-bottom:10px;font-size:14px;font-weight:400;color:#979797}.userInfoListClass li p{margin-bottom:5px;font-size:12px;color:#919191;line-height:1.4}@media(max-width:768px){.userInfoListClass li{width:calc(100% - 20px)}}.fixedToolbar[data-v-4464b245]{position:fixed;top:0;width:100%}.chat-messages[data-v-4464b245]{padding-top:65px;overflow-y:auto;display:flex;flex-direction:column;height:100%}.chat-message[data-v-4464b245]{margin:10px;padding:10px;border-radius:10px;width:80%}.message-header[data-v-4464b245]{display:flex;align-items:center}.avatar[data-v-4464b245]{width:40px;height:40px;border-radius:50%;margin-right:10px}.username[data-v-4464b245]{font-weight:700;margin-right:10px;cursor:pointer}.message-content[data-v-4464b245]{word-wrap:break-word}.outgoing[data-v-4464b245]{align-self:flex-end;background-color:#2196f3;color:#fff}.incoming[data-v-4464b245]{align-self:flex-start;background-color:#f5f5f5}.sendButton[data-v-4464b245]{display:flex;align-items:center;justify-content:flex-end}.chat-container[data-v-4464b245]{display:flex;flex-direction:column;min-height:100%;justify-content:space-between}.conversation-row[data-v-4464b245]{background-color:#6492f938;padding:10px;margin-bottom:20px;border-radius:12px;cursor:pointer}.conversationTime[data-v-4464b245]{font-size:12px;color:#a3a3a3;right:5px;position:absolute}.conversationUsername[data-v-4464b245]{display:inline;font-weight:500;padding-bottom:5px}.conversation-box[data-v-4464b245]{position:relative}
|
||||
5
home/css/chunk-vendors.0ee1ee54.css
Normal file
BIN
home/favicon.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
home/img/logo.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
home/img/logo2.9f656f3d.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
home/img/logo2.9f656f3dwerwere.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
home/img/logo2.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
5
home/index.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><title>Stella Amor | Discover Your Dream Date Today</title><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous"/><link rel="canonical" href="https://stellaamor.com"><link rel="icon" type="image/x-icon" href="favicon.ico"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:title" content="Stella Amor | Discover Your Dream Date Today"><meta property="og:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:image" content="https://api.stellaamor.com/static/logo2.png"><meta property="og:url" content="https://stellaamor.com"><meta property="og:type" content="website"><meta name="twitter:title" content="Stella Amor | Discover Your Dream Date Today"><meta name="twitter:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta name="twitter:image" content="https://api.stellaamor.com/static/logo2.png"><meta name="twitter:card" content="summary_large_image"><meta name="author" content="Stella Amor"><meta name="keywords" content="Dating"><meta name="robots" content="index,follow"><meta httpequiv="expires" content="0"><meta httpequiv="pragma" content="no-cache"><script defer="defer" src="/home/js/chunk-vendors.644485be.js"></script><script defer="defer" src="/home/js/app.eb118890.js"></script><link href="/home/css/chunk-vendors.0ee1ee54.css" rel="stylesheet"><link href="/home/css/app.5360f6f2.css" rel="stylesheet"></head><script async src="https://www.googletagmanager.com/gtag/js?id=G-486MZV8H9M"></script><script>window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-486MZV8H9M');</script><body><noscript><strong>We're sorry but app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||
5
home/index.html.bck
Normal file
@@ -0,0 +1,5 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><title>Stella Amor | Discover Your Dream Date Today</title><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous"/><link rel="canonical" href="https://stellaamor.com"><link rel="icon" type="image/x-icon" href="favicon.ico"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:title" content="Stella Amor | Discover Your Dream Date Today"><meta property="og:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:image" content="https://api.stellaamor.com/static/logo2.png"><meta property="og:url" content="https://stellaamor.com"><meta property="og:type" content="website"><meta name="twitter:title" content="Stella Amor | Discover Your Dream Date Today"><meta name="twitter:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta name="twitter:image" content="https://api.stellaamor.com/static/logo2.png"><meta name="twitter:card" content="summary_large_image"><meta name="author" content="Stella Amor"><meta name="keywords" content="Dating"><meta name="robots" content="index,follow"><meta httpequiv="expires" content="0"><meta httpequiv="pragma" content="no-cache"><script defer="defer" src="/js/chunk-vendors.644485be.js"></script><script defer="defer" src="/js/app.eb118890.js"></script><link href="/css/chunk-vendors.0ee1ee54.css" rel="stylesheet"><link href="/css/app.5360f6f2.css" rel="stylesheet"></head><script async src="https://www.googletagmanager.com/gtag/js?id=G-486MZV8H9M"></script><script>window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
//
|
||||
gtag('config', 'G-486MZV8H9M');</script><body><noscript><strong>We're sorry but app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||
2
home/js/app.eb118890.js
Normal file
1
home/js/app.eb118890.js.map
Normal file
15
home/js/chunk-vendors.644485be.js
Normal file
1
home/js/chunk-vendors.644485be.js.map
Normal file
BIN
home/rss/img/logo.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
img/logo2.9f656f3d.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
img/logo2.9f656f3dwerwere.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
img/logo2.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
4
robots.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
User-agent: *
|
||||
Disallow: /404
|
||||
Disallow: /home
|
||||
Sitemap: https://stellaamor.com/sitemap.xml
|
||||
3
rss/3rd-party/mdi/css/materialdesignicons.min.css
vendored
Normal file
BIN
rss/3rd-party/mdi/fonts/materialdesignicons-webfont.eot
vendored
Normal file
BIN
rss/3rd-party/mdi/fonts/materialdesignicons-webfont.ttf
vendored
Normal file
BIN
rss/3rd-party/mdi/fonts/materialdesignicons-webfont.woff
vendored
Normal file
BIN
rss/3rd-party/mdi/fonts/materialdesignicons-webfont.woff2
vendored
Normal file
23
rss/3rd-party/mdi/package.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "mdi-icons",
|
||||
"version": "1.0.1",
|
||||
"description": "This is a library which contains all the material design icons.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [
|
||||
"css",
|
||||
"material",
|
||||
"mdi",
|
||||
"design",
|
||||
"icons",
|
||||
"vue"
|
||||
],
|
||||
"author": "Jatin kamboj",
|
||||
"repository": "jatin-maropost/mdi-icons",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@mdi/font": "4.9.95"
|
||||
}
|
||||
}
|
||||
38
rss/3rd-party/mdi/readme.md
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
# Mdi Icons
|
||||
|
||||
[](https://www.npmjs.com/package/mdi-icons)
|
||||
```
|
||||
npm install --save @mdi-icons
|
||||
```
|
||||
|
||||
> Package is built with [@mdi/font version 4.9.95](https://github.com/Templarian/MaterialDesign-Webfont).
|
||||
|
||||
|
||||
|
||||
### Useage
|
||||
Import material design icons css in the **main.js** or root file
|
||||
```
|
||||
import "mdi-icons/css/materialdesignicons.min.css";
|
||||
```
|
||||
|
||||
|
||||
#### Folder Structure
|
||||
|
||||
```text
|
||||
/css
|
||||
materialdesignicons.min.css
|
||||
fonts/
|
||||
materialdesignicons-webfont.eot
|
||||
materialdesignicons-webfont.ttf
|
||||
materialdesignicons-webfont.woff
|
||||
materialdesignicons-webfont.woff2
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
## Related Mdi Packages
|
||||
|
||||
[NPM @MDI Organization](https://npmjs.com/org/mdi)
|
||||
|
||||
- [MaterialDesignIcons.com](https://materialdesignicons.com)
|
||||
- https://github.com/Templarian/MaterialDesign
|
||||
350
rss/css/main.css
@@ -24,12 +24,13 @@ body {
|
||||
font-family: "Nunito", sans-serif;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.3;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
a {
|
||||
all: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
@@ -295,11 +296,11 @@ h6, .h6 {
|
||||
}
|
||||
|
||||
.text-dark {
|
||||
color: #212529 !important;
|
||||
color: #242627 !important;
|
||||
}
|
||||
|
||||
.bg-dark {
|
||||
background-color: #212529 !important;
|
||||
background-color: #242627 !important;
|
||||
}
|
||||
|
||||
.text-white {
|
||||
@@ -350,6 +351,46 @@ h6, .h6 {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.text-purple {
|
||||
color: #540f89 !important;
|
||||
}
|
||||
|
||||
.bg-purple {
|
||||
background-color: #540f89 !important;
|
||||
}
|
||||
|
||||
.text-dark-red {
|
||||
color: #1e1717 !important;
|
||||
}
|
||||
|
||||
.bg-dark-red {
|
||||
background-color: #1e1717 !important;
|
||||
}
|
||||
|
||||
.text-dark-red-alt {
|
||||
color: rgba(30, 23, 23, 0.6235294118) !important;
|
||||
}
|
||||
|
||||
.bg-dark-red-alt {
|
||||
background-color: rgba(30, 23, 23, 0.6235294118) !important;
|
||||
}
|
||||
|
||||
.text-dark-purple {
|
||||
color: #0F172A !important;
|
||||
}
|
||||
|
||||
.bg-dark-purple {
|
||||
background-color: #0F172A !important;
|
||||
}
|
||||
|
||||
.text-dark-purple-alt {
|
||||
color: rgba(15, 23, 42, 0.6235294118) !important;
|
||||
}
|
||||
|
||||
.bg-dark-purple-alt {
|
||||
background-color: rgba(15, 23, 42, 0.6235294118) !important;
|
||||
}
|
||||
|
||||
/* Margin and padding utilities */
|
||||
.m-0 {
|
||||
margin: 0 !important;
|
||||
@@ -1883,7 +1924,7 @@ h6, .h6 {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
.card .card-header.theme-header {
|
||||
background-color: #212529 !important;
|
||||
background-color: #242627 !important;
|
||||
color: rgba(170, 11, 61, 0.6588235294);
|
||||
}
|
||||
.card .card-body {
|
||||
@@ -2114,16 +2155,16 @@ h6, .h6 {
|
||||
}
|
||||
|
||||
.btn-dark {
|
||||
background-color: #212529;
|
||||
background-color: #242627;
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-dark:hover {
|
||||
background-color: rgb(14.8054054054, 16.6, 18.3945945946);
|
||||
background-color: rgb(16.416, 17.328, 17.784);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-dark:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(33, 37, 41, 0.4);
|
||||
box-shadow: 0 0 0 3px rgba(36, 38, 39, 0.4);
|
||||
}
|
||||
.btn-dark:disabled {
|
||||
opacity: 0.6;
|
||||
@@ -2239,6 +2280,96 @@ h6, .h6 {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-purple {
|
||||
background-color: #540f89;
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-purple:hover {
|
||||
background-color: rgb(61.4526315789, 10.9736842105, 100.2263157895);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(84, 15, 137, 0.4);
|
||||
}
|
||||
.btn-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-dark-red {
|
||||
background-color: #1e1717;
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-dark-red:hover {
|
||||
background-color: rgb(6.9056603774, 5.2943396226, 5.2943396226);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-dark-red:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-dark-red:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-dark-red-alt {
|
||||
background-color: rgba(30, 23, 23, 0.6235294118);
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-dark-red-alt:hover {
|
||||
background-color: rgba(6.9056603774, 5.2943396226, 5.2943396226, 0.6235294118);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-dark-red-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-dark-red-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-dark-purple {
|
||||
background-color: #0F172A;
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-dark-purple:hover {
|
||||
background-color: rgb(4.2631578947, 6.5368421053, 11.9368421053);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-dark-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-dark-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-dark-purple-alt {
|
||||
background-color: rgba(15, 23, 42, 0.6235294118);
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.btn-dark-purple-alt:hover {
|
||||
background-color: rgba(4.2631578947, 6.5368421053, 11.9368421053, 0.6235294118);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-dark-purple-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-dark-purple-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Outline buttons */
|
||||
.btn-outline-primary {
|
||||
background-color: transparent;
|
||||
@@ -2413,16 +2544,16 @@ h6, .h6 {
|
||||
|
||||
.btn-outline-dark {
|
||||
background-color: transparent;
|
||||
border: 2px solid #212529;
|
||||
color: #212529;
|
||||
border: 2px solid #242627;
|
||||
color: #242627;
|
||||
}
|
||||
.btn-outline-dark:hover {
|
||||
background-color: #212529;
|
||||
background-color: #242627;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-dark:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(33, 37, 41, 0.4);
|
||||
box-shadow: 0 0 0 3px rgba(36, 38, 39, 0.4);
|
||||
}
|
||||
.btn-outline-dark:disabled {
|
||||
opacity: 0.6;
|
||||
@@ -2544,6 +2675,101 @@ h6, .h6 {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-outline-purple {
|
||||
background-color: transparent;
|
||||
border: 2px solid #540f89;
|
||||
color: #540f89;
|
||||
}
|
||||
.btn-outline-purple:hover {
|
||||
background-color: #540f89;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(84, 15, 137, 0.4);
|
||||
}
|
||||
.btn-outline-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-outline-dark-red {
|
||||
background-color: transparent;
|
||||
border: 2px solid #1e1717;
|
||||
color: #1e1717;
|
||||
}
|
||||
.btn-outline-dark-red:hover {
|
||||
background-color: #1e1717;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-dark-red:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-outline-dark-red:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-outline-dark-red-alt {
|
||||
background-color: transparent;
|
||||
border: 2px solid rgba(30, 23, 23, 0.6235294118);
|
||||
color: rgba(30, 23, 23, 0.6235294118);
|
||||
}
|
||||
.btn-outline-dark-red-alt:hover {
|
||||
background-color: rgba(30, 23, 23, 0.6235294118);
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-dark-red-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-outline-dark-red-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-outline-dark-purple {
|
||||
background-color: transparent;
|
||||
border: 2px solid #0F172A;
|
||||
color: #0F172A;
|
||||
}
|
||||
.btn-outline-dark-purple:hover {
|
||||
background-color: #0F172A;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-dark-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-outline-dark-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-outline-dark-purple-alt {
|
||||
background-color: transparent;
|
||||
border: 2px solid rgba(15, 23, 42, 0.6235294118);
|
||||
color: rgba(15, 23, 42, 0.6235294118);
|
||||
}
|
||||
.btn-outline-dark-purple-alt:hover {
|
||||
background-color: rgba(15, 23, 42, 0.6235294118);
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.btn-outline-dark-purple-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-outline-dark-purple-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Ghost buttons */
|
||||
.btn-ghost-primary {
|
||||
background-color: transparent;
|
||||
@@ -2709,15 +2935,15 @@ h6, .h6 {
|
||||
|
||||
.btn-ghost-dark {
|
||||
background-color: transparent;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-dark:hover {
|
||||
background-color: rgba(33, 37, 41, 0.1);
|
||||
background-color: rgba(36, 38, 39, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-dark:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(33, 37, 41, 0.4);
|
||||
box-shadow: 0 0 0 3px rgba(36, 38, 39, 0.4);
|
||||
}
|
||||
.btn-ghost-dark:disabled {
|
||||
opacity: 0.6;
|
||||
@@ -2833,6 +3059,96 @@ h6, .h6 {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-ghost-purple {
|
||||
background-color: transparent;
|
||||
color: #540f89;
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-purple:hover {
|
||||
background-color: rgba(84, 15, 137, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(84, 15, 137, 0.4);
|
||||
}
|
||||
.btn-ghost-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-ghost-dark-red {
|
||||
background-color: transparent;
|
||||
color: #1e1717;
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-dark-red:hover {
|
||||
background-color: rgba(30, 23, 23, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-dark-red:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-ghost-dark-red:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-ghost-dark-red-alt {
|
||||
background-color: transparent;
|
||||
color: rgba(30, 23, 23, 0.6235294118);
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-dark-red-alt:hover {
|
||||
background-color: rgba(30, 23, 23, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-dark-red-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(30, 23, 23, 0.4);
|
||||
}
|
||||
.btn-ghost-dark-red-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-ghost-dark-purple {
|
||||
background-color: transparent;
|
||||
color: #0F172A;
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-dark-purple:hover {
|
||||
background-color: rgba(15, 23, 42, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-dark-purple:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-ghost-dark-purple:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.btn-ghost-dark-purple-alt {
|
||||
background-color: transparent;
|
||||
color: rgba(15, 23, 42, 0.6235294118);
|
||||
border: none;
|
||||
}
|
||||
.btn-ghost-dark-purple-alt:hover {
|
||||
background-color: rgba(15, 23, 42, 0.1);
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-ghost-dark-purple-alt:focus-visible {
|
||||
box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.4);
|
||||
}
|
||||
.btn-ghost-dark-purple-alt:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.border-0 {
|
||||
border: 0 solid currentColor;
|
||||
}
|
||||
@@ -4733,6 +5049,10 @@ h6, .h6 {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.fs-italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.img-w-100 {
|
||||
width: 100%;
|
||||
}
|
||||
@@ -5060,7 +5380,7 @@ input[type=number]:disabled {
|
||||
.spinner {
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
border: 2px solid #212529;
|
||||
border: 2px solid #242627;
|
||||
border-left-color: transparent !important;
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
|
||||
@@ -27,6 +27,7 @@ body {
|
||||
|
||||
a{
|
||||
all: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6{
|
||||
@@ -549,6 +550,9 @@ body {
|
||||
.text-line-through { text-decoration: line-through; }
|
||||
.text-no-decoration { text-decoration: none; }
|
||||
|
||||
// Font styles
|
||||
.fs-italic{font-style: italic;}
|
||||
|
||||
// Image sizing utilities
|
||||
.img-w-100 { width: 100%; }
|
||||
.img-w-auto { width: auto; }
|
||||
|
||||
@@ -10,18 +10,21 @@
|
||||
header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0.7rem 2rem;
|
||||
padding: 1.3rem 2rem;
|
||||
background-color: #ffffff;
|
||||
align-items: center;
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.12);
|
||||
position: relative;
|
||||
z-index: 999;
|
||||
font-family: "Nunito", sans-serif;
|
||||
background-color: #fff;
|
||||
}
|
||||
header .logo {
|
||||
width: 100px;
|
||||
display: flex;
|
||||
z-index: 999;
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
}
|
||||
header .logo img {
|
||||
width: 100%;
|
||||
@@ -30,18 +33,58 @@ header .logo img {
|
||||
header nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
z-index: -1;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
header nav {
|
||||
top: -200%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
header nav.open {
|
||||
top: 99%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
transition: all 0.3s;
|
||||
background-color: #fff;
|
||||
height: auto;
|
||||
z-index: -1;
|
||||
opacity: 1;
|
||||
transition: all 0.3s;
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
header nav.open a {
|
||||
padding: 7px 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
header nav .menu-item {
|
||||
color: #000000;
|
||||
font-weight: 500;
|
||||
font-weight: 600;
|
||||
margin-right: 15px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
transition: color 0.3s;
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
}
|
||||
header nav .menu-item.active {
|
||||
font-weight: bold;
|
||||
color: #aa0b3d;
|
||||
}
|
||||
header nav .menu-item.active::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 120%;
|
||||
left: 0;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background: #aa0b3d;
|
||||
transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
header nav .menu-item::after {
|
||||
content: "";
|
||||
@@ -50,18 +93,28 @@ header nav .menu-item::after {
|
||||
left: 0;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background: #B54418;
|
||||
background: #aa0b3d;
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
header nav .menu-item:hover {
|
||||
color: #B54418;
|
||||
color: #aa0b3d;
|
||||
cursor: pointer;
|
||||
}
|
||||
header nav .menu-item:hover::after {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
header .mobile-toggler {
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
}
|
||||
@media (min-width: 769px) {
|
||||
header .mobile-toggler {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.home-banner {
|
||||
height: calc(100vh - 55px);
|
||||
@@ -71,6 +124,9 @@ header nav .menu-item:hover::after {
|
||||
opacity: 0;
|
||||
animation: slideUp 1s ease-in-out forwards;
|
||||
}
|
||||
.home-banner.no-height {
|
||||
height: auto !important;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.home-banner {
|
||||
height: 100vh;
|
||||
@@ -171,6 +227,7 @@ header nav .menu-item:hover::after {
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
opacity: 0.1;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.home-banner .home-banner-inner .image-wrapper img {
|
||||
@@ -191,6 +248,12 @@ header nav .menu-item:hover::after {
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
}
|
||||
.display-banner.kissing-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url("/rss/img/couple-kissing.jpg");
|
||||
padding: 180px 0px;
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
}
|
||||
.display-banner.moving-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url("/rss/img/couple.jpg");
|
||||
background-position: center 40%;
|
||||
@@ -199,7 +262,7 @@ header nav .menu-item:hover::after {
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #212529;
|
||||
background-color: #242627;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
padding: 25px 0px;
|
||||
@@ -216,7 +279,7 @@ footer ul {
|
||||
|
||||
.features-section h2 {
|
||||
font-size: 1.8rem;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
}
|
||||
.features-section .theme-card {
|
||||
border-radius: 0.25rem;
|
||||
@@ -288,7 +351,7 @@ footer ul {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
}
|
||||
|
||||
.filter-text {
|
||||
@@ -369,9 +432,9 @@ section .bolder {
|
||||
}
|
||||
|
||||
.section-animation {
|
||||
opacity: 0; /* Start hidden */
|
||||
transform: translateY(50px); /* Slide up from 50px below */
|
||||
transition: opacity 0.8s ease-out, transform 0.8s ease-out; /* Smooth transition */
|
||||
opacity: 0;
|
||||
transform: translateY(50px);
|
||||
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
|
||||
}
|
||||
|
||||
.section-animation.visible {
|
||||
@@ -379,7 +442,179 @@ section .bolder {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* Accessibility for reduced motion */
|
||||
.user-container {
|
||||
width: 100%;
|
||||
height: calc(100vh - 110px);
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.user-container {
|
||||
height: auto;
|
||||
padding: 20px 0px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.user-container.alt .user-card {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
}
|
||||
.user-container .user-card {
|
||||
border-radius: 12px;
|
||||
background-color: rgba(255, 255, 255, 0.9058823529);
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.user-container .user-card {
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
.user-container .user-card .form {
|
||||
background-color: #FFF;
|
||||
padding: 20px 0px;
|
||||
flex: 40%;
|
||||
max-width: 40%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.18);
|
||||
border-radius: 12px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.user-container .user-card .form {
|
||||
flex: 100%;
|
||||
max-width: 100%;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
||||
}
|
||||
}
|
||||
.user-container .user-card .form .user-form {
|
||||
padding: 10px 15px;
|
||||
width: 100%;
|
||||
}
|
||||
.user-container .user-card .text-col {
|
||||
flex: 60%;
|
||||
max-width: 60%;
|
||||
padding: 30px 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.user-container .user-card .text-col {
|
||||
flex: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
.user-container .user-card .text-col .logo {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
.user-container .user-card .text-col .logo img {
|
||||
width: 180px;
|
||||
}
|
||||
.user-container .user-card .text-col .text {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* PROMO BLOCKS */
|
||||
.promo-cover {
|
||||
height: calc(100vh - 60px);
|
||||
width: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.promo-cover.fetish-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url("/rss/img/promo-images/bdsm-background.jpeg");
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
.promo-cover.sugar-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url("/rss/img/promo-images/sugar-couple.jpeg");
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
.promo-cover.foot-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url("/rss/img/promo-images/foot1.jpg");
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
.promo-cover.app-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url("/rss/img/promo-images/couple1.jpg");
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
.promo-cover .title-bar {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
border-radius: 12px;
|
||||
position: relative;
|
||||
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
@media (min-width: 769px) {
|
||||
.promo-cover .title-bar {
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
.promo-cover .title-bar h1 {
|
||||
opacity: 1;
|
||||
font-weight: 700;
|
||||
font-size: 2.2rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.promo-cover .title-bar h1::after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 80%;
|
||||
height: 1px;
|
||||
background: #fff;
|
||||
margin: 2px auto 20px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.promo-cover .title-bar p {
|
||||
opacity: 1;
|
||||
font-weight: 500;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
.promo-cover .title-bar .cta-btn {
|
||||
padding: 10px 20px;
|
||||
background-color: #0F172A;
|
||||
}
|
||||
.promo-cover .title-bar .cta-btn:hover {
|
||||
background-color: rgb(28.4210526316, 43.5789473684, 79.5789473684);
|
||||
}
|
||||
|
||||
.content-section {
|
||||
padding: 40px 0px;
|
||||
color: #e2e8f0 !important;
|
||||
}
|
||||
.content-section h2 {
|
||||
font-weight: 700;
|
||||
font-size: 2rem;
|
||||
}
|
||||
.content-section p {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
.content-section ul {
|
||||
padding: 0px 40px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.promo-feature-icon {
|
||||
font-size: 2rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.section-animation {
|
||||
opacity: 1;
|
||||
|
||||
@@ -3,18 +3,25 @@
|
||||
header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0.7rem 2rem;
|
||||
padding: 1.3rem 2rem;
|
||||
background-color: #ffffff;
|
||||
align-items: center;
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.12);
|
||||
position: relative;
|
||||
z-index: 999;
|
||||
font-family: "Nunito", sans-serif;
|
||||
background-color: #fff;
|
||||
|
||||
@media(max-width:768px) {
|
||||
// height: 48px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 100px;
|
||||
display: flex;
|
||||
z-index: 999;
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
@@ -25,19 +32,61 @@ header {
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
z-index: -1;
|
||||
|
||||
@media(max-width:768px) {
|
||||
top: -200%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
transition: all 0.3s;
|
||||
|
||||
&.open {
|
||||
top: 99%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
transition: all 0.3s;
|
||||
// padding: 5px 10px;
|
||||
background-color: #fff;
|
||||
height: auto;
|
||||
z-index: -1;
|
||||
opacity: 1;
|
||||
transition: all 0.3s;
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.12);
|
||||
|
||||
a {
|
||||
padding: 7px 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
color: #000000;
|
||||
font-weight: 500;
|
||||
font-weight: 600;
|
||||
margin-right: 15px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
transition: color 0.3s;
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
|
||||
&.active {
|
||||
font-weight: bold;
|
||||
// color: #your-brand-color;
|
||||
color: #{map-get($colors, primary)};
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 120%;
|
||||
left: 0;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background: #{map-get($colors, primary)};
|
||||
transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
}
|
||||
|
||||
&::after {
|
||||
@@ -47,14 +96,14 @@ header {
|
||||
left: 0;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background: #B54418;
|
||||
background: #{map-get($colors, primary)};
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #B54418;
|
||||
color: #{map-get($colors, primary)};
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -63,6 +112,16 @@ header {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-toggler {
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
|
||||
@media(min-width: 769px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.home-banner {
|
||||
@@ -74,7 +133,9 @@ header {
|
||||
animation: slideUp 1s ease-in-out forwards;
|
||||
// animation-delay: 0.2s;
|
||||
|
||||
|
||||
&.no-height {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
@media(max-width:768px) {
|
||||
height: 100vh;
|
||||
@@ -147,14 +208,17 @@ header {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
.cta-btn {
|
||||
padding: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.login-text {
|
||||
display: inline-flex;
|
||||
gap: 5px;
|
||||
font-weight: 400;
|
||||
|
||||
.login-link {
|
||||
font-weight: 500;
|
||||
text-decoration: underline;
|
||||
@@ -178,6 +242,7 @@ header {
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
opacity: 0.1;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
img {
|
||||
@@ -205,6 +270,14 @@ header {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
&.kissing-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)),
|
||||
url('/rss/img/couple-kissing.jpg');
|
||||
padding: 180px 0px;
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
&.moving-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)),
|
||||
url('/rss/img/couple.jpg');
|
||||
@@ -260,9 +333,11 @@ footer {
|
||||
&.object-left {
|
||||
object-position: left center;
|
||||
}
|
||||
|
||||
&.object-center {
|
||||
object-position: center center;
|
||||
}
|
||||
|
||||
&.object-bottom {
|
||||
object-position: bottom center;
|
||||
}
|
||||
@@ -330,9 +405,11 @@ footer {
|
||||
.filter-card {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.filter-icon {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.filter-title {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
@@ -396,6 +473,7 @@ section{
|
||||
font-size: 1.8rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 500;
|
||||
@@ -413,9 +491,9 @@ section{
|
||||
}
|
||||
|
||||
.section-animation {
|
||||
opacity: 0; /* Start hidden */
|
||||
transform: translateY(50px); /* Slide up from 50px below */
|
||||
transition: opacity 0.8s ease-out, transform 0.8s ease-out; /* Smooth transition */
|
||||
opacity: 0;
|
||||
transform: translateY(50px);
|
||||
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
|
||||
}
|
||||
|
||||
.section-animation.visible {
|
||||
@@ -423,7 +501,206 @@ section{
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* Accessibility for reduced motion */
|
||||
.user-container {
|
||||
width: 100%;
|
||||
height: calc(100vh - 110px);
|
||||
// background-image: url('/rss/img/happy-kissing.jpg');
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
height: auto;
|
||||
padding: 20px 0px;
|
||||
}
|
||||
|
||||
&.alt {
|
||||
// background-image: url('/rss/img/happy-kissing-2.jpg') !important;
|
||||
|
||||
.user-card {
|
||||
|
||||
@media(max-width: 768px) {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.user-card {
|
||||
border-radius: 12px;
|
||||
background-color: #ffffffe7;
|
||||
// box-shadow: #{map-get($shadows, 3)};
|
||||
display: flex;
|
||||
// min-height: 60vh;
|
||||
// height: 60vh;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
// overflow: hidden;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.form {
|
||||
background-color: #FFF;
|
||||
padding: 20px 0px;
|
||||
// height: 100%;
|
||||
flex: 40%;
|
||||
max-width: 40%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-shadow: #{map-get($shadows, 3)};
|
||||
border-radius: 12px;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
flex: 100%;
|
||||
max-width: 100%;
|
||||
border-radius: 12px;
|
||||
box-shadow: #{map-get($shadows, 2)};
|
||||
}
|
||||
|
||||
.user-form {
|
||||
padding: 10px 15px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.text-col {
|
||||
flex: 60%;
|
||||
max-width: 60%;
|
||||
padding: 30px 20px;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
flex: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
|
||||
img {
|
||||
width: 180px;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* PROMO BLOCKS */
|
||||
.promo-cover {
|
||||
height: calc(100vh - 60px);
|
||||
width: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
&.fetish-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url('/rss/img/promo-images/bdsm-background.jpeg');
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
|
||||
&.sugar-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url('/rss/img/promo-images/sugar-couple.jpeg');
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
|
||||
&.foot-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url('/rss/img/promo-images/foot1.jpg');
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
|
||||
&.app-cover {
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.7)), url('/rss/img/promo-images/couple1.jpg');
|
||||
background-position: 50% 35%;
|
||||
}
|
||||
|
||||
.title-bar {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
border-radius: 12px;
|
||||
position: relative;
|
||||
// background-color: #{map-get($colors, dark-purple-alt)};
|
||||
box-shadow: #{map-get($shadows, 5)};
|
||||
|
||||
@media(min-width:769px) {
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
h1 {
|
||||
opacity: 1;
|
||||
font-weight: 700;
|
||||
font-size: 2.2rem;
|
||||
display: inline-block; // necessary to allow width-based pseudo-element
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 80%;
|
||||
height: 1px;
|
||||
background: #fff;
|
||||
margin: 2px auto 20px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
opacity: 1;
|
||||
font-weight: 500;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.cta-btn{
|
||||
padding: 10px 20px;
|
||||
background-color: #{map-get($colors, dark-purple)};
|
||||
|
||||
&:hover{
|
||||
background-color: lighten(map-get($colors, dark-purple), 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content-section {
|
||||
padding: 40px 0px;
|
||||
color: #e2e8f0 !important;
|
||||
|
||||
h2{
|
||||
font-weight: 700;
|
||||
font-size:2rem;
|
||||
}
|
||||
p{
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 0px 40px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.promo-feature-icon{
|
||||
font-size: 2rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: #{map-get($colors, white)};
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.section-animation {
|
||||
opacity: 1;
|
||||
@@ -437,6 +714,7 @@ section{
|
||||
transform: translateY(50px);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["variables.scss"],"names":[],"mappings":"AAAA,gBAAA;AAIA,gBAAA;AAmBA,kBAAA;AAGA,kBAAA;AAoBA,kBAAA;AAGA,2BAAA;AAoBA,mBAAA;AAyBA,+BAAA;AAQA,eAAA","file":"variables.css"}
|
||||
{"version":3,"sources":["variables.scss"],"names":[],"mappings":"AAAA,gBAAA;AAIA,gBAAA;AAmBA,kBAAA;AAGA,kBAAA;AA2BA,kBAAA;AAGA,2BAAA;AAoBA,mBAAA;AAyBA,+BAAA;AAQA,eAAA","file":"variables.css"}
|
||||
@@ -35,13 +35,20 @@ $colors: (
|
||||
danger: #dc3545,
|
||||
info: #0dcaf0,
|
||||
light: #e5e5e5,
|
||||
dark: #212529,
|
||||
dark: #242627,
|
||||
white: #ffffff,
|
||||
black: #000000,
|
||||
muted: #C7C7C7,
|
||||
accent-white: #f7f7f7,
|
||||
accent: #08bbbb,
|
||||
transparent: transparent
|
||||
transparent: transparent,
|
||||
|
||||
// Other colors
|
||||
purple:#540f89,
|
||||
dark-red: #1e1717,
|
||||
dark-red-alt: #1e17179f,
|
||||
dark-purple: #0F172A,
|
||||
dark-purple-alt: #0F172A9f,
|
||||
);
|
||||
|
||||
/* Spacing scale */
|
||||
|
||||
BIN
rss/img/app-code.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
rss/img/app-date.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
rss/img/app-search.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
rss/img/church.jpg
Normal file
|
After Width: | Height: | Size: 203 KiB |
BIN
rss/img/couple-elder.jpg
Normal file
|
After Width: | Height: | Size: 464 KiB |
BIN
rss/img/couple-ice.jpg
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
rss/img/couple-kissing.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
rss/img/favicon/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
rss/img/favicon/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
rss/img/favicon/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
3
rss/img/favicon/favicon.svg
Normal file
|
After Width: | Height: | Size: 49 KiB |
21
rss/img/favicon/site.webmanifest
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "MyWebSite",
|
||||
"short_name": "MySite",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/rss/favicon/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/rss/favicon/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
BIN
rss/img/favicon/web-app-manifest-192x192.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
rss/img/favicon/web-app-manifest-512x512.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
BIN
rss/img/happy-kissing-2.jpg
Normal file
|
After Width: | Height: | Size: 253 KiB |
BIN
rss/img/happy-kissing.jpg
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
rss/img/logo2.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
rss/img/man-browsing.jpg
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
rss/img/people-couple.jpg
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
rss/img/promo-images/bd.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
rss/img/promo-images/bdsm-background.jpeg
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
rss/img/promo-images/couple.jpeg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
rss/img/promo-images/couple1.jpg
Normal file
|
After Width: | Height: | Size: 296 KiB |
BIN
rss/img/promo-images/couple2.jpg
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
rss/img/promo-images/couple3.jpg
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
rss/img/promo-images/cuffs.jpg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
rss/img/promo-images/foot1.jpg
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
rss/img/promo-images/foot2.jpg
Normal file
|
After Width: | Height: | Size: 296 KiB |
BIN
rss/img/promo-images/foot3.jpg
Normal file
|
After Width: | Height: | Size: 289 KiB |
BIN
rss/img/promo-images/shibari.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
rss/img/promo-images/sugar-couple.jpeg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
rss/img/promo-images/sugardate1.jpeg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
rss/img/promo-images/sugardate2.jpeg
Normal file
|
After Width: | Height: | Size: 132 KiB |
BIN
rss/img/stella.png
Normal file
|
After Width: | Height: | Size: 673 KiB |
BIN
rss/img/sweden.jpg
Normal file
|
After Width: | Height: | Size: 358 KiB |
BIN
rss/img/yacht2.jpg
Normal file
|
After Width: | Height: | Size: 494 KiB |
@@ -0,0 +1,81 @@
|
||||
document.addEventListener('DOMContentLoaded', async (v) =>{
|
||||
await isAuth();
|
||||
const loginForm = document.getElementById('loginForm');
|
||||
|
||||
loginForm.addEventListener('submit', async (e) =>{
|
||||
e.preventDefault();
|
||||
await login();
|
||||
})
|
||||
})
|
||||
|
||||
// Async login function in vanilla JS
|
||||
async function login() {
|
||||
// Set login running state
|
||||
let loginRunning = true;
|
||||
let loginError = false;
|
||||
document.getElementById('loginError').innerText = '';
|
||||
document.getElementById('loginError').classList.add('d-none');
|
||||
|
||||
|
||||
// Get form data
|
||||
const username = document.getElementById('username').value;
|
||||
const password = document.getElementById('password').value;
|
||||
|
||||
const postFields = {
|
||||
userData: {
|
||||
username: username,
|
||||
password: password
|
||||
},
|
||||
action: 'login'
|
||||
};
|
||||
|
||||
try {
|
||||
// Send request
|
||||
const response = await fetch('https://api.stellaamor.com/users.php', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(postFields)
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.status === 'fail') {
|
||||
loginError = true;
|
||||
document.getElementById('loginError').innerText = data.message;
|
||||
document.getElementById('loginError').classList.remove('d-none');
|
||||
loginRunning = false;
|
||||
} else {
|
||||
loginRunning = false;
|
||||
setTimeout(() => {
|
||||
window.location.href = '/home';
|
||||
|
||||
document.getElementById('username').value = '';
|
||||
document.getElementById('password').value = '';
|
||||
document.getElementById('loginError').innerText = '';
|
||||
loginRunning = false;
|
||||
}, 1500);
|
||||
}
|
||||
} catch (error) {
|
||||
loginError = true;
|
||||
loginRunning = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function isAuth() {
|
||||
try {
|
||||
const response = await fetch('https://api.stellaamor.com/users.php?isAuth=true', {
|
||||
method: 'GET',
|
||||
credentials: 'include'
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
if (data.status === true) {
|
||||
window.location.href = '/home';
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,3 +74,29 @@ async function removeAlert(){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () =>{
|
||||
document.getElementById('menu-toggler').addEventListener('pointerdown', () =>{
|
||||
document.getElementById('mainMenu').classList.toggle('open');
|
||||
})
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: 0.05,
|
||||
rootMargin: '0px 0px -50px 0px'
|
||||
}
|
||||
);
|
||||
|
||||
sections.forEach(section => {
|
||||
section.classList.add('section-animation');
|
||||
observer.observe(section);
|
||||
});
|
||||
});
|
||||
@@ -1,21 +0,0 @@
|
||||
document.addEventListener('DOMContentLoaded', async () =>{
|
||||
await getParams();
|
||||
})
|
||||
|
||||
async function getParams() {
|
||||
const queryString = window.location.search;
|
||||
const params = new URLSearchParams(queryString);
|
||||
const paramsObject = {};
|
||||
for (const key of params.keys()) {
|
||||
if (key.endsWith('[]')) {
|
||||
|
||||
const cleanKey = key.replace('[]', '');
|
||||
paramsObject[cleanKey] = params.getAll(key);
|
||||
} else {
|
||||
|
||||
paramsObject[key] = params.get(key);
|
||||
}
|
||||
}
|
||||
|
||||
return paramsObject;
|
||||
}
|
||||
100
rss/js/register.js
Normal file
@@ -0,0 +1,100 @@
|
||||
document.addEventListener('DOMContentLoaded', async (v) => {
|
||||
const countries = await fetchCountries();
|
||||
|
||||
// Handlers
|
||||
const countrySelector = document.getElementById('userCountry');
|
||||
for(country of countries){
|
||||
countrySelector.innerHTML += `<option value="${country.text}">${country.text}</option>`;
|
||||
}
|
||||
|
||||
const signupForm = document.getElementById('signupForm');
|
||||
signupForm.addEventListener('submit', (e) => {
|
||||
e.preventDefault();
|
||||
document.getElementById('errors').innerText = '';
|
||||
document.getElementById('errors').classList.add('d-none');
|
||||
|
||||
// Extract form data
|
||||
const username = signupForm.querySelector('#username').value;
|
||||
const dob = signupForm.querySelector('#u_dob').value;
|
||||
const country = signupForm.querySelector('#userCountry').value;
|
||||
const gender = signupForm.querySelector('#gender').value;
|
||||
const email = signupForm.querySelector('#email').value;
|
||||
const password = signupForm.querySelector('#password').value;
|
||||
const password2 = signupForm.querySelector('#password2').value;
|
||||
const tosInput = signupForm.querySelector('#tos');
|
||||
const tos = tosInput.checked;
|
||||
|
||||
// Remove errors
|
||||
document.getElementById('errors').innerText = null;
|
||||
|
||||
|
||||
let userData = {
|
||||
username: username,
|
||||
country: country,
|
||||
gender: gender,
|
||||
email: email,
|
||||
dob: dob,
|
||||
password: password,
|
||||
password2: password2,
|
||||
acceptTerms: tos
|
||||
};
|
||||
|
||||
let action = 'signup';
|
||||
|
||||
let formData = JSON.stringify({
|
||||
action: action,
|
||||
userData: userData
|
||||
});
|
||||
|
||||
// Send request
|
||||
fetch('https://api.stellaamor.com/users.php', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: formData
|
||||
})
|
||||
.then(response => {
|
||||
if(response && response.length){
|
||||
return response.json();
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.then(msg => {
|
||||
console.log(msg);
|
||||
// document.getElementById('spinner').classList.remove('show');
|
||||
if (msg && msg.status === 'fail') {
|
||||
document.getElementById('errors').innerText = msg.message;
|
||||
document.getElementById('errors').classList.remove('d-none');
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
window.location.href = '/login/';
|
||||
}, 2000);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error during signup:', error);
|
||||
document.getElementById('errors').innerText = 'An error occurred. Please try again later.';
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Call init functions
|
||||
});
|
||||
|
||||
async function fetchCountries() {
|
||||
try {
|
||||
const response = await fetch('https://restcountries.com/v3.1/all?fields=name');
|
||||
const data = await response.json();
|
||||
|
||||
const countries = data.map(country => ({
|
||||
text: country.name.common,
|
||||
val: country.cca2,
|
||||
})).sort((a, b) => a.text.localeCompare(b.text));
|
||||
|
||||
return countries;
|
||||
} catch (error) {
|
||||
console.error('Error fetching countries:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"title": "Not found",
|
||||
"long_desc": "Page or property was not found",
|
||||
"short_desc": "Page or property was not found",
|
||||
"title": "404 - Page Not Found",
|
||||
"long_desc": "Oops! The page you’re looking for isn’t here. Join Stella Amor’s free HBTQ-friendly dating platform with advanced filters for kinks, wealth, and lifestyle instead!",
|
||||
"short_desc": "404 error. Try our free HBTQ-friendly dating filters!",
|
||||
"template": "404",
|
||||
"restricted": false,
|
||||
"redirect_login": false
|
||||
"redirect_login": false,
|
||||
"robots": "noindex"
|
||||
}
|
||||
9
rss/json/pages/about-us.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "About Our Dating Mission",
|
||||
"long_desc": "Learn about Stella Amor’s HBTQ-friendly dating platform. Free advanced filters for kinks, wealth, and lifestyle help you find love. Contact support@stellaamor.com!",
|
||||
"short_desc": "About Stella Amor’s free HBTQ-friendly dating mission.",
|
||||
"template": "about-us",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
@@ -1,8 +1,16 @@
|
||||
{
|
||||
"title": "Create account",
|
||||
"long_desc": "Testing the description!",
|
||||
"short_desc": "Test desc",
|
||||
"title": "Join For Free Today",
|
||||
"long_desc": "Create your free Stella Amor account today! Join our HBTQ-friendly platform with advanced filters for kinks, wealth, and lifestyle to find your perfect match.",
|
||||
"short_desc": "Create a free HBTQ-friendly dating account.",
|
||||
"template": "create-account",
|
||||
"restricted": false,
|
||||
"redirect_login": true
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "Online Dating Service",
|
||||
"rich_offers": {
|
||||
"name": "Free Membership",
|
||||
"price": "0",
|
||||
"description": "Create your profile and access all compatibility filters for free"
|
||||
}
|
||||
}
|
||||
9
rss/json/pages/faq.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "Dating FAQs",
|
||||
"long_desc": "Find answers to questions about Stella Amor’s free HBTQ-friendly dating platform, advanced filters for kinks and lifestyle, and privacy.",
|
||||
"short_desc": "FAQs for free HBTQ-friendly dating.",
|
||||
"template": "faq",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
26
rss/json/pages/fetish-dating.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"title": "Free BDSM & Kink Dating with Detailed Filters",
|
||||
"long_desc": "Join for free and use detailed BDSM and kink filters to find compatible partners. Match on bondage, dominance, submission, pet play, role-play and 50+ preferences.",
|
||||
"short_desc": "Free signup. Detailed filters for BDSM, fetish and kink compatibility including dominance/submission, bondage, pet play and 50+ more.",
|
||||
|
||||
"template": "dating/fetish-dating",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "BDSM and Kink Dating",
|
||||
"rich_faq": [
|
||||
{
|
||||
"question": "Is signup and using the BDSM filters free?",
|
||||
"answer": "Yes. Creating your profile and using all kink and fetish filters is completely free."
|
||||
},
|
||||
{
|
||||
"question": "How private are my kink preferences?",
|
||||
"answer": "You control visibility. Set any preference to private until you have a mutual match."
|
||||
},
|
||||
{
|
||||
"question": "What specific BDSM and fetish filters are available?",
|
||||
"answer": "Bondage, dominance/submission roles, impact play, pet play, leather/latex, 24/7 dynamics, safe words, aftercare, role-play and 50+ additional preferences."
|
||||
}
|
||||
]
|
||||
}
|
||||
9
rss/json/pages/filters.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "Advanced Dating Filters",
|
||||
"long_desc": "Explore Stella Amor’s free HBTQ-friendly dating filters for kinks, wealth, lifestyle, and faith. Find your perfect match with precision and ease!",
|
||||
"short_desc": "Free HBTQ-friendly filters for kinks, wealth, and lifestyle.",
|
||||
"template": "filters",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
31
rss/json/pages/foot-fetish-dating.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "Free Foot Fetish Dating with Detailed Filters",
|
||||
"long_desc": "Join for free and connect with foot lovers worldwide. Use precise filters for foot size, shoe size, pedicure style, worship preferences, and 30+ foot-related interests.",
|
||||
"short_desc": "Free foot fetish dating with detailed foot size, style and worship filters.",
|
||||
|
||||
"template": "dating/foot-fetish-dating",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "Foot Fetish Dating",
|
||||
"rich_offers": {
|
||||
"name": "Free Membership",
|
||||
"price": "0",
|
||||
"description": "Create your profile and access all foot fetish filters for free"
|
||||
},
|
||||
"rich_faq": [
|
||||
{
|
||||
"question": "Is foot fetish dating on Stella Amor free?",
|
||||
"answer": "Yes. Creating your profile and using all foot-related filters is completely free."
|
||||
},
|
||||
{
|
||||
"question": "How private are my foot preferences?",
|
||||
"answer": "You control visibility. Keep foot pics and worship preferences private until mutual match."
|
||||
},
|
||||
{
|
||||
"question": "What foot fetish filters are available?",
|
||||
"answer": "Foot size, shoe size, high arches, pedicure color, nylons vs bare, worship style (massage, kissing, licking), trampling, tickling, and 30+ more."
|
||||
}
|
||||
]
|
||||
}
|
||||
31
rss/json/pages/free-dating-app.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "Top Free Dating App",
|
||||
"long_desc": "Stella Amor is a completely free dating app with advanced filters for lifestyle, kinks, wealth, faith, height, and more. No hidden fees, full access from day one.",
|
||||
"short_desc": "100% free dating app with powerful filters. No credit card required.",
|
||||
|
||||
"template": "dating/free-dating-app",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "Free Dating App",
|
||||
"rich_offers": {
|
||||
"name": "Completely Free Membership",
|
||||
"price": "0",
|
||||
"description": "Unlimited messaging and all advanced filters"
|
||||
},
|
||||
"rich_faq": [
|
||||
{
|
||||
"question": "Is Stella Amor really 100% free?",
|
||||
"answer": "Yes. Registration, messaging, and all filters are completely free with no premium upgrades required."
|
||||
},
|
||||
{
|
||||
"question": "Are there any hidden fees or paywalls?",
|
||||
"answer": "No. You get full access to every feature from the moment you sign up. No credit card needed."
|
||||
},
|
||||
{
|
||||
"question": "Do I need to pay to message or see matches?",
|
||||
"answer": "Never. Unlimited messaging and profile viewing are always free."
|
||||
}
|
||||
]
|
||||
}
|
||||
9
rss/json/pages/how-it-works.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "How It Works: Free Dating Guide",
|
||||
"long_desc": "Learn how Stella Amor’s HBTQ-friendly platform works. Use free advanced filters for kinks, wealth, and lifestyle to find your perfect match in three easy steps!",
|
||||
"short_desc": "Guide to free HBTQ-friendly dating with advanced filters.",
|
||||
"template": "how-it-works",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
@@ -1,8 +1,16 @@
|
||||
{
|
||||
"title": "Home",
|
||||
"long_desc": "Testing the description!",
|
||||
"short_desc": "Test desc",
|
||||
"title": "Free Dating with Advanced Filters",
|
||||
"long_desc": "Join Stella Amor for free online dating with advanced filters for kinks, wealth, lifestyle, and faith. Our HBTQ-friendly platform helps you find your perfect match effortlessly!",
|
||||
"short_desc": "Free HBTQ-friendly dating with filters for kinks and lifestyle.",
|
||||
"template": "index",
|
||||
"restricted": false,
|
||||
"redirect_login": false
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "Online Dating Service",
|
||||
"rich_offers": {
|
||||
"name": "Free Membership",
|
||||
"price": "0",
|
||||
"description": "Create your profile and access all compatibility filters for free"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"title": "Login",
|
||||
"long_desc": "Testing the description!",
|
||||
"short_desc": "Test desc",
|
||||
"title": "Sign In to Free Dating",
|
||||
"long_desc": "Log in to Stella Amor’s free HBTQ-friendly dating platform. Access advanced filters for kinks, wealth, and lifestyle to find your perfect match today!",
|
||||
"short_desc": "Sign in to free HBTQ-friendly dating with advanced filters.",
|
||||
"template": "login",
|
||||
"restricted": false,
|
||||
"redirect_login": true
|
||||
"redirect_login": true,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
9
rss/json/pages/register.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "Join Free Dating",
|
||||
"long_desc": "Sign up for Stella Amor’s free HBTQ-friendly dating platform. Use advanced filters for kinks, wealth, and lifestyle to start finding your perfect match today!",
|
||||
"short_desc": "Join free HBTQ-friendly dating with advanced filters.",
|
||||
"template": "register",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
9
rss/json/pages/success-stories.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "Love Stories: Find Your Match",
|
||||
"long_desc": "Discover Stella Amor’s success stories from HBTQ-friendly dating. Users found love with free filters for kinks, wealth, and lifestyle. Join free today!",
|
||||
"short_desc": "HBTQ-friendly love stories with free dating filters.",
|
||||
"template": "success-stories",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow"
|
||||
}
|
||||
31
rss/json/pages/sugar-dating.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "Free Sugar Daddy & Sugar Baby Dating with Financial Filters",
|
||||
"long_desc": "Join for free and meet generous sugar daddies or attractive sugar babies. Use detailed filters for allowance expectations, net worth, lifestyle, and relationship style.",
|
||||
"short_desc": "Free sugar daddy and sugar baby dating with precise financial and lifestyle filters.",
|
||||
|
||||
"template": "dating/sugar-dating",
|
||||
"restricted": false,
|
||||
"redirect_login": false,
|
||||
"robots": "index, follow",
|
||||
|
||||
"rich_service_type": "Sugar Daddy & Sugar Baby Dating",
|
||||
"rich_offers": {
|
||||
"name": "Free Membership",
|
||||
"price": "0",
|
||||
"description": "Create your profile and access all financial & lifestyle filters for free"
|
||||
},
|
||||
"rich_faq": [
|
||||
{
|
||||
"question": "Is sugar dating on Stella Amor free to join?",
|
||||
"answer": "Yes. Creating your profile and using all sugar daddy & sugar baby filters is completely free."
|
||||
},
|
||||
{
|
||||
"question": "How private are my financial preferences and allowance expectations?",
|
||||
"answer": "You control visibility. Set income, net worth, and allowance details to private until mutual match."
|
||||
},
|
||||
{
|
||||
"question": "What sugar dating filters are available?",
|
||||
"answer": "Monthly allowance range, net worth, income level, lifestyle budget, relationship type (mentor, travel companion, traditional, platonic, etc.), and 30+ more."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -14,15 +14,20 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/js/' . $pageInfo['template'] .
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<h4>Links</h4>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<?php foreach ($links as $label => $url): ?>
|
||||
<li class="mb-2"><a href="<?php echo $url; ?>" class="menu-item<?php echo $label === $currentPage ? ' active" aria-current="page' : ''; ?>"><?php echo htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); ?></a></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<h4>Contact</h4>
|
||||
<ul>
|
||||
<li>Info</li>
|
||||
<li><a href="mailto:info@stellaamor.com">info@stellaamor.com</a></li>
|
||||
<li><a href="mailto:support@stellaamor.com">support@stellaamor.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,12 +1,34 @@
|
||||
<?php
|
||||
$menu = array(
|
||||
$page = isset($_GET['page']) ? basename($_GET['page']) : 'index';
|
||||
$jsonFile = $_SERVER['DOCUMENT_ROOT'] . "/rss/json/pages/{$page}.json";
|
||||
$pageData = file_exists($jsonFile) ? json_decode(file_get_contents($jsonFile), true) : [
|
||||
'title' => 'Stella Amor',
|
||||
'long_desc' => 'Free online dating with advanced filters for lifestyle, finance, kinks, and more.',
|
||||
'robots' => 'index, follow'
|
||||
];
|
||||
|
||||
// Set default values
|
||||
$siteUrl = 'https://stellaamor.com';
|
||||
$pageUrl = $page === 'index' ? $siteUrl . '/' : $siteUrl . '/' . $page . '/';
|
||||
$title = $pageData['title'] ?? 'Stella Amor';
|
||||
$description = $pageData['long_desc'] ?? 'Free online dating with advanced filters for lifestyle, finance, kinks, and more.';
|
||||
$keywords = 'free dating, online dating, match filters, financial compatibility, kink-friendly dating, lifestyle matching';
|
||||
$robots = $pageData['robots'] ?? 'index, follow';
|
||||
$menu = [
|
||||
'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');
|
||||
'Create account' => '/register/',
|
||||
'Login' => '/login/',
|
||||
'About us' => '/about-us/'
|
||||
];
|
||||
|
||||
$links = [
|
||||
'Our Filters' => '/filters/',
|
||||
'Success Stories' => '/success-stories/',
|
||||
'How It Works' => '/how-it-works/',
|
||||
'FAQ' => '/faq/',
|
||||
'About us' => '/about-us/'
|
||||
];
|
||||
$currentPage = $page === 'index' ? 'Home' : ucwords(str_replace('-', ' ', $page));
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
@@ -14,35 +36,33 @@ $pageDescription = htmlspecialchars($pageDescription ?? 'Free dating! Ultimate f
|
||||
<!-- Defaults -->
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo $pageTitle; ?></title>
|
||||
<meta name="description" content="<?php echo $pageDescription; ?>">
|
||||
<title>Stella Amor | <?php echo htmlspecialchars($pageData['title'], ENT_QUOTES, 'UTF-8'); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($description, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<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') : ''; ?>">
|
||||
|
||||
<!-- Robots -->
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($keywords, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<meta name="robots" content="<?php echo htmlspecialchars($robots, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($pageUrl, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="<?php echo $pageTitle; ?>">
|
||||
<meta property="og:description" content="<?php echo $pageDescription; ?>">
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($description, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<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">
|
||||
<meta property="og:url" content="<?php echo htmlspecialchars($pageUrl, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<meta property="og:image" content="<?php echo $siteUrl; ?>/rss/img/stella.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">
|
||||
<meta name="twitter:title" content="<?php echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<meta name="twitter:description" content="<?php echo htmlspecialchars($description, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<meta name="twitter:image" content="<?php echo $siteUrl; ?>/rss/img/stella.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">
|
||||
<link rel="icon" href="/rss/img/favicon/favicon.ico" type="image/x-icon">
|
||||
<link rel="apple-touch-icon" href="/rss/img/favicon/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/3rd-party/mdi/css/materialdesignicons.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/rss/css/main.css">
|
||||
<link rel="stylesheet" href="/rss/css/theme.css" media="print" onload="this.media='all'">
|
||||
|
||||
@@ -50,33 +70,83 @@ $pageDescription = htmlspecialchars($pageDescription ?? 'Free dating! Ultimate f
|
||||
<script src="/rss/js/main.js" defer></script>
|
||||
|
||||
<!-- Structured Data (JSON-LD) -->
|
||||
<!-- Dynamic Structured Data -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "<?php echo htmlspecialchars($pageInfo['title'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"url": "<?php echo htmlspecialchars($pageUrl, ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"description": "<?php echo htmlspecialchars($pageInfo['long_desc'] ?? $pageInfo['short_desc'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"isPartOf": {
|
||||
"@type": "WebSite",
|
||||
"name": "Stella Amor",
|
||||
"url": "https://stellaamor.com/"
|
||||
}
|
||||
<?php if (!empty($pageInfo['rich_service_type'])): ?>
|
||||
"mainEntity": {
|
||||
"@type": "Service",
|
||||
"serviceType": "<?php echo htmlspecialchars($pageInfo['rich_service_type'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"name": "<?php echo htmlspecialchars($pageInfo['title'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"description": "<?php echo htmlspecialchars($pageInfo['long_desc'] ?? $pageInfo['short_desc'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"provider": {
|
||||
"@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."
|
||||
"url": "https://stellaamor.com"
|
||||
},
|
||||
"areaServed": "Worldwide",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"name": "Free Membership",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "Full access to all filters during the free membership period"
|
||||
}
|
||||
<?php if (!empty($pageInfo['rich_faq'])): ?>
|
||||
"faqPage": {
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
<?php foreach ($pageInfo['rich_faq'] as $i => $faq): ?>
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "<?php echo htmlspecialchars($faq['question'], ENT_QUOTES, 'UTF-8'); ?>",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "<?php echo htmlspecialchars($faq['answer'], ENT_QUOTES, 'UTF-8'); ?>"
|
||||
}
|
||||
}<?php echo $i < count($pageInfo['rich_faq'])-1 ? ',' : ''; ?>
|
||||
<?php endforeach; ?>
|
||||
]
|
||||
}
|
||||
<?php endif; ?>
|
||||
}
|
||||
<?php endif; ?>
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 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>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="logo">
|
||||
<a href="/">
|
||||
<img src="/rss/img/logo.png" alt="Stella Amor Logo" width="150" height="50">
|
||||
<img src="/rss/img/logo.png" alt="Stella Amor Logo" width="150" height="50" loading="lazy">
|
||||
</a>
|
||||
</div>
|
||||
<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>
|
||||
<button class="mobile-toggler" aria-label="Toggle navigation" id="menu-toggler">☰</button>
|
||||
<nav id="mainMenu">
|
||||
<?php foreach ($menu as $label => $url): ?>
|
||||
<a href="<?php echo $url; ?>" class="menu-item<?php echo $label === $currentPage ? ' active" aria-current="page' : ''; ?>">
|
||||
<?php echo htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); ?>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -1 +1,15 @@
|
||||
<h2>This page was not found</h2>
|
||||
<main>
|
||||
<div class="home-banner">
|
||||
<div class="home-banner-inner">
|
||||
<div class="container">
|
||||
<div class="d-flex justify-center align-center">
|
||||
<div class="text-col">
|
||||
<h1 class="title mb-3">Oops! <span class="text-primary">Page Not Found</span></h1>
|
||||
<p class="lead mb-3">Looks like this page got lost in the search for love. Don’t worry—let’s get you back to finding your perfect match!</p>
|
||||
<a href="/" class="mb-3 btn btn-dark cta-btn">Back to home</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
199
rss/php/templates/about-us.php
Normal file
@@ -0,0 +1,199 @@
|
||||
<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">About <span class="text-primary">Stella Amor</span></h1>
|
||||
<p class="lead mb-3">We’re redefining online dating with the world’s most advanced filters, free access, and a passion for helping you find your perfect match. A new Nordic Product</p>
|
||||
<a href="/register/" class="mb-3 btn btn-dark cta-btn">Join Free Now!</a>
|
||||
</div>
|
||||
<div class="image-col">
|
||||
<div class="image-wrapper">
|
||||
<img src="/rss/img/sweden.jpg" alt="Stella Amor team vision" loading="lazy" class="img-w-100 img-rounded-lg shadow-2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="mission-section py-4 bg-white">
|
||||
<div class="container my-5">
|
||||
<h2 class="mb-4 text-center">Our Mission</h2>
|
||||
<div class="row align-items-center">
|
||||
<div class="col-12 col-md-7 flex-column justify-center">
|
||||
<h3 class="h3 mb-3">Empowering Love with Choice</h3>
|
||||
<p class="text">At Stella Amor, we believe everyone deserves to find love on their terms. That’s why we created the world’s largest dating filters, letting you match based on finance, kinks, lifestyle, religion, and more. Our free trial and affordable subscriptions ($9.99/month, no binding periods) make personalized dating accessible to all.</p>
|
||||
<p class="text">We’re here to break the mold of generic dating apps, offering a platform where picky singles and professionals can find exactly what they’re looking for, without judgment or limitations.</p>
|
||||
<div class="d-flex mt-3">
|
||||
<a href="/register" class="btn btn-dark">Start Your Journey</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-5">
|
||||
<div class="rounded-col-image">
|
||||
<img src="/rss/img/couple-elder.jpg" alt="Stella Amor’s mission for love" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="features-section py-4 bg-accent-white">
|
||||
<div class="container my-5">
|
||||
<h2 class="mb-4 text-center">Why Choose Stella Amor?</h2>
|
||||
<div class="row g-4">
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="theme-card primary card-hover">
|
||||
<div class="card-header theme-header">
|
||||
<img src="/rss/img/app-search.png" alt="Advanced filters icon" class="rounded-image object-center" loading="lazy">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h3 class="h3 fw-light">Unmatched Filters</h3>
|
||||
<p class="text">From wealth to kinks to family values, our filters let you find exactly who you’re looking for.</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/app-code.png" alt="User-friendly app icon" class="rounded-image object-center" loading="lazy">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h3 class="h3 fw-light">User-Friendly App</h3>
|
||||
<p class="text">Our fast, reliable app works on all devices, making your dating experience seamless.</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/app-date.png" alt="Free trial icon" class="rounded-image object-center" loading="lazy">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h3 class="h3 fw-light">Free to Start</h3>
|
||||
<p class="text">Enjoy a full month free with no credit card required, and affordable plans after that.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container my-5" id="tos">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-s-12">
|
||||
<h1>Terms of Use</h1>
|
||||
<p>These Terms of Use govern your use of Stella Amor. They may change, so review periodically. Contact support@stellaamor.com for questions, with responses within 48 hours.</p>
|
||||
|
||||
<h2>1. User Conduct</h2>
|
||||
<ul>
|
||||
<li>Respect all users, including HBTQ individuals, at all times. Harassment, hate speech, or abusive behavior will result in account suspension.</li>
|
||||
<li>Do not impersonate others or create fake profiles to mislead users.</li>
|
||||
<li>Sharing private user information outside the platform is strictly prohibited.</li>
|
||||
<li>Spamming, phishing, or malicious activities lead to account termination.</li>
|
||||
</ul>
|
||||
|
||||
<h2>2. Profile Usage</h2>
|
||||
<ul>
|
||||
<li>Keep your account credentials secure to protect your privacy.</li>
|
||||
<li>Uploaded content must not violate copyright, trademark, or privacy laws.</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. Privacy and Data Usage</h2>
|
||||
<ul>
|
||||
<li>We prioritize privacy and won’t share your data without consent, except as legally required.</li>
|
||||
<li>By using Stella Amor, you agree to our Privacy Policy’s data practices.</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. Reporting Issues</h2>
|
||||
<ul>
|
||||
<li>Report security vulnerabilities or bugs to support@stellaamor.com immediately, without exploitation.</li>
|
||||
<li>Report inappropriate behavior or content via platform tools or support@stellaamor.com.</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Liability</h2>
|
||||
<ul>
|
||||
<li>We’re not responsible for user actions outside the platform.</li>
|
||||
<li>Use Stella Amor at your own risk; we don’t guarantee match success.</li>
|
||||
</ul>
|
||||
|
||||
<h2>6. Account Termination</h2>
|
||||
<ul>
|
||||
<li>We may terminate accounts violating these terms or engaging in prohibited conduct.</li>
|
||||
<li>Users can terminate accounts anytime via settings.</li>
|
||||
</ul>
|
||||
|
||||
<h2>7. Amendments</h2>
|
||||
<ul>
|
||||
<li>Terms may be updated periodically. Continued use signifies acceptance of changes.</li>
|
||||
<li>No refunds are offered unless required by law. Try our 30-day free trial before subscribing.</li>
|
||||
<li>No refunds for terminated accounts.</li>
|
||||
<li>Post-trial subscription is 99 SEK/month, supporting constant platform updates.</li>
|
||||
</ul>
|
||||
|
||||
<h1>Privacy Policy</h1>
|
||||
<p>Your privacy is our priority at Stella Amor. This policy explains how we collect, use, and protect your data. Contact support@stellaamor.com for concerns, with responses within 48 hours.</p>
|
||||
|
||||
<h2>1. Information We Collect</h2>
|
||||
<ul>
|
||||
<li><strong>Personal Information:</strong> Name, email, date of birth, and profile details (e.g., kinks, lifestyle) are collected during account creation.</li>
|
||||
<li><strong>Usage Data:</strong> We track interactions like searches, messages, and matches to improve your experience.</li>
|
||||
<li><strong>Device Information:</strong> IP address, browser type, and device details may be collected for security.</li>
|
||||
</ul>
|
||||
|
||||
<h2>2. How We Use Your Information</h2>
|
||||
<ul>
|
||||
<li>Enhance platform functionality and user experience with constant updates.</li>
|
||||
<li>Personalize matches for kinks, wealth, or HBTQ-friendly preferences.</li>
|
||||
<li>Communicate updates, notifications, or support via support@stellaamor.com.</li>
|
||||
<li>Monitor and improve security to prevent fraud and abuse.</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. Sharing Your Information</h2>
|
||||
<ul>
|
||||
<li>We don’t sell your data to third parties.</li>
|
||||
<li>Data may be shared with trusted partners under confidentiality agreements to operate the platform.</li>
|
||||
<li>Information may be disclosed as required by law or to protect user safety.</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. Data Retention</h2>
|
||||
<ul>
|
||||
<li>Data is retained while your account is active or as needed for services.</li>
|
||||
<li>Data may be kept to comply with legal obligations or resolve disputes.</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Your Rights</h2>
|
||||
<ul>
|
||||
<li>Opt out of marketing communications via account preferences.</li>
|
||||
<li>Contact support@stellaamor.com with data concerns; we respond within 48 hours.</li>
|
||||
</ul>
|
||||
|
||||
<h2>6. Security</h2>
|
||||
<ul>
|
||||
<li>Industry-standard measures protect your data from unauthorized access.</li>
|
||||
<li>No online service is fully secure; use Stella Amor at your own risk.</li>
|
||||
</ul>
|
||||
|
||||
<h2>7. Changes to This Privacy Policy</h2>
|
||||
<ul>
|
||||
<li>We update this policy periodically to meet new requirements. Changes are communicated via platform or email.</li>
|
||||
<li>Continued use indicates acceptance of updates.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="cta-section py-4 bg-accent-white">
|
||||
<div class="container">
|
||||
<div class="flex-column justify-center align-center text-center">
|
||||
<h2 class="mb-3">Ready to Find Your Perfect Match?</h2>
|
||||
<p class="text mb-3">Join Stella Amor today and explore love with the world’s most advanced dating filters. No credit card needed!</p>
|
||||
<a href="/register" class="btn btn-dark cta-btn">Get Started Free</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
163
rss/php/templates/dating/fetish-dating.php
Normal file
@@ -0,0 +1,163 @@
|
||||
<div class="promo-cover fetish-cover">
|
||||
<div class="title-bar">
|
||||
<h1>Free BDSM Dating with Detailed Kink Filters</h1>
|
||||
<p>Discover BDSM-compatible partners using Stella Amor’s extensive kink and fetish filters. Match on specific interests including bondage, discipline, dominance, submission, sadism, masochism and over 50 additional preferences, all available for free.</p>
|
||||
<a href="/register/" class="mb-3 btn btn-white">Sign up today</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white border-bottom">
|
||||
<div class="content-section">
|
||||
<h2>Why BDSM Compatibility Matters in Dating</h2>
|
||||
<p>Shared kink interests and clear boundaries form the foundation of satisfying BDSM relationships. Stella Amor eliminates guesswork by letting members filter for exact preferences from the start. Whether you identify as dominant, submissive, switch, or explore specific practices such as impact play, shibari, or power exchange, detailed profiles ensure matches align on experience level, limits, and desired dynamics.</p>
|
||||
|
||||
<div class="row mt-5">
|
||||
<div class="col-sm-12 col-md-7">
|
||||
<h2>Precise BDSM Filters Available on Stella Amor</h2>
|
||||
<p>Unlike mainstream dating apps that offer only basic orientation checkboxes, Stella Amor provides granular kink filters including:</p>
|
||||
<ul>
|
||||
<li>Bondage and rope play preferences</li>
|
||||
<li>Discipline and punishment styles</li>
|
||||
<li>Dominance and submission roles</li>
|
||||
<li>Sadomasochism intensity levels</li>
|
||||
<li>Safe word and aftercare expectations</li>
|
||||
<li>Specific fetishes (leather, latex, pet play, and 50+ more)</li>
|
||||
<li>Experience level from curious beginner to seasoned practitioner</li>
|
||||
</ul>
|
||||
<p>All filters are completely free to set and search, with no premium tiers required to access kink-specific matching.</p>
|
||||
|
||||
<h2>Safe, Respectful BDSM Dating Environment</h2>
|
||||
<p>Stella Amor enforces strict community guidelines focused on consent, privacy, and mutual respect. Members can keep kink preferences private until mutually revealed, and verification options help confirm genuine interest in the BDSM lifestyle.</p>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-5">
|
||||
<img src="/rss/img/promo-images/couple.jpeg" alt="Couple exploring BDSM compatibility on Stella Amor" class="img-w-100 img-rounded-lg shadow-2" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark shadow-4">
|
||||
<div class="container py-4 text-white border-bottom">
|
||||
<h2 class="text-white fw-semi-bold my-1 py-0 text-center">Top free dating filters for <span class="fw-bold fs-italic">kinks</span> and <span class="fw-bold fs-italic">fetishes</span></h2>
|
||||
<div class="row py-5">
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-gesture promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Bondage & Shibari</h3>
|
||||
<p>Match on rope play, suspension, and bondage intensity preferences</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-account-tie promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Dominance & Submission</h3>
|
||||
<p>Find Dominant, Submissive or Switch partners with clear roles</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-hand promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Impact Play & Spanking</h3>
|
||||
<p>Filter by spanking, flogging, caning and pain tolerance levels</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-shoe-print promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Leather & Latex Fetish</h3>
|
||||
<p>Connect with partners who share leather, latex and rubber interests</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-dog promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Pet Play</h3>
|
||||
<p>Match on puppy, kitten, pony play and handler dynamics</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-gavel promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Discipline & Punishment</h3>
|
||||
<p>Find partners for rules, protocols, brat taming and consequences</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-eye-off promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>Sensory Play</h3>
|
||||
<p>Search for blindfolds, sensory deprivation and temperature play</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3 my-4">
|
||||
<div class="rounded-xl shadow-2 bg-dark">
|
||||
<i class="mdi mdi-clock-outline promo-feature-icon"></i>
|
||||
<div class="text-white text-center px-2 py-1">
|
||||
<h3>24/7 & Lifestyle Dynamics</h3>
|
||||
<p>Connect with total power exchange and full-time D/s relationships</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white border-bottom">
|
||||
<div class="content-section">
|
||||
<h2>How Stella Amor’s BDSM Matching Works</h2>
|
||||
<p>After free registration, members complete a detailed kink questionnaire covering roles, interests, limits, and experience. These answers become searchable filters for everyone. You can require exact matches on must-haves (e.g., “must be dominant” or “must enjoy rope bondage”) and set deal-breakers (e.g., “no needle play”). The algorithm then surfaces only profiles that meet your criteria, saving time and reducing awkward conversations.</p>
|
||||
<div class="row mt-5">
|
||||
<div class="col-sm-12 col-md-5">
|
||||
<img src="/rss/img/promo-images/bd.jpeg" alt="BDSM dating with detailed kink filters on Stella Amor" class="img-w-100 img-rounded-lg shadow-2" loading="lazy">
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-7">
|
||||
<h2>Common BDSM Searches Stella Amor Handles</h2>
|
||||
<p>Popular search terms our members successfully use include:</p>
|
||||
<ul>
|
||||
<li>Female-led relationship (FLR) dating</li>
|
||||
<li>24/7 dynamics and lifestyle BDSM partners</li>
|
||||
<li>Brat taming and discipline-focused relationships</li>
|
||||
<li>Sensory deprivation and impact play partners</li>
|
||||
<li>Service-oriented submission matching</li>
|
||||
<li>Age-play and DDLG/MDLB connections</li>
|
||||
<li>Switch partners open to both dominant and submissive roles</li>
|
||||
</ul>
|
||||
<p>All of these preferences and dozens more are built into the free filter system.</p>
|
||||
|
||||
<h2>Tips for Better Results on BDSM Dating Profiles</h2>
|
||||
<p>Complete every kink field – the more specific you are, the higher you appear in relevant searches.<br>
|
||||
Upload clear, recent photos that reflect your style (leather, collars, rope, etc.) while respecting platform clothing guidelines.<br>
|
||||
Write a short headline that mentions your primary role or interest – examples: “Experienced rope top seeking submissive muse” or “Bratty sub looking for patient disciplinarian.”<br>
|
||||
List hard limits upfront to attract compatible matches and filter out mismatches instantly.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center mt-5">
|
||||
<a href="/register/" class="btn btn-white btn-lg px-4 py-2">Create Your Free BDSM Profile Now</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
86
rss/php/templates/dating/foot-fetish-dating.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<div class="promo-cover foot-cover">
|
||||
<div class="title-bar">
|
||||
<h1>Free Foot Fetish Dating with Detailed Filters</h1>
|
||||
<p>Join for free and meet foot lovers who share your exact preferences. Filter by foot size, pedicure style, worship intensity, nylons, high arches and 30+ foot-specific interests.</p>
|
||||
<a href="/register/" class="mb-3 btn btn-white">Sign up today</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white border-bottom">
|
||||
<div class="content-section">
|
||||
<h2>Why Foot Compatibility Matters</h2>
|
||||
<p>Foot fetish is one of the most common desires. But finding someone with matching tastes can be hard. Stella Amor makes it simple with the most detailed foot filters available anywhere.</p>
|
||||
|
||||
<div class="row mt-5">
|
||||
<div class="col-sm-12 col-md-7">
|
||||
<h2>Precise Foot Fetish Filters</h2>
|
||||
<p>Unlike mainstream apps with zero foot options, Stella Amor lets you filter on:</p>
|
||||
<ul>
|
||||
<li>Foot size & shoe size</li>
|
||||
<li>High arches vs flat feet</li>
|
||||
<li>Pedicure style & nail color</li>
|
||||
<li>Bare feet vs stockings, socks, nylons</li>
|
||||
<li>Worship preferences (massage, kissing, licking, smelling)</li>
|
||||
<li>Trampling, tickling, or foot domination</li>
|
||||
<li>Clean vs sweaty preference</li>
|
||||
</ul>
|
||||
<p>All filters completely free.</p>
|
||||
|
||||
<h2>Private & Respectful Community</h2>
|
||||
<p>Foot pics and detailed preferences stay private until both users agree to share.</p>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-5">
|
||||
<img src="/rss/img/promo-images/foot2.jpg" alt="Foot fetish dating with detailed foot filters on Stella Amor" class="img-w-100 img-rounded-lg shadow-2" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark shadow-4">
|
||||
<div class="container py-4 text-white border-bottom">
|
||||
<h2 class="text-white text-center">Top free foot fetish filters</h2>
|
||||
<div class="row py-5">
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-foot-print promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Foot & Shoe Size</h3><p>Find your perfect size match</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-nail promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Pedicure & Nail Color</h3><p>Red, French, black, or natural</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-sock promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Nylons & Socks</h3><p>Bare, stockings, ankle socks</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-arch promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Arches & Shape</h3><p>High arches, wide, narrow</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-heart-outline promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Worship Style</h3><p>Massage, kissing, licking, smelling</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-shoe-heel promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>High Heels & Flats</h3><p>Stilettos, sandals, barefoot</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-weather-windy promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Clean vs Sweaty</h3><p>Freshly washed or post-gym</p></div></div></div>
|
||||
<div class="col-sm-12 col-md-3 my-4"><div class="rounded-xl shadow-2 bg-dark"><i class="mdi mdi-human-male-female promo-feature-icon"></i><div class="text-white text-center px-2 py-1"><h3>Trampling & Domination</h3><p>Light stepping to full weight</p></div></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white border-bottom">
|
||||
<div class="content-section">
|
||||
<h2>How Foot Fetish Matching Works</h2>
|
||||
<p>After free signup you fill out your exact foot preferences. The system only shows profiles that match what you love — no more endless swiping through vanilla feet.</p>
|
||||
<div class="row mt-5">
|
||||
<div class="col-sm-12 col-md-5">
|
||||
<img src="/rss/img/promo-images/foot3.jpg" alt="Foot worship and foot fetish dating on Stella Amor" class="img-w-100 img-rounded-lg shadow-2" loading="lazy">
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-7">
|
||||
<h2>Popular Foot Searches We Cover</h2>
|
||||
<ul>
|
||||
<li>Pretty feet dating</li>
|
||||
<li>Foot worship partners</li>
|
||||
<li>High arch foot fetish</li>
|
||||
<li>Size 9-10 feet wanted</li>
|
||||
<li>Red pedicure foot lovers</li>
|
||||
<li>Nylon and stocking fetish</li>
|
||||
<li>Foot massage dating</li>
|
||||
</ul>
|
||||
<h2>Profile Tips</h2>
|
||||
<p>Upload clear foot pics • Be specific about size & style • Mention worship intensity • Verify your feet for extra attention</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center mt-5">
|
||||
<a href="/register/" class="btn btn-white btn-lg px-4 py-2">Create Your Free Foot Profile Now</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
162
rss/php/templates/dating/free-dating-app.php
Normal file
@@ -0,0 +1,162 @@
|
||||
<div class="promo-cover app-cover">
|
||||
<div class="title-bar">
|
||||
<h1>Free Dating App With Advanced Filters</h1>
|
||||
<p>Join the completely free dating app that gives you powerful filters for kinks, lifestyle, wealth, height, faith, polyamory and more. Unlimited messaging included.</p>
|
||||
<a href="/register/" class="mb-3 btn btn-white btn-lg">Start Free Now</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white border-bottom py-5">
|
||||
<div class="content-section text-center">
|
||||
<h2 class="display-5">Date Better With Real Free Features</h2>
|
||||
<p class="lead">Everything you need is included at no cost.</p>
|
||||
<div class="row mt-5">
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-message-text-outline display-1 text-danger"></i>
|
||||
<h3>Unlimited Messaging</h3>
|
||||
<p>Chat with anyone you match with</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-filter-variant display-1 text-danger"></i>
|
||||
<h3>All Advanced Filters</h3>
|
||||
<p>Kinks, income, height, religion, lifestyle and dozens more</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-shield-check display-1 text-danger"></i>
|
||||
<h3>Zero Payment Required</h3>
|
||||
<p>Sign up and start dating right away</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white py-5 text-center">
|
||||
<h2 class="display-5 mb-4">Stop Wasting Time on Vanilla Dating Apps</h2>
|
||||
<p class="lead mb-5">
|
||||
Whether you are looking for kink-friendly partners, sugar dating, polyamory, specific height preferences, fitness lifestyles,
|
||||
faith-based relationships, or simply someone who matches your exact vibe, Stella Amor gives you the tools to find them fast.
|
||||
</p>
|
||||
<div class="row justify-center">
|
||||
<div class="col-md-8">
|
||||
<p class="fs-4 mb-4">Join free today and start meeting people who actually fit what you want.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white py-5">
|
||||
<div class="content-section">
|
||||
<h2 class="text-center mb-5">Search Exactly What You Want, Completely Free</h2>
|
||||
<p class="lead text-center mb-5">
|
||||
Mainstream dating apps give you age and location. Stella Amor gives you real control with the deepest set of free filters available anywhere.
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Lifestyle & Relationship Style</h4>
|
||||
<p>Filter for monogamous, polyamory, open relationships, ethical non-monogamy, sugar dating, kink-friendly, vanilla only, 420 friendly, child-free, or wants children.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Body & Appearance</h4>
|
||||
<p>Height preferences, body type (slim, athletic, curvy, BBW, dad bod, muscular), hair color, tattoos, piercings, and even foot size or shoe preferences.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Financial & Success Level</h4>
|
||||
<p>Income range, net worth, career field, education level, lifestyle budget, and sugar daddy / sugar baby expectations.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Faith & Values</h4>
|
||||
<p>Religion, spirituality level, political views, diet (vegan, keto, halal, kosher), smoking and drinking habits.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Kinks & Bedroom Preferences</h4>
|
||||
<p>BDSM roles, fetish list, experience level, safe-word usage, aftercare needs, and dozens of specific interests from role-play to sensory play.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<h4 class="text-danger">Fitness & Daily Habits</h4>
|
||||
<p>Gym frequency, sports, outdoor activities, Netflix bingers, early birds, night owls, pet owners, travel frequency.</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-center mt-4 fs-5">Every single filter above is available the moment you join, at no cost.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark shadow-4">
|
||||
<div class="container py-5 text-white text-center">
|
||||
<h2>Free Filters You Actually Want</h2>
|
||||
<div class="row py-4">
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-heart-outline promo-feature-icon"></i><h4>Kinks & Fetishes</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-cash-multiple promo-feature-icon"></i><h4>Wealth & Income</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-human-male-female promo-feature-icon"></i><h4>Height & Body</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-account-group promo-feature-icon"></i><h4>Poly & Open</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-foot-print promo-feature-icon"></i><h4>Foot Preferences</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-star-outline promo-feature-icon"></i><h4>Sugar Dating</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-church promo-feature-icon"></i><h4>Faith</h4></div></div>
|
||||
<div class="col-6 col-md-3 my-4"><div class="bg-dark rounded-xl shadow-2 p-4"><i class="mdi mdi-run-fast promo-feature-icon"></i><h4>Fitness</h4></div></div>
|
||||
</div>
|
||||
<p class="lead">All filters included free</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white py-5">
|
||||
<div class="content-section">
|
||||
<h2 class="text-center mb-5">What Makes Stella Amor Different</h2>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-filter-variant display-1 text-danger mb-3"></i>
|
||||
<h4>Most Detailed Filters Anywhere</h4>
|
||||
<p>Kinks, income, height, faith, body type, relationship style and dozens more. Find exactly what you are looking for from day one.</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-message-text-outline display-1 text-danger mb-3"></i>
|
||||
<h4>Unlimited Messaging</h4>
|
||||
<p>Chat with every match you like, no limits and no extra cost.</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<i class="mdi mdi-cellphone display-1 text-danger mb-3"></i>
|
||||
<h4>Works Everywhere</h4>
|
||||
<p>Perfect experience on phone, tablet, or desktop. No separate app download needed.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white py-5">
|
||||
<div class="content-section">
|
||||
<h2 class="text-center mb-5">From Sign-Up to Real Dates in Three Simple Steps</h2>
|
||||
<div class="row align-items-center justify-content-center text-center text-md-start">
|
||||
<div class="col-md-4 mb-5">
|
||||
<div class="display-1 text-danger mb-3">1</div>
|
||||
<h4>Create Your Free Profile</h4>
|
||||
<p>Takes under one minute. Add photos, write a short bio, and answer the questions that matter most to you.</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-5">
|
||||
<div class="display-1 text-danger mb-3">2</div>
|
||||
<h4>Set Your Exact Filters</h4>
|
||||
<p>Tell the system who you want and who you don’t. Be as specific as you like – the more precise you are, the better your matches.</p>
|
||||
</div>
|
||||
<div class="col-md-4 mb-5">
|
||||
<div class="display-1 text-danger mb-3">3</div>
|
||||
<h4>Start Messaging Matches</h4>
|
||||
<p>Browse only people who already fit what you are looking for. Message anyone you like, as many times as you want.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 bg-dark">
|
||||
<div class="container text-white py-5 text-center">
|
||||
<h2>Join Free In Seconds</h2>
|
||||
<p class="lead mb-5">No card, no catch, just dating</p>
|
||||
<a href="/register/" class="btn btn-white btn-lg px-5">Start Free Dating Now</a>
|
||||
</div>
|
||||
</div>
|
||||