#18 more polish

Обединени
Tilo15 обедини 1 ревизии от clanker/goal/ui-ux във clanker/web-stack преди 21 часа

+ 16 - 2
src/pages/app.css

@@ -29,9 +29,11 @@
    Shared chrome
    ========================================================================== */
 
-/* The emblem rides the topbar brand at a restrained height. */
+/* The emblem rides the topbar brand at its original 8rem size (the
+   sampler review's explicit ask; the first conversion pass had
+   restrained it to 2rem, which read as too small in review). */
 .brand-emblem {
-    height: 2rem;
+    height: 8rem;
     width: auto;
     margin-block: -0.2rem;
 }
@@ -1540,3 +1542,15 @@ td .truncate.repo-url {
 .card:has(> .card-footer) {
     padding: 0;
 }
+
+/* The loading state (review round 2): a centred Spry spinner instead of
+   a "Loading..." line - both the shared preloader in main.html and the
+   per-page stm-if placeholders while a slot is null. min-height keeps
+   the box tall enough that the centre is visibly mid-page, not mid-
+   strip. */
+.page-loading {
+    align-items: center;
+    display: flex;
+    justify-content: center;
+    min-height: 40vh;
+}

+ 1 - 1
src/pages/chat_detail.html

@@ -122,7 +122,7 @@
 </head>
 <body>
     <section>
-        <p stm-if="chat == null">Loading…</p>
+        <div stm-if="chat == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="chat != null && chat.id == 0">
             <h2>Chat not found</h2>

+ 1 - 1
src/pages/chats.html

@@ -16,7 +16,7 @@
             → Model</a> page to enable it. Chats you start now
             will wait until then.</p>
 
-        <p stm-if="chats == null">Loading…</p>
+        <div stm-if="chats == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="chats != null">
             <div class="table-wrap">

+ 1 - 1
src/pages/discoveries.html

@@ -41,7 +41,7 @@
             quirks, library behaviours, tool flags, protocol gotchas. Agents search this
             before working with a technology and refine notes in place; you can do the same.</p>
 
-        <p stm-if="discoveries == null">Loading…</p>
+        <div stm-if="discoveries == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="discoveries != null">
             <form class="cluster" onsubmit="window.setDiscoveryQuery(document.getElementById('discovery-q').value); return false;">

+ 1 - 1
src/pages/home.html

@@ -105,7 +105,7 @@
 </head>
 <body>
     <div class="stack">
-        <p stm-if="dashboard == null">Loading…</p>
+        <div stm-if="dashboard == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="dashboard != null" class="stack">
             <!-- The advisor hero (goal 27; goal 41 task 3 keeps it the

+ 1 - 1
src/pages/main.html

@@ -76,7 +76,7 @@
         </nav>
     </header>
     <main class="container">
-        <div stm-preloader>Loading…</div>
+        <div stm-preloader class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
         <div stm-content hidden>
             <pstm-content></pstm-content>
         </div>

+ 1 - 1
src/pages/model_settings.html

@@ -17,7 +17,7 @@
             every saddle assignment is sent to, and the advisor's optional overrides. Stored
             in the database — environment variables no longer configure it (a pre-page
             deployment's SADDLE_LLM_* environment is imported once, on first read).</p>
-        <p stm-if="model == null">Loading…</p>
+        <div stm-if="model == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="model != null" class="stack">
             <p stm-if="!model.dispatch_ready" class="alert alert-warning"><span class="badge badge-offline">paused</span>

+ 1 - 1
src/pages/profile.html

@@ -19,7 +19,7 @@
 <body>
     <section class="stack">
         <h2>Your profile</h2>
-        <p stm-if="profile == null">Loading…</p>
+        <div stm-if="profile == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="profile != null" class="stack">
             <div class="card">

+ 1 - 1
src/pages/projects.html

@@ -11,7 +11,7 @@
             <button type="button" class="btn-primary"
                     onclick="window.openAppDialog('project-create-dialog')">+ New project</button>
         </div>
-        <p stm-if="projects == null">Loading…</p>
+        <div stm-if="projects == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="projects != null" class="stack">
             <div class="table-wrap">

+ 1 - 1
src/pages/rules.html

@@ -18,7 +18,7 @@
         </div>
         <p class="text-muted">Reusable instructions dispatched with every task that carries them —
             attach rules on the project and task pages.</p>
-        <p stm-if="rules == null">Loading…</p>
+        <div stm-if="rules == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="rules != null">
 

+ 1 - 1
src/pages/saddles.html

@@ -24,7 +24,7 @@
         </div>
         <p class="text-muted">Fleet health and configuration. The dispatcher pairs queued tasks
             with idle saddles carrying every tag a task requires.</p>
-        <p stm-if="saddles == null">Loading…</p>
+        <div stm-if="saddles == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="saddles != null" class="stack">
 

+ 1 - 1
src/pages/stacks.html

@@ -13,7 +13,7 @@
         </div>
         <p class="text-muted">Named bundles of reference projects — apply one to a project or a
             goal to attach its whole collection of links in a single click.</p>
-        <p stm-if="stacks == null">Loading…</p>
+        <div stm-if="stacks == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="stacks != null">
             <div class="table-wrap">

+ 1 - 1
src/pages/users.html

@@ -19,7 +19,7 @@
         </div>
         <p class="text-muted">Accounts and their roles. Normal users manage projects, tasks,
             goals and rules; admins additionally manage users, saddles and capabilities.</p>
-        <p stm-if="users == null">Loading…</p>
+        <div stm-if="users == null" class="page-loading" role="status" aria-label="Loading"><span class="spinner spinner-lg"></span></div>
 
         <div stm-if="users != null">
             <div class="table-wrap">