diff --git a/config/assets.php b/config/assets.php
index 8ffefc1..409f8fd 100644
--- a/config/assets.php
+++ b/config/assets.php
@@ -18,7 +18,6 @@ return [
'css/components/app-brand.css',
'css/components/app-file-upload.css',
'css/components/app-footer.css',
- 'css/components/app-tenant-logo.css',
],
'core' => [
'css/core.css',
diff --git a/docs/reference-frontend-javascript.md b/docs/reference-frontend-javascript.md
index 05b1f4f..84931b1 100644
--- a/docs/reference-frontend-javascript.md
+++ b/docs/reference-frontend-javascript.md
@@ -306,6 +306,85 @@ Für standardisierte Detailseiten gilt zusätzlich:
- Aktionssemantik über `data-detail-action-kind` (z. B. `save`, `save-close`, `delete`, `danger`).
- Optionaler Lock-Override über `data-detail-submit-lock="none"` (Default: `form`).
+### Copy-to-Clipboard Standard
+
+Für kopierbare Inhalte (Werte, Feld-Inhalte, Badges) gilt eine einzige
+Component: `web/js/components/app-copy-field.js` — ein Button mit
+`data-copy-button` bekommt automatisch einen Click-Handler, der in die
+Zwischenablage schreibt und 1,2 s lang ein Check-Icon statt des Copy-Icons
+anzeigt (Klasse `is-copied` wird am Button getoggelt).
+
+Zwei Quell-Modi:
+
+- **Statischer Wert** (fix im Markup):
+ ```html
+
+ ```
+
+- **Live Input-Wert** (liest `input.value` beim Klick):
+ ```html
+
+
+ ```
+ Der Live-Modus ist vorzuziehen, wenn der User das Feld editieren kann —
+ der Button kopiert dann immer den aktuellen Wert, nicht den beim ersten
+ Render gesetzten.
+
+### Copyable Input Standard
+
+Für Text-Inputs, bei denen ein Copy-Button *im* Feld sitzen soll (z. B. URLs,
+IDs, Tokens) existiert die Core-Partial **`templates/partials/app-input-copy.phtml`**.
+
+Verwendung im Form:
+
+```php
+
+```
+
+Optionale Vars: `$id` (Default = `$name`), `$placeholder`, `$required`,
+`$disabled`. Die Partial rendert:
+
+```html
+
+```
+
+CSS-Kontrakt (`web/css/components/app-input-copy.css`):
+
+- `.app-input-copy` — Positioning-Wrapper, `position: relative`
+- `.app-input-copy > input` — Native Form-Styling, `padding-right: 2.5rem`
+ für den Overlay-Button
+- `.app-input-copy > .app-input-copy-button` — absolute positioniert rechts,
+ vertikal zentriert via `inset 0/auto + margin-block: auto`. Spezifität
+ `(0,2,0)` beim Descendant-Selector nötig, damit die globale
+ `[data-tooltip] { position: relative }`-Regel nicht gewinnt.
+- `.is-copied` (wird vom Copy-Field-Component gesetzt) — tauscht Copy-Icon
+ gegen Check, färbt Button in `--app-action-success-border`.
+
+Nicht selbst die Markup-Struktur nachbauen — immer die Partial verwenden,
+damit Spacing, Vertical-Centering und A11y (`aria-label`, Tooltip) konsistent
+bleiben.
+
### Global Confirm Actions
Für allgemeine Form-/Button-Confirms außerhalb der Detail-Policy gilt:
diff --git a/i18n/default_de.json b/i18n/default_de.json
index 8d77617..5502f44 100644
--- a/i18n/default_de.json
+++ b/i18n/default_de.json
@@ -604,6 +604,7 @@
"English": "Englisch",
"Switch tenant": "Mandant wechseln",
"Copy": "Kopieren",
+ "Copy to clipboard": "In Zwischenablage kopieren",
"Registration successful! Please check your email for the verification code.": "Registrierung erfolgreich! Bitte prüfe deine E-Mails für den Bestätigungscode.",
"Registration is currently disabled": "Registrierung ist derzeit deaktiviert.",
"A new verification code has been sent.": "Ein neuer Bestätigungscode wurde gesendet.",
diff --git a/i18n/default_en.json b/i18n/default_en.json
index d372196..1b0ece0 100644
--- a/i18n/default_en.json
+++ b/i18n/default_en.json
@@ -604,6 +604,7 @@
"English": "English",
"Switch tenant": "Switch tenant",
"Copy": "Copy",
+ "Copy to clipboard": "Copy to clipboard",
"Registration successful! Please check your email for the verification code.": "Registration successful! Please check your email for the verification code.",
"Registration is currently disabled": "Registration is currently disabled.",
"A new verification code has been sent.": "A new verification code has been sent.",
diff --git a/pages/admin/tenants/_form.phtml b/pages/admin/tenants/_form.phtml
index a9170d9..93823d7 100644
--- a/pages/admin/tenants/_form.phtml
+++ b/pages/admin/tenants/_form.phtml
@@ -310,16 +310,22 @@ $openOverrideCard = $detailsOpenAll;