{
  "id": "sudx-shadcn-tailwind-v4",
  "support": {
    "shadcn": "css-variables",
    "tailwind": "v4",
    "themeAttribute": "data-theme",
    "componentSource": "consumer-owned",
    "registry": "deferred"
  },
  "authority": {
    "direction": "sudx-to-consumer",
    "rule": "SUDX tokens, laws, and Stable recipes are authoritative. Consumer component source and product expression stay local."
  },
  "layers": [
    {
      "id": "required-foundation",
      "overridePolicy": "required",
      "owner": "sudx",
      "description": "Tokens, theme activation, accessibility, semantic color, data, and motion law."
    },
    {
      "id": "optional-behavior-families",
      "overridePolicy": "optional-default",
      "owner": "sudx",
      "description": "Copyable behavior contracts that a consumer adopts only when the family is used."
    },
    {
      "id": "product-owned-expression",
      "overridePolicy": "product-owned",
      "owner": "consumer",
      "description": "Component source, composition, density, domain semantics, navigation structure, data presentation, additions, and deviations."
    }
  ],
  "stateVocabulary": {
    "states": [
      "rest",
      "hover",
      "focus-visible",
      "active",
      "disabled",
      "loading",
      "invalid-error"
    ],
    "themes": [
      "light",
      "dark"
    ],
    "motion": [
      "default",
      "reduced"
    ]
  },
  "foundation": {
    "overridePolicy": "required",
    "assets": [
      "sudx-tokens.css",
      "shadcn.json",
      "shadcn.css"
    ],
    "laws": [
      "foundation.md",
      "motion-law.md",
      "chart-law.md",
      "brand-law.md"
    ],
    "radiusBridge": {
      "target": "--radius",
      "source": "--sudx-radius"
    },
    "requirements": [
      "Resolve shared semantics through --sudx-* variables.",
      "Expose the shadcn --radius variable through --sudx-radius.",
      "Use data-theme for explicit light and dark activation.",
      "Preserve SUDX focus, contrast, semantic-color, data-presentation, target-size, and reduced-motion law.",
      "Keep copied component source and runtime dependencies in the consumer."
    ]
  },
  "families": [
    {
      "id": "button",
      "label": "Button",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Keep primary action Ink-led; Brand remains a separate SUDX extension.",
        "Preserve a visible focus ring, 44px minimum target, disabled semantics, and busy announcement when loading."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": true
        },
        "focus-visible": {
          "applicable": true
        },
        "active": {
          "applicable": true
        },
        "disabled": {
          "applicable": true
        },
        "loading": {
          "applicable": true
        },
        "invalid-error": {
          "applicable": false,
          "reason": "A button does not itself carry form validity; its owning form exposes the error."
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": true
        },
        "reduced": {
          "applicable": true
        }
      }
    },
    {
      "id": "form-field",
      "label": "Form Field",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Keep a visible label and associate help or corrective text with the control.",
        "Use aria-invalid only while invalid and never communicate an error by color alone."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": true
        },
        "focus-visible": {
          "applicable": true
        },
        "active": {
          "applicable": false,
          "reason": "Editable fields express engagement through focus rather than a separate active visual contract."
        },
        "disabled": {
          "applicable": true
        },
        "loading": {
          "applicable": true
        },
        "invalid-error": {
          "applicable": true
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": true
        },
        "reduced": {
          "applicable": true
        }
      }
    },
    {
      "id": "panel-card",
      "label": "Panel/Card",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Use a SUDX surface and boundary without prescribing product composition or density.",
        "Interactive-card behavior is a consumer decision and must retain keyboard equivalence."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": false,
          "reason": "A static panel does not imply interactivity; a consumer records hover when it makes a card interactive."
        },
        "focus-visible": {
          "applicable": false,
          "reason": "A static panel is not focusable; focus belongs to real controls or consumer-owned interactive cards."
        },
        "active": {
          "applicable": false,
          "reason": "A static panel has no pressed or selected state."
        },
        "disabled": {
          "applicable": false,
          "reason": "A static panel is not a disableable control."
        },
        "loading": {
          "applicable": true
        },
        "invalid-error": {
          "applicable": true
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": false,
          "reason": "The shared static panel contract introduces no motion."
        },
        "reduced": {
          "applicable": false,
          "reason": "The shared static panel contract introduces no motion to reduce."
        }
      }
    },
    {
      "id": "alert",
      "label": "Alert",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Use role=status for non-blocking updates and role=alert only for urgent errors.",
        "Pair status color with a label or mark; destructive color remains unmapped until SUDX approves that semantic."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": false,
          "reason": "An alert message is not a hover control."
        },
        "focus-visible": {
          "applicable": false,
          "reason": "Focus belongs to actions within an alert, not the alert container."
        },
        "active": {
          "applicable": false,
          "reason": "An alert container has no pressed state."
        },
        "disabled": {
          "applicable": false,
          "reason": "An alert message is not disableable."
        },
        "loading": {
          "applicable": false,
          "reason": "Progress feedback is a separate status instance rather than an alert loading state."
        },
        "invalid-error": {
          "applicable": true
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": false,
          "reason": "The shared alert contract introduces no motion."
        },
        "reduced": {
          "applicable": false,
          "reason": "The shared alert contract introduces no motion to reduce."
        }
      }
    },
    {
      "id": "navigation",
      "label": "Navigation",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Expose current location semantically and preserve keyboard order and focus visibility.",
        "Navigation structure, information architecture, density, and responsive composition remain product-owned."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": true
        },
        "focus-visible": {
          "applicable": true
        },
        "active": {
          "applicable": true
        },
        "disabled": {
          "applicable": true
        },
        "loading": {
          "applicable": false,
          "reason": "Route progress is product-owned feedback, not a shared navigation-item state."
        },
        "invalid-error": {
          "applicable": false,
          "reason": "A navigation item does not carry form validity or error state."
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": true
        },
        "reduced": {
          "applicable": true
        }
      }
    },
    {
      "id": "theme-toggle",
      "label": "Theme Toggle",
      "overridePolicy": "optional-default",
      "copyable": true,
      "sourceOwnership": "consumer",
      "contract": [
        "Expose the resolved theme through data-theme and communicate the control state with aria-pressed.",
        "The icon communicates the theme the next press delivers; reduced motion removes its sweep without hiding the state change."
      ],
      "states": {
        "rest": {
          "applicable": true
        },
        "hover": {
          "applicable": true
        },
        "focus-visible": {
          "applicable": true
        },
        "active": {
          "applicable": true
        },
        "disabled": {
          "applicable": true
        },
        "loading": {
          "applicable": false,
          "reason": "Theme resolution is local and synchronous; the shared toggle has no loading state."
        },
        "invalid-error": {
          "applicable": false,
          "reason": "A theme choice has no validity state."
        }
      },
      "themes": {
        "light": {
          "applicable": true
        },
        "dark": {
          "applicable": true
        }
      },
      "motion": {
        "default": {
          "applicable": true
        },
        "reduced": {
          "applicable": true
        }
      }
    }
  ],
  "roles": [
    {
      "id": "background",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-background",
      "dark": "--sudx-background"
    },
    {
      "id": "foreground",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "card",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "panel-card",
      "light": "--sudx-surface",
      "dark": "--sudx-surface"
    },
    {
      "id": "card-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "panel-card",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "popover",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "panel-card",
      "light": "--sudx-surface",
      "dark": "--sudx-surface"
    },
    {
      "id": "popover-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "panel-card",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "primary",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "primary-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-background",
      "dark": "--sudx-background"
    },
    {
      "id": "secondary",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-surface",
      "dark": "--sudx-surface"
    },
    {
      "id": "secondary-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "muted",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-surface-quiet",
      "dark": "--sudx-surface-quiet"
    },
    {
      "id": "muted-foreground",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-text-muted",
      "dark": "--sudx-text-muted"
    },
    {
      "id": "accent",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-accent-well",
      "dark": "--sudx-accent-well"
    },
    {
      "id": "accent-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "button",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "destructive",
      "disposition": "unmapped",
      "overridePolicy": "optional-default",
      "owner": "alert",
      "reason": "SUDX has no approved generic destructive semantic; cost-up and warning must not be repurposed as destructive."
    },
    {
      "id": "destructive-foreground",
      "disposition": "unmapped",
      "overridePolicy": "optional-default",
      "owner": "alert",
      "reason": "No destructive surface is mapped, so its paired foreground must be chosen and verified by the consumer."
    },
    {
      "id": "border",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-border",
      "dark": "--sudx-border"
    },
    {
      "id": "input",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "form-field",
      "light": "--sudx-border",
      "dark": "--sudx-border"
    },
    {
      "id": "ring",
      "disposition": "mapped",
      "overridePolicy": "required",
      "owner": "required-foundation",
      "light": "--sudx-accent",
      "dark": "--sudx-accent"
    },
    {
      "id": "chart-1",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "owner": "product-owned-expression",
      "reason": "Chart series color depends on product data semantics and the SUDX data law."
    },
    {
      "id": "chart-2",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "owner": "product-owned-expression",
      "reason": "Chart series color depends on product data semantics and the SUDX data law."
    },
    {
      "id": "chart-3",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "owner": "product-owned-expression",
      "reason": "Chart series color depends on product data semantics and the SUDX data law."
    },
    {
      "id": "chart-4",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "owner": "product-owned-expression",
      "reason": "Chart series color depends on product data semantics and the SUDX data law."
    },
    {
      "id": "chart-5",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "owner": "product-owned-expression",
      "reason": "Chart series color depends on product data semantics and the SUDX data law."
    },
    {
      "id": "sidebar",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-sidebar",
      "dark": "--sudx-sidebar"
    },
    {
      "id": "sidebar-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "sidebar-primary",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "sidebar-primary-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-background",
      "dark": "--sudx-background"
    },
    {
      "id": "sidebar-accent",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-accent-well",
      "dark": "--sudx-accent-well"
    },
    {
      "id": "sidebar-accent-foreground",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-text",
      "dark": "--sudx-text"
    },
    {
      "id": "sidebar-border",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-border",
      "dark": "--sudx-border"
    },
    {
      "id": "sidebar-ring",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "owner": "navigation",
      "light": "--sudx-accent",
      "dark": "--sudx-accent"
    }
  ],
  "extensionRoles": [
    {
      "id": "brand",
      "namespace": "--sudx-accent",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "reason": "Brand Clay stays distinct from shadcn primary."
    },
    {
      "id": "cost-up",
      "namespace": "--sudx-cost-up",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "reason": "Directional cost semantics remain explicit SUDX extensions."
    },
    {
      "id": "cost-down",
      "namespace": "--sudx-cost-down",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "reason": "Directional cost semantics remain explicit SUDX extensions."
    },
    {
      "id": "warning",
      "namespace": "--sudx-warning",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "reason": "Warning remains separate from destructive and directional roles."
    },
    {
      "id": "projected",
      "namespace": "--sudx-projected",
      "disposition": "mapped",
      "overridePolicy": "optional-default",
      "reason": "Projection semantics stay explicit and are never forced onto chart slots."
    },
    {
      "id": "trade",
      "namespace": "--product-trade-*",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "reason": "Trade semantics belong to products that model trades."
    },
    {
      "id": "data",
      "namespace": "--product-data-*",
      "disposition": "consumer-local",
      "overridePolicy": "product-owned",
      "reason": "Series and data-category semantics follow the consumer domain and SUDX data law."
    }
  ],
  "copySets": {
    "requiredFoundation": {
      "overridePolicy": "required",
      "assets": [
        "sudx-tokens.css",
        "shadcn.json",
        "shadcn.css"
      ]
    },
    "optionalRecipes": {
      "overridePolicy": "optional-default",
      "assetsByFamily": {
        "button": [
          "recipes/button.html",
          "recipes/recipes.css"
        ],
        "form-field": [
          "recipes/form-control.html",
          "recipes/recipes.css"
        ],
        "theme-toggle": [
          "recipes/theme-toggle.html",
          "recipes/recipes.css"
        ]
      },
      "contractOnlyFamilies": [
        "panel-card",
        "alert",
        "navigation"
      ]
    },
    "attestationEvidence": {
      "overridePolicy": "product-owned",
      "asset": "shadcn-evidence.json",
      "copyable": false,
      "reason": "Central proof describes exact consumer commits; adopters create their own local adoption and evidence records."
    }
  },
  "consumerRecord": {
    "required": [
      "foundation",
      "adoptedFamilies",
      "localExtensions",
      "acceptedDeviations",
      "verificationEvidence"
    ],
    "rules": [
      "Adopt any subset of optional families.",
      "Claim compatibility only for adopted families after consumer-owned verification.",
      "Record additions and deviations locally without changing the copied normative assets."
    ]
  }
}
