create-ng-tailwind 2.1.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,11 +27,7 @@ const {
27
27
  createTooltipDirective,
28
28
  } = require('./ui-features');
29
29
 
30
- const {
31
- createSEOService,
32
- createStructuredDataUtil,
33
- createRobotsTxt,
34
- } = require('./seo-features');
30
+ const { createSEOService, createStructuredDataUtil, createRobotsTxt } = require('./seo-features');
35
31
 
36
32
  const {
37
33
  createDefaultOGImage,
@@ -117,10 +113,10 @@ const starter = {
117
113
  await this.setupLinting(config);
118
114
  await this.setupPWA(config);
119
115
  await this.formatCode(config);
120
-
116
+
121
117
  // Stop spinner and show summary
122
118
  if (spinner) spinner.stop();
123
-
119
+
124
120
  // Show minimal, professional summary
125
121
  console.log('');
126
122
  completeStep('Angular 20+ project created');
@@ -583,24 +579,15 @@ export class StorageService {
583
579
 
584
580
  // Create robots.txt in public folder
585
581
  const robotsTxt = createRobotsTxt();
586
- await fs.writeFile(
587
- path.join(config.fullPath, 'public/robots.txt'),
588
- robotsTxt
589
- );
582
+ await fs.writeFile(path.join(config.fullPath, 'public/robots.txt'), robotsTxt);
590
583
 
591
584
  // Create default OG image (SVG as placeholder)
592
585
  const ogImage = createDefaultOGImage(config.projectName);
593
- await fs.writeFile(
594
- path.join(config.fullPath, 'public/assets/images/og-default.svg'),
595
- ogImage
596
- );
586
+ await fs.writeFile(path.join(config.fullPath, 'public/assets/images/og-default.svg'), ogImage);
597
587
 
598
588
  // Create favicon
599
589
  const favicon = createFavicon(config.projectName);
600
- await fs.writeFile(
601
- path.join(config.fullPath, 'public/favicon.svg'),
602
- favicon
603
- );
590
+ await fs.writeFile(path.join(config.fullPath, 'public/favicon.svg'), favicon);
604
591
 
605
592
  // Create Apple Touch Icon (SVG as placeholder)
606
593
  const appleTouchIcon = createAppleTouchIcon(config.projectName);
@@ -624,10 +611,7 @@ export class StorageService {
624
611
 
625
612
  // Create logo
626
613
  const logo = createLogo(config.projectName);
627
- await fs.writeFile(
628
- path.join(config.fullPath, 'public/assets/images/logo.svg'),
629
- logo
630
- );
614
+ await fs.writeFile(path.join(config.fullPath, 'public/assets/images/logo.svg'), logo);
631
615
  },
632
616
 
633
617
  async createHttpInterceptors(config) {
@@ -1122,8 +1106,7 @@ export class TranslationService {
1122
1106
  'Built with Angular and Tailwind CSS. A modern, fast, and responsive web application starter template.',
1123
1107
  quickLinks: 'Quick Links',
1124
1108
  builtWith: 'Built With',
1125
- copyright: '© {{year}} {{name}}. Created with',
1126
- madeWith: 'Made with ❤️ by developers, for developers',
1109
+ copyright: '© {{year}} {{name}}. All rights reserved.',
1127
1110
  },
1128
1111
  language: {
1129
1112
  select: 'Select Language',
@@ -1439,8 +1422,7 @@ export class TranslationService {
1439
1422
  description: 'مبني بـ Angular و Tailwind CSS. قالب تطبيق ويب حديث وسريع ومتجاوب.',
1440
1423
  quickLinks: 'روابط سريعة',
1441
1424
  builtWith: 'مبني بـ',
1442
- copyright: '© {{year}} {{name}}. تم الإنشاء باستخدام',
1443
- madeWith: 'صُنع بـ ❤️ من قبل المطورين، للمطورين',
1425
+ copyright: '© {{year}} {{name}}. جميع الحقوق محفوظة.',
1444
1426
  },
1445
1427
  language: {
1446
1428
  select: 'اختر اللغة',
@@ -1518,7 +1500,6 @@ export const roleGuard = (requiredRole: string): CanActivateFn => {
1518
1500
  async createSharedComponents(config) {
1519
1501
  // Button Component
1520
1502
  const buttonComponent = `import { Component, Input, Output, EventEmitter } from '@angular/core';
1521
- import { CommonModule } from '@angular/common';
1522
1503
 
1523
1504
  export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
1524
1505
  export type ButtonSize = 'sm' | 'md' | 'lg';
@@ -1526,7 +1507,7 @@ export type ButtonSize = 'sm' | 'md' | 'lg';
1526
1507
  @Component({
1527
1508
  selector: 'app-button',
1528
1509
  standalone: true,
1529
- imports: [CommonModule],
1510
+ imports: [],
1530
1511
  template: \`
1531
1512
  <button
1532
1513
  [class]="buttonClasses"
@@ -1556,7 +1537,7 @@ export class ButtonComponent {
1556
1537
  @Output() clicked = new EventEmitter<Event>();
1557
1538
 
1558
1539
  get buttonClasses(): string {
1559
- const baseClasses = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50';
1540
+ const baseClasses = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50';
1560
1541
 
1561
1542
  const sizeClasses = {
1562
1543
  sm: 'text-sm px-3 py-2 h-9',
@@ -1565,11 +1546,11 @@ export class ButtonComponent {
1565
1546
  };
1566
1547
 
1567
1548
  const variantClasses = {
1568
- primary: 'bg-blue-600 text-white hover:bg-blue-700',
1569
- secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
1570
- outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-600 hover:text-white',
1571
- ghost: 'hover:bg-gray-100 hover:text-gray-900',
1572
- danger: 'bg-red-600 text-white hover:bg-red-700'
1549
+ primary: 'bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500',
1550
+ secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 focus:ring-gray-400',
1551
+ outline: 'border-2 border-primary-600 text-primary-600 hover:bg-primary-600 hover:text-white focus:ring-primary-500',
1552
+ ghost: 'hover:bg-gray-100 hover:text-gray-900 focus:ring-gray-400',
1553
+ danger: 'bg-danger-600 text-white hover:bg-danger-700 focus:ring-danger-500'
1573
1554
  };
1574
1555
 
1575
1556
  const widthClass = this.fullWidth ? 'w-full' : '';
@@ -1591,12 +1572,11 @@ export class ButtonComponent {
1591
1572
 
1592
1573
  // Card Component
1593
1574
  const cardComponent = `import { Component, Input } from '@angular/core';
1594
- import { CommonModule } from '@angular/common';
1595
1575
 
1596
1576
  @Component({
1597
1577
  selector: 'app-card',
1598
1578
  standalone: true,
1599
- imports: [CommonModule],
1579
+ imports: [],
1600
1580
  template: \`
1601
1581
  <div [class]="cardClasses">
1602
1582
  @if (title || subtitle) {
@@ -1654,14 +1634,13 @@ export class CardComponent {
1654
1634
 
1655
1635
  // Loading Spinner Component
1656
1636
  const spinnerComponent = `import { Component, Input } from '@angular/core';
1657
- import { CommonModule } from '@angular/common';
1658
1637
 
1659
1638
  export type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl';
1660
1639
 
1661
1640
  @Component({
1662
1641
  selector: 'app-loading-spinner',
1663
1642
  standalone: true,
1664
- imports: [CommonModule],
1643
+ imports: [],
1665
1644
  template: \`
1666
1645
  <div [class]="containerClasses">
1667
1646
  <svg [class]="spinnerClasses" fill="none" viewBox="0 0 24 24">
@@ -1687,7 +1666,7 @@ export class LoadingSpinnerComponent {
1687
1666
  @Input() size: SpinnerSize = 'md';
1688
1667
  @Input() text?: string;
1689
1668
  @Input() centered = false;
1690
- @Input() color = 'blue';
1669
+ @Input() color = 'primary';
1691
1670
 
1692
1671
  private readonly sizeClasses = {
1693
1672
  sm: 'h-4 w-4',
@@ -1697,11 +1676,15 @@ export class LoadingSpinnerComponent {
1697
1676
  } as const;
1698
1677
 
1699
1678
  private readonly colorClasses = {
1700
- blue: 'text-blue-600',
1679
+ primary: 'text-primary-600',
1680
+ secondary: 'text-secondary-600',
1681
+ accent: 'text-accent-600',
1682
+ success: 'text-success-600',
1683
+ danger: 'text-danger-600',
1684
+ warning: 'text-warning-600',
1685
+ info: 'text-info-600',
1701
1686
  gray: 'text-gray-600',
1702
- white: 'text-white',
1703
- green: 'text-green-600',
1704
- red: 'text-red-600'
1687
+ white: 'text-white'
1705
1688
  } as const;
1706
1689
 
1707
1690
  protected readonly textClasses = 'text-sm text-gray-600';
@@ -1716,7 +1699,7 @@ export class LoadingSpinnerComponent {
1716
1699
 
1717
1700
  get spinnerClasses(): string {
1718
1701
  const baseClasses = 'animate-spin';
1719
- return \`\${baseClasses} \${this.sizeClasses[this.size]} \${this.colorClasses[this.color as keyof typeof this.colorClasses] || this.colorClasses.blue}\`.trim();
1702
+ return \`\${baseClasses} \${this.sizeClasses[this.size]} \${this.colorClasses[this.color as keyof typeof this.colorClasses] || this.colorClasses.primary}\`.trim();
1720
1703
  }
1721
1704
  }`;
1722
1705
 
@@ -1892,7 +1875,6 @@ export interface ContactFormData {
1892
1875
  async createLayout(config) {
1893
1876
  // Header Component with Authentication and Language Switcher
1894
1877
  const headerComponentTs = `import { Component, inject, OnInit } from '@angular/core';
1895
- import { CommonModule } from '@angular/common';
1896
1878
  import { RouterModule, Router } from '@angular/router';
1897
1879
  import { NgIconComponent, provideIcons } from '@ng-icons/core';
1898
1880
  import { heroHome, heroInformationCircle, heroEnvelope, heroUser, heroBars3, heroXMark, heroChevronDown, heroLanguage } from '@ng-icons/heroicons/outline';
@@ -1910,7 +1892,7 @@ interface User {
1910
1892
  @Component({
1911
1893
  selector: 'app-header',
1912
1894
  standalone: true,
1913
- imports: [CommonModule, RouterModule, NgIconComponent, TranslateModule],
1895
+ imports: [RouterModule, NgIconComponent, TranslateModule],
1914
1896
  viewProviders: [provideIcons({ heroHome, heroInformationCircle, heroEnvelope, heroUser, heroBars3, heroXMark, heroChevronDown, heroLanguage })],
1915
1897
  templateUrl: './header.component.html'
1916
1898
  })
@@ -1977,7 +1959,8 @@ export class HeaderComponent implements OnInit {
1977
1959
  <!-- Logo -->
1978
1960
  <div class="flex items-center space-x-4">
1979
1961
  <a routerLink="/" class="flex items-center space-x-3">
1980
- <div class="h-8 w-8 bg-linear-to-r from-blue-500 to-purple-600 rounded-lg flex items-center justify-center">
1962
+ <div class="flex rounded-lg">
1963
+ <img src="assets/images/logo.svg" alt="Logo" class="h-10 w-10" />
1981
1964
  <span class="text-white font-bold text-sm">{{ projectName.charAt(0).toUpperCase() }}</span>
1982
1965
  </div>
1983
1966
  <span class="text-xl font-semibold text-gray-900">
@@ -1991,23 +1974,23 @@ export class HeaderComponent implements OnInit {
1991
1974
  <div class="ml-10 flex items-center space-x-8">
1992
1975
  <a
1993
1976
  routerLink="/"
1994
- routerLinkActive="text-blue-600"
1977
+ routerLinkActive="text-primary-600"
1995
1978
  [routerLinkActiveOptions]="{exact: true}"
1996
- class="flex items-center gap-1.5 text-gray-700 hover:text-blue-600 transition-colors font-medium">
1979
+ class="flex items-center gap-1.5 text-gray-700 hover:text-primary-600 transition-colors font-medium">
1997
1980
  <ng-icon name="heroHome" size="18"></ng-icon>
1998
1981
  {{ 'nav.home' | translate }}
1999
1982
  </a>
2000
1983
  <a
2001
1984
  routerLink="/about"
2002
- routerLinkActive="text-blue-600"
2003
- class="flex items-center gap-1.5 text-gray-700 hover:text-blue-600 transition-colors font-medium">
1985
+ routerLinkActive="text-primary-600"
1986
+ class="flex items-center gap-1.5 text-gray-700 hover:text-primary-600 transition-colors font-medium">
2004
1987
  <ng-icon name="heroInformationCircle" size="18"></ng-icon>
2005
1988
  {{ 'nav.about' | translate }}
2006
1989
  </a>
2007
1990
  <a
2008
1991
  routerLink="/contact"
2009
- routerLinkActive="text-blue-600"
2010
- class="flex items-center gap-1.5 text-gray-700 hover:text-blue-600 transition-colors font-medium">
1992
+ routerLinkActive="text-primary-600"
1993
+ class="flex items-center gap-1.5 text-gray-700 hover:text-primary-600 transition-colors font-medium">
2011
1994
  <ng-icon name="heroEnvelope" size="18"></ng-icon>
2012
1995
  {{ 'nav.contact' | translate }}
2013
1996
  </a>
@@ -2021,8 +2004,8 @@ export class HeaderComponent implements OnInit {
2021
2004
  <div class="hidden md:block relative">
2022
2005
  <button
2023
2006
  (click)="langMenuOpen = !langMenuOpen"
2024
- class="flex items-center space-x-2 text-gray-700 hover:text-blue-600 transition-colors px-3 py-2 rounded-lg hover:bg-gray-100"
2025
- [class.text-blue-600]="langMenuOpen"
2007
+ class="flex items-center space-x-2 text-gray-700 hover:text-primary-600 transition-colors px-3 py-2 rounded-lg hover:bg-gray-100"
2008
+ [class.text-primary-600]="langMenuOpen"
2026
2009
  [class.bg-gray-100]="langMenuOpen">
2027
2010
  <ng-icon name="heroLanguage" size="20"></ng-icon>
2028
2011
  <span class="font-medium text-sm">{{ currentLanguage.nativeName }}</span>
@@ -2037,8 +2020,8 @@ export class HeaderComponent implements OnInit {
2037
2020
  <button
2038
2021
  (click)="changeLanguage(lang.code)"
2039
2022
  class="w-full text-left px-4 py-2 text-sm transition-colors flex items-center justify-between"
2040
- [class.bg-blue-50]="currentLang === lang.code"
2041
- [class.text-blue-600]="currentLang === lang.code"
2023
+ [class.bg-primary-50]="currentLang === lang.code"
2024
+ [class.text-primary-600]="currentLang === lang.code"
2042
2025
  [class.text-gray-700]="currentLang !== lang.code"
2043
2026
  [class.hover:bg-gray-100]="currentLang !== lang.code">
2044
2027
  <span class="flex items-center space-x-2">
@@ -2063,12 +2046,12 @@ export class HeaderComponent implements OnInit {
2063
2046
  @if (!isAuthenticated) {
2064
2047
  <a
2065
2048
  routerLink="/auth/login"
2066
- class="text-gray-700 hover:text-blue-600 transition-colors font-medium">
2049
+ class="text-gray-700 hover:text-primary-600 transition-colors font-medium">
2067
2050
  {{ 'nav.login' | translate }}
2068
2051
  </a>
2069
2052
  <a
2070
2053
  routerLink="/auth/register"
2071
- class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-colors font-medium">
2054
+ class="bg-primary-600 hover:bg-primary-700 text-white px-4 py-2 rounded-lg transition-colors font-medium">
2072
2055
  {{ 'nav.register' | translate }}
2073
2056
  </a>
2074
2057
  }
@@ -2078,9 +2061,9 @@ export class HeaderComponent implements OnInit {
2078
2061
  <div class="relative">
2079
2062
  <button
2080
2063
  (click)="userMenuOpen = !userMenuOpen"
2081
- class="flex items-center space-x-2 text-gray-700 hover:text-blue-600 transition-colors"
2082
- [class.text-blue-600]="userMenuOpen">
2083
- <div class="h-8 w-8 bg-blue-600 rounded-full flex items-center justify-center">
2064
+ class="flex items-center space-x-2 text-gray-700 hover:text-primary-600 transition-colors"
2065
+ [class.text-primary-600]="userMenuOpen">
2066
+ <div class="h-8 w-8 bg-primary-600 rounded-full flex items-center justify-center">
2084
2067
  <ng-icon name="heroUser" size="16" style="color: white;"></ng-icon>
2085
2068
  </div>
2086
2069
  <span class="font-medium">{{ currentUser?.firstName || 'User' }}</span>
@@ -2105,7 +2088,7 @@ export class HeaderComponent implements OnInit {
2105
2088
  <hr class="my-1">
2106
2089
  <button
2107
2090
  (click)="onLogout()"
2108
- class="w-full text-left px-4 py-2 text-sm text-red-600 hover:bg-red-50 transition-colors">
2091
+ class="w-full text-left px-4 py-2 text-sm text-danger-600 hover:bg-danger-50 transition-colors">
2109
2092
  {{ 'nav.logout' | translate }}
2110
2093
  </button>
2111
2094
  </div>
@@ -2136,24 +2119,24 @@ export class HeaderComponent implements OnInit {
2136
2119
  <!-- Navigation Links -->
2137
2120
  <a
2138
2121
  routerLink="/"
2139
- routerLinkActive="text-blue-600 bg-blue-50"
2122
+ routerLinkActive="text-primary-600 bg-primary-50"
2140
2123
  [routerLinkActiveOptions]="{exact: true}"
2141
2124
  (click)="mobileMenuOpen = false"
2142
- class="px-3 py-2 rounded-lg text-gray-700 hover:text-blue-600 hover:bg-gray-100 transition-colors font-medium">
2125
+ class="px-3 py-2 rounded-lg text-gray-700 hover:text-primary-600 hover:bg-gray-100 transition-colors font-medium">
2143
2126
  {{ 'nav.home' | translate }}
2144
2127
  </a>
2145
2128
  <a
2146
2129
  routerLink="/about"
2147
- routerLinkActive="text-blue-600 bg-blue-50"
2130
+ routerLinkActive="text-primary-600 bg-primary-50"
2148
2131
  (click)="mobileMenuOpen = false"
2149
- class="px-3 py-2 rounded-lg text-gray-700 hover:text-blue-600 hover:bg-gray-100 transition-colors font-medium">
2132
+ class="px-3 py-2 rounded-lg text-gray-700 hover:text-primary-600 hover:bg-gray-100 transition-colors font-medium">
2150
2133
  {{ 'nav.about' | translate }}
2151
2134
  </a>
2152
2135
  <a
2153
2136
  routerLink="/contact"
2154
- routerLinkActive="text-blue-600 bg-blue-50"
2137
+ routerLinkActive="text-primary-600 bg-primary-50"
2155
2138
  (click)="mobileMenuOpen = false"
2156
- class="px-3 py-2 rounded-lg text-gray-700 hover:text-blue-600 hover:bg-gray-100 transition-colors font-medium">
2139
+ class="px-3 py-2 rounded-lg text-gray-700 hover:text-primary-600 hover:bg-gray-100 transition-colors font-medium">
2157
2140
  {{ 'nav.contact' | translate }}
2158
2141
  </a>
2159
2142
 
@@ -2166,8 +2149,8 @@ export class HeaderComponent implements OnInit {
2166
2149
  <button
2167
2150
  (click)="changeLanguage(lang.code)"
2168
2151
  class="w-full text-left px-3 py-2 rounded-lg text-sm transition-colors flex items-center justify-between"
2169
- [class.bg-blue-50]="currentLang === lang.code"
2170
- [class.text-blue-600]="currentLang === lang.code"
2152
+ [class.bg-primary-50]="currentLang === lang.code"
2153
+ [class.text-primary-600]="currentLang === lang.code"
2171
2154
  [class.text-gray-700]="currentLang !== lang.code"
2172
2155
  [class.hover:bg-gray-100]="currentLang !== lang.code">
2173
2156
  <span class="flex items-center space-x-2">
@@ -2190,13 +2173,13 @@ export class HeaderComponent implements OnInit {
2190
2173
  <a
2191
2174
  routerLink="/auth/login"
2192
2175
  (click)="mobileMenuOpen = false"
2193
- class="px-3 py-2 rounded-lg text-gray-700 hover:text-blue-600 hover:bg-gray-100 transition-colors font-medium">
2176
+ class="px-3 py-2 rounded-lg text-gray-700 hover:text-primary-600 hover:bg-gray-100 transition-colors font-medium">
2194
2177
  {{ 'nav.login' | translate }}
2195
2178
  </a>
2196
2179
  <a
2197
2180
  routerLink="/auth/register"
2198
2181
  (click)="mobileMenuOpen = false"
2199
- class="px-3 py-2 rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors font-medium text-center">
2182
+ class="px-3 py-2 rounded-lg bg-primary-600 text-white hover:bg-primary-700 transition-colors font-medium text-center">
2200
2183
  {{ 'nav.register' | translate }}
2201
2184
  </a>
2202
2185
  }
@@ -2211,7 +2194,7 @@ export class HeaderComponent implements OnInit {
2211
2194
  </button>
2212
2195
  <button
2213
2196
  (click)="onLogout(); mobileMenuOpen = false"
2214
- class="w-full text-left px-3 py-2 rounded-lg text-red-600 hover:bg-red-50 transition-colors">
2197
+ class="w-full text-left px-3 py-2 rounded-lg text-danger-600 hover:bg-danger-50 transition-colors">
2215
2198
  {{ 'nav.logout' | translate }}
2216
2199
  </button>
2217
2200
  }
@@ -2245,13 +2228,12 @@ export class HeaderComponent implements OnInit {
2245
2228
 
2246
2229
  // Footer Component
2247
2230
  const footerComponentTs = `import { Component } from '@angular/core';
2248
- import { CommonModule } from '@angular/common';
2249
2231
  import { TranslateModule } from '@ngx-translate/core';
2250
2232
 
2251
2233
  @Component({
2252
2234
  selector: 'app-footer',
2253
2235
  standalone: true,
2254
- imports: [CommonModule, TranslateModule],
2236
+ imports: [TranslateModule],
2255
2237
  templateUrl: './footer.component.html'
2256
2238
  })
2257
2239
  export class FooterComponent {
@@ -2266,8 +2248,7 @@ export class FooterComponent {
2266
2248
  <!-- Company Info -->
2267
2249
  <div>
2268
2250
  <div class="flex items-center space-x-3 mb-4">
2269
- <div class="h-8 w-8 bg-linear-to-r from-blue-500 to-purple-600 rounded-lg flex items-center justify-center">
2270
- </div>
2251
+ <img src="assets/images/logo.svg" alt="Logo" class="h-10 w-10" />
2271
2252
  <span class="text-xl font-semibold text-gray-900">
2272
2253
  {{ projectName }}
2273
2254
  </span>
@@ -2284,17 +2265,17 @@ export class FooterComponent {
2284
2265
  </h3>
2285
2266
  <ul class="space-y-2">
2286
2267
  <li>
2287
- <a href="/" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2268
+ <a href="/" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2288
2269
  {{ 'nav.home' | translate }}
2289
2270
  </a>
2290
2271
  </li>
2291
2272
  <li>
2292
- <a href="/about" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2273
+ <a href="/about" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2293
2274
  {{ 'nav.about' | translate }}
2294
2275
  </a>
2295
2276
  </li>
2296
2277
  <li>
2297
- <a href="/contact" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2278
+ <a href="/contact" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2298
2279
  {{ 'nav.contact' | translate }}
2299
2280
  </a>
2300
2281
  </li>
@@ -2308,17 +2289,17 @@ export class FooterComponent {
2308
2289
  </h3>
2309
2290
  <ul class="space-y-2">
2310
2291
  <li>
2311
- <a href="https://angular.dev" target="_blank" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2292
+ <a href="https://angular.dev" target="_blank" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2312
2293
  Angular
2313
2294
  </a>
2314
2295
  </li>
2315
2296
  <li>
2316
- <a href="https://tailwindcss.com" target="_blank" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2297
+ <a href="https://tailwindcss.com" target="_blank" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2317
2298
  Tailwind CSS
2318
2299
  </a>
2319
2300
  </li>
2320
2301
  <li>
2321
- <a href="https://typescript.org" target="_blank" class="text-gray-600 hover:text-blue-600 transition-colors text-sm">
2302
+ <a href="https://typescript.org" target="_blank" class="text-gray-600 hover:text-primary-600 transition-colors text-sm">
2322
2303
  TypeScript
2323
2304
  </a>
2324
2305
  </li>
@@ -2327,13 +2308,10 @@ export class FooterComponent {
2327
2308
  </div>
2328
2309
 
2329
2310
  <!-- Bottom Bar -->
2330
- <div class="border-t border-gray-200 mt-8 pt-8 flex flex-col md:flex-row justify-between items-center">
2331
- <p class="text-gray-500 text-sm">
2311
+ <div class="border-t border-gray-200 mt-8 pt-8">
2312
+ <p class="text-gray-500 text-sm text-center">
2332
2313
  {{ 'footer.copyright' | translate:{ year: currentYear, name: projectName } }}
2333
2314
  </p>
2334
- <p class="text-gray-500 text-sm mt-2 md:mt-0">
2335
- {{ 'footer.madeWith' | translate }}
2336
- </p>
2337
2315
  </div>
2338
2316
  </div>
2339
2317
  </footer>
@@ -2353,16 +2331,15 @@ export class FooterComponent {
2353
2331
  async createAuthLayout(config) {
2354
2332
  // Auth Layout Component
2355
2333
  const authLayoutComponent = `import { Component } from '@angular/core';
2356
- import { CommonModule } from '@angular/common';
2357
2334
  import { RouterOutlet } from '@angular/router';
2358
2335
  import { TranslateModule } from '@ngx-translate/core';
2359
2336
 
2360
2337
  @Component({
2361
2338
  selector: 'app-auth-layout',
2362
2339
  standalone: true,
2363
- imports: [CommonModule, RouterOutlet, TranslateModule],
2340
+ imports: [RouterOutlet, TranslateModule],
2364
2341
  template: \`
2365
- <div class="min-h-screen bg-linear-to-br from-blue-500 via-purple-600 to-indigo-700 flex items-center justify-center p-4">
2342
+ <div class="min-h-screen bg-linear-to-br from-primary-500 via-accent-600 to-secondary-700 flex items-center justify-center p-4">
2366
2343
  <div class="w-full max-w-md">
2367
2344
 
2368
2345
  <!-- Logo/Brand -->
@@ -2371,7 +2348,7 @@ import { TranslateModule } from '@ngx-translate/core';
2371
2348
  <span class="text-2xl font-bold text-white">{{ firstLetter }}</span>
2372
2349
  </div>
2373
2350
  <h1 class="text-2xl font-bold text-white">{{ projectName }}</h1>
2374
- <p class="text-blue-100 mt-2">{{ 'auth.layout.welcome' | translate }}</p>
2351
+ <p class="text-primary-100 mt-2">{{ 'auth.layout.welcome' | translate }}</p>
2375
2352
  </div>
2376
2353
 
2377
2354
  <!-- Auth Form Container -->
@@ -2380,7 +2357,7 @@ import { TranslateModule } from '@ngx-translate/core';
2380
2357
  </div>
2381
2358
 
2382
2359
  <!-- Footer -->
2383
- <div class="text-center mt-8 text-blue-100 text-sm">
2360
+ <div class="text-center mt-8 text-primary-100 text-sm">
2384
2361
  <p>{{ 'auth.layout.copyright' | translate:{ year: currentYear, name: projectName } }}</p>
2385
2362
  </div>
2386
2363
  </div>
@@ -2400,7 +2377,6 @@ export class AuthLayoutComponent {
2400
2377
 
2401
2378
  // Login Component
2402
2379
  const loginComponentTs = `import { Component, inject } from '@angular/core';
2403
- import { CommonModule } from '@angular/common';
2404
2380
  import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms';
2405
2381
  import { Router, RouterModule } from '@angular/router';
2406
2382
  import { TranslateModule } from '@ngx-translate/core';
@@ -2409,7 +2385,7 @@ import { ButtonComponent } from '@shared/components/button/button.component';
2409
2385
  @Component({
2410
2386
  selector: 'app-login',
2411
2387
  standalone: true,
2412
- imports: [CommonModule, ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2388
+ imports: [ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2413
2389
  templateUrl: './login.component.html'
2414
2390
  })
2415
2391
  export class LoginComponent {
@@ -2476,11 +2452,12 @@ export class LoginComponent {
2476
2452
  id="email"
2477
2453
  type="email"
2478
2454
  formControlName="email"
2455
+ autocomplete="email"
2479
2456
  [placeholder]="'auth.login.email' | translate"
2480
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors"
2481
- [class.border-red-500]="loginForm.get('email')?.invalid && loginForm.get('email')?.touched">
2457
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-colors"
2458
+ [class.border-danger-500]="loginForm.get('email')?.invalid && loginForm.get('email')?.touched">
2482
2459
  @if (loginForm.get('email')?.invalid && loginForm.get('email')?.touched) {
2483
- <div class="mt-1 text-sm text-red-600">
2460
+ <div class="mt-1 text-sm text-danger-600">
2484
2461
  @if (loginForm.get('email')?.errors?.['required']) {
2485
2462
  <span>{{ 'auth.validation.emailRequired' | translate }}</span>
2486
2463
  }
@@ -2501,9 +2478,10 @@ export class LoginComponent {
2501
2478
  id="password"
2502
2479
  [type]="showPassword ? 'text' : 'password'"
2503
2480
  formControlName="password"
2481
+ autocomplete="current-password"
2504
2482
  [placeholder]="'auth.login.password' | translate"
2505
- class="w-full px-4 py-3 pr-12 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors"
2506
- [class.border-red-500]="loginForm.get('password')?.invalid && loginForm.get('password')?.touched">
2483
+ class="w-full px-4 py-3 pr-12 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-colors"
2484
+ [class.border-danger-500]="loginForm.get('password')?.invalid && loginForm.get('password')?.touched">
2507
2485
  <button
2508
2486
  type="button"
2509
2487
  (click)="togglePassword()"
@@ -2523,7 +2501,7 @@ export class LoginComponent {
2523
2501
  </button>
2524
2502
  </div>
2525
2503
  @if (loginForm.get('password')?.invalid && loginForm.get('password')?.touched) {
2526
- <div class="mt-1 text-sm text-red-600">
2504
+ <div class="mt-1 text-sm text-danger-600">
2527
2505
  @if (loginForm.get('password')?.errors?.['required']) {
2528
2506
  <span>{{ 'auth.validation.passwordRequired' | translate }}</span>
2529
2507
  }
@@ -2540,10 +2518,10 @@ export class LoginComponent {
2540
2518
  <input
2541
2519
  type="checkbox"
2542
2520
  formControlName="rememberMe"
2543
- class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded">
2521
+ class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded">
2544
2522
  <span class="ml-2 rtl:mr-2 text-sm text-gray-600">{{ 'auth.login.rememberMe' | translate }}</span>
2545
2523
  </label>
2546
- <a routerLink="/auth/forgot-password" class="text-sm text-blue-600 hover:text-blue-500">
2524
+ <a routerLink="/auth/forgot-password" class="text-sm text-primary-600 hover:text-primary-700">
2547
2525
  {{ 'auth.login.forgotPassword' | translate }}
2548
2526
  </a>
2549
2527
  </div>
@@ -2559,7 +2537,7 @@ export class LoginComponent {
2559
2537
 
2560
2538
  <!-- Error Message -->
2561
2539
  @if (errorMessage) {
2562
- <div class="p-3 bg-red-100 border border-red-300 text-red-700 rounded-lg text-sm">
2540
+ <div class="p-3 bg-danger-100 border border-danger-300 text-danger-700 rounded-lg text-sm">
2563
2541
  {{ errorMessage }}
2564
2542
  </div>
2565
2543
  }
@@ -2569,7 +2547,7 @@ export class LoginComponent {
2569
2547
  <div class="text-center pt-4 border-t border-gray-200">
2570
2548
  <p class="text-sm text-gray-600">
2571
2549
  {{ 'auth.login.noAccount' | translate }}
2572
- <a routerLink="/auth/register" class="text-blue-600 hover:text-blue-500 font-medium">
2550
+ <a routerLink="/auth/register" class="text-primary-600 hover:text-primary-700 font-medium">
2573
2551
  {{ 'auth.login.createAccount' | translate }}
2574
2552
  </a>
2575
2553
  </p>
@@ -2589,7 +2567,6 @@ export class LoginComponent {
2589
2567
 
2590
2568
  // Register Component
2591
2569
  const registerComponentTs = `import { Component, inject } from '@angular/core';
2592
- import { CommonModule } from '@angular/common';
2593
2570
  import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms';
2594
2571
  import { RouterModule } from '@angular/router';
2595
2572
  import { TranslateModule } from '@ngx-translate/core';
@@ -2598,7 +2575,7 @@ import { ButtonComponent } from '@shared/components/button/button.component';
2598
2575
  @Component({
2599
2576
  selector: 'app-register',
2600
2577
  standalone: true,
2601
- imports: [CommonModule, ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2578
+ imports: [ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2602
2579
  templateUrl: './register.component.html'
2603
2580
  })
2604
2581
  export class RegisterComponent {
@@ -2622,29 +2599,33 @@ export class RegisterComponent {
2622
2599
  <input
2623
2600
  type="text"
2624
2601
  formControlName="firstName"
2602
+ autocomplete="given-name"
2625
2603
  [placeholder]="'auth.register.firstName' | translate"
2626
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
2604
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent">
2627
2605
  <input
2628
2606
  type="text"
2629
2607
  formControlName="lastName"
2608
+ autocomplete="family-name"
2630
2609
  [placeholder]="'auth.register.lastName' | translate"
2631
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
2610
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent">
2632
2611
  </div>
2633
2612
  <input
2634
2613
  type="email"
2635
2614
  formControlName="email"
2615
+ autocomplete="email"
2636
2616
  [placeholder]="'auth.register.email' | translate"
2637
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
2617
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent">
2638
2618
  <input
2639
2619
  type="password"
2640
2620
  formControlName="password"
2621
+ autocomplete="new-password"
2641
2622
  [placeholder]="'auth.register.password' | translate"
2642
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
2623
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent">
2643
2624
  <app-button type="submit" [fullWidth]="true" [disabled]="registerForm.invalid">
2644
2625
  {{ 'auth.register.submit' | translate }}
2645
2626
  </app-button>
2646
2627
  <div class="text-center">
2647
- <a routerLink="/auth/login" class="text-blue-600 hover:text-blue-500">
2628
+ <a routerLink="/auth/login" class="text-primary-600 hover:text-primary-700">
2648
2629
  {{ 'auth.register.hasAccount' | translate }}
2649
2630
  </a>
2650
2631
  </div>
@@ -2664,7 +2645,6 @@ export class RegisterComponent {
2664
2645
 
2665
2646
  // Forgot Password Component
2666
2647
  const forgotPasswordComponentTs = `import { Component, inject } from '@angular/core';
2667
- import { CommonModule } from '@angular/common';
2668
2648
  import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms';
2669
2649
  import { RouterModule } from '@angular/router';
2670
2650
  import { TranslateModule } from '@ngx-translate/core';
@@ -2673,7 +2653,7 @@ import { ButtonComponent } from '@shared/components/button/button.component';
2673
2653
  @Component({
2674
2654
  selector: 'app-forgot-password',
2675
2655
  standalone: true,
2676
- imports: [CommonModule, ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2656
+ imports: [ReactiveFormsModule, RouterModule, TranslateModule, ButtonComponent],
2677
2657
  templateUrl: './forgot-password.component.html'
2678
2658
  })
2679
2659
  export class ForgotPasswordComponent {
@@ -2691,13 +2671,14 @@ export class ForgotPasswordComponent {
2691
2671
  <input
2692
2672
  type="email"
2693
2673
  formControlName="email"
2674
+ autocomplete="email"
2694
2675
  [placeholder]="'auth.forgot.email' | translate"
2695
- class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
2676
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent">
2696
2677
  <app-button type="submit" [fullWidth]="true" [disabled]="forgotForm.invalid">
2697
2678
  {{ 'auth.forgot.submit' | translate }}
2698
2679
  </app-button>
2699
2680
  <div class="text-center">
2700
- <a routerLink="/auth/login" class="text-blue-600 hover:text-blue-500">
2681
+ <a routerLink="/auth/login" class="text-primary-600 hover:text-primary-700">
2701
2682
  {{ 'auth.forgot.backToLogin' | translate }}
2702
2683
  </a>
2703
2684
  </div>
@@ -2793,6 +2774,8 @@ export class ForgotPasswordComponent {
2793
2774
  'editor.tabSize': 2,
2794
2775
  'prettier.requireConfig': false,
2795
2776
  'eslint.validate': ['javascript', 'typescript', 'html'],
2777
+ // Suppress CSS linting warnings for Tailwind CSS directives
2778
+ 'css.lint.unknownAtRules': 'ignore',
2796
2779
  };
2797
2780
 
2798
2781
  // VSCode extensions recommendations
@@ -2820,7 +2803,6 @@ export class ForgotPasswordComponent {
2820
2803
 
2821
2804
  async createHomeComponent(config) {
2822
2805
  const homeComponentTs = `import { Component, OnInit, inject } from '@angular/core';
2823
- import { CommonModule } from '@angular/common';
2824
2806
  import { RouterModule } from '@angular/router';
2825
2807
  import { NgIconComponent, provideIcons } from '@ng-icons/core';
2826
2808
  import {
@@ -2847,7 +2829,7 @@ import { SeoService } from '@core/services/seo.service';
2847
2829
  @Component({
2848
2830
  selector: 'app-home',
2849
2831
  standalone: true,
2850
- imports: [CommonModule, RouterModule, NgIconComponent, TranslateModule, ButtonComponent, CardComponent],
2832
+ imports: [RouterModule, NgIconComponent, TranslateModule, ButtonComponent, CardComponent],
2851
2833
  viewProviders: [provideIcons({
2852
2834
  heroRocketLaunch,
2853
2835
  heroPaintBrush,
@@ -2922,12 +2904,12 @@ export class HomeComponent implements OnInit {
2922
2904
  }`;
2923
2905
 
2924
2906
  const homeComponentHtml = `<!-- Hero Section -->
2925
- <section class="relative py-20 bg-linear-to-br from-blue-600 via-indigo-600 to-purple-700 overflow-hidden">
2907
+ <section class="relative py-20 bg-linear-to-br from-primary-600 via-secondary-600 to-accent-700 overflow-hidden">
2926
2908
  <!-- Animated Background Elements -->
2927
2909
  <div class="absolute inset-0 opacity-20">
2928
- <div class="absolute top-0 -left-4 w-72 h-72 bg-purple-300 rounded-full mix-blend-multiply filter blur-xl animate-blob"></div>
2929
- <div class="absolute top-0 -right-4 w-72 h-72 bg-yellow-300 rounded-full mix-blend-multiply filter blur-xl animate-blob animation-delay-2000"></div>
2930
- <div class="absolute -bottom-8 left-20 w-72 h-72 bg-pink-300 rounded-full mix-blend-multiply filter blur-xl animate-blob animation-delay-4000"></div>
2910
+ <div class="absolute top-0 -left-4 w-72 h-72 bg-accent-300 rounded-full mix-blend-multiply filter blur-xl animate-blob"></div>
2911
+ <div class="absolute top-0 -right-4 w-72 h-72 bg-warning-300 rounded-full mix-blend-multiply filter blur-xl animate-blob animation-delay-2000"></div>
2912
+ <div class="absolute -bottom-8 left-20 w-72 h-72 bg-accent-400 rounded-full mix-blend-multiply filter blur-xl animate-blob animation-delay-4000"></div>
2931
2913
  </div>
2932
2914
 
2933
2915
  <div class="relative container mx-auto px-4 text-center">
@@ -2935,7 +2917,7 @@ export class HomeComponent implements OnInit {
2935
2917
  <h1 class="text-4xl md:text-6xl lg:text-7xl font-bold text-white mb-6 drop-shadow-lg">
2936
2918
  {{ 'home.hero.title' | translate:{ projectName: projectName } }}
2937
2919
  </h1>
2938
- <p class="text-lg md:text-xl lg:text-2xl text-blue-50 mb-8 max-w-3xl mx-auto leading-relaxed">
2920
+ <p class="text-lg md:text-xl lg:text-2xl text-primary-50 mb-8 max-w-3xl mx-auto leading-relaxed">
2939
2921
  {{ 'home.hero.subtitle' | translate }}
2940
2922
  </p>
2941
2923
  <div class="flex flex-col sm:flex-row gap-4 justify-center animate-slide-up">
@@ -2974,8 +2956,8 @@ export class HomeComponent implements OnInit {
2974
2956
  <app-card [hover]="true" [shadow]="true">
2975
2957
  <div class="flex items-start space-x-4">
2976
2958
  <div class="shrink-0">
2977
- <div class="w-12 h-12 rounded-lg bg-blue-100 flex items-center justify-center">
2978
- <ng-icon name="heroRocketLaunch" size="24" style="color: #2563eb;"></ng-icon>
2959
+ <div class="w-12 h-12 rounded-lg bg-primary-100 flex items-center justify-center">
2960
+ <ng-icon name="heroRocketLaunch" size="24" style="color: var(--color-primary-600);"></ng-icon>
2979
2961
  </div>
2980
2962
  </div>
2981
2963
  <div>
@@ -2989,8 +2971,8 @@ export class HomeComponent implements OnInit {
2989
2971
  <app-card [hover]="true" [shadow]="true">
2990
2972
  <div class="flex items-start space-x-4">
2991
2973
  <div class="shrink-0">
2992
- <div class="w-12 h-12 rounded-lg bg-purple-100 flex items-center justify-center">
2993
- <ng-icon name="heroGlobeAlt" size="24" style="color: #9333ea;"></ng-icon>
2974
+ <div class="w-12 h-12 rounded-lg bg-accent-100 flex items-center justify-center">
2975
+ <ng-icon name="heroGlobeAlt" size="24" style="color: var(--color-accent-600);"></ng-icon>
2994
2976
  </div>
2995
2977
  </div>
2996
2978
  <div>
@@ -3004,8 +2986,8 @@ export class HomeComponent implements OnInit {
3004
2986
  <app-card [hover]="true" [shadow]="true">
3005
2987
  <div class="flex items-start space-x-4">
3006
2988
  <div class="shrink-0">
3007
- <div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center">
3008
- <ng-icon name="heroServer" size="24" style="color: #16a34a;"></ng-icon>
2989
+ <div class="w-12 h-12 rounded-lg bg-success-100 flex items-center justify-center">
2990
+ <ng-icon name="heroServer" size="24" style="color: var(--color-success-600);"></ng-icon>
3009
2991
  </div>
3010
2992
  </div>
3011
2993
  <div>
@@ -3019,8 +3001,8 @@ export class HomeComponent implements OnInit {
3019
3001
  <app-card [hover]="true" [shadow]="true">
3020
3002
  <div class="flex items-start space-x-4">
3021
3003
  <div class="shrink-0">
3022
- <div class="w-12 h-12 rounded-lg bg-cyan-100 flex items-center justify-center">
3023
- <ng-icon name="heroPaintBrush" size="24" style="color: #0891b2;"></ng-icon>
3004
+ <div class="w-12 h-12 rounded-lg bg-secondary-100 flex items-center justify-center">
3005
+ <ng-icon name="heroPaintBrush" size="24" style="color: var(--color-secondary-600);"></ng-icon>
3024
3006
  </div>
3025
3007
  </div>
3026
3008
  <div>
@@ -3034,8 +3016,8 @@ export class HomeComponent implements OnInit {
3034
3016
  <app-card [hover]="true" [shadow]="true">
3035
3017
  <div class="flex items-start space-x-4">
3036
3018
  <div class="shrink-0">
3037
- <div class="w-12 h-12 rounded-lg bg-indigo-100 flex items-center justify-center">
3038
- <ng-icon name="heroCube" size="24" style="color: #4f46e5;"></ng-icon>
3019
+ <div class="w-12 h-12 rounded-lg bg-accent-100 flex items-center justify-center">
3020
+ <ng-icon name="heroCube" size="24" style="color: var(--color-accent-600);"></ng-icon>
3039
3021
  </div>
3040
3022
  </div>
3041
3023
  <div>
@@ -3049,8 +3031,8 @@ export class HomeComponent implements OnInit {
3049
3031
  <app-card [hover]="true" [shadow]="true">
3050
3032
  <div class="flex items-start space-x-4">
3051
3033
  <div class="shrink-0">
3052
- <div class="w-12 h-12 rounded-lg bg-blue-100 flex items-center justify-center">
3053
- <ng-icon name="heroShieldCheck" size="24" style="color: #2563eb;"></ng-icon>
3034
+ <div class="w-12 h-12 rounded-lg bg-primary-100 flex items-center justify-center">
3035
+ <ng-icon name="heroShieldCheck" size="24" style="color: var(--color-primary-600);"></ng-icon>
3054
3036
  </div>
3055
3037
  </div>
3056
3038
  <div>
@@ -3067,35 +3049,35 @@ export class HomeComponent implements OnInit {
3067
3049
  <app-card [title]="'home.coreServices.title' | translate" [shadow]="true">
3068
3050
  <ul class="space-y-2 text-gray-700">
3069
3051
  <li class="flex items-start">
3070
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3052
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3071
3053
  <span>{{ 'home.coreServices.authService' | translate }}</span>
3072
3054
  </li>
3073
3055
  <li class="flex items-start">
3074
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3056
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3075
3057
  <span>{{ 'home.coreServices.apiService' | translate }}</span>
3076
3058
  </li>
3077
3059
  <li class="flex items-start">
3078
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3060
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3079
3061
  <span>{{ 'home.coreServices.toastService' | translate }}</span>
3080
3062
  </li>
3081
3063
  <li class="flex items-start">
3082
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3064
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3083
3065
  <span>{{ 'home.coreServices.modalService' | translate }}</span>
3084
3066
  </li>
3085
3067
  <li class="flex items-start">
3086
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3068
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3087
3069
  <span>{{ 'home.coreServices.loadingService' | translate }}</span>
3088
3070
  </li>
3089
3071
  <li class="flex items-start">
3090
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3072
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3091
3073
  <span>{{ 'home.coreServices.cacheService' | translate }}</span>
3092
3074
  </li>
3093
3075
  <li class="flex items-start">
3094
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3076
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3095
3077
  <span>{{ 'home.coreServices.storageService' | translate }}</span>
3096
3078
  </li>
3097
3079
  <li class="flex items-start">
3098
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #22c55e;"></ng-icon>
3080
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-success-500);"></ng-icon>
3099
3081
  <span>{{ 'home.coreServices.i18nService' | translate }}</span>
3100
3082
  </li>
3101
3083
  </ul>
@@ -3105,31 +3087,31 @@ export class HomeComponent implements OnInit {
3105
3087
  <app-card [title]="'home.sharedComponents.title' | translate" [shadow]="true">
3106
3088
  <ul class="space-y-2 text-gray-700">
3107
3089
  <li class="flex items-start">
3108
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3090
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3109
3091
  <span>{{ 'home.sharedComponents.button' | translate }}</span>
3110
3092
  </li>
3111
3093
  <li class="flex items-start">
3112
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3094
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3113
3095
  <span>{{ 'home.sharedComponents.card' | translate }}</span>
3114
3096
  </li>
3115
3097
  <li class="flex items-start">
3116
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3098
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3117
3099
  <span>{{ 'home.sharedComponents.spinner' | translate }}</span>
3118
3100
  </li>
3119
3101
  <li class="flex items-start">
3120
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3102
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3121
3103
  <span>{{ 'home.sharedComponents.toast' | translate }}</span>
3122
3104
  </li>
3123
3105
  <li class="flex items-start">
3124
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3106
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3125
3107
  <span>{{ 'home.sharedComponents.modal' | translate }}</span>
3126
3108
  </li>
3127
3109
  <li class="flex items-start">
3128
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3110
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3129
3111
  <span>{{ 'home.sharedComponents.pipes' | translate }}</span>
3130
3112
  </li>
3131
3113
  <li class="flex items-start">
3132
- <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: #3b82f6;"></ng-icon>
3114
+ <ng-icon name="heroCheckCircle" size="20" class="mr-2 mt-0.5" style="color: var(--color-primary-500);"></ng-icon>
3133
3115
  <span>{{ 'home.sharedComponents.directives' | translate }}</span>
3134
3116
  </li>
3135
3117
  </ul>
@@ -3209,16 +3191,16 @@ export class HomeComponent implements OnInit {
3209
3191
  <app-card [title]="'home.pathAliases.title' | translate" [shadow]="true">
3210
3192
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4 text-sm">
3211
3193
  <div class="bg-gray-50 p-3 rounded font-mono">
3212
- <span class="text-purple-600">{{ 'home.pathAliases.core' | translate }}</span>
3194
+ <span style="color: var(--color-accent-600);">{{ 'home.pathAliases.core' | translate }}</span>
3213
3195
  </div>
3214
3196
  <div class="bg-gray-50 p-3 rounded font-mono">
3215
- <span class="text-purple-600">{{ 'home.pathAliases.shared' | translate }}</span>
3197
+ <span style="color: var(--color-accent-600);">{{ 'home.pathAliases.shared' | translate }}</span>
3216
3198
  </div>
3217
3199
  <div class="bg-gray-50 p-3 rounded font-mono">
3218
- <span class="text-purple-600">{{ 'home.pathAliases.features' | translate }}</span>
3200
+ <span style="color: var(--color-accent-600);">{{ 'home.pathAliases.features' | translate }}</span>
3219
3201
  </div>
3220
3202
  <div class="bg-gray-50 p-3 rounded font-mono">
3221
- <span class="text-purple-600">{{ 'home.pathAliases.environments' | translate }}</span>
3203
+ <span style="color: var(--color-accent-600);">{{ 'home.pathAliases.environments' | translate }}</span>
3222
3204
  </div>
3223
3205
  </div>
3224
3206
  </app-card>
@@ -3243,7 +3225,7 @@ export class HomeComponent implements OnInit {
3243
3225
  <div class="grid grid-cols-1 md:grid-cols-2 gap-6 text-sm font-mono">
3244
3226
  <div>
3245
3227
  <div class="flex items-center mb-2">
3246
- <ng-icon name="heroFolder" size="18" class="mr-2" style="color: #3b82f6;"></ng-icon>
3228
+ <ng-icon name="heroFolder" size="18" class="mr-2" style="color: var(--color-primary-500);"></ng-icon>
3247
3229
  <span class="font-semibold">src/app/core/</span>
3248
3230
  </div>
3249
3231
  <ul class="ml-6 space-y-1 text-gray-600">
@@ -3256,7 +3238,7 @@ export class HomeComponent implements OnInit {
3256
3238
 
3257
3239
  <div>
3258
3240
  <div class="flex items-center mb-2">
3259
- <ng-icon name="heroFolder" size="18" class="mr-2" style="color: #a855f7;"></ng-icon>
3241
+ <ng-icon name="heroFolder" size="18" class="mr-2" style="color: var(--color-accent-500);"></ng-icon>
3260
3242
  <span class="font-semibold">src/app/shared/</span>
3261
3243
  </div>
3262
3244
  <ul class="ml-6 space-y-1 text-gray-600">
@@ -3269,7 +3251,7 @@ export class HomeComponent implements OnInit {
3269
3251
 
3270
3252
  <div>
3271
3253
  <div class="flex items-center mb-2">
3272
- <ng-icon name="heroFolder" size="18" class="mr-2" style="color: #22c55e;"></ng-icon>
3254
+ <ng-icon name="heroFolder" size="18" class="mr-2" style="color: var(--color-success-500);"></ng-icon>
3273
3255
  <span class="font-semibold">src/app/features/</span>
3274
3256
  </div>
3275
3257
  <ul class="ml-6 space-y-1 text-gray-600">
@@ -3282,7 +3264,7 @@ export class HomeComponent implements OnInit {
3282
3264
 
3283
3265
  <div>
3284
3266
  <div class="flex items-center mb-2">
3285
- <ng-icon name="heroFolder" size="18" class="mr-2" style="color: #f97316;"></ng-icon>
3267
+ <ng-icon name="heroFolder" size="18" class="mr-2" style="color: var(--color-warning-500);"></ng-icon>
3286
3268
  <span class="font-semibold">src/app/layout/</span>
3287
3269
  </div>
3288
3270
  <ul class="ml-6 space-y-1 text-gray-600">
@@ -3300,7 +3282,7 @@ export class HomeComponent implements OnInit {
3300
3282
  <section class="py-20 bg-gray-50">
3301
3283
  <div class="container mx-auto px-4">
3302
3284
  <div class="text-center mb-12 animate-fade-in">
3303
- <div class="inline-flex items-center justify-center w-14 h-14 rounded-xl bg-blue-600 mb-4">
3285
+ <div class="inline-flex items-center justify-center w-14 h-14 rounded-xl bg-primary-600 mb-4">
3304
3286
  <ng-icon name="heroBolt" size="28" style="color: white;"></ng-icon>
3305
3287
  </div>
3306
3288
  <h2 class="text-3xl md:text-4xl font-bold text-gray-900 mb-3">
@@ -3318,7 +3300,7 @@ export class HomeComponent implements OnInit {
3318
3300
  <div class="animate-slide-up">
3319
3301
  <div class="flex items-center gap-3 mb-5">
3320
3302
  <div class="w-10 h-10 rounded-lg bg-gray-100 flex items-center justify-center">
3321
- <ng-icon name="heroCheckCircle" size="20" style="color: #374151;"></ng-icon>
3303
+ <ng-icon name="heroCheckCircle" size="20" class="text-gray-700"></ng-icon>
3322
3304
  </div>
3323
3305
  <div>
3324
3306
  <h3 class="text-xl font-semibold text-gray-900">
@@ -3364,7 +3346,7 @@ export class HomeComponent implements OnInit {
3364
3346
  <div class="animate-slide-up animation-delay-200">
3365
3347
  <div class="flex items-center gap-3 mb-5">
3366
3348
  <div class="w-10 h-10 rounded-lg bg-gray-100 flex items-center justify-center">
3367
- <ng-icon name="heroCube" size="20" style="color: #374151;"></ng-icon>
3349
+ <ng-icon name="heroCube" size="20" class="text-gray-700"></ng-icon>
3368
3350
  </div>
3369
3351
  <div>
3370
3352
  <h3 class="text-xl font-semibold text-gray-900">
@@ -3393,10 +3375,10 @@ export class HomeComponent implements OnInit {
3393
3375
  </div>
3394
3376
 
3395
3377
  <!-- Pro Tip -->
3396
- <div class="bg-blue-50 rounded-lg p-5 border border-blue-100">
3378
+ <div class="bg-info-50 rounded-lg p-5 border border-info-100">
3397
3379
  <div class="flex items-start gap-3">
3398
3380
  <div class="shrink-0">
3399
- <div class="w-8 h-8 rounded-lg bg-blue-600 flex items-center justify-center">
3381
+ <div class="w-8 h-8 rounded-lg bg-primary-600 flex items-center justify-center">
3400
3382
  <ng-icon name="heroBolt" size="16" style="color: white;"></ng-icon>
3401
3383
  </div>
3402
3384
  </div>
@@ -3448,7 +3430,6 @@ export class HomeComponent implements OnInit {
3448
3430
 
3449
3431
  async createAboutComponent(config) {
3450
3432
  const aboutComponentTs = `import { Component, OnInit, inject } from '@angular/core';
3451
- import { CommonModule } from '@angular/common';
3452
3433
  import { RouterModule } from '@angular/router';
3453
3434
  import { NgIconComponent, provideIcons } from '@ng-icons/core';
3454
3435
  import {
@@ -3466,7 +3447,7 @@ import { SeoService } from '@core/services/seo.service';
3466
3447
  @Component({
3467
3448
  selector: 'app-about',
3468
3449
  standalone: true,
3469
- imports: [CommonModule, RouterModule, NgIconComponent, TranslateModule, ButtonComponent],
3450
+ imports: [RouterModule, NgIconComponent, TranslateModule, ButtonComponent],
3470
3451
  viewProviders: [provideIcons({
3471
3452
  heroRocketLaunch,
3472
3453
  heroPaintBrush,
@@ -3493,11 +3474,11 @@ export class AboutComponent implements OnInit {
3493
3474
  }`;
3494
3475
 
3495
3476
  const aboutComponentHtml = `<!-- Hero Section -->
3496
- <section class="relative py-16 bg-linear-to-br from-indigo-600 via-purple-600 to-pink-600 overflow-hidden">
3477
+ <section class="relative py-16 bg-linear-to-br from-primary-600 via-accent-600 to-secondary-600 overflow-hidden">
3497
3478
  <div class="absolute inset-0 opacity-10">
3498
3479
  <div class="absolute top-0 left-0 w-96 h-96 bg-white rounded-full mix-blend-multiply filter blur-3xl animate-blob"></div>
3499
- <div class="absolute top-0 right-0 w-96 h-96 bg-yellow-200 rounded-full mix-blend-multiply filter blur-3xl animate-blob animation-delay-2000"></div>
3500
- <div class="absolute bottom-0 left-1/2 w-96 h-96 bg-pink-200 rounded-full mix-blend-multiply filter blur-3xl animate-blob animation-delay-4000"></div>
3480
+ <div class="absolute top-0 right-0 w-96 h-96 bg-warning-200 rounded-full mix-blend-multiply filter blur-3xl animate-blob animation-delay-2000"></div>
3481
+ <div class="absolute bottom-0 left-1/2 w-96 h-96 bg-accent-200 rounded-full mix-blend-multiply filter blur-3xl animate-blob animation-delay-4000"></div>
3501
3482
  </div>
3502
3483
 
3503
3484
  <div class="relative container mx-auto px-4 text-center">
@@ -3505,7 +3486,7 @@ export class AboutComponent implements OnInit {
3505
3486
  <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4 drop-shadow-lg">
3506
3487
  {{ 'about.title' | translate:{ projectName: projectName } }}
3507
3488
  </h1>
3508
- <p class="text-lg md:text-xl text-purple-50 max-w-3xl mx-auto leading-relaxed">
3489
+ <p class="text-lg md:text-xl text-accent-50 max-w-3xl mx-auto leading-relaxed">
3509
3490
  {{ 'about.subtitle' | translate }}
3510
3491
  </p>
3511
3492
  </div>
@@ -3518,9 +3499,9 @@ export class AboutComponent implements OnInit {
3518
3499
  <div class="grid grid-cols-1 lg:grid-cols-2 gap-12 max-w-6xl mx-auto">
3519
3500
  <!-- Project Overview Card -->
3520
3501
  <div class="animate-slide-up">
3521
- <div class="bg-linear-to-br from-blue-50 to-indigo-50 rounded-2xl p-8 border border-blue-100 h-full">
3502
+ <div class="bg-linear-to-br from-primary-50 to-accent-50 rounded-2xl p-8 border border-primary-100 h-full">
3522
3503
  <div class="flex items-center gap-3 mb-6">
3523
- <div class="w-12 h-12 rounded-lg bg-linear-to-br from-blue-500 to-indigo-600 flex items-center justify-center shadow-lg">
3504
+ <div class="w-12 h-12 rounded-lg bg-linear-to-br from-primary-500 to-accent-600 flex items-center justify-center shadow-lg">
3524
3505
  <ng-icon name="heroRocketLaunch" size="24" style="color: white;"></ng-icon>
3525
3506
  </div>
3526
3507
  <h2 class="text-2xl font-bold text-gray-900">
@@ -3538,9 +3519,9 @@ export class AboutComponent implements OnInit {
3538
3519
 
3539
3520
  <!-- Features Card -->
3540
3521
  <div class="animate-slide-up animation-delay-200">
3541
- <div class="bg-linear-to-br from-purple-50 to-pink-50 rounded-2xl p-8 border border-purple-100 h-full">
3522
+ <div class="bg-linear-to-br from-accent-50 to-secondary-50 rounded-2xl p-8 border border-accent-100 h-full">
3542
3523
  <div class="flex items-center gap-3 mb-6">
3543
- <div class="w-12 h-12 rounded-lg bg-linear-to-br from-purple-500 to-pink-600 flex items-center justify-center shadow-lg">
3524
+ <div class="w-12 h-12 rounded-lg bg-linear-to-br from-accent-500 to-secondary-600 flex items-center justify-center shadow-lg">
3544
3525
  <ng-icon name="heroCheckCircle" size="24" style="color: white;"></ng-icon>
3545
3526
  </div>
3546
3527
  <h2 class="text-2xl font-bold text-gray-900">
@@ -3549,32 +3530,32 @@ export class AboutComponent implements OnInit {
3549
3530
  </div>
3550
3531
  <ul class="space-y-4">
3551
3532
  <li class="flex items-start gap-3">
3552
- <div class="shrink-0 w-6 h-6 rounded-full bg-green-100 flex items-center justify-center mt-0.5">
3553
- <ng-icon name="heroCheckCircle" size="16" style="color: #16a34a;"></ng-icon>
3533
+ <div class="shrink-0 w-6 h-6 rounded-full bg-success-100 flex items-center justify-center mt-0.5">
3534
+ <ng-icon name="heroCheckCircle" size="16" style="color: var(--color-success-600);"></ng-icon>
3554
3535
  </div>
3555
3536
  <span class="text-gray-700">{{ 'about.features.standalone' | translate }}</span>
3556
3537
  </li>
3557
3538
  <li class="flex items-start gap-3">
3558
- <div class="shrink-0 w-6 h-6 rounded-full bg-green-100 flex items-center justify-center mt-0.5">
3559
- <ng-icon name="heroCheckCircle" size="16" style="color: #16a34a;"></ng-icon>
3539
+ <div class="shrink-0 w-6 h-6 rounded-full bg-success-100 flex items-center justify-center mt-0.5">
3540
+ <ng-icon name="heroCheckCircle" size="16" style="color: var(--color-success-600);"></ng-icon>
3560
3541
  </div>
3561
3542
  <span class="text-gray-700">{{ 'about.features.tailwind' | translate }}</span>
3562
3543
  </li>
3563
3544
  <li class="flex items-start gap-3">
3564
- <div class="shrink-0 w-6 h-6 rounded-full bg-green-100 flex items-center justify-center mt-0.5">
3565
- <ng-icon name="heroCheckCircle" size="16" style="color: #16a34a;"></ng-icon>
3545
+ <div class="shrink-0 w-6 h-6 rounded-full bg-success-100 flex items-center justify-center mt-0.5">
3546
+ <ng-icon name="heroCheckCircle" size="16" style="color: var(--color-success-600);"></ng-icon>
3566
3547
  </div>
3567
3548
  <span class="text-gray-700">{{ 'about.features.responsive' | translate }}</span>
3568
3549
  </li>
3569
3550
  <li class="flex items-start gap-3">
3570
- <div class="shrink-0 w-6 h-6 rounded-full bg-green-100 flex items-center justify-center mt-0.5">
3571
- <ng-icon name="heroCheckCircle" size="16" style="color: #16a34a;"></ng-icon>
3551
+ <div class="shrink-0 w-6 h-6 rounded-full bg-success-100 flex items-center justify-center mt-0.5">
3552
+ <ng-icon name="heroCheckCircle" size="16" style="color: var(--color-success-600);"></ng-icon>
3572
3553
  </div>
3573
3554
  <span class="text-gray-700">{{ 'about.features.typescript' | translate }}</span>
3574
3555
  </li>
3575
3556
  <li class="flex items-start gap-3">
3576
- <div class="shrink-0 w-6 h-6 rounded-full bg-green-100 flex items-center justify-center mt-0.5">
3577
- <ng-icon name="heroCheckCircle" size="16" style="color: #16a34a;"></ng-icon>
3557
+ <div class="shrink-0 w-6 h-6 rounded-full bg-success-100 flex items-center justify-center mt-0.5">
3558
+ <ng-icon name="heroCheckCircle" size="16" style="color: var(--color-success-600);"></ng-icon>
3578
3559
  </div>
3579
3560
  <span class="text-gray-700">{{ 'about.features.production' | translate }}</span>
3580
3561
  </li>
@@ -3601,8 +3582,8 @@ export class AboutComponent implements OnInit {
3601
3582
  <!-- Angular -->
3602
3583
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl border border-gray-100 transform hover:-translate-y-1 transition-all">
3603
3584
  <div class="flex items-center gap-4 mb-4">
3604
- <div class="w-12 h-12 rounded-lg bg-red-100 flex items-center justify-center">
3605
- <ng-icon name="heroCodeBracket" size="24" style="color: #dc2626;"></ng-icon>
3585
+ <div class="w-12 h-12 rounded-lg bg-danger-100 flex items-center justify-center">
3586
+ <ng-icon name="heroCodeBracket" size="24" style="color: var(--color-danger-600);"></ng-icon>
3606
3587
  </div>
3607
3588
  <h3 class="text-xl font-bold text-gray-900">{{ 'home.techStack.angular.title' | translate }}</h3>
3608
3589
  </div>
@@ -3614,8 +3595,8 @@ export class AboutComponent implements OnInit {
3614
3595
  <!-- Tailwind CSS -->
3615
3596
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl border border-gray-100 transform hover:-translate-y-1 transition-all">
3616
3597
  <div class="flex items-center gap-4 mb-4">
3617
- <div class="w-12 h-12 rounded-lg bg-cyan-100 flex items-center justify-center">
3618
- <ng-icon name="heroPaintBrush" size="24" style="color: #0891b2;"></ng-icon>
3598
+ <div class="w-12 h-12 rounded-lg bg-secondary-100 flex items-center justify-center">
3599
+ <ng-icon name="heroPaintBrush" size="24" style="color: var(--color-secondary-600);"></ng-icon>
3619
3600
  </div>
3620
3601
  <h3 class="text-xl font-bold text-gray-900">{{ 'home.techStack.tailwind.title' | translate }}</h3>
3621
3602
  </div>
@@ -3627,8 +3608,8 @@ export class AboutComponent implements OnInit {
3627
3608
  <!-- TypeScript -->
3628
3609
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl border border-gray-100 transform hover:-translate-y-1 transition-all">
3629
3610
  <div class="flex items-center gap-4 mb-4">
3630
- <div class="w-12 h-12 rounded-lg bg-blue-100 flex items-center justify-center">
3631
- <ng-icon name="heroShieldCheck" size="24" style="color: #2563eb;"></ng-icon>
3611
+ <div class="w-12 h-12 rounded-lg bg-primary-100 flex items-center justify-center">
3612
+ <ng-icon name="heroShieldCheck" size="24" style="color: var(--color-primary-600);"></ng-icon>
3632
3613
  </div>
3633
3614
  <h3 class="text-xl font-bold text-gray-900">{{ 'home.techStack.typescript.title' | translate }}</h3>
3634
3615
  </div>
@@ -3915,6 +3896,8 @@ module.exports = tseslint.config(
3915
3896
  'files.eol': '\\n',
3916
3897
  'files.trimTrailingWhitespace': true,
3917
3898
  'files.insertFinalNewline': true,
3899
+ // Suppress CSS linting warnings for Tailwind CSS directives
3900
+ 'css.lint.unknownAtRules': 'ignore',
3918
3901
  };
3919
3902
 
3920
3903
  await fs.writeFile(