code Electro

Election Duty Guide

തിരഞ്ഞെടുപ്പ് ഡ്യൂട്ടി സഹായ ഫയൽ 2025

Complete Official Guide for Polling Officers

Official Reference Updated 2025
⚠️

Important Disclaimer

This is an unofficial guide prepared to assist officers participating in election process. Always refer to the latest official instructions from the Election Commission of India (ECI) and Kerala State Election Commission (SEC). This post cannot be considered as a substitute reference for various provisions in the election law. When in doubt about the clarity of instructions contained herein, the relevant laws and regulations must be followed.

📋 Before Election Duty

Essential preparations before reporting for duty

1

Understand Your Assignment

Review your assigned polling booth, assembly constituency, parliamentary constituency with their numbers and location details.

2

Meet Team Members

Get acquainted with other polling team members. Exchange contact numbers and consider creating a WhatsApp group for coordination.

3

Prepare Documentation

Print necessary pages from the PDF below for quick reference and record keeping during election duty.

Election Forms

Election Forms Collection

Simon Mash • 4.1 MB

📥 Download
Poll Manager App

Poll Manager App

Official App • Updated Dec 2024

📱 Get App

📅 Day Before Polling

Collection of polling materials and verification

1

Arrive at Distribution Center

Reach the distribution center at the pre-scheduled time.

2

Mark Attendance

Record attendance and receive posting order.

3

Verify Check Memo

Ensure the check memo is for your polling station and collect voting machines, forms, covers, and stationery.

4

Verify Control & Ballot Units

Confirm serial numbers and address tags match your assigned booth.

!

Check Machine Seals

Verify all machines are properly sealed. Control Unit Candidate Set Section should be sealed.

5

Test Machine Functionality

Turn on Control Unit only and check battery status shows "Battery High".

6

Verify Ballot Unit

Check slide switch position and seal status on Ballot Unit.

7

Check Ballot Paper Installation

Ensure ballot paper is correctly installed in Ballot Unit.

Report Defects

Report any machine defects to the distribution center immediately.

8

Verify Documentation Marks

Ensure documentation marks match your booth.

Essential Polling Materials Verification

Register of voters (Form 17A)
Voters Slip
Marked copy of electoral roll
List of contesting candidates
Photocopy of candidate signatures
Indelible ink
Special tag
Paper seals (Green, Pink, Strip)

🏛️ Polling Booth Setup

Arrangement and preparation of polling station

3.1

Polling Booth Arrangement

  • Open station and check lighting, ventilation, chairs, tables are properly arranged.
  • Place Voting Compartment (VC) in position ensuring privacy and correct height.
  • Secure Control Unit (CU) near table, connect Ballot Unit (BU) properly to VC.
  • Arrange polling staff tables without obstructing voter movement and queue management.
  • Clearly mark entry, exit, and queue management areas.
  • Install Arrow Mark Posters, instruction boards inside and outside station boundary.
  • Arrange special entry/assistance facilities for PWD and senior citizens.
3.2

Next Day Preparations

3.2.1. Document Preparation

  • Prepare Sample Paper Seal Account.
  • Review Account of Votes Recorded and fill required sections.
  • Separate Form 17A, 17C, declarations, Check Memo and store systematically.

3.2.2. Packet Arrangement

PACKET NO. 1 – EVM Covers
1-EVM 1 1-EVM 2 1-EVM 3
PACKET NO. 2 – Statutory Documents (SD) Covers
2-SD 1 2-SD 2 2-SD 3 2-SD 4
PACKET NO. 3 – Standard Forms & Stationery (ST) Covers
3-ST 1 3-ST 2 3-ST 3 3-ST 4 3-ST 5
3.3

Appointing Polling Agents

  • Check if agents have submitted Form 10/11A.
  • Verify identification card, party authorization, and pass before acceptance.
  • Only one agent per party allowed in the station at a time.
  • Record agent details in Form 17A or separate register.
  • Explain demo poll timing and observation protocols to agents.
  • Instruct agents to avoid unnecessary interference in station areas.

🔄 Mock Poll Procedure

6 AM mock poll process and machine testing

🎭

Mock Poll Timing

Mock poll must begin at 6:00 AM. Check if agents have arrived. If not, wait only 5-10 minutes before proceeding.

Voting Machine Connection Guide

🏢

Municipality / Corporation

Only one Ballot Unit and one Control Unit (BU, CU). Take code wire from BU, open back cover of CU and connect securely checking clip colors.

🏘️

Panchayat

One CU and 3 Ballot Units (Village, Block, District). Connect Village BU → CU, Block BU → behind Village BU, District BU → behind Block BU. Ensure all wires are properly set at lock points.

1

Turn ON power switch on CU.

2

If "Link Error" appears, disconnect and reconnect wire.

3

Ensure CU Battery Level shows High.

4

Ignore Clock Error - it's not a problem.

⚙️

Mock Poll Process Steps

  1. Press TOTAL button to show agents if any previous votes exist on machine.
  2. If votes exist, clear them in order: Close → Result → Clear (CRC).
  3. Press TOTAL again to confirm "0" votes and show agents.
  4. Allow each agent to cast one vote per candidate. (PO should note this.)
  5. Press TOTAL to verify machine votes match recorded votes.
  6. Press CLOSE button → then RESULT to show results to agents.
  7. Finally press CLEAR to zero the machine. Press TOTAL again to confirm.
  8. Complete Form N10A – Part I and ask agents to leave station after signing.

🔒 Machine Sealing Process

Secure sealing of voting machines after mock poll

📹

Watch Training Video

Hands-on training + Election Commission videos are essential. Watch the machine sealing procedure video for proper understanding.

▶️ Watch Machine Sealing Video
1

Turn Off Power

Turn OFF power switch on Control Unit.

2

Detach Cable

Detach BU-CU connecting cable.

3

Sign Sealing Materials

Have PO and agents sign on: Special Tag, Address Tag, Green Paper Seal.

4

Install Green Paper Seal

Open CU cover and pass Green Paper Seal inside.

5

Attach Special Tag

Sew Special Tag around Close button and apply wax seal.

6

Close and Apply Strip Seal

Close cover and apply Strip Seal, then stick Green Paper Seal.

7

Attach Address Tag

Finally tie thread and attach Address Tag.

📝

Important Record Keeping

Record serial numbers of Green Paper Seal, Strip Seal, Special Tag in Form N14A.

⚠️ IMPORTANT: All these must be sealed in Packet No. 4 and tagged to CU box handle.



👥 Polling Officer Duties

Specific responsibilities of each polling officer

👑

Presiding Officer (PO)

Overall In-charge
  • Supervise all operations at polling station.
  • Prepare all forms and documents accurately and record timely.
  • Handle disputes/problems without obstructing other staff work.
  • In PO's absence, First Polling Officer assumes responsibility.
1️⃣

First Polling Officer (P1)

Marked Copy & Identification
  • Responsible for Marked Copy of electoral roll.
  • Verify voter documents and identification.
  • Announce voter serial number and name aloud.
  • Record number of female voters coming to vote.
  • Draw diagonal red ink line from bottom left to top right in voter's column on Marked Copy.
  • Circle female voters' serial numbers with red ink. Sample Marked Copy
  • Write "T" in capital letters near serial number for transgender voters.
2️⃣

Second Polling Officer (P2)

Ink & Form 21A
  • Responsible for indelible ink and Form 21A.
  • Verify serial number announced by First Officer and record in Form 21A, obtain voter's signature/thumb impression.
  • Apply ink on voter's left index finger.
  • Prepare Voter Slip for voting record.
3️⃣

Third Polling Officer (P3)

Machine Operation
  • Responsible for Control Unit and machine operation.
  • Press ballot button on CU when voter enters compartment.
  • Ensure voter records all 3 votes.
  • Listen for beep sound confirmation.
  • Arrange voting slips in bundles of 50.

🗳️ Voting Process

Actual voting procedure and closing process

📋

Voting Rules

  • Three votes can be cast when one ballot is issued.
  • Record number of female voters.
  • Do not intervene before voter records all three votes after entering voting compartment.

Poll Closing Process

  1. At 6 PM, if more people in queue, give tokens. Give number 1 to last person.
  2. After last voter votes, press TOTAL to confirm vote count.
  3. Then press CLOSE button.
  4. Turn OFF CU power switch and disconnect connecting cable.
  5. Place CU, BU in box, attach address tag and seal.
  6. Submit records to polling agents for signing. Declaration must be signed.
  7. Prepare Form 24A for village, block, district and give copy to agents.

Accepted Identification Documents

🆔 ECI ID Card
🛡️ Aadhaar Card
🛂 Passport
🚗 Driving License
💳 PAN Card
📚 Photo SSLC

📦 Packing Notes

Systematic packing of polling materials after voting

📋

Packing Procedure

After polling, seal machines and place in box. Then include all records in designated covers/packets. There are primarily 5 types of packets.

1️⃣

Packet I: Statutory Covers (Sealed)

Must be Sealed
S1 Marked Copy of Electoral Roll (Sealed cover)
S2 Register of Voters Form 21A (Sealed cover)
S3 Used Tendered Ballot Papers (3 covers - GP, BP, DP) & List in Form 21B
S4 List of Challenged Voters Form 21
S5 Unused Tendered Ballot Papers
ℹ️ If any cover is empty, write "NIL" and include in packet.
2️⃣

Packet II: Non-Statutory Covers (Unsealed)

Do Not Seal
NS1 Challenged Vote Receipt Book (Form N20)
NS2 Other Copies of Electoral Roll (non-Marked)
NS3 Polling Agent Appointment Letters (Form 10)
NS4 List of Blind & Infirm Voters (Form 22) & Helper Declaration (Form N15)
NS5 Age Declaration (Form N16) & List (Form N18)
NS6 Used Voter Slips (Used voter slips)
3️⃣

Packet III: Other Items (Unsealed - Bag)

Place in Bag
Unused/Damaged Paper Seals
Unused/Damaged Strip Seals
Unused/Damaged Special Tags
Presiding Officer's Handbook
Ink (Closed Bottle)
Self Inking Pads
PRO Metal Seal
ARO Cross Rubber Stamp
Polling Station Identification Rubber Stamp
Unused Voter Slips
4️⃣

Packet IV: Sealed Items (Attach to CU)

Seal & Attach to Machine
Vote Account Form 24A (GP, BP, DP - 2 copies each, one for RO)
Cancelled Ballot Label (use with new machine)
Paper Seal Account Form N14A (2 copies, one for RO)
⚠️ IMPORTANT: Seal this packet and attach to CU box using cello tape before handing over to RO.
5️⃣

Packet V: Documents (No Sealing Required)

Separate Documents
Presiding Officer's Diary Form N13 (3 copies)
Presiding Officer's Declaration Form N10A
Copy of Challenged Voters List Form 21
Receipts for Challenged Votes Received (Receipts)

⚠️ Special Voting Cases

Procedures for special voting circumstances

📄

Tendered Vote

When a voter comes for voting and PO is sure that someone else has already voted in their name, that voter can be allowed a Tendered Vote.

Tendered vote cannot be recorded in voting machine. Use ballot paper.
Voted ballot papers should be sealed and kept.
Details recorded in Form 17B register.
Do not record details in Form 17A register for tendered ballot votes.
⚖️

Challenged Vote

If polling agent disputes voter identity, challenge can be raised after depositing ₹2. PO must conduct summary inquiry.

If challenge not established, allow voter to vote.
If challenge established, hand over person to police.
👤

Proxy Vote

A person appointed as proxy for CSVs (Classified Service Voters) can vote on their behalf.

Apply ink on proxy's left middle finger when voting.
🤝

Helper Assisted Vote

If PO is convinced that a blind or infirm person cannot vote independently, helper brought by voter can be allowed.

Obtain declaration from helper.
Apply ink on helper's right index finger.
Apply ink on voter's finger as usual.

📝 Election Forms

Sample filled forms and templates

ℹ️

Forms Reference

The images provided here are sample templates only. Fill information according to your Returning Officer's (RO) instructions.

📓

Form 10 (P)

Polling Agent Appointment

View
🪪

Form 10 (P)

Polling Agent Pass

View
📜

Form N10A Part I

Mock Poll Declaration

View
📖

Form 21A (P)

Voter Register

View
📊

Form 24A (P)

Vote Account

View
📊

Form N10A Part III

End of Poll Declaration

View
🧑‍🦯

Form 22

Infirm & Blind

View
📓

Form N13 (P)

PO Diary

View

Official Reference Only

This document is only a reference/help file. Strictly follow the latest official instructions from the Election Commission of India (ECI) / Kerala State Election Commission (SEC). This guide is based on election classes and handbooks. Each Returning Officer's instructions must be properly understood and duties performed with special attention in respective areas.

/* Part 3: CSS Styles for Professional Election Guide */ /* ===== BASE STYLES ===== */ :root { --primary: #2563eb; --primary-dark: #1d4ed8; --secondary: #7c3aed; --accent: #f59e0b; --success: #10b981; --warning: #f59e0b; --danger: #ef4444; --info: #3b82f6; --bg-light: #f8fafc; --bg-card: #ffffff; --border: #e2e8f0; --text-primary: #1e293b; --text-secondary: #64748b; --text-muted: #94a3b8; --shadow-sm: 0 1px 3px rgba(0,0,0,0.12); --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1); --shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1); --shadow-xl: 0 20px 25px -5px rgba(0,0,0,0.1); --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --transition: all 0.3s ease; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; line-height: 1.6; color: var(--text-primary); background: var(--bg-light); } /* ===== HERO SECTION ===== */ .hero-section { position: relative; border-radius: var(--radius-xl); overflow: hidden; margin-bottom: 2rem; box-shadow: var(--shadow-lg); } .hero-image-container { height: 300px; overflow: hidden; } .hero-image { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .hero-section:hover .hero-image { transform: scale(1.02); } .hero-overlay { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(transparent, rgba(0, 0, 0, 0.9)); color: white; padding: 2rem; } .hero-title { font-size: 2.5rem; font-weight: 700; margin-bottom: 0.5rem; text-shadow: 2px 2px 4px rgba(0,0,0,0.5); } .hero-subtitle { font-size: 1.25rem; opacity: 0.9; margin-bottom: 1rem; } .hero-badges { display: flex; gap: 0.75rem; } .badge { padding: 0.25rem 0.75rem; border-radius: 2rem; font-size: 0.875rem; font-weight: 600; } .badge.official { background: var(--primary); color: white; } .badge.updated { background: var(--accent); color: var(--text-primary); } /* ===== ALERTS ===== */ .alert { display: flex; gap: 1rem; padding: 1.5rem; border-radius: var(--radius-lg); margin-bottom: 2rem; border-left: 4px solid; animation: slideIn 0.3s ease; } @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } .alert.critical { background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%); border-left-color: var(--danger); } .alert.warning { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-left-color: var(--warning); } .alert.info { background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); border-left-color: var(--info); } .alert.important { background: linear-gradient(135deg, #fce7f3 0%, #fbcfe8 100%); border-left-color: #db2777; } .alert-icon { font-size: 1.5rem; flex-shrink: 0; } .alert-content { flex: 1; } .alert-title { font-size: 1.25rem; margin-bottom: 0.5rem; color: var(--text-primary); } /* ===== TABS NAVIGATION ===== */ .tabs-navigation { background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); border-radius: var(--radius-lg) var(--radius-lg) 0 0; padding: 1rem; position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-md); } .tabs-scroll { display: flex; gap: 0.5rem; overflow-x: auto; padding-bottom: 0.5rem; scrollbar-width: thin; } .tabs-scroll::-webkit-scrollbar { height: 4px; } .tabs-scroll::-webkit-scrollbar-track { background: rgba(255,255,255,0.1); border-radius: 2px; } .tabs-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.3); border-radius: 2px; } .tab-btn { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.25rem; background: rgba(255, 255, 255, 0.1); color: white; border: none; border-radius: var(--radius-md); cursor: pointer; transition: var(--transition); white-space: nowrap; font-weight: 500; user-select: none; } .tab-btn:hover { background: rgba(255, 255, 255, 0.2); transform: translateY(-2px); } .professional-tabs input:checked + .tabs-navigation .tab-btn { background: white; color: var(--primary); box-shadow: var(--shadow-md); } .tab-icon { font-size: 1.25rem; } .tab-label { font-size: 0.875rem; } /* ===== TAB CONTENT ===== */ .tab-content { display: none; padding: 2rem; background: var(--bg-card); border-radius: 0 0 var(--radius-lg) var(--radius-lg); box-shadow: var(--shadow-md); animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .professional-tabs #tabT-1:checked ~ .tab-1, .professional-tabs #tabT-2:checked ~ .tab-2, .professional-tabs #tabT-3:checked ~ .tab-3, .professional-tabs #tabT-4:checked ~ .tab-4, .professional-tabs #tabT-5:checked ~ .tab-5, .professional-tabs #tabT-6:checked ~ .tab-6, .professional-tabs #tabT-7:checked ~ .tab-7, .professional-tabs #tabT-8:checked ~ .tab-8, .professional-tabs #tabT-9:checked ~ .tab-9, .professional-tabs #tabT-10:checked ~ .tab-10 { display: block; } /* ===== SECTION HEADERS ===== */ .section-header { margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 2px solid var(--border); } .section-header h2 { display: flex; align-items: center; gap: 0.75rem; font-size: 1.75rem; color: var(--text-primary); margin-bottom: 0.5rem; } .section-icon { font-size: 1.5rem; } .section-description { color: var(--text-secondary); font-size: 1.1rem; } /* ===== CARDS GRID ===== */ .cards-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .info-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; transition: var(--transition); box-shadow: var(--shadow-sm); } .info-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); border-color: var(--primary); } .card-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; } .card-number { display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); color: white; border-radius: var(--radius-md); font-weight: 700; font-size: 1.25rem; } .card-title { font-size: 1.25rem; color: var(--text-primary); margin: 0; } .card-body { color: var(--text-secondary); line-height: 1.6; } /* ===== DOWNLOAD SECTION ===== */ .download-section { margin-top: 1.5rem; } .download-card { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: var(--bg-light); border: 2px solid var(--border); border-radius: var(--radius-md); margin-bottom: 0.75rem; transition: var(--transition); } .download-card:hover { border-color: var(--primary); background: white; } .download-icon { width: 3rem; height: 3rem; border-radius: var(--radius-sm); overflow: hidden; flex-shrink: 0; } .download-icon img { width: 100%; height: 100%; object-fit: cover; } .download-info { flex: 1; } .download-info h4 { font-size: 1rem; margin-bottom: 0.25rem; color: var(--text-primary); } .file-meta { font-size: 0.875rem; color: var(--text-muted); } .download-btn { padding: 0.5rem 1rem; background: var(--primary); color: white; border: none; border-radius: var(--radius-sm); text-decoration: none; font-weight: 500; transition: var(--transition); display: flex; align-items: center; gap: 0.5rem; } .download-btn:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: var(--shadow-md); } .app-btn { background: var(--success); } .app-btn:hover { background: #0da271; } /* ===== TIMELINE ===== */ .timeline-container { margin: 2rem 0; } .timeline { position: relative; padding-left: 2rem; } .timeline::before { content: ''; position: absolute; left: 0.75rem; top: 0; bottom: 0; width: 2px; background: var(--border); } .timeline-step { position: relative; margin-bottom: 1.5rem; padding-left: 1.5rem; } .step-marker { position: absolute; left: -1.75rem; top: 0; width: 2.5rem; height: 2.5rem; background: var(--bg-card); border: 3px solid var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; color: var(--primary); box-shadow: var(--shadow-sm); } .timeline-step.important .step-marker { border-color: var(--danger); color: var(--danger); } .timeline-step.warning .step-marker { border-color: var(--warning); color: var(--warning); } .step-content { background: var(--bg-card); padding: 1rem; border-radius: var(--radius-md); border: 1px solid var(--border); } .step-content h3 { font-size: 1.1rem; margin-bottom: 0.5rem; color: var(--text-primary); } /* ===== CHECKLIST ===== */ .checklist-section { background: var(--bg-light); border-radius: var(--radius-lg); padding: 1.5rem; margin-top: 2rem; } .checklist-title { font-size: 1.25rem; margin-bottom: 1rem; color: var(--text-primary); } .checklist-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; } .checklist-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem; background: white; border-radius: var(--radius-sm); border: 1px solid var(--border); } .check-icon { color: var(--success); font-weight: 700; } /* ===== PROCESS CARDS ===== */ .process-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; margin-bottom: 1.5rem; } .process-card.warning { border-color: var(--warning); background: linear-gradient(135deg, #fef3c7 0%, #fde68a 10%, white 100%); } .process-card.important { border-color: var(--danger); background: linear-gradient(135deg, #fee2e2 0%, #fecaca 10%, white 100%); } .process-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; } .process-number { display: flex; align-items: center; justify-content: center; min-width: 3rem; padding: 0.5rem; background: var(--primary); color: white; border-radius: var(--radius-sm); font-weight: 700; } .process-icon { font-size: 1.5rem; } .process-header h3 { margin: 0; color: var(--text-primary); } .process-checklist { list-style: none; padding: 0; } .process-checklist li { padding: 0.5rem 0; padding-left: 1.5rem; position: relative; } .process-checklist li:before { content: "•"; position: absolute; left: 0; color: var(--primary); font-weight: 700; } .numbered-steps { list-style: none; padding: 0; counter-reset: step-counter; } .numbered-steps li { counter-increment: step-counter; padding: 0.75rem 0; padding-left: 2.5rem; position: relative; border-bottom: 1px solid var(--border); } .numbered-steps li:last-child { border-bottom: none; } .numbered-steps li:before { content: counter(step-counter); position: absolute; left: 0; top: 0.75rem; width: 1.75rem; height: 1.75rem; background: var(--primary); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.875rem; } /* ===== CONNECTION GUIDE ===== */ .connection-guide { background: var(--bg-light); border-radius: var(--radius-lg); padding: 1.5rem; margin: 1.5rem 0; } .guide-title { font-size: 1.25rem; margin-bottom: 1rem; color: var(--text-primary); } .connection-type { background: white; border-radius: var(--radius-md); overflow: hidden; margin-bottom: 1rem; border: 1px solid var(--border); } .type-header { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; background: var(--bg-light); border-bottom: 1px solid var(--border); } .type-header.municipality { background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); } .type-header.panchayat { background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); } .type-icon { font-size: 1.5rem; } .type-header h4 { margin: 0; color: var(--text-primary); } .type-content { padding: 1rem; } .connection-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-top: 1.5rem; } .step { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: white; border-radius: var(--radius-md); border: 1px solid var(--border); } .step-number { display: flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; background: var(--primary); color: white; border-radius: var(--radius-sm); font-weight: 700; flex-shrink: 0; } /* ===== VIDEO LINKS ===== */ .video-promo { margin: 1.5rem 0; } .video-link { display: inline-flex; align-items: center; gap: 0.75rem; padding: 1rem 1.5rem; background: var(--primary); color: white; text-decoration: none; border-radius: var(--radius-md); font-weight: 500; transition: var(--transition); } .video-link:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .video-link.warning { background: var(--warning); } .video-link.primary { background: var(--primary); } .video-icon { font-size: 1.25rem; } .video-promo.mini .video-link { padding: 0.5rem 1rem; font-size: 0.875rem; } /* ===== SEALING STEPS ===== */ .sealing-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; margin: 1.5rem 0; } .step-card { display: flex; align-items: flex-start; gap: 1rem; padding: 1rem; background: white; border-radius: var(--radius-md); border: 1px solid var(--border); transition: var(--transition); } .step-card:hover { border-color: var(--primary); transform: translateY(-2px); box-shadow: var(--shadow-sm); } .step-number { display: flex; align-items: center; justify-content: center; min-width: 2rem; height: 2rem; background: var(--primary); color: white; border-radius: var(--radius-sm); font-weight: 700; flex-shrink: 0; } .step-content h4 { font-size: 1rem; margin-bottom: 0.25rem; color: var(--text-primary); } /* ===== NOTES SECTION ===== */ .notes-section { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-radius: var(--radius-lg); padding: 1.5rem; margin-top: 1.5rem; border: 1px solid var(--warning); } .note-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } .note-icon { font-size: 1.5rem; } .note-header h3 { margin: 0; color: var(--text-primary); } .note-content { color: var(--text-secondary); } .note-warning { margin-top: 0.75rem; padding: 0.75rem; background: rgba(239, 68, 68, 0.1); border-radius: var(--radius-sm); border-left: 3px solid var(--danger); } /* ===== DUTY CARDS ===== */ .duty-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; margin-bottom: 1.5rem; } .duty-card.primary { border-color: var(--primary); background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 10%, white 100%); } .duty-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; } .duty-icon { font-size: 1.5rem; } .duty-title { flex: 1; } .duty-title h3 { margin: 0 0 0.25rem 0; color: var(--text-primary); } .duty-tag { display: inline-block; padding: 0.25rem 0.75rem; background: var(--bg-light); color: var(--text-secondary); border-radius: 2rem; font-size: 0.875rem; font-weight: 500; } .duty-list { list-style: none; padding: 0; } .duty-list li { padding: 0.5rem 0; padding-left: 1.5rem; position: relative; } .duty-list li:before { content: "✓"; position: absolute; left: 0; color: var(--success); font-weight: 700; } /* ===== ID DOCUMENTS ===== */ .id-documents { background: var(--bg-light); border-radius: var(--radius-lg); padding: 1.5rem; margin-top: 1.5rem; } .id-title { font-size: 1.25rem; margin-bottom: 1rem; color: var(--text-primary); } .id-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 1rem; } .id-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem; background: white; border-radius: var(--radius-md); border: 1px solid var(--border); } .id-icon { font-size: 1.25rem; } /* ===== PACKET CARDS ===== */ .packet-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); margin-bottom: 1.5rem; overflow: hidden; } .packet-card.important { border-color: var(--danger); } .packet-header { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.5rem; color: white; } .packet-1 { background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); } .packet-2 { background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%); } .packet-3 { background: linear-gradient(135deg, #10b981 0%, #047857 100%); } .packet-4 { background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); } .packet-5 { background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%); } .packet-number { font-size: 1.5rem; } .packet-title { flex: 1; } .packet-title h3 { margin: 0 0 0.25rem 0; font-size: 1.25rem; } .packet-status { font-size: 0.875rem; opacity: 0.9; } .packet-body { padding: 1.5rem; } .packet-items { display: flex; flex-direction: column; gap: 0.75rem; } .packet-item { display: flex; align-items: flex-start; gap: 0.75rem; padding: 0.75rem; background: var(--bg-light); border-radius: var(--radius-sm); } .item-code { display: inline-block; min-width: 2.5rem; padding: 0.25rem; background: var(--primary); color: white; text-align: center; border-radius: var(--radius-sm); font-weight: 600; font-size: 0.875rem; flex-shrink: 0; } .packet-note { display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem; padding: 0.75rem; background: rgba(59, 130, 246, 0.1); border-radius: var(--radius-sm); color: var(--text-secondary); font-size: 0.875rem; } .note-icon { font-size: 1rem; } .packet-warning { display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem; padding: 0.75rem; background: rgba(239, 68, 68, 0.1); border-radius: var(--radius-sm); color: var(--danger); font-size: 0.875rem; font-weight: 500; } .warning-icon { font-size: 1rem; } /* ===== SPECIAL CASES ===== */ .special-cases { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; } .case-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; transition: var(--transition); } .case-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .case-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; } .case-icon { font-size: 1.5rem; } .case-header h3 { margin: 0; color: var(--text-primary); } .case-body { color: var(--text-secondary); } .case-notes { margin-top: 1rem; } .note-item { display: flex; gap: 0.5rem; padding: 0.5rem 0; border-bottom: 1px solid var(--border); } .note-item:last-child { border-bottom: none; } .note-bullet { color: var(--primary); font-weight: 700; flex-shrink: 0; } .note-item.warning-note { color: var(--danger); } .note-item.warning-note .note-bullet { color: var(--danger); } /* ===== FORMS GRID ===== */ .forms-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1rem; margin-top: 1.5rem; } .form-card { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 1.5rem; background: var(--bg-card); border: 2px solid var(--border); border-radius: var(--radius-lg); cursor: pointer; transition: var(--transition); } .form-card:hover { border-color: var(--primary); transform: translateY(-4px); box-shadow: var(--shadow-md); } .form-icon { font-size: 2.5rem; margin-bottom: 1rem; } .form-info { flex: 1; } .form-info h4 { margin: 0 0 0.25rem 0; color: var(--text-primary); } .form-info p { margin: 0; color: var(--text-secondary); font-size: 0.875rem; } .form-action { margin-top: 1rem; padding: 0.25rem 0.75rem; background: var(--primary); color: white; border-radius: 2rem; font-size: 0.875rem; font-weight: 500; } /* ===== MODAL ===== */ .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); z-index: 1000; align-items: center; justify-content: center; animation: fadeIn 0.3s ease; } .modal-content { background: white; border-radius: var(--radius-lg); max-width: 90%; max-height: 90%; overflow: hidden; box-shadow: var(--shadow-xl); } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; background: var(--bg-light); border-bottom: 1px solid var(--border); } .modal-header h3 { margin: 0; color: var(--text-primary); } .modal-close { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--text-secondary); padding: 0; width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-sm); } .modal-close:hover { background: var(--border); } .modal-body { padding: 1.5rem; max-height: 70vh; overflow-y: auto; } .modal-body img { max-width: 100%; height: auto; border-radius: var(--radius-sm); } /* ===== FINAL DISCLAIMER ===== */ .final-disclaimer { background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); color: white; border-radius: var(--radius-lg); margin-top: 2rem; overflow: hidden; } .disclaimer-content { padding: 2rem; } .disclaimer-content h3 { font-size: 1.5rem; margin-bottom: 1rem; color: white; } .disclaimer-content p { color: #cbd5e1; line-height: 1.7; } .disclaimer-footer { padding: 1rem 2rem; background: rgba(0, 0, 0, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); text-align: center; } .footer-note { font-size: 0.875rem; color: #94a3b8; } /* ===== RESPONSIVE DESIGN ===== */ @media (max-width: 768px) { .hero-title { font-size: 1.75rem; } .hero-subtitle { font-size: 1rem; } .tabs-navigation { padding: 0.75rem; } .tab-btn { padding: 0.5rem 0.75rem; font-size: 0.875rem; } .tab-content { padding: 1rem; } .cards-grid { grid-template-columns: 1fr; } .checklist-grid { grid-template-columns: 1fr; } .forms-grid { grid-template-columns: repeat(2, 1fr); } .id-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .hero-title { font-size: 1.5rem; } .forms-grid { grid-template-columns: 1fr; } .id-grid { grid-template-columns: 1fr; } .connection-steps { grid-template-columns: 1fr; } } /* ===== PRINT STYLES ===== */ @media print { .tabs-navigation, .video-promo, .download-btn, .form-action { display: none !important; } .tab-content { display: block !important; break-inside: avoid; page-break-inside: avoid; border: none; box-shadow: none; } .alert, .info-card, .process-card, .duty-card, .packet-card { break-inside: avoid; page-break-inside: avoid; } a[href]:after { content: " (" attr(href) ")"; font-size: 0.875rem; color: var(--text-secondary); } .final-disclaimer { break-before: always; } } // Part 4: JavaScript for Professional Election Guide // Form Modal Functionality function openFormModal(title, imageUrl) { const modal = document.getElementById('formModal'); const modalTitle = document.getElementById('modalTitle'); const modalImage = document.getElementById('modalImage'); modalTitle.textContent = title; modalImage.src = imageUrl; modalImage.alt = title; modal.style.display = 'flex'; document.body.style.overflow = 'hidden'; } function closeFormModal() { const modal = document.getElementById('formModal'); modal.style.display = 'none'; document.body.style.overflow = 'auto'; } // Close modal on outside click document.getElementById('formModal').addEventListener('click', function(e) { if (e.target === this) { closeFormModal(); } }); // Close modal on ESC key document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeFormModal(); } }); // Tab Switching with Smooth Animation document.addEventListener('DOMContentLoaded', function() { const tabInputs = document.querySelectorAll('.professional-tabs input[type="radio"]'); const tabContents = document.querySelectorAll('.tab-content'); // Add animation to tab switching tabInputs.forEach(input => { input.addEventListener('change', function() { // Add fade out animation to current tab const currentTab = document.querySelector('.tab-content:not([style*="display: none"])'); if (currentTab) { currentTab.style.animation = 'fadeOut 0.2s ease'; setTimeout(() => { currentTab.style.animation = ''; }, 200); } // Update URL hash for bookmarking const tabId = this.id.replace('tabT-', 'tab-'); history.replaceState(null, null, `#${tabId}`); // Track tab view (analytics simulation) trackTabView(this.id); }); }); // Check URL hash on load const hash = window.location.hash; if (hash) { const tabInput = document.querySelector(`input[name="postTabs"][id="tabT-${hash.replace('#tab-', '')}"]`); if (tabInput) { tabInput.checked = true; } } // Auto-scroll to tab content on mobile tabInputs.forEach(input => { input.addEventListener('change', function() { if (window.innerWidth < 768) { const tabContent = document.querySelector('.tab-content:not([style*="display: none"])'); if (tabContent) { setTimeout(() => { tabContent.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 100); } } }); }); // Add fadeOut animation keyframes const style = document.createElement('style'); style.textContent = ` @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } `; document.head.appendChild(style); }); // Track tab views (for analytics or user behavior tracking) function trackTabView(tabId) { const tabNumber = tabId.replace('tabT-', ''); const tabNames = { '1': 'Before Duty', '2': 'Day Before', '3': 'Booth Setup', '4': 'Mock Poll', '5': 'Machine Sealing', '6': 'Duties', '7': 'Voting Process', '8': 'Packing', '9': 'Special Cases', '10': 'Forms' }; console.log(`Tab viewed: ${tabNames[tabNumber] || 'Unknown'}`); // Here you can add actual analytics tracking // Example: Google Analytics event tracking // gtag('event', 'tab_view', { 'tab_name': tabNames[tabNumber] }); } // Print-Friendly Functionality function printGuide() { window.print(); } // Add print button functionality document.addEventListener('DOMContentLoaded', function() { // Create print button if not exists if (!document.querySelector('.print-btn')) { const printBtn = document.createElement('button'); printBtn.className = 'print-btn'; printBtn.innerHTML = '🖨️ Print Guide'; printBtn.style.cssText = ` position: fixed; bottom: 20px; right: 20px; padding: 10px 20px; background: var(--primary); color: white; border: none; border-radius: 25px; cursor: pointer; z-index: 1000; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); font-weight: 500; display: flex; align-items: center; gap: 8px; `; printBtn.onclick = printGuide; document.body.appendChild(printBtn); } }); // Lazy Loading for Images document.addEventListener('DOMContentLoaded', function() { const lazyImages = document.querySelectorAll('img[data-src]'); const imageObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.removeAttribute('data-src'); observer.unobserve(img); } }); }); lazyImages.forEach(img => imageObserver.observe(img)); }); // Mobile Navigation Enhancement document.addEventListener('DOMContentLoaded', function() { const tabsScroll = document.querySelector('.tabs-scroll'); if (tabsScroll && window.innerWidth < 768) { // Add scroll indicators for mobile const updateScrollIndicators = () => { const scrollLeft = tabsScroll.scrollLeft; const scrollWidth = tabsScroll.scrollWidth; const clientWidth = tabsScroll.clientWidth; tabsScroll.style.background = ` linear-gradient( to right, var(--primary) ${(scrollLeft / (scrollWidth - clientWidth)) * 100}%, rgba(255,255,255,0.1) ${(scrollLeft / (scrollWidth - clientWidth)) * 100}% ) `; }; tabsScroll.addEventListener('scroll', updateScrollIndicators); updateScrollIndicators(); } }); // Form Link Enhancement document.addEventListener('DOMContentLoaded', function() { // Add download tracking to form links const formLinks = document.querySelectorAll('a[href*="FORMS/"]'); formLinks.forEach(link => { link.addEventListener('click', function(e) { const formName = this.textContent.trim(); console.log(`Form downloaded: ${formName}`); // Add analytics tracking here }); }); }); // Keyboard Navigation for Tabs document.addEventListener('keydown', function(e) { const currentTab = document.querySelector('input[name="postTabs"]:checked'); if (!currentTab) return; let nextTab; if (e.key === 'ArrowRight' || e.key === 'ArrowDown') { nextTab = currentTab.nextElementSibling; if (!nextTab) { nextTab = document.querySelector('input[name="postTabs"]:first-of-type'); } } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') { nextTab = currentTab.previousElementSibling; if (!nextTab) { nextTab = document.querySelector('input[name="postTabs"]:last-of-type'); } } if (nextTab) { nextTab.checked = true; nextTab.dispatchEvent(new Event('change')); e.preventDefault(); } }); // Add tab index for accessibility document.addEventListener('DOMContentLoaded', function() { const tabButtons = document.querySelectorAll('.tab-btn'); tabButtons.forEach((btn, index) => { btn.setAttribute('tabindex', '0'); btn.setAttribute('role', 'tab'); btn.setAttribute('aria-selected', 'false'); // Make tab buttons keyboard accessible btn.addEventListener('keydown', function(e) { if (e.key === 'Enter' || e.key === ' ') { this.click(); e.preventDefault(); } }); }); // Update aria attributes on tab change const tabInputs = document.querySelectorAll('input[name="postTabs"]'); tabInputs.forEach(input => { input.addEventListener('change', function() { const tabId = this.id.replace('tabT-', ''); const tabLabel = document.querySelector(`label[for="${this.id}"]`); const tabContent = document.querySelector(`.tab-${tabId}`); // Update aria attributes document.querySelectorAll('.tab-btn').forEach(btn => { btn.setAttribute('aria-selected', 'false'); }); if (tabLabel) { tabLabel.setAttribute('aria-selected', 'true'); } if (tabContent) { tabContent.setAttribute('aria-hidden', 'false'); } }); }); }); // Initialize tooltips for download buttons document.addEventListener('DOMContentLoaded', function() { const downloadButtons = document.querySelectorAll('.download-btn'); downloadButtons.forEach(btn => { btn.setAttribute('title', 'Click to download'); }); }); // Export guide data function (for future enhancements) function exportGuideData() { const guideData = { title: "Election Duty Guide 2025", tabs: [ { id: 1, name: "Before Duty" }, { id: 2, name: "Day Before" }, { id: 3, name: "Booth Setup" }, { id: 4, name: "Mock Poll" }, { id: 5, name: "Machine Sealing" }, { id: 6, name: "Duties" }, { id: 7, name: "Voting Process" }, { id: 8, name: "Packing" }, { id: 9, name: "Special Cases" }, { id: 10, name: "Forms" } ], lastUpdated: new Date().toISOString() }; return guideData; } // Performance optimization: Debounce scroll events let scrollTimeout; window.addEventListener('scroll', function() { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { // Handle scroll-based operations here }, 100); }); // Initialize guide when DOM is fully loaded document.addEventListener('DOMContentLoaded', function() { console.log('Election Duty Guide initialized'); // Set initial aria attributes const activeTab = document.querySelector('input[name="postTabs"]:checked'); if (activeTab) { const activeLabel = document.querySelector(`label[for="${activeTab.id}"]`); if (activeLabel) { activeLabel.setAttribute('aria-selected', 'true'); } } // Add loading animation to images const images = document.querySelectorAll('img'); images.forEach(img => { if (!img.complete) { img.style.opacity = '0'; img.addEventListener('load', function() { this.style.transition = 'opacity 0.3s ease'; this.style.opacity = '1'; }); } }); });

Post a Comment