import React, { useState, useEffect, useRef } from 'react'; import { Heart, Handshake, Phone, Mail, MapPin, Menu, X, ArrowRight, Shield, Leaf, Users, Activity, CheckCircle, Gift, Home as HomeIcon, Sun, Anchor, Award, Briefcase, Plus } from 'lucide-react'; // --- CUSTOM CSS INJECTION --- const globalStyles = ` @import url('https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600;9..40,700&family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&display=swap'); :root { --bg: #f9f9f7; /* Warm Off-White */ --bg-light: #ffffff; /* Pure White */ --text: #0b1325; /* Deep Navy / Black */ --accent: #f5a623; /* Warm Amber */ } body { background-color: var(--bg); color: var(--text); font-family: 'DM Sans', sans-serif; overflow-x: hidden; cursor: none; /* Custom cursor */ } h1, h2, h3, .use-serif { font-family: 'Lora', serif; letter-spacing: -0.01em !important; } /* Custom Cursor */ .custom-cursor { position: fixed; top: 0; left: 0; width: 20px; height: 20px; background-color: var(--accent); border-radius: 50%; pointer-events: none; z-index: 9999; transform: translate(-50%, -50%); transition: width 0.2s, height 0.2s, background-color 0.2s; } .custom-cursor.hovering { width: 60px; height: 60px; background-color: var(--text); } /* Typography Utilities */ .text-huge { font-family: 'Lora', serif; font-size: clamp(3.5rem, 9vw, 10rem); line-height: 1; letter-spacing: -0.02em !important; font-weight: 500; text-transform: uppercase; } /* Outline Text for Light Mode */ .text-outline { color: transparent; -webkit-text-stroke: 1.5px rgba(11, 19, 37, 0.3); transition: all 0.3s ease; } .text-outline:hover { color: var(--accent); -webkit-text-stroke: 1.5px var(--accent); } /* Marquee Animation */ .marquee-container { overflow: hidden; white-space: nowrap; width: 100%; display: flex; } .marquee-content { display: inline-block; animation: marquee 25s linear infinite; } @keyframes marquee { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } /* Scroll Reveal Animations */ .reveal-wrap { overflow: hidden; } .reveal-up { opacity: 0; transform: translateY(80px); transition: opacity 1.2s cubic-bezier(0.16, 1, 0.3, 1), transform 1.2s cubic-bezier(0.16, 1, 0.3, 1); } .reveal-up.is-visible { opacity: 1; transform: translateY(0); } .delay-100 { transition-delay: 100ms; } .delay-200 { transition-delay: 200ms; } .delay-300 { transition-delay: 300ms; } /* Interactive Image Hover - Clear and Bright */ .hover-image-reveal { transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); } .hover-image-reveal:hover { transform: scale(1.05); } `; // --- HOOKS & UTILS --- const useScrollReveal = (options = { threshold: 0.1 }) => { const [isVisible, setIsVisible] = useState(false); const ref = useRef(null); useEffect(() => { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setIsVisible(true); observer.unobserve(entry.target); } }, options); if (ref.current) observer.observe(ref.current); return () => observer.disconnect(); }, [options]); return [ref, isVisible]; }; const ScrollReveal = ({ children, className = '', delay = '' }) => { const [ref, isVisible] = useScrollReveal(); return (
{children}
); }; // --- SHARED COMPONENTS --- const Marquee = ({ text }) => (
{text} • {text} • {text} • {text} • 
); const Button = ({ children, variant = 'primary', className = '', onClick, type = 'button' }) => { const baseStyle = "group relative inline-flex items-center justify-center px-8 py-4 font-bold uppercase tracking-widest transition-all overflow-hidden rounded-full shadow-sm"; const variants = { primary: "bg-[#0b1325] text-white hover:bg-[#f5a623] hover:text-[#0b1325]", outline: "border border-black/30 text-[#0b1325] hover:border-[#f5a623] hover:bg-[#f5a623]", }; return ( ); }; // --- VIEWS --- const HomeView = ({ setView }) => { return (
{/* Hero Section */}

Sigiriya, Sri Lanka

REBUILDING
LIVES.

RESTORING HOPE.

Rehab Collective is a Sri Lankan nonprofit organization supporting drug-affected youth through rehabilitation, counseling, family support, and community reintegration.

{/* Main Objective - Large Cards */}

Our Objective

{[ { title: "Recover", num: "01", text: "Counseling, emotional support, routine, and guided recovery." }, { title: "Rebuild", num: "02", text: "Skills training, education support, and confidence building." }, { title: "Reconnect", num: "03", text: "Family awareness, community support, and social acceptance." }, { title: "Integrate", num: "04", text: "Employment pathways, aftercare, and long-term dignity." } ].map((item, idx) => (
{item.num}

{item.title}

{item.text}

))}
{/* Focus Areas - Grid Layout */}

Focus
Areas

Our work begins with youth rehabilitation, but recovery becomes stronger when families, communities, and society are part of the solution.

{[ { name: "Rehab", icon: }, { name: "Youth", icon: }, { name: "Family", icon: }, { name: "Mind", icon: }, { name: "Skills", icon: }, { name: "Community", icon: }, { name: "Animals", icon: }, { name: "Earth", icon: } ].map((area, idx) => (
{area.icon}

{area.name}

))}
{/* Massive Image / Founder Quote */}
Community Support {/* Glassmorphism box to ensure text is readable over the bright image */}

"One life rebuilt can save a family."

Founder's Message

CHAMARA BANDARA

"Rehab Collective was created because Sri Lanka cannot afford to lose its young people to addiction. Every young person deserves a second chance, but that second chance must come with care, discipline, skills, and family support."

{/* Giant CTA */}
setView('get-involved')}>

DONATE
NOW

); }; const AboutView = () => (

ABOUT
US.

Who We Are

Rehab Collective is a Sri Lankan nonprofit organization based in Sigiriya, established with the belief that every young person deserves a second chance. Our primary focus is helping young people affected by drug addiction recover, rebuild, and return to society with dignity.

Community Support
Hope and Youth

Why We Exist

We do not view rehabilitation solely as the process of stopping drug use. We believe true recovery includes emotional healing, family support, discipline, education, vocational training, employment pathways, and community acceptance.

{/* Manifesto / Values */}

CORE VALUES

{[ { title: "DIGNITY", text: "Treating every individual with respect, regardless of their past." }, { title: "COMPASSION", text: "Leading with empathy and understanding in all our care programs." }, { title: "DISCIPLINE", text: "Creating structured, reliable pathways for lasting recovery." }, { title: "FAMILY", text: "Healing the entire family unit, not just the individual." }, { title: "OPPORTUNITY", text: "Providing real skills and pathways to employment." } ].map((val, idx) => (

{val.title}

{val.text}

))}
); const WorkView = () => { const works = [ { num: "01", title: "Drug Rehab & Recovery", desc: "Counseling, emotional care, structured routines, education, vocational training, and reintegration support." }, { num: "02", title: "Family Awareness", desc: "Guiding families on how to support addiction recovery, maintain boundaries, and create safer homes." }, { num: "03", title: "Training & Employment", desc: "Professional, technical, and vocational training for recovered individuals to gain skills and confidence." }, { num: "04", title: "Health & Mental Wellbeing", desc: "Awareness programs on addiction prevention, mental wellbeing, first aid, and healthy living." }, { num: "05", title: "Child & Youth Support", desc: "Supporting vulnerable children and youth, including those affected by bullying, neglect, or isolation." }, { num: "06", title: "Community Care", desc: "Supporting elder homes, estate workers, low-income families, and vulnerable community groups." }, { num: "07", title: "Animal Welfare", desc: "Welfare of street dogs and neglected animals via rescue, shelter, medical care, and public awareness." }, { num: "08", title: "Environment Action", desc: "Plastic reduction, beach cleanups, sustainable tourism, and volunteer engagement." } ]; return (

OUR
WORK.

Rehab Collective works across connected areas that support recovery, dignity, and community wellbeing. Our primary focus is youth drug rehabilitation, supported by holistic community initiatives.

{works.map((work, idx) => (
{work.num}

{work.title}

{work.desc}

))}
); }; const GetInvolvedView = () => { const [activeTab, setActiveTab] = useState('donate'); const [submitted, setSubmitted] = useState(false); const handleSubmit = (e) => { e.preventDefault(); setSubmitted(true); setTimeout(() => setSubmitted(false), 4000); }; const tabs = ['donate', 'volunteer', 'partner', 'help']; return (

GET
INVOLVED.

Recovery needs people.

{/* Massive Tabs Sidebar */}
{tabs.map((tab) => ( ))}

Direct Contact

+94 77 971 7959

info@rehabcollective.org

{/* Brutalist Form Area */}
{submitted ? (

Received.

We will process your request and connect soon.

) : (
{activeTab === 'help' && (

PRIVACY NOTICE: We treat all personal information and referral requests with strict confidentiality.

)}
)}
); }; // --- MAIN APP COMPONENT --- export default function App() { const [currentView, setCurrentView] = useState('home'); const [menuOpen, setMenuOpen] = useState(false); const [cursorPos, setCursorPos] = useState({ x: -100, y: -100 }); const [hovering, setHovering] = useState(false); // Custom Cursor Logic useEffect(() => { const updateCursor = (e) => { setCursorPos({ x: e.clientX, y: e.clientY }); }; const handleMouseOver = (e) => { if (e.target.closest('.interactive') || e.target.tagName.toLowerCase() === 'button' || e.target.tagName.toLowerCase() === 'a') { setHovering(true); } else { setHovering(false); } }; window.addEventListener('mousemove', updateCursor); document.addEventListener('mouseover', handleMouseOver); return () => { window.removeEventListener('mousemove', updateCursor); document.removeEventListener('mouseover', handleMouseOver); }; }, []); // Smooth View Transition const handleNavigate = (view) => { setMenuOpen(false); window.scrollTo({ top: 0, behavior: 'smooth' }); setTimeout(() => setCurrentView(view), 300); // Wait for menu close }; const navLinks = [ { id: 'home', label: 'Home' }, { id: 'about', label: 'About' }, { id: 'work', label: 'Work' }, { id: 'get-involved', label: 'Involve' } ]; return ( <> {/* Custom Cursor */}