67 lines
3.1 KiB
HTML
67 lines
3.1 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="description" content="Eternity Project: field notes on code, circuits, and systems.">
|
|
<title>{% block title %}Eternity Project{% endblock %}</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/site.css') }}">
|
|
<script>(function(){var t=localStorage.getItem('ep-theme');if(t==='dark'){document.documentElement.setAttribute('data-theme','dark');}})();</script>
|
|
</head>
|
|
<body>
|
|
<header class="site-header">
|
|
<a class="brand" href="{{ url_for('index') }}" aria-label="Eternity Project home">
|
|
<span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i></span>
|
|
<span><strong>ETERNITY</strong><small>PROJECT / FI</small></span>
|
|
</a>
|
|
<nav aria-label="Main navigation">
|
|
<a href="{{ url_for('index') }}#journal">Journal</a>
|
|
{% if current_user %}
|
|
<a href="{{ url_for('write') }}">Write</a>
|
|
{% if current_user.role == 'admin' %}<a href="{{ url_for('admin_users') }}">Accounts</a>{% endif %}
|
|
<a href="{{ url_for('change_profile') }}">Profile</a>
|
|
<a href="{{ url_for('change_email') }}">Email</a>
|
|
<a href="{{ url_for('change_password') }}">Password</a>
|
|
<span class="user-chip">{{ current_user.real_name or current_user.username }}</span>
|
|
<form action="{{ url_for('logout') }}" method="post"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}"><button class="text-button" type="submit">Log out</button></form>
|
|
{% else %}
|
|
<a href="{{ url_for('login') }}">Sign in</a>
|
|
<a class="button compact" href="{{ url_for('register') }}">Create account</a>
|
|
{% endif %}
|
|
<button type="button" class="theme-toggle" id="theme-toggle" aria-label="Toggle dark theme">WASTELAND</button>
|
|
</nav>
|
|
</header>
|
|
|
|
<main>
|
|
{% with messages = get_flashed_messages(with_categories=true) %}
|
|
{% for category, message in messages %}
|
|
<div class="flash {{ category }}">{{ message }}</div>
|
|
{% endfor %}
|
|
{% endwith %}
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
|
|
<footer>
|
|
<span>ETERNITY PROJECT</span>
|
|
<span>CODE / CIRCUITS / CONTINUITY</span>
|
|
<span>HELSINKI, FI</span>
|
|
</footer>
|
|
<script>
|
|
(function(){
|
|
var root=document.documentElement,btn=document.getElementById('theme-toggle');
|
|
function label(){btn.textContent=root.getAttribute('data-theme')==='dark'?'DAYLIGHT':'WASTELAND';}
|
|
label();
|
|
btn.addEventListener('click', function(){
|
|
var dark=root.getAttribute('data-theme')==='dark';
|
|
if (dark) { root.removeAttribute('data-theme'); localStorage.setItem('ep-theme','light'); }
|
|
else { root.setAttribute('data-theme','dark'); localStorage.setItem('ep-theme','dark'); }
|
|
label();
|
|
});
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|