{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "cap-table-ownership-summary",
  "title": "Cap Table Ownership Summary",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/cap-table-ownership-summary/cap-table-ownership-summary.component.ts",
      "content": "// Carta-style company equity capitalization table, share class breakdown, fully diluted\n// ownership percentages, shareholder vesting progress, and an interactive round dilution\n// modeling simulator. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport {\n  Award,\n  Building2,\n  Calculator,\n  Check,\n  Coins,\n  FileSpreadsheet,\n  Info,\n  Layers,\n  LucideAngularModule,\n  Plus,\n  RefreshCw,\n  Search,\n  ShieldCheck,\n  TrendingUp,\n  Users,\n  X,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiAvatarComponent, UiAvatarFallbackComponent } from '@/ui/avatar/avatar.component'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardDescriptionComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiInputComponent } from '@/ui/input/input.component'\nimport {\n  UiTableBodyComponent,\n  UiTableCellComponent,\n  UiTableComponent,\n  UiTableHeadComponent,\n  UiTableHeaderComponent,\n  UiTableRowComponent,\n} from '@/ui/table/table.component'\n\nexport type CapTableShareClass = 'Common Stock' | 'Series Seed Preferred' | 'ISO Option Pool'\nexport type CapTableClassFilter = 'All' | CapTableShareClass\nexport type GrantEquityClass = 'ISO Options' | 'NSO Options' | 'Restricted Stock'\n\nexport interface Shareholder {\n  id: string\n  name: string\n  role: string\n  avatar: string\n  shareClass: CapTableShareClass\n  shares: number\n  ownershipPct: number\n  equityValue: number\n  vestingDetail: string\n  vestedMonths: number\n  totalMonths: number\n  isVestedComplete: boolean\n  grantDate: string\n  liquidationPref?: string\n}\n\nconst INITIAL_SHAREHOLDERS: Shareholder[] = [\n  {\n    id: 'sh-1',\n    name: 'Elena Rostova',\n    role: 'Co-Founder & CEO',\n    avatar: 'ER',\n    shareClass: 'Common Stock',\n    shares: 3500000,\n    ownershipPct: 35.0,\n    equityValue: 15750000,\n    vestingDetail: '48-Month Vesting · 24/48 Months Vested',\n    vestedMonths: 24,\n    totalMonths: 48,\n    isVestedComplete: false,\n    grantDate: 'Feb 15, 2024 · 1-yr Cliff (Satisfied)',\n  },\n  {\n    id: 'sh-2',\n    name: 'Marcus Vance',\n    role: 'Co-Founder & CTO',\n    avatar: 'MV',\n    shareClass: 'Common Stock',\n    shares: 2500000,\n    ownershipPct: 25.0,\n    equityValue: 11250000,\n    vestingDetail: '48-Month Vesting · 24/48 Months Vested',\n    vestedMonths: 24,\n    totalMonths: 48,\n    isVestedComplete: false,\n    grantDate: 'Feb 15, 2024 · 1-yr Cliff (Satisfied)',\n  },\n  {\n    id: 'sh-3',\n    name: 'Founders Fund / Seed Syndicate',\n    role: 'Lead Seed Investor',\n    avatar: 'FF',\n    shareClass: 'Series Seed Preferred',\n    shares: 1500000,\n    ownershipPct: 15.0,\n    equityValue: 6750000,\n    vestingDetail: 'Fully Vested (100%) · 1.0x Non-Participating',\n    vestedMonths: 48,\n    totalMonths: 48,\n    isVestedComplete: true,\n    grantDate: 'Aug 10, 2024 · Board Seat (1)',\n    liquidationPref: '1.0x Pref ($6.75M)',\n  },\n  {\n    id: 'sh-4',\n    name: 'Sequoia Scout Seed SPV',\n    role: 'Seed Co-Investor',\n    avatar: 'SQ',\n    shareClass: 'Series Seed Preferred',\n    shares: 1000000,\n    ownershipPct: 10.0,\n    equityValue: 4500000,\n    vestingDetail: 'Fully Vested (100%) · 1.0x Non-Participating',\n    vestedMonths: 48,\n    totalMonths: 48,\n    isVestedComplete: true,\n    grantDate: 'Aug 10, 2024 · Pro-Rata Rights',\n    liquidationPref: '1.0x Pref ($4.50M)',\n  },\n  {\n    id: 'sh-5',\n    name: 'Unallocated Employee Option Pool',\n    role: '2024 Equity Incentive Plan (EIP)',\n    avatar: 'EP',\n    shareClass: 'ISO Option Pool',\n    shares: 1500000,\n    ownershipPct: 15.0,\n    equityValue: 6750000,\n    vestingDetail: 'Authorized Pool · Available for Future Key Hires',\n    vestedMonths: 0,\n    totalMonths: 48,\n    isVestedComplete: false,\n    grantDate: 'Board Authorized · Dec 01, 2024',\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-cap-table-ownership-summary, [ui-cap-table-ownership-summary]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardDescriptionComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiInputComponent,\n    UiTableBodyComponent,\n    UiTableCellComponent,\n    UiTableComponent,\n    UiTableHeadComponent,\n    UiTableHeaderComponent,\n    UiTableRowComponent,\n  ],\n  template: `\n    <div data-slot=\"cap-table-ownership-summary\" [class]=\"rootClass\">\n      <!-- Top Header -->\n      <header class=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n        <div class=\"space-y-1.5\">\n          <div class=\"flex flex-wrap items-center gap-2.5\">\n            <div\n              class=\"bg-primary/10 text-primary border-primary/20 flex size-9 shrink-0 items-center justify-center rounded-lg border shadow-xs\"\n            >\n              <lucide-icon [img]=\"Building2\" class=\"size-5\" />\n            </div>\n            <div>\n              <h1 class=\"text-foreground text-2xl font-bold tracking-tight\">\n                Capitalization Table &amp; Equity Ownership\n              </h1>\n            </div>\n            <span ui-badge variant=\"outline\" class=\"border-success/30 bg-success/10 text-success gap-1.5 font-normal\">\n              <span class=\"bg-success size-1.5 animate-pulse rounded-full\"></span>\n              Audited · Series Seed\n            </span>\n          </div>\n\n          <div class=\"text-muted-foreground flex flex-wrap items-center gap-2 text-xs\">\n            <span class=\"bg-muted/70 text-foreground border-border/80 rounded border px-2 py-0.5 font-medium\">\n              UIPKGE Technologies Inc. · Delaware C-Corp\n            </span>\n            <span>EIN: 93-8472910</span>\n            <span class=\"inline-flex items-center gap-1 font-mono\">\n              <lucide-icon [img]=\"ShieldCheck\" class=\"text-primary size-3.5\" />\n              409A FMV: &#36;{{ currentSharePrice.toFixed(2) }}/share\n            </span>\n          </div>\n        </div>\n\n        <!-- Action Buttons -->\n        <div class=\"flex flex-wrap items-center gap-2\">\n          <button\n            ui-button\n            variant=\"outline\"\n            size=\"sm\"\n            class=\"gap-1.5 shadow-xs\"\n            [disabled]=\"isExporting()\"\n            (click)=\"handleExportCapTable()\"\n          >\n            @if (isExporting()) {\n              <lucide-icon [img]=\"RefreshCw\" class=\"size-4 animate-spin\" />\n            } @else if (exportSuccess()) {\n              <lucide-icon [img]=\"Check\" class=\"text-success size-4\" />\n            } @else {\n              <lucide-icon [img]=\"FileSpreadsheet\" class=\"size-4\" />\n            }\n            <span>{{ exportButtonLabel() }}</span>\n          </button>\n\n          <button ui-button size=\"sm\" class=\"gap-1.5 shadow-xs\" (click)=\"isGrantDialogOpen.set(true)\">\n            <lucide-icon [img]=\"Plus\" class=\"size-4\" />\n            Issue Equity Grant\n          </button>\n        </div>\n      </header>\n\n      <!-- Issue Equity Grant Dialog Modal Overlay -->\n      @if (isGrantDialogOpen()) {\n        <div\n          class=\"bg-background/80 fixed inset-0 z-50 flex items-center justify-center p-4 backdrop-blur-xs\"\n          role=\"dialog\"\n          aria-modal=\"true\"\n          aria-labelledby=\"grant-dialog-title\"\n        >\n          <div ui-card class=\"border-border w-full max-w-lg shadow-lg\">\n            <div ui-card-header class=\"pb-3\">\n              <div class=\"flex flex-wrap items-center justify-between gap-x-2\">\n                <h2 ui-card-title id=\"grant-dialog-title\" class=\"flex items-center gap-2 text-base font-semibold\">\n                  <lucide-icon [img]=\"Award\" class=\"text-primary size-5\" />\n                  Issue New Equity Option Grant\n                </h2>\n                <button\n                  ui-button\n                  variant=\"ghost\"\n                  size=\"icon-sm\"\n                  class=\"text-muted-foreground hover:text-foreground size-7\"\n                  aria-label=\"Close dialog\"\n                  (click)=\"isGrantDialogOpen.set(false)\"\n                >\n                  <lucide-icon [img]=\"X\" class=\"size-4\" />\n                </button>\n              </div>\n              <p ui-card-description class=\"text-xs\">\n                Authorize and draft an option grant under the 2024 Equity Incentive Plan (EIP).\n              </p>\n            </div>\n\n            <div ui-card-content class=\"space-y-4\">\n              @if (grantSuccessMessage()) {\n                <div class=\"border-success/20 bg-success/10 rounded-lg border p-4 text-center\">\n                  <lucide-icon [img]=\"Check\" class=\"text-success mx-auto size-6\" />\n                  <p class=\"text-foreground mt-2 text-sm font-semibold\">Option Grant Issued &amp; Drafted!</p>\n                  <p class=\"text-muted-foreground mt-0.5 text-xs\">\n                    Sent to Board of Directors for electronic consent signature.\n                  </p>\n                </div>\n              } @else {\n                <form class=\"space-y-3.5\" (submit)=\"handleCreateGrant($event)\">\n                  <div class=\"space-y-1.5\">\n                    <label for=\"angular-grantee-name\" class=\"text-foreground text-xs font-medium\">\n                      Grantee Legal Name\n                    </label>\n                    <ui-input\n                      id=\"angular-grantee-name\"\n                      [value]=\"grantName()\"\n                      (valueChange)=\"grantName.set($event)\"\n                      placeholder=\"e.g. Dr. Sarah Chen\"\n                      class=\"h-9 text-xs\"\n                    />\n                  </div>\n\n                  <div class=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n                    <div class=\"space-y-1.5\">\n                      <label for=\"angular-grantee-role\" class=\"text-foreground text-xs font-medium\">Role / Title</label>\n                      <ui-input\n                        id=\"angular-grantee-role\"\n                        [value]=\"grantRole()\"\n                        (valueChange)=\"grantRole.set($event)\"\n                        placeholder=\"e.g. Principal AI Scientist\"\n                        class=\"h-9 text-xs\"\n                      />\n                    </div>\n\n                    <div class=\"space-y-1.5\">\n                      <label for=\"angular-grant-quantity\" class=\"text-foreground text-xs font-medium\">\n                        Number of Options / Shares\n                      </label>\n                      <ui-input\n                        id=\"angular-grant-quantity\"\n                        [value]=\"grantShares()\"\n                        (valueChange)=\"grantShares.set(numberOr($event, 0))\"\n                        type=\"number\"\n                        min=\"1000\"\n                        step=\"1000\"\n                        class=\"h-9 font-mono text-xs tabular-nums\"\n                      />\n                    </div>\n                  </div>\n\n                  <div class=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n                    <div class=\"space-y-1.5\">\n                      <label class=\"text-foreground text-xs font-medium\">Equity Class</label>\n                      <div\n                        class=\"border-border bg-muted/30 flex h-9 items-center justify-between rounded-md border px-3 text-xs\"\n                      >\n                        <span class=\"font-medium\">{{ grantClass() }}</span>\n                        <span ui-badge variant=\"outline\" class=\"text-xs\">EIP-2024</span>\n                      </div>\n                    </div>\n\n                    <div class=\"space-y-1.5\">\n                      <label class=\"text-foreground text-xs font-medium\">Exercise Price (409A FMV)</label>\n                      <div\n                        class=\"border-border bg-muted/30 flex h-9 items-center justify-between rounded-md border px-3 font-mono text-xs tabular-nums\"\n                      >\n                        <span>&#36;{{ currentSharePrice.toFixed(2) }} / share</span>\n                        <span class=\"text-muted-foreground text-xs\">Fair Market</span>\n                      </div>\n                    </div>\n                  </div>\n\n                  <div class=\"space-y-1.5\">\n                    <label class=\"text-foreground text-xs font-medium\">Standard Vesting Schedule</label>\n                    <ui-input\n                      [value]=\"grantVesting()\"\n                      (valueChange)=\"grantVesting.set($event)\"\n                      class=\"bg-muted/40 h-9 text-xs\"\n                    />\n                    <p class=\"text-muted-foreground text-xs\">\n                      25% vests at 12-month cliff; remaining 75% vests monthly in 36 equal installments.\n                    </p>\n                  </div>\n\n                  <div class=\"flex items-center justify-end gap-2 pt-3\">\n                    <button ui-button type=\"button\" variant=\"outline\" size=\"sm\" (click)=\"isGrantDialogOpen.set(false)\">\n                      Cancel\n                    </button>\n                    <button ui-button type=\"submit\" size=\"sm\" class=\"gap-1.5\">\n                      <lucide-icon [img]=\"Check\" class=\"size-4\" />\n                      Draft &amp; Issue Grant\n                    </button>\n                  </div>\n                </form>\n              }\n            </div>\n          </div>\n        </div>\n      }\n\n      <!-- 4 Capital Structure Overview Cards -->\n      <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        <!-- Total Fully Diluted Shares Card -->\n        <div ui-card class=\"border-border relative overflow-hidden shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Total Fully Diluted Shares</h3>\n            <div class=\"bg-primary/10 text-primary rounded-md p-1.5\">\n              <lucide-icon [img]=\"Layers\" class=\"size-4\" />\n            </div>\n          </div>\n          <div ui-card-content class=\"space-y-1\">\n            <div class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">10,000,000</div>\n            <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span>Authorized: 15,000,000</span>\n              <span class=\"text-success font-mono\">66.7% Issued</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- Founder Common Stock Card -->\n        <div ui-card class=\"border-border relative overflow-hidden shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Founder Common Stock</h3>\n            <div class=\"bg-success/10 text-success rounded-md p-1.5\">\n              <lucide-icon [img]=\"Users\" class=\"size-4\" />\n            </div>\n          </div>\n          <div ui-card-content class=\"space-y-1\">\n            <div class=\"flex items-baseline gap-2\">\n              <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">6,000,000</span>\n              <span class=\"text-success font-mono text-xs font-semibold\">60.0%</span>\n            </div>\n            <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span>2 Co-Founders</span>\n              <span class=\"font-mono tabular-nums\">$27,000,000.00</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- Series Seed Preferred Card -->\n        <div ui-card class=\"border-border relative overflow-hidden shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Series Seed Preferred</h3>\n            <div class=\"bg-chart-2/10 text-chart-2 rounded-md p-1.5\">\n              <lucide-icon [img]=\"TrendingUp\" class=\"size-4\" />\n            </div>\n          </div>\n          <div ui-card-content class=\"space-y-1\">\n            <div class=\"flex items-baseline gap-2\">\n              <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">2,500,000</span>\n              <span class=\"text-chart-2 font-mono text-xs font-semibold\">25.0%</span>\n            </div>\n            <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span>2 Seed Investors · 1.0x Pref</span>\n              <span class=\"font-mono tabular-nums\">$11,250,000.00</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- Unallocated Option Pool Card -->\n        <div ui-card class=\"border-border relative overflow-hidden shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Unallocated Option Pool</h3>\n            <div class=\"bg-info/10 text-info rounded-md p-1.5\">\n              <lucide-icon [img]=\"Coins\" class=\"size-4\" />\n            </div>\n          </div>\n          <div ui-card-content class=\"space-y-1\">\n            <div class=\"flex items-baseline gap-2\">\n              <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">1,500,000</span>\n              <span class=\"text-info font-mono text-xs font-semibold\">15.0%</span>\n            </div>\n            <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span>2024 EIP Pool</span>\n              <span class=\"font-mono tabular-nums\">$6,750,000.00</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Company Valuation Hero & Visual Stacked Ownership Bar Card -->\n      <div ui-card class=\"border-border overflow-hidden shadow-xs\">\n        <div ui-card-header class=\"pb-3\">\n          <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n            <div>\n              <p ui-card-description class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                Current Post-Money Valuation\n              </p>\n              <div class=\"mt-1 flex flex-wrap items-baseline gap-3\">\n                <span class=\"text-foreground text-3xl font-bold tracking-tight tabular-nums sm:text-4xl\">\n                  $45,000,000.00\n                </span>\n                <div\n                  class=\"border-success/20 bg-success/10 text-success text-success inline-flex items-center gap-1 rounded-full border px-2.5 py-0.5 text-xs font-semibold tabular-nums\"\n                >\n                  <lucide-icon [img]=\"TrendingUp\" class=\"size-3.5\" />\n                  Seed Round Closed\n                  <span class=\"text-muted-foreground ml-0.5 font-normal\">($4.50/share)</span>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"text-muted-foreground flex items-center gap-3 text-xs\">\n              <div class=\"flex items-center gap-1.5\">\n                <span class=\"bg-success size-2 rounded-full\"></span>\n                <span>Cap Table Reconciled</span>\n              </div>\n              <span class=\"font-mono\">10,000,000 Total Units</span>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-4 pt-1\">\n          <!-- Multi-segment Stacked Ownership Bar -->\n          <div class=\"space-y-2\">\n            <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span class=\"text-foreground font-medium\">Fully Diluted Equity Distribution</span>\n              <span class=\"tabular-nums\">100.0% Allocation</span>\n            </div>\n\n            <div class=\"bg-muted/60 border-border/50 flex h-4 w-full gap-0.5 overflow-hidden rounded-full border p-0.5\">\n              <!-- Founders 60% Emerald -->\n              <div\n                style=\"width: 60%\"\n                class=\"bg-success h-full rounded-l-full transition-opacity duration-300 hover:opacity-90\"\n                title=\"Founders (Common Stock): 60.0% · 6,000,000 Shares\"\n              ></div>\n              <!-- Seed Investors 25% -->\n              <div\n                style=\"width: 25%\"\n                class=\"bg-chart-2 h-full transition-opacity duration-300 hover:opacity-90\"\n                title=\"Seed Investors (Preferred): 25.0% · 2,500,000 Shares\"\n              ></div>\n              <!-- Option Pool 15% Blue -->\n              <div\n                style=\"width: 15%\"\n                class=\"bg-info h-full rounded-r-full transition-opacity duration-300 hover:opacity-90\"\n                title=\"Unallocated Option Pool: 15.0% · 1,500,000 Shares\"\n              ></div>\n            </div>\n\n            <!-- Stacked Bar Legend -->\n            <div class=\"grid grid-cols-1 gap-3 pt-2 sm:grid-cols-3\">\n              <div\n                class=\"border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-x-2 rounded-md border p-2.5 text-xs\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"bg-success size-2.5 shrink-0 rounded-full shadow-xs\"></span>\n                  <div>\n                    <div class=\"text-foreground font-medium\">Founders (Common)</div>\n                    <div class=\"text-muted-foreground font-mono tabular-nums\">6,000,000 shares</div>\n                  </div>\n                </div>\n                <div class=\"text-right\">\n                  <div class=\"text-foreground font-bold tabular-nums\">60.0%</div>\n                  <div class=\"text-muted-foreground font-mono tabular-nums\">$27,000,000.00</div>\n                </div>\n              </div>\n\n              <div\n                class=\"border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-x-2 rounded-md border p-2.5 text-xs\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"bg-chart-2 size-2.5 shrink-0 rounded-full shadow-xs\"></span>\n                  <div>\n                    <div class=\"text-foreground font-medium\">Seed Investors (Preferred)</div>\n                    <div class=\"text-muted-foreground font-mono tabular-nums\">2,500,000 shares</div>\n                  </div>\n                </div>\n                <div class=\"text-right\">\n                  <div class=\"text-foreground font-bold tabular-nums\">25.0%</div>\n                  <div class=\"text-muted-foreground font-mono tabular-nums\">$11,250,000.00</div>\n                </div>\n              </div>\n\n              <div\n                class=\"border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-x-2 rounded-md border p-2.5 text-xs\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"bg-info size-2.5 shrink-0 rounded-full shadow-xs\"></span>\n                  <div>\n                    <div class=\"text-foreground font-medium\">Employee Option Pool</div>\n                    <div class=\"text-muted-foreground font-mono tabular-nums\">1,500,000 shares</div>\n                  </div>\n                </div>\n                <div class=\"text-right\">\n                  <div class=\"text-foreground font-bold tabular-nums\">15.0%</div>\n                  <div class=\"text-muted-foreground font-mono tabular-nums\">$6,750,000.00</div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Shareholder Breakdown Table Card -->\n      <div ui-card class=\"border-border shadow-xs\">\n        <div ui-card-header class=\"border-border/60 border-b pb-4\">\n          <div class=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n            <div>\n              <h2 ui-card-title class=\"text-foreground text-base font-semibold\">Shareholder &amp; Equity Register</h2>\n              <p ui-card-description class=\"text-muted-foreground mt-0.5 text-xs\">\n                Detailed registry of individual grants, share classes, fully diluted ownership, and vesting timelines.\n              </p>\n            </div>\n\n            <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n              <!-- Search -->\n              <div class=\"relative w-full sm:w-56\">\n                <lucide-icon\n                  [img]=\"Search\"\n                  class=\"text-muted-foreground absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2\"\n                />\n                <ui-input\n                  [value]=\"searchQuery()\"\n                  (valueChange)=\"searchQuery.set($event)\"\n                  placeholder=\"Search shareholder or role...\"\n                  class=\"h-8 pl-8 text-xs\"\n                />\n              </div>\n\n              <!-- Share Class Filter Buttons -->\n              <div class=\"border-border bg-muted/40 flex items-center rounded-lg border p-0.5\">\n                <button type=\"button\" [class]=\"filterButtonClass('All')\" (click)=\"selectedClassFilter.set('All')\">\n                  All (5)\n                </button>\n                <button\n                  type=\"button\"\n                  [class]=\"filterButtonClass('Common Stock')\"\n                  (click)=\"selectedClassFilter.set('Common Stock')\"\n                >\n                  Common (2)\n                </button>\n                <button\n                  type=\"button\"\n                  [class]=\"filterButtonClass('Series Seed Preferred')\"\n                  (click)=\"selectedClassFilter.set('Series Seed Preferred')\"\n                >\n                  Preferred (2)\n                </button>\n                <button\n                  type=\"button\"\n                  [class]=\"filterButtonClass('ISO Option Pool')\"\n                  (click)=\"selectedClassFilter.set('ISO Option Pool')\"\n                >\n                  Pool (1)\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"p-0\">\n          <div class=\"overflow-x-auto\">\n            <table ui-table>\n              <thead ui-table-header>\n                <tr ui-table-row class=\"hover:bg-transparent\">\n                  <th ui-table-head class=\"w-[260px] pl-6 text-xs font-medium\">Shareholder / Entity</th>\n                  <th ui-table-head class=\"w-[180px] text-xs font-medium\">Share Class</th>\n                  <th ui-table-head class=\"text-right text-xs font-medium\">Shares Owned</th>\n                  <th ui-table-head class=\"text-right text-xs font-medium\">Fully Diluted %</th>\n                  <th ui-table-head class=\"text-right text-xs font-medium\">Total Equity Value</th>\n                  <th ui-table-head class=\"min-w-[240px] pr-6 text-xs font-medium\">Vesting &amp; Status</th>\n                </tr>\n              </thead>\n              <tbody ui-table-body>\n                @for (sh of filteredShareholders(); track sh.id) {\n                  <tr ui-table-row class=\"hover:bg-muted/30 transition-colors\">\n                    <!-- Shareholder Name & Role -->\n                    <td ui-table-cell class=\"py-3.5 pl-6\">\n                      <div class=\"flex items-center gap-3\">\n                        <ui-avatar class=\"border-border/80 size-9 border shadow-xs\">\n                          <ui-avatar-fallback [class]=\"avatarFallbackClass(sh.shareClass)\">\n                            {{ sh.avatar }}\n                          </ui-avatar-fallback>\n                        </ui-avatar>\n                        <div class=\"min-w-0\">\n                          <div class=\"text-foreground truncate text-xs font-semibold\">{{ sh.name }}</div>\n                          <div class=\"text-muted-foreground truncate text-xs\">{{ sh.role }}</div>\n                          <div class=\"text-muted-foreground/70 font-mono text-xs\">{{ sh.grantDate }}</div>\n                        </div>\n                      </div>\n                    </td>\n\n                    <!-- Share Class Badge -->\n                    <td ui-table-cell class=\"py-3.5\">\n                      @if (sh.shareClass === 'Common Stock') {\n                        <span\n                          ui-badge\n                          variant=\"outline\"\n                          class=\"border-success/30 bg-success/10 text-success text-xs font-medium\"\n                        >\n                          Common Stock\n                        </span>\n                      } @else if (sh.shareClass === 'Series Seed Preferred') {\n                        <span\n                          ui-badge\n                          variant=\"outline\"\n                          class=\"border-chart-2/30 bg-chart-2/10 text-chart-2 text-xs font-medium\"\n                        >\n                          Series Seed Preferred\n                        </span>\n                      } @else {\n                        <span\n                          ui-badge\n                          variant=\"outline\"\n                          class=\"border-info/30 bg-info/10 text-info text-xs font-medium\"\n                        >\n                          ISO Option Pool\n                        </span>\n                      }\n                    </td>\n\n                    <!-- Shares Owned -->\n                    <td ui-table-cell class=\"py-3.5 text-right\">\n                      <div class=\"text-foreground font-mono text-sm font-bold tabular-nums\">\n                        {{ formatNumber(sh.shares) }}\n                      </div>\n                      <div class=\"text-muted-foreground text-xs\">Shares</div>\n                    </td>\n\n                    <!-- Fully Diluted Ownership Percentage -->\n                    <td ui-table-cell class=\"py-3.5 text-right\">\n                      <div class=\"text-foreground font-mono text-sm font-semibold tabular-nums\">\n                        {{ formatPercent(sh.ownershipPct) }}\n                      </div>\n                      <div class=\"text-muted-foreground text-xs\">of 10,000,000</div>\n                    </td>\n\n                    <!-- Total Equity Value -->\n                    <td ui-table-cell class=\"py-3.5 text-right\">\n                      <div class=\"text-foreground font-mono text-sm font-semibold tabular-nums\">\n                        {{ formatCurrency(sh.equityValue) }}\n                      </div>\n                      <div class=\"text-muted-foreground text-xs\">@ $4.50/share</div>\n                    </td>\n\n                    <!-- Vesting Status Progress -->\n                    <td ui-table-cell class=\"py-3.5 pr-6\">\n                      <div class=\"space-y-1.5\">\n                        <div class=\"flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                          <span class=\"text-foreground font-medium\">{{ vestingLabel(sh) }}</span>\n                          <span class=\"text-muted-foreground font-mono tabular-nums\">\n                            {{ sh.vestedMonths }}/{{ sh.totalMonths }} mo\n                          </span>\n                        </div>\n\n                        <div class=\"bg-muted/80 relative h-2 w-full overflow-hidden rounded-full\">\n                          <div [class]=\"vestingBarClass(sh)\" [style.width.%]=\"vestingPct(sh)\"></div>\n                        </div>\n\n                        <div class=\"text-muted-foreground text-xs\">{{ sh.vestingDetail }}</div>\n                      </div>\n                    </td>\n                  </tr>\n                }\n              </tbody>\n            </table>\n          </div>\n\n          <!-- Table Summary Bar -->\n          <div\n            class=\"border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-4 border-t px-6 py-3 text-xs\"\n          >\n            <div class=\"text-muted-foreground\">\n              Showing <span class=\"text-foreground font-semibold\">{{ filteredShareholders().length }}</span> of\n              <span class=\"text-foreground font-semibold\">5</span> cap table stakeholders\n            </div>\n            <div class=\"flex flex-wrap items-center gap-6 font-mono\">\n              <div>\n                <span class=\"text-muted-foreground\">Total Shares: </span>\n                <span class=\"text-foreground font-bold tabular-nums\">10,000,000</span>\n              </div>\n              <div>\n                <span class=\"text-muted-foreground\">Total Ownership: </span>\n                <span class=\"text-foreground font-bold tabular-nums\">100.0%</span>\n              </div>\n              <div>\n                <span class=\"text-muted-foreground\">Total Valuation: </span>\n                <span class=\"text-foreground font-bold tabular-nums\">$45,000,000.00</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Round Modeling Simulator Card (Series A Dilution Simulator) -->\n      <div ui-card class=\"border-border shadow-xs\">\n        <div ui-card-header class=\"pb-3\">\n          <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n            <div class=\"space-y-1\">\n              <div class=\"flex items-center gap-2\">\n                <div class=\"bg-primary/10 text-primary rounded-md p-1.5\">\n                  <lucide-icon [img]=\"Calculator\" class=\"size-4\" />\n                </div>\n                <h2 ui-card-title class=\"text-foreground text-base font-semibold\">\n                  Round Modeling Simulator (Series A Pro-Forma)\n                </h2>\n              </div>\n              <p ui-card-description class=\"text-muted-foreground text-xs\">\n                Simulate Series A pre-money valuation and capital raised to preview diluted ownership percentages, new\n                share price, and stakeholder equity value accretion.\n              </p>\n            </div>\n\n            <!-- Preset Scenario Buttons -->\n            <div class=\"flex flex-wrap items-center gap-1.5\">\n              <button\n                ui-button\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"h-7 text-xs font-medium\"\n                (click)=\"setPresetScenario(30000000, 5000000)\"\n              >\n                $5M @ $30M Pre\n              </button>\n              <button\n                ui-button\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"h-7 text-xs font-medium\"\n                (click)=\"setPresetScenario(50000000, 10000000)\"\n              >\n                $10M @ $50M Pre\n              </button>\n              <button\n                ui-button\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"h-7 text-xs font-medium\"\n                (click)=\"setPresetScenario(60000000, 15000000)\"\n              >\n                $15M @ $60M Pre\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-6\">\n          <!-- Simulator Inputs -->\n          <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n            <!-- Pre-Money Valuation Input -->\n            <div class=\"bg-muted/30 border-border/80 space-y-2 rounded-lg border p-4\">\n              <div class=\"flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                <label for=\"angular-sim-pre-money\" class=\"text-foreground font-semibold\">\n                  Series A Pre-Money Valuation\n                </label>\n                <span class=\"text-muted-foreground font-mono tabular-nums\">\n                  &#36;{{ (simPreMoney() / 1000000).toFixed(1) }}M\n                </span>\n              </div>\n              <div class=\"flex items-center gap-3\">\n                <ui-input\n                  id=\"angular-sim-pre-money\"\n                  [value]=\"simPreMoney()\"\n                  (valueChange)=\"simPreMoney.set(numberOr($event, 0))\"\n                  type=\"number\"\n                  step=\"1000000\"\n                  min=\"10000000\"\n                  class=\"font-mono text-base font-bold tabular-nums\"\n                />\n              </div>\n              <p class=\"text-muted-foreground text-xs\">\n                Implies a share price of\n                <strong class=\"text-foreground font-mono tabular-nums\">\n                  &#36;{{ simNewSharePrice().toFixed(2) }} / share</strong\n                >\n                (+{{ stepUpPct().toFixed(1) }}% step-up).\n              </p>\n            </div>\n\n            <!-- New Investment Raised Input -->\n            <div class=\"bg-muted/30 border-border/80 space-y-2 rounded-lg border p-4\">\n              <div class=\"flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                <label for=\"angular-sim-investment\" class=\"text-foreground font-semibold\"\n                  >Series A Capital Raised</label\n                >\n                <span class=\"text-muted-foreground font-mono tabular-nums\">\n                  &#36;{{ (simInvestment() / 1000000).toFixed(1) }}M\n                </span>\n              </div>\n              <div class=\"flex items-center gap-3\">\n                <ui-input\n                  id=\"angular-sim-investment\"\n                  [value]=\"simInvestment()\"\n                  (valueChange)=\"simInvestment.set(numberOr($event, 0))\"\n                  type=\"number\"\n                  step=\"1000000\"\n                  min=\"1000000\"\n                  class=\"font-mono text-base font-bold tabular-nums\"\n                />\n              </div>\n              <p class=\"text-muted-foreground text-xs\">\n                Issues\n                <strong class=\"text-foreground font-mono tabular-nums\">\n                  {{ formatNumber(simNewSharesIssued()) }} new shares</strong\n                >\n                to Series A lead syndicate.\n              </p>\n            </div>\n          </div>\n\n          <!-- Calculated Pro-Forma Summary Metrics -->\n          <div class=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n            <div class=\"border-border/60 bg-muted/20 space-y-1 rounded-md border p-3\">\n              <div class=\"text-muted-foreground text-xs\">Post-Money Valuation</div>\n              <div class=\"text-foreground font-mono text-lg font-bold tabular-nums\">\n                {{ formatCurrency(simPostMoney()) }}\n              </div>\n              <div class=\"text-muted-foreground text-xs\">Pre-Money + Investment</div>\n            </div>\n\n            <div class=\"border-border/60 bg-muted/20 space-y-1 rounded-md border p-3\">\n              <div class=\"text-muted-foreground text-xs\">Series A Share Price</div>\n              <div class=\"text-foreground font-mono text-lg font-bold tabular-nums\">\n                &#36;{{ simNewSharePrice().toFixed(2) }}\n              </div>\n              <div class=\"text-success text-xs\">\n                vs &#36;{{ currentSharePrice.toFixed(2) }} Seed (+{{ stepUpPct().toFixed(1) }}%)\n              </div>\n            </div>\n\n            <div class=\"border-border/60 bg-muted/20 space-y-1 rounded-md border p-3\">\n              <div class=\"text-muted-foreground text-xs\">Total Diluted Shares</div>\n              <div class=\"text-foreground font-mono text-lg font-bold tabular-nums\">\n                {{ formatNumber(simTotalPostShares()) }}\n              </div>\n              <div class=\"text-muted-foreground text-xs\">+{{ formatNumber(simNewSharesIssued()) }} New Shares</div>\n            </div>\n\n            <div class=\"border-border/60 bg-muted/20 space-y-1 rounded-md border p-3\">\n              <div class=\"text-muted-foreground text-xs\">Investor Dilution Rate</div>\n              <div class=\"text-foreground text-warning text-warning font-mono text-lg font-bold tabular-nums\">\n                {{ formatPercent(simNewInvestorPct()) }}\n              </div>\n              <div class=\"text-muted-foreground text-xs\">Effective Round Dilution</div>\n            </div>\n          </div>\n\n          <!-- Post-Round Dilution & Valuation Comparison Table -->\n          <div class=\"space-y-3\">\n            <div class=\"flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n              <span class=\"text-foreground font-semibold\">Post-Series A Ownership Comparison</span>\n              <span class=\"text-muted-foreground\">Pro-Forma Stakeholder Impact</span>\n            </div>\n\n            <!-- Visual Comparison Bar -->\n            <div class=\"space-y-1.5\">\n              <div\n                class=\"bg-muted/60 border-border/50 flex h-4 w-full gap-0.5 overflow-hidden rounded-full border p-0.5\"\n              >\n                <div\n                  [style.width.%]=\"simFounderPct()\"\n                  class=\"bg-success h-full rounded-l-full transition-[width] duration-300\"\n                  [title]=\"'Founders: ' + simFounderPct().toFixed(1) + '%'\"\n                ></div>\n                <div\n                  [style.width.%]=\"simSeedPct()\"\n                  class=\"bg-chart-2 h-full transition-[width] duration-300\"\n                  [title]=\"'Seed Investors: ' + simSeedPct().toFixed(1) + '%'\"\n                ></div>\n                <div\n                  [style.width.%]=\"simOptionPct()\"\n                  class=\"bg-info h-full transition-[width] duration-300\"\n                  [title]=\"'Option Pool: ' + simOptionPct().toFixed(1) + '%'\"\n                ></div>\n                <div\n                  [style.width.%]=\"simNewInvestorPct()\"\n                  class=\"bg-warning h-full rounded-r-full transition-[width] duration-300\"\n                  [title]=\"'Series A Investors: ' + simNewInvestorPct().toFixed(1) + '%'\"\n                ></div>\n              </div>\n            </div>\n\n            <!-- Stakeholder Comparative Grid -->\n            <div class=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n              <!-- Founders -->\n              <div class=\"border-border/80 bg-card space-y-2 rounded-lg border p-3 text-xs shadow-xs\">\n                <div class=\"flex flex-wrap items-center justify-between gap-x-2\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span class=\"bg-success size-2 rounded-full\"></span>\n                    <span class=\"text-foreground font-semibold\">Founders</span>\n                  </div>\n                  <span ui-badge variant=\"outline\" class=\"border-success/30 text-success font-mono text-xs\">\n                    {{ formatPercent(simFounderPct()) }}\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Dilution:</span>\n                  <span class=\"text-destructive text-destructive font-mono tabular-nums\">\n                    60.0% &rarr; {{ formatPercent(simFounderPct()) }} (-{{ (60 - simFounderPct()).toFixed(1) }}%)\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Equity Value:</span>\n                  <span class=\"text-foreground font-mono font-semibold tabular-nums\">\n                    {{ formatCurrency(simFounderValue()) }}</span\n                  >\n                </div>\n                <div class=\"text-success flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                  <span>Value Accretion:</span>\n                  <span class=\"font-mono font-semibold tabular-nums\">\n                    +{{ formatCurrency(simFounderValue() - 27000000) }}</span\n                  >\n                </div>\n              </div>\n\n              <!-- Seed Investors -->\n              <div class=\"border-border/80 bg-card space-y-2 rounded-lg border p-3 text-xs shadow-xs\">\n                <div class=\"flex flex-wrap items-center justify-between gap-x-2\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span class=\"bg-chart-2 size-2 rounded-full\"></span>\n                    <span class=\"text-foreground font-semibold\">Seed Investors</span>\n                  </div>\n                  <span ui-badge variant=\"outline\" class=\"border-chart-2/30 text-chart-2 font-mono text-xs\">\n                    {{ formatPercent(simSeedPct()) }}\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Dilution:</span>\n                  <span class=\"text-destructive text-destructive font-mono tabular-nums\">\n                    25.0% &rarr; {{ formatPercent(simSeedPct()) }} (-{{ (25 - simSeedPct()).toFixed(1) }}%)\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Equity Value:</span>\n                  <span class=\"text-foreground font-mono font-semibold tabular-nums\">\n                    {{ formatCurrency(simSeedValue()) }}</span\n                  >\n                </div>\n                <div class=\"text-success flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                  <span>Value Accretion:</span>\n                  <span class=\"font-mono font-semibold tabular-nums\">\n                    +{{ formatCurrency(simSeedValue() - 11250000) }}</span\n                  >\n                </div>\n              </div>\n\n              <!-- Option Pool -->\n              <div class=\"border-border/80 bg-card space-y-2 rounded-lg border p-3 text-xs shadow-xs\">\n                <div class=\"flex flex-wrap items-center justify-between gap-x-2\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span class=\"bg-info size-2 rounded-full\"></span>\n                    <span class=\"text-foreground font-semibold\">Option Pool</span>\n                  </div>\n                  <span ui-badge variant=\"outline\" class=\"border-info/30 text-info font-mono text-xs\">\n                    {{ formatPercent(simOptionPct()) }}\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Dilution:</span>\n                  <span class=\"text-destructive text-destructive font-mono tabular-nums\">\n                    15.0% &rarr; {{ formatPercent(simOptionPct()) }} (-{{ (15 - simOptionPct()).toFixed(1) }}%)\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Equity Value:</span>\n                  <span class=\"text-foreground font-mono font-semibold tabular-nums\">\n                    {{ formatCurrency(simOptionValue()) }}</span\n                  >\n                </div>\n                <div class=\"text-success flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                  <span>Value Accretion:</span>\n                  <span class=\"font-mono font-semibold tabular-nums\">\n                    +{{ formatCurrency(simOptionValue() - 6750000) }}</span\n                  >\n                </div>\n              </div>\n\n              <!-- New Series A Investors -->\n              <div class=\"border-border/80 bg-card space-y-2 rounded-lg border p-3 text-xs shadow-xs\">\n                <div class=\"flex flex-wrap items-center justify-between gap-x-2\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span class=\"bg-warning size-2 rounded-full\"></span>\n                    <span class=\"text-foreground font-semibold\">Series A Syndicate</span>\n                  </div>\n                  <span ui-badge variant=\"outline\" class=\"border-warning/30 text-warning font-mono text-xs\">\n                    New Investor\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>New Ownership:</span>\n                  <span class=\"text-warning text-warning font-mono font-bold tabular-nums\">\n                    {{ formatPercent(simNewInvestorPct()) }}\n                  </span>\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2\">\n                  <span>Shares Purchased:</span>\n                  <span class=\"text-foreground font-mono font-semibold tabular-nums\">\n                    {{ formatNumber(simNewSharesIssued()) }}</span\n                  >\n                </div>\n                <div class=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 text-xs\">\n                  <span>Capital Invested:</span>\n                  <span class=\"text-foreground font-mono font-semibold tabular-nums\">\n                    {{ formatCurrency(simInvestment()) }}</span\n                  >\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Insight Banner Callout -->\n          <div class=\"border-border/60 bg-muted/40 flex items-start gap-3 rounded-lg border p-3.5 text-xs\">\n            <lucide-icon [img]=\"Info\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n            <div class=\"text-muted-foreground space-y-1\">\n              <span class=\"text-foreground font-semibold\">Round Dynamics Takeaway: </span>\n              Raising\n              <span class=\"text-foreground font-mono font-medium\">{{ formatCurrency(simInvestment()) }}</span> at a\n              <span class=\"text-foreground font-mono font-medium\">{{ formatCurrency(simPreMoney()) }}</span> pre-money\n              valuation generates a\n              <span class=\"text-foreground font-mono font-medium\">&#36;{{ simNewSharePrice().toFixed(2) }}</span> share\n              price. Although existing founders experience\n              <span class=\"text-foreground font-mono font-medium\">{{ (60 - simFounderPct()).toFixed(1) }}%</span>\n              dilution, their net equity value increases by\n              <span class=\"text-success font-mono font-bold\">+{{ formatCurrency(simFounderValue() - 27000000) }}</span>\n              (+{{ founderAccretionPct().toFixed(1) }}%) due to the valuation step-up.\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiCapTableOwnershipSummaryComponent {\n  protected readonly Award = Award\n  protected readonly Building2 = Building2\n  protected readonly Calculator = Calculator\n  protected readonly Check = Check\n  protected readonly Coins = Coins\n  protected readonly FileSpreadsheet = FileSpreadsheet\n  protected readonly Info = Info\n  protected readonly Layers = Layers\n  protected readonly Plus = Plus\n  protected readonly RefreshCw = RefreshCw\n  protected readonly Search = Search\n  protected readonly ShieldCheck = ShieldCheck\n  protected readonly TrendingUp = TrendingUp\n  protected readonly Users = Users\n  protected readonly X = X\n\n  // Current Cap Table Static Baseline\n  protected readonly currentSharePrice = 4.5\n  protected readonly currentTotalShares = 10000000\n  protected readonly currentValuation = 45000000\n\n  @Input() set initialInvestment(v: number | undefined) {\n    if (v !== undefined) this.simInvestment.set(v)\n  }\n  @Input() set initialPreMoney(v: number | undefined) {\n    if (v !== undefined) this.simPreMoney.set(v)\n  }\n  @Input('class') className?: string\n\n  readonly shareholders = signal<Shareholder[]>(INITIAL_SHAREHOLDERS.map((s) => ({ ...s })))\n\n  // Filter and Search State\n  readonly searchQuery = signal('')\n  readonly selectedClassFilter = signal<CapTableClassFilter>('All')\n\n  readonly filteredShareholders = computed(() => {\n    const filter = this.selectedClassFilter()\n    const q = this.searchQuery().trim().toLowerCase()\n    return this.shareholders().filter((sh) => {\n      if (filter !== 'All' && sh.shareClass !== filter) return false\n      if (q) {\n        return (\n          sh.name.toLowerCase().includes(q) ||\n          sh.role.toLowerCase().includes(q) ||\n          sh.shareClass.toLowerCase().includes(q)\n        )\n      }\n      return true\n    })\n  })\n\n  // Export feedback state\n  readonly isExporting = signal(false)\n  readonly exportSuccess = signal(false)\n  private exportTimer: ReturnType<typeof setTimeout> | undefined\n  private exportResetTimer: ReturnType<typeof setTimeout> | undefined\n\n  // Issue Grant Modal State\n  readonly isGrantDialogOpen = signal(false)\n  readonly grantSuccessMessage = signal(false)\n  readonly grantName = signal('')\n  readonly grantRole = signal('')\n  readonly grantShares = signal(50000)\n  readonly grantClass = signal<GrantEquityClass>('ISO Options')\n  readonly grantVesting = signal('4-Year Vesting · 1-Year Cliff (25%), then Monthly')\n  private grantTimer: ReturnType<typeof setTimeout> | undefined\n\n  // Round Modeling Simulator State\n  readonly simPreMoney = signal(50000000)\n  readonly simInvestment = signal(10000000)\n\n  // Dynamic Round Modeling Calculations\n  readonly simPostMoney = computed(() => this.simPreMoney() + this.simInvestment())\n  readonly simNewSharePrice = computed(() => {\n    if (this.currentTotalShares <= 0) return 0\n    return this.simPreMoney() / this.currentTotalShares\n  })\n  readonly simNewSharesIssued = computed(() => {\n    if (this.simNewSharePrice() <= 0) return 0\n    return Math.round(this.simInvestment() / this.simNewSharePrice())\n  })\n  readonly simTotalPostShares = computed(() => this.currentTotalShares + this.simNewSharesIssued())\n\n  private readonly simFounderShares = 6000000\n  private readonly simSeedShares = 2500000\n  private readonly simOptionShares = 1500000\n\n  readonly simFounderPct = computed(() => (this.simFounderShares / this.simTotalPostShares()) * 100)\n  readonly simSeedPct = computed(() => (this.simSeedShares / this.simTotalPostShares()) * 100)\n  readonly simOptionPct = computed(() => (this.simOptionShares / this.simTotalPostShares()) * 100)\n  readonly simNewInvestorPct = computed(() => (this.simNewSharesIssued() / this.simTotalPostShares()) * 100)\n\n  readonly simFounderValue = computed(() => (this.simFounderPct() / 100) * this.simPostMoney())\n  readonly simSeedValue = computed(() => (this.simSeedPct() / 100) * this.simPostMoney())\n  readonly simOptionValue = computed(() => (this.simOptionPct() / 100) * this.simPostMoney())\n\n  readonly stepUpPct = computed(\n    () => ((this.simNewSharePrice() - this.currentSharePrice) / this.currentSharePrice) * 100,\n  )\n  readonly founderAccretionPct = computed(() => ((this.simFounderValue() - 27000000) / 27000000) * 100)\n\n  readonly exportButtonLabel = computed(() =>\n    this.exportSuccess() ? 'Cap Table Exported!' : this.isExporting() ? 'Exporting...' : 'Export Cap Table (Excel)',\n  )\n\n  get rootClass(): string {\n    return cn('mx-auto w-full max-w-6xl space-y-6', this.className)\n  }\n\n  filterButtonClass(value: CapTableClassFilter): string {\n    return cn(\n      'rounded-md px-2.5 py-1 text-xs font-medium transition-colors',\n      this.selectedClassFilter() === value\n        ? 'bg-background text-foreground shadow-xs'\n        : 'text-muted-foreground hover:text-foreground',\n    )\n  }\n\n  avatarFallbackClass(shareClass: CapTableShareClass): string {\n    return cn(\n      'text-xs font-bold',\n      shareClass === 'Common Stock'\n        ? 'bg-success/10 text-success'\n        : shareClass === 'Series Seed Preferred'\n          ? 'bg-chart-2/10 text-chart-2'\n          : 'bg-info/10 text-info',\n    )\n  }\n\n  vestingPct(sh: Shareholder): number {\n    if (sh.isVestedComplete) return 100\n    return (sh.vestedMonths / sh.totalMonths) * 100\n  }\n\n  vestingLabel(sh: Shareholder): string {\n    if (sh.isVestedComplete) return '100% Vested'\n    if (sh.vestedMonths > 0) return `${Math.round((sh.vestedMonths / sh.totalMonths) * 100)}% Vested`\n    return 'Unallocated'\n  }\n\n  vestingBarClass(sh: Shareholder): string {\n    return cn(\n      'h-full transition-[width,background-color] duration-300',\n      sh.isVestedComplete ? 'bg-primary' : sh.vestedMonths > 0 ? 'bg-success' : 'bg-info/40',\n    )\n  }\n\n  numberOr(raw: string, fallback: number): number {\n    const n = Number(raw)\n    return Number.isFinite(n) ? n : fallback\n  }\n\n  formatCurrency(val: number): string {\n    return val.toLocaleString('en-US', { style: 'currency', currency: 'USD' })\n  }\n\n  formatNumber(val: number): string {\n    return val.toLocaleString('en-US')\n  }\n\n  formatPercent(val: number, decimals = 1): string {\n    return `${val.toFixed(decimals)}%`\n  }\n\n  handleExportCapTable(): void {\n    this.isExporting.set(true)\n    clearTimeout(this.exportTimer)\n    clearTimeout(this.exportResetTimer)\n    this.exportTimer = setTimeout(() => {\n      this.isExporting.set(false)\n      this.exportSuccess.set(true)\n      this.exportResetTimer = setTimeout(() => this.exportSuccess.set(false), 2500)\n    }, 1000)\n  }\n\n  handleCreateGrant(event?: Event): void {\n    event?.preventDefault()\n    if (!this.grantName().trim() || this.grantShares() <= 0) return\n    this.grantSuccessMessage.set(true)\n    clearTimeout(this.grantTimer)\n    this.grantTimer = setTimeout(() => {\n      this.grantSuccessMessage.set(false)\n      this.isGrantDialogOpen.set(false)\n      this.grantName.set('')\n      this.grantRole.set('')\n      this.grantShares.set(50000)\n    }, 1500)\n  }\n\n  setPresetScenario(preMoney: number, investment: number): void {\n    this.simPreMoney.set(preMoney)\n    this.simInvestment.set(investment)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/cap-table-ownership-summary/cap-table-ownership-summary.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/cap-table-ownership-summary/index.ts",
      "content": "export {\n  UiCapTableOwnershipSummaryComponent,\n  type CapTableClassFilter,\n  type CapTableShareClass,\n  type GrantEquityClass,\n  type Shareholder,\n} from './cap-table-ownership-summary.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/cap-table-ownership-summary/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/avatar.json",
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json",
    "https://uipkge.dev/r/angular/input.json",
    "https://uipkge.dev/r/angular/table.json"
  ],
  "description": "Carta-style company equity capitalization table, share class breakdown, fully diluted ownership percentages, shareholder vesting progress, and interactive round dilution modeling simulator.",
  "categories": [
    "finance",
    "app",
    "dashboard"
  ]
}