| Server IP : 69.72.244.102 / Your IP : 216.73.216.164 Web Server : LiteSpeed System : Linux s3434.fra1.stableserver.net 4.18.0-513.24.1.lve.2.el8.x86_64 #1 SMP Fri May 24 12:42:50 UTC 2024 x86_64 User : konzalta ( 1271) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/konzalta/constituency.work/ |
Upload File : |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ConstituencyOS β Settings</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
:root{
--green:#1a7a4a;--green-light:#e8f5ee;--green-mid:#2d9e63;
--red:#dc2626;--red-light:#fdecea;
--amber:#f59e0b;--amber-light:#fffbeb;
--blue:#2563eb;--blue-light:#eff6ff;
--purple:#7c3aed;--purple-light:#f5f3ff;
--teal:#0891b2;--teal-light:#ecfeff;
--text:#111827;--muted:#6b7280;--light:#9ca3af;
--border:#e5e7eb;--bg:#f3f4f6;--white:#ffffff;
--sidebar-w:216px;--radius:10px;--radius-sm:6px;
--shadow:0 1px 3px rgba(0,0,0,.08);
}
html,body{height:100%;margin:0;padding:0;}
body{font-family:'Inter',sans-serif;font-size:13px;color:var(--text);background:var(--bg);}
.sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:var(--white);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;z-index:40;}
.sidebar-logo{display:flex;align-items:center;gap:9px;padding:14px 14px 12px;border-bottom:1px solid var(--border);flex-shrink:0;}
.logo-icon{width:38px;height:38px;background:linear-gradient(135deg,#b91c1c,#1a7a4a);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;}
.logo-text strong{display:block;font-size:12.5px;font-weight:700;color:var(--green);}
.logo-text small{font-size:10px;color:var(--muted);line-height:1.3;}
.sidebar-profile{display:flex;align-items:center;gap:9px;padding:11px 14px;border-bottom:1px solid var(--border);flex-shrink:0;}
.s-av{width:36px;height:36px;border-radius:50%;background:#374151;color:white;font-weight:600;font-size:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;}
.s-av .dot{position:absolute;bottom:1px;right:1px;width:8px;height:8px;border-radius:50%;background:var(--green-mid);border:2px solid white;}
.pname{font-size:11.5px;font-weight:600;}.psub{font-size:10.5px;color:var(--muted);}
.sidebar-nav{flex:1;padding:6px 0;}
.nav-item{display:flex;align-items:center;gap:9px;padding:8px 14px;font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;position:relative;transition:background .12s,color .12s;white-space:nowrap;}
.nav-item:hover{background:var(--bg);color:var(--text);}
.nav-item.active{background:var(--green-light);color:var(--green);font-weight:600;}
.nav-item.active::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--green);border-radius:0 2px 2px 0;}
.nav-icon{font-size:14px;width:16px;text-align:center;flex-shrink:0;}
.nav-badge{margin-left:auto;background:var(--red);color:white;font-size:9.5px;font-weight:700;padding:1px 5px;border-radius:10px;}
.nav-new{margin-left:auto;background:var(--green);color:white;font-size:9px;font-weight:700;padding:2px 5px;border-radius:4px;}
.nav-chev{margin-left:auto;font-size:10px;color:var(--light);}
.sidebar-footer{padding:12px 14px;border-top:1px solid var(--border);flex-shrink:0;}
.right-panel{margin-left:var(--sidebar-w);display:flex;flex-direction:column;min-height:100vh;}
.topbar{position:sticky;top:0;z-index:30;height:52px;background:var(--white);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;padding:0 18px;}
.menu-btn{font-size:17px;cursor:pointer;color:var(--muted);}
.const-sel{display:flex;align-items:center;gap:6px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 10px;cursor:pointer;font-size:12px;font-weight:500;}
.srch{flex:1;max-width:360px;display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 11px;color:var(--muted);font-size:12px;}
.srch input{border:none;background:transparent;outline:none;width:100%;font-size:12px;font-family:inherit;}
.srch kbd{margin-left:auto;font-size:9.5px;background:var(--border);padding:1px 5px;border-radius:3px;font-family:inherit;}
.tbr{margin-left:auto;display:flex;align-items:center;gap:8px;}
.ibt{position:relative;width:32px;height:32px;border-radius:50%;background:var(--bg);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:15px;}
.ibt .bdg{position:absolute;top:-3px;right:-3px;background:var(--red);color:white;font-size:9px;font-weight:700;width:15px;height:15px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1.5px solid white;}
.ibt .bdg.grn{background:var(--green-mid);}
.upill{display:flex;align-items:center;gap:7px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px 8px;cursor:pointer;font-size:12px;font-weight:500;}
.content{padding:18px 18px 40px;display:flex;flex-direction:column;gap:14px;}
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--radius-sm);font-size:12px;font-weight:600;cursor:pointer;border:none;transition:background .15s;}
.btn-primary{background:var(--green);color:white;}.btn-primary:hover{background:var(--green-mid);}
.btn-ghost{background:var(--white);color:var(--text);border:1px solid var(--border);}.btn-ghost:hover{background:var(--bg);}
.btn-danger{background:var(--white);color:var(--red);border:1px solid #fecaca;}.btn-danger:hover{background:var(--red-light);}
.page-hdr{display:flex;align-items:flex-start;justify-content:space-between;}
.page-title{font-size:19px;font-weight:700;}
.page-sub{font-size:12px;color:var(--muted);margin-top:2px;}
/* LAYOUT */
.settings-layout{display:grid;grid-template-columns:200px 1fr;gap:18px;align-items:start;}
.settings-nav{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;position:sticky;top:70px;}
.sn-item{display:flex;align-items:center;gap:8px;padding:10px 14px;font-size:12.5px;font-weight:500;color:var(--muted);cursor:pointer;border-left:3px solid transparent;}
.sn-item:hover{background:var(--bg);color:var(--text);}
.sn-item.active{background:var(--green-light);color:var(--green);font-weight:600;border-left-color:var(--green);}
/* PANELS */
.panel{display:none;flex-direction:column;gap:14px;}
.panel.active{display:flex;}
.card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.card-hdr{padding:14px 18px;border-bottom:1px solid var(--border);}
.card-title{font-size:13.5px;font-weight:700;}
.card-sub{font-size:11px;color:var(--muted);margin-top:2px;}
.card-body{padding:18px;display:flex;flex-direction:column;gap:16px;}
/* FORM ELEMENTS */
.field-row{display:flex;gap:14px;}
.field{flex:1;display:flex;flex-direction:column;gap:5px;}
.field-label{font-size:11.5px;font-weight:600;}
.field-hint{font-size:10.5px;color:var(--muted);}
input[type=text],input[type=email],input[type=tel],input[type=password],select,textarea{
border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 12px;
font-size:12.5px;font-family:inherit;color:var(--text);outline:none;transition:border-color .15s;width:100%;
}
input:focus,select:focus,textarea:focus{border-color:var(--green);}
textarea{resize:none;}
/* PROFILE PHOTO */
.profile-photo-row{display:flex;align-items:center;gap:16px;}
.profile-photo{width:64px;height:64px;border-radius:50%;background:#374151;color:white;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;flex-shrink:0;}
/* TOGGLE SWITCH */
.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--border);}
.toggle-row:last-child{border-bottom:none;}
.toggle-label{font-size:12.5px;font-weight:600;}
.toggle-hint{font-size:11px;color:var(--muted);margin-top:2px;}
.switch{position:relative;width:40px;height:22px;flex-shrink:0;}
.switch input{opacity:0;width:0;height:0;}
.slider{position:absolute;cursor:pointer;inset:0;background:var(--border);border-radius:22px;transition:.2s;}
.slider::before{content:'';position:absolute;width:16px;height:16px;left:3px;bottom:3px;background:white;border-radius:50%;transition:.2s;}
input:checked + .slider{background:var(--green);}
input:checked + .slider::before{transform:translateX(18px);}
/* CONNECTOR CARDS (WhatsApp etc.) */
.connector-card{display:flex;align-items:center;gap:14px;padding:16px;border:1px solid var(--border);border-radius:var(--radius);}
.connector-icon{width:46px;height:46px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;}
.connector-name{font-size:13px;font-weight:700;}
.connector-desc{font-size:11px;color:var(--muted);margin-top:2px;}
.connector-status{font-size:10px;font-weight:700;padding:3px 9px;border-radius:20px;flex-shrink:0;}
.connector-status.connected{background:#ecfdf5;color:#065f46;}
.connector-status.notconnected{background:var(--bg);color:var(--muted);}
/* WHATSAPP SETUP PANEL */
.wa-setup{border-top:1px solid var(--border);margin-top:14px;padding-top:16px;}
.wa-step{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--border);}
.wa-step:last-child{border-bottom:none;}
.wa-step-num{width:24px;height:24px;border-radius:50%;background:var(--green-light);color:var(--green);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.wa-step-title{font-size:12px;font-weight:700;}
.wa-step-desc{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.5;}
.wa-number-box{display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;margin-top:8px;}
.wa-number{font-size:14px;font-weight:700;font-family:monospace;}
.copy-btn{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--green);cursor:pointer;background:none;border:none;}
/* WHATSAPP ROUTING RULES */
.rule-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);margin-bottom:8px;}
.rule-row:last-child{margin-bottom:0;}
.rule-icon{font-size:15px;}
.rule-text{flex:1;font-size:12px;}
.rule-text strong{color:var(--green);}
.rule-toggle{flex-shrink:0;}
/* TEAM TABLE */
table{width:100%;border-collapse:collapse;}
thead tr{background:var(--bg);}
th{padding:9px 14px;font-size:10.5px;font-weight:600;color:var(--muted);text-align:left;}
tbody tr{border-bottom:1px solid var(--border);}
tbody tr:last-child{border-bottom:none;}
td{padding:9px 14px;font-size:12px;}
.role-pill{font-size:10px;font-weight:700;padding:2px 8px;border-radius:20px;background:var(--blue-light);color:var(--blue);}
.role-pill.admin{background:var(--green-light);color:var(--green);}
/* DANGER ZONE */
.danger-row{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--border);}
.danger-row:last-child{border-bottom:none;}
/* TEST MESSAGE PREVIEW */
.phone-preview{background:#e5ddd5;border-radius:var(--radius);padding:16px;max-width:300px;}
.wa-bubble{background:white;border-radius:8px;padding:8px 10px;font-size:11.5px;margin-bottom:8px;box-shadow:0 1px 2px rgba(0,0,0,.1);position:relative;}
.wa-bubble.in{margin-right:30px;}
.wa-bubble.out{background:#dcf8c6;margin-left:30px;}
.wa-bubble-time{font-size:9px;color:var(--muted);text-align:right;margin-top:3px;}
.save-bar{position:sticky;bottom:0;background:var(--white);border-top:1px solid var(--border);padding:12px 18px;display:flex;justify-content:flex-end;gap:8px;margin:0 -18px -18px;border-radius:0 0 var(--radius) var(--radius);}
</style>
</head>
<body>
<aside class="sidebar">
<div class="sidebar-logo"><div class="logo-icon">ποΈ</div><div class="logo-text"><strong>ConstituencyOS</strong><small>Everything in your constituency,<br>in one place.</small></div></div>
<div class="sidebar-profile"><div class="s-av">DM<div class="dot"></div></div><div><div class="pname">Hon. David Mwangi, MP</div><div class="psub">Embakasi South</div></div></div>
<nav class="sidebar-nav">
<div class="nav-item" onclick="location.href='index.html'"><span class="nav-icon">π </span>Dashboard</div>
<div class="nav-item" onclick="location.href='constituents.html'"><span class="nav-icon">π₯</span>Constituents</div>
<div class="nav-item" onclick="location.href='complaints.html'"><span class="nav-icon">π</span>Complaints<span class="nav-badge">9</span></div>
<div class="nav-item" onclick="location.href='projects.html'"><span class="nav-icon">π</span>Projects</div>
<div class="nav-item" onclick="location.href='bursaries.html'"><span class="nav-icon">π</span>Bursaries</div>
<div class="nav-item" onclick="location.href='events.html'"><span class="nav-icon">π
</span>Events</div>
<div class="nav-item" onclick="location.href='social_protection.html'"><span class="nav-icon">π‘οΈ</span>Social Protection</div>
<div class="nav-item" onclick="location.href='ward_management.html'"><span class="nav-icon">ποΈ</span>Ward Management</div>
<div class="nav-item" onclick="location.href='finance.html'"><span class="nav-icon">π°</span>Finance</div>
<div class="nav-item" onclick="location.href='documents.html'"><span class="nav-icon">π</span>Documents</div>
<div class="nav-item" onclick="location.href='staff_management.html'"><span class="nav-icon">π€</span>Staff Management</div>
<div class="nav-item" onclick="location.href='reports_analytics.html'"><span class="nav-icon">π</span>Reports & Analytics</div>
<div class="nav-item active"><span class="nav-icon">π€</span>AI Assistant<span class="nav-new">New</span></div>
<div class="nav-item" onclick="location.href='settings.html'"><span class="nav-icon">βοΈ</span>Settings</div>
<div class="nav-item" onclick="location.href='public_portal.html'"><span class="nav-icon">π</span>Public Portal</div>
</nav>
<div class="sidebar-footer"><div style="display:flex;align-items:center;gap:9px;cursor:pointer"><span>β</span><div><div style="font-size:11.5px;font-weight:600">Need Help?</div><div style="font-size:10.5px;color:var(--muted)">Contact Support</div></div></div></div>
</aside>
<div class="right-panel">
<header class="topbar">
<span class="menu-btn">β°</span>
<div class="const-sel"><span style="font-size:13px">ποΈ</span>Embakasi South Constituency<span style="font-size:10px;color:var(--muted)">βΌ</span></div>
<div class="srch"><span>π</span><input type="text" placeholder="Search for anythingβ¦"><kbd>βK</kbd></div>
<div class="tbr">
<div class="ibt">π<div class="bdg">8</div></div>
<div class="ibt">βοΈ<div class="bdg grn">3</div></div>
<div class="upill"><div class="s-av" style="width:26px;height:26px;font-size:10px">DM</div>Hon. David Mwangi<span style="font-size:10px;color:var(--muted)">βΌ</span></div>
</div>
</header>
<main class="content">
<div class="page-hdr">
<div><div class="page-title">Settings</div><div class="page-sub">Manage your account, office configuration, and integrations</div></div>
</div>
<div class="settings-layout">
<!-- Settings nav -->
<div class="settings-nav">
<div class="sn-item active" onclick="showPanel('profile',this)">π€ Profile</div>
<div class="sn-item" onclick="showPanel('office',this)">ποΈ Office Details</div>
<div class="sn-item" onclick="showPanel('notifications',this)">π Notifications</div>
<div class="sn-item" onclick="showPanel('integrations',this)">π Integrations</div>
<div class="sn-item" onclick="showPanel('team',this)">π₯ Team & Roles</div>
<div class="sn-item" onclick="showPanel('security',this)">π Security</div>
<div class="sn-item" onclick="showPanel('danger',this)">β οΈ Danger Zone</div>
</div>
<!-- PANELS -->
<div>
<!-- PROFILE -->
<div class="panel active" id="panel-profile">
<div class="card">
<div class="card-hdr"><div class="card-title">Profile Information</div><div class="card-sub">Your personal details as shown across the platform</div></div>
<div class="card-body">
<div class="profile-photo-row">
<div class="profile-photo">DM</div>
<div>
<button class="btn btn-ghost">Change Photo</button>
<div class="field-hint" style="margin-top:6px;">JPG or PNG, max 2MB</div>
</div>
</div>
<div class="field-row">
<div class="field"><label class="field-label">Full Name</label><input type="text" value="Hon. David Mwangi"></div>
<div class="field"><label class="field-label">Title</label><input type="text" value="Member of Parliament"></div>
</div>
<div class="field-row">
<div class="field"><label class="field-label">Email Address</label><input type="email" value="david.mwangi@parliament.go.ke"></div>
<div class="field"><label class="field-label">Phone Number</label><input type="tel" value="+254 712 345 678"></div>
</div>
<div class="field"><label class="field-label">Bio</label><textarea rows="3">Member of Parliament for Embakasi South Constituency, serving since 2022. Focused on water access, education, and youth empowerment.</textarea></div>
<div class="save-bar"><button class="btn btn-ghost">Cancel</button><button class="btn btn-primary">Save Changes</button></div>
</div>
</div>
</div>
<!-- OFFICE -->
<div class="panel" id="panel-office">
<div class="card">
<div class="card-hdr"><div class="card-title">Office Details</div><div class="card-sub">Constituency office information shown to the public and staff</div></div>
<div class="card-body">
<div class="field-row">
<div class="field"><label class="field-label">Constituency Name</label><input type="text" value="Embakasi South"></div>
<div class="field"><label class="field-label">County</label><input type="text" value="Nairobi County"></div>
</div>
<div class="field"><label class="field-label">Office Address</label><input type="text" value="Embakasi South Constituency Office, Pipeline Road, Nairobi"></div>
<div class="field-row">
<div class="field"><label class="field-label">Office Phone</label><input type="tel" value="+254 20 123 4567"></div>
<div class="field"><label class="field-label">Office Email</label><input type="email" value="info@embakasisouth.go.ke"></div>
</div>
<div class="field-row">
<div class="field"><label class="field-label">Office Hours (Weekdays)</label><input type="text" value="8:00 AM β 5:00 PM"></div>
<div class="field"><label class="field-label">Office Hours (Saturday)</label><input type="text" value="9:00 AM β 1:00 PM"></div>
</div>
<div class="save-bar"><button class="btn btn-ghost">Cancel</button><button class="btn btn-primary">Save Changes</button></div>
</div>
</div>
</div>
<!-- NOTIFICATIONS -->
<div class="panel" id="panel-notifications">
<div class="card">
<div class="card-hdr"><div class="card-title">Notification Preferences</div><div class="card-sub">Choose what you get notified about and how</div></div>
<div class="card-body" style="gap:0;">
<div class="toggle-row"><div><div class="toggle-label">New complaints</div><div class="toggle-hint">Get notified when a constituent files a new complaint</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">High-priority complaints</div><div class="toggle-hint">Immediate alert for urgent issues</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">Project milestones</div><div class="toggle-hint">Updates when a project reaches a milestone</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">Bursary applications</div><div class="toggle-hint">New applications and approvals</div></div><label class="switch"><input type="checkbox"><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">Budget threshold alerts</div><div class="toggle-hint">Notify when a sector exceeds 90% utilisation</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">Event reminders</div><div class="toggle-hint">1 hour before scheduled events</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">Weekly summary email</div><div class="toggle-hint">Every Monday at 7:00 AM</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="toggle-row"><div><div class="toggle-label">SMS alerts for emergencies</div><div class="toggle-hint">Critical issues sent via SMS to your phone</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
<div class="save-bar"><button class="btn btn-primary">Save Preferences</button></div>
</div>
</div>
</div>
<!-- INTEGRATIONS (WhatsApp lives here) -->
<div class="panel" id="panel-integrations">
<div class="card">
<div class="card-hdr"><div class="card-title">Connected Channels</div><div class="card-sub">Let constituents reach your office through the channels they already use</div></div>
<div class="card-body">
<!-- WhatsApp connector card -->
<div class="connector-card">
<div class="connector-icon" style="background:#dcfce7;color:#16a34a;">π¬</div>
<div style="flex:1;">
<div class="connector-name">WhatsApp Intake</div>
<div class="connector-desc">Constituents can file complaints, ask questions, and check status via WhatsApp β auto-logged into Complaints</div>
</div>
<span class="connector-status connected" id="waStatusBadge">π’ Connected</span>
<button class="btn btn-ghost" onclick="toggleWaSetup()">Configure</button>
</div>
<!-- WhatsApp setup detail (expandable) -->
<div class="wa-setup" id="waSetupPanel">
<div style="display:grid;grid-template-columns:1fr 300px;gap:20px;">
<div>
<div class="wa-step">
<div class="wa-step-num">1</div>
<div>
<div class="wa-step-title">WhatsApp Business Number</div>
<div class="wa-step-desc">This is the number constituents message to reach your office. Connected via WhatsApp Business API (Meta).</div>
<div class="wa-number-box">
<span class="wa-number">+254 712 β’β’β’ 678</span>
<button class="copy-btn" onclick="alert('Number copied')">Copy</button>
</div>
</div>
</div>
<div class="wa-step">
<div class="wa-step-num">2</div>
<div>
<div class="wa-step-title">Auto-Reply Greeting</div>
<div class="wa-step-desc">Sent automatically when a constituent messages for the first time.</div>
<textarea rows="3" style="margin-top:8px;">Karibu Embakasi South MP Office! π Reply with:
1οΈβ£ File a complaint
2οΈβ£ Check complaint status
3οΈβ£ Bursary enquiry
4οΈβ£ Speak to an officer</textarea>
</div>
</div>
<div class="wa-step">
<div class="wa-step-num">3</div>
<div>
<div class="wa-step-title">Intake Routing Rules</div>
<div class="wa-step-desc">Incoming messages are categorised automatically and routed into the right module.</div>
<div style="margin-top:10px;">
<div class="rule-row">
<span class="rule-icon">π§</span>
<div class="rule-text">Messages mentioning <strong>water, road, electricity, garbage</strong> β auto-filed in <strong>Complaints</strong></div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
<div class="rule-row">
<span class="rule-icon">π</span>
<div class="rule-text">Messages mentioning <strong>bursary, fees, school</strong> β routed to <strong>Bursaries</strong> queue</div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
<div class="rule-row">
<span class="rule-icon">π‘οΈ</span>
<div class="rule-text">Messages mentioning <strong>elderly, disability, vulnerable</strong> β routed to <strong>Social Protection</strong></div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
<div class="rule-row">
<span class="rule-icon">π</span>
<div class="rule-text">Ward auto-detected from sender's saved location or message text</div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
<div class="rule-row">
<span class="rule-icon">πΈ</span>
<div class="rule-text">Photos sent with a complaint are attached automatically as evidence</div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
<div class="rule-row">
<span class="rule-icon">π</span>
<div class="rule-text">Unrecognised messages are flagged for manual review by office staff</div>
<label class="switch rule-toggle"><input type="checkbox" checked><span class="slider"></span></label>
</div>
</div>
</div>
</div>
<div class="wa-step">
<div class="wa-step-num">4</div>
<div>
<div class="wa-step-title">Assigned Staff</div>
<div class="wa-step-desc">Who reviews and triages incoming WhatsApp messages each day</div>
<select style="margin-top:8px;max-width:280px;">
<option>Catherine Omondi (Chief of Staff)</option>
<option>Rotating β Ward Administrators</option>
<option>Office Secretary β Lilian Wairimu</option>
</select>
</div>
</div>
</div>
<!-- Live preview -->
<div>
<div class="field-label" style="margin-bottom:8px;">Preview</div>
<div class="phone-preview">
<div class="wa-bubble in">Niaje, naomba kuripoti tatizo la maji Kiandutu, Pipeline Ward. Bomba limepasuka asubuhi.<div class="wa-bubble-time">8:31 AM</div></div>
<div class="wa-bubble out">Asante kwa taarifa! β
Tatizo limesajiliwa kama <strong>#1428 β Water pipe burst</strong>, Pipeline Ward. Timu yetu itashughulikia. Utapata update hapa hapa.<div class="wa-bubble-time">8:31 AM</div></div>
<div class="wa-bubble in">Asante sana π<div class="wa-bubble-time">8:32 AM</div></div>
</div>
<div style="font-size:10.5px;color:var(--muted);margin-top:8px;line-height:1.5;">This conversation auto-created complaint <strong>#1428</strong>, visible in the Complaints module with ward and category pre-filled.</div>
</div>
</div>
<div class="save-bar"><button class="btn btn-ghost" onclick="disconnectWa()">Disconnect</button><button class="btn btn-primary">Save WhatsApp Settings</button></div>
</div>
</div>
</div>
<!-- Other integrations -->
<div class="card">
<div class="card-hdr"><div class="card-title">Other Integrations</div></div>
<div class="card-body">
<div class="connector-card">
<div class="connector-icon" style="background:var(--blue-light);color:var(--blue);">π±</div>
<div style="flex:1;"><div class="connector-name">SMS Gateway</div><div class="connector-desc">Send bulk SMS alerts to constituents for emergencies and event reminders</div></div>
<span class="connector-status connected">π’ Connected</span>
<button class="btn btn-ghost">Configure</button>
</div>
<div class="connector-card">
<div class="connector-icon" style="background:var(--green-light);color:var(--green);">π§</div>
<div style="flex:1;"><div class="connector-name">Email (Office 365)</div><div class="connector-desc">Sync office email for correspondence tracking</div></div>
<span class="connector-status connected">π’ Connected</span>
<button class="btn btn-ghost">Configure</button>
</div>
<div class="connector-card">
<div class="connector-icon" style="background:var(--purple-light);color:var(--purple);">π
</div>
<div style="flex:1;"><div class="connector-name">Google Calendar</div><div class="connector-desc">Two-way sync with the Events module</div></div>
<span class="connector-status notconnected">βͺ Not Connected</span>
<button class="btn btn-ghost">Connect</button>
</div>
<div class="connector-card">
<div class="connector-icon" style="background:var(--amber-light);color:#b45309;">π³</div>
<div style="flex:1;"><div class="connector-name">M-Pesa Disbursements</div><div class="connector-desc">Direct stipend and bursary payouts via M-Pesa Paybill</div></div>
<span class="connector-status notconnected">βͺ Not Connected</span>
<button class="btn btn-ghost">Connect</button>
</div>
</div>
</div>
</div>
<!-- TEAM -->
<div class="panel" id="panel-team">
<div class="card">
<div class="card-hdr"><div class="card-title">Team Members & Access</div><div class="card-sub">Control who can access ConstituencyOS and what they can do</div></div>
<div class="card-body" style="padding:0;">
<table>
<thead><tr><th>Name</th><th>Role</th><th>Access Level</th><th>Last Active</th><th></th></tr></thead>
<tbody>
<tr><td>Hon. David Mwangi</td><td>Member of Parliament</td><td><span class="role-pill admin">Owner</span></td><td>Now</td><td></td></tr>
<tr><td>Catherine Omondi</td><td>Chief of Staff</td><td><span class="role-pill admin">Admin</span></td><td>2 hours ago</td><td><button class="btn btn-ghost" style="font-size:10.5px;padding:4px 8px;">Manage</button></td></tr>
<tr><td>Felix Mutiso</td><td>Finance Manager</td><td><span class="role-pill">Editor</span></td><td>1 day ago</td><td><button class="btn btn-ghost" style="font-size:10.5px;padding:4px 8px;">Manage</button></td></tr>
<tr><td>James Kamau</td><td>Pipeline Ward Admin</td><td><span class="role-pill">Editor</span></td><td>5 hours ago</td><td><button class="btn btn-ghost" style="font-size:10.5px;padding:4px 8px;">Manage</button></td></tr>
<tr><td>Lilian Wairimu</td><td>Office Secretary</td><td><span class="role-pill">Viewer</span></td><td>3 hours ago</td><td><button class="btn btn-ghost" style="font-size:10.5px;padding:4px 8px;">Manage</button></td></tr>
</tbody>
</table>
<div style="padding:14px 18px;"><button class="btn btn-primary">οΌ Invite Team Member</button></div>
</div>
</div>
</div>
<!-- SECURITY -->
<div class="panel" id="panel-security">
<div class="card">
<div class="card-hdr"><div class="card-title">Password</div></div>
<div class="card-body">
<div class="field"><label class="field-label">Current Password</label><input type="password" value="β’β’β’β’β’β’β’β’β’β’β’β’"></div>
<div class="field-row">
<div class="field"><label class="field-label">New Password</label><input type="password" placeholder="Enter new password"></div>
<div class="field"><label class="field-label">Confirm New Password</label><input type="password" placeholder="Confirm new password"></div>
</div>
<div class="save-bar"><button class="btn btn-primary">Update Password</button></div>
</div>
</div>
<div class="card">
<div class="card-hdr"><div class="card-title">Two-Factor Authentication</div></div>
<div class="card-body" style="gap:0;">
<div class="toggle-row"><div><div class="toggle-label">SMS Verification</div><div class="toggle-hint">Require a code sent to +254 712 345 678 when logging in</div></div><label class="switch"><input type="checkbox" checked><span class="slider"></span></label></div>
</div>
</div>
</div>
<!-- DANGER ZONE -->
<div class="panel" id="panel-danger">
<div class="card" style="border-color:#fecaca;">
<div class="card-hdr"><div class="card-title" style="color:var(--red);">Danger Zone</div><div class="card-sub">These actions are irreversible β proceed with caution</div></div>
<div class="card-body" style="gap:0;">
<div class="danger-row"><div><div class="toggle-label">Export all data</div><div class="toggle-hint">Download a full archive of constituency data</div></div><button class="btn btn-ghost">Export</button></div>
<div class="danger-row"><div><div class="toggle-label">Disconnect WhatsApp intake</div><div class="toggle-hint">Stop receiving complaints via WhatsApp</div></div><button class="btn btn-danger">Disconnect</button></div>
<div class="danger-row"><div><div class="toggle-label">Deactivate account</div><div class="toggle-hint">Temporarily disable your access</div></div><button class="btn btn-danger">Deactivate</button></div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<script>
function showPanel(name, el){
document.querySelectorAll('.sn-item').forEach(s=>s.classList.remove('active'));
el.classList.add('active');
document.querySelectorAll('.panel').forEach(p=>p.classList.remove('active'));
document.getElementById('panel-'+name).classList.add('active');
}
let waConnected = true;
function toggleWaSetup(){
const panel = document.getElementById('waSetupPanel');
panel.style.display = panel.style.display==='none' ? 'block' : 'none';
}
document.getElementById('waSetupPanel').style.display = 'block';
function disconnectWa(){
if(confirm('Disconnect WhatsApp intake? Constituents will no longer be able to file complaints via WhatsApp.')){
waConnected = false;
document.getElementById('waStatusBadge').textContent = 'βͺ Not Connected';
document.getElementById('waStatusBadge').className = 'connector-status notconnected';
document.getElementById('waSetupPanel').style.display = 'none';
}
}
</script>
</body>
</html>