{
  "id": "entity-modal",
  "name": "EntityModal",
  "kind": "component",
  "status": "draft-stable",
  "summary": "Dark glass edit/create modal used for services, clients, users, and groups.",
  "sourceRefs": [
    {
      "project": "nodedc_launcher",
      "file": "src/widgets/admin-overlay/AdminOverlay.tsx",
      "functions": ["ServiceContentModal", "ClientEditorModal", "UserEditorModal", "GroupEditorModal", "EntityModalHead", "EntityModalFoot"]
    },
    {
      "project": "nodedc_launcher",
      "file": "src/styles/globals.css",
      "classes": ["service-content-modal-layer", "service-content-modal", "service-content-field"]
    },
    {
      "project": "nodedc_taskmanager",
      "file": "plane-src/apps/web/styles/globals.css",
      "classes": ["nodedc-glass-modal", "nodedc-modal-input", "nodedc-modal-editor", "nodedc-modal-primary-button"]
    }
  ],
  "anatomy": [
    "fixed overlay layer",
    "modal shell",
    "head with eyebrow/title/close circle",
    "scrollable responsive grid",
    "fields",
    "footer with cancel, optional delete, save"
  ],
  "visualContract": {
    "shellWidth": "min(58rem, viewport - 2.8rem)",
    "radius": "modal",
    "background": "dark matte glass",
    "blur": "modal",
    "fieldRadius": "1rem to 1.25rem",
    "footerButtonHeight": "2.75rem"
  },
  "rules": [
    "Delete is left of Save inside the right footer action group.",
    "Footer buttons use the shared Button primitive with surface='modal'.",
    "Inline delete buttons inside edit modals use Button variant='danger' surface='modal', stay transparent until hover, and do not use red danger fills.",
    "Save uses Button variant='accent' surface='modal' with local white launcher accent and computed on-accent text.",
    "Cancel stays on the left.",
    "Close action is circular and transparent until hover.",
    "Fields/selects/textareas share the same glass family."
  ]
}
