diff --git a/ansible-sandbox.html b/ansible-sandbox.html index 1b0fd74..ecbd4af 100644 --- a/ansible-sandbox.html +++ b/ansible-sandbox.html @@ -85,9 +85,137 @@ padding: 0 1.5rem; } + /* Navigation Bar */ + .navbar { + background-color: rgba(15, 23, 42, 0.9); + backdrop-filter: var(--glass-effect); + -webkit-backdrop-filter: var(--glass-effect); + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 1rem 0; + border-bottom: 1px solid var(--border); + } + + .navbar .container { + display: flex; + justify-content: space-between; + align-items: center; + } + + .logo { + font-weight: 600; + font-size: 1.5rem; + } + + .logo a { + color: var(--text-primary); + text-decoration: none; + display: flex; + align-items: center; + } + + .logo-text { + background: var(--accent-gradient); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + } + + .logo-dot { + color: var(--text-secondary); + } + + .nav-menu { + display: flex; + gap: 2rem; + } + + .nav-link { + color: var(--text-secondary); + text-decoration: none; + font-size: 0.95rem; + font-weight: 500; + transition: all var(--transition-normal); + position: relative; + } + + .nav-link::after { + content: ""; + position: absolute; + bottom: -5px; + left: 0; + width: 0; + height: 2px; + background: var(--accent-gradient); + transition: width var(--transition-normal); + } + + .nav-link:hover { + color: var(--text-primary); + } + + .nav-link:hover::after { + width: 100%; + } + + .nav-link.active { + color: var(--accent); + } + + .nav-link.active::after { + width: 100%; + } + + .nav-buttons { + display: flex; + align-items: center; + gap: 1rem; + } + + .dashboard-link { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + font-size: 0.9rem; + font-weight: 500; + color: var(--text-primary); + background-color: rgba(59, 130, 246, 0.1); + border: 1px solid rgba(59, 130, 246, 0.2); + border-radius: 0.5rem; + text-decoration: none; + transition: all var(--transition-normal); + } + + .dashboard-link:hover { + background-color: rgba(59, 130, 246, 0.2); + border-color: rgba(59, 130, 246, 0.3); + } + + .live-indicator { + width: 8px; + height: 8px; + background-color: var(--success); + border-radius: 50%; + animation: pulse 2s infinite; + } + + .menu-toggle { + display: none; + background: none; + border: none; + color: var(--text-primary); + font-size: 1.25rem; + cursor: pointer; + } + /* Sandbox Specific Styles */ .sandbox-container { padding: 5rem 0 2rem; + margin-top: 4rem; } .sandbox-header { @@ -630,31 +758,64 @@ } /* Footer */ - .sandbox-footer { + .footer { + background-color: var(--secondary-bg); + border-top: 1px solid var(--border); + padding: 3rem 0 1.5rem; + margin-top: 5rem; + } + + .footer-content { display: flex; justify-content: space-between; align-items: center; - margin-top: 2rem; + margin-bottom: 2rem; + } + + .footer-logo { + font-weight: 600; + font-size: 1.5rem; + } + + .footer-links { + display: flex; + gap: 2rem; + } + + .footer-links a { + color: var(--text-secondary); + text-decoration: none; + font-size: 0.95rem; + transition: color var(--transition-normal); + } + + .footer-links a:hover { + color: var(--accent); + } + + .footer-social { + display: flex; + gap: 1.25rem; + } + + .footer-social a { + color: var(--text-secondary); + font-size: 1.25rem; + transition: color var(--transition-normal); + } + + .footer-social a:hover { + color: var(--accent); + } + + .footer-bottom { padding-top: 1.5rem; border-top: 1px solid var(--border); - font-size: 0.85rem; + text-align: center; + font-size: 0.9rem; color: var(--text-secondary); } - - .back-to-site { - display: flex; - align-items: center; - gap: 0.5rem; - color: var(--accent); - font-weight: 500; - transition: all var(--transition-normal); - } - - .back-to-site:hover { - color: var(--accent-darker); - transform: translateX(-3px); - } - + /* Animation */ @keyframes pulse { 0% { @@ -679,6 +840,29 @@ display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); } + + .nav-menu { + position: fixed; + top: 75px; + left: 0; + right: 0; + background-color: var(--primary-bg); + flex-direction: column; + align-items: center; + padding: 2rem 0; + gap: 1.5rem; + transition: transform var(--transition-normal); + transform: translateY(-150%); + border-bottom: 1px solid var(--border); + } + + .nav-menu.show { + transform: translateY(0); + } + + .menu-toggle { + display: block; + } } @media (max-width: 768px) { @@ -696,555 +880,638 @@ .preview-tabs { display: none; } + + .footer-content { + flex-direction: column; + gap: 2rem; + align-items: flex-start; + } + + .footer-links { + flex-wrap: wrap; + justify-content: center; + gap: 1.5rem; + row-gap: 1rem; + } }
-+ Deploy a Nginx web server with a sample website in a controlled environment. +
++ Deploy a multi-container application using Docker Compose with automatic configuration. +
++ Deploy a lightweight Kubernetes cluster with basic services and sample application. +
++ Deploy a Linux, Apache, MySQL, and PHP stack with a sample application. +
++ Apply security best practices to a Linux server including firewall, SSH hardening, and more. +
+