@idsoftsource/initial-process 2.7.9 → 2.8.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.
@@ -6,7 +6,7 @@ import * as i8 from '@angular/forms';
6
6
  import { NG_VALUE_ACCESSOR, COMPOSITION_BUFFER_MODE, FormsModule, ReactiveFormsModule, Validators, FormControl, FormGroup } from '@angular/forms';
7
7
  import * as i2 from '@angular/router';
8
8
  import { RouterModule } from '@angular/router';
9
- import { map, Subject, takeUntil, of, firstValueFrom, tap as tap$1, Subscription, switchMap, finalize, catchError, EMPTY } from 'rxjs';
9
+ import { catchError, throwError, shareReplay, map, Subject, takeUntil, of, firstValueFrom, tap as tap$1, Subscription, switchMap, finalize, EMPTY } from 'rxjs';
10
10
  import * as i1 from '@angular/common/http';
11
11
  import { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
12
12
  import * as i7 from 'ngx-bootstrap/modal';
@@ -19,7 +19,7 @@ import * as i1$1 from '@angular/platform-browser';
19
19
  import { ɵgetDOM as _getDOM } from '@angular/platform-browser';
20
20
  import { createTextMaskInputElement } from 'text-mask-core/dist/textMaskCore';
21
21
  import { trigger, state, transition, style, animate } from '@angular/animations';
22
- import { tap, shareReplay, debounceTime, distinctUntilChanged } from 'rxjs/operators';
22
+ import { tap, shareReplay as shareReplay$1, debounceTime, distinctUntilChanged } from 'rxjs/operators';
23
23
  import * as i12 from 'ngx-bootstrap/datepicker';
24
24
  import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
25
25
  import * as i14 from 'ngx-bootstrap/tooltip';
@@ -710,10 +710,19 @@ class UserDetailService {
710
710
  claimAccount(model) {
711
711
  return this.http.post(`${this.baseUrl}/ClaimAccount`, model);
712
712
  }
713
+ termsAndConditionsCache = new Map();
713
714
  getTermsAndConditions(query) {
714
- return this.http.get(`${this.baseUrl}/GetTermsAndConditions`, {
715
- params: this.buildParams(query),
716
- });
715
+ let cached = this.termsAndConditionsCache.get(query.type);
716
+ if (!cached) {
717
+ cached = this.http.get(`${this.baseUrl}/GetTermsAndConditions`, {
718
+ params: this.buildParams(query),
719
+ }).pipe(catchError(err => {
720
+ this.termsAndConditionsCache.delete(query.type);
721
+ return throwError(() => err);
722
+ }), shareReplay(1));
723
+ this.termsAndConditionsCache.set(query.type, cached);
724
+ }
725
+ return cached;
717
726
  }
718
727
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
719
728
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserDetailService, providedIn: 'root' });
@@ -1501,6 +1510,7 @@ class TermsConditionsComponent {
1501
1510
  title;
1502
1511
  branding;
1503
1512
  PrivacyAndTerms;
1513
+ metaLoaded = new EventEmitter();
1504
1514
  parsedSections = [];
1505
1515
  isLoading = false;
1506
1516
  destroy$ = new Subject();
@@ -1523,6 +1533,10 @@ class TermsConditionsComponent {
1523
1533
  next: (response) => {
1524
1534
  this.buildSections([response]);
1525
1535
  this.isLoading = false;
1536
+ if (this.parsedSections.length) {
1537
+ const { versionName, createdDate } = this.parsedSections[0];
1538
+ this.metaLoaded.emit({ versionName, createdDate });
1539
+ }
1526
1540
  },
1527
1541
  error: (err) => {
1528
1542
  console.error(err);
@@ -1558,17 +1572,19 @@ class TermsConditionsComponent {
1558
1572
  return ['ID Claims', 'Mold Depot', 'Termite Depot'].includes(this.branding?.displayName);
1559
1573
  }
1560
1574
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TermsConditionsComponent, deps: [{ token: i1$1.DomSanitizer }, { token: UserDetailService }], target: i0.ɵɵFactoryTarget.Component });
1561
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TermsConditionsComponent, isStandalone: false, selector: "app-terms-conditions", inputs: { title: "title", branding: "branding", PrivacyAndTerms: "PrivacyAndTerms" }, ngImport: i0, template: "<div class=\"tc-wrapper\">\r\n\r\n <loader [show]=\"isLoading\"></loader>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <span class=\"tc-meta\">Last Modified: {{section?.createdDate | date:'MMM d, y, h:mm:ss a'}}</span>\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br><br>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-5 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.tc-list{list-style:none;padding-left:0;margin:12px 0 12px 4px}.tc-list li{position:relative;padding-left:20px;margin-bottom:8px;line-height:1.75}.tc-list li:before{content:\"\\203a\";position:absolute;left:0;top:0;color:#1e40af;font-weight:700;font-size:15px}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:12px}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["show", "small"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None });
1575
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TermsConditionsComponent, isStandalone: false, selector: "app-terms-conditions", inputs: { title: "title", branding: "branding", PrivacyAndTerms: "PrivacyAndTerms" }, outputs: { metaLoaded: "metaLoaded" }, ngImport: i0, template: "<div class=\"tc-wrapper\">\r\n\r\n <div class=\"tc-loading\" *ngIf=\"isLoading\">\r\n <loader [show]=\"isLoading\"></loader>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br><br>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-2 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-loading{display:flex;align-items:center;justify-content:center;min-height:260px}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.tc-list{list-style:none;padding-left:0;margin:12px 0 12px 4px}.tc-list li{position:relative;padding-left:20px;margin-bottom:8px;line-height:1.75}.tc-list li:before{content:\"\\203a\";position:absolute;left:0;top:0;color:#1e40af;font-weight:700;font-size:15px}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:12px}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["show", "small"] }], encapsulation: i0.ViewEncapsulation.None });
1562
1576
  }
1563
1577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TermsConditionsComponent, decorators: [{
1564
1578
  type: Component,
1565
- args: [{ standalone: false, selector: 'app-terms-conditions', encapsulation: ViewEncapsulation.None, template: "<div class=\"tc-wrapper\">\r\n\r\n <loader [show]=\"isLoading\"></loader>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <span class=\"tc-meta\">Last Modified: {{section?.createdDate | date:'MMM d, y, h:mm:ss a'}}</span>\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br><br>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-5 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.tc-list{list-style:none;padding-left:0;margin:12px 0 12px 4px}.tc-list li{position:relative;padding-left:20px;margin-bottom:8px;line-height:1.75}.tc-list li:before{content:\"\\203a\";position:absolute;left:0;top:0;color:#1e40af;font-weight:700;font-size:15px}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:12px}\n"] }]
1579
+ args: [{ standalone: false, selector: 'app-terms-conditions', encapsulation: ViewEncapsulation.None, template: "<div class=\"tc-wrapper\">\r\n\r\n <div class=\"tc-loading\" *ngIf=\"isLoading\">\r\n <loader [show]=\"isLoading\"></loader>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br><br>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-2 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-loading{display:flex;align-items:center;justify-content:center;min-height:260px}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.tc-list{list-style:none;padding-left:0;margin:12px 0 12px 4px}.tc-list li{position:relative;padding-left:20px;margin-bottom:8px;line-height:1.75}.tc-list li:before{content:\"\\203a\";position:absolute;left:0;top:0;color:#1e40af;font-weight:700;font-size:15px}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:12px}\n"] }]
1566
1580
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }, { type: UserDetailService }], propDecorators: { title: [{
1567
1581
  type: Input
1568
1582
  }], branding: [{
1569
1583
  type: Input
1570
1584
  }], PrivacyAndTerms: [{
1571
1585
  type: Input
1586
+ }], metaLoaded: [{
1587
+ type: Output
1572
1588
  }] } });
1573
1589
 
1574
1590
  class PrivacyPolicyComponent {
@@ -1577,6 +1593,7 @@ class PrivacyPolicyComponent {
1577
1593
  title;
1578
1594
  branding;
1579
1595
  PrivacyAndTerms;
1596
+ metaLoaded = new EventEmitter();
1580
1597
  parsedSections = [];
1581
1598
  isLoading = false;
1582
1599
  destroy$ = new Subject();
@@ -1599,6 +1616,10 @@ class PrivacyPolicyComponent {
1599
1616
  next: (response) => {
1600
1617
  this.buildSections([response]);
1601
1618
  this.isLoading = false;
1619
+ if (this.parsedSections.length) {
1620
+ const { versionName, createdDate } = this.parsedSections[0];
1621
+ this.metaLoaded.emit({ versionName, createdDate });
1622
+ }
1602
1623
  },
1603
1624
  error: (err) => {
1604
1625
  console.error(err);
@@ -1634,17 +1655,19 @@ class PrivacyPolicyComponent {
1634
1655
  return ['ID Claims', 'Mold Depot', 'Termite Depot'].includes(this.branding?.displayName);
1635
1656
  }
1636
1657
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrivacyPolicyComponent, deps: [{ token: i1$1.DomSanitizer }, { token: UserDetailService }], target: i0.ɵɵFactoryTarget.Component });
1637
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: PrivacyPolicyComponent, isStandalone: false, selector: "app-privacy-policy", inputs: { title: "title", branding: "branding", PrivacyAndTerms: "PrivacyAndTerms" }, ngImport: i0, template: "<div class=\"tc-wrapper\">\r\n\r\n <loader [show]=\"isLoading\"></loader>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <span class=\"tc-meta\">Last Modified: {{section?.createdDate | date:'MMM d, y, h:mm:ss a'}}</span>\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-5 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n\r\n</div>\r\n", styles: [".tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["show", "small"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None });
1658
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: PrivacyPolicyComponent, isStandalone: false, selector: "app-privacy-policy", inputs: { title: "title", branding: "branding", PrivacyAndTerms: "PrivacyAndTerms" }, outputs: { metaLoaded: "metaLoaded" }, ngImport: i0, template: "<div class=\"tc-wrapper\">\r\n\r\n <div class=\"tc-loading\" *ngIf=\"isLoading\">\r\n <loader [show]=\"isLoading\"></loader>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-2 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n", styles: [".tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-loading{display:flex;align-items:center;justify-content:center;min-height:260px}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["show", "small"] }], encapsulation: i0.ViewEncapsulation.None });
1638
1659
  }
1639
1660
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrivacyPolicyComponent, decorators: [{
1640
1661
  type: Component,
1641
- args: [{ standalone: false, selector: 'app-privacy-policy', encapsulation: ViewEncapsulation.None, template: "<div class=\"tc-wrapper\">\r\n\r\n <loader [show]=\"isLoading\"></loader>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <span class=\"tc-meta\">Last Modified: {{section?.createdDate | date:'MMM d, y, h:mm:ss a'}}</span>\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-5 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n\r\n</div>\r\n", styles: [".tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:14px}\n"] }]
1662
+ args: [{ standalone: false, selector: 'app-privacy-policy', encapsulation: ViewEncapsulation.None, template: "<div class=\"tc-wrapper\">\r\n\r\n <div class=\"tc-loading\" *ngIf=\"isLoading\">\r\n <loader [show]=\"isLoading\"></loader>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngFor=\"let section of parsedSections\">\r\n <div [innerHTML]=\"section.content\"></div>\r\n <br>\r\n </ng-container>\r\n\r\n <div class=\"logo-section mt-2 text-center\">\r\n <img [src]=\"branding?.logo\" [alt]=\"branding?.displayName\" [class.filter]=\"isFilteredBrand()\" />\r\n </div>\r\n <div class=\"content\">\r\n <p>\r\n &copy;{{PrivacyAndTerms?.currentYear}} {{PrivacyAndTerms?.companyName}}.<br>\r\n Proprietary and Confidential Information. Strictly for use by {{PrivacyAndTerms?.companyName}} approved customers only.<br>\r\n Duplication or alteration is strictly prohibited without prior written consent.\r\n </p>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n", styles: [".tc-wrapper{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px;line-height:1.72;color:#374151;letter-spacing:.01em;padding:0 6px;word-spacing:.03em}.tc-loading{display:flex;align-items:center;justify-content:center;min-height:260px}.tc-meta{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e2e8f0;width:100%}.section-title{display:block;font-size:14.5px;font-weight:700;color:#0f172a;letter-spacing:-.01em;line-height:1.35;margin-top:2px;margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid #e2e8f0;text-decoration:none}.h{display:inline;color:#0f172a;font-weight:600;letter-spacing:.015em;line-height:1.9}.logo-section{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:48px;margin-bottom:0;overflow:visible;min-height:42px}.logo-section img{display:block;max-width:160px;height:auto;margin-bottom:16px;position:relative;z-index:2}.logo-section .filter{filter:brightness(.5)}.content{font-size:11.5px;line-height:1.7;text-align:center;color:#6b7280;letter-spacing:.01em;margin-top:10px;margin-bottom:32px}.privacy-policy-modal{background:#fff;padding:0 20px;max-width:650px;margin:auto;display:flex;flex-direction:column;align-items:center}.privacy-policy-modal .modal-footer{width:100%;display:flex;justify-content:center}.privacy-policy-modal .modal-footer .btn{padding:8px 25px;font-size:14px}\n"] }]
1642
1663
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }, { type: UserDetailService }], propDecorators: { title: [{
1643
1664
  type: Input
1644
1665
  }], branding: [{
1645
1666
  type: Input
1646
1667
  }], PrivacyAndTerms: [{
1647
1668
  type: Input
1669
+ }], metaLoaded: [{
1670
+ type: Output
1648
1671
  }] } });
1649
1672
 
1650
1673
  const API_BASE_URL = new InjectionToken('API_BASE_URL');
@@ -1680,7 +1703,7 @@ class PostalCodeServices {
1680
1703
  // ✅ 3. Make API call only once
1681
1704
  const request$ = this.httpClient
1682
1705
  .get(`${this.url}/GetStatesByCountryCode?countryCode=${code}`)
1683
- .pipe(tap(states => cachedStates$1.set(code, states)), shareReplay(1) // 🔥 important
1706
+ .pipe(tap(states => cachedStates$1.set(code, states)), shareReplay$1(1) // 🔥 important
1684
1707
  );
1685
1708
  this.statesRequestCache.set(code, request$);
1686
1709
  return request$;
@@ -35587,8 +35610,12 @@ class InitialProcessComponent {
35587
35610
  }
35588
35611
  }
35589
35612
  scrollProgress = 0;
35590
- autoScrollRaf = null;
35591
- autoScrollDelay = null;
35613
+ legalMeta = null;
35614
+ isTermsLoading = false;
35615
+ isPrivacyLoading = false;
35616
+ onLegalMetaLoaded(meta) {
35617
+ this.legalMeta = meta;
35618
+ }
35592
35619
  onTermsScroll(event) {
35593
35620
  const el = event.target;
35594
35621
  const maxScroll = el.scrollHeight - el.clientHeight;
@@ -35602,47 +35629,30 @@ class InitialProcessComponent {
35602
35629
  }
35603
35630
  openModal(template, title, event) {
35604
35631
  event.preventDefault();
35605
- this.termsAndConditionTitle = title;
35606
- this.scrollProgress = 0;
35607
- this.stopAutoScroll();
35608
- if (this.modelRef != null && this.modelRef != undefined) {
35609
- this.modelRef.hide();
35610
- }
35611
- this.modelRef = this.modalService.show(template);
35612
- this.isAgreeEnabled = false;
35613
- this.autoScrollDelay = setTimeout(() => this.startAutoScroll(), 1200);
35614
- }
35615
- startAutoScroll() {
35616
- const el = document.querySelector('.tc-modal-body');
35617
- if (!el)
35618
- return;
35619
- const tick = () => {
35620
- const maxScroll = el.scrollHeight - el.clientHeight;
35621
- if (el.scrollTop < maxScroll - 1) {
35622
- el.scrollTop += 0.8;
35623
- this.autoScrollRaf = requestAnimationFrame(tick);
35624
- }
35625
- else {
35626
- el.scrollTop = el.scrollHeight;
35627
- this.isAgreeEnabled = true;
35628
- this.scrollProgress = 100;
35629
- }
35630
- };
35631
- this.autoScrollRaf = requestAnimationFrame(tick);
35632
- }
35633
- stopAutoScroll() {
35634
- if (this.autoScrollRaf !== null) {
35635
- cancelAnimationFrame(this.autoScrollRaf);
35636
- this.autoScrollRaf = null;
35637
- }
35638
- if (this.autoScrollDelay !== null) {
35639
- clearTimeout(this.autoScrollDelay);
35640
- this.autoScrollDelay = null;
35641
- }
35632
+ const isTerms = title === 'Terms and Conditions';
35633
+ const setLoading = (value) => isTerms ? (this.isTermsLoading = value) : (this.isPrivacyLoading = value);
35634
+ setLoading(true);
35635
+ this.userDetailService.getTermsAndConditions({ type: isTerms ? 1 : 2 })
35636
+ .subscribe({
35637
+ next: (response) => {
35638
+ this.legalMeta = { versionName: response.versionName, createdDate: response.createdDate };
35639
+ setLoading(false);
35640
+ this.termsAndConditionTitle = title;
35641
+ this.scrollProgress = 0;
35642
+ if (this.modelRef != null && this.modelRef != undefined) {
35643
+ this.modelRef.hide();
35644
+ }
35645
+ this.modelRef = this.modalService.show(template);
35646
+ this.isAgreeEnabled = false;
35647
+ },
35648
+ error: (err) => {
35649
+ console.error(err);
35650
+ setLoading(false);
35651
+ },
35652
+ });
35642
35653
  }
35643
35654
  scrollToBottomClick(event) {
35644
35655
  event.stopPropagation();
35645
- this.stopAutoScroll();
35646
35656
  const el = document.querySelector('.tc-modal-body');
35647
35657
  if (el) {
35648
35658
  el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });
@@ -35653,7 +35663,6 @@ class InitialProcessComponent {
35653
35663
  }
35654
35664
  }
35655
35665
  agree(title) {
35656
- this.stopAutoScroll();
35657
35666
  if (title == 'Terms and Conditions') {
35658
35667
  this.model.acceptTerms = true;
35659
35668
  }
@@ -35663,7 +35672,6 @@ class InitialProcessComponent {
35663
35672
  this.isAgreeEnabled = false;
35664
35673
  }
35665
35674
  decline(title) {
35666
- this.stopAutoScroll();
35667
35675
  if (title == 'Terms and Conditions') {
35668
35676
  this.model.acceptTerms = false;
35669
35677
  }
@@ -35823,11 +35831,11 @@ class InitialProcessComponent {
35823
35831
  this.destroy$.complete();
35824
35832
  }
35825
35833
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialProcessComponent, deps: [{ token: i2.Router }, { token: UserDetailService }, { token: i8.FormBuilder }, { token: FileService }, { token: ProvidersService }, { token: RolesService }, { token: i7.BsModalService }, { token: ProviderContractorSubCategoryService }, { token: ProviderContractorSubCategoryService }, { token: i9.AuthService }, { token: i1$2.TokenService }, { token: i1$2.RoleContextService }, { token: i1$2.AuthLogoutService }, { token: CredentialingStore }, { token: LIBRARY_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
35826
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: InitialProcessComponent, isStandalone: false, selector: "app-initial-process", host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"container\">\r\n <div *ngIf=\"isInitializing\" class=\"text-center p-5\">\r\n <div class=\"spinner-border text-primary\"></div>\r\n </div>\r\n <ng-container *ngIf=\"!isInitializing\">\r\n <div class=\"mb-4 logout-container\" *ngIf=\"showlogout\">\r\n <button class=\"logout-btn\" (click)=\"logout()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\r\n <polyline points=\"16 17 21 12 16 7\"/>\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\r\n </svg>\r\n Logout\r\n </button>\r\n </div>\r\n <div class=\"card pb-2 mob pr-5\" style=\"margin-bottom: 30px;\">\r\n <div [hidden]=\"view !== 1\">\r\n\r\n <!-- \u2500\u2500 Welcome Banner \u2500\u2500 -->\r\n <div class=\"v1-welcome\">\r\n <div class=\"v1-welcome-icon\">\r\n <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"/>\r\n <circle cx=\"9\" cy=\"7\" r=\"4\"/>\r\n <path d=\"M23 21v-2a4 4 0 00-3-3.87\"/>\r\n <path d=\"M16 3.13a4 4 0 010 7.75\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-welcome-text\">\r\n <h2 class=\"v1-welcome-title\">Welcome to <span class=\"v1-brand\">{{ branding.displayName }}</span></h2>\r\n <p class=\"v1-welcome-sub\">Our members and service providers rely on accurate info in your profile to connect\r\n you with work that suits your capabilities. Keep your profile complete, skills updated, licenses current,\r\n photos and logos professional, and schedule up to date.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Main Body: agreements + signature \u2500\u2500 -->\r\n <div class=\"v1-body\">\r\n\r\n <!-- Left: agreement cards -->\r\n <div class=\"v1-agreements\">\r\n\r\n <!-- Terms card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.acceptTerms\"\r\n [class.v1-card--invalid]=\"!model.acceptTerms && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Terms and Conditions</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.acceptTerms\"\r\n (click)=\"openModal(termsAndConditionsModel,'Terms and Conditions',$event)\">\r\n <svg *ngIf=\"model.acceptTerms\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ model.acceptTerms ? 'Agreed' : 'Read & Agree' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Privacy card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.privacy\"\r\n [class.v1-card--invalid]=\"!model.privacy && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Privacy Statement</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.privacy\"\r\n (click)=\"openModal(termsAndConditionsModel,'Privacy Statement',$event)\">\r\n <svg *ngIf=\"model.privacy\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ model.privacy ? 'Agreed' : 'Read & Agree' }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right: signature pad -->\r\n <div class=\"v1-signature\">\r\n <div class=\"v1-sig-header\">\r\n <span class=\"v1-sig-label\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"/>\r\n </svg>\r\n Signature\r\n </span>\r\n <button (click)=\"clearPad()\" class=\"v1-clear-btn\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n Clear\r\n </button>\r\n </div>\r\n <div class=\"v1-sig-pad\">\r\n <div [ngClass]=\"{'d-none': signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n <div [ngClass]=\"{'d-none': !signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <img [src]=\"signaturePadData?.publicUrl\" alt style=\"width:100%;height:120px;object-fit:contain;display:block;\">\r\n </div>\r\n <p class=\"v1-sig-hint\" *ngIf=\"!signaturePadData?.publicUrl && (!points || !points?.length)\">\r\n Draw your signature here\r\n </p>\r\n </div>\r\n <div *ngIf=\"validatePage==1 && (!points || !points?.length || points.length==0) && !fileData\"\r\n class=\"v1-error-msg\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n Signature is required\r\n </div>\r\n <div *ngIf=\"uploadError\" class=\"v1-error-msg\">{{ uploadError }}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u2500\u2500 Continue Button \u2500\u2500 -->\r\n <div class=\"v1-footer\">\r\n <button class=\"v1-continue-btn\" (click)=\"next(2)\"\r\n [disabled]=\"((!points || !points?.length || points.length==0) && !fileData && !signaturePadData?.publicUrl) || !model.acceptTerms || !model.privacy\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"view == 2\">\r\n\r\n <!-- \u2500\u2500 Role-select header \u2500\u2500 -->\r\n <div class=\"v2-header\">\r\n <div class=\"v2-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"v2-title\">Choose your role</h2>\r\n <p class=\"v2-sub\">Choose the areas you'd like to be part of \u2014 programs, services, events, or\r\n collaborations. Connect your business to others and prospective clients.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Role cards grid \u2500\u2500 -->\r\n <div class=\"v2-grid\">\r\n <ng-container *ngFor=\"let userType of userViewRoles\">\r\n <div class=\"v2-role-card\" [class.v2-role-card--active]=\"userType.value === selectedRoleValue\"\r\n (click)=\"selectedUserRole(userType)\">\r\n <div class=\"v2-role-img-wrap\">\r\n <img [src]=\"userType?.img\" alt=\"\">\r\n </div>\r\n <span class=\"v2-role-name\">{{userType.name}}</span>\r\n <span class=\"v2-role-check\" *ngIf=\"userType.value === selectedRoleValue\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Footer: Back + Continue \u2500\u2500 -->\r\n <div class=\"v2-footer\">\r\n <button class=\"v2-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"v2-continue-btn\" (click)=\"next(3)\" [disabled]=\"!isUserSelected || isLoadingSubCategories\">\r\n <span *ngIf=\"isLoadingSubCategories\" class=\"v1-spinner\"></span>\r\n <ng-container *ngIf=\"!isLoadingSubCategories\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </ng-container>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 3\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"/>\r\n <polyline points=\"9 22 9 12 15 12 15 22\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Business Information</h2>\r\n <p class=\"ip-sub\">Tell us about your company so we can connect you with the right work.</p>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"companyForm\">\r\n\r\n <!-- Company Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Details</p>\r\n <div class=\"ip-grid-2\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"companyName\">Company Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': (f.companyName.errors && validatePage == 3) || providerError}\"\r\n type=\"text\" class=\"ip-input\" id=\"companyName\" placeholder=\"Company Name\"\r\n formControlName=\"companyName\">\r\n <span *ngIf=\"f.companyName.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.companyName.errors.required\">Company Name is required</span>\r\n <span *ngIf=\"f.companyName.errors.minlength\">Minimum 2 characters</span>\r\n <span *ngIf=\"f.companyName.errors.maxLength\">Maximum 100 characters</span>\r\n </span>\r\n <span *ngIf=\"providerError\" class=\"ip-error\">{{ providerError }}</span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" name=\"inputPhone\" placeholder=\"Company Phone Number\"\r\n id=\"inputPhone\" autocomplete=\"off\" formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n (input)=\"formatPhone($event,companyForm)\"\r\n [ngClass]=\"{'ip-input--invalid': (f.phoneNumber.errors && validatePage == 3) || providerError}\">\r\n <span *ngIf=\"f.phoneNumber.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Address</p>\r\n <div class=\"ip-grid-2\" style=\"margin-bottom: 12px;\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.address1.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"businessAddress\" ngx-google-places-autocomplete [options]='options'\r\n (onAddressChange)=\"AddressChange($event)\" placeholder=\"Business Address 1\" formControlName=\"address1\">\r\n <span *ngIf=\"f.address1.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.address1.errors.required\">Business Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"businessAddress2\" placeholder=\"Business Address 2\">\r\n </div>\r\n </div>\r\n <div class=\"ip-grid-4\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.city.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"f.city.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.state.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"f.state.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': f.zipcode.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"f.zipcode.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.country.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"f.country.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Company Logo (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Logo</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Company Logo <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadLogo($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage2.click()\" [(ngModel)]=\"logoName\" readonly type=\"text\"\r\n class=\"ip-input\" placeholder=\"Click to upload company logo\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage2 class=\"ip-upload-icon\" (click)=\"uploadLogoInput.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isLogoRequired\" class=\"ip-error\">Please upload a company logo</span>\r\n <span *ngIf=\"isneeded\" class=\"ip-error\">Company Logo is required</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contractor Category -->\r\n <div *ngIf=\"selectedRole?.name == 'Contractor'\" class=\"ip-section\">\r\n <p class=\"ip-section-label\">Contractor Category</p>\r\n\r\n <!-- Category selector \u2014 ng-select logic intact, restyled as pill tag-input -->\r\n <div class=\"cc-select-wrap\">\r\n <ng-select [items]=\"contractorSubCategories\" bindLabel=\"name\" [multiple]=\"true\" [closeOnSelect]=\"false\"\r\n (ngModelChange)=\"changeContractor($event)\" [(ngModel)]=\"selectedContractorCategories\"\r\n >\r\n </ng-select>\r\n </div>\r\n\r\n <!-- Sub-items as pill chips per selected category -->\r\n <ng-container *ngFor=\"let item of selectedContractorCategories; let i=index\">\r\n <div class=\"cc-group\">\r\n\r\n <!-- \"Select all\" toggle pill for this category -->\r\n <label class=\"cc-select-all-pill\" [class.cc-select-all-pill--on]=\"item.selectAll\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selectAll\" [name]=\"item?.id\" [id]=\"item?.id\"\r\n (change)=\"selectAll($event,item?.items)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"item.selectAll\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ item?.name }} \u2014 Select all\r\n </label>\r\n\r\n <!-- Individual sub-item pills -->\r\n <div class=\"cc-sub-pills\">\r\n <label *ngFor=\"let subItem of item?.items\" class=\"cc-sub-pill\"\r\n [class.cc-sub-pill--on]=\"subItem.selected\">\r\n <input type=\"checkbox\" [(ngModel)]=\"subItem.selected\" [name]=\"subItem?.id\" [id]=\"subItem?.id\"\r\n (change)=\"unCheckedEvent($event,item)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"subItem.selected\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ subItem?.name }}\r\n </label>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(4)\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 4\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Your Profile</h2>\r\n <p class=\"ip-sub\">We need a few basics and a headshot to complete your profile.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Copy from provider toggle -->\r\n <div *ngIf=\"isBusiness\" class=\"ip-copy-row\">\r\n <input [(ngModel)]=\"isCopy\" type=\"checkbox\" name=\"isCopy\" id=\"isCopy\"\r\n class=\"ip-copy-check\" (change)=\"changeAddressUser()\">\r\n <label for=\"isCopy\" class=\"ip-copy-label\">Copy from Provider Information</label>\r\n </div>\r\n\r\n <form [formGroup]=\"userForm\">\r\n\r\n <!-- Personal Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Personal Details</p>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"firstName\">First Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.firstName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"First Name\" formControlName=\"firstName\" id=\"firstName\">\r\n <span *ngIf=\"u.firstName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.firstName.errors.required\">First Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"lastName\">Last Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.lastName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Last Name\" formControlName=\"lastName\" id=\"lastName\">\r\n <span *ngIf=\"u.lastName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.lastName.errors.required\">Last Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"email\">Email <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.email.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Email\" formControlName=\"email\" id=\"email\">\r\n <span *ngIf=\"u.email.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.email.errors.required\">Email is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Home Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Home Address</p>\r\n <div class=\"ip-field\" style=\"margin-bottom: 12px;\">\r\n <label class=\"ip-label\" for=\"address1\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.address1.errors && validatePage == 4}\"\r\n [options]=\"options\" (onAddressChange)=\"AddressChangeUser($event)\" type=\"text\" class=\"ip-input\"\r\n placeholder=\"Home Address 1\" formControlName=\"address1\" id=\"address1\" ngx-google-places-autocomplete>\r\n <span *ngIf=\"u.address1.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.address1.errors.required\">Home Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"homeAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"homeAddress2\" formControlName=\"address2\"\r\n placeholder=\"Home Address 2\">\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.city.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"u.city.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.state.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"u.state.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': u.zipcode.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"u.zipcode.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.country.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"u.country.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" (input)=\"formatPhone($event,userForm)\"\r\n name=\"inputPhone\" placeholder=\"Phone Number\" id=\"inputPhone\" autocomplete=\"off\"\r\n formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n [ngClass]=\"{'ip-input--invalid': u.phoneNumber.errors && validatePage == 4}\">\r\n <span *ngIf=\"u.phoneNumber.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Profile Picture (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Profile Picture</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Profile Picture <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadFile type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadUserImage($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage1.click()\" [(ngModel)]=\"fileName\" readonly type=\"text\"\r\n class=\"ip-input\" id=\"upload\" accept=\".png,.jpg,.jpeg\" placeholder=\"Click to upload profile picture\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage1 class=\"ip-upload-icon\" (click)=\"uploadFile.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isImageRequired\" class=\"ip-error\">Please upload a profile image</span>\r\n <span *ngIf=\"userError\" class=\"ip-error\">{{ userError }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(5)\" [disabled]=\"showLoader\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 5\">\r\n <div class=\"v5-wrap\">\r\n\r\n <!-- Success icon -->\r\n <div class=\"v5-icon\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/>\r\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\r\n </svg>\r\n </div>\r\n\r\n <h2 class=\"v5-title\">You're all set!</h2>\r\n <p class=\"v5-sub\">Account created successfully. Next step: complete your profile.</p>\r\n\r\n <!-- Info cards -->\r\n <div class=\"v5-cards\">\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">Profile completion is mandatory to participate in rosters, programs, requests, and platform workflows. Incomplete profiles will have limited access.</p>\r\n </div>\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon v5-card-icon--green\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">You may access your dashboard at any time, but full functionality is available only after profile completion.</p>\r\n </div>\r\n </div>\r\n\r\n <button (click)=\"dashboard()\" class=\"v5-cta\">\r\n Go to Dashboard\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 10\">\r\n <app-credentialing (back)=\"onCredentialingBack()\" [data]=\"credentialingData\" [signatureFileId]=\"signatureFileId\"\r\n [signatureUrl]=\"signatureUrl\"></app-credentialing>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n</div>\r\n\r\n<ng-template #termsAndConditionsModel>\r\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\r\n <div class=\"modal-content tc-modal\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"tc-modal-header\">\r\n <div class=\"tc-header-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\r\n </div>\r\n\r\n <!-- SCROLL HINT + PROGRESS -->\r\n <div class=\"tc-scroll-hint\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 12l7 7 7-7\"/>\r\n </svg>\r\n Scroll to the bottom to enable the <strong>&nbsp;Agree&nbsp;</strong> button\r\n <span class=\"tc-progress-pill\">{{ scrollProgress }}%</span>\r\n </div>\r\n <div class=\"tc-progress-bar\">\r\n <div class=\"tc-progress-fill\" [style.width.%]=\"scrollProgress\"></div>\r\n </div>\r\n\r\n <!-- SCROLLABLE CONTENT -->\r\n <div class=\"tc-scroll-wrapper\">\r\n <div class=\"tc-modal-body\"\r\n (scroll)=\"onTermsScroll($event)\"\r\n (wheel)=\"stopAutoScroll()\"\r\n (touchstart)=\"stopAutoScroll()\">\r\n <ng-container *ngIf=\"termsAndConditionTitle == 'Terms and Conditions'\">\r\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\">\r\n </app-terms-conditions>\r\n </ng-container>\r\n <ng-container *ngIf=\"termsAndConditionTitle != 'Terms and Conditions'\">\r\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\">\r\n </app-privacy-policy>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Floating scroll-to-bottom button -->\r\n <button class=\"tc-scroll-fab\" *ngIf=\"!isAgreeEnabled\" (click)=\"scrollToBottomClick($event)\"\r\n title=\"Scroll to bottom\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 15l7 7 7-7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"tc-modal-footer\">\r\n <button type=\"button\" class=\"tc-btn tc-btn-decline\"\r\n (click)=\"decline(termsAndConditionTitle); modelRef.hide();\">\r\n Decline\r\n </button>\r\n <button type=\"button\" class=\"tc-btn tc-btn-agree\"\r\n [disabled]=\"!isAgreeEnabled\"\r\n (click)=\"agree(termsAndConditionTitle); modelRef.hide();\">\r\n I Agree\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.brand-name{font-weight:700;font-size:calc(100% + 4px)}.spinner{width:38px;height:38px;border:dotted white;border-top:2px solid #f6f6f6;border-radius:62%;animation:spin 1.7s linear infinite;margin:-9px 0 0 -28px}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .backdrop{background-color:transparent!important}.filter-black{filter:brightness(.4)!important}.footer-view{margin-top:3rem;margin-left:0;margin-right:0}.footer-signature{margin-top:9rem}.slider-view{width:11rem;margin-left:1px}.container{margin-top:80px}.container .card{border-radius:1.25rem}.container .header{padding:33px 10px 0}.container .header .logo{width:15%;height:80%}.container .form-control{padding:.75rem 1rem;border-color:#a1a1a1}.container .form-control:focus{color:#000;box-shadow:none;border-color:#a1a1a1!important}.container .form-control::placeholder{font-weight:500;font-size:12px;color:#a1a1a1}.container .link{color:#4077ad}.container .link-signup{font-weight:bolder}.container .form-check-label{margin-bottom:0;padding-top:9px}.container .content-view{margin-top:10%}.container .content-description{margin-top:25%}.container .tag-content{color:#fff9e8;margin-left:9%}.container .tag-content p{color:#fff9e8}.container .form-check-input:checked{background-color:#000;border-color:#000}.container .img-tick{margin:-31px 12px 0 -35px}.container .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #000000}.container .form-check-input:focus{box-shadow:none}.container input[type=checkbox]{accent-color:#000000}.term-list{padding:48px 60px 6px 0;margin-left:30px;color:\"#1f1f1fdb\"}.add-tab{padding:75px 75px 6px 1px;margin-left:50px;color:\"#1f1f1fdb\"}.add-tab-view{padding:75px 75px 6px 1px;margin-left:80px;color:\"#1f1f1fdb\"}.inspect-add{margin-top:3rem}.add-btn{font-size:16px;border-radius:5px;transition:.2s;padding:.25rem .5rem;background:#fff;border:1px solid rgba(148,147,147,.1882352941);color:#444;line-height:48px;box-shadow:0 1px 9px #98a2b3;width:9rem}.add-btn:hover{border:1px solid rgba(148,147,147,.1882352941);box-shadow:none}.agree{padding:0 0 8px 47px}.agree .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #98A2B3;width:14px;height:14px;margin:5px 9px 0 -35px}.agree .form-check-input:focus{box-shadow:none}.agree .form-check-input:checked{background-color:#000;border-color:#000}.agree .invalid-feedback{font-size:10px!important;margin:0 0 0 21px}.checkmark{vertical-align:text-bottom;color:#98a2b3;font-weight:500;font-size:12px}.term-signature{padding-left:16rem;padding-right:65px;position:absolute;margin:150px 0 0 50%}.participate-tab{height:135px;width:142px}.card-design{height:147px;width:147px;padding-left:10px;margin-left:42px;background:#fff0;border:2px solid #98A2B3;box-shadow:0 0 4px #98a2b3;border-radius:27px;margin-bottom:42px}.upload{height:39px;margin-top:-4px;width:126px;font-size:12px}.participate-tab{margin-top:-25px}.slider{width:14rem;margin-left:69px}.btn-clear{background:#d3dae6;color:#98a2b3;font-size:12px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;width:46%;line-height:28px}.btn-close{background:#f1f4fa;color:#98a2b3;font-size:17px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;font-weight:500;width:116px;color:#737a87;line-height:28px}.view-logo{padding-top:1%;padding-bottom:4%;text-align:center}.back-btn{border-radius:45px;height:41px}.next{background:#4077ad;border-radius:30px;height:60px;width:60px;border:white}.profile-field{margin-top:-10px}.profile-field input{line-height:30px;margin:-10px 3px 3px}.load-page{padding:21px 49px 13px 34px}.sign-img{width:291px;height:95px;border-radius:8px;border:1px solid rgba(179,178,178,.33);margin-top:19px}.upload-image{height:16px;width:16px;position:absolute;margin-left:66rem;margin-top:-39px}.para-comma{font-weight:500}.go-btn{border-radius:45px;height:50px;padding:0 20px;background:#4077ad;border:1px solid #4077ad;color:#fff;line-height:28px;font-size:14px;font-weight:500}.text-label{color:#747b83;font-weight:500}.form{padding:20px;border-radius:5px}.form-control:focus{color:#000;box-shadow:none;border-color:#848484!important}.form-control::placeholder{font-weight:500;font-size:12px;color:#bec1be;padding-left:10px}.btn-primary:active{background-color:#50575e}@media screen and (min-width: 500px) and (max-width: 769px){.content-view{background:#0c1620;width:44rem;margin:31px 0 0!important;padding:28px 32px 17px 71px!important;border-radius:29px}.upload-image{margin-left:25rem!important}}@media screen and (min-width: 768px) and (max-width: 1024px){.back-btn{height:31px;width:82px;position:absolute;margin-left:-53px}.back-tab{position:absolute;margin-left:-87px;height:37px}.go-btn{width:175px;height:44px}.term-signature{padding-left:10px}.upload-image{margin-left:40rem}}@media screen and (min-width: 374px) and (max-width: 426px){.head-logo{width:216px;padding-bottom:16px}.slider{visibility:hidden}.back-btn{height:31px;width:82px;position:absolute;margin-left:73px;margin-top:23px}.go-btn{width:175px;height:44px}.upload-image{margin-left:16rem}.term-signature{margin:84% 0 7px 4%}}@media screen and (min-width: 320px) and (max-width: 426px){.footer-signature{margin-top:20rem}.login .head-logo{padding:16px 2px 0;width:38%!important;height:40%!important}.container{margin-top:5px!important}.card{padding:2px!important}.tag-content{margin:3% 0 0!important;background-color:#121b24;border-radius:13px}.img-tick{margin:3px!important}.slider{visibility:hidden}.load-page{padding:0}.head-logo{width:216px;padding-bottom:16px}.back-btn{height:26px;width:71px;position:absolute;margin-left:-17rem!important;font-size:10px;margin-top:23px}.go-btn{width:142px;height:36px;margin-right:-28px;font-size:10px}.add-tab,.add-tab-view{padding:30px 33px 2px 3px;margin-left:15px}.add-btn{width:6rem}.slider-tab{visibility:hidden}.back-tab{margin-left:-14rem;margin-top:1px;font-size:14px;height:39px}.participate-tab{height:96px;width:87px}.card-design{height:124px;width:125px;padding-left:17px;margin-left:30px}.term-signature{padding:22px 22px 13px 27px}.term-list{padding:43px 10px 10px 3px;margin-left:0;text-align:-webkit-center}}@media screen and (min-width: 320px) and (max-width: 376px){.agree{padding:0 0 8px 25px}.participate-tab{height:96px;width:87px}.card-design{height:109px;width:97px;padding-left:4px;margin-left:10px}.card-design h6{font-size:10px;padding-left:14px;font-weight:600}.sign-img{width:270px}.term-list{padding:20px 20px 6px 4px;margin-left:13px}}@media screen and (min-width: 320px) and (max-width: 350px){.upload-image{height:13px;width:11px;margin-left:10rem;margin-top:-35px}.btn-clear{width:92px}.term-signature{margin:84% 0 7px 4%}}.disabled-btn{cursor:not-allowed!important;background:#4077ad!important;color:#fff!important}.modal-dialog .modal-content{border-radius:12px;background:#fff!important;border:1px solid rgba(128,128,128,.3294117647)!important}.title-popup{font-size:18px;color:#0c1620}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:22px 28px 20px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:40px;height:40px;background:#ffffff1f;border-radius:11px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-family:Inter,system-ui,sans-serif;font-size:17px;font-weight:700;color:#fff;letter-spacing:-.01em;margin:0;flex:1}.tc-scroll-hint{display:flex;align-items:center;gap:7px;padding:9px 28px;background:#f0f9ff;border-bottom:none;font-size:12px;color:#4077ad;font-family:Inter,system-ui,sans-serif;letter-spacing:.01em;flex-shrink:0}.tc-scroll-hint svg{flex-shrink:0}.tc-scroll-hint strong{font-weight:700}.tc-scroll-hint .tc-progress-pill{margin-left:auto;background:#4077ad;color:#fff;font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 9px;border-radius:99px;min-width:42px;text-align:center;transition:background .2s ease}.tc-progress-bar{height:3px;background:#e0f2fe;flex-shrink:0}.tc-progress-bar .tc-progress-fill{height:100%;background:linear-gradient(90deg,#4077ad,#38bdf8);border-radius:0 99px 99px 0;transition:width .12s ease}.tc-scroll-wrapper{position:relative;flex:1 1 auto;overflow:hidden;display:flex;flex-direction:column}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-scroll-fab{position:absolute;bottom:20px;right:20px;width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px #4077ad80;z-index:10;animation:tc-fab-bounce 2s ease-in-out infinite;transition:transform .18s ease,box-shadow .18s ease}.tc-scroll-fab:hover{transform:translateY(-3px) scale(1.1);box-shadow:0 8px 24px #4077ad99;animation:none}@keyframes tc-fab-bounce{0%,to{transform:translateY(0);box-shadow:0 4px 18px #2563eb80}50%{transform:translateY(5px);box-shadow:0 2px 10px #2563eb59}}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:16px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-family:Inter,system-ui,sans-serif;font-size:13.5px;font-weight:600;letter-spacing:.015em;padding:10px 26px;border-radius:10px;border:none;cursor:pointer;transition:background .18s ease,box-shadow .18s ease,transform .15s ease}.tc-btn.tc-btn-decline{background:#f1f5f9;color:#64748b;border:1.5px solid #e2e8f0}.tc-btn.tc-btn-decline:hover{background:#e2e8f0;color:#475569}.tc-btn.tc-btn-agree{background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;box-shadow:0 3px 10px #2563eb59}.tc-btn.tc-btn-agree:hover:not(:disabled){background:linear-gradient(135deg,#2d5f8a,#4077ad);box-shadow:0 5px 16px #2563eb73;transform:translateY(-1px)}.tc-btn.tc-btn-agree:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}ul.term-list-data li{padding-bottom:5px;font-size:13px;font-weight:500;line-height:21px}ol,ul,dl{margin-top:0;margin-bottom:1rem}::ng-deep .modal-content{background:none!important;width:100%;border:none}.hidden-view{display:none}.header-container{position:relative;padding:20px}.view-logo{text-align:center}.logout-button{top:20px;right:20px;position:absolute}.logout-button button{background:none;border:none;font-size:16px;display:flex;align-items:center;cursor:pointer}.logout-button img{margin-right:5px;height:20px}.user-card{align-items:center;color:#4077ad;cursor:pointer}.user-cards-active{background:#4077ad;color:#fff}.save-btn.upload{border:1px solid #4077AD;background-color:#4077ad;color:#fff;border-radius:5px;background:#4077ad;padding:4px 10px;display:inline-flex;align-items:center;gap:6px}.save-btn.upload img{filter:brightness(0) invert(1)}.form-check.agree{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px}.form-check.agree .form-check-input{margin-top:4px;flex-shrink:0}.form-check.agree .form-check-label{line-height:1.4;cursor:pointer;white-space:normal}.spinner-16{width:16px;height:16px}.h6-buttons{display:flex;align-items:center;gap:8px}.form-check.agree{display:flex;align-items:flex-start;margin-bottom:14px}.form-check-input{position:absolute;opacity:0;cursor:pointer}.form-check-label{position:relative;padding-left:28px;cursor:pointer;font-size:14px;line-height:20px;color:#212529;-webkit-user-select:none;user-select:none}.form-check-label:before{content:\"\";position:absolute;left:0;top:8px;width:18px;height:18px;border:2px solid #adb5bd;border-radius:4px;background:#fff;transition:all .2s ease}.form-check-label:after{content:\"\";position:absolute;left:5px;top:10px;width:6px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .15s ease}.form-check-input:checked+.form-check-label:before{background-color:#4077ad;border-color:#4077ad}.form-check-input:checked+.form-check-label:after{transform:rotate(45deg) scale(1)}.form-check-label:hover:before{border-color:#4077ad}.form-check-input:focus+.form-check-label:before{box-shadow:0 0 0 3px #4077ad40}.form-check-input.is-invalid+.form-check-label:before{border-color:#dc3545}.form-check-input.is-invalid:checked+.form-check-label:before{background-color:#dc3545}.invalid-feedback{display:block;font-size:12px;margin-left:7px;margin-top:4px}::ng-deep .modal-dialog{max-width:750px}.user-cards-active{background-color:#4077ad;color:#fff;border:2px solid #4077AD}body.modal-open{overflow:hidden!important}.modal{z-index:1055!important}.modal-backdrop{z-index:1050!important}.modal-dialog{margin:auto;pointer-events:auto}.modal-content{position:relative;z-index:1060}.logout-container{display:flex;justify-content:flex-end}.logout-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 16px;border-radius:8px;font-size:13px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#64748b;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,background .18s,border-color .18s,box-shadow .18s}.logout-btn:hover{color:#dc2626;background:#fff5f5;border-color:#fca5a5;box-shadow:0 2px 8px #dc26261a}.logout-btn:active{transform:scale(.97)}@media screen and (max-width: 767px){.term-signature{padding-left:3rem;padding-right:0;position:unset;margin:0}.footer-signature{margin-top:0rem}.disabled-btn{position:absolute;bottom:13px;right:24px}.next{height:46px;width:46px;position:absolute;bottom:21px;right:35px}.mob{padding-bottom:4.5rem!important}.checkmark{width:85%}.terms-fixed-modal{width:unset}::ng-deep .privacy-policy-modal .logo-section{margin-bottom:0!important}.add-tab-view{padding:30px 25px 6px;margin-left:0}.user-card{width:96%}.footer .btn-mob{display:flex;align-items:center}.back-btn{position:absolute;bottom:21px;left:10px}.actions{margin:50px 34px 1px}}@media screen and (min-width: 768px) and (max-width: 1024px){.footer-signature{margin-top:3rem}}.v1-welcome{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-welcome-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v1-welcome-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v1-brand{color:#4077ad}.v1-welcome-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v1-body{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:0 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-body{grid-template-columns:1fr;padding:0 16px 16px}}.v1-agreements{display:flex;flex-direction:column;gap:12px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#c7d3e2;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:38px;height:38px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef;color:#4077ad}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13.5px;font-weight:600;color:#0f172a;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7280;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:8px;font-size:12px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.v1-signature{display:flex;flex-direction:column;gap:10px}.v1-sig-header{display:flex;align-items:center;justify-content:space-between}.v1-sig-label{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#0f172a;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-clear-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#6b7280;background:transparent;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;transition:color .18s,border-color .18s}.v1-clear-btn:hover{color:#dc2626;border-color:#fca5a5}.v1-sig-pad{position:relative;border-radius:12px;border:1.5px dashed #cbd5e1;background:#f8fafc;overflow:hidden;min-height:120px}.v1-sig-pad canvas{display:block;cursor:crosshair;width:100%;height:120px}.v1-sig-hint{position:absolute;bottom:8px;left:50%;transform:translate(-50%);font-size:10.5px;color:#c0cad8;pointer-events:none;margin:0;white-space:nowrap;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-error-msg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-footer{padding:8px 32px 20px;display:flex;justify-content:flex-end;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-footer{padding:8px 16px 20px}}.v1-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:12px 28px;border-radius:10px;font-size:14px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad59;transition:transform .15s,box-shadow .15s;min-width:148px;justify-content:center}.v1-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad73}.v1-continue-btn:active:not(:disabled){transform:translateY(0)}.v1-continue-btn:disabled,.v1-continue-btn.disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v1-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:v1-spin .65s linear infinite}@keyframes v1-spin{to{transform:rotate(360deg)}}@media (max-width: 767px){.v1-welcome{padding:20px 16px 14px;gap:12px}.v1-welcome-icon{width:40px;height:40px}.v1-welcome-title{font-size:17px}}.v2-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-header{padding:20px 16px 14px;gap:12px}}.v2-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v2-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v2-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px;padding:0 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));padding:0 16px 20px;gap:10px}}.v2-role-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px 12px 16px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;box-shadow:0 1px 3px #0000000a;text-align:center}.v2-role-card:hover{border-color:#93c5fd;box-shadow:0 4px 16px #4077ad1a;transform:translateY(-2px)}.v2-role-card.v2-role-card--active{border-color:#4077ad;background:#eff6ff;box-shadow:0 0 0 3px #4077ad1f,0 4px 16px #4077ad1f}.v2-role-img-wrap{width:64px;height:64px;border-radius:50%;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:background .18s,border-color .18s}.v2-role-img-wrap img{width:44px;height:44px;object-fit:contain;display:block}.v2-role-card--active .v2-role-img-wrap{background:#dbeafe;border-color:#93c5fd}.v2-role-name{font-size:12px;font-weight:600;color:#0f172a;line-height:1.3;text-align:center}.v2-role-card--active .v2-role-name{color:#4077ad}.v2-role-check{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;background:#4077ad;color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #4077ad59}.v2-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-footer{padding:8px 16px 20px}}.v2-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s}.v2-back-btn:hover{color:#0f172a;border-color:#94a3b8}.v2-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 24px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.v2-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.v2-continue-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.ip-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-header{padding:20px 16px 12px;gap:12px}}.ip-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.ip-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-section{margin:0 24px 14px;background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:18px 20px 16px;box-shadow:0 1px 4px #0000000a}@media (max-width: 767px){.ip-section{margin:0 12px 10px;padding:14px}}.ip-section-label{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#6b7280;margin:0 0 12px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media (max-width: 767px){.ip-grid-2{grid-template-columns:1fr}}.ip-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-3{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-3{grid-template-columns:1fr}}.ip-grid-4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-4{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-4{grid-template-columns:1fr}}.ip-field{display:flex;flex-direction:column;gap:5px}.ip-label{font-size:12px;font-weight:600;color:#374151;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;line-height:1.3}.ip-required{color:#dc2626;margin-left:2px;font-weight:700}.ip-input{width:100%;height:44px;padding:0 14px;border:1.5px solid #e2e8f0;border-radius:9px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a;background:#fff;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.ip-input::placeholder{color:#adb5bd;font-weight:400}.ip-input:focus{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.ip-input.ip-input--invalid{border-color:#dc2626;background:#fff8f8}.ip-input.ip-input--invalid:focus{box-shadow:0 0 0 3px #dc26261a}.ip-input[readonly]{cursor:pointer;background:#f8fafc}.ip-error{display:flex;align-items:center;gap:4px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-upload-wrap{position:relative;display:flex;align-items:center}.ip-upload-icon{position:absolute;right:14px;width:16px;height:16px;cursor:pointer;opacity:.45;transition:opacity .18s}.ip-upload-icon:hover{opacity:.85}.ip-copy-row{display:flex;align-items:center;gap:10px;margin:0 24px 12px;padding:11px 16px;background:#eff6ff;border:1.5px solid #bfdbfe;border-radius:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-copy-row{margin:0 12px 10px}}.ip-copy-check{width:16px;height:16px;accent-color:#4077AD;cursor:pointer;flex-shrink:0}.ip-copy-label{font-size:13px;font-weight:500;color:#0f172a;cursor:pointer;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-user-select:none;user-select:none}.ip-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 24px 28px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-footer{padding:8px 16px 24px}}.ip-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s,background .18s}.ip-back-btn:hover{color:#0f172a;border-color:#94a3b8;background:#f1f5f9}.ip-next-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 26px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.ip-next-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.ip-next-btn:active:not(:disabled){transform:translateY(0)}.ip-next-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v5-wrap{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 32px 40px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v5-wrap{padding:36px 20px 32px}}.v5-icon{width:72px;height:72px;border-radius:50%;background:linear-gradient(135deg,#dcfce7,#bbf7d0);border:1.5px solid #86efac;display:flex;align-items:center;justify-content:center;color:#16a34a;margin-bottom:20px;box-shadow:0 0 0 8px #22c55e14}.v5-title{font-size:26px;font-weight:800;color:#0f172a;margin:0 0 10px;letter-spacing:-.025em;line-height:1.2}.v5-sub{font-size:14px;color:#374151;margin:0 0 28px;line-height:1.6;max-width:480px}.v5-cards{display:flex;flex-direction:column;gap:12px;width:100%;max-width:520px;margin-bottom:32px;text-align:left}.v5-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border-radius:12px;border:1.5px solid #e2e8f0;background:#f8fafc;box-shadow:0 1px 3px #0000000a}.v5-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad}.v5-card-icon.v5-card-icon--green{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.v5-card-text{font-size:13px;color:#374151;line-height:1.6;margin:0}.v5-cta{display:inline-flex;align-items:center;gap:10px;padding:13px 32px;border-radius:10px;font-size:14.5px;font-weight:600;font-family:inherit;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 16px #4077ad52;transition:transform .15s,box-shadow .15s}.v5-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px #4077ad6b}.v5-cta:active{transform:translateY(0)}.cc-select-wrap{margin-bottom:20px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container{border:1.5px solid #e2e8f0;border-radius:10px;min-height:48px;padding:5px 10px;background:#fff;box-shadow:none;cursor:text;transition:border-color .18s,box-shadow .18s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container:hover{border-color:#94a3b8}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple.ng-select-focused .ng-select-container{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-container{flex-wrap:wrap;gap:6px;padding:2px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value{display:inline-flex;flex-direction:row;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:99px;padding:4px 8px 4px 13px;font-size:12px;font-weight:600;color:#4077ad;margin:0;line-height:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-label{order:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon{display:inline-flex;align-items:center;justify-content:center;order:2;width:16px;height:16px;border-radius:50%;font-size:12px;font-weight:700;line-height:1;padding:0;background:#4077ad26;color:#4077ad;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon:hover{background:#4077ad;color:#fff}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon.right{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-placeholder{font-size:13.5px;color:#adb5bd;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-placeholder{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-input>input{font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper{padding-right:6px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper .ng-arrow{border-color:#94a3b8 transparent transparent;border-width:5px 4px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-clear-wrapper{color:#94a3b8}::ng-deep .ng-dropdown-panel{border:1.5px solid #e2e8f0;border-radius:12px;box-shadow:0 8px 28px #0000001a,0 2px 8px #0000000f;overflow:hidden;margin-top:5px;z-index:9999!important;background:#fff!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{padding:6px}::ng-deep .ng-dropdown-panel .ng-option{border-radius:8px;padding:10px 13px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;transition:background .12s}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected{background:#eff6ff;color:#4077ad;font-weight:600}::ng-deep .ng-dropdown-panel .ng-option.ng-option-marked:not(.ng-option-selected){background:#f8fafc;color:#0f172a}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected.ng-option-marked{background:#dbeafe}.cc-group{margin-bottom:18px;padding-top:4px}.cc-group:last-child{margin-bottom:0}.cc-hidden-check{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.cc-select-all-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:99px;border:1.5px solid #e2e8f0;background:#f8fafc;font-size:12px;font-weight:700;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:10px;transition:background .18s,border-color .18s,color .18s}.cc-select-all-pill:hover:not(.cc-select-all-pill--on){background:#f1f5f9;border-color:#94a3b8}.cc-select-all-pill.cc-select-all-pill--on{background:#0f172a;border-color:#0f172a;color:#fff}.cc-sub-pills{display:flex;flex-wrap:wrap;gap:8px}.cc-sub-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:99px;border:1.5px solid #e2e8f0;background:#fff;font-size:12.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.cc-sub-pill:hover:not(.cc-sub-pill--on){background:#f8fafc;border-color:#94a3b8;color:#0f172a}.cc-sub-pill.cc-sub-pill--on{background:#eff6ff;border-color:#93c5fd;color:#4077ad;font-weight:600;box-shadow:0 0 0 3px #4077ad12}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: GooglePlaceDirective, selector: "[ngx-google-places-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "directive", type: MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { kind: "component", type: TermsConditionsComponent, selector: "app-terms-conditions", inputs: ["title", "branding", "PrivacyAndTerms"] }, { kind: "component", type: PrivacyPolicyComponent, selector: "app-privacy-policy", inputs: ["title", "branding", "PrivacyAndTerms"] }, { kind: "component", type: CredentialingComponent, selector: "app-credentialing", inputs: ["signatureFileId", "signatureUrl", "data"], outputs: ["back"] }] });
35834
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: InitialProcessComponent, isStandalone: false, selector: "app-initial-process", host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"container\">\r\n <div *ngIf=\"isInitializing\" class=\"text-center p-5\">\r\n <div class=\"spinner-border text-primary\"></div>\r\n </div>\r\n <ng-container *ngIf=\"!isInitializing\">\r\n <div class=\"mb-4 logout-container\" *ngIf=\"showlogout\">\r\n <button class=\"logout-btn\" (click)=\"logout()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\r\n <polyline points=\"16 17 21 12 16 7\"/>\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\r\n </svg>\r\n Logout\r\n </button>\r\n </div>\r\n <div class=\"card pb-2 mob pr-5\" style=\"margin-bottom: 30px;\">\r\n <div [hidden]=\"view !== 1\">\r\n\r\n <!-- \u2500\u2500 Welcome Banner \u2500\u2500 -->\r\n <div class=\"v1-welcome\">\r\n <div class=\"v1-welcome-icon\">\r\n <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"/>\r\n <circle cx=\"9\" cy=\"7\" r=\"4\"/>\r\n <path d=\"M23 21v-2a4 4 0 00-3-3.87\"/>\r\n <path d=\"M16 3.13a4 4 0 010 7.75\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-welcome-text\">\r\n <h2 class=\"v1-welcome-title\">Welcome to <span class=\"v1-brand\">{{ branding.displayName }}</span></h2>\r\n <p class=\"v1-welcome-sub\">Our members and service providers rely on accurate info in your profile to connect\r\n you with work that suits your capabilities. Keep your profile complete, skills updated, licenses current,\r\n photos and logos professional, and schedule up to date.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Main Body: agreements + signature \u2500\u2500 -->\r\n <div class=\"v1-body\">\r\n\r\n <!-- Left: agreement cards -->\r\n <div class=\"v1-agreements\">\r\n\r\n <!-- Terms card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.acceptTerms\"\r\n [class.v1-card--invalid]=\"!model.acceptTerms && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Terms and Conditions</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.acceptTerms\"\r\n [disabled]=\"isTermsLoading\"\r\n (click)=\"openModal(termsAndConditionsModel,'Terms and Conditions',$event)\">\r\n <span class=\"v1-agree-spinner\" *ngIf=\"isTermsLoading\"></span>\r\n <svg *ngIf=\"!isTermsLoading && model.acceptTerms\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ isTermsLoading ? 'Loading...' : (model.acceptTerms ? 'Agreed' : 'Read & Agree') }}\r\n </button>\r\n </div>\r\n\r\n <!-- Privacy card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.privacy\"\r\n [class.v1-card--invalid]=\"!model.privacy && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Privacy Statement</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.privacy\"\r\n [disabled]=\"isPrivacyLoading\"\r\n (click)=\"openModal(termsAndConditionsModel,'Privacy Statement',$event)\">\r\n <span class=\"v1-agree-spinner\" *ngIf=\"isPrivacyLoading\"></span>\r\n <svg *ngIf=\"!isPrivacyLoading && model.privacy\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ isPrivacyLoading ? 'Loading...' : (model.privacy ? 'Agreed' : 'Read & Agree') }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right: signature pad -->\r\n <div class=\"v1-signature\">\r\n <div class=\"v1-sig-header\">\r\n <span class=\"v1-sig-label\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"/>\r\n </svg>\r\n Signature\r\n </span>\r\n <button (click)=\"clearPad()\" class=\"v1-clear-btn\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n Clear\r\n </button>\r\n </div>\r\n <div class=\"v1-sig-pad\">\r\n <div [ngClass]=\"{'d-none': signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n <div [ngClass]=\"{'d-none': !signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <img [src]=\"signaturePadData?.publicUrl\" alt style=\"width:100%;height:120px;object-fit:contain;display:block;\">\r\n </div>\r\n <p class=\"v1-sig-hint\" *ngIf=\"!signaturePadData?.publicUrl && (!points || !points?.length)\">\r\n Draw your signature here\r\n </p>\r\n </div>\r\n <div *ngIf=\"validatePage==1 && (!points || !points?.length || points.length==0) && !fileData\"\r\n class=\"v1-error-msg\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n Signature is required\r\n </div>\r\n <div *ngIf=\"uploadError\" class=\"v1-error-msg\">{{ uploadError }}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u2500\u2500 Continue Button \u2500\u2500 -->\r\n <div class=\"v1-footer\">\r\n <button class=\"v1-continue-btn\" (click)=\"next(2)\"\r\n [disabled]=\"((!points || !points?.length || points.length==0) && !fileData && !signaturePadData?.publicUrl) || !model.acceptTerms || !model.privacy\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"view == 2\">\r\n\r\n <!-- \u2500\u2500 Role-select header \u2500\u2500 -->\r\n <div class=\"v2-header\">\r\n <div class=\"v2-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"v2-title\">Choose your role</h2>\r\n <p class=\"v2-sub\">Choose the areas you'd like to be part of \u2014 programs, services, events, or\r\n collaborations. Connect your business to others and prospective clients.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Role cards grid \u2500\u2500 -->\r\n <div class=\"v2-grid\">\r\n <ng-container *ngFor=\"let userType of userViewRoles\">\r\n <div class=\"v2-role-card\" [class.v2-role-card--active]=\"userType.value === selectedRoleValue\"\r\n (click)=\"selectedUserRole(userType)\">\r\n <div class=\"v2-role-img-wrap\">\r\n <img [src]=\"userType?.img\" alt=\"\">\r\n </div>\r\n <span class=\"v2-role-name\">{{userType.name}}</span>\r\n <span class=\"v2-role-check\" *ngIf=\"userType.value === selectedRoleValue\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Footer: Back + Continue \u2500\u2500 -->\r\n <div class=\"v2-footer\">\r\n <button class=\"v2-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"v2-continue-btn\" (click)=\"next(3)\" [disabled]=\"!isUserSelected || isLoadingSubCategories\">\r\n <span *ngIf=\"isLoadingSubCategories\" class=\"v1-spinner\"></span>\r\n <ng-container *ngIf=\"!isLoadingSubCategories\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </ng-container>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 3\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"/>\r\n <polyline points=\"9 22 9 12 15 12 15 22\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Business Information</h2>\r\n <p class=\"ip-sub\">Tell us about your company so we can connect you with the right work.</p>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"companyForm\">\r\n\r\n <!-- Company Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Details</p>\r\n <div class=\"ip-grid-2\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"companyName\">Company Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': (f.companyName.errors && validatePage == 3) || providerError}\"\r\n type=\"text\" class=\"ip-input\" id=\"companyName\" placeholder=\"Company Name\"\r\n formControlName=\"companyName\">\r\n <span *ngIf=\"f.companyName.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.companyName.errors.required\">Company Name is required</span>\r\n <span *ngIf=\"f.companyName.errors.minlength\">Minimum 2 characters</span>\r\n <span *ngIf=\"f.companyName.errors.maxLength\">Maximum 100 characters</span>\r\n </span>\r\n <span *ngIf=\"providerError\" class=\"ip-error\">{{ providerError }}</span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" name=\"inputPhone\" placeholder=\"Company Phone Number\"\r\n id=\"inputPhone\" autocomplete=\"off\" formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n (input)=\"formatPhone($event,companyForm)\"\r\n [ngClass]=\"{'ip-input--invalid': (f.phoneNumber.errors && validatePage == 3) || providerError}\">\r\n <span *ngIf=\"f.phoneNumber.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Address</p>\r\n <div class=\"ip-grid-2\" style=\"margin-bottom: 12px;\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.address1.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"businessAddress\" ngx-google-places-autocomplete [options]='options'\r\n (onAddressChange)=\"AddressChange($event)\" placeholder=\"Business Address 1\" formControlName=\"address1\">\r\n <span *ngIf=\"f.address1.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.address1.errors.required\">Business Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"businessAddress2\" placeholder=\"Business Address 2\">\r\n </div>\r\n </div>\r\n <div class=\"ip-grid-4\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.city.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"f.city.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.state.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"f.state.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': f.zipcode.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"f.zipcode.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.country.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"f.country.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Company Logo (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Logo</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Company Logo <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadLogo($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage2.click()\" [(ngModel)]=\"logoName\" readonly type=\"text\"\r\n class=\"ip-input\" placeholder=\"Click to upload company logo\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage2 class=\"ip-upload-icon\" (click)=\"uploadLogoInput.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isLogoRequired\" class=\"ip-error\">Please upload a company logo</span>\r\n <span *ngIf=\"isneeded\" class=\"ip-error\">Company Logo is required</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contractor Category -->\r\n <div *ngIf=\"selectedRole?.name == 'Contractor'\" class=\"ip-section\">\r\n <p class=\"ip-section-label\">Contractor Category</p>\r\n\r\n <!-- Category selector \u2014 ng-select logic intact, restyled as pill tag-input -->\r\n <div class=\"cc-select-wrap\">\r\n <ng-select [items]=\"contractorSubCategories\" bindLabel=\"name\" [multiple]=\"true\" [closeOnSelect]=\"false\"\r\n (ngModelChange)=\"changeContractor($event)\" [(ngModel)]=\"selectedContractorCategories\"\r\n >\r\n </ng-select>\r\n </div>\r\n\r\n <!-- Sub-items as pill chips per selected category -->\r\n <ng-container *ngFor=\"let item of selectedContractorCategories; let i=index\">\r\n <div class=\"cc-group\">\r\n\r\n <!-- \"Select all\" toggle pill for this category -->\r\n <label class=\"cc-select-all-pill\" [class.cc-select-all-pill--on]=\"item.selectAll\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selectAll\" [name]=\"item?.id\" [id]=\"item?.id\"\r\n (change)=\"selectAll($event,item?.items)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"item.selectAll\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ item?.name }} \u2014 Select all\r\n </label>\r\n\r\n <!-- Individual sub-item pills -->\r\n <div class=\"cc-sub-pills\">\r\n <label *ngFor=\"let subItem of item?.items\" class=\"cc-sub-pill\"\r\n [class.cc-sub-pill--on]=\"subItem.selected\">\r\n <input type=\"checkbox\" [(ngModel)]=\"subItem.selected\" [name]=\"subItem?.id\" [id]=\"subItem?.id\"\r\n (change)=\"unCheckedEvent($event,item)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"subItem.selected\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ subItem?.name }}\r\n </label>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(4)\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 4\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Your Profile</h2>\r\n <p class=\"ip-sub\">We need a few basics and a headshot to complete your profile.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Copy from provider toggle -->\r\n <div *ngIf=\"isBusiness\" class=\"ip-copy-row\">\r\n <input [(ngModel)]=\"isCopy\" type=\"checkbox\" name=\"isCopy\" id=\"isCopy\"\r\n class=\"ip-copy-check\" (change)=\"changeAddressUser()\">\r\n <label for=\"isCopy\" class=\"ip-copy-label\">Copy from Provider Information</label>\r\n </div>\r\n\r\n <form [formGroup]=\"userForm\">\r\n\r\n <!-- Personal Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Personal Details</p>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"firstName\">First Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.firstName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"First Name\" formControlName=\"firstName\" id=\"firstName\">\r\n <span *ngIf=\"u.firstName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.firstName.errors.required\">First Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"lastName\">Last Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.lastName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Last Name\" formControlName=\"lastName\" id=\"lastName\">\r\n <span *ngIf=\"u.lastName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.lastName.errors.required\">Last Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"email\">Email <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.email.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Email\" formControlName=\"email\" id=\"email\">\r\n <span *ngIf=\"u.email.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.email.errors.required\">Email is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Home Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Home Address</p>\r\n <div class=\"ip-field\" style=\"margin-bottom: 12px;\">\r\n <label class=\"ip-label\" for=\"address1\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.address1.errors && validatePage == 4}\"\r\n [options]=\"options\" (onAddressChange)=\"AddressChangeUser($event)\" type=\"text\" class=\"ip-input\"\r\n placeholder=\"Home Address 1\" formControlName=\"address1\" id=\"address1\" ngx-google-places-autocomplete>\r\n <span *ngIf=\"u.address1.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.address1.errors.required\">Home Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"homeAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"homeAddress2\" formControlName=\"address2\"\r\n placeholder=\"Home Address 2\">\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.city.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"u.city.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.state.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"u.state.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': u.zipcode.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"u.zipcode.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.country.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"u.country.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" (input)=\"formatPhone($event,userForm)\"\r\n name=\"inputPhone\" placeholder=\"Phone Number\" id=\"inputPhone\" autocomplete=\"off\"\r\n formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n [ngClass]=\"{'ip-input--invalid': u.phoneNumber.errors && validatePage == 4}\">\r\n <span *ngIf=\"u.phoneNumber.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Profile Picture (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Profile Picture</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Profile Picture <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadFile type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadUserImage($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage1.click()\" [(ngModel)]=\"fileName\" readonly type=\"text\"\r\n class=\"ip-input\" id=\"upload\" accept=\".png,.jpg,.jpeg\" placeholder=\"Click to upload profile picture\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage1 class=\"ip-upload-icon\" (click)=\"uploadFile.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isImageRequired\" class=\"ip-error\">Please upload a profile image</span>\r\n <span *ngIf=\"userError\" class=\"ip-error\">{{ userError }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(5)\" [disabled]=\"showLoader\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 5\">\r\n <div class=\"v5-wrap\">\r\n\r\n <!-- Success icon -->\r\n <div class=\"v5-icon\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/>\r\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\r\n </svg>\r\n </div>\r\n\r\n <h2 class=\"v5-title\">You're all set!</h2>\r\n <p class=\"v5-sub\">Account created successfully. Next step: complete your profile.</p>\r\n\r\n <!-- Info cards -->\r\n <div class=\"v5-cards\">\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">Profile completion is mandatory to participate in rosters, programs, requests, and platform workflows. Incomplete profiles will have limited access.</p>\r\n </div>\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon v5-card-icon--green\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">You may access your dashboard at any time, but full functionality is available only after profile completion.</p>\r\n </div>\r\n </div>\r\n\r\n <button (click)=\"dashboard()\" class=\"v5-cta\">\r\n Go to Dashboard\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 10\">\r\n <app-credentialing (back)=\"onCredentialingBack()\" [data]=\"credentialingData\" [signatureFileId]=\"signatureFileId\"\r\n [signatureUrl]=\"signatureUrl\"></app-credentialing>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n</div>\r\n\r\n<ng-template #termsAndConditionsModel>\r\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\r\n <div class=\"modal-content tc-modal\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"tc-modal-header\">\r\n <div class=\"tc-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\r\n <span class=\"tc-modal-meta\" *ngIf=\"legalMeta\">Last Modified: {{ legalMeta.createdDate | date:'MMM d, y, h:mm:ss a' }}, V{{ legalMeta.versionName }}</span>\r\n </div>\r\n\r\n\r\n <div class=\"tc-scroll-wrapper\">\r\n <div class=\"tc-modal-body\"\r\n (scroll)=\"onTermsScroll($event)\">\r\n <ng-container *ngIf=\"termsAndConditionTitle == 'Terms and Conditions'\">\r\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\"\r\n (metaLoaded)=\"onLegalMetaLoaded($event)\">\r\n </app-terms-conditions>\r\n </ng-container>\r\n <ng-container *ngIf=\"termsAndConditionTitle != 'Terms and Conditions'\">\r\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\"\r\n (metaLoaded)=\"onLegalMetaLoaded($event)\">\r\n </app-privacy-policy>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Floating scroll-to-bottom button -->\r\n <button class=\"tc-scroll-fab\" *ngIf=\"!isAgreeEnabled && legalMeta\" (click)=\"scrollToBottomClick($event)\"\r\n title=\"Scroll to bottom\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 15l7 7 7-7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"tc-modal-footer\">\r\n <button type=\"button\" class=\"tc-btn tc-btn-decline\"\r\n (click)=\"decline(termsAndConditionTitle); modelRef.hide();\">\r\n Decline\r\n </button>\r\n <button type=\"button\" class=\"tc-btn tc-btn-agree\"\r\n [disabled]=\"!isAgreeEnabled\"\r\n (click)=\"agree(termsAndConditionTitle); modelRef.hide();\">\r\n I Agree\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.brand-name{font-weight:700;font-size:calc(100% + 4px)}.spinner{width:38px;height:38px;border:dotted white;border-top:2px solid #f6f6f6;border-radius:62%;animation:spin 1.7s linear infinite;margin:-9px 0 0 -28px}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .backdrop{background-color:transparent!important}.filter-black{filter:brightness(.4)!important}.footer-view{margin-top:3rem;margin-left:0;margin-right:0}.footer-signature{margin-top:9rem}.slider-view{width:11rem;margin-left:1px}.container{margin-top:80px}.container .card{border-radius:1.25rem}.container .header{padding:33px 10px 0}.container .header .logo{width:15%;height:80%}.container .form-control{padding:.75rem 1rem;border-color:#a1a1a1}.container .form-control:focus{color:#000;box-shadow:none;border-color:#a1a1a1!important}.container .form-control::placeholder{font-weight:500;font-size:12px;color:#a1a1a1}.container .link{color:#4077ad}.container .link-signup{font-weight:bolder}.container .form-check-label{margin-bottom:0;padding-top:9px}.container .content-view{margin-top:10%}.container .content-description{margin-top:25%}.container .tag-content{color:#fff9e8;margin-left:9%}.container .tag-content p{color:#fff9e8}.container .form-check-input:checked{background-color:#000;border-color:#000}.container .img-tick{margin:-31px 12px 0 -35px}.container .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #000000}.container .form-check-input:focus{box-shadow:none}.container input[type=checkbox]{accent-color:#000000}.term-list{padding:48px 60px 6px 0;margin-left:30px;color:\"#1f1f1fdb\"}.add-tab{padding:75px 75px 6px 1px;margin-left:50px;color:\"#1f1f1fdb\"}.add-tab-view{padding:75px 75px 6px 1px;margin-left:80px;color:\"#1f1f1fdb\"}.inspect-add{margin-top:3rem}.add-btn{font-size:16px;border-radius:5px;transition:.2s;padding:.25rem .5rem;background:#fff;border:1px solid rgba(148,147,147,.1882352941);color:#444;line-height:48px;box-shadow:0 1px 9px #98a2b3;width:9rem}.add-btn:hover{border:1px solid rgba(148,147,147,.1882352941);box-shadow:none}.agree{padding:0 0 8px 47px}.agree .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #98A2B3;width:14px;height:14px;margin:5px 9px 0 -35px}.agree .form-check-input:focus{box-shadow:none}.agree .form-check-input:checked{background-color:#000;border-color:#000}.agree .invalid-feedback{font-size:10px!important;margin:0 0 0 21px}.checkmark{vertical-align:text-bottom;color:#98a2b3;font-weight:500;font-size:12px}.term-signature{padding-left:16rem;padding-right:65px;position:absolute;margin:150px 0 0 50%}.participate-tab{height:135px;width:142px}.card-design{height:147px;width:147px;padding-left:10px;margin-left:42px;background:#fff0;border:2px solid #98A2B3;box-shadow:0 0 4px #98a2b3;border-radius:27px;margin-bottom:42px}.upload{height:39px;margin-top:-4px;width:126px;font-size:12px}.participate-tab{margin-top:-25px}.slider{width:14rem;margin-left:69px}.btn-clear{background:#d3dae6;color:#98a2b3;font-size:12px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;width:46%;line-height:28px}.btn-close{background:#f1f4fa;color:#98a2b3;font-size:17px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;font-weight:500;width:116px;color:#737a87;line-height:28px}.view-logo{padding-top:1%;padding-bottom:4%;text-align:center}.back-btn{border-radius:45px;height:41px}.next{background:#4077ad;border-radius:30px;height:60px;width:60px;border:white}.profile-field{margin-top:-10px}.profile-field input{line-height:30px;margin:-10px 3px 3px}.load-page{padding:21px 49px 13px 34px}.sign-img{width:291px;height:95px;border-radius:8px;border:1px solid rgba(179,178,178,.33);margin-top:19px}.upload-image{height:16px;width:16px;position:absolute;margin-left:66rem;margin-top:-39px}.para-comma{font-weight:500}.go-btn{border-radius:45px;height:50px;padding:0 20px;background:#4077ad;border:1px solid #4077ad;color:#fff;line-height:28px;font-size:14px;font-weight:500}.text-label{color:#747b83;font-weight:500}.form{padding:20px;border-radius:5px}.form-control:focus{color:#000;box-shadow:none;border-color:#848484!important}.form-control::placeholder{font-weight:500;font-size:12px;color:#bec1be;padding-left:10px}.btn-primary:active{background-color:#50575e}@media screen and (min-width: 500px) and (max-width: 769px){.content-view{background:#0c1620;width:44rem;margin:31px 0 0!important;padding:28px 32px 17px 71px!important;border-radius:29px}.upload-image{margin-left:25rem!important}}@media screen and (min-width: 768px) and (max-width: 1024px){.back-btn{height:31px;width:82px;position:absolute;margin-left:-53px}.back-tab{position:absolute;margin-left:-87px;height:37px}.go-btn{width:175px;height:44px}.term-signature{padding-left:10px}.upload-image{margin-left:40rem}}@media screen and (min-width: 374px) and (max-width: 426px){.head-logo{width:216px;padding-bottom:16px}.slider{visibility:hidden}.back-btn{height:31px;width:82px;position:absolute;margin-left:73px;margin-top:23px}.go-btn{width:175px;height:44px}.upload-image{margin-left:16rem}.term-signature{margin:84% 0 7px 4%}}@media screen and (min-width: 320px) and (max-width: 426px){.footer-signature{margin-top:20rem}.login .head-logo{padding:16px 2px 0;width:38%!important;height:40%!important}.container{margin-top:5px!important}.card{padding:2px!important}.tag-content{margin:3% 0 0!important;background-color:#121b24;border-radius:13px}.img-tick{margin:3px!important}.slider{visibility:hidden}.load-page{padding:0}.head-logo{width:216px;padding-bottom:16px}.back-btn{height:26px;width:71px;position:absolute;margin-left:-17rem!important;font-size:10px;margin-top:23px}.go-btn{width:142px;height:36px;margin-right:-28px;font-size:10px}.add-tab,.add-tab-view{padding:30px 33px 2px 3px;margin-left:15px}.add-btn{width:6rem}.slider-tab{visibility:hidden}.back-tab{margin-left:-14rem;margin-top:1px;font-size:14px;height:39px}.participate-tab{height:96px;width:87px}.card-design{height:124px;width:125px;padding-left:17px;margin-left:30px}.term-signature{padding:22px 22px 13px 27px}.term-list{padding:43px 10px 10px 3px;margin-left:0;text-align:-webkit-center}}@media screen and (min-width: 320px) and (max-width: 376px){.agree{padding:0 0 8px 25px}.participate-tab{height:96px;width:87px}.card-design{height:109px;width:97px;padding-left:4px;margin-left:10px}.card-design h6{font-size:10px;padding-left:14px;font-weight:600}.sign-img{width:270px}.term-list{padding:20px 20px 6px 4px;margin-left:13px}}@media screen and (min-width: 320px) and (max-width: 350px){.upload-image{height:13px;width:11px;margin-left:10rem;margin-top:-35px}.btn-clear{width:92px}.term-signature{margin:84% 0 7px 4%}}.disabled-btn{cursor:not-allowed!important;background:#4077ad!important;color:#fff!important}.modal-dialog .modal-content{border-radius:12px;background:#fff!important;border:1px solid rgba(128,128,128,.3294117647)!important}.title-popup{font-size:18px;color:#0c1620}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 28px 14px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.tc-modal-header .tc-modal-title{font-family:Inter,system-ui,sans-serif;font-size:17px;font-weight:700;color:#fff;letter-spacing:-.01em;margin:0;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tc-modal-header .tc-modal-meta{font-weight:600;font-size:11px;color:#fff;flex-shrink:0;white-space:nowrap}@media screen and (max-width: 767px){.tc-modal-header .tc-modal-header{flex-flow:column;align-items:center;text-align:center}.tc-modal-header .tc-modal-title{flex:1 1 100%;white-space:normal}.tc-modal-header .tc-modal-meta{flex:1 1 100%;opacity:.85}}.tc-scroll-hint{display:flex;align-items:center;gap:7px;padding:9px 28px;background:#f0f9ff;border-bottom:none;font-size:12px;color:#4077ad;font-family:Inter,system-ui,sans-serif;letter-spacing:.01em;flex-shrink:0}.tc-scroll-hint svg{flex-shrink:0}.tc-scroll-hint strong{font-weight:700}.tc-scroll-hint .tc-progress-pill{margin-left:auto;background:#4077ad;color:#fff;font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 9px;border-radius:99px;min-width:42px;text-align:center;transition:background .2s ease}.tc-progress-bar{height:3px;background:#e0f2fe;flex-shrink:0}.tc-progress-bar .tc-progress-fill{height:100%;background:linear-gradient(90deg,#4077ad,#38bdf8);border-radius:0 99px 99px 0;transition:width .12s ease}.tc-scroll-wrapper{position:relative;flex:1 1 auto;overflow:hidden;display:flex;flex-direction:column}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-scroll-fab{position:absolute;bottom:20px;right:20px;width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px #4077ad80;z-index:10;animation:tc-fab-bounce 2s ease-in-out infinite;transition:transform .18s ease,box-shadow .18s ease}.tc-scroll-fab:hover{transform:translateY(-3px) scale(1.1);box-shadow:0 8px 24px #4077ad99;animation:none}@keyframes tc-fab-bounce{0%,to{transform:translateY(0);box-shadow:0 4px 18px #2563eb80}50%{transform:translateY(5px);box-shadow:0 2px 10px #2563eb59}}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:16px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-family:Inter,system-ui,sans-serif;font-size:13.5px;font-weight:600;letter-spacing:.015em;padding:10px 26px;border-radius:10px;border:none;cursor:pointer;transition:background .18s ease,box-shadow .18s ease,transform .15s ease}.tc-btn.tc-btn-decline{background:#f1f5f9;color:#64748b;border:1.5px solid #e2e8f0}.tc-btn.tc-btn-decline:hover{background:#e2e8f0;color:#475569}.tc-btn.tc-btn-agree{background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;box-shadow:0 3px 10px #2563eb59}.tc-btn.tc-btn-agree:hover:not(:disabled){background:linear-gradient(135deg,#2d5f8a,#4077ad);box-shadow:0 5px 16px #2563eb73;transform:translateY(-1px)}.tc-btn.tc-btn-agree:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}ul.term-list-data li{padding-bottom:5px;font-size:13px;font-weight:500;line-height:21px}ol,ul,dl{margin-top:0;margin-bottom:1rem}::ng-deep .modal-content{background:none!important;width:100%;border:none}.hidden-view{display:none}.header-container{position:relative;padding:20px}.view-logo{text-align:center}.logout-button{top:20px;right:20px;position:absolute}.logout-button button{background:none;border:none;font-size:16px;display:flex;align-items:center;cursor:pointer}.logout-button img{margin-right:5px;height:20px}.user-card{align-items:center;color:#4077ad;cursor:pointer}.user-cards-active{background:#4077ad;color:#fff}.save-btn.upload{border:1px solid #4077AD;background-color:#4077ad;color:#fff;border-radius:5px;background:#4077ad;padding:4px 10px;display:inline-flex;align-items:center;gap:6px}.save-btn.upload img{filter:brightness(0) invert(1)}.form-check.agree{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px}.form-check.agree .form-check-input{margin-top:4px;flex-shrink:0}.form-check.agree .form-check-label{line-height:1.4;cursor:pointer;white-space:normal}.spinner-16{width:16px;height:16px}.h6-buttons{display:flex;align-items:center;gap:8px}.form-check.agree{display:flex;align-items:flex-start;margin-bottom:14px}.form-check-input{position:absolute;opacity:0;cursor:pointer}.form-check-label{position:relative;padding-left:28px;cursor:pointer;font-size:14px;line-height:20px;color:#212529;-webkit-user-select:none;user-select:none}.form-check-label:before{content:\"\";position:absolute;left:0;top:8px;width:18px;height:18px;border:2px solid #adb5bd;border-radius:4px;background:#fff;transition:all .2s ease}.form-check-label:after{content:\"\";position:absolute;left:5px;top:10px;width:6px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .15s ease}.form-check-input:checked+.form-check-label:before{background-color:#4077ad;border-color:#4077ad}.form-check-input:checked+.form-check-label:after{transform:rotate(45deg) scale(1)}.form-check-label:hover:before{border-color:#4077ad}.form-check-input:focus+.form-check-label:before{box-shadow:0 0 0 3px #4077ad40}.form-check-input.is-invalid+.form-check-label:before{border-color:#dc3545}.form-check-input.is-invalid:checked+.form-check-label:before{background-color:#dc3545}.invalid-feedback{display:block;font-size:12px;margin-left:7px;margin-top:4px}::ng-deep .modal-dialog{max-width:750px}.user-cards-active{background-color:#4077ad;color:#fff;border:2px solid #4077AD}body.modal-open{overflow:hidden!important}.modal{z-index:1055!important}.modal-backdrop{z-index:1050!important}.modal-dialog{margin:auto;pointer-events:auto}.modal-content{position:relative;z-index:1060}.logout-container{display:flex;justify-content:flex-end}.logout-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 16px;border-radius:8px;font-size:13px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#64748b;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,background .18s,border-color .18s,box-shadow .18s}.logout-btn:hover{color:#dc2626;background:#fff5f5;border-color:#fca5a5;box-shadow:0 2px 8px #dc26261a}.logout-btn:active{transform:scale(.97)}@media screen and (max-width: 767px){.term-signature{padding-left:3rem;padding-right:0;position:unset;margin:0}.footer-signature{margin-top:0rem}.disabled-btn{position:absolute;bottom:13px;right:24px}.next{height:46px;width:46px;position:absolute;bottom:21px;right:35px}.mob{padding-bottom:4.5rem!important}.checkmark{width:85%}.terms-fixed-modal{width:unset}::ng-deep .privacy-policy-modal .logo-section{margin-bottom:0!important}.add-tab-view{padding:30px 25px 6px;margin-left:0}.user-card{width:96%}.footer .btn-mob{display:flex;align-items:center}.back-btn{position:absolute;bottom:21px;left:10px}.actions{margin:50px 34px 1px}}@media screen and (min-width: 768px) and (max-width: 1024px){.footer-signature{margin-top:3rem}}.v1-welcome{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-welcome-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v1-welcome-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v1-brand{color:#4077ad}.v1-welcome-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v1-body{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:0 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-body{grid-template-columns:1fr;padding:0 16px 16px}}.v1-agreements{display:flex;flex-direction:column;gap:12px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#c7d3e2;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:38px;height:38px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef;color:#4077ad}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13.5px;font-weight:600;color:#0f172a;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7280;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:8px;font-size:12px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.v1-agree-btn:disabled{opacity:.7;cursor:not-allowed}.v1-agree-btn:disabled:hover{background:transparent;color:#4077ad}.v1-agree-spinner{width:12px;height:12px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;flex-shrink:0;animation:v1-agree-spin .7s linear infinite}@keyframes v1-agree-spin{to{transform:rotate(360deg)}}.v1-signature{display:flex;flex-direction:column;gap:10px}.v1-sig-header{display:flex;align-items:center;justify-content:space-between}.v1-sig-label{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#0f172a;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-clear-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#6b7280;background:transparent;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;transition:color .18s,border-color .18s}.v1-clear-btn:hover{color:#dc2626;border-color:#fca5a5}.v1-sig-pad{position:relative;border-radius:12px;border:1.5px dashed #cbd5e1;background:#f8fafc;overflow:hidden;min-height:120px}.v1-sig-pad canvas{display:block;cursor:crosshair;width:100%;height:120px}.v1-sig-hint{position:absolute;bottom:8px;left:50%;transform:translate(-50%);font-size:10.5px;color:#c0cad8;pointer-events:none;margin:0;white-space:nowrap;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-error-msg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-footer{padding:8px 32px 20px;display:flex;justify-content:flex-end;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-footer{padding:8px 16px 20px}}.v1-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:12px 28px;border-radius:10px;font-size:14px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad59;transition:transform .15s,box-shadow .15s;min-width:148px;justify-content:center}.v1-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad73}.v1-continue-btn:active:not(:disabled){transform:translateY(0)}.v1-continue-btn:disabled,.v1-continue-btn.disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v1-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:v1-spin .65s linear infinite}@keyframes v1-spin{to{transform:rotate(360deg)}}@media (max-width: 767px){.v1-welcome{padding:20px 16px 14px;gap:12px}.v1-welcome-icon{width:40px;height:40px}.v1-welcome-title{font-size:17px}}.v2-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-header{padding:20px 16px 14px;gap:12px}}.v2-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v2-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v2-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px;padding:0 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));padding:0 16px 20px;gap:10px}}.v2-role-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px 12px 16px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;box-shadow:0 1px 3px #0000000a;text-align:center}.v2-role-card:hover{border-color:#93c5fd;box-shadow:0 4px 16px #4077ad1a;transform:translateY(-2px)}.v2-role-card.v2-role-card--active{border-color:#4077ad;background:#eff6ff;box-shadow:0 0 0 3px #4077ad1f,0 4px 16px #4077ad1f}.v2-role-img-wrap{width:64px;height:64px;border-radius:50%;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:background .18s,border-color .18s}.v2-role-img-wrap img{width:44px;height:44px;object-fit:contain;display:block}.v2-role-card--active .v2-role-img-wrap{background:#dbeafe;border-color:#93c5fd}.v2-role-name{font-size:12px;font-weight:600;color:#0f172a;line-height:1.3;text-align:center}.v2-role-card--active .v2-role-name{color:#4077ad}.v2-role-check{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;background:#4077ad;color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #4077ad59}.v2-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-footer{padding:8px 16px 20px}}.v2-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s}.v2-back-btn:hover{color:#0f172a;border-color:#94a3b8}.v2-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 24px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.v2-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.v2-continue-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.ip-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-header{padding:20px 16px 12px;gap:12px}}.ip-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.ip-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-section{margin:0 24px 14px;background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:18px 20px 16px;box-shadow:0 1px 4px #0000000a}@media (max-width: 767px){.ip-section{margin:0 12px 10px;padding:14px}}.ip-section-label{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#6b7280;margin:0 0 12px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media (max-width: 767px){.ip-grid-2{grid-template-columns:1fr}}.ip-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-3{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-3{grid-template-columns:1fr}}.ip-grid-4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-4{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-4{grid-template-columns:1fr}}.ip-field{display:flex;flex-direction:column;gap:5px}.ip-label{font-size:12px;font-weight:600;color:#374151;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;line-height:1.3}.ip-required{color:#dc2626;margin-left:2px;font-weight:700}.ip-input{width:100%;height:44px;padding:0 14px;border:1.5px solid #e2e8f0;border-radius:9px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a;background:#fff;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.ip-input::placeholder{color:#adb5bd;font-weight:400}.ip-input:focus{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.ip-input.ip-input--invalid{border-color:#dc2626;background:#fff8f8}.ip-input.ip-input--invalid:focus{box-shadow:0 0 0 3px #dc26261a}.ip-input[readonly]{cursor:pointer;background:#f8fafc}.ip-error{display:flex;align-items:center;gap:4px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-upload-wrap{position:relative;display:flex;align-items:center}.ip-upload-icon{position:absolute;right:14px;width:16px;height:16px;cursor:pointer;opacity:.45;transition:opacity .18s}.ip-upload-icon:hover{opacity:.85}.ip-copy-row{display:flex;align-items:center;gap:10px;margin:0 24px 12px;padding:11px 16px;background:#eff6ff;border:1.5px solid #bfdbfe;border-radius:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-copy-row{margin:0 12px 10px}}.ip-copy-check{width:16px;height:16px;accent-color:#4077AD;cursor:pointer;flex-shrink:0}.ip-copy-label{font-size:13px;font-weight:500;color:#0f172a;cursor:pointer;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-user-select:none;user-select:none}.ip-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 24px 28px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-footer{padding:8px 16px 24px}}.ip-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s,background .18s}.ip-back-btn:hover{color:#0f172a;border-color:#94a3b8;background:#f1f5f9}.ip-next-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 26px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.ip-next-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.ip-next-btn:active:not(:disabled){transform:translateY(0)}.ip-next-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v5-wrap{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 32px 40px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v5-wrap{padding:36px 20px 32px}}.v5-icon{width:72px;height:72px;border-radius:50%;background:linear-gradient(135deg,#dcfce7,#bbf7d0);border:1.5px solid #86efac;display:flex;align-items:center;justify-content:center;color:#16a34a;margin-bottom:20px;box-shadow:0 0 0 8px #22c55e14}.v5-title{font-size:26px;font-weight:800;color:#0f172a;margin:0 0 10px;letter-spacing:-.025em;line-height:1.2}.v5-sub{font-size:14px;color:#374151;margin:0 0 28px;line-height:1.6;max-width:480px}.v5-cards{display:flex;flex-direction:column;gap:12px;width:100%;max-width:520px;margin-bottom:32px;text-align:left}.v5-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border-radius:12px;border:1.5px solid #e2e8f0;background:#f8fafc;box-shadow:0 1px 3px #0000000a}.v5-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad}.v5-card-icon.v5-card-icon--green{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.v5-card-text{font-size:13px;color:#374151;line-height:1.6;margin:0}.v5-cta{display:inline-flex;align-items:center;gap:10px;padding:13px 32px;border-radius:10px;font-size:14.5px;font-weight:600;font-family:inherit;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 16px #4077ad52;transition:transform .15s,box-shadow .15s}.v5-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px #4077ad6b}.v5-cta:active{transform:translateY(0)}.cc-select-wrap{margin-bottom:20px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container{border:1.5px solid #e2e8f0;border-radius:10px;min-height:48px;padding:5px 10px;background:#fff;box-shadow:none;cursor:text;transition:border-color .18s,box-shadow .18s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container:hover{border-color:#94a3b8}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple.ng-select-focused .ng-select-container{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-container{flex-wrap:wrap;gap:6px;padding:2px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value{display:inline-flex;flex-direction:row;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:99px;padding:4px 8px 4px 13px;font-size:12px;font-weight:600;color:#4077ad;margin:0;line-height:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-label{order:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon{display:inline-flex;align-items:center;justify-content:center;order:2;width:16px;height:16px;border-radius:50%;font-size:12px;font-weight:700;line-height:1;padding:0;background:#4077ad26;color:#4077ad;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon:hover{background:#4077ad;color:#fff}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon.right{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-placeholder{font-size:13.5px;color:#adb5bd;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-placeholder{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-input>input{font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper{padding-right:6px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper .ng-arrow{border-color:#94a3b8 transparent transparent;border-width:5px 4px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-clear-wrapper{color:#94a3b8}::ng-deep .ng-dropdown-panel{border:1.5px solid #e2e8f0;border-radius:12px;box-shadow:0 8px 28px #0000001a,0 2px 8px #0000000f;overflow:hidden;margin-top:5px;z-index:9999!important;background:#fff!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{padding:6px}::ng-deep .ng-dropdown-panel .ng-option{border-radius:8px;padding:10px 13px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;transition:background .12s}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected{background:#eff6ff;color:#4077ad;font-weight:600}::ng-deep .ng-dropdown-panel .ng-option.ng-option-marked:not(.ng-option-selected){background:#f8fafc;color:#0f172a}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected.ng-option-marked{background:#dbeafe}.cc-group{margin-bottom:18px;padding-top:4px}.cc-group:last-child{margin-bottom:0}.cc-hidden-check{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.cc-select-all-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:99px;border:1.5px solid #e2e8f0;background:#f8fafc;font-size:12px;font-weight:700;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:10px;transition:background .18s,border-color .18s,color .18s}.cc-select-all-pill:hover:not(.cc-select-all-pill--on){background:#f1f5f9;border-color:#94a3b8}.cc-select-all-pill.cc-select-all-pill--on{background:#0f172a;border-color:#0f172a;color:#fff}.cc-sub-pills{display:flex;flex-wrap:wrap;gap:8px}.cc-sub-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:99px;border:1.5px solid #e2e8f0;background:#fff;font-size:12.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.cc-sub-pill:hover:not(.cc-sub-pill--on){background:#f8fafc;border-color:#94a3b8;color:#0f172a}.cc-sub-pill.cc-sub-pill--on{background:#eff6ff;border-color:#93c5fd;color:#4077ad;font-weight:600;box-shadow:0 0 0 3px #4077ad12}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: GooglePlaceDirective, selector: "[ngx-google-places-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "directive", type: MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { kind: "component", type: TermsConditionsComponent, selector: "app-terms-conditions", inputs: ["title", "branding", "PrivacyAndTerms"], outputs: ["metaLoaded"] }, { kind: "component", type: PrivacyPolicyComponent, selector: "app-privacy-policy", inputs: ["title", "branding", "PrivacyAndTerms"], outputs: ["metaLoaded"] }, { kind: "component", type: CredentialingComponent, selector: "app-credentialing", inputs: ["signatureFileId", "signatureUrl", "data"], outputs: ["back"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }] });
35827
35835
  }
35828
35836
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialProcessComponent, decorators: [{
35829
35837
  type: Component,
35830
- args: [{ selector: 'app-initial-process', standalone: false, template: "<div class=\"container\">\r\n <div *ngIf=\"isInitializing\" class=\"text-center p-5\">\r\n <div class=\"spinner-border text-primary\"></div>\r\n </div>\r\n <ng-container *ngIf=\"!isInitializing\">\r\n <div class=\"mb-4 logout-container\" *ngIf=\"showlogout\">\r\n <button class=\"logout-btn\" (click)=\"logout()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\r\n <polyline points=\"16 17 21 12 16 7\"/>\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\r\n </svg>\r\n Logout\r\n </button>\r\n </div>\r\n <div class=\"card pb-2 mob pr-5\" style=\"margin-bottom: 30px;\">\r\n <div [hidden]=\"view !== 1\">\r\n\r\n <!-- \u2500\u2500 Welcome Banner \u2500\u2500 -->\r\n <div class=\"v1-welcome\">\r\n <div class=\"v1-welcome-icon\">\r\n <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"/>\r\n <circle cx=\"9\" cy=\"7\" r=\"4\"/>\r\n <path d=\"M23 21v-2a4 4 0 00-3-3.87\"/>\r\n <path d=\"M16 3.13a4 4 0 010 7.75\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-welcome-text\">\r\n <h2 class=\"v1-welcome-title\">Welcome to <span class=\"v1-brand\">{{ branding.displayName }}</span></h2>\r\n <p class=\"v1-welcome-sub\">Our members and service providers rely on accurate info in your profile to connect\r\n you with work that suits your capabilities. Keep your profile complete, skills updated, licenses current,\r\n photos and logos professional, and schedule up to date.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Main Body: agreements + signature \u2500\u2500 -->\r\n <div class=\"v1-body\">\r\n\r\n <!-- Left: agreement cards -->\r\n <div class=\"v1-agreements\">\r\n\r\n <!-- Terms card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.acceptTerms\"\r\n [class.v1-card--invalid]=\"!model.acceptTerms && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Terms and Conditions</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.acceptTerms\"\r\n (click)=\"openModal(termsAndConditionsModel,'Terms and Conditions',$event)\">\r\n <svg *ngIf=\"model.acceptTerms\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ model.acceptTerms ? 'Agreed' : 'Read & Agree' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Privacy card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.privacy\"\r\n [class.v1-card--invalid]=\"!model.privacy && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Privacy Statement</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.privacy\"\r\n (click)=\"openModal(termsAndConditionsModel,'Privacy Statement',$event)\">\r\n <svg *ngIf=\"model.privacy\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ model.privacy ? 'Agreed' : 'Read & Agree' }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right: signature pad -->\r\n <div class=\"v1-signature\">\r\n <div class=\"v1-sig-header\">\r\n <span class=\"v1-sig-label\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"/>\r\n </svg>\r\n Signature\r\n </span>\r\n <button (click)=\"clearPad()\" class=\"v1-clear-btn\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n Clear\r\n </button>\r\n </div>\r\n <div class=\"v1-sig-pad\">\r\n <div [ngClass]=\"{'d-none': signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n <div [ngClass]=\"{'d-none': !signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <img [src]=\"signaturePadData?.publicUrl\" alt style=\"width:100%;height:120px;object-fit:contain;display:block;\">\r\n </div>\r\n <p class=\"v1-sig-hint\" *ngIf=\"!signaturePadData?.publicUrl && (!points || !points?.length)\">\r\n Draw your signature here\r\n </p>\r\n </div>\r\n <div *ngIf=\"validatePage==1 && (!points || !points?.length || points.length==0) && !fileData\"\r\n class=\"v1-error-msg\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n Signature is required\r\n </div>\r\n <div *ngIf=\"uploadError\" class=\"v1-error-msg\">{{ uploadError }}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u2500\u2500 Continue Button \u2500\u2500 -->\r\n <div class=\"v1-footer\">\r\n <button class=\"v1-continue-btn\" (click)=\"next(2)\"\r\n [disabled]=\"((!points || !points?.length || points.length==0) && !fileData && !signaturePadData?.publicUrl) || !model.acceptTerms || !model.privacy\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"view == 2\">\r\n\r\n <!-- \u2500\u2500 Role-select header \u2500\u2500 -->\r\n <div class=\"v2-header\">\r\n <div class=\"v2-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"v2-title\">Choose your role</h2>\r\n <p class=\"v2-sub\">Choose the areas you'd like to be part of \u2014 programs, services, events, or\r\n collaborations. Connect your business to others and prospective clients.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Role cards grid \u2500\u2500 -->\r\n <div class=\"v2-grid\">\r\n <ng-container *ngFor=\"let userType of userViewRoles\">\r\n <div class=\"v2-role-card\" [class.v2-role-card--active]=\"userType.value === selectedRoleValue\"\r\n (click)=\"selectedUserRole(userType)\">\r\n <div class=\"v2-role-img-wrap\">\r\n <img [src]=\"userType?.img\" alt=\"\">\r\n </div>\r\n <span class=\"v2-role-name\">{{userType.name}}</span>\r\n <span class=\"v2-role-check\" *ngIf=\"userType.value === selectedRoleValue\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Footer: Back + Continue \u2500\u2500 -->\r\n <div class=\"v2-footer\">\r\n <button class=\"v2-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"v2-continue-btn\" (click)=\"next(3)\" [disabled]=\"!isUserSelected || isLoadingSubCategories\">\r\n <span *ngIf=\"isLoadingSubCategories\" class=\"v1-spinner\"></span>\r\n <ng-container *ngIf=\"!isLoadingSubCategories\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </ng-container>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 3\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"/>\r\n <polyline points=\"9 22 9 12 15 12 15 22\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Business Information</h2>\r\n <p class=\"ip-sub\">Tell us about your company so we can connect you with the right work.</p>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"companyForm\">\r\n\r\n <!-- Company Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Details</p>\r\n <div class=\"ip-grid-2\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"companyName\">Company Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': (f.companyName.errors && validatePage == 3) || providerError}\"\r\n type=\"text\" class=\"ip-input\" id=\"companyName\" placeholder=\"Company Name\"\r\n formControlName=\"companyName\">\r\n <span *ngIf=\"f.companyName.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.companyName.errors.required\">Company Name is required</span>\r\n <span *ngIf=\"f.companyName.errors.minlength\">Minimum 2 characters</span>\r\n <span *ngIf=\"f.companyName.errors.maxLength\">Maximum 100 characters</span>\r\n </span>\r\n <span *ngIf=\"providerError\" class=\"ip-error\">{{ providerError }}</span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" name=\"inputPhone\" placeholder=\"Company Phone Number\"\r\n id=\"inputPhone\" autocomplete=\"off\" formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n (input)=\"formatPhone($event,companyForm)\"\r\n [ngClass]=\"{'ip-input--invalid': (f.phoneNumber.errors && validatePage == 3) || providerError}\">\r\n <span *ngIf=\"f.phoneNumber.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Address</p>\r\n <div class=\"ip-grid-2\" style=\"margin-bottom: 12px;\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.address1.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"businessAddress\" ngx-google-places-autocomplete [options]='options'\r\n (onAddressChange)=\"AddressChange($event)\" placeholder=\"Business Address 1\" formControlName=\"address1\">\r\n <span *ngIf=\"f.address1.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.address1.errors.required\">Business Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"businessAddress2\" placeholder=\"Business Address 2\">\r\n </div>\r\n </div>\r\n <div class=\"ip-grid-4\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.city.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"f.city.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.state.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"f.state.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': f.zipcode.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"f.zipcode.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.country.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"f.country.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Company Logo (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Logo</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Company Logo <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadLogo($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage2.click()\" [(ngModel)]=\"logoName\" readonly type=\"text\"\r\n class=\"ip-input\" placeholder=\"Click to upload company logo\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage2 class=\"ip-upload-icon\" (click)=\"uploadLogoInput.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isLogoRequired\" class=\"ip-error\">Please upload a company logo</span>\r\n <span *ngIf=\"isneeded\" class=\"ip-error\">Company Logo is required</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contractor Category -->\r\n <div *ngIf=\"selectedRole?.name == 'Contractor'\" class=\"ip-section\">\r\n <p class=\"ip-section-label\">Contractor Category</p>\r\n\r\n <!-- Category selector \u2014 ng-select logic intact, restyled as pill tag-input -->\r\n <div class=\"cc-select-wrap\">\r\n <ng-select [items]=\"contractorSubCategories\" bindLabel=\"name\" [multiple]=\"true\" [closeOnSelect]=\"false\"\r\n (ngModelChange)=\"changeContractor($event)\" [(ngModel)]=\"selectedContractorCategories\"\r\n >\r\n </ng-select>\r\n </div>\r\n\r\n <!-- Sub-items as pill chips per selected category -->\r\n <ng-container *ngFor=\"let item of selectedContractorCategories; let i=index\">\r\n <div class=\"cc-group\">\r\n\r\n <!-- \"Select all\" toggle pill for this category -->\r\n <label class=\"cc-select-all-pill\" [class.cc-select-all-pill--on]=\"item.selectAll\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selectAll\" [name]=\"item?.id\" [id]=\"item?.id\"\r\n (change)=\"selectAll($event,item?.items)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"item.selectAll\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ item?.name }} \u2014 Select all\r\n </label>\r\n\r\n <!-- Individual sub-item pills -->\r\n <div class=\"cc-sub-pills\">\r\n <label *ngFor=\"let subItem of item?.items\" class=\"cc-sub-pill\"\r\n [class.cc-sub-pill--on]=\"subItem.selected\">\r\n <input type=\"checkbox\" [(ngModel)]=\"subItem.selected\" [name]=\"subItem?.id\" [id]=\"subItem?.id\"\r\n (change)=\"unCheckedEvent($event,item)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"subItem.selected\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ subItem?.name }}\r\n </label>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(4)\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 4\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Your Profile</h2>\r\n <p class=\"ip-sub\">We need a few basics and a headshot to complete your profile.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Copy from provider toggle -->\r\n <div *ngIf=\"isBusiness\" class=\"ip-copy-row\">\r\n <input [(ngModel)]=\"isCopy\" type=\"checkbox\" name=\"isCopy\" id=\"isCopy\"\r\n class=\"ip-copy-check\" (change)=\"changeAddressUser()\">\r\n <label for=\"isCopy\" class=\"ip-copy-label\">Copy from Provider Information</label>\r\n </div>\r\n\r\n <form [formGroup]=\"userForm\">\r\n\r\n <!-- Personal Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Personal Details</p>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"firstName\">First Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.firstName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"First Name\" formControlName=\"firstName\" id=\"firstName\">\r\n <span *ngIf=\"u.firstName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.firstName.errors.required\">First Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"lastName\">Last Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.lastName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Last Name\" formControlName=\"lastName\" id=\"lastName\">\r\n <span *ngIf=\"u.lastName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.lastName.errors.required\">Last Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"email\">Email <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.email.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Email\" formControlName=\"email\" id=\"email\">\r\n <span *ngIf=\"u.email.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.email.errors.required\">Email is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Home Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Home Address</p>\r\n <div class=\"ip-field\" style=\"margin-bottom: 12px;\">\r\n <label class=\"ip-label\" for=\"address1\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.address1.errors && validatePage == 4}\"\r\n [options]=\"options\" (onAddressChange)=\"AddressChangeUser($event)\" type=\"text\" class=\"ip-input\"\r\n placeholder=\"Home Address 1\" formControlName=\"address1\" id=\"address1\" ngx-google-places-autocomplete>\r\n <span *ngIf=\"u.address1.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.address1.errors.required\">Home Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"homeAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"homeAddress2\" formControlName=\"address2\"\r\n placeholder=\"Home Address 2\">\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.city.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"u.city.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.state.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"u.state.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': u.zipcode.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"u.zipcode.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.country.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"u.country.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" (input)=\"formatPhone($event,userForm)\"\r\n name=\"inputPhone\" placeholder=\"Phone Number\" id=\"inputPhone\" autocomplete=\"off\"\r\n formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n [ngClass]=\"{'ip-input--invalid': u.phoneNumber.errors && validatePage == 4}\">\r\n <span *ngIf=\"u.phoneNumber.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Profile Picture (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Profile Picture</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Profile Picture <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadFile type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadUserImage($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage1.click()\" [(ngModel)]=\"fileName\" readonly type=\"text\"\r\n class=\"ip-input\" id=\"upload\" accept=\".png,.jpg,.jpeg\" placeholder=\"Click to upload profile picture\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage1 class=\"ip-upload-icon\" (click)=\"uploadFile.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isImageRequired\" class=\"ip-error\">Please upload a profile image</span>\r\n <span *ngIf=\"userError\" class=\"ip-error\">{{ userError }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(5)\" [disabled]=\"showLoader\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 5\">\r\n <div class=\"v5-wrap\">\r\n\r\n <!-- Success icon -->\r\n <div class=\"v5-icon\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/>\r\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\r\n </svg>\r\n </div>\r\n\r\n <h2 class=\"v5-title\">You're all set!</h2>\r\n <p class=\"v5-sub\">Account created successfully. Next step: complete your profile.</p>\r\n\r\n <!-- Info cards -->\r\n <div class=\"v5-cards\">\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">Profile completion is mandatory to participate in rosters, programs, requests, and platform workflows. Incomplete profiles will have limited access.</p>\r\n </div>\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon v5-card-icon--green\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">You may access your dashboard at any time, but full functionality is available only after profile completion.</p>\r\n </div>\r\n </div>\r\n\r\n <button (click)=\"dashboard()\" class=\"v5-cta\">\r\n Go to Dashboard\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 10\">\r\n <app-credentialing (back)=\"onCredentialingBack()\" [data]=\"credentialingData\" [signatureFileId]=\"signatureFileId\"\r\n [signatureUrl]=\"signatureUrl\"></app-credentialing>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n</div>\r\n\r\n<ng-template #termsAndConditionsModel>\r\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\r\n <div class=\"modal-content tc-modal\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"tc-modal-header\">\r\n <div class=\"tc-header-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\r\n </div>\r\n\r\n <!-- SCROLL HINT + PROGRESS -->\r\n <div class=\"tc-scroll-hint\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 12l7 7 7-7\"/>\r\n </svg>\r\n Scroll to the bottom to enable the <strong>&nbsp;Agree&nbsp;</strong> button\r\n <span class=\"tc-progress-pill\">{{ scrollProgress }}%</span>\r\n </div>\r\n <div class=\"tc-progress-bar\">\r\n <div class=\"tc-progress-fill\" [style.width.%]=\"scrollProgress\"></div>\r\n </div>\r\n\r\n <!-- SCROLLABLE CONTENT -->\r\n <div class=\"tc-scroll-wrapper\">\r\n <div class=\"tc-modal-body\"\r\n (scroll)=\"onTermsScroll($event)\"\r\n (wheel)=\"stopAutoScroll()\"\r\n (touchstart)=\"stopAutoScroll()\">\r\n <ng-container *ngIf=\"termsAndConditionTitle == 'Terms and Conditions'\">\r\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\">\r\n </app-terms-conditions>\r\n </ng-container>\r\n <ng-container *ngIf=\"termsAndConditionTitle != 'Terms and Conditions'\">\r\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\">\r\n </app-privacy-policy>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Floating scroll-to-bottom button -->\r\n <button class=\"tc-scroll-fab\" *ngIf=\"!isAgreeEnabled\" (click)=\"scrollToBottomClick($event)\"\r\n title=\"Scroll to bottom\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 15l7 7 7-7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"tc-modal-footer\">\r\n <button type=\"button\" class=\"tc-btn tc-btn-decline\"\r\n (click)=\"decline(termsAndConditionTitle); modelRef.hide();\">\r\n Decline\r\n </button>\r\n <button type=\"button\" class=\"tc-btn tc-btn-agree\"\r\n [disabled]=\"!isAgreeEnabled\"\r\n (click)=\"agree(termsAndConditionTitle); modelRef.hide();\">\r\n I Agree\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.brand-name{font-weight:700;font-size:calc(100% + 4px)}.spinner{width:38px;height:38px;border:dotted white;border-top:2px solid #f6f6f6;border-radius:62%;animation:spin 1.7s linear infinite;margin:-9px 0 0 -28px}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .backdrop{background-color:transparent!important}.filter-black{filter:brightness(.4)!important}.footer-view{margin-top:3rem;margin-left:0;margin-right:0}.footer-signature{margin-top:9rem}.slider-view{width:11rem;margin-left:1px}.container{margin-top:80px}.container .card{border-radius:1.25rem}.container .header{padding:33px 10px 0}.container .header .logo{width:15%;height:80%}.container .form-control{padding:.75rem 1rem;border-color:#a1a1a1}.container .form-control:focus{color:#000;box-shadow:none;border-color:#a1a1a1!important}.container .form-control::placeholder{font-weight:500;font-size:12px;color:#a1a1a1}.container .link{color:#4077ad}.container .link-signup{font-weight:bolder}.container .form-check-label{margin-bottom:0;padding-top:9px}.container .content-view{margin-top:10%}.container .content-description{margin-top:25%}.container .tag-content{color:#fff9e8;margin-left:9%}.container .tag-content p{color:#fff9e8}.container .form-check-input:checked{background-color:#000;border-color:#000}.container .img-tick{margin:-31px 12px 0 -35px}.container .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #000000}.container .form-check-input:focus{box-shadow:none}.container input[type=checkbox]{accent-color:#000000}.term-list{padding:48px 60px 6px 0;margin-left:30px;color:\"#1f1f1fdb\"}.add-tab{padding:75px 75px 6px 1px;margin-left:50px;color:\"#1f1f1fdb\"}.add-tab-view{padding:75px 75px 6px 1px;margin-left:80px;color:\"#1f1f1fdb\"}.inspect-add{margin-top:3rem}.add-btn{font-size:16px;border-radius:5px;transition:.2s;padding:.25rem .5rem;background:#fff;border:1px solid rgba(148,147,147,.1882352941);color:#444;line-height:48px;box-shadow:0 1px 9px #98a2b3;width:9rem}.add-btn:hover{border:1px solid rgba(148,147,147,.1882352941);box-shadow:none}.agree{padding:0 0 8px 47px}.agree .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #98A2B3;width:14px;height:14px;margin:5px 9px 0 -35px}.agree .form-check-input:focus{box-shadow:none}.agree .form-check-input:checked{background-color:#000;border-color:#000}.agree .invalid-feedback{font-size:10px!important;margin:0 0 0 21px}.checkmark{vertical-align:text-bottom;color:#98a2b3;font-weight:500;font-size:12px}.term-signature{padding-left:16rem;padding-right:65px;position:absolute;margin:150px 0 0 50%}.participate-tab{height:135px;width:142px}.card-design{height:147px;width:147px;padding-left:10px;margin-left:42px;background:#fff0;border:2px solid #98A2B3;box-shadow:0 0 4px #98a2b3;border-radius:27px;margin-bottom:42px}.upload{height:39px;margin-top:-4px;width:126px;font-size:12px}.participate-tab{margin-top:-25px}.slider{width:14rem;margin-left:69px}.btn-clear{background:#d3dae6;color:#98a2b3;font-size:12px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;width:46%;line-height:28px}.btn-close{background:#f1f4fa;color:#98a2b3;font-size:17px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;font-weight:500;width:116px;color:#737a87;line-height:28px}.view-logo{padding-top:1%;padding-bottom:4%;text-align:center}.back-btn{border-radius:45px;height:41px}.next{background:#4077ad;border-radius:30px;height:60px;width:60px;border:white}.profile-field{margin-top:-10px}.profile-field input{line-height:30px;margin:-10px 3px 3px}.load-page{padding:21px 49px 13px 34px}.sign-img{width:291px;height:95px;border-radius:8px;border:1px solid rgba(179,178,178,.33);margin-top:19px}.upload-image{height:16px;width:16px;position:absolute;margin-left:66rem;margin-top:-39px}.para-comma{font-weight:500}.go-btn{border-radius:45px;height:50px;padding:0 20px;background:#4077ad;border:1px solid #4077ad;color:#fff;line-height:28px;font-size:14px;font-weight:500}.text-label{color:#747b83;font-weight:500}.form{padding:20px;border-radius:5px}.form-control:focus{color:#000;box-shadow:none;border-color:#848484!important}.form-control::placeholder{font-weight:500;font-size:12px;color:#bec1be;padding-left:10px}.btn-primary:active{background-color:#50575e}@media screen and (min-width: 500px) and (max-width: 769px){.content-view{background:#0c1620;width:44rem;margin:31px 0 0!important;padding:28px 32px 17px 71px!important;border-radius:29px}.upload-image{margin-left:25rem!important}}@media screen and (min-width: 768px) and (max-width: 1024px){.back-btn{height:31px;width:82px;position:absolute;margin-left:-53px}.back-tab{position:absolute;margin-left:-87px;height:37px}.go-btn{width:175px;height:44px}.term-signature{padding-left:10px}.upload-image{margin-left:40rem}}@media screen and (min-width: 374px) and (max-width: 426px){.head-logo{width:216px;padding-bottom:16px}.slider{visibility:hidden}.back-btn{height:31px;width:82px;position:absolute;margin-left:73px;margin-top:23px}.go-btn{width:175px;height:44px}.upload-image{margin-left:16rem}.term-signature{margin:84% 0 7px 4%}}@media screen and (min-width: 320px) and (max-width: 426px){.footer-signature{margin-top:20rem}.login .head-logo{padding:16px 2px 0;width:38%!important;height:40%!important}.container{margin-top:5px!important}.card{padding:2px!important}.tag-content{margin:3% 0 0!important;background-color:#121b24;border-radius:13px}.img-tick{margin:3px!important}.slider{visibility:hidden}.load-page{padding:0}.head-logo{width:216px;padding-bottom:16px}.back-btn{height:26px;width:71px;position:absolute;margin-left:-17rem!important;font-size:10px;margin-top:23px}.go-btn{width:142px;height:36px;margin-right:-28px;font-size:10px}.add-tab,.add-tab-view{padding:30px 33px 2px 3px;margin-left:15px}.add-btn{width:6rem}.slider-tab{visibility:hidden}.back-tab{margin-left:-14rem;margin-top:1px;font-size:14px;height:39px}.participate-tab{height:96px;width:87px}.card-design{height:124px;width:125px;padding-left:17px;margin-left:30px}.term-signature{padding:22px 22px 13px 27px}.term-list{padding:43px 10px 10px 3px;margin-left:0;text-align:-webkit-center}}@media screen and (min-width: 320px) and (max-width: 376px){.agree{padding:0 0 8px 25px}.participate-tab{height:96px;width:87px}.card-design{height:109px;width:97px;padding-left:4px;margin-left:10px}.card-design h6{font-size:10px;padding-left:14px;font-weight:600}.sign-img{width:270px}.term-list{padding:20px 20px 6px 4px;margin-left:13px}}@media screen and (min-width: 320px) and (max-width: 350px){.upload-image{height:13px;width:11px;margin-left:10rem;margin-top:-35px}.btn-clear{width:92px}.term-signature{margin:84% 0 7px 4%}}.disabled-btn{cursor:not-allowed!important;background:#4077ad!important;color:#fff!important}.modal-dialog .modal-content{border-radius:12px;background:#fff!important;border:1px solid rgba(128,128,128,.3294117647)!important}.title-popup{font-size:18px;color:#0c1620}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:22px 28px 20px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:40px;height:40px;background:#ffffff1f;border-radius:11px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-family:Inter,system-ui,sans-serif;font-size:17px;font-weight:700;color:#fff;letter-spacing:-.01em;margin:0;flex:1}.tc-scroll-hint{display:flex;align-items:center;gap:7px;padding:9px 28px;background:#f0f9ff;border-bottom:none;font-size:12px;color:#4077ad;font-family:Inter,system-ui,sans-serif;letter-spacing:.01em;flex-shrink:0}.tc-scroll-hint svg{flex-shrink:0}.tc-scroll-hint strong{font-weight:700}.tc-scroll-hint .tc-progress-pill{margin-left:auto;background:#4077ad;color:#fff;font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 9px;border-radius:99px;min-width:42px;text-align:center;transition:background .2s ease}.tc-progress-bar{height:3px;background:#e0f2fe;flex-shrink:0}.tc-progress-bar .tc-progress-fill{height:100%;background:linear-gradient(90deg,#4077ad,#38bdf8);border-radius:0 99px 99px 0;transition:width .12s ease}.tc-scroll-wrapper{position:relative;flex:1 1 auto;overflow:hidden;display:flex;flex-direction:column}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-scroll-fab{position:absolute;bottom:20px;right:20px;width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px #4077ad80;z-index:10;animation:tc-fab-bounce 2s ease-in-out infinite;transition:transform .18s ease,box-shadow .18s ease}.tc-scroll-fab:hover{transform:translateY(-3px) scale(1.1);box-shadow:0 8px 24px #4077ad99;animation:none}@keyframes tc-fab-bounce{0%,to{transform:translateY(0);box-shadow:0 4px 18px #2563eb80}50%{transform:translateY(5px);box-shadow:0 2px 10px #2563eb59}}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:16px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-family:Inter,system-ui,sans-serif;font-size:13.5px;font-weight:600;letter-spacing:.015em;padding:10px 26px;border-radius:10px;border:none;cursor:pointer;transition:background .18s ease,box-shadow .18s ease,transform .15s ease}.tc-btn.tc-btn-decline{background:#f1f5f9;color:#64748b;border:1.5px solid #e2e8f0}.tc-btn.tc-btn-decline:hover{background:#e2e8f0;color:#475569}.tc-btn.tc-btn-agree{background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;box-shadow:0 3px 10px #2563eb59}.tc-btn.tc-btn-agree:hover:not(:disabled){background:linear-gradient(135deg,#2d5f8a,#4077ad);box-shadow:0 5px 16px #2563eb73;transform:translateY(-1px)}.tc-btn.tc-btn-agree:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}ul.term-list-data li{padding-bottom:5px;font-size:13px;font-weight:500;line-height:21px}ol,ul,dl{margin-top:0;margin-bottom:1rem}::ng-deep .modal-content{background:none!important;width:100%;border:none}.hidden-view{display:none}.header-container{position:relative;padding:20px}.view-logo{text-align:center}.logout-button{top:20px;right:20px;position:absolute}.logout-button button{background:none;border:none;font-size:16px;display:flex;align-items:center;cursor:pointer}.logout-button img{margin-right:5px;height:20px}.user-card{align-items:center;color:#4077ad;cursor:pointer}.user-cards-active{background:#4077ad;color:#fff}.save-btn.upload{border:1px solid #4077AD;background-color:#4077ad;color:#fff;border-radius:5px;background:#4077ad;padding:4px 10px;display:inline-flex;align-items:center;gap:6px}.save-btn.upload img{filter:brightness(0) invert(1)}.form-check.agree{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px}.form-check.agree .form-check-input{margin-top:4px;flex-shrink:0}.form-check.agree .form-check-label{line-height:1.4;cursor:pointer;white-space:normal}.spinner-16{width:16px;height:16px}.h6-buttons{display:flex;align-items:center;gap:8px}.form-check.agree{display:flex;align-items:flex-start;margin-bottom:14px}.form-check-input{position:absolute;opacity:0;cursor:pointer}.form-check-label{position:relative;padding-left:28px;cursor:pointer;font-size:14px;line-height:20px;color:#212529;-webkit-user-select:none;user-select:none}.form-check-label:before{content:\"\";position:absolute;left:0;top:8px;width:18px;height:18px;border:2px solid #adb5bd;border-radius:4px;background:#fff;transition:all .2s ease}.form-check-label:after{content:\"\";position:absolute;left:5px;top:10px;width:6px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .15s ease}.form-check-input:checked+.form-check-label:before{background-color:#4077ad;border-color:#4077ad}.form-check-input:checked+.form-check-label:after{transform:rotate(45deg) scale(1)}.form-check-label:hover:before{border-color:#4077ad}.form-check-input:focus+.form-check-label:before{box-shadow:0 0 0 3px #4077ad40}.form-check-input.is-invalid+.form-check-label:before{border-color:#dc3545}.form-check-input.is-invalid:checked+.form-check-label:before{background-color:#dc3545}.invalid-feedback{display:block;font-size:12px;margin-left:7px;margin-top:4px}::ng-deep .modal-dialog{max-width:750px}.user-cards-active{background-color:#4077ad;color:#fff;border:2px solid #4077AD}body.modal-open{overflow:hidden!important}.modal{z-index:1055!important}.modal-backdrop{z-index:1050!important}.modal-dialog{margin:auto;pointer-events:auto}.modal-content{position:relative;z-index:1060}.logout-container{display:flex;justify-content:flex-end}.logout-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 16px;border-radius:8px;font-size:13px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#64748b;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,background .18s,border-color .18s,box-shadow .18s}.logout-btn:hover{color:#dc2626;background:#fff5f5;border-color:#fca5a5;box-shadow:0 2px 8px #dc26261a}.logout-btn:active{transform:scale(.97)}@media screen and (max-width: 767px){.term-signature{padding-left:3rem;padding-right:0;position:unset;margin:0}.footer-signature{margin-top:0rem}.disabled-btn{position:absolute;bottom:13px;right:24px}.next{height:46px;width:46px;position:absolute;bottom:21px;right:35px}.mob{padding-bottom:4.5rem!important}.checkmark{width:85%}.terms-fixed-modal{width:unset}::ng-deep .privacy-policy-modal .logo-section{margin-bottom:0!important}.add-tab-view{padding:30px 25px 6px;margin-left:0}.user-card{width:96%}.footer .btn-mob{display:flex;align-items:center}.back-btn{position:absolute;bottom:21px;left:10px}.actions{margin:50px 34px 1px}}@media screen and (min-width: 768px) and (max-width: 1024px){.footer-signature{margin-top:3rem}}.v1-welcome{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-welcome-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v1-welcome-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v1-brand{color:#4077ad}.v1-welcome-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v1-body{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:0 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-body{grid-template-columns:1fr;padding:0 16px 16px}}.v1-agreements{display:flex;flex-direction:column;gap:12px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#c7d3e2;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:38px;height:38px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef;color:#4077ad}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13.5px;font-weight:600;color:#0f172a;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7280;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:8px;font-size:12px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.v1-signature{display:flex;flex-direction:column;gap:10px}.v1-sig-header{display:flex;align-items:center;justify-content:space-between}.v1-sig-label{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#0f172a;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-clear-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#6b7280;background:transparent;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;transition:color .18s,border-color .18s}.v1-clear-btn:hover{color:#dc2626;border-color:#fca5a5}.v1-sig-pad{position:relative;border-radius:12px;border:1.5px dashed #cbd5e1;background:#f8fafc;overflow:hidden;min-height:120px}.v1-sig-pad canvas{display:block;cursor:crosshair;width:100%;height:120px}.v1-sig-hint{position:absolute;bottom:8px;left:50%;transform:translate(-50%);font-size:10.5px;color:#c0cad8;pointer-events:none;margin:0;white-space:nowrap;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-error-msg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-footer{padding:8px 32px 20px;display:flex;justify-content:flex-end;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-footer{padding:8px 16px 20px}}.v1-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:12px 28px;border-radius:10px;font-size:14px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad59;transition:transform .15s,box-shadow .15s;min-width:148px;justify-content:center}.v1-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad73}.v1-continue-btn:active:not(:disabled){transform:translateY(0)}.v1-continue-btn:disabled,.v1-continue-btn.disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v1-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:v1-spin .65s linear infinite}@keyframes v1-spin{to{transform:rotate(360deg)}}@media (max-width: 767px){.v1-welcome{padding:20px 16px 14px;gap:12px}.v1-welcome-icon{width:40px;height:40px}.v1-welcome-title{font-size:17px}}.v2-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-header{padding:20px 16px 14px;gap:12px}}.v2-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v2-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v2-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px;padding:0 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));padding:0 16px 20px;gap:10px}}.v2-role-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px 12px 16px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;box-shadow:0 1px 3px #0000000a;text-align:center}.v2-role-card:hover{border-color:#93c5fd;box-shadow:0 4px 16px #4077ad1a;transform:translateY(-2px)}.v2-role-card.v2-role-card--active{border-color:#4077ad;background:#eff6ff;box-shadow:0 0 0 3px #4077ad1f,0 4px 16px #4077ad1f}.v2-role-img-wrap{width:64px;height:64px;border-radius:50%;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:background .18s,border-color .18s}.v2-role-img-wrap img{width:44px;height:44px;object-fit:contain;display:block}.v2-role-card--active .v2-role-img-wrap{background:#dbeafe;border-color:#93c5fd}.v2-role-name{font-size:12px;font-weight:600;color:#0f172a;line-height:1.3;text-align:center}.v2-role-card--active .v2-role-name{color:#4077ad}.v2-role-check{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;background:#4077ad;color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #4077ad59}.v2-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-footer{padding:8px 16px 20px}}.v2-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s}.v2-back-btn:hover{color:#0f172a;border-color:#94a3b8}.v2-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 24px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.v2-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.v2-continue-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.ip-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-header{padding:20px 16px 12px;gap:12px}}.ip-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.ip-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-section{margin:0 24px 14px;background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:18px 20px 16px;box-shadow:0 1px 4px #0000000a}@media (max-width: 767px){.ip-section{margin:0 12px 10px;padding:14px}}.ip-section-label{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#6b7280;margin:0 0 12px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media (max-width: 767px){.ip-grid-2{grid-template-columns:1fr}}.ip-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-3{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-3{grid-template-columns:1fr}}.ip-grid-4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-4{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-4{grid-template-columns:1fr}}.ip-field{display:flex;flex-direction:column;gap:5px}.ip-label{font-size:12px;font-weight:600;color:#374151;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;line-height:1.3}.ip-required{color:#dc2626;margin-left:2px;font-weight:700}.ip-input{width:100%;height:44px;padding:0 14px;border:1.5px solid #e2e8f0;border-radius:9px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a;background:#fff;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.ip-input::placeholder{color:#adb5bd;font-weight:400}.ip-input:focus{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.ip-input.ip-input--invalid{border-color:#dc2626;background:#fff8f8}.ip-input.ip-input--invalid:focus{box-shadow:0 0 0 3px #dc26261a}.ip-input[readonly]{cursor:pointer;background:#f8fafc}.ip-error{display:flex;align-items:center;gap:4px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-upload-wrap{position:relative;display:flex;align-items:center}.ip-upload-icon{position:absolute;right:14px;width:16px;height:16px;cursor:pointer;opacity:.45;transition:opacity .18s}.ip-upload-icon:hover{opacity:.85}.ip-copy-row{display:flex;align-items:center;gap:10px;margin:0 24px 12px;padding:11px 16px;background:#eff6ff;border:1.5px solid #bfdbfe;border-radius:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-copy-row{margin:0 12px 10px}}.ip-copy-check{width:16px;height:16px;accent-color:#4077AD;cursor:pointer;flex-shrink:0}.ip-copy-label{font-size:13px;font-weight:500;color:#0f172a;cursor:pointer;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-user-select:none;user-select:none}.ip-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 24px 28px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-footer{padding:8px 16px 24px}}.ip-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s,background .18s}.ip-back-btn:hover{color:#0f172a;border-color:#94a3b8;background:#f1f5f9}.ip-next-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 26px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.ip-next-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.ip-next-btn:active:not(:disabled){transform:translateY(0)}.ip-next-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v5-wrap{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 32px 40px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v5-wrap{padding:36px 20px 32px}}.v5-icon{width:72px;height:72px;border-radius:50%;background:linear-gradient(135deg,#dcfce7,#bbf7d0);border:1.5px solid #86efac;display:flex;align-items:center;justify-content:center;color:#16a34a;margin-bottom:20px;box-shadow:0 0 0 8px #22c55e14}.v5-title{font-size:26px;font-weight:800;color:#0f172a;margin:0 0 10px;letter-spacing:-.025em;line-height:1.2}.v5-sub{font-size:14px;color:#374151;margin:0 0 28px;line-height:1.6;max-width:480px}.v5-cards{display:flex;flex-direction:column;gap:12px;width:100%;max-width:520px;margin-bottom:32px;text-align:left}.v5-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border-radius:12px;border:1.5px solid #e2e8f0;background:#f8fafc;box-shadow:0 1px 3px #0000000a}.v5-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad}.v5-card-icon.v5-card-icon--green{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.v5-card-text{font-size:13px;color:#374151;line-height:1.6;margin:0}.v5-cta{display:inline-flex;align-items:center;gap:10px;padding:13px 32px;border-radius:10px;font-size:14.5px;font-weight:600;font-family:inherit;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 16px #4077ad52;transition:transform .15s,box-shadow .15s}.v5-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px #4077ad6b}.v5-cta:active{transform:translateY(0)}.cc-select-wrap{margin-bottom:20px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container{border:1.5px solid #e2e8f0;border-radius:10px;min-height:48px;padding:5px 10px;background:#fff;box-shadow:none;cursor:text;transition:border-color .18s,box-shadow .18s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container:hover{border-color:#94a3b8}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple.ng-select-focused .ng-select-container{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-container{flex-wrap:wrap;gap:6px;padding:2px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value{display:inline-flex;flex-direction:row;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:99px;padding:4px 8px 4px 13px;font-size:12px;font-weight:600;color:#4077ad;margin:0;line-height:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-label{order:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon{display:inline-flex;align-items:center;justify-content:center;order:2;width:16px;height:16px;border-radius:50%;font-size:12px;font-weight:700;line-height:1;padding:0;background:#4077ad26;color:#4077ad;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon:hover{background:#4077ad;color:#fff}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon.right{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-placeholder{font-size:13.5px;color:#adb5bd;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-placeholder{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-input>input{font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper{padding-right:6px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper .ng-arrow{border-color:#94a3b8 transparent transparent;border-width:5px 4px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-clear-wrapper{color:#94a3b8}::ng-deep .ng-dropdown-panel{border:1.5px solid #e2e8f0;border-radius:12px;box-shadow:0 8px 28px #0000001a,0 2px 8px #0000000f;overflow:hidden;margin-top:5px;z-index:9999!important;background:#fff!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{padding:6px}::ng-deep .ng-dropdown-panel .ng-option{border-radius:8px;padding:10px 13px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;transition:background .12s}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected{background:#eff6ff;color:#4077ad;font-weight:600}::ng-deep .ng-dropdown-panel .ng-option.ng-option-marked:not(.ng-option-selected){background:#f8fafc;color:#0f172a}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected.ng-option-marked{background:#dbeafe}.cc-group{margin-bottom:18px;padding-top:4px}.cc-group:last-child{margin-bottom:0}.cc-hidden-check{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.cc-select-all-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:99px;border:1.5px solid #e2e8f0;background:#f8fafc;font-size:12px;font-weight:700;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:10px;transition:background .18s,border-color .18s,color .18s}.cc-select-all-pill:hover:not(.cc-select-all-pill--on){background:#f1f5f9;border-color:#94a3b8}.cc-select-all-pill.cc-select-all-pill--on{background:#0f172a;border-color:#0f172a;color:#fff}.cc-sub-pills{display:flex;flex-wrap:wrap;gap:8px}.cc-sub-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:99px;border:1.5px solid #e2e8f0;background:#fff;font-size:12.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.cc-sub-pill:hover:not(.cc-sub-pill--on){background:#f8fafc;border-color:#94a3b8;color:#0f172a}.cc-sub-pill.cc-sub-pill--on{background:#eff6ff;border-color:#93c5fd;color:#4077ad;font-weight:600;box-shadow:0 0 0 3px #4077ad12}\n"] }]
35838
+ args: [{ selector: 'app-initial-process', standalone: false, template: "<div class=\"container\">\r\n <div *ngIf=\"isInitializing\" class=\"text-center p-5\">\r\n <div class=\"spinner-border text-primary\"></div>\r\n </div>\r\n <ng-container *ngIf=\"!isInitializing\">\r\n <div class=\"mb-4 logout-container\" *ngIf=\"showlogout\">\r\n <button class=\"logout-btn\" (click)=\"logout()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\r\n <polyline points=\"16 17 21 12 16 7\"/>\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\r\n </svg>\r\n Logout\r\n </button>\r\n </div>\r\n <div class=\"card pb-2 mob pr-5\" style=\"margin-bottom: 30px;\">\r\n <div [hidden]=\"view !== 1\">\r\n\r\n <!-- \u2500\u2500 Welcome Banner \u2500\u2500 -->\r\n <div class=\"v1-welcome\">\r\n <div class=\"v1-welcome-icon\">\r\n <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"/>\r\n <circle cx=\"9\" cy=\"7\" r=\"4\"/>\r\n <path d=\"M23 21v-2a4 4 0 00-3-3.87\"/>\r\n <path d=\"M16 3.13a4 4 0 010 7.75\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-welcome-text\">\r\n <h2 class=\"v1-welcome-title\">Welcome to <span class=\"v1-brand\">{{ branding.displayName }}</span></h2>\r\n <p class=\"v1-welcome-sub\">Our members and service providers rely on accurate info in your profile to connect\r\n you with work that suits your capabilities. Keep your profile complete, skills updated, licenses current,\r\n photos and logos professional, and schedule up to date.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Main Body: agreements + signature \u2500\u2500 -->\r\n <div class=\"v1-body\">\r\n\r\n <!-- Left: agreement cards -->\r\n <div class=\"v1-agreements\">\r\n\r\n <!-- Terms card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.acceptTerms\"\r\n [class.v1-card--invalid]=\"!model.acceptTerms && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Terms and Conditions</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.acceptTerms\"\r\n [disabled]=\"isTermsLoading\"\r\n (click)=\"openModal(termsAndConditionsModel,'Terms and Conditions',$event)\">\r\n <span class=\"v1-agree-spinner\" *ngIf=\"isTermsLoading\"></span>\r\n <svg *ngIf=\"!isTermsLoading && model.acceptTerms\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ isTermsLoading ? 'Loading...' : (model.acceptTerms ? 'Agreed' : 'Read & Agree') }}\r\n </button>\r\n </div>\r\n\r\n <!-- Privacy card -->\r\n <div class=\"v1-agreement-card\" [class.v1-card--agreed]=\"model.privacy\"\r\n [class.v1-card--invalid]=\"!model.privacy && validatePage==1\">\r\n <div class=\"v1-card-icon\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/>\r\n </svg>\r\n </div>\r\n <div class=\"v1-card-body\">\r\n <p class=\"v1-card-title\">Privacy Statement</p>\r\n <p class=\"v1-card-sub\">Read and accept to continue</p>\r\n </div>\r\n <button type=\"button\" class=\"v1-agree-btn\" [class.v1-agree-btn--done]=\"model.privacy\"\r\n [disabled]=\"isPrivacyLoading\"\r\n (click)=\"openModal(termsAndConditionsModel,'Privacy Statement',$event)\">\r\n <span class=\"v1-agree-spinner\" *ngIf=\"isPrivacyLoading\"></span>\r\n <svg *ngIf=\"!isPrivacyLoading && model.privacy\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ isPrivacyLoading ? 'Loading...' : (model.privacy ? 'Agreed' : 'Read & Agree') }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right: signature pad -->\r\n <div class=\"v1-signature\">\r\n <div class=\"v1-sig-header\">\r\n <span class=\"v1-sig-label\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"/>\r\n </svg>\r\n Signature\r\n </span>\r\n <button (click)=\"clearPad()\" class=\"v1-clear-btn\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n Clear\r\n </button>\r\n </div>\r\n <div class=\"v1-sig-pad\">\r\n <div [ngClass]=\"{'d-none': signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n <div [ngClass]=\"{'d-none': !signaturePadData?.publicUrl}\" style=\"width:100%\">\r\n <img [src]=\"signaturePadData?.publicUrl\" alt style=\"width:100%;height:120px;object-fit:contain;display:block;\">\r\n </div>\r\n <p class=\"v1-sig-hint\" *ngIf=\"!signaturePadData?.publicUrl && (!points || !points?.length)\">\r\n Draw your signature here\r\n </p>\r\n </div>\r\n <div *ngIf=\"validatePage==1 && (!points || !points?.length || points.length==0) && !fileData\"\r\n class=\"v1-error-msg\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n Signature is required\r\n </div>\r\n <div *ngIf=\"uploadError\" class=\"v1-error-msg\">{{ uploadError }}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u2500\u2500 Continue Button \u2500\u2500 -->\r\n <div class=\"v1-footer\">\r\n <button class=\"v1-continue-btn\" (click)=\"next(2)\"\r\n [disabled]=\"((!points || !points?.length || points.length==0) && !fileData && !signaturePadData?.publicUrl) || !model.acceptTerms || !model.privacy\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <ng-container *ngIf=\"view == 2\">\r\n\r\n <!-- \u2500\u2500 Role-select header \u2500\u2500 -->\r\n <div class=\"v2-header\">\r\n <div class=\"v2-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"v2-title\">Choose your role</h2>\r\n <p class=\"v2-sub\">Choose the areas you'd like to be part of \u2014 programs, services, events, or\r\n collaborations. Connect your business to others and prospective clients.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Role cards grid \u2500\u2500 -->\r\n <div class=\"v2-grid\">\r\n <ng-container *ngFor=\"let userType of userViewRoles\">\r\n <div class=\"v2-role-card\" [class.v2-role-card--active]=\"userType.value === selectedRoleValue\"\r\n (click)=\"selectedUserRole(userType)\">\r\n <div class=\"v2-role-img-wrap\">\r\n <img [src]=\"userType?.img\" alt=\"\">\r\n </div>\r\n <span class=\"v2-role-name\">{{userType.name}}</span>\r\n <span class=\"v2-role-check\" *ngIf=\"userType.value === selectedRoleValue\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- \u2500\u2500 Footer: Back + Continue \u2500\u2500 -->\r\n <div class=\"v2-footer\">\r\n <button class=\"v2-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"v2-continue-btn\" (click)=\"next(3)\" [disabled]=\"!isUserSelected || isLoadingSubCategories\">\r\n <span *ngIf=\"isLoadingSubCategories\" class=\"v1-spinner\"></span>\r\n <ng-container *ngIf=\"!isLoadingSubCategories\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </ng-container>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 3\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"/>\r\n <polyline points=\"9 22 9 12 15 12 15 22\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Business Information</h2>\r\n <p class=\"ip-sub\">Tell us about your company so we can connect you with the right work.</p>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"companyForm\">\r\n\r\n <!-- Company Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Details</p>\r\n <div class=\"ip-grid-2\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"companyName\">Company Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': (f.companyName.errors && validatePage == 3) || providerError}\"\r\n type=\"text\" class=\"ip-input\" id=\"companyName\" placeholder=\"Company Name\"\r\n formControlName=\"companyName\">\r\n <span *ngIf=\"f.companyName.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.companyName.errors.required\">Company Name is required</span>\r\n <span *ngIf=\"f.companyName.errors.minlength\">Minimum 2 characters</span>\r\n <span *ngIf=\"f.companyName.errors.maxLength\">Maximum 100 characters</span>\r\n </span>\r\n <span *ngIf=\"providerError\" class=\"ip-error\">{{ providerError }}</span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" name=\"inputPhone\" placeholder=\"Company Phone Number\"\r\n id=\"inputPhone\" autocomplete=\"off\" formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n (input)=\"formatPhone($event,companyForm)\"\r\n [ngClass]=\"{'ip-input--invalid': (f.phoneNumber.errors && validatePage == 3) || providerError}\">\r\n <span *ngIf=\"f.phoneNumber.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Address</p>\r\n <div class=\"ip-grid-2\" style=\"margin-bottom: 12px;\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.address1.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"businessAddress\" ngx-google-places-autocomplete [options]='options'\r\n (onAddressChange)=\"AddressChange($event)\" placeholder=\"Business Address 1\" formControlName=\"address1\">\r\n <span *ngIf=\"f.address1.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.address1.errors.required\">Business Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"businessAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"businessAddress2\" placeholder=\"Business Address 2\">\r\n </div>\r\n </div>\r\n <div class=\"ip-grid-4\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.city.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"f.city.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.state.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"f.state.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': f.zipcode.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"f.zipcode.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': f.country.errors && validatePage == 3}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"f.country.errors && validatePage == 3\" class=\"ip-error\">\r\n <span *ngIf=\"f.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Company Logo (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Company Logo</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Company Logo <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadLogo($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage2.click()\" [(ngModel)]=\"logoName\" readonly type=\"text\"\r\n class=\"ip-input\" placeholder=\"Click to upload company logo\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage2 class=\"ip-upload-icon\" (click)=\"uploadLogoInput.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isLogoRequired\" class=\"ip-error\">Please upload a company logo</span>\r\n <span *ngIf=\"isneeded\" class=\"ip-error\">Company Logo is required</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contractor Category -->\r\n <div *ngIf=\"selectedRole?.name == 'Contractor'\" class=\"ip-section\">\r\n <p class=\"ip-section-label\">Contractor Category</p>\r\n\r\n <!-- Category selector \u2014 ng-select logic intact, restyled as pill tag-input -->\r\n <div class=\"cc-select-wrap\">\r\n <ng-select [items]=\"contractorSubCategories\" bindLabel=\"name\" [multiple]=\"true\" [closeOnSelect]=\"false\"\r\n (ngModelChange)=\"changeContractor($event)\" [(ngModel)]=\"selectedContractorCategories\"\r\n >\r\n </ng-select>\r\n </div>\r\n\r\n <!-- Sub-items as pill chips per selected category -->\r\n <ng-container *ngFor=\"let item of selectedContractorCategories; let i=index\">\r\n <div class=\"cc-group\">\r\n\r\n <!-- \"Select all\" toggle pill for this category -->\r\n <label class=\"cc-select-all-pill\" [class.cc-select-all-pill--on]=\"item.selectAll\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selectAll\" [name]=\"item?.id\" [id]=\"item?.id\"\r\n (change)=\"selectAll($event,item?.items)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"item.selectAll\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ item?.name }} \u2014 Select all\r\n </label>\r\n\r\n <!-- Individual sub-item pills -->\r\n <div class=\"cc-sub-pills\">\r\n <label *ngFor=\"let subItem of item?.items\" class=\"cc-sub-pill\"\r\n [class.cc-sub-pill--on]=\"subItem.selected\">\r\n <input type=\"checkbox\" [(ngModel)]=\"subItem.selected\" [name]=\"subItem?.id\" [id]=\"subItem?.id\"\r\n (change)=\"unCheckedEvent($event,item)\" class=\"cc-hidden-check\">\r\n <svg *ngIf=\"subItem.selected\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"/>\r\n </svg>\r\n {{ subItem?.name }}\r\n </label>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(4)\">\r\n Continue\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 4\">\r\n\r\n <!-- Header -->\r\n <div class=\"ip-header\">\r\n <div class=\"ip-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\"/>\r\n <path d=\"M6 20v-2a4 4 0 014-4h4a4 4 0 014 4v2\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h2 class=\"ip-title\">Your Profile</h2>\r\n <p class=\"ip-sub\">We need a few basics and a headshot to complete your profile.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Copy from provider toggle -->\r\n <div *ngIf=\"isBusiness\" class=\"ip-copy-row\">\r\n <input [(ngModel)]=\"isCopy\" type=\"checkbox\" name=\"isCopy\" id=\"isCopy\"\r\n class=\"ip-copy-check\" (change)=\"changeAddressUser()\">\r\n <label for=\"isCopy\" class=\"ip-copy-label\">Copy from Provider Information</label>\r\n </div>\r\n\r\n <form [formGroup]=\"userForm\">\r\n\r\n <!-- Personal Details -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Personal Details</p>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"firstName\">First Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.firstName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"First Name\" formControlName=\"firstName\" id=\"firstName\">\r\n <span *ngIf=\"u.firstName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.firstName.errors.required\">First Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"lastName\">Last Name <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.lastName.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Last Name\" formControlName=\"lastName\" id=\"lastName\">\r\n <span *ngIf=\"u.lastName.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.lastName.errors.required\">Last Name is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"email\">Email <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.email.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" placeholder=\"Email\" formControlName=\"email\" id=\"email\">\r\n <span *ngIf=\"u.email.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.email.errors.required\">Email is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Home Address -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Home Address</p>\r\n <div class=\"ip-field\" style=\"margin-bottom: 12px;\">\r\n <label class=\"ip-label\" for=\"address1\">Address Line 1 <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.address1.errors && validatePage == 4}\"\r\n [options]=\"options\" (onAddressChange)=\"AddressChangeUser($event)\" type=\"text\" class=\"ip-input\"\r\n placeholder=\"Home Address 1\" formControlName=\"address1\" id=\"address1\" ngx-google-places-autocomplete>\r\n <span *ngIf=\"u.address1.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.address1.errors.required\">Home Address 1 is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-grid-3\">\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"homeAddress2\">Address Line 2</label>\r\n <input type=\"text\" class=\"ip-input\" id=\"homeAddress2\" formControlName=\"address2\"\r\n placeholder=\"Home Address 2\">\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"City\">City <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.city.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"City\" placeholder=\"City\" formControlName=\"city\">\r\n <span *ngIf=\"u.city.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.city.errors.required\">City is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"State\">State <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.state.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"State\" placeholder=\"State\" formControlName=\"state\">\r\n <span *ngIf=\"u.state.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.state.errors.required\">State is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Zipcode\">Zipcode <span class=\"ip-required\">*</span></label>\r\n <input [textMask]=\"{ mask: zipcodeMask }\"\r\n [ngClass]=\"{'ip-input--invalid': u.zipcode.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Zipcode\" placeholder=\"Zipcode\" formControlName=\"zipcode\">\r\n <span *ngIf=\"u.zipcode.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.zipcode.errors.required\">Zipcode is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"Country\">Country <span class=\"ip-required\">*</span></label>\r\n <input [ngClass]=\"{'ip-input--invalid': u.country.errors && validatePage == 4}\"\r\n type=\"text\" class=\"ip-input\" id=\"Country\" placeholder=\"Country\" formControlName=\"country\">\r\n <span *ngIf=\"u.country.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.country.errors.required\">Country is required</span>\r\n </span>\r\n </div>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\" for=\"inputPhone\">Phone Number <span class=\"ip-required\">*</span></label>\r\n <input class=\"ip-input\" type=\"text\" (input)=\"formatPhone($event,userForm)\"\r\n name=\"inputPhone\" placeholder=\"Phone Number\" id=\"inputPhone\" autocomplete=\"off\"\r\n formControlName=\"phoneNumber\" [maxLength]=\"14\"\r\n [ngClass]=\"{'ip-input--invalid': u.phoneNumber.errors && validatePage == 4}\">\r\n <span *ngIf=\"u.phoneNumber.errors && validatePage == 4\" class=\"ip-error\">\r\n <span *ngIf=\"u.phoneNumber.errors.required\">Phone Number is required</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n\r\n <!-- Profile Picture (intentionally outside formGroup) -->\r\n <div class=\"ip-section\">\r\n <p class=\"ip-section-label\">Profile Picture</p>\r\n <div class=\"ip-field\">\r\n <label class=\"ip-label\">Profile Picture <span class=\"ip-required\">*</span></label>\r\n <div class=\"ip-upload-wrap\">\r\n <input #uploadFile type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"uploadUserImage($event)\"\r\n class=\"upload-initial-input rounded-circle opacity-0 position-absolute\" />\r\n <input (click)=\"uploadImage1.click()\" [(ngModel)]=\"fileName\" readonly type=\"text\"\r\n class=\"ip-input\" id=\"upload\" accept=\".png,.jpg,.jpeg\" placeholder=\"Click to upload profile picture\">\r\n <small class=\"text-muted d-block\" style=\"font-size: 11px;\">Allowed formats: PNG, JPG, JPEG</small>\r\n <img #uploadImage1 class=\"ip-upload-icon\" (click)=\"uploadFile.click()\"\r\n src=\"assets/images/icons/upload.svg\" alt=\"Upload\">\r\n </div>\r\n <span *ngIf=\"isImageRequired\" class=\"ip-error\">Please upload a profile image</span>\r\n <span *ngIf=\"userError\" class=\"ip-error\">{{ userError }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ip-footer\">\r\n <button class=\"ip-back-btn\" (click)=\"previous()\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M19 12H5M12 5l-7 7 7 7\"/>\r\n </svg>\r\n Back\r\n </button>\r\n <button class=\"ip-next-btn\" (click)=\"next(5)\" [disabled]=\"showLoader\">\r\n <span *ngIf=\"!showLoader\">Continue</span>\r\n <span *ngIf=\"showLoader\" class=\"v1-spinner\"></span>\r\n <svg *ngIf=\"!showLoader\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 5\">\r\n <div class=\"v5-wrap\">\r\n\r\n <!-- Success icon -->\r\n <div class=\"v5-icon\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/>\r\n <polyline points=\"22 4 12 14.01 9 11.01\"/>\r\n </svg>\r\n </div>\r\n\r\n <h2 class=\"v5-title\">You're all set!</h2>\r\n <p class=\"v5-sub\">Account created successfully. Next step: complete your profile.</p>\r\n\r\n <!-- Info cards -->\r\n <div class=\"v5-cards\">\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">Profile completion is mandatory to participate in rosters, programs, requests, and platform workflows. Incomplete profiles will have limited access.</p>\r\n </div>\r\n <div class=\"v5-card\">\r\n <div class=\"v5-card-icon v5-card-icon--green\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/>\r\n </svg>\r\n </div>\r\n <p class=\"v5-card-text\">You may access your dashboard at any time, but full functionality is available only after profile completion.</p>\r\n </div>\r\n </div>\r\n\r\n <button (click)=\"dashboard()\" class=\"v5-cta\">\r\n Go to Dashboard\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M5 12h14M12 5l7 7-7 7\"/>\r\n </svg>\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"view == 10\">\r\n <app-credentialing (back)=\"onCredentialingBack()\" [data]=\"credentialingData\" [signatureFileId]=\"signatureFileId\"\r\n [signatureUrl]=\"signatureUrl\"></app-credentialing>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n</div>\r\n\r\n<ng-template #termsAndConditionsModel>\r\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\r\n <div class=\"modal-content tc-modal\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"tc-modal-header\">\r\n <div class=\"tc-header-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n </svg>\r\n </div>\r\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\r\n <span class=\"tc-modal-meta\" *ngIf=\"legalMeta\">Last Modified: {{ legalMeta.createdDate | date:'MMM d, y, h:mm:ss a' }}, V{{ legalMeta.versionName }}</span>\r\n </div>\r\n\r\n\r\n <div class=\"tc-scroll-wrapper\">\r\n <div class=\"tc-modal-body\"\r\n (scroll)=\"onTermsScroll($event)\">\r\n <ng-container *ngIf=\"termsAndConditionTitle == 'Terms and Conditions'\">\r\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\"\r\n (metaLoaded)=\"onLegalMetaLoaded($event)\">\r\n </app-terms-conditions>\r\n </ng-container>\r\n <ng-container *ngIf=\"termsAndConditionTitle != 'Terms and Conditions'\">\r\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\" [branding]=\"branding\"\r\n (metaLoaded)=\"onLegalMetaLoaded($event)\">\r\n </app-privacy-policy>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Floating scroll-to-bottom button -->\r\n <button class=\"tc-scroll-fab\" *ngIf=\"!isAgreeEnabled && legalMeta\" (click)=\"scrollToBottomClick($event)\"\r\n title=\"Scroll to bottom\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 5v14M5 15l7 7 7-7\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"tc-modal-footer\">\r\n <button type=\"button\" class=\"tc-btn tc-btn-decline\"\r\n (click)=\"decline(termsAndConditionTitle); modelRef.hide();\">\r\n Decline\r\n </button>\r\n <button type=\"button\" class=\"tc-btn tc-btn-agree\"\r\n [disabled]=\"!isAgreeEnabled\"\r\n (click)=\"agree(termsAndConditionTitle); modelRef.hide();\">\r\n I Agree\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.brand-name{font-weight:700;font-size:calc(100% + 4px)}.spinner{width:38px;height:38px;border:dotted white;border-top:2px solid #f6f6f6;border-radius:62%;animation:spin 1.7s linear infinite;margin:-9px 0 0 -28px}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .backdrop{background-color:transparent!important}.filter-black{filter:brightness(.4)!important}.footer-view{margin-top:3rem;margin-left:0;margin-right:0}.footer-signature{margin-top:9rem}.slider-view{width:11rem;margin-left:1px}.container{margin-top:80px}.container .card{border-radius:1.25rem}.container .header{padding:33px 10px 0}.container .header .logo{width:15%;height:80%}.container .form-control{padding:.75rem 1rem;border-color:#a1a1a1}.container .form-control:focus{color:#000;box-shadow:none;border-color:#a1a1a1!important}.container .form-control::placeholder{font-weight:500;font-size:12px;color:#a1a1a1}.container .link{color:#4077ad}.container .link-signup{font-weight:bolder}.container .form-check-label{margin-bottom:0;padding-top:9px}.container .content-view{margin-top:10%}.container .content-description{margin-top:25%}.container .tag-content{color:#fff9e8;margin-left:9%}.container .tag-content p{color:#fff9e8}.container .form-check-input:checked{background-color:#000;border-color:#000}.container .img-tick{margin:-31px 12px 0 -35px}.container .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #000000}.container .form-check-input:focus{box-shadow:none}.container input[type=checkbox]{accent-color:#000000}.term-list{padding:48px 60px 6px 0;margin-left:30px;color:\"#1f1f1fdb\"}.add-tab{padding:75px 75px 6px 1px;margin-left:50px;color:\"#1f1f1fdb\"}.add-tab-view{padding:75px 75px 6px 1px;margin-left:80px;color:\"#1f1f1fdb\"}.inspect-add{margin-top:3rem}.add-btn{font-size:16px;border-radius:5px;transition:.2s;padding:.25rem .5rem;background:#fff;border:1px solid rgba(148,147,147,.1882352941);color:#444;line-height:48px;box-shadow:0 1px 9px #98a2b3;width:9rem}.add-btn:hover{border:1px solid rgba(148,147,147,.1882352941);box-shadow:none}.agree{padding:0 0 8px 47px}.agree .form-check-input[type=checkbox]{border-radius:2px;border:2px solid #98A2B3;width:14px;height:14px;margin:5px 9px 0 -35px}.agree .form-check-input:focus{box-shadow:none}.agree .form-check-input:checked{background-color:#000;border-color:#000}.agree .invalid-feedback{font-size:10px!important;margin:0 0 0 21px}.checkmark{vertical-align:text-bottom;color:#98a2b3;font-weight:500;font-size:12px}.term-signature{padding-left:16rem;padding-right:65px;position:absolute;margin:150px 0 0 50%}.participate-tab{height:135px;width:142px}.card-design{height:147px;width:147px;padding-left:10px;margin-left:42px;background:#fff0;border:2px solid #98A2B3;box-shadow:0 0 4px #98a2b3;border-radius:27px;margin-bottom:42px}.upload{height:39px;margin-top:-4px;width:126px;font-size:12px}.participate-tab{margin-top:-25px}.slider{width:14rem;margin-left:69px}.btn-clear{background:#d3dae6;color:#98a2b3;font-size:12px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;width:46%;line-height:28px}.btn-close{background:#f1f4fa;color:#98a2b3;font-size:17px;border-radius:5px;transition:.2s;padding:6px;border:none;height:auto;font-weight:500;width:116px;color:#737a87;line-height:28px}.view-logo{padding-top:1%;padding-bottom:4%;text-align:center}.back-btn{border-radius:45px;height:41px}.next{background:#4077ad;border-radius:30px;height:60px;width:60px;border:white}.profile-field{margin-top:-10px}.profile-field input{line-height:30px;margin:-10px 3px 3px}.load-page{padding:21px 49px 13px 34px}.sign-img{width:291px;height:95px;border-radius:8px;border:1px solid rgba(179,178,178,.33);margin-top:19px}.upload-image{height:16px;width:16px;position:absolute;margin-left:66rem;margin-top:-39px}.para-comma{font-weight:500}.go-btn{border-radius:45px;height:50px;padding:0 20px;background:#4077ad;border:1px solid #4077ad;color:#fff;line-height:28px;font-size:14px;font-weight:500}.text-label{color:#747b83;font-weight:500}.form{padding:20px;border-radius:5px}.form-control:focus{color:#000;box-shadow:none;border-color:#848484!important}.form-control::placeholder{font-weight:500;font-size:12px;color:#bec1be;padding-left:10px}.btn-primary:active{background-color:#50575e}@media screen and (min-width: 500px) and (max-width: 769px){.content-view{background:#0c1620;width:44rem;margin:31px 0 0!important;padding:28px 32px 17px 71px!important;border-radius:29px}.upload-image{margin-left:25rem!important}}@media screen and (min-width: 768px) and (max-width: 1024px){.back-btn{height:31px;width:82px;position:absolute;margin-left:-53px}.back-tab{position:absolute;margin-left:-87px;height:37px}.go-btn{width:175px;height:44px}.term-signature{padding-left:10px}.upload-image{margin-left:40rem}}@media screen and (min-width: 374px) and (max-width: 426px){.head-logo{width:216px;padding-bottom:16px}.slider{visibility:hidden}.back-btn{height:31px;width:82px;position:absolute;margin-left:73px;margin-top:23px}.go-btn{width:175px;height:44px}.upload-image{margin-left:16rem}.term-signature{margin:84% 0 7px 4%}}@media screen and (min-width: 320px) and (max-width: 426px){.footer-signature{margin-top:20rem}.login .head-logo{padding:16px 2px 0;width:38%!important;height:40%!important}.container{margin-top:5px!important}.card{padding:2px!important}.tag-content{margin:3% 0 0!important;background-color:#121b24;border-radius:13px}.img-tick{margin:3px!important}.slider{visibility:hidden}.load-page{padding:0}.head-logo{width:216px;padding-bottom:16px}.back-btn{height:26px;width:71px;position:absolute;margin-left:-17rem!important;font-size:10px;margin-top:23px}.go-btn{width:142px;height:36px;margin-right:-28px;font-size:10px}.add-tab,.add-tab-view{padding:30px 33px 2px 3px;margin-left:15px}.add-btn{width:6rem}.slider-tab{visibility:hidden}.back-tab{margin-left:-14rem;margin-top:1px;font-size:14px;height:39px}.participate-tab{height:96px;width:87px}.card-design{height:124px;width:125px;padding-left:17px;margin-left:30px}.term-signature{padding:22px 22px 13px 27px}.term-list{padding:43px 10px 10px 3px;margin-left:0;text-align:-webkit-center}}@media screen and (min-width: 320px) and (max-width: 376px){.agree{padding:0 0 8px 25px}.participate-tab{height:96px;width:87px}.card-design{height:109px;width:97px;padding-left:4px;margin-left:10px}.card-design h6{font-size:10px;padding-left:14px;font-weight:600}.sign-img{width:270px}.term-list{padding:20px 20px 6px 4px;margin-left:13px}}@media screen and (min-width: 320px) and (max-width: 350px){.upload-image{height:13px;width:11px;margin-left:10rem;margin-top:-35px}.btn-clear{width:92px}.term-signature{margin:84% 0 7px 4%}}.disabled-btn{cursor:not-allowed!important;background:#4077ad!important;color:#fff!important}.modal-dialog .modal-content{border-radius:12px;background:#fff!important;border:1px solid rgba(128,128,128,.3294117647)!important}.title-popup{font-size:18px;color:#0c1620}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 28px 14px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.tc-modal-header .tc-modal-title{font-family:Inter,system-ui,sans-serif;font-size:17px;font-weight:700;color:#fff;letter-spacing:-.01em;margin:0;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tc-modal-header .tc-modal-meta{font-weight:600;font-size:11px;color:#fff;flex-shrink:0;white-space:nowrap}@media screen and (max-width: 767px){.tc-modal-header .tc-modal-header{flex-flow:column;align-items:center;text-align:center}.tc-modal-header .tc-modal-title{flex:1 1 100%;white-space:normal}.tc-modal-header .tc-modal-meta{flex:1 1 100%;opacity:.85}}.tc-scroll-hint{display:flex;align-items:center;gap:7px;padding:9px 28px;background:#f0f9ff;border-bottom:none;font-size:12px;color:#4077ad;font-family:Inter,system-ui,sans-serif;letter-spacing:.01em;flex-shrink:0}.tc-scroll-hint svg{flex-shrink:0}.tc-scroll-hint strong{font-weight:700}.tc-scroll-hint .tc-progress-pill{margin-left:auto;background:#4077ad;color:#fff;font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 9px;border-radius:99px;min-width:42px;text-align:center;transition:background .2s ease}.tc-progress-bar{height:3px;background:#e0f2fe;flex-shrink:0}.tc-progress-bar .tc-progress-fill{height:100%;background:linear-gradient(90deg,#4077ad,#38bdf8);border-radius:0 99px 99px 0;transition:width .12s ease}.tc-scroll-wrapper{position:relative;flex:1 1 auto;overflow:hidden;display:flex;flex-direction:column}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-scroll-fab{position:absolute;bottom:20px;right:20px;width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px #4077ad80;z-index:10;animation:tc-fab-bounce 2s ease-in-out infinite;transition:transform .18s ease,box-shadow .18s ease}.tc-scroll-fab:hover{transform:translateY(-3px) scale(1.1);box-shadow:0 8px 24px #4077ad99;animation:none}@keyframes tc-fab-bounce{0%,to{transform:translateY(0);box-shadow:0 4px 18px #2563eb80}50%{transform:translateY(5px);box-shadow:0 2px 10px #2563eb59}}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:16px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-family:Inter,system-ui,sans-serif;font-size:13.5px;font-weight:600;letter-spacing:.015em;padding:10px 26px;border-radius:10px;border:none;cursor:pointer;transition:background .18s ease,box-shadow .18s ease,transform .15s ease}.tc-btn.tc-btn-decline{background:#f1f5f9;color:#64748b;border:1.5px solid #e2e8f0}.tc-btn.tc-btn-decline:hover{background:#e2e8f0;color:#475569}.tc-btn.tc-btn-agree{background:linear-gradient(135deg,#4077ad 0% 100%);color:#fff;box-shadow:0 3px 10px #2563eb59}.tc-btn.tc-btn-agree:hover:not(:disabled){background:linear-gradient(135deg,#2d5f8a,#4077ad);box-shadow:0 5px 16px #2563eb73;transform:translateY(-1px)}.tc-btn.tc-btn-agree:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}ul.term-list-data li{padding-bottom:5px;font-size:13px;font-weight:500;line-height:21px}ol,ul,dl{margin-top:0;margin-bottom:1rem}::ng-deep .modal-content{background:none!important;width:100%;border:none}.hidden-view{display:none}.header-container{position:relative;padding:20px}.view-logo{text-align:center}.logout-button{top:20px;right:20px;position:absolute}.logout-button button{background:none;border:none;font-size:16px;display:flex;align-items:center;cursor:pointer}.logout-button img{margin-right:5px;height:20px}.user-card{align-items:center;color:#4077ad;cursor:pointer}.user-cards-active{background:#4077ad;color:#fff}.save-btn.upload{border:1px solid #4077AD;background-color:#4077ad;color:#fff;border-radius:5px;background:#4077ad;padding:4px 10px;display:inline-flex;align-items:center;gap:6px}.save-btn.upload img{filter:brightness(0) invert(1)}.form-check.agree{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px}.form-check.agree .form-check-input{margin-top:4px;flex-shrink:0}.form-check.agree .form-check-label{line-height:1.4;cursor:pointer;white-space:normal}.spinner-16{width:16px;height:16px}.h6-buttons{display:flex;align-items:center;gap:8px}.form-check.agree{display:flex;align-items:flex-start;margin-bottom:14px}.form-check-input{position:absolute;opacity:0;cursor:pointer}.form-check-label{position:relative;padding-left:28px;cursor:pointer;font-size:14px;line-height:20px;color:#212529;-webkit-user-select:none;user-select:none}.form-check-label:before{content:\"\";position:absolute;left:0;top:8px;width:18px;height:18px;border:2px solid #adb5bd;border-radius:4px;background:#fff;transition:all .2s ease}.form-check-label:after{content:\"\";position:absolute;left:5px;top:10px;width:6px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .15s ease}.form-check-input:checked+.form-check-label:before{background-color:#4077ad;border-color:#4077ad}.form-check-input:checked+.form-check-label:after{transform:rotate(45deg) scale(1)}.form-check-label:hover:before{border-color:#4077ad}.form-check-input:focus+.form-check-label:before{box-shadow:0 0 0 3px #4077ad40}.form-check-input.is-invalid+.form-check-label:before{border-color:#dc3545}.form-check-input.is-invalid:checked+.form-check-label:before{background-color:#dc3545}.invalid-feedback{display:block;font-size:12px;margin-left:7px;margin-top:4px}::ng-deep .modal-dialog{max-width:750px}.user-cards-active{background-color:#4077ad;color:#fff;border:2px solid #4077AD}body.modal-open{overflow:hidden!important}.modal{z-index:1055!important}.modal-backdrop{z-index:1050!important}.modal-dialog{margin:auto;pointer-events:auto}.modal-content{position:relative;z-index:1060}.logout-container{display:flex;justify-content:flex-end}.logout-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 16px;border-radius:8px;font-size:13px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#64748b;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,background .18s,border-color .18s,box-shadow .18s}.logout-btn:hover{color:#dc2626;background:#fff5f5;border-color:#fca5a5;box-shadow:0 2px 8px #dc26261a}.logout-btn:active{transform:scale(.97)}@media screen and (max-width: 767px){.term-signature{padding-left:3rem;padding-right:0;position:unset;margin:0}.footer-signature{margin-top:0rem}.disabled-btn{position:absolute;bottom:13px;right:24px}.next{height:46px;width:46px;position:absolute;bottom:21px;right:35px}.mob{padding-bottom:4.5rem!important}.checkmark{width:85%}.terms-fixed-modal{width:unset}::ng-deep .privacy-policy-modal .logo-section{margin-bottom:0!important}.add-tab-view{padding:30px 25px 6px;margin-left:0}.user-card{width:96%}.footer .btn-mob{display:flex;align-items:center}.back-btn{position:absolute;bottom:21px;left:10px}.actions{margin:50px 34px 1px}}@media screen and (min-width: 768px) and (max-width: 1024px){.footer-signature{margin-top:3rem}}.v1-welcome{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-welcome-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v1-welcome-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v1-brand{color:#4077ad}.v1-welcome-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v1-body{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:0 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-body{grid-template-columns:1fr;padding:0 16px 16px}}.v1-agreements{display:flex;flex-direction:column;gap:12px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#c7d3e2;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:38px;height:38px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef;color:#4077ad}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13.5px;font-weight:600;color:#0f172a;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7280;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:8px;font-size:12px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.v1-agree-btn:disabled{opacity:.7;cursor:not-allowed}.v1-agree-btn:disabled:hover{background:transparent;color:#4077ad}.v1-agree-spinner{width:12px;height:12px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;flex-shrink:0;animation:v1-agree-spin .7s linear infinite}@keyframes v1-agree-spin{to{transform:rotate(360deg)}}.v1-signature{display:flex;flex-direction:column;gap:10px}.v1-sig-header{display:flex;align-items:center;justify-content:space-between}.v1-sig-label{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#0f172a;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-clear-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#6b7280;background:transparent;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;transition:color .18s,border-color .18s}.v1-clear-btn:hover{color:#dc2626;border-color:#fca5a5}.v1-sig-pad{position:relative;border-radius:12px;border:1.5px dashed #cbd5e1;background:#f8fafc;overflow:hidden;min-height:120px}.v1-sig-pad canvas{display:block;cursor:crosshair;width:100%;height:120px}.v1-sig-hint{position:absolute;bottom:8px;left:50%;transform:translate(-50%);font-size:10.5px;color:#c0cad8;pointer-events:none;margin:0;white-space:nowrap;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-error-msg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.v1-footer{padding:8px 32px 20px;display:flex;justify-content:flex-end;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v1-footer{padding:8px 16px 20px}}.v1-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:12px 28px;border-radius:10px;font-size:14px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad59;transition:transform .15s,box-shadow .15s;min-width:148px;justify-content:center}.v1-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad73}.v1-continue-btn:active:not(:disabled){transform:translateY(0)}.v1-continue-btn:disabled,.v1-continue-btn.disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v1-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:v1-spin .65s linear infinite}@keyframes v1-spin{to{transform:rotate(360deg)}}@media (max-width: 767px){.v1-welcome{padding:20px 16px 14px;gap:12px}.v1-welcome-icon{width:40px;height:40px}.v1-welcome-title{font-size:17px}}.v2-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-header{padding:20px 16px 14px;gap:12px}}.v2-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.v2-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em}.v2-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0}.v2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px;padding:0 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));padding:0 16px 20px;gap:10px}}.v2-role-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px 12px 16px;border-radius:14px;border:1.5px solid #e2e8f0;background:#fff;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;box-shadow:0 1px 3px #0000000a;text-align:center}.v2-role-card:hover{border-color:#93c5fd;box-shadow:0 4px 16px #4077ad1a;transform:translateY(-2px)}.v2-role-card.v2-role-card--active{border-color:#4077ad;background:#eff6ff;box-shadow:0 0 0 3px #4077ad1f,0 4px 16px #4077ad1f}.v2-role-img-wrap{width:64px;height:64px;border-radius:50%;background:#f8fafc;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:background .18s,border-color .18s}.v2-role-img-wrap img{width:44px;height:44px;object-fit:contain;display:block}.v2-role-card--active .v2-role-img-wrap{background:#dbeafe;border-color:#93c5fd}.v2-role-name{font-size:12px;font-weight:600;color:#0f172a;line-height:1.3;text-align:center}.v2-role-card--active .v2-role-name{color:#4077ad}.v2-role-check{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;background:#4077ad;color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #4077ad59}.v2-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 32px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v2-footer{padding:8px 16px 20px}}.v2-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s}.v2-back-btn:hover{color:#0f172a;border-color:#94a3b8}.v2-continue-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 24px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.v2-continue-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.v2-continue-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.ip-header{display:flex;align-items:flex-start;gap:16px;padding:28px 32px 16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-header{padding:20px 16px 12px;gap:12px}}.ip-header-icon{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad;margin-top:2px}.ip-title{font-size:20px;font-weight:700;color:#0f172a;margin:0 0 6px;line-height:1.25;letter-spacing:-.02em;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-sub{font-size:13.5px;color:#374151;line-height:1.65;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-section{margin:0 24px 14px;background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:18px 20px 16px;box-shadow:0 1px 4px #0000000a}@media (max-width: 767px){.ip-section{margin:0 12px 10px;padding:14px}}.ip-section-label{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#6b7280;margin:0 0 12px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media (max-width: 767px){.ip-grid-2{grid-template-columns:1fr}}.ip-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-3{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-3{grid-template-columns:1fr}}.ip-grid-4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}@media (max-width: 1024px){.ip-grid-4{grid-template-columns:1fr 1fr}}@media (max-width: 599px){.ip-grid-4{grid-template-columns:1fr}}.ip-field{display:flex;flex-direction:column;gap:5px}.ip-label{font-size:12px;font-weight:600;color:#374151;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;line-height:1.3}.ip-required{color:#dc2626;margin-left:2px;font-weight:700}.ip-input{width:100%;height:44px;padding:0 14px;border:1.5px solid #e2e8f0;border-radius:9px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a;background:#fff;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.ip-input::placeholder{color:#adb5bd;font-weight:400}.ip-input:focus{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.ip-input.ip-input--invalid{border-color:#dc2626;background:#fff8f8}.ip-input.ip-input--invalid:focus{box-shadow:0 0 0 3px #dc26261a}.ip-input[readonly]{cursor:pointer;background:#f8fafc}.ip-error{display:flex;align-items:center;gap:4px;font-size:11.5px;font-weight:500;color:#dc2626;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.ip-upload-wrap{position:relative;display:flex;align-items:center}.ip-upload-icon{position:absolute;right:14px;width:16px;height:16px;cursor:pointer;opacity:.45;transition:opacity .18s}.ip-upload-icon:hover{opacity:.85}.ip-copy-row{display:flex;align-items:center;gap:10px;margin:0 24px 12px;padding:11px 16px;background:#eff6ff;border:1.5px solid #bfdbfe;border-radius:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-copy-row{margin:0 12px 10px}}.ip-copy-check{width:16px;height:16px;accent-color:#4077AD;cursor:pointer;flex-shrink:0}.ip-copy-label{font-size:13px;font-weight:500;color:#0f172a;cursor:pointer;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-user-select:none;user-select:none}.ip-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:8px 24px 28px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.ip-footer{padding:8px 16px 24px}}.ip-back-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 20px;border-radius:9px;font-size:13.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#6b7280;background:#f8fafc;border:1.5px solid #e2e8f0;cursor:pointer;transition:color .18s,border-color .18s,background .18s}.ip-back-btn:hover{color:#0f172a;border-color:#94a3b8;background:#f1f5f9}.ip-next-btn{display:inline-flex;align-items:center;gap:9px;padding:10px 26px;border-radius:9px;font-size:13.5px;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 14px #4077ad4d;transition:transform .15s,box-shadow .15s}.ip-next-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px #4077ad66}.ip-next-btn:active:not(:disabled){transform:translateY(0)}.ip-next-btn:disabled{background:#e2e8f0;color:#94a3b8;box-shadow:none;cursor:not-allowed}.v5-wrap{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 32px 40px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}@media (max-width: 767px){.v5-wrap{padding:36px 20px 32px}}.v5-icon{width:72px;height:72px;border-radius:50%;background:linear-gradient(135deg,#dcfce7,#bbf7d0);border:1.5px solid #86efac;display:flex;align-items:center;justify-content:center;color:#16a34a;margin-bottom:20px;box-shadow:0 0 0 8px #22c55e14}.v5-title{font-size:26px;font-weight:800;color:#0f172a;margin:0 0 10px;letter-spacing:-.025em;line-height:1.2}.v5-sub{font-size:14px;color:#374151;margin:0 0 28px;line-height:1.6;max-width:480px}.v5-cards{display:flex;flex-direction:column;gap:12px;width:100%;max-width:520px;margin-bottom:32px;text-align:left}.v5-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border-radius:12px;border:1.5px solid #e2e8f0;background:#f8fafc;box-shadow:0 1px 3px #0000000a}.v5-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;color:#4077ad}.v5-card-icon.v5-card-icon--green{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.v5-card-text{font-size:13px;color:#374151;line-height:1.6;margin:0}.v5-cta{display:inline-flex;align-items:center;gap:10px;padding:13px 32px;border-radius:10px;font-size:14.5px;font-weight:600;font-family:inherit;color:#fff;background:linear-gradient(135deg,#4077ad 0% 100%);border:none;cursor:pointer;box-shadow:0 4px 16px #4077ad52;transition:transform .15s,box-shadow .15s}.v5-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px #4077ad6b}.v5-cta:active{transform:translateY(0)}.cc-select-wrap{margin-bottom:20px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container{border:1.5px solid #e2e8f0;border-radius:10px;min-height:48px;padding:5px 10px;background:#fff;box-shadow:none;cursor:text;transition:border-color .18s,box-shadow .18s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container:hover{border-color:#94a3b8}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple.ng-select-focused .ng-select-container{border-color:#4077ad;box-shadow:0 0 0 3px #4077ad1a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-container{flex-wrap:wrap;gap:6px;padding:2px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value{display:inline-flex;flex-direction:row;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:99px;padding:4px 8px 4px 13px;font-size:12px;font-weight:600;color:#4077ad;margin:0;line-height:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-label{order:1}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon{display:inline-flex;align-items:center;justify-content:center;order:2;width:16px;height:16px;border-radius:50%;font-size:12px;font-weight:700;line-height:1;padding:0;background:#4077ad26;color:#4077ad;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon:hover{background:#4077ad;color:#fff}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-value-icon.right{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-placeholder{font-size:13.5px;color:#adb5bd;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-placeholder{display:none}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-input>input{font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#0f172a}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper{padding-right:6px}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-arrow-wrapper .ng-arrow{border-color:#94a3b8 transparent transparent;border-width:5px 4px 0}.cc-select-wrap ::ng-deep .ng-select.ng-select-multiple .ng-clear-wrapper{color:#94a3b8}::ng-deep .ng-dropdown-panel{border:1.5px solid #e2e8f0;border-radius:12px;box-shadow:0 8px 28px #0000001a,0 2px 8px #0000000f;overflow:hidden;margin-top:5px;z-index:9999!important;background:#fff!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{padding:6px}::ng-deep .ng-dropdown-panel .ng-option{border-radius:8px;padding:10px 13px;font-size:13.5px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;transition:background .12s}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected{background:#eff6ff;color:#4077ad;font-weight:600}::ng-deep .ng-dropdown-panel .ng-option.ng-option-marked:not(.ng-option-selected){background:#f8fafc;color:#0f172a}::ng-deep .ng-dropdown-panel .ng-option.ng-option-selected.ng-option-marked{background:#dbeafe}.cc-group{margin-bottom:18px;padding-top:4px}.cc-group:last-child{margin-bottom:0}.cc-hidden-check{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.cc-select-all-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:99px;border:1.5px solid #e2e8f0;background:#f8fafc;font-size:12px;font-weight:700;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:10px;transition:background .18s,border-color .18s,color .18s}.cc-select-all-pill:hover:not(.cc-select-all-pill--on){background:#f1f5f9;border-color:#94a3b8}.cc-select-all-pill.cc-select-all-pill--on{background:#0f172a;border-color:#0f172a;color:#fff}.cc-sub-pills{display:flex;flex-wrap:wrap;gap:8px}.cc-sub-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:99px;border:1.5px solid #e2e8f0;background:#fff;font-size:12.5px;font-weight:500;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.cc-sub-pill:hover:not(.cc-sub-pill--on){background:#f8fafc;border-color:#94a3b8;color:#0f172a}.cc-sub-pill.cc-sub-pill--on{background:#eff6ff;border-color:#93c5fd;color:#4077ad;font-weight:600;box-shadow:0 0 0 3px #4077ad12}\n"] }]
35831
35839
  }], ctorParameters: () => [{ type: i2.Router }, { type: UserDetailService }, { type: i8.FormBuilder }, { type: FileService }, { type: ProvidersService }, { type: RolesService }, { type: i7.BsModalService }, { type: ProviderContractorSubCategoryService }, { type: ProviderContractorSubCategoryService }, { type: i9.AuthService }, { type: i1$2.TokenService }, { type: i1$2.RoleContextService }, { type: i1$2.AuthLogoutService }, { type: CredentialingStore }, { type: undefined, decorators: [{
35832
35840
  type: Inject,
35833
35841
  args: [LIBRARY_CONFIG]
@@ -36029,8 +36037,8 @@ class ClaimProcessService {
36029
36037
  sendOtp() {
36030
36038
  return this.userDetailService.sendOtp({ purpose: 1 });
36031
36039
  }
36032
- verifyOtp(otp, proposedPassword) {
36033
- return this.userDetailService.verifyOtp({ otp, purpose: 1, proposedPassword });
36040
+ verifyOtp(otp, proposedPassword, otpRequestId) {
36041
+ return this.userDetailService.verifyOtp({ otp, purpose: 1, proposedPassword, id: otpRequestId });
36034
36042
  }
36035
36043
  // ─── Helpers ─────────────────────────────────────────────────────────────────
36036
36044
  generateGuid() {
@@ -36217,6 +36225,7 @@ class ClaimProcessComponent {
36217
36225
  // ─── OTP ─────────────────────────────────────────────────────────────────────
36218
36226
  passwordStep = 1;
36219
36227
  otpValue = '';
36228
+ otpRequestId = null;
36220
36229
  isPasswordChanging = false;
36221
36230
  passwordChangeError = null;
36222
36231
  passwordChangeSuccess = false;
@@ -37051,6 +37060,7 @@ class ClaimProcessComponent {
37051
37060
  next: (data) => {
37052
37061
  this.isPasswordChanging = false;
37053
37062
  if (!data?.failed) {
37063
+ this.otpRequestId = data?.value;
37054
37064
  if (isResend)
37055
37065
  this.canResendOtp = false;
37056
37066
  this.passwordStep = 2;
@@ -37071,7 +37081,7 @@ class ClaimProcessComponent {
37071
37081
  return;
37072
37082
  this.isPasswordChanging = true;
37073
37083
  this.passwordChangeError = null;
37074
- this.claimService.verifyOtp(this.otpValue, this.userForm.get('password')?.value).subscribe({
37084
+ this.claimService.verifyOtp(this.otpValue, this.userForm.get('password')?.value, this.otpRequestId).subscribe({
37075
37085
  next: (response) => {
37076
37086
  this.isPasswordChanging = false;
37077
37087
  if (!response?.failed) {
@@ -37139,11 +37149,11 @@ class ClaimProcessComponent {
37139
37149
  }
37140
37150
  ngOnDestroy() { this.stopOtpTimer(); }
37141
37151
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ClaimProcessComponent, deps: [{ token: i8.FormBuilder }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: ClaimProcessService }, { token: i7.BsModalService }, { token: i1$2.TokenService }, { token: i1$2.AuthLogoutService }, { token: IndustryService }, { token: LIBRARY_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
37142
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ClaimProcessComponent, isStandalone: false, selector: "app-claim-process", inputs: { useEmitter: "useEmitter" }, outputs: { loginNavigate: "loginNavigate", initialProcessNavigate: "initialProcessNavigate" }, ngImport: i0, template: "<h2 class=\"sr-only\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></h2>\n\n<!-- \u2500\u2500\u2500 Unauthenticated / Error states: branded two-column layout \u2500\u2500\u2500 -->\n<div *ngIf=\"noEmailError || isLookingUpAccount || auth0UserData || showAccountNotFound\" class=\"cp-page cp-page--brand\">\n\n <!-- Left: Static marketing & branding panel -->\n <aside class=\"cp-brand-left\"> \n\n <div class=\"cp-brand-hero\">\n <span class=\"cp-brand-eyebrow\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></span>\n <p class=\"cp-brand-intro\">\n Your account is ready. Complete this short form to set your credentials and unlock your access to the\n platform's tools, programs, and services.\n </p>\n </div>\n\n <ul class=\"cp-brand-features\">\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Secure &amp; Encrypted</strong>\n <span>Your information is protected end-to-end and handled in accordance with our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Instant Access</strong>\n <span>Once activated, you'll get immediate access to programs, rosters, and service requests.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Team &amp; Client Network</strong>\n <span>Connect with certified professionals nationwide and manage your team from a single dashboard.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Complete Your Profile</strong>\n <span>A complete profile unlocks every feature and makes you visible to clients and partners.</span>\n </div>\n </li>\n </ul>\n\n <div class=\"cp-brand-contact\">\n <a *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.email\"\n [href]=\"'mailto:' + (privacyAndTerms.contactEmail || privacyAndTerms.email)\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail || privacyAndTerms?.email }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n <a *ngIf=\"privacyAndTerms?.websiteurl\" [href]=\"privacyAndTerms.websiteurl\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"cp-brand-contact__link cp-brand-contact__link--website\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\" />\n </svg>\n Visit {{ privacyAndTerms?.companyName || 'our website' }}\n <svg viewBox=\"0 0 24 24\" class=\"cp-brand-contact__ext\">\n <path\n d=\"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\" />\n </svg>\n </a>\n </div>\n\n </aside>\n\n <!-- Right: State-specific content -->\n <main class=\"cp-brand-right\">\n\n <!-- No Email Error -->\n <div *ngIf=\"noEmailError\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n </div>\n <h2>Invalid Access Link</h2>\n <p>This page requires a valid invitation link. Please use the link from your invitation email to claim your\n account.</p>\n </div>\n </div>\n\n <!-- Account Lookup: Loading -->\n <div *ngIf=\"isLookingUpAccount\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card cp-lookup-loading\">\n <span class=\"cp-spinner cp-lookup-spinner\"></span>\n <p>Looking up your account\u2026</p>\n </div>\n </div>\n\n <!-- Account Not Found -->\n <div *ngIf=\"!isLookingUpAccount && !auth0UserData && showAccountNotFound\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon cp-invalid-icon--warn\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 5h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n </div>\n <p [style.margin-bottom]=\"pendingParamType ? '16px' : null\">\n The email address <strong>{{ userEmail }}</strong> is not associated with an account on our platform.\n Please click the button below to create a new account.\n </p>\n <!-- Pre-assigned role preview when type exists in invitation link -->\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"pendingParamType && role.type === pendingParamType\" class=\"cp-anf-role-preview\">\n <span class=\"cp-anf-role-label\">Your pre-assigned role</span>\n <div class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </div>\n </ng-container>\n <button type=\"button\" class=\"cp-btn\" style=\"margin-top:20px\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\"\n fill=\"#fff\" />\n </svg>\n Create New Account\n </button>\n </div>\n </div>\n\n <!-- Account Found -->\n <div *ngIf=\"!isLookingUpAccount && auth0UserData\" class=\"cp-brand-state\">\n <div class=\"cp-anf-card\">\n <div class=\"cp-anf-card__header\">\n <div class=\"cp-anf-avatar\">\n {{ (auth0UserData.userDetails?.firstName?.[0] || '') + (auth0UserData.userDetails?.lastName?.[0] || '') ||\n '?' }}\n </div>\n <div class=\"cp-anf-card__identity\">\n <h2 class=\"cp-anf-card__name\">{{ auth0UserData.userDetails?.firstName }} {{\n auth0UserData.userDetails?.lastName }}</h2>\n <span class=\"cp-anf-card__email\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ auth0UserData.email }}\n </span>\n <div class=\"cp-anf-roles\" *ngIf=\"auth0UserData.userDetails?.userRoles?.length\">\n <span class=\"cp-anf-role\" *ngFor=\"let r of auth0UserData.userDetails.userRoles\">{{ r.roleName }}</span>\n </div>\n </div>\n </div>\n <div class=\"cp-anf-card__notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\" />\n </svg>\n An account already exists for this email address.\n </div>\n <button type=\"button\" class=\"cp-anf-signin-btn\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\"\n fill=\"#fff\" />\n </svg>\n Sign In to Your Account\n </button>\n </div>\n </div>\n\n </main>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Success State \u2500\u2500\u2500 -->\n<div *ngIf=\"submitSuccess\" class=\"cp-success-page\">\n <div class=\"cp-success-card\">\n <div class=\"cp-success-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <h2>{{ userHasExistingDetails ? 'Profile Updated!' : 'Account Activated!' }}</h2>\n <p>{{ userHasExistingDetails ? 'Your profile has been saved successfully.' : 'Your account has been successfully\n activated.' }}</p>\n <button *ngIf=\"!isInitialSetupCompleted && libConfig?.initialUrl\" type=\"button\" class=\"cp-btn\"\n style=\"margin-top:20px\" (click)=\"navigateToInitialProcess()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\"\n fill=\"#fff\" />\n </svg>\n Complete Initial Setup\n </button>\n <button type=\"button\" class=\"cp-btn\" [class.cp-btn--ghost]=\"!isInitialSetupCompleted && libConfig?.initialUrl\"\n style=\"margin-top:10px\" (click)=\"navigateToDashboard()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\" fill=\"currentColor\" />\n </svg>\n Go to Dashboard\n </button>\n <button *ngIf=\"!userHasExistingDetails\" type=\"button\" class=\"cp-btn cp-btn--ghost\" style=\"margin-top:10px\"\n (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\" />\n </svg>\n Sign In Instead\n </button>\n </div>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Main Layout \u2500\u2500\u2500 -->\n<div *ngIf=\"!noEmailError && !submitSuccess && !auth0UserData && !isLookingUpAccount && !isInitializing\"\n class=\"cp-page\">\n\n <!-- Left Panel \u2014 Status Tracker -->\n <aside class=\"cp-left\">\n <div class=\"cp-left-inner mt-1\"> \n\n <!-- User identity card -->\n <div class=\"cp-sb-user\">\n <div class=\"cp-sb-avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-sb-avatar__img\" />\n <span *ngIf=\"!profilePreviewUrl\" class=\"cp-sb-avatar__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </span>\n </div>\n <div class=\"cp-sb-user__info\">\n <strong class=\"cp-sb-user__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) :\n 'Your Profile' }}\n </strong>\n <span class=\"cp-sb-user__email\">{{ userEmail }}</span>\n </div>\n </div>\n\n <!-- Hero intro -->\n <div class=\"cp-sb-hero\">\n <span class=\"cp-sb-eyebrow\">{{ userHasExistingDetails ? 'Profile Update' : 'Claim Your Account' }}<ng-container *ngIf=\"!userHasExistingDetails && (selectedRole?.name || pendingRoleName)\"> \u2014 {{ selectedRole?.name || pendingRoleName }}</ng-container></span>\n <p class=\"cp-sb-intro\">\n {{ userHasExistingDetails\n ? 'Review and update your personal, role, and business information below.'\n : 'Complete this form to activate your account and unlock full platform access.' }}\n </p>\n </div>\n\n <!-- Progress bar -->\n <div class=\"cp-sb-progress\">\n <div class=\"cp-sb-progress__bar\">\n <div class=\"cp-sb-progress__fill\" [style.width.%]=\"overallProgress\"></div>\n </div>\n <span class=\"cp-sb-progress__label\">{{ overallProgress }}% complete</span>\n </div>\n\n <!-- Section status steps -->\n <ul class=\"cp-steps\">\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionPersonalDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Personal Information</span>\n <span class=\"cp-step__sub\">Name, address, profile photo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionRoleDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Account Setup</span>\n <span class=\"cp-step__sub\">Role selection{{ (setPasswordEnabled || resetPasswordEnabled) ? ', password' : ''\n }}</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" *ngIf=\"isBusiness\" [class.cp-step--done]=\"sectionBusinessDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Business Info</span>\n <span class=\"cp-step__sub\">Name, email, address, logo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n </ul>\n\n <!-- Feature highlights -->\n <ul class=\"cp-sb-features\">\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div>\n <strong>Secure &amp; Encrypted</strong>\n <span>Protected end-to-end per our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div>\n <strong>Instant Access</strong>\n <span>Immediate access to programs and service requests.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div>\n <strong>Professional Network</strong>\n <span>Connect with certified professionals nationwide.</span>\n </div>\n </li>\n </ul>\n\n <!-- Footer contact -->\n <div class=\"cp-left-contact\" *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.phone\">\n <a *ngIf=\"privacyAndTerms?.contactEmail\" [href]=\"'mailto:' + privacyAndTerms.contactEmail\"\n class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n </div>\n\n </div>\n </aside>\n\n <!-- Right Panel \u2014 Form -->\n <main class=\"cp-right\">\n\n <!-- Mobile-only top bar -->\n <div class=\"cp-mobile-bar\">\n <img *ngIf=\"privacyAndTerms?.logoUrl\" [src]=\"privacyAndTerms.logoUrl\" [alt]=\"privacyAndTerms?.companyName\"\n class=\"cp-mobile-logo\" />\n <span *ngIf=\"!privacyAndTerms?.logoUrl\" class=\"cp-mobile-company\">{{ privacyAndTerms?.companyName }}</span>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn cp-logout-btn--mobile\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Logout\n </button>\n </div>\n\n <!-- \u2500\u2500\u2500 Profile Banner \u2500\u2500\u2500 -->\n <div class=\"cp-banner\">\n <div class=\"cp-banner__avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-banner__img\" />\n <div *ngIf=\"!profilePreviewUrl\" class=\"cp-banner__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </div>\n </div>\n <div class=\"cp-banner__info\">\n <div class=\"cp-banner__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) : 'Your\n Profile' }}\n </div>\n <div class=\"cp-banner__meta\">\n <span class=\"cp-banner__email\" *ngIf=\"userEmail\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ userEmail }}\n </span>\n <span class=\"cp-banner__badge\" [class.cp-banner__badge--update]=\"userHasExistingDetails\">\n {{ userHasExistingDetails ? 'Profile Update' : 'Account Activation' }}\n </span>\n </div>\n <div class=\"cp-banner__loading\" *ngIf=\"isLoadingUser\">\n <span class=\"cp-spinner cp-spinner--sm\"></span> Loading profile\u2026\n </div>\n </div>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn--banner\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Sign Out\n </button>\n </div>\n\n <div class=\"cp-form-wrap\">\n\n <div class=\"cp-error cp-alert\" *ngIf=\"userLookupError\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n {{ userLookupError }}\n </div>\n\n <form (ngSubmit)=\"onSubmit()\" novalidate>\n\n <!-- \u2550\u2550\u2550 SECTION: Personal Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" [formGroup]=\"userForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Personal Information</h3>\n <p class=\"cp-card__sub\">Name, contact, address and profile photo</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionPersonalDone && sectionPhotoDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <!-- Pending notice: shown until a role is selected -->\n <div *ngIf=\"!selectedRoleValue && !isLoadingUser\" class=\"cp-pending-notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Please select your role in the Account Setup section below to unlock these fields.\n </div>\n <div [class.cp-fields-pending]=\"!selectedRoleValue && !isLoadingUser\">\n <div class=\"cp-biz-layout\">\n <!-- Left: fields -->\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"firstName\">First Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"firstName\" formControlName=\"firstName\" placeholder=\"Jane\"\n [class.is-invalid]=\"u['firstName'].invalid && u['firstName'].touched\" autocomplete=\"given-name\" />\n <div class=\"cp-error\" *ngIf=\"u['firstName'].invalid && u['firstName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"lastName\">Last Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"lastName\" formControlName=\"lastName\" placeholder=\"Doe\"\n [class.is-invalid]=\"u['lastName'].invalid && u['lastName'].touched\" autocomplete=\"family-name\" />\n <div class=\"cp-error\" *ngIf=\"u['lastName'].invalid && u['lastName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"phoneNumber\">Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"phoneNumber\" formControlName=\"phoneNumber\" placeholder=\"(555) 123-4567\"\n maxlength=\"14\" [class.is-invalid]=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\"\n (input)=\"formatPhone($event, 'user')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\">Required</div>\n </div>\n </div>\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"address1\">Street Address</label>\n <input type=\"text\" id=\"address1\" formControlName=\"address1\" placeholder=\"123 Main Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onAddressChange($event)\" autocomplete=\"off\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"address2\">Address Line 2</label>\n <input type=\"text\" id=\"address2\" formControlName=\"address2\" placeholder=\"Apt, Suite, Unit, etc.\"\n autocomplete=\"address-line2\" />\n </div>\n\n <div class=\"cp-field\">\n <label for=\"city\">City</label>\n <input type=\"text\" id=\"city\" formControlName=\"city\" placeholder=\"Orlando\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--4\">\n <div class=\"cp-field\">\n <label for=\"state\">State</label>\n <input type=\"text\" id=\"state\" formControlName=\"state\" placeholder=\"FL\" maxlength=\"2\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"county\">County</label>\n <input type=\"text\" id=\"county\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"zipcode\">Zip Code</label>\n <input type=\"text\" id=\"zipcode\" formControlName=\"zipcode\" placeholder=\"32801\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"country\">Country <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"country\" formControlName=\"country\" placeholder=\"US\"\n [class.is-invalid]=\"u['country'].invalid && u['country'].touched\" autocomplete=\"country\" />\n <div class=\"cp-error\" *ngIf=\"u['country'].invalid && u['country'].touched\">Required</div>\n </div>\n </div>\n\n <input type=\"hidden\" formControlName=\"latitude\" />\n <input type=\"hidden\" formControlName=\"longitude\" />\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"yearsOfExperince\">Years of Experience <span class=\"req\">*</span></label>\n <ng-select id=\"yearsOfExperince\" formControlName=\"yearsOfExperince\" [items]=\"expYears\"\n bindLabel=\"text\" bindValue=\"value\" placeholder=\"Select years\" [clearable]=\"false\"\n [class.is-invalid]=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"userJobTitle\">Job Title(s) <span class=\"req\">*</span></label>\n <ng-select id=\"userJobTitle\" formControlName=\"userJobTitle\" [items]=\"jobTitles\" bindLabel=\"text\"\n bindValue=\"value\" [multiple]=\"true\" placeholder=\"Select job title(s)\"\n [class.is-invalid]=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"industries\">Industries</label>\n <ng-select id=\"industries\" formControlName=\"industries\" [items]=\"industries\"\n bindLabel=\"industryName\" bindValue=\"id\" [multiple]=\"true\" [loading]=\"isIndustriesLoading\"\n placeholder=\"Select industries (optional)\">\n </ng-select>\n </div>\n </div>\n\n </div>\n\n <!-- Right: profile photo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Profile Photo</label>\n <div class=\"cp-biz-logo__area cp-profile-logo-area\" (click)=\"cpProfileInput.click()\">\n <input #cpProfileInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onProfileFileChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"profilePreviewUrl; else profilePlaceholder\">\n <img [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-profile-logo-img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #profilePlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n <span>Upload Photo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div><!-- /cp-fields-pending -->\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Account Setup \u2014 Role Cards + Password \u2550\u2550\u2550 -->\n <div class=\"cp-card\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Account Setup</h3>\n <p class=\"cp-card__sub\">Select your role and configure your password</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionRoleDone && sectionPasswordDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n\n <!-- Role Cards (ref: initial-process userViewRoles) -->\n <div class=\"cp-field\">\n <label>\n Select Your Role\n <span class=\"req\" *ngIf=\"!isInitialSetupCompleted && !lockedToTypeFromParam\">*</span>\n <span *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam\"\n style=\"font-weight:400;color:#6b7c8a;font-size:11px;margin-left:4px;\">(locked after initial\n setup)</span>\n <span *ngIf=\"lockedToTypeFromParam\"\n style=\"font-weight:400;color:#2563eb;font-size:11px;margin-left:4px;\">(pre-assigned)</span>\n </label>\n\n <!-- When locked from param, show only the pre-assigned card centred -->\n <div *ngIf=\"lockedToTypeFromParam\" class=\"cp-role-cards cp-role-cards--preassigned\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"role.selected\" class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Normal grid of all role cards -->\n <div *ngIf=\"!lockedToTypeFromParam\" class=\"cp-role-cards\" [class.cp-role-cards--locked]=\"isInitialSetupCompleted\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div class=\"cp-role-card\"\n [class.cp-role-card--selected]=\"role.selected\"\n [class.cp-role-card--disabled]=\"isInitialSetupCompleted\"\n (click)=\"!isInitialSetupCompleted && selectedUserRole(role)\"\n [attr.role]=\"isInitialSetupCompleted ? null : 'button'\" [attr.aria-pressed]=\"role.selected\"\n [attr.aria-label]=\"role.name\"\n [attr.title]=\"isInitialSetupCompleted ? 'Role cannot be changed after initial setup is complete' : null\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\" *ngIf=\"role.selected\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Pre-assigned notice (from query param / localStorage) -->\n <div class=\"cp-role-locked-notice cp-role-preassigned-notice\" *ngIf=\"lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n Your role has been pre-assigned from your invitation. Contact support to change it.\n </div>\n\n <!-- Locked after initial setup notice -->\n <div class=\"cp-role-locked-notice\" *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Role is locked. Contact support to change it.\n </div>\n\n <div class=\"cp-error\" *ngIf=\"!sectionRoleDone && validatePage === 1 && !isInitialSetupCompleted && !lockedToTypeFromParam\">Please\n select a role</div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingUser\" [formGroup]=\"userForm\">\n\n <!-- New user: optional password toggle -->\n <div class=\"cp-toggle-row\" *ngIf=\"!userHasExistingDetails\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Set Password <em>(Optional)</em></span>\n <span class=\"cp-toggle-row__hint\">Leave off to use existing credentials</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"setPasswordEnabled\" (change)=\"toggleSetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <div class=\"cp-row\" *ngIf=\"!userHasExistingDetails && setPasswordEnabled\">\n <div class=\"cp-field\">\n <label for=\"password\">Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"password\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n <div class=\"cp-error\" *ngIf=\"u['password'].errors?.['minlength'] && u['password'].touched\">Min. 8\n characters</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPassword\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPassword\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\"\n [class.is-invalid]=\"userForm.errors?.['passwordMismatch'] && u['confirmPassword'].touched\"\n autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n <div class=\"cp-error\" *ngIf=\"userForm.errors?.['passwordMismatch'] && u['confirmPassword'].touched\">\n Passwords do not match</div>\n </div>\n </div>\n\n <!-- Existing user: reset toggle -->\n <div class=\"cp-toggle-row\" *ngIf=\"userHasExistingDetails\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Reset Password</span>\n <span class=\"cp-toggle-row__hint\">Enable to change your current password</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"resetPasswordEnabled\" (change)=\"toggleResetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"userHasExistingDetails && resetPasswordEnabled\">\n <ng-container *ngIf=\"passwordStep === 1\">\n <div class=\"cp-row\">\n <div class=\"cp-field\">\n <label for=\"newPassword\">New Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"newPassword\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPasswordReset\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPasswordReset\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-pw-success\" *ngIf=\"passwordChangeSuccess\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n Password changed successfully.\n </div>\n <button type=\"button\" class=\"cp-btn cp-btn--outline cp-btn--sm\" (click)=\"changePassword()\"\n [disabled]=\"isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Sending\u2026' : 'Send Verification Code' }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"passwordStep === 2\">\n <div class=\"cp-otp-wrap\">\n <p class=\"cp-otp-hint\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px;flex-shrink:0\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Code sent to <strong>{{ userEmail }}</strong>\n </p>\n <div class=\"cp-otp-timer\" [class.cp-otp-timer--expired]=\"otpExpired\">\n <svg viewBox=\"0 0 24 24\" style=\"width:14px;height:14px\">\n <path\n d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n <span *ngIf=\"!otpExpired\">{{ otpMinutes }}:{{ otpSeconds < 10 ? '0' + otpSeconds : otpSeconds\n }}</span>\n <span *ngIf=\"otpExpired\">Code expired</span>\n </div>\n <div class=\"cp-field\">\n <label for=\"otpInput\">Enter 6-digit code</label>\n <input type=\"text\" id=\"otpInput\" [(ngModel)]=\"otpValue\" [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\" maxlength=\"6\" inputmode=\"numeric\" class=\"cp-otp-input\" />\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-otp-actions\">\n <button type=\"button\" class=\"cp-btn\" (click)=\"verifyPasswordOtp()\"\n [disabled]=\"otpExpired || !otpValue || isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Verifying\u2026' : 'Verify & Change Password' }}\n </button>\n <button type=\"button\" class=\"cp-btn cp-btn--ghost\" *ngIf=\"canResendOtp\"\n (click)=\"changePassword(true)\" [disabled]=\"isPasswordChanging\">Resend Code</button>\n <button type=\"button\" class=\"cp-btn-link\" (click)=\"cancelPasswordChange()\">Cancel</button>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Business Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" *ngIf=\"isBusiness\" [formGroup]=\"companyForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Business Information</h3>\n <p class=\"cp-card__sub\">Company details and branding</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!sectionBusinessDone\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <div class=\"cp-biz-layout\">\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"companyName\">Business Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"companyName\" formControlName=\"companyName\" placeholder=\"Acme Corp\"\n [class.is-invalid]=\"c['companyName'].invalid && c['companyName'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyName'].invalid && c['companyName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyEmail\">Business Email <span class=\"req\">*</span></label>\n <input type=\"email\" id=\"companyEmail\" formControlName=\"companyEmail\" placeholder=\"info@acme.com\"\n [class.is-invalid]=\"c['companyEmail'].invalid && c['companyEmail'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyEmail'].invalid && c['companyEmail'].touched\">\n <span *ngIf=\"c['companyEmail'].errors?.['required']\">Required</span>\n <span *ngIf=\"c['companyEmail'].errors?.['email']\">Invalid email</span>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyPhoneNumber\">Business Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"companyPhoneNumber\" formControlName=\"companyPhoneNumber\"\n placeholder=\"(555) 123-4567\" maxlength=\"14\"\n [class.is-invalid]=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\"\n (input)=\"formatPhone($event, 'company')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\">\n Required</div>\n </div>\n </div>\n\n\n <div class=\"cp-field\">\n <label for=\"bizAddress1\">Business Address</label>\n <input type=\"text\" id=\"bizAddress1\" formControlName=\"address1\" placeholder=\"123 Business Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onBusinessAddressChange($event)\" autocomplete=\"off\" />\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCity\">City</label>\n <input type=\"text\" id=\"bizCity\" formControlName=\"city\" placeholder=\"City\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizState\">State</label>\n <input type=\"text\" id=\"bizState\" formControlName=\"state\" placeholder=\"ST\" maxlength=\"2\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCounty\">County</label>\n <input type=\"text\" id=\"bizCounty\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizZipcode\">Zip</label>\n <input type=\"text\" id=\"bizZipcode\" formControlName=\"zipcode\" placeholder=\"00000\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizCountry\">Country</label>\n <input type=\"text\" id=\"bizCountry\" formControlName=\"country\" placeholder=\"US\"\n autocomplete=\"country\" />\n </div>\n </div>\n </div>\n\n <!-- Business logo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Business Logo</label>\n <div class=\"cp-biz-logo__area\" (click)=\"cpLogoInput.click()\">\n <input #cpLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onBusinessLogoChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"logoPreviewUrl; else logoPlaceholder\">\n <img [src]=\"logoPreviewUrl\" alt=\"Business logo\" class=\"cp-biz-logo__img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #logoPlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n <span>Upload Logo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 Footer: Terms + Submit \u2550\u2550\u2550 -->\n <div class=\"cp-form-footer\">\n <div class=\"cp-terms\">\n <label class=\"cp-terms__label\">\n <input type=\"checkbox\" class=\"cp-terms__check\" [checked]=\"model.acceptTerms && model.privacy\"\n (change)=\"onTermsCheckboxChange($event)\" />\n <span class=\"cp-terms__box\"></span>\n <span>I accept the\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Terms and Conditions', $event)\">Terms &amp;\n Conditions</a>\n and\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Privacy Statement', $event)\">Privacy Policy</a>\n </span>\n </label>\n <div class=\"cp-error cp-terms-error\" *ngIf=\"(!model.acceptTerms || !model.privacy) && validatePage === 1\">\n You must accept the Terms and Privacy Policy to continue\n </div>\n </div>\n\n <div class=\"cp-error cp-submit-error\" *ngIf=\"submitError\">{{ submitError }}</div>\n <div class=\"cp-error cp-submit-error\" *ngIf=\"providerError\">{{ providerError }}</div>\n\n <button type=\"submit\" class=\"cp-btn cp-btn--submit\" [disabled]=\"isSubmitting\">\n <span *ngIf=\"isSubmitting\" class=\"cp-spinner cp-spinner-btn\"></span>\n <svg *ngIf=\"!isSubmitting\" viewBox=\"0 0 24 24\" style=\"width:18px;height:18px\">\n <path *ngIf=\"userHasExistingDetails\"\n d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\"\n fill=\"#fff\" />\n <path *ngIf=\"!userHasExistingDetails\" d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" fill=\"#fff\" />\n </svg>\n {{ uploadStatus || (isSubmitting ? 'Processing\u2026' : (userHasExistingDetails ? 'Save Changes' : 'Activate My\n Account')) }}\n </button>\n </div>\n\n </form>\n </div>\n\n </main>\n\n</div>\n\n<!-- \u2500\u2500\u2500 Terms & Privacy Modal \u2500\u2500\u2500 -->\n<ng-template #termsAndConditionsModel>\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\n <div class=\"modal-content tc-modal\">\n <div class=\"tc-modal-header\">\n <div class=\"tc-header-icon\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\n <button type=\"button\" class=\"tc-modal-close\" (click)=\"closeModal()\" aria-label=\"Close\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div class=\"tc-modal-body\">\n <ng-container *ngIf=\"termsAndConditionTitle === 'Terms and Conditions'\">\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-terms-conditions>\n </ng-container>\n <ng-container *ngIf=\"termsAndConditionTitle !== 'Terms and Conditions'\">\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-privacy-policy>\n </ng-container>\n </div>\n <div class=\"tc-modal-footer\">\n <button type=\"button\" class=\"tc-btn tc-btn-close\" (click)=\"closeModal()\">Close</button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cp-page{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#0c1620}@media (max-width: 860px){.cp-page{flex-direction:column}}.cp-page--brand{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif}@media (max-width: 860px){.cp-page--brand{flex-direction:column}}.cp-brand-left{width:42%;min-width:320px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:10px 48px;position:sticky;top:20px;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-brand-left{position:static;height:auto;width:100%;min-width:unset;padding:32px 24px 28px;border-right:none;border-bottom:1px solid #e2eaf2}}.cp-brand-logo-wrap{margin-bottom:10px}.cp-brand-logo-img{max-height:48px;max-width:200px;object-fit:contain;display:block}.cp-brand-logo-svg{display:block;height:48px;width:auto;max-width:200px;fill:#4077ad}.cp-brand-logo-text{font-size:20px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-brand-hero{margin-bottom:15px}.cp-brand-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.16);border-radius:99px;padding:3px 10px;margin-bottom:16px}.cp-brand-heading{font-size:26px;font-weight:800;color:#0c1620;line-height:1.22;letter-spacing:-.4px;margin:0 0 14px}@media (max-width: 860px){.cp-brand-heading{font-size:21px}}.cp-brand-intro{font-size:13.5px;color:#6b7c8a;line-height:1.78;margin:0}.cp-brand-features{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;gap:6px}.cp-brand-feature{display:flex;align-items:flex-start;gap:13px;padding:13px 15px;border-radius:9px;background:#f8fafc;border:1px solid #e8edf3;transition:border-color .18s,background .18s}.cp-brand-feature:hover{background:#4077ad08;border-color:#4077ad38}.cp-brand-feature__icon{width:34px;height:34px;flex-shrink:0;border-radius:8px;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-brand-feature__icon svg{width:17px;height:17px}.cp-brand-feature__icon svg path{fill:#4077ad}.cp-brand-feature__body{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.cp-brand-feature__body strong{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1.2}.cp-brand-feature__body span{font-size:11.5px;color:#6b7c8a;line-height:1.62}.cp-brand-contact{display:flex;flex-direction:column;gap:8px;margin-top:24px;padding-top:20px;border-top:1px solid #e8edf3}.cp-brand-contact__link{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-brand-contact__link svg{width:14px;height:14px;flex-shrink:0}.cp-brand-contact__link svg path{fill:currentColor}.cp-brand-contact__link:hover{color:#4077ad}.cp-brand-contact__link--website{font-weight:600;color:#4077ad}.cp-brand-contact__link--website:hover{color:#335f8a}.cp-brand-contact__ext{width:11px!important;height:11px!important;opacity:.65}.cp-brand-right{flex:1;background:#eef1f4;display:flex;align-items:center;justify-content:center;padding:40px 28px;min-width:0}@media (max-width: 860px){.cp-brand-right{padding:28px 20px 48px}}.cp-brand-state{width:100%;max-width:460px;display:flex;flex-direction:column;align-items:center}.cp-brand-state .cp-invalid-card,.cp-brand-state .cp-anf-card{width:100%}.cp-left{width:40%;min-width:300px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:44px 40px;position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-left{display:none}}.cp-left-inner{display:flex;flex-direction:column;height:100%;gap:0}.cp-logo{margin-bottom:24px}.cp-logo-img{max-height:44px;max-width:180px;object-fit:contain;display:block}.cp-logo-fallback{font-size:18px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-sb-user{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:6px;background:#4077ad0d;border:1px solid rgba(64,119,173,.12);margin-bottom:20px}.cp-sb-avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;background:#4077ad;display:flex;align-items:center;justify-content:center;overflow:hidden}.cp-sb-avatar__img{width:100%;height:100%;object-fit:cover}.cp-sb-avatar__initials{font-size:15px;font-weight:700;color:#fff;text-transform:uppercase}.cp-sb-user__info{display:flex;flex-direction:column;gap:2px;min-width:0}.cp-sb-user__info strong{font-size:13px;font-weight:700;color:#0c1620;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-user__info span{font-size:11px;color:#6b7c8a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-signout{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;margin-top:20px;margin-bottom:4px;background:transparent;border:1.5px solid #e2eaf2;border-radius:6px;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;text-align:left}.cp-sb-signout svg{width:16px;height:16px;flex-shrink:0}.cp-sb-signout svg path{fill:#6b7c8a}.cp-sb-signout:hover{border-color:#f87171;color:#dc2626;background:#dc26260a}.cp-sb-signout:hover svg path{fill:#dc2626}.cp-sb-hero{margin-bottom:16px}.cp-sb-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#4077ad;margin-bottom:6px}.cp-sb-intro{font-size:12px;line-height:1.6;color:#6b7c8a;margin:0}.cp-sb-progress{margin-bottom:20px}.cp-sb-progress__bar{height:5px;background:#e2eaf2;border-radius:99px;overflow:hidden;margin-bottom:5px}.cp-sb-progress__fill{height:100%;background:linear-gradient(90deg,#4077ad,#5b9fd4);border-radius:99px;transition:width .4s ease;min-width:4px}.cp-sb-progress__label{font-size:10.5px;font-weight:600;color:#6b7c8a}.cp-sb-features{list-style:none;padding:0;margin:20px 0 0;display:flex;flex-direction:column;gap:12px}.cp-sb-feature{display:flex;align-items:flex-start;gap:10px}.cp-sb-feature__icon{width:28px;height:28px;border-radius:6px;background:#4077ad14;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cp-sb-feature__icon svg{width:15px;height:15px}.cp-sb-feature__icon svg path{fill:#4077ad}.cp-sb-feature div{display:flex;flex-direction:column;gap:2px}.cp-sb-feature div strong{font-size:11.5px;font-weight:700;color:#0c1620}.cp-sb-feature div span{font-size:11px;color:#6b7c8a;line-height:1.5}.cp-steps{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;position:relative}.cp-steps:before{content:\"\";position:absolute;left:17px;top:20px;width:2px;bottom:20px;background:#e2eaf2;z-index:0}.cp-step{display:flex;align-items:flex-start;gap:12px;padding:10px 0;position:relative;z-index:1}.cp-step__icon{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:#fff;border:2px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:border-color .2s,background .2s}.cp-step__icon svg{width:15px;height:15px}.cp-step__icon svg path{fill:#6b7c8a;transition:fill .2s}.cp-step__body{flex:1;display:flex;flex-direction:column;gap:2px;padding-top:5px;min-width:0}.cp-step__label{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1}.cp-step__sub{font-size:11px;color:#6b7c8a;line-height:1.4}.cp-step__badge{width:20px;height:20px;border-radius:50%;flex-shrink:0;margin-top:7px;background:#d3dce3;display:flex;align-items:center;justify-content:center;transition:background .2s}.cp-step__badge svg{width:12px;height:12px}.cp-step__badge svg path{fill:#fff}.cp-step__badge span{font-size:10px;font-weight:700;color:#6b7c8a}.cp-step__badge--done{background:#28a745}.cp-step__badge--done span{display:none}.cp-step--done .cp-step__icon{background:#4077ad14;border-color:#4077ad}.cp-step--done .cp-step__icon svg path{fill:#4077ad}.cp-step--done .cp-step__label{color:#4077ad}.cp-left-contact{display:flex;flex-direction:column;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid #e8edf3}.cp-contact-link{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-contact-link svg{width:14px;height:14px;flex-shrink:0}.cp-contact-link svg path{fill:currentColor}.cp-contact-link:hover{color:#4077ad}.cp-left-footnote{margin-top:18px;font-size:12.5px}.cp-left-footnote a{display:inline-flex;align-items:center;gap:5px;color:#4077ad;text-decoration:none;font-weight:600;transition:color .15s}.cp-left-footnote a svg{width:12px;height:12px}.cp-left-footnote a svg path{fill:#4077ad}.cp-left-footnote a:hover{color:#335f8a;text-decoration:underline}.cp-mobile-bar{display:none;align-items:center;justify-content:space-between;padding:14px 20px;background:#fff;border-bottom:1px solid #e2eaf2}@media (max-width: 860px){.cp-mobile-bar{display:flex}}.cp-mobile-logo{max-height:36px;max-width:160px;object-fit:contain}.cp-mobile-company{font-size:18px;font-weight:800;color:#4077ad}.cp-right{flex:1;background:#f0f4f8;display:flex;flex-direction:column;align-items:center;padding:0 0 64px;overflow-y:auto;min-width:0}@media (max-width: 860px){.cp-right{padding:0 0 48px}}.cp-invalid-page,.cp-success-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#eef1f4;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;padding:24px}.cp-invalid-card,.cp-success-card{background:#fff;border-radius:12px;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;padding:52px 44px;max-width:440px;width:100%;text-align:center}.cp-invalid-card h2,.cp-success-card h2{font-size:22px;font-weight:800;color:#0c1620;margin-bottom:12px}.cp-invalid-card p,.cp-success-card p{font-size:14px;color:#6b7c8a;line-height:1.7;margin-bottom:28px}.cp-invalid-icon,.cp-success-icon{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 24px}.cp-invalid-icon svg,.cp-success-icon svg{width:32px;height:32px}.cp-invalid-icon{background:#dc35451a}.cp-invalid-icon svg path{fill:#dc3545}.cp-invalid-icon--warn{background:#f59e0b1a}.cp-invalid-icon--warn svg path{fill:#f59e0b}.cp-success-icon{background:#28a7451a}.cp-success-icon svg path{fill:#28a745}.cp-anf-hint{font-size:13px;color:#6b7280;margin-top:4px}.cp-form-wrap{width:100%;flex:1;display:flex;flex-direction:column;gap:0;padding-bottom:32px}.cp-banner{width:100%;display:flex;align-items:center;gap:20px;padding:20px 32px;background:linear-gradient(135deg,#4077ad,#2f5880);border-bottom:1px solid rgba(0,0,0,.12);position:sticky;top:0;z-index:10;flex-shrink:0}@media (max-width: 860px){.cp-banner{padding:16px 20px;position:static}}@media (max-width: 480px){.cp-banner{padding:14px 16px;gap:12px}}.cp-banner__avatar{position:relative;flex-shrink:0;width:60px;height:60px;border-radius:50%;border:2.5px solid rgba(255,255,255,.4);overflow:hidden;background:#ffffff26}@media (max-width: 480px){.cp-banner__avatar{width:46px;height:46px}}.cp-banner__img{width:100%;height:100%;object-fit:cover;display:block}.cp-banner__initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#ffffffe6;text-transform:uppercase;letter-spacing:-.5px}@media (max-width: 480px){.cp-banner__initials{font-size:16px}}.cp-banner__info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.cp-banner__name{font-size:17px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}@media (max-width: 480px){.cp-banner__name{font-size:14px}}.cp-banner__meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.cp-banner__email{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#fffc;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cp-banner__email svg{width:11px;height:11px}.cp-banner__email svg path{fill:#fffc}.cp-banner__badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:3px 8px;border-radius:99px;background:#fff3;color:#ffffffe6}.cp-banner__badge--update{background:#28a7454d;color:#a8f5c0}.cp-banner__loading{display:flex;align-items:center;gap:6px;font-size:11px;color:#ffffffb3;margin-top:2px}.cp-banner__loading .cp-spinner--sm{border-color:#fff6;border-top-color:#fff}.cp-logout-btn--banner{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;background:#ffffff1f;border:1px solid rgba(255,255,255,.25);color:#ffffffe6;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn--banner svg{width:15px;height:15px}.cp-logout-btn--banner svg path{fill:#ffffffe6}.cp-logout-btn--banner:hover{background:#dc3545bf;border-color:transparent;color:#fff}.cp-logout-btn--banner:hover svg path{fill:#fff}@media (max-width: 480px){.cp-logout-btn--banner{padding:7px 10px;font-size:11px}}.cp-alert{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:6px;margin:20px 24px 0;background:#dc35450f;border:1px solid rgba(220,53,69,.18);font-size:13px;color:#c0392b}.cp-alert svg path{fill:#c0392b}.cp-card{background:#fff;border:1px solid #e2eaf2;margin:16px 24px 0;border-radius:10px;overflow:visible;box-shadow:0 1px 3px #0000000a}.cp-card:first-of-type{margin-top:20px}@media (max-width: 860px){.cp-card{margin:12px 16px 0}}@media (max-width: 480px){.cp-card{margin:10px 12px 0;border-radius:8px}}.cp-card__header{display:flex;align-items:center;gap:14px;padding:16px 24px;border-bottom:1px solid #f0f4f8;background:#fafbfc;border-radius:10px 10px 0 0;overflow:hidden}@media (max-width: 480px){.cp-card__header{padding:14px 16px;gap:10px;border-radius:8px 8px 0 0}}.cp-card__icon{width:36px;height:36px;border-radius:8px;flex-shrink:0;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-card__icon svg{width:18px;height:18px}.cp-card__icon svg path{fill:#4077ad}.cp-card__title{font-size:13.5px;font-weight:700;color:#0c1620;margin:0 0 2px;line-height:1}.cp-card__sub{font-size:11px;color:#6b7c8a;margin:0;line-height:1}.cp-card__status{margin-left:auto;flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#eef1f4;border:1.5px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:all .2s}.cp-card__status svg{width:14px;height:14px}.cp-card__status svg path{fill:#6b7c8a}.cp-card__status span{font-size:12px;font-weight:700;color:#6b7c8a}.cp-card__status--done{background:#28a745;border-color:#28a745}.cp-card__status--done svg path{fill:#fff}.cp-card__body{padding:20px 24px 16px}@media (max-width: 480px){.cp-card__body{padding:16px 16px 12px}}.cp-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.cp-row.cp-row-triple,.cp-row.cp-row--3{grid-template-columns:1fr 1fr 1fr}.cp-row.cp-row--4{grid-template-columns:1fr 1fr 1fr 1fr}@media (max-width: 640px){.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 560px){.cp-row{grid-template-columns:1fr}.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 400px){.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr}}.cp-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px;min-width:0}.cp-field label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-field label .req{color:#4077ad;margin-left:2px}.cp-field input,.cp-field select{box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px;font-size:13.5px;color:#0c1620;background:#fff;width:100%;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none;font-family:inherit}.cp-field input::placeholder,.cp-field select::placeholder{color:#aab8c2}.cp-field input:focus,.cp-field select:focus{outline:none;border-color:#4077ad;box-shadow:0 0 0 3px #4077ad26}.cp-field input.is-invalid,.cp-field select.is-invalid{border-color:#dc3545}.cp-field input.is-invalid:focus,.cp-field select.is-invalid:focus{box-shadow:0 0 0 3px #dc354526}.cp-select{position:relative}.cp-select:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #6b7c8a;pointer-events:none}.cp-select select{cursor:pointer;padding-right:32px}.cp-pw-wrap{position:relative}.cp-pw-wrap input{padding-right:42px}.cp-pw-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:4px;display:flex;align-items:center;color:#6b7c8a}.cp-pw-toggle svg{width:18px;height:18px}.cp-pw-toggle svg path{fill:#6b7c8a}.cp-pw-toggle:hover svg path{fill:#4077ad}.cp-pw-success{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#16a34a;margin:4px 0 10px}.cp-pw-success svg path{fill:#16a34a}.cp-readonly-wrap{position:relative;display:flex;align-items:center}.cp-readonly-wrap svg{position:absolute;left:12px;width:15px;height:15px;flex-shrink:0;pointer-events:none}.cp-readonly-wrap svg path{fill:#4077ad}.cp-input-readonly{width:100%;box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px 0 36px;font-size:13.5px;color:#0c1620;background:#4077ad0a;cursor:default;font-family:inherit;font-weight:500}.cp-autofill-note{font-size:11px;color:#4077ad;margin-top:3px;display:flex;align-items:center;gap:4px}.cp-email-display{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:6px 12px;background:#eef1f4;border:1.5px solid #d3dce3;border-radius:99px;font-size:12.5px;color:#0c1620;font-weight:500}.cp-email-display svg{width:14px;height:14px;flex-shrink:0}.cp-email-display svg path{fill:#4077ad}.cp-error{font-size:11.5px;color:#dc3545;margin-top:2px}.cp-terms-error{margin-top:4px}.cp-submit-error{margin-bottom:12px;font-size:13px;text-align:center}.cp-loading-hint{display:flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;margin-top:4px}.cp-new-user-hint{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:#4077ad;background:#4077ad0f;border:1px solid rgba(64,119,173,.18);border-radius:6px;padding:9px 13px;margin:6px 0 12px}.cp-new-user-hint svg{width:15px;height:15px;flex-shrink:0}.cp-new-user-hint svg path{fill:#4077ad}.cp-agreements{display:flex;flex-direction:column;gap:10px;margin:24px 0 4px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;border:1.5px solid #d3dce3;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#bac8d3;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eef1f4;border:1px solid #d3dce3;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13px;font-weight:600;color:#0c1620;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7c8a;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 13px;border-radius:8px;font-size:12px;font-weight:600;font-family:inherit;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.cp-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;height:46px;margin-top:10px;background:#4077ad;border:none;border-radius:6px;font-size:13.5px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;transition:background .15s,box-shadow .15s,transform .1s;font-family:inherit}.cp-btn:hover:not(:disabled){background:#335f8a;box-shadow:0 4px 12px #4077ad59}.cp-btn:active:not(:disabled){transform:scale(.99)}.cp-btn:disabled{opacity:.6;cursor:not-allowed}.cp-btn--submit{height:52px;font-size:15px;letter-spacing:.5px;background:linear-gradient(135deg,#4077ad,#335f8a);box-shadow:0 2px 8px #4077ad40;border-radius:8px;margin-top:0}.cp-btn--submit:hover:not(:disabled){box-shadow:0 6px 18px #4077ad66;filter:brightness(1.05)}.cp-btn--outline{background:#fff;color:#4077ad;border:1.5px solid #4077AD}.cp-btn--outline:hover:not(:disabled){background:#4077ad0d;box-shadow:none}.cp-btn--ghost{background:transparent;color:#6b7c8a;border:1.5px solid #d3dce3}.cp-btn--ghost:hover:not(:disabled){border-color:#4077ad;color:#4077ad;box-shadow:none}.cp-btn--sm{height:38px;font-size:12.5px}.cp-btn-link{background:none;border:none;font-family:inherit;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;margin-top:8px;padding:6px 0;text-decoration:underline}.cp-btn-link:hover{color:#4077ad}.cp-spinner{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cp-spin .7s linear infinite}.cp-spinner:not(.cp-spinner-btn){border-color:#4077ad4d;border-top-color:#4077ad}.cp-spinner--sm{width:11px;height:11px;border-color:#4077ad4d;border-top-color:#4077ad}@keyframes cp-spin{to{transform:rotate(360deg)}}.cp-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin-bottom:14px;background:#f8fafc;border:1px solid #e2eaf2;border-radius:6px}.cp-toggle-row__info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.cp-toggle-row__label{font-size:13px;font-weight:600;color:#0c1620}.cp-toggle-row__label em{font-style:normal;font-size:11px;font-weight:500;color:#6b7c8a;margin-left:4px}.cp-toggle-row__hint{font-size:11px;color:#6b7c8a}.cp-toggle-switch{position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0;cursor:pointer}.cp-toggle-switch input{opacity:0;width:0;height:0;position:absolute}.cp-toggle-switch input:checked+.cp-toggle-knob{background:#4077ad}.cp-toggle-switch input:checked+.cp-toggle-knob:before{transform:translate(18px)}.cp-toggle-knob{position:absolute;inset:0;background:#c8d5e0;border-radius:24px;transition:background .2s;cursor:pointer}.cp-toggle-knob:before{content:\"\";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0003}.cp-otp-wrap{margin-top:4px}.cp-otp-hint{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6b7c8a;margin:0 0 12px}.cp-otp-hint svg path{fill:#6b7c8a}.cp-otp-hint strong{color:#0c1620}.cp-otp-timer{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.18);border-radius:99px;padding:4px 12px;margin-bottom:14px}.cp-otp-timer svg path{fill:#4077ad}.cp-otp-timer--expired{color:#dc3545;background:#dc354512;border-color:#dc354533}.cp-otp-timer--expired svg path{fill:#dc3545}.cp-otp-input{letter-spacing:.15em;font-size:16px;font-weight:600}.cp-otp-actions{display:flex;flex-direction:column;gap:0;margin-top:4px}.cp-pending-notice{display:flex;align-items:flex-start;gap:9px;padding:10px 14px;margin-bottom:16px;background:#4077ad0d;border:1px solid rgba(64,119,173,.18);border-radius:6px;font-size:12px;font-weight:600;color:#4077ad;line-height:1.55}.cp-pending-notice svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}.cp-pending-notice svg path{fill:#4077ad}.cp-fields-pending{opacity:.42;pointer-events:none;filter:blur(.4px);-webkit-user-select:none;user-select:none}.cp-anf-role-preview{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 16px;margin-bottom:4px;background:#4077ad08;border:1px solid rgba(64,119,173,.14);border-radius:8px}.cp-anf-role-preview .cp-role-card{width:110px;pointer-events:none}.cp-anf-role-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#6b7c8a}.cp-role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px;margin-top:6px}@media (max-width: 480px){.cp-role-cards{grid-template-columns:repeat(3,1fr)}}.cp-role-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px 10px;border:2px solid #d3dce3;border-radius:6px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;-webkit-user-select:none;user-select:none}.cp-role-card:hover{border-color:#4077ad;box-shadow:0 2px 8px #4077ad1f}.cp-role-card--selected{border-color:#4077ad;background:#4077ad0d;box-shadow:0 0 0 3px #4077ad26}.cp-role-card__img{position:relative;width:48px;height:48px}.cp-role-card__img img{width:100%;height:100%;object-fit:contain}.cp-role-card__check{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:#4077ad;display:flex;align-items:center;justify-content:center}.cp-role-card__check svg{width:11px;height:11px}.cp-role-card__check svg path{fill:#fff}.cp-role-card__name{font-size:11px;font-weight:600;color:#0c1620;text-align:center;line-height:1.3}.cp-role-card--disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.cp-role-card--disabled:hover{border-color:#d3dce3;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected{border-color:#6b7c8a;background:#f8fafc;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected .cp-role-card__check{background:#6b7c8a}.cp-role-locked-notice{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:6px 12px;border-radius:99px;background:#f59e0b14;border:1px solid rgba(245,158,11,.25);font-size:11.5px;font-weight:600;color:#92400e}.cp-role-locked-notice svg{width:13px;height:13px;flex-shrink:0}.cp-role-locked-notice svg path{fill:#92400e}.cp-role-locked-notice.cp-role-preassigned-notice{background:#2563eb0f;border-color:#2563eb38;color:#1e40af}.cp-role-locked-notice.cp-role-preassigned-notice svg path{fill:#2563eb}.cp-role-cards--preassigned{display:flex;justify-content:flex-start;gap:0;margin-top:8px}.cp-role-cards--preassigned .cp-role-card--preassigned{width:140px;cursor:default;pointer-events:none;border-color:#2563eb;background:#2563eb0a;box-shadow:0 0 0 3px #2563eb1f}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__check{background:#2563eb}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__name{color:#1e40af;font-weight:700}.cp-form-footer{margin:16px 24px 0;background:#fff;border:1px solid #e2eaf2;border-radius:10px;padding:20px 24px;box-shadow:0 1px 3px #0000000a}@media (max-width: 860px){.cp-form-footer{margin:12px 16px 0}}@media (max-width: 480px){.cp-form-footer{margin:10px 12px 0;padding:16px;border-radius:8px}}.cp-terms{margin:0 0 16px}.cp-terms__label{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:12.5px;color:#6b7c8a;line-height:1.7;margin:0}.cp-terms__label a{color:#4077ad;text-decoration:underline;font-weight:600}.cp-terms__label a:hover{color:#335f8a}.cp-terms__check{position:absolute;opacity:0;width:0;height:0}.cp-terms__box{width:17px;height:17px;flex-shrink:0;margin-top:2px;border:2px solid #d3dce3;border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s;position:relative}.cp-terms__box:after{content:\"\";display:none;position:absolute;left:4px;top:1px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.cp-terms__check:checked~.cp-terms__box{background:#4077ad;border-color:#4077ad}.cp-terms__check:checked~.cp-terms__box:after{display:block}.cp-upload-area{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:120px;border:2px dashed #d3dce3;border-radius:6px;background:#eef1f4;cursor:pointer;transition:border-color .15s,background .15s;overflow:hidden}.cp-upload-area:hover{border-color:#4077ad;background:#4077ad08}.cp-upload-hidden{position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none}.cp-upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px;text-align:center;pointer-events:none}.cp-upload-placeholder svg{width:32px;height:32px;opacity:.5}.cp-upload-placeholder svg path{fill:#6b7c8a}.cp-upload-placeholder span{font-size:12.5px;font-weight:600;color:#6b7c8a}.cp-upload-placeholder small{font-size:11px;color:#95a2ad}.cp-upload-preview{width:100%;object-fit:cover;display:block}.cp-upload-preview--avatar{width:90px;height:90px;border-radius:50%;object-fit:cover;border:3px solid #fff;box-shadow:0 2px 8px #0000001f;margin:14px auto 0}.cp-upload-preview--logo{max-width:180px;max-height:80px;width:auto;height:auto;object-fit:contain;margin:14px auto 0}.cp-upload-change{font-size:11px;font-weight:600;color:#4077ad;margin-bottom:10px;pointer-events:none}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:20px 24px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:38px;height:38px;background:#ffffff1f;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-size:16px;font-weight:700;color:#fff;margin:0;flex:1}.tc-modal-close{flex-shrink:0;background:#ffffff1f;border:none;border-radius:8px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.tc-modal-close:hover{background:#ffffff38;color:#fff}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;padding:14px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-size:13.5px;font-weight:600;font-family:inherit;padding:9px 24px;border-radius:10px;border:none;cursor:pointer;transition:background .15s ease}.tc-btn.tc-btn-close{background:#4077ad;color:#fff}.tc-btn.tc-btn-close:hover{background:#335f8a}.cp-logout-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:6px;border:1.5px solid #e2eaf2;background:#fff;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn svg{width:16px;height:16px}.cp-logout-btn svg path{fill:#6b7c8a}.cp-logout-btn:hover{border-color:#dc3545;color:#dc3545}.cp-logout-btn:hover svg path{fill:#dc3545}.cp-logout-btn--mobile{margin-left:auto}.cp-biz-layout{display:grid;grid-template-columns:1fr 160px;gap:20px;align-items:start}@media (max-width: 640px){.cp-biz-layout{grid-template-columns:1fr}}.cp-biz-fields{display:flex;flex-direction:column}.cp-biz-logo{display:flex;flex-direction:column;gap:8px}.cp-biz-logo__label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-biz-logo__area{border:2px dashed #d3dce3;border-radius:6px;background:#f8fafc;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:140px;padding:12px;text-align:center;transition:border-color .15s}.cp-biz-logo__area:hover{border-color:#4077ad}.cp-biz-logo__img{width:100%;max-height:100px;object-fit:contain;border-radius:4px}.cp-biz-logo__change{font-size:11px;color:#6b7c8a;margin-top:6px;display:block}.cp-biz-logo__placeholder{display:flex;flex-direction:column;align-items:center;gap:6px}.cp-biz-logo__placeholder svg{width:28px;height:28px}.cp-biz-logo__placeholder svg path{fill:#aab8c2}.cp-biz-logo__placeholder span{font-size:11.5px;font-weight:600;color:#6b7c8a}.cp-biz-logo__placeholder small{font-size:10px;color:#aab8c2}.cp-profile-logo-area{border-radius:50%!important;min-height:140px!important;width:140px!important;height:140px!important;margin:0 auto;overflow:hidden;padding:0!important;position:relative}.cp-profile-logo-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.cp-profile-logo-area .cp-biz-logo__change{position:absolute;bottom:0;left:0;right:0;background:#0000007a;color:#fff!important;padding:7px 0 5px;text-align:center;font-size:10.5px;font-weight:600;margin-top:0!important;opacity:0;transition:opacity .18s}.cp-profile-logo-area:hover .cp-biz-logo__change{opacity:1}.cp-lookup-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 44px!important}.cp-lookup-loading p{font-size:14px;color:#6b7c8a;margin:0}.cp-lookup-spinner{width:32px;height:32px;border:3px solid rgba(64,119,173,.2);border-top-color:#4077ad}.cp-anf-card{width:100%;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;border:1px solid #e2eaf2}.cp-anf-card__header{display:flex;align-items:center;gap:16px;padding:28px 28px 20px;border-bottom:1px solid #f0f4f8}.cp-anf-card__identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.cp-anf-card__name{font-size:18px;font-weight:800;color:#0c1620;margin:0;line-height:1.2}.cp-anf-card__email{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b7c8a}.cp-anf-card__email svg{width:12px;height:12px}.cp-anf-card__email svg path{fill:#6b7c8a}.cp-anf-card__details{padding:16px 28px;display:flex;flex-direction:column;gap:10px;border-bottom:1px solid #f0f4f8}.cp-anf-card__notice{display:flex;align-items:center;gap:10px;padding:14px 28px;background:#4077ad0a;border-bottom:1px solid #f0f4f8;font-size:13px;color:#4077ad;font-weight:600}.cp-anf-card__notice svg{width:18px;height:18px;flex-shrink:0}.cp-anf-card__notice svg path{fill:#4077ad}.cp-anf-avatar{width:60px;height:60px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#4077ad,#335f8a);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#fff;text-transform:uppercase;letter-spacing:-.5px}.cp-anf-roles{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px}.cp-anf-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;padding:3px 8px;border-radius:99px;background:#4077ad14;color:#4077ad;border:1px solid rgba(64,119,173,.18)}.cp-anf-detail{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:#6b7c8a;line-height:1.5}.cp-anf-detail svg{width:14px;height:14px;flex-shrink:0;margin-top:1px}.cp-anf-detail svg path{fill:#6b7c8a}.cp-anf-signin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:54px;padding:0 24px;background:linear-gradient(135deg,#4077ad,#335f8a);border:none;border-radius:0;font-size:15px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;font-family:inherit;transition:filter .15s,box-shadow .15s;-webkit-appearance:none}.cp-anf-signin-btn svg{width:18px;height:18px;flex-shrink:0}.cp-anf-signin-btn svg path{fill:#fff}.cp-anf-signin-btn:hover{filter:brightness(1.07);box-shadow:inset 0 -3px #00000026}::ng-deep .modal-content{background:none!important;border:none!important}::ng-deep .ng-select div,.ng-select input,.ng-select span{font-size:12px!important}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: GooglePlaceDirective, selector: "[ngx-google-places-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: TermsConditionsComponent, selector: "app-terms-conditions", inputs: ["title", "branding", "PrivacyAndTerms"] }, { kind: "component", type: PrivacyPolicyComponent, selector: "app-privacy-policy", inputs: ["title", "branding", "PrivacyAndTerms"] }] });
37152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ClaimProcessComponent, isStandalone: false, selector: "app-claim-process", inputs: { useEmitter: "useEmitter" }, outputs: { loginNavigate: "loginNavigate", initialProcessNavigate: "initialProcessNavigate" }, ngImport: i0, template: "<h2 class=\"sr-only\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></h2>\n\n<!-- \u2500\u2500\u2500 Unauthenticated / Error states: branded two-column layout \u2500\u2500\u2500 -->\n<div *ngIf=\"noEmailError || isLookingUpAccount || auth0UserData || showAccountNotFound\" class=\"cp-page cp-page--brand\">\n\n <!-- Left: Static marketing & branding panel -->\n <aside class=\"cp-brand-left\">\n\n <div class=\"cp-brand-hero\">\n <span class=\"cp-brand-eyebrow\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName\n }}</ng-container></span>\n <p class=\"cp-brand-intro\">\n Your account is ready. Complete this short form to set your credentials and unlock your access to the\n platform's tools, programs, and services.\n </p>\n </div>\n\n <ul class=\"cp-brand-features\">\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Secure &amp; Encrypted</strong>\n <span>Your information is protected end-to-end and handled in accordance with our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Instant Access</strong>\n <span>Once activated, you'll get immediate access to programs, rosters, and service requests.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Team &amp; Client Network</strong>\n <span>Connect with certified professionals nationwide and manage your team from a single dashboard.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Complete Your Profile</strong>\n <span>A complete profile unlocks every feature and makes you visible to clients and partners.</span>\n </div>\n </li>\n </ul>\n\n <div class=\"cp-brand-contact\">\n <a *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.email\"\n [href]=\"'mailto:' + (privacyAndTerms.contactEmail || privacyAndTerms.email)\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail || privacyAndTerms?.email }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n <a *ngIf=\"privacyAndTerms?.websiteurl\" [href]=\"privacyAndTerms.websiteurl\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"cp-brand-contact__link cp-brand-contact__link--website\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\" />\n </svg>\n Visit {{ privacyAndTerms?.companyName || 'our website' }}\n <svg viewBox=\"0 0 24 24\" class=\"cp-brand-contact__ext\">\n <path\n d=\"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\" />\n </svg>\n </a>\n </div>\n\n </aside>\n\n <!-- Right: State-specific content -->\n <main class=\"cp-brand-right\">\n\n <!-- No Email Error -->\n <div *ngIf=\"noEmailError\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n </div>\n <h2>Invalid Access Link</h2>\n <p>This page requires a valid invitation link. Please use the link from your invitation email to claim your\n account.</p>\n </div>\n </div>\n\n <!-- Account Lookup: Loading -->\n <div *ngIf=\"isLookingUpAccount\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card cp-lookup-loading\">\n <span class=\"cp-spinner cp-lookup-spinner\"></span>\n <p>Looking up your account\u2026</p>\n </div>\n </div>\n\n <!-- Account Not Found -->\n <div *ngIf=\"!isLookingUpAccount && !auth0UserData && showAccountNotFound\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon cp-invalid-icon--warn\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 5h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n </div>\n <p [style.margin-bottom]=\"pendingParamType ? '16px' : null\">\n The email address <strong>{{ userEmail }}</strong> is not associated with an account on our platform.\n Please click the button below to create a new account.\n </p>\n <!-- Pre-assigned role preview when type exists in invitation link -->\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"pendingParamType && role.type === pendingParamType\" class=\"cp-anf-role-preview\">\n <span class=\"cp-anf-role-label\">Your pre-assigned role</span>\n <div class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </div>\n </ng-container>\n <button type=\"button\" class=\"cp-btn\" style=\"margin-top:20px\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\"\n fill=\"#fff\" />\n </svg>\n Create New Account\n </button>\n </div>\n </div>\n\n <!-- Account Found -->\n <div *ngIf=\"!isLookingUpAccount && auth0UserData\" class=\"cp-brand-state\">\n <div class=\"cp-anf-card\">\n <div class=\"cp-anf-card__header\">\n <div class=\"cp-anf-avatar\">\n {{ (auth0UserData.userDetails?.firstName?.[0] || '') + (auth0UserData.userDetails?.lastName?.[0] || '') ||\n '?' }}\n </div>\n <div class=\"cp-anf-card__identity\">\n <h2 class=\"cp-anf-card__name\">{{ auth0UserData.userDetails?.firstName }} {{\n auth0UserData.userDetails?.lastName }}</h2>\n <span class=\"cp-anf-card__email\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ auth0UserData.email }}\n </span>\n <div class=\"cp-anf-roles\" *ngIf=\"auth0UserData.userDetails?.userRoles?.length\">\n <span class=\"cp-anf-role\" *ngFor=\"let r of auth0UserData.userDetails.userRoles\">{{ r.roleName }}</span>\n </div>\n </div>\n </div>\n <div class=\"cp-anf-card__notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\" />\n </svg>\n An account already exists for this email address.\n </div>\n <button type=\"button\" class=\"cp-anf-signin-btn\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\"\n fill=\"#fff\" />\n </svg>\n Sign In to Your Account\n </button>\n </div>\n </div>\n\n </main>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Success State \u2500\u2500\u2500 -->\n<div *ngIf=\"submitSuccess\" class=\"cp-success-page\">\n <div class=\"cp-success-card\">\n <div class=\"cp-success-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <h2>{{ userHasExistingDetails ? 'Profile Updated!' : 'Account Activated!' }}</h2>\n <p>{{ userHasExistingDetails ? 'Your profile has been saved successfully.' : 'Your account has been successfully\n activated.' }}</p>\n <button *ngIf=\"!isInitialSetupCompleted && libConfig?.initialUrl\" type=\"button\" class=\"cp-btn\"\n style=\"margin-top:20px\" (click)=\"navigateToInitialProcess()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\"\n fill=\"#fff\" />\n </svg>\n Complete Initial Setup\n </button>\n <button type=\"button\" class=\"cp-btn\" [class.cp-btn--ghost]=\"!isInitialSetupCompleted && libConfig?.initialUrl\"\n style=\"margin-top:10px\" (click)=\"navigateToDashboard()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\" fill=\"currentColor\" />\n </svg>\n Go to Dashboard\n </button>\n <button *ngIf=\"!userHasExistingDetails\" type=\"button\" class=\"cp-btn cp-btn--ghost\" style=\"margin-top:10px\"\n (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\" />\n </svg>\n Sign In Instead\n </button>\n </div>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Main Layout \u2500\u2500\u2500 -->\n<div *ngIf=\"!noEmailError && !submitSuccess && !auth0UserData && !isLookingUpAccount && !isInitializing\"\n class=\"cp-page\">\n\n <!-- Left Panel \u2014 Status Tracker -->\n <aside class=\"cp-left\">\n <div class=\"cp-left-inner mt-1\">\n\n <!-- User identity card -->\n <div class=\"cp-sb-user\">\n <div class=\"cp-sb-avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-sb-avatar__img\" />\n <span *ngIf=\"!profilePreviewUrl\" class=\"cp-sb-avatar__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </span>\n </div>\n <div class=\"cp-sb-user__info\">\n <strong class=\"cp-sb-user__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) :\n 'Your Profile' }}\n </strong>\n <span class=\"cp-sb-user__email\">{{ userEmail }}</span>\n </div>\n </div>\n\n <!-- Hero intro -->\n <div class=\"cp-sb-hero\">\n <span class=\"cp-sb-eyebrow\">{{ userHasExistingDetails ? 'Profile Update' : 'Claim Your Account' }}<ng-container\n *ngIf=\"!userHasExistingDetails && (selectedRole?.name || pendingRoleName)\"> \u2014 {{ selectedRole?.name ||\n pendingRoleName }}</ng-container></span>\n <p class=\"cp-sb-intro\">\n {{ userHasExistingDetails\n ? 'Review and update your personal, role, and business information below.'\n : 'Complete this form to activate your account and unlock full platform access.' }}\n </p>\n </div>\n\n <!-- Progress bar -->\n <div class=\"cp-sb-progress\">\n <div class=\"cp-sb-progress__bar\">\n <div class=\"cp-sb-progress__fill\" [style.width.%]=\"overallProgress\"></div>\n </div>\n <span class=\"cp-sb-progress__label\">{{ overallProgress }}% complete</span>\n </div>\n\n <!-- Section status steps -->\n <ul class=\"cp-steps\">\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionPersonalDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Personal Information</span>\n <span class=\"cp-step__sub\">Name, address, profile photo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionRoleDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Account Setup</span>\n <span class=\"cp-step__sub\">Role selection{{ (setPasswordEnabled || resetPasswordEnabled) ? ', password' : ''\n }}</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" *ngIf=\"isBusiness\" [class.cp-step--done]=\"sectionBusinessDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Business Info</span>\n <span class=\"cp-step__sub\">Name, email, address, logo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n </ul>\n\n <!-- Feature highlights -->\n <ul class=\"cp-sb-features\">\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div>\n <strong>Secure &amp; Encrypted</strong>\n <span>Protected end-to-end per our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div>\n <strong>Instant Access</strong>\n <span>Immediate access to programs and service requests.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div>\n <strong>Professional Network</strong>\n <span>Connect with certified professionals nationwide.</span>\n </div>\n </li>\n </ul>\n\n <!-- Footer contact -->\n <div class=\"cp-left-contact\" *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.phone\">\n <a *ngIf=\"privacyAndTerms?.contactEmail\" [href]=\"'mailto:' + privacyAndTerms.contactEmail\"\n class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n </div>\n\n </div>\n </aside>\n\n <!-- Right Panel \u2014 Form -->\n <main class=\"cp-right\">\n\n <!-- Mobile-only top bar -->\n <div class=\"cp-mobile-bar\">\n <img *ngIf=\"privacyAndTerms?.logoUrl\" [src]=\"privacyAndTerms.logoUrl\" [alt]=\"privacyAndTerms?.companyName\"\n class=\"cp-mobile-logo\" />\n <span *ngIf=\"!privacyAndTerms?.logoUrl\" class=\"cp-mobile-company\">{{ privacyAndTerms?.companyName }}</span>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn cp-logout-btn--mobile\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Logout\n </button>\n </div>\n\n <!-- \u2500\u2500\u2500 Profile Banner \u2500\u2500\u2500 -->\n <div class=\"cp-banner\">\n <div class=\"cp-banner__avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-banner__img\" />\n <div *ngIf=\"!profilePreviewUrl\" class=\"cp-banner__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </div>\n </div>\n <div class=\"cp-banner__info\">\n <div class=\"cp-banner__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) : 'Your\n Profile' }}\n </div>\n <div class=\"cp-banner__meta\">\n <span class=\"cp-banner__email\" *ngIf=\"userEmail\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ userEmail }}\n </span>\n <span class=\"cp-banner__badge\" [class.cp-banner__badge--update]=\"userHasExistingDetails\">\n {{ userHasExistingDetails ? 'Profile Update' : 'Account Activation' }}\n </span>\n </div>\n <div class=\"cp-banner__loading\" *ngIf=\"isLoadingUser\">\n <span class=\"cp-spinner cp-spinner--sm\"></span> Loading profile\u2026\n </div>\n </div>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn--banner\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Sign Out\n </button>\n </div>\n\n <div class=\"cp-form-wrap\">\n\n <div class=\"cp-error cp-alert\" *ngIf=\"userLookupError\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n {{ userLookupError }}\n </div>\n\n <form (ngSubmit)=\"onSubmit()\" novalidate>\n\n <!-- \u2550\u2550\u2550 SECTION: Personal Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" [formGroup]=\"userForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Personal Information</h3>\n <p class=\"cp-card__sub\">Name, contact, address and profile photo</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionPersonalDone && sectionPhotoDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <!-- Pending notice: shown until a role is selected -->\n <div *ngIf=\"!selectedRoleValue && !isLoadingUser\" class=\"cp-pending-notice\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Please select your role in the Account Setup section below to unlock these fields.\n </div>\n <div [class.cp-fields-pending]=\"!selectedRoleValue && !isLoadingUser\">\n <div class=\"cp-biz-layout\">\n <!-- Left: fields -->\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"firstName\">First Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"firstName\" formControlName=\"firstName\" placeholder=\"Jane\"\n [class.is-invalid]=\"u['firstName'].invalid && u['firstName'].touched\"\n autocomplete=\"given-name\" />\n <div class=\"cp-error\" *ngIf=\"u['firstName'].invalid && u['firstName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"lastName\">Last Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"lastName\" formControlName=\"lastName\" placeholder=\"Doe\"\n [class.is-invalid]=\"u['lastName'].invalid && u['lastName'].touched\"\n autocomplete=\"family-name\" />\n <div class=\"cp-error\" *ngIf=\"u['lastName'].invalid && u['lastName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"phoneNumber\">Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"phoneNumber\" formControlName=\"phoneNumber\" placeholder=\"(555) 123-4567\"\n maxlength=\"14\" [class.is-invalid]=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\"\n (input)=\"formatPhone($event, 'user')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\">Required</div>\n </div>\n </div>\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"address1\">Street Address</label>\n <input type=\"text\" id=\"address1\" formControlName=\"address1\" placeholder=\"123 Main Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onAddressChange($event)\" autocomplete=\"off\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"address2\">Address Line 2</label>\n <input type=\"text\" id=\"address2\" formControlName=\"address2\" placeholder=\"Apt, Suite, Unit, etc.\"\n autocomplete=\"address-line2\" />\n </div>\n\n <div class=\"cp-field\">\n <label for=\"city\">City</label>\n <input type=\"text\" id=\"city\" formControlName=\"city\" placeholder=\"Orlando\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--4\">\n <div class=\"cp-field\">\n <label for=\"state\">State</label>\n <input type=\"text\" id=\"state\" formControlName=\"state\" placeholder=\"FL\" maxlength=\"2\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"county\">County</label>\n <input type=\"text\" id=\"county\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"zipcode\">Zip Code</label>\n <input type=\"text\" id=\"zipcode\" formControlName=\"zipcode\" placeholder=\"32801\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"country\">Country <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"country\" formControlName=\"country\" placeholder=\"US\"\n [class.is-invalid]=\"u['country'].invalid && u['country'].touched\" autocomplete=\"country\" />\n <div class=\"cp-error\" *ngIf=\"u['country'].invalid && u['country'].touched\">Required</div>\n </div>\n </div>\n\n <input type=\"hidden\" formControlName=\"latitude\" />\n <input type=\"hidden\" formControlName=\"longitude\" />\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"yearsOfExperince\">Years of Experience <span class=\"req\">*</span></label>\n <ng-select id=\"yearsOfExperince\" formControlName=\"yearsOfExperince\" [items]=\"expYears\"\n bindLabel=\"text\" bindValue=\"value\" placeholder=\"Select years\" [clearable]=\"false\"\n [class.is-invalid]=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"userJobTitle\">Job Title(s) <span class=\"req\">*</span></label>\n <ng-select id=\"userJobTitle\" formControlName=\"userJobTitle\" [items]=\"jobTitles\" bindLabel=\"text\"\n bindValue=\"value\" [multiple]=\"true\" placeholder=\"Select job title(s)\"\n [class.is-invalid]=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">Required\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"industries\">Industries</label>\n <ng-select id=\"industries\" formControlName=\"industries\" [items]=\"industries\"\n bindLabel=\"industryName\" bindValue=\"id\" [multiple]=\"true\" [loading]=\"isIndustriesLoading\"\n placeholder=\"Select industries (optional)\">\n </ng-select>\n </div>\n </div>\n\n </div>\n\n <!-- Right: profile photo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Profile Photo</label>\n <div class=\"cp-biz-logo__area cp-profile-logo-area\" (click)=\"cpProfileInput.click()\">\n <input #cpProfileInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onProfileFileChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"profilePreviewUrl; else profilePlaceholder\">\n <img [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-profile-logo-img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #profilePlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n <span>Upload Photo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div><!-- /cp-fields-pending -->\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Account Setup \u2014 Role Cards + Password \u2550\u2550\u2550 -->\n <div class=\"cp-card\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Account Setup</h3>\n <p class=\"cp-card__sub\">Select your role and configure your password</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionRoleDone && sectionPasswordDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n\n <!-- Role Cards (ref: initial-process userViewRoles) -->\n <div class=\"cp-field\">\n <label>\n Select Your Role\n <span class=\"req\" *ngIf=\"!isInitialSetupCompleted && !lockedToTypeFromParam\">*</span>\n <span *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam\"\n style=\"font-weight:400;color:#6b7c8a;font-size:11px;margin-left:4px;\">(locked after initial\n setup)</span>\n <span *ngIf=\"lockedToTypeFromParam\"\n style=\"font-weight:400;color:#2563eb;font-size:11px;margin-left:4px;\">(pre-assigned)</span>\n </label>\n\n <!-- When locked from param, show only the pre-assigned card centred -->\n <div *ngIf=\"lockedToTypeFromParam\" class=\"cp-role-cards cp-role-cards--preassigned\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"role.selected\" class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Normal grid of all role cards -->\n <div *ngIf=\"!lockedToTypeFromParam\" class=\"cp-role-cards\"\n [class.cp-role-cards--locked]=\"isInitialSetupCompleted\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div class=\"cp-role-card\" [class.cp-role-card--selected]=\"role.selected\"\n [class.cp-role-card--disabled]=\"isInitialSetupCompleted\"\n (click)=\"!isInitialSetupCompleted && selectedUserRole(role)\"\n [attr.role]=\"isInitialSetupCompleted ? null : 'button'\" [attr.aria-pressed]=\"role.selected\"\n [attr.aria-label]=\"role.name\"\n [attr.title]=\"isInitialSetupCompleted ? 'Role cannot be changed after initial setup is complete' : null\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\" *ngIf=\"role.selected\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Pre-assigned notice (from query param / localStorage) -->\n <div class=\"cp-role-locked-notice cp-role-preassigned-notice\"\n *ngIf=\"lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n Your role has been pre-assigned from your invitation. Contact support to change it.\n </div>\n\n <!-- Locked after initial setup notice -->\n <div class=\"cp-role-locked-notice\"\n *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Role is locked. Contact support to change it.\n </div>\n\n <div class=\"cp-error\"\n *ngIf=\"!sectionRoleDone && validatePage === 1 && !isInitialSetupCompleted && !lockedToTypeFromParam\">\n Please\n select a role</div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingUser\" [formGroup]=\"userForm\">\n\n <!-- Existing user: reset toggle -->\n <div class=\"cp-toggle-row\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Reset Password</span>\n <span class=\"cp-toggle-row__hint\">Enable to change your current password</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"resetPasswordEnabled\" (change)=\"toggleResetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"resetPasswordEnabled\">\n <ng-container *ngIf=\"passwordStep === 1\">\n <div class=\"cp-row\">\n <div class=\"cp-field\">\n <label for=\"newPassword\">New Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"newPassword\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPasswordReset\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPasswordReset\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-pw-success\" *ngIf=\"passwordChangeSuccess\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n Password changed successfully.\n </div>\n <button type=\"button\" class=\"cp-btn cp-btn--outline cp-btn--sm\" (click)=\"changePassword()\"\n [disabled]=\"isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Sending\u2026' : 'Send Verification Code' }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"passwordStep === 2\">\n <div class=\"cp-otp-wrap\">\n <p class=\"cp-otp-hint\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px;flex-shrink:0\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Code sent to <strong>{{ userEmail }}</strong>\n </p>\n <div class=\"cp-otp-timer\" [class.cp-otp-timer--expired]=\"otpExpired\">\n <svg viewBox=\"0 0 24 24\" style=\"width:14px;height:14px\">\n <path\n d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n <span *ngIf=\"!otpExpired\">{{ otpMinutes }}:{{ otpSeconds < 10 ? '0' + otpSeconds : otpSeconds\n }}</span>\n <span *ngIf=\"otpExpired\">Code expired</span>\n </div>\n <div class=\"cp-field\">\n <label for=\"otpInput\">Enter 6-digit code</label>\n <input type=\"text\" id=\"otpInput\" [(ngModel)]=\"otpValue\" [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\" maxlength=\"6\" inputmode=\"numeric\" class=\"cp-otp-input\" />\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-otp-actions\">\n <button type=\"button\" class=\"cp-btn\" (click)=\"verifyPasswordOtp()\"\n [disabled]=\"otpExpired || !otpValue || isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Verifying\u2026' : 'Verify & Change Password' }}\n </button>\n <button type=\"button\" class=\"cp-btn cp-btn--ghost\" *ngIf=\"canResendOtp\"\n (click)=\"changePassword(true)\" [disabled]=\"isPasswordChanging\">Resend Code</button>\n <button type=\"button\" class=\"cp-btn-link\" (click)=\"cancelPasswordChange()\">Cancel</button>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Business Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" *ngIf=\"isBusiness\" [formGroup]=\"companyForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Business Information</h3>\n <p class=\"cp-card__sub\">Company details and branding</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!sectionBusinessDone\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <div class=\"cp-biz-layout\">\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"companyName\">Business Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"companyName\" formControlName=\"companyName\" placeholder=\"Acme Corp\"\n [class.is-invalid]=\"c['companyName'].invalid && c['companyName'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyName'].invalid && c['companyName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyEmail\">Business Email <span class=\"req\">*</span></label>\n <input type=\"email\" id=\"companyEmail\" formControlName=\"companyEmail\" placeholder=\"info@acme.com\"\n [class.is-invalid]=\"c['companyEmail'].invalid && c['companyEmail'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyEmail'].invalid && c['companyEmail'].touched\">\n <span *ngIf=\"c['companyEmail'].errors?.['required']\">Required</span>\n <span *ngIf=\"c['companyEmail'].errors?.['email']\">Invalid email</span>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyPhoneNumber\">Business Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"companyPhoneNumber\" formControlName=\"companyPhoneNumber\"\n placeholder=\"(555) 123-4567\" maxlength=\"14\"\n [class.is-invalid]=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\"\n (input)=\"formatPhone($event, 'company')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\">\n Required</div>\n </div>\n </div>\n\n\n <div class=\"cp-field\">\n <label for=\"bizAddress1\">Business Address</label>\n <input type=\"text\" id=\"bizAddress1\" formControlName=\"address1\" placeholder=\"123 Business Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onBusinessAddressChange($event)\" autocomplete=\"off\" />\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCity\">City</label>\n <input type=\"text\" id=\"bizCity\" formControlName=\"city\" placeholder=\"City\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizState\">State</label>\n <input type=\"text\" id=\"bizState\" formControlName=\"state\" placeholder=\"ST\" maxlength=\"2\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCounty\">County</label>\n <input type=\"text\" id=\"bizCounty\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizZipcode\">Zip</label>\n <input type=\"text\" id=\"bizZipcode\" formControlName=\"zipcode\" placeholder=\"00000\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizCountry\">Country</label>\n <input type=\"text\" id=\"bizCountry\" formControlName=\"country\" placeholder=\"US\"\n autocomplete=\"country\" />\n </div>\n </div>\n </div>\n\n <!-- Business logo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Business Logo</label>\n <div class=\"cp-biz-logo__area\" (click)=\"cpLogoInput.click()\">\n <input #cpLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onBusinessLogoChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"logoPreviewUrl; else logoPlaceholder\">\n <img [src]=\"logoPreviewUrl\" alt=\"Business logo\" class=\"cp-biz-logo__img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #logoPlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n <span>Upload Logo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 Footer: Terms + Submit \u2550\u2550\u2550 -->\n <div class=\"cp-form-footer\">\n <div class=\"cp-terms\">\n <label class=\"cp-terms__label\">\n <input type=\"checkbox\" class=\"cp-terms__check\" [checked]=\"model.acceptTerms && model.privacy\"\n (change)=\"onTermsCheckboxChange($event)\" />\n <span class=\"cp-terms__box\"></span>\n <span>I accept the\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Terms and Conditions', $event)\">Terms &amp;\n Conditions</a>\n and\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Privacy Statement', $event)\">Privacy Policy</a>\n </span>\n </label>\n <div class=\"cp-error cp-terms-error\" *ngIf=\"(!model.acceptTerms || !model.privacy) && validatePage === 1\">\n You must accept the Terms and Privacy Policy to continue\n </div>\n </div>\n\n <div class=\"cp-error cp-submit-error\" *ngIf=\"submitError\">{{ submitError }}</div>\n <div class=\"cp-error cp-submit-error\" *ngIf=\"providerError\">{{ providerError }}</div>\n\n <button type=\"submit\" class=\"cp-btn cp-btn--submit\" [disabled]=\"isSubmitting\">\n <span *ngIf=\"isSubmitting\" class=\"cp-spinner cp-spinner-btn\"></span>\n <svg *ngIf=\"!isSubmitting\" viewBox=\"0 0 24 24\" style=\"width:18px;height:18px\">\n <path *ngIf=\"userHasExistingDetails\"\n d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\"\n fill=\"#fff\" />\n <path *ngIf=\"!userHasExistingDetails\" d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" fill=\"#fff\" />\n </svg>\n {{ uploadStatus || (isSubmitting ? 'Processing\u2026' : (userHasExistingDetails ? 'Save Changes' : 'Activate My\n Account')) }}\n </button>\n </div>\n\n </form>\n </div>\n\n </main>\n\n</div>\n\n<!-- \u2500\u2500\u2500 Terms & Privacy Modal \u2500\u2500\u2500 -->\n<ng-template #termsAndConditionsModel>\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\n <div class=\"modal-content tc-modal\">\n <div class=\"tc-modal-header\">\n <div class=\"tc-header-icon\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\n <button type=\"button\" class=\"tc-modal-close\" (click)=\"closeModal()\" aria-label=\"Close\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div class=\"tc-modal-body\">\n <ng-container *ngIf=\"termsAndConditionTitle === 'Terms and Conditions'\">\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-terms-conditions>\n </ng-container>\n <ng-container *ngIf=\"termsAndConditionTitle !== 'Terms and Conditions'\">\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-privacy-policy>\n </ng-container>\n </div>\n <div class=\"tc-modal-footer\">\n <button type=\"button\" class=\"tc-btn tc-btn-close\" (click)=\"closeModal()\">Close</button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cp-page{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#0c1620}@media (max-width: 860px){.cp-page{flex-direction:column}}.cp-page--brand{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif}@media (max-width: 860px){.cp-page--brand{flex-direction:column}}.cp-brand-left{width:42%;min-width:320px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:10px 48px;position:sticky;top:20px;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-brand-left{position:static;height:auto;width:100%;min-width:unset;padding:32px 24px 28px;border-right:none;border-bottom:1px solid #e2eaf2}}.cp-brand-logo-wrap{margin-bottom:10px}.cp-brand-logo-img{max-height:48px;max-width:200px;object-fit:contain;display:block}.cp-brand-logo-svg{display:block;height:48px;width:auto;max-width:200px;fill:#4077ad}.cp-brand-logo-text{font-size:20px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-brand-hero{margin-bottom:15px}.cp-brand-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.16);border-radius:99px;padding:3px 10px;margin-bottom:16px}.cp-brand-heading{font-size:26px;font-weight:800;color:#0c1620;line-height:1.22;letter-spacing:-.4px;margin:0 0 14px}@media (max-width: 860px){.cp-brand-heading{font-size:21px}}.cp-brand-intro{font-size:13.5px;color:#6b7c8a;line-height:1.78;margin:0}.cp-brand-features{list-style:none;padding:0;display:flex;flex-direction:column;gap:6px}.cp-brand-feature{display:flex;align-items:flex-start;gap:13px;padding:13px 15px;border-radius:9px;background:#f8fafc;border:1px solid #e8edf3;transition:border-color .18s,background .18s}.cp-brand-feature:hover{background:#4077ad08;border-color:#4077ad38}.cp-brand-feature__icon{width:34px;height:34px;flex-shrink:0;border-radius:8px;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-brand-feature__icon svg{width:17px;height:17px}.cp-brand-feature__icon svg path{fill:#4077ad}.cp-brand-feature__body{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.cp-brand-feature__body strong{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1.2}.cp-brand-feature__body span{font-size:11.5px;color:#6b7c8a;line-height:1.62}.cp-brand-contact{display:flex;flex-direction:column;gap:8px;margin-top:24px;padding-top:20px;border-top:1px solid #e8edf3}.cp-brand-contact__link{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-brand-contact__link svg{width:14px;height:14px;flex-shrink:0}.cp-brand-contact__link svg path{fill:currentColor}.cp-brand-contact__link:hover{color:#4077ad}.cp-brand-contact__link--website{font-weight:600;color:#4077ad}.cp-brand-contact__link--website:hover{color:#335f8a}.cp-brand-contact__ext{width:11px!important;height:11px!important;opacity:.65}.cp-brand-right{flex:1;background:#eef1f4;display:flex;align-items:center;justify-content:center;padding:40px 28px;min-width:0}@media (max-width: 860px){.cp-brand-right{padding:28px 20px 48px}}.cp-brand-state{width:100%;max-width:460px;display:flex;flex-direction:column;align-items:center}.cp-brand-state .cp-invalid-card,.cp-brand-state .cp-anf-card{width:100%}.cp-left{width:40%;min-width:300px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:44px 40px;position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-left{display:none}}.cp-left-inner{display:flex;flex-direction:column;height:100%;gap:0}.cp-logo{margin-bottom:24px}.cp-logo-img{max-height:44px;max-width:180px;object-fit:contain;display:block}.cp-logo-fallback{font-size:18px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-sb-user{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:6px;background:#4077ad0d;border:1px solid rgba(64,119,173,.12);margin-bottom:20px}.cp-sb-avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;background:#4077ad;display:flex;align-items:center;justify-content:center;overflow:hidden}.cp-sb-avatar__img{width:100%;height:100%;object-fit:cover}.cp-sb-avatar__initials{font-size:15px;font-weight:700;color:#fff;text-transform:uppercase}.cp-sb-user__info{display:flex;flex-direction:column;gap:2px;min-width:0}.cp-sb-user__info strong{font-size:13px;font-weight:700;color:#0c1620;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-user__info span{font-size:11px;color:#6b7c8a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-signout{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;margin-top:20px;margin-bottom:4px;background:transparent;border:1.5px solid #e2eaf2;border-radius:6px;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;text-align:left}.cp-sb-signout svg{width:16px;height:16px;flex-shrink:0}.cp-sb-signout svg path{fill:#6b7c8a}.cp-sb-signout:hover{border-color:#f87171;color:#dc2626;background:#dc26260a}.cp-sb-signout:hover svg path{fill:#dc2626}.cp-sb-hero{margin-bottom:16px}.cp-sb-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#4077ad;margin-bottom:6px}.cp-sb-intro{font-size:12px;line-height:1.6;color:#6b7c8a;margin:0}.cp-sb-progress{margin-bottom:20px}.cp-sb-progress__bar{height:5px;background:#e2eaf2;border-radius:99px;overflow:hidden;margin-bottom:5px}.cp-sb-progress__fill{height:100%;background:linear-gradient(90deg,#4077ad,#5b9fd4);border-radius:99px;transition:width .4s ease;min-width:4px}.cp-sb-progress__label{font-size:10.5px;font-weight:600;color:#6b7c8a}.cp-sb-features{list-style:none;padding:0;margin:20px 0 0;display:flex;flex-direction:column;gap:12px}.cp-sb-feature{display:flex;align-items:flex-start;gap:10px}.cp-sb-feature__icon{width:28px;height:28px;border-radius:6px;background:#4077ad14;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cp-sb-feature__icon svg{width:15px;height:15px}.cp-sb-feature__icon svg path{fill:#4077ad}.cp-sb-feature div{display:flex;flex-direction:column;gap:2px}.cp-sb-feature div strong{font-size:11.5px;font-weight:700;color:#0c1620}.cp-sb-feature div span{font-size:11px;color:#6b7c8a;line-height:1.5}.cp-steps{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;position:relative}.cp-steps:before{content:\"\";position:absolute;left:17px;top:20px;width:2px;bottom:20px;background:#e2eaf2;z-index:0}.cp-step{display:flex;align-items:flex-start;gap:12px;padding:10px 0;position:relative;z-index:1}.cp-step__icon{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:#fff;border:2px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:border-color .2s,background .2s}.cp-step__icon svg{width:15px;height:15px}.cp-step__icon svg path{fill:#6b7c8a;transition:fill .2s}.cp-step__body{flex:1;display:flex;flex-direction:column;gap:2px;padding-top:5px;min-width:0}.cp-step__label{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1}.cp-step__sub{font-size:11px;color:#6b7c8a;line-height:1.4}.cp-step__badge{width:20px;height:20px;border-radius:50%;flex-shrink:0;margin-top:7px;background:#d3dce3;display:flex;align-items:center;justify-content:center;transition:background .2s}.cp-step__badge svg{width:12px;height:12px}.cp-step__badge svg path{fill:#fff}.cp-step__badge span{font-size:10px;font-weight:700;color:#6b7c8a}.cp-step__badge--done{background:#28a745}.cp-step__badge--done span{display:none}.cp-step--done .cp-step__icon{background:#4077ad14;border-color:#4077ad}.cp-step--done .cp-step__icon svg path{fill:#4077ad}.cp-step--done .cp-step__label{color:#4077ad}.cp-left-contact{display:flex;flex-direction:column;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid #e8edf3}.cp-contact-link{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-contact-link svg{width:14px;height:14px;flex-shrink:0}.cp-contact-link svg path{fill:currentColor}.cp-contact-link:hover{color:#4077ad}.cp-left-footnote{margin-top:18px;font-size:12.5px}.cp-left-footnote a{display:inline-flex;align-items:center;gap:5px;color:#4077ad;text-decoration:none;font-weight:600;transition:color .15s}.cp-left-footnote a svg{width:12px;height:12px}.cp-left-footnote a svg path{fill:#4077ad}.cp-left-footnote a:hover{color:#335f8a;text-decoration:underline}.cp-mobile-bar{display:none;align-items:center;justify-content:space-between;padding:14px 20px;background:#fff;border-bottom:1px solid #e2eaf2}@media (max-width: 860px){.cp-mobile-bar{display:flex}}.cp-mobile-logo{max-height:36px;max-width:160px;object-fit:contain}.cp-mobile-company{font-size:18px;font-weight:800;color:#4077ad}.cp-right{flex:1;background:#f0f4f8;display:flex;flex-direction:column;align-items:center;padding:0 0 64px;overflow-y:auto;min-width:0}@media (max-width: 860px){.cp-right{padding:0 0 48px}}.cp-invalid-page,.cp-success-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#eef1f4;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;padding:24px}.cp-invalid-card,.cp-success-card{background:#fff;border-radius:12px;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;padding:52px 44px;max-width:440px;width:100%;text-align:center}.cp-invalid-card h2,.cp-success-card h2{font-size:22px;font-weight:800;color:#0c1620;margin-bottom:12px}.cp-invalid-card p,.cp-success-card p{font-size:14px;color:#6b7c8a;line-height:1.7;margin-bottom:28px}.cp-invalid-icon,.cp-success-icon{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 24px}.cp-invalid-icon svg,.cp-success-icon svg{width:32px;height:32px}.cp-invalid-icon{background:#dc35451a}.cp-invalid-icon svg path{fill:#dc3545}.cp-invalid-icon--warn{background:#f59e0b1a}.cp-invalid-icon--warn svg path{fill:#f59e0b}.cp-success-icon{background:#28a7451a}.cp-success-icon svg path{fill:#28a745}.cp-anf-hint{font-size:13px;color:#6b7280;margin-top:4px}.cp-form-wrap{width:100%;flex:1;display:flex;flex-direction:column;gap:0;padding-bottom:32px}.cp-banner{width:100%;display:flex;align-items:center;gap:20px;padding:20px 32px;background:linear-gradient(135deg,#4077ad,#2f5880);border-bottom:1px solid rgba(0,0,0,.12);position:sticky;top:0;z-index:10;flex-shrink:0}@media (max-width: 860px){.cp-banner{padding:16px 20px;position:static}}@media (max-width: 480px){.cp-banner{padding:14px 16px;gap:12px}}.cp-banner__avatar{position:relative;flex-shrink:0;width:60px;height:60px;border-radius:50%;border:2.5px solid rgba(255,255,255,.4);overflow:hidden;background:#ffffff26}@media (max-width: 480px){.cp-banner__avatar{width:46px;height:46px}}.cp-banner__img{width:100%;height:100%;object-fit:cover;display:block}.cp-banner__initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#ffffffe6;text-transform:uppercase;letter-spacing:-.5px}@media (max-width: 480px){.cp-banner__initials{font-size:16px}}.cp-banner__info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.cp-banner__name{font-size:17px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}@media (max-width: 480px){.cp-banner__name{font-size:14px}}.cp-banner__meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.cp-banner__email{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#fffc;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cp-banner__email svg{width:11px;height:11px}.cp-banner__email svg path{fill:#fffc}.cp-banner__badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:3px 8px;border-radius:99px;background:#fff3;color:#ffffffe6}.cp-banner__badge--update{background:#28a7454d;color:#a8f5c0}.cp-banner__loading{display:flex;align-items:center;gap:6px;font-size:11px;color:#ffffffb3;margin-top:2px}.cp-banner__loading .cp-spinner--sm{border-color:#fff6;border-top-color:#fff}.cp-logout-btn--banner{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;background:#ffffff1f;border:1px solid rgba(255,255,255,.25);color:#ffffffe6;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn--banner svg{width:15px;height:15px}.cp-logout-btn--banner svg path{fill:#ffffffe6}.cp-logout-btn--banner:hover{background:#dc3545bf;border-color:transparent;color:#fff}.cp-logout-btn--banner:hover svg path{fill:#fff}@media (max-width: 480px){.cp-logout-btn--banner{padding:7px 10px;font-size:11px}}.cp-alert{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:6px;margin:20px 24px 0;background:#dc35450f;border:1px solid rgba(220,53,69,.18);font-size:13px;color:#c0392b}.cp-alert svg path{fill:#c0392b}.cp-card{background:#fff;border:1px solid #e2eaf2;margin:16px 24px 0;border-radius:10px;overflow:visible;box-shadow:0 1px 3px #0000000a}.cp-card:first-of-type{margin-top:20px}@media (max-width: 860px){.cp-card{margin:12px 16px 0}}@media (max-width: 480px){.cp-card{margin:10px 12px 0;border-radius:8px}}.cp-card__header{display:flex;align-items:center;gap:14px;padding:16px 24px;border-bottom:1px solid #f0f4f8;background:#fafbfc;border-radius:10px 10px 0 0;overflow:hidden}@media (max-width: 480px){.cp-card__header{padding:14px 16px;gap:10px;border-radius:8px 8px 0 0}}.cp-card__icon{width:36px;height:36px;border-radius:8px;flex-shrink:0;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-card__icon svg{width:18px;height:18px}.cp-card__icon svg path{fill:#4077ad}.cp-card__title{font-size:13.5px;font-weight:700;color:#0c1620;margin:0 0 2px;line-height:1}.cp-card__sub{font-size:11px;color:#6b7c8a;margin:0;line-height:1}.cp-card__status{margin-left:auto;flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#eef1f4;border:1.5px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:all .2s}.cp-card__status svg{width:14px;height:14px}.cp-card__status svg path{fill:#6b7c8a}.cp-card__status span{font-size:12px;font-weight:700;color:#6b7c8a}.cp-card__status--done{background:#28a745;border-color:#28a745}.cp-card__status--done svg path{fill:#fff}.cp-card__body{padding:20px 24px 16px}@media (max-width: 480px){.cp-card__body{padding:16px 16px 12px}}.cp-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.cp-row.cp-row-triple,.cp-row.cp-row--3{grid-template-columns:1fr 1fr 1fr}.cp-row.cp-row--4{grid-template-columns:1fr 1fr 1fr 1fr}@media (max-width: 640px){.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 560px){.cp-row{grid-template-columns:1fr}.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 400px){.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr}}.cp-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px;min-width:0}.cp-field label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-field label .req{color:#4077ad;margin-left:2px}.cp-field input,.cp-field select{box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px;font-size:13.5px;color:#0c1620;background:#fff;width:100%;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none;font-family:inherit}.cp-field input::placeholder,.cp-field select::placeholder{color:#aab8c2}.cp-field input:focus,.cp-field select:focus{outline:none;border-color:#4077ad;box-shadow:0 0 0 3px #4077ad26}.cp-field input.is-invalid,.cp-field select.is-invalid{border-color:#dc3545}.cp-field input.is-invalid:focus,.cp-field select.is-invalid:focus{box-shadow:0 0 0 3px #dc354526}.cp-select{position:relative}.cp-select:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #6b7c8a;pointer-events:none}.cp-select select{cursor:pointer;padding-right:32px}.cp-pw-wrap{position:relative}.cp-pw-wrap input{padding-right:42px}.cp-pw-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:4px;display:flex;align-items:center;color:#6b7c8a}.cp-pw-toggle svg{width:18px;height:18px}.cp-pw-toggle svg path{fill:#6b7c8a}.cp-pw-toggle:hover svg path{fill:#4077ad}.cp-pw-success{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#16a34a;margin:4px 0 10px}.cp-pw-success svg path{fill:#16a34a}.cp-readonly-wrap{position:relative;display:flex;align-items:center}.cp-readonly-wrap svg{position:absolute;left:12px;width:15px;height:15px;flex-shrink:0;pointer-events:none}.cp-readonly-wrap svg path{fill:#4077ad}.cp-input-readonly{width:100%;box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px 0 36px;font-size:13.5px;color:#0c1620;background:#4077ad0a;cursor:default;font-family:inherit;font-weight:500}.cp-autofill-note{font-size:11px;color:#4077ad;margin-top:3px;display:flex;align-items:center;gap:4px}.cp-email-display{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:6px 12px;background:#eef1f4;border:1.5px solid #d3dce3;border-radius:99px;font-size:12.5px;color:#0c1620;font-weight:500}.cp-email-display svg{width:14px;height:14px;flex-shrink:0}.cp-email-display svg path{fill:#4077ad}.cp-error{font-size:11.5px;color:#dc3545;margin-top:2px}.cp-terms-error{margin-top:4px}.cp-submit-error{margin-bottom:12px;font-size:13px;text-align:center}.cp-loading-hint{display:flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;margin-top:4px}.cp-new-user-hint{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:#4077ad;background:#4077ad0f;border:1px solid rgba(64,119,173,.18);border-radius:6px;padding:9px 13px;margin:6px 0 12px}.cp-new-user-hint svg{width:15px;height:15px;flex-shrink:0}.cp-new-user-hint svg path{fill:#4077ad}.cp-agreements{display:flex;flex-direction:column;gap:10px;margin:24px 0 4px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;border:1.5px solid #d3dce3;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#bac8d3;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eef1f4;border:1px solid #d3dce3;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13px;font-weight:600;color:#0c1620;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7c8a;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 13px;border-radius:8px;font-size:12px;font-weight:600;font-family:inherit;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.cp-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;height:46px;margin-top:10px;background:#4077ad;border:none;border-radius:6px;font-size:13.5px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;transition:background .15s,box-shadow .15s,transform .1s;font-family:inherit}.cp-btn:hover:not(:disabled){background:#335f8a;box-shadow:0 4px 12px #4077ad59}.cp-btn:active:not(:disabled){transform:scale(.99)}.cp-btn:disabled{opacity:.6;cursor:not-allowed}.cp-btn--submit{height:52px;font-size:15px;letter-spacing:.5px;background:linear-gradient(135deg,#4077ad,#335f8a);box-shadow:0 2px 8px #4077ad40;border-radius:8px;margin-top:0}.cp-btn--submit:hover:not(:disabled){box-shadow:0 6px 18px #4077ad66;filter:brightness(1.05)}.cp-btn--outline{background:#fff;color:#4077ad;border:1.5px solid #4077AD}.cp-btn--outline:hover:not(:disabled){background:#4077ad0d;box-shadow:none}.cp-btn--ghost{background:transparent;color:#6b7c8a;border:1.5px solid #d3dce3}.cp-btn--ghost:hover:not(:disabled){border-color:#4077ad;color:#4077ad;box-shadow:none}.cp-btn--sm{height:38px;font-size:12.5px}.cp-btn-link{background:none;border:none;font-family:inherit;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;margin-top:8px;padding:6px 0;text-decoration:underline}.cp-btn-link:hover{color:#4077ad}.cp-spinner{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cp-spin .7s linear infinite}.cp-spinner:not(.cp-spinner-btn){border-color:#4077ad4d;border-top-color:#4077ad}.cp-spinner--sm{width:11px;height:11px;border-color:#4077ad4d;border-top-color:#4077ad}@keyframes cp-spin{to{transform:rotate(360deg)}}.cp-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin-bottom:14px;background:#f8fafc;border:1px solid #e2eaf2;border-radius:6px}.cp-toggle-row__info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.cp-toggle-row__label{font-size:13px;font-weight:600;color:#0c1620}.cp-toggle-row__label em{font-style:normal;font-size:11px;font-weight:500;color:#6b7c8a;margin-left:4px}.cp-toggle-row__hint{font-size:11px;color:#6b7c8a}.cp-toggle-switch{position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0;cursor:pointer}.cp-toggle-switch input{opacity:0;width:0;height:0;position:absolute}.cp-toggle-switch input:checked+.cp-toggle-knob{background:#4077ad}.cp-toggle-switch input:checked+.cp-toggle-knob:before{transform:translate(18px)}.cp-toggle-knob{position:absolute;inset:0;background:#c8d5e0;border-radius:24px;transition:background .2s;cursor:pointer}.cp-toggle-knob:before{content:\"\";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0003}.cp-otp-wrap{margin-top:4px}.cp-otp-hint{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6b7c8a;margin:0 0 12px}.cp-otp-hint svg path{fill:#6b7c8a}.cp-otp-hint strong{color:#0c1620}.cp-otp-timer{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.18);border-radius:99px;padding:4px 12px;margin-bottom:14px}.cp-otp-timer svg path{fill:#4077ad}.cp-otp-timer--expired{color:#dc3545;background:#dc354512;border-color:#dc354533}.cp-otp-timer--expired svg path{fill:#dc3545}.cp-otp-input{letter-spacing:.15em;font-size:16px;font-weight:600}.cp-otp-actions{display:flex;flex-direction:column;gap:0;margin-top:4px}.cp-pending-notice{display:flex;align-items:flex-start;gap:9px;padding:10px 14px;margin-bottom:16px;background:#4077ad0d;border:1px solid rgba(64,119,173,.18);border-radius:6px;font-size:12px;font-weight:600;color:#4077ad;line-height:1.55}.cp-pending-notice svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}.cp-pending-notice svg path{fill:#4077ad}.cp-fields-pending{opacity:.42;pointer-events:none;filter:blur(.4px);-webkit-user-select:none;user-select:none}.cp-anf-role-preview{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 16px;margin-bottom:4px;background:#4077ad08;border:1px solid rgba(64,119,173,.14);border-radius:8px}.cp-anf-role-preview .cp-role-card{width:110px;pointer-events:none}.cp-anf-role-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#6b7c8a}.cp-role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px;margin-top:6px}@media (max-width: 480px){.cp-role-cards{grid-template-columns:repeat(3,1fr)}}.cp-role-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px 10px;border:2px solid #d3dce3;border-radius:6px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;-webkit-user-select:none;user-select:none}.cp-role-card:hover{border-color:#4077ad;box-shadow:0 2px 8px #4077ad1f}.cp-role-card--selected{border-color:#4077ad;background:#4077ad0d;box-shadow:0 0 0 3px #4077ad26}.cp-role-card__img{position:relative;width:48px;height:48px}.cp-role-card__img img{width:100%;height:100%;object-fit:contain}.cp-role-card__check{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:#4077ad;display:flex;align-items:center;justify-content:center}.cp-role-card__check svg{width:11px;height:11px}.cp-role-card__check svg path{fill:#fff}.cp-role-card__name{font-size:11px;font-weight:600;color:#0c1620;text-align:center;line-height:1.3}.cp-role-card--disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.cp-role-card--disabled:hover{border-color:#d3dce3;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected{border-color:#6b7c8a;background:#f8fafc;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected .cp-role-card__check{background:#6b7c8a}.cp-role-locked-notice{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:6px 12px;border-radius:99px;background:#f59e0b14;border:1px solid rgba(245,158,11,.25);font-size:11.5px;font-weight:600;color:#92400e}.cp-role-locked-notice svg{width:13px;height:13px;flex-shrink:0}.cp-role-locked-notice svg path{fill:#92400e}.cp-role-locked-notice.cp-role-preassigned-notice{background:#2563eb0f;border-color:#2563eb38;color:#1e40af}.cp-role-locked-notice.cp-role-preassigned-notice svg path{fill:#2563eb}.cp-role-cards--preassigned{display:flex;justify-content:flex-start;gap:0;margin-top:8px}.cp-role-cards--preassigned .cp-role-card--preassigned{width:140px;cursor:default;pointer-events:none;border-color:#2563eb;background:#2563eb0a;box-shadow:0 0 0 3px #2563eb1f}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__check{background:#2563eb}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__name{color:#1e40af;font-weight:700}.cp-form-footer{margin:16px 24px 0;background:#fff;border:1px solid #e2eaf2;border-radius:10px;padding:20px 24px;box-shadow:0 1px 3px #0000000a}@media (max-width: 860px){.cp-form-footer{margin:12px 16px 0}}@media (max-width: 480px){.cp-form-footer{margin:10px 12px 0;padding:16px;border-radius:8px}}.cp-terms{margin:0 0 16px}.cp-terms__label{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:12.5px;color:#6b7c8a;line-height:1.7;margin:0}.cp-terms__label a{color:#4077ad;text-decoration:underline;font-weight:600}.cp-terms__label a:hover{color:#335f8a}.cp-terms__check{position:absolute;opacity:0;width:0;height:0}.cp-terms__box{width:17px;height:17px;flex-shrink:0;margin-top:2px;border:2px solid #d3dce3;border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s;position:relative}.cp-terms__box:after{content:\"\";display:none;position:absolute;left:4px;top:1px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.cp-terms__check:checked~.cp-terms__box{background:#4077ad;border-color:#4077ad}.cp-terms__check:checked~.cp-terms__box:after{display:block}.cp-upload-area{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:120px;border:2px dashed #d3dce3;border-radius:6px;background:#eef1f4;cursor:pointer;transition:border-color .15s,background .15s;overflow:hidden}.cp-upload-area:hover{border-color:#4077ad;background:#4077ad08}.cp-upload-hidden{position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none}.cp-upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px;text-align:center;pointer-events:none}.cp-upload-placeholder svg{width:32px;height:32px;opacity:.5}.cp-upload-placeholder svg path{fill:#6b7c8a}.cp-upload-placeholder span{font-size:12.5px;font-weight:600;color:#6b7c8a}.cp-upload-placeholder small{font-size:11px;color:#95a2ad}.cp-upload-preview{width:100%;object-fit:cover;display:block}.cp-upload-preview--avatar{width:90px;height:90px;border-radius:50%;object-fit:cover;border:3px solid #fff;box-shadow:0 2px 8px #0000001f;margin:14px auto 0}.cp-upload-preview--logo{max-width:180px;max-height:80px;width:auto;height:auto;object-fit:contain;margin:14px auto 0}.cp-upload-change{font-size:11px;font-weight:600;color:#4077ad;margin-bottom:10px;pointer-events:none}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:20px 24px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:38px;height:38px;background:#ffffff1f;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-size:16px;font-weight:700;color:#fff;margin:0;flex:1}.tc-modal-close{flex-shrink:0;background:#ffffff1f;border:none;border-radius:8px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.tc-modal-close:hover{background:#ffffff38;color:#fff}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;padding:14px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-size:13.5px;font-weight:600;font-family:inherit;padding:9px 24px;border-radius:10px;border:none;cursor:pointer;transition:background .15s ease}.tc-btn.tc-btn-close{background:#4077ad;color:#fff}.tc-btn.tc-btn-close:hover{background:#335f8a}.cp-logout-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:6px;border:1.5px solid #e2eaf2;background:#fff;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn svg{width:16px;height:16px}.cp-logout-btn svg path{fill:#6b7c8a}.cp-logout-btn:hover{border-color:#dc3545;color:#dc3545}.cp-logout-btn:hover svg path{fill:#dc3545}.cp-logout-btn--mobile{margin-left:auto}.cp-biz-layout{display:grid;grid-template-columns:1fr 160px;gap:20px;align-items:start}@media (max-width: 640px){.cp-biz-layout{grid-template-columns:1fr}}.cp-biz-fields{display:flex;flex-direction:column}.cp-biz-logo{display:flex;flex-direction:column;gap:8px}.cp-biz-logo__label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-biz-logo__area{border:2px dashed #d3dce3;border-radius:6px;background:#f8fafc;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:140px;padding:12px;text-align:center;transition:border-color .15s}.cp-biz-logo__area:hover{border-color:#4077ad}.cp-biz-logo__img{width:100%;max-height:100px;object-fit:contain;border-radius:4px}.cp-biz-logo__change{font-size:11px;color:#6b7c8a;margin-top:6px;display:block}.cp-biz-logo__placeholder{display:flex;flex-direction:column;align-items:center;gap:6px}.cp-biz-logo__placeholder svg{width:28px;height:28px}.cp-biz-logo__placeholder svg path{fill:#aab8c2}.cp-biz-logo__placeholder span{font-size:11.5px;font-weight:600;color:#6b7c8a}.cp-biz-logo__placeholder small{font-size:10px;color:#aab8c2}.cp-profile-logo-area{border-radius:50%!important;min-height:140px!important;width:140px!important;height:140px!important;margin:0 auto;overflow:hidden;padding:0!important;position:relative}.cp-profile-logo-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.cp-profile-logo-area .cp-biz-logo__change{position:absolute;bottom:0;left:0;right:0;background:#0000007a;color:#fff!important;padding:7px 0 5px;text-align:center;font-size:10.5px;font-weight:600;margin-top:0!important;opacity:0;transition:opacity .18s}.cp-profile-logo-area:hover .cp-biz-logo__change{opacity:1}.cp-lookup-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 44px!important}.cp-lookup-loading p{font-size:14px;color:#6b7c8a;margin:0}.cp-lookup-spinner{width:32px;height:32px;border:3px solid rgba(64,119,173,.2);border-top-color:#4077ad}.cp-anf-card{width:100%;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;border:1px solid #e2eaf2}.cp-anf-card__header{display:flex;align-items:center;gap:16px;padding:28px 28px 20px;border-bottom:1px solid #f0f4f8}.cp-anf-card__identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.cp-anf-card__name{font-size:18px;font-weight:800;color:#0c1620;margin:0;line-height:1.2}.cp-anf-card__email{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b7c8a}.cp-anf-card__email svg{width:12px;height:12px}.cp-anf-card__email svg path{fill:#6b7c8a}.cp-anf-card__details{padding:16px 28px;display:flex;flex-direction:column;gap:10px;border-bottom:1px solid #f0f4f8}.cp-anf-card__notice{display:flex;align-items:center;gap:10px;padding:14px 28px;background:#4077ad0a;border-bottom:1px solid #f0f4f8;font-size:13px;color:#4077ad;font-weight:600}.cp-anf-card__notice svg{width:18px;height:18px;flex-shrink:0}.cp-anf-card__notice svg path{fill:#4077ad}.cp-anf-avatar{width:60px;height:60px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#4077ad,#335f8a);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#fff;text-transform:uppercase;letter-spacing:-.5px}.cp-anf-roles{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px}.cp-anf-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;padding:3px 8px;border-radius:99px;background:#4077ad14;color:#4077ad;border:1px solid rgba(64,119,173,.18)}.cp-anf-detail{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:#6b7c8a;line-height:1.5}.cp-anf-detail svg{width:14px;height:14px;flex-shrink:0;margin-top:1px}.cp-anf-detail svg path{fill:#6b7c8a}.cp-anf-signin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:54px;padding:0 24px;background:linear-gradient(135deg,#4077ad,#335f8a);border:none;border-radius:0;font-size:15px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;font-family:inherit;transition:filter .15s,box-shadow .15s;-webkit-appearance:none}.cp-anf-signin-btn svg{width:18px;height:18px;flex-shrink:0}.cp-anf-signin-btn svg path{fill:#fff}.cp-anf-signin-btn:hover{filter:brightness(1.07);box-shadow:inset 0 -3px #00000026}::ng-deep .modal-content{background:none!important;border:none!important}::ng-deep .ng-select div,.ng-select input,.ng-select span{font-size:12px!important}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: GooglePlaceDirective, selector: "[ngx-google-places-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: TermsConditionsComponent, selector: "app-terms-conditions", inputs: ["title", "branding", "PrivacyAndTerms"], outputs: ["metaLoaded"] }, { kind: "component", type: PrivacyPolicyComponent, selector: "app-privacy-policy", inputs: ["title", "branding", "PrivacyAndTerms"], outputs: ["metaLoaded"] }] });
37143
37153
  }
37144
37154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ClaimProcessComponent, decorators: [{
37145
37155
  type: Component,
37146
- args: [{ selector: 'app-claim-process', standalone: false, template: "<h2 class=\"sr-only\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></h2>\n\n<!-- \u2500\u2500\u2500 Unauthenticated / Error states: branded two-column layout \u2500\u2500\u2500 -->\n<div *ngIf=\"noEmailError || isLookingUpAccount || auth0UserData || showAccountNotFound\" class=\"cp-page cp-page--brand\">\n\n <!-- Left: Static marketing & branding panel -->\n <aside class=\"cp-brand-left\"> \n\n <div class=\"cp-brand-hero\">\n <span class=\"cp-brand-eyebrow\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></span>\n <p class=\"cp-brand-intro\">\n Your account is ready. Complete this short form to set your credentials and unlock your access to the\n platform's tools, programs, and services.\n </p>\n </div>\n\n <ul class=\"cp-brand-features\">\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Secure &amp; Encrypted</strong>\n <span>Your information is protected end-to-end and handled in accordance with our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Instant Access</strong>\n <span>Once activated, you'll get immediate access to programs, rosters, and service requests.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Team &amp; Client Network</strong>\n <span>Connect with certified professionals nationwide and manage your team from a single dashboard.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Complete Your Profile</strong>\n <span>A complete profile unlocks every feature and makes you visible to clients and partners.</span>\n </div>\n </li>\n </ul>\n\n <div class=\"cp-brand-contact\">\n <a *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.email\"\n [href]=\"'mailto:' + (privacyAndTerms.contactEmail || privacyAndTerms.email)\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail || privacyAndTerms?.email }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n <a *ngIf=\"privacyAndTerms?.websiteurl\" [href]=\"privacyAndTerms.websiteurl\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"cp-brand-contact__link cp-brand-contact__link--website\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\" />\n </svg>\n Visit {{ privacyAndTerms?.companyName || 'our website' }}\n <svg viewBox=\"0 0 24 24\" class=\"cp-brand-contact__ext\">\n <path\n d=\"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\" />\n </svg>\n </a>\n </div>\n\n </aside>\n\n <!-- Right: State-specific content -->\n <main class=\"cp-brand-right\">\n\n <!-- No Email Error -->\n <div *ngIf=\"noEmailError\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n </div>\n <h2>Invalid Access Link</h2>\n <p>This page requires a valid invitation link. Please use the link from your invitation email to claim your\n account.</p>\n </div>\n </div>\n\n <!-- Account Lookup: Loading -->\n <div *ngIf=\"isLookingUpAccount\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card cp-lookup-loading\">\n <span class=\"cp-spinner cp-lookup-spinner\"></span>\n <p>Looking up your account\u2026</p>\n </div>\n </div>\n\n <!-- Account Not Found -->\n <div *ngIf=\"!isLookingUpAccount && !auth0UserData && showAccountNotFound\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon cp-invalid-icon--warn\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 5h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n </div>\n <p [style.margin-bottom]=\"pendingParamType ? '16px' : null\">\n The email address <strong>{{ userEmail }}</strong> is not associated with an account on our platform.\n Please click the button below to create a new account.\n </p>\n <!-- Pre-assigned role preview when type exists in invitation link -->\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"pendingParamType && role.type === pendingParamType\" class=\"cp-anf-role-preview\">\n <span class=\"cp-anf-role-label\">Your pre-assigned role</span>\n <div class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </div>\n </ng-container>\n <button type=\"button\" class=\"cp-btn\" style=\"margin-top:20px\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\"\n fill=\"#fff\" />\n </svg>\n Create New Account\n </button>\n </div>\n </div>\n\n <!-- Account Found -->\n <div *ngIf=\"!isLookingUpAccount && auth0UserData\" class=\"cp-brand-state\">\n <div class=\"cp-anf-card\">\n <div class=\"cp-anf-card__header\">\n <div class=\"cp-anf-avatar\">\n {{ (auth0UserData.userDetails?.firstName?.[0] || '') + (auth0UserData.userDetails?.lastName?.[0] || '') ||\n '?' }}\n </div>\n <div class=\"cp-anf-card__identity\">\n <h2 class=\"cp-anf-card__name\">{{ auth0UserData.userDetails?.firstName }} {{\n auth0UserData.userDetails?.lastName }}</h2>\n <span class=\"cp-anf-card__email\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ auth0UserData.email }}\n </span>\n <div class=\"cp-anf-roles\" *ngIf=\"auth0UserData.userDetails?.userRoles?.length\">\n <span class=\"cp-anf-role\" *ngFor=\"let r of auth0UserData.userDetails.userRoles\">{{ r.roleName }}</span>\n </div>\n </div>\n </div>\n <div class=\"cp-anf-card__notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\" />\n </svg>\n An account already exists for this email address.\n </div>\n <button type=\"button\" class=\"cp-anf-signin-btn\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\"\n fill=\"#fff\" />\n </svg>\n Sign In to Your Account\n </button>\n </div>\n </div>\n\n </main>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Success State \u2500\u2500\u2500 -->\n<div *ngIf=\"submitSuccess\" class=\"cp-success-page\">\n <div class=\"cp-success-card\">\n <div class=\"cp-success-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <h2>{{ userHasExistingDetails ? 'Profile Updated!' : 'Account Activated!' }}</h2>\n <p>{{ userHasExistingDetails ? 'Your profile has been saved successfully.' : 'Your account has been successfully\n activated.' }}</p>\n <button *ngIf=\"!isInitialSetupCompleted && libConfig?.initialUrl\" type=\"button\" class=\"cp-btn\"\n style=\"margin-top:20px\" (click)=\"navigateToInitialProcess()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\"\n fill=\"#fff\" />\n </svg>\n Complete Initial Setup\n </button>\n <button type=\"button\" class=\"cp-btn\" [class.cp-btn--ghost]=\"!isInitialSetupCompleted && libConfig?.initialUrl\"\n style=\"margin-top:10px\" (click)=\"navigateToDashboard()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\" fill=\"currentColor\" />\n </svg>\n Go to Dashboard\n </button>\n <button *ngIf=\"!userHasExistingDetails\" type=\"button\" class=\"cp-btn cp-btn--ghost\" style=\"margin-top:10px\"\n (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\" />\n </svg>\n Sign In Instead\n </button>\n </div>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Main Layout \u2500\u2500\u2500 -->\n<div *ngIf=\"!noEmailError && !submitSuccess && !auth0UserData && !isLookingUpAccount && !isInitializing\"\n class=\"cp-page\">\n\n <!-- Left Panel \u2014 Status Tracker -->\n <aside class=\"cp-left\">\n <div class=\"cp-left-inner mt-1\"> \n\n <!-- User identity card -->\n <div class=\"cp-sb-user\">\n <div class=\"cp-sb-avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-sb-avatar__img\" />\n <span *ngIf=\"!profilePreviewUrl\" class=\"cp-sb-avatar__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </span>\n </div>\n <div class=\"cp-sb-user__info\">\n <strong class=\"cp-sb-user__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) :\n 'Your Profile' }}\n </strong>\n <span class=\"cp-sb-user__email\">{{ userEmail }}</span>\n </div>\n </div>\n\n <!-- Hero intro -->\n <div class=\"cp-sb-hero\">\n <span class=\"cp-sb-eyebrow\">{{ userHasExistingDetails ? 'Profile Update' : 'Claim Your Account' }}<ng-container *ngIf=\"!userHasExistingDetails && (selectedRole?.name || pendingRoleName)\"> \u2014 {{ selectedRole?.name || pendingRoleName }}</ng-container></span>\n <p class=\"cp-sb-intro\">\n {{ userHasExistingDetails\n ? 'Review and update your personal, role, and business information below.'\n : 'Complete this form to activate your account and unlock full platform access.' }}\n </p>\n </div>\n\n <!-- Progress bar -->\n <div class=\"cp-sb-progress\">\n <div class=\"cp-sb-progress__bar\">\n <div class=\"cp-sb-progress__fill\" [style.width.%]=\"overallProgress\"></div>\n </div>\n <span class=\"cp-sb-progress__label\">{{ overallProgress }}% complete</span>\n </div>\n\n <!-- Section status steps -->\n <ul class=\"cp-steps\">\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionPersonalDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Personal Information</span>\n <span class=\"cp-step__sub\">Name, address, profile photo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionRoleDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Account Setup</span>\n <span class=\"cp-step__sub\">Role selection{{ (setPasswordEnabled || resetPasswordEnabled) ? ', password' : ''\n }}</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" *ngIf=\"isBusiness\" [class.cp-step--done]=\"sectionBusinessDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Business Info</span>\n <span class=\"cp-step__sub\">Name, email, address, logo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n </ul>\n\n <!-- Feature highlights -->\n <ul class=\"cp-sb-features\">\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div>\n <strong>Secure &amp; Encrypted</strong>\n <span>Protected end-to-end per our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div>\n <strong>Instant Access</strong>\n <span>Immediate access to programs and service requests.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div>\n <strong>Professional Network</strong>\n <span>Connect with certified professionals nationwide.</span>\n </div>\n </li>\n </ul>\n\n <!-- Footer contact -->\n <div class=\"cp-left-contact\" *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.phone\">\n <a *ngIf=\"privacyAndTerms?.contactEmail\" [href]=\"'mailto:' + privacyAndTerms.contactEmail\"\n class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n </div>\n\n </div>\n </aside>\n\n <!-- Right Panel \u2014 Form -->\n <main class=\"cp-right\">\n\n <!-- Mobile-only top bar -->\n <div class=\"cp-mobile-bar\">\n <img *ngIf=\"privacyAndTerms?.logoUrl\" [src]=\"privacyAndTerms.logoUrl\" [alt]=\"privacyAndTerms?.companyName\"\n class=\"cp-mobile-logo\" />\n <span *ngIf=\"!privacyAndTerms?.logoUrl\" class=\"cp-mobile-company\">{{ privacyAndTerms?.companyName }}</span>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn cp-logout-btn--mobile\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Logout\n </button>\n </div>\n\n <!-- \u2500\u2500\u2500 Profile Banner \u2500\u2500\u2500 -->\n <div class=\"cp-banner\">\n <div class=\"cp-banner__avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-banner__img\" />\n <div *ngIf=\"!profilePreviewUrl\" class=\"cp-banner__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </div>\n </div>\n <div class=\"cp-banner__info\">\n <div class=\"cp-banner__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) : 'Your\n Profile' }}\n </div>\n <div class=\"cp-banner__meta\">\n <span class=\"cp-banner__email\" *ngIf=\"userEmail\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ userEmail }}\n </span>\n <span class=\"cp-banner__badge\" [class.cp-banner__badge--update]=\"userHasExistingDetails\">\n {{ userHasExistingDetails ? 'Profile Update' : 'Account Activation' }}\n </span>\n </div>\n <div class=\"cp-banner__loading\" *ngIf=\"isLoadingUser\">\n <span class=\"cp-spinner cp-spinner--sm\"></span> Loading profile\u2026\n </div>\n </div>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn--banner\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Sign Out\n </button>\n </div>\n\n <div class=\"cp-form-wrap\">\n\n <div class=\"cp-error cp-alert\" *ngIf=\"userLookupError\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n {{ userLookupError }}\n </div>\n\n <form (ngSubmit)=\"onSubmit()\" novalidate>\n\n <!-- \u2550\u2550\u2550 SECTION: Personal Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" [formGroup]=\"userForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Personal Information</h3>\n <p class=\"cp-card__sub\">Name, contact, address and profile photo</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionPersonalDone && sectionPhotoDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <!-- Pending notice: shown until a role is selected -->\n <div *ngIf=\"!selectedRoleValue && !isLoadingUser\" class=\"cp-pending-notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Please select your role in the Account Setup section below to unlock these fields.\n </div>\n <div [class.cp-fields-pending]=\"!selectedRoleValue && !isLoadingUser\">\n <div class=\"cp-biz-layout\">\n <!-- Left: fields -->\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"firstName\">First Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"firstName\" formControlName=\"firstName\" placeholder=\"Jane\"\n [class.is-invalid]=\"u['firstName'].invalid && u['firstName'].touched\" autocomplete=\"given-name\" />\n <div class=\"cp-error\" *ngIf=\"u['firstName'].invalid && u['firstName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"lastName\">Last Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"lastName\" formControlName=\"lastName\" placeholder=\"Doe\"\n [class.is-invalid]=\"u['lastName'].invalid && u['lastName'].touched\" autocomplete=\"family-name\" />\n <div class=\"cp-error\" *ngIf=\"u['lastName'].invalid && u['lastName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"phoneNumber\">Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"phoneNumber\" formControlName=\"phoneNumber\" placeholder=\"(555) 123-4567\"\n maxlength=\"14\" [class.is-invalid]=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\"\n (input)=\"formatPhone($event, 'user')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\">Required</div>\n </div>\n </div>\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"address1\">Street Address</label>\n <input type=\"text\" id=\"address1\" formControlName=\"address1\" placeholder=\"123 Main Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onAddressChange($event)\" autocomplete=\"off\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"address2\">Address Line 2</label>\n <input type=\"text\" id=\"address2\" formControlName=\"address2\" placeholder=\"Apt, Suite, Unit, etc.\"\n autocomplete=\"address-line2\" />\n </div>\n\n <div class=\"cp-field\">\n <label for=\"city\">City</label>\n <input type=\"text\" id=\"city\" formControlName=\"city\" placeholder=\"Orlando\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--4\">\n <div class=\"cp-field\">\n <label for=\"state\">State</label>\n <input type=\"text\" id=\"state\" formControlName=\"state\" placeholder=\"FL\" maxlength=\"2\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"county\">County</label>\n <input type=\"text\" id=\"county\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"zipcode\">Zip Code</label>\n <input type=\"text\" id=\"zipcode\" formControlName=\"zipcode\" placeholder=\"32801\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"country\">Country <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"country\" formControlName=\"country\" placeholder=\"US\"\n [class.is-invalid]=\"u['country'].invalid && u['country'].touched\" autocomplete=\"country\" />\n <div class=\"cp-error\" *ngIf=\"u['country'].invalid && u['country'].touched\">Required</div>\n </div>\n </div>\n\n <input type=\"hidden\" formControlName=\"latitude\" />\n <input type=\"hidden\" formControlName=\"longitude\" />\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"yearsOfExperince\">Years of Experience <span class=\"req\">*</span></label>\n <ng-select id=\"yearsOfExperince\" formControlName=\"yearsOfExperince\" [items]=\"expYears\"\n bindLabel=\"text\" bindValue=\"value\" placeholder=\"Select years\" [clearable]=\"false\"\n [class.is-invalid]=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"userJobTitle\">Job Title(s) <span class=\"req\">*</span></label>\n <ng-select id=\"userJobTitle\" formControlName=\"userJobTitle\" [items]=\"jobTitles\" bindLabel=\"text\"\n bindValue=\"value\" [multiple]=\"true\" placeholder=\"Select job title(s)\"\n [class.is-invalid]=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"industries\">Industries</label>\n <ng-select id=\"industries\" formControlName=\"industries\" [items]=\"industries\"\n bindLabel=\"industryName\" bindValue=\"id\" [multiple]=\"true\" [loading]=\"isIndustriesLoading\"\n placeholder=\"Select industries (optional)\">\n </ng-select>\n </div>\n </div>\n\n </div>\n\n <!-- Right: profile photo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Profile Photo</label>\n <div class=\"cp-biz-logo__area cp-profile-logo-area\" (click)=\"cpProfileInput.click()\">\n <input #cpProfileInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onProfileFileChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"profilePreviewUrl; else profilePlaceholder\">\n <img [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-profile-logo-img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #profilePlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n <span>Upload Photo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div><!-- /cp-fields-pending -->\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Account Setup \u2014 Role Cards + Password \u2550\u2550\u2550 -->\n <div class=\"cp-card\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Account Setup</h3>\n <p class=\"cp-card__sub\">Select your role and configure your password</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionRoleDone && sectionPasswordDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n\n <!-- Role Cards (ref: initial-process userViewRoles) -->\n <div class=\"cp-field\">\n <label>\n Select Your Role\n <span class=\"req\" *ngIf=\"!isInitialSetupCompleted && !lockedToTypeFromParam\">*</span>\n <span *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam\"\n style=\"font-weight:400;color:#6b7c8a;font-size:11px;margin-left:4px;\">(locked after initial\n setup)</span>\n <span *ngIf=\"lockedToTypeFromParam\"\n style=\"font-weight:400;color:#2563eb;font-size:11px;margin-left:4px;\">(pre-assigned)</span>\n </label>\n\n <!-- When locked from param, show only the pre-assigned card centred -->\n <div *ngIf=\"lockedToTypeFromParam\" class=\"cp-role-cards cp-role-cards--preassigned\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"role.selected\" class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Normal grid of all role cards -->\n <div *ngIf=\"!lockedToTypeFromParam\" class=\"cp-role-cards\" [class.cp-role-cards--locked]=\"isInitialSetupCompleted\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div class=\"cp-role-card\"\n [class.cp-role-card--selected]=\"role.selected\"\n [class.cp-role-card--disabled]=\"isInitialSetupCompleted\"\n (click)=\"!isInitialSetupCompleted && selectedUserRole(role)\"\n [attr.role]=\"isInitialSetupCompleted ? null : 'button'\" [attr.aria-pressed]=\"role.selected\"\n [attr.aria-label]=\"role.name\"\n [attr.title]=\"isInitialSetupCompleted ? 'Role cannot be changed after initial setup is complete' : null\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\" *ngIf=\"role.selected\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Pre-assigned notice (from query param / localStorage) -->\n <div class=\"cp-role-locked-notice cp-role-preassigned-notice\" *ngIf=\"lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n Your role has been pre-assigned from your invitation. Contact support to change it.\n </div>\n\n <!-- Locked after initial setup notice -->\n <div class=\"cp-role-locked-notice\" *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Role is locked. Contact support to change it.\n </div>\n\n <div class=\"cp-error\" *ngIf=\"!sectionRoleDone && validatePage === 1 && !isInitialSetupCompleted && !lockedToTypeFromParam\">Please\n select a role</div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingUser\" [formGroup]=\"userForm\">\n\n <!-- New user: optional password toggle -->\n <div class=\"cp-toggle-row\" *ngIf=\"!userHasExistingDetails\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Set Password <em>(Optional)</em></span>\n <span class=\"cp-toggle-row__hint\">Leave off to use existing credentials</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"setPasswordEnabled\" (change)=\"toggleSetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <div class=\"cp-row\" *ngIf=\"!userHasExistingDetails && setPasswordEnabled\">\n <div class=\"cp-field\">\n <label for=\"password\">Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"password\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n <div class=\"cp-error\" *ngIf=\"u['password'].errors?.['minlength'] && u['password'].touched\">Min. 8\n characters</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPassword\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPassword\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\"\n [class.is-invalid]=\"userForm.errors?.['passwordMismatch'] && u['confirmPassword'].touched\"\n autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n <div class=\"cp-error\" *ngIf=\"userForm.errors?.['passwordMismatch'] && u['confirmPassword'].touched\">\n Passwords do not match</div>\n </div>\n </div>\n\n <!-- Existing user: reset toggle -->\n <div class=\"cp-toggle-row\" *ngIf=\"userHasExistingDetails\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Reset Password</span>\n <span class=\"cp-toggle-row__hint\">Enable to change your current password</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"resetPasswordEnabled\" (change)=\"toggleResetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"userHasExistingDetails && resetPasswordEnabled\">\n <ng-container *ngIf=\"passwordStep === 1\">\n <div class=\"cp-row\">\n <div class=\"cp-field\">\n <label for=\"newPassword\">New Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"newPassword\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPasswordReset\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPasswordReset\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-pw-success\" *ngIf=\"passwordChangeSuccess\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n Password changed successfully.\n </div>\n <button type=\"button\" class=\"cp-btn cp-btn--outline cp-btn--sm\" (click)=\"changePassword()\"\n [disabled]=\"isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Sending\u2026' : 'Send Verification Code' }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"passwordStep === 2\">\n <div class=\"cp-otp-wrap\">\n <p class=\"cp-otp-hint\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px;flex-shrink:0\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Code sent to <strong>{{ userEmail }}</strong>\n </p>\n <div class=\"cp-otp-timer\" [class.cp-otp-timer--expired]=\"otpExpired\">\n <svg viewBox=\"0 0 24 24\" style=\"width:14px;height:14px\">\n <path\n d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n <span *ngIf=\"!otpExpired\">{{ otpMinutes }}:{{ otpSeconds < 10 ? '0' + otpSeconds : otpSeconds\n }}</span>\n <span *ngIf=\"otpExpired\">Code expired</span>\n </div>\n <div class=\"cp-field\">\n <label for=\"otpInput\">Enter 6-digit code</label>\n <input type=\"text\" id=\"otpInput\" [(ngModel)]=\"otpValue\" [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\" maxlength=\"6\" inputmode=\"numeric\" class=\"cp-otp-input\" />\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-otp-actions\">\n <button type=\"button\" class=\"cp-btn\" (click)=\"verifyPasswordOtp()\"\n [disabled]=\"otpExpired || !otpValue || isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Verifying\u2026' : 'Verify & Change Password' }}\n </button>\n <button type=\"button\" class=\"cp-btn cp-btn--ghost\" *ngIf=\"canResendOtp\"\n (click)=\"changePassword(true)\" [disabled]=\"isPasswordChanging\">Resend Code</button>\n <button type=\"button\" class=\"cp-btn-link\" (click)=\"cancelPasswordChange()\">Cancel</button>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Business Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" *ngIf=\"isBusiness\" [formGroup]=\"companyForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Business Information</h3>\n <p class=\"cp-card__sub\">Company details and branding</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!sectionBusinessDone\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <div class=\"cp-biz-layout\">\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"companyName\">Business Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"companyName\" formControlName=\"companyName\" placeholder=\"Acme Corp\"\n [class.is-invalid]=\"c['companyName'].invalid && c['companyName'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyName'].invalid && c['companyName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyEmail\">Business Email <span class=\"req\">*</span></label>\n <input type=\"email\" id=\"companyEmail\" formControlName=\"companyEmail\" placeholder=\"info@acme.com\"\n [class.is-invalid]=\"c['companyEmail'].invalid && c['companyEmail'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyEmail'].invalid && c['companyEmail'].touched\">\n <span *ngIf=\"c['companyEmail'].errors?.['required']\">Required</span>\n <span *ngIf=\"c['companyEmail'].errors?.['email']\">Invalid email</span>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyPhoneNumber\">Business Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"companyPhoneNumber\" formControlName=\"companyPhoneNumber\"\n placeholder=\"(555) 123-4567\" maxlength=\"14\"\n [class.is-invalid]=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\"\n (input)=\"formatPhone($event, 'company')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\">\n Required</div>\n </div>\n </div>\n\n\n <div class=\"cp-field\">\n <label for=\"bizAddress1\">Business Address</label>\n <input type=\"text\" id=\"bizAddress1\" formControlName=\"address1\" placeholder=\"123 Business Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onBusinessAddressChange($event)\" autocomplete=\"off\" />\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCity\">City</label>\n <input type=\"text\" id=\"bizCity\" formControlName=\"city\" placeholder=\"City\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizState\">State</label>\n <input type=\"text\" id=\"bizState\" formControlName=\"state\" placeholder=\"ST\" maxlength=\"2\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCounty\">County</label>\n <input type=\"text\" id=\"bizCounty\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizZipcode\">Zip</label>\n <input type=\"text\" id=\"bizZipcode\" formControlName=\"zipcode\" placeholder=\"00000\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizCountry\">Country</label>\n <input type=\"text\" id=\"bizCountry\" formControlName=\"country\" placeholder=\"US\"\n autocomplete=\"country\" />\n </div>\n </div>\n </div>\n\n <!-- Business logo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Business Logo</label>\n <div class=\"cp-biz-logo__area\" (click)=\"cpLogoInput.click()\">\n <input #cpLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onBusinessLogoChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"logoPreviewUrl; else logoPlaceholder\">\n <img [src]=\"logoPreviewUrl\" alt=\"Business logo\" class=\"cp-biz-logo__img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #logoPlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n <span>Upload Logo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 Footer: Terms + Submit \u2550\u2550\u2550 -->\n <div class=\"cp-form-footer\">\n <div class=\"cp-terms\">\n <label class=\"cp-terms__label\">\n <input type=\"checkbox\" class=\"cp-terms__check\" [checked]=\"model.acceptTerms && model.privacy\"\n (change)=\"onTermsCheckboxChange($event)\" />\n <span class=\"cp-terms__box\"></span>\n <span>I accept the\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Terms and Conditions', $event)\">Terms &amp;\n Conditions</a>\n and\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Privacy Statement', $event)\">Privacy Policy</a>\n </span>\n </label>\n <div class=\"cp-error cp-terms-error\" *ngIf=\"(!model.acceptTerms || !model.privacy) && validatePage === 1\">\n You must accept the Terms and Privacy Policy to continue\n </div>\n </div>\n\n <div class=\"cp-error cp-submit-error\" *ngIf=\"submitError\">{{ submitError }}</div>\n <div class=\"cp-error cp-submit-error\" *ngIf=\"providerError\">{{ providerError }}</div>\n\n <button type=\"submit\" class=\"cp-btn cp-btn--submit\" [disabled]=\"isSubmitting\">\n <span *ngIf=\"isSubmitting\" class=\"cp-spinner cp-spinner-btn\"></span>\n <svg *ngIf=\"!isSubmitting\" viewBox=\"0 0 24 24\" style=\"width:18px;height:18px\">\n <path *ngIf=\"userHasExistingDetails\"\n d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\"\n fill=\"#fff\" />\n <path *ngIf=\"!userHasExistingDetails\" d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" fill=\"#fff\" />\n </svg>\n {{ uploadStatus || (isSubmitting ? 'Processing\u2026' : (userHasExistingDetails ? 'Save Changes' : 'Activate My\n Account')) }}\n </button>\n </div>\n\n </form>\n </div>\n\n </main>\n\n</div>\n\n<!-- \u2500\u2500\u2500 Terms & Privacy Modal \u2500\u2500\u2500 -->\n<ng-template #termsAndConditionsModel>\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\n <div class=\"modal-content tc-modal\">\n <div class=\"tc-modal-header\">\n <div class=\"tc-header-icon\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\n <button type=\"button\" class=\"tc-modal-close\" (click)=\"closeModal()\" aria-label=\"Close\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div class=\"tc-modal-body\">\n <ng-container *ngIf=\"termsAndConditionTitle === 'Terms and Conditions'\">\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-terms-conditions>\n </ng-container>\n <ng-container *ngIf=\"termsAndConditionTitle !== 'Terms and Conditions'\">\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-privacy-policy>\n </ng-container>\n </div>\n <div class=\"tc-modal-footer\">\n <button type=\"button\" class=\"tc-btn tc-btn-close\" (click)=\"closeModal()\">Close</button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cp-page{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#0c1620}@media (max-width: 860px){.cp-page{flex-direction:column}}.cp-page--brand{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif}@media (max-width: 860px){.cp-page--brand{flex-direction:column}}.cp-brand-left{width:42%;min-width:320px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:10px 48px;position:sticky;top:20px;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-brand-left{position:static;height:auto;width:100%;min-width:unset;padding:32px 24px 28px;border-right:none;border-bottom:1px solid #e2eaf2}}.cp-brand-logo-wrap{margin-bottom:10px}.cp-brand-logo-img{max-height:48px;max-width:200px;object-fit:contain;display:block}.cp-brand-logo-svg{display:block;height:48px;width:auto;max-width:200px;fill:#4077ad}.cp-brand-logo-text{font-size:20px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-brand-hero{margin-bottom:15px}.cp-brand-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.16);border-radius:99px;padding:3px 10px;margin-bottom:16px}.cp-brand-heading{font-size:26px;font-weight:800;color:#0c1620;line-height:1.22;letter-spacing:-.4px;margin:0 0 14px}@media (max-width: 860px){.cp-brand-heading{font-size:21px}}.cp-brand-intro{font-size:13.5px;color:#6b7c8a;line-height:1.78;margin:0}.cp-brand-features{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;gap:6px}.cp-brand-feature{display:flex;align-items:flex-start;gap:13px;padding:13px 15px;border-radius:9px;background:#f8fafc;border:1px solid #e8edf3;transition:border-color .18s,background .18s}.cp-brand-feature:hover{background:#4077ad08;border-color:#4077ad38}.cp-brand-feature__icon{width:34px;height:34px;flex-shrink:0;border-radius:8px;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-brand-feature__icon svg{width:17px;height:17px}.cp-brand-feature__icon svg path{fill:#4077ad}.cp-brand-feature__body{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.cp-brand-feature__body strong{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1.2}.cp-brand-feature__body span{font-size:11.5px;color:#6b7c8a;line-height:1.62}.cp-brand-contact{display:flex;flex-direction:column;gap:8px;margin-top:24px;padding-top:20px;border-top:1px solid #e8edf3}.cp-brand-contact__link{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-brand-contact__link svg{width:14px;height:14px;flex-shrink:0}.cp-brand-contact__link svg path{fill:currentColor}.cp-brand-contact__link:hover{color:#4077ad}.cp-brand-contact__link--website{font-weight:600;color:#4077ad}.cp-brand-contact__link--website:hover{color:#335f8a}.cp-brand-contact__ext{width:11px!important;height:11px!important;opacity:.65}.cp-brand-right{flex:1;background:#eef1f4;display:flex;align-items:center;justify-content:center;padding:40px 28px;min-width:0}@media (max-width: 860px){.cp-brand-right{padding:28px 20px 48px}}.cp-brand-state{width:100%;max-width:460px;display:flex;flex-direction:column;align-items:center}.cp-brand-state .cp-invalid-card,.cp-brand-state .cp-anf-card{width:100%}.cp-left{width:40%;min-width:300px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:44px 40px;position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-left{display:none}}.cp-left-inner{display:flex;flex-direction:column;height:100%;gap:0}.cp-logo{margin-bottom:24px}.cp-logo-img{max-height:44px;max-width:180px;object-fit:contain;display:block}.cp-logo-fallback{font-size:18px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-sb-user{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:6px;background:#4077ad0d;border:1px solid rgba(64,119,173,.12);margin-bottom:20px}.cp-sb-avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;background:#4077ad;display:flex;align-items:center;justify-content:center;overflow:hidden}.cp-sb-avatar__img{width:100%;height:100%;object-fit:cover}.cp-sb-avatar__initials{font-size:15px;font-weight:700;color:#fff;text-transform:uppercase}.cp-sb-user__info{display:flex;flex-direction:column;gap:2px;min-width:0}.cp-sb-user__info strong{font-size:13px;font-weight:700;color:#0c1620;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-user__info span{font-size:11px;color:#6b7c8a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-signout{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;margin-top:20px;margin-bottom:4px;background:transparent;border:1.5px solid #e2eaf2;border-radius:6px;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;text-align:left}.cp-sb-signout svg{width:16px;height:16px;flex-shrink:0}.cp-sb-signout svg path{fill:#6b7c8a}.cp-sb-signout:hover{border-color:#f87171;color:#dc2626;background:#dc26260a}.cp-sb-signout:hover svg path{fill:#dc2626}.cp-sb-hero{margin-bottom:16px}.cp-sb-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#4077ad;margin-bottom:6px}.cp-sb-intro{font-size:12px;line-height:1.6;color:#6b7c8a;margin:0}.cp-sb-progress{margin-bottom:20px}.cp-sb-progress__bar{height:5px;background:#e2eaf2;border-radius:99px;overflow:hidden;margin-bottom:5px}.cp-sb-progress__fill{height:100%;background:linear-gradient(90deg,#4077ad,#5b9fd4);border-radius:99px;transition:width .4s ease;min-width:4px}.cp-sb-progress__label{font-size:10.5px;font-weight:600;color:#6b7c8a}.cp-sb-features{list-style:none;padding:0;margin:20px 0 0;display:flex;flex-direction:column;gap:12px}.cp-sb-feature{display:flex;align-items:flex-start;gap:10px}.cp-sb-feature__icon{width:28px;height:28px;border-radius:6px;background:#4077ad14;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cp-sb-feature__icon svg{width:15px;height:15px}.cp-sb-feature__icon svg path{fill:#4077ad}.cp-sb-feature div{display:flex;flex-direction:column;gap:2px}.cp-sb-feature div strong{font-size:11.5px;font-weight:700;color:#0c1620}.cp-sb-feature div span{font-size:11px;color:#6b7c8a;line-height:1.5}.cp-steps{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;position:relative}.cp-steps:before{content:\"\";position:absolute;left:17px;top:20px;width:2px;bottom:20px;background:#e2eaf2;z-index:0}.cp-step{display:flex;align-items:flex-start;gap:12px;padding:10px 0;position:relative;z-index:1}.cp-step__icon{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:#fff;border:2px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:border-color .2s,background .2s}.cp-step__icon svg{width:15px;height:15px}.cp-step__icon svg path{fill:#6b7c8a;transition:fill .2s}.cp-step__body{flex:1;display:flex;flex-direction:column;gap:2px;padding-top:5px;min-width:0}.cp-step__label{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1}.cp-step__sub{font-size:11px;color:#6b7c8a;line-height:1.4}.cp-step__badge{width:20px;height:20px;border-radius:50%;flex-shrink:0;margin-top:7px;background:#d3dce3;display:flex;align-items:center;justify-content:center;transition:background .2s}.cp-step__badge svg{width:12px;height:12px}.cp-step__badge svg path{fill:#fff}.cp-step__badge span{font-size:10px;font-weight:700;color:#6b7c8a}.cp-step__badge--done{background:#28a745}.cp-step__badge--done span{display:none}.cp-step--done .cp-step__icon{background:#4077ad14;border-color:#4077ad}.cp-step--done .cp-step__icon svg path{fill:#4077ad}.cp-step--done .cp-step__label{color:#4077ad}.cp-left-contact{display:flex;flex-direction:column;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid #e8edf3}.cp-contact-link{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-contact-link svg{width:14px;height:14px;flex-shrink:0}.cp-contact-link svg path{fill:currentColor}.cp-contact-link:hover{color:#4077ad}.cp-left-footnote{margin-top:18px;font-size:12.5px}.cp-left-footnote a{display:inline-flex;align-items:center;gap:5px;color:#4077ad;text-decoration:none;font-weight:600;transition:color .15s}.cp-left-footnote a svg{width:12px;height:12px}.cp-left-footnote a svg path{fill:#4077ad}.cp-left-footnote a:hover{color:#335f8a;text-decoration:underline}.cp-mobile-bar{display:none;align-items:center;justify-content:space-between;padding:14px 20px;background:#fff;border-bottom:1px solid #e2eaf2}@media (max-width: 860px){.cp-mobile-bar{display:flex}}.cp-mobile-logo{max-height:36px;max-width:160px;object-fit:contain}.cp-mobile-company{font-size:18px;font-weight:800;color:#4077ad}.cp-right{flex:1;background:#f0f4f8;display:flex;flex-direction:column;align-items:center;padding:0 0 64px;overflow-y:auto;min-width:0}@media (max-width: 860px){.cp-right{padding:0 0 48px}}.cp-invalid-page,.cp-success-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#eef1f4;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;padding:24px}.cp-invalid-card,.cp-success-card{background:#fff;border-radius:12px;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;padding:52px 44px;max-width:440px;width:100%;text-align:center}.cp-invalid-card h2,.cp-success-card h2{font-size:22px;font-weight:800;color:#0c1620;margin-bottom:12px}.cp-invalid-card p,.cp-success-card p{font-size:14px;color:#6b7c8a;line-height:1.7;margin-bottom:28px}.cp-invalid-icon,.cp-success-icon{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 24px}.cp-invalid-icon svg,.cp-success-icon svg{width:32px;height:32px}.cp-invalid-icon{background:#dc35451a}.cp-invalid-icon svg path{fill:#dc3545}.cp-invalid-icon--warn{background:#f59e0b1a}.cp-invalid-icon--warn svg path{fill:#f59e0b}.cp-success-icon{background:#28a7451a}.cp-success-icon svg path{fill:#28a745}.cp-anf-hint{font-size:13px;color:#6b7280;margin-top:4px}.cp-form-wrap{width:100%;flex:1;display:flex;flex-direction:column;gap:0;padding-bottom:32px}.cp-banner{width:100%;display:flex;align-items:center;gap:20px;padding:20px 32px;background:linear-gradient(135deg,#4077ad,#2f5880);border-bottom:1px solid rgba(0,0,0,.12);position:sticky;top:0;z-index:10;flex-shrink:0}@media (max-width: 860px){.cp-banner{padding:16px 20px;position:static}}@media (max-width: 480px){.cp-banner{padding:14px 16px;gap:12px}}.cp-banner__avatar{position:relative;flex-shrink:0;width:60px;height:60px;border-radius:50%;border:2.5px solid rgba(255,255,255,.4);overflow:hidden;background:#ffffff26}@media (max-width: 480px){.cp-banner__avatar{width:46px;height:46px}}.cp-banner__img{width:100%;height:100%;object-fit:cover;display:block}.cp-banner__initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#ffffffe6;text-transform:uppercase;letter-spacing:-.5px}@media (max-width: 480px){.cp-banner__initials{font-size:16px}}.cp-banner__info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.cp-banner__name{font-size:17px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}@media (max-width: 480px){.cp-banner__name{font-size:14px}}.cp-banner__meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.cp-banner__email{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#fffc;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cp-banner__email svg{width:11px;height:11px}.cp-banner__email svg path{fill:#fffc}.cp-banner__badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:3px 8px;border-radius:99px;background:#fff3;color:#ffffffe6}.cp-banner__badge--update{background:#28a7454d;color:#a8f5c0}.cp-banner__loading{display:flex;align-items:center;gap:6px;font-size:11px;color:#ffffffb3;margin-top:2px}.cp-banner__loading .cp-spinner--sm{border-color:#fff6;border-top-color:#fff}.cp-logout-btn--banner{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;background:#ffffff1f;border:1px solid rgba(255,255,255,.25);color:#ffffffe6;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn--banner svg{width:15px;height:15px}.cp-logout-btn--banner svg path{fill:#ffffffe6}.cp-logout-btn--banner:hover{background:#dc3545bf;border-color:transparent;color:#fff}.cp-logout-btn--banner:hover svg path{fill:#fff}@media (max-width: 480px){.cp-logout-btn--banner{padding:7px 10px;font-size:11px}}.cp-alert{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:6px;margin:20px 24px 0;background:#dc35450f;border:1px solid rgba(220,53,69,.18);font-size:13px;color:#c0392b}.cp-alert svg path{fill:#c0392b}.cp-card{background:#fff;border:1px solid #e2eaf2;margin:16px 24px 0;border-radius:10px;overflow:visible;box-shadow:0 1px 3px #0000000a}.cp-card:first-of-type{margin-top:20px}@media (max-width: 860px){.cp-card{margin:12px 16px 0}}@media (max-width: 480px){.cp-card{margin:10px 12px 0;border-radius:8px}}.cp-card__header{display:flex;align-items:center;gap:14px;padding:16px 24px;border-bottom:1px solid #f0f4f8;background:#fafbfc;border-radius:10px 10px 0 0;overflow:hidden}@media (max-width: 480px){.cp-card__header{padding:14px 16px;gap:10px;border-radius:8px 8px 0 0}}.cp-card__icon{width:36px;height:36px;border-radius:8px;flex-shrink:0;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-card__icon svg{width:18px;height:18px}.cp-card__icon svg path{fill:#4077ad}.cp-card__title{font-size:13.5px;font-weight:700;color:#0c1620;margin:0 0 2px;line-height:1}.cp-card__sub{font-size:11px;color:#6b7c8a;margin:0;line-height:1}.cp-card__status{margin-left:auto;flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#eef1f4;border:1.5px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:all .2s}.cp-card__status svg{width:14px;height:14px}.cp-card__status svg path{fill:#6b7c8a}.cp-card__status span{font-size:12px;font-weight:700;color:#6b7c8a}.cp-card__status--done{background:#28a745;border-color:#28a745}.cp-card__status--done svg path{fill:#fff}.cp-card__body{padding:20px 24px 16px}@media (max-width: 480px){.cp-card__body{padding:16px 16px 12px}}.cp-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.cp-row.cp-row-triple,.cp-row.cp-row--3{grid-template-columns:1fr 1fr 1fr}.cp-row.cp-row--4{grid-template-columns:1fr 1fr 1fr 1fr}@media (max-width: 640px){.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 560px){.cp-row{grid-template-columns:1fr}.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 400px){.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr}}.cp-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px;min-width:0}.cp-field label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-field label .req{color:#4077ad;margin-left:2px}.cp-field input,.cp-field select{box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px;font-size:13.5px;color:#0c1620;background:#fff;width:100%;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none;font-family:inherit}.cp-field input::placeholder,.cp-field select::placeholder{color:#aab8c2}.cp-field input:focus,.cp-field select:focus{outline:none;border-color:#4077ad;box-shadow:0 0 0 3px #4077ad26}.cp-field input.is-invalid,.cp-field select.is-invalid{border-color:#dc3545}.cp-field input.is-invalid:focus,.cp-field select.is-invalid:focus{box-shadow:0 0 0 3px #dc354526}.cp-select{position:relative}.cp-select:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #6b7c8a;pointer-events:none}.cp-select select{cursor:pointer;padding-right:32px}.cp-pw-wrap{position:relative}.cp-pw-wrap input{padding-right:42px}.cp-pw-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:4px;display:flex;align-items:center;color:#6b7c8a}.cp-pw-toggle svg{width:18px;height:18px}.cp-pw-toggle svg path{fill:#6b7c8a}.cp-pw-toggle:hover svg path{fill:#4077ad}.cp-pw-success{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#16a34a;margin:4px 0 10px}.cp-pw-success svg path{fill:#16a34a}.cp-readonly-wrap{position:relative;display:flex;align-items:center}.cp-readonly-wrap svg{position:absolute;left:12px;width:15px;height:15px;flex-shrink:0;pointer-events:none}.cp-readonly-wrap svg path{fill:#4077ad}.cp-input-readonly{width:100%;box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px 0 36px;font-size:13.5px;color:#0c1620;background:#4077ad0a;cursor:default;font-family:inherit;font-weight:500}.cp-autofill-note{font-size:11px;color:#4077ad;margin-top:3px;display:flex;align-items:center;gap:4px}.cp-email-display{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:6px 12px;background:#eef1f4;border:1.5px solid #d3dce3;border-radius:99px;font-size:12.5px;color:#0c1620;font-weight:500}.cp-email-display svg{width:14px;height:14px;flex-shrink:0}.cp-email-display svg path{fill:#4077ad}.cp-error{font-size:11.5px;color:#dc3545;margin-top:2px}.cp-terms-error{margin-top:4px}.cp-submit-error{margin-bottom:12px;font-size:13px;text-align:center}.cp-loading-hint{display:flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;margin-top:4px}.cp-new-user-hint{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:#4077ad;background:#4077ad0f;border:1px solid rgba(64,119,173,.18);border-radius:6px;padding:9px 13px;margin:6px 0 12px}.cp-new-user-hint svg{width:15px;height:15px;flex-shrink:0}.cp-new-user-hint svg path{fill:#4077ad}.cp-agreements{display:flex;flex-direction:column;gap:10px;margin:24px 0 4px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;border:1.5px solid #d3dce3;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#bac8d3;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eef1f4;border:1px solid #d3dce3;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13px;font-weight:600;color:#0c1620;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7c8a;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 13px;border-radius:8px;font-size:12px;font-weight:600;font-family:inherit;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.cp-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;height:46px;margin-top:10px;background:#4077ad;border:none;border-radius:6px;font-size:13.5px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;transition:background .15s,box-shadow .15s,transform .1s;font-family:inherit}.cp-btn:hover:not(:disabled){background:#335f8a;box-shadow:0 4px 12px #4077ad59}.cp-btn:active:not(:disabled){transform:scale(.99)}.cp-btn:disabled{opacity:.6;cursor:not-allowed}.cp-btn--submit{height:52px;font-size:15px;letter-spacing:.5px;background:linear-gradient(135deg,#4077ad,#335f8a);box-shadow:0 2px 8px #4077ad40;border-radius:8px;margin-top:0}.cp-btn--submit:hover:not(:disabled){box-shadow:0 6px 18px #4077ad66;filter:brightness(1.05)}.cp-btn--outline{background:#fff;color:#4077ad;border:1.5px solid #4077AD}.cp-btn--outline:hover:not(:disabled){background:#4077ad0d;box-shadow:none}.cp-btn--ghost{background:transparent;color:#6b7c8a;border:1.5px solid #d3dce3}.cp-btn--ghost:hover:not(:disabled){border-color:#4077ad;color:#4077ad;box-shadow:none}.cp-btn--sm{height:38px;font-size:12.5px}.cp-btn-link{background:none;border:none;font-family:inherit;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;margin-top:8px;padding:6px 0;text-decoration:underline}.cp-btn-link:hover{color:#4077ad}.cp-spinner{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cp-spin .7s linear infinite}.cp-spinner:not(.cp-spinner-btn){border-color:#4077ad4d;border-top-color:#4077ad}.cp-spinner--sm{width:11px;height:11px;border-color:#4077ad4d;border-top-color:#4077ad}@keyframes cp-spin{to{transform:rotate(360deg)}}.cp-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin-bottom:14px;background:#f8fafc;border:1px solid #e2eaf2;border-radius:6px}.cp-toggle-row__info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.cp-toggle-row__label{font-size:13px;font-weight:600;color:#0c1620}.cp-toggle-row__label em{font-style:normal;font-size:11px;font-weight:500;color:#6b7c8a;margin-left:4px}.cp-toggle-row__hint{font-size:11px;color:#6b7c8a}.cp-toggle-switch{position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0;cursor:pointer}.cp-toggle-switch input{opacity:0;width:0;height:0;position:absolute}.cp-toggle-switch input:checked+.cp-toggle-knob{background:#4077ad}.cp-toggle-switch input:checked+.cp-toggle-knob:before{transform:translate(18px)}.cp-toggle-knob{position:absolute;inset:0;background:#c8d5e0;border-radius:24px;transition:background .2s;cursor:pointer}.cp-toggle-knob:before{content:\"\";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0003}.cp-otp-wrap{margin-top:4px}.cp-otp-hint{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6b7c8a;margin:0 0 12px}.cp-otp-hint svg path{fill:#6b7c8a}.cp-otp-hint strong{color:#0c1620}.cp-otp-timer{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.18);border-radius:99px;padding:4px 12px;margin-bottom:14px}.cp-otp-timer svg path{fill:#4077ad}.cp-otp-timer--expired{color:#dc3545;background:#dc354512;border-color:#dc354533}.cp-otp-timer--expired svg path{fill:#dc3545}.cp-otp-input{letter-spacing:.15em;font-size:16px;font-weight:600}.cp-otp-actions{display:flex;flex-direction:column;gap:0;margin-top:4px}.cp-pending-notice{display:flex;align-items:flex-start;gap:9px;padding:10px 14px;margin-bottom:16px;background:#4077ad0d;border:1px solid rgba(64,119,173,.18);border-radius:6px;font-size:12px;font-weight:600;color:#4077ad;line-height:1.55}.cp-pending-notice svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}.cp-pending-notice svg path{fill:#4077ad}.cp-fields-pending{opacity:.42;pointer-events:none;filter:blur(.4px);-webkit-user-select:none;user-select:none}.cp-anf-role-preview{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 16px;margin-bottom:4px;background:#4077ad08;border:1px solid rgba(64,119,173,.14);border-radius:8px}.cp-anf-role-preview .cp-role-card{width:110px;pointer-events:none}.cp-anf-role-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#6b7c8a}.cp-role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px;margin-top:6px}@media (max-width: 480px){.cp-role-cards{grid-template-columns:repeat(3,1fr)}}.cp-role-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px 10px;border:2px solid #d3dce3;border-radius:6px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;-webkit-user-select:none;user-select:none}.cp-role-card:hover{border-color:#4077ad;box-shadow:0 2px 8px #4077ad1f}.cp-role-card--selected{border-color:#4077ad;background:#4077ad0d;box-shadow:0 0 0 3px #4077ad26}.cp-role-card__img{position:relative;width:48px;height:48px}.cp-role-card__img img{width:100%;height:100%;object-fit:contain}.cp-role-card__check{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:#4077ad;display:flex;align-items:center;justify-content:center}.cp-role-card__check svg{width:11px;height:11px}.cp-role-card__check svg path{fill:#fff}.cp-role-card__name{font-size:11px;font-weight:600;color:#0c1620;text-align:center;line-height:1.3}.cp-role-card--disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.cp-role-card--disabled:hover{border-color:#d3dce3;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected{border-color:#6b7c8a;background:#f8fafc;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected .cp-role-card__check{background:#6b7c8a}.cp-role-locked-notice{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:6px 12px;border-radius:99px;background:#f59e0b14;border:1px solid rgba(245,158,11,.25);font-size:11.5px;font-weight:600;color:#92400e}.cp-role-locked-notice svg{width:13px;height:13px;flex-shrink:0}.cp-role-locked-notice svg path{fill:#92400e}.cp-role-locked-notice.cp-role-preassigned-notice{background:#2563eb0f;border-color:#2563eb38;color:#1e40af}.cp-role-locked-notice.cp-role-preassigned-notice svg path{fill:#2563eb}.cp-role-cards--preassigned{display:flex;justify-content:flex-start;gap:0;margin-top:8px}.cp-role-cards--preassigned .cp-role-card--preassigned{width:140px;cursor:default;pointer-events:none;border-color:#2563eb;background:#2563eb0a;box-shadow:0 0 0 3px #2563eb1f}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__check{background:#2563eb}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__name{color:#1e40af;font-weight:700}.cp-form-footer{margin:16px 24px 0;background:#fff;border:1px solid #e2eaf2;border-radius:10px;padding:20px 24px;box-shadow:0 1px 3px #0000000a}@media (max-width: 860px){.cp-form-footer{margin:12px 16px 0}}@media (max-width: 480px){.cp-form-footer{margin:10px 12px 0;padding:16px;border-radius:8px}}.cp-terms{margin:0 0 16px}.cp-terms__label{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:12.5px;color:#6b7c8a;line-height:1.7;margin:0}.cp-terms__label a{color:#4077ad;text-decoration:underline;font-weight:600}.cp-terms__label a:hover{color:#335f8a}.cp-terms__check{position:absolute;opacity:0;width:0;height:0}.cp-terms__box{width:17px;height:17px;flex-shrink:0;margin-top:2px;border:2px solid #d3dce3;border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s;position:relative}.cp-terms__box:after{content:\"\";display:none;position:absolute;left:4px;top:1px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.cp-terms__check:checked~.cp-terms__box{background:#4077ad;border-color:#4077ad}.cp-terms__check:checked~.cp-terms__box:after{display:block}.cp-upload-area{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:120px;border:2px dashed #d3dce3;border-radius:6px;background:#eef1f4;cursor:pointer;transition:border-color .15s,background .15s;overflow:hidden}.cp-upload-area:hover{border-color:#4077ad;background:#4077ad08}.cp-upload-hidden{position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none}.cp-upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px;text-align:center;pointer-events:none}.cp-upload-placeholder svg{width:32px;height:32px;opacity:.5}.cp-upload-placeholder svg path{fill:#6b7c8a}.cp-upload-placeholder span{font-size:12.5px;font-weight:600;color:#6b7c8a}.cp-upload-placeholder small{font-size:11px;color:#95a2ad}.cp-upload-preview{width:100%;object-fit:cover;display:block}.cp-upload-preview--avatar{width:90px;height:90px;border-radius:50%;object-fit:cover;border:3px solid #fff;box-shadow:0 2px 8px #0000001f;margin:14px auto 0}.cp-upload-preview--logo{max-width:180px;max-height:80px;width:auto;height:auto;object-fit:contain;margin:14px auto 0}.cp-upload-change{font-size:11px;font-weight:600;color:#4077ad;margin-bottom:10px;pointer-events:none}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:20px 24px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:38px;height:38px;background:#ffffff1f;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-size:16px;font-weight:700;color:#fff;margin:0;flex:1}.tc-modal-close{flex-shrink:0;background:#ffffff1f;border:none;border-radius:8px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.tc-modal-close:hover{background:#ffffff38;color:#fff}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;padding:14px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-size:13.5px;font-weight:600;font-family:inherit;padding:9px 24px;border-radius:10px;border:none;cursor:pointer;transition:background .15s ease}.tc-btn.tc-btn-close{background:#4077ad;color:#fff}.tc-btn.tc-btn-close:hover{background:#335f8a}.cp-logout-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:6px;border:1.5px solid #e2eaf2;background:#fff;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn svg{width:16px;height:16px}.cp-logout-btn svg path{fill:#6b7c8a}.cp-logout-btn:hover{border-color:#dc3545;color:#dc3545}.cp-logout-btn:hover svg path{fill:#dc3545}.cp-logout-btn--mobile{margin-left:auto}.cp-biz-layout{display:grid;grid-template-columns:1fr 160px;gap:20px;align-items:start}@media (max-width: 640px){.cp-biz-layout{grid-template-columns:1fr}}.cp-biz-fields{display:flex;flex-direction:column}.cp-biz-logo{display:flex;flex-direction:column;gap:8px}.cp-biz-logo__label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-biz-logo__area{border:2px dashed #d3dce3;border-radius:6px;background:#f8fafc;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:140px;padding:12px;text-align:center;transition:border-color .15s}.cp-biz-logo__area:hover{border-color:#4077ad}.cp-biz-logo__img{width:100%;max-height:100px;object-fit:contain;border-radius:4px}.cp-biz-logo__change{font-size:11px;color:#6b7c8a;margin-top:6px;display:block}.cp-biz-logo__placeholder{display:flex;flex-direction:column;align-items:center;gap:6px}.cp-biz-logo__placeholder svg{width:28px;height:28px}.cp-biz-logo__placeholder svg path{fill:#aab8c2}.cp-biz-logo__placeholder span{font-size:11.5px;font-weight:600;color:#6b7c8a}.cp-biz-logo__placeholder small{font-size:10px;color:#aab8c2}.cp-profile-logo-area{border-radius:50%!important;min-height:140px!important;width:140px!important;height:140px!important;margin:0 auto;overflow:hidden;padding:0!important;position:relative}.cp-profile-logo-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.cp-profile-logo-area .cp-biz-logo__change{position:absolute;bottom:0;left:0;right:0;background:#0000007a;color:#fff!important;padding:7px 0 5px;text-align:center;font-size:10.5px;font-weight:600;margin-top:0!important;opacity:0;transition:opacity .18s}.cp-profile-logo-area:hover .cp-biz-logo__change{opacity:1}.cp-lookup-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 44px!important}.cp-lookup-loading p{font-size:14px;color:#6b7c8a;margin:0}.cp-lookup-spinner{width:32px;height:32px;border:3px solid rgba(64,119,173,.2);border-top-color:#4077ad}.cp-anf-card{width:100%;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;border:1px solid #e2eaf2}.cp-anf-card__header{display:flex;align-items:center;gap:16px;padding:28px 28px 20px;border-bottom:1px solid #f0f4f8}.cp-anf-card__identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.cp-anf-card__name{font-size:18px;font-weight:800;color:#0c1620;margin:0;line-height:1.2}.cp-anf-card__email{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b7c8a}.cp-anf-card__email svg{width:12px;height:12px}.cp-anf-card__email svg path{fill:#6b7c8a}.cp-anf-card__details{padding:16px 28px;display:flex;flex-direction:column;gap:10px;border-bottom:1px solid #f0f4f8}.cp-anf-card__notice{display:flex;align-items:center;gap:10px;padding:14px 28px;background:#4077ad0a;border-bottom:1px solid #f0f4f8;font-size:13px;color:#4077ad;font-weight:600}.cp-anf-card__notice svg{width:18px;height:18px;flex-shrink:0}.cp-anf-card__notice svg path{fill:#4077ad}.cp-anf-avatar{width:60px;height:60px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#4077ad,#335f8a);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#fff;text-transform:uppercase;letter-spacing:-.5px}.cp-anf-roles{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px}.cp-anf-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;padding:3px 8px;border-radius:99px;background:#4077ad14;color:#4077ad;border:1px solid rgba(64,119,173,.18)}.cp-anf-detail{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:#6b7c8a;line-height:1.5}.cp-anf-detail svg{width:14px;height:14px;flex-shrink:0;margin-top:1px}.cp-anf-detail svg path{fill:#6b7c8a}.cp-anf-signin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:54px;padding:0 24px;background:linear-gradient(135deg,#4077ad,#335f8a);border:none;border-radius:0;font-size:15px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;font-family:inherit;transition:filter .15s,box-shadow .15s;-webkit-appearance:none}.cp-anf-signin-btn svg{width:18px;height:18px;flex-shrink:0}.cp-anf-signin-btn svg path{fill:#fff}.cp-anf-signin-btn:hover{filter:brightness(1.07);box-shadow:inset 0 -3px #00000026}::ng-deep .modal-content{background:none!important;border:none!important}::ng-deep .ng-select div,.ng-select input,.ng-select span{font-size:12px!important}\n"] }]
37156
+ args: [{ selector: 'app-claim-process', standalone: false, template: "<h2 class=\"sr-only\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName }}</ng-container></h2>\n\n<!-- \u2500\u2500\u2500 Unauthenticated / Error states: branded two-column layout \u2500\u2500\u2500 -->\n<div *ngIf=\"noEmailError || isLookingUpAccount || auth0UserData || showAccountNotFound\" class=\"cp-page cp-page--brand\">\n\n <!-- Left: Static marketing & branding panel -->\n <aside class=\"cp-brand-left\">\n\n <div class=\"cp-brand-hero\">\n <span class=\"cp-brand-eyebrow\">Claim Your Account<ng-container *ngIf=\"pendingRoleName\"> \u2014 {{ pendingRoleName\n }}</ng-container></span>\n <p class=\"cp-brand-intro\">\n Your account is ready. Complete this short form to set your credentials and unlock your access to the\n platform's tools, programs, and services.\n </p>\n </div>\n\n <ul class=\"cp-brand-features\">\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Secure &amp; Encrypted</strong>\n <span>Your information is protected end-to-end and handled in accordance with our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Instant Access</strong>\n <span>Once activated, you'll get immediate access to programs, rosters, and service requests.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Team &amp; Client Network</strong>\n <span>Connect with certified professionals nationwide and manage your team from a single dashboard.</span>\n </div>\n </li>\n <li class=\"cp-brand-feature\">\n <span class=\"cp-brand-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\n </svg>\n </span>\n <div class=\"cp-brand-feature__body\">\n <strong>Complete Your Profile</strong>\n <span>A complete profile unlocks every feature and makes you visible to clients and partners.</span>\n </div>\n </li>\n </ul>\n\n <div class=\"cp-brand-contact\">\n <a *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.email\"\n [href]=\"'mailto:' + (privacyAndTerms.contactEmail || privacyAndTerms.email)\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail || privacyAndTerms?.email }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-brand-contact__link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n <a *ngIf=\"privacyAndTerms?.websiteurl\" [href]=\"privacyAndTerms.websiteurl\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"cp-brand-contact__link cp-brand-contact__link--website\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\" />\n </svg>\n Visit {{ privacyAndTerms?.companyName || 'our website' }}\n <svg viewBox=\"0 0 24 24\" class=\"cp-brand-contact__ext\">\n <path\n d=\"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\" />\n </svg>\n </a>\n </div>\n\n </aside>\n\n <!-- Right: State-specific content -->\n <main class=\"cp-brand-right\">\n\n <!-- No Email Error -->\n <div *ngIf=\"noEmailError\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n </div>\n <h2>Invalid Access Link</h2>\n <p>This page requires a valid invitation link. Please use the link from your invitation email to claim your\n account.</p>\n </div>\n </div>\n\n <!-- Account Lookup: Loading -->\n <div *ngIf=\"isLookingUpAccount\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card cp-lookup-loading\">\n <span class=\"cp-spinner cp-lookup-spinner\"></span>\n <p>Looking up your account\u2026</p>\n </div>\n </div>\n\n <!-- Account Not Found -->\n <div *ngIf=\"!isLookingUpAccount && !auth0UserData && showAccountNotFound\" class=\"cp-brand-state\">\n <div class=\"cp-invalid-card\">\n <div class=\"cp-invalid-icon cp-invalid-icon--warn\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 5h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n </div>\n <p [style.margin-bottom]=\"pendingParamType ? '16px' : null\">\n The email address <strong>{{ userEmail }}</strong> is not associated with an account on our platform.\n Please click the button below to create a new account.\n </p>\n <!-- Pre-assigned role preview when type exists in invitation link -->\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"pendingParamType && role.type === pendingParamType\" class=\"cp-anf-role-preview\">\n <span class=\"cp-anf-role-label\">Your pre-assigned role</span>\n <div class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </div>\n </ng-container>\n <button type=\"button\" class=\"cp-btn\" style=\"margin-top:20px\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\"\n fill=\"#fff\" />\n </svg>\n Create New Account\n </button>\n </div>\n </div>\n\n <!-- Account Found -->\n <div *ngIf=\"!isLookingUpAccount && auth0UserData\" class=\"cp-brand-state\">\n <div class=\"cp-anf-card\">\n <div class=\"cp-anf-card__header\">\n <div class=\"cp-anf-avatar\">\n {{ (auth0UserData.userDetails?.firstName?.[0] || '') + (auth0UserData.userDetails?.lastName?.[0] || '') ||\n '?' }}\n </div>\n <div class=\"cp-anf-card__identity\">\n <h2 class=\"cp-anf-card__name\">{{ auth0UserData.userDetails?.firstName }} {{\n auth0UserData.userDetails?.lastName }}</h2>\n <span class=\"cp-anf-card__email\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ auth0UserData.email }}\n </span>\n <div class=\"cp-anf-roles\" *ngIf=\"auth0UserData.userDetails?.userRoles?.length\">\n <span class=\"cp-anf-role\" *ngFor=\"let r of auth0UserData.userDetails.userRoles\">{{ r.roleName }}</span>\n </div>\n </div>\n </div>\n <div class=\"cp-anf-card__notice\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\" />\n </svg>\n An account already exists for this email address.\n </div>\n <button type=\"button\" class=\"cp-anf-signin-btn\" (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\"\n fill=\"#fff\" />\n </svg>\n Sign In to Your Account\n </button>\n </div>\n </div>\n\n </main>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Success State \u2500\u2500\u2500 -->\n<div *ngIf=\"submitSuccess\" class=\"cp-success-page\">\n <div class=\"cp-success-card\">\n <div class=\"cp-success-icon\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <h2>{{ userHasExistingDetails ? 'Profile Updated!' : 'Account Activated!' }}</h2>\n <p>{{ userHasExistingDetails ? 'Your profile has been saved successfully.' : 'Your account has been successfully\n activated.' }}</p>\n <button *ngIf=\"!isInitialSetupCompleted && libConfig?.initialUrl\" type=\"button\" class=\"cp-btn\"\n style=\"margin-top:20px\" (click)=\"navigateToInitialProcess()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z\"\n fill=\"#fff\" />\n </svg>\n Complete Initial Setup\n </button>\n <button type=\"button\" class=\"cp-btn\" [class.cp-btn--ghost]=\"!isInitialSetupCompleted && libConfig?.initialUrl\"\n style=\"margin-top:10px\" (click)=\"navigateToDashboard()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:17px;height:17px;flex-shrink:0\">\n <path d=\"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\" fill=\"currentColor\" />\n </svg>\n Go to Dashboard\n </button>\n <button *ngIf=\"!userHasExistingDetails\" type=\"button\" class=\"cp-btn cp-btn--ghost\" style=\"margin-top:10px\"\n (click)=\"navigateToLogin()\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path\n d=\"M11 7L9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\" />\n </svg>\n Sign In Instead\n </button>\n </div>\n</div>\n\n\n<!-- \u2500\u2500\u2500 Main Layout \u2500\u2500\u2500 -->\n<div *ngIf=\"!noEmailError && !submitSuccess && !auth0UserData && !isLookingUpAccount && !isInitializing\"\n class=\"cp-page\">\n\n <!-- Left Panel \u2014 Status Tracker -->\n <aside class=\"cp-left\">\n <div class=\"cp-left-inner mt-1\">\n\n <!-- User identity card -->\n <div class=\"cp-sb-user\">\n <div class=\"cp-sb-avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-sb-avatar__img\" />\n <span *ngIf=\"!profilePreviewUrl\" class=\"cp-sb-avatar__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </span>\n </div>\n <div class=\"cp-sb-user__info\">\n <strong class=\"cp-sb-user__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) :\n 'Your Profile' }}\n </strong>\n <span class=\"cp-sb-user__email\">{{ userEmail }}</span>\n </div>\n </div>\n\n <!-- Hero intro -->\n <div class=\"cp-sb-hero\">\n <span class=\"cp-sb-eyebrow\">{{ userHasExistingDetails ? 'Profile Update' : 'Claim Your Account' }}<ng-container\n *ngIf=\"!userHasExistingDetails && (selectedRole?.name || pendingRoleName)\"> \u2014 {{ selectedRole?.name ||\n pendingRoleName }}</ng-container></span>\n <p class=\"cp-sb-intro\">\n {{ userHasExistingDetails\n ? 'Review and update your personal, role, and business information below.'\n : 'Complete this form to activate your account and unlock full platform access.' }}\n </p>\n </div>\n\n <!-- Progress bar -->\n <div class=\"cp-sb-progress\">\n <div class=\"cp-sb-progress__bar\">\n <div class=\"cp-sb-progress__fill\" [style.width.%]=\"overallProgress\"></div>\n </div>\n <span class=\"cp-sb-progress__label\">{{ overallProgress }}% complete</span>\n </div>\n\n <!-- Section status steps -->\n <ul class=\"cp-steps\">\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionPersonalDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Personal Information</span>\n <span class=\"cp-step__sub\">Name, address, profile photo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" [class.cp-step--done]=\"sectionRoleDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Account Setup</span>\n <span class=\"cp-step__sub\">Role selection{{ (setPasswordEnabled || resetPasswordEnabled) ? ', password' : ''\n }}</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n <li class=\"cp-step\" *ngIf=\"isBusiness\" [class.cp-step--done]=\"sectionBusinessDone\">\n <span class=\"cp-step__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div class=\"cp-step__body\">\n <span class=\"cp-step__label\">Business Info</span>\n <span class=\"cp-step__sub\">Name, email, address, logo</span>\n </div>\n <span class=\"cp-step__badge\" [class.cp-step__badge--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </li>\n\n </ul>\n\n <!-- Feature highlights -->\n <ul class=\"cp-sb-features\">\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n </span>\n <div>\n <strong>Secure &amp; Encrypted</strong>\n <span>Protected end-to-end per our Privacy Policy.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n </svg>\n </span>\n <div>\n <strong>Instant Access</strong>\n <span>Immediate access to programs and service requests.</span>\n </div>\n </li>\n <li class=\"cp-sb-feature\">\n <span class=\"cp-sb-feature__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\" />\n </svg>\n </span>\n <div>\n <strong>Professional Network</strong>\n <span>Connect with certified professionals nationwide.</span>\n </div>\n </li>\n </ul>\n\n <!-- Footer contact -->\n <div class=\"cp-left-contact\" *ngIf=\"privacyAndTerms?.contactEmail || privacyAndTerms?.phone\">\n <a *ngIf=\"privacyAndTerms?.contactEmail\" [href]=\"'mailto:' + privacyAndTerms.contactEmail\"\n class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ privacyAndTerms?.contactEmail }}\n </a>\n <a *ngIf=\"privacyAndTerms?.phone\" [href]=\"'tel:' + privacyAndTerms.phone\" class=\"cp-contact-link\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n </svg>\n {{ privacyAndTerms?.phone }}\n </a>\n </div>\n\n </div>\n </aside>\n\n <!-- Right Panel \u2014 Form -->\n <main class=\"cp-right\">\n\n <!-- Mobile-only top bar -->\n <div class=\"cp-mobile-bar\">\n <img *ngIf=\"privacyAndTerms?.logoUrl\" [src]=\"privacyAndTerms.logoUrl\" [alt]=\"privacyAndTerms?.companyName\"\n class=\"cp-mobile-logo\" />\n <span *ngIf=\"!privacyAndTerms?.logoUrl\" class=\"cp-mobile-company\">{{ privacyAndTerms?.companyName }}</span>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn cp-logout-btn--mobile\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Logout\n </button>\n </div>\n\n <!-- \u2500\u2500\u2500 Profile Banner \u2500\u2500\u2500 -->\n <div class=\"cp-banner\">\n <div class=\"cp-banner__avatar\">\n <img *ngIf=\"profilePreviewUrl\" [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-banner__img\" />\n <div *ngIf=\"!profilePreviewUrl\" class=\"cp-banner__initials\">\n {{ (u['firstName'].value?.[0] || '') + (u['lastName'].value?.[0] || '') || '?' }}\n </div>\n </div>\n <div class=\"cp-banner__info\">\n <div class=\"cp-banner__name\">\n {{ (u['firstName'].value || u['lastName'].value) ? (u['firstName'].value + ' ' + u['lastName'].value) : 'Your\n Profile' }}\n </div>\n <div class=\"cp-banner__meta\">\n <span class=\"cp-banner__email\" *ngIf=\"userEmail\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n {{ userEmail }}\n </span>\n <span class=\"cp-banner__badge\" [class.cp-banner__badge--update]=\"userHasExistingDetails\">\n {{ userHasExistingDetails ? 'Profile Update' : 'Account Activation' }}\n </span>\n </div>\n <div class=\"cp-banner__loading\" *ngIf=\"isLoadingUser\">\n <span class=\"cp-spinner cp-spinner--sm\"></span> Loading profile\u2026\n </div>\n </div>\n <button *ngIf=\"userId\" type=\"button\" class=\"cp-logout-btn--banner\" (click)=\"logout()\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5-5-5zm-5 12H5V5h7V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2z\" />\n </svg>\n Sign Out\n </button>\n </div>\n\n <div class=\"cp-form-wrap\">\n\n <div class=\"cp-error cp-alert\" *ngIf=\"userLookupError\">\n <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;flex-shrink:0\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n {{ userLookupError }}\n </div>\n\n <form (ngSubmit)=\"onSubmit()\" novalidate>\n\n <!-- \u2550\u2550\u2550 SECTION: Personal Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" [formGroup]=\"userForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Personal Information</h3>\n <p class=\"cp-card__sub\">Name, contact, address and profile photo</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionPersonalDone && sectionPhotoDone\">\n <svg *ngIf=\"sectionPersonalDone && sectionPhotoDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionPersonalDone && sectionPhotoDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <!-- Pending notice: shown until a role is selected -->\n <div *ngIf=\"!selectedRoleValue && !isLoadingUser\" class=\"cp-pending-notice\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Please select your role in the Account Setup section below to unlock these fields.\n </div>\n <div [class.cp-fields-pending]=\"!selectedRoleValue && !isLoadingUser\">\n <div class=\"cp-biz-layout\">\n <!-- Left: fields -->\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"firstName\">First Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"firstName\" formControlName=\"firstName\" placeholder=\"Jane\"\n [class.is-invalid]=\"u['firstName'].invalid && u['firstName'].touched\"\n autocomplete=\"given-name\" />\n <div class=\"cp-error\" *ngIf=\"u['firstName'].invalid && u['firstName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"lastName\">Last Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"lastName\" formControlName=\"lastName\" placeholder=\"Doe\"\n [class.is-invalid]=\"u['lastName'].invalid && u['lastName'].touched\"\n autocomplete=\"family-name\" />\n <div class=\"cp-error\" *ngIf=\"u['lastName'].invalid && u['lastName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"phoneNumber\">Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"phoneNumber\" formControlName=\"phoneNumber\" placeholder=\"(555) 123-4567\"\n maxlength=\"14\" [class.is-invalid]=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\"\n (input)=\"formatPhone($event, 'user')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"u['phoneNumber'].invalid && u['phoneNumber'].touched\">Required</div>\n </div>\n </div>\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"address1\">Street Address</label>\n <input type=\"text\" id=\"address1\" formControlName=\"address1\" placeholder=\"123 Main Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onAddressChange($event)\" autocomplete=\"off\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"address2\">Address Line 2</label>\n <input type=\"text\" id=\"address2\" formControlName=\"address2\" placeholder=\"Apt, Suite, Unit, etc.\"\n autocomplete=\"address-line2\" />\n </div>\n\n <div class=\"cp-field\">\n <label for=\"city\">City</label>\n <input type=\"text\" id=\"city\" formControlName=\"city\" placeholder=\"Orlando\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--4\">\n <div class=\"cp-field\">\n <label for=\"state\">State</label>\n <input type=\"text\" id=\"state\" formControlName=\"state\" placeholder=\"FL\" maxlength=\"2\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"county\">County</label>\n <input type=\"text\" id=\"county\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"zipcode\">Zip Code</label>\n <input type=\"text\" id=\"zipcode\" formControlName=\"zipcode\" placeholder=\"32801\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"country\">Country <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"country\" formControlName=\"country\" placeholder=\"US\"\n [class.is-invalid]=\"u['country'].invalid && u['country'].touched\" autocomplete=\"country\" />\n <div class=\"cp-error\" *ngIf=\"u['country'].invalid && u['country'].touched\">Required</div>\n </div>\n </div>\n\n <input type=\"hidden\" formControlName=\"latitude\" />\n <input type=\"hidden\" formControlName=\"longitude\" />\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"yearsOfExperince\">Years of Experience <span class=\"req\">*</span></label>\n <ng-select id=\"yearsOfExperince\" formControlName=\"yearsOfExperince\" [items]=\"expYears\"\n bindLabel=\"text\" bindValue=\"value\" placeholder=\"Select years\" [clearable]=\"false\"\n [class.is-invalid]=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['yearsOfExperince'].invalid && u['yearsOfExperince'].touched\">\n Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"userJobTitle\">Job Title(s) <span class=\"req\">*</span></label>\n <ng-select id=\"userJobTitle\" formControlName=\"userJobTitle\" [items]=\"jobTitles\" bindLabel=\"text\"\n bindValue=\"value\" [multiple]=\"true\" placeholder=\"Select job title(s)\"\n [class.is-invalid]=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">\n </ng-select>\n <div class=\"cp-error\" *ngIf=\"u['userJobTitle'].invalid && u['userJobTitle'].touched\">Required\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"industries\">Industries</label>\n <ng-select id=\"industries\" formControlName=\"industries\" [items]=\"industries\"\n bindLabel=\"industryName\" bindValue=\"id\" [multiple]=\"true\" [loading]=\"isIndustriesLoading\"\n placeholder=\"Select industries (optional)\">\n </ng-select>\n </div>\n </div>\n\n </div>\n\n <!-- Right: profile photo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Profile Photo</label>\n <div class=\"cp-biz-logo__area cp-profile-logo-area\" (click)=\"cpProfileInput.click()\">\n <input #cpProfileInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onProfileFileChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"profilePreviewUrl; else profilePlaceholder\">\n <img [src]=\"profilePreviewUrl\" alt=\"Profile\" class=\"cp-profile-logo-img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #profilePlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.42 0-8 2.69-8 6v1h16v-1c0-3.31-3.58-6-8-6Z\" />\n </svg>\n <span>Upload Photo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div><!-- /cp-fields-pending -->\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Account Setup \u2014 Role Cards + Password \u2550\u2550\u2550 -->\n <div class=\"cp-card\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Account Setup</h3>\n <p class=\"cp-card__sub\">Select your role and configure your password</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionRoleDone && sectionPasswordDone\">\n <svg *ngIf=\"sectionRoleDone && sectionPasswordDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!(sectionRoleDone && sectionPasswordDone)\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n\n <!-- Role Cards (ref: initial-process userViewRoles) -->\n <div class=\"cp-field\">\n <label>\n Select Your Role\n <span class=\"req\" *ngIf=\"!isInitialSetupCompleted && !lockedToTypeFromParam\">*</span>\n <span *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam\"\n style=\"font-weight:400;color:#6b7c8a;font-size:11px;margin-left:4px;\">(locked after initial\n setup)</span>\n <span *ngIf=\"lockedToTypeFromParam\"\n style=\"font-weight:400;color:#2563eb;font-size:11px;margin-left:4px;\">(pre-assigned)</span>\n </label>\n\n <!-- When locked from param, show only the pre-assigned card centred -->\n <div *ngIf=\"lockedToTypeFromParam\" class=\"cp-role-cards cp-role-cards--preassigned\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div *ngIf=\"role.selected\" class=\"cp-role-card cp-role-card--selected cp-role-card--preassigned\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Normal grid of all role cards -->\n <div *ngIf=\"!lockedToTypeFromParam\" class=\"cp-role-cards\"\n [class.cp-role-cards--locked]=\"isInitialSetupCompleted\">\n <ng-container *ngFor=\"let role of userViewRoles\">\n <div class=\"cp-role-card\" [class.cp-role-card--selected]=\"role.selected\"\n [class.cp-role-card--disabled]=\"isInitialSetupCompleted\"\n (click)=\"!isInitialSetupCompleted && selectedUserRole(role)\"\n [attr.role]=\"isInitialSetupCompleted ? null : 'button'\" [attr.aria-pressed]=\"role.selected\"\n [attr.aria-label]=\"role.name\"\n [attr.title]=\"isInitialSetupCompleted ? 'Role cannot be changed after initial setup is complete' : null\">\n <div class=\"cp-role-card__img\">\n <img [src]=\"role.img\" [alt]=\"role.name\" (error)=\"$any($event.target).style.display='none'\" />\n <span class=\"cp-role-card__check\" *ngIf=\"role.selected\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </span>\n </div>\n <span class=\"cp-role-card__name\">{{ role.name }}</span>\n </div>\n </ng-container>\n </div>\n\n <!-- Pre-assigned notice (from query param / localStorage) -->\n <div class=\"cp-role-locked-notice cp-role-preassigned-notice\"\n *ngIf=\"lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4l5 2.18V11c0 3.5-2.33 6.79-5 7.93-2.67-1.14-5-4.43-5-7.93V7.18L12 5z\" />\n </svg>\n Your role has been pre-assigned from your invitation. Contact support to change it.\n </div>\n\n <!-- Locked after initial setup notice -->\n <div class=\"cp-role-locked-notice\"\n *ngIf=\"isInitialSetupCompleted && !lockedToTypeFromParam && sectionRoleDone\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n Role is locked. Contact support to change it.\n </div>\n\n <div class=\"cp-error\"\n *ngIf=\"!sectionRoleDone && validatePage === 1 && !isInitialSetupCompleted && !lockedToTypeFromParam\">\n Please\n select a role</div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingUser\" [formGroup]=\"userForm\">\n\n <!-- Existing user: reset toggle -->\n <div class=\"cp-toggle-row\">\n <div class=\"cp-toggle-row__info\">\n <span class=\"cp-toggle-row__label\">Reset Password</span>\n <span class=\"cp-toggle-row__hint\">Enable to change your current password</span>\n </div>\n <label class=\"cp-toggle-switch\">\n <input type=\"checkbox\" [checked]=\"resetPasswordEnabled\" (change)=\"toggleResetPassword()\">\n <span class=\"cp-toggle-knob\"></span>\n </label>\n </div>\n\n <ng-container *ngIf=\"resetPasswordEnabled\">\n <ng-container *ngIf=\"passwordStep === 1\">\n <div class=\"cp-row\">\n <div class=\"cp-field\">\n <label for=\"newPassword\">New Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showPassword ? 'text' : 'password'\" id=\"newPassword\" formControlName=\"password\"\n placeholder=\"Min. 8 characters\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showPassword = !showPassword\">\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"confirmPasswordReset\">Confirm Password</label>\n <div class=\"cp-pw-wrap\">\n <input [type]=\"showConfirmPassword ? 'text' : 'password'\" id=\"confirmPasswordReset\"\n formControlName=\"confirmPassword\" placeholder=\"Repeat password\" autocomplete=\"new-password\" />\n <button type=\"button\" class=\"cp-pw-toggle\" (click)=\"showConfirmPassword = !showConfirmPassword\">\n <svg *ngIf=\"!showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n </svg>\n <svg *ngIf=\"showConfirmPassword\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-pw-success\" *ngIf=\"passwordChangeSuccess\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n Password changed successfully.\n </div>\n <button type=\"button\" class=\"cp-btn cp-btn--outline cp-btn--sm\" (click)=\"changePassword()\"\n [disabled]=\"isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Sending\u2026' : 'Send Verification Code' }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"passwordStep === 2\">\n <div class=\"cp-otp-wrap\">\n <p class=\"cp-otp-hint\">\n <svg viewBox=\"0 0 24 24\" style=\"width:15px;height:15px;flex-shrink:0\">\n <path\n d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z\" />\n </svg>\n Code sent to <strong>{{ userEmail }}</strong>\n </p>\n <div class=\"cp-otp-timer\" [class.cp-otp-timer--expired]=\"otpExpired\">\n <svg viewBox=\"0 0 24 24\" style=\"width:14px;height:14px\">\n <path\n d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n <span *ngIf=\"!otpExpired\">{{ otpMinutes }}:{{ otpSeconds < 10 ? '0' + otpSeconds : otpSeconds\n }}</span>\n <span *ngIf=\"otpExpired\">Code expired</span>\n </div>\n <div class=\"cp-field\">\n <label for=\"otpInput\">Enter 6-digit code</label>\n <input type=\"text\" id=\"otpInput\" [(ngModel)]=\"otpValue\" [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\" maxlength=\"6\" inputmode=\"numeric\" class=\"cp-otp-input\" />\n </div>\n <div class=\"cp-error\" *ngIf=\"passwordChangeError\">{{ passwordChangeError }}</div>\n <div class=\"cp-otp-actions\">\n <button type=\"button\" class=\"cp-btn\" (click)=\"verifyPasswordOtp()\"\n [disabled]=\"otpExpired || !otpValue || isPasswordChanging\">\n <span *ngIf=\"isPasswordChanging\" class=\"cp-spinner cp-spinner-btn\"></span>\n {{ isPasswordChanging ? 'Verifying\u2026' : 'Verify & Change Password' }}\n </button>\n <button type=\"button\" class=\"cp-btn cp-btn--ghost\" *ngIf=\"canResendOtp\"\n (click)=\"changePassword(true)\" [disabled]=\"isPasswordChanging\">Resend Code</button>\n <button type=\"button\" class=\"cp-btn-link\" (click)=\"cancelPasswordChange()\">Cancel</button>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 SECTION: Business Information \u2550\u2550\u2550 -->\n <div class=\"cp-card\" *ngIf=\"isBusiness\" [formGroup]=\"companyForm\">\n <div class=\"cp-card__header\">\n <span class=\"cp-card__icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n <div>\n <h3 class=\"cp-card__title\">Business Information</h3>\n <p class=\"cp-card__sub\">Company details and branding</p>\n </div>\n <span class=\"cp-card__status\" [class.cp-card__status--done]=\"sectionBusinessDone\">\n <svg *ngIf=\"sectionBusinessDone\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n <span *ngIf=\"!sectionBusinessDone\">\u2014</span>\n </span>\n </div>\n <div class=\"cp-card__body\">\n <div class=\"cp-biz-layout\">\n <div class=\"cp-biz-fields\">\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"companyName\">Business Name <span class=\"req\">*</span></label>\n <input type=\"text\" id=\"companyName\" formControlName=\"companyName\" placeholder=\"Acme Corp\"\n [class.is-invalid]=\"c['companyName'].invalid && c['companyName'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyName'].invalid && c['companyName'].touched\">Required</div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyEmail\">Business Email <span class=\"req\">*</span></label>\n <input type=\"email\" id=\"companyEmail\" formControlName=\"companyEmail\" placeholder=\"info@acme.com\"\n [class.is-invalid]=\"c['companyEmail'].invalid && c['companyEmail'].touched\" />\n <div class=\"cp-error\" *ngIf=\"c['companyEmail'].invalid && c['companyEmail'].touched\">\n <span *ngIf=\"c['companyEmail'].errors?.['required']\">Required</span>\n <span *ngIf=\"c['companyEmail'].errors?.['email']\">Invalid email</span>\n </div>\n </div>\n <div class=\"cp-field\">\n <label for=\"companyPhoneNumber\">Business Phone <span class=\"req\">*</span></label>\n <input type=\"tel\" id=\"companyPhoneNumber\" formControlName=\"companyPhoneNumber\"\n placeholder=\"(555) 123-4567\" maxlength=\"14\"\n [class.is-invalid]=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\"\n (input)=\"formatPhone($event, 'company')\" autocomplete=\"tel\" />\n <div class=\"cp-error\" *ngIf=\"c['companyPhoneNumber'].invalid && c['companyPhoneNumber'].touched\">\n Required</div>\n </div>\n </div>\n\n\n <div class=\"cp-field\">\n <label for=\"bizAddress1\">Business Address</label>\n <input type=\"text\" id=\"bizAddress1\" formControlName=\"address1\" placeholder=\"123 Business Street\"\n ngx-google-places-autocomplete [options]=\"googleOptions\"\n (onAddressChange)=\"onBusinessAddressChange($event)\" autocomplete=\"off\" />\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCity\">City</label>\n <input type=\"text\" id=\"bizCity\" formControlName=\"city\" placeholder=\"City\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizState\">State</label>\n <input type=\"text\" id=\"bizState\" formControlName=\"state\" placeholder=\"ST\" maxlength=\"2\" />\n </div>\n </div>\n\n <div class=\"cp-row cp-row--3\">\n <div class=\"cp-field\">\n <label for=\"bizCounty\">County</label>\n <input type=\"text\" id=\"bizCounty\" formControlName=\"county\" placeholder=\"Orange County\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizZipcode\">Zip</label>\n <input type=\"text\" id=\"bizZipcode\" formControlName=\"zipcode\" placeholder=\"00000\" inputmode=\"numeric\"\n maxlength=\"5\" />\n </div>\n <div class=\"cp-field\">\n <label for=\"bizCountry\">Country</label>\n <input type=\"text\" id=\"bizCountry\" formControlName=\"country\" placeholder=\"US\"\n autocomplete=\"country\" />\n </div>\n </div>\n </div>\n\n <!-- Business logo -->\n <div class=\"cp-biz-logo\">\n <label class=\"cp-biz-logo__label\">Business Logo</label>\n <div class=\"cp-biz-logo__area\" (click)=\"cpLogoInput.click()\">\n <input #cpLogoInput type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"onBusinessLogoChange($event)\"\n class=\"cp-upload-hidden\" />\n <ng-container *ngIf=\"logoPreviewUrl; else logoPlaceholder\">\n <img [src]=\"logoPreviewUrl\" alt=\"Business logo\" class=\"cp-biz-logo__img\" />\n <span class=\"cp-biz-logo__change\">Change</span>\n </ng-container>\n <ng-template #logoPlaceholder>\n <div class=\"cp-biz-logo__placeholder\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n <span>Upload Logo</span>\n <small>PNG \u00B7 JPG</small>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550 Footer: Terms + Submit \u2550\u2550\u2550 -->\n <div class=\"cp-form-footer\">\n <div class=\"cp-terms\">\n <label class=\"cp-terms__label\">\n <input type=\"checkbox\" class=\"cp-terms__check\" [checked]=\"model.acceptTerms && model.privacy\"\n (change)=\"onTermsCheckboxChange($event)\" />\n <span class=\"cp-terms__box\"></span>\n <span>I accept the\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Terms and Conditions', $event)\">Terms &amp;\n Conditions</a>\n and\n <a href=\"#\" (click)=\"openModal(termsAndConditionsModel, 'Privacy Statement', $event)\">Privacy Policy</a>\n </span>\n </label>\n <div class=\"cp-error cp-terms-error\" *ngIf=\"(!model.acceptTerms || !model.privacy) && validatePage === 1\">\n You must accept the Terms and Privacy Policy to continue\n </div>\n </div>\n\n <div class=\"cp-error cp-submit-error\" *ngIf=\"submitError\">{{ submitError }}</div>\n <div class=\"cp-error cp-submit-error\" *ngIf=\"providerError\">{{ providerError }}</div>\n\n <button type=\"submit\" class=\"cp-btn cp-btn--submit\" [disabled]=\"isSubmitting\">\n <span *ngIf=\"isSubmitting\" class=\"cp-spinner cp-spinner-btn\"></span>\n <svg *ngIf=\"!isSubmitting\" viewBox=\"0 0 24 24\" style=\"width:18px;height:18px\">\n <path *ngIf=\"userHasExistingDetails\"\n d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\"\n fill=\"#fff\" />\n <path *ngIf=\"!userHasExistingDetails\" d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" fill=\"#fff\" />\n </svg>\n {{ uploadStatus || (isSubmitting ? 'Processing\u2026' : (userHasExistingDetails ? 'Save Changes' : 'Activate My\n Account')) }}\n </button>\n </div>\n\n </form>\n </div>\n\n </main>\n\n</div>\n\n<!-- \u2500\u2500\u2500 Terms & Privacy Modal \u2500\u2500\u2500 -->\n<ng-template #termsAndConditionsModel>\n <div class=\"modal-dialog modal-dialog-centered tc-modal-dialog\">\n <div class=\"modal-content tc-modal\">\n <div class=\"tc-modal-header\">\n <div class=\"tc-header-icon\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <h4 class=\"tc-modal-title\">{{ termsAndConditionTitle }}</h4>\n <button type=\"button\" class=\"tc-modal-close\" (click)=\"closeModal()\" aria-label=\"Close\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div class=\"tc-modal-body\">\n <ng-container *ngIf=\"termsAndConditionTitle === 'Terms and Conditions'\">\n <app-terms-conditions [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-terms-conditions>\n </ng-container>\n <ng-container *ngIf=\"termsAndConditionTitle !== 'Terms and Conditions'\">\n <app-privacy-policy [PrivacyAndTerms]=\"privacyAndTerms\" [title]=\"title\"\n [branding]=\"branding\"></app-privacy-policy>\n </ng-container>\n </div>\n <div class=\"tc-modal-footer\">\n <button type=\"button\" class=\"tc-btn tc-btn-close\" (click)=\"closeModal()\">Close</button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cp-page{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#0c1620}@media (max-width: 860px){.cp-page{flex-direction:column}}.cp-page--brand{display:flex;min-height:100vh;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif}@media (max-width: 860px){.cp-page--brand{flex-direction:column}}.cp-brand-left{width:42%;min-width:320px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:10px 48px;position:sticky;top:20px;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-brand-left{position:static;height:auto;width:100%;min-width:unset;padding:32px 24px 28px;border-right:none;border-bottom:1px solid #e2eaf2}}.cp-brand-logo-wrap{margin-bottom:10px}.cp-brand-logo-img{max-height:48px;max-width:200px;object-fit:contain;display:block}.cp-brand-logo-svg{display:block;height:48px;width:auto;max-width:200px;fill:#4077ad}.cp-brand-logo-text{font-size:20px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-brand-hero{margin-bottom:15px}.cp-brand-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.16);border-radius:99px;padding:3px 10px;margin-bottom:16px}.cp-brand-heading{font-size:26px;font-weight:800;color:#0c1620;line-height:1.22;letter-spacing:-.4px;margin:0 0 14px}@media (max-width: 860px){.cp-brand-heading{font-size:21px}}.cp-brand-intro{font-size:13.5px;color:#6b7c8a;line-height:1.78;margin:0}.cp-brand-features{list-style:none;padding:0;display:flex;flex-direction:column;gap:6px}.cp-brand-feature{display:flex;align-items:flex-start;gap:13px;padding:13px 15px;border-radius:9px;background:#f8fafc;border:1px solid #e8edf3;transition:border-color .18s,background .18s}.cp-brand-feature:hover{background:#4077ad08;border-color:#4077ad38}.cp-brand-feature__icon{width:34px;height:34px;flex-shrink:0;border-radius:8px;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-brand-feature__icon svg{width:17px;height:17px}.cp-brand-feature__icon svg path{fill:#4077ad}.cp-brand-feature__body{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.cp-brand-feature__body strong{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1.2}.cp-brand-feature__body span{font-size:11.5px;color:#6b7c8a;line-height:1.62}.cp-brand-contact{display:flex;flex-direction:column;gap:8px;margin-top:24px;padding-top:20px;border-top:1px solid #e8edf3}.cp-brand-contact__link{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-brand-contact__link svg{width:14px;height:14px;flex-shrink:0}.cp-brand-contact__link svg path{fill:currentColor}.cp-brand-contact__link:hover{color:#4077ad}.cp-brand-contact__link--website{font-weight:600;color:#4077ad}.cp-brand-contact__link--website:hover{color:#335f8a}.cp-brand-contact__ext{width:11px!important;height:11px!important;opacity:.65}.cp-brand-right{flex:1;background:#eef1f4;display:flex;align-items:center;justify-content:center;padding:40px 28px;min-width:0}@media (max-width: 860px){.cp-brand-right{padding:28px 20px 48px}}.cp-brand-state{width:100%;max-width:460px;display:flex;flex-direction:column;align-items:center}.cp-brand-state .cp-invalid-card,.cp-brand-state .cp-anf-card{width:100%}.cp-left{width:40%;min-width:300px;background:#fff;border-right:1px solid #e2eaf2;display:flex;flex-direction:column;padding:44px 40px;position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d1dce6 transparent}@media (max-width: 860px){.cp-left{display:none}}.cp-left-inner{display:flex;flex-direction:column;height:100%;gap:0}.cp-logo{margin-bottom:24px}.cp-logo-img{max-height:44px;max-width:180px;object-fit:contain;display:block}.cp-logo-fallback{font-size:18px;font-weight:800;color:#4077ad;letter-spacing:-.5px}.cp-sb-user{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:6px;background:#4077ad0d;border:1px solid rgba(64,119,173,.12);margin-bottom:20px}.cp-sb-avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;background:#4077ad;display:flex;align-items:center;justify-content:center;overflow:hidden}.cp-sb-avatar__img{width:100%;height:100%;object-fit:cover}.cp-sb-avatar__initials{font-size:15px;font-weight:700;color:#fff;text-transform:uppercase}.cp-sb-user__info{display:flex;flex-direction:column;gap:2px;min-width:0}.cp-sb-user__info strong{font-size:13px;font-weight:700;color:#0c1620;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-user__info span{font-size:11px;color:#6b7c8a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cp-sb-signout{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;margin-top:20px;margin-bottom:4px;background:transparent;border:1.5px solid #e2eaf2;border-radius:6px;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;text-align:left}.cp-sb-signout svg{width:16px;height:16px;flex-shrink:0}.cp-sb-signout svg path{fill:#6b7c8a}.cp-sb-signout:hover{border-color:#f87171;color:#dc2626;background:#dc26260a}.cp-sb-signout:hover svg path{fill:#dc2626}.cp-sb-hero{margin-bottom:16px}.cp-sb-eyebrow{display:inline-block;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#4077ad;margin-bottom:6px}.cp-sb-intro{font-size:12px;line-height:1.6;color:#6b7c8a;margin:0}.cp-sb-progress{margin-bottom:20px}.cp-sb-progress__bar{height:5px;background:#e2eaf2;border-radius:99px;overflow:hidden;margin-bottom:5px}.cp-sb-progress__fill{height:100%;background:linear-gradient(90deg,#4077ad,#5b9fd4);border-radius:99px;transition:width .4s ease;min-width:4px}.cp-sb-progress__label{font-size:10.5px;font-weight:600;color:#6b7c8a}.cp-sb-features{list-style:none;padding:0;margin:20px 0 0;display:flex;flex-direction:column;gap:12px}.cp-sb-feature{display:flex;align-items:flex-start;gap:10px}.cp-sb-feature__icon{width:28px;height:28px;border-radius:6px;background:#4077ad14;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cp-sb-feature__icon svg{width:15px;height:15px}.cp-sb-feature__icon svg path{fill:#4077ad}.cp-sb-feature div{display:flex;flex-direction:column;gap:2px}.cp-sb-feature div strong{font-size:11.5px;font-weight:700;color:#0c1620}.cp-sb-feature div span{font-size:11px;color:#6b7c8a;line-height:1.5}.cp-steps{list-style:none;padding:0;margin:0 0 auto;display:flex;flex-direction:column;position:relative}.cp-steps:before{content:\"\";position:absolute;left:17px;top:20px;width:2px;bottom:20px;background:#e2eaf2;z-index:0}.cp-step{display:flex;align-items:flex-start;gap:12px;padding:10px 0;position:relative;z-index:1}.cp-step__icon{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:#fff;border:2px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:border-color .2s,background .2s}.cp-step__icon svg{width:15px;height:15px}.cp-step__icon svg path{fill:#6b7c8a;transition:fill .2s}.cp-step__body{flex:1;display:flex;flex-direction:column;gap:2px;padding-top:5px;min-width:0}.cp-step__label{font-size:12.5px;font-weight:700;color:#0c1620;line-height:1}.cp-step__sub{font-size:11px;color:#6b7c8a;line-height:1.4}.cp-step__badge{width:20px;height:20px;border-radius:50%;flex-shrink:0;margin-top:7px;background:#d3dce3;display:flex;align-items:center;justify-content:center;transition:background .2s}.cp-step__badge svg{width:12px;height:12px}.cp-step__badge svg path{fill:#fff}.cp-step__badge span{font-size:10px;font-weight:700;color:#6b7c8a}.cp-step__badge--done{background:#28a745}.cp-step__badge--done span{display:none}.cp-step--done .cp-step__icon{background:#4077ad14;border-color:#4077ad}.cp-step--done .cp-step__icon svg path{fill:#4077ad}.cp-step--done .cp-step__label{color:#4077ad}.cp-left-contact{display:flex;flex-direction:column;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid #e8edf3}.cp-contact-link{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#6b7c8a;text-decoration:none;transition:color .15s}.cp-contact-link svg{width:14px;height:14px;flex-shrink:0}.cp-contact-link svg path{fill:currentColor}.cp-contact-link:hover{color:#4077ad}.cp-left-footnote{margin-top:18px;font-size:12.5px}.cp-left-footnote a{display:inline-flex;align-items:center;gap:5px;color:#4077ad;text-decoration:none;font-weight:600;transition:color .15s}.cp-left-footnote a svg{width:12px;height:12px}.cp-left-footnote a svg path{fill:#4077ad}.cp-left-footnote a:hover{color:#335f8a;text-decoration:underline}.cp-mobile-bar{display:none;align-items:center;justify-content:space-between;padding:14px 20px;background:#fff;border-bottom:1px solid #e2eaf2}@media (max-width: 860px){.cp-mobile-bar{display:flex}}.cp-mobile-logo{max-height:36px;max-width:160px;object-fit:contain}.cp-mobile-company{font-size:18px;font-weight:800;color:#4077ad}.cp-right{flex:1;background:#f0f4f8;display:flex;flex-direction:column;align-items:center;padding:0 0 64px;overflow-y:auto;min-width:0}@media (max-width: 860px){.cp-right{padding:0 0 48px}}.cp-invalid-page,.cp-success-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#eef1f4;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;padding:24px}.cp-invalid-card,.cp-success-card{background:#fff;border-radius:12px;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;padding:52px 44px;max-width:440px;width:100%;text-align:center}.cp-invalid-card h2,.cp-success-card h2{font-size:22px;font-weight:800;color:#0c1620;margin-bottom:12px}.cp-invalid-card p,.cp-success-card p{font-size:14px;color:#6b7c8a;line-height:1.7;margin-bottom:28px}.cp-invalid-icon,.cp-success-icon{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 24px}.cp-invalid-icon svg,.cp-success-icon svg{width:32px;height:32px}.cp-invalid-icon{background:#dc35451a}.cp-invalid-icon svg path{fill:#dc3545}.cp-invalid-icon--warn{background:#f59e0b1a}.cp-invalid-icon--warn svg path{fill:#f59e0b}.cp-success-icon{background:#28a7451a}.cp-success-icon svg path{fill:#28a745}.cp-anf-hint{font-size:13px;color:#6b7280;margin-top:4px}.cp-form-wrap{width:100%;flex:1;display:flex;flex-direction:column;gap:0;padding-bottom:32px}.cp-banner{width:100%;display:flex;align-items:center;gap:20px;padding:20px 32px;background:linear-gradient(135deg,#4077ad,#2f5880);border-bottom:1px solid rgba(0,0,0,.12);position:sticky;top:0;z-index:10;flex-shrink:0}@media (max-width: 860px){.cp-banner{padding:16px 20px;position:static}}@media (max-width: 480px){.cp-banner{padding:14px 16px;gap:12px}}.cp-banner__avatar{position:relative;flex-shrink:0;width:60px;height:60px;border-radius:50%;border:2.5px solid rgba(255,255,255,.4);overflow:hidden;background:#ffffff26}@media (max-width: 480px){.cp-banner__avatar{width:46px;height:46px}}.cp-banner__img{width:100%;height:100%;object-fit:cover;display:block}.cp-banner__initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#ffffffe6;text-transform:uppercase;letter-spacing:-.5px}@media (max-width: 480px){.cp-banner__initials{font-size:16px}}.cp-banner__info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.cp-banner__name{font-size:17px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}@media (max-width: 480px){.cp-banner__name{font-size:14px}}.cp-banner__meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.cp-banner__email{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#fffc;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cp-banner__email svg{width:11px;height:11px}.cp-banner__email svg path{fill:#fffc}.cp-banner__badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:3px 8px;border-radius:99px;background:#fff3;color:#ffffffe6}.cp-banner__badge--update{background:#28a7454d;color:#a8f5c0}.cp-banner__loading{display:flex;align-items:center;gap:6px;font-size:11px;color:#ffffffb3;margin-top:2px}.cp-banner__loading .cp-spinner--sm{border-color:#fff6;border-top-color:#fff}.cp-logout-btn--banner{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;background:#ffffff1f;border:1px solid rgba(255,255,255,.25);color:#ffffffe6;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn--banner svg{width:15px;height:15px}.cp-logout-btn--banner svg path{fill:#ffffffe6}.cp-logout-btn--banner:hover{background:#dc3545bf;border-color:transparent;color:#fff}.cp-logout-btn--banner:hover svg path{fill:#fff}@media (max-width: 480px){.cp-logout-btn--banner{padding:7px 10px;font-size:11px}}.cp-alert{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:6px;margin:20px 24px 0;background:#dc35450f;border:1px solid rgba(220,53,69,.18);font-size:13px;color:#c0392b}.cp-alert svg path{fill:#c0392b}.cp-card{background:#fff;border:1px solid #e2eaf2;margin:16px 24px 0;border-radius:10px;overflow:visible;box-shadow:0 1px 3px #0000000a}.cp-card:first-of-type{margin-top:20px}@media (max-width: 860px){.cp-card{margin:12px 16px 0}}@media (max-width: 480px){.cp-card{margin:10px 12px 0;border-radius:8px}}.cp-card__header{display:flex;align-items:center;gap:14px;padding:16px 24px;border-bottom:1px solid #f0f4f8;background:#fafbfc;border-radius:10px 10px 0 0;overflow:hidden}@media (max-width: 480px){.cp-card__header{padding:14px 16px;gap:10px;border-radius:8px 8px 0 0}}.cp-card__icon{width:36px;height:36px;border-radius:8px;flex-shrink:0;background:#4077ad14;display:flex;align-items:center;justify-content:center}.cp-card__icon svg{width:18px;height:18px}.cp-card__icon svg path{fill:#4077ad}.cp-card__title{font-size:13.5px;font-weight:700;color:#0c1620;margin:0 0 2px;line-height:1}.cp-card__sub{font-size:11px;color:#6b7c8a;margin:0;line-height:1}.cp-card__status{margin-left:auto;flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#eef1f4;border:1.5px solid #d3dce3;display:flex;align-items:center;justify-content:center;transition:all .2s}.cp-card__status svg{width:14px;height:14px}.cp-card__status svg path{fill:#6b7c8a}.cp-card__status span{font-size:12px;font-weight:700;color:#6b7c8a}.cp-card__status--done{background:#28a745;border-color:#28a745}.cp-card__status--done svg path{fill:#fff}.cp-card__body{padding:20px 24px 16px}@media (max-width: 480px){.cp-card__body{padding:16px 16px 12px}}.cp-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.cp-row.cp-row-triple,.cp-row.cp-row--3{grid-template-columns:1fr 1fr 1fr}.cp-row.cp-row--4{grid-template-columns:1fr 1fr 1fr 1fr}@media (max-width: 640px){.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 560px){.cp-row{grid-template-columns:1fr}.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr 1fr}}@media (max-width: 400px){.cp-row.cp-row-triple,.cp-row.cp-row--3,.cp-row.cp-row--4{grid-template-columns:1fr}}.cp-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px;min-width:0}.cp-field label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-field label .req{color:#4077ad;margin-left:2px}.cp-field input,.cp-field select{box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px;font-size:13.5px;color:#0c1620;background:#fff;width:100%;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none;font-family:inherit}.cp-field input::placeholder,.cp-field select::placeholder{color:#aab8c2}.cp-field input:focus,.cp-field select:focus{outline:none;border-color:#4077ad;box-shadow:0 0 0 3px #4077ad26}.cp-field input.is-invalid,.cp-field select.is-invalid{border-color:#dc3545}.cp-field input.is-invalid:focus,.cp-field select.is-invalid:focus{box-shadow:0 0 0 3px #dc354526}.cp-select{position:relative}.cp-select:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #6b7c8a;pointer-events:none}.cp-select select{cursor:pointer;padding-right:32px}.cp-pw-wrap{position:relative}.cp-pw-wrap input{padding-right:42px}.cp-pw-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:4px;display:flex;align-items:center;color:#6b7c8a}.cp-pw-toggle svg{width:18px;height:18px}.cp-pw-toggle svg path{fill:#6b7c8a}.cp-pw-toggle:hover svg path{fill:#4077ad}.cp-pw-success{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#16a34a;margin:4px 0 10px}.cp-pw-success svg path{fill:#16a34a}.cp-readonly-wrap{position:relative;display:flex;align-items:center}.cp-readonly-wrap svg{position:absolute;left:12px;width:15px;height:15px;flex-shrink:0;pointer-events:none}.cp-readonly-wrap svg path{fill:#4077ad}.cp-input-readonly{width:100%;box-sizing:border-box;height:42px;border:1.5px solid #d3dce3;border-radius:6px;padding:0 12px 0 36px;font-size:13.5px;color:#0c1620;background:#4077ad0a;cursor:default;font-family:inherit;font-weight:500}.cp-autofill-note{font-size:11px;color:#4077ad;margin-top:3px;display:flex;align-items:center;gap:4px}.cp-email-display{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:6px 12px;background:#eef1f4;border:1.5px solid #d3dce3;border-radius:99px;font-size:12.5px;color:#0c1620;font-weight:500}.cp-email-display svg{width:14px;height:14px;flex-shrink:0}.cp-email-display svg path{fill:#4077ad}.cp-error{font-size:11.5px;color:#dc3545;margin-top:2px}.cp-terms-error{margin-top:4px}.cp-submit-error{margin-bottom:12px;font-size:13px;text-align:center}.cp-loading-hint{display:flex;align-items:center;gap:8px;font-size:12px;color:#6b7c8a;margin-top:4px}.cp-new-user-hint{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:#4077ad;background:#4077ad0f;border:1px solid rgba(64,119,173,.18);border-radius:6px;padding:9px 13px;margin:6px 0 12px}.cp-new-user-hint svg{width:15px;height:15px;flex-shrink:0}.cp-new-user-hint svg path{fill:#4077ad}.cp-agreements{display:flex;flex-direction:column;gap:10px;margin:24px 0 4px}.v1-agreement-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;border:1.5px solid #d3dce3;background:#fff;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px #0000000a}.v1-agreement-card:hover{border-color:#bac8d3;box-shadow:0 2px 8px #00000012}.v1-agreement-card.v1-card--agreed{border-color:#b8d4ef;background:#ebf3fb}.v1-agreement-card.v1-card--invalid{border-color:#fecaca;background:#fff5f5}.v1-card-icon{flex-shrink:0;width:36px;height:36px;border-radius:9px;background:#eef1f4;border:1px solid #d3dce3;display:flex;align-items:center;justify-content:center;color:#4077ad}.v1-card--agreed .v1-card-icon{background:#d4e8f8;border-color:#b8d4ef}.v1-card-body{flex:1 1 auto;min-width:0}.v1-card-title{font-size:13px;font-weight:600;color:#0c1620;margin:0 0 2px;line-height:1.3}.v1-card-sub{font-size:11.5px;color:#6b7c8a;margin:0}.v1-agree-btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;padding:7px 13px;border-radius:8px;font-size:12px;font-weight:600;font-family:inherit;border:1.5px solid #4077AD;color:#4077ad;background:transparent;cursor:pointer;white-space:nowrap;transition:background .18s,color .18s}.v1-agree-btn:hover{background:#4077ad;color:#fff}.v1-agree-btn.v1-agree-btn--done{background:#4077ad;border-color:#4077ad;color:#fff}.cp-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;height:46px;margin-top:10px;background:#4077ad;border:none;border-radius:6px;font-size:13.5px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;transition:background .15s,box-shadow .15s,transform .1s;font-family:inherit}.cp-btn:hover:not(:disabled){background:#335f8a;box-shadow:0 4px 12px #4077ad59}.cp-btn:active:not(:disabled){transform:scale(.99)}.cp-btn:disabled{opacity:.6;cursor:not-allowed}.cp-btn--submit{height:52px;font-size:15px;letter-spacing:.5px;background:linear-gradient(135deg,#4077ad,#335f8a);box-shadow:0 2px 8px #4077ad40;border-radius:8px;margin-top:0}.cp-btn--submit:hover:not(:disabled){box-shadow:0 6px 18px #4077ad66;filter:brightness(1.05)}.cp-btn--outline{background:#fff;color:#4077ad;border:1.5px solid #4077AD}.cp-btn--outline:hover:not(:disabled){background:#4077ad0d;box-shadow:none}.cp-btn--ghost{background:transparent;color:#6b7c8a;border:1.5px solid #d3dce3}.cp-btn--ghost:hover:not(:disabled){border-color:#4077ad;color:#4077ad;box-shadow:none}.cp-btn--sm{height:38px;font-size:12.5px}.cp-btn-link{background:none;border:none;font-family:inherit;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;margin-top:8px;padding:6px 0;text-decoration:underline}.cp-btn-link:hover{color:#4077ad}.cp-spinner{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cp-spin .7s linear infinite}.cp-spinner:not(.cp-spinner-btn){border-color:#4077ad4d;border-top-color:#4077ad}.cp-spinner--sm{width:11px;height:11px;border-color:#4077ad4d;border-top-color:#4077ad}@keyframes cp-spin{to{transform:rotate(360deg)}}.cp-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin-bottom:14px;background:#f8fafc;border:1px solid #e2eaf2;border-radius:6px}.cp-toggle-row__info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.cp-toggle-row__label{font-size:13px;font-weight:600;color:#0c1620}.cp-toggle-row__label em{font-style:normal;font-size:11px;font-weight:500;color:#6b7c8a;margin-left:4px}.cp-toggle-row__hint{font-size:11px;color:#6b7c8a}.cp-toggle-switch{position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0;cursor:pointer}.cp-toggle-switch input{opacity:0;width:0;height:0;position:absolute}.cp-toggle-switch input:checked+.cp-toggle-knob{background:#4077ad}.cp-toggle-switch input:checked+.cp-toggle-knob:before{transform:translate(18px)}.cp-toggle-knob{position:absolute;inset:0;background:#c8d5e0;border-radius:24px;transition:background .2s;cursor:pointer}.cp-toggle-knob:before{content:\"\";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0003}.cp-otp-wrap{margin-top:4px}.cp-otp-hint{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6b7c8a;margin:0 0 12px}.cp-otp-hint svg path{fill:#6b7c8a}.cp-otp-hint strong{color:#0c1620}.cp-otp-timer{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#4077ad;background:#4077ad12;border:1px solid rgba(64,119,173,.18);border-radius:99px;padding:4px 12px;margin-bottom:14px}.cp-otp-timer svg path{fill:#4077ad}.cp-otp-timer--expired{color:#dc3545;background:#dc354512;border-color:#dc354533}.cp-otp-timer--expired svg path{fill:#dc3545}.cp-otp-input{letter-spacing:.15em;font-size:16px;font-weight:600}.cp-otp-actions{display:flex;flex-direction:column;gap:0;margin-top:4px}.cp-pending-notice{display:flex;align-items:flex-start;gap:9px;padding:10px 14px;margin-bottom:16px;background:#4077ad0d;border:1px solid rgba(64,119,173,.18);border-radius:6px;font-size:12px;font-weight:600;color:#4077ad;line-height:1.55}.cp-pending-notice svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}.cp-pending-notice svg path{fill:#4077ad}.cp-fields-pending{opacity:.42;pointer-events:none;filter:blur(.4px);-webkit-user-select:none;user-select:none}.cp-anf-role-preview{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 16px;margin-bottom:4px;background:#4077ad08;border:1px solid rgba(64,119,173,.14);border-radius:8px}.cp-anf-role-preview .cp-role-card{width:110px;pointer-events:none}.cp-anf-role-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#6b7c8a}.cp-role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px;margin-top:6px}@media (max-width: 480px){.cp-role-cards{grid-template-columns:repeat(3,1fr)}}.cp-role-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px 10px;border:2px solid #d3dce3;border-radius:6px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;-webkit-user-select:none;user-select:none}.cp-role-card:hover{border-color:#4077ad;box-shadow:0 2px 8px #4077ad1f}.cp-role-card--selected{border-color:#4077ad;background:#4077ad0d;box-shadow:0 0 0 3px #4077ad26}.cp-role-card__img{position:relative;width:48px;height:48px}.cp-role-card__img img{width:100%;height:100%;object-fit:contain}.cp-role-card__check{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:#4077ad;display:flex;align-items:center;justify-content:center}.cp-role-card__check svg{width:11px;height:11px}.cp-role-card__check svg path{fill:#fff}.cp-role-card__name{font-size:11px;font-weight:600;color:#0c1620;text-align:center;line-height:1.3}.cp-role-card--disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.cp-role-card--disabled:hover{border-color:#d3dce3;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected{border-color:#6b7c8a;background:#f8fafc;box-shadow:none}.cp-role-cards--locked .cp-role-card--selected .cp-role-card__check{background:#6b7c8a}.cp-role-locked-notice{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:6px 12px;border-radius:99px;background:#f59e0b14;border:1px solid rgba(245,158,11,.25);font-size:11.5px;font-weight:600;color:#92400e}.cp-role-locked-notice svg{width:13px;height:13px;flex-shrink:0}.cp-role-locked-notice svg path{fill:#92400e}.cp-role-locked-notice.cp-role-preassigned-notice{background:#2563eb0f;border-color:#2563eb38;color:#1e40af}.cp-role-locked-notice.cp-role-preassigned-notice svg path{fill:#2563eb}.cp-role-cards--preassigned{display:flex;justify-content:flex-start;gap:0;margin-top:8px}.cp-role-cards--preassigned .cp-role-card--preassigned{width:140px;cursor:default;pointer-events:none;border-color:#2563eb;background:#2563eb0a;box-shadow:0 0 0 3px #2563eb1f}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__check{background:#2563eb}.cp-role-cards--preassigned .cp-role-card--preassigned .cp-role-card__name{color:#1e40af;font-weight:700}.cp-form-footer{margin:16px 24px 0;background:#fff;border:1px solid #e2eaf2;border-radius:10px;padding:20px 24px;box-shadow:0 1px 3px #0000000a}@media (max-width: 860px){.cp-form-footer{margin:12px 16px 0}}@media (max-width: 480px){.cp-form-footer{margin:10px 12px 0;padding:16px;border-radius:8px}}.cp-terms{margin:0 0 16px}.cp-terms__label{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:12.5px;color:#6b7c8a;line-height:1.7;margin:0}.cp-terms__label a{color:#4077ad;text-decoration:underline;font-weight:600}.cp-terms__label a:hover{color:#335f8a}.cp-terms__check{position:absolute;opacity:0;width:0;height:0}.cp-terms__box{width:17px;height:17px;flex-shrink:0;margin-top:2px;border:2px solid #d3dce3;border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s;position:relative}.cp-terms__box:after{content:\"\";display:none;position:absolute;left:4px;top:1px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.cp-terms__check:checked~.cp-terms__box{background:#4077ad;border-color:#4077ad}.cp-terms__check:checked~.cp-terms__box:after{display:block}.cp-upload-area{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:120px;border:2px dashed #d3dce3;border-radius:6px;background:#eef1f4;cursor:pointer;transition:border-color .15s,background .15s;overflow:hidden}.cp-upload-area:hover{border-color:#4077ad;background:#4077ad08}.cp-upload-hidden{position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none}.cp-upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px;text-align:center;pointer-events:none}.cp-upload-placeholder svg{width:32px;height:32px;opacity:.5}.cp-upload-placeholder svg path{fill:#6b7c8a}.cp-upload-placeholder span{font-size:12.5px;font-weight:600;color:#6b7c8a}.cp-upload-placeholder small{font-size:11px;color:#95a2ad}.cp-upload-preview{width:100%;object-fit:cover;display:block}.cp-upload-preview--avatar{width:90px;height:90px;border-radius:50%;object-fit:cover;border:3px solid #fff;box-shadow:0 2px 8px #0000001f;margin:14px auto 0}.cp-upload-preview--logo{max-width:180px;max-height:80px;width:auto;height:auto;object-fit:contain;margin:14px auto 0}.cp-upload-change{font-size:11px;font-weight:600;color:#4077ad;margin-bottom:10px;pointer-events:none}.tc-modal-dialog{max-width:min(780px,96vw)}.tc-modal{border-radius:20px!important;border:none!important;overflow:hidden;box-shadow:0 32px 72px #00000038,0 6px 20px #0000001a!important;height:min(720px,90vh);display:flex;flex-direction:column}.tc-modal-header{display:flex;align-items:center;gap:13px;padding:20px 24px;background:#4077ad;border-bottom:none;flex-shrink:0}.tc-modal-header .tc-header-icon{width:38px;height:38px;background:#ffffff1f;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#93c5fd;flex-shrink:0}.tc-modal-header .tc-modal-title{font-size:16px;font-weight:700;color:#fff;margin:0;flex:1}.tc-modal-close{flex-shrink:0;background:#ffffff1f;border:none;border-radius:8px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.tc-modal-close:hover{background:#ffffff38;color:#fff}.tc-modal-body{flex:1 1 auto;overflow-y:auto;padding:26px 32px;background:#fff;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.tc-modal-body::-webkit-scrollbar{width:5px}.tc-modal-body::-webkit-scrollbar-track{background:transparent}.tc-modal-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:99px}.tc-modal-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tc-modal-footer{display:flex;justify-content:flex-end;align-items:center;padding:14px 24px;background:#f8fafc;border-top:1px solid #e2e8f0;flex-shrink:0}.tc-btn{font-size:13.5px;font-weight:600;font-family:inherit;padding:9px 24px;border-radius:10px;border:none;cursor:pointer;transition:background .15s ease}.tc-btn.tc-btn-close{background:#4077ad;color:#fff}.tc-btn.tc-btn-close:hover{background:#335f8a}.cp-logout-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:6px;border:1.5px solid #e2eaf2;background:#fff;font-size:12.5px;font-weight:600;color:#6b7c8a;cursor:pointer;font-family:inherit;transition:all .15s;flex-shrink:0}.cp-logout-btn svg{width:16px;height:16px}.cp-logout-btn svg path{fill:#6b7c8a}.cp-logout-btn:hover{border-color:#dc3545;color:#dc3545}.cp-logout-btn:hover svg path{fill:#dc3545}.cp-logout-btn--mobile{margin-left:auto}.cp-biz-layout{display:grid;grid-template-columns:1fr 160px;gap:20px;align-items:start}@media (max-width: 640px){.cp-biz-layout{grid-template-columns:1fr}}.cp-biz-fields{display:flex;flex-direction:column}.cp-biz-logo{display:flex;flex-direction:column;gap:8px}.cp-biz-logo__label{font-size:11.5px;font-weight:600;color:#3a4a57}.cp-biz-logo__area{border:2px dashed #d3dce3;border-radius:6px;background:#f8fafc;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:140px;padding:12px;text-align:center;transition:border-color .15s}.cp-biz-logo__area:hover{border-color:#4077ad}.cp-biz-logo__img{width:100%;max-height:100px;object-fit:contain;border-radius:4px}.cp-biz-logo__change{font-size:11px;color:#6b7c8a;margin-top:6px;display:block}.cp-biz-logo__placeholder{display:flex;flex-direction:column;align-items:center;gap:6px}.cp-biz-logo__placeholder svg{width:28px;height:28px}.cp-biz-logo__placeholder svg path{fill:#aab8c2}.cp-biz-logo__placeholder span{font-size:11.5px;font-weight:600;color:#6b7c8a}.cp-biz-logo__placeholder small{font-size:10px;color:#aab8c2}.cp-profile-logo-area{border-radius:50%!important;min-height:140px!important;width:140px!important;height:140px!important;margin:0 auto;overflow:hidden;padding:0!important;position:relative}.cp-profile-logo-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.cp-profile-logo-area .cp-biz-logo__change{position:absolute;bottom:0;left:0;right:0;background:#0000007a;color:#fff!important;padding:7px 0 5px;text-align:center;font-size:10.5px;font-weight:600;margin-top:0!important;opacity:0;transition:opacity .18s}.cp-profile-logo-area:hover .cp-biz-logo__change{opacity:1}.cp-lookup-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 44px!important}.cp-lookup-loading p{font-size:14px;color:#6b7c8a;margin:0}.cp-lookup-spinner{width:32px;height:32px;border:3px solid rgba(64,119,173,.2);border-top-color:#4077ad}.cp-anf-card{width:100%;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 4px 6px -1px #00000012,0 16px 40px -4px #0c16201f;border:1px solid #e2eaf2}.cp-anf-card__header{display:flex;align-items:center;gap:16px;padding:28px 28px 20px;border-bottom:1px solid #f0f4f8}.cp-anf-card__identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.cp-anf-card__name{font-size:18px;font-weight:800;color:#0c1620;margin:0;line-height:1.2}.cp-anf-card__email{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b7c8a}.cp-anf-card__email svg{width:12px;height:12px}.cp-anf-card__email svg path{fill:#6b7c8a}.cp-anf-card__details{padding:16px 28px;display:flex;flex-direction:column;gap:10px;border-bottom:1px solid #f0f4f8}.cp-anf-card__notice{display:flex;align-items:center;gap:10px;padding:14px 28px;background:#4077ad0a;border-bottom:1px solid #f0f4f8;font-size:13px;color:#4077ad;font-weight:600}.cp-anf-card__notice svg{width:18px;height:18px;flex-shrink:0}.cp-anf-card__notice svg path{fill:#4077ad}.cp-anf-avatar{width:60px;height:60px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#4077ad,#335f8a);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#fff;text-transform:uppercase;letter-spacing:-.5px}.cp-anf-roles{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px}.cp-anf-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;padding:3px 8px;border-radius:99px;background:#4077ad14;color:#4077ad;border:1px solid rgba(64,119,173,.18)}.cp-anf-detail{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:#6b7c8a;line-height:1.5}.cp-anf-detail svg{width:14px;height:14px;flex-shrink:0;margin-top:1px}.cp-anf-detail svg path{fill:#6b7c8a}.cp-anf-signin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:54px;padding:0 24px;background:linear-gradient(135deg,#4077ad,#335f8a);border:none;border-radius:0;font-size:15px;font-weight:700;letter-spacing:.3px;color:#fff;cursor:pointer;text-decoration:none;font-family:inherit;transition:filter .15s,box-shadow .15s;-webkit-appearance:none}.cp-anf-signin-btn svg{width:18px;height:18px;flex-shrink:0}.cp-anf-signin-btn svg path{fill:#fff}.cp-anf-signin-btn:hover{filter:brightness(1.07);box-shadow:inset 0 -3px #00000026}::ng-deep .modal-content{background:none!important;border:none!important}::ng-deep .ng-select div,.ng-select input,.ng-select span{font-size:12px!important}\n"] }]
37147
37157
  }], ctorParameters: () => [{ type: i8.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: ClaimProcessService }, { type: i7.BsModalService }, { type: i1$2.TokenService }, { type: i1$2.AuthLogoutService }, { type: IndustryService }, { type: undefined, decorators: [{
37148
37158
  type: Inject,
37149
37159
  args: [LIBRARY_CONFIG]