Apply new frontend theme
Full style rewrite (holographic/chrome dark theme) plus matching favicon, authored externally and dropped in at /home/andrew/alembic-theme. Verified every template's variable names, form field names, and action URLs match the actual data each router passes before importing -- all matched exactly with zero router/service changes needed. Validated all templates parse (Jinja2 env.get_template over the full tree) and confirmed the live container serves the new theme after rebuild+redeploy.
This commit is contained in:
+42
-14
@@ -4,27 +4,55 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{% block title %}alembic{% endblock %}</title>
|
||||
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='24' y2='24'%3E%3Cstop offset='0%25' stop-color='%237dd3fc'/%3E%3Cstop offset='50%25' stop-color='%23a78bfa'/%3E%3Cstop offset='100%25' stop-color='%23f9a8d4'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath fill='url(%23g)' d='M9 2.5h6v5.2l4.3 8.6a2.6 2.6 0 0 1-2.33 3.76H7.03A2.6 2.6 0 0 1 4.7 16.3L9 7.7V2.5z'/%3E%3C/svg%3E">
|
||||
<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=Space+Grotesk:wght@500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
<script src="/static/htmx.min.js"></script>
|
||||
<script src="/static/alpine.min.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="ambient-blob one"></div>
|
||||
<div class="ambient-blob two"></div>
|
||||
<div class="ambient-blob three"></div>
|
||||
|
||||
<header class="topbar">
|
||||
<a class="brand" href="/">alembic</a>
|
||||
<nav>
|
||||
<a href="/">Dashboard</a>
|
||||
<a href="/playlists">Playlists</a>
|
||||
<a href="/library">Library</a>
|
||||
<a href="/jobs">Jobs</a>
|
||||
<a href="/dedup">Dedup</a>
|
||||
<a href="/genres">Genres</a>
|
||||
<a href="/import">Import</a>
|
||||
<a href="/settings/credentials">Credentials</a>
|
||||
</nav>
|
||||
{% if user %}
|
||||
<a class="logout" href="/auth/logout">Log out ({{ user.email or user.name }})</a>
|
||||
{% endif %}
|
||||
<div class="topbar-inner">
|
||||
<a class="brand" href="/">
|
||||
<svg width="22" height="22" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="brandGrad" x1="0" y1="0" x2="24" y2="24">
|
||||
<stop offset="0%" stop-color="#7dd3fc"/>
|
||||
<stop offset="50%" stop-color="#a78bfa"/>
|
||||
<stop offset="100%" stop-color="#f9a8d4"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#brandGrad)" d="M9 2.5h6v5.2l4.3 8.6a2.6 2.6 0 0 1-2.33 3.76H7.03A2.6 2.6 0 0 1 4.7 16.3L9 7.7V2.5z"/>
|
||||
<path d="M9 2.5h6M8.2 8.6h7.6" stroke="#08090d" stroke-width="0.9" stroke-linecap="round" opacity="0.35"/>
|
||||
</svg>
|
||||
<span class="chrome-text">Alembic</span>
|
||||
</a>
|
||||
<nav class="nav-pills">
|
||||
<a href="/" class="{{ 'active' if request.url.path == '/' else '' }}">Dashboard</a>
|
||||
<a href="/playlists" class="{{ 'active' if request.url.path.startswith('/playlists') else '' }}">Playlists</a>
|
||||
<a href="/library" class="{{ 'active' if request.url.path.startswith('/library') else '' }}">Library</a>
|
||||
<a href="/jobs" class="{{ 'active' if request.url.path.startswith('/jobs') else '' }}">Jobs</a>
|
||||
<a href="/dedup" class="{{ 'active' if request.url.path.startswith('/dedup') else '' }}">Dedup</a>
|
||||
<a href="/genres" class="{{ 'active' if request.url.path.startswith('/genres') else '' }}">Genres</a>
|
||||
<a href="/import" class="{{ 'active' if request.url.path.startswith('/import') else '' }}">Import</a>
|
||||
<a href="/settings/credentials" class="{{ 'active' if request.url.path.startswith('/settings/credentials') else '' }}">Credentials</a>
|
||||
</nav>
|
||||
{% if user %}
|
||||
<div class="user-chip">
|
||||
<span class="user-dot"></span>
|
||||
<span>{{ user.email or user.name }}</span>
|
||||
<a class="logout" href="/auth/logout" title="Log out">⏻</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
Reference in New Issue
Block a user