Society Manager — Complete Society & NGO Management Software
Trusted by 5,000+ Organizations Across India
Complete Society & NGO Management Software
Manage Members, Donations, Accounting, Events, Volunteers, Committees, Projects, and Reports from one powerful cloud platform — built for Indian NGOs and societies.
4.9★ from 1,283 reviews on Google & Capterra
💰
Donations Today
₹2,48,500
Society Manager — Dashboard
Total Members
3,842
12.4%
Donations (MTD)
₹18.6L
8.7%
RS
Rajesh Sharma
Life Member
Active
PG
Priya Gupta
Annual Member
Pending
👥
New Members This Week
+48
0
Organizations Registered
Member Management
Maintain a complete digital member directory with profiles, photos, and documents — accessible from anywhere.
Member registration & onboarding
Digital member directory
Printable membership cards
Renewal & expiry tracking
Donation Management
Accept donations online, maintain full donor records, and auto-generate 80G tax receipts instantly.
Online & offline donations
Donor database & history
80G receipt generation
Campaign-wise tracking
Fund Accounting
Double-entry accounting with fund-wise tracking, budget management, and statutory audit-ready reports.
Income & expense ledgers
Budget planning & variance
Trial balance & P&L
Audit-ready reports
Event Management
Plan, schedule, and execute events with registration portals, attendance tracking, and feedback collection.
Event scheduling & calendar
Online registrations
QR-based attendance
Post-event reports
Volunteer Management
Recruit, onboard, and track volunteers with role assignments, performance metrics, and certificates.
Volunteer profiles & skills
Task assignments
Hours logging
Appreciation certificates
Committee Management
Define your organizational structure, assign committee roles, manage meetings, and store resolutions.
Committee hierarchy
Role & permission control
Meeting minutes
Resolution tracking
Project Management
Track social impact projects with milestones, fund utilization reports, and real-time progress dashboards.
Project milestones
Fund utilization tracking
Resource allocation
Impact reports
Communication Center
Reach members instantly via SMS, WhatsApp, and email with automated reminders and announcements.
Bulk SMS & WhatsApp
Email newsletters
Renewal reminders
Event notifications
Reporting & Analytics
Generate 50+ reports covering financials, membership, events, and CSR compliance — export to PDF or Excel.
Financial statements
Member analytics
Activity reports
FCRA & compliance
Document Management
Store, organize, and retrieve all society documents — certificates, policies, meeting records — in the cloud.
Centralized document store
Version control
Role-based access
E-signatures support
Member Self-Service Portal
Give members a personal portal to update profiles, download documents, pay dues, and register for events.
Member login portal
Document downloads
Online fee payments
Event registration
Mobile App Access
Manage your entire society on the go with our iOS and Android apps — full feature parity with the web platform.
iOS & Android apps
Push notifications
Offline capabilities
Biometric login
Easy To Use
No technical training needed. Get started in under 30 minutes.
Secure Data Storage
Bank-grade encryption with daily backups on AWS India servers.
Cloud-Based Access
Access from any device, anywhere — no software installation.
Real-Time Reports
Instant dashboards and downloadable reports, always current.
Automated Workflows
Renewals, receipts, and reminders run on autopilot.
Affordable Pricing
Plans starting at ₹999/month — no hidden charges.
Mobile Friendly
Full-featured iOS & Android apps included in all plans.
24/7 Support
Dedicated support team via chat, phone, and WhatsApp.
📊
Member Growth Rate
Track how your membership grows month over month.
💚
Donation Health
₹18.6L collected this month — 22% above target.
📅
Events This Quarter
14 events completed with 92% attendance.
Charitable Trusts
Full FCRA compliance, 80G receipt generation, and fund accounting built in.
NGOs & NPOs
Donor management, project tracking, and impact reporting for social organizations.
Educational Societies
Manage student welfare funds, scholarship programs, and alumni networks.
Welfare Associations
Housing society management, maintenance billing, and resident portals.
Cultural Organizations
Event management, membership drives, and performance scheduling.
Religious Organizations
Trust accounting, prasad management, and devotee member records.
Community Groups
Neighborhood forums, local clubs, and cooperative societies.
Foundations
CSR fund management, grant tracking, and impact measurement dashboards.
"Society Manager has completely transformed how we operate. Member renewals that used to take days now happen automatically. Our accountant loves the audit-ready reports."
RS
Rajesh Sharma
Secretary, Shri Ram Charitable Trust, Delhi
"We manage 2,800 members across 14 branches with Society Manager. The donation portal alone increased our online collections by 340% in the first year."
PM
Priya Menon
Director, Asha Foundation, Mumbai
"The FCRA compliance reports and 80G receipts save us 20+ hours of manual work every month. Customer support is exceptionally responsive."
AK
Arvind Kumar
Treasurer, Helping Hands NGO, Bangalore
"Managing our 18 committees and 500 volunteers was chaotic before Society Manager. Now everything is structured and our event attendance has doubled."
SR
Sunita Rao
President, Women's Welfare Society, Hyderabad
"The pricing is very reasonable for the features offered. We're a small NGO with limited budget and Society Manager gives us enterprise-grade tools."
MJ
Mohammed Javed
Founder, Green Earth NGO, Pune
"Our annual audit used to be a nightmare. With Society Manager's accounting module, our CA finishes it in days instead of weeks. Highly recommend."
DT
Deepa Tripathi
CFO, Shiksha Foundation, Lucknow
"The bulk WhatsApp and SMS features are game-changers for our 3,000+ member community. Communication that used to take a full day now happens in 5 minutes."
VP
Vikram Patel
General Secretary, Marwari Samaj, Kolkata
"We switched from Excel sheets to Society Manager and it's like going from a bicycle to a sports car. Everything is automated, tracked, and reportable."
NB
Nandini Bose
Executive Director, Disha Trust, Chennai
"The onboarding team was exceptional. We were fully operational within a week, with all our historical data migrated cleanly. Fantastic product and team."
KM
Kiran Murthy
President, Rural Development Society, Mysore
Monthly
Annual
Save 25%
Basic
For Small NGOs
₹
999
749
/month
Perfect for societies with up to 100 members getting started with digital management.
Up to 100 members
Member management
Basic donation tracking
Simple accounting
5 event registrations/year
Email support
Mobile app access
Standard reports (10+)
Get Started Free
⭐ Most Popular
Professional
For Growing Organizations
₹
2,499
1,874
/month
For growing NGOs with up to 1,000 members needing full-featured management tools.
Up to 1,000 members
All Basic features
Online donation portal
80G receipt generation
Full accounting suite
Volunteer management
Unlimited events
Bulk SMS & WhatsApp
Priority phone support
Advanced reports (50+)
Start Free Trial
Enterprise
For Large Institutions
₹
5,999
4,499
/month
For large foundations with unlimited members, custom branding, and dedicated support.
Unlimited members
All Professional features
Custom branding & domain
FCRA compliance module
Multi-branch management
API access & integrations
Custom report builder
Dedicated account manager
24/7 phone & WhatsApp
On-site training
Contact Sales
What is Society Manager and who is it for?
Society Manager is a comprehensive cloud-based NGO management software platform designed for Indian societies, trusts, NGOs, foundations, cultural organizations, welfare associations, and community groups. It helps manage members, donations, accounting, events, volunteers, committees, and statutory compliance from a single unified platform.
How long does it take to set up Society Manager for my organization?
Most organizations are fully operational within 1–3 days. Our onboarding team assists with data migration from Excel, Tally, or other systems, and provides live training sessions. For larger enterprises with complex requirements, complete setup typically takes 5–7 business days.
Does Society Manager support online donation collection?
Yes. Society Manager integrates with Razorpay, PayU, and CCAvenue to accept donations via UPI, credit/debit cards, net banking, and wallets. The system automatically generates 80G receipts, maintains donor records, and provides real-time donation analytics. Donors can also access their donation history through the donor portal.
How does membership management work in Society Manager?
Society Manager provides a complete member lifecycle management system. Members can register online or be added by administrators. The system tracks membership types, subscription status, renewal dates, and payment history. Automated renewal reminders are sent via SMS, email, and WhatsApp before expiry. Digital membership cards with QR codes can be issued instantly.
Is Society Manager compliant with FCRA and 80G requirements?
Yes. The Enterprise plan includes dedicated FCRA compliance modules that generate the required FC-4 reports, separate foreign vs domestic fund tracking, and utilization reports. For 80G, the system auto-generates properly formatted donation receipts that comply with Income Tax Act requirements. Always consult your CA for final compliance review.
What accounting features does Society Manager provide?
Society Manager includes a full double-entry accounting system with fund-wise tracking, income & expense categorization, budget vs actuals comparison, bank reconciliation, trial balance, income & expenditure statements, balance sheet, receipt & payment accounts, and over 30 financial reports. Data can be exported to Tally or Excel for CA review.
Can we manage multiple branches with Society Manager?
Multi-branch management is available in the Enterprise plan. You can set up unlimited branches/chapters, each with their own members, events, and financials — while the head office gets consolidated reports across all branches. Role-based permissions control what each branch administrator can see and do.
How secure is our data on Society Manager?
Security is our highest priority. Society Manager uses 256-bit SSL/TLS encryption for all data in transit, AES-256 encryption for data at rest, daily automated backups stored redundantly, and servers hosted on AWS Mumbai (India) data centers. We comply with DPDP Act requirements and conduct regular third-party security audits. Two-factor authentication is available for all users.
Can Society Manager send bulk SMS and WhatsApp messages?
Yes, the Professional and Enterprise plans include bulk messaging via SMS (through TRAI-registered channels) and WhatsApp Business API. You can send targeted messages to segments like overdue members, event registrants, or specific committees. Templates, scheduling, and delivery reports are all included. WhatsApp supports rich media including images and PDFs.
Does Society Manager have a mobile app?
Yes! Society Manager has native iOS and Android apps available on the App Store and Google Play. The apps provide full access to all features — member management, donation collection, event check-ins via QR codes, reports, and communication tools. Admin and member-facing apps are available separately.
Is there a free trial available?
Absolutely. We offer a 30-day free trial of the Professional plan with no credit card required. During the trial, you get access to all features, free data migration support, and live onboarding sessions. After the trial, you can choose the plan that fits your needs or cancel without any charges.
How does volunteer management work?
Volunteers can register through an online portal with their skills, availability, and interests. Administrators can assign tasks, track hours logged, monitor performance, and generate appreciation certificates. Bulk communication with volunteer groups is built in. You can also segment volunteers by skill, location, or project for targeted outreach.
Can I migrate data from Excel or Tally to Society Manager?
Yes. Our data migration service supports importing from Excel/CSV files (for members, donations, accounts), Tally (accounting data), and other society management software. The migration team handles the process, validates data integrity, and ensures no historical records are lost. Migration is included free in Professional and Enterprise onboarding.
What support options are available?
All plans include email support with 24-hour response time, access to our help center documentation, and video tutorial library. The Professional plan adds live chat and priority phone support. Enterprise customers get a dedicated account manager, 24/7 WhatsApp support, and optional on-site training visits across major Indian cities.
Can we customize Society Manager for our specific society type?
Yes. Society Manager supports configurable membership categories, custom fields for member profiles, custom donation campaigns, tailored report templates, and organization-specific workflows. Enterprise customers can also request custom module development, white-label branding, and API integrations with third-party systems.
NGO Management
📋
June 8, 2026
8 min read
Complete Guide to NGO Registration in India: Section 8, Trust, and Society
Step-by-step guide to registering your NGO under Section 8, Public Trust Act, or Societies Registration Act — with compliance checklist.
Fundraising
💰
May 28, 2026
6 min read
10 Proven Fundraising Strategies for Indian NGOs in 2026
From crowdfunding to CSR partnerships — learn how top Indian NGOs are raising more funds with digital-first approaches.
Accounting
📊
May 15, 2026
10 min read
FCRA Compliance 2026: What Every NGO Treasurer Must Know
Updated guide to FCRA annual returns, permissible activities, bank account requirements, and penalties for non-compliance.
Society Registration
🏛️
May 5, 2026
7 min read
Housing Society Management: Digital Solutions for RWAs in 2026
How Resident Welfare Associations are using management software to streamline maintenance billing, AGMs, and governance.
Volunteer Management
🤝
April 22, 2026
5 min read
How to Build and Retain a High-Impact Volunteer Network
Practical strategies for NGO leaders to recruit, engage, recognize, and retain dedicated volunteers in competitive times.
Governance
⚖️
April 10, 2026
9 min read
Good Governance Framework for Indian NGOs: A Practical Guide
Transparency, accountability, and compliance best practices that every board member of an Indian society or NGO should implement.
/* ============================================================
Society Manager — style.css
Premium SaaS NGO Management Platform
============================================================ */
/* ---------- Google Fonts ---------- */
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,700;1,9..144,400&display=swap');
/* ---------- CSS Custom Properties ---------- */
:root {
/* Color Palette – Light Mode */
--clr-bg: #F7F8FC;
--clr-surface: #FFFFFF;
--clr-surface-2: #EEF0F8;
--clr-border: #DDE1EF;
--clr-primary: #2563EB;
--clr-primary-dark: #1D4ED8;
--clr-primary-light: #EFF4FF;
--clr-accent: #0EA472;
--clr-accent-light: #ECFAF4;
--clr-amber: #F59E0B;
--clr-red: #EF4444;
--clr-purple: #7C3AED;
--clr-text-h: #0F1628;
--clr-text-b: #374151;
--clr-text-muted: #6B7280;
--clr-text-inv: #FFFFFF;
/* Gradients */
--grad-hero: linear-gradient(135deg, #1E3A8A 0%, #2563EB 50%, #0EA472 100%);
--grad-card: linear-gradient(145deg, #FFFFFF, #F0F4FF);
--grad-btn: linear-gradient(135deg, #2563EB, #1D4ED8);
--grad-accent: linear-gradient(135deg, #0EA472, #059669);
--grad-dark: linear-gradient(135deg, #0F1628 0%, #1E2A4A 100%);
/* Shadows */
--shadow-xs: 0 1px 3px rgba(0,0,0,.06);
--shadow-sm: 0 2px 8px rgba(0,0,0,.08);
--shadow-md: 0 6px 24px rgba(37,99,235,.12);
--shadow-lg: 0 16px 48px rgba(37,99,235,.16);
--shadow-xl: 0 24px 64px rgba(0,0,0,.14);
/* Typography */
--font-display: 'Fraunces', Georgia, serif;
--font-body: 'Plus Jakarta Sans', system-ui, sans-serif;
/* Spacing */
--radius-sm: 8px;
--radius-md: 14px;
--radius-lg: 20px;
--radius-xl: 28px;
--radius-full: 9999px;
/* Transitions */
--transition: 0.25s cubic-bezier(.4,0,.2,1);
--transition-slow: 0.5s cubic-bezier(.4,0,.2,1);
}
/* Dark Mode */
[data-theme="dark"] {
--clr-bg: #0A0F1E;
--clr-surface: #111827;
--clr-surface-2: #1A2235;
--clr-border: #2A3548;
--clr-primary: #3B82F6;
--clr-primary-dark: #2563EB;
--clr-primary-light: #1E2D4F;
--clr-accent: #10B981;
--clr-accent-light: #0A2E20;
--clr-amber: #FBBF24;
--clr-text-h: #F1F5FF;
--clr-text-b: #CBD5E1;
--clr-text-muted: #94A3B8;
--clr-text-inv: #0F1628;
--grad-card: linear-gradient(145deg, #111827, #1A2235);
--shadow-md: 0 6px 24px rgba(0,0,0,.3);
--shadow-lg: 0 16px 48px rgba(0,0,0,.4);
}
/* ---------- Reset & Base ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
scroll-behavior: smooth;
font-size: 16px;
}
body {
font-family: var(--font-body);
background: var(--clr-bg);
color: var(--clr-text-b);
line-height: 1.7;
overflow-x: hidden;
transition: background var(--transition-slow), color var(--transition-slow);
}
img { max-width: 100%; display: block; }
a { text-decoration: none; color: inherit; }
ul { list-style: none; }
button { cursor: pointer; font-family: inherit; border: none; background: none; }
input, textarea, select { font-family: inherit; }
/* ---------- Typography ---------- */
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-display);
color: var(--clr-text-h);
line-height: 1.2;
font-weight: 700;
}
h1 { font-size: clamp(2.2rem, 5vw, 3.8rem); }
h2 { font-size: clamp(1.8rem, 4vw, 2.8rem); }
h3 { font-size: clamp(1.2rem, 3vw, 1.6rem); }
.section-eyebrow {
font-family: var(--font-body);
font-size: .8rem;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--clr-accent);
margin-bottom: .75rem;
display: flex;
align-items: center;
gap: .5rem;
}
.section-eyebrow::before {
content: '';
display: block;
width: 24px;
height: 2px;
background: var(--clr-accent);
border-radius: 2px;
}
.section-title { margin-bottom: 1rem; }
.section-subtitle {
color: var(--clr-text-muted);
font-size: 1.1rem;
max-width: 600px;
}
/* ---------- Layout Utilities ---------- */
.container {
width: min(1200px, 100% - 2rem);
margin-inline: auto;
}
.section-header {
margin-bottom: 3.5rem;
}
.section-header.centered {
text-align: center;
}
.section-header.centered .section-eyebrow { justify-content: center; }
.section-header.centered .section-subtitle { margin-inline: auto; }
section { padding: 6rem 0; }
.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2rem; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem; }
/* ---------- Buttons ---------- */
.btn {
display: inline-flex;
align-items: center;
gap: .5rem;
padding: .75rem 1.75rem;
border-radius: var(--radius-full);
font-weight: 600;
font-size: .95rem;
transition: all var(--transition);
white-space: nowrap;
}
.btn-primary {
background: var(--grad-btn);
color: white;
box-shadow: 0 4px 16px rgba(37,99,235,.35);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(37,99,235,.45);
}
.btn-outline {
border: 2px solid var(--clr-border);
color: var(--clr-text-h);
background: transparent;
}
.btn-outline:hover {
border-color: var(--clr-primary);
color: var(--clr-primary);
background: var(--clr-primary-light);
}
.btn-accent {
background: var(--grad-accent);
color: white;
box-shadow: 0 4px 16px rgba(14,164,114,.3);
}
.btn-accent:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(14,164,114,.4);
}
.btn-ghost {
color: var(--clr-primary);
font-weight: 600;
padding: .5rem 0;
}
.btn-ghost:hover { gap: .75rem; }
.btn-ghost i { transition: transform var(--transition); }
.btn-ghost:hover i { transform: translateX(4px); }
.btn-lg { padding: 1rem 2.25rem; font-size: 1.05rem; }
/* ---------- Cards ---------- */
.card {
background: var(--grad-card);
border: 1px solid var(--clr-border);
border-radius: var(--radius-lg);
padding: 2rem;
transition: all var(--transition);
}
.card:hover {
box-shadow: var(--shadow-lg);
transform: translateY(-4px);
border-color: var(--clr-primary);
}
/* ---------- Navigation ---------- */
#header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: rgba(247,248,252,.85);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border-bottom: 1px solid var(--clr-border);
transition: all var(--transition);
}
[data-theme="dark"] #header {
background: rgba(10,15,30,.85);
}
#header.scrolled {
box-shadow: var(--shadow-sm);
}
.nav-container {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 0;
}
.nav-logo {
display: flex;
align-items: center;
gap: .75rem;
font-family: var(--font-display);
font-size: 1.35rem;
font-weight: 700;
color: var(--clr-text-h);
}
.nav-logo-icon {
width: 40px;
height: 40px;
background: var(--grad-btn);
border-radius: 10px;
display: grid;
place-items: center;
color: white;
font-size: 1.1rem;
box-shadow: 0 4px 12px rgba(37,99,235,.3);
}
.nav-logo span { color: var(--clr-primary); }
.nav-links {
display: flex;
align-items: center;
gap: .25rem;
}
.nav-links a {
padding: .5rem .9rem;
border-radius: var(--radius-sm);
font-size: .88rem;
font-weight: 500;
color: var(--clr-text-b);
transition: all var(--transition);
}
.nav-links a:hover {
color: var(--clr-primary);
background: var(--clr-primary-light);
}
.nav-actions {
display: flex;
align-items: center;
gap: .75rem;
}
/* Theme Toggle */
.theme-toggle {
width: 50px;
height: 26px;
background: var(--clr-surface-2);
border: 1px solid var(--clr-border);
border-radius: var(--radius-full);
position: relative;
transition: all var(--transition);
cursor: pointer;
}
.theme-toggle::after {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 18px;
height: 18px;
border-radius: 50%;
background: var(--clr-primary);
transition: all var(--transition);
box-shadow: 0 2px 4px rgba(0,0,0,.2);
}
[data-theme="dark"] .theme-toggle::after {
transform: translateX(24px);
background: var(--clr-amber);
}
.theme-toggle-wrap {
display: flex;
align-items: center;
gap: .5rem;
font-size: .8rem;
color: var(--clr-text-muted);
}
.theme-toggle-wrap i { font-size: .85rem; }
/* Mobile Menu */
.nav-hamburger {
display: none;
flex-direction: column;
gap: 5px;
padding: .5rem;
cursor: pointer;
}
.nav-hamburger span {
display: block;
width: 24px;
height: 2px;
background: var(--clr-text-h);
border-radius: 2px;
transition: all var(--transition);
}
.nav-hamburger.active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); }
.nav-hamburger.active span:nth-child(2) { opacity: 0; transform: translateX(-10px); }
.nav-hamburger.active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); }
.mobile-menu {
display: none;
background: var(--clr-surface);
border-top: 1px solid var(--clr-border);
padding: 1.5rem;
flex-direction: column;
gap: .5rem;
max-height: 0;
overflow: hidden;
transition: max-height var(--transition-slow);
}
.mobile-menu.open { max-height: 600px; }
.mobile-menu a {
padding: .75rem 1rem;
border-radius: var(--radius-sm);
color: var(--clr-text-b);
font-weight: 500;
transition: all var(--transition);
}
.mobile-menu a:hover {
color: var(--clr-primary);
background: var(--clr-primary-light);
}
/* ---------- Hero Section ---------- */
#hero {
padding: 9rem 0 6rem;
background: var(--clr-bg);
position: relative;
overflow: hidden;
}
.hero-blob {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: .12;
pointer-events: none;
}
.hero-blob-1 {
width: 700px; height: 700px;
background: var(--clr-primary);
top: -200px; right: -200px;
}
.hero-blob-2 {
width: 500px; height: 500px;
background: var(--clr-accent);
bottom: -150px; left: -100px;
}
.hero-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
position: relative;
z-index: 1;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: .5rem;
padding: .45rem 1rem;
background: var(--clr-accent-light);
border: 1px solid rgba(14,164,114,.3);
border-radius: var(--radius-full);
font-size: .8rem;
font-weight: 600;
color: var(--clr-accent);
margin-bottom: 1.5rem;
width: fit-content;
}
.hero-badge-dot {
width: 8px; height: 8px;
background: var(--clr-accent);
border-radius: 50%;
animation: pulse-dot 2s infinite;
}
@keyframes pulse-dot {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: .5; transform: scale(.85); }
}
.hero-content h1 {
margin-bottom: 1.25rem;
background: linear-gradient(135deg, var(--clr-text-h) 0%, var(--clr-primary) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-content p {
font-size: 1.15rem;
color: var(--clr-text-muted);
margin-bottom: 2rem;
max-width: 500px;
}
.hero-cta-group {
display: flex;
gap: 1rem;
flex-wrap: wrap;
margin-bottom: 2.5rem;
}
.hero-social-proof {
display: flex;
align-items: center;
gap: 1rem;
}
.hero-avatars {
display: flex;
}
.hero-avatars .avatar {
width: 36px; height: 36px;
border-radius: 50%;
border: 2px solid var(--clr-surface);
overflow: hidden;
margin-left: -8px;
background: linear-gradient(135deg, #2563EB, #0EA472);
display: grid;
place-items: center;
color: white;
font-size: .75rem;
font-weight: 700;
}
.hero-avatars .avatar:first-child { margin-left: 0; }
.hero-social-proof-text {
font-size: .85rem;
color: var(--clr-text-muted);
}
.hero-social-proof-text strong { color: var(--clr-text-h); }
/* Dashboard Mockup */
.hero-visual {
position: relative;
}
.dashboard-mockup {
background: var(--clr-surface);
border-radius: var(--radius-xl);
border: 1px solid var(--clr-border);
box-shadow: var(--shadow-xl);
overflow: hidden;
animation: float 6s ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
.mockup-topbar {
background: var(--clr-surface-2);
padding: .75rem 1.25rem;
display: flex;
align-items: center;
gap: .5rem;
border-bottom: 1px solid var(--clr-border);
}
.mockup-dot {
width: 10px; height: 10px;
border-radius: 50%;
}
.mockup-dot:nth-child(1) { background: #FF5F56; }
.mockup-dot:nth-child(2) { background: #FFBD2E; }
.mockup-dot:nth-child(3) { background: #27C93F; }
.mockup-title {
margin-left: auto;
margin-right: auto;
font-size: .75rem;
font-weight: 600;
color: var(--clr-text-muted);
}
.mockup-body { padding: 1.25rem; }
.mockup-stats {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: .75rem;
margin-bottom: 1rem;
}
.mockup-stat {
background: var(--clr-surface-2);
border-radius: var(--radius-md);
padding: .85rem 1rem;
border: 1px solid var(--clr-border);
}
.mockup-stat-label {
font-size: .65rem;
font-weight: 600;
color: var(--clr-text-muted);
text-transform: uppercase;
letter-spacing: .08em;
margin-bottom: .25rem;
}
.mockup-stat-value {
font-size: 1.2rem;
font-weight: 800;
color: var(--clr-text-h);
font-family: var(--font-body);
}
.mockup-stat-change {
font-size: .65rem;
font-weight: 600;
display: flex;
align-items: center;
gap: .2rem;
margin-top: .2rem;
}
.mockup-stat-change.up { color: var(--clr-accent); }
.mockup-stat-change.down { color: var(--clr-red); }
.mockup-chart-area {
background: var(--clr-surface-2);
border-radius: var(--radius-md);
padding: 1rem;
margin-bottom: .75rem;
border: 1px solid var(--clr-border);
}
.mockup-chart-label {
font-size: .7rem;
font-weight: 700;
color: var(--clr-text-muted);
margin-bottom: .5rem;
}
.mini-bars {
display: flex;
align-items: flex-end;
gap: .3rem;
height: 60px;
}
.mini-bar {
flex: 1;
border-radius: 3px 3px 0 0;
background: linear-gradient(180deg, var(--clr-primary), rgba(37,99,235,.4));
transition: height var(--transition);
}
.mockup-members {
display: flex;
flex-direction: column;
gap: .5rem;
}
.mockup-member-row {
display: flex;
align-items: center;
gap: .75rem;
padding: .5rem;
background: var(--clr-surface-2);
border-radius: var(--radius-sm);
border: 1px solid var(--clr-border);
}
.mockup-member-avatar {
width: 28px; height: 28px;
border-radius: 50%;
background: linear-gradient(135deg, var(--clr-primary), var(--clr-accent));
display: grid;
place-items: center;
color: white;
font-size: .6rem;
font-weight: 700;
flex-shrink: 0;
}
.mockup-member-info { flex: 1; min-width: 0; }
.mockup-member-name {
font-size: .7rem;
font-weight: 600;
color: var(--clr-text-h);
}
.mockup-member-role {
font-size: .6rem;
color: var(--clr-text-muted);
}
.mockup-member-badge {
font-size: .6rem;
padding: .2rem .5rem;
border-radius: var(--radius-full);
font-weight: 600;
}
.badge-active { background: var(--clr-accent-light); color: var(--clr-accent); }
.badge-pending { background: #FEF3C7; color: #92400E; }
.floating-card {
position: absolute;
background: var(--clr-surface);
border-radius: var(--radius-md);
padding: .85rem 1.1rem;
box-shadow: var(--shadow-lg);
border: 1px solid var(--clr-border);
white-space: nowrap;
font-size: .8rem;
animation: float 6s ease-in-out infinite;
}
.floating-card-1 {
top: -30px; left: -30px;
animation-delay: -2s;
}
.floating-card-2 {
bottom: 30px; right: -30px;
animation-delay: -4s;
}
.floating-card-icon { font-size: 1.1rem; margin-bottom: .25rem; }
.floating-card-label { font-size: .65rem; color: var(--clr-text-muted); font-weight: 600; }
.floating-card-value { font-size: 1rem; font-weight: 800; color: var(--clr-text-h); }
/* ---------- Trust / Stats Strip ---------- */
#trust {
padding: 3.5rem 0;
background: var(--clr-surface);
border-top: 1px solid var(--clr-border);
border-bottom: 1px solid var(--clr-border);
}
.trust-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
text-align: center;
}
.trust-item-label {
font-size: .85rem;
color: var(--clr-text-muted);
font-weight: 500;
margin-top: .35rem;
}
.trust-number {
font-family: var(--font-display);
font-size: 2.5rem;
font-weight: 700;
color: var(--clr-primary);
line-height: 1;
}
.trust-divider {
width: 1px;
background: var(--clr-border);
height: 60px;
margin: auto;
}
/* ---------- Features Section ---------- */
#features {
background: var(--clr-bg);
}
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
.feature-card {
background: var(--clr-surface);
border-radius: var(--radius-lg);
padding: 2rem;
border: 1px solid var(--clr-border);
transition: all var(--transition);
position: relative;
overflow: hidden;
}
.feature-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
background: var(--grad-btn);
opacity: 0;
transition: opacity var(--transition);
}
.feature-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-4px); }
.feature-card:hover::before { opacity: 1; }
.feature-icon {
width: 52px; height: 52px;
border-radius: var(--radius-md);
display: grid;
place-items: center;
font-size: 1.4rem;
margin-bottom: 1.25rem;
transition: transform var(--transition);
}
.feature-card:hover .feature-icon { transform: scale(1.1); }
.feature-icon.blue { background: var(--clr-primary-light); color: var(--clr-primary); }
.feature-icon.green { background: var(--clr-accent-light); color: var(--clr-accent); }
.feature-icon.amber { background: #FEF3C7; color: #D97706; }
.feature-icon.purple { background: #EDE9FE; color: var(--clr-purple); }
.feature-icon.red { background: #FEE2E2; color: var(--clr-red); }
[data-theme="dark"] .feature-icon.amber { background: rgba(245,158,11,.15); }
[data-theme="dark"] .feature-icon.purple { background: rgba(124,58,237,.15); }
[data-theme="dark"] .feature-icon.red { background: rgba(239,68,68,.15); }
.feature-card h3 { font-size: 1.1rem; margin-bottom: .6rem; }
.feature-card p { font-size: .9rem; color: var(--clr-text-muted); line-height: 1.65; }
.feature-list {
margin-top: 1rem;
display: flex;
flex-direction: column;
gap: .35rem;
}
.feature-list li {
display: flex;
align-items: center;
gap: .5rem;
font-size: .85rem;
color: var(--clr-text-muted);
}
.feature-list li::before {
content: '✓';
font-size: .75rem;
font-weight: 700;
color: var(--clr-accent);
flex-shrink: 0;
}
/* ---------- Why Choose Section ---------- */
#why-choose {
background: var(--clr-surface);
}
.why-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5rem;
align-items: center;
}
.why-benefits {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.25rem;
margin-top: 2.5rem;
}
.benefit-item {
display: flex;
align-items: flex-start;
gap: .75rem;
padding: 1rem;
border-radius: var(--radius-md);
background: var(--clr-bg);
border: 1px solid var(--clr-border);
transition: all var(--transition);
}
.benefit-item:hover {
border-color: var(--clr-primary);
background: var(--clr-primary-light);
}
.benefit-icon {
width: 38px; height: 38px;
border-radius: var(--radius-sm);
background: var(--clr-primary-light);
color: var(--clr-primary);
display: grid;
place-items: center;
font-size: .95rem;
flex-shrink: 0;
}
.benefit-item h4 { font-size: .9rem; margin-bottom: .2rem; }
.benefit-item p { font-size: .8rem; color: var(--clr-text-muted); line-height: 1.5; }
/* Why visual */
.why-visual-area {
position: relative;
}
.why-card-stack {
position: relative;
height: 380px;
}
.why-card {
position: absolute;
background: var(--clr-surface);
border: 1px solid var(--clr-border);
border-radius: var(--radius-lg);
padding: 1.5rem;
box-shadow: var(--shadow-md);
}
.why-card-main {
width: 280px;
top: 0; left: 50%;
transform: translateX(-50%);
z-index: 3;
}
.why-card-secondary {
width: 240px;
top: 120px; right: 0;
z-index: 2;
opacity: .85;
}
.why-card-tertiary {
width: 240px;
top: 180px; left: 0;
z-index: 1;
opacity: .7;
}
.why-card-icon {
font-size: 1.8rem;
margin-bottom: .75rem;
}
.why-card h4 { font-size: 1rem; margin-bottom: .4rem; }
.why-card p { font-size: .82rem; color: var(--clr-text-muted); }
.progress-bar-wrap { margin-top: 1rem; }
.progress-label {
display: flex;
justify-content: space-between;
font-size: .75rem;
font-weight: 600;
margin-bottom: .3rem;
}
.progress-track {
height: 6px;
background: var(--clr-surface-2);
border-radius: 6px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 6px;
background: var(--grad-btn);
width: 0;
transition: width 1.2s ease;
}
.progress-fill.accent { background: var(--grad-accent); }
/* ---------- Dashboard Preview ---------- */
#dashboard-preview {
background: var(--clr-bg);
}
.charts-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.chart-card {
background: var(--clr-surface);
border-radius: var(--radius-lg);
padding: 1.75rem;
border: 1px solid var(--clr-border);
}
.chart-card h4 {
font-size: .95rem;
margin-bottom: 1.25rem;
display: flex;
align-items: center;
gap: .5rem;
}
.chart-card h4 i { color: var(--clr-primary); }
/* ---------- Solutions Section ---------- */
#solutions {
background: var(--clr-surface);
}
.solutions-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.25rem;
}
.solution-card {
background: var(--clr-bg);
border-radius: var(--radius-lg);
padding: 1.75rem 1.5rem;
border: 1px solid var(--clr-border);
text-align: center;
transition: all var(--transition);
cursor: pointer;
}
.solution-card:hover {
background: var(--clr-primary-light);
border-color: var(--clr-primary);
transform: translateY(-4px);
box-shadow: var(--shadow-md);
}
.solution-card:hover .solution-icon { background: var(--clr-primary); color: white; }
.solution-icon {
width: 60px; height: 60px;
border-radius: var(--radius-md);
margin: 0 auto 1rem;
display: grid;
place-items: center;
font-size: 1.5rem;
background: var(--clr-surface);
color: var(--clr-primary);
border: 1px solid var(--clr-border);
transition: all var(--transition);
}
.solution-card h4 { font-size: .95rem; margin-bottom: .5rem; }
.solution-card p { font-size: .8rem; color: var(--clr-text-muted); line-height: 1.5; }
/* ---------- Testimonials ---------- */
#testimonials {
background: linear-gradient(135deg, #0F1628 0%, #1E2A4A 100%);
position: relative;
overflow: hidden;
}
#testimonials::before {
content: '';
position: absolute;
inset: 0;
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.02'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
#testimonials .section-eyebrow { color: var(--clr-accent); }
#testimonials .section-title { color: #F1F5FF; }
#testimonials .section-subtitle { color: #94A3B8; }
.testimonials-slider {
position: relative;
overflow: hidden;
}
.testimonials-track {
display: flex;
transition: transform .6s cubic-bezier(.4,0,.2,1);
}
.testimonial-slide {
min-width: 100%;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
.testimonial-card {
background: rgba(255,255,255,.06);
border: 1px solid rgba(255,255,255,.1);
border-radius: var(--radius-lg);
padding: 2rem;
backdrop-filter: blur(8px);
transition: all var(--transition);
}
.testimonial-card:hover {
background: rgba(255,255,255,.1);
transform: translateY(-4px);
}
.testimonial-stars { display: flex; gap: .25rem; margin-bottom: 1rem; }
.testimonial-stars i { color: var(--clr-amber); font-size: .85rem; }
.testimonial-text {
color: #CBD5E1;
font-size: .92rem;
line-height: 1.7;
margin-bottom: 1.5rem;
font-style: italic;
}
.testimonial-author { display: flex; align-items: center; gap: .85rem; }
.testimonial-avatar {
width: 44px; height: 44px;
border-radius: 50%;
background: var(--grad-btn);
display: grid;
place-items: center;
color: white;
font-weight: 700;
font-size: .85rem;
flex-shrink: 0;
}
.testimonial-name { font-weight: 700; font-size: .95rem; color: #F1F5FF; }
.testimonial-role { font-size: .8rem; color: #94A3B8; }
.slider-controls {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
margin-top: 2.5rem;
}
.slider-btn {
width: 44px; height: 44px;
border-radius: 50%;
background: rgba(255,255,255,.1);
border: 1px solid rgba(255,255,255,.2);
color: white;
display: grid;
place-items: center;
cursor: pointer;
transition: all var(--transition);
}
.slider-btn:hover {
background: var(--clr-primary);
border-color: var(--clr-primary);
}
.slider-dots { display: flex; gap: .5rem; }
.slider-dot {
width: 8px; height: 8px;
border-radius: 50%;
background: rgba(255,255,255,.3);
transition: all var(--transition);
cursor: pointer;
}
.slider-dot.active { background: var(--clr-primary); width: 24px; border-radius: 4px; }
/* ---------- FAQ Section ---------- */
#faq {
background: var(--clr-bg);
}
.faq-container { max-width: 800px; margin-inline: auto; }
.faq-item {
border: 1px solid var(--clr-border);
border-radius: var(--radius-md);
margin-bottom: .75rem;
overflow: hidden;
background: var(--clr-surface);
transition: border-color var(--transition);
}
.faq-item.open { border-color: var(--clr-primary); }
.faq-question {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.25rem 1.5rem;
cursor: pointer;
font-weight: 600;
color: var(--clr-text-h);
font-size: .97rem;
gap: 1rem;
transition: color var(--transition);
}
.faq-question:hover { color: var(--clr-primary); }
.faq-icon {
width: 28px; height: 28px;
border-radius: 50%;
background: var(--clr-surface-2);
display: grid;
place-items: center;
flex-shrink: 0;
transition: all var(--transition);
font-size: .8rem;
color: var(--clr-text-muted);
}
.faq-item.open .faq-icon {
background: var(--clr-primary);
color: white;
transform: rotate(45deg);
}
.faq-answer {
max-height: 0;
overflow: hidden;
transition: max-height .4s ease, padding .4s ease;
}
.faq-answer-inner {
padding: 0 1.5rem 1.25rem;
color: var(--clr-text-muted);
font-size: .92rem;
line-height: 1.75;
}
.faq-item.open .faq-answer { max-height: 400px; }
/* ---------- Pricing Section ---------- */
#pricing {
background: var(--clr-surface);
}
.pricing-toggle-wrap {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
margin-bottom: 3rem;
}
.pricing-label {
font-weight: 600;
font-size: .92rem;
color: var(--clr-text-muted);
}
.pricing-label.active { color: var(--clr-text-h); }
.pricing-toggle-switch {
width: 50px; height: 26px;
background: var(--clr-primary);
border-radius: var(--radius-full);
position: relative;
cursor: pointer;
transition: all var(--transition);
}
.pricing-toggle-switch::after {
content: '';
position: absolute;
top: 3px; left: 3px;
width: 20px; height: 20px;
border-radius: 50%;
background: white;
transition: transform var(--transition);
box-shadow: 0 2px 4px rgba(0,0,0,.2);
}
.pricing-toggle-switch.annual::after { transform: translateX(24px); }
.pricing-badge {
font-size: .75rem;
padding: .2rem .65rem;
background: var(--clr-accent-light);
color: var(--clr-accent);
border-radius: var(--radius-full);
font-weight: 700;
}
.pricing-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
align-items: start;
}
.pricing-card {
background: var(--clr-bg);
border-radius: var(--radius-xl);
padding: 2.5rem 2rem;
border: 1px solid var(--clr-border);
position: relative;
transition: all var(--transition);
}
.pricing-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-4px); }
.pricing-card.popular {
background: var(--grad-btn);
border-color: transparent;
transform: scale(1.04);
color: white;
box-shadow: var(--shadow-lg);
}
.pricing-card.popular:hover { transform: scale(1.04) translateY(-4px); }
.pricing-card.popular * { color: rgba(255,255,255,.9); }
.pricing-card.popular h3 { color: white; }
.pricing-card.popular .pricing-price { color: white; }
.popular-badge {
position: absolute;
top: -12px; left: 50%;
transform: translateX(-50%);
background: var(--clr-amber);
color: #7C2D12;
font-size: .72rem;
font-weight: 700;
padding: .3rem 1rem;
border-radius: var(--radius-full);
white-space: nowrap;
}
.pricing-tier {
font-size: .8rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .1em;
color: var(--clr-text-muted);
margin-bottom: .5rem;
}
.pricing-card.popular .pricing-tier { color: rgba(255,255,255,.7); }
.pricing-price {
margin: 1rem 0;
display: flex;
align-items: baseline;
gap: .25rem;
}
.price-currency {
font-size: 1.2rem;
font-weight: 700;
font-family: var(--font-body);
}
.price-amount {
font-size: 3rem;
font-weight: 800;
font-family: var(--font-body);
line-height: 1;
color: var(--clr-text-h);
}
.pricing-card.popular .price-amount { color: white; }
.price-period {
font-size: .85rem;
color: var(--clr-text-muted);
}
.pricing-desc {
font-size: .87rem;
color: var(--clr-text-muted);
margin-bottom: 1.75rem;
padding-bottom: 1.75rem;
border-bottom: 1px solid var(--clr-border);
}
.pricing-card.popular .pricing-desc { border-color: rgba(255,255,255,.2); color: rgba(255,255,255,.75); }
.pricing-features { display: flex; flex-direction: column; gap: .75rem; margin-bottom: 2rem; }
.pricing-feature {
display: flex;
align-items: flex-start;
gap: .65rem;
font-size: .88rem;
}
.pricing-feature i {
font-size: .8rem;
color: var(--clr-accent);
margin-top: .2rem;
flex-shrink: 0;
}
.pricing-card.popular .pricing-feature i { color: rgba(255,255,255,.9); }
.pricing-cta { width: 100%; justify-content: center; }
.pricing-card.popular .pricing-cta {
background: white;
color: var(--clr-primary);
box-shadow: 0 4px 16px rgba(0,0,0,.2);
}
.pricing-card.popular .pricing-cta:hover {
background: rgba(255,255,255,.9);
}
/* ---------- Blog Section ---------- */
#blog {
background: var(--clr-bg);
}
.blog-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.75rem;
}
.blog-card {
background: var(--clr-surface);
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--clr-border);
transition: all var(--transition);
}
.blog-card:hover {
box-shadow: var(--shadow-lg);
transform: translateY(-4px);
}
.blog-thumb {
height: 180px;
background: var(--grad-hero);
position: relative;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
}
.blog-category {
position: absolute;
top: 1rem; left: 1rem;
background: white;
color: var(--clr-primary);
font-size: .72rem;
font-weight: 700;
padding: .3rem .75rem;
border-radius: var(--radius-full);
}
.blog-content { padding: 1.5rem; }
.blog-meta {
display: flex;
gap: 1rem;
font-size: .78rem;
color: var(--clr-text-muted);
margin-bottom: .75rem;
font-weight: 500;
}
.blog-meta i { color: var(--clr-primary); }
.blog-card h4 {
font-size: 1.05rem;
margin-bottom: .5rem;
line-height: 1.4;
transition: color var(--transition);
}
.blog-card:hover h4 { color: var(--clr-primary); }
.blog-card p { font-size: .85rem; color: var(--clr-text-muted); line-height: 1.6; }
/* ---------- Contact Section ---------- */
#contact {
background: var(--clr-surface);
}
.contact-inner {
display: grid;
grid-template-columns: 1fr 1.4fr;
gap: 4rem;
align-items: start;
}
.contact-info-list { margin-top: 2rem; display: flex; flex-direction: column; gap: 1.25rem; }
.contact-info-item {
display: flex;
align-items: flex-start;
gap: 1rem;
}
.contact-info-icon {
width: 44px; height: 44px;
border-radius: var(--radius-md);
background: var(--clr-primary-light);
color: var(--clr-primary);
display: grid;
place-items: center;
font-size: 1rem;
flex-shrink: 0;
}
.contact-info-item h4 { font-size: .85rem; font-weight: 700; margin-bottom: .2rem; }
.contact-info-item p { font-size: .88rem; color: var(--clr-text-muted); }
.hours-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: .5rem;
margin-top: 1.5rem;
padding: 1.25rem;
background: var(--clr-bg);
border-radius: var(--radius-md);
border: 1px solid var(--clr-border);
}
.hours-item { font-size: .82rem; }
.hours-item span:first-child { font-weight: 600; color: var(--clr-text-h); }
.hours-item span:last-child { color: var(--clr-text-muted); margin-left: .5rem; }
.contact-form {
background: var(--clr-bg);
border-radius: var(--radius-xl);
padding: 2.5rem;
border: 1px solid var(--clr-border);
}
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
.form-group { display: flex; flex-direction: column; gap: .45rem; }
.form-group label {
font-size: .82rem;
font-weight: 600;
color: var(--clr-text-h);
}
.form-group input,
.form-group textarea,
.form-group select {
padding: .75rem 1rem;
border-radius: var(--radius-sm);
border: 1px solid var(--clr-border);
background: var(--clr-surface);
color: var(--clr-text-h);
font-size: .9rem;
transition: border-color var(--transition), box-shadow var(--transition);
outline: none;
}
.form-group input:focus,
.form-group textarea:focus {
border-color: var(--clr-primary);
box-shadow: 0 0 0 3px rgba(37,99,235,.12);
}
.form-group textarea { resize: vertical; min-height: 120px; }
.form-group.full { grid-column: 1 / -1; }
.map-placeholder {
height: 180px;
background: var(--clr-surface-2);
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
border: 1px solid var(--clr-border);
color: var(--clr-text-muted);
font-size: .9rem;
margin-top: 2rem;
flex-direction: column;
gap: .5rem;
}
.map-placeholder i { font-size: 2rem; color: var(--clr-primary); }
/* ---------- Footer ---------- */
#footer {
background: #0A0F1E;
color: #94A3B8;
padding: 5rem 0 0;
}
.footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr 1fr;
gap: 2.5rem;
padding-bottom: 3rem;
border-bottom: 1px solid rgba(255,255,255,.08);
}
.footer-brand .nav-logo { margin-bottom: 1rem; color: white; }
.footer-brand p { font-size: .88rem; line-height: 1.7; max-width: 280px; }
.footer-col h5 {
font-size: .82rem;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: white;
margin-bottom: 1.25rem;
font-family: var(--font-body);
}
.footer-links { display: flex; flex-direction: column; gap: .6rem; }
.footer-links a {
font-size: .88rem;
color: #94A3B8;
transition: color var(--transition);
}
.footer-links a:hover { color: white; }
.footer-social {
display: flex;
gap: .75rem;
margin-top: 1.5rem;
}
.social-icon {
width: 38px; height: 38px;
border-radius: var(--radius-sm);
background: rgba(255,255,255,.07);
display: grid;
place-items: center;
color: #94A3B8;
font-size: .9rem;
transition: all var(--transition);
border: 1px solid rgba(255,255,255,.1);
}
.social-icon:hover {
background: var(--clr-primary);
color: white;
border-color: var(--clr-primary);
}
.newsletter-form {
display: flex;
gap: .5rem;
margin-top: .75rem;
}
.newsletter-form input {
flex: 1;
padding: .65rem 1rem;
border-radius: var(--radius-sm);
border: 1px solid rgba(255,255,255,.12);
background: rgba(255,255,255,.06);
color: white;
font-size: .875rem;
outline: none;
transition: border-color var(--transition);
}
.newsletter-form input::placeholder { color: #64748B; }
.newsletter-form input:focus { border-color: var(--clr-primary); }
.newsletter-form button {
padding: .65rem 1rem;
background: var(--clr-primary);
color: white;
border-radius: var(--radius-sm);
font-weight: 600;
font-size: .85rem;
transition: all var(--transition);
white-space: nowrap;
}
.newsletter-form button:hover { background: var(--clr-primary-dark); }
.footer-bottom {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.5rem 0;
font-size: .82rem;
}
/* ---------- Back to Top ---------- */
#back-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 46px;
height: 46px;
border-radius: 50%;
background: var(--grad-btn);
color: white;
box-shadow: var(--shadow-md);
display: grid;
place-items: center;
cursor: pointer;
opacity: 0;
transform: translateY(20px);
transition: all var(--transition);
z-index: 999;
border: none;
}
#back-to-top.show {
opacity: 1;
transform: translateY(0);
}
#back-to-top:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-lg);
}
/* ---------- Toast Notifications ---------- */
.toast-container {
position: fixed;
bottom: 1.5rem;
left: 50%;
transform: translateX(-50%);
z-index: 2000;
display: flex;
flex-direction: column;
gap: .5rem;
align-items: center;
pointer-events: none;
}
.toast {
background: var(--clr-surface);
border: 1px solid var(--clr-border);
border-radius: var(--radius-md);
padding: .85rem 1.5rem;
font-size: .88rem;
font-weight: 600;
color: var(--clr-text-h);
box-shadow: var(--shadow-xl);
display: flex;
align-items: center;
gap: .65rem;
pointer-events: auto;
animation: toast-in .3s ease forwards;
max-width: 380px;
}
.toast.success { border-color: var(--clr-accent); }
.toast.success i { color: var(--clr-accent); }
.toast.error { border-color: var(--clr-red); }
.toast.error i { color: var(--clr-red); }
.toast.info { border-color: var(--clr-primary); }
.toast.info i { color: var(--clr-primary); }
@keyframes toast-in {
from { opacity: 0; transform: translateY(20px) scale(.95); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
/* ---------- Scroll Reveal ---------- */
.reveal {
opacity: 0;
transform: translateY(30px);
transition: opacity .7s ease, transform .7s ease;
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
.reveal-delay-1 { transition-delay: .1s; }
.reveal-delay-2 { transition-delay: .2s; }
.reveal-delay-3 { transition-delay: .3s; }
/* ---------- Responsive Design ---------- */
@media (max-width: 1100px) {
.features-grid { grid-template-columns: repeat(2, 1fr); }
.solutions-grid { grid-template-columns: repeat(2, 1fr); }
.footer-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 900px) {
.hero-inner { grid-template-columns: 1fr; }
.hero-visual { order: -1; }
.why-inner { grid-template-columns: 1fr; }
.why-visual-area { display: none; }
.charts-grid { grid-template-columns: 1fr; }
.contact-inner { grid-template-columns: 1fr; }
.pricing-grid { grid-template-columns: 1fr; }
.pricing-card.popular { transform: none; }
.nav-links { display: none; }
.nav-hamburger { display: flex; }
.mobile-menu { display: flex; }
.trust-grid { grid-template-columns: repeat(2, 1fr); }
.testimonial-slide { grid-template-columns: 1fr; }
.blog-grid { grid-template-columns: 1fr; }
.why-benefits { grid-template-columns: 1fr; }
.form-grid { grid-template-columns: 1fr; }
.footer-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 600px) {
section { padding: 4rem 0; }
.features-grid { grid-template-columns: 1fr; }
.solutions-grid { grid-template-columns: 1fr; }
.trust-grid { grid-template-columns: 1fr 1fr; gap: 1.5rem; }
.footer-grid { grid-template-columns: 1fr; }
.hero-cta-group { flex-direction: column; }
.footer-bottom { flex-direction: column; gap: 1rem; text-align: center; }
.mockup-stats { grid-template-columns: 1fr 1fr; }
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
transition-duration: .01ms !important;
}
}
/* ============================================================
Society Manager — script.js
Premium SaaS NGO Management Platform
============================================================ */
'use strict';
/* ──────────────────────────────────────────────────────────
1. THEME TOGGLE
────────────────────────────────────────────────────────── */
const themeToggle = document.getElementById('themeToggle');
const root = document.documentElement;
const savedTheme = localStorage.getItem('smTheme') || 'light';
root.setAttribute('data-theme', savedTheme);
updateThemeIcon(savedTheme);
themeToggle?.addEventListener('click', () => {
const current = root.getAttribute('data-theme');
const next = current === 'dark' ? 'light' : 'dark';
root.setAttribute('data-theme', next);
localStorage.setItem('smTheme', next);
updateThemeIcon(next);
});
function updateThemeIcon(theme) {
const icon = document.getElementById('themeIcon');
if (icon) icon.className = theme === 'dark' ? 'fas fa-sun' : 'fas fa-moon';
}
/* ──────────────────────────────────────────────────────────
2. STICKY HEADER
────────────────────────────────────────────────────────── */
const header = document.getElementById('header');
window.addEventListener('scroll', () => {
header?.classList.toggle('scrolled', window.scrollY > 60);
backToTop?.classList.toggle('show', window.scrollY > 400);
}, { passive: true });
/* ──────────────────────────────────────────────────────────
3. HAMBURGER MENU
────────────────────────────────────────────────────────── */
const hamburger = document.getElementById('hamburger');
const mobileMenu = document.getElementById('mobileMenu');
hamburger?.addEventListener('click', () => {
const open = hamburger.classList.toggle('active');
mobileMenu?.classList.toggle('open', open);
mobileMenu?.setAttribute('aria-expanded', open);
});
mobileMenu?.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
hamburger?.classList.remove('active');
mobileMenu?.classList.remove('open');
});
});
/* ──────────────────────────────────────────────────────────
4. SMOOTH SCROLLING
────────────────────────────────────────────────────────── */
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', e => {
const target = document.querySelector(anchor.getAttribute('href'));
if (!target) return;
e.preventDefault();
const offset = header ? header.offsetHeight + 24 : 80;
const top = target.getBoundingClientRect().top + window.scrollY - offset;
window.scrollTo({ top, behavior: 'smooth' });
});
});
/* ──────────────────────────────────────────────────────────
5. BACK TO TOP
────────────────────────────────────────────────────────── */
const backToTop = document.getElementById('back-to-top');
backToTop?.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' }));
/* ──────────────────────────────────────────────────────────
6. ANIMATED COUNTERS
────────────────────────────────────────────────────────── */
function animateCounter(el, target, suffix = '', duration = 2000) {
const start = performance.now();
const update = (now) => {
const elapsed = now - start;
const progress = Math.min(elapsed / duration, 1);
const ease = 1 - Math.pow(1 - progress, 3);
const current = Math.round(ease * target);
el.textContent = current.toLocaleString() + suffix;
if (progress < 1) requestAnimationFrame(update);
};
requestAnimationFrame(update);
}
const counterObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (!entry.isIntersecting) return;
const el = entry.target;
const target = parseFloat(el.dataset.target);
const suffix = el.dataset.suffix || '';
animateCounter(el, target, suffix);
counterObserver.unobserve(el);
});
}, { threshold: 0.5 });
document.querySelectorAll('[data-counter]').forEach(el => counterObserver.observe(el));
/* ──────────────────────────────────────────────────────────
7. SCROLL REVEAL
────────────────────────────────────────────────────────── */
const revealObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
revealObserver.unobserve(entry.target);
}
});
}, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' });
document.querySelectorAll('.reveal').forEach(el => revealObserver.observe(el));
/* ──────────────────────────────────────────────────────────
8. FAQ ACCORDION
────────────────────────────────────────────────────────── */
document.querySelectorAll('.faq-item').forEach(item => {
const question = item.querySelector('.faq-question');
question?.addEventListener('click', () => {
const isOpen = item.classList.contains('open');
document.querySelectorAll('.faq-item.open').forEach(open => open.classList.remove('open'));
if (!isOpen) item.classList.add('open');
});
});
/* ──────────────────────────────────────────────────────────
9. TESTIMONIAL SLIDER
────────────────────────────────────────────────────────── */
let currentSlide = 0;
const track = document.getElementById('testimonialTrack');
const slides = document.querySelectorAll('.testimonial-slide');
const dots = document.querySelectorAll('.slider-dot');
function goToSlide(n) {
currentSlide = (n + slides.length) % slides.length;
if (track) track.style.transform = `translateX(-${currentSlide * 100}%)`;
dots.forEach((d, i) => d.classList.toggle('active', i === currentSlide));
}
document.getElementById('sliderPrev')?.addEventListener('click', () => goToSlide(currentSlide - 1));
document.getElementById('sliderNext')?.addEventListener('click', () => goToSlide(currentSlide + 1));
dots.forEach((d, i) => d.addEventListener('click', () => goToSlide(i)));
// Auto-advance slider
let autoSlider = setInterval(() => goToSlide(currentSlide + 1), 5000);
const sliderEl = document.querySelector('.testimonials-slider');
sliderEl?.addEventListener('mouseenter', () => clearInterval(autoSlider));
sliderEl?.addEventListener('mouseleave', () => {
autoSlider = setInterval(() => goToSlide(currentSlide + 1), 5000);
});
/* ──────────────────────────────────────────────────────────
10. PRICING TOGGLE
────────────────────────────────────────────────────────── */
const pricingToggle = document.getElementById('pricingToggle');
const monthlyPrices = document.querySelectorAll('.price-monthly');
const annualPrices = document.querySelectorAll('.price-annual');
const monthLabel = document.getElementById('monthLabel');
const annualLabel = document.getElementById('annualLabel');
let isAnnual = false;
pricingToggle?.addEventListener('click', () => {
isAnnual = !isAnnual;
pricingToggle.classList.toggle('annual', isAnnual);
monthlyPrices.forEach(el => el.style.display = isAnnual ? 'none' : 'block');
annualPrices.forEach(el => el.style.display = isAnnual ? 'block' : 'none');
monthLabel?.classList.toggle('active', !isAnnual);
annualLabel?.classList.toggle('active', isAnnual);
});
/* ──────────────────────────────────────────────────────────
11. PROGRESS BARS ANIMATION
────────────────────────────────────────────────────────── */
const progressObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (!entry.isIntersecting) return;
entry.target.querySelectorAll('.progress-fill').forEach(fill => {
const width = fill.dataset.width || '0';
fill.style.width = width + '%';
});
progressObserver.unobserve(entry.target);
});
}, { threshold: 0.3 });
document.querySelectorAll('.why-card-main').forEach(el => progressObserver.observe(el));
/* ──────────────────────────────────────────────────────────
12. CONTACT FORM VALIDATION
────────────────────────────────────────────────────────── */
const contactForm = document.getElementById('contactForm');
contactForm?.addEventListener('submit', e => {
e.preventDefault();
const fields = contactForm.querySelectorAll('[required]');
let valid = true;
fields.forEach(field => {
field.style.borderColor = '';
if (!field.value.trim()) {
field.style.borderColor = 'var(--clr-red)';
valid = false;
}
if (field.type === 'email' && field.value && !isValidEmail(field.value)) {
field.style.borderColor = 'var(--clr-red)';
valid = false;
}
});
if (valid) {
showToast('Message sent! We\'ll get back to you shortly.', 'success');
contactForm.reset();
} else {
showToast('Please fill in all required fields.', 'error');
}
});
function isValidEmail(email) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}
/* Newsletter form */
document.querySelectorAll('.newsletter-form').forEach(form => {
form.addEventListener('submit', e => {
e.preventDefault();
const input = form.querySelector('input[type="email"]');
if (!input?.value || !isValidEmail(input.value)) {
showToast('Please enter a valid email address.', 'error');
return;
}
showToast('Thank you for subscribing!', 'success');
input.value = '';
});
});
/* ──────────────────────────────────────────────────────────
13. TOAST NOTIFICATIONS
────────────────────────────────────────────────────────── */
const toastContainer = document.getElementById('toastContainer');
function showToast(message, type = 'info', duration = 4000) {
if (!toastContainer) return;
const icons = { success: 'fa-check-circle', error: 'fa-exclamation-circle', info: 'fa-info-circle' };
const toast = document.createElement('div');
toast.className = `toast ${type}`;
toast.innerHTML = `
${message} `;
toastContainer.appendChild(toast);
setTimeout(() => {
toast.style.animation = 'toast-in .3s ease reverse';
toast.addEventListener('animationend', () => toast.remove());
}, duration);
}
/* ──────────────────────────────────────────────────────────
14. CHART.JS DASHBOARD CHARTS
────────────────────────────────────────────────────────── */
function initCharts() {
const isDark = () => document.documentElement.getAttribute('data-theme') === 'dark';
const textColor = () => isDark() ? '#CBD5E1' : '#374151';
const gridColor = () => isDark() ? 'rgba(255,255,255,.06)' : 'rgba(0,0,0,.06)';
const chartDefaults = {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
labels: { color: textColor(), font: { family: 'Plus Jakarta Sans', size: 11 } }
}
},
scales: {
x: {
grid: { color: gridColor() },
ticks: { color: textColor(), font: { size: 10 } }
},
y: {
grid: { color: gridColor() },
ticks: { color: textColor(), font: { size: 10 } }
}
}
};
/* Membership Trend */
const memberCtx = document.getElementById('memberChart')?.getContext('2d');
if (memberCtx) {
new Chart(memberCtx, {
type: 'line',
data: {
labels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'],
datasets: [{
label: 'New Members',
data: [42, 58, 65, 78, 85, 110, 125, 148],
borderColor: '#2563EB',
backgroundColor: 'rgba(37,99,235,.1)',
fill: true,
tension: .45,
pointBackgroundColor: '#2563EB',
pointRadius: 4
}, {
label: 'Renewals',
data: [28, 34, 40, 52, 60, 72, 88, 105],
borderColor: '#0EA472',
backgroundColor: 'rgba(14,164,114,.08)',
fill: true,
tension: .45,
pointBackgroundColor: '#0EA472',
pointRadius: 4
}]
},
options: { ...chartDefaults, plugins: { ...chartDefaults.plugins, tooltip: { mode: 'index', intersect: false } } }
});
}
/* Donation Breakdown */
const donationCtx = document.getElementById('donationChart')?.getContext('2d');
if (donationCtx) {
new Chart(donationCtx, {
type: 'doughnut',
data: {
labels: ['One-time', 'Monthly', 'Annual', 'Corporate'],
datasets: [{
data: [35, 28, 22, 15],
backgroundColor: ['#2563EB','#0EA472','#F59E0B','#7C3AED'],
borderWidth: 0,
hoverOffset: 8
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'right',
labels: { color: textColor(), font: { family: 'Plus Jakarta Sans', size: 11 }, padding: 16 }
}
},
cutout: '70%'
}
});
}
/* Monthly Expenses */
const expCtx = document.getElementById('expenseChart')?.getContext('2d');
if (expCtx) {
new Chart(expCtx, {
type: 'bar',
data: {
labels: ['Jan','Feb','Mar','Apr','May','Jun'],
datasets: [{
label: 'Income',
data: [185000, 210000, 190000, 245000, 220000, 280000],
backgroundColor: 'rgba(14,164,114,.75)',
borderRadius: 6
}, {
label: 'Expenses',
data: [130000, 145000, 160000, 180000, 155000, 195000],
backgroundColor: 'rgba(37,99,235,.65)',
borderRadius: 6
}]
},
options: chartDefaults
});
}
/* Event Attendance */
const evtCtx = document.getElementById('eventChart')?.getContext('2d');
if (evtCtx) {
new Chart(evtCtx, {
type: 'line',
data: {
labels: ['Q1','Q2','Q3','Q4'],
datasets: [{
label: 'Events Held',
data: [8, 14, 12, 18],
borderColor: '#7C3AED',
backgroundColor: 'rgba(124,58,237,.1)',
fill: true,
tension: .4,
pointBackgroundColor: '#7C3AED',
pointRadius: 5
}, {
label: 'Avg Attendance',
data: [65, 92, 78, 110],
borderColor: '#F59E0B',
backgroundColor: 'rgba(245,158,11,.08)',
fill: true,
tension: .4,
pointBackgroundColor: '#F59E0B',
pointRadius: 5
}]
},
options: chartDefaults
});
}
}
// Init charts when visible
const chartSection = document.getElementById('dashboard-preview');
if (chartSection) {
const chartObs = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
initCharts();
chartObs.disconnect();
}
}, { threshold: 0.2 });
chartObs.observe(chartSection);
}
/* ──────────────────────────────────────────────────────────
15. MINI BARS IN HERO (animated on load)
────────────────────────────────────────────────────────── */
const barHeights = [35, 55, 40, 70, 50, 85, 60, 90, 45, 75];
document.querySelectorAll('.mini-bar').forEach((bar, i) => {
bar.style.height = '0%';
setTimeout(() => {
bar.style.transition = 'height .6s ease';
bar.style.height = barHeights[i % barHeights.length] + '%';
}, 600 + i * 80);
});
/* ──────────────────────────────────────────────────────────
16. CTA BUTTON INTERACTIONS
────────────────────────────────────────────────────────── */
document.querySelectorAll('.btn-primary, .btn-accent').forEach(btn => {
btn.addEventListener('click', function(e) {
const href = this.getAttribute('href');
if (href && href.startsWith('#')) return;
if (!href && !this.classList.contains('no-toast')) {
showToast('Demo mode — connect your backend to activate.', 'info');
}
});
});
/* ──────────────────────────────────────────────────────────
17. ACTIVE NAV LINK ON SCROLL
────────────────────────────────────────────────────────── */
const sections = document.querySelectorAll('section[id]');
const navLinks = document.querySelectorAll('.nav-links a, .mobile-menu a');
const activeObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
navLinks.forEach(link => {
link.classList.toggle('active-nav', link.getAttribute('href') === `#${entry.target.id}`);
});
}
});
}, { threshold: 0.4 });
sections.forEach(s => activeObserver.observe(s));
/* ──────────────────────────────────────────────────────────
18. KEYBOARD ACCESSIBILITY
────────────────────────────────────────────────────────── */
document.querySelectorAll('.faq-question').forEach(q => {
q.setAttribute('role', 'button');
q.setAttribute('tabindex', '0');
q.addEventListener('keydown', e => {
if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); q.click(); }
});
});
/* ──────────────────────────────────────────────────────────
19. DEMO REQUEST MODAL (Simple)
────────────────────────────────────────────────────────── */
document.querySelectorAll('[data-demo-trigger]').forEach(btn => {
btn.addEventListener('click', () => {
showToast('👋 Request Demo feature activated — schedule your session!', 'info');
});
});
/* ──────────────────────────────────────────────────────────
20. SEARCH FUNCTIONALITY
────────────────────────────────────────────────────────── */
const searchInput = document.getElementById('siteSearch');
searchInput?.addEventListener('input', function() {
const query = this.value.toLowerCase().trim();
if (!query) return;
// Highlight matching FAQ items
document.querySelectorAll('.faq-item').forEach(item => {
const text = item.textContent.toLowerCase();
item.style.display = text.includes(query) ? '' : 'none';
});
});
/* ──────────────────────────────────────────────────────────
21. STARTUP GREETING TOAST
────────────────────────────────────────────────────────── */
window.addEventListener('load', () => {
setTimeout(() => {
showToast('Welcome to Society Manager — your complete NGO solution!', 'info', 3500);
}, 1200);
});