Menu
Public repository / master
AkurAI-Framework / site/frontend/admin.html
Latest change 8d7067ab5b862b25460ebbdbf35b265ac7e4f995 - OLI-208: flat corners in framework defaults (max 6px, 4px small, no pills) + tests/test_radius.sh by Ólafur Búi Ólafsson
{% include "header" %}
<main class="container">
<header class="page-head">
<span class="eyebrow">Built-in tooling</span>
<h1>Admin</h1>
<p class="lede">Browse and edit the data behind your auto-generated REST API. This
page is driven entirely by <code>GET /api/collections</code> and the per-collection
record endpoints — pure <code>fetch</code> + DOM, no build step.
<a href="/docs/admin">How it works →</a></p>
</header>
<div class="admin-layout">
<aside class="sidebar admin-sidebar" aria-label="Collections">
<div class="sidebar-group">
<div class="sidebar-title">Collections</div>
<ul id="admin-collection-list">
<li class="muted small">Loading…</li>
</ul>
</div>
</aside>
<section class="admin-main" id="admin-main" aria-live="polite">
<div class="empty">
<div class="empty-icon" aria-hidden="true">◆</div>
<p class="empty-title">No collection selected</p>
<p class="empty-text">Pick a collection from the left to browse its records.</p>
</div>
</section>
</div>
</main>
<style>
/* admin-scoped layout — design-token driven, no new globals */
.admin-layout { display: grid; grid-template-columns: 220px 1fr; gap: 48px;
padding-top: 8px; padding-bottom: 48px; align-items: start; }
.admin-sidebar ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 3px; }
.admin-collection-btn { display: block; width: 100%; text-align: left; padding: 6px 10px;
border-radius: 4px; border: 1px solid transparent; background: none; color: var(--muted);
font: inherit; font-size: 14px; cursor: pointer; }
.admin-collection-btn:hover { background: var(--panel); color: var(--fg); }
.admin-collection-btn.is-active { background: var(--panel-2); color: var(--fg);
border-color: var(--border); font-weight: 600; }
.admin-main { min-width: 0; }
.admin-toolbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end;
justify-content: space-between; margin: 4px 0 18px; }
.admin-form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 14px; align-items: end; }
.admin-table-wrap { overflow-x: auto; }
.admin-actions { display: flex; gap: 6px; white-space: nowrap; }
.admin-search { min-width: 220px; }
input[type=number].input { width: 100%; padding: 4px 6px; border-radius: 4px; font: inherit;
font-size: 14px; color: var(--fg); background: var(--bg); border: 1px solid var(--border); outline: none; }
input[type=number].input:focus { border-color: var(--accent);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent); }
@media (max-width: 720px) { .admin-layout { grid-template-columns: 1fr; gap: 24px; } }
</style>
<script type="module" src="/admin.js"></script>
{% include "footer" %}