humphuk commited on
Commit
34f5300
·
verified ·
1 Parent(s): 7242c8f

Add 1 files

Browse files
Files changed (1) hide show
  1. index.html +365 -593
index.html CHANGED
@@ -3,7 +3,7 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Eco Quest: Saint-Gobain Sustainability Challenge</title>
7
  <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700&family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
  <style>
@@ -14,6 +14,8 @@
14
  --sg-yellow: #FFD700;
15
  --sg-white: #F5F5F5;
16
  --sg-gray: #555555;
 
 
17
  }
18
 
19
  * {
@@ -38,7 +40,7 @@
38
  backdrop-filter: blur(5px);
39
  min-height: 100vh;
40
  width: 100%;
41
- background-color: rgba(255, 255, 255, 0.85);
42
  }
43
 
44
  .container {
@@ -159,6 +161,46 @@
159
  font-family: 'Montserrat', sans-serif;
160
  }
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  .start-btn {
163
  background-color: var(--sg-green);
164
  color: white;
@@ -201,7 +243,7 @@
201
  .scenario-content {
202
  display: flex;
203
  flex-direction: column;
204
- gap: 1rem;
205
  }
206
 
207
  .scenario-text {
@@ -209,10 +251,23 @@
209
  font-size: 1.1rem;
210
  }
211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  .options-container {
213
  display: grid;
214
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
215
- gap: 1rem;
216
  margin-top: 1rem;
217
  }
218
 
@@ -225,7 +280,7 @@
225
  transition: all 0.3s ease;
226
  display: flex;
227
  flex-direction: column;
228
- gap: 0.5rem;
229
  }
230
 
231
  .option-card:hover {
@@ -250,6 +305,41 @@
250
  .option-description {
251
  font-size: 0.9rem;
252
  color: var(--sg-gray);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  }
254
 
255
  /* Result Screen */
@@ -272,11 +362,11 @@
272
  }
273
 
274
  .negative-result {
275
- border-left: 5px solid #d9534f;
276
  }
277
 
278
  .neutral-result {
279
- border-left: 5px solid #f0ad4e;
280
  }
281
 
282
  .result-title {
@@ -292,33 +382,108 @@
292
  font-size: 1.2rem;
293
  }
294
 
295
- .impact-meter {
296
- margin-top: 1rem;
 
 
 
297
  }
298
 
299
- .impact-label {
300
  display: flex;
301
- justify-content: space-between;
302
- margin-bottom: 0.5rem;
303
- font-size: 0.9rem;
304
- color: var(--sg-gray);
305
  }
306
 
307
- .impact-bar {
308
- height: 10px;
309
- background: linear-gradient(to right, #4CAF50, #FFC107, #F44336);
310
- border-radius: 5px;
 
 
 
 
 
 
 
 
311
  position: relative;
312
- overflow: hidden;
313
  }
314
 
315
- .impact-pointer {
 
 
 
 
 
 
 
316
  position: absolute;
317
- width: 2px;
318
- height: 15px;
319
- background-color: var(--sg-blue);
320
- top: -2.5px;
321
- transform: translateX(-50%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  }
323
 
324
  .next-btn {
@@ -331,6 +496,9 @@
331
  cursor: pointer;
332
  transition: all 0.3s ease;
333
  font-weight: 500;
 
 
 
334
  }
335
 
336
  .next-btn:hover {
@@ -353,6 +521,45 @@
353
  animation: bounce 2s infinite;
354
  }
355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  .certificate-btn {
357
  background-color: var(--sg-green);
358
  color: white;
@@ -374,6 +581,72 @@
374
  transform: translateY(-3px);
375
  }
376
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  /* Animations */
378
  @keyframes fadeIn {
379
  from { opacity: 0; }
@@ -403,6 +676,11 @@
403
  60% { transform: translateY(-15px); }
404
  }
405
 
 
 
 
 
 
406
  /* Responsive */
407
  @media (max-width: 768px) {
408
  .container {
@@ -424,12 +702,45 @@
424
  justify-content: center;
425
  }
426
 
 
 
 
 
427
  .options-container {
428
  grid-template-columns: 1fr;
429
  }
430
 
431
- .game-content {
432
- padding: 1.5rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433
  }
434
  }
435
 
@@ -524,6 +835,29 @@
524
  border-bottom: 2px solid var(--sg-blue);
525
  }
526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
  .certificate-details {
528
  display: flex;
529
  justify-content: space-between;
@@ -552,44 +886,6 @@
552
  text-align: center;
553
  font-weight: 600;
554
  }
555
-
556
- .badge-collection {
557
- display: flex;
558
- flex-wrap: wrap;
559
- gap: 1rem;
560
- justify-content: center;
561
- margin: 2rem 0;
562
- }
563
-
564
- .badge {
565
- width: 80px;
566
- height: 80px;
567
- border-radius: 50%;
568
- background-color: var(--sg-white);
569
- display: flex;
570
- justify-content: center;
571
- align-items: center;
572
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
573
- position: relative;
574
- transition: all 0.3s ease;
575
- }
576
-
577
- .badge i {
578
- font-size: 2.5rem;
579
- color: var(--sg-green);
580
- }
581
-
582
- .badge:hover {
583
- transform: scale(1.1);
584
- }
585
-
586
- .badge-completed {
587
- background-color: var(--sg-yellow);
588
- }
589
-
590
- .badge-completed i {
591
- color: white;
592
- }
593
  </style>
594
  </head>
595
  <body>
@@ -597,13 +893,13 @@
597
  <div class="container">
598
  <header>
599
  <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Saint-Gobain-Logo.svg/2560px-Saint-Gobain-Logo.svg.png" alt="Saint-Gobain Logo" class="logo">
600
- <h1>Eco Quest</h1>
601
- <p class="subtitle">Saint-Gobain Sustainability Challenge</p>
602
  </header>
603
 
604
  <div class="game-container">
605
  <div class="game-header">
606
- <div class="game-title">Sustainability Journey</div>
607
  <div class="progress-container">
608
  <div class="progress-text">Progress: <span id="progress-text">0</span>%</div>
609
  <div class="progress-bar">
@@ -617,529 +913,5 @@
617
  <div class="welcome-screen" id="welcome-screen">
618
  <i class="fas fa-leaf welcome-icon"></i>
619
  <div class="welcome-text">
620
- <h2>Welcome to Saint-Gobain's Sustainability Challenge</h2>
621
- <p>As a global leader in sustainable construction, Saint-Gobain is committed to reducing our environmental footprint. This interactive game will help you understand our impact and learn how you can contribute to our sustainability goals in your daily work.</p>
622
- <p>Complete the challenges to earn badges and discover how small actions can make a big difference!</p>
623
- </div>
624
- <button class="start-btn" id="start-btn">
625
- <i class="fas fa-play"></i> Begin the Journey
626
- </button>
627
- </div>
628
-
629
- <!-- Scenario Screen -->
630
- <div class="scenario-screen" id="scenario-screen">
631
- <div class="scenario-header">
632
- <i class="fas fa-question-circle scenario-icon"></i>
633
- <h2 id="scenario-title">Scenario Title</h2>
634
- </div>
635
-
636
- <div class="scenario-content">
637
- <p class="scenario-text" id="scenario-text">Scenario description goes here...</p>
638
-
639
- <div class="options-container" id="options-container">
640
- <!-- Options will be inserted here by JavaScript -->
641
- </div>
642
- </div>
643
- </div>
644
-
645
- <!-- Result Screen -->
646
- <div class="result-screen" id="result-screen">
647
- <div class="scenario-header">
648
- <i class="fas fa-chart-line scenario-icon"></i>
649
- <h2>Impact Analysis</h2>
650
- </div>
651
-
652
- <div class="result-content">
653
- <div class="result-card" id="result-card">
654
- <h3 class="result-title">
655
- <i class="fas fa-check-circle result-icon"></i>
656
- <span id="result-title">Result Title</span>
657
- </h3>
658
- <p id="result-description">Result description goes here...</p>
659
-
660
- <div class="impact-meter">
661
- <div class="impact-label">
662
- <span>Positive</span>
663
- <span>Neutral</span>
664
- <span>Negative</span>
665
- </div>
666
- <div class="impact-bar">
667
- <div class="impact-pointer" id="impact-pointer"></div>
668
- </div>
669
- </div>
670
- </div>
671
-
672
- <div class="result-card" id="saint-gobain-info">
673
- <h3 class="result-title">
674
- <i class="fas fa-building result-icon"></i>
675
- Saint-Gobain's Commitment
676
- </h3>
677
- <p id="saint-gobain-text">Information about Saint-Gobain's initiatives related to this scenario...</p>
678
- </div>
679
-
680
- <div class="result-card" id="learn-more">
681
- <h3 class="result-title">
682
- <i class="fas fa-lightbulb result-icon"></i>
683
- How You Can Make a Difference
684
- </h3>
685
- <ul id="action-items">
686
- <!-- Action items will be inserted here -->
687
- </ul>
688
- </div>
689
-
690
- <button class="next-btn" id="next-btn">
691
- Continue <i class="fas fa-arrow-right"></i>
692
- </button>
693
- </div>
694
- </div>
695
-
696
- <!-- Game Complete Screen -->
697
- <div class="game-complete-screen" id="game-complete-screen">
698
- <div class="game-complete-content">
699
- <i class="fas fa-trophy trophy-icon"></i>
700
- <h2>Congratulations!</h2>
701
- <p>You've completed the Saint-Gobain Sustainability Challenge. Your knowledge and commitment to sustainable practices will help us achieve our environmental goals.</p>
702
-
703
- <div class="badge-collection" id="badge-collection">
704
- <!-- Badges will be added here -->
705
- </div>
706
-
707
- <button class="certificate-btn" id="certificate-btn">
708
- <i class="fas fa-certificate"></i> View Your Certificate
709
- </button>
710
-
711
- <p>Share your achievement with colleagues and continue making sustainable choices in your daily work.</p>
712
- </div>
713
- </div>
714
- </div>
715
- </div>
716
- </div>
717
-
718
- <!-- Certificate Modal -->
719
- <div class="modal" id="certificate-modal">
720
- <div class="modal-content">
721
- <button class="close-modal" id="close-modal">&times;</button>
722
- <div class="certificate">
723
- <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Saint-Gobain-Logo.svg/2560px-Saint-Gobain-Logo.svg.png" alt="Saint-Gobain Logo" class="certificate-logo">
724
- <h3 class="certificate-title">Certificate of Completion</h3>
725
- <p class="certificate-subtitle">Saint-Gobain Sustainability Challenge</p>
726
-
727
- <p class="certificate-text">This certificate is awarded to recognize successful completion of the Eco Quest training program and commitment to sustainable practices at Saint-Gobain.</p>
728
-
729
- <div class="certificate-name" id="certificate-name">Employee Name</div>
730
-
731
- <p class="certificate-text">By completing this training, you've demonstrated understanding of Saint-Gobain's environmental initiatives and learned practical ways to reduce our ecological footprint in daily operations.</p>
732
-
733
- <div class="certificate-details">
734
- <div>Completion Date: <span id="certificate-date"></span></div>
735
- <div>Score: <span id="certificate-score">100%</span></div>
736
- </div>
737
-
738
- <div class="certificate-signature">
739
- <div>
740
- <div class="signature-line"></div>
741
- <div class="signature-name">Benoît Bazin</div>
742
- <div>CEO, Saint-Gobain</div>
743
- </div>
744
- <div>
745
- <div class="signature-line"></div>
746
- <div class="signature-name">Claire Pedini</div>
747
- <div>Senior VP Human Resources</div>
748
- </div>
749
- </div>
750
- </div>
751
- </div>
752
- </div>
753
- </div>
754
-
755
- <script>
756
- // Game Data
757
- const scenarios = [
758
- {
759
- id: 1,
760
- title: "Energy Efficiency in Manufacturing",
761
- description: "You're overseeing operations at one of Saint-Gobain's manufacturing plants. The plant currently uses conventional energy sources and equipment with average efficiency ratings. What approach will you take to improve energy efficiency?",
762
- options: [
763
- {
764
- title: "Immediate Full Upgrade",
765
- icon: "fas fa-bolt",
766
- description: "Invest in complete replacement of all equipment with the most energy-efficient models available",
767
- result: {
768
- title: "High Initial Impact",
769
- description: "While this approach maximizes long-term energy savings, the immediate environmental cost of manufacturing and installing all new equipment is substantial. Saint-Gobain typically favors phased approaches that balance financial and environmental considerations.",
770
- impact: 30,
771
- saintGobainInfo: "Saint-Gobain's approach is to set 'Net Zero Carbon' targets with realistic timelines. The company plans to reduce energy consumption by 25% per unit produced by 2030 through phased investments in energy-efficient technologies.",
772
- actions: [
773
- "Consider LIFE program guidelines which recommend staged investments",
774
- "Evaluate return on investment for each equipment category",
775
- "Explore co-processing opportunities with renewable energy providers",
776
- "Check SG's internal sustainability assessment tools before large purchases"
777
- ]
778
- }
779
- },
780
- {
781
- title: "Phased Smart Upgrades",
782
- icon: "fas fa-calendar-check",
783
- description: "Implement a staged replacement program focusing first on the least efficient equipment and adding smart controls",
784
- result: {
785
- title: "Balanced Sustainable Approach",
786
- description: "This aligns well with Saint-Gobain's LIFE program methodology. The phased approach allows for optimal capital allocation and minimizes environmental impact from equipment replacement while achieving steady efficiency gains.",
787
- impact: 80,
788
- saintGobainInfo: "Saint-Gobain's LIFE (Lean, Inclusive, Green, and Fast) program encourages exactly this approach. Several plants have reduced energy use by 15-20% through careful equipment upgrades combined with operational excellence initiatives.",
789
- actions: [
790
- "Use Saint-Gobain's internal energy assessment tools",
791
- "Participate in the company's energy efficiency workshops",
792
- "Implement ISO 50001 energy management standards",
793
- "Engage with the Saint-Gobain Eco-Innovation team for best practices"
794
- ]
795
- }
796
- },
797
- {
798
- title: "Operational Improvements Only",
799
- icon: "fas fa-cogs",
800
- description: "Focus only on optimizing existing operations without new equipment investments",
801
- result: {
802
- title: "Limited Long-Term Impact",
803
- description: "While operational improvements are valuable, they alone won't achieve the transformational energy reductions needed to meet Saint-Gobain's ambitious sustainability targets. Combined approaches yield better results.",
804
- impact: 50,
805
- saintGobainInfo: "Saint-Gobain's PERFORM+ operational excellence program has demonstrated that while operational improvements can yield 5-10% energy savings, they're most effective when combined with technological upgrades.",
806
- actions: [
807
- "Start with an energy audit through SG's internal programs",
808
- "Train staff on energy-efficient operational practices",
809
- "Implement real-time energy monitoring dashboards",
810
- "Consider small pilot projects for equipment upgrades"
811
- ]
812
- }
813
- }
814
- ]
815
- },
816
- {
817
- id: 2,
818
- title: "Sustainable Construction Materials",
819
- description: "Your project team is selecting materials for a new commercial construction project. How will you leverage Saint-Gobain's innovation in sustainable materials to minimize environmental impact?",
820
- options: [
821
- {
822
- title: "Traditional Materials",
823
- icon: "fas fa-hammer",
824
- description: "Stick with conventional materials that have predictable performance characteristics",
825
- result: {
826
- title: "Missed Opportunities",
827
- description: "This conservative approach misses significant opportunities to reduce the building's lifetime carbon footprint. Saint-Gobain's R&D has developed numerous sustainable alternatives that maintain performance while reducing environmental impact.",
828
- impact: 20,
829
- saintGobainInfo: "Saint-Gobain has invested heavily in developing sustainable solutions like low-carbon glass, recycled insulation materials, and energy-efficient gypsum products. The company aims to have 100% of its solutions contributing to sustainability by 2025.",
830
- actions: [
831
- "Review the Saint-Gobain Sustainable Construction catalog",
832
- "Attend product innovation webinars",
833
- "Consult with SG technical sales specialists",
834
- "Request lifecycle assessment data for materials"
835
- ]
836
- }
837
- },
838
- {
839
- title: "Innovative Solutions",
840
- icon: "fas fa-lightbulb",
841
- description: "Specify cutting-edge Saint-Gobain materials like carbon-reduced glass and recycled-content insulation",
842
- result: {
843
- title: "Leading-Edge Sustainability",
844
- description: "This approach maximizes the sustainability benefits of the project while supporting Saint-Gobain's innovation ecosystem. Many of these materials qualify for green building certification credits.",
845
- impact: 90,
846
- saintGobainInfo: "Saint-Gobain's research centers worldwide focus on developing materials that contribute to low-carbon and circular construction. Recent innovations include Glass PRISM for daylight optimization and CertainTeed AirRenew insulation with formaldehyde reduction.",
847
- actions: [
848
- "Use Saint-Gobain's Building Life Cycle Analysis tools",
849
- "Include EPDs (Environmental Product Declarations) in specifications",
850
- "Explore material reuse programs",
851
- "Participate in SG customer sustainability training"
852
- ]
853
- }
854
- },
855
- {
856
- title: "Mix of Both",
857
- icon: "fas fa-balance-scale",
858
- description: "Combine some innovative materials in visible areas with traditional materials elsewhere to balance cost and sustainability",
859
- result: {
860
- title: "Moderate Impact Approach",
861
- description: "This pragmatic approach makes progress on sustainability while managing project constraints. The key is ensuring that the sustainability benefits are realized where they matter most in the building's lifecycle.",
862
- impact: 60,
863
- saintGobainInfo: "Saint-Gobain's multicriteria analysis tools can help identify which material substitutions deliver the greatest sustainability benefits for specific project types. Many successful projects have taken a targeted approach to material innovation.",
864
- actions: [
865
- "Use SG's material substitution impact calculator",
866
- "Prioritize high-impact material changes first",
867
- "Document sustainable choices for certification",
868
- "Benchmark against similar successful projects"
869
- ]
870
- }
871
- }
872
- ]
873
- },
874
- {
875
- id: 3,
876
- title: "Circular Economy in Operations",
877
- description: "You're managing waste streams at a production facility. How will you implement Saint-Gobain's circular economy principles to reduce waste and maximize resource efficiency?",
878
- options: [
879
- {
880
- title: "Standard Recycling",
881
- icon: "fas fa-recycle",
882
- description: "Implement basic recycling of major waste streams as required by regulations",
883
- result: {
884
- title: "Minimum Compliance",
885
- description: "While this meets basic requirements, it doesn't leverage the full potential of Saint-Gobain's circular economy initiatives. The company has set much more ambitious targets for industrial waste recovery.",
886
- impact: 40,
887
- saintGobainInfo: "Saint-Gobain's target is to achieve 100% recovery rate for industrial waste by 2025, going beyond basic recycling. The company has developed specialized processes for gypsum, glass, and insulation recycling.",
888
- actions: [
889
- "Review site waste streams with the SG sustainability team",
890
- "Explore industrial symbiosis opportunities",
891
- "Investigate closed-loop recycling programs",
892
- "Benchmark against best-performing SG plants"
893
- ]
894
- }
895
- },
896
- {
897
- title: "Closed-Loop System",
898
- icon: "fas fa-infinity",
899
- description: "Develop a comprehensive closed-loop system that processes and reuses materials throughout the production cycle",
900
- result: {
901
- title: "Exemplary Circular Approach",
902
- description: "This ambitious but achievable approach aligns perfectly with Saint-Gobain's circular economy goals. It may qualify for external recognition and internal excellence awards while delivering cost savings.",
903
- impact: 95,
904
- saintGobainInfo: "Several Saint-Gobain plants now operate near-zero-waste facilities through innovative closed-loop systems. The Gypsum business has achieved over 90% waste recovery in some plants by recycling plaster waste directly back into production.",
905
- actions: [
906
- "Consult with SG Circular Economy experts",
907
- "Apply for SG innovation funding",
908
- "Document cost savings from waste reduction",
909
- "Train staff in circular economy principles"
910
- ]
911
- }
912
- },
913
- {
914
- title: "Partial Optimization",
915
- icon: "fas fa-project-diagram",
916
- description: "Focus on recycling high-volume waste streams while improving overall material efficiency",
917
- result: {
918
- title: "Incremental Improvement",
919
- description: "This practical approach makes meaningful progress toward circular economy goals while being easier to implement than comprehensive closed-loop systems. It provides a foundation for more advanced initiatives later.",
920
- impact: 70,
921
- saintGobainInfo: "Saint-Gobain's circular economy roadmap includes both immediate actions and longer-term transformational projects. Many success stories begin with optimizing major waste streams before expanding to complete material loop closure.",
922
- actions: [
923
- "Conduct a detailed waste audit",
924
- "Identify the 20% of waste streams causing 80% of impact",
925
- "Implement visual management for waste reduction",
926
- "Set measurable improvement targets"
927
- ]
928
- }
929
- }
930
- ]
931
- }
932
- ];
933
-
934
- // Game State
935
- let currentScenario = 0;
936
- let score = 0;
937
- let badgesEarned = [];
938
- const employeeName = "Saint-Gobain Employee"; // In a real app, this would come from user input or auth system
939
-
940
- // DOM Elements
941
- const welcomeScreen = document.getElementById('welcome-screen');
942
- const scenarioScreen = document.getElementById('scenario-screen');
943
- const resultScreen = document.getElementById('result-screen');
944
- const gameCompleteScreen = document.getElementById('game-complete-screen');
945
-
946
- const scenarioTitle = document.getElementById('scenario-title');
947
- const scenarioText = document.getElementById('scenario-text');
948
- const optionsContainer = document.getElementById('options-container');
949
-
950
- const resultTitle = document.getElementById('result-title');
951
- const resultDescription = document.getElementById('result-description');
952
- const saintGobainText = document.getElementById('saint-gobain-text');
953
- const actionItems = document.getElementById('action-items');
954
- const impactPointer = document.getElementById('impact-pointer');
955
-
956
- const progressText = document.getElementById('progress-text');
957
- const progressBar = document.getElementById('progress-bar');
958
-
959
- const badgeCollection = document.getElementById('badge-collection');
960
- const certificateBtn = document.getElementById('certificate-btn');
961
- const certificateModal = document.getElementById('certificate-modal');
962
- const closeModal = document.getElementById('close-modal');
963
- const certificateName = document.getElementById('certificate-name');
964
- const certificateDate = document.getElementById('certificate-date');
965
-
966
- // Initialize the game
967
- document.addEventListener('DOMContentLoaded', () => {
968
- // Set current date for certificate
969
- const today = new Date();
970
- certificateDate.textContent = today.toLocaleDateString('en-US', {
971
- year: 'numeric',
972
- month: 'long',
973
- day: 'numeric'
974
- });
975
-
976
- // Set employee name
977
- certificateName.textContent = employeeName;
978
-
979
- // Event listeners
980
- document.getElementById('start-btn').addEventListener('click', startGame);
981
- document.getElementById('next-btn').addEventListener('click', nextScenario);
982
- certificateBtn.addEventListener('click', showCertificate);
983
- closeModal.addEventListener('click', () => {
984
- certificateModal.style.display = 'none';
985
- });
986
-
987
- // Close modal when clicking outside
988
- window.addEventListener('click', (e) => {
989
- if (e.target === certificateModal) {
990
- certificateModal.style.display = 'none';
991
- }
992
- });
993
- });
994
-
995
- function startGame() {
996
- welcomeScreen.style.display = 'none';
997
- loadScenario(currentScenario);
998
- scenarioScreen.style.display = 'flex';
999
- updateProgress();
1000
- }
1001
-
1002
- function loadScenario(index) {
1003
- const scenario = scenarios[index];
1004
- scenarioTitle.textContent = scenario.title;
1005
- scenarioText.textContent = scenario.description;
1006
-
1007
- // Clear previous options
1008
- optionsContainer.innerHTML = '';
1009
-
1010
- // Add new options
1011
- scenario.options.forEach((option, i) => {
1012
- const optionCard = document.createElement('div');
1013
- optionCard.className = 'option-card';
1014
- optionCard.innerHTML = `
1015
- <i class="${option.icon} option-icon"></i>
1016
- <h3 class="option-title">${option.title}</h3>
1017
- <p class="option-description">${option.description}</p>
1018
- `;
1019
- optionCard.addEventListener('click', () => selectOption(i));
1020
- optionsContainer.appendChild(optionCard);
1021
- });
1022
- }
1023
-
1024
- function selectOption(optionIndex) {
1025
- const scenario = scenarios[currentScenario];
1026
- const option = scenario.options[optionIndex];
1027
-
1028
- // Calculate score adjustment based on impact
1029
- score += option.result.impact;
1030
-
1031
- // Display results
1032
- resultTitle.textContent = option.result.title;
1033
- resultDescription.textContent = option.result.description;
1034
- saintGobainText.textContent = option.result.saintGobainInfo;
1035
-
1036
- // Set impact pointer position (0-100%)
1037
- const impactPosition = option.result.impact;
1038
- impactPointer.style.left = `${impactPosition}%`;
1039
-
1040
- // Add action items
1041
- actionItems.innerHTML = '';
1042
- option.result.actions.forEach(action => {
1043
- const li = document.createElement('li');
1044
- li.textContent = action;
1045
- actionItems.appendChild(li);
1046
- });
1047
-
1048
- // Set result card class based on impact
1049
- const resultCard = document.getElementById('result-card');
1050
- resultCard.className = 'result-card';
1051
- if (impactPosition > 70) {
1052
- resultCard.classList.add('positive-result');
1053
- } else if (impactPosition < 40) {
1054
- resultCard.classList.add('negative-result');
1055
- } else {
1056
- resultCard.classList.add('neutral-result');
1057
- }
1058
-
1059
- // Show result screen
1060
- scenarioScreen.style.display = 'none';
1061
- resultScreen.style.display = 'flex';
1062
-
1063
- // Check if this scenario earns a badge
1064
- if (impactPosition > 70) {
1065
- const badge = {
1066
- scenarioId: scenario.id,
1067
- title: scenario.title,
1068
- impact: impactPosition
1069
- };
1070
- badgesEarned.push(badge);
1071
- }
1072
- }
1073
-
1074
- function nextScenario() {
1075
- currentScenario++;
1076
-
1077
- if (currentScenario < scenarios.length) {
1078
- // Load next scenario
1079
- loadScenario(currentScenario);
1080
- resultScreen.style.display = 'none';
1081
- scenarioScreen.style.display = 'flex';
1082
- updateProgress();
1083
- } else {
1084
- // Game complete
1085
- showGameComplete();
1086
- }
1087
- }
1088
-
1089
- function showGameComplete() {
1090
- resultScreen.style.display = 'none';
1091
- gameCompleteScreen.style.display = 'flex';
1092
- updateProgress();
1093
-
1094
- // Display earned badges
1095
- badgeCollection.innerHTML = '';
1096
-
1097
- // Add all possible badges (showing which were earned)
1098
- scenarios.forEach((scenario, i) => {
1099
- const badge = document.createElement('div');
1100
- badge.className = 'badge';
1101
-
1102
- // Check if this badge was earned
1103
- const earnedBadge = badgesEarned.find(b => b.scenarioId === scenario.id);
1104
- if (earnedBadge) {
1105
- badge.classList.add('badge-completed');
1106
- }
1107
-
1108
- // Placeholder for badge icons matching scenario topics
1109
- let badgeIcon;
1110
- switch (i) {
1111
- case 0:
1112
- badgeIcon = 'fas fa-bolt';
1113
- break;
1114
- case 1:
1115
- badgeIcon = 'fas fa-leaf';
1116
- break;
1117
- case 2:
1118
- badgeIcon = 'fas fa-recycle';
1119
- break;
1120
- default:
1121
- badgeIcon = 'fas fa-star';
1122
- }
1123
-
1124
- badge.innerHTML = `<i class="${badgeIcon}"></i>`;
1125
- badgeCollection.appendChild(badge);
1126
- });
1127
- }
1128
-
1129
- function updateProgress() {
1130
- const progress = ((currentScenario) / scenarios.length) * 100;
1131
- progressText.textContent = Math.round(progress);
1132
- progressBar.style.width = `${progress}%`;
1133
- }
1134
-
1135
- function showCertificate() {
1136
- // Set certificate score based on average impact
1137
- const avgScore = score / scenarios.length;
1138
- document.getElementById('certificate-score').textContent = `${Math.round(avgScore)}%`;
1139
-
1140
- // Show modal
1141
- certificateModal.style.display = 'flex';
1142
- }
1143
- </script>
1144
- </body>
1145
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>EcoQuest: Saint-Gobain Advanced Sustainability Challenge</title>
7
  <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700&family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
  <style>
 
14
  --sg-yellow: #FFD700;
15
  --sg-white: #F5F5F5;
16
  --sg-gray: #555555;
17
+ --sg-red: #D9534F;
18
+ --sg-orange: #F0AD4E;
19
  }
20
 
21
  * {
 
40
  backdrop-filter: blur(5px);
41
  min-height: 100vh;
42
  width: 100%;
43
+ background-color: rgba(255, 255, 255, 0.9);
44
  }
45
 
46
  .container {
 
161
  font-family: 'Montserrat', sans-serif;
162
  }
163
 
164
+ .welcome-text p {
165
+ margin-bottom: 1rem;
166
+ text-align: left;
167
+ }
168
+
169
+ .employee-details {
170
+ background-color: #f5f5f5;
171
+ padding: 1.5rem;
172
+ border-radius: 10px;
173
+ width: 100%;
174
+ max-width: 500px;
175
+ text-align: left;
176
+ margin-bottom: 1rem;
177
+ }
178
+
179
+ .employee-details h3 {
180
+ color: var(--sg-blue);
181
+ margin-bottom: 0.5rem;
182
+ font-family: 'Montserrat', sans-serif;
183
+ font-size: 1.1rem;
184
+ }
185
+
186
+ .form-group {
187
+ margin-bottom: 1rem;
188
+ }
189
+
190
+ .form-group label {
191
+ display: block;
192
+ margin-bottom: 0.3rem;
193
+ font-weight: 500;
194
+ }
195
+
196
+ .form-group input, .form-group select {
197
+ width: 100%;
198
+ padding: 0.5rem;
199
+ border: 1px solid #ddd;
200
+ border-radius: 4px;
201
+ font-family: inherit;
202
+ }
203
+
204
  .start-btn {
205
  background-color: var(--sg-green);
206
  color: white;
 
243
  .scenario-content {
244
  display: flex;
245
  flex-direction: column;
246
+ gap: 1.5rem;
247
  }
248
 
249
  .scenario-text {
 
251
  font-size: 1.1rem;
252
  }
253
 
254
+ .scenario-card {
255
+ background-color: #f9f9f9;
256
+ border-radius: 10px;
257
+ padding: 1.5rem;
258
+ margin-bottom: 1rem;
259
+ }
260
+
261
+ .scenario-card h3 {
262
+ color: var(--sg-blue);
263
+ margin-bottom: 0.5rem;
264
+ font-family: 'Montserrat', sans-serif;
265
+ }
266
+
267
  .options-container {
268
  display: grid;
269
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
270
+ gap: 1.5rem;
271
  margin-top: 1rem;
272
  }
273
 
 
280
  transition: all 0.3s ease;
281
  display: flex;
282
  flex-direction: column;
283
+ gap: 0.8rem;
284
  }
285
 
286
  .option-card:hover {
 
305
  .option-description {
306
  font-size: 0.9rem;
307
  color: var(--sg-gray);
308
+ margin-bottom: 0.5rem;
309
+ }
310
+
311
+ .option-details {
312
+ font-size: 0.85rem;
313
+ margin-top: 0.5rem;
314
+ padding-top: 0.5rem;
315
+ border-top: 1px dashed #ccc;
316
+ }
317
+
318
+ .details-row {
319
+ display: flex;
320
+ justify-content: space-between;
321
+ margin-bottom: 0.3rem;
322
+ }
323
+
324
+ .details-label {
325
+ font-weight: 500;
326
+ color: var(--sg-gray);
327
+ }
328
+
329
+ .details-value {
330
+ font-weight: 500;
331
+ }
332
+
333
+ .cost-value {
334
+ color: var(--sg-blue);
335
+ }
336
+
337
+ .co2-value {
338
+ color: var(--sg-green);
339
+ }
340
+
341
+ .roi-value {
342
+ color: var(--sg-light-blue);
343
  }
344
 
345
  /* Result Screen */
 
362
  }
363
 
364
  .negative-result {
365
+ border-left: 5px solid var(--sg-red);
366
  }
367
 
368
  .neutral-result {
369
+ border-left: 5px solid var(--sg-orange);
370
  }
371
 
372
  .result-title {
 
382
  font-size: 1.2rem;
383
  }
384
 
385
+ .impact-chart {
386
+ display: flex;
387
+ flex-direction: column;
388
+ gap: 0.8rem;
389
+ margin-top: 1.5rem;
390
  }
391
 
392
+ .chart-container {
393
  display: flex;
394
+ height: 200px;
395
+ gap: 0.5rem;
396
+ align-items: flex-end;
 
397
  }
398
 
399
+ .chart-bar {
400
+ flex: 1;
401
+ display: flex;
402
+ flex-direction: column;
403
+ justify-content: flex-end;
404
+ }
405
+
406
+ .chart-bar-fill {
407
+ height: 0%;
408
+ background-color: var(--sg-green);
409
+ border-radius: 4px 4px 0 0;
410
+ transition: height 1s ease-in-out;
411
  position: relative;
 
412
  }
413
 
414
+ .chart-bar-label {
415
+ text-align: center;
416
+ padding: 0.3rem;
417
+ font-size: 0.8rem;
418
+ font-weight: 500;
419
+ }
420
+
421
+ .chart-bar-value {
422
  position: absolute;
423
+ top: -25px;
424
+ left: 0;
425
+ width: 100%;
426
+ text-align: center;
427
+ font-size: 0.75rem;
428
+ font-weight: 600;
429
+ }
430
+
431
+ .chart-legend {
432
+ display: flex;
433
+ justify-content: center;
434
+ gap: 1.5rem;
435
+ margin-top: 0.5rem;
436
+ }
437
+
438
+ .legend-item {
439
+ display: flex;
440
+ align-items: center;
441
+ gap: 0.3rem;
442
+ font-size: 0.8rem;
443
+ }
444
+
445
+ .legend-color {
446
+ width: 12px;
447
+ height: 12px;
448
+ border-radius: 2px;
449
+ }
450
+
451
+ .impact-analysis {
452
+ margin-top: 1.5rem;
453
+ display: grid;
454
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
455
+ gap: 1rem;
456
+ }
457
+
458
+ .impact-metric {
459
+ background-color: white;
460
+ padding: 1rem;
461
+ border-radius: 8px;
462
+ box-shadow: 0 2px 5px rgba(0,0,0,0.05);
463
+ text-align: center;
464
+ }
465
+
466
+ .metric-value {
467
+ font-size: 1.5rem;
468
+ font-weight: 600;
469
+ margin: 0.5rem 0;
470
+ }
471
+
472
+ .metric-label {
473
+ font-size: 0.8rem;
474
+ color: var(--sg-gray);
475
+ }
476
+
477
+ .metric-positive {
478
+ color: var(--sg-green);
479
+ }
480
+
481
+ .metric-negative {
482
+ color: var(--sg-red);
483
+ }
484
+
485
+ .metric-neutral {
486
+ color: var(--sg-orange);
487
  }
488
 
489
  .next-btn {
 
496
  cursor: pointer;
497
  transition: all 0.3s ease;
498
  font-weight: 500;
499
+ display: flex;
500
+ align-items: center;
501
+ gap: 0.5rem;
502
  }
503
 
504
  .next-btn:hover {
 
521
  animation: bounce 2s infinite;
522
  }
523
 
524
+ .score-summary {
525
+ background-color: #f5f5f5;
526
+ padding: 1.5rem;
527
+ border-radius: 10px;
528
+ width: 100%;
529
+ max-width: 600px;
530
+ margin-bottom: 1rem;
531
+ }
532
+
533
+ .score-metric {
534
+ display: flex;
535
+ justify-content: space-between;
536
+ margin-bottom: 0.8rem;
537
+ padding-bottom: 0.8rem;
538
+ border-bottom: 1px solid #e0e0e0;
539
+ }
540
+
541
+ .score-metric:last-child {
542
+ border-bottom: none;
543
+ margin-bottom: 0;
544
+ padding-bottom: 0;
545
+ }
546
+
547
+ .score-label {
548
+ font-weight: 500;
549
+ }
550
+
551
+ .score-value {
552
+ font-weight: 600;
553
+ }
554
+
555
+ .total-score {
556
+ font-size: 1.3rem;
557
+ color: var(--sg-blue);
558
+ margin-top: 1rem;
559
+ padding-top: 1rem;
560
+ border-top: 2px solid var(--sg-blue);
561
+ }
562
+
563
  .certificate-btn {
564
  background-color: var(--sg-green);
565
  color: white;
 
581
  transform: translateY(-3px);
582
  }
583
 
584
+ .badge-collection {
585
+ display: flex;
586
+ flex-wrap: wrap;
587
+ gap: 1.5rem;
588
+ justify-content: center;
589
+ margin: 2rem 0;
590
+ max-width: 800px;
591
+ }
592
+
593
+ .badge {
594
+ width: 100px;
595
+ height: 120px;
596
+ display: flex;
597
+ flex-direction: column;
598
+ align-items: center;
599
+ justify-content: center;
600
+ gap: 0.5rem;
601
+ padding: 1rem;
602
+ border-radius: 10px;
603
+ background-color: var(--sg-white);
604
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
605
+ position: relative;
606
+ transition: all 0.3s ease;
607
+ }
608
+
609
+ .badge i {
610
+ font-size: 2.5rem;
611
+ color: var(--sg-green);
612
+ }
613
+
614
+ .badge:hover {
615
+ transform: translateY(-5px);
616
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
617
+ }
618
+
619
+ .badge-completed {
620
+ background-color: var(--sg-yellow);
621
+ }
622
+
623
+ .badge-completed i {
624
+ color: white;
625
+ }
626
+
627
+ .badge-title {
628
+ font-size: 0.7rem;
629
+ font-weight: 600;
630
+ text-align: center;
631
+ color: var(--sg-gray);
632
+ }
633
+
634
+ .badge-score {
635
+ position: absolute;
636
+ top: -8px;
637
+ right: -8px;
638
+ background-color: var(--sg-blue);
639
+ color: white;
640
+ width: 25px;
641
+ height: 25px;
642
+ border-radius: 50%;
643
+ display: flex;
644
+ align-items: center;
645
+ justify-content: center;
646
+ font-size: 0.7rem;
647
+ font-weight: 600;
648
+ }
649
+
650
  /* Animations */
651
  @keyframes fadeIn {
652
  from { opacity: 0; }
 
676
  60% { transform: translateY(-15px); }
677
  }
678
 
679
+ @keyframes grow {
680
+ from { height: 0%; }
681
+ to { height: var(--target-height); }
682
+ }
683
+
684
  /* Responsive */
685
  @media (max-width: 768px) {
686
  .container {
 
702
  justify-content: center;
703
  }
704
 
705
+ .game-content {
706
+ padding: 1.5rem;
707
+ }
708
+
709
  .options-container {
710
  grid-template-columns: 1fr;
711
  }
712
 
713
+ .impact-analysis {
714
+ grid-template-columns: 1fr 1fr;
715
+ }
716
+
717
+ .badge {
718
+ width: 80px;
719
+ height: 100px;
720
+ }
721
+
722
+ .badge i {
723
+ font-size: 2rem;
724
+ }
725
+ }
726
+
727
+ @media (max-width: 480px) {
728
+ .impact-analysis {
729
+ grid-template-columns: 1fr;
730
+ }
731
+
732
+ .badge-collection {
733
+ gap: 1rem;
734
+ }
735
+
736
+ .badge {
737
+ width: 70px;
738
+ height: 90px;
739
+ padding: 0.5rem;
740
+ }
741
+
742
+ .badge i {
743
+ font-size: 1.5rem;
744
  }
745
  }
746
 
 
835
  border-bottom: 2px solid var(--sg-blue);
836
  }
837
 
838
+ .performance-metrics {
839
+ display: grid;
840
+ grid-template-columns: repeat(3, 1fr);
841
+ gap: 1rem;
842
+ margin: 2rem 0;
843
+ }
844
+
845
+ .certificate-metric {
846
+ padding: 1rem;
847
+ }
848
+
849
+ .metric-number {
850
+ font-size: 1.8rem;
851
+ font-weight: 700;
852
+ color: var(--sg-blue);
853
+ margin-bottom: 0.3rem;
854
+ }
855
+
856
+ .metric-description {
857
+ font-size: 0.9rem;
858
+ color: var(--sg-gray);
859
+ }
860
+
861
  .certificate-details {
862
  display: flex;
863
  justify-content: space-between;
 
886
  text-align: center;
887
  font-weight: 600;
888
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
889
  </style>
890
  </head>
891
  <body>
 
893
  <div class="container">
894
  <header>
895
  <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Saint-Gobain-Logo.svg/2560px-Saint-Gobain-Logo.svg.png" alt="Saint-Gobain Logo" class="logo">
896
+ <h1>EcoQuest</h1>
897
+ <p class="subtitle">Saint-Gobain Advanced Sustainability Challenge</p>
898
  </header>
899
 
900
  <div class="game-container">
901
  <div class="game-header">
902
+ <div class="game-title">Sustainability Decision Simulator</div>
903
  <div class="progress-container">
904
  <div class="progress-text">Progress: <span id="progress-text">0</span>%</div>
905
  <div class="progress-bar">
 
913
  <div class="welcome-screen" id="welcome-screen">
914
  <i class="fas fa-leaf welcome-icon"></i>
915
  <div class="welcome-text">
916
+ <
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
917
  </html>