diff --git a/src/app/features/project-editor/pages/project-editor-page.component.html b/src/app/features/project-editor/pages/project-editor-page.component.html
index 1d62e76..f12ac53 100644
--- a/src/app/features/project-editor/pages/project-editor-page.component.html
+++ b/src/app/features/project-editor/pages/project-editor-page.component.html
@@ -8,6 +8,10 @@
{{ 'builder.appName' | translate }}
+
+
+ {{ 'builder.backToDashboard' | translate }}
+
diff --git a/src/app/features/project-editor/pages/project-editor-page.component.scss b/src/app/features/project-editor/pages/project-editor-page.component.scss
index 999ff9a..16af4cc 100644
--- a/src/app/features/project-editor/pages/project-editor-page.component.scss
+++ b/src/app/features/project-editor/pages/project-editor-page.component.scss
@@ -51,6 +51,28 @@
}
}
+.project-editor-layout__dashboard-link {
+ display: flex;
+ align-items: center;
+ gap: var(--space-xs);
+ padding: var(--space-sm);
+ margin-bottom: var(--space-md);
+ border-radius: var(--radius-sm);
+ color: var(--text-secondary);
+ font-size: 0.85rem;
+ text-decoration: none;
+
+ &:hover {
+ background: var(--bg-tertiary);
+ color: var(--text-primary);
+ }
+
+ &:focus-visible {
+ outline: 2px solid var(--primary-color);
+ outline-offset: 2px;
+ }
+}
+
.project-editor-layout__content {
min-width: 0;
padding: var(--space-lg);
diff --git a/src/app/features/project-editor/pages/project-editor-page.component.ts b/src/app/features/project-editor/pages/project-editor-page.component.ts
index 22e234e..1bdba4b 100644
--- a/src/app/features/project-editor/pages/project-editor-page.component.ts
+++ b/src/app/features/project-editor/pages/project-editor-page.component.ts
@@ -95,6 +95,9 @@ export class ProjectEditorPageComponent {
readonly overviewRoute = computed(() => ['/', this.languageService.currentLanguage(), 'edit']);
+ /** Persistent escape hatch back to the admin dashboard - section editors previously had no route to the backoffice at all. */
+ readonly dashboardRoute = computed(() => ['/', this.languageService.currentLanguage(), 'backoffice', 'dashboard']);
+
constructor() {
this.facade.loadBootstrap();
effect(() => {
diff --git a/src/app/i18n/en.ts b/src/app/i18n/en.ts
index d9636e3..19011b2 100644
--- a/src/app/i18n/en.ts
+++ b/src/app/i18n/en.ts
@@ -686,6 +686,7 @@ export const en: Translations = {
linkUrlDesc: 'Path or URL this navigation link points to.',
linkVisibleDesc: 'Whether this navigation link is shown to shoppers.',
appName: 'Marketplace Builder',
+ backToDashboard: 'Back to dashboard',
breadcrumbRoot: 'Marketplace Builder',
statusComplete: 'Complete',
statusInProgress: 'In progress',
@@ -1628,6 +1629,8 @@ export const en: Translations = {
method: 'Payment method',
fraud: 'Fraud check',
flagged: 'Flagged',
+ flag: 'Flag as suspicious',
+ clearFlag: 'Clear flag',
retry: 'Retry',
audit: 'History',
emptyTitle: 'No transactions found',
diff --git a/src/app/i18n/hy.ts b/src/app/i18n/hy.ts
index 87f0953..2ac2229 100644
--- a/src/app/i18n/hy.ts
+++ b/src/app/i18n/hy.ts
@@ -686,6 +686,7 @@ export const hy: Translations = {
linkUrlDesc: 'Ուղին կամ URL-ը, որին ուղղորդում է այս նավիգացիոն հղումը։',
linkVisibleDesc: 'Արդյո՞ք այս նավիգացիոն հղումը ցուցադրվում է գնորդներին։',
appName: 'Մարկետփլեյսի կոնստրուկտոր',
+ backToDashboard: 'Վերադառնալ կառավարման վահանակ',
breadcrumbRoot: 'Մարկետփլեյսի կոնստրուկտոր',
statusComplete: 'Ավարտված',
statusInProgress: 'Ընթացքի մեջ',
@@ -1623,6 +1624,8 @@ export const hy: Translations = {
method: 'Վճարման եղանակ',
fraud: 'Խարդախության ստուգում',
flagged: 'Նշված',
+ flag: 'Նշել որպես կասկածելի',
+ clearFlag: 'Հանել նշումը',
retry: 'Կրկնել',
audit: 'Պատմություն',
emptyTitle: 'Գործարքներ չեն գտնվել',
diff --git a/src/app/i18n/ru.ts b/src/app/i18n/ru.ts
index d9bfe4c..386e8a7 100644
--- a/src/app/i18n/ru.ts
+++ b/src/app/i18n/ru.ts
@@ -686,6 +686,7 @@ export const ru: Translations = {
linkUrlDesc: 'Путь или URL, на который ведёт эта ссылка навигации.',
linkVisibleDesc: 'Показывать ли эту ссылку навигации покупателям.',
appName: 'Конструктор маркетплейса',
+ backToDashboard: 'Назад в панель управления',
breadcrumbRoot: 'Конструктор маркетплейса',
statusComplete: 'Готово',
statusInProgress: 'В процессе',
@@ -1623,6 +1624,8 @@ export const ru: Translations = {
method: 'Способ оплаты',
fraud: 'Проверка на мошенничество',
flagged: 'Помечено',
+ flag: 'Пометить как подозрительную',
+ clearFlag: 'Снять пометку',
retry: 'Повторить',
audit: 'История',
emptyTitle: 'Транзакции не найдены',
diff --git a/src/app/i18n/translations.ts b/src/app/i18n/translations.ts
index ab2200e..66b4c1d 100644
--- a/src/app/i18n/translations.ts
+++ b/src/app/i18n/translations.ts
@@ -684,6 +684,7 @@ export interface Translations {
linkUrlDesc: string;
linkVisibleDesc: string;
appName: string;
+ backToDashboard: string;
breadcrumbRoot: string;
statusComplete: string;
statusInProgress: string;
@@ -1635,6 +1636,8 @@ export interface Translations {
method: string;
fraud: string;
flagged: string;
+ flag: string;
+ clearFlag: string;
retry: string;
audit: string;
emptyTitle: string;
diff --git a/src/app/shared/ui/table/table.component.scss b/src/app/shared/ui/table/table.component.scss
index 35651fe..7bb317b 100644
--- a/src/app/shared/ui/table/table.component.scss
+++ b/src/app/shared/ui/table/table.component.scss
@@ -1,3 +1,15 @@
+/* Block-level host that is allowed to shrink inside grid/flex parents.
+ Without min-width: 0 a wide table forces its parent card to grow past
+ its container (grid items default to min-width: auto), which is exactly
+ the "table overflows the card" bug on Customers/Transactions. */
+/* Encapsulation is None, so target the element selector directly
+ (:host would not match). */
+app-table {
+ display: block;
+ min-width: 0;
+ max-width: 100%;
+}
+
.app-table-wrapper {
width: 100%;
overflow-x: auto;