Compare commits
66 Commits
login-page
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5f3e97654 | ||
|
|
e3091caf69 | ||
|
|
5190c9b17c | ||
|
|
392fc4497d | ||
|
|
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
|
||||
"
|
||||
62
.htaccess
@@ -1,39 +1,63 @@
|
||||
# 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>
|
||||
<IfModule lsapi_module>
|
||||
php_value output_buffering Off
|
||||
</IfModule>
|
||||
# END cPanel-generated php ini directives, do not edit
|
||||
# END cPanel-generated php ini directives, do not edit
|
||||
|
||||
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,19 @@ header nav .menu-item:hover::after {
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
}
|
||||
.display-banner.fitness-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url("/rss/img/fitness.jpg");
|
||||
padding: 180px 0px;
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
overflow: hidden;
|
||||
}
|
||||
.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 +269,7 @@ header nav .menu-item:hover::after {
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #212529;
|
||||
background-color: #242627;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
padding: 25px 0px;
|
||||
@@ -216,7 +286,7 @@ footer ul {
|
||||
|
||||
.features-section h2 {
|
||||
font-size: 1.8rem;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
}
|
||||
.features-section .theme-card {
|
||||
border-radius: 0.25rem;
|
||||
@@ -228,8 +298,8 @@ footer ul {
|
||||
text-align: center;
|
||||
}
|
||||
.features-section .theme-card .card-header img {
|
||||
width: 125px;
|
||||
height: 125px;
|
||||
width: 170px;
|
||||
height: 170px;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
||||
-o-object-fit: cover;
|
||||
@@ -288,7 +358,7 @@ footer ul {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #212529;
|
||||
color: #242627;
|
||||
}
|
||||
|
||||
.filter-text {
|
||||
@@ -369,9 +439,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 +449,213 @@ 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;
|
||||
}
|
||||
|
||||
.video-background {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
height: 65vh;
|
||||
width: 100%;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
||||
margin-top: 50px;
|
||||
}
|
||||
.video-background video {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: -1;
|
||||
-o-object-fit: cover;
|
||||
object-fit: cover;
|
||||
}
|
||||
.video-background .content {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background-color: rgba(0, 0, 0, 0.4862745098);
|
||||
border-radius: 12px;
|
||||
padding: 25px 45px;
|
||||
}
|
||||
|
||||
@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,131 +112,147 @@ header {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-toggler {
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
|
||||
@media(min-width: 769px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.home-banner {
|
||||
height: calc(100vh - 55px);
|
||||
padding: 50px 0;
|
||||
display: flex;
|
||||
background-color: #{map-get($colors, white)};
|
||||
opacity: 0;
|
||||
animation: slideUp 1s ease-in-out forwards;
|
||||
// animation-delay: 0.2s;
|
||||
|
||||
|
||||
|
||||
@media(max-width:768px){
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.home-banner-inner {
|
||||
flex: 1;
|
||||
height: calc(100vh - 55px);
|
||||
padding: 50px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
background-color: #{map-get($colors, white)};
|
||||
opacity: 0;
|
||||
animation: slideUp 1s ease-in-out forwards;
|
||||
// animation-delay: 0.2s;
|
||||
|
||||
|
||||
.container {
|
||||
height: 100%;
|
||||
&.no-height {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.inner-row {
|
||||
|
||||
@media(max-width:768px) {
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.home-banner-inner {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: stretch;
|
||||
height: 100%;
|
||||
|
||||
@media(max-width:768px){
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
.image-col {
|
||||
flex: 0 0 45%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
img{
|
||||
border-radius: 12px;
|
||||
box-shadow: #{map-get($shadows, 3)};
|
||||
}
|
||||
}
|
||||
|
||||
.text-col {
|
||||
flex: 0 0 40%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
|
||||
@media(max-width: 768px){
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.title{
|
||||
font-weight: 800;
|
||||
font-size: 3.7rem;
|
||||
line-height: 1.2;
|
||||
font-family: $font-family-base;
|
||||
|
||||
@media(max-width:768px){
|
||||
font-size: 3.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.lead{
|
||||
font-size: 1.6rem;
|
||||
font-weight: 400;
|
||||
|
||||
@media(max-width:768px){
|
||||
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;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.image-wrapper {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
|
||||
@media(max-width: 768px){
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 100%;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
.container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.inner-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: stretch;
|
||||
height: 100%;
|
||||
|
||||
@media(max-width:768px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
.image-col {
|
||||
flex: 0 0 45%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
img {
|
||||
border-radius: 12px;
|
||||
box-shadow: #{map-get($shadows, 3)};
|
||||
}
|
||||
}
|
||||
|
||||
.text-col {
|
||||
flex: 0 0 40%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: 800;
|
||||
font-size: 3.7rem;
|
||||
line-height: 1.2;
|
||||
font-family: $font-family-base;
|
||||
|
||||
@media(max-width:768px) {
|
||||
font-size: 3.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.lead {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 400;
|
||||
|
||||
@media(max-width:768px) {
|
||||
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;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.image-wrapper {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
|
||||
@media(max-width: 768px) {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
opacity: 0.1;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -205,6 +270,23 @@ header {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
&.fitness-banner {
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)),
|
||||
url('/rss/img/fitness.jpg');
|
||||
padding: 180px 0px;
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&.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');
|
||||
@@ -250,20 +332,22 @@ footer {
|
||||
text-align: center;
|
||||
|
||||
img {
|
||||
width: 125px;
|
||||
height: 125px;
|
||||
width: 170px;
|
||||
height: 170px;
|
||||
border-radius: 50%;
|
||||
box-shadow: map-get($shadows, 2);
|
||||
object-fit: cover;
|
||||
margin: 0 auto;
|
||||
|
||||
&.object-left{
|
||||
&.object-left {
|
||||
object-position: left center;
|
||||
}
|
||||
&.object-center{
|
||||
|
||||
&.object-center {
|
||||
object-position: center center;
|
||||
}
|
||||
&.object-bottom{
|
||||
|
||||
&.object-bottom {
|
||||
object-position: bottom center;
|
||||
}
|
||||
}
|
||||
@@ -278,64 +362,66 @@ footer {
|
||||
|
||||
// Fix before release
|
||||
// Theme fonts
|
||||
.styled-title{
|
||||
.styled-title {
|
||||
font-family: "Nunito", sans-serif;
|
||||
|
||||
&.fw-900{
|
||||
&.fw-900 {
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
&.fw-600{
|
||||
&.fw-600 {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.filter-section {
|
||||
padding: 2rem 0;
|
||||
padding: 2rem 0;
|
||||
}
|
||||
|
||||
.filter-card {
|
||||
background-color: #{map-get($colors, white)};
|
||||
border-radius: map-get($border-radius-sizes, md);
|
||||
box-shadow: map-get($shadows, 2);
|
||||
padding: #{map-get($spacing, "3")};
|
||||
text-align: center;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
height: 100%;
|
||||
margin: 15px 0px;
|
||||
background-color: #{map-get($colors, white)};
|
||||
border-radius: map-get($border-radius-sizes, md);
|
||||
box-shadow: map-get($shadows, 2);
|
||||
padding: #{map-get($spacing, "3")};
|
||||
text-align: center;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
height: 100%;
|
||||
margin: 15px 0px;
|
||||
}
|
||||
|
||||
.filter-icon {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: #{map-get($colors, primary)};
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: #{map-get($colors, primary)};
|
||||
}
|
||||
|
||||
.filter-title {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
color: map-get($colors, dark);
|
||||
font-size: 1.3rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
color: map-get($colors, dark);
|
||||
}
|
||||
|
||||
.filter-text {
|
||||
font-size: 1rem;
|
||||
color: map-get($colors, gray);
|
||||
line-height: 1.4;
|
||||
font-size: 1rem;
|
||||
color: map-get($colors, gray);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Responsive adjustments */
|
||||
@media (max-width: 768px) {
|
||||
.filter-card {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.filter-icon {
|
||||
font-size: 2rem;
|
||||
}
|
||||
.filter-title {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.filter-card {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.filter-icon {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.filter-title {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -347,7 +433,7 @@ footer {
|
||||
// Images
|
||||
|
||||
// Rounded col images
|
||||
.rounded-col-image{
|
||||
.rounded-col-image {
|
||||
height: 450px;
|
||||
width: 450px;
|
||||
border-radius: 50%;
|
||||
@@ -357,17 +443,17 @@ footer {
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
@media(max-width:1200px){
|
||||
@media(max-width:1200px) {
|
||||
width: 300px;
|
||||
height:300px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
@media(max-width:920px){
|
||||
width:225px;
|
||||
@media(max-width:920px) {
|
||||
width: 225px;
|
||||
height: 225px;
|
||||
}
|
||||
|
||||
&:before{
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -383,7 +469,7 @@ footer {
|
||||
|
||||
}
|
||||
|
||||
img{
|
||||
img {
|
||||
object-fit: cover;
|
||||
object-position: right;
|
||||
width: 100%;
|
||||
@@ -391,54 +477,290 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
section{
|
||||
h2{
|
||||
section {
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
p{
|
||||
p {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.4;
|
||||
font-weight: 400;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.bolder{
|
||||
.bolder {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.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 {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.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)};
|
||||
}
|
||||
|
||||
.video-background{
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
height: 65vh;
|
||||
width: 100%;
|
||||
box-shadow: #{map-get($shadows, 2)};
|
||||
margin-top: 50px;
|
||||
|
||||
video{
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: -1;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.content{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background-color: #0000007c;
|
||||
border-radius: 12px;
|
||||
padding: 25px 45px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Accessibility for reduced motion */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.section-animation {
|
||||
opacity: 1;
|
||||
transform: none;
|
||||
transition: none;
|
||||
}
|
||||
.section-animation {
|
||||
opacity: 1;
|
||||
transform: none;
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
transform: translateY(50px);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
}
|
||||
from {
|
||||
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/fitness.jpg
Normal file
|
After Width: | Height: | Size: 328 KiB |
BIN
rss/img/girl-face.jpg
Normal file
|
After Width: | Height: | Size: 178 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/kink2.jpg
Normal file
|
After Width: | Height: | Size: 282 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/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/marriage-4226896_1280.jpg
Normal file
|
After Width: | Height: | Size: 345 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/senior.jpg
Normal file
|
After Width: | Height: | Size: 248 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/vegan.jpg
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
rss/img/yacht2.jpg
Normal file
|
After Width: | Height: | Size: 494 KiB |
@@ -0,0 +1,22 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const video = document.getElementById('first-video');
|
||||
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach((entry) => {
|
||||
if (entry.isIntersecting) {
|
||||
const source = document.createElement('source');
|
||||
source.src = '/rss/videos/couple.mp4';
|
||||
source.type = 'video/mp4';
|
||||
video.appendChild(source);
|
||||
|
||||
video.load();
|
||||
video.play();
|
||||
video.playbackRate = 0.7; // Set after loading
|
||||
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
observer.observe(video);
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,4 +73,30 @@ async function removeAlert(){
|
||||
alert.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
global $pageInfo;
|
||||
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/js/' . $pageInfo['template'] .'.js')){
|
||||
echo '<script src="/rss/js/' . $pageInfo['template'] .'.js"></script>';
|
||||
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/rss/js/' . $pageInfo['template'] . '.js')) {
|
||||
echo '<script src="/rss/js/' . $pageInfo['template'] . '.js"></script>';
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||