{
  "schemaVersion": "1.0.0",
  "readme": "Platform Elements registry — used by AI generation, visual editor, and runtime validation",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "elements/platform-account-chip.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformAccountChip",
          "tagName": "platform-account-chip",
          "customElement": true,
          "description": "Canonical 'signed in as / switch / sign out' identity chip. Displays the active account from accounts-core and delegates sign-in/switch to gograb-id via top-level redirects.",
          "attributes": [
            {
              "name": "app",
              "type": {
                "text": "string"
              },
              "fieldName": "app",
              "description": "Consumer TargetApp string used to build chooser / sign-in URLs (theming + post-auth target)."
            },
            {
              "name": "return-to",
              "type": {
                "text": "string"
              },
              "fieldName": "returnTo",
              "description": "Absolute URL to return to after the gograb-id redirect hop."
            },
            {
              "name": "theme",
              "type": {
                "text": "'light' | 'dark'"
              },
              "fieldName": "theme",
              "description": "'light' for light surfaces; otherwise the dark default."
            },
            {
              "name": "align",
              "type": {
                "text": "'left' | 'right'"
              },
              "fieldName": "align",
              "description": "Dropdown anchor side.",
              "default": "'right'"
            },
            {
              "name": "compact",
              "type": {
                "text": "boolean"
              },
              "fieldName": "compact",
              "description": "Avatar-only chip with a denser dropdown.",
              "default": "false"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformAccountChip",
          "declaration": {
            "name": "PlatformAccountChip",
            "module": "elements/platform-account-chip.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-account-chip",
          "declaration": {
            "name": "PlatformAccountChip",
            "module": "elements/platform-account-chip.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-alert.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformAlert",
          "tagName": "platform-alert",
          "customElement": true,
          "description": "Contextual banner (success/error/warning/info) with optional dismiss.",
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "'success' | 'error' | 'warning' | 'info'"
              },
              "fieldName": "type",
              "default": "'info'"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "fieldName": "message",
              "_required": true
            },
            {
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "fieldName": "dismissible",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "alert-dismissed",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformAlert",
          "declaration": {
            "name": "PlatformAlert",
            "module": "elements/platform-alert.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-alert",
          "declaration": {
            "name": "PlatformAlert",
            "module": "elements/platform-alert.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-app.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformApp",
          "tagName": "platform-app",
          "customElement": true,
          "description": "Root element. Configures API, theme, and auth context for all children.",
          "attributes": [
            {
              "name": "api",
              "type": {
                "text": "string"
              },
              "fieldName": "api",
              "description": "Base API URL",
              "_required": true
            },
            {
              "name": "space",
              "type": {
                "text": "string"
              },
              "fieldName": "space",
              "description": "Space ID",
              "_required": true
            },
            {
              "name": "universe",
              "type": {
                "text": "string"
              },
              "fieldName": "universe",
              "description": "Universe ID",
              "_required": true
            },
            {
              "name": "auth-token",
              "type": {
                "text": "string"
              },
              "fieldName": "authToken",
              "description": "JWT auth token"
            },
            {
              "name": "theme",
              "type": {
                "text": "'dark' | 'light'"
              },
              "fieldName": "theme",
              "default": "'dark'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformApp",
          "declaration": {
            "name": "PlatformApp",
            "module": "elements/platform-app.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-app",
          "declaration": {
            "name": "PlatformApp",
            "module": "elements/platform-app.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-app-shell.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformAppShell",
          "tagName": "platform-app-shell",
          "customElement": true,
          "description": "3-region docked-panel layout primitive (left | center | right). Reflects width attributes to CSS vars so panel toggles don't re-mount slotted children — preserves chat input focus, animation state, and other internal panel state. Built-in floating toggle buttons + keyboard shortcuts.",
          "attributes": [
            {
              "name": "left-width",
              "type": {
                "text": "number"
              },
              "fieldName": "leftWidth",
              "default": "360"
            },
            {
              "name": "right-width",
              "type": {
                "text": "number"
              },
              "fieldName": "rightWidth",
              "default": "420"
            },
            {
              "name": "left-visible",
              "type": {
                "text": "boolean"
              },
              "fieldName": "leftVisible",
              "default": "true"
            },
            {
              "name": "right-visible",
              "type": {
                "text": "boolean"
              },
              "fieldName": "rightVisible",
              "default": "true"
            },
            {
              "name": "shortcut-left",
              "type": {
                "text": "string"
              },
              "fieldName": "shortcutLeft",
              "description": "Keyboard shortcut to toggle left panel (e.g. 'Mod+Shift+V'). Empty string disables."
            },
            {
              "name": "shortcut-right",
              "type": {
                "text": "string"
              },
              "fieldName": "shortcutRight",
              "description": "Keyboard shortcut to toggle right panel (e.g. 'Mod+K'). Empty string disables."
            }
          ],
          "events": [
            {
              "name": "panel-toggle",
              "type": {
                "text": "CustomEvent<{ side: 'left' | 'right'; visible: boolean }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformAppShell",
          "declaration": {
            "name": "PlatformAppShell",
            "module": "elements/platform-app-shell.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-app-shell",
          "declaration": {
            "name": "PlatformAppShell",
            "module": "elements/platform-app-shell.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-avatar.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformAvatar",
          "tagName": "platform-avatar",
          "customElement": true,
          "description": "User avatar with image or initials fallback.",
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "fieldName": "src",
              "description": "Image URL"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "description": "Full name for initials fallback"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "fieldName": "size",
              "default": "'md'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformAvatar",
          "declaration": {
            "name": "PlatformAvatar",
            "module": "elements/platform-avatar.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-avatar",
          "declaration": {
            "name": "PlatformAvatar",
            "module": "elements/platform-avatar.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-badge.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformBadge",
          "tagName": "platform-badge",
          "customElement": true,
          "description": "Numeric count badge with variants and max cap overflow.",
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value",
              "description": "Badge value (string or number)",
              "_required": true
            },
            {
              "name": "variant",
              "type": {
                "text": "'primary' | 'success' | 'warning' | 'error' | 'neutral'"
              },
              "fieldName": "variant",
              "default": "'primary'"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "fieldName": "max",
              "description": "Maximum value before showing N+"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformBadge",
          "declaration": {
            "name": "PlatformBadge",
            "module": "elements/platform-badge.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-badge",
          "declaration": {
            "name": "PlatformBadge",
            "module": "elements/platform-badge.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-breadcrumb.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformBreadcrumb",
          "tagName": "platform-breadcrumb",
          "customElement": true,
          "description": "Navigation breadcrumb trail with clickable path segments.",
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "string"
              },
              "fieldName": "items",
              "description": "Path segments: path:Label, path:Label, ...",
              "_required": true
            },
            {
              "name": "separator",
              "type": {
                "text": "string"
              },
              "fieldName": "separator",
              "description": "Separator character between items",
              "default": "'/'"
            }
          ],
          "events": [
            {
              "name": "breadcrumb-navigate",
              "type": {
                "text": "CustomEvent<{ path: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformBreadcrumb",
          "declaration": {
            "name": "PlatformBreadcrumb",
            "module": "elements/platform-breadcrumb.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-breadcrumb",
          "declaration": {
            "name": "PlatformBreadcrumb",
            "module": "elements/platform-breadcrumb.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-button.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformButton",
          "tagName": "platform-button",
          "customElement": true,
          "description": "Button with variants, sizes, loading, and disabled states.",
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'primary' | 'secondary' | 'danger' | 'ghost'"
              },
              "fieldName": "variant",
              "default": "'primary'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "loading",
              "type": {
                "text": "boolean"
              },
              "fieldName": "loading"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled"
            },
            {
              "name": "type",
              "type": {
                "text": "'button' | 'submit' | 'reset'"
              },
              "fieldName": "type",
              "default": "'button'"
            }
          ],
          "events": [
            {
              "name": "button-click",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformButton",
          "declaration": {
            "name": "PlatformButton",
            "module": "elements/platform-button.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-button",
          "declaration": {
            "name": "PlatformButton",
            "module": "elements/platform-button.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-canvas.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformCanvas",
          "tagName": "platform-canvas",
          "customElement": true,
          "description": "[S484.4 deprecated] Legacy alias of <vitto-space>. Registered as an empty subclass for one release cycle (drop in S490). New code should use <vitto-space>.",
          "attributes": [
            {
              "name": "api-base",
              "type": {
                "text": "string"
              },
              "fieldName": "apiBase"
            },
            {
              "name": "prewarm-tags",
              "type": {
                "text": "string"
              },
              "fieldName": "prewarmTags"
            },
            {
              "name": "webmcp-enabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "webmcpEnabled",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "canvas-validation-failed",
              "type": {
                "text": "CustomEvent<{ verb: string; errors: string[] }>"
              }
            },
            {
              "name": "pe-webmcp-reply",
              "type": {
                "text": "CustomEvent<{ ir: CanvasIR | null; subtree?: CanvasNode | null }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformCanvas",
          "declaration": {
            "name": "PlatformCanvas",
            "module": "elements/platform-canvas.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-canvas",
          "declaration": {
            "name": "PlatformCanvas",
            "module": "elements/platform-canvas.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-card.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformCard",
          "tagName": "platform-card",
          "customElement": true,
          "description": "Container card with optional header, body, and action slots.",
          "attributes": [
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "fieldName": "title"
            },
            {
              "name": "subtitle",
              "type": {
                "text": "string"
              },
              "fieldName": "subtitle"
            },
            {
              "name": "collapsible",
              "type": {
                "text": "boolean"
              },
              "fieldName": "collapsible",
              "default": "false"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformCard",
          "declaration": {
            "name": "PlatformCard",
            "module": "elements/platform-card.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-card",
          "declaration": {
            "name": "PlatformCard",
            "module": "elements/platform-card.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-checkbox.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformCheckbox",
          "tagName": "platform-checkbox",
          "customElement": true,
          "description": "Checkbox with label and indeterminate support.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "checked",
              "type": {
                "text": "boolean"
              },
              "fieldName": "checked"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled"
            },
            {
              "name": "indeterminate",
              "type": {
                "text": "boolean"
              },
              "fieldName": "indeterminate"
            }
          ],
          "events": [
            {
              "name": "checkbox-change",
              "type": {
                "text": "CustomEvent<{ name, checked }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformCheckbox",
          "declaration": {
            "name": "PlatformCheckbox",
            "module": "elements/platform-checkbox.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-checkbox",
          "declaration": {
            "name": "PlatformCheckbox",
            "module": "elements/platform-checkbox.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-clap-button.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformClapButton",
          "tagName": "platform-clap-button",
          "customElement": true,
          "description": "Anonymous engagement counter button. Multi-tap with burst animation and 1/sec rate limit. Emits \"clap\" CustomEvent with detail {newCount, sessionCount}. Pairs with the LiveStore<number> reactivity primitive for cross-surface count sync.",
          "attributes": [
            {
              "name": "target-id",
              "type": {
                "text": "string"
              },
              "fieldName": "targetId",
              "description": "Stable id (track / post / asset) the clap count is associated with",
              "_required": true
            },
            {
              "name": "count",
              "type": {
                "text": "number"
              },
              "fieldName": "count",
              "description": "Initial count to render before any user interaction",
              "default": "'0'"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon",
              "description": "Glyph (emoji or single char) painted inside the button; CSS mask-image can override with the SDK clap-icon data URI",
              "default": "'👏'"
            },
            {
              "name": "max-per-target",
              "type": {
                "text": "number"
              },
              "fieldName": "maxPerTarget",
              "description": "Soft cap on per-session taps before the button stops counting",
              "default": "'50'"
            },
            {
              "name": "hide-when-empty",
              "type": {
                "text": "boolean"
              },
              "fieldName": "hideWhenEmpty",
              "description": "Render nothing when count is 0; useful for list-row badges"
            },
            {
              "name": "aria-label",
              "type": {
                "text": "string"
              },
              "fieldName": "ariaLabel",
              "description": "Screen-reader label",
              "default": "'Applaud'"
            }
          ],
          "events": [
            {
              "name": "clap",
              "type": {
                "text": "CustomEvent<{ targetId, sessionCount, newCount }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformClapButton",
          "declaration": {
            "name": "PlatformClapButton",
            "module": "elements/platform-clap-button.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-clap-button",
          "declaration": {
            "name": "PlatformClapButton",
            "module": "elements/platform-clap-button.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-color-panel.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformColorPanel",
          "tagName": "platform-color-panel",
          "customElement": true,
          "description": "Dominant-color swatch sampled from a referenced image. Used by track / album / playlist cards to colour-grade their surrounding chrome from the cover art. Reactive to src changes.",
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "fieldName": "src",
              "description": "Image URL to sample the dominant color from",
              "_required": true
            },
            {
              "name": "fallback",
              "type": {
                "text": "string"
              },
              "fieldName": "fallback",
              "description": "Hex / rgb fallback color when src fails to load"
            },
            {
              "name": "sample",
              "type": {
                "text": "'dominant' | 'vibrant' | 'muted'"
              },
              "fieldName": "sample",
              "description": "Sampling strategy",
              "default": "'dominant'"
            }
          ],
          "events": [
            {
              "name": "color-extracted",
              "type": {
                "text": "CustomEvent<{ rgb: [r,g,b], hex: string, contrast: number }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformColorPanel",
          "declaration": {
            "name": "PlatformColorPanel",
            "module": "elements/platform-color-panel.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-color-panel",
          "declaration": {
            "name": "PlatformColorPanel",
            "module": "elements/platform-color-panel.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-confirm.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformConfirm",
          "tagName": "platform-confirm",
          "customElement": true,
          "description": "Yes/no confirmation dialog with backdrop.",
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "fieldName": "open"
            },
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "fieldName": "title"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "fieldName": "message",
              "_required": true
            },
            {
              "name": "confirm-text",
              "type": {
                "text": "string"
              },
              "fieldName": "confirmText",
              "default": "'Confirm'"
            },
            {
              "name": "cancel-text",
              "type": {
                "text": "string"
              },
              "fieldName": "cancelText",
              "default": "'Cancel'"
            },
            {
              "name": "variant",
              "type": {
                "text": "'danger' | 'warning' | 'info'"
              },
              "fieldName": "variant",
              "default": "'info'"
            }
          ],
          "events": [
            {
              "name": "confirm-yes",
              "type": {
                "text": "CustomEvent<{}>"
              }
            },
            {
              "name": "confirm-no",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformConfirm",
          "declaration": {
            "name": "PlatformConfirm",
            "module": "elements/platform-confirm.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-confirm",
          "declaration": {
            "name": "PlatformConfirm",
            "module": "elements/platform-confirm.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-cover-art.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformCoverArt",
          "tagName": "platform-cover-art",
          "customElement": true,
          "description": "Square media artwork with a procedural gradient fallback for missing images. Computes a deterministic gradient from seed-id + seed-title so the same entity gets the same colour identity even before its image loads. Emits ImageObject JSON-LD for AI Overviews.",
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "fieldName": "src",
              "description": "Image URL; if absent or 404 the procedural gradient is shown"
            },
            {
              "name": "seed-id",
              "type": {
                "text": "string"
              },
              "fieldName": "seedId",
              "description": "Stable id for the procedural gradient hash"
            },
            {
              "name": "seed-title",
              "type": {
                "text": "string"
              },
              "fieldName": "seedTitle",
              "description": "Human-readable title for the procedural gradient hash"
            },
            {
              "name": "size",
              "type": {
                "text": "number"
              },
              "fieldName": "size",
              "description": "Square pixel size of the rendered artwork",
              "default": "'64'"
            },
            {
              "name": "alt",
              "type": {
                "text": "string"
              },
              "fieldName": "alt",
              "description": "Alt text for screen readers"
            },
            {
              "name": "radius",
              "type": {
                "text": "number"
              },
              "fieldName": "radius",
              "description": "Corner radius in pixels (or 9999 for circular)"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "fieldName": "description",
              "description": "Narrative AI-facing description (feeds JSON-LD ImageObject.description)"
            },
            {
              "name": "credit",
              "type": {
                "text": "string"
              },
              "fieldName": "credit",
              "description": "Photographer / source credit (feeds JSON-LD ImageObject.creditText)"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformCoverArt",
          "declaration": {
            "name": "PlatformCoverArt",
            "module": "elements/platform-cover-art.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-cover-art",
          "declaration": {
            "name": "PlatformCoverArt",
            "module": "elements/platform-cover-art.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-crud.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformCrud",
          "tagName": "platform-crud",
          "customElement": true,
          "description": "Full CRUD orchestrator: table + form + detail with create/edit/delete flows.",
          "attributes": [
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "description": "Entity name (PascalCase)",
              "_required": true
            },
            {
              "name": "columns",
              "type": {
                "text": "string"
              },
              "fieldName": "columns",
              "description": "Table columns: field:Label:type, ...",
              "_required": true
            },
            {
              "name": "fields",
              "type": {
                "text": "string"
              },
              "fieldName": "fields",
              "description": "Form fields: name:type:validations, ...",
              "_required": true
            },
            {
              "name": "sortable",
              "type": {
                "text": "string"
              },
              "fieldName": "sortable",
              "description": "Sortable column fields"
            },
            {
              "name": "searchable",
              "type": {
                "text": "string"
              },
              "fieldName": "searchable",
              "description": "Searchable fields for text search"
            },
            {
              "name": "filterable",
              "type": {
                "text": "string"
              },
              "fieldName": "filterable",
              "description": "Filter fields: field:opt1|opt2|opt3"
            },
            {
              "name": "actions",
              "type": {
                "text": "'create' | 'edit' | 'delete' | 'export' | 'refresh'"
              },
              "fieldName": "actions",
              "default": "'create, edit, delete'"
            },
            {
              "name": "page-size",
              "type": {
                "text": "number"
              },
              "fieldName": "pageSize",
              "default": "10"
            },
            {
              "name": "detail-sections",
              "type": {
                "text": "string"
              },
              "fieldName": "detailSections",
              "description": "Detail view sections"
            },
            {
              "name": "related",
              "type": {
                "text": "string"
              },
              "fieldName": "related",
              "description": "Related entities: entity:foreignKey"
            }
          ],
          "events": [
            {
              "name": "row-click",
              "type": {
                "text": "CustomEvent<{ id, entity, data }>"
              }
            },
            {
              "name": "action",
              "type": {
                "text": "CustomEvent<{ action, id?, entity }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformCrud",
          "declaration": {
            "name": "PlatformCrud",
            "module": "elements/platform-crud.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-crud",
          "declaration": {
            "name": "PlatformCrud",
            "module": "elements/platform-crud.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-date-picker.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformDatePicker",
          "tagName": "platform-date-picker",
          "customElement": true,
          "description": "Native date input styled to match platform theme.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value",
              "description": "ISO date string (YYYY-MM-DD)"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "fieldName": "min",
              "description": "Minimum date (ISO)"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "fieldName": "max",
              "description": "Maximum date (ISO)"
            }
          ],
          "events": [
            {
              "name": "date-change",
              "type": {
                "text": "CustomEvent<{ name: string, value: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformDatePicker",
          "declaration": {
            "name": "PlatformDatePicker",
            "module": "elements/platform-date-picker.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-date-picker",
          "declaration": {
            "name": "PlatformDatePicker",
            "module": "elements/platform-date-picker.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-date-range.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformDateRange",
          "tagName": "platform-date-range",
          "customElement": true,
          "description": "Two date inputs (start/end) for date range selection.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "start",
              "type": {
                "text": "string"
              },
              "fieldName": "start",
              "description": "Start ISO date"
            },
            {
              "name": "end",
              "type": {
                "text": "string"
              },
              "fieldName": "end",
              "description": "End ISO date"
            }
          ],
          "events": [
            {
              "name": "date-range-change",
              "type": {
                "text": "CustomEvent<{ name: string, start: string, end: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformDateRange",
          "declaration": {
            "name": "PlatformDateRange",
            "module": "elements/platform-date-range.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-date-range",
          "declaration": {
            "name": "PlatformDateRange",
            "module": "elements/platform-date-range.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-detail.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformDetail",
          "tagName": "platform-detail",
          "customElement": true,
          "description": "Entity detail view. Fetches and displays one record.",
          "attributes": [
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "_required": true
            },
            {
              "name": "entity-id",
              "type": {
                "text": "string"
              },
              "fieldName": "entityId",
              "_required": true
            },
            {
              "name": "subscribe-id",
              "type": {
                "text": "string"
              },
              "fieldName": "subscribeId",
              "description": "EventBus channel for dynamic ID"
            },
            {
              "name": "sections",
              "type": {
                "text": "string"
              },
              "fieldName": "sections"
            },
            {
              "name": "actions",
              "type": {
                "text": "string"
              },
              "fieldName": "actions",
              "default": "'edit, delete, back'"
            }
          ],
          "events": [
            {
              "name": "action",
              "type": {
                "text": "CustomEvent<{ action, id, entity }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformDetail",
          "declaration": {
            "name": "PlatformDetail",
            "module": "elements/platform-detail.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-detail",
          "declaration": {
            "name": "PlatformDetail",
            "module": "elements/platform-detail.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-divider.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformDivider",
          "tagName": "platform-divider",
          "customElement": true,
          "description": "Horizontal or vertical separator with optional center label.",
          "attributes": [
            {
              "name": "orientation",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "fieldName": "orientation",
              "default": "'horizontal'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label",
              "description": "Center label text"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformDivider",
          "declaration": {
            "name": "PlatformDivider",
            "module": "elements/platform-divider.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-divider",
          "declaration": {
            "name": "PlatformDivider",
            "module": "elements/platform-divider.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-dropdown.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformDropdown",
          "tagName": "platform-dropdown",
          "customElement": true,
          "description": "Trigger button with dropdown menu. Keyboard navigable (arrow keys, enter, escape).",
          "attributes": [
            {
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "fieldName": "trigger",
              "description": "Button label text",
              "default": "'Select'"
            },
            {
              "name": "items",
              "type": {
                "text": "string"
              },
              "fieldName": "items",
              "description": "Menu items: value:Label, value2:Label2",
              "_required": true
            },
            {
              "name": "align",
              "type": {
                "text": "'left' | 'right'"
              },
              "fieldName": "align",
              "default": "'left'"
            }
          ],
          "events": [
            {
              "name": "dropdown-select",
              "type": {
                "text": "CustomEvent<{ value: string, label: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformDropdown",
          "declaration": {
            "name": "PlatformDropdown",
            "module": "elements/platform-dropdown.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-dropdown",
          "declaration": {
            "name": "PlatformDropdown",
            "module": "elements/platform-dropdown.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-embeddable-host.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformEmbeddableHost",
          "tagName": "platform-embeddable-host",
          "customElement": true,
          "description": "Iframe + postMessage embed for cross-origin panel apps (e.g. gograb-ai /panel, vitto-live). Owns an internal HostBridge from runtime/embed/ that handles message validation, origin allowlist, auth init/refresh, optional heartbeat watchdog, and per-type + global rate limiting. Optional drag-handle resize with localStorage width persistence. Re-emits bridge events as CustomEvents (embed-ready, embed-message, embed-drop, embed-drag-start, embed-drag-end, embed-error, embed-health-change, embed-resize).",
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "fieldName": "src",
              "description": "Iframe target URL — must be an origin in `allowed-origins`.",
              "_required": true
            },
            {
              "name": "allowed-origins",
              "type": {
                "text": "string"
              },
              "fieldName": "allowedOrigins",
              "description": "Whitespace-separated list of origins permitted to send messages to this host. Inbound postMessage events from other origins are dropped silently.",
              "_required": true
            },
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "fieldName": "title",
              "description": "Accessible name for the inner iframe.",
              "default": "'Embedded panel'"
            },
            {
              "name": "sandbox",
              "type": {
                "text": "string"
              },
              "fieldName": "sandbox",
              "default": "'allow-scripts allow-same-origin allow-forms allow-popups'"
            },
            {
              "name": "auto-auth",
              "type": {
                "text": "boolean"
              },
              "fieldName": "autoAuth",
              "description": "When true, reads JWT from localStorage[jwt-key] and auto-sends AI_AUTH_INIT on iframe ready.",
              "default": "'false'"
            },
            {
              "name": "jwt-key",
              "type": {
                "text": "string"
              },
              "fieldName": "jwtKey",
              "description": "localStorage key holding the JWT (raw string OR { accessToken } JSON).",
              "default": "'my_vitto_session'"
            },
            {
              "name": "enable-heartbeat",
              "type": {
                "text": "boolean"
              },
              "fieldName": "enableHeartbeat",
              "description": "Start the HostBridge ping/pong watchdog (10s interval, 30s timeout).",
              "default": "'false'"
            },
            {
              "name": "enable-drag-drop",
              "type": {
                "text": "boolean"
              },
              "fieldName": "enableDragDrop",
              "description": "Forward AI_DRAG_* events from the iframe. The host element re-emits them as embed-drag-start / embed-drag-end CustomEvents; the visual drag overlay is the consumer's responsibility.",
              "default": "'false'"
            },
            {
              "name": "resizable",
              "type": {
                "text": "boolean"
              },
              "fieldName": "resizable",
              "description": "Render a drag handle on the resize-side edge so the user can adjust the host's width.",
              "default": "'false'"
            },
            {
              "name": "resize-side",
              "type": {
                "text": "'left' | 'right'"
              },
              "fieldName": "resizeSide",
              "default": "'right'"
            },
            {
              "name": "resize-min-width",
              "type": {
                "text": "number"
              },
              "fieldName": "resizeMinWidth",
              "default": "'200'"
            },
            {
              "name": "resize-max-width",
              "type": {
                "text": "number"
              },
              "fieldName": "resizeMaxWidth",
              "default": "'800'"
            },
            {
              "name": "resize-default-width",
              "type": {
                "text": "number"
              },
              "fieldName": "resizeDefaultWidth",
              "default": "'420'"
            },
            {
              "name": "persist-width-to-storage-key",
              "type": {
                "text": "string"
              },
              "fieldName": "persistWidthToStorageKey",
              "description": "When set, the current width is mirrored to localStorage[<key>] on each resize and restored on mount."
            },
            {
              "name": "debug",
              "type": {
                "text": "boolean"
              },
              "fieldName": "debug",
              "default": "'false'"
            }
          ],
          "events": [
            {
              "name": "embed-ready",
              "type": {
                "text": "CustomEvent<void>"
              }
            },
            {
              "name": "embed-message",
              "type": {
                "text": "CustomEvent<BridgeMessage>"
              }
            },
            {
              "name": "embed-drop",
              "type": {
                "text": "CustomEvent<{ id; type; title; data }>"
              }
            },
            {
              "name": "embed-drag-start",
              "type": {
                "text": "CustomEvent<DragPayload>"
              }
            },
            {
              "name": "embed-drag-end",
              "type": {
                "text": "CustomEvent<{ latency; dropped; position? }>"
              }
            },
            {
              "name": "embed-error",
              "type": {
                "text": "CustomEvent<ErrorPayload>"
              }
            },
            {
              "name": "embed-health-change",
              "type": {
                "text": "CustomEvent<'healthy' | 'degraded' | 'disconnected'>"
              }
            },
            {
              "name": "embed-disconnect",
              "type": {
                "text": "CustomEvent<void>"
              }
            },
            {
              "name": "embed-resize",
              "type": {
                "text": "CustomEvent<{ width: number }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformEmbeddableHost",
          "declaration": {
            "name": "PlatformEmbeddableHost",
            "module": "elements/platform-embeddable-host.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-embeddable-host",
          "declaration": {
            "name": "PlatformEmbeddableHost",
            "module": "elements/platform-embeddable-host.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-empty.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformEmpty",
          "tagName": "platform-empty",
          "customElement": true,
          "description": "Empty-state surface with an icon, message, narrative, and optional CTA. Renders inside any data-fetching element (table / list / search) when the result set is empty.",
          "attributes": [
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon",
              "description": "Glyph to render above the message",
              "default": "'📋'"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "fieldName": "message",
              "description": "Headline string (\"No tracks yet\")"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "fieldName": "description",
              "description": "Supporting copy below the headline"
            },
            {
              "name": "action-text",
              "type": {
                "text": "string"
              },
              "fieldName": "actionText",
              "description": "Label for the optional CTA button"
            },
            {
              "name": "action-event",
              "type": {
                "text": "string"
              },
              "fieldName": "actionEvent",
              "description": "CustomEvent name emitted when the CTA is clicked"
            }
          ],
          "events": [
            {
              "name": "<action-event>",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformEmpty",
          "declaration": {
            "name": "PlatformEmpty",
            "module": "elements/platform-empty.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-empty",
          "declaration": {
            "name": "PlatformEmpty",
            "module": "elements/platform-empty.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-entity-lookup.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformEntityLookup",
          "tagName": "platform-entity-lookup",
          "customElement": true,
          "description": "Type-ahead entity search. Fetches results from DataClient as user types.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "description": "Entity to search (PascalCase)",
              "_required": true
            },
            {
              "name": "display-field",
              "type": {
                "text": "string"
              },
              "fieldName": "displayField",
              "description": "Field to show in results",
              "default": "'name'"
            },
            {
              "name": "value-field",
              "type": {
                "text": "string"
              },
              "fieldName": "valueField",
              "description": "Field to use as value",
              "default": "'_id'"
            }
          ],
          "events": [
            {
              "name": "lookup-change",
              "type": {
                "text": "CustomEvent<{ name: string, value: string, display: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformEntityLookup",
          "declaration": {
            "name": "PlatformEntityLookup",
            "module": "elements/platform-entity-lookup.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-entity-lookup",
          "declaration": {
            "name": "PlatformEntityLookup",
            "module": "elements/platform-entity-lookup.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-error-boundary.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformErrorBoundary",
          "tagName": "platform-error-boundary",
          "customElement": true,
          "description": "Error-boundary wrapper required at the top of every <platform-route>. Catches synchronous + Promise rejections from descendant elements and renders a recoverable error state with a \"Try again\" button instead of a blank screen. Slot-driven content.",
          "attributes": [
            {
              "name": "fallback",
              "type": {
                "text": "string"
              },
              "fieldName": "fallback",
              "description": "Custom fallback message; defaults to a generic apology + retry CTA"
            }
          ],
          "events": [
            {
              "name": "platform-error-report",
              "type": {
                "text": "CustomEvent<{ errorCount, message, stack, componentTagName? }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformErrorBoundary",
          "declaration": {
            "name": "PlatformErrorBoundary",
            "module": "elements/platform-error-boundary.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-error-boundary",
          "declaration": {
            "name": "PlatformErrorBoundary",
            "module": "elements/platform-error-boundary.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-file-upload.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformFileUpload",
          "tagName": "platform-file-upload",
          "customElement": true,
          "description": "Drag-and-drop file upload zone with file list and size validation.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "accept",
              "type": {
                "text": "string"
              },
              "fieldName": "accept",
              "description": "Accepted file types e.g. .pdf,.jpg"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "fieldName": "multiple",
              "default": "false"
            },
            {
              "name": "max-size",
              "type": {
                "text": "number"
              },
              "fieldName": "maxSize",
              "description": "Max file size in MB",
              "default": "10"
            }
          ],
          "events": [
            {
              "name": "file-selected",
              "type": {
                "text": "CustomEvent<{ name: string, files: File[] }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformFileUpload",
          "declaration": {
            "name": "PlatformFileUpload",
            "module": "elements/platform-file-upload.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-file-upload",
          "declaration": {
            "name": "PlatformFileUpload",
            "module": "elements/platform-file-upload.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-filter-chips.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformFilterChips",
          "tagName": "platform-filter-chips",
          "customElement": true,
          "description": "Active filter pills with × remove buttons and optional clear-all.",
          "attributes": [
            {
              "name": "filters",
              "type": {
                "text": "string"
              },
              "fieldName": "filters",
              "description": "JSON object of active filters e.g. {\"status\":\"active\"}",
              "_required": true
            },
            {
              "name": "clearable",
              "type": {
                "text": "boolean"
              },
              "fieldName": "clearable",
              "description": "Show 'Clear all' button",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "filter-remove",
              "type": {
                "text": "CustomEvent<{ field: string }>"
              }
            },
            {
              "name": "filter-clear",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformFilterChips",
          "declaration": {
            "name": "PlatformFilterChips",
            "module": "elements/platform-filter-chips.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-filter-chips",
          "declaration": {
            "name": "PlatformFilterChips",
            "module": "elements/platform-filter-chips.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-filter-panel.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformFilterPanel",
          "tagName": "platform-filter-panel",
          "customElement": true,
          "description": "Dynamic filter controls based on field definitions. Renders text/select/boolean inputs.",
          "attributes": [
            {
              "name": "filters",
              "type": {
                "text": "string"
              },
              "fieldName": "filters",
              "description": "Filter definitions: field:Label:type, ... (type: text/select/boolean)",
              "_required": true
            },
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "description": "Entity name for aria labels"
            }
          ],
          "events": [
            {
              "name": "filter-change",
              "type": {
                "text": "CustomEvent<{ filters: Record<string, unknown> }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformFilterPanel",
          "declaration": {
            "name": "PlatformFilterPanel",
            "module": "elements/platform-filter-panel.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-filter-panel",
          "declaration": {
            "name": "PlatformFilterPanel",
            "module": "elements/platform-filter-panel.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-form.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformForm",
          "tagName": "platform-form",
          "customElement": true,
          "description": "Dynamic form with validation, supports create and edit modes.",
          "attributes": [
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "_required": true
            },
            {
              "name": "fields",
              "type": {
                "text": "string"
              },
              "fieldName": "fields",
              "_required": true
            },
            {
              "name": "mode",
              "type": {
                "text": "'create' | 'edit'"
              },
              "fieldName": "mode",
              "default": "'create'"
            },
            {
              "name": "entity-id",
              "type": {
                "text": "string"
              },
              "fieldName": "entityId",
              "description": "Record ID for edit mode"
            },
            {
              "name": "submit-text",
              "type": {
                "text": "string"
              },
              "fieldName": "submitText"
            },
            {
              "name": "cancel-text",
              "type": {
                "text": "string"
              },
              "fieldName": "cancelText",
              "default": "'Cancel'"
            }
          ],
          "events": [
            {
              "name": "form-saved",
              "type": {
                "text": "CustomEvent<{ data, mode }>"
              }
            },
            {
              "name": "cancel",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformForm",
          "declaration": {
            "name": "PlatformForm",
            "module": "elements/platform-form.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-form",
          "declaration": {
            "name": "PlatformForm",
            "module": "elements/platform-form.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-fx-particles.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformFxParticles",
          "tagName": "platform-fx-particles",
          "customElement": true,
          "description": "Lightweight Canvas-based particle FX layer. Used for clap-burst, confetti, and audio-reactive ambient overlays. Performance-budgeted — auto-disables on low-end devices.",
          "attributes": [
            {
              "name": "enabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "enabled",
              "description": "Turn the particle system on/off",
              "default": "'false'"
            },
            {
              "name": "intensity",
              "type": {
                "text": "number"
              },
              "fieldName": "intensity",
              "description": "0 (off) → 1 (max). Drives spawn rate",
              "default": "'0.5'"
            },
            {
              "name": "color",
              "type": {
                "text": "string"
              },
              "fieldName": "color",
              "description": "CSS color for the particles; defaults to theme accent"
            },
            {
              "name": "audio-reactive",
              "type": {
                "text": "boolean"
              },
              "fieldName": "audioReactive",
              "description": "Modulate intensity from audio-level input"
            },
            {
              "name": "audio-level",
              "type": {
                "text": "number"
              },
              "fieldName": "audioLevel",
              "description": "Externally-provided audio level [0..1] when audio-reactive is on"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformFxParticles",
          "declaration": {
            "name": "PlatformFxParticles",
            "module": "elements/platform-fx-particles.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-fx-particles",
          "declaration": {
            "name": "PlatformFxParticles",
            "module": "elements/platform-fx-particles.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-html-sandboxed.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformHtmlSandboxed",
          "tagName": "platform-html-sandboxed",
          "customElement": true,
          "description": "[S506.2] Renders arbitrary HTML inside a locked-down sandboxed iframe (srcdoc). Used by canvas_render to paint Vitto-generated rich artifacts onto the space canvas.",
          "attributes": [
            {
              "name": "html",
              "type": {
                "text": "string"
              },
              "fieldName": "html",
              "description": "Raw HTML string rendered inside the sandboxed iframe via srcdoc.",
              "_required": true
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformHtmlSandboxed",
          "declaration": {
            "name": "PlatformHtmlSandboxed",
            "module": "elements/platform-html-sandboxed.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-html-sandboxed",
          "declaration": {
            "name": "PlatformHtmlSandboxed",
            "module": "elements/platform-html-sandboxed.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-icon-button.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformIconButton",
          "tagName": "platform-icon-button",
          "customElement": true,
          "description": "Compact icon-only button — used in player toolbars, row actions, and dense UI. Supports pressed / disabled states + variant styling.",
          "attributes": [
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon",
              "description": "Icon name (resolved against the SDK ICON_REGISTRY) or raw glyph",
              "_required": true
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "fieldName": "size",
              "description": "Size variant",
              "default": "'md'"
            },
            {
              "name": "variant",
              "type": {
                "text": "'ghost' | 'solid' | 'outline'"
              },
              "fieldName": "variant",
              "description": "Style variant",
              "default": "'ghost'"
            },
            {
              "name": "pressed",
              "type": {
                "text": "boolean"
              },
              "fieldName": "pressed",
              "description": "Toggle-state visual (e.g. play/pause)"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled",
              "description": "Block interaction + dim the icon"
            },
            {
              "name": "aria-label",
              "type": {
                "text": "string"
              },
              "fieldName": "ariaLabel",
              "description": "Screen-reader label (required because the button has no visible text)",
              "_required": true
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformIconButton",
          "declaration": {
            "name": "PlatformIconButton",
            "module": "elements/platform-icon-button.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-icon-button",
          "declaration": {
            "name": "PlatformIconButton",
            "module": "elements/platform-icon-button.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-info-box.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformInfoBox",
          "tagName": "platform-info-box",
          "customElement": true,
          "description": "Contextual info box with icon, title and slotted content. Useful for tips, warnings, and notes.",
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "'info' | 'warning' | 'tip' | 'note'"
              },
              "fieldName": "type",
              "default": "'info'"
            },
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "fieldName": "title",
              "description": "Bold heading inside the box"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformInfoBox",
          "declaration": {
            "name": "PlatformInfoBox",
            "module": "elements/platform-info-box.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-info-box",
          "declaration": {
            "name": "PlatformInfoBox",
            "module": "elements/platform-info-box.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-input.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformInput",
          "tagName": "platform-input",
          "customElement": true,
          "description": "Text input with label, validation, and error display.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "type",
              "type": {
                "text": "'text' | 'email' | 'password' | 'number' | 'url' | 'tel'"
              },
              "fieldName": "type",
              "default": "'text'"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "fieldName": "placeholder"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value"
            },
            {
              "name": "required",
              "type": {
                "text": "boolean"
              },
              "fieldName": "required"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "fieldName": "error"
            }
          ],
          "events": [
            {
              "name": "input-change",
              "type": {
                "text": "CustomEvent<{ name, value }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformInput",
          "declaration": {
            "name": "PlatformInput",
            "module": "elements/platform-input.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-input",
          "declaration": {
            "name": "PlatformInput",
            "module": "elements/platform-input.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-install-banner.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformInstallBanner",
          "tagName": "platform-install-banner",
          "customElement": true,
          "description": "Capacitor-aware install banner — PWA install coaching or native app promo.",
          "attributes": [
            {
              "name": "mode",
              "type": {
                "text": "string"
              },
              "fieldName": "mode"
            },
            {
              "name": "tone",
              "type": {
                "text": "string"
              },
              "fieldName": "tone"
            },
            {
              "name": "app-name",
              "type": {
                "text": "string"
              },
              "fieldName": "appName"
            },
            {
              "name": "app-subtitle",
              "type": {
                "text": "string"
              },
              "fieldName": "appSubtitle"
            },
            {
              "name": "ios-app-url",
              "type": {
                "text": "string"
              },
              "fieldName": "iosAppUrl"
            },
            {
              "name": "android-app-url",
              "type": {
                "text": "string"
              },
              "fieldName": "androidAppUrl"
            },
            {
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "fieldName": "dismissible"
            }
          ],
          "events": [
            {
              "name": "install-clicked",
              "type": {
                "text": "CustomEvent<{}>"
              }
            },
            {
              "name": "native-clicked",
              "type": {
                "text": "CustomEvent<{}>"
              }
            },
            {
              "name": "dismissed",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformInstallBanner",
          "declaration": {
            "name": "PlatformInstallBanner",
            "module": "elements/platform-install-banner.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-install-banner",
          "declaration": {
            "name": "PlatformInstallBanner",
            "module": "elements/platform-install-banner.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-list-reorderable.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformListReorderable",
          "tagName": "platform-list-reorderable",
          "customElement": true,
          "description": "Drag-to-reorder vertical list. Slot-driven (consumer projects rows as children with a stable id attribute). Emits \"reorder\" CustomEvent with detail {ids: string[]} containing the new order.",
          "attributes": [
            {
              "name": "item-id-key",
              "type": {
                "text": "string"
              },
              "fieldName": "itemIdKey",
              "description": "Attribute name on each row that holds the stable id",
              "default": "'data-id'"
            }
          ],
          "events": [
            {
              "name": "reorder",
              "type": {
                "text": "CustomEvent<{ fromId, toId, newIndex, ids: string[] }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformListReorderable",
          "declaration": {
            "name": "PlatformListReorderable",
            "module": "elements/platform-list-reorderable.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-list-reorderable",
          "declaration": {
            "name": "PlatformListReorderable",
            "module": "elements/platform-list-reorderable.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-listener-note.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformListenerNote",
          "tagName": "platform-listener-note",
          "customElement": true,
          "description": "Listener note compose surface.",
          "attributes": [
            {
              "name": "track-id",
              "type": {
                "text": "string"
              },
              "fieldName": "trackId"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "fieldName": "placeholder"
            },
            {
              "name": "max-length",
              "type": {
                "text": "number"
              },
              "fieldName": "maxLength"
            }
          ],
          "events": [
            {
              "name": "note-submit",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformListenerNote",
          "declaration": {
            "name": "PlatformListenerNote",
            "module": "elements/platform-listener-note.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-listener-note",
          "declaration": {
            "name": "PlatformListenerNote",
            "module": "elements/platform-listener-note.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-loading.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformLoading",
          "tagName": "platform-loading",
          "customElement": true,
          "description": "Spinner, skeleton, or dots for async loading states.",
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "'spinner' | 'skeleton' | 'dots'"
              },
              "fieldName": "type",
              "default": "'spinner'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "text",
              "type": {
                "text": "string"
              },
              "fieldName": "text",
              "default": "'Loading...'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformLoading",
          "declaration": {
            "name": "PlatformLoading",
            "module": "elements/platform-loading.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-loading",
          "declaration": {
            "name": "PlatformLoading",
            "module": "elements/platform-loading.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-login.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformLogin",
          "tagName": "platform-login",
          "customElement": true,
          "description": "Self-contained sign-in surface — magic-link email entry + OAuth provider buttons. Resolves the API endpoint from <platform-app api=...>. Emits \"auth-success\" / \"auth-failure\" CustomEvents.",
          "attributes": [
            {
              "name": "provider",
              "type": {
                "text": "string"
              },
              "fieldName": "provider",
              "description": "Optional pre-selected provider id (e.g. \"google\", \"magic-link\")"
            },
            {
              "name": "redirect",
              "type": {
                "text": "string"
              },
              "fieldName": "redirect",
              "description": "Path to redirect to after successful auth"
            },
            {
              "name": "allow-signup",
              "type": {
                "text": "boolean"
              },
              "fieldName": "allowSignup",
              "description": "Show the \"create account\" link alongside sign-in",
              "default": "'true'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformLogin",
          "declaration": {
            "name": "PlatformLogin",
            "module": "elements/platform-login.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-login",
          "declaration": {
            "name": "PlatformLogin",
            "module": "elements/platform-login.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-modal.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformModal",
          "tagName": "platform-modal",
          "customElement": true,
          "description": "Dialog overlay with backdrop blur.",
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "fieldName": "open"
            },
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "fieldName": "title"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg' | 'xl'"
              },
              "fieldName": "size",
              "default": "'md'"
            }
          ],
          "events": [
            {
              "name": "close",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformModal",
          "declaration": {
            "name": "PlatformModal",
            "module": "elements/platform-modal.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-modal",
          "declaration": {
            "name": "PlatformModal",
            "module": "elements/platform-modal.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-pagination.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformPagination",
          "tagName": "platform-pagination",
          "customElement": true,
          "description": "Paginator with page buttons, prev/next, and record range info.",
          "attributes": [
            {
              "name": "total",
              "type": {
                "text": "number"
              },
              "fieldName": "total",
              "description": "Total number of records",
              "_required": true
            },
            {
              "name": "page",
              "type": {
                "text": "number"
              },
              "fieldName": "page",
              "description": "Current page (1-based)",
              "default": "1"
            },
            {
              "name": "page-size",
              "type": {
                "text": "number"
              },
              "fieldName": "pageSize",
              "description": "Records per page",
              "default": "10"
            }
          ],
          "events": [
            {
              "name": "page-change",
              "type": {
                "text": "CustomEvent<{ page: number }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformPagination",
          "declaration": {
            "name": "PlatformPagination",
            "module": "elements/platform-pagination.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-pagination",
          "declaration": {
            "name": "PlatformPagination",
            "module": "elements/platform-pagination.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-progress.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformProgress",
          "tagName": "platform-progress",
          "customElement": true,
          "description": "Linear progress bar with label, percentage, and variants.",
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "fieldName": "value",
              "description": "Progress value 0-100",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label",
              "description": "Label shown above the bar"
            },
            {
              "name": "variant",
              "type": {
                "text": "'primary' | 'success' | 'warning' | 'error'"
              },
              "fieldName": "variant",
              "default": "'primary'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformProgress",
          "declaration": {
            "name": "PlatformProgress",
            "module": "elements/platform-progress.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-progress",
          "declaration": {
            "name": "PlatformProgress",
            "module": "elements/platform-progress.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-room.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformRoom",
          "tagName": "platform-room",
          "customElement": true,
          "description": "[S484.5] Spatial room container — root of a projected spatial scene. Absolutely-positions its children by their x/y/w/h attrs; the scene→CanvasIR projector emits it as the root of every spatial canvas.",
          "attributes": [
            {
              "name": "w",
              "type": {
                "text": "number"
              },
              "fieldName": "w",
              "description": "Room width in scene units (from scene.bounds.w)."
            },
            {
              "name": "h",
              "type": {
                "text": "number"
              },
              "fieldName": "h",
              "description": "Room height in scene units (from scene.bounds.h)."
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformRoom",
          "declaration": {
            "name": "PlatformRoom",
            "module": "elements/platform-room.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-room",
          "declaration": {
            "name": "PlatformRoom",
            "module": "elements/platform-room.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-route.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformRoute",
          "tagName": "platform-route",
          "customElement": true,
          "description": "Route container. Shown/hidden by parent router.",
          "attributes": [
            {
              "name": "path",
              "type": {
                "text": "string"
              },
              "fieldName": "path",
              "description": "URL hash path",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label",
              "description": "Display label in nav",
              "_required": true
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon",
              "description": "Emoji icon for nav tab"
            },
            {
              "name": "default",
              "type": {
                "text": "boolean"
              },
              "fieldName": "default",
              "description": "Default route on load"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformRoute",
          "declaration": {
            "name": "PlatformRoute",
            "module": "elements/platform-route.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-route",
          "declaration": {
            "name": "PlatformRoute",
            "module": "elements/platform-route.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-router.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformRouter",
          "tagName": "platform-router",
          "customElement": true,
          "description": "Hash-based router with auto-generated navigation tabs.",
          "events": [
            {
              "name": "route-change",
              "type": {
                "text": "CustomEvent<{ path: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformRouter",
          "declaration": {
            "name": "PlatformRouter",
            "module": "elements/platform-router.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-router",
          "declaration": {
            "name": "PlatformRouter",
            "module": "elements/platform-router.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-search.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformSearch",
          "tagName": "platform-search",
          "customElement": true,
          "description": "Search input with debounce and clear button.",
          "attributes": [
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "fieldName": "placeholder",
              "default": "'Search...'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value"
            },
            {
              "name": "debounce",
              "type": {
                "text": "number"
              },
              "fieldName": "debounce",
              "default": "300"
            }
          ],
          "events": [
            {
              "name": "search-change",
              "type": {
                "text": "CustomEvent<{ value }>"
              }
            },
            {
              "name": "search-clear",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformSearch",
          "declaration": {
            "name": "PlatformSearch",
            "module": "elements/platform-search.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-search",
          "declaration": {
            "name": "PlatformSearch",
            "module": "elements/platform-search.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-select.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformSelect",
          "tagName": "platform-select",
          "customElement": true,
          "description": "Dropdown with search and optional multi-select.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "options",
              "type": {
                "text": "string"
              },
              "fieldName": "options",
              "description": "Options: value:Label, ...",
              "_required": true
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "fieldName": "multiple"
            },
            {
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "fieldName": "searchable",
              "default": "true"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "fieldName": "placeholder",
              "default": "'Select...'"
            }
          ],
          "events": [
            {
              "name": "select-change",
              "type": {
                "text": "CustomEvent<{ name, value } or { name, values }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformSelect",
          "declaration": {
            "name": "PlatformSelect",
            "module": "elements/platform-select.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-select",
          "declaration": {
            "name": "PlatformSelect",
            "module": "elements/platform-select.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-sidebar.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformSidebar",
          "tagName": "platform-sidebar",
          "customElement": true,
          "description": "Collapsible navigation sidebar with icons and active state.",
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "string"
              },
              "fieldName": "items",
              "description": "Nav items: path:Label:icon, ...",
              "_required": true
            },
            {
              "name": "collapsed",
              "type": {
                "text": "boolean"
              },
              "fieldName": "collapsed",
              "default": "false"
            },
            {
              "name": "active",
              "type": {
                "text": "string"
              },
              "fieldName": "active",
              "description": "Active path"
            }
          ],
          "events": [
            {
              "name": "sidebar-navigate",
              "type": {
                "text": "CustomEvent<{ path: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformSidebar",
          "declaration": {
            "name": "PlatformSidebar",
            "module": "elements/platform-sidebar.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-sidebar",
          "declaration": {
            "name": "PlatformSidebar",
            "module": "elements/platform-sidebar.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-slider.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformSlider",
          "tagName": "platform-slider",
          "customElement": true,
          "description": "Single-thumb range input. Used for seek bars, volume, and any continuous numeric control. Keyboard-navigable; emits \"input\" continuously while dragging and \"change\" on release.",
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "fieldName": "value",
              "description": "Current value (clamped to [min,max])",
              "default": "'0'"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "fieldName": "min",
              "description": "Minimum value",
              "default": "'0'"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "fieldName": "max",
              "description": "Maximum value",
              "default": "'100'"
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              },
              "fieldName": "step",
              "description": "Granularity of value changes",
              "default": "'1'"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled",
              "description": "Block drag + keyboard input"
            },
            {
              "name": "aria-label",
              "type": {
                "text": "string"
              },
              "fieldName": "ariaLabel",
              "description": "Screen-reader label"
            }
          ],
          "events": [
            {
              "name": "input",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              }
            },
            {
              "name": "change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformSlider",
          "declaration": {
            "name": "PlatformSlider",
            "module": "elements/platform-slider.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-slider",
          "declaration": {
            "name": "PlatformSlider",
            "module": "elements/platform-slider.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-stat-card.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformStatCard",
          "tagName": "platform-stat-card",
          "customElement": true,
          "description": "Metric card with value, label, icon, and trend indicator.",
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label",
              "description": "Metric label",
              "_required": true
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value",
              "description": "Metric value (string or number)",
              "_required": true
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "fieldName": "icon",
              "description": "Emoji icon"
            },
            {
              "name": "trend",
              "type": {
                "text": "'up' | 'down' | 'neutral'"
              },
              "fieldName": "trend",
              "default": "'neutral'"
            },
            {
              "name": "trend-value",
              "type": {
                "text": "string"
              },
              "fieldName": "trendValue",
              "description": "Trend label e.g. +12%"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformStatCard",
          "declaration": {
            "name": "PlatformStatCard",
            "module": "elements/platform-stat-card.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-stat-card",
          "declaration": {
            "name": "PlatformStatCard",
            "module": "elements/platform-stat-card.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-status.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformStatus",
          "tagName": "platform-status",
          "customElement": true,
          "description": "Status badge with semantic coloring.",
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "fieldName": "value",
              "_required": true
            },
            {
              "name": "variant",
              "type": {
                "text": "'success' | 'warning' | 'error' | 'info' | 'neutral'"
              },
              "fieldName": "variant"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformStatus",
          "declaration": {
            "name": "PlatformStatus",
            "module": "elements/platform-status.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-status",
          "declaration": {
            "name": "PlatformStatus",
            "module": "elements/platform-status.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-streak-counter.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformStreakCounter",
          "tagName": "platform-streak-counter",
          "customElement": true,
          "description": "Daily streak counter with milestone burst.",
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "fieldName": "value"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "milestone",
              "type": {
                "text": "number"
              },
              "fieldName": "milestone"
            }
          ],
          "events": [
            {
              "name": "streak-bump",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformStreakCounter",
          "declaration": {
            "name": "PlatformStreakCounter",
            "module": "elements/platform-streak-counter.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-streak-counter",
          "declaration": {
            "name": "PlatformStreakCounter",
            "module": "elements/platform-streak-counter.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-table.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformTable",
          "tagName": "platform-table",
          "customElement": true,
          "description": "Interactive data table with sorting, filtering, pagination, and search.",
          "attributes": [
            {
              "name": "entity",
              "type": {
                "text": "string"
              },
              "fieldName": "entity",
              "_required": true
            },
            {
              "name": "columns",
              "type": {
                "text": "string"
              },
              "fieldName": "columns",
              "_required": true
            },
            {
              "name": "sortable",
              "type": {
                "text": "string"
              },
              "fieldName": "sortable"
            },
            {
              "name": "searchable",
              "type": {
                "text": "string"
              },
              "fieldName": "searchable"
            },
            {
              "name": "filterable",
              "type": {
                "text": "string"
              },
              "fieldName": "filterable"
            },
            {
              "name": "actions",
              "type": {
                "text": "string"
              },
              "fieldName": "actions",
              "default": "'create, edit, delete'"
            },
            {
              "name": "page-size",
              "type": {
                "text": "number"
              },
              "fieldName": "pageSize",
              "default": "10"
            },
            {
              "name": "publish-selection",
              "type": {
                "text": "string"
              },
              "fieldName": "publishSelection",
              "description": "EventBus channel for selected row"
            }
          ],
          "events": [
            {
              "name": "row-click",
              "type": {
                "text": "CustomEvent<{ id, entity, data }>"
              }
            },
            {
              "name": "action",
              "type": {
                "text": "CustomEvent<{ action, id?, entity }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformTable",
          "declaration": {
            "name": "PlatformTable",
            "module": "elements/platform-table.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-table",
          "declaration": {
            "name": "PlatformTable",
            "module": "elements/platform-table.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-tabs.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformTabs",
          "tagName": "platform-tabs",
          "customElement": true,
          "description": "Tab strip for content switching with animated underline.",
          "attributes": [
            {
              "name": "tabs",
              "type": {
                "text": "string"
              },
              "fieldName": "tabs",
              "description": "Tab definitions: id:Label, ...",
              "_required": true
            },
            {
              "name": "active",
              "type": {
                "text": "string"
              },
              "fieldName": "active",
              "description": "Active tab ID"
            }
          ],
          "events": [
            {
              "name": "tab-change",
              "type": {
                "text": "CustomEvent<{ tab: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformTabs",
          "declaration": {
            "name": "PlatformTabs",
            "module": "elements/platform-tabs.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-tabs",
          "declaration": {
            "name": "PlatformTabs",
            "module": "elements/platform-tabs.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-tag-group.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformTagGroup",
          "tagName": "platform-tag-group",
          "customElement": true,
          "description": "List of tags with optional remove buttons.",
          "attributes": [
            {
              "name": "tags",
              "type": {
                "text": "string"
              },
              "fieldName": "tags",
              "description": "Comma-separated tag values",
              "_required": true
            },
            {
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "fieldName": "removable",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "tag-remove",
              "type": {
                "text": "CustomEvent<{ tag: string }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformTagGroup",
          "declaration": {
            "name": "PlatformTagGroup",
            "module": "elements/platform-tag-group.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-tag-group",
          "declaration": {
            "name": "PlatformTagGroup",
            "module": "elements/platform-tag-group.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-theme-studio.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformThemeStudio",
          "tagName": "platform-theme-studio",
          "customElement": true,
          "description": "[S522.2] Reusable theme creation + one-click vibe surface. Applies live CSS vars from @theme-system/core and emits events so the HOST owns persistence.",
          "events": [
            {
              "name": "theme-change",
              "type": {
                "text": "CustomEvent<{ doc, scope }>"
              }
            },
            {
              "name": "theme-save",
              "type": {
                "text": "CustomEvent<{ doc, scope }>"
              }
            },
            {
              "name": "theme-reset",
              "type": {
                "text": "CustomEvent<{}>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformThemeStudio",
          "declaration": {
            "name": "PlatformThemeStudio",
            "module": "elements/platform-theme-studio.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-theme-studio",
          "declaration": {
            "name": "PlatformThemeStudio",
            "module": "elements/platform-theme-studio.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-toast.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformToast",
          "tagName": "platform-toast",
          "customElement": true,
          "description": "Auto-dismiss notification stack. Use PlatformToast.show() API."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformToast",
          "declaration": {
            "name": "PlatformToast",
            "module": "elements/platform-toast.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-toast",
          "declaration": {
            "name": "PlatformToast",
            "module": "elements/platform-toast.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-toast-host.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformToastHost",
          "tagName": "platform-toast-host",
          "customElement": true,
          "description": "Auto-mounting toast notification container. Listens for toast events dispatched from anywhere in the document and renders a stack of <platform-toast> instances. Lives ONCE per app — placement in a persistent shell (outside <platform-router>) is required for cross-route toasts to survive navigation.",
          "attributes": [
            {
              "name": "position",
              "type": {
                "text": "'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'"
              },
              "fieldName": "position",
              "description": "Where the toast stack is anchored on the viewport",
              "default": "'bottom-right'"
            },
            {
              "name": "max-stack",
              "type": {
                "text": "number"
              },
              "fieldName": "maxStack",
              "description": "Maximum number of concurrently visible toasts",
              "default": "'5'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformToastHost",
          "declaration": {
            "name": "PlatformToastHost",
            "module": "elements/platform-toast-host.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-toast-host",
          "declaration": {
            "name": "PlatformToastHost",
            "module": "elements/platform-toast-host.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-toggle.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformToggle",
          "tagName": "platform-toggle",
          "customElement": true,
          "description": "On/off toggle switch.",
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "fieldName": "name",
              "_required": true
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "fieldName": "label"
            },
            {
              "name": "checked",
              "type": {
                "text": "boolean"
              },
              "fieldName": "checked"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "disabled"
            }
          ],
          "events": [
            {
              "name": "toggle-change",
              "type": {
                "text": "CustomEvent<{ name, checked }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformToggle",
          "declaration": {
            "name": "PlatformToggle",
            "module": "elements/platform-toggle.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-toggle",
          "declaration": {
            "name": "PlatformToggle",
            "module": "elements/platform-toggle.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/platform-tooltip.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "PlatformTooltip",
          "tagName": "platform-tooltip",
          "customElement": true,
          "description": "CSS-only tooltip shown on hover via ::after pseudo-element. Wraps any child element.",
          "attributes": [
            {
              "name": "text",
              "type": {
                "text": "string"
              },
              "fieldName": "text",
              "description": "Tooltip text",
              "_required": true
            },
            {
              "name": "position",
              "type": {
                "text": "'top' | 'bottom' | 'left' | 'right'"
              },
              "fieldName": "position",
              "default": "'top'"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PlatformTooltip",
          "declaration": {
            "name": "PlatformTooltip",
            "module": "elements/platform-tooltip.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "platform-tooltip",
          "declaration": {
            "name": "PlatformTooltip",
            "module": "elements/platform-tooltip.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "elements/vitto-space.ts",
      "declarations": [
        {
          "kind": "class",
          "name": "VittoSpace",
          "tagName": "vitto-space",
          "customElement": true,
          "description": "[S484.4] IR-rendering space surface — the post-pivot rename of <platform-canvas> (Path-B merge: the canvas IS the space). Listens for pe-webmcp-action verbs (render/append/clear/read), validates IR against the manifest, lazy-defines required tags, and persists last IR to storage. Composes CanvasRenderer + CanvasVerbHandler.",
          "attributes": [
            {
              "name": "api-base",
              "type": {
                "text": "string"
              },
              "fieldName": "apiBase"
            },
            {
              "name": "prewarm-tags",
              "type": {
                "text": "string"
              },
              "fieldName": "prewarmTags"
            },
            {
              "name": "webmcp-enabled",
              "type": {
                "text": "boolean"
              },
              "fieldName": "webmcpEnabled",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "canvas-validation-failed",
              "type": {
                "text": "CustomEvent<{ verb: string; errors: string[] }>"
              }
            },
            {
              "name": "pe-webmcp-reply",
              "type": {
                "text": "CustomEvent<{ ir: CanvasIR | null; subtree?: CanvasNode | null }>"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "VittoSpace",
          "declaration": {
            "name": "VittoSpace",
            "module": "elements/vitto-space.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "vitto-space",
          "declaration": {
            "name": "VittoSpace",
            "module": "elements/vitto-space.ts"
          }
        }
      ]
    }
  ],
  "_actionVerbs": [
    "reload",
    "close",
    "open",
    "toast",
    "navigate",
    "set"
  ]
}