diff --git a/config/assets.php b/config/assets.php
index 4b21a78..5d3d9eb 100644
--- a/config/assets.php
+++ b/config/assets.php
@@ -20,6 +20,7 @@ return [
],
'default' => [
'css/vendor-overrides/multi-select.css',
+ 'css/components/app-icon-button.css',
'css/components/app-buttons.css',
'css/vendor-overrides/gridjs.css',
'css/layout/app-topbar.css',
diff --git a/pages/admin/mail-log/view(default).phtml b/pages/admin/mail-log/view(default).phtml
index 32615a2..751a41a 100644
--- a/pages/admin/mail-log/view(default).phtml
+++ b/pages/admin/mail-log/view(default).phtml
@@ -23,7 +23,7 @@ $statusBadge = $status->badgeVariant();
?>
diff --git a/templates/partials/app-details-titlebar.phtml b/templates/partials/app-details-titlebar.phtml
index c34d5a1..127661d 100644
--- a/templates/partials/app-details-titlebar.phtml
+++ b/templates/partials/app-details-titlebar.phtml
@@ -70,7 +70,7 @@ $resolveToneClass = static function (string $tone, string $detailActionKind, str
>
-
+
diff --git a/web/css/components/app-details-titlebar.css b/web/css/components/app-details-titlebar.css
index c78f154..f70e562 100644
--- a/web/css/components/app-details-titlebar.css
+++ b/web/css/components/app-details-titlebar.css
@@ -43,22 +43,7 @@
white-space: nowrap;
}
- .app-details-titlebar h1 i {
- background: var(--app-background-color);
- width: 35px;
- height: 29px;
- font-size: 15px; /* icon-font metric — intentional px */
- border-radius: var(--app-border-radius);
- display: inline-flex;
- align-items: center;
- justify-content: center;
- color: var(--app-contrast);
- border: 1px solid var(--app-border);
- color: var(--app-muted-color);
- box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px;
- }
-
- .app-details-titlebar h1:has(i) {
+ .app-details-titlebar h1:has(.app-icon-button) {
display: flex;
align-items: center;
gap: 7px;
diff --git a/web/css/components/app-icon-button.css b/web/css/components/app-icon-button.css
new file mode 100644
index 0000000..de42fb7
--- /dev/null
+++ b/web/css/components/app-icon-button.css
@@ -0,0 +1,34 @@
+@layer components {
+ /* Reusable round ghost icon button — transparent circle with subtle hover.
+ Used for back buttons, inline icon actions, etc. */
+ .app-icon-button {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 28px;
+ height: 28px;
+ padding: 0;
+ border: none;
+ border-radius: 50%;
+ background: transparent;
+ color: var(--app-muted-color);
+ font-size: var(--text-sm);
+ line-height: 1;
+ cursor: pointer;
+ text-decoration: none;
+ transition:
+ background-color var(--app-transition),
+ color var(--app-transition);
+ }
+
+ .app-icon-button:hover,
+ .app-icon-button:focus-visible {
+ background: color-mix(in srgb, var(--app-contrast) 8%, transparent);
+ color: var(--app-contrast);
+ }
+
+ .app-icon-button i {
+ font-size: 15px; /* icon-font metric — intentional px */
+ line-height: 1;
+ }
+}