const UTILITY_NAMES = [
  // Container-query marker (`@container`, `@container/{name}`). The `@sm:`/`@md:`
  // query variants are handled as modifiers, not utilities.
  "@container",
  "absolute",
  "accent",
  "align-baseline",
  "align-bottom",
  "align-middle",
  "align-sub",
  "align-super",
  "align-text-bottom",
  "align-text-top",
  "align-top",
  "animate",
  "appearance",
  "aspect",
  "auto-cols",
  "auto-rows",
  "backdrop-blur",
  "backdrop-brightness",
  "backdrop-contrast",
  "backdrop-filter",
  "backdrop-grayscale",
  "backdrop-hue-rotate",
  "backdrop-invert",
  "backdrop-opacity",
  "backdrop-saturate",
  "backdrop-sepia",
  "basis",
  "bg",
  "bg-attachment",
  "bg-blend",
  "bg-clip",
  "bg-origin",
  "bg-position",
  "bg-repeat",
  "bg-size",
  "block",
  "blur",
  "border",
  "border-b",
  "border-collapse",
  "border-dashed",
  "border-dotted",
  "border-double",
  "border-e",
  "border-hidden",
  "border-l",
  "border-none",
  "border-r",
  "border-s",
  "border-spacing",
  "border-spacing-x",
  "border-spacing-y",
  "border-solid",
  "border-t",
  "border-x",
  "border-y",
  "bottom",
  "box-border",
  "box-content",
  "box-decoration-clone",
  "box-decoration-slice",
  "break-after",
  "break-before",
  "break-inside",
  "break-normal",
  "break-words",
  "brightness",
  "caption-bottom",
  "caption-top",
  "caret",
  "clear",
  "col",
  "col-end",
  "col-span",
  "col-start",
  "collapse",
  "container",
  "content",
  "contents",
  "contrast",
  "cursor",
  "decoration",
  "decoration-dashed",
  "decoration-dotted",
  "decoration-double",
  "decoration-solid",
  "decoration-wavy",
  "delay",
  "diagonal-fractions",
  "divide",
  "divide-dashed",
  "divide-dotted",
  "divide-double",
  "divide-solid",
  "divide-x",
  "divide-y",
  "duration",
  "ease",
  "end",
  "field-sizing",
  "fill",
  "filter",
  "fixed",
  "flex",
  "flex-1",
  "flex-auto",
  "flex-col",
  "flex-col-reverse",
  "flex-initial",
  "flex-none",
  "flex-nowrap",
  "flex-row",
  "flex-row-reverse",
  "flex-wrap",
  "flex-wrap-reverse",
  "float",
  "flow-root",
  "font",
  "forced-color-adjust",
  "from",
  "gap",
  "gap-x",
  "gap-y",
  "grid",
  "grid-cols",
  "grid-flow",
  "grid-rows",
  "grayscale",
  // Group/peer marker classes, including named variants (`group/{name}`,
  // `peer/{name}`); the `/{name}` is treated as an opacity-like suffix and
  // discarded, which is fine — the marker carries no token.
  "group",
  "grow",
  "h",
  "hidden",
  "hue-rotate",
  "hyphens",
  "indent",
  "inline",
  "inline-block",
  "inline-flex",
  "inline-grid",
  "inline-table",
  "inset",
  "inset-x",
  "inset-y",
  "invert",
  "isolate",
  "isolation-auto",
  "italic",
  "items",
  "justify",
  "justify-items",
  "justify-self",
  "leading",
  "left",
  "line-clamp",
  "line-through",
  "list",
  "list-decimal",
  "list-disc",
  "list-image",
  "list-inside",
  "list-none",
  "list-outside",
  "m",
  "max-h",
  "max-w",
  "mb",
  "me",
  "min-h",
  "min-w",
  "mix-blend",
  "ml",
  "mr",
  "ms",
  "mt",
  "mx",
  "my",
  "no-underline",
  "normal-case",
  "normal-nums",
  "not-italic",
  "object",
  "object-bottom",
  "object-center",
  "object-contain",
  "object-cover",
  "object-fill",
  "object-left",
  "object-left-bottom",
  "object-left-top",
  "object-none",
  "object-right",
  "object-right-bottom",
  "object-right-top",
  "object-scale-down",
  "object-top",
  "opacity",
  "order",
  "origin",
  "outline",
  "outline-dashed",
  "outline-dotted",
  "outline-double",
  "outline-hidden",
  "outline-none",
  "outline-offset",
  "outline-solid",
  "overflow",
  "overflow-auto",
  "overflow-clip",
  "overflow-hidden",
  "overflow-scroll",
  "overflow-visible",
  "overflow-x",
  "overflow-y",
  "overscroll",
  "overscroll-x",
  "overscroll-y",
  "p",
  "pb",
  "pe",
  "peer",
  "place-content",
  "place-items",
  "place-self",
  "pl",
  "placeholder",
  "pointer-events-auto",
  "pointer-events-none",
  "pr",
  "ps",
  "pt",
  "px",
  "py",
  "relative",
  "resize",
  "resize-none",
  "resize-x",
  "resize-y",
  "right",
  "ring",
  "ring-inset",
  "ring-offset",
  "rotate",
  "rounded",
  "rounded-b",
  "rounded-bl",
  "rounded-br",
  "rounded-e",
  "rounded-ee",
  "rounded-es",
  "rounded-l",
  "rounded-r",
  "rounded-s",
  "rounded-se",
  "rounded-ss",
  "rounded-t",
  "rounded-tl",
  "rounded-tr",
  "rounded-x",
  "rounded-y",
  "row",
  "row-end",
  "row-span",
  "row-start",
  "saturate",
  "scale",
  "scale-x",
  "scale-y",
  "scroll",
  "scroll-auto",
  "scroll-m",
  "scroll-mb",
  "scroll-me",
  "scroll-ml",
  "scroll-mr",
  "scroll-ms",
  "scroll-mt",
  "scroll-mx",
  "scroll-my",
  "scroll-p",
  "scroll-pb",
  "scroll-pe",
  "scroll-pl",
  "scroll-pr",
  "scroll-ps",
  "scroll-pt",
  "scroll-px",
  "scroll-py",
  "select",
  "self",
  "sepia",
  "shadow",
  "shadow-inner",
  "shrink",
  "size",
  "skew",
  "skew-x",
  "skew-y",
  "space-x",
  "space-y",
  "sr-only",
  "start",
  "static",
  "sticky",
  "stroke",
  "stroke-none",
  "subpixel-antialiased",
  "table",
  "table-auto",
  "table-caption",
  "table-cell",
  "table-column",
  "table-column-group",
  "table-fixed",
  "table-footer-group",
  "table-header-group",
  "table-row",
  "table-row-group",
  "tabular-nums",
  "text",
  "text-balance",
  "text-center",
  "text-clip",
  "text-ellipsis",
  "text-end",
  "text-justify",
  "text-left",
  "text-nowrap",
  "text-pretty",
  "text-right",
  "text-start",
  "text-wrap",
  "to",
  "top",
  "touch",
  "tracking",
  "transform",
  "transform-cpu",
  "transform-gpu",
  "transform-none",
  "transition",
  "transition-all",
  "transition-colors",
  "transition-discrete",
  "transition-none",
  "transition-opacity",
  "transition-shadow",
  "transition-transform",
  "translate",
  "translate-x",
  "translate-y",
  "truncate",
  "underline",
  "underline-offset",
  "uppercase",
  "via",
  "visible",
  "w",
  "whitespace",
  "will-change",
  "wrap",
  "z",
] as const;

export const TAILWIND_UTILITY_NAMES: ReadonlySet<string> = new Set(UTILITY_NAMES);

export const TAILWIND_UTILITY_NAMES_LONGEST_FIRST = Object.freeze(
  [...TAILWIND_UTILITY_NAMES].sort((a, b) => b.length - a.length),
);
