diff --git a/src/app/features/admin/orders/pages/admin-order-detail-page.component.html b/src/app/features/admin/orders/pages/admin-order-detail-page.component.html
index 1d71d18..6afaa2e 100644
--- a/src/app/features/admin/orders/pages/admin-order-detail-page.component.html
+++ b/src/app/features/admin/orders/pages/admin-order-detail-page.component.html
@@ -46,14 +46,17 @@
{{ facade.selectedIds().length }} {{ 'adminProducts.selectedCount' | translate }}
{{ 'adminOrders.applyStatus' | translate }}
diff --git a/src/app/features/admin/orders/pages/admin-orders-list-page.component.ts b/src/app/features/admin/orders/pages/admin-orders-list-page.component.ts
index 9c1d430..a8e36f8 100644
--- a/src/app/features/admin/orders/pages/admin-orders-list-page.component.ts
+++ b/src/app/features/admin/orders/pages/admin-orders-list-page.component.ts
@@ -30,6 +30,8 @@ export class AdminOrdersListPageComponent {
private readonly languageService = inject(LanguageService);
readonly statuses = ['all', 'pending', 'processing', 'shipped', 'delivered', 'cancelled', 'refunded'] as const;
+ /** Bulk status change excludes terminal statuses - cancel/refund must go through the confirm-gated single-order flow. */
+ readonly bulkSelectableStatuses: AdminOrderStatus[] = ['pending', 'processing', 'shipped', 'delivered'];
readonly allColumns = ALL_ORDER_COLUMNS;
protected readonly columnsPanelOpen = signal(false);
protected readonly bulkStatusValue = signal
('pending');