Autosave: 20260217-190955

This commit is contained in:
Flatlogic Bot 2026-02-17 19:09:56 +00:00
parent 79a273568c
commit d9aee95dfc
37 changed files with 379 additions and 250 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -185,3 +185,6 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# Media files (User uploads)
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'
LOGOUT_REDIRECT_URL = 'onboarding'
LOGIN_REDIRECT_URL = 'home'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}CommonGround{% endblock %}</title>
<title>{% block title %}Roster{% endblock %}</title>
{% if project_description %}
<meta name="description" content="{{ project_description }}">
{% endif %}
@ -21,24 +21,23 @@
<body>
<nav class="navbar navbar-expand-lg sticky-top py-2">
<div class="container-fluid px-lg-5">
<a class="navbar-brand brand-font fs-4 d-flex align-items-center" href="/">
<img src="{% static 'core/images/logo.png' %}" alt="CommonGround" class="me-2" style="height: 24px;">
<span class="fw-semibold ls-1" style="font-size: 1.25rem;">CommonGround</span>
<a class="navbar-brand brand-font d-flex align-items-center" href="/">
<img src="{% static 'core/images/logo.png' %}?v={{ deployment_timestamp }}" alt="Roster Logo" style="height: 48px; filter: drop-shadow(0 0 10px rgba(0, 180, 219, 0.3));">
</a>
<button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
<button class="navbar-toggler border-0 text-white" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<i class="bi bi-list fs-1"></i>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto align-items-center">
<li class="nav-item">
<a class="nav-link px-3" href="{% url 'home' %}">Teammates</a>
<a class="nav-link px-3" href="{% url 'home' %}">Explore</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="{% url 'about' %}">About</a>
</li>
{% if user.is_authenticated %}
<li class="nav-item">
<a class="nav-link px-3 {% if 'matches' in request.path %}active{% endif %}" href="{% url 'matches' %}">My Teammates</a>
<a class="nav-link px-3 {% if 'matches' in request.path %}active{% endif %}" href="{% url 'matches' %}">My Roster</a>
</li>
<li class="nav-item">
<a class="nav-link px-3 {% if 'events' in request.path %}active{% endif %}" href="{% url 'events' %}">Sessions</a>
@ -61,14 +60,17 @@
</li>
{% endif %}
<li class="nav-item">
<a class="btn btn-outline-cg ms-lg-3" href="{% url 'logout' %}">Log Out</a>
<form action="{% url 'logout' %}" method="post" class="d-inline">
{% csrf_token %}
<button type="submit" class="btn btn-outline-cg ms-lg-3">Log Out</button>
</form>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link px-3" href="{% url 'login' %}">Log In</a>
</li>
<li class="nav-item">
<a class="btn btn-primary-cg ms-lg-3" href="{% url 'signup' %}">Join Community</a>
<a class="btn btn-neon ms-lg-3" href="{% url 'signup' %}">Join Roster</a>
</li>
{% endif %}
</ul>
@ -84,26 +86,26 @@
<div class="bottom-nav d-lg-none">
<a href="{% url 'home' %}" class="bottom-nav-item {% if request.resolver_match.url_name == 'home' %}active{% endif %}">
<i class="bi bi-compass"></i>
Teammates
Explore
</a>
<a href="{% url 'matches' %}" class="bottom-nav-item {% if 'matches' in request.path %}active{% endif %}">
<i class="bi bi-people"></i>
Teammates
<i class="bi bi-shield-check"></i>
My Roster
</a>
<a href="{% url 'inbox' %}" class="bottom-nav-item {% if request.resolver_match.url_name == 'inbox' or request.resolver_match.url_name == 'chat_detail' %}active{% endif %}">
<i class="bi bi-chat-dots"></i>
<i class="bi bi-chat-left-text"></i>
Messages
</a>
<a href="{% url 'events' %}" class="bottom-nav-item {% if request.resolver_match.url_name == 'events' %}active{% endif %}">
<i class="bi bi-calendar-event"></i>
<i class="bi bi-lightning-charge"></i>
Sessions
</a>
<a href="{% url 'groups:hub' %}" class="bottom-nav-item {% if 'groups' in request.path %}active{% endif %}">
<i class="bi bi-grid"></i>
<i class="bi bi-grid-1x2"></i>
Squads
</a>
<a href="{% url 'my_profile' %}" class="bottom-nav-item {% if request.resolver_match.url_name == 'my_profile' or request.resolver_match.url_name == 'profile_detail' or request.resolver_match.url_name == 'edit_profile' %}active{% endif %}">
<i class="bi bi-person"></i>
<i class="bi bi-person-badge"></i>
Profile
</a>
</div>

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}About - CommonGround{% endblock %}
{% block title %}About - Roster{% endblock %}
{% block content %}
<section class="py-5 bg-light-cg">
@ -8,7 +8,7 @@
<div class="row justify-content-center text-center">
<div class="col-lg-8">
<h1 class="brand-font display-4 mb-4">Our Mission</h1>
<p class="lead text-slate fs-4">CommonGround is a platform for intentional, platonic connections for professionals and individuals navigating life transitions.</p>
<p class="lead text-slate fs-4">Roster is a platform for intentional beauty connections, ritual sharing, and community growth.</p>
<p class="text-muted">Not a dating app — a high-trust social connection ecosystem centered on shared values, life goals, activities, and authentic engagement.</p>
</div>
</div>
@ -43,7 +43,7 @@
<section class="py-5 bg-sand">
<div class="container text-center">
<h2 class="brand-font mb-4">Ready to find your community?</h2>
<a href="{% url 'signup' %}" class="btn btn-primary-cg btn-lg">Join CommonGround</a>
<a href="{% url 'signup' %}" class="btn btn-primary-cg btn-lg">Join Roster</a>
</div>
</section>
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% block title %}Chat with {{ partner.first_name }} | CommonGround{% endblock %}
{% block title %}Chat with {{ partner.first_name }} | Roster{% endblock %}
{% block content %}
<div class="container py-4">

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}Delete Event | CommonGround{% endblock %}
{% block title %}Delete Event | Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}{{ event.title }} | CommonGround{% endblock %}
{% block title %}{{ event.title }} | Roster{% endblock %}
{% block content %}
<div class="container py-4">

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}{{ title }} | CommonGround{% endblock %}
{% block title %}{{ title }} | Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}Sessions | CommonGround{% endblock %}
{% block title %}Sessions | Roster{% endblock %}
{% block content %}
<div class="container-fluid dashboard-container px-lg-5">

View File

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% block title %}Messages | CommonGround{% endblock %}
{% block title %}Messages | Roster{% endblock %}
{% block content %}
<div class="container py-4">

View File

@ -2,7 +2,7 @@
{% load static %}
{% load social_filters %}
{% block title %}Teammates | CommonGround{% endblock %}
{% block title %}Explore | Roster{% endblock %}
{% block content %}
{% if user.is_authenticated %}
@ -12,13 +12,13 @@
<div class="col-lg-2 d-none d-lg-block">
<div class="sticky-sidebar">
<nav class="sidebar-nav">
<a href="{% url 'home' %}" class="nav-link {% if request.resolver_match.url_name == 'home' %}active{% endif %}"><i class="bi bi-compass"></i> Teammates</a>
<a href="{% url 'matches' %}" class="nav-link {% if request.resolver_match.url_name == 'matches' %}active{% endif %}"><i class="bi bi-people"></i> My Teammates</a>
<a href="{% url 'inbox' %}" class="nav-link {% if request.resolver_match.url_name == 'inbox' or request.resolver_match.url_name == 'chat_detail' %}active{% endif %}"><i class="bi bi-chat-dots"></i> Messages</a>
<a href="{% url 'events' %}" class="nav-link {% if request.resolver_match.url_name == 'events' %}active{% endif %}"><i class="bi bi-calendar-event"></i> Sessions</a>
<a href="{% url 'groups:hub' %}" class="nav-link {% if 'groups' in request.path %}active{% endif %}"><i class="bi bi-grid"></i> Squads</a>
<a href="{% url 'home' %}" class="nav-link {% if request.resolver_match.url_name == 'home' %}active{% endif %}"><i class="bi bi-compass"></i> Explore</a>
<a href="{% url 'matches' %}" class="nav-link {% if request.resolver_match.url_name == 'matches' %}active{% endif %}"><i class="bi bi-shield-check"></i> My Roster</a>
<a href="{% url 'inbox' %}" class="nav-link {% if request.resolver_match.url_name == 'inbox' or request.resolver_match.url_name == 'chat_detail' %}active{% endif %}"><i class="bi bi-chat-left-text"></i> Messages</a>
<a href="{% url 'events' %}" class="nav-link {% if request.resolver_match.url_name == 'events' %}active{% endif %}"><i class="bi bi-lightning-charge"></i> Sessions</a>
<a href="{% url 'groups:hub' %}" class="nav-link {% if 'groups' in request.path %}active{% endif %}"><i class="bi bi-grid-1x2"></i> Squads</a>
<a href="{% url 'my_posts' %}" class="nav-link {% if request.resolver_match.url_name == 'my_posts' %}active{% endif %}"><i class="bi bi-journal-text"></i> My Posts</a>
<a href="{% url 'my_profile' %}" class="nav-link {% if request.resolver_match.url_name == 'my_profile' or request.resolver_match.url_name == 'profile_detail' %}active{% endif %}"><i class="bi bi-person"></i> Profile</a>
<a href="{% url 'my_profile' %}" class="nav-link {% if request.resolver_match.url_name == 'my_profile' or request.resolver_match.url_name == 'profile_detail' %}active{% endif %}"><i class="bi bi-person-badge"></i> Profile</a>
<a href="{% url 'settings' %}" class="nav-link {% if request.resolver_match.url_name == 'settings' %}active{% endif %}"><i class="bi bi-gear"></i> Settings</a>
</nav>
</div>
@ -43,21 +43,21 @@
<form action="{% url 'create_post' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="d-flex gap-4 mb-4">
<img src="{{ user.profile.get_avatar_url }}" class="rounded-circle" width="48" height="48" style="object-fit: cover; opacity: 0.9;">
<img src="{{ user.profile.get_avatar_url }}" class="rounded-circle" width="48" height="48" style="object-fit: cover; opacity: 0.9; border: 2px solid var(--r-cyan);">
<div class="flex-grow-1">
<label class="small fw-bold text-muted mb-2">Looking for a squad or sharing a highlight?</label>
<textarea name="content" class="form-control border-0 bg-light" placeholder="Looking for ranked, casual duo, or sharing a play..." rows="2" style="resize: none;"></textarea>
<label class="small fw-bold text-muted mb-2">Share your latest beauty breakthrough or find your ritual squad</label>
<textarea name="content" class="form-control border-0 bg-transparent" placeholder="What's your ritual today? Sharing a discovery or looking for advice..." rows="2" style="resize: none;"></textarea>
</div>
</div>
<div class="d-flex justify-content-between align-items-center pt-2">
<div class="d-flex gap-3">
<select name="post_type" class="form-select form-select-sm border-0 bg-light px-3" style="width: auto; font-size: 0.8rem;">
<select name="post_type" class="form-select form-select-sm border-0 px-3" style="width: auto; font-size: 0.8rem;">
{% for code, label in post_types %}
<option value="{{ code }}">{{ label }}</option>
{% endfor %}
</select>
<div class="upload-btn-wrapper">
<button type="button" class="btn btn-outline-cg border-0 bg-light btn-sm px-3">
<button type="button" class="btn btn-outline-cg border-0 btn-sm px-3">
<i class="bi bi-image text-muted"></i>
</button>
<input type="file" name="image" accept="image/*" />
@ -69,19 +69,19 @@
</div>
</div>
<!-- Suggested Teammates -->
<!-- Suggested Roster -->
<div class="dashboard-section">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="section-header mb-0">Suggested Teammates</h2>
<a href="{% url 'home' %}" class="small text-decoration-none fw-bold text-muted">View All</a>
<h2 class="section-header mb-0">Suggested Roster</h2>
<a href="{% url 'home' %}" class="small text-decoration-none fw-bold text-cyan">View All</a>
</div>
<div class="horizontal-scroll">
{% for profile in suggested_members %}
<div class="suggestion-card">
<a href="{% url 'profile_detail' profile.user.username %}" class="text-decoration-none text-dark">
<img src="{{ profile.get_avatar_url }}" class="rounded-circle mb-3" width="56" height="56" style="object-fit: cover;">
<h6 class="mb-1 small fw-bold text-truncate">{{ profile.user.first_name }} {{ profile.user.last_name|slice:":1" }}.</h6>
<p class="small text-muted mb-3 text-truncate">{{ profile.primary_game.name|default:"Gamer" }}</p>
<div class="suggestion-card text-center">
<a href="{% url 'profile_detail' profile.user.username %}" class="text-decoration-none">
<img src="{{ profile.get_avatar_url }}" class="rounded-circle mb-3" width="56" height="56" style="object-fit: cover; border: 2px solid var(--r-cyan);">
<h6 class="mb-1 small fw-bold text-truncate text-white">{{ profile.user.first_name }} {{ profile.user.last_name|slice:":1" }}.</h6>
<p class="small text-muted mb-3 text-truncate">{{ profile.primary_game.name|default:"Beauty Enthusiast" }}</p>
</a>
<div class="d-grid">
{% if profile.user.id in following_ids %}
@ -227,29 +227,29 @@
<section class="hero-section py-5">
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<h1 class="display-3 mb-4">Find your squad.</h1>
<p class="lead text-muted mb-5 px-lg-5">Match by game, rank, role, schedule, and vibe. The intentional network for gamers.</p>
<div class="col-lg-10 text-center">
<h1 class="hero-title">Build your ultimate Roster.</h1>
<p class="lead text-muted mb-5 px-lg-5" style="font-size: 1.5rem;">Connect with the best in personalized beauty. Find your ritual, share your journey, and build your squad.</p>
<div class="d-flex justify-content-center gap-4">
<a href="{% url 'signup' %}" class="btn btn-primary-cg px-5">Get Started</a>
<a href="{% url 'about' %}" class="btn btn-outline-cg px-5">Learn More</a>
<a href="{% url 'signup' %}" class="btn btn-neon">Join Roster</a>
<a href="{% url 'about' %}" class="btn btn-outline-cg">Learn More</a>
</div>
</div>
</div>
</div>
</section>
<section class="py-5 bg-secondary-section">
<section class="py-5">
<div class="container py-5">
<div class="d-flex justify-content-between align-items-end mb-5 flex-wrap gap-4">
<div>
<h2 class="mb-2">Teammate Discovery</h2>
<p class="text-muted mb-0">Players aligned with your games and rank.</p>
<h2 class="text-metallic h1 mb-2">Discover Experts & Enthusiasts</h2>
<p class="text-muted mb-0">Personalities aligned with your beauty goals and interests.</p>
</div>
<div class="d-flex overflow-auto pb-2 gap-3">
<a href="{% url 'home' %}" class="btn btn-sm {% if not current_intent %}btn-primary-cg{% else %}btn-outline-cg bg-white border-0{% endif %} rounded-pill px-4">All Aligned</a>
<a href="{% url 'home' %}" class="btn btn-sm {% if not current_intent %}btn-neon{% else %}btn-outline-cg border-0{% endif %} rounded-pill px-4">All Profiles</a>
{% for intent in intents %}
<a href="?intent={{ intent.name }}" class="btn btn-sm {% if current_intent == intent.name %}btn-primary-cg{% else %}btn-outline-cg bg-white border-0{% endif %} rounded-pill px-4">{{ intent.name }}</a>
<a href="?intent={{ intent.name }}" class="btn btn-sm {% if current_intent == intent.name %}btn-neon{% else %}btn-outline-cg border-0{% endif %} rounded-pill px-4">{{ intent.name }}</a>
{% endfor %}
</div>
</div>
@ -257,18 +257,18 @@
<div class="row g-5">
{% for profile in profiles %}
<div class="col-md-6 col-lg-4">
<div class="profile-card p-5 h-100 d-flex flex-column border-0 shadow-soft">
<div class="card p-5 h-100 d-flex flex-column border-0">
<div class="d-flex align-items-start mb-4">
<img src="{{ profile.get_avatar_url }}" alt="{{ profile.user.get_full_name }}" class="profile-avatar me-4" style="width: 64px; height: 64px; border-width: 0;">
<img src="{{ profile.get_avatar_url }}" alt="{{ profile.user.get_full_name }}" class="profile-avatar me-4" style="width: 64px; height: 64px; border: 2px solid var(--r-cyan);">
<div class="pt-1">
{% if profile.primary_game %}
<span class="intent-badge mb-2 d-inline-block">{{ profile.primary_game.name }}</span>
{% endif %}
<h3 class="h5 mb-1 fw-bold">{{ profile.user.first_name }} {{ profile.user.last_name|slice:":1" }}.</h3>
<h3 class="h5 mb-1 fw-bold text-white">{{ profile.user.first_name }} {{ profile.user.last_name|slice:":1" }}.</h3>
<p class="text-muted small mb-0"><i class="bi bi-geo-alt me-2"></i> {{ profile.location_city }}</p>
</div>
</div>
<p class="fw-bold text-slate mb-3">{{ profile.platform|upper }} • {{ profile.rank|default:"Casual Player" }}</p>
<p class="fw-bold text-cyan mb-3">{{ profile.platform|upper|default:"BEAUTY" }} • {{ profile.rank|default:"Enthusiast" }}</p>
<p class="text-muted small mb-4 line-clamp-3">{{ profile.bio }}</p>
<div class="mb-5 d-flex flex-wrap gap-2 mt-auto">
@ -278,7 +278,7 @@
</div>
<div class="d-grid mt-2">
<a href="{% url 'signup' %}" class="btn btn-outline-cg">Connect to View</a>
<a href="{% url 'signup' %}" class="btn btn-outline-cg">View Full Roster</a>
</div>
</div>
</div>

View File

@ -2,7 +2,7 @@
{% load static %}
{% load social_filters %}
{% block title %}Teammates | CommonGround{% endblock %}
{% block title %}Teammates | Roster{% endblock %}
{% block content %}
<div class="container-fluid dashboard-container px-lg-5">

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}Player Setup - CommonGround{% endblock %}
{% block title %}Player Setup - Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% block title %}{{ title }} | CommonGround{% endblock %}
{% block title %}{{ title }} | Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}Settings - CommonGround{% endblock %}
{% block title %}Settings - Roster{% endblock %}
{% block content %}
<div class="container py-5">
@ -13,7 +13,10 @@
<a class="nav-link px-0 text-muted" href="#">Privacy & Visibility</a>
<a class="nav-link px-0 text-muted" href="#">Notifications</a>
<hr>
<a class="nav-link px-0 text-danger" href="{% url 'logout' %}">Log Out</a>
<form action="{% url 'logout' %}" method="post" class="d-inline">
{% csrf_token %}
<button type="submit" class="nav-link px-0 text-danger border-0 bg-transparent">Log Out</button>
</form>
</nav>
</div>
</div>

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}Log In - CommonGround{% endblock %}
{% block title %}Log In - Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block title %}Player Setup - CommonGround{% endblock %}
{% block title %}Player Setup - Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -53,7 +53,7 @@ def get_dashboard_context(request):
"following_ids": following_ids,
"post_types": Post.POST_TYPE_CHOICES,
"current_time": timezone.now(),
"project_name": "CommonGround",
"project_name": "Roster",
}
def home(request):

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}{{ group.name }} | CommonGround{% endblock %}
{% block title %}{{ group.name }} | Roster{% endblock %}
{% block content %}
<div class="container-fluid dashboard-container px-lg-5">

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}{% if object %}Edit{% else %}Create{% endif %} Squad | CommonGround{% endblock %}
{% block title %}{% if object %}Edit{% else %}Create{% endif %} Squad | Roster{% endblock %}
{% block content %}
<div class="container py-5">

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load static %}
{% block title %}Squads Hub | CommonGround{% endblock %}
{% block title %}Squads Hub | Roster{% endblock %}
{% block content %}
<div class="container-fluid dashboard-container px-lg-5">

View File

@ -1,202 +1,172 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Playfair+Display:ital,wght@0,400;0,500;0,600;1,400&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;1,400&display=swap');
:root {
--cg-sand-primary: #F4F1EA;
--cg-sand-secondary: #FAF8F4;
--cg-white: #FFFFFF;
--cg-slate: #2C3E50;
--cg-muted: #6B7280;
--cg-blue: #5D9CEC;
--cg-sage: #8FAF9F;
--cg-divider: rgba(44, 62, 80, 0.08);
--cg-success: #789688; /* Muted sage-green for success */
--cg-radius-sm: 8px;
--cg-radius-md: 12px;
--cg-radius-lg: 16px;
--cg-transition: all 250ms ease;
--cg-shadow-soft: 0 4px 12px rgba(44, 62, 80, 0.04);
--r-navy-deep: #050A18;
--r-navy-soft: #0C162D;
--r-cyan: #00B4DB;
--r-cyan-glow: rgba(0, 180, 219, 0.4);
--r-neon-green: #39FF14;
--r-neon-glow: rgba(57, 255, 20, 0.4);
--r-silver: #E0E0E0;
--r-silver-dim: #A0A0A0;
--r-glass-bg: rgba(255, 255, 255, 0.03);
--r-glass-border: rgba(224, 224, 224, 0.2);
--r-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background: linear-gradient(180deg, #F6F3EC 0%, #F2EFE7 100%);
color: var(--cg-slate);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
min-height: 100vh;
background: radial-gradient(circle at top center, #101B38 0%, var(--r-navy-deep) 100%);
background-attachment: fixed;
color: var(--r-silver);
font-family: 'Inter', sans-serif;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
h1, .welcome-header {
font-family: 'Playfair Display', serif;
font-size: 36px;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--cg-slate);
h1, h2, h3, h4, .brand-font {
font-family: 'Playfair Display', serif;
letter-spacing: -0.01em;
}
h2, h3, h4, h5, h6, .section-header, .brand-font {
font-family: 'Playfair Display', serif;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--cg-slate);
/* Metallic Text Effect */
.text-metallic {
background: linear-gradient(135deg, #FFFFFF 0%, var(--r-silver) 50%, var(--r-silver-dim) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.section-header {
font-size: 20px;
}
.text-muted {
color: #6B7280 !important;
}
/* Layout */
/* Glassmorphism Navbar */
.navbar {
background-color: var(--cg-white);
border-bottom: 1px solid rgba(0,0,0,0.05);
padding: 0.75rem 0;
transition: var(--cg-transition);
background: rgba(5, 10, 24, 0.85) !important;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--r-glass-border);
padding: 1rem 0;
}
.navbar-brand img {
height: 24px;
.nav-link {
color: var(--r-silver-dim) !important;
font-weight: 500;
text-transform: uppercase;
font-size: 0.85rem;
letter-spacing: 1px;
transition: var(--r-transition);
}
main {
padding-bottom: 100px;
padding-top: 24px;
.nav-link:hover, .nav-link.active {
color: var(--r-cyan) !important;
text-shadow: 0 0 15px var(--r-cyan-glow);
}
section {
padding: 40px 0;
/* Custom Buttons */
.btn-neon {
background: linear-gradient(135deg, var(--r-cyan) 0%, #0083B0 100%);
color: white !important;
border: none;
font-weight: 700;
padding: 0.9rem 2.2rem;
border-radius: 12px;
transition: var(--r-transition);
text-transform: uppercase;
letter-spacing: 1px;
box-shadow: 0 8px 20px var(--r-cyan-glow);
}
/* Sidebar Navigation */
.sticky-sidebar {
background: #F1EEE6;
border-right: 1px solid rgba(0,0,0,0.05);
padding: 24px 16px;
height: calc(100vh - 72px);
margin-left: -1.5rem;
.btn-neon:hover {
transform: translateY(-3px);
box-shadow: 0 12px 30px var(--r-cyan-glow);
}
.sidebar-nav .nav-link {
padding: 10px 16px;
border-radius: 50px;
margin-bottom: 4px;
gap: 12px;
color: var(--cg-slate);
font-weight: 500;
transition: background-color 0.2s ease;
.btn-outline-cg {
border: 2px solid var(--r-silver-dim);
color: var(--r-silver);
font-weight: 600;
padding: 0.8rem 2rem;
border-radius: 12px;
transition: var(--r-transition);
}
.sidebar-nav .nav-link:hover {
background-color: rgba(0,0,0,0.03);
.btn-outline-cg:hover {
border-color: var(--r-neon-green);
color: var(--r-neon-green);
box-shadow: 0 0 20px var(--r-neon-glow);
background: transparent;
}
.sidebar-nav .nav-link.active {
background-color: rgba(93,156,236,0.12);
color: var(--cg-slate);
opacity: 1;
/* Cards & Panels */
.card, .profile-card, .glass-panel {
background: rgba(255, 255, 255, 0.02) !important;
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);
border: 1px solid var(--r-glass-border) !important;
border-radius: 28px;
transition: var(--r-transition);
color: var(--r-silver) !important;
}
.sidebar-nav .nav-link i {
font-size: 1.1rem;
.card:hover {
border-color: var(--r-cyan) !important;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
background: rgba(255, 255, 255, 0.04) !important;
}
/* Components */
.card, .profile-card, .suggestion-card {
background: var(--cg-white);
border: none;
border-radius: 16px;
box-shadow: 0 10px 30px rgba(0,0,0,0.06);
transition: var(--cg-transition);
overflow: hidden;
/* Hero Title */
.hero-title {
font-size: 5rem;
font-weight: 800;
line-height: 1.1;
margin-bottom: 2rem;
background: linear-gradient(135deg, #FFFFFF 0%, var(--r-silver) 40%, var(--r-cyan) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.stat-widget {
background: var(--cg-white);
border: none;
border-radius: 16px;
box-shadow: 0 6px 16px rgba(0,0,0,0.05);
padding: 24px;
transition: var(--cg-transition);
}
.card:hover, .profile-card:hover, .stat-widget:hover {
transform: translateY(-2px);
box-shadow: 0 12px 36px rgba(0,0,0,0.08);
}
.dashboard-section {
margin-bottom: 40px;
}
/* Badges & Tags */
.intent-badge {
background-color: var(--cg-sand-secondary);
color: var(--cg-blue);
border: 1px solid rgba(93, 156, 236, 0.2);
border-radius: 30px;
padding: 4px 14px;
font-size: 0.8rem;
font-weight: 500;
}
.post-badge {
font-family: 'Inter', sans-serif;
font-size: 0.7rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.03em;
padding: 4px 10px;
border-radius: 6px;
background-color: var(--cg-sand-secondary);
color: var(--cg-muted);
border: 1px solid var(--cg-divider);
}
/* Specific Page Refinements */
.hero-section {
padding: 120px 0 80px;
background-color: var(--cg-sand-primary);
text-align: center;
}
.bottom-nav {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-top: 1px solid var(--cg-divider);
padding: 12px 0;
}
.bottom-nav-item {
color: var(--cg-muted);
}
.bottom-nav-item.active {
color: var(--cg-slate);
}
/* Forms */
/* Form Styling */
.form-control, .form-select {
background-color: var(--cg-white);
border: 1px solid var(--cg-divider);
border-radius: var(--cg-radius-md);
padding: 12px 16px;
transition: var(--cg-transition);
background: rgba(255, 255, 255, 0.05) !important;
border: 1px solid var(--r-glass-border) !important;
border-radius: 14px;
color: white !important;
padding: 0.9rem 1.4rem;
}
.form-control:focus {
border-color: var(--cg-blue);
box-shadow: 0 0 0 4px rgba(93, 156, 236, 0.05);
border-color: var(--r-cyan) !important;
box-shadow: 0 0 15px var(--r-cyan-glow);
background: rgba(255, 255, 255, 0.08) !important;
}
/* Divider Customization */
hr {
border-top: 1px solid var(--cg-divider);
opacity: 1;
/* Mobile Nav Enhancement */
.bottom-nav {
background: rgba(5, 10, 24, 0.95);
backdrop-filter: blur(25px);
border-top: 1px solid var(--r-glass-border);
height: 80px;
}
/* Utils */
.rounded-cg { border-radius: var(--cg-radius-lg); }
.shadow-soft { box-shadow: var(--cg-shadow-soft); }
.bottom-nav-item {
color: var(--r-silver-dim) !important;
transition: var(--r-transition);
}
.bottom-nav-item.active {
color: var(--r-cyan) !important;
text-shadow: 0 0 10px var(--r-cyan-glow);
}
/* Global Overrides */
.bg-light, .bg-white {
background-color: transparent !important;
}
.text-muted {
color: var(--r-silver-dim) !important;
}
/* Scrollbar */
::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: var(--r-navy-deep); }
::-webkit-scrollbar-thumb { background: #1C2541; border-radius: 5px; border: 2px solid var(--r-navy-deep); }
::-webkit-scrollbar-thumb:hover { background: var(--r-cyan); }

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -1,21 +1,172 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;1,400&display=swap');
:root {
--bg-color-start: #6a11cb;
--bg-color-end: #2575fc;
--text-color: #ffffff;
--card-bg-color: rgba(255, 255, 255, 0.01);
--card-border-color: rgba(255, 255, 255, 0.1);
--r-navy-deep: #050A18;
--r-navy-soft: #0C162D;
--r-cyan: #00B4DB;
--r-cyan-glow: rgba(0, 180, 219, 0.4);
--r-neon-green: #39FF14;
--r-neon-glow: rgba(57, 255, 20, 0.4);
--r-silver: #E0E0E0;
--r-silver-dim: #A0A0A0;
--r-glass-bg: rgba(255, 255, 255, 0.03);
--r-glass-border: rgba(224, 224, 224, 0.2);
--r-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
overflow: hidden;
position: relative;
background: radial-gradient(circle at top center, #101B38 0%, var(--r-navy-deep) 100%);
background-attachment: fixed;
color: var(--r-silver);
font-family: 'Inter', sans-serif;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
h1, h2, h3, h4, .brand-font {
font-family: 'Playfair Display', serif;
letter-spacing: -0.01em;
}
/* Metallic Text Effect */
.text-metallic {
background: linear-gradient(135deg, #FFFFFF 0%, var(--r-silver) 50%, var(--r-silver-dim) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Glassmorphism Navbar */
.navbar {
background: rgba(5, 10, 24, 0.85) !important;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--r-glass-border);
padding: 1rem 0;
}
.nav-link {
color: var(--r-silver-dim) !important;
font-weight: 500;
text-transform: uppercase;
font-size: 0.85rem;
letter-spacing: 1px;
transition: var(--r-transition);
}
.nav-link:hover, .nav-link.active {
color: var(--r-cyan) !important;
text-shadow: 0 0 15px var(--r-cyan-glow);
}
/* Custom Buttons */
.btn-neon {
background: linear-gradient(135deg, var(--r-cyan) 0%, #0083B0 100%);
color: white !important;
border: none;
font-weight: 700;
padding: 0.9rem 2.2rem;
border-radius: 12px;
transition: var(--r-transition);
text-transform: uppercase;
letter-spacing: 1px;
box-shadow: 0 8px 20px var(--r-cyan-glow);
}
.btn-neon:hover {
transform: translateY(-3px);
box-shadow: 0 12px 30px var(--r-cyan-glow);
}
.btn-outline-cg {
border: 2px solid var(--r-silver-dim);
color: var(--r-silver);
font-weight: 600;
padding: 0.8rem 2rem;
border-radius: 12px;
transition: var(--r-transition);
}
.btn-outline-cg:hover {
border-color: var(--r-neon-green);
color: var(--r-neon-green);
box-shadow: 0 0 20px var(--r-neon-glow);
background: transparent;
}
/* Cards & Panels */
.card, .profile-card, .glass-panel {
background: rgba(255, 255, 255, 0.02) !important;
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);
border: 1px solid var(--r-glass-border) !important;
border-radius: 28px;
transition: var(--r-transition);
color: var(--r-silver) !important;
}
.card:hover {
border-color: var(--r-cyan) !important;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
background: rgba(255, 255, 255, 0.04) !important;
}
/* Hero Title */
.hero-title {
font-size: 5rem;
font-weight: 800;
line-height: 1.1;
margin-bottom: 2rem;
background: linear-gradient(135deg, #FFFFFF 0%, var(--r-silver) 40%, var(--r-cyan) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Form Styling */
.form-control, .form-select {
background: rgba(255, 255, 255, 0.05) !important;
border: 1px solid var(--r-glass-border) !important;
border-radius: 14px;
color: white !important;
padding: 0.9rem 1.4rem;
}
.form-control:focus {
border-color: var(--r-cyan) !important;
box-shadow: 0 0 15px var(--r-cyan-glow);
background: rgba(255, 255, 255, 0.08) !important;
}
/* Mobile Nav Enhancement */
.bottom-nav {
background: rgba(5, 10, 24, 0.95);
backdrop-filter: blur(25px);
border-top: 1px solid var(--r-glass-border);
height: 80px;
}
.bottom-nav-item {
color: var(--r-silver-dim) !important;
transition: var(--r-transition);
}
.bottom-nav-item.active {
color: var(--r-cyan) !important;
text-shadow: 0 0 10px var(--r-cyan-glow);
}
/* Global Overrides */
.bg-light, .bg-white {
background-color: transparent !important;
}
.text-muted {
color: var(--r-silver-dim) !important;
}
/* Scrollbar */
::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: var(--r-navy-deep); }
::-webkit-scrollbar-thumb { background: #1C2541; border-radius: 5px; border: 2px solid var(--r-navy-deep); }
::-webkit-scrollbar-thumb:hover { background: var(--r-cyan); }

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB