electioncampaign / index.html
ramisn's picture
Add 2 files
f6cc3fc verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CampaignPro - Election Campaign Management</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: {
50: '#f0f9ff',
100: '#e0f2fe',
200: '#bae6fd',
300: '#7dd3fc',
400: '#38bdf8',
500: '#0ea5e9',
600: '#0284c7',
700: '#0369a1',
800: '#075985',
900: '#0c4a6e',
},
secondary: {
50: '#f8fafc',
100: '#f1f5f9',
200: '#e2e8f0',
300: '#cbd5e1',
400: '#94a3b8',
500: '#64748b',
600: '#475569',
700: '#334155',
800: '#1e293b',
900: '#0f172a',
},
success: {
50: '#f0fdf4',
100: '#dcfce7',
200: '#bbf7d0',
300: '#86efac',
400: '#4ade80',
500: '#22c55e',
600: '#16a34a',
700: '#15803d',
800: '#166534',
900: '#14532d',
},
warning: {
50: '#fffbeb',
100: '#fef3c7',
200: '#fde68a',
300: '#fcd34d',
400: '#fbbf24',
500: '#f59e0b',
600: '#d97706',
700: '#b45309',
800: '#92400e',
900: '#78350f',
},
danger: {
50: '#fef2f2',
100: '#fee2e2',
200: '#fecaca',
300: '#fca5a5',
400: '#f87171',
500: '#ef4444',
600: '#dc2626',
700: '#b91c1c',
800: '#991b1b',
900: '#7f1d1d',
},
},
fontFamily: {
sans: ['Inter', 'ui-sans-serif', 'system-ui'],
},
}
}
}
</script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
body {
font-family: 'Inter', sans-serif;
background-color: #f8fafc;
}
.sidebar {
transition: all 0.3s ease;
}
.sidebar.collapsed {
width: 80px;
}
.sidebar.collapsed .sidebar-text {
display: none;
}
.sidebar.collapsed .logo-text {
display: none;
}
.sidebar.collapsed .logo-icon {
display: block;
}
.sidebar:not(.collapsed) .logo-icon {
display: none;
}
.content-area {
transition: all 0.3s ease;
}
.content-area.expanded {
margin-left: 80px;
}
.dropdown:hover .dropdown-menu {
display: block;
}
.custom-file-input::-webkit-file-upload-button {
visibility: hidden;
}
.custom-file-input::before {
content: 'Choose file';
display: inline-block;
background: linear-gradient(to bottom, #f9f9f9, #e3e3e3);
border: 1px solid #999;
border-radius: 3px;
padding: 5px 8px;
outline: none;
white-space: nowrap;
cursor: pointer;
text-shadow: 1px 1px #fff;
font-weight: 700;
font-size: 10pt;
}
.custom-file-input:hover::before {
border-color: black;
}
.custom-file-input:active::before {
background: -webkit-linear-gradient(top, #e3e3e3, #f9f9f9);
}
.animate-pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.voter-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
}
.campaign-card:hover {
transform: scale(1.02);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
.tab-button.active {
border-bottom: 3px solid #0ea5e9;
color: #0ea5e9;
}
</style>
</head>
<body class="bg-gray-50">
<!-- Main Container -->
<div class="flex h-screen overflow-hidden">
<!-- Sidebar -->
<div class="sidebar bg-white text-gray-800 w-64 shadow-lg flex flex-col">
<!-- Logo -->
<div class="p-4 flex items-center justify-between border-b border-gray-200">
<div class="flex items-center space-x-3">
<div class="bg-primary-500 text-white p-2 rounded-lg">
<i class="fas fa-vote-yea text-xl"></i>
</div>
<span class="logo-text text-xl font-bold text-primary-700">CampaignPro</span>
<span class="logo-icon text-xl font-bold text-primary-700">
<i class="fas fa-vote-yea"></i>
</span>
</div>
<button id="toggleSidebar" class="text-gray-500 hover:text-gray-700">
<i class="fas fa-bars"></i>
</button>
</div>
<!-- User Profile -->
<div class="p-4 border-b border-gray-200 flex items-center space-x-3">
<div class="relative">
<img src="https://randomuser.me/api/portraits/men/32.jpg" alt="User" class="w-10 h-10 rounded-full">
<span class="absolute bottom-0 right-0 w-3 h-3 bg-success-500 rounded-full border-2 border-white"></span>
</div>
<div class="sidebar-text">
<p class="font-medium">John Doe</p>
<p class="text-xs text-gray-500">Campaign Manager</p>
</div>
</div>
<!-- Navigation -->
<nav class="flex-1 overflow-y-auto">
<ul class="p-2 space-y-1">
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-primary-700 bg-primary-50">
<i class="fas fa-tachometer-alt mr-3"></i>
<span class="sidebar-text">Dashboard</span>
</a>
</li>
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-users mr-3"></i>
<span class="sidebar-text">Voter Management</span>
</a>
</li>
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-bullhorn mr-3"></i>
<span class="sidebar-text">Campaign Content</span>
</a>
</li>
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-paper-plane mr-3"></i>
<span class="sidebar-text">Message Distribution</span>
</a>
</li>
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-chart-line mr-3"></i>
<span class="sidebar-text">Analytics</span>
</a>
</li>
<li>
<a href="#" class="flex items-center p-3 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-cog mr-3"></i>
<span class="sidebar-text">Settings</span>
</a>
</li>
</ul>
<!-- Team Section -->
<div class="p-4 border-t border-gray-200 sidebar-text">
<p class="text-xs font-semibold text-gray-500 uppercase mb-2">Your Team</p>
<div class="space-y-2">
<div class="flex items-center space-x-2">
<img src="https://randomuser.me/api/portraits/women/44.jpg" alt="Team member" class="w-6 h-6 rounded-full">
<span>Sarah Johnson</span>
</div>
<div class="flex items-center space-x-2">
<img src="https://randomuser.me/api/portraits/men/75.jpg" alt="Team member" class="w-6 h-6 rounded-full">
<span>Michael Chen</span>
</div>
<div class="flex items-center space-x-2">
<img src="https://randomuser.me/api/portraits/women/68.jpg" alt="Team member" class="w-6 h-6 rounded-full">
<span>Emma Wilson</span>
</div>
</div>
</div>
</nav>
<!-- Logout -->
<div class="p-4 border-t border-gray-200">
<a href="#" class="flex items-center p-2 rounded-lg text-gray-700 hover:bg-gray-100">
<i class="fas fa-sign-out-alt mr-3"></i>
<span class="sidebar-text">Logout</span>
</a>
</div>
</div>
<!-- Main Content -->
<div class="content-area flex-1 overflow-y-auto">
<!-- Top Navigation -->
<header class="bg-white shadow-sm">
<div class="px-6 py-4 flex items-center justify-between">
<div class="flex items-center space-x-4">
<h1 class="text-xl font-semibold text-gray-800">Voter Management</h1>
<div class="relative">
<input type="text" placeholder="Search voters..." class="pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<i class="fas fa-search absolute left-3 top-3 text-gray-400"></i>
</div>
</div>
<div class="flex items-center space-x-4">
<button class="p-2 text-gray-500 hover:text-gray-700 rounded-full hover:bg-gray-100">
<i class="fas fa-bell"></i>
<span class="sr-only">Notifications</span>
</button>
<div class="dropdown relative">
<button class="flex items-center space-x-2 focus:outline-none">
<img src="https://randomuser.me/api/portraits/men/32.jpg" alt="User" class="w-8 h-8 rounded-full">
<span class="hidden md:inline">John Doe</span>
<i class="fas fa-chevron-down text-xs"></i>
</button>
<div class="dropdown-menu absolute right-0 mt-2 w-48 bg-white rounded-md shadow-lg py-1 z-10 hidden">
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Profile</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Settings</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Logout</a>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content Area -->
<main class="p-6">
<!-- Stats Cards -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-6 mb-6">
<div class="bg-white p-6 rounded-xl shadow-sm border border-gray-100">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Total Voters</p>
<p class="text-2xl font-bold mt-1">12,458</p>
<p class="text-xs text-success-500 mt-1"><i class="fas fa-arrow-up mr-1"></i> 5.2% from last week</p>
</div>
<div class="bg-primary-100 p-3 rounded-lg">
<i class="fas fa-users text-primary-600 text-xl"></i>
</div>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-sm border border-gray-100">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Messages Sent</p>
<p class="text-2xl font-bold mt-1">8,742</p>
<p class="text-xs text-success-500 mt-1"><i class="fas fa-arrow-up mr-1"></i> 12.7% from last week</p>
</div>
<div class="bg-success-100 p-3 rounded-lg">
<i class="fas fa-paper-plane text-success-600 text-xl"></i>
</div>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-sm border border-gray-100">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Response Rate</p>
<p class="text-2xl font-bold mt-1">42%</p>
<p class="text-xs text-danger-500 mt-1"><i class="fas fa-arrow-down mr-1"></i> 3.1% from last week</p>
</div>
<div class="bg-warning-100 p-3 rounded-lg">
<i class="fas fa-chart-pie text-warning-600 text-xl"></i>
</div>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-sm border border-gray-100">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Campaign Materials</p>
<p class="text-2xl font-bold mt-1">156</p>
<p class="text-xs text-success-500 mt-1"><i class="fas fa-arrow-up mr-1"></i> 24 new this week</p>
</div>
<div class="bg-secondary-100 p-3 rounded-lg">
<i class="fas fa-bullhorn text-secondary-600 text-xl"></i>
</div>
</div>
</div>
</div>
<!-- Tabs -->
<div class="bg-white rounded-xl shadow-sm border border-gray-100 mb-6">
<div class="border-b border-gray-200">
<div class="flex space-x-8 px-6">
<button class="tab-button py-4 font-medium text-gray-500 hover:text-primary-700 active" data-tab="voters">
<i class="fas fa-users mr-2"></i>
<span>Voter Database</span>
</button>
<button class="tab-button py-4 font-medium text-gray-500 hover:text-primary-700" data-tab="upload">
<i class="fas fa-upload mr-2"></i>
<span>Upload Voters</span>
</button>
<button class="tab-button py-4 font-medium text-gray-500 hover:text-primary-700" data-tab="campaign">
<i class="fas fa-bullhorn mr-2"></i>
<span>Campaign Content</span>
</button>
<button class="tab-button py-4 font-medium text-gray-500 hover:text-primary-700" data-tab="send">
<i class="fas fa-paper-plane mr-2"></i>
<span>Send Messages</span>
</button>
</div>
</div>
<!-- Tab Contents -->
<div class="p-6">
<!-- Voter Database Tab -->
<div id="voters" class="tab-content active">
<div class="flex justify-between items-center mb-6">
<h2 class="text-lg font-semibold text-gray-800">Voter Database</h2>
<div class="flex space-x-3">
<button class="px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 flex items-center">
<i class="fas fa-filter mr-2"></i>
<span>Filter</span>
</button>
<button class="px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 flex items-center">
<i class="fas fa-download mr-2"></i>
<span>Export</span>
</button>
</div>
</div>
<!-- Filters -->
<div class="bg-gray-50 p-4 rounded-lg mb-6">
<div class="grid grid-cols-1 md:grid-cols-4 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Constituency</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Constituencies</option>
<option>North District</option>
<option>South District</option>
<option>East District</option>
<option>West District</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Village</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Villages</option>
<option>Green Valley</option>
<option>Sunny Hills</option>
<option>River Side</option>
<option>Mountain View</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Age Group</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Ages</option>
<option>18-25</option>
<option>26-35</option>
<option>36-45</option>
<option>46+</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Gender</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Genders</option>
<option>Male</option>
<option>Female</option>
<option>Other</option>
</select>
</div>
</div>
</div>
<!-- Voter Table -->
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Name</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Mobile</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Constituency</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Village</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Age</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/1.jpg" alt="">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">John Smith</div>
<div class="text-sm text-gray-500">Voter ID: V123456</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">+91 9876543210</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">North District</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">Green Valley</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">32</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-success-100 text-success-800">
Active
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-warning-600 hover:text-warning-900 mr-3"><i class="fas fa-edit"></i></button>
<button class="text-danger-600 hover:text-danger-900"><i class="fas fa-trash"></i></button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/women/2.jpg" alt="">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Sarah Johnson</div>
<div class="text-sm text-gray-500">Voter ID: V123457</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">+91 9876543211</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">South District</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">Sunny Hills</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">28</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-success-100 text-success-800">
Active
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-warning-600 hover:text-warning-900 mr-3"><i class="fas fa-edit"></i></button>
<button class="text-danger-600 hover:text-danger-900"><i class="fas fa-trash"></i></button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/3.jpg" alt="">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Michael Brown</div>
<div class="text-sm text-gray-500">Voter ID: V123458</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">+91 9876543212</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">East District</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">River Side</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">45</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-warning-100 text-warning-800">
Undecided
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-warning-600 hover:text-warning-900 mr-3"><i class="fas fa-edit"></i></button>
<button class="text-danger-600 hover:text-danger-900"><i class="fas fa-trash"></i></button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/women/4.jpg" alt="">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Emily Davis</div>
<div class="text-sm text-gray-500">Voter ID: V123459</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">+91 9876543213</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">West District</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">Mountain View</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">38</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-danger-100 text-danger-800">
Opposed
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-warning-600 hover:text-warning-900 mr-3"><i class="fas fa-edit"></i></button>
<button class="text-danger-600 hover:text-danger-900"><i class="fas fa-trash"></i></button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/5.jpg" alt="">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Robert Wilson</div>
<div class="text-sm text-gray-500">Voter ID: V123460</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">+91 9876543214</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">North District</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">Green Valley</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">52</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-success-100 text-success-800">
Active
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-warning-600 hover:text-warning-900 mr-3"><i class="fas fa-edit"></i></button>
<button class="text-danger-600 hover:text-danger-900"><i class="fas fa-trash"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Pagination -->
<div class="flex items-center justify-between mt-4">
<div>
<p class="text-sm text-gray-700">
Showing <span class="font-medium">1</span> to <span class="font-medium">5</span> of <span class="font-medium">12,458</span> voters
</p>
</div>
<div class="flex space-x-2">
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">
Previous
</button>
<button class="px-3 py-1 border border-primary-500 rounded-md text-sm font-medium text-white bg-primary-600 hover:bg-primary-700">
1
</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">
2
</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">
3
</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">
Next
</button>
</div>
</div>
</div>
<!-- Upload Voters Tab -->
<div id="upload" class="tab-content">
<div class="flex justify-between items-center mb-6">
<h2 class="text-lg font-semibold text-gray-800">Upload Voter Data</h2>
</div>
<div class="bg-white border border-dashed border-gray-300 rounded-xl p-8 text-center mb-6">
<div class="mx-auto max-w-md">
<svg class="mx-auto h-12 w-12 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"></path>
</svg>
<h3 class="mt-2 text-sm font-medium text-gray-900">Upload a file</h3>
<p class="mt-1 text-sm text-gray-500">CSV or Excel files only</p>
<div class="mt-6">
<label for="file-upload" class="relative cursor-pointer bg-white rounded-md font-medium text-primary-600 hover:text-primary-500 focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-primary-500">
<span>Select a file</span>
<input id="file-upload" name="file-upload" type="file" class="sr-only" accept=".csv, .xlsx, .xls">
</label>
<p class="pl-1">or drag and drop</p>
</div>
<p class="mt-1 text-xs text-gray-500">CSV template: Name, Mobile, Constituency, Village, Age, Gender</p>
</div>
</div>
<div class="bg-gray-50 p-4 rounded-lg">
<h3 class="text-sm font-medium text-gray-700 mb-3">Upload History</h3>
<div class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 rounded-lg">
<table class="min-w-full divide-y divide-gray-300">
<thead class="bg-gray-100">
<tr>
<th scope="col" class="py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900">File Name</th>
<th scope="col" class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">Status</th>
<th scope="col" class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">Records</th>
<th scope="col" class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">Date</th>
<th scope="col" class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">Actions</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200 bg-white">
<tr>
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900">voters_2023_06_15.csv</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<span class="inline-flex items-center rounded-full bg-success-100 px-2.5 py-0.5 text-xs font-medium text-success-800">
Completed
</span>
</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">1,245</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">June 15, 2023</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900">View</button>
</td>
</tr>
<tr>
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900">north_district.xlsx</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<span class="inline-flex items-center rounded-full bg-success-100 px-2.5 py-0.5 text-xs font-medium text-success-800">
Completed
</span>
</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">856</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">June 10, 2023</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900">View</button>
</td>
</tr>
<tr>
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900">voter_update_2023.csv</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<span class="inline-flex items-center rounded-full bg-danger-100 px-2.5 py-0.5 text-xs font-medium text-danger-800">
Failed
</span>
</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">-</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">June 5, 2023</td>
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
<button class="text-primary-600 hover:text-primary-900">Retry</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Campaign Content Tab -->
<div id="campaign" class="tab-content">
<div class="flex justify-between items-center mb-6">
<h2 class="text-lg font-semibold text-gray-800">Campaign Content</h2>
<button class="px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 flex items-center">
<i class="fas fa-plus mr-2"></i>
<span>Add Content</span>
</button>
</div>
<!-- Content Type Tabs -->
<div class="border-b border-gray-200 mb-6">
<div class="flex space-x-8">
<button class="content-type-tab py-2 font-medium text-gray-500 hover:text-primary-700 active" data-content-type="all">
<span>All Content</span>
</button>
<button class="content-type-tab py-2 font-medium text-gray-500 hover:text-primary-700" data-content-type="images">
<span>Images</span>
</button>
<button class="content-type-tab py-2 font-medium text-gray-500 hover:text-primary-700" data-content-type="videos">
<span>Videos</span>
</button>
<button class="content-type-tab py-2 font-medium text-gray-500 hover:text-primary-700" data-content-type="gifs">
<span>GIFs</span>
</button>
</div>
</div>
<!-- Campaign Content Grid -->
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
<!-- Campaign Card 1 -->
<div class="campaign-card bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden transition duration-300">
<div class="relative pb-2/3 h-48">
<img class="absolute h-full w-full object-cover" src="https://images.unsplash.com/photo-1497366811353-6870744d04b2?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60" alt="Campaign poster">
</div>
<div class="p-4">
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Election Rally Poster</h3>
<p class="text-sm text-gray-500">June 15, 2023</p>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800">
Image
</span>
</div>
<div class="mt-4 flex justify-between">
<span class="text-sm text-gray-500">Used: 245 times</span>
<div class="flex space-x-2">
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-share-alt"></i>
</button>
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-ellipsis-v"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Campaign Card 2 -->
<div class="campaign-card bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden transition duration-300">
<div class="relative pb-2/3 h-48">
<img class="absolute h-full w-full object-cover" src="https://images.unsplash.com/photo-1507679799987-c73779587ccf?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60" alt="Campaign video thumbnail">
<div class="absolute inset-0 flex items-center justify-center bg-black bg-opacity-30">
<div class="w-12 h-12 bg-white bg-opacity-80 rounded-full flex items-center justify-center">
<i class="fas fa-play text-primary-600"></i>
</div>
</div>
</div>
<div class="p-4">
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Campaign Speech</h3>
<p class="text-sm text-gray-500">June 10, 2023</p>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-warning-100 text-warning-800">
Video
</span>
</div>
<div class="mt-4 flex justify-between">
<span class="text-sm text-gray-500">Used: 178 times</span>
<div class="flex space-x-2">
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-share-alt"></i>
</button>
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-ellipsis-v"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Campaign Card 3 -->
<div class="campaign-card bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden transition duration-300">
<div class="relative pb-2/3 h-48">
<img class="absolute h-full w-full object-cover" src="https://media.giphy.com/media/l0HU7JI1QdX7OSQDu/giphy.gif" alt="Campaign GIF">
</div>
<div class="p-4">
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Vote Now GIF</h3>
<p class="text-sm text-gray-500">June 5, 2023</p>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-success-100 text-success-800">
GIF
</span>
</div>
<div class="mt-4 flex justify-between">
<span class="text-sm text-gray-500">Used: 312 times</span>
<div class="flex space-x-2">
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-share-alt"></i>
</button>
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-ellipsis-v"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Campaign Card 4 -->
<div class="campaign-card bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden transition duration-300">
<div class="relative pb-2/3 h-48">
<img class="absolute h-full w-full object-cover" src="https://images.unsplash.com/photo-1552664730-d307ca884978?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60" alt="Campaign poster">
</div>
<div class="p-4">
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Policy Announcement</h3>
<p class="text-sm text-gray-500">May 28, 2023</p>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800">
Image
</span>
</div>
<div class="mt-4 flex justify-between">
<span class="text-sm text-gray-500">Used: 189 times</span>
<div class="flex space-x-2">
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-share-alt"></i>
</button>
<button class="text-gray-400 hover:text-gray-600">
<i class="fas fa-ellipsis-v"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Add New Card -->
<div class="bg-white rounded-xl shadow-sm border-2 border-dashed border-gray-300 flex flex-col items-center justify-center p-6 hover:border-primary-500 transition duration-300 cursor-pointer">
<div class="bg-primary-100 p-3 rounded-full mb-3">
<i class="fas fa-plus text-primary-600 text-xl"></i>
</div>
<h3 class="font-medium text-gray-900 mb-1">Add New Content</h3>
<p class="text-sm text-gray-500 text-center">Upload images, videos or GIFs for your campaign</p>
</div>
</div>
</div>
<!-- Send Messages Tab -->
<div id="send" class="tab-content">
<div class="flex justify-between items-center mb-6">
<h2 class="text-lg font-semibold text-gray-800">Send Campaign Messages</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Step 1: Select Voters -->
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6">
<div class="flex items-center mb-4">
<div class="bg-primary-100 text-primary-800 w-8 h-8 rounded-full flex items-center justify-center mr-3">
1
</div>
<h3 class="font-medium text-gray-900">Select Voters</h3>
</div>
<div class="space-y-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Constituency</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Constituencies</option>
<option>North District</option>
<option>South District</option>
<option>East District</option>
<option>West District</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Village</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Villages</option>
<option>Green Valley</option>
<option>Sunny Hills</option>
<option>River Side</option>
<option>Mountain View</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Age Group</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Ages</option>
<option>18-25</option>
<option>26-35</option>
<option>36-45</option>
<option>46+</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Gender</label>
<select class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500">
<option>All Genders</option>
<option>Male</option>
<option>Female</option>
<option>Other</option>
</select>
</div>
<div class="pt-2">
<button class="w-full px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 flex items-center justify-center">
<i class="fas fa-filter mr-2"></i>
<span>Apply Filters</span>
</button>
</div>
</div>
</div>
<!-- Step 2: Select Content -->
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6">
<div class="flex items-center mb-4">
<div class="bg-primary-100 text-primary-800 w-8 h-8 rounded-full flex items-center justify-center mr-3">
2
</div>
<h3 class="font-medium text-gray-900">Select Content</h3>
</div>
<div class="space-y-4">
<div class="border border-gray-200 rounded-lg p-3">
<div class="flex items-center space-x-3 mb-3">
<div class="flex-shrink-0">
<img class="h-10 w-10 rounded-md" src="https://images.unsplash.com/photo-1497366811353-6870744d04b2?ixlib=rb-1.2.1&auto=format&fit=crop&w=100&q=60" alt="">
</div>
<div class="flex-1 min-w-0">
<p class="text-sm font-medium text-gray-900 truncate">Election Rally Poster</p>
<p class="text-sm text-gray-500 truncate">Image</p>
</div>
<div>
<input type="radio" name="content" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300">
</div>
</div>
</div>
<div class="border border-gray-200 rounded-lg p-3">
<div class="flex items-center space-x-3 mb-3">
<div class="flex-shrink-0 relative">
<img class="h-10 w-10 rounded-md" src="https://images.unsplash.com/photo-1507679799987-c73779587ccf?ixlib=rb-1.2.1&auto=format&fit=crop&w=100&q=60" alt="">
<div class="absolute inset-0 flex items-center justify-center">
<i class="fas fa-play text-white text-xs"></i>
</div>
</div>
<div class="flex-1 min-w-0">
<p class="text-sm font-medium text-gray-900 truncate">Campaign Speech</p>
<p class="text-sm text-gray-500 truncate">Video</p>
</div>
<div>
<input type="radio" name="content" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300">
</div>
</div>
</div>
<div class="border border-gray-200 rounded-lg p-3">
<div class="flex items-center space-x-3 mb-3">
<div class="flex-shrink-0">
<img class="h-10 w-10 rounded-md" src="https://media.giphy.com/media/l0HU7JI1QdX7OSQDu/giphy.gif" alt="">
</div>
<div class="flex-1 min-w-0">
<p class="text-sm font-medium text-gray-900 truncate">Vote Now GIF</p>
<p class="text-sm text-gray-500 truncate">GIF</p>
</div>
<div>
<input type="radio" name="content" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300">
</div>
</div>
</div>
<div class="pt-2">
<button class="w-full px-4 py-2 border border-primary-600 text-primary-600 rounded-lg hover:bg-primary-50 flex items-center justify-center">
<i class="fas fa-plus mr-2"></i>
<span>Browse Content Library</span>
</button>
</div>
</div>
</div>
<!-- Step 3: Review & Send -->
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6">
<div class="flex items-center mb-4">
<div class="bg-primary-100 text-primary-800 w-8 h-8 rounded-full flex items-center justify-center mr-3">
3
</div>
<h3 class="font-medium text-gray-900">Review & Send</h3>
</div>
<div class="space-y-4">
<div class="bg-gray-50 p-4 rounded-lg">
<h4 class="text-sm font-medium text-gray-700 mb-2">Selected Voters</h4>
<p class="text-sm text-gray-600">1,245 voters selected</p>
<p class="text-xs text-gray-500 mt-1">North District, Green Valley, Age 18-45</p>
</div>
<div class="bg-gray-50 p-4 rounded-lg">
<h4 class="text-sm font-medium text-gray-700 mb-2">Selected Content</h4>
<div class="flex items-center space-x-3">
<div class="flex-shrink-0">
<img class="h-10 w-10 rounded-md" src="https://images.unsplash.com/photo-1497366811353-6870744d04b2?ixlib=rb-1.2.1&auto=format&fit=crop&w=100&q=60" alt="">
</div>
<div>
<p class="text-sm font-medium text-gray-900">Election Rally Poster</p>
<p class="text-xs text-gray-500">Image</p>
</div>
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Custom Message (Optional)</label>
<textarea rows="3" class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500" placeholder="Add a personal message to include with the content"></textarea>
</div>
<div class="pt-2">
<button class="w-full px-4 py-2 bg-success-600 text-white rounded-lg hover:bg-success-700 flex items-center justify-center">
<i class="fab fa-whatsapp mr-2 text-xl"></i>
<span>Send via WhatsApp</span>
</button>
</div>
<div class="text-xs text-gray-500 mt-2">
<p>Messages will be sent individually to each voter's WhatsApp number</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<!-- Login Modal -->
<div id="loginModal" class="fixed inset-0 z-50 hidden overflow-y-auto">
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-primary-100 sm:mx-0 sm:h-10 sm:w-10">
<i class="fas fa-user-shield text-primary-600"></i>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left w-full">
<h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-title">Login to CampaignPro</h3>
<div class="mt-4">
<form class="space-y-6">
<div>
<label for="email" class="block text-sm font-medium text-gray-700">Email address</label>
<div class="mt-1">
<input id="email" name="email" type="email" autocomplete="email" required class="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-primary-500 focus:border-primary-500 sm:text-sm">
</div>
</div>
<div>
<label for="password" class="block text-sm font-medium text-gray-700">Password</label>
<div class="mt-1">
<input id="password" name="password" type="password" autocomplete="current-password" required class="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-primary-500 focus:border-primary-500 sm:text-sm">
</div>
</div>
<div class="flex items-center justify-between">
<div class="flex items-center">
<input id="remember-me" name="remember-me" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
<label for="remember-me" class="ml-2 block text-sm text-gray-900">Remember me</label>
</div>
<div class="text-sm">
<a href="#" class="font-medium text-primary-600 hover:text-primary-500">Forgot your password?</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-primary-600 text-base font-medium text-white hover:bg-primary-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 sm:ml-3 sm:w-auto sm:text-sm">Sign in</button>
<button type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">Register</button>
<button type="button" class="close-modal mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">Cancel</button>
</div>
</div>
</div>
</div>
<script>
// Toggle sidebar
document.getElementById('toggleSidebar').addEventListener('click', function() {
document.querySelector('.sidebar').classList.toggle('collapsed');
document.querySelector('.content-area').classList.toggle('expanded');
});
// Tab functionality
const tabButtons = document.querySelectorAll('.tab-button');
const tabContents = document.querySelectorAll('.tab-content');
tabButtons.forEach(button => {
button.addEventListener('click', () => {
const tabId = button.getAttribute('data-tab');
// Remove active class from all buttons and contents
tabButtons.forEach(btn => btn.classList.remove('active'));
tabContents.forEach(content => content.classList.remove('active'));
// Add active class to clicked button and corresponding content
button.classList.add('active');
document.getElementById(tabId).classList.add('active');
});
});
// Content type tabs
const contentTypeTabs = document.querySelectorAll('.content-type-tab');
contentTypeTabs.forEach(button => {
button.addEventListener('click', () => {
contentTypeTabs.forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
// Here you would filter content based on the selected type
});
});
// Login modal
const loginModal = document.getElementById('loginModal');
const closeModalButtons = document.querySelectorAll('.close-modal');
// Show modal (for demo purposes, you might want to trigger this differently)
setTimeout(() => {
loginModal.classList.remove('hidden');
}, 1000);
// Close modal
closeModalButtons.forEach(button => {
button.addEventListener('click', () => {
loginModal.classList.add('hidden');
});
});
// Close modal when clicking outside
loginModal.addEventListener('click', (e) => {
if (e.target === loginModal) {
loginModal.classList.add('hidden');
}
});
// File upload styling
const fileInput = document.getElementById('file-upload');
if (fileInput) {
fileInput.addEventListener('change', function() {
const fileName = this.files[0] ? this.files[0].name : 'No file chosen';
const nextSibling = this.nextElementSibling;
nextSibling.innerText = fileName;
});
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ramisn/electioncampaign" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>