DjayChucko commited on
Commit
5a1f963
·
verified ·
1 Parent(s): a7ddc91

Manual changes saved

Browse files
Files changed (1) hide show
  1. scorecard.html +383 -517
scorecard.html CHANGED
@@ -6,12 +6,13 @@
6
  <title>Sales Qualification Tool</title>
7
  <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
  <script src="https://cdn.tailwindcss.com"></script>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
10
  <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
11
  <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
12
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
13
  <script src="https://unpkg.com/feather-icons"></script>
14
  <style>
 
15
  .question-screen {
16
  min-height: 100vh;
17
  transition: all 0.3s ease;
@@ -32,569 +33,434 @@
32
  -webkit-appearance: none;
33
  -moz-appearance: none;
34
  appearance: none;
35
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
36
  background-repeat: no-repeat;
37
  background-position: right 0.75rem center;
38
  background-size: 1.25rem;
39
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  </style>
41
  </head>
42
- <body class="bg-[#3D1862] dark:bg-[#3D1862] text-blue-900 dark:text-blue-900 min-h-screen flex flex-col relative">
43
- <header class="sticky top-0 z-50 bg-purple-900/90 dark:bg-purple-900/90 backdrop-blur-md shadow-sm">
44
- <div class="container mx-auto px-4 py-3">
45
- <div class="flex justify-between items-center">
46
- <a href="index.html" class="flex items-center space-x-2">
 
47
  <img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/Scaleway-Logomark-White.png" alt="Logo" class="h-8 mr-2">
48
- <span class="text-xl font-bold text-white font-heading">McGPT</span>
49
- </a>
50
- <nav class="hidden md:flex space-x-8">
51
- <a href="index.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Home</a>
52
- <a href="value-mapper.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Mapper</a>
53
- <a href="scorecard.html" class="nav-link active py-2 px-1 text-white">Scorecard</a>
54
- <a href="strategy.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Method</a>
55
- </nav>
56
- <div class="flex items-center space-x-4">
57
- <button id="themeToggle" class="p-2 rounded-full hover:bg-gray-200 dark:hover:bg-gray-700">
58
- <i data-feather="moon" class="hidden dark:block"></i>
59
- <i data-feather="sun" class="block dark:hidden"></i>
60
- </button>
61
- <button id="mobileMenuButton" class="md:hidden flex flex-col space-y-1.5 p-2 bg-[#9B5CEB] rounded-lg">
62
- <span class="hamburger-line"></span>
63
- <span class="hamburger-line"></span>
64
- <span class="hamburger-line"></span>
65
- </button>
66
- </div>
67
  </div>
 
68
 
69
- <div id="mobileMenu" class="hidden md:hidden py-4 border-t mt-3">
70
- <div class="flex flex-col space-y-3">
71
- <a href="index.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Home</a>
72
- <a href="value-mapper.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Mapper</a>
73
- <a href="scorecard.html" class="nav-link active py-2 px-1 text-white">Scorecard</a>
74
- <a href="strategy.html" class="nav-link py-2 px-1 text-white hover:text-primary transition-colors">Method</a>
75
- </div>
76
  </div>
77
  </div>
78
- </header>
79
- <div id="app" class="relative overflow-hidden">
80
- <!-- Industry Selection Screen -->
81
- <div id="industry-screen" class="question-screen flex flex-col p-6 bg-gradient-to-b from-[#8B5CF6] to-[#A78BFA] text-white">
82
- <div class="flex-1 max-w-2xl mx-auto w-full">
83
- <div class="text-center mb-8">
84
- <div class="w-20 h-20 bg-white rounded-full flex items-center justify-center mx-auto mb-4">
85
- <img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/MEDDICC%20Scorecard%20Logo.png" alt="MEDDICC Logo" class="w-18 h-12">
86
- </div>
87
- <h1 class="text-3xl font-bold mb-2 text-white">MEDDICC Scorecard</h1>
88
- <p class="text-white font-light">Select the customer's industry to begin qualification</p>
89
- </div>
90
-
91
- <div class="mb-6">
92
- <div class="relative">
93
- <select id="industry" class="w-full p-4 bg-white/20 border-2 border-[#F1EEFC] rounded-xl text-black focus:ring-2 focus:ring-white focus:border-white transition-all">
94
- <option value="" disabled selected>Select an industry</option>
95
- <option value="FSI">FSI (Financial Services)</option>
96
- <option value="Healthcare">Healthcare</option>
97
- <option value="Public Sector & Education">Public Sector & Education</option>
98
- <option value="Retail and Ecommerce">Retail and Ecommerce</option>
99
- <option value="Tech (SaaS)">Tech (SaaS)</option>
100
- <option value="Cyber">Cyber</option>
101
- <option value="Media and Entertainment">Media and Entertainment</option>
102
- <option value="Manufacturing">Manufacturing</option>
103
- <option value="Energy">Energy</option>
104
- <option value="Logistics">Logistics</option>
105
- <option value="Transport">Transport</option>
106
- <option value="Startups">Startups</option>
107
- </select>
108
- <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
109
- <i data-feather="chevron-down" class="text-blue-300"></i>
110
- </div>
111
- </div>
112
- </div>
113
-
114
- <div id="industry-description" class="bg-[#6A27C0] p-4 rounded-lg mb-4 hidden">
115
- <p class="text-blue-100 text-sm"></p>
116
  </div>
 
 
 
 
 
117
 
118
- <button id="start-btn" disabled class="w-full py-4 bg-white text-[#792DD4] font-semibold rounded-xl shadow-lg hover:bg-gray-100 hover:scale-[1.02] transition-all disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none mb-4 flex items-center justify-center space-x-2">
119
- <span>Start Qualification</span>
120
- <i data-feather="arrow-right" class="w-5 h-5"></i>
121
- </button>
 
 
 
 
 
 
 
122
  </div>
123
  </div>
 
124
 
125
- <!-- Question Screens (initially hidden) -->
126
- <div id="question-screens" class="hidden">
127
- <!-- Progress Bar -->
128
- <div class="fixed top-0 left-0 right-0 z-10">
129
- <div class="h-1.5 bg-white/20">
130
- <div id="progress-bar" class="progress-bar bg-white h-full rounded-r-full" style="width: 0%"></div>
131
  </div>
 
 
132
  </div>
133
 
134
- <!-- Questions will be dynamically inserted here -->
135
- </div>
136
-
137
- <!-- Results Screen (initially hidden) -->
138
- <div id="results-screen" class="question-screen p-6 bg-gray-50 hidden">
139
- <div class="flex-1">
140
- <div class="text-center mb-8">
141
- <div class="w-24 h-24 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4">
142
- <span id="score-percentage" class="text-3xl font-bold text-blue-600">0%</span>
143
  </div>
144
- <h2 class="text-2xl font-bold mb-2">Qualification Complete</h2>
145
- <p id="score-message" class="text-gray-600"></p>
146
- </div>
147
-
148
- <div class="mb-8">
149
- <div class="flex items-center mb-4">
150
- <div class="w-8 h-8 bg-[#792DD4] rounded-lg flex items-center justify-center mr-3">
151
- <i data-feather="info" class="text-white w-4 h-4"></i>
152
  </div>
153
- <h3 class="text-xl font-bold">Industry Insights</h3>
154
  </div>
155
- <div id="industry-insights" class="bg-white/90 p-5 rounded-xl shadow-md border border-white backdrop-blur-sm text-gray-800"></div>
156
  </div>
157
-
158
- <div class="mb-8">
159
  <div class="flex items-center mb-4">
160
- <div class="w-8 h-8 bg-[#792DD4] rounded-lg flex items-center justify-center mr-3">
161
- <i data-feather="bar-chart-2" class="text-white w-4 h-4"></i>
162
- </div>
163
  <h3 class="text-xl font-bold">Score Breakdown</h3>
164
  </div>
165
  <div id="score-breakdown" class="space-y-4"></div>
166
  </div>
167
-
168
- <div class="mb-8">
169
- <div class="flex items-center mb-4">
170
- <div class="w-8 h-8 bg-[#792DD4] rounded-lg flex items-center justify-center mr-3">
171
- <i data-feather="alert-triangle" class="text-white w-4 h-4"></i>
172
- </div>
173
- <h3 class="text-xl font-bold">Warnings & Recommendations</h3>
174
- </div>
175
- <div id="warnings" class="space-y-4"></div>
176
- </div>
177
-
178
  </div>
179
-
180
- <div class="space-y-3">
181
- <button id="restart-quiz" onclick="location.href='index.html'" class="w-full py-4 bg-gradient-to-r from-[#9B5CEB] to-[#8B5CF6] text-[#C43BFF] font-semibold rounded-xl shadow-lg hover:from-[#8B5CF6] hover:to-[#7B4BEB] transition-all duration-300 transform hover:scale-105 flex items-center justify-center space-x-2">
182
- <i data-feather="home" class="w-5 h-5"></i>
183
- <span>Return to Home</span>
184
  </button>
185
  </div>
186
  </div>
187
  </div>
188
- <script>
189
- // Mobile Menu Toggle
190
- const mobileMenuButton = document.getElementById('mobileMenuButton');
191
- const mobileMenu = document.getElementById('mobileMenu');
192
-
193
- mobileMenuButton.addEventListener('click', () => {
194
- mobileMenu.classList.toggle('hidden');
195
- mobileMenuButton.classList.toggle('open');
196
- });
197
 
198
- // Theme Toggle
199
- const themeToggle = document.getElementById('themeToggle');
200
- const html = document.documentElement;
201
-
202
- themeToggle.addEventListener('click', () => {
203
- html.classList.toggle('dark');
204
- localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
205
- });
206
- // Set initial theme - always dark by default
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  html.classList.add('dark');
208
- localStorage.theme = 'dark';
 
 
209
 
210
- // Set active nav link
211
- const currentPage = window.location.pathname.split('/').pop() || 'index.html';
212
- document.querySelectorAll('.nav-link').forEach(link => {
213
- const linkHref = link.getAttribute('href');
214
- if ((currentPage === 'index.html' && linkHref === 'index.html') ||
215
- (currentPage !== 'index.html' && linkHref === currentPage)) {
216
- link.classList.add('active');
217
- } else {
218
- link.classList.remove('active');
219
- }
220
- });
221
 
222
- // Feather Icons
223
- feather.replace();
 
 
 
 
 
 
 
 
 
 
 
224
 
225
- document.addEventListener('DOMContentLoaded', function() {
226
- feather.replace();
227
- AOS.init();
228
-
229
- // Question data
230
- const questions = [
231
- {
232
- section: "IDENTIFIED PAIN",
233
- question: "Is our deal attached to addressing customers top business pain?",
234
- answers: [
235
- { text: "Economic Buyer Agrees Pain/Project A Top Business Priority", score: 9 },
236
- { text: "Identified Pain: Specific Business Project/Need Agreed", score: 7 },
237
- { text: "Needs/Pain Partially Defined (Scope / Personas Missing)", score: 4 },
238
- { text: "Needs/Pain Unqualified (Project / Personas Unknown)", score: 1 },
239
- { text: "No Project Identified Yet; Evaluating Technologies Only", score: -3 }
240
- ]
241
- },
242
- {
243
- section: "CHAMPIONS",
244
- question: "Are we engaged directly with the right personas or stakeholders?",
245
- answers: [
246
- { text: "Champions & Economic Buyer Are Fully Engaged", score: 9 },
247
- { text: "Champion Incentivised & Accessing Economic Buyer", score: 6 },
248
- { text: "Established Relationship With A Qualified Champion", score: 4 },
249
- { text: "Project-Level Contacts Only, Searching For Champions", score: 0 },
250
- { text: "No Champions / Key Stakeholders Identified Yet", score: -3 }
251
- ]
252
- },
253
- {
254
- section: "GO LIVE PLAN",
255
- question: "Has a Go Live Proposal been accepted by all key decision makers?",
256
- answers: [
257
- { text: "Key Stakeholders Agree; Awaiting Signature", score: 9 },
258
- { text: "Economic Buyer Agrees & Has Validated Plan", score: 8 },
259
- { text: "Champion/Partner Collaborating To Complete Plan", score: 4 },
260
- { text: "Discussing Project & Timescales; Plan Incomplete", score: 0 },
261
- { text: "Too Early For Go Live Proposal", score: -3 }
262
- ]
263
- },
264
- {
265
- section: "METRICS & MOTIVES",
266
- question: "Have METRICS or a QBC been agreed by the ECONOMIC BUYER?",
267
- answers: [
268
- { text: "All Key Stakeholders & Buyers Agree Metrics / QBC", score: 9 },
269
- { text: "Champion Says Economic Buyer Agrees Metrics / QBC", score: 7 },
270
- { text: "We/Our Partner & Champion All Agree Metrics / QBC", score: 4 },
271
- { text: "Only We/Our Partner Understand Metrics / QBC", score: 0 },
272
- { text: "Metrics / Motives Not Yet Identified", score: -3 }
273
- ]
274
- },
275
- {
276
- section: "DECISION CRITERIA",
277
- question: "Do we have clearly defined and agreed DECISION CRITERIA?",
278
- answers: [
279
- { text: "Our Decision Criteria Preferred By Economic Buyer", score: 9 },
280
- { text: "Economic Buyer Agrees We Meet Requirements", score: 8 },
281
- { text: "Criteria Co-Authored & Agreed with Champion", score: 6 },
282
- { text: "Customer Sharing Specific Criteria For Demo/POC", score: 4 },
283
- { text: "Customer Using Own Criteria; Unclear If We Meet It", score: 0 },
284
- { text: "Buying Criteria Unknown/Incomplete", score: -3 }
285
- ]
286
- },
287
- {
288
- section: "DECISION PROCESS",
289
- question: "Why now?",
290
- answers: [
291
- { text: "Critical reason for this month or specific date", score: 9 },
292
- { text: "Financial or Strategic Impact to Champion / Business if delayed", score: 7 },
293
- { text: "No Compelling Reason, But Timeline Agreed", score: 4 },
294
- { text: "Engaged But No Compelling Reason Provided", score: 2 },
295
- { text: "Salesperson's timeline", score: -3 }
296
- ]
297
- },
298
- {
299
- section: "COMPETITION",
300
- question: "Does customer prefer us to COMPETITION?",
301
- answers: [
302
- { text: "Economic Buyer / Partner Agrees We Are Preferred Supplier", score: 9 },
303
- { text: "Economic Buyer Agrees Our Differentiators Address Pain", score: 7 },
304
- { text: "Champion/Partner Prefers Our Differentiators; Traps Set", score: 5 },
305
- { text: "Competition Identified, Differentiation Agreed As Of Interest", score: 3 },
306
- { text: "Competition Identified, But Not Confirmed As Preferred", score: 0 },
307
- { text: "Not Asked About Competition Yet", score: -3 }
308
- ]
309
- },
310
- {
311
- section: "BLOCKERS?",
312
- question: "Have we identified ALL potential blockers?",
313
- answers: [
314
- { text: "All stakeholders agree on plan to address all blockers", score: 9 },
315
- { text: "Economic Buyer agrees to help address identified blockers", score: 7 },
316
- { text: "Blockers Identified & Discussing With Champion / Partner", score: 4 },
317
- { text: "We suspect blockers; haven't asked customer directly", score: 0 },
318
- { text: "No blockers identified yet", score: -3 }
319
- ]
320
- },
321
- {
322
- section: "ECONOMIC BUYER",
323
- question: "Has budget availability been confirmed?",
324
- answers: [
325
- { text: "Economic Buyer Says Budget Signed Off & Secured", score: 9 },
326
- { text: "Economic Buyer Says Significant Budget assigned", score: 7 },
327
- { text: "Champion/Partner Says Budget Exists; Amount Unknown", score: 4 },
328
- { text: "Champion/Partner Confirms Budget Assigned Soon", score: 2 },
329
- { text: "Champion/Partner Still Trying To Secure Budget", score: 0 },
330
- { text: "Budget Source Not Yet Known", score: -3 }
331
- ]
332
- },
333
- {
334
- section: "PAPER PROCESS",
335
- question: "Where are with with pricing & contractual terms?",
336
- answers: [
337
- { text: "Pricing/Contract & Terms Agreed and Approved", score: 9 },
338
- { text: "Contract/Terms Agreed; Legal Departments Engaged", score: 7 },
339
- { text: "Quantified Business Case Agreed, Security/Privacy Teams Engaged", score: 5 },
340
- { text: "Negotiating; Building Business Case But Gaps Remain", score: 4 },
341
- { text: "Customer/Partner has requested proposal", score: 2 },
342
- { text: "Pricing / contract not discussed yet", score: -5 }
343
- ]
344
- }
345
- ];
346
 
347
- // Industry insights
348
- const industryInsights = {
349
- "FSI": "Financial Services buyers prioritize regulatory compliance, data security, and ultra-low latency for real-time transactions and fraud detection.",
350
- "Healthcare": "Healthcare organizations focus on HIPAA/GDPR compliance, interoperability with EHR/EMR systems, and AI-driven patient data privacy.",
351
- "Public Sector & Education": "Public Sector & Education buyers value cost efficiency, scalability for public demand, and strict adherence to government/educational data policies.",
352
- "Retail and Ecommerce": "Retail and Ecommerce companies need seamless omnichannel integration, AI-powered personalization, and real-time inventory/analytics.",
353
- "Tech (SaaS)": "Tech (SaaS) companies look for developer-friendly APIs, scalability for user growth, and AI/ML tools for product innovation.",
354
- "Cyber": "Cyber security teams require advanced threat detection, zero-trust architecture, and AI-driven automation for rapid incident response.",
355
- "Media and Entertainment": "Media and Entertainment firms need high-performance content delivery, AI for recommendation engines, and scalable storage for large media files.",
356
- "Manufacturing": "Manufacturing companies value predictive maintenance, IoT integration, and AI for supply chain optimization and defect detection.",
357
- "Energy": "Energy sector focuses on AI for predictive analytics in asset management, compliance with energy regulations, and operational resilience.",
358
- "Logistics": "Logistics companies prioritize real-time tracking, AI for route optimization, and integration with global supply chain platforms.",
359
- "Transport": "Transportation firms need AI for fleet management, real-time analytics for safety/compliance, and scalable IoT integration.",
360
- "Startups": "Startups typically look for pay-as-you-go pricing, rapid deployment, and AI tools that accelerate MVP development and scaling."
361
- };
362
 
363
- // DOM elements
364
- const industryScreen = document.getElementById('industry-screen');
365
- const industrySelect = document.getElementById('industry');
366
- const industryDescription = document.getElementById('industry-description');
367
- const startBtn = document.getElementById('start-btn');
368
- const questionScreens = document.getElementById('question-screens');
369
- const progressBar = document.getElementById('progress-bar');
370
- const resultsScreen = document.getElementById('results-screen');
371
- const scorePercentage = document.getElementById('score-percentage');
372
- const scoreMessage = document.getElementById('score-message');
373
- const industryInsightsDiv = document.getElementById('industry-insights');
374
- const scoreBreakdown = document.getElementById('score-breakdown');
375
- const warningsDiv = document.getElementById('warnings');
376
- const emailReportBtn = document.getElementById('email-report');
377
- const restartQuizBtn = document.getElementById('restart-quiz');
378
 
379
- // App state
380
- let currentQuestion = 0;
381
- let selectedIndustry = '';
382
- let answers = [];
383
- let totalScore = 0;
384
- const maxPossibleScore = questions.length * 9;
 
 
 
 
 
 
 
385
 
386
- // Event listeners
387
- industrySelect.addEventListener('change', function() {
388
- selectedIndustry = this.value;
389
- const description = industryInsights[selectedIndustry];
390
-
391
- if (description) {
392
- industryDescription.querySelector('p').textContent = description;
393
- industryDescription.classList.remove('hidden');
394
- startBtn.disabled = false;
395
- } else {
396
- industryDescription.classList.add('hidden');
397
- startBtn.disabled = true;
398
- }
399
- });
400
 
401
- startBtn.addEventListener('click', function() {
402
- industryScreen.classList.add('hidden');
403
- questionScreens.classList.remove('hidden');
404
- renderQuestion(currentQuestion);
405
- });
406
 
407
- emailReportBtn.addEventListener('click', function() {
408
- this.innerHTML = '<i data-feather="check" class="mr-2"></i> Report Sent!';
409
- feather.replace();
410
- setTimeout(() => {
411
- this.innerHTML = '<i data-feather="mail" class="mr-2"></i> Email Report';
412
- feather.replace();
413
- }, 2000);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
414
  });
415
- function resetQuiz() {
416
- currentQuestion = 0;
417
- selectedIndustry = '';
418
- answers = [];
419
- totalScore = 0;
420
-
421
- industryScreen.classList.remove('hidden');
422
- questionScreens.classList.add('hidden');
423
- resultsScreen.classList.add('hidden');
424
-
425
- industrySelect.value = '';
426
- industryDescription.classList.add('hidden');
427
- startBtn.disabled = true;
428
- }
429
 
430
- restartQuizBtn.addEventListener('click', resetQuiz);
431
- // Render question
432
- function renderQuestion(index) {
433
- if (index >= questions.length) {
434
- showResults();
435
- return;
436
- }
437
-
438
- const question = questions[index];
439
- const progress = ((index) / questions.length) * 100;
440
- progressBar.style.width = `${progress}%`;
441
-
442
- // Create question screen
443
- const questionScreen = document.createElement('div');
444
- questionScreen.className = `question-screen flex flex-col p-6 bg-white/90 backdrop-blur-sm fade-in`;
445
- questionScreen.id = `question-${index}`;
446
-
447
- questionScreen.innerHTML = `
448
- <div class="flex-1">
449
- <div class="mb-4">
450
- <span class="text-sm font-medium text-blue-600">${question.section}</span>
451
- <h2 class="text-xl font-bold mt-1 mb-2">${question.question}</h2>
452
- </div>
453
-
454
- <div class="mb-4">
455
- <label for="answer-${index}" class="block text-sm font-medium text-gray-700 mb-2">Select answer</label>
456
- <div class="relative">
457
- <select id="answer-${index}" class="w-full p-3 bg-white/90 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#9B5CEB] focus:border-[#9B5CEB]">
458
- <option value="" disabled selected>Select an answer</option>
459
- ${question.answers.map(a => `<option value="${a.score}">${a.text}</option>`).join('')}
460
- </select>
461
- <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
462
- <i data-feather="chevron-down"></i>
463
- </div>
464
- </div>
465
- </div>
466
- <button id="next-btn-${index}" disabled class="w-full py-3 bg-[#9B5CEB] text-white font-semibold rounded-lg shadow-md hover:bg-[#8B5CF6] transition disabled:opacity-50 disabled:cursor-not-allowed mb-4">
467
- ${index === questions.length - 1 ? 'Finish' : 'Next'}
468
- </button>
469
  </div>
470
- `;
471
-
472
- // Clear previous question and add new one
473
- questionScreens.innerHTML = '';
474
- questionScreens.appendChild(questionScreen);
475
- feather.replace();
476
-
477
- // Set up event listeners for new question
478
- const answerSelect = document.getElementById(`answer-${index}`);
479
- const nextBtn = document.getElementById(`next-btn-${index}`);
480
-
481
- answerSelect.addEventListener('change', function() {
482
- nextBtn.disabled = !this.value;
483
- });
484
-
485
- nextBtn.addEventListener('click', function() {
486
- const score = parseInt(answerSelect.value);
487
- answers.push({
488
- question: question.question,
489
- answer: answerSelect.options[answerSelect.selectedIndex].text,
490
- score: score,
491
- section: question.section
492
- });
493
- totalScore += score;
494
- currentQuestion++;
495
- renderQuestion(currentQuestion);
496
- });
497
- }
498
 
499
- // Show results
500
- function showResults() {
501
- questionScreens.classList.add('hidden');
502
- resultsScreen.classList.remove('hidden');
503
-
504
- // Calculate percentage (normalize to 0-100 scale)
505
- const normalizedScore = Math.max(0, totalScore + (questions.length * 3)); // Adjust for negative scores
506
- const percentage = Math.round((normalizedScore / (maxPossibleScore + (questions.length * 3))) * 100);
507
-
508
- scorePercentage.textContent = `${percentage}%`;
509
-
510
- // Set score message
511
- if (percentage >= 80) {
512
- scoreMessage.textContent = "High probability of winning! This opportunity is well-qualified.";
513
- } else if (percentage >= 60) {
514
- scoreMessage.textContent = "Good chance of winning. Focus on improving weaker areas.";
515
- } else if (percentage >= 40) {
516
- scoreMessage.textContent = "Moderate chance. Significant improvements needed in several areas.";
517
- } else {
518
- scoreMessage.textContent = "Low probability. Consider whether to continue pursuing this opportunity.";
519
- }
520
-
521
- // Set industry insights
522
- industryInsightsDiv.textContent = industryInsights[selectedIndustry];
523
-
524
- // Create score breakdown
525
- scoreBreakdown.innerHTML = '';
526
- answers.forEach((answer, index) => {
527
- const sectionScore = document.createElement('div');
528
- sectionScore.className = 'bg-white p-4 rounded-lg shadow-sm border border-gray-200';
529
-
530
- const scoreRatio = answer.score / 9;
531
- let scoreColor;
532
- if (scoreRatio >= 0.8) scoreColor = 'text-green-600';
533
- else if (scoreRatio >= 0.5) scoreColor = 'text-yellow-600';
534
- else scoreColor = 'text-red-600';
535
-
536
- sectionScore.innerHTML = `
537
- <div class="flex justify-between items-start mb-2">
538
- <h4 class="font-medium">${answer.section}</h4>
539
- <span class="font-bold ${scoreColor}">${answer.score}/9</span>
540
- </div>
541
- <p class="text-sm text-gray-600 mb-2">${answer.answer}</p>
542
- `;
543
-
544
- scoreBreakdown.appendChild(sectionScore);
545
- });
546
-
547
- // Create warnings
548
- warningsDiv.innerHTML = '';
549
- const lowScores = answers.filter(a => a.score < 5);
550
- // Add more industry-specific recommendations as needed
551
-
552
- if (lowScores.length === 0) {
553
- warningsDiv.innerHTML = `
554
- <div class="bg-green-50 p-4 rounded-lg border border-green-200 text-green-800">
555
- <p>No critical weaknesses identified. All areas scored well.</p>
556
- </div>
557
- `;
558
- } else {
559
- lowScores.forEach(score => {
560
- const warning = document.createElement('div');
561
- warning.className = 'bg-red-50 p-4 rounded-lg border border-red-200 text-red-800';
562
-
563
- let advice = '';
564
- if (score.section === "IDENTIFIED PAIN") {
565
- advice = "Work with the customer to better define their business pain and how your solution addresses it.";
566
- } else if (score.section === "CHAMPIONS") {
567
- advice = "Identify and engage with champions who can influence the economic buyer.";
568
- } else if (score.section === "GO LIVE PLAN") {
569
- advice = "Develop a clear implementation plan with agreed timelines and milestones.";
570
- } else if (score.section === "METRICS & MOTIVES") {
571
- advice = "Establish clear metrics for success that are agreed by all stakeholders.";
572
- } else if (score.section === "DECISION CRITERIA") {
573
- advice = "Ensure your solution meets the customer's decision criteria or work to influence those criteria.";
574
- } else if (score.section === "DECISION PROCESS") {
575
- advice = "Identify and document the compelling reason for the customer to act now.";
576
- } else if (score.section === "COMPETITION") {
577
- advice = "Differentiate your solution and establish why you're the preferred choice.";
578
- } else if (score.section === "BLOCKERS?") {
579
- advice = "Identify and address any potential blockers to the deal progressing.";
580
- } else if (score.section === "ECONOMIC BUYER") {
581
- advice = "Confirm budget availability and secure commitment from the economic buyer.";
582
- } else if (score.section === "PAPER PROCESS") {
583
- advice = "Advance discussions on pricing and contractual terms to avoid last-minute hurdles.";
584
- }
585
-
586
- warning.innerHTML = `
587
- <h4 class="font-semibold mb-1">${score.section}</h4>
588
- <p class="text-sm mb-2">${score.question}</p>
589
- <p class="text-sm font-medium">Recommendation: ${advice}</p>
590
- `;
591
-
592
- warningsDiv.appendChild(warning);
593
- });
594
  }
595
- }
596
- });
597
- </script>
598
- </script>
 
 
 
 
 
 
 
 
 
 
599
  </body>
600
- </html>
 
6
  <title>Sales Qualification Tool</title>
7
  <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
  <script src="https://cdn.tailwindcss.com"></script>
9
+ <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
10
  <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
11
  <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
12
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
13
  <script src="https://unpkg.com/feather-icons"></script>
14
  <style>
15
+ body { font-family: 'Poppins', sans-serif; }
16
  .question-screen {
17
  min-height: 100vh;
18
  transition: all 0.3s ease;
 
33
  -webkit-appearance: none;
34
  -moz-appearance: none;
35
  appearance: none;
36
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
37
  background-repeat: no-repeat;
38
  background-position: right 0.75rem center;
39
  background-size: 1.25rem;
40
  }
41
+ .dark select {
42
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
43
+ }
44
+ .hamburger-line {
45
+ width: 20px; height: 2px; background-color: white; display: block; transition: all 0.3s;
46
+ }
47
+ .open .hamburger-line:nth-child(1) { transform: translateY(5px) rotate(45deg); }
48
+ .open .hamburger-line:nth-child(2) { opacity: 0; }
49
+ .open .hamburger-line:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
50
+ .nav-link.active {
51
+ font-weight: 600;
52
+ border-bottom: 2px solid #9B5CEB;
53
+ }
54
  </style>
55
  </head>
56
+ <body class="bg-gray-100 dark:bg-gray-900 text-gray-800 dark:text-gray-200 min-h-screen flex flex-col relative">
57
+
58
+ <header class="sticky top-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md shadow-sm">
59
+ <div class="container mx-auto px-4 py-3">
60
+ <div class="flex justify-between items-center">
61
+ <a href="index.html" class="flex items-center space-x-2">
62
  <img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/Scaleway-Logomark-White.png" alt="Logo" class="h-8 mr-2">
63
+ <span class="text-xl font-bold text-gray-800 dark:text-white font-heading">McGPT</span>
64
+ </a>
65
+ <nav class="hidden md:flex space-x-8">
66
+ <a href="index.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Home</a>
67
+ <a href="value-mapper.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Mapper</a>
68
+ <a href="scorecard.html" class="nav-link active py-2 px-1 text-gray-600 dark:text-gray-300">Scorecard</a>
69
+ <a href="strategy.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Method</a>
70
+ </nav>
71
+ <div class="flex items-center space-x-4">
72
+ <button id="themeToggle" class="p-2 rounded-full text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700">
73
+ <i data-feather="moon" class="hidden dark:block"></i>
74
+ <i data-feather="sun" class="block dark:hidden"></i>
75
+ </button>
76
+ <button id="mobileMenuButton" class="md:hidden flex flex-col space-y-1.5 p-2 bg-purple-600 rounded-lg">
77
+ <span class="hamburger-line"></span>
78
+ <span class="hamburger-line"></span>
79
+ <span class="hamburger-line"></span>
80
+ </button>
 
81
  </div>
82
+ </div>
83
 
84
+ <div id="mobileMenu" class="hidden md:hidden py-4 border-t border-gray-200 dark:border-gray-700 mt-3">
85
+ <div class="flex flex-col space-y-3">
86
+ <a href="index.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Home</a>
87
+ <a href="value-mapper.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Mapper</a>
88
+ <a href="scorecard.html" class="nav-link active py-2 px-1 text-gray-600 dark:text-gray-300">Scorecard</a>
89
+ <a href="strategy.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Method</a>
 
90
  </div>
91
  </div>
92
+ </div>
93
+ </header>
94
+
95
+ <div id="app" class="relative overflow-hidden flex-1">
96
+ <div id="industry-screen" class="question-screen flex items-center justify-center p-6 bg-gradient-to-br from-purple-600 to-indigo-700 text-white">
97
+ <div class="max-w-2xl mx-auto w-full text-center" data-aos="fade-up">
98
+ <div class="w-20 h-20 bg-white rounded-full flex items-center justify-center mx-auto mb-4 shadow-lg">
99
+ <img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/MEDDICC%20Scorecard%20Logo.png" alt="MEDDICC Logo" class="w-18 h-12">
100
+ </div>
101
+ <h1 class="text-4xl font-bold mb-2 text-white">MEDDICC Scorecard</h1>
102
+ <p class="text-purple-200 font-light text-lg">Select the customer's industry to begin qualification</p>
103
+
104
+ <div class="mt-8 mb-6">
105
+ <div class="relative">
106
+ <select id="industry" class="w-full p-4 bg-white/20 border-2 border-purple-300 rounded-xl text-white placeholder-purple-200 focus:ring-2 focus:ring-white focus:outline-none transition-all appearance-none">
107
+ <option value="" disabled selected>Select an industry</option>
108
+ <option value="FSI">FSI (Financial Services)</option>
109
+ <option value="Healthcare">Healthcare</option>
110
+ <option value="Public Sector & Education">Public Sector & Education</option>
111
+ <option value="Retail and Ecommerce">Retail and Ecommerce</option>
112
+ <option value="Tech (SaaS)">Tech (SaaS)</option>
113
+ <option value="Cyber">Cyber</option>
114
+ <option value="Media and Entertainment">Media and Entertainment</option>
115
+ <option value="Manufacturing">Manufacturing</option>
116
+ <option value="Energy">Energy</option>
117
+ <option value="Logistics">Logistics</option>
118
+ <option value="Transport">Transport</option>
119
+ <option value="Startups">Startups</option>
120
+ </select>
 
 
 
 
 
 
 
 
 
121
  </div>
122
+ </div>
123
+
124
+ <div id="industry-description" class="bg-purple-800/50 p-4 rounded-lg mb-4 hidden min-h-[60px]">
125
+ <p class="text-purple-100 text-sm"></p>
126
+ </div>
127
 
128
+ <button id="start-btn" disabled class="w-full py-4 bg-white text-purple-700 font-semibold rounded-xl shadow-lg hover:bg-gray-100 transform hover:scale-102 transition-all disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none mb-4 flex items-center justify-center space-x-2">
129
+ <span>Start Qualification</span>
130
+ <i data-feather="arrow-right" class="w-5 h-5"></i>
131
+ </button>
132
+ </div>
133
+ </div>
134
+
135
+ <div id="question-screens" class="hidden">
136
+ <div class="fixed top-0 left-0 right-0 z-10 bg-gray-100 dark:bg-gray-900 pt-16">
137
+ <div class="h-1.5 bg-gray-200 dark:bg-gray-700">
138
+ <div id="progress-bar" class="progress-bar bg-purple-600 h-full rounded-r-full"></div>
139
  </div>
140
  </div>
141
+ </div>
142
 
143
+ <div id="results-screen" class="question-screen p-6 bg-gray-100 dark:bg-gray-900 hidden overflow-y-auto">
144
+ <div class="max-w-4xl mx-auto w-full" data-aos="fade-in">
145
+ <div class="text-center mb-8">
146
+ <div class="w-24 h-24 bg-white dark:bg-gray-800 border-4 border-purple-500 rounded-full flex items-center justify-center mx-auto mb-4">
147
+ <span id="score-percentage" class="text-3xl font-bold text-purple-600 dark:text-purple-400">0%</span>
 
148
  </div>
149
+ <h2 class="text-2xl font-bold mb-2">Qualification Complete</h2>
150
+ <p id="score-message" class="text-gray-600 dark:text-gray-400"></p>
151
  </div>
152
 
153
+ <div class="grid md:grid-cols-2 gap-8">
154
+ <div class="space-y-6">
155
+ <div>
156
+ <div class="flex items-center mb-4">
157
+ <div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="info" class="text-white w-4 h-4"></i></div>
158
+ <h3 class="text-xl font-bold">Industry Insights</h3>
159
+ </div>
160
+ <div id="industry-insights" class="bg-white dark:bg-gray-800 p-5 rounded-xl shadow-md text-gray-800 dark:text-gray-200"></div>
 
161
  </div>
162
+
163
+ <div>
164
+ <div class="flex items-center mb-4">
165
+ <div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="alert-triangle" class="text-white w-4 h-4"></i></div>
166
+ <h3 class="text-xl font-bold">Warnings & Recommendations</h3>
 
 
 
167
  </div>
168
+ <div id="warnings" class="space-y-4"></div>
169
  </div>
 
170
  </div>
171
+
172
+ <div>
173
  <div class="flex items-center mb-4">
174
+ <div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="bar-chart-2" class="text-white w-4 h-4"></i></div>
 
 
175
  <h3 class="text-xl font-bold">Score Breakdown</h3>
176
  </div>
177
  <div id="score-breakdown" class="space-y-4"></div>
178
  </div>
 
 
 
 
 
 
 
 
 
 
 
179
  </div>
180
+
181
+ <div class="mt-8">
182
+ <button id="restart-quiz" class="w-full py-4 bg-gradient-to-r from-purple-600 to-indigo-600 text-white font-semibold rounded-xl shadow-lg hover:from-purple-700 hover:to-indigo-700 transition-all duration-300 transform hover:scale-105 flex items-center justify-center space-x-2">
183
+ <i data-feather="refresh-cw" class="w-5 h-5"></i>
184
+ <span>Start New Scorecard</span>
185
  </button>
186
  </div>
187
  </div>
188
  </div>
189
+ </div>
 
 
 
 
 
 
 
 
190
 
191
+ <script>
192
+ document.addEventListener('DOMContentLoaded', function() {
193
+ // --- UI ELEMENTS & SETUP ---
194
+ AOS.init({ once: true, duration: 600 });
195
+ feather.replace();
196
+
197
+ // Mobile Menu Toggle
198
+ const mobileMenuButton = document.getElementById('mobileMenuButton');
199
+ const mobileMenu = document.getElementById('mobileMenu');
200
+ mobileMenuButton.addEventListener('click', () => {
201
+ mobileMenu.classList.toggle('hidden');
202
+ mobileMenuButton.classList.toggle('open');
203
+ });
204
+
205
+ // Theme Toggle
206
+ const themeToggle = document.getElementById('themeToggle');
207
+ const html = document.documentElement;
208
+ themeToggle.addEventListener('click', () => {
209
+ html.classList.toggle('dark');
210
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
211
+ feather.replace(); // Re-render icons for color change
212
+ });
213
+ if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
214
  html.classList.add('dark');
215
+ } else {
216
+ html.classList.remove('dark');
217
+ }
218
 
219
+ // Set active nav link
220
+ const currentPage = window.location.pathname.split('/').pop() || 'index.html';
221
+ document.querySelectorAll('.nav-link').forEach(link => {
222
+ if (link.getAttribute('href') === currentPage) {
223
+ link.classList.add('active');
224
+ } else {
225
+ link.classList.remove('active');
226
+ }
227
+ });
 
 
228
 
229
+ // --- DATA & STATE MANAGEMENT ---
230
+ const questions = [
231
+ { section: 'IDENTIFIED PAIN', question: 'Is our deal attached to addressing the customer\'s top business pain?', answers: [ { text: 'Economic Buyer Agrees Pain/Project A Top Business Priority', score: 9 }, { text: 'Identified Pain: Specific Business Project/Need Agreed', score: 7 }, { text: 'Needs/Pain Partially Defined (Scope / Personas Missing)', score: 4 }, { text: 'Needs/Pain Unqualified (Project / Personas Unknown)', score: 1 }, { text: 'No Project Identified Yet; Evaluating Technologies Only', score: -3 } ] },
232
+ { section: 'CHAMPIONS', question: 'Are we engaged directly with the right personas or stakeholders?', answers: [ { text: 'Champions & Economic Buyer Are Fully Engaged', score: 9 }, { text: 'Champion Incentivised & Accessing Economic Buyer', score: 6 }, { text: 'Established Relationship With A Qualified Champion', score: 4 }, { text: 'Project-Level Contacts Only, Searching For Champions', score: 0 }, { text: 'No Champions / Key Stakeholders Identified Yet', score: -3 } ] },
233
+ { section: 'GO LIVE PLAN', question: 'Has a Go Live Proposal been accepted by all key decision makers?', answers: [ { text: 'Key Stakeholders Agree; Awaiting Signature', score: 9 }, { text: 'Economic Buyer Agrees & Has Validated Plan', score: 8 }, { text: 'Champion/Partner Collaborating To Complete Plan', score: 4 }, { text: 'Discussing Project & Timescales; Plan Incomplete', score: 0 }, { text: 'Too Early For Go Live Proposal', score: -3 } ] },
234
+ { section: 'METRICS & MOTIVES', question: 'Have METRICS or a QBC been agreed by the ECONOMIC BUYER?', answers: [ { text: 'All Key Stakeholders & Buyers Agree Metrics / QBC', score: 9 }, { text: 'Champion Says Economic Buyer Agrees Metrics / QBC', score: 7 }, { text: 'We/Our Partner & Champion All Agree Metrics / QBC', score: 4 }, { text: 'Only We/Our Partner Understand Metrics / QBC', score: 0 }, { text: 'Metrics / Motives Not Yet Identified', score: -3 } ] },
235
+ { section: 'DECISION CRITERIA', question: 'Do we have clearly defined and agreed DECISION CRITERIA?', answers: [ { text: 'Our Decision Criteria Preferred By Economic Buyer', score: 9 }, { text: 'Economic Buyer Agrees We Meet Requirements', score: 8 }, { text: 'Criteria Co-Authored & Agreed with Champion', score: 6 }, { text: 'Customer Sharing Specific Criteria For Demo/POC', score: 4 }, { text: 'Customer Using Own Criteria; Unclear If We Meet It', score: 0 }, { text: 'Buying Criteria Unknown/Incomplete', score: -3 } ] },
236
+ { section: 'DECISION PROCESS', question: 'Why now? What is the compelling event?', answers: [ { text: 'Critical reason for this month or specific date', score: 9 }, { text: 'Financial or Strategic Impact to Champion / Business if delayed', score: 7 }, { text: 'No Compelling Reason, But Timeline Agreed', score: 4 }, { text: 'Engaged But No Compelling Reason Provided', score: 2 }, { text: 'Salesperson\'s timeline', score: -3 } ] },
237
+ { section: 'COMPETITION', question: 'Does the customer prefer us to the COMPETITION?', answers: [ { text: 'Economic Buyer / Partner Agrees We Are Preferred Supplier', score: 9 }, { text: 'Economic Buyer Agrees Our Differentiators Address Pain', score: 7 }, { text: 'Champion/Partner Prefers Our Differentiators; Traps Set', score: 5 }, { text: 'Competition Identified, Differentiation Agreed As Of Interest', score: 3 }, { text: 'Competition Identified, But Not Confirmed As Preferred', score: 0 }, { text: 'Not Asked About Competition Yet', score: -3 } ] },
238
+ { section: 'BLOCKERS?', question: 'Have we identified ALL potential blockers?', answers: [ { text: 'All stakeholders agree on plan to address all blockers', score: 9 }, { text: 'Economic Buyer agrees to help address identified blockers', score: 7 }, { text: 'Blockers Identified & Discussing With Champion / Partner', score: 4 }, { text: 'We suspect blockers; haven\'t asked customer directly', score: 0 }, { text: 'No blockers identified yet', score: -3 } ] },
239
+ { section: 'ECONOMIC BUYER', question: 'Has budget availability been confirmed?', answers: [ { text: 'Economic Buyer Says Budget Signed Off & Secured', score: 9 }, { text: 'Economic Buyer Says Significant Budget assigned', score: 7 }, { text: 'Champion/Partner Says Budget Exists; Amount Unknown', score: 4 }, { text: 'Champion/Partner Confirms Budget Assigned Soon', score: 2 }, { text: 'Champion/Partner Still Trying To Secure Budget', score: 0 }, { text: 'Budget Source Not Yet Known', score: -3 } ] },
240
+ { section: 'PAPER PROCESS', question: 'Where are we with pricing & contractual terms?', answers: [ { text: 'Pricing/Contract & Terms Agreed and Approved', score: 9 }, { text: 'Contract/Terms Agreed; Legal Departments Engaged', score: 7 }, { text: 'Quantified Business Case Agreed, Security/Privacy Teams Engaged', score: 5 }, { text: 'Negotiating; Building Business Case But Gaps Remain', score: 4 }, { text: 'Customer/Partner has requested proposal', score: 2 }, { text: 'Pricing / contract not discussed yet', score: -5 } ] }
241
+ ];
242
 
243
+ const industryInsights = {
244
+ 'FSI': 'Financial Services buyers prioritize regulatory compliance, data security, and ultra-low latency for real-time transactions and fraud detection.',
245
+ 'Healthcare': 'Healthcare organizations focus on HIPAA/GDPR compliance, interoperability with EHR/EMR systems, and AI-driven patient data privacy.',
246
+ 'Public Sector & Education': 'Public Sector & Education buyers value cost efficiency, scalability for public demand, and strict adherence to government/educational data policies.',
247
+ 'Retail and Ecommerce': 'Retail and Ecommerce companies need seamless omnichannel integration, AI-powered personalization, and real-time inventory/analytics.',
248
+ 'Tech (SaaS)': 'Tech (SaaS) companies look for developer-friendly APIs, scalability for user growth, and AI/ML tools for product innovation.',
249
+ 'Cyber': 'Cyber security teams require advanced threat detection, zero-trust architecture, and AI-driven automation for rapid incident response.',
250
+ 'Media and Entertainment': 'Media and Entertainment firms need high-performance content delivery, AI for recommendation engines, and scalable storage for large media files.',
251
+ 'Manufacturing': 'Manufacturing companies value predictive maintenance, IoT integration, and AI for supply chain optimization and defect detection.',
252
+ 'Energy': 'Energy sector focuses on AI for predictive analytics in asset management, compliance with energy regulations, and operational resilience.',
253
+ 'Logistics': 'Logistics companies prioritize real-time tracking, AI for route optimization, and integration with global supply chain platforms.',
254
+ 'Transport': 'Transportation firms need AI for fleet management, real-time analytics for safety/compliance, and scalable IoT integration.',
255
+ 'Startups': 'Startups typically look for pay-as-you-go pricing, rapid deployment, and AI tools that accelerate MVP development and scaling.'
256
+ };
257
+
258
+ // NEW: Industry-specific advice object
259
+ const industrySpecificAdvice = {
260
+ 'FSI': {
261
+ 'IDENTIFIED PAIN': 'Frame the pain in terms of regulatory compliance, risk mitigation, or fraud detection. FSI buyers are heavily motivated by these pressures.',
262
+ 'METRICS & MOTIVES': 'Focus on metrics like ROI, reduction in compliance penalties, and cost of capital. The Economic Buyer will need a business case built on these specific KPIs.',
263
+ 'PAPER PROCESS': 'The legal and compliance review in FSI is rigorous. Proactively provide security documentation and compliance certificates to accelerate this stage.'
264
+ },
265
+ 'Healthcare': {
266
+ 'IDENTIFIED PAIN': 'Pain in Healthcare is often tied to patient data privacy (HIPAA), interoperability with EHR/EMR systems, or improving patient outcomes. Your solution must align with these critical areas.',
267
+ 'CHAMPIONS': 'A strong champion in Healthcare is often a clinical leader who feels the pain directly, not just an IT manager. Find someone whose goals are tied to patient care or operational efficiency.',
268
+ 'DECISION CRITERIA': 'Criteria will heavily weigh on data security and HIPAA compliance. Ensure you are positioned as the most secure and compliant option against competitors.'
269
+ },
270
+ 'Tech (SaaS)': {
271
+ 'COMPETITION': 'The SaaS market is crowded. Your competitive advantage must be crystal clear—is it developer-friendly APIs, better integration capabilities, or a superior UX? Hammer this point with your champion.',
272
+ 'ECONOMIC BUYER': 'Confirm the budget source. Is it coming from an operational budget, or does it require a new capital expenditure request? This dramatically impacts the timeline in fast-moving tech companies.',
273
+ 'GO LIVE PLAN': 'Offer a "quick start" or phased implementation plan. SaaS buyers value rapid time-to-value and want to see an impact quickly.'
274
+ }
275
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
 
277
+ // DOM elements
278
+ const industryScreen = document.getElementById('industry-screen');
279
+ const industrySelect = document.getElementById('industry');
280
+ const industryDescription = document.getElementById('industry-description');
281
+ const startBtn = document.getElementById('start-btn');
282
+ const questionScreens = document.getElementById('question-screens');
283
+ const progressBar = document.getElementById('progress-bar');
284
+ const resultsScreen = document.getElementById('results-screen');
285
+ const scorePercentage = document.getElementById('score-percentage');
286
+ const scoreMessage = document.getElementById('score-message');
287
+ const industryInsightsDiv = document.getElementById('industry-insights');
288
+ const scoreBreakdown = document.getElementById('score-breakdown');
289
+ const warningsDiv = document.getElementById('warnings');
290
+ const restartQuizBtn = document.getElementById('restart-quiz');
 
291
 
292
+ // App state
293
+ let currentQuestion = 0;
294
+ let selectedIndustry = '';
295
+ let userAnswers = [];
296
+ const maxPossibleScore = questions.length * 9;
 
 
 
 
 
 
 
 
 
 
297
 
298
+ // --- EVENT LISTENERS ---
299
+ industrySelect.addEventListener('change', function() {
300
+ selectedIndustry = this.value;
301
+ const description = industryInsights[selectedIndustry];
302
+ if (description) {
303
+ industryDescription.querySelector('p').textContent = description;
304
+ industryDescription.classList.remove('hidden');
305
+ startBtn.disabled = false;
306
+ } else {
307
+ industryDescription.classList.add('hidden');
308
+ startBtn.disabled = true;
309
+ }
310
+ });
311
 
312
+ startBtn.addEventListener('click', function() {
313
+ industryScreen.classList.add('hidden');
314
+ questionScreens.classList.remove('hidden');
315
+ renderQuestion(currentQuestion);
316
+ });
 
 
 
 
 
 
 
 
 
317
 
318
+ restartQuizBtn.addEventListener('click', resetQuiz);
 
 
 
 
319
 
320
+ // --- CORE FUNCTIONS ---
321
+ function resetQuiz() {
322
+ currentQuestion = 0;
323
+ selectedIndustry = '';
324
+ userAnswers = [];
325
+ industrySelect.value = "";
326
+ industryDescription.classList.add('hidden');
327
+ startBtn.disabled = true;
328
+ resultsScreen.classList.add('hidden');
329
+ industryScreen.classList.remove('hidden');
330
+ AOS.refresh();
331
+ }
332
+
333
+ function renderQuestion(index) {
334
+ if (index >= questions.length) {
335
+ showResults();
336
+ return;
337
+ }
338
+
339
+ const question = questions[index];
340
+ const progress = ((index) / questions.length) * 100;
341
+ progressBar.style.width = `${progress}%`;
342
+
343
+ const questionScreen = document.createElement('div');
344
+ questionScreen.className = `question-screen flex flex-col justify-center p-6 bg-gray-100 dark:bg-gray-900 fade-in`;
345
+ questionScreen.id = `question-${index}`;
346
+
347
+ questionScreen.innerHTML = `
348
+ <div class="max-w-2xl mx-auto w-full">
349
+ <div class="mb-4 text-center">
350
+ <span class="text-sm font-medium text-purple-600 dark:text-purple-400">${question.section}</span>
351
+ <h2 class="text-2xl font-bold mt-1 mb-2">${question.question}</h2>
352
+ </div>
353
+ <div class="mb-6">
354
+ <div class="relative">
355
+ <select id="answer-${index}" class="w-full p-3 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-purple-500 focus:outline-none">
356
+ <option value="" disabled selected>Select an answer</option>
357
+ ${question.answers.map(a => `<option value="${a.score}">${a.text}</option>`).join('')}
358
+ </select>
359
+ </div>
360
+ </div>
361
+ <button id="next-btn-${index}" disabled class="w-full py-3 bg-purple-600 text-white font-semibold rounded-lg shadow-md hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed">
362
+ ${index === questions.length - 1 ? 'Finish Qualification' : 'Next Question'}
363
+ </button>
364
+ </div>
365
+ `;
366
+
367
+ questionScreens.innerHTML = '';
368
+ questionScreens.appendChild(questionScreen);
369
+ feather.replace();
370
+
371
+ const answerSelect = document.getElementById(`answer-${index}`);
372
+ const nextBtn = document.getElementById(`next-btn-${index}`);
373
+
374
+ answerSelect.addEventListener('change', () => { nextBtn.disabled = !answerSelect.value; });
375
+
376
+ nextBtn.addEventListener('click', () => {
377
+ userAnswers.push({
378
+ question: question.question,
379
+ answer: answerSelect.options[answerSelect.selectedIndex].text,
380
+ score: parseInt(answerSelect.value),
381
+ section: question.section
382
  });
383
+ currentQuestion++;
384
+ renderQuestion(currentQuestion);
385
+ });
386
+ }
 
 
 
 
 
 
 
 
 
 
387
 
388
+ function showResults() {
389
+ questionScreens.classList.add('hidden');
390
+ resultsScreen.classList.remove('hidden');
391
+ AOS.refresh();
392
+
393
+ const totalScore = userAnswers.reduce((sum, ans) => sum + ans.score, 0);
394
+ const normalizedScore = Math.max(0, totalScore + (questions.length * 5)); // Adjust for negative scores. 5 is max negative.
395
+ const maxNormalizedScore = maxPossibleScore + (questions.length * 5);
396
+ const percentage = Math.round((normalizedScore / maxNormalizedScore) * 100);
397
+
398
+ scorePercentage.textContent = `${percentage}%`;
399
+
400
+ if (percentage >= 80) scoreMessage.textContent = 'High probability of winning! This opportunity is well-qualified.';
401
+ else if (percentage >= 60) scoreMessage.textContent = 'Good chance of winning. Focus on improving weaker areas.';
402
+ else if (percentage >= 40) scoreMessage.textContent = 'Moderate chance. Significant improvements needed in several areas.';
403
+ else scoreMessage.textContent = 'Low probability. Re-evaluate if this opportunity is worth pursuing.';
404
+
405
+ industryInsightsDiv.innerHTML = `<p>${industryInsights[selectedIndustry]}</p>`;
406
+
407
+ scoreBreakdown.innerHTML = '';
408
+ userAnswers.forEach(answer => {
409
+ const scoreRatio = (answer.score + 5) / 14; // Normalize score from -5-9 to 0-1 range
410
+ let scoreColor = 'text-red-600 dark:text-red-400';
411
+ if (scoreRatio >= 0.7) scoreColor = 'text-green-600 dark:text-green-400';
412
+ else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-600 dark:text-yellow-400';
413
+
414
+ const sectionScore = `
415
+ <div class="bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm">
416
+ <div class="flex justify-between items-start mb-2">
417
+ <h4 class="font-medium">${answer.section}</h4>
418
+ <span class="font-bold ${scoreColor}">${answer.score}/9</span>
 
 
 
 
 
 
 
 
419
  </div>
420
+ <p class="text-sm text-gray-600 dark:text-gray-400">${answer.answer}</p>
421
+ </div>`;
422
+ scoreBreakdown.insertAdjacentHTML('beforeend', sectionScore);
423
+ });
424
+
425
+ warningsDiv.innerHTML = '';
426
+ const lowScores = userAnswers.filter(a => a.score < 5);
427
+
428
+ if (lowScores.length === 0) {
429
+ warningsDiv.innerHTML = `<div class="bg-green-100 dark:bg-green-900 p-4 rounded-lg text-green-800 dark:text-green-200"><p>No critical weaknesses identified. Great work!</p></div>`;
430
+ } else {
431
+ lowScores.forEach(score => {
432
+ let advice = 'No specific recommendation available. Focus on improving this area.';
433
+ const genericAdvice = {
434
+ 'IDENTIFIED PAIN': 'Work with the customer to better define their business pain and how your solution addresses it.',
435
+ 'CHAMPIONS': 'Identify and engage with champions who can influence the economic buyer.',
436
+ 'GO LIVE PLAN': 'Develop a clear implementation plan with agreed timelines and milestones.',
437
+ 'METRICS & MOTIVES': 'Establish clear metrics for success that are agreed by all stakeholders.',
438
+ 'DECISION CRITERIA': 'Ensure your solution meets the customer\'s decision criteria or work to influence those criteria.',
439
+ 'DECISION PROCESS': 'Identify and document the compelling reason for the customer to act now.',
440
+ 'COMPETITION': 'Differentiate your solution and establish why you\'re the preferred choice.',
441
+ 'BLOCKERS?': 'Proactively identify and address any potential blockers to the deal progressing.',
442
+ 'ECONOMIC BUYER': 'Confirm budget availability and secure commitment from the economic buyer.',
443
+ 'PAPER PROCESS': 'Advance discussions on pricing and contractual terms to avoid last-minute hurdles.'
444
+ };
 
 
 
445
 
446
+ if (industrySpecificAdvice[selectedIndustry] && industrySpecificAdvice[selectedIndustry][score.section]) {
447
+ advice = industrySpecificAdvice[selectedIndustry][score.section];
448
+ } else if (genericAdvice[score.section]) {
449
+ advice = genericAdvice[score.section];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
450
  }
451
+
452
+ const warning = `
453
+ <div class="bg-red-100 dark:bg-red-900/50 p-4 rounded-lg text-red-800 dark:text-red-200">
454
+ <h4 class="font-semibold mb-1">${score.section}</h4>
455
+ <p class="text-sm mb-2 opacity-80">Your current selection: "${score.answer}"</p>
456
+ <p class="text-sm font-medium"><strong>Recommendation:</strong> ${advice}</p>
457
+ </div>`;
458
+ warningsDiv.insertAdjacentHTML('beforeend', warning);
459
+ });
460
+ }
461
+ }
462
+ });
463
+ </script>
464
+
465
  </body>
466
+ </html>