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
0
Organizations Registered
0
Active Members Managed
0
Funds Managed (₹)
0
Events Organized

Platform Features

Everything Your Society Needs

A complete suite of tools built specifically for NGOs, trusts, and registered societies across India.

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

Why Society Manager

Built for India's Social Sector

We understand the unique compliance, language, and operational needs of Indian NGOs. Society Manager is designed from the ground up for you.

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.

Analytics Dashboard

Powerful Insights at a Glance

Real-time charts and analytics to help you make data-driven decisions for your organization.

Membership Trend

Donation Breakdown

Financial Overview

Event Analytics

Solutions For

Designed for Every Type of Organization

Whether you run a small community group or a large charitable foundation, Society Manager adapts to your needs.

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.

Customer Reviews

Trusted by NGO Leaders Across India

Hear from the organizations that have transformed their operations with Society Manager.

"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

Pricing Plans

Simple, Transparent Pricing

No hidden fees. Cancel anytime. All plans include free onboarding support.

Monthly Annual Save 25%
Basic

For Small NGOs

999 /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
Enterprise

For Large Institutions

5,999 /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

FAQ

Frequently Asked Questions

Everything you need to know about Society Manager. Can't find an answer? Contact our team.

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.

Resources & Insights

NGO Management Knowledge Hub

Expert articles on NGO compliance, fundraising, governance, and digital transformation for Indian societies.

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.

Get In Touch

Start Your Free Demo Today

Our team will set up a personalized demo tailored to your organization's needs — at no cost.

We're Here to Help

Whether you have a question about features, pricing, compliance, or just want to see Society Manager in action — reach out and our team will get back to you within 2 hours on business days.

Sales & Support

+91 800 123 4567

+91 800 987 6543

Email Us

info@societymanager.in

support@societymanager.in

Office Address

Level 4, Prestige Tower, MG Road
Bangalore — 560001, Karnataka, India

WhatsApp Support

+91 900 000 1234

Typically replies within 30 minutes

Mon – Fri9:00 AM – 7:00 PM
Saturday10:00 AM – 5:00 PM
SundayEmail Only
Emergency24/7 (Enterprise)

Your information is secure. We never share your details with third parties.

/* ============================================================ 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); });
Scroll to Top