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.
- {my-cloud-devops-consulting-1.1.202507070855/my_cloud_devops_consulting.egg-info → my-cloud-devops-consulting-1.1.202507090134}/PKG-INFO +1 -1
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134/my_cloud_devops_consulting.egg-info}/PKG-INFO +1 -1
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/SOURCES.txt +3 -1
- my-cloud-devops-consulting-1.1.202507090134/static/anifest.json +21 -0
- my-cloud-devops-consulting-1.1.202507090134/static/images/favicon.svg +1 -0
- my-cloud-devops-consulting-1.1.202507090134/static/images/whatsapp-navbar.png +0 -0
- my-cloud-devops-consulting-1.1.202507090134/static/js/main.js +87 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/base.html +69 -15
- my-cloud-devops-consulting-1.1.202507070855/static/images/whatspp.jpeg +0 -0
- my-cloud-devops-consulting-1.1.202507070855/static/js/main.js +0 -179
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/MANIFEST.in +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/README.md +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/app.py +0 -0
- {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
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/my_cloud_devops_consulting.egg-info/requires.txt +0 -0
- {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
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/setup.cfg +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/setup.py +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/about.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/assessment.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/contact-form.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/index.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/login.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/main.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/register.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/css/services.css +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/images/image.jpg +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/counter.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/index.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/login.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/register.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/services.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/static/js/typing.js +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/about.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/assessment.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/contact-form.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/index.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/login.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/private-videos.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/register.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/templates/services.html +0 -0
- {my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/test/test.py +0 -0
@@ -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/
|
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>
|
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
|
-
<
|
203
|
-
|
204
|
-
<
|
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
|
-
|
209
|
-
|
210
|
-
|
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
|
267
|
+
<p style="text-align: center">
|
268
|
+
© 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"
|
Binary file
|
@@ -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
|
-
});
|
File without changes
|
File without changes
|
{my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/app.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{my-cloud-devops-consulting-1.1.202507070855 → my-cloud-devops-consulting-1.1.202507090134}/setup.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|