git / moonbite-network / templates/base.html · raw

<!DOCTYPE html><html lang="en" data-theme="dark"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">    <meta http-equiv="Pragma" content="no-cache">    <meta http-equiv="Expires" content="0">    <title>{% block title %}MoonBite (MBITE) — Fair-launch crypto you can mine{% endblock %}</title>    <meta name="description" content="{% block meta_description %}MoonBite (MBITE) is an open, fair-launch coin you can mine on a laptop, hold in a self-custody wallet, and run yourself. Live on mainnet.{% endblock %}">    <link rel="icon" type="image/svg+xml" href="{{ url_for('static', filename='moonbite-logo.svg') }}">    <link rel="stylesheet" href="{{ url_for('static', filename='fonts/moonbite-fonts.css') }}">    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">    <link rel="stylesheet" href="{{ url_for('static', filename='site.css') }}">    <link rel="stylesheet" href="{{ url_for('static', filename='moonbite-v2.css') }}">    {% block head_extra %}{% endblock %}</head><body class="mbs-page {% block body_class %}{% endblock %}">    {% include "partials/mega_nav.html" %}    <main id="main">        {% block content %}{% endblock %}    </main>    {% include "partials/mega_footer.html" %}    <script nonce="{{ csp_nonce }}">        // Force clear old service worker caches and register new version        if ('serviceWorker' in navigator) {            navigator.serviceWorker.getRegistrations().then(registrations => {                registrations.forEach(reg => reg.unregister());            });            caches.keys().then(cacheNames => {                cacheNames.forEach(cacheName => caches.delete(cacheName));            });            navigator.serviceWorker.register('/static/service-worker.js');        }        // Reveal page + fade out loader once ready (with a safety fallback).        (function () {            function reveal() { document.body.classList.add('loaded'); }            window.addEventListener('load', function () { setTimeout(reveal, 300); });            setTimeout(reveal, 2000);        })();        // Theme init (single source of truth — child pages must NOT redeclare        // htmlElement / themeToggle or they'll throw "already declared").        var htmlElement = document.documentElement;        var themeToggle = document.getElementById('themeToggle');        // The site is dark by design (one universal shell); no light toggle.        var isDark = true;        htmlElement.setAttribute('data-theme', 'dark');        if (themeToggle) {            themeToggle.textContent = isDark ? 'Light Mode' : 'Dark Mode';            themeToggle.addEventListener('click', function () {                var current = htmlElement.getAttribute('data-theme');                var next = current === 'dark' ? 'light' : 'dark';                htmlElement.setAttribute('data-theme', next);                localStorage.setItem('theme', next);                themeToggle.textContent = next === 'dark' ? 'Light Mode' : 'Dark Mode';            });        }    </script>    <script defer src="{{ url_for('static', filename='site.js') }}"></script>    {% block scripts_extra %}{% endblock %}</body></html>