feat: add admin base template and CSS styles

This commit is contained in:
Johan Lundberg 2026-02-19 11:30:35 +01:00
parent dd1f85d8d3
commit f2d669d705
No known key found for this signature in database
GPG key ID: A6C152738D03C7D1
2 changed files with 172 additions and 0 deletions

View file

@ -146,6 +146,169 @@ main {
border-bottom-color: var(--accent);
}
/* ---------- Admin ---------- */
.admin-nav {
display: flex;
align-items: center;
gap: var(--sp-4);
margin-bottom: var(--sp-6);
border-bottom: 1px solid var(--border);
padding-bottom: var(--sp-3);
}
.admin-nav a {
color: var(--fg-muted);
text-decoration: none;
font-weight: 500;
font-size: var(--font-size-sm);
padding-bottom: var(--sp-3);
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.15s ease, border-color 0.15s ease;
}
.admin-nav a:hover {
color: var(--fg);
}
.admin-nav a[aria-current="page"] {
color: var(--accent);
border-bottom-color: var(--accent);
}
.admin-badge {
font-size: var(--font-size-sm);
font-weight: 600;
color: var(--accent-fg);
background: var(--accent);
padding: var(--sp-1) var(--sp-2);
border-radius: var(--radius);
line-height: 1;
}
.admin-table {
width: 100%;
border-collapse: collapse;
font-size: var(--font-size-sm);
}
.admin-table th,
.admin-table td {
text-align: left;
padding: var(--sp-2) var(--sp-3);
border-bottom: 1px solid var(--border);
}
.admin-table th {
font-weight: 600;
color: var(--fg-muted);
font-size: var(--font-size-sm);
}
.admin-table tbody tr:hover {
background: var(--surface);
}
.status-badge {
display: inline-block;
font-size: var(--font-size-sm);
font-weight: 500;
padding: var(--sp-1) var(--sp-2);
border-radius: var(--radius);
line-height: 1;
}
.status-active {
background: var(--success-bg);
color: var(--success-fg);
}
.status-inactive {
background: var(--error-bg);
color: var(--error-fg);
}
.group-tag {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
font-size: var(--font-size-sm);
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: var(--sp-1) var(--sp-2);
line-height: 1;
}
.group-tag button {
background: none;
border: none;
color: var(--fg-muted);
cursor: pointer;
padding: 0;
font-size: var(--font-size-sm);
line-height: 1;
}
.group-tag button:hover {
color: var(--error-fg);
}
.admin-search {
display: flex;
gap: var(--sp-2);
margin-bottom: var(--sp-4);
}
.admin-search input[type="text"] {
flex: 1;
margin-bottom: 0;
}
.pagination {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: var(--sp-4);
font-size: var(--font-size-sm);
}
.admin-detail section {
margin-bottom: var(--sp-6);
}
.invite-url {
font-family: ui-monospace, monospace;
font-size: var(--font-size-sm);
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: var(--sp-3) var(--sp-4);
word-break: break-all;
margin-bottom: var(--sp-4);
}
.confirm-danger {
background: var(--error-bg);
border: 1px solid color-mix(in srgb, var(--error-fg) 20%, transparent);
border-radius: var(--radius);
padding: var(--sp-4);
margin-bottom: var(--sp-4);
}
@media (prefers-color-scheme: dark) {
.status-active {
background: var(--success-bg);
color: var(--success-fg);
}
.status-inactive {
background: var(--error-bg);
color: var(--error-fg);
}
}
/* ---------- Typography ---------- */
h1 {

View file

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block content %}
<nav class="admin-nav" aria-label="Administration">
<span class="admin-badge">Admin</span>
<a href="/admin/users" {% if active_page == "users" %}aria-current="page"{% endif %}>Users</a>
</nav>
{% block admin_content %}{% endblock %}
{% endblock %}