quantum-ai-v3/templates/base.html
Claude e2ad1f84e1 Implement comprehensive header CSS architecture redesign and font consistency fixes
- Extract 476 lines of inline CSS from pricing.html to external pricing.css file
- Unify font stack across all pages to use 'Inter', Arial, sans-serif consistently
- Fix font weight inconsistency between marketplace and pricing page navigation
- Add clean active page indicator with thin blue underline for current page
- Optimize CSS loading order: page-specific CSS first, header-component.css last
- Remove font inheritance conflicts between agent-base.css and header component
- Standardize Inter font loading in base.html for all pages (single source of truth)
- Improve browser compatibility with font smoothing and rendering optimizations
- Add comprehensive documentation in HEADER_OPTIMIZATION.md

Key improvements:
• Consistent navigation font weight across all pages (resolves bold font issue)
• Better performance with external CSS files and browser caching
• Clean component-based CSS architecture for maintainability
• Subtle active state indicators without layout shifts
• Unified theme system with CSS custom properties

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-21 10:41:24 +05:30

219 lines
10 KiB
HTML

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}NetCop Hub - AI Platform{% endblock %}</title>
<!-- Unified Font Loading - Single Source of Truth -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"></noscript>
<!-- Base Styles -->
<link rel="stylesheet" href="{% static 'css/base.css' %}?v=3">
{% block extra_css %}{% endblock %}
<!-- Header Component - ALWAYS loads last for consistency -->
<link rel="stylesheet" href="{% static 'css/header-component.css' %}?v=3">
</head>
<body>
<!-- Header -->
<div class="header-component theme-professional">
<div class="header-container">
<div class="header-left">
<a href="{% url 'core:homepage' %}" class="logo-section">
<img src="{% static 'img/logo.png' %}" alt="NetCop Hub" class="logo-img">
</a>
<nav class="header-nav" id="header-nav">
<a href="{% url 'core:homepage' %}" class="nav-link {% if request.resolver_match.url_name == 'homepage' %}active{% endif %}">Home</a>
<a href="{% url 'core:marketplace' %}" class="nav-link {% if request.resolver_match.url_name == 'marketplace' %}active{% endif %}">AI Marketplace</a>
<a href="{% url 'core:pricing' %}" class="nav-link {% if request.resolver_match.url_name == 'pricing' %}active{% endif %}">Pricing</a>
</nav>
<button class="mobile-nav-toggle" onclick="toggleMobileNav()" aria-label="Toggle navigation">
</button>
</div>
<div class="user-info">
{% if user.is_authenticated %}
<p class="user-welcome">Welcome, {{ user.username }}!</p>
<a href="{% url 'core:wallet' %}" class="balance" data-wallet-balance>💰 {{ user.wallet_balance|floatformat:2 }} AED</a>
<div class="auth-links">
<a href="{% url 'core:wallet' %}">Wallet</a>
<a href="{% url 'authentication:logout' %}">Logout</a>
</div>
{% else %}
<div class="auth-links">
<a href="{% url 'authentication:login' %}">Login</a>
<a href="{% url 'authentication:register' %}">Register</a>
</div>
{% endif %}
</div>
</div>
</div>
<!-- Main Content -->
<div class="main-container">
{% block content %}{% endblock %}
</div>
<!-- Footer (hidden on agent pages) -->
{% if not request.resolver_match.url_name == 'agent_detail' and '/agents/' not in request.path %}
<footer class="footer" id="footer">
<div class="footer-container">
<!-- Main Footer Content -->
<div class="footer-main">
<!-- Company Info -->
<div class="footer-company">
<div class="footer-logo">
<img src="{% static 'img/logo.png' %}" alt="NetCop Hub" class="footer-logo-img">
</div>
<p class="footer-description">
Leading cybersecurity consultancy providing comprehensive security solutions and AI-powered automation.
</p>
<div class="footer-contact">
<a href="mailto:contact@netcopconsultancy.com" class="footer-contact-item">
📧 contact@netcopconsultancy.com
</a>
<span class="footer-contact-item">
📍 Dubai, UAE
</span>
</div>
</div>
<!-- Navigation Sections -->
<div class="footer-nav">
<!-- Services -->
<div class="footer-nav-section">
<h4 class="footer-nav-title">Services</h4>
<div class="footer-nav-links">
<a href="#services" class="footer-nav-link">Cybersecurity Consulting</a>
<a href="#services" class="footer-nav-link">Risk Assessment</a>
<a href="#services" class="footer-nav-link">Compliance Audits</a>
<a href="#services" class="footer-nav-link">Security Training</a>
</div>
</div>
<!-- Company -->
<div class="footer-nav-section">
<h4 class="footer-nav-title">Company</h4>
<div class="footer-nav-links">
<a href="#company-profile" class="footer-nav-link">About Us</a>
<a href="#founder" class="footer-nav-link">Leadership</a>
<a href="#contact" class="footer-nav-link">Contact Us</a>
<a href="{% url 'core:marketplace' %}" class="footer-nav-link">AI Marketplace</a>
</div>
</div>
</div>
</div>
<!-- Bottom Section -->
<div class="footer-bottom">
<p class="footer-copyright">
© 2025 Netcop Consultancy. All rights reserved.
</p>
<div class="footer-legal">
<button class="footer-legal-link" onclick="showPrivacyModal()">
Privacy Policy
</button>
<a href="#terms" class="footer-legal-link">Terms of Service</a>
<a href="#security" class="footer-legal-link">Security</a>
</div>
</div>
</div>
</footer>
{% endif %}
<!-- Privacy Policy Modal -->
<div class="modal-overlay" id="privacy-modal">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">Privacy Policy</h2>
<button class="modal-close" onclick="hidePrivacyModal()">&times;</button>
</div>
<div class="modal-text">
<p style="margin-bottom: 16px;">
<strong>NetCop Consultancy LLC FZ</strong> is committed to protecting your privacy and ensuring the security of your personal information.
</p>
<p style="margin-bottom: 16px;">
<strong>Information We Collect:</strong><br>
We collect information you provide directly to us, such as when you create an account, use our AI services, or contact us for support.
</p>
<p style="margin-bottom: 16px;">
<strong>How We Use Your Information:</strong><br>
We use the information we collect to provide, maintain, and improve our services, process transactions, and communicate with you.
</p>
<p style="margin-bottom: 16px;">
<strong>Data Security:</strong><br>
We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction.
</p>
<p style="margin-bottom: 16px;">
<strong>Contact Us:</strong><br>
If you have any questions about this Privacy Policy, please contact us at contact@netcopconsultancy.com
</p>
<p style="margin: 0; font-size: 12px; color: #9ca3af;">
Last updated: January 2025
</p>
</div>
</div>
</div>
<script>
// Mobile navigation toggle
function toggleMobileNav() {
const nav = document.getElementById('header-nav');
nav.classList.toggle('mobile-open');
}
// Close mobile nav when clicking outside or on a link
document.addEventListener('click', function(e) {
const nav = document.getElementById('header-nav');
const toggle = document.querySelector('.mobile-nav-toggle');
if (!nav.contains(e.target) && !toggle.contains(e.target)) {
nav.classList.remove('mobile-open');
}
});
// Close mobile nav when clicking on nav links
document.querySelectorAll('.nav-link').forEach(link => {
link.addEventListener('click', function() {
document.getElementById('header-nav').classList.remove('mobile-open');
});
});
// Privacy modal functions
function showPrivacyModal() {
const modal = document.getElementById('privacy-modal');
modal.classList.add('active');
document.body.style.overflow = 'hidden';
}
function hidePrivacyModal() {
const modal = document.getElementById('privacy-modal');
modal.classList.remove('active');
document.body.style.overflow = 'auto';
}
// Close modal when clicking outside
document.getElementById('privacy-modal').addEventListener('click', function(e) {
if (e.target === this) {
hidePrivacyModal();
}
});
// Close modal with Escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
hidePrivacyModal();
}
});
</script>
{% block extra_js %}{% endblock %}
</body>
</html>