# Button Consistency Normalization ## TL;DR > **Quick Summary**: Replace all raw `` → `Register Node` - Line 128: `` → `Cancel` - Line 281: `` → `Save` - Line 282: `` → `Cancel` - Button rows in modals: wrap in `
` - Lines 156-157: Table action buttons (Edit, Delete) → `NgButton variant="ghost" size="sm"` **Must NOT do**: - Do NOT change form inputs or validation logic - Do NOT change toggle switches **Recommended Agent Profile**: - **Category**: `quick` - **Skills**: [] **Parallelization**: - **Can Run In Parallel**: YES - **Parallel Group**: Wave 1 (with Tasks 1, 3-6) - **Blocks**: Final verification - **Blocked By**: None **References**: - `apps/dashboard-ui/src/views/Servers.vue` — Lines 127-128 (add modal buttons), 156-157 (table actions), 281-282 (edit modal buttons) **Acceptance Criteria**: **QA Scenarios:** ``` Scenario: No raw button in Servers modal Tool: Bash Steps: 1. Run: grep -n 'Delete` → `Delete` - Import NgButton if not already imported (it is — line 67) **Must NOT do**: - Do NOT change the delete confirmation logic **Recommended Agent Profile**: - **Category**: `quick` - **Skills**: [] **Parallelization**: - **Can Run In Parallel**: YES - **Parallel Group**: Wave 1 (with Tasks 1-2, 4-6) - **Blocks**: Final verification - **Blocked By**: None **References**: - `apps/dashboard-ui/src/views/Users.vue` — Line 51 **Acceptance Criteria**: **QA Scenarios:** ``` Scenario: No raw button in Users Tool: Bash Steps: 1. Run: grep -n '` with `NgButton variant="ghost" size="sm"`: ```vue Config Firewall Delete ``` - Import NgButton if not already imported (it is — line 78) **Must NOT do**: - Do NOT change the delete confirmation logic **Recommended Agent Profile**: - **Category**: `quick` - **Skills**: [] **Parallelization**: - **Can Run In Parallel**: YES - **Parallel Group**: Wave 1 (with Tasks 1-3, 5-6) - **Blocks**: Final verification - **Blocked By**: None **References**: - `apps/dashboard-ui/src/views/Devices.vue` — Lines 45-47 **Acceptance Criteria**: **QA Scenarios:** ``` Scenario: No raw button in Devices Tool: Bash Steps: 1. Run: grep -n 'Export CSV` - Lines 53-59: Apply Filters button → `{{ loading ? 'Loading...' : 'Apply Filters' }}` - Lines 110-116: Previous button → `Previous` - Lines 118-124: Next button → `Next` - Replace ALL hardcoded colors with design tokens: - `text-cyan-400` → `text-accent` - `bg-cyan-600` → `bg-accent` - `bg-black/30` → `bg-bg-base/30` - `border-white/5` → `border-border-subtle/50` - `text-gray-400` → `text-text-muted` - `text-gray-500` → `text-text-muted` - `bg-gradient-to-br from-gray-900/90 to-gray-800/90` → `bg-gradient-to-br from-bg-surface/90 to-bg-elevated/90` - `border-white/10` → `border-border-subtle` - `text-white` → `text-text-primary` - `bg-black/50` → `bg-bg-base/50` - `hover:bg-white/5` → `hover:bg-bg-elevated/50` - `hover:bg-black/50` → `hover:bg-bg-base/50` - `hover:text-white` → `hover:text-text-primary` - `text-cyan-400` → `text-accent` - `text-blue-400` → `text-info` - `hover:shadow-cyan-500/50` → `hover:shadow-accent/50` - Update `` import **Must NOT do**: - Do NOT change the CSV export logic - Do NOT change the pagination logic - Do NOT change the date filtering logic **Recommended Agent Profile**: - **Category**: `quick` - **Skills**: [] **Parallelization**: - **Can Run In Parallel**: YES - **Parallel Group**: Wave 1 (with Tasks 1-4, 6) - **Blocks**: Final verification - **Blocked By**: None **References**: - `apps/dashboard-ui/src/views/TrafficHistory.vue` — Full file (326 lines). Raw buttons + extensive hardcoded colors - `apps/dashboard-ui/src/components/ui/NgButton.vue` — API reference **Acceptance Criteria**: **QA Scenarios:** ``` Scenario: No raw button in TrafficHistory Tool: Bash Steps: 1. Run: grep -n 'Logout` → `Logout` - Line 24: `` → `Logout` - Import NgButton **Must NOT do**: - Do NOT change the logout logic - Do NOT change sidebar behavior **Recommended Agent Profile**: - **Category**: `quick` - **Skills**: [] **Parallelization**: - **Can Run In Parallel**: YES - **Parallel Group**: Wave 1 (with Tasks 1-5) - **Blocks**: Final verification - **Blocked By**: None **References**: - `apps/dashboard-ui/src/App.vue` — Lines 16, 24 **Acceptance Criteria**: **QA Scenarios:** ``` Scenario: No raw button in App.vue Tool: Bash Steps: 1. Run: grep -n '` replaced with `NgButton` - [x] No `flex-1` on button rows - [x] Consistent `gap-2` spacing - [x] TrafficHistory.vue hardcoded colors replaced with tokens - [x] Frontend builds without errors