{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dashboard-ops",
  "type": "registry:block",
  "title": "Ops dashboard block",
  "description": "Full Foundry-style Object Explorer dashboard composed from registry primitives.",
  "dependencies": [],
  "devDependencies": [],
  "registryDependencies": [
    "app-header",
    "sidebar-rail",
    "panel",
    "stat-card",
    "status-badge",
    "data-list",
    "line-chart",
    "gantt-timeline",
    "tactical-map"
  ],
  "files": [
    {
      "path": "registry/blacksite/blocks/dashboard-ops.tsx",
      "type": "registry:block",
      "target": "components/blocks/dashboard-ops.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport {\n  Activity,\n  Braces,\n  ChevronDown,\n  Clock3,\n  Database,\n  Layers,\n  PanelRight,\n  Plus,\n  Search,\n  Shield,\n  Sparkles,\n  Table2,\n} from \"lucide-react\";\n\nimport { BarChart } from \"@/registry/blacksite/charts/bar-chart\";\nimport { GanttTimeline } from \"@/registry/blacksite/charts/gantt-timeline\";\nimport { LineChart } from \"@/registry/blacksite/charts/line-chart\";\nimport { TacticalMap } from \"@/registry/blacksite/maps/tactical-map\";\nimport { Panel } from \"@/registry/blacksite/ui/panel\";\nimport { SidebarRail } from \"@/registry/blacksite/ui/sidebar-rail\";\nimport { StatusBadge } from \"@/registry/blacksite/ui/status-badge\";\n\nimport {\n  alertRows,\n  lineageNodes,\n  mapMarkers,\n  mapZones,\n  navFooter,\n  navItems,\n  objectTypeCountClass,\n  objectTypes,\n  riskDistribution,\n  savedViews,\n  throughputData,\n  timelineTasks,\n} from \"./dashboard-ops-data\";\n\nexport interface DashboardOpsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nfunction DashboardOps({ className, ...props }: DashboardOpsProps) {\n  const [activeNav, setActiveNav] = React.useState(\"home\");\n  const [selectedAlert, setSelectedAlert] = React.useState(alertRows[0]);\n\n  const lineChartSeries = React.useMemo(\n    () => [\n      { key: \"inbound\", label: \"Inbound\", color: \"var(--color-chart-1)\" },\n      { key: \"delayed\", label: \"Delayed\", color: \"var(--color-warning)\" },\n    ],\n    [],\n  );\n\n  const barChartSeries = React.useMemo(\n    () => [\n      { key: \"open\", label: \"Open\", color: \"var(--color-danger)\", stackId: \"risk\" },\n      { key: \"actioned\", label: \"Actioned\", color: \"var(--color-info)\", stackId: \"risk\" },\n    ],\n    [],\n  );\n\n  const lineChartThresholds = React.useMemo(\n    () => [{ value: 18, label: \"Delay threshold\", tone: \"danger\" as const }],\n    [],\n  );\n\n  return (\n    <div\n      className={[\"bg-background text-foreground min-h-svh lg:h-svh lg:overflow-hidden\", className]\n        .filter(Boolean)\n        .join(\" \")}\n      {...props}\n    >\n      <div className=\"flex min-h-svh flex-col lg:h-svh\">\n        <TopBar />\n\n        <div className=\"flex min-h-0 flex-1 flex-col lg:flex-row\">\n          <div className=\"hidden lg:block\">\n            <SidebarRail\n              items={navItems}\n              footerItems={navFooter}\n              activeId={activeNav}\n              onActiveChange={setActiveNav}\n            />\n          </div>\n\n          <aside className=\"border-border bg-background-elevated/70 border-b lg:flex lg:w-64 lg:shrink-0 lg:flex-col lg:border-r lg:border-b-0\">\n            <OntologyExplorer />\n          </aside>\n\n          <main className=\"grid min-h-0 flex-1 gap-2 p-2 lg:grid-cols-[minmax(0,1fr)_320px] lg:grid-rows-[auto_minmax(0,1fr)] lg:overflow-hidden\">\n            <WorkspaceToolbar />\n\n            <section className=\"grid min-h-0 gap-2 lg:grid-cols-12 lg:grid-rows-[minmax(0,1fr)_260px] lg:overflow-hidden\">\n              <Panel\n                className=\"min-h-[420px] lg:col-span-8 lg:min-h-0\"\n                title=\"Map\"\n                subtitle=\"Common operating picture\"\n                status=\"active\"\n                actions={<MapActions />}\n                bleed\n              >\n                <div className=\"flex h-full min-h-0 flex-col\">\n                  <div className=\"border-border bg-background-elevated/50 flex flex-wrap items-center gap-1.5 border-b px-2 py-1.5\">\n                    {[\"Select\", \"Search around\", \"Draw\", \"Measure\", \"Annotate\"].map((tool) => (\n                      <button\n                        key={tool}\n                        type=\"button\"\n                        className=\"border-border bg-background text-mono text-foreground-muted hover:border-border-strong hover:text-foreground rounded-sm border px-2 py-1 text-[10px] tracking-[0.08em] uppercase\"\n                      >\n                        {tool}\n                      </button>\n                    ))}\n                  </div>\n                  <div className=\"min-h-[320px] flex-1 p-2 lg:min-h-0\">\n                    <TacticalMap\n                      className=\"h-full rounded-sm\"\n                      grid=\"fine\"\n                      markers={mapMarkers}\n                      zones={mapZones}\n                      aspectRatio={null}\n                      caption=\"Live ontology objects · 18 selected\"\n                    />\n                  </div>\n                </div>\n              </Panel>\n\n              <Panel\n                className=\"lg:col-span-4\"\n                title=\"Object Set\"\n                subtitle=\"Preview\"\n                actions={\n                  <StatusBadge status={selectedAlert.status}>{selectedAlert.id}</StatusBadge>\n                }\n              >\n                <SelectionPreview alert={selectedAlert} />\n              </Panel>\n\n              <Panel\n                className=\"lg:col-span-7\"\n                title=\"Results\"\n                subtitle=\"Flight alerts\"\n                actions={\n                  <span className=\"text-mono text-foreground-subtle text-[10px] tracking-[0.08em] uppercase\">\n                    4 of 184\n                  </span>\n                }\n                bleed\n              >\n                <AlertTable selectedId={selectedAlert.id} onSelect={setSelectedAlert} />\n              </Panel>\n\n              <Panel\n                className=\"lg:col-span-5\"\n                title=\"Linked Properties\"\n                subtitle=\"Aggregations\"\n                bleed\n              >\n                <div className=\"grid h-full min-h-[240px] gap-2 p-2 md:grid-cols-2 lg:min-h-0\">\n                  <LineChart\n                    data={throughputData}\n                    xKey=\"x\"\n                    series={lineChartSeries}\n                    thresholds={lineChartThresholds}\n                    height={220}\n                  />\n                  <BarChart data={riskDistribution} xKey=\"x\" series={barChartSeries} height={220} />\n                </div>\n              </Panel>\n            </section>\n\n            <aside className=\"grid min-h-0 gap-2 lg:row-span-2 lg:overflow-hidden\">\n              <Panel title=\"AIP Assist\" subtitle=\"Action context\" status=\"new\">\n                <AipPanel alert={selectedAlert} />\n              </Panel>\n              <Panel title=\"Lineage\" subtitle=\"Object pipeline\" bleed>\n                <LineagePanel />\n              </Panel>\n              <Panel title=\"Schedule\" subtitle=\"Execution window\" bleed>\n                <div className=\"p-2\">\n                  <GanttTimeline\n                    columns={[\"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"]}\n                    tasks={timelineTasks}\n                    nowAt={4.35}\n                    rowHeight={26}\n                    labelWidth={136}\n                  />\n                </div>\n              </Panel>\n            </aside>\n          </main>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nconst TopBar = React.memo(function TopBar() {\n  return (\n    <header className=\"border-border bg-background-elevated flex h-auto shrink-0 flex-col border-b lg:h-11 lg:flex-row lg:items-center\">\n      <div className=\"flex h-11 items-center gap-2 px-3\">\n        <div className=\"border-primary/40 bg-primary/15 text-mono text-primary grid size-6 place-items-center rounded-sm border text-[10px] font-semibold\">\n          B\n        </div>\n        <div className=\"min-w-0\">\n          <div className=\"text-mono text-foreground text-[11px] tracking-[0.12em] uppercase\">\n            Foundry\n          </div>\n          <div className=\"text-foreground-subtle text-[11px] leading-none\">\n            Air operations workspace\n          </div>\n        </div>\n      </div>\n      <div className=\"border-border flex min-w-0 flex-1 items-center gap-2 border-t px-3 py-2 lg:border-t-0 lg:border-l lg:py-0\">\n        <div className=\"border-border bg-background flex h-7 min-w-0 flex-1 items-center gap-2 rounded-sm border px-2\">\n          <Search className=\"text-foreground-subtle size-3.5\" />\n          <span className=\"text-foreground-muted truncate text-sm\">\n            Search ontology objects, saved explorations, actions...\n          </span>\n          <kbd className=\"border-border bg-background-elevated text-mono text-foreground-subtle hidden rounded-[2px] border px-1 text-[10px] sm:inline\">\n            ⌘K\n          </kbd>\n        </div>\n        <button\n          type=\"button\"\n          className=\"border-border text-mono text-foreground-muted hover:border-border-strong hover:text-foreground hidden h-7 items-center gap-1.5 rounded-sm border px-2 text-[10px] tracking-[0.08em] uppercase sm:inline-flex\"\n        >\n          Branch: prod\n          <ChevronDown className=\"size-3\" />\n        </button>\n        <button\n          type=\"button\"\n          className=\"border-primary/50 bg-primary/10 text-mono text-primary hover:bg-primary/15 inline-flex h-7 items-center gap-1.5 rounded-sm border px-2 text-[10px] tracking-[0.08em] uppercase\"\n        >\n          <Plus className=\"size-3\" />\n          Action\n        </button>\n      </div>\n    </header>\n  );\n});\n\nconst OntologyExplorer = React.memo(function OntologyExplorer() {\n  return (\n    <div className=\"flex h-full flex-col gap-3 p-2\">\n      <div className=\"flex items-center justify-between px-1\">\n        <div>\n          <div className=\"text-mono text-foreground-subtle text-[10px] tracking-[0.12em] uppercase\">\n            Object Explorer\n          </div>\n          <div className=\"text-foreground text-sm font-medium\">Aviation Ontology</div>\n        </div>\n        <Database className=\"text-foreground-subtle size-4\" />\n      </div>\n\n      <div className=\"border-border bg-background rounded-sm border p-1.5\">\n        <div className=\"text-mono text-foreground-subtle mb-1.5 flex items-center gap-1.5 px-1 text-[10px] tracking-[0.08em] uppercase\">\n          <Braces className=\"size-3\" />\n          Object types\n        </div>\n        <div className=\"space-y-1\">\n          {objectTypes.map((type) => (\n            <button\n              key={type.label}\n              type=\"button\"\n              className=\"text-foreground-muted hover:bg-accent hover:text-foreground flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm\"\n            >\n              <span className=\"truncate\">{type.label}</span>\n              <span className={`text-mono text-[10px] ${objectTypeCountClass[type.tone]}`}>\n                {type.count}\n              </span>\n            </button>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"border-border bg-background rounded-sm border p-1.5\">\n        <div className=\"text-mono text-foreground-subtle mb-1.5 flex items-center gap-1.5 px-1 text-[10px] tracking-[0.08em] uppercase\">\n          <Table2 className=\"size-3\" />\n          Saved views\n        </div>\n        <div className=\"space-y-1\">\n          {savedViews.map((view, index) => (\n            <div\n              key={view}\n              className=\"text-foreground-muted flex items-center justify-between rounded-sm px-2 py-1.5 text-sm\"\n            >\n              <span>{view}</span>\n              {index === 0 && <StatusBadge status=\"active\">OPEN</StatusBadge>}\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"border-border bg-background mt-auto rounded-sm border p-2\">\n        <div className=\"text-mono text-foreground-subtle mb-2 text-[10px] tracking-[0.08em] uppercase\">\n          Security marking\n        </div>\n        <div className=\"text-foreground-muted flex items-center gap-2 text-sm\">\n          <Shield className=\"text-success size-4\" />\n          Row-level policies active\n        </div>\n      </div>\n    </div>\n  );\n});\n\nconst WorkspaceToolbar = React.memo(function WorkspaceToolbar() {\n  return (\n    <div className=\"border-border bg-card flex flex-col gap-2 rounded-md border p-2 lg:col-span-2 lg:flex-row lg:items-center lg:justify-between\">\n      <div className=\"flex flex-wrap items-center gap-1.5\">\n        {[\"Explore\", \"Results\", \"Charts\", \"Map\", \"SQL\"].map((item, index) => (\n          <button\n            key={item}\n            type=\"button\"\n            className={`text-mono rounded-sm px-2 py-1 text-[10px] tracking-[0.08em] uppercase ${\n              index === 0\n                ? \"border-primary/50 bg-primary/10 text-primary border\"\n                : \"border-border text-foreground-muted hover:border-border-strong hover:text-foreground border\"\n            }`}\n          >\n            {item}\n          </button>\n        ))}\n      </div>\n      <div className=\"text-mono text-foreground-subtle flex flex-wrap items-center gap-2 text-[10px] tracking-[0.08em] uppercase\">\n        <span>FlightAlert where severity ≥ high</span>\n        <StatusBadge status=\"active\">184 objects</StatusBadge>\n      </div>\n    </div>\n  );\n});\n\nconst MapActions = React.memo(function MapActions() {\n  return (\n    <div className=\"text-mono text-foreground-subtle hidden items-center gap-1.5 text-[10px] tracking-[0.08em] uppercase sm:flex\">\n      <span className=\"inline-flex items-center gap-1\">\n        <Layers className=\"size-3\" />5 layers\n      </span>\n      <span className=\"inline-flex items-center gap-1\">\n        <Clock3 className=\"size-3\" />\n        live\n      </span>\n    </div>\n  );\n});\n\nconst SelectionPreview = React.memo(function SelectionPreview({\n  alert,\n}: {\n  alert: (typeof alertRows)[number];\n}) {\n  const properties = [\n    [\"Object RID\", `ri.flight-alert.main.${alert.id.toLowerCase()}`],\n    [\"Route\", alert.route],\n    [\"Risk\", alert.risk],\n    [\"Owner\", alert.owner],\n    [\"Last updated\", \"2m 14s ago\"],\n  ];\n\n  return (\n    <div className=\"flex h-full min-h-[260px] flex-col gap-3\">\n      <div className=\"border-border bg-background rounded-sm border p-3\">\n        <div className=\"text-mono text-foreground-subtle mb-1 text-[10px] tracking-[0.1em] uppercase\">\n          Selected object\n        </div>\n        <div className=\"text-foreground text-xl font-semibold tracking-tight\">{alert.object}</div>\n        <div className=\"text-foreground-muted mt-1 text-sm\">\n          {alert.id} · {alert.route}\n        </div>\n      </div>\n      <div className=\"space-y-1.5\">\n        {properties.map(([label, value]) => (\n          <div\n            key={label}\n            className=\"border-border bg-background grid grid-cols-[96px_minmax(0,1fr)] gap-2 rounded-sm border px-2 py-1.5\"\n          >\n            <span className=\"text-mono text-foreground-subtle text-[10px] tracking-[0.08em] uppercase\">\n              {label}\n            </span>\n            <span className=\"text-foreground-muted truncate text-sm\">{value}</span>\n          </div>\n        ))}\n      </div>\n      <div className=\"mt-auto grid grid-cols-2 gap-2\">\n        <button\n          type=\"button\"\n          className=\"border-primary/50 bg-primary/10 text-mono text-primary rounded-sm border px-2 py-1.5 text-[10px] tracking-[0.08em] uppercase\"\n        >\n          Open object\n        </button>\n        <button\n          type=\"button\"\n          className=\"border-border text-mono text-foreground-muted hover:border-border-strong hover:text-foreground rounded-sm border px-2 py-1.5 text-[10px] tracking-[0.08em] uppercase\"\n        >\n          Compare\n        </button>\n      </div>\n    </div>\n  );\n});\n\nconst AlertTable = React.memo(function AlertTable({\n  selectedId,\n  onSelect,\n}: {\n  selectedId: string;\n  onSelect: (alert: (typeof alertRows)[number]) => void;\n}) {\n  return (\n    <div className=\"overflow-x-auto\">\n      <table className=\"w-full min-w-[720px] border-collapse text-sm\">\n        <thead className=\"border-border bg-background-elevated text-mono text-foreground-subtle border-b text-[10px] tracking-[0.08em] uppercase\">\n          <tr>\n            <th className=\"w-8 px-2 py-2 text-left\" aria-hidden=\"true\" />\n            <th className=\"px-2 py-2 text-left\">RID</th>\n            <th className=\"px-2 py-2 text-left\">Object</th>\n            <th className=\"px-2 py-2 text-left\">Route</th>\n            <th className=\"px-2 py-2 text-left\">Risk</th>\n            <th className=\"px-2 py-2 text-left\">Owner</th>\n            <th className=\"px-2 py-2 text-left\">Status</th>\n          </tr>\n        </thead>\n        <tbody>\n          {alertRows.map((row) => (\n            <tr\n              key={row.id}\n              role=\"button\"\n              tabIndex={0}\n              aria-selected={selectedId === row.id}\n              className={`border-border/70 hover:bg-accent/70 cursor-pointer border-b ${selectedId === row.id ? \"bg-primary/10\" : \"\"}`}\n              onClick={() => onSelect(row)}\n              onKeyDown={(e) => {\n                if (e.key === \"Enter\" || e.key === \" \") {\n                  e.preventDefault();\n                  onSelect(row);\n                }\n              }}\n            >\n              <td className=\"px-2 py-2\" aria-hidden=\"true\">\n                <span\n                  className={`inline-block size-3 rounded-full border ${\n                    selectedId === row.id ? \"bg-primary border-primary\" : \"border-foreground-subtle\"\n                  }`}\n                />\n              </td>\n              <td className=\"text-mono text-foreground-muted px-2 py-2 text-[11px]\">{row.id}</td>\n              <td className=\"text-foreground px-2 py-2 font-medium\">{row.object}</td>\n              <td className=\"text-foreground-muted px-2 py-2\">{row.route}</td>\n              <td className=\"text-foreground-muted px-2 py-2\">{row.risk}</td>\n              <td className=\"text-foreground-muted px-2 py-2\">{row.owner}</td>\n              <td className=\"px-2 py-2\">\n                <StatusBadge status={row.status}>{row.status}</StatusBadge>\n              </td>\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  );\n});\n\nconst AipPanel = React.memo(function AipPanel({ alert }: { alert: (typeof alertRows)[number] }) {\n  return (\n    <div className=\"text-foreground-muted space-y-3 text-sm\">\n      <div className=\"border-border bg-background flex items-start gap-2 rounded-sm border p-2\">\n        <Sparkles className=\"text-primary mt-0.5 size-4 shrink-0\" />\n        <p>\n          The selected alert is linked to{\" \"}\n          <span className=\"text-foreground\">12 downstream rotations</span> and one active weather\n          polygon. Recommend opening a writeback action for {alert.owner}.\n        </p>\n      </div>\n      <div className=\"space-y-1.5\">\n        {[\"Explain contributing factors\", \"Draft dispatcher action\", \"Find similar incidents\"].map(\n          (action) => (\n            <button\n              key={action}\n              type=\"button\"\n              className=\"border-border bg-background text-foreground-muted hover:border-border-strong hover:text-foreground flex w-full items-center justify-between rounded-sm border px-2 py-1.5 text-left\"\n            >\n              <span>{action}</span>\n              <PanelRight className=\"size-3.5\" />\n            </button>\n          ),\n        )}\n      </div>\n    </div>\n  );\n});\n\nconst LineagePanel = React.memo(function LineagePanel() {\n  return (\n    <div className=\"flex h-full min-h-[150px] items-center overflow-x-auto p-3\">\n      {lineageNodes.map((node, index) => (\n        <React.Fragment key={node}>\n          <div className=\"border-border bg-background min-w-[120px] rounded-sm border p-2\">\n            <div className=\"text-mono text-foreground-subtle mb-1 flex items-center gap-1.5 text-[10px] tracking-[0.08em] uppercase\">\n              {index === 3 ? (\n                <Activity className=\"text-primary size-3\" />\n              ) : (\n                <Database className=\"size-3\" />\n              )}\n              {index === 3 ? \"Model\" : \"Dataset\"}\n            </div>\n            <div className=\"text-foreground-muted truncate text-sm\">{node}</div>\n          </div>\n          {index < lineageNodes.length - 1 && (\n            <div className=\"bg-border-strong h-px w-8 shrink-0\" />\n          )}\n        </React.Fragment>\n      ))}\n    </div>\n  );\n});\n\nexport { DashboardOps };\n"
    },
    {
      "path": "registry/blacksite/blocks/dashboard-ops-data.ts",
      "type": "registry:block",
      "target": "components/blocks/dashboard-ops-data.ts",
      "content": "import {\n  BarChart3,\n  GitBranch,\n  Layers,\n  LayoutDashboard,\n  Map,\n  Network,\n  SlidersHorizontal,\n  Sparkles,\n} from \"lucide-react\";\n\nimport type { GanttTask } from \"@/registry/blacksite/charts/gantt-timeline\";\nimport type { MapMarker, MapZone } from \"@/registry/blacksite/maps/tactical-map\";\nimport type { SidebarRailItem } from \"@/registry/blacksite/ui/sidebar-rail\";\nimport type { StatusBadgeProps } from \"@/registry/blacksite/ui/status-badge\";\n\nexport const navItems: SidebarRailItem[] = [\n  { id: \"home\", icon: LayoutDashboard, label: \"Operational picture\" },\n  { id: \"map\", icon: Map, label: \"Map\" },\n  { id: \"objects\", icon: Network, label: \"Object Explorer\", badge: \"18\" },\n  { id: \"lineage\", icon: GitBranch, label: \"Lineage\" },\n  { id: \"analytics\", icon: BarChart3, label: \"Quiver\" },\n];\n\nexport const navFooter: SidebarRailItem[] = [\n  { id: \"layers\", icon: Layers, label: \"Layer manager\" },\n  { id: \"filters\", icon: SlidersHorizontal, label: \"Filters\" },\n  { id: \"aip\", icon: Sparkles, label: \"AIP Assist\", badge: \"B\" },\n];\n\nexport const objectTypes = [\n  { label: \"Flight alert\", count: 184, tone: \"danger\" },\n  { label: \"Aircraft\", count: 1242, tone: \"info\" },\n  { label: \"Airport\", count: 391, tone: \"success\" },\n  { label: \"Route segment\", count: 8819, tone: \"gold\" },\n  { label: \"Maintenance event\", count: 67, tone: \"warning\" },\n] as const;\n\nexport const objectTypeCountClass: Record<(typeof objectTypes)[number][\"tone\"], string> = {\n  danger: \"text-danger\",\n  info: \"text-info\",\n  success: \"text-success\",\n  gold: \"text-gold\",\n  warning: \"text-warning\",\n};\n\nexport const savedViews = [\n  \"Delayed departures\",\n  \"Maintenance risk\",\n  \"Crew impact\",\n  \"Weather overlays\",\n];\n\nexport const mapZones: MapZone[] = [\n  {\n    id: \"weather-front\",\n    label: \"WX-17\",\n    points: [\n      [0.1, 0.28],\n      [0.35, 0.18],\n      [0.53, 0.32],\n      [0.42, 0.55],\n      [0.16, 0.51],\n    ],\n    tone: \"info\",\n    variant: \"dashed\",\n  },\n  {\n    id: \"ground-stop\",\n    label: \"GROUND STOP\",\n    points: [\n      [0.56, 0.44],\n      [0.82, 0.48],\n      [0.78, 0.72],\n      [0.55, 0.78],\n      [0.46, 0.6],\n    ],\n    tone: \"warning\",\n    variant: \"solid\",\n  },\n];\n\nexport const mapMarkers: MapMarker[] = [\n  { id: \"ord\", label: \"ORD\", x: 0.54, y: 0.52, tone: \"danger\", status: \"critical\", shape: \"pin\" },\n  {\n    id: \"dfw\",\n    label: \"DFW\",\n    x: 0.36,\n    y: 0.71,\n    tone: \"warning\",\n    status: \"high\",\n    shape: \"triangle\",\n  },\n  { id: \"den\", label: \"DEN\", x: 0.28, y: 0.55, tone: \"info\", status: \"active\", shape: \"square\" },\n  { id: \"iad\", label: \"IAD\", x: 0.73, y: 0.58, tone: \"gold\", status: \"new\", shape: \"pin\" },\n  {\n    id: \"atl\",\n    label: \"ATL\",\n    x: 0.62,\n    y: 0.76,\n    tone: \"success\",\n    status: \"nominal\",\n    shape: \"pin\",\n  },\n];\n\nexport const throughputData = [\n  { x: \"06:00\", inbound: 82, delayed: 9, threshold: 18 },\n  { x: \"07:00\", inbound: 96, delayed: 14, threshold: 18 },\n  { x: \"08:00\", inbound: 118, delayed: 22, threshold: 18 },\n  { x: \"09:00\", inbound: 136, delayed: 31, threshold: 18 },\n  { x: \"10:00\", inbound: 142, delayed: 28, threshold: 18 },\n  { x: \"11:00\", inbound: 128, delayed: 19, threshold: 18 },\n];\n\nexport const riskDistribution = [\n  { x: \"WX\", open: 24, actioned: 11 },\n  { x: \"MX\", open: 16, actioned: 7 },\n  { x: \"CREW\", open: 9, actioned: 13 },\n  { x: \"ATC\", open: 21, actioned: 5 },\n  { x: \"SEC\", open: 4, actioned: 6 },\n];\n\nexport const timelineTasks: GanttTask[] = [\n  { id: \"ingest\", label: \"ADS-B ingest\", start: 0.2, end: 1.4, tone: \"success\" },\n  { id: \"linking\", label: \"Object linking\", start: 1.0, end: 2.5, tone: \"info\" },\n  { id: \"model\", label: \"Delay model scoring\", start: 2.2, end: 4.1, tone: \"primary\" },\n  { id: \"review\", label: \"Dispatch review\", start: 3.6, end: 5.0, tone: \"warning\" },\n  { id: \"writeback\", label: \"Action writeback\", start: 4.8, end: 6.4, tone: \"gold\" },\n];\n\nexport const alertRows: Array<{\n  id: string;\n  object: string;\n  route: string;\n  risk: string;\n  owner: string;\n  status: StatusBadgeProps[\"status\"];\n}> = [\n  {\n    id: \"FA-1842\",\n    object: \"DAL 2281\",\n    route: \"ORD → ATL\",\n    risk: \"Weather diversion\",\n    owner: \"Ops East\",\n    status: \"critical\",\n  },\n  {\n    id: \"FA-1839\",\n    object: \"UAL 455\",\n    route: \"DEN → IAD\",\n    risk: \"Crew legality\",\n    owner: \"Crew desk\",\n    status: \"high\",\n  },\n  {\n    id: \"FA-1827\",\n    object: \"AAL 109\",\n    route: \"DFW → ORD\",\n    risk: \"Maintenance gate\",\n    owner: \"Line MX\",\n    status: \"warning\",\n  },\n  {\n    id: \"FA-1811\",\n    object: \"SWA 884\",\n    route: \"ATL → DFW\",\n    risk: \"Slot compression\",\n    owner: \"ATC liaison\",\n    status: \"active\",\n  },\n];\n\nexport const lineageNodes = [\n  \"raw_adsb_events\",\n  \"flight_object\",\n  \"risk_features\",\n  \"delay_model_v7\",\n  \"dispatch_action\",\n];\n"
    }
  ]
}
