my-cloud-devops-consulting 1.1.202507070855__tar.gz → 1.1.202507090134__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {my-cloud-devops-consulting-1.1.202507070855/my_cloud_devops_consulting.egg-info → my-cloud-devops-consulting-1.1.202507090134}/PKG-INFO +1 -1
  2. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134/my_cloud_devops_consulting.egg-info}/PKG-INFO +1 -1
  3. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/SOURCES.txt +3 -1
  4. my-cloud-devops-consulting-1.1.202507090134/static/anifest.json +21 -0
  5. my-cloud-devops-consulting-1.1.202507090134/static/images/favicon.svg +1 -0
  6. my-cloud-devops-consulting-1.1.202507090134/static/images/whatsapp-navbar.png +0 -0
  7. my-cloud-devops-consulting-1.1.202507090134/static/js/main.js +87 -0
  8. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/base.html +69 -15
  9. my-cloud-devops-consulting-1.1.202507070855/static/images/whatspp.jpeg +0 -0
  10. my-cloud-devops-consulting-1.1.202507070855/static/js/main.js +0 -179
  11. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/MANIFEST.in +0 -0
  12. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/README.md +0 -0
  13. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/app.py +0 -0
  14. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/dependency_links.txt +0 -0
  15. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/requires.txt +0 -0
  16. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/top_level.txt +0 -0
  17. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/setup.cfg +0 -0
  18. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/setup.py +0 -0
  19. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/about.css +0 -0
  20. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/assessment.css +0 -0
  21. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/contact-form.css +0 -0
  22. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/index.css +0 -0
  23. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/login.css +0 -0
  24. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/main.css +0 -0
  25. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/register.css +0 -0
  26. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/services.css +0 -0
  27. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/images/image.jpg +0 -0
  28. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/counter.js +0 -0
  29. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/index.js +0 -0
  30. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/login.js +0 -0
  31. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/register.js +0 -0
  32. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/services.js +0 -0
  33. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/typing.js +0 -0
  34. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/about.html +0 -0
  35. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/assessment.html +0 -0
  36. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/contact-form.html +0 -0
  37. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/index.html +0 -0
  38. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/login.html +0 -0
  39. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/private-videos.html +0 -0
  40. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/register.html +0 -0
  41. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/services.html +0 -0
  42. {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/test/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: my-cloud-devops-consulting
3
- Version: 1.1.202507070855
3
+ Version: 1.1.202507090134
4
4
  Summary: This is my consulting website for Cloud & DevOps services.
5
5
  Home-page: https://github.com/Betrand1999/project-root
6
6
  Author: Betrand Mutagha
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: my-cloud-devops-consulting
3
- Version: 1.1.202507070855
3
+ Version: 1.1.202507090134
4
4
  Summary: This is my consulting website for Cloud & DevOps services.
5
5
  Home-page: https://github.com/Betrand1999/project-root
6
6
  Author: Betrand Mutagha
@@ -7,6 +7,7 @@ my_cloud_devops_consulting.egg-info/SOURCES.txt
7
7
  my_cloud_devops_consulting.egg-info/dependency_links.txt
8
8
  my_cloud_devops_consulting.egg-info/requires.txt
9
9
  my_cloud_devops_consulting.egg-info/top_level.txt
10
+ static/anifest.json
10
11
  static/css/about.css
11
12
  static/css/assessment.css
12
13
  static/css/contact-form.css
@@ -15,8 +16,9 @@ static/css/login.css
15
16
  static/css/main.css
16
17
  static/css/register.css
17
18
  static/css/services.css
19
+ static/images/favicon.svg
18
20
  static/images/image.jpg
19
- static/images/whatspp.jpeg
21
+ static/images/whatsapp-navbar.png
20
22
  static/js/counter.js
21
23
  static/js/index.js
22
24
  static/js/login.js
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "CDC Firm Cloud DevOps Consulting",
3
+ "short_name": "CDC Consulting",
4
+ "start_url": "/",
5
+ "display": "standalone",
6
+ "background_color": "#ffffff",
7
+ "theme_color": "#007BFF",
8
+ "icons": [
9
+ {
10
+ "src": "{{ url_for('static', filename='images/android-chrome-192x192.png') }}",
11
+ "sizes": "192x192",
12
+ "type": "image/png"
13
+ },
14
+ {
15
+ "src": "{{ url_for('static', filename='images/android-chrome-512x512.png') }}",
16
+ "sizes": "512x512",
17
+ "type": "image/png"
18
+ }
19
+ ]
20
+ }
21
+
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 200 200"><rect width="200" height="200" fill="url('#gradient')"></rect><defs><linearGradient id="gradient" gradientTransform="rotate(45 0.5 0.5)"><stop offset="0%" stop-color="#ceaa96"></stop><stop offset="100%" stop-color="#49f10e"></stop></linearGradient></defs><g><g fill="#445272" transform="matrix(4.572578616352201,0,0,4.572578616352201,26.678547033693803,133.8394241481757)" stroke="#c8512e" stroke-width="0.35"><path d="M5.39-2.34L5.39-2.34Q6.08-2.34 6.46-2.72Q6.85-3.10 6.84-3.77L6.84-3.77L9.92-3.77Q9.92-2.03 8.68-0.92Q7.43 0.20 5.47 0.20L5.47 0.20Q3.16 0.20 1.84-1.25Q0.51-2.70 0.51-5.25L0.51-5.25L0.51-5.39Q0.51-6.99 1.10-8.22Q1.69-9.44 2.80-10.10Q3.92-10.76 5.44-10.76L5.44-10.76Q7.50-10.76 8.71-9.62Q9.92-8.48 9.92-6.52L9.92-6.52L6.84-6.52Q6.84-7.34 6.44-7.78Q6.04-8.22 5.36-8.22L5.36-8.22Q4.08-8.22 3.87-6.59L3.87-6.59Q3.80-6.07 3.80-5.17L3.80-5.17Q3.80-3.57 4.18-2.96Q4.56-2.34 5.39-2.34ZM10.90-5.36L10.90-5.36Q10.90-7.87 11.98-9.32Q13.07-10.76 15.01-10.76L15.01-10.76Q16.43-10.76 17.39-9.65L17.39-9.65L17.39-15L20.69-15L20.69 0L17.73 0L17.57-1.13Q16.55 0.20 14.99 0.20L14.99 0.20Q13.11 0.20 12.00-1.25Q10.90-2.70 10.90-5.36ZM14.20-5.76L14.19-5.16Q14.19-2.34 15.83-2.34L15.83-2.34Q16.92-2.34 17.39-3.26L17.39-3.26L17.39-7.29Q16.94-8.22 15.85-8.22L15.85-8.22Q14.33-8.22 14.20-5.76L14.20-5.76ZM27.03-2.34L27.03-2.34Q27.72-2.34 28.11-2.72Q28.49-3.10 28.48-3.77L28.48-3.77L31.56-3.77Q31.56-2.03 30.32-0.92Q29.07 0.20 27.11 0.20L27.11 0.20Q24.80 0.20 23.48-1.25Q22.15-2.70 22.15-5.25L22.15-5.25L22.15-5.39Q22.15-6.99 22.74-8.22Q23.33-9.44 24.44-10.10Q25.56-10.76 27.08-10.76L27.08-10.76Q29.14-10.76 30.35-9.62Q31.56-8.48 31.56-6.52L31.56-6.52L28.48-6.52Q28.48-7.34 28.08-7.78Q27.68-8.22 27.00-8.22L27.00-8.22Q25.72-8.22 25.51-6.59L25.51-6.59Q25.44-6.07 25.44-5.17L25.44-5.17Q25.44-3.57 25.82-2.96Q26.20-2.34 27.03-2.34Z"></path></g></g></svg>
@@ -0,0 +1,87 @@
1
+ document.addEventListener("DOMContentLoaded", () => {
2
+ // Smooth scrolling for all internal links
3
+ const smoothScrollLinks = document.querySelectorAll("a[href^='#']");
4
+ smoothScrollLinks.forEach(link => {
5
+ link.addEventListener("click", (event) => {
6
+ event.preventDefault();
7
+ const targetId = link.getAttribute("href").substring(1);
8
+ const targetElement = document.getElementById(targetId);
9
+ if (targetElement) {
10
+ targetElement.scrollIntoView({ behavior: "smooth" });
11
+ }
12
+ });
13
+ });
14
+
15
+ // Back to top button functionality
16
+ const backToTopButton = document.createElement("button");
17
+ backToTopButton.innerText = "↑ Top";
18
+ backToTopButton.className = "scroll-to-top";
19
+ document.body.appendChild(backToTopButton);
20
+
21
+ backToTopButton.style.display = "none";
22
+ backToTopButton.addEventListener("click", () => {
23
+ window.scrollTo({ top: 0, behavior: "smooth" });
24
+ });
25
+
26
+ window.addEventListener("scroll", () => {
27
+ backToTopButton.style.display = window.pageYOffset > 300 ? "block" : "none";
28
+ });
29
+
30
+ // Modular function to reveal elements on scroll
31
+ const revealOnScroll = () => {
32
+ const sections = document.querySelectorAll("section");
33
+ const viewportHeight = window.innerHeight;
34
+ sections.forEach(section => {
35
+ const sectionTop = section.getBoundingClientRect().top;
36
+ if (sectionTop < viewportHeight - 100) {
37
+ section.classList.add("visible");
38
+ }
39
+ });
40
+ };
41
+ window.addEventListener("scroll", revealOnScroll);
42
+ revealOnScroll(); // ✅ Reveal sections immediately on page load
43
+
44
+ // Inject dynamic styles for section reveal effect
45
+ const styleSheet = document.createElement("style");
46
+ styleSheet.innerText = `
47
+ section {
48
+ opacity: 0;
49
+ transform: translateY(20px);
50
+ transition: opacity 0.5s ease, transform 0.5s ease;
51
+ }
52
+ section.visible {
53
+ opacity: 1;
54
+ transform: translateY(0);
55
+ }
56
+ .scroll-to-top {
57
+ position: fixed;
58
+ bottom: 20px;
59
+ right: 20px;
60
+ padding: 10px 15px;
61
+ background: #007bff;
62
+ color: white;
63
+ border: none;
64
+ border-radius: 5px;
65
+ display: none;
66
+ cursor: pointer;
67
+ }
68
+ .scroll-to-top:hover {
69
+ background: #0056b3;
70
+ }
71
+ `;
72
+ document.head.appendChild(styleSheet);
73
+
74
+ // Testimonials auto-rotation
75
+ const testimonials = document.querySelectorAll(".testimonial");
76
+ let index = 0;
77
+
78
+ function rotateTestimonials() {
79
+ testimonials[index].classList.remove("active");
80
+ index = (index + 1) % testimonials.length;
81
+ testimonials[index].classList.add("active");
82
+ }
83
+
84
+ if (testimonials.length > 1) {
85
+ setInterval(rotateTestimonials, 2000);
86
+ }
87
+ });
@@ -3,7 +3,27 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>cloud & DevOps Consulting</title>
6
+ <title>CDC Firm | Cloud & DevOps Consulting Services</title>
7
+ <link
8
+ rel="apple-touch-icon"
9
+ sizes="180x180"
10
+ href="{{ url_for('static', filename='images/apple-touch-icon.png') }}"
11
+ />
12
+
13
+ <link
14
+ rel="icon"
15
+ href="{{ url_for('static', filename='images/favicon.svg') }}"
16
+ type="image/svg+xml"
17
+ />
18
+ <link
19
+ rel="manifest"
20
+ href="{{ url_for('static', filename='manifest.json') }}"
21
+ />
22
+ <meta name="theme-color" content="#007BFF" />
23
+ <meta name="application-name" content="CDC Firm" />
24
+ <meta name="apple-mobile-web-app-title" content="CDC Firm" />
25
+ <meta name="msapplication-TileColor" content="#007BFF" />
26
+ <meta name="theme-color" content="#007BFF" />
7
27
 
8
28
  <!-- ✅ Font Awesome -->
9
29
  <link
@@ -165,6 +185,38 @@
165
185
  ><i class="fas fa-sign-in-alt"></i> Login</a
166
186
  >
167
187
  </li>
188
+ <li
189
+ style="
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ "
194
+ >
195
+ <a
196
+ href="https://wa.me/12402981823?text=Hi%2C%20I%20need%20some%20help"
197
+ target="_blank"
198
+ rel="noopener noreferrer"
199
+ style="
200
+ display: inline-flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ background-color: #25d366;
204
+ border-radius: 50%;
205
+ width: 38px;
206
+ height: 38px;
207
+ padding: 6px;
208
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
209
+ "
210
+ >
211
+ <img
212
+ src="{{ url_for('static', filename='images/whatsapp-navbar.png') }}"
213
+ alt="WhatsApp"
214
+ title="Chat with us on WhatsApp"
215
+ style="width: 22px; height: 22px"
216
+ />
217
+ </a>
218
+ </li>
219
+
168
220
  {% endif %}
169
221
  </ul>
170
222
  </nav>
@@ -198,23 +250,25 @@
198
250
  {% block main %}{% endblock main %}
199
251
 
200
252
  <footer>
201
- <div class="contact-info">
202
- <p>
203
- Phone: 240 298 1823 📞🔵 answer | Email 📩 :
204
- <a href="info@clouddevopsconsulting.com"
253
+ <div class="contact-info" style="text-align: center; padding: 20px">
254
+ <address style="font-style: normal">
255
+ <strong>CDC Firm</strong><br />
256
+ 6277 Stumph Road, Parma Heights, OH 44130<br />
257
+ Phone: <a href="tel:+12402981823">240-298-1823</a><br />
258
+ Email:
259
+ <a href="mailto:info@clouddevopsconsulting.com"
205
260
  >info@clouddevopsconsulting.com</a
206
- >
207
-
208
- <a
209
- href="https://wa.me/12402981823?text=Hi%2C%20I%20need%20some%20help"
210
- target="_blank"
211
- >
212
- Chat with us on WhatsApp
213
- </a>
214
- </p>
261
+ ><br />
262
+ <!--add whatapp logo-->
263
+
264
+ <!--add whatapp logo-->
265
+ </address>
215
266
  </div>
216
- <p>&copy; 2025 Cloud & DevOps Consulting. All rights reserved.</p>
267
+ <p style="text-align: center">
268
+ &copy; 2025 Cloud & DevOps Consulting. All rights reserved.
269
+ </p>
217
270
  </footer>
271
+
218
272
  <script
219
273
  src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
220
274
  integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
@@ -1,179 +0,0 @@
1
- // document.addEventListener("DOMContentLoaded", () => {
2
- // // Smooth scrolling for all internal links
3
- // const smoothScrollLinks = document.querySelectorAll("a[href^='#']");
4
- // smoothScrollLinks.forEach(link => {
5
- // link.addEventListener("click", (event) => {
6
- // event.preventDefault();
7
- // const targetId = link.getAttribute("href").substring(1);
8
- // const targetElement = document.getElementById(targetId);
9
- // if (targetElement) {
10
- // targetElement.scrollIntoView({ behavior: "smooth" });
11
- // }
12
- // });
13
- // });
14
-
15
- // // Back to top button functionality
16
- // const backToTopButton = document.createElement("button");
17
- // backToTopButton.innerText = "↑ Top";
18
- // backToTopButton.className = "scroll-to-top";
19
- // document.body.appendChild(backToTopButton);
20
-
21
- // backToTopButton.style.display = "none";
22
- // backToTopButton.addEventListener("click", () => {
23
- // window.scrollTo({ top: 0, behavior: "smooth" });
24
- // });
25
-
26
- // window.addEventListener("scroll", () => {
27
- // backToTopButton.style.display = window.pageYOffset > 300 ? "block" : "none";
28
- // });
29
-
30
- // // Modular function to reveal elements on scroll
31
- // const revealOnScroll = () => {
32
- // const sections = document.querySelectorAll("section");
33
- // const viewportHeight = window.innerHeight;
34
- // sections.forEach(section => {
35
- // const sectionTop = section.getBoundingClientRect().top;
36
- // if (sectionTop < viewportHeight - 100) {
37
- // section.classList.add("visible");
38
- // }
39
- // });
40
- // };
41
- // window.addEventListener("scroll", revealOnScroll);
42
- // revealOnScroll(); // ✅ <-- this line fixes the issue
43
-
44
- // // Inject dynamic styles for section reveal effect
45
- // const styleSheet = document.createElement("style");
46
- // // styleSheet.type = "text/css"; // Deprecated, no longer needed
47
- // styleSheet.innerText = `
48
- // section {
49
- // opacity: 0;
50
- // transform: translateY(20px);
51
- // transition: opacity 0.5s ease, transform 0.5s ease;
52
- // }
53
- // section.visible {
54
- // opacity: 1;
55
- // transform: translateY(0);
56
- // }
57
- // .scroll-to-top {
58
- // position: fixed;
59
- // bottom: 20px;
60
- // right: 20px;
61
- // padding: 10px 15px;
62
- // background: #007bff;
63
- // color: white;
64
- // border: none;
65
- // border-radius: 5px;
66
- // display: none;
67
- // cursor: pointer;
68
- // }
69
- // .scroll-to-top:hover {
70
- // background: #0056b3;
71
- // }
72
- // `;
73
- // document.head.appendChild(styleSheet);
74
- // });
75
-
76
-
77
-
78
- // document.addEventListener("DOMContentLoaded", () => {
79
- // const testimonials = document.querySelectorAll(".testimonial");
80
- // let index = 0;
81
-
82
- // function rotateTestimonials() {
83
- // testimonials[index].classList.remove("active");
84
- // index = (index + 1) % testimonials.length;
85
- // testimonials[index].classList.add("active");
86
- // }
87
-
88
- // if (testimonials.length > 1) {
89
- // setInterval(rotateTestimonials, 2000);
90
- // }
91
- // });
92
-
93
- document.addEventListener("DOMContentLoaded", () => {
94
- // Smooth scrolling for all internal links
95
- const smoothScrollLinks = document.querySelectorAll("a[href^='#']");
96
- smoothScrollLinks.forEach(link => {
97
- link.addEventListener("click", (event) => {
98
- event.preventDefault();
99
- const targetId = link.getAttribute("href").substring(1);
100
- const targetElement = document.getElementById(targetId);
101
- if (targetElement) {
102
- targetElement.scrollIntoView({ behavior: "smooth" });
103
- }
104
- });
105
- });
106
-
107
- // Back to top button functionality
108
- const backToTopButton = document.createElement("button");
109
- backToTopButton.innerText = "↑ Top";
110
- backToTopButton.className = "scroll-to-top";
111
- document.body.appendChild(backToTopButton);
112
-
113
- backToTopButton.style.display = "none";
114
- backToTopButton.addEventListener("click", () => {
115
- window.scrollTo({ top: 0, behavior: "smooth" });
116
- });
117
-
118
- window.addEventListener("scroll", () => {
119
- backToTopButton.style.display = window.pageYOffset > 300 ? "block" : "none";
120
- });
121
-
122
- // Modular function to reveal elements on scroll
123
- const revealOnScroll = () => {
124
- const sections = document.querySelectorAll("section");
125
- const viewportHeight = window.innerHeight;
126
- sections.forEach(section => {
127
- const sectionTop = section.getBoundingClientRect().top;
128
- if (sectionTop < viewportHeight - 100) {
129
- section.classList.add("visible");
130
- }
131
- });
132
- };
133
- window.addEventListener("scroll", revealOnScroll);
134
- revealOnScroll(); // ✅ Reveal sections immediately on page load
135
-
136
- // Inject dynamic styles for section reveal effect
137
- const styleSheet = document.createElement("style");
138
- styleSheet.innerText = `
139
- section {
140
- opacity: 0;
141
- transform: translateY(20px);
142
- transition: opacity 0.5s ease, transform 0.5s ease;
143
- }
144
- section.visible {
145
- opacity: 1;
146
- transform: translateY(0);
147
- }
148
- .scroll-to-top {
149
- position: fixed;
150
- bottom: 20px;
151
- right: 20px;
152
- padding: 10px 15px;
153
- background: #007bff;
154
- color: white;
155
- border: none;
156
- border-radius: 5px;
157
- display: none;
158
- cursor: pointer;
159
- }
160
- .scroll-to-top:hover {
161
- background: #0056b3;
162
- }
163
- `;
164
- document.head.appendChild(styleSheet);
165
-
166
- // Testimonials auto-rotation
167
- const testimonials = document.querySelectorAll(".testimonial");
168
- let index = 0;
169
-
170
- function rotateTestimonials() {
171
- testimonials[index].classList.remove("active");
172
- index = (index + 1) % testimonials.length;
173
- testimonials[index].classList.add("active");
174
- }
175
-
176
- if (testimonials.length > 1) {
177
- setInterval(rotateTestimonials, 2000);
178
- }
179
- });