diff --git a/backend/00-router.go b/backend/00-router.go
index dab5922..c3bee26 100644
--- a/backend/00-router.go
+++ b/backend/00-router.go
@@ -73,8 +73,8 @@ func renderStartPage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, `
Mail-Graveyard
-
-
+
+
@@ -121,9 +121,9 @@ func renderShell(w http.ResponseWriter, r *http.Request, active, readingPane str
fmt.Fprintf(w, `
Mail-Graveyard
-
+
-
+
@@ -697,9 +697,9 @@ func renderAccountsPage(w http.ResponseWriter, r *http.Request, accounts []Accou
fmt.Fprintf(w, `
Konten-Verwaltung - Mail-Graveyard
-
+
-
+
@@ -743,9 +743,9 @@ func renderArchivesPage(w http.ResponseWriter, r *http.Request, archives []strin
fmt.Fprintf(w, `
Archiv-mbox Verwaltung - Mail-Graveyard
-
+
-
+
@@ -791,9 +791,9 @@ func renderUsersPage(w http.ResponseWriter, r *http.Request, users []AppUser, ed
fmt.Fprintf(w, `
Benutzerverwaltung - Mail-Graveyard
-
+
-
+
@@ -865,9 +865,9 @@ func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMod
fmt.Fprintf(w, `
%s - Mail-Graveyard
-
+
-
+
@@ -1317,9 +1317,9 @@ func renderSourceEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [
fmt.Fprintf(w, `
Quell-Postfach - Mail-Graveyard
-
+
-
+
@@ -1361,9 +1361,9 @@ func renderTargetEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [
fmt.Fprintf(w, `
Ziel-Postfach - Mail-Graveyard
-
+
-
+
diff --git a/frontend-js/dist/app.js b/frontend-js/dist/app.js
index 9da997a..dffa2e4 100644
--- a/frontend-js/dist/app.js
+++ b/frontend-js/dist/app.js
@@ -1,3 +1,36 @@
+(function () {
+ function ensureActionBar() {
+ const ribbon = document.querySelector(".ribbon");
+ if (!ribbon || document.querySelector(".mail-actionbar")) return;
+
+ const bar = document.createElement("div");
+ bar.className = "mail-actionbar";
+ bar.innerHTML = `
+
+
+
+
+
+
+
+
+
+
+
+
+ `;
+ ribbon.insertAdjacentElement("afterend", bar);
+ }
+
+ document.addEventListener("DOMContentLoaded", ensureActionBar);
+ document.addEventListener("click", (event) => {
+ if (event.target.closest("[data-action-refresh]")) window.location.reload();
+ });
+})();
+
(function () {
const handleWidth = 6;
diff --git a/frontend-js/dist/style.css b/frontend-js/dist/style.css
index 2ff9bdc..3a84f72 100644
--- a/frontend-js/dist/style.css
+++ b/frontend-js/dist/style.css
@@ -167,6 +167,77 @@ body.ol2013 {
border-left-color: var(--ol-blue);
font-weight: 600;
}
+.mail-actionbar {
+ height: 38px;
+ flex: 0 0 auto;
+ background: #2f343a;
+ color: #f3f5f7;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 0 10px;
+ border-bottom: 1px solid #20242a;
+ box-shadow: inset 0 -1px 0 rgba(255, 255, 255, .04);
+ overflow-x: auto;
+ overflow-y: hidden;
+ white-space: nowrap;
+}
+.action-search {
+ width: min(340px, 26vw);
+ min-width: 210px;
+ height: 30px;
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ padding: 0 10px;
+ color: #b8c0ca;
+ background: #3b4148;
+ border: 1px solid #5b626b;
+}
+.action-search input {
+ min-width: 0;
+ width: 100%;
+ border: 0;
+ outline: 0;
+ color: #fff;
+ background: transparent;
+ font: inherit;
+}
+.action-search input::placeholder { color: #c2c8d0; }
+.action-btn {
+ height: 30px;
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ padding: 0 10px;
+ border: 1px solid transparent;
+ color: #f6f8fb;
+ background: transparent;
+ font: inherit;
+ cursor: pointer;
+}
+.action-btn:hover {
+ background: #454b53;
+ border-color: #5b626b;
+}
+.action-btn.primary {
+ background: #f28c22;
+ border-color: #f28c22;
+ color: #fff;
+ font-weight: 600;
+}
+.action-btn.primary:hover {
+ background: #ff9d34;
+ border-color: #ff9d34;
+}
+.action-btn.muted { color: #aeb6c0; }
+.action-separator {
+ width: 1px;
+ height: 26px;
+ background: #555c65;
+ margin: 0 4px;
+ flex: 0 0 auto;
+}
.mail-logo {
position: relative;
width: 17px;