Files
roa2web-service-auto/features/CSS_REFACTORING_REQUIREMENTS.md
Marius Mutu bff37e78d8 docs(css): Add comprehensive CSS refactoring plan and documentation
Add complete planning documentation for CSS architecture refactoring project:
- 7-phase implementation plan (92-120 hours)
- 123 detailed tasks across all phases
- Target: ~3,260 lines CSS reduction (40-50%)
- Complete requirements analysis
- Progress tracking system
- Phase-by-phase breakdown with acceptance criteria

Documentation structure:
- features/README.md - Project overview and quick start
- features/CSS_REFACTORING_PLAN.md - Implementation strategy
- features/CSS_REFACTORING_REQUIREMENTS.md - Detailed requirements
- features/PROGRESS_TRACKER.md - Live progress tracking
- features/phases/*.md - 7 phase documents with tasks

Ready to begin Phase 1: Forms Standardization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 13:10:57 +02:00

10 KiB

ROA2WEB Frontend CSS Refactoring - Requirements & Analysis

Created: 2025-11-18 Status: Planning Phase Priority: High Estimated Effort: 92-120 hours (5-6 weeks)


Executive Summary

The ROA2WEB Vue.js frontend has a well-designed CSS foundation but suffers from severe style duplication in component scoped styles. An estimated 70-80% of scoped styles can be eliminated by properly utilizing the existing CSS system.

Critical Statistics

  • Total Vue files analyzed: 24 components (4,353 lines)
  • CSS system files: 17 organized stylesheets
  • Estimated reduction: ~3,260 lines of CSS (40-50%)
  • Biggest problem: DashboardView.vue with 2,010 lines of scoped CSS

Current State Analysis

Strengths

  1. Professional CSS Architecture

    • Location: /reports-app/frontend/src/assets/css/
    • 17 well-organized files (core, layout, components, utilities)
    • 181 lines of design tokens in variables.css
    • 460 lines comprehensive form system in forms.css
    • 430 lines button system in buttons.css
  2. Design Tokens System

    /* Excellent foundation */
    --space-xs through --space-3xl     /* 8 spacing values */
    --text-xs through --text-4xl       /* 8 typography sizes */
    --color-primary, --color-success   /* Semantic colors */
    --shadow-sm through --shadow-xl    /* 4 shadow levels */
    --radius-sm through --radius-full  /* Border radius scale */
    

Critical Issues

1. DashboardView.vue - THE BIGGEST PROBLEM

File: src/views/DashboardView.vue Lines 787-2010: 2,010 lines of scoped CSS (47% of component)

Problems:

  • Duplicates containers.css patterns
  • Duplicates cards.css patterns
  • Duplicates tables.css patterns
  • 4 separate responsive breakpoints (600 lines)
  • Loading spinner repeated (also in 3 other files)
  • Table styles (400 lines) should use tables.css

Target: Reduce to ~300 lines (85% reduction = 1,710 lines eliminated)

2. Card Components - Massive Duplication

Component Total CSS Duplicated Target
MetricCard.vue 331 lines ~250 lines 80 lines
CashFlowMetricCard.vue 179 lines ~120 lines 60 lines
ClientiBalanceCard.vue 260 lines ~170 lines 90 lines
FurnizoriBalanceCard.vue ~260 lines ~170 lines 90 lines
TreasuryDualCard.vue ~200 lines ~140 lines 60 lines

Repeated Patterns (in all 5 files):

/* Card base styles */
.metric-card {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--card-radius);
  /* ... 20 more identical properties ... */
}

/* Hover effects */
.metric-card:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  transform: translateY(-2px);
  /* ... identical across all files ... */
}

/* Sparkline containers */
.sparkline-container { /* Repeated 4 times */ }

/* Breakdown patterns */
.breakdown-header { /* Repeated 3 times */ }

/* Trend indicators */
.trend-up, .trend-down, .trend-neutral { /* Repeated 5 times */ }

3. Inconsistent Form Patterns

Problem: Each view reinvents forms differently:

View Field Wrapper Label Class Status
LoginView.vue .field .field-label Custom
InvoicesView.vue .filter-group .filter-label Custom
forms.css (correct) .form-group .form-label Standard

Impact:

  • Inconsistent user experience
  • 3 different implementations
  • forms.css (460 lines) is underutilized

4. PrimeVue Anti-Patterns

LoginView.vue example (lines 269-283):

<style scoped>
:deep(.p-inputtext),
:deep(.p-password input) {
  border: 2px solid #e5e7eb !important;  /* Hardcoded color */
  padding: 12px !important;               /* Hardcoded value */
  font-size: 16px !important;             /* Not using --text-base */
  transition: all 0.3s ease !important;
  border-radius: 8px !important;          /* Not using --radius-md */
}

:deep(.p-inputtext:focus) {
  border-color: #3b82f6 !important;       /* Hardcoded primary color */
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
</style>

Issues:

  • 50+ instances of :deep() with !important
  • Hardcoded colors (#3b82f6) instead of var(--color-primary)
  • Specificity wars
  • Breaks component encapsulation
  • Maintenance nightmare

5. Loading Spinner Duplication

Repeated in 4+ files:

.loading-spinner {
  width: 40px;
  height: 40px;
  border: 4px solid var(--color-border);
  border-top-color: var(--color-primary);
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

Found in:

  • DashboardView.vue (lines 1409-1428)
  • MetricCard.vue
  • InvoicesView.vue
  • TelegramView.vue

Requirements

Functional Requirements

  1. No Visual Changes

    • All refactoring must maintain identical appearance
    • User experience remains unchanged
    • No functionality breakage
  2. Form Standardization

    • Single form pattern across all views
    • Consistent field structure: .form-group + .form-label
    • Utilize existing forms.css (460 lines)
    • Eliminate custom form implementations
  3. PrimeVue Integration

    • Centralize all PrimeVue overrides
    • Eliminate :deep() from component scoped styles
    • Use design tokens instead of hardcoded values
    • Single source of truth for PrimeVue styling
  4. Pattern Reusability

    • Extract common patterns to global CSS
    • Create reusable component classes
    • Document patterns for future development
  5. Responsive Consistency

    • Consolidate responsive breakpoints
    • Use global responsive utilities
    • Reduce component-specific media queries

Non-Functional Requirements

  1. Performance

    • CSS bundle size reduction: -30%
    • Page load time improvement: -15%
    • Lighthouse performance score: +10 points
  2. Maintainability

    • New component creation time: 2h → 30min
    • Clear separation: global vs component-specific CSS
    • Comprehensive documentation
  3. Code Quality

    • Eliminate CSS duplication: 70% → 20%
    • Remove hardcoded values: ~150 → ~20 instances
    • Zero :deep() overrides in components
    • Consistent design token usage
  4. Testing

    • Visual regression tests (Playwright snapshots)
    • Manual testing checklist (desktop/tablet/mobile)
    • No functional regressions

Constraints

  1. Technology Stack

    • Plain CSS only (no SCSS/SASS available)
    • Vue.js 3 with scoped styles
    • PrimeVue component library (saga-blue theme)
    • Vite build tool
  2. Development

    • Cannot break existing functionality
    • Must maintain backward compatibility
    • All changes in feature branch
    • Phased implementation approach
  3. Testing

    • Playwright for visual regression
    • Manual testing between phases
    • No automated CSS testing tools currently

Success Metrics

Code Metrics

Metric Current Target Measurement
Total scoped CSS lines ~6,000 ~2,500 Line count
DashboardView.vue CSS 2,010 lines 300 lines Line count
CSS duplication ~70% ~20% Manual audit
Hardcoded values ~150 ~20 Grep search
:deep() overrides ~50 0 Grep search
Form patterns 3 different 1 standard Manual review

Performance Metrics

Metric Target Measurement
CSS bundle size -30% Build output
Page load time -15% Lighthouse
First Contentful Paint -10% Lighthouse
Lighthouse Performance +10 points Lighthouse

Quality Metrics

Metric Target Measurement
Accessibility score 95+/100 Lighthouse
Visual consistency 95+/100 Manual review
Mobile responsiveness 100/100 Device testing
Cross-browser compatibility 100/100 BrowserStack

Risks & Mitigation

High Risks

Risk Probability Impact Mitigation
Visual regressions High High Playwright snapshots before/after each phase
PrimeVue conflicts Medium High Test all PrimeVue components after global overrides
Mobile breakage Medium High Test on real devices, not just browser resize
DashboardView errors High Very High Extensive testing, careful incremental changes

Medium Risks

Risk Probability Impact Mitigation
Scope creep High Medium Stick to phase plan, defer enhancements
Incomplete testing Medium High Comprehensive test checklist per phase
Z-index conflicts Medium Low Use design tokens z-index scale consistently

Low Risks

Risk Probability Impact Mitigation
Performance degradation Low Medium Measure CSS bundle size before/after
Documentation gaps Medium Medium Write docs as you go, not at the end
Developer confusion Medium Low Clear guidelines and examples

Dependencies

External

  • PrimeVue component library (must remain compatible)
  • Existing design tokens in variables.css
  • Playwright testing framework

Internal

  • Existing CSS system in /assets/css/
  • Vue.js component structure
  • Current responsive breakpoints

Out of Scope

The following are explicitly NOT included in this refactoring:

  1. Adding SCSS/SASS compilation
  2. Changing PrimeVue theme (saga-blue)
  3. Redesigning UI/UX
  4. Adding new features or functionality
  5. Refactoring JavaScript/TypeScript logic
  6. Database or backend changes
  7. Adding CSS-in-JS libraries
  8. Implementing CSS modules

Stakeholders

  • Development Team: Implementation and maintenance
  • End Users: No visible changes, improved performance
  • QA Team: Testing and validation
  • Product Owner: Approval and sign-off

Approval Criteria

Before proceeding to implementation:

  • Plan reviewed and approved
  • Phased approach agreed upon
  • Testing strategy confirmed
  • Timeline acceptable
  • Resources allocated
  • Risks acknowledged

References

  • Analysis report: Full ULTRATHINK analysis (37,661 tokens)
  • Existing CSS system: /reports-app/frontend/src/assets/css/
  • PrimeVue docs: https://primevue.org/
  • Design tokens: assets/css/core/variables.css

Last Updated: 2025-11-18 Document Version: 1.0 Status: Awaiting Approval