{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "compensation-band-benchmarking",
  "title": "Compensation Band Benchmarking",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-vue/blocks/compensation-band-benchmarking/CompensationBandBenchmarking.vue",
      "content": "<script setup lang=\"ts\">\nimport { computed, ref, type HTMLAttributes } from 'vue'\nimport {\n  Award,\n  BadgeCheck,\n  Building2,\n  CheckCircle2,\n  Coins,\n  DollarSign,\n  Download,\n  Layers,\n  Scale,\n  ShieldCheck,\n  TrendingUp,\n  Users,\n} from 'lucide-vue-next'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Progress } from '@/components/ui/progress'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Separator } from '@/components/ui/separator'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\ninterface Props {\n  class?: HTMLAttributes['class']\n  initialRole?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  initialRole: 'ic5',\n})\n\ninterface LevelData {\n  id: string\n  code: string\n  title: string\n  roleTitle: string\n  experience: string\n  scope: string\n  headcount: number\n  p25Base: number\n  p50Base: number\n  p75Base: number\n  p90Base: number\n  equityMin: number\n  equityMax: number\n  equityP50: number\n  totalMin: number\n  totalMax: number\n  totalP50: number\n  compaRatio: number\n  marketP50Base: number\n  marketP50Equity: number\n  marketP50Total: number\n  equityPercent: number\n  badgeVariant: 'default' | 'secondary' | 'outline' | 'info'\n}\n\nconst levels: LevelData[] = [\n  {\n    id: 'ic3',\n    code: 'IC3',\n    title: 'Software Engineer',\n    roleTitle: 'Software Engineer (IC3)',\n    experience: '1–3 yrs experience',\n    scope: 'Feature delivery, component unit tests, and production code execution.',\n    headcount: 28,\n    p25Base: 135000,\n    p50Base: 150000,\n    p75Base: 168000,\n    p90Base: 185000,\n    equityMin: 35000,\n    equityMax: 60000,\n    equityP50: 45000,\n    totalMin: 170000,\n    totalMax: 245000,\n    totalP50: 195000,\n    compaRatio: 101.2,\n    marketP50Base: 148000,\n    marketP50Equity: 44000,\n    marketP50Total: 192000,\n    equityPercent: 23.1,\n    badgeVariant: 'outline',\n  },\n  {\n    id: 'ic4',\n    code: 'IC4',\n    title: 'Senior Engineer',\n    roleTitle: 'Senior Software Engineer (IC4)',\n    experience: '3–6 yrs experience',\n    scope: 'Autonomous service ownership, technical RFC design, and mentoring.',\n    headcount: 42,\n    p25Base: 170000,\n    p50Base: 190000,\n    p75Base: 210000,\n    p90Base: 230000,\n    equityMin: 70000,\n    equityMax: 110000,\n    equityP50: 90000,\n    totalMin: 240000,\n    totalMax: 340000,\n    totalP50: 280000,\n    compaRatio: 101.8,\n    marketP50Base: 187000,\n    marketP50Equity: 88000,\n    marketP50Total: 275000,\n    equityPercent: 32.1,\n    badgeVariant: 'secondary',\n  },\n  {\n    id: 'ic5',\n    code: 'IC5',\n    title: 'Staff Engineer',\n    roleTitle: 'Staff Software Engineer (IC5)',\n    experience: '6–10 yrs experience',\n    scope: 'Cross-team architecture, platform reliability, and engineering standards.',\n    headcount: 18,\n    p25Base: 205000,\n    p50Base: 225000,\n    p75Base: 250000,\n    p90Base: 275000,\n    equityMin: 120000,\n    equityMax: 180000,\n    equityP50: 140000,\n    totalMin: 325000,\n    totalMax: 455000,\n    totalP50: 365000,\n    compaRatio: 102.4,\n    marketP50Base: 220000,\n    marketP50Equity: 136000,\n    marketP50Total: 356000,\n    equityPercent: 38.4,\n    badgeVariant: 'default',\n  },\n  {\n    id: 'ic6',\n    code: 'IC6',\n    title: 'Senior Staff Engineer',\n    roleTitle: 'Senior Staff Software Engineer (IC6)',\n    experience: '10–14 yrs experience',\n    scope: 'Org-wide strategic tech vision, high-scale resilience, and executive partnership.',\n    headcount: 9,\n    p25Base: 240000,\n    p50Base: 265000,\n    p75Base: 295000,\n    p90Base: 330000,\n    equityMin: 180000,\n    equityMax: 280000,\n    equityP50: 225000,\n    totalMin: 420000,\n    totalMax: 610000,\n    totalP50: 490000,\n    compaRatio: 103.1,\n    marketP50Base: 258000,\n    marketP50Equity: 218000,\n    marketP50Total: 476000,\n    equityPercent: 45.9,\n    badgeVariant: 'info',\n  },\n  {\n    id: 'ic7',\n    code: 'IC7',\n    title: 'Principal Engineer',\n    roleTitle: 'Principal Software Engineer (IC7)',\n    experience: '14+ yrs experience',\n    scope: 'Company-level technology roadmap, deep R&D, and industry IP leadership.',\n    headcount: 4,\n    p25Base: 280000,\n    p50Base: 315000,\n    p75Base: 355000,\n    p90Base: 400000,\n    equityMin: 280000,\n    equityMax: 450000,\n    equityP50: 360000,\n    totalMin: 560000,\n    totalMax: 850000,\n    totalP50: 675000,\n    compaRatio: 104.0,\n    marketP50Base: 305000,\n    marketP50Equity: 345000,\n    marketP50Total: 650000,\n    equityPercent: 53.3,\n    badgeVariant: 'default',\n  },\n]\n\nconst selectedRoleId = ref<string>(props.initialRole)\n\nconst activeLevel = computed(() => {\n  return levels.find((l) => l.id === selectedRoleId.value) || levels[2]\n})\n\n// Scale configuration for multi-bar percentiles ($100k to $420k)\nconst SCALE_MIN = 100000\nconst SCALE_MAX = 420000\nconst SCALE_RANGE = SCALE_MAX - SCALE_MIN\n\nfunction getPercent(val: number): number {\n  return Math.max(0, Math.min(100, ((val - SCALE_MIN) / SCALE_RANGE) * 100))\n}\n\nfunction fmtCurrency(val: number): string {\n  return new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD',\n    maximumFractionDigits: 0,\n  }).format(val)\n}\n\nfunction fmtK(val: number): string {\n  return `$${Math.round(val / 1000)}k`\n}\n\nfunction exportCsv() {\n  const headers = [\n    'Level Code',\n    'Level Title',\n    'Experience Scope',\n    'Headcount',\n    'P25 Base Salary',\n    'P50 Base Salary (Median)',\n    'P75 Base Salary',\n    'P90 Base Salary',\n    'Equity Range Min',\n    'Equity Range Max',\n    'Median Annual Equity',\n    'Total Comp Min',\n    'Total Comp Max',\n    'Target Total Comp (P50)',\n    'Compa-Ratio (%)',\n  ]\n\n  const rows = levels.map((l) => [\n    l.code,\n    `\"${l.title}\"`,\n    `\"${l.experience}\"`,\n    l.headcount,\n    l.p25Base,\n    l.p50Base,\n    l.p75Base,\n    l.p90Base,\n    l.equityMin,\n    l.equityMax,\n    l.equityP50,\n    l.totalMin,\n    l.totalMax,\n    l.totalP50,\n    l.compaRatio,\n  ])\n\n  const csvContent = 'data:text/csv;charset=utf-8,' + [headers.join(','), ...rows.map((e) => e.join(','))].join('\\n')\n  const encodedUri = encodeURI(csvContent)\n  const link = document.createElement('a')\n  link.setAttribute('href', encodedUri)\n  link.setAttribute('download', 'engineering-compensation-bands-q3-2026.csv')\n  document.body.appendChild(link)\n  link.click()\n  document.body.removeChild(link)\n}\n</script>\n\n<template>\n  <div data-slot=\"compensation-band-benchmarking\" :class=\"cn('w-full space-y-6', props.class)\">\n    <!-- Main Header Card -->\n    <Card class=\"border-border bg-card shadow-xs\">\n      <CardContent class=\"p-6\">\n        <div class=\"flex flex-col gap-6 lg:flex-row lg:items-center lg:justify-between\">\n          <!-- Title, Source Badge & Subtitle -->\n          <div class=\"space-y-1.5\">\n            <div class=\"flex flex-wrap items-center gap-2.5\">\n              <h2 class=\"text-foreground text-xl font-bold tracking-tight sm:text-2xl\">\n                Engineering Compensation Bands & Market Benchmarks\n              </h2>\n              <Badge wrap variant=\"success\" class=\"gap-1 font-semibold shadow-xs\">\n                <BadgeCheck class=\"text-success size-3.5\" />\n                <span>Q3 2026 Live Bands</span>\n              </Badge>\n            </div>\n            <p class=\"text-muted-foreground text-sm\">\n              Pave Market Data · SF Bay Area Tier 1 · Q3 2026 (Refreshed Aug 2026 · Sample n = 42,400 Tech ICs)\n            </p>\n            <div class=\"flex flex-wrap items-center gap-3 pt-1\">\n              <Badge wrap variant=\"outline\" class=\"gap-1.5 text-xs font-normal\">\n                <Building2 class=\"text-primary size-3.5\" />\n                <span>Benchmark Market: San Francisco Bay Area (Tier 1)</span>\n              </Badge>\n              <Separator orientation=\"vertical\" class=\"hidden h-3.5 sm:block\" />\n              <span class=\"text-muted-foreground text-xs\">\n                Currency: <strong class=\"text-foreground font-medium\">USD ($) · Annualized</strong>\n              </span>\n              <Separator orientation=\"vertical\" class=\"hidden h-3.5 sm:block\" />\n              <span class=\"text-muted-foreground text-xs\">\n                Total Engineers Tracked: <strong class=\"text-foreground font-medium tabular-nums\">101 Headcount</strong>\n              </span>\n            </div>\n          </div>\n\n          <!-- Controls: Role Selector & Export CSV Button -->\n          <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n            <div class=\"w-full sm:w-64\">\n              <label for=\"role-select\" class=\"text-muted-foreground mb-1 block text-xs font-medium\">\n                Focus Benchmark Level:\n              </label>\n              <Select v-model=\"selectedRoleId\">\n                <SelectTrigger id=\"role-select\" class=\"bg-background h-9 w-full text-xs font-medium\">\n                  <SelectValue placeholder=\"Select engineering role\" />\n                </SelectTrigger>\n                <SelectContent>\n                  <SelectItem v-for=\"lvl in levels\" :key=\"lvl.id\" :value=\"lvl.id\" class=\"text-xs\">\n                    {{ lvl.roleTitle }}\n                  </SelectItem>\n                </SelectContent>\n              </Select>\n            </div>\n\n            <div class=\"sm:self-end\">\n              <Button\n                aria-label=\"Download attachment\"\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"h-9 w-full gap-2 shadow-xs sm:w-auto\"\n                @click=\"exportCsv\"\n              >\n                <Download class=\"size-4\" />\n                <span>Export Bands CSV</span>\n              </Button>\n            </div>\n          </div>\n        </div>\n      </CardContent>\n    </Card>\n\n    <!-- 4 Compensation Summary Cards -->\n    <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n      <!-- 1. Median Base Salary -->\n      <Card class=\"border-border bg-card flex flex-col justify-between shadow-xs\">\n        <CardHeader class=\"pb-2\">\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div class=\"flex min-w-0 items-center gap-2\">\n              <div\n                class=\"bg-muted border-border flex size-8 shrink-0 items-center justify-center rounded-lg border shadow-xs\"\n                aria-hidden=\"true\"\n              >\n                <DollarSign class=\"text-primary size-4\" />\n              </div>\n              <CardTitle class=\"text-muted-foreground truncate text-xs font-medium\"> Median Base Salary </CardTitle>\n            </div>\n            <Badge wrap variant=\"outline\" class=\"shrink-0 text-xs font-medium tabular-nums\">\n              {{ activeLevel.code }} · P50 Market\n            </Badge>\n          </div>\n        </CardHeader>\n        <CardContent class=\"space-y-3 pt-1\">\n          <div>\n            <div class=\"mb-1 flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5\">\n              <div class=\"flex items-baseline gap-1.5\">\n                <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                  {{ fmtCurrency(activeLevel.p50Base) }}\n                </span>\n                <span class=\"text-muted-foreground text-xs font-normal\">/ yr</span>\n              </div>\n              <div class=\"text-success flex items-center gap-1 text-xs font-medium\">\n                <TrendingUp class=\"size-3\" />\n                <span class=\"tabular-nums\">+2.3% Pave P50</span>\n              </div>\n            </div>\n            <Progress :model-value=\"getPercent(activeLevel.p50Base)\" class=\"h-1.5 w-full\" />\n          </div>\n\n          <div class=\"border-border/60 border-t pt-2.5 text-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span>Band Range (P25–P90):</span>\n              <span class=\"text-foreground font-semibold tabular-nums\">\n                {{ fmtK(activeLevel.p25Base) }} – {{ fmtK(activeLevel.p90Base) }}\n              </span>\n            </div>\n            <p class=\"text-muted-foreground mt-1 line-clamp-1 text-xs\">\n              Market baseline for {{ activeLevel.title }} with {{ activeLevel.experience }}.\n            </p>\n          </div>\n        </CardContent>\n      </Card>\n\n      <!-- 2. Median Annual Equity / RSU -->\n      <Card class=\"border-border bg-card flex flex-col justify-between shadow-xs\">\n        <CardHeader class=\"pb-2\">\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div class=\"flex min-w-0 items-center gap-2\">\n              <div\n                class=\"bg-muted border-border flex size-8 shrink-0 items-center justify-center rounded-lg border shadow-xs\"\n                aria-hidden=\"true\"\n              >\n                <Coins class=\"text-info size-4\" />\n              </div>\n              <CardTitle class=\"text-muted-foreground truncate text-xs font-medium\">\n                Median Annual Equity / RSU\n              </CardTitle>\n            </div>\n            <Badge wrap variant=\"secondary\" class=\"shrink-0 text-xs font-medium tabular-nums\">\n              {{ activeLevel.equityPercent }}% Total Comp\n            </Badge>\n          </div>\n        </CardHeader>\n        <CardContent class=\"space-y-3 pt-1\">\n          <div>\n            <div class=\"mb-1 flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5\">\n              <div class=\"flex items-baseline gap-1.5\">\n                <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                  {{ fmtCurrency(activeLevel.equityP50) }}\n                </span>\n                <span class=\"text-muted-foreground text-xs font-normal\">/ yr</span>\n              </div>\n              <div class=\"text-muted-foreground flex items-center gap-1 text-xs font-medium\">\n                <span class=\"tabular-nums\">4-Yr Vesting</span>\n              </div>\n            </div>\n            <Progress\n              :model-value=\"activeLevel.equityPercent\"\n              class=\"[&_[data-slot=progress-indicator]]:bg-info h-1.5 w-full\"\n            />\n          </div>\n\n          <div class=\"border-border/60 border-t pt-2.5 text-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span>Annual Grant Band:</span>\n              <span class=\"text-foreground font-semibold tabular-nums\">\n                {{ fmtK(activeLevel.equityMin) }} – {{ fmtK(activeLevel.equityMax) }} / yr\n              </span>\n            </div>\n            <p class=\"text-muted-foreground mt-1 line-clamp-1 text-xs\">\n              Liquid RSU allocation (4-year vest, 1-year standard cliff).\n            </p>\n          </div>\n        </CardContent>\n      </Card>\n\n      <!-- 3. Target Total Compensation -->\n      <Card class=\"border-border bg-card flex flex-col justify-between shadow-xs\">\n        <CardHeader class=\"pb-2\">\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div class=\"flex min-w-0 items-center gap-2\">\n              <div\n                class=\"bg-muted border-border flex size-8 shrink-0 items-center justify-center rounded-lg border shadow-xs\"\n                aria-hidden=\"true\"\n              >\n                <Award class=\"text-chart-1 size-4\" />\n              </div>\n              <CardTitle class=\"text-muted-foreground truncate text-xs font-medium\">\n                Target Total Compensation\n              </CardTitle>\n            </div>\n            <Badge wrap variant=\"outline\" class=\"shrink-0 text-xs font-medium\"> Base + Equity </Badge>\n          </div>\n        </CardHeader>\n        <CardContent class=\"space-y-3 pt-1\">\n          <div>\n            <div class=\"mb-1 flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5\">\n              <div class=\"flex items-baseline gap-1.5\">\n                <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                  {{ fmtCurrency(activeLevel.totalP50) }}\n                </span>\n                <span class=\"text-muted-foreground text-xs font-normal\">/ yr</span>\n              </div>\n              <div class=\"text-success flex items-center gap-1 text-xs font-medium\">\n                <TrendingUp class=\"size-3\" />\n                <span class=\"tabular-nums\">+2.5% vs Mkt</span>\n              </div>\n            </div>\n            <Progress\n              :model-value=\"getPercent(activeLevel.totalP50)\"\n              class=\"[&_[data-slot=progress-indicator]]:bg-chart-1 h-1.5 w-full\"\n            />\n          </div>\n\n          <div class=\"border-border/60 border-t pt-2.5 text-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span>Target Total Comp Range:</span>\n              <span class=\"text-foreground font-semibold tabular-nums\">\n                {{ fmtK(activeLevel.totalMin) }} – {{ fmtK(activeLevel.totalMax) }}\n              </span>\n            </div>\n            <p class=\"text-muted-foreground mt-1 line-clamp-1 text-xs\">\n              Annualized total compensation at P50 target execution.\n            </p>\n          </div>\n        </CardContent>\n      </Card>\n\n      <!-- 4. Internal Compa-Ratio -->\n      <Card class=\"border-border bg-card flex flex-col justify-between shadow-xs\">\n        <CardHeader class=\"pb-2\">\n          <div class=\"flex flex-wrap items-center justify-between gap-2\">\n            <div class=\"flex min-w-0 items-center gap-2\">\n              <div\n                class=\"bg-muted border-border flex size-8 shrink-0 items-center justify-center rounded-lg border shadow-xs\"\n                aria-hidden=\"true\"\n              >\n                <Scale class=\"text-success size-4\" />\n              </div>\n              <CardTitle class=\"text-muted-foreground truncate text-xs font-medium\"> Internal Compa-Ratio </CardTitle>\n            </div>\n            <Badge wrap variant=\"success\" class=\"shrink-0 text-xs font-semibold\"> Market Competitive </Badge>\n          </div>\n        </CardHeader>\n        <CardContent class=\"space-y-3 pt-1\">\n          <div>\n            <div class=\"mb-1 flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5\">\n              <div class=\"flex items-baseline gap-1.5\">\n                <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                  {{ activeLevel.compaRatio }}%\n                </span>\n                <span class=\"text-muted-foreground text-xs font-normal\">Compa</span>\n              </div>\n              <div class=\"text-success flex items-center gap-1 text-xs font-medium\">\n                <CheckCircle2 class=\"size-3.5\" />\n                <span>Target Corridor</span>\n              </div>\n            </div>\n            <Progress\n              :model-value=\"activeLevel.compaRatio - 50\"\n              class=\"[&_[data-slot=progress-indicator]]:bg-success h-1.5 w-full\"\n            />\n          </div>\n\n          <div class=\"border-border/60 border-t pt-2.5 text-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span>Target Standard:</span>\n              <span class=\"text-foreground font-semibold tabular-nums\">95.0% – 105.0%</span>\n            </div>\n            <p class=\"text-muted-foreground mt-1 line-clamp-1 text-xs\">\n              Pay positioning calibrated strictly inside safe competitive envelope.\n            </p>\n          </div>\n        </CardContent>\n      </Card>\n    </div>\n\n    <!-- Level Progression Compensation Matrix (Multi-bar percentile chart / table) -->\n    <Card class=\"border-border bg-card shadow-xs\">\n      <CardHeader class=\"pb-4\">\n        <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n          <div>\n            <div class=\"flex items-center gap-2\">\n              <Layers class=\"text-primary size-5\" />\n              <CardTitle class=\"text-base font-semibold\"> Level Progression Compensation Matrix </CardTitle>\n            </div>\n            <CardDescription class=\"text-xs\">\n              Multi-bar percentile bands (P25 → P50 → P75 → P90) and equity allocations across 5 engineering career\n              levels.\n            </CardDescription>\n          </div>\n          <div class=\"flex flex-wrap items-center gap-2\">\n            <Badge wrap variant=\"outline\" class=\"text-xs font-normal tabular-nums\"> Scale: $100k → $420k Base </Badge>\n            <Badge wrap variant=\"secondary\" class=\"text-xs font-medium tabular-nums\"> 5 Levels · 101 Engineers </Badge>\n          </div>\n        </div>\n      </CardHeader>\n      <CardContent class=\"space-y-4\">\n        <!-- Scale Ruler Legend for Base Salary Multi-bar -->\n        <div class=\"bg-muted/40 border-border/80 hidden rounded-lg border p-3 md:block\">\n          <div class=\"flex items-center justify-between text-xs font-medium\">\n            <span class=\"text-muted-foreground\">Base Salary Percentile Scale Guide:</span>\n            <div class=\"flex items-center gap-4 text-xs\">\n              <div class=\"flex items-center gap-1.5\">\n                <span class=\"border-primary/40 bg-primary/20 size-2.5 rounded-sm border\" />\n                <span class=\"text-muted-foreground\">P25–P90 Band Corridor</span>\n              </div>\n              <div class=\"flex items-center gap-1.5\">\n                <span class=\"bg-success ring-success/50 size-2.5 rounded-full ring-1\" />\n                <span class=\"text-foreground font-semibold\">P50 Median Market Point</span>\n              </div>\n            </div>\n          </div>\n          <div class=\"border-border/60 relative mt-2.5 h-4 border-t pt-1\">\n            <div class=\"text-muted-foreground flex justify-between text-xs tabular-nums\">\n              <span>$100k</span>\n              <span>$150k</span>\n              <span>$200k</span>\n              <span>$250k</span>\n              <span>$300k</span>\n              <span>$350k</span>\n              <span>$400k+</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- Table Container with Multi-Bar Visualizers -->\n        <div class=\"border-border overflow-hidden rounded-lg border\">\n          <div class=\"overflow-x-auto\">\n            <Table>\n              <TableHeader class=\"bg-muted/50\">\n                <TableRow>\n                  <TableHead class=\"w-48 text-xs font-medium\">Level & Role Scope</TableHead>\n                  <TableHead class=\"min-w-[280px] text-xs font-medium\">\n                    Base Salary Band (P25 → P50 → P75 → P90)\n                  </TableHead>\n                  <TableHead class=\"w-40 text-xs font-medium\">Annual RSU Grant</TableHead>\n                  <TableHead class=\"w-44 text-xs font-medium\">Target Total Comp (TTC)</TableHead>\n                  <TableHead class=\"w-36 text-right text-xs font-medium\">Headcount & Compa</TableHead>\n                </TableRow>\n              </TableHeader>\n              <TableBody>\n                <TableRow\n                  v-for=\"lvl in levels\"\n                  :key=\"lvl.id\"\n                  :class=\"\n                    cn(\n                      'cursor-pointer transition-colors',\n                      selectedRoleId === lvl.id && 'bg-primary/5 dark:bg-primary/10 font-medium',\n                    )\n                  \"\n                  @click=\"selectedRoleId = lvl.id\"\n                >\n                  <!-- Level Code & Title -->\n                  <TableCell class=\"py-4 align-top\">\n                    <div class=\"space-y-1\">\n                      <div class=\"flex items-center gap-2\">\n                        <Badge wrap :variant=\"lvl.badgeVariant\" class=\"font-bold tabular-nums\">\n                          {{ lvl.code }}\n                        </Badge>\n                        <span class=\"text-foreground text-sm font-semibold\">{{ lvl.title }}</span>\n                      </div>\n                      <p class=\"text-muted-foreground text-xs\">{{ lvl.experience }}</p>\n                      <p class=\"text-muted-foreground line-clamp-1 text-xs\">{{ lvl.scope }}</p>\n                    </div>\n                  </TableCell>\n\n                  <!-- Base Salary Band Multi-Bar Percentile Visualizer -->\n                  <TableCell class=\"py-4 align-middle\">\n                    <div class=\"space-y-2 py-1\">\n                      <!-- Visual Band Track -->\n                      <div class=\"bg-muted border-border/80 relative h-4 w-full overflow-hidden rounded-full border\">\n                        <!-- P25 to P90 Range Shading -->\n                        <div\n                          class=\"bg-primary/25 border-primary/40 absolute inset-y-0 rounded-full border\"\n                          :style=\"{\n                            left: `${getPercent(lvl.p25Base)}%`,\n                            width: `${getPercent(lvl.p90Base) - getPercent(lvl.p25Base)}%`,\n                          }\"\n                        />\n\n                        <!-- P50 to P75 Interquartile Core -->\n                        <div\n                          class=\"bg-primary/30 absolute inset-y-0\"\n                          :style=\"{\n                            left: `${getPercent(lvl.p50Base)}%`,\n                            width: `${getPercent(lvl.p75Base) - getPercent(lvl.p50Base)}%`,\n                          }\"\n                        />\n\n                        <!-- P25 Marker Line -->\n                        <div\n                          class=\"bg-foreground/40 absolute top-0 bottom-0 w-0.5\"\n                          :style=\"{ left: `${getPercent(lvl.p25Base)}%` }\"\n                          title=\"P25 Percentile\"\n                        />\n\n                        <!-- P50 Median Marker Dot -->\n                        <div\n                          class=\"border-background bg-success ring-success/40 absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 shadow-xs ring-2\"\n                          :style=\"{ left: `${getPercent(lvl.p50Base)}%` }\"\n                          title=\"P50 Median\"\n                        />\n\n                        <!-- P75 Marker Line -->\n                        <div\n                          class=\"bg-foreground/40 absolute top-0 bottom-0 w-0.5\"\n                          :style=\"{ left: `${getPercent(lvl.p75Base)}%` }\"\n                          title=\"P75 Percentile\"\n                        />\n\n                        <!-- P90 Marker Line -->\n                        <div\n                          class=\"bg-foreground/40 absolute top-0 bottom-0 w-0.5\"\n                          :style=\"{ left: `${getPercent(lvl.p90Base)}%` }\"\n                          title=\"P90 Percentile\"\n                        />\n                      </div>\n\n                      <!-- Percentile Numeric Labels -->\n                      <div class=\"text-muted-foreground flex items-center justify-between text-xs tabular-nums\">\n                        <span\n                          >P25: <strong class=\"text-foreground\">{{ fmtK(lvl.p25Base) }}</strong></span\n                        >\n                        <span class=\"text-success font-bold\"> P50: {{ fmtK(lvl.p50Base) }} </span>\n                        <span\n                          >P75: <strong class=\"text-foreground\">{{ fmtK(lvl.p75Base) }}</strong></span\n                        >\n                        <span\n                          >P90: <strong class=\"text-foreground\">{{ fmtK(lvl.p90Base) }}</strong></span\n                        >\n                      </div>\n                    </div>\n                  </TableCell>\n\n                  <!-- Annual Equity (RSU) -->\n                  <TableCell class=\"py-4 align-middle\">\n                    <div class=\"space-y-0.5\">\n                      <p class=\"text-foreground text-sm font-semibold tabular-nums\">\n                        {{ fmtK(lvl.equityMin) }} – {{ fmtK(lvl.equityMax) }}\n                      </p>\n                      <p class=\"text-muted-foreground text-xs tabular-nums\">\n                        P50: {{ fmtCurrency(lvl.equityP50) }} / yr\n                      </p>\n                    </div>\n                  </TableCell>\n\n                  <!-- Target Total Comp (TTC) -->\n                  <TableCell class=\"py-4 align-middle\">\n                    <div class=\"space-y-0.5\">\n                      <p class=\"text-foreground text-sm font-semibold tabular-nums\">\n                        {{ fmtK(lvl.totalMin) }} – {{ fmtK(lvl.totalMax) }}\n                      </p>\n                      <p class=\"text-success text-success text-xs font-medium tabular-nums\">\n                        Target P50: {{ fmtCurrency(lvl.totalP50) }}\n                      </p>\n                    </div>\n                  </TableCell>\n\n                  <!-- Headcount & Compa-Ratio -->\n                  <TableCell class=\"py-4 text-right align-middle\">\n                    <div class=\"flex flex-col items-end gap-1\">\n                      <div class=\"flex items-center gap-1.5 text-xs\">\n                        <Users class=\"text-muted-foreground size-3.5\" />\n                        <span class=\"text-foreground font-medium tabular-nums\">{{ lvl.headcount }} engineers</span>\n                      </div>\n                      <Badge wrap variant=\"success\" class=\"text-xs font-semibold tabular-nums\">\n                        {{ lvl.compaRatio }}% Compa\n                      </Badge>\n                    </div>\n                  </TableCell>\n                </TableRow>\n              </TableBody>\n            </Table>\n          </div>\n        </div>\n      </CardContent>\n    </Card>\n\n    <!-- Pay Equity & Fair Pay Audit Card -->\n    <Card class=\"border-border bg-card shadow-xs\">\n      <CardHeader class=\"pb-4\">\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              <ShieldCheck class=\"text-success size-5\" />\n              <CardTitle class=\"text-base font-semibold\"> Pay Equity & Fair Pay Audit Certification </CardTitle>\n            </div>\n            <CardDescription class=\"text-xs\">\n              Independent statistical regression analysis evaluating compensation equity across gender, demographics,\n              and level cohorts.\n            </CardDescription>\n          </div>\n          <Badge wrap variant=\"success\" class=\"gap-1.5 px-3 py-1 text-xs font-semibold shadow-xs\">\n            <Award class=\"text-success size-3.5\" />\n            <span>99.8% Parity Ratio · Certified Fair Pay</span>\n          </Badge>\n        </div>\n      </CardHeader>\n      <CardContent class=\"space-y-6\">\n        <!-- 4 Audit Sub-Metrics -->\n        <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n          <div class=\"bg-muted/40 border-border/80 space-y-1 rounded-lg border p-3.5\">\n            <div class=\"text-muted-foreground flex items-center justify-between text-xs\">\n              <span class=\"font-medium\">Gender Pay Parity</span>\n              <Badge wrap variant=\"outline\" class=\"text-success text-xs font-semibold\"> 100% Target </Badge>\n            </div>\n            <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">99.8%</p>\n            <p class=\"text-muted-foreground text-xs\">Female-to-male comp ratio for equal job level and role scope.</p>\n          </div>\n\n          <div class=\"bg-muted/40 border-border/80 space-y-1 rounded-lg border p-3.5\">\n            <div class=\"text-muted-foreground flex items-center justify-between text-xs\">\n              <span class=\"font-medium\">Demographic & URG Parity</span>\n              <Badge wrap variant=\"outline\" class=\"text-success text-xs font-semibold\"> Parity Achieved </Badge>\n            </div>\n            <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">100.1%</p>\n            <p class=\"text-muted-foreground text-xs\">Statistical comp ratio for underrepresented group cohorts.</p>\n          </div>\n\n          <div class=\"bg-muted/40 border-border/80 space-y-1 rounded-lg border p-3.5\">\n            <div class=\"text-muted-foreground flex items-center justify-between text-xs\">\n              <span class=\"font-medium\">In-Band Compliance</span>\n              <Badge wrap variant=\"outline\" class=\"text-success text-xs font-semibold\"> High Precision </Badge>\n            </div>\n            <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">97.2%</p>\n            <p class=\"text-muted-foreground text-xs\">\n              Employees placed strictly between approved P25 and P90 boundaries.\n            </p>\n          </div>\n\n          <div class=\"bg-muted/40 border-border/80 space-y-1 rounded-lg border p-3.5\">\n            <div class=\"text-muted-foreground flex items-center justify-between text-xs\">\n              <span class=\"font-medium\">Compression Gini Index</span>\n              <Badge wrap variant=\"outline\" class=\"text-success text-xs font-semibold\"> Low Risk </Badge>\n            </div>\n            <p class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums\">0.11</p>\n            <p class=\"text-muted-foreground text-xs\">\n              Healthy inter-level step progression with zero pay overlap anomalies.\n            </p>\n          </div>\n        </div>\n\n        <!-- Parity Safe-Harbor Distribution Meter -->\n        <div class=\"bg-muted/30 border-border space-y-3 rounded-lg border p-4\">\n          <div class=\"flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n            <span class=\"text-foreground text-xs font-semibold\">Equal Pay Compliance Corridor (95.0% – 105.0%)</span>\n            <span class=\"text-muted-foreground text-xs\">\n              Audit Status:\n              <strong class=\"text-success font-semibold\">Certified Safe Harbor (0.2% Variance)</strong>\n            </span>\n          </div>\n\n          <!-- Visual Corridor Meter -->\n          <div class=\"bg-muted border-border/80 relative h-3.5 w-full overflow-hidden rounded-full border\">\n            <!-- Disparity left zone (95-98%) -->\n            <div class=\"bg-warning/20 absolute inset-y-0 left-0 w-[30%]\" />\n            <!-- Certified Equal Pay Zone (98-102%) -->\n            <div class=\"bg-success/30 absolute inset-y-0 left-[30%] w-[40%]\" />\n            <!-- Premium right zone (102-105%) -->\n            <div class=\"bg-warning/20 absolute inset-y-0 right-0 w-[30%]\" />\n            <!-- Exact Company Parity Pin (99.8% -> 48% of bar) -->\n            <div\n              class=\"border-background bg-success ring-success/50 absolute top-1/2 size-3.5 -translate-y-1/2 rounded-full border-2 shadow-xs ring-2\"\n              style=\"left: 48%\"\n              title=\"Current Company Parity: 99.8%\"\n            />\n          </div>\n\n          <div class=\"text-muted-foreground flex items-center justify-between text-xs tabular-nums\">\n            <span>95.0% (Underpaid Threshold)</span>\n            <span class=\"text-success font-bold\">99.8% (Current Company Parity)</span>\n            <span>100.0% (True Parity)</span>\n            <span>105.0% (Overpaid Threshold)</span>\n          </div>\n        </div>\n\n        <!-- Certification Footer Note -->\n        <div\n          class=\"border-border/60 flex flex-col gap-3 border-t pt-4 text-xs sm:flex-row sm:items-center sm:justify-between\"\n        >\n          <div class=\"text-muted-foreground flex items-center gap-2\">\n            <CheckCircle2 class=\"text-success size-4 shrink-0\" />\n            <span>\n              Certified by Independent PayParity Institute · Audit ID:\n              <strong class=\"text-foreground font-mono font-medium\">#EQ-2026-SF-8841</strong>\n            </span>\n          </div>\n          <span class=\"text-muted-foreground\">\n            Next Audit Recertification Scheduled: <strong class=\"text-foreground\">July 2027</strong>\n          </span>\n        </div>\n      </CardContent>\n    </Card>\n  </div>\n</template>\n",
      "type": "registry:block",
      "target": "~/app/components/blocks/CompensationBandBenchmarking.vue"
    }
  ],
  "dependencies": [
    "lucide-vue-next"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/vue/badge.json",
    "https://uipkge.dev/r/vue/button.json",
    "https://uipkge.dev/r/vue/card.json",
    "https://uipkge.dev/r/vue/progress.json",
    "https://uipkge.dev/r/vue/select.json",
    "https://uipkge.dev/r/vue/separator.json",
    "https://uipkge.dev/r/vue/table.json"
  ],
  "description": "Pave/Levels.fyi style engineering salary and equity compensation band visualizer with P25, P50, P75, P90 percentile ranges, level progression matrix, compa-ratio diagnostics, and certified pay equity audit.",
  "categories": [
    "hr",
    "dashboard",
    "analytics",
    "app"
  ]
}